|
|
@@ -9,7 +9,7 @@ import {
|
|
|
} from '@/components/ui/breadcrumb.js';
|
|
|
import { Separator } from '@/components/ui/separator.js';
|
|
|
import { SidebarInset, SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar.js';
|
|
|
-import { createFileRoute, Outlet, redirect } from '@tanstack/react-router';
|
|
|
+import { createFileRoute, Link, Outlet, redirect, useRouterState } from '@tanstack/react-router';
|
|
|
import * as React from 'react';
|
|
|
|
|
|
export const AUTHENTICATED_ROUTE_PREFIX = '/_authenticated';
|
|
|
@@ -25,10 +25,22 @@ export const Route = createFileRoute(AUTHENTICATED_ROUTE_PREFIX)({
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
+ loader: () => ({
|
|
|
+ breadcrumb: 'Dashboard',
|
|
|
+ }),
|
|
|
component: AuthLayout,
|
|
|
});
|
|
|
|
|
|
function AuthLayout() {
|
|
|
+ const matches = useRouterState({ select: s => s.matches });
|
|
|
+ const breadcrumbs = matches
|
|
|
+ .filter(match => match.loaderData?.breadcrumb)
|
|
|
+ .map(({ pathname, loaderData }) => {
|
|
|
+ return {
|
|
|
+ title: loaderData.breadcrumb,
|
|
|
+ path: pathname,
|
|
|
+ };
|
|
|
+ });
|
|
|
return (
|
|
|
<SidebarProvider>
|
|
|
<AppSidebar />
|
|
|
@@ -39,13 +51,18 @@ function AuthLayout() {
|
|
|
<Separator orientation="vertical" className="mr-2 h-4" />
|
|
|
<Breadcrumb>
|
|
|
<BreadcrumbList>
|
|
|
- <BreadcrumbItem className="hidden md:block">
|
|
|
- <BreadcrumbLink href="#">Building Your Application</BreadcrumbLink>
|
|
|
- </BreadcrumbItem>
|
|
|
- <BreadcrumbSeparator className="hidden md:block" />
|
|
|
- <BreadcrumbItem>
|
|
|
- <BreadcrumbPage>Data Fetching</BreadcrumbPage>
|
|
|
- </BreadcrumbItem>
|
|
|
+ {breadcrumbs.map(({ title, path }, index, arr) => (
|
|
|
+ <>
|
|
|
+ <BreadcrumbItem key={index} className="hidden md:block">
|
|
|
+ <BreadcrumbLink asChild>
|
|
|
+ <Link to={path}>{title}</Link>
|
|
|
+ </BreadcrumbLink>
|
|
|
+ </BreadcrumbItem>
|
|
|
+ {index < arr.length - 1 && (
|
|
|
+ <BreadcrumbSeparator className="hidden md:block" />
|
|
|
+ )}
|
|
|
+ </>
|
|
|
+ ))}
|
|
|
</BreadcrumbList>
|
|
|
</Breadcrumb>
|
|
|
</div>
|