import React, { useState } from 'react' import { useSelector } from 'react-redux' import { makeStyles } from '@material-ui/core' import { useTranslate, MenuItemLink, getResources } from 'react-admin' import { withRouter } from 'react-router-dom' import ViewListIcon from '@material-ui/icons/ViewList' import AlbumIcon from '@material-ui/icons/Album' import SubMenu from './SubMenu' import inflection from 'inflection' import albumLists from '../album/albumLists' import { HelpDialog } from '../dialogs' const useStyles = makeStyles((theme) => ({ active: { color: theme.palette.text.primary, fontWeight: 'bold', }, })) const translatedResourceName = (resource, translate) => translate(`resources.${resource.name}.name`, { smart_count: 2, _: resource.options && resource.options.label ? translate(resource.options.label, { smart_count: 2, _: resource.options.label, }) : inflection.humanize(inflection.pluralize(resource.name)), }) const Menu = ({ onMenuClick, dense }) => { const open = useSelector((state) => state.admin.ui.sidebarOpen) const translate = useTranslate() const classes = useStyles() const resources = useSelector(getResources) // TODO State is not persisted in mobile when you close the sidebar menu. Move to redux? const [state, setState] = useState({ menuAlbumList: true, menuLibrary: true, menuSettings: false, }) const handleToggle = (menu) => { setState((state) => ({ ...state, [menu]: !state[menu] })) } const renderResourceMenuItemLink = (resource) => ( } onClick={onMenuClick} sidebarIsOpen={open} dense={dense} /> ) const renderAlbumMenuItemLink = (type, al) => { const resource = resources.find((r) => r.name === 'album') if (!resource) { return null } const albumListAddress = `/album/${type}` const name = translate(`resources.album.lists.${type || 'default'}`, { _: translatedResourceName(resource, translate), }) return ( } onClick={onMenuClick} sidebarIsOpen={open} dense={dense} exact /> ) } const subItems = (subMenu) => (resource) => resource.hasList && resource.options && resource.options.subMenu === subMenu return (
handleToggle('menuAlbumList')} isOpen={state.menuAlbumList} sidebarIsOpen={open} name="menu.albumList" icon={} dense={dense} > {Object.keys(albumLists).map((type) => renderAlbumMenuItemLink(type, albumLists[type]) )} {resources.filter(subItems(undefined)).map(renderResourceMenuItemLink)}
) } export default withRouter(Menu)