import { Fragment } from "react"; import { useMatches, Link } from "@tanstack/react-router"; import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from "~/client/components/ui/breadcrumb"; export interface BreadcrumbItemData { label: string; href?: string; } type BreadcrumbFunction = (match: ReturnType[number]) => BreadcrumbItemData[] | null; export function AppBreadcrumb() { const matches = useMatches(); const lastMatchWithBreadcrumb = [...matches].reverse().find((match) => { const breadcrumbFn = match.staticData?.breadcrumb as BreadcrumbFunction | undefined; return breadcrumbFn; }); if (!lastMatchWithBreadcrumb) { return null; } const breadcrumbFn = lastMatchWithBreadcrumb.staticData?.breadcrumb as BreadcrumbFunction; const breadcrumbs = breadcrumbFn?.(lastMatchWithBreadcrumb); if (!breadcrumbs || breadcrumbs.length === 0) { return null; } return ( {breadcrumbs.map((breadcrumb, index) => { const isLast = index === breadcrumbs.length - 1; return ( {isLast || !breadcrumb.href ? ( {breadcrumb.label} ) : ( {breadcrumb.label} )} {!isLast && } ); })} ); }