import * as React from 'react'; import PropTypes from 'prop-types'; import { useTheme } from '@mui/material/styles'; import Toolbar from '@mui/material/Toolbar'; import List from '@mui/material/List'; import Divider from '@mui/material/Divider'; import useMediaQuery from '@mui/material/useMediaQuery'; import Badge from '@mui/material/Badge'; import ListItemLink from 'components/ListItemLink'; import useFormatMessage from 'hooks/useFormatMessage'; import { Drawer as BaseDrawer } from './style'; const iOS = typeof navigator !== 'undefined' && /iPad|iPhone|iPod/.test(navigator.userAgent); function Drawer(props) { const { links = [], bottomLinks = [], ...drawerProps } = props; const theme = useTheme(); const matchSmallScreens = useMediaQuery(theme.breakpoints.down('md')); const formatMessage = useFormatMessage(); const closeOnClick = (event) => { if (matchSmallScreens) { props.onClose(event); } }; return ( {/* keep the following encapsulating `div` to have `space-between` children */}
{links.map(({ Icon, primary, to, dataTest }, index) => ( } primary={formatMessage(primary)} to={to} onClick={closeOnClick} data-test={dataTest} /> ))}
{bottomLinks.map( ({ Icon, badgeContent, primary, to, dataTest, target }, index) => ( } primary={primary} to={to} onClick={closeOnClick} target={target} data-test={dataTest} /> ), )}
); } const DrawerLinkPropTypes = PropTypes.shape({ Icon: PropTypes.elementType.isRequired, primary: PropTypes.string.isRequired, to: PropTypes.string.isRequired, target: PropTypes.oneOf(['_blank']), badgeContent: PropTypes.node, dataTest: PropTypes.string, }); Drawer.propTypes = { links: PropTypes.arrayOf(DrawerLinkPropTypes).isRequired, bottomLinks: PropTypes.arrayOf(DrawerLinkPropTypes), onClose: PropTypes.func.isRequired, }; export default Drawer;