import { Breadcrumb } from 'antd'; import type { BreadcrumbProps } from 'antd'; import type { MenuItemType } from 'antd/es/menu/interface'; import type { MenuInfo } from 'rc-menu/lib/interface'; import type { ReactElement } from 'react'; import { cloneElement } from 'react'; import { useMixMenuContext } from '@/features/menu'; import { useRouter } from '@/features/router'; import { getBreadcrumbsByRoute } from './breadcrumbShared'; function BreadcrumbContent({ icon, label }: { readonly icon: ReactElement; readonly label: ReactElement }) { return (
{cloneElement(icon, { className: 'mr-4px text-icon', ...(icon.props as any) })} {label}
); } const GlobalBreadcrumb: FC> = props => { const { allMenus: menus, route } = useMixMenuContext(); const { navigate } = useRouter(); const breadcrumb = getBreadcrumbsByRoute(route, menus); function handleClickMenu(menuInfo: MenuInfo) { navigate(menuInfo.key); } const items: BreadcrumbProps['items'] = breadcrumb.map((item, index) => { const commonTitle = ( ); return { title: commonTitle, ...('children' in item && item.children && { menu: { items: item.children.filter(Boolean) as MenuItemType[], onClick: handleClickMenu, selectedKeys: [breadcrumb[index + 1]?.key] as string[] } }) }; }); return ( ); }; export default GlobalBreadcrumb;