import { MenuBreadcrumb, MenuItem } from '@/components/Layout'; import { MainCard } from '@/components/MainCard'; import { ApartmentOutlined, HomeFilled, HomeOutlined } from '@ant-design/icons'; import { Divider, Grid, Typography } from '@mui/material'; import { default as MuiBreadcrumbs } from '@mui/material/Breadcrumbs'; import { useTheme } from '@mui/material/styles'; import { useEffect, useState } from 'react'; import { Link, useLocation } from 'react-router-dom'; function renderBreadcrumb({ id, title, icon, url, last }: MenuBreadcrumb) { const Icon = icon ? icon : ApartmentOutlined; return ( {/* @ts-ignore */} {icon ? : null} {title} ); } type BreadcrumbsProps = { home?: boolean | string; card?: boolean; divider?: boolean; icon?: boolean; icons?: boolean; maxItems?: number; navigation?: any; rightAlign?: boolean; separator?: any; title?: boolean; titleBottom?: boolean; sx?: any; breadcrumbs: MenuBreadcrumb[]; mode?: 'navigation' | 'breadcrumbs'; }; function Breadcrumbs({ home = 'Home', card, divider = true, icon, icons, maxItems, navigation, rightAlign, separator, title, titleBottom, sx, breadcrumbs, mode = 'navigation', ...others }: BreadcrumbsProps) { const theme = useTheme(); const location = useLocation(); const [main, setMain] = useState(); const [item, setItem] = useState(); const currentPath = location.pathname; const iconSX = { marginRight: theme.spacing(0.75), marginTop: `-${theme.spacing(0.25)}`, width: '1rem', height: '1rem', color: theme.palette.secondary.main }; // set active item state function getCollapse(menu: MenuItem) { if (menu.children) { menu.children.filter((collapse) => { if (collapse.type && collapse.type === 'collapse') { getCollapse(collapse); if (collapse.url === currentPath) { setMain(collapse); setItem(collapse); } } else if (collapse.type && collapse.type === 'item') { if (currentPath.includes(collapse.url)) { setMain(menu); setItem(collapse); } } return false; }); } } useEffect(() => { navigation?.items?.map((menu: MenuItem) => { if (menu.type && menu.type === 'group') { getCollapse(menu); } return false; }); }); // item separator const SeparatorIcon = separator; const separatorIcon = separator ? : '/'; const cardSx = { mb: 2, bgcolor: card === false ? 'transparent' : 'inherit', ...sx, [theme.breakpoints.down('sm')]: { mb: 1 } }; let mainContent; let itemContent; let breadcrumbContent = ; let itemTitle = ''; let CollapseIcon; let ItemIcon; if (mode === 'breadcrumbs') { return ( {title && !titleBottom ? ( {item!.title} ) : null} {home !== false && ( {icons ? : null} {icon && !icons ? : null} {!icon || icons ? home : null} )} {breadcrumbs.map(renderBreadcrumb)} {title && titleBottom ? ( {item!.title} ) : null} {card === false && divider !== false && } ); } // collapse item if (main && main.type === 'collapse' && main.breadcrumbs === true) { CollapseIcon = main.icon ? main.icon : ApartmentOutlined; mainContent = ( {/* @ts-ignore */} {icons ? : null} {main.title} ); breadcrumbContent = ( {home !== false && ( {icons ? : null} {icon && !icons ? : null} {!icon || icons ? home : null} )} {mainContent} {title && titleBottom ? ( {main.title} ) : null} {card === false && divider !== false && } ); } // items if (item && item.type === 'item') { itemTitle = item.title; ItemIcon = item.icon ? item.icon : ApartmentOutlined; itemContent = ( {/* @ts-ignore */} {icons ? : null} {itemTitle} ); // main if (item.breadcrumbs !== false) { breadcrumbContent = ( {title && !titleBottom ? ( {item.title} ) : null} {home !== false && ( {icons ? : null} {icon && !icons ? : null} {!icon || icons ? home : null} )} {mainContent} {itemContent} {title && titleBottom ? ( {item.title} ) : null} {card === false && divider !== false && } ); } } return breadcrumbContent; } export { Breadcrumbs }; export type { BreadcrumbsProps };