import { useEffect, useState, type ReactNode } from "react"; import { Routes, Route, Navigate } from "react-router-dom"; import { api, type CurrentUser, type UserRole, UnauthorizedError } from "./api/client"; import Login from "./pages/Login"; import Dashboard from "./pages/Dashboard"; import Users from "./pages/Users"; import AuditLog from "./pages/AuditLog"; import Secrets from "./pages/Secrets"; import Ipam from "./pages/Ipam"; import Dns from "./pages/Dns"; import ServersTasks from "./pages/ServersTasks"; import ServerDetail from "./pages/ServerDetail"; import Integrations from "./pages/Integrations"; import Docker from "./pages/Docker"; import Tailscale from "./pages/Tailscale"; import Semaphore from "./pages/Semaphore"; import Gitea from "./pages/Gitea"; import Settings from "./pages/Settings"; import NotificationSettings from "./pages/settings/NotificationSettings"; import BadgeSettings from "./pages/settings/BadgeSettings"; import DateTimeSettings from "./pages/settings/DateTimeSettings"; import CacheSettings from "./pages/settings/CacheSettings"; import AppShell from "./layout/AppShell"; import { setDateTimeSettings } from "./utils/date"; const roleRank: Record = { viewer: 0, operator: 1, admin: 2 }; function RequireRole({ user, minRole, children, }: { user: CurrentUser; minRole: UserRole; children: ReactNode; }) { if (roleRank[user.role] < roleRank[minRole]) { return (
You don't have permission to view this page.
); } return <>{children}; } export default function App() { const [user, setUser] = useState(undefined); useEffect(() => { api.me().then( (res) => setUser(res.user), (err) => { if (!(err instanceof UnauthorizedError)) { console.error(err); } setUser(null); }, ); api.settings.display().then((res) => setDateTimeSettings(res.display)).catch(() => {}); }, []); if (user === undefined) { return
Loading…
; } if (user === null) { return ; } return ( } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } > } /> } /> } /> } /> } /> ); }