AbdulElahGwaith's picture
Upload folder using huggingface_hub
95b5a04 verified
import PropTypes from 'prop-types';
import { Activity, useEffect, useState } from 'react';
import { matchPath, useLocation } from 'react-router-dom';
// material-ui
import Divider from '@mui/material/Divider';
import List from '@mui/material/List';
import Typography from '@mui/material/Typography';
// project imports
import NavCollapse from '../NavCollapse';
import NavItem from '../NavItem';
import { useGetMenuMaster } from 'api/menu';
// ==============================|| SIDEBAR MENU LIST GROUP ||============================== //
export default function NavGroup({ item, lastItem, remItems, lastItemId, setSelectedID }) {
const { pathname } = useLocation();
const { menuMaster } = useGetMenuMaster();
const drawerOpen = menuMaster.isDashboardDrawerOpened;
const [anchorEl, setAnchorEl] = useState(null);
const [currentItem, setCurrentItem] = useState(item);
const openMini = Boolean(anchorEl);
useEffect(() => {
if (lastItem) {
if (item.id === lastItemId) {
const localItem = { ...item };
const elements = remItems.map((ele) => ele.elements);
localItem.children = elements.flat(1);
setCurrentItem(localItem);
} else {
setCurrentItem(item);
}
}
}, [item, lastItem, remItems, lastItemId]);
const checkOpenForParent = (child, id) => {
child.forEach((ele) => {
if (ele.children?.length) {
checkOpenForParent(ele.children, currentItem.id);
}
if (ele?.url && !!matchPath({ path: ele?.link ? ele.link : ele.url, end: true }, pathname)) {
setSelectedID(id);
}
});
};
const checkSelectedOnload = (data) => {
const childrens = data.children ? data.children : [];
childrens.forEach((itemCheck) => {
if (itemCheck?.children?.length) {
checkOpenForParent(itemCheck.children, currentItem.id);
}
if (itemCheck?.url && !!matchPath({ path: itemCheck?.link ? itemCheck.link : itemCheck.url, end: true }, pathname)) {
setSelectedID(currentItem.id);
}
});
if (data?.url && !!matchPath({ path: data?.link ? data.link : data.url, end: true }, pathname)) {
setSelectedID(currentItem.id);
}
};
// keep selected-menu on page load and use for horizontal menu close on change routes
useEffect(() => {
checkSelectedOnload(currentItem);
if (openMini) setAnchorEl(null);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [pathname, currentItem]);
// menu list collapse & items
const items = currentItem.children?.map((menu) => {
switch (menu?.type) {
case 'collapse':
return <NavCollapse key={menu.id} menu={menu} level={1} parentId={currentItem.id} />;
case 'item':
return <NavItem key={menu.id} item={menu} level={1} />;
default:
return (
<Typography key={menu?.id} variant="h6" align="center" sx={{ color: 'error.main' }}>
Menu Items Error
</Typography>
);
}
});
return (
<>
<List
disablePadding={!drawerOpen}
subheader={
currentItem.title &&
drawerOpen && (
<Typography
variant="caption"
gutterBottom
sx={{
display: 'block',
fontSize: '0.875rem',
fontWeight: 500,
color: 'text.heading',
padding: 0.75,
textTransform: 'capitalize',
marginTop: 1.25
}}
>
{currentItem.title}
{currentItem.caption && (
<Typography
gutterBottom
sx={{
display: 'block',
fontSize: '0.6875rem',
fontWeight: 500,
color: 'text.secondary',
textTransform: 'capitalize',
lineHeight: 1.66
}}
>
{currentItem.caption}
</Typography>
)}
</Typography>
)
}
>
{items}
</List>
{/* group divider */}
<Activity mode={drawerOpen ? 'visible' : 'hidden'}>
<Divider sx={{ mt: 0.25, mb: 1.25 }} />
</Activity>
</>
);
}
NavGroup.propTypes = {
item: PropTypes.any,
lastItem: PropTypes.number,
remItems: PropTypes.array,
lastItemId: PropTypes.string,
selectedID: PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
setSelectedID: PropTypes.oneOfType([PropTypes.any, PropTypes.func])
};