'use client' import Link from 'next/link' import { usePathname, useSearchParams } from 'next/navigation' import React, { Fragment, Suspense } from 'react' import { useBreakpoint } from 'common' import { Breadcrumb_Shadcn_ as Breadcrumb, BreadcrumbList_Shadcn_ as BreadcrumbList, BreadcrumbItem_Shadcn_ as BreadcrumbItem, BreadcrumbLink_Shadcn_ as BreadcrumbLink, BreadcrumbSeparator_Shadcn_ as BreadcrumbSeparator, BreadcrumbPage_Shadcn_ as BreadcrumbPage, BreadcrumbEllipsis_Shadcn_ as BreadcrumbEllipsis, Button, cn, Drawer, DrawerClose, DrawerContent, DrawerFooter, DrawerTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from 'ui' import * as NavItems from '~/components/Navigation/NavigationMenu/NavigationMenu.constants' import { getMenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu.utils' interface BreadcrumbsProps extends React.HTMLAttributes { minLength?: number forceDisplayOnMobile?: boolean } export default function Breadcrumbs(props: BreadcrumbsProps) { return ( ) } const BreadcrumbsInternal = ({ className, minLength = 2, forceDisplayOnMobile = false, }: BreadcrumbsProps) => { const breadcrumbs = useBreadcrumbs() const [open, setOpen] = React.useState(false) const isMobile = useBreakpoint('md') const ITEMS_TO_DISPLAY = isMobile ? 4 : 3 if (!breadcrumbs?.length || breadcrumbs?.length < minLength) return null const appendedBreadcrumbs = breadcrumbs?.slice( -ITEMS_TO_DISPLAY + 1, isMobile && !forceDisplayOnMobile ? -1 : undefined ) return ( {breadcrumbs.length >= ITEMS_TO_DISPLAY && ( <> {breadcrumbs[0].url ? ( {breadcrumbs[0].title || breadcrumbs[0].name} ) : ( {breadcrumbs[0].title || breadcrumbs[0].name} )} )} {breadcrumbs.length > ITEMS_TO_DISPLAY && ( <> {!isMobile ? ( {breadcrumbs.slice(1, -2).map((crumb, index) => ( {crumb.url ? ( {crumb.title || crumb.name} ) : ( crumb.title || crumb.name )} ))} ) : (
{breadcrumbs.slice(1, -2).map((crumb, index) => crumb.url ? ( {crumb.title || crumb.name} ) : ( crumb.title || crumb.name ) )}
)}
)} {appendedBreadcrumbs?.map((crumb, index) => ( {crumb.url ? ( {crumb.title || crumb.name} ) : ( {crumb.title || crumb.name} )} ))}
) } function useBreadcrumbs() { const pathname = usePathname() const isTroubleshootingPage = pathname.startsWith('/guides/troubleshooting') if (isTroubleshootingPage) { const breadcrumbs = [{ name: 'Troubleshooting', url: '/guides/troubleshooting' }] return breadcrumbs } const isAiPromptsPage = pathname.startsWith('/guides/getting-started/ai-prompts') if (isAiPromptsPage) { const breadcrumbs = [ { name: 'Getting started', url: '/guides/getting-started' }, { name: 'AI Tools' }, { name: 'Prompts', url: '/guides/getting-started/ai-prompts' }, ] return breadcrumbs } const menuId = getMenuId(pathname) const menu = NavItems[menuId] return findMenuItemByUrl(menu, pathname, []) } function findMenuItemByUrl(menu: any, targetUrl: string, parents: any[] = []) { // If the menu has items, recursively search through them if (menu.items) { for (let item of menu.items) { const result = findMenuItemByUrl(item, targetUrl, [...parents, menu]) if (result) { return result } } } // Check if the current menu object itself has the target URL if (menu.url === targetUrl) { return [...parents, menu] } // If the URL is not found, return null return null }