Add dynamic breadcrumb

Signed-off-by: gearnode <bryan@frimin.fr>
This commit is contained in:
gearnode
2025-02-09 21:09:09 -08:00
parent 9281352c0e
commit 08d710505e

View File

@@ -1,5 +1,6 @@
import { Outlet } from "react-router"; import { Outlet, useLocation } from "react-router";
import { AppSidebar } from "@/components/AppSidebar"; import { AppSidebar } from "@/components/AppSidebar";
import React from "react";
import { import {
Breadcrumb, Breadcrumb,
BreadcrumbItem, BreadcrumbItem,
@@ -14,9 +15,11 @@ import {
SidebarProvider, SidebarProvider,
SidebarTrigger, SidebarTrigger,
} from "@/components/ui/sidebar"; } from "@/components/ui/sidebar";
import { graphql } from "relay-runtime";
export default function ConsoleLayout() { export default function ConsoleLayout() {
const location = useLocation();
const pathSegments = location.pathname.split('/').filter(Boolean);
return ( return (
<SidebarProvider> <SidebarProvider>
<AppSidebar /> <AppSidebar />
@@ -27,15 +30,30 @@ export default function ConsoleLayout() {
<Separator orientation="vertical" className="mr-2 h-4" /> <Separator orientation="vertical" className="mr-2 h-4" />
<Breadcrumb> <Breadcrumb>
<BreadcrumbList> <BreadcrumbList>
<BreadcrumbItem className="hidden md:block">
<BreadcrumbLink href="#">
Building Your Application
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator className="hidden md:block" />
<BreadcrumbItem> <BreadcrumbItem>
<BreadcrumbPage>Data Fetching</BreadcrumbPage> <BreadcrumbLink href="/">Home</BreadcrumbLink>
</BreadcrumbItem> </BreadcrumbItem>
{pathSegments.map((segment, index) => {
const path = `/${pathSegments.slice(0, index + 1).join('/')}`;
const isLast = index === pathSegments.length - 1;
return (
<React.Fragment key={path}>
<BreadcrumbSeparator />
<BreadcrumbItem>
{isLast ? (
<BreadcrumbPage>
{segment.charAt(0).toUpperCase() + segment.slice(1)}
</BreadcrumbPage>
) : (
<BreadcrumbLink href={path}>
{segment.charAt(0).toUpperCase() + segment.slice(1)}
</BreadcrumbLink>
)}
</BreadcrumbItem>
</React.Fragment>
);
})}
</BreadcrumbList> </BreadcrumbList>
</Breadcrumb> </Breadcrumb>
</div> </div>