Admin-Portal: Benutzerverwaltung (anlegen, Rollen, aktivieren/deaktivieren)
Backend-API existierte bereits (/benutzer, admin-only), war im Frontend bisher nicht angebunden. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { useEffect, useState } from "react";
|
||||
|
||||
import { apiRequest } from "../api/client";
|
||||
import type { Bereich, Beladungsvorlage, Kategorie, Material, Objekt, Objekttyp, Standort } from "../api/types";
|
||||
import type { Benutzer, Bereich, Beladungsvorlage, Kategorie, Material, Objekt, Objekttyp, Standort } from "../api/types";
|
||||
import { BenutzerSection } from "./admin/BenutzerSection";
|
||||
import { BereichSection } from "./admin/BereichSection";
|
||||
import { KategorieSection } from "./admin/KategorieSection";
|
||||
import { MaterialSection } from "./admin/MaterialSection";
|
||||
@@ -10,7 +11,7 @@ import { ObjekttypSection } from "./admin/ObjekttypSection";
|
||||
import { StandortSection } from "./admin/StandortSection";
|
||||
import { VorlageSection } from "./admin/VorlageSection";
|
||||
|
||||
type Tab = "objekte" | "vorlagen" | "material" | "struktur" | "standorte";
|
||||
type Tab = "objekte" | "vorlagen" | "material" | "struktur" | "standorte" | "benutzer";
|
||||
|
||||
const TABS: { key: Tab; label: string }[] = [
|
||||
{ key: "objekte", label: "Objekte" },
|
||||
@@ -18,6 +19,7 @@ const TABS: { key: Tab; label: string }[] = [
|
||||
{ key: "material", label: "Material" },
|
||||
{ key: "struktur", label: "Struktur" },
|
||||
{ key: "standorte", label: "Standorte" },
|
||||
{ key: "benutzer", label: "Benutzer" },
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -37,12 +39,13 @@ export function AdminPage() {
|
||||
const [vorlagen, setVorlagen] = useState<Beladungsvorlage[]>([]);
|
||||
const [objekte, setObjekte] = useState<Objekt[]>([]);
|
||||
const [materialien, setMaterialien] = useState<Material[]>([]);
|
||||
const [benutzer, setBenutzer] = useState<Benutzer[]>([]);
|
||||
const [fehler, setFehler] = useState<string | null>(null);
|
||||
const [laedt, setLaedt] = useState(true);
|
||||
const [tab, setTab] = useState<Tab>("objekte");
|
||||
|
||||
async function ladeAlles() {
|
||||
const [be, ka, ot, s, v, o, m] = await Promise.all([
|
||||
const [be, ka, ot, s, v, o, m, b] = await Promise.all([
|
||||
apiRequest<Bereich[]>("/bereiche"),
|
||||
apiRequest<Kategorie[]>("/kategorien"),
|
||||
apiRequest<Objekttyp[]>("/objekttypen"),
|
||||
@@ -50,6 +53,7 @@ export function AdminPage() {
|
||||
apiRequest<Beladungsvorlage[]>("/vorlagen"),
|
||||
apiRequest<Objekt[]>("/objekte"),
|
||||
apiRequest<Material[]>("/materialien"),
|
||||
apiRequest<Benutzer[]>("/benutzer"),
|
||||
]);
|
||||
setBereiche(be);
|
||||
setKategorien(ka);
|
||||
@@ -58,6 +62,7 @@ export function AdminPage() {
|
||||
setVorlagen(v);
|
||||
setObjekte(o);
|
||||
setMaterialien(m);
|
||||
setBenutzer(b);
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
@@ -134,6 +139,9 @@ export function AdminPage() {
|
||||
{tab === "standorte" && (
|
||||
<StandortSection standorte={standorte} onGeaendert={ladeAlles} onFehler={setFehler} />
|
||||
)}
|
||||
{tab === "benutzer" && (
|
||||
<BenutzerSection benutzer={benutzer} onGeaendert={ladeAlles} onFehler={setFehler} />
|
||||
)}
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user