"use client"; import { useActionState, useState } from "react"; import { Archive, CheckCircle2, Link2, PlayCircle, Undo2 } from "lucide-react"; import { abschnittNichtZutreffendAktion, kommentarHinzufuegenAktion, laufAbschliessenAktion, laufArchivierenAktion, laufMitAdKontoVerknuepfenAktion, laufOeffnenAktion, laufZurueckholenAktion, type AktionsErgebnis, } from "@/server/actions/laeufe"; import { FELD } from "@/lib/formular"; const KNOPF = "flex min-h-11 w-fit items-center gap-2 rounded-pille border border-linie px-4 text-sm text-nebentext hover:bg-flaeche-hoch hover:text-text md:min-h-10"; function Meldung({ ergebnis }: { ergebnis: AktionsErgebnis }) { if (ergebnis.fehler) { return (

{ergebnis.fehler}

); } if (ergebnis.erfolg) { return (

{ergebnis.erfolg}

); } return null; } /** * „Lauf beginnen“ – der Übergang von `OFFEN` zu `IN_ARBEIT`. * * Erst hier entsteht `gestartetAm`. Ein zugewiesener Lauf, den jemand nur * aufschlaegt, hat noch nicht begonnen — sonst saehe die Liste nach Arbeit aus, * die niemand tut. */ export function LaufBeginnen({ laufId }: { laufId: string }) { const [ergebnis, aktion, laeuft] = useActionState(laufOeffnenAktion, {}); return (
); } export function LaufAbschliessen({ laufId, offen }: { laufId: string; offen: number }) { const [ergebnis, aktion, laeuft] = useActionState(laufAbschliessenAktion, {}); return (
{offen > 0 ? (

Noch {offen} {offen === 1 ? "Pflichtschritt ist" : "Pflichtschritte sind"} offen. Erledigt oder „nicht zutreffend“ zählen beide — fehlgeschlagen nicht.

) : null}
); } /** * Archivieren – die zweite, ausdrueckliche Handlung. * * Mit Rueckfrage, weil danach nichts mehr geht: kein Kommentar, keine * nachgetragene Notiz, keine Korrektur. Nur ein Administrator holt den Lauf * zurueck. */ export function LaufArchivieren({ laufId }: { laufId: string }) { const [ergebnis, aktion, laeuft] = useActionState(laufArchivierenAktion, {}); const [sicher, setzeSicher] = useState(false); if (!sicher) { return ( ); } return (

Nach dem Archivieren ändert sich an diesem Lauf nichts mehr — kein Kommentar, keine Notiz, kein Schritt. Nur ein Administrator holt ihn zurück.

); } /** Zurueckholen – nur fuer Administratoren, mit Protokolleintrag. */ export function LaufZurueckholen({ laufId }: { laufId: string }) { const [ergebnis, aktion, laeuft] = useActionState(laufZurueckholenAktion, {}); return (
); } /** * Einen ganzen Abschnitt als nicht zutreffend vermerken. * * Der Fall aus dem Auftrag: im Onboarding gibt es zwei Konto-Abschnitte, und je * nach Kunde trifft einer gar nicht zu. Achtzehn Haken einzeln mit derselben * Begruendung zu versehen, macht niemand — und wer es nicht macht, laesst sie weg. */ export function AbschnittNichtZutreffend({ laufId, abschnittId, abschnitt, }: { laufId: string; abschnittId: string; abschnitt: string; }) { const [ergebnis, aktion, laeuft] = useActionState( abschnittNichtZutreffendAktion, {}, ); const [offen, setzeOffen] = useState(false); if (!offen) { return ( ); } return (