import PropTypes from 'prop-types'; import { forwardRef, useEffect } from 'react'; import { Link, useLocation } from 'react-router-dom'; import { useDispatch, useSelector } from 'react-redux'; // material-ui import { useTheme } from '@mui/material/styles'; import { Avatar, Chip, ListItemButton, ListItemIcon, ListItemText, Typography } from '@mui/material'; // project import import { activeItem } from 'store/reducers/menu'; // ==============================|| NAVIGATION - LIST ITEM ||============================== // const NavItem = ({ item, level }) => { const theme = useTheme(); const dispatch = useDispatch(); const { pathname } = useLocation(); const { drawerOpen, openItem } = useSelector((state) => state.menu); let itemTarget = '_self'; if (item.target) { itemTarget = '_blank'; } let listItemProps = { component: forwardRef((props, ref) => ) }; if (item?.external) { listItemProps = { component: 'a', href: item.url, target: itemTarget }; } const itemHandler = (id) => { dispatch(activeItem({ openItem: [id] })); }; const Icon = item.icon; const itemIcon = item.icon ? : false; const isSelected = openItem.findIndex((id) => id === item.id) > -1; // active menu item on page load useEffect(() => { if (pathname.includes(item.url)) { dispatch(activeItem({ openItem: [item.id] })); } // eslint-disable-next-line }, [pathname]); const textColor = 'text.primary'; const iconSelectedColor = 'primary.main'; return ( itemHandler(item.id)} selected={isSelected} sx={{ zIndex: 1201, pl: drawerOpen ? `${level * 28}px` : 1.5, py: !drawerOpen && level === 1 ? 1.25 : 1, ...(drawerOpen && { '&:hover': { bgcolor: 'primary.lighter' }, '&.Mui-selected': { bgcolor: 'primary.lighter', borderRight: `2px solid ${theme.palette.primary.main}`, color: iconSelectedColor, '&:hover': { color: iconSelectedColor, bgcolor: 'primary.lighter' } } }), ...(!drawerOpen && { '&:hover': { bgcolor: 'transparent' }, '&.Mui-selected': { '&:hover': { bgcolor: 'transparent' }, bgcolor: 'transparent' } }) }} > {itemIcon && ( {itemIcon} )} {(drawerOpen || (!drawerOpen && level !== 1)) && ( {item.title} } /> )} {(drawerOpen || (!drawerOpen && level !== 1)) && item.chip && ( {item.chip.avatar}} /> )} ); }; NavItem.propTypes = { item: PropTypes.object, level: PropTypes.number }; export default NavItem;