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