import PropTypes from 'prop-types'; import { Activity, useEffect, useRef, useState } from 'react'; import { useLocation } from 'react-router-dom'; // material-ui import { useTheme } from '@mui/material/styles'; import ClickAwayListener from '@mui/material/ClickAwayListener'; import Collapse from '@mui/material/Collapse'; import List from '@mui/material/List'; import ListItemButton from '@mui/material/ListItemButton'; import ListItemIcon from '@mui/material/ListItemIcon'; import ListItemText from '@mui/material/ListItemText'; import Paper from '@mui/material/Paper'; import Popper from '@mui/material/Popper'; import Tooltip from '@mui/material/Tooltip'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; // project imports import NavItem from '../NavItem'; import Transitions from 'ui-component/extended/Transitions'; import { useGetMenuMaster } from 'api/menu'; import useConfig from 'hooks/useConfig'; import useMenuCollapse from 'hooks/useMenuCollapse'; // assets import { IconChevronDown, IconChevronRight, IconChevronUp } from '@tabler/icons-react'; import FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord'; export default function NavCollapse({ menu, level, parentId }) { const theme = useTheme(); const ref = useRef(null); const { state: { borderRadius } } = useConfig(); const { menuMaster } = useGetMenuMaster(); const drawerOpen = menuMaster.isDashboardDrawerOpened; const [open, setOpen] = useState(false); const [selected, setSelected] = useState(null); const [anchorEl, setAnchorEl] = useState(null); const handleClickMini = (event) => { setAnchorEl(null); if (drawerOpen) { setOpen(!open); setSelected(!selected ? menu.id : null); } else { setAnchorEl(event?.currentTarget); } }; const openMini = Boolean(anchorEl); const handleMiniClose = () => { setAnchorEl(null); }; const handleClosePopper = () => { setOpen(false); if (!openMini) { if (!menu.url) { setSelected(null); } } setAnchorEl(null); }; const { pathname } = useLocation(); // menu collapse for sub-levels useMenuCollapse(menu, pathname, openMini, setSelected, setOpen, setAnchorEl); const [hoverStatus, setHover] = useState(false); const compareSize = () => { const compare = ref.current && ref.current.scrollWidth > ref.current.clientWidth; setHover(compare); }; useEffect(() => { compareSize(); window.addEventListener('resize', compareSize); window.removeEventListener('resize', compareSize); }, []); useEffect(() => { if (menu.url === pathname) { setSelected(menu.id); setAnchorEl(null); setOpen(true); } }, [pathname, menu]); // menu collapse & item const menus = menu.children?.map((item) => { switch (item.type) { case 'collapse': return ; case 'item': return ; default: return ( Menu Items Error ); } }); const isSelected = selected === menu.id; const Icon = menu.icon; const menuIcon = menu.icon ? ( ) : ( 0 ? 'inherit' : 'medium'} /> ); const collapseIcon = drawerOpen ? ( ) : ( ); return ( <> {menuIcon} {(drawerOpen || (!drawerOpen && level !== 1)) && ( {menu.title} } secondary={ menu.caption && ( {menu.caption} ) } /> )} {openMini || open ? collapseIcon : } {({ TransitionProps }) => ( {menus} )} {menus} ); } NavCollapse.propTypes = { menu: PropTypes.any, level: PropTypes.number, parentId: PropTypes.string };