feat(stammdaten): Mitarbeiter, Abteilungen und Geraete (#25)
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s

This commit was merged in pull request #25.
This commit is contained in:
2026-09-25 10:52:44 +00:00
parent e3d80e5982
commit f85bc87324
81 changed files with 6784 additions and 59 deletions
+42
View File
@@ -0,0 +1,42 @@
"use client";
import { useActionState } from "react";
import { mitarbeiterAktivSetzenAktion, type AktionsErgebnis } from "@/server/actions/mitarbeiter";
/**
* Deaktivieren und wieder aktivieren.
*
* Der einzige „Weg hinaus“ – geloescht wird nichts. Ein archivierter Lauf zeigt
* auf diese Person, und dieser Verweis muss in zehn Jahren noch aufloesbar sein.
*/
export function MitarbeiterAktiv({ mitarbeiterId, aktiv }: { mitarbeiterId: string; aktiv: boolean }) {
const [ergebnis, aktion, laeuft] = useActionState<AktionsErgebnis, FormData>(
mitarbeiterAktivSetzenAktion,
{},
);
return (
<div>
<form action={aktion}>
<input type="hidden" name="mitarbeiterId" value={mitarbeiterId} />
<input type="hidden" name="aktiv" value={aktiv ? "false" : "true"} />
<button
type="submit"
disabled={laeuft}
className={`flex min-h-11 w-fit items-center rounded-pille px-4 text-sm md:min-h-10 ${
aktiv
? "border border-linie text-nebentext hover:bg-flaeche-hoch hover:text-text"
: "bg-flaeche-hoch text-nebentext hover:text-text"
}`}
>
{aktiv ? "deaktivieren" : "wieder aktivieren"}
</button>
</form>
{ergebnis.fehler ? (
<p role="alert" className="mt-2 max-w-prose text-sm text-fehler">
{ergebnis.fehler}
</p>
) : null}
</div>
);
}