Files
ironmount/app/client/lib/breadcrumbs.ts
Nico 95a0d44b45 refactor: unify backend and frontend servers (#3)
* refactor: unify backend and frontend servers

* refactor: correct paths for openapi & drizzle

* refactor: move api-client to client

* fix: drizzle paths

* chore: fix linting issues

* fix: form reset issue
2025-11-13 20:11:46 +01:00

87 lines
1.9 KiB
TypeScript

import { useLocation, useParams } from "react-router";
export interface BreadcrumbItem {
label: string;
href?: string;
isCurrentPage?: boolean;
}
/**
* Generates breadcrumb items based on the current route
* @param pathname - Current pathname from useLocation
* @param params - Route parameters from useParams
* @returns Array of breadcrumb items
*/
export function generateBreadcrumbs(pathname: string, params: Record<string, string | undefined>): BreadcrumbItem[] {
const breadcrumbs: BreadcrumbItem[] = [];
if (pathname.startsWith("/repositories")) {
breadcrumbs.push({
label: "Repositories",
href: "/repositories",
isCurrentPage: pathname === "/repositories",
});
if (pathname.startsWith("/repositories/") && params.name) {
const isSnapshotPage = !!params.snapshotId;
breadcrumbs.push({
label: params.name,
href: isSnapshotPage ? `/repositories/${params.name}` : undefined,
isCurrentPage: !isSnapshotPage,
});
if (isSnapshotPage && params.snapshotId) {
breadcrumbs.push({
label: params.snapshotId,
isCurrentPage: true,
});
}
}
return breadcrumbs;
}
if (pathname.startsWith("/backups")) {
breadcrumbs.push({
label: "Backups",
href: "/backups",
isCurrentPage: pathname === "/backups",
});
if (pathname.startsWith("/backups/") && params.id) {
breadcrumbs.push({
label: `Schedule #${params.id}`,
isCurrentPage: true,
});
}
return breadcrumbs;
}
breadcrumbs.push({
label: "Volumes",
href: "/volumes",
isCurrentPage: pathname === "/volumes",
});
if (pathname.startsWith("/volumes/") && params.name) {
breadcrumbs.push({
label: params.name,
isCurrentPage: true,
});
}
return breadcrumbs;
}
/**
* Hook to get breadcrumb data for the current route
*/
export function useBreadcrumbs(): BreadcrumbItem[] {
const location = useLocation();
const params = useParams();
return generateBreadcrumbs(location.pathname, params);
}