import { useEffect, useState } from 'react' import { INITIATIVE_STATUSES, PRIORITIES } from '../constants/status.js' import { INITIATIVE_STATUS_LABELS, PRIORITY_LABELS } from '../constants/status.js' import { INITIATIVE_ARCHETYPE_LABELS } from '../constants/initiativeArchetypes.js' import { listEntityArchetypes } from '../api/entityArchetypes.js' import { getInitiativeFieldDefinitions, getInitiativeFields, listArchetypeFieldDefinitions, } from '../api/entityFields.js' import { FieldRenderer } from './FieldRenderer.jsx' export function InitiativeForm({ initial = {}, initiativeId = null, onSubmit, onCancel, busy = false, submitLabel = 'Speichern', }) { const [archetypes, setArchetypes] = useState(null) const [archetypeKey, setArchetypeKey] = useState(initial.archetype_key || 'initiative.generic') const [fieldDefinitions, setFieldDefinitions] = useState([]) const [dynamicValues, setDynamicValues] = useState({}) const [fieldsLoading, setFieldsLoading] = useState(false) useEffect(() => { let cancelled = false listEntityArchetypes('initiative') .then((items) => { if (!cancelled) setArchetypes(items) }) .catch(() => { if (!cancelled) { setArchetypes( Object.entries(INITIATIVE_ARCHETYPE_LABELS).map(([key, label]) => ({ key, label, })), ) } }) return () => { cancelled = true } }, []) useEffect(() => { let cancelled = false setFieldsLoading(true) async function loadFields() { try { let definitions = [] let values = {} if (initiativeId) { definitions = await getInitiativeFieldDefinitions(initiativeId) values = await getInitiativeFields(initiativeId) } else if (archetypeKey) { definitions = await listArchetypeFieldDefinitions('initiative', archetypeKey) } if (!cancelled) { setFieldDefinitions(definitions) setDynamicValues(values) } } catch { if (!cancelled) { setFieldDefinitions([]) setDynamicValues({}) } } finally { if (!cancelled) setFieldsLoading(false) } } loadFields() return () => { cancelled = true } }, [initiativeId, archetypeKey]) async function handleSubmit(e) { e.preventDefault() const form = e.target await onSubmit({ title: form.title.value.trim(), archetype_key: form.archetype_key.value, goal: form.goal.value, vision: form.vision.value, target_state_summary: form.target_state_summary.value, status: form.status.value, priority: form.priority.value, dynamicFields: dynamicValues, }) } function handleDynamicChange(fieldKey, value) { setDynamicValues((prev) => ({ ...prev, [fieldKey]: value })) } const formReady = archetypes && !fieldsLoading return (