import type { ReactNode } from "react"; import { Navigate, useParams } from "react-router"; import { homePath, isScreen, orderScreens, type Screen } from "../auth/roles"; import { useAuth } from "../auth/useAuth"; import { AdminPage } from "./admin/AdminPage"; import { ClericalHome } from "./clerical/ClericalHome"; import { PlaceholderScreen } from "./PlaceholderScreen"; import { StallHome } from "./stall/StallHome"; import { SupervisorHome } from "./supervisor/SupervisorHome"; import { WarehouseHome } from "./warehouse/WarehouseHome"; /** A page under a screen, like /clerical/projects/7. Users without the screen go to their first screen. */ export function RequireScreen({ screen, children }: { screen: Screen; children: ReactNode }) { const { me } = useAuth(); if (!me) return null; if (!orderScreens(me.screens).includes(screen)) return ; return <>{children}; } /** /:screen. An unknown screen, or one the user does not have, goes to the user's first screen. */ export function ScreenRoute() { const { screen } = useParams(); const { me } = useAuth(); if (!me) return null; const allowed = orderScreens(me.screens); if (!isScreen(screen) || !allowed.includes(screen)) return ; if (screen === "admin") return ; if (screen === "clerical") return ; if (screen === "warehouse") return ; if (screen === "supervisor") return ; if (screen === "stall") return ; return ; }