17 lines
748 B
TypeScript
17 lines
748 B
TypeScript
import { Navigate, useParams } from "react-router";
|
|||
|
|
import { homePath, isScreen, orderScreens } from "../auth/roles";
|
||
|
|
import { useAuth } from "../auth/useAuth";
|
||
|
|
import { AdminPage } from "./admin/AdminPage";
|
||
|
|
import { PlaceholderScreen } from "./PlaceholderScreen";
|
||
|
|
|
||
|
|
/** /: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 <Navigate to={homePath(me.screens)} replace />;
|
||
|
|
if (screen === "admin") return <AdminPage />;
|
||
|
|
return <PlaceholderScreen key={screen} screen={screen} />;
|
||
|
|
}
|