import React, { useState, createElement } from 'react' import { useSelector } from 'react-redux' import { useMediaQuery } from '@material-ui/core' import { useTranslate, MenuItemLink, getResources } from 'react-admin' import { withRouter } from 'react-router-dom' import LibraryMusicIcon from '@material-ui/icons/LibraryMusic' import SettingsIcon from '@material-ui/icons/Settings' import ViewListIcon from '@material-ui/icons/ViewList' import SubMenu from './SubMenu' import inflection from 'inflection' import PersonalMenu from './PersonalMenu' 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, logout }) => { const isXsmall = useMediaQuery((theme) => theme.breakpoints.down('xs')) const open = useSelector((state) => state.admin.ui.sidebarOpen) const translate = useTranslate() const resources = useSelector(getResources) // TODO State is not persisted in mobile when you close the sidebar menu. Move to redux? const [state, setState] = useState({ menuLibrary: true, menuSettings: false, }) const handleToggle = (menu) => { setState((state) => ({ ...state, [menu]: !state[menu] })) } const renderMenuItemLink = (resource) => ( } onClick={onMenuClick} sidebarIsOpen={open} dense={dense} /> ) const subItems = (subMenu) => (resource) => resource.hasList && resource.options && resource.options.subMenu === subMenu return (
handleToggle('menuLibrary')} isOpen={state.menuLibrary} sidebarIsOpen={open} name="menu.library" icon={} dense={dense} > {resources.filter(subItems('library')).map(renderMenuItemLink)} handleToggle('menuSettings')} isOpen={state.menuSettings} sidebarIsOpen={open} name="menu.settings" icon={} dense={dense} > {resources.filter(subItems('settings')).map(renderMenuItemLink)} {resources.filter(subItems(undefined)).map(renderMenuItemLink)} {isXsmall && logout}
) } export default withRouter(Menu)