import { useEffect, useState } from "react"; import { apiRequest } from "../../api/client"; import type { Benutzer, Kontrollverantwortung, Objekt } from "../../api/types"; interface Props { objekte: Objekt[]; benutzer: Benutzer[]; onFehler: (text: string) => void; } /** Karte 01 / Sprintplan E3: reine Sichtbarkeit/Priorisierung ("wer soll dieses * Objekt kontrollieren"), erzwingt keine Pflichtkontrolle - entweder ein * konkreter Benutzer oder eine Gruppe (Freitext, z.B. "Frühschicht"). */ export function KontrollverantwortungSection({ objekte, benutzer, onFehler }: Props) { const [eintraege, setEintraege] = useState([]); const [laedt, setLaedt] = useState(true); const [objektId, setObjektId] = useState(""); const [zuordnungsart, setZuordnungsart] = useState<"benutzer" | "gruppe">("benutzer"); const [benutzerId, setBenutzerId] = useState(""); const [gruppe, setGruppe] = useState(""); const [wirdAngelegt, setWirdAngelegt] = useState(false); async function laden() { setLaedt(true); try { const daten = await apiRequest("/kontrollverantwortung"); setEintraege(daten); } catch { onFehler("Kontrollverantwortung konnte nicht geladen werden."); } finally { setLaedt(false); } } useEffect(() => { laden(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); async function anlegen() { if (objektId === "") { onFehler("Objekt auswählen."); return; } setWirdAngelegt(true); try { await apiRequest("/kontrollverantwortung", { method: "POST", body: { objekt_id: objektId, benutzer_id: zuordnungsart === "benutzer" ? benutzerId || null : null, gruppe: zuordnungsart === "gruppe" ? gruppe : null, }, }); setObjektId(""); setBenutzerId(""); setGruppe(""); await laden(); } catch { onFehler("Kontrollverantwortung konnte nicht angelegt werden."); } finally { setWirdAngelegt(false); } } async function loeschen(id: string) { try { await apiRequest(`/kontrollverantwortung/${id}`, { method: "DELETE" }); await laden(); } catch { onFehler("Kontrollverantwortung konnte nicht gelöscht werden."); } } function objektLabel(id: number): string { const o = objekte.find((x) => x.id === id); return o ? `${o.name} (${o.code})` : `Objekt ${id}`; } function benutzerLabel(id: number | null): string | null { if (id === null) return null; return benutzer.find((b) => b.id === id)?.name ?? `Benutzer ${id}`; } const kannAnlegen = objektId !== "" && ((zuordnungsart === "benutzer" && benutzerId !== "") || (zuordnungsart === "gruppe" && gruppe)); return (

Kontrollverantwortung

Wer soll dieses Objekt kontrollieren - reine Sichtbarkeit/Priorisierung, keine Pflichtkontrolle.

{zuordnungsart === "benutzer" ? (
) : (
setGruppe(e.target.value)} placeholder="z. B. Frühschicht" />
)}
{laedt &&

Lade…

} {!laedt && eintraege.length === 0 && (

Keine Zuordnungen.

)} {!laedt && eintraege.length > 0 && (
    {eintraege.map((e) => (
  • {objektLabel(e.objekt_id)} {" "} {benutzerLabel(e.benutzer_id) ?? e.gruppe}
  • ))}
)}
); }