"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 && (
)}
))}
);
}