// Path: Frontend/src/components/app-shell/data/workspace-routes.ts import type { WorkspaceStaticKind } from "./shell.types"; export type WorkspaceSurfaceKind = Exclude; export type SettingsSectionKind = "account" | "workspace" | "server" | "theme" | "security" | "members"; export type WorkspaceBreadcrumbContext = { activeProjectName: string; activeDepartmentName: string; activeTeamName?: string; }; const workspaceSurfaceRoutes: Record = { home: "/workspace/home", settings: "/settings", }; export const getWorkspaceSurfaceRoute = (surface: WorkspaceSurfaceKind): string => workspaceSurfaceRoutes[surface]; const settingsSectionRoutes: Record = { 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)]; };