Files
MABEA/frontend/src/App.tsx
T
patrickandClaude Sonnet 5 a97886defd
CI / backend-tests (push) Successful in 56s
CI / frontend-build (push) Successful in 1m43s
Sprint 8: minimale Admin-Seite (Standort/Objekt-Anlage) im Frontend
Frontend deckte bisher nur den Mitarbeiter-Kontrollflow ab, Stammdaten
mussten per API/Skript angelegt werden (Test-Deployment-Lücke). /admin
zeigt Standort- und Objekt-Anlage (aus aktiver Vorlage), nur für Rolle
administration sichtbar (/auth/me liefert Rollen an AuthContext).
Bewusst kein Bereich/Kategorie/Material-CRUD - kommt aus Excel-Import.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
2026-09-04 00:33:28 +02:00

63 lines
1.6 KiB
TypeScript

import type { ReactNode } from "react";
import { Navigate, Route, Routes } from "react-router-dom";
import { AuthProvider, useAuth } from "./auth/AuthContext";
import { AdminPage } from "./pages/AdminPage";
import { KontrollPage } from "./pages/KontrollPage";
import { LoginPage } from "./pages/LoginPage";
import { ObjektListPage } from "./pages/ObjektListPage";
function GeschuetzteRoute({ children }: { children: ReactNode }) {
const { eingeloggt } = useAuth();
if (!eingeloggt) {
return <Navigate to="/login" replace />;
}
return <>{children}</>;
}
function AdminRoute({ children }: { children: ReactNode }) {
const { eingeloggt, istAdmin } = useAuth();
if (!eingeloggt) {
return <Navigate to="/login" replace />;
}
if (!istAdmin) {
return <Navigate to="/objekte" replace />;
}
return <>{children}</>;
}
export default function App() {
return (
<AuthProvider>
<Routes>
<Route path="/login" element={<LoginPage />} />
<Route
path="/objekte"
element={
<GeschuetzteRoute>
<ObjektListPage />
</GeschuetzteRoute>
}
/>
<Route
path="/objekte/:objektId/kontrolle"
element={
<GeschuetzteRoute>
<KontrollPage />
</GeschuetzteRoute>
}
/>
<Route
path="/admin"
element={
<AdminRoute>
<AdminPage />
</AdminRoute>
}
/>
<Route path="*" element={<Navigate to="/objekte" replace />} />
</Routes>
</AuthProvider>
);
}