import React, { useCallback } from 'react' import { MenuItemLink, useDataProvider, useNotify, useQueryWithStore, } from 'react-admin' import { useHistory } from 'react-router-dom' import QueueMusicIcon from '@material-ui/icons/QueueMusic' import { Typography } from '@material-ui/core' import QueueMusicOutlinedIcon from '@material-ui/icons/QueueMusicOutlined' import { BiCog } from 'react-icons/all' import { useDrop } from 'react-dnd' import SubMenu from './SubMenu' import { isWritable } from '../common' import { DraggableTypes, MAX_SIDEBAR_PLAYLISTS } from '../consts' const PlaylistMenuItemLink = ({ pls, sidebarIsOpen }) => { const dataProvider = useDataProvider() const notify = useNotify() const [, dropRef] = useDrop(() => ({ accept: isWritable(pls.owner) ? DraggableTypes.ALL : [], drop: (item) => dataProvider .addToPlaylist(pls.id, item) .then((res) => { notify('message.songsAddedToPlaylist', 'info', { smart_count: res.data?.added, }) }) .catch(() => { notify('ra.page.error', 'warning') }), })) return ( {pls.name} } sidebarIsOpen={sidebarIsOpen} dense={false} /> ) } const PlaylistsSubMenu = ({ state, setState, sidebarIsOpen, dense }) => { const history = useHistory() const { data, loaded } = useQueryWithStore({ type: 'getList', resource: 'playlist', payload: { pagination: { page: 0, perPage: MAX_SIDEBAR_PLAYLISTS, }, sort: { field: 'name' }, }, }) const handleToggle = (menu) => { setState((state) => ({ ...state, [menu]: !state[menu] })) } const renderPlaylistMenuItemLink = (pls) => ( ) const user = localStorage.getItem('username') const myPlaylists = [] const sharedPlaylists = [] if (loaded) { const allPlaylists = Object.keys(data).map((id) => data[id]) allPlaylists.forEach((pls) => { if (user === pls.owner) { myPlaylists.push(pls) } else { sharedPlaylists.push(pls) } }) } const onPlaylistConfig = useCallback( () => history.push('/playlist'), [history] ) return ( <> handleToggle('menuPlaylists')} isOpen={state.menuPlaylists} sidebarIsOpen={sidebarIsOpen} name={'menu.playlists'} icon={} dense={dense} actionIcon={} onAction={onPlaylistConfig} > {myPlaylists.map(renderPlaylistMenuItemLink)} {sharedPlaylists?.length > 0 && ( handleToggle('menuSharedPlaylists')} isOpen={state.menuSharedPlaylists} sidebarIsOpen={sidebarIsOpen} name={'menu.sharedPlaylists'} icon={} dense={dense} > {sharedPlaylists.map(renderPlaylistMenuItemLink)} )} ) } export default PlaylistsSubMenu