'use client' import { useActionState, useState } from 'react' import { caseText, participantText } from '@/lib/i18n/cases' import { clearanceText } from '@/lib/i18n/common' import { PARTICIPANT_ROLES } from '@/lib/cases/terms' import { createCaseAction, type CreateState } from '../actions' /** Ein Beteiligter im Formular, bevor die Akte existiert. */ type Entwurf = { schluessel: number; ziel: string; rolle: string } export function NewCaseForm({ templates, levels, people, members, defaultLevel, }: { templates: { key: string; name: string }[] levels: { level: number; name: string }[] people: { id: string; displayName: string }[] members: { id: string; displayName: string }[] defaultLevel: number }) { const [state, action, pending] = useActionState(createCaseAction, {}) // Beliebig viele Beteiligte, jeder mit seiner Rolle. Vorher gab es genau // eine „betroffene Person" - wer einen Zeugen und einen Täter eintragen // wollte, musste die Akte erst anlegen und dann noch einmal hinein. const [beteiligte, setBeteiligte] = useState([]) const [naechster, setNaechster] = useState(1) function hinzufuegen() { setBeteiligte((bisher) => [...bisher, { schluessel: naechster, ziel: '', rolle: 'SUBJECT' }]) setNaechster((n) => n + 1) } function aendern(schluessel: number, teil: Partial) { setBeteiligte((bisher) => bisher.map((eintrag) => eintrag.schluessel === schluessel ? { ...eintrag, ...teil } : eintrag, ), ) } return (
{/* Die Auswahl zeigt nur, was erlaubt ist. Geprüft wird trotzdem serverseitig. */}
{participantText.heading}

{participantText.hint}

{beteiligte.length === 0 ? (

{participantText.empty}

) : (
    {beteiligte.map((eintrag) => (
  • {/* Ein verstecktes Feld je Zeile: die Server Action liest sie mit getAll und braucht keine Zählung im Namen. */}
  • ))}
)}
{state.error ? ( {state.error} ) : null}
) }