import type { Benutzer } from "@/generated/prisma/client"; import { BestaetigungFehler, RechteFehler } from "@/server/auth/sitzungspflicht"; import { HostFehler, type Akteur } from "@/server/services/hosts"; /** * Gemeinsames fuer Formular-Aktionen (#008). Kein "use server": diese Datei exportiert * Hilfen, keine Aktionen – sonst waeren sie vom Browser aus aufrufbar. */ export type FormularZustand = { readonly fehler?: string; readonly feldfehler?: Record; }; /** Fachliche Fehler werden zur Meldung im Formular; alles andere bleibt ein echter Fehler. */ export function fehlerZustand(fehler: unknown): FormularZustand { if (fehler instanceof HostFehler) { return { fehler: fehler.message, feldfehler: fehler.feldfehler }; } if (fehler instanceof RechteFehler || fehler instanceof BestaetigungFehler) { return { fehler: fehler.message }; } throw fehler; } export function akteurVon(benutzer: Pick): Akteur { return { id: benutzer.id, name: benutzer.name }; } /** Einzelnes Textfeld; fehlend bleibt `undefined`, damit Standardwerte des Schemas greifen. */ export function textfeld(formular: FormData, name: string): string | undefined { const wert = formular.get(name); return typeof wert === "string" && wert !== "" ? wert : undefined; } export function listenfeld(formular: FormData, name: string): string[] { return formular.getAll(name).filter((w): w is string => typeof w === "string" && w !== ""); }