import React from 'react' import PropTypes from 'prop-types' import { useDispatch } from 'react-redux' import { Button, sanitizeListRestProps, TopToolbar, useRecordContext, useTranslate, } from 'react-admin' import { useMediaQuery, makeStyles } from '@material-ui/core' import PlayArrowIcon from '@material-ui/icons/PlayArrow' import ShuffleIcon from '@material-ui/icons/Shuffle' import CloudDownloadOutlinedIcon from '@material-ui/icons/CloudDownloadOutlined' import { RiPlayListAddFill, RiPlayList2Fill } from 'react-icons/ri' import PlaylistAddIcon from '@material-ui/icons/PlaylistAdd' import ShareIcon from '@material-ui/icons/Share' import { playNext, addTracks, playTracks, shuffleTracks, openAddToPlaylist, openDownloadMenu, DOWNLOAD_MENU_ALBUM, openShareMenu, } from '../actions' import { formatBytes } from '../utils' import config from '../config' import { ToggleFieldsMenu } from '../common' const useStyles = makeStyles({ toolbar: { display: 'flex', justifyContent: 'space-between', width: '100%' }, }) const AlbumButton = ({ children, ...rest }) => { const record = useRecordContext(rest) || {} return ( {children} ) } const AlbumActions = ({ className, ids, data, record, permanentFilter, ...rest }) => { const dispatch = useDispatch() const translate = useTranslate() const classes = useStyles() const isDesktop = useMediaQuery((theme) => theme.breakpoints.up('md')) const isNotSmall = useMediaQuery((theme) => theme.breakpoints.up('sm')) const handlePlay = React.useCallback(() => { dispatch(playTracks(data, ids)) }, [dispatch, data, ids]) const handlePlayNext = React.useCallback(() => { dispatch(playNext(data, ids)) }, [dispatch, data, ids]) const handlePlayLater = React.useCallback(() => { dispatch(addTracks(data, ids)) }, [dispatch, data, ids]) const handleShuffle = React.useCallback(() => { dispatch(shuffleTracks(data, ids)) }, [dispatch, data, ids]) const handleAddToPlaylist = React.useCallback(() => { const selectedIds = ids.filter((id) => !data[id].missing) dispatch(openAddToPlaylist({ selectedIds })) }, [dispatch, data, ids]) const handleShare = React.useCallback(() => { dispatch(openShareMenu([record.id], 'album', record.name)) }, [dispatch, record]) const handleDownload = React.useCallback(() => { dispatch(openDownloadMenu(record, DOWNLOAD_MENU_ALBUM)) }, [dispatch, record]) return ( {config.enableSharing && ( )} {config.enableDownloads && ( )} {isNotSmall && } ) } AlbumActions.propTypes = { record: PropTypes.object.isRequired, selectedIds: PropTypes.arrayOf(PropTypes.number), } AlbumActions.defaultProps = { record: {}, selectedIds: [], } export default AlbumActions