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 };