import * as React from "react"; import { NavigationNode } from "@shared/types"; import Breadcrumb from "~/components/Breadcrumb"; import { MenuInternalLink } from "~/types"; import { sharedDocumentPath } from "~/utils/routeHelpers"; type Props = { documentId: string; shareId: string; sharedTree: NavigationNode | undefined; }; function pathToDocument( sharedTree: NavigationNode | undefined, documentId: string ) { let path: NavigationNode[] = []; const traveler = ( nodes: NavigationNode[], previousPath: NavigationNode[] ) => { nodes.forEach((childNode) => { const newPath = [...previousPath, childNode]; if (childNode.id === documentId) { path = newPath; return; } return traveler(childNode.children, newPath); }); }; if (sharedTree) { traveler([sharedTree], []); } return path; } const PublicBreadcrumb: React.FC = ({ documentId, shareId, sharedTree, children, }) => { const items: MenuInternalLink[] = React.useMemo( () => pathToDocument(sharedTree, documentId) .slice(0, -1) .map((item) => ({ ...item, type: "route", to: sharedDocumentPath(shareId, item.url), })), [sharedTree, shareId, documentId] ); return ; }; export default PublicBreadcrumb;