import { component$, useStyles$ } from '@builder.io/qwik'; import { useContent, useLocation, ContentMenu } from '@builder.io/qwik-city'; import styles from './breadcrumbs.css?inline'; export const Breadcrumbs = component$(() => { useStyles$(styles); const { menu } = useContent(); const loc = useLocation(); const breadcrumbs = createBreadcrumbs(menu, loc.pathname); if (breadcrumbs.length === 0) { return null; } return ( ); }); export function createBreadcrumbs(menu: ContentMenu | undefined, pathname: string) { if (menu?.items) { for (const indexA of menu.items) { const breadcrumbA: ContentBreadcrumb = { text: indexA.text, }; if (typeof indexA.href === 'string') { breadcrumbA.href = indexA.href; } if (indexA.href === pathname) { return [breadcrumbA]; } if (indexA.items) { for (const indexB of indexA.items) { const breadcrumbB: ContentBreadcrumb = { text: indexB.text, }; if (typeof indexB.href === 'string') { breadcrumbB.href = indexB.href; } if (indexB.href === pathname) { return [breadcrumbA, breadcrumbB]; } if (indexB.items) { for (const indexC of indexB.items) { const breadcrumbC: ContentBreadcrumb = { text: indexC.text, }; if (typeof indexC.href === 'string') { breadcrumbC.href = indexC.href; } if (indexC.href === pathname) { return [breadcrumbA, breadcrumbB, breadcrumbC]; } } } } } } } return []; } interface ContentBreadcrumb { text: string; href?: string; }