80 lines
2.6 KiB
TypeScript
80 lines
2.6 KiB
TypeScript
// Path: Frontend/src/components/app-shell/data/workspace-routes.ts
|
|
|
|
import type { WorkspaceStaticKind } from "./shell.types";
|
|
|
|
export type WorkspaceSurfaceKind = Exclude<WorkspaceStaticKind, "workspace">;
|
|
export type SettingsSectionKind = "account" | "workspace" | "server" | "theme" | "security" | "members";
|
|
|
|
export type WorkspaceBreadcrumbContext = {
|
|
activeProjectName: string;
|
|
activeDepartmentName: string;
|
|
activeTeamName?: string;
|
|
};
|
|
|
|
const workspaceSurfaceRoutes: Record<WorkspaceSurfaceKind, string> = {
|
|
home: "/workspace/home",
|
|
settings: "/settings",
|
|
};
|
|
|
|
export const getWorkspaceSurfaceRoute = (surface: WorkspaceSurfaceKind): string => workspaceSurfaceRoutes[surface];
|
|
|
|
const settingsSectionRoutes: Record<SettingsSectionKind, string> = {
|
|
account: "/settings/account",
|
|
workspace: "/settings/workspace",
|
|
server: "/settings/server",
|
|
theme: "/settings/theme",
|
|
security: "/settings/security",
|
|
members: "/settings/members",
|
|
};
|
|
|
|
export const getSettingsSectionRoute = (section: SettingsSectionKind): string => settingsSectionRoutes[section];
|
|
|
|
export const getWorkspaceSurfaceFromPathname = (pathname: string): WorkspaceSurfaceKind => {
|
|
if (pathname.startsWith(workspaceSurfaceRoutes.settings) || pathname.startsWith("/workspace/settings")) {
|
|
return "settings";
|
|
}
|
|
|
|
return "home";
|
|
};
|
|
|
|
export const getWorkspaceSurfaceBreadcrumbLabel = (pathname: string): string => {
|
|
const surface = getWorkspaceSurfaceFromPathname(pathname);
|
|
return surface === "settings" ? "Settings" : "Home";
|
|
};
|
|
|
|
const getSettingsSectionFromPathname = (pathname: string): SettingsSectionKind | null => {
|
|
const matchedEntry = (Object.entries(settingsSectionRoutes) as Array<[SettingsSectionKind, string]>).find(([, route]) => pathname.startsWith(route));
|
|
|
|
return matchedEntry?.[0] ?? null;
|
|
};
|
|
|
|
export const getWorkspaceBreadcrumbSegments = (
|
|
pathname: string,
|
|
context: WorkspaceBreadcrumbContext,
|
|
): string[] => {
|
|
const settingsSection = getSettingsSectionFromPathname(pathname);
|
|
|
|
if (pathname === workspaceSurfaceRoutes.settings || pathname === "/workspace/settings") {
|
|
return ["Settings"];
|
|
}
|
|
|
|
if (settingsSection) {
|
|
switch (settingsSection) {
|
|
case "account":
|
|
return ["Users", "Settings"];
|
|
case "workspace":
|
|
return [context.activeProjectName, "Settings"];
|
|
case "server":
|
|
return ["Settings"];
|
|
case "theme":
|
|
return ["Personal", "Settings"];
|
|
case "security":
|
|
return ["Users", "Settings"];
|
|
case "members":
|
|
return [context.activeTeamName || context.activeDepartmentName || "Members", "Users"];
|
|
}
|
|
}
|
|
|
|
return [context.activeProjectName, getWorkspaceSurfaceBreadcrumbLabel(pathname)];
|
|
};
|