"use client"; import * as React from "react"; import { usePathname } from "next/navigation"; import { Home, ChevronRight, FolderGit2, BookOpenText, Newspaper, Plane, FileText, Accessibility, Briefcase, File, } from "lucide-react"; import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from "~/components/ui/breadcrumb"; interface BreadcrumbItem { href: string; label: string; icon: React.ReactNode; isCurrentPage?: boolean; } export function PageBreadcrumb() { const pathname = usePathname(); // Generate breadcrumb items based on current path const breadcrumbItems: BreadcrumbItem[] = [ { href: "/", label: "Home", icon: , }, ]; // Parse path segments into breadcrumb items const pathSegments = pathname.split("/").filter((segment) => segment !== ""); if (pathSegments.length > 0) { // Build paths incrementally for correct href values let currentPath = ""; pathSegments.forEach((segment, index) => { currentPath += `/${segment}`; const isLastSegment = index === pathSegments.length - 1; let label = segment.charAt(0).toUpperCase() + segment.slice(1).replace(/-/g, " "); let icon; // Assign appropriate icons based on path switch (segment) { case "projects": icon = ; break; case "articles": icon = ; break; case "blog": icon = ; label = "Blog"; break; case "publications": icon = ; label = "Publications"; break; case "travel": icon = ; break; case "cv": icon = ; label = "CV"; break; case "experience": icon = ; label = "Experience"; break; case "latex-intro": icon = ; label = "LaTeX Tutorial"; break; case "accessibility": icon = ; label = "Accessibility"; break; default: icon = ; } breadcrumbItems.push({ href: currentPath, label, icon, isCurrentPage: isLastSegment, }); }); } // Show breadcrumbs on all pages including home page return (
{breadcrumbItems.map((item, index) => ( {item.isCurrentPage ? ( {item.icon} {item.label} ) : ( {item.icon} {item.label} )} {index < breadcrumbItems.length - 1 && } ))}
); }