'use client' import { useState, useTransition, type ReactNode } from 'react' import { commonText } from '@/lib/i18n/common' /** * Ein aufklappbares Formular zum Hinzufügen. * * Beteiligte, Verknüpfungen, Dokumente, Zuordnungen — überall derselbe Ablauf: * ein Knopf, ein kleines Formular, eine Server Action, eine Fehlermeldung an * Ort und Stelle. Das viermal zu wiederholen kostete nicht nur Zeilen, sondern * auch Bündelgrösse auf der Fallakte, die ohnehin die dichteste Seite ist. * * Der Rückruf bekommt `schliessen`, damit das Formular nur nach einem Erfolg * zugeht — ein Fehler soll die Eingabe nicht wegräumen. */ export function AddPanel({ label, hint, children, submitLabel, onSubmit, disabled, }: { label: string hint?: string /** Die Eingabefelder. Bekommen den Wartezustand über `disabled`. */ children: ReactNode submitLabel?: string onSubmit: () => Promise<{ ok: boolean; error?: string }> disabled?: boolean }) { const [offen, setOffen] = useState(false) const [fehler, setFehler] = useState(null) const [pending, startTransition] = useTransition() if (!offen) { return ( ) } return (
{hint ?

{hint}

: null}
{children}
{fehler ?

{fehler}

: null}
) } /** Die Auswahlfelder in einem `AddPanel` sehen überall gleich aus. */ export function PanelSelect({ value, onChange, label, children, }: { value: string onChange: (value: string) => void label: string children: ReactNode }) { return ( ) }