"use client"; import * as React from "react"; import { usePathname } from "next/navigation"; import { Home, ChevronRight, Folder, BookOpen, Newspaper, Plane, FileText } 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 'publications': icon = ; break; case 'travel': icon = ; break; case 'cv': icon = ; label = "CV"; break; case 'latex-intro': icon = ; label = "LaTeX Tutorial"; break; default: icon = ; } breadcrumbItems.push({ href: currentPath, label, icon, isCurrentPage: isLastSegment, }); }); } // Don't show breadcrumbs on the home page if (pathname === "/") { return null; } return (
{breadcrumbItems.map((item, index) => ( {item.isCurrentPage ? ( {item.icon} {item.label} ) : ( {item.icon} {item.label} )} {index < breadcrumbItems.length - 1 && ( )} ))}
); }