import { ACTION_STATUSES, PRIORITIES } from '../constants/status.js' import { ACTION_STATUS_LABELS, PRIORITY_LABELS } from '../constants/status.js' import { ActorSelect } from './ActorSelect.jsx' import { GateSelect } from './GateSelect.jsx' import { flattenLeafProjectOptions, getLeafProjects } from '../utils/projectTree.js' import { PLANNING_SPRINT_STATUSES } from '../utils/workCycleActions.js' function isoToLocalInput(iso) { if (!iso) return '' const d = new Date(iso) const pad = (n) => String(n).padStart(2, '0') return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}` } export function ActionForm({ initial = {}, projects = [], roadmapItems = [], workCycles = [], activeWorkCycle = null, actors = [], actorsLoading = false, actorsError = null, actorsUsedFallback = false, onReloadActors, onSubmit, onCancel, busy = false, submitLabel = 'Speichern', }) { async function handleSubmit(e) { e.preventDefault() const form = e.target const selected = actors.filter((a) => form[`actor_${a.id}`]?.checked).map((a) => a.id) await onSubmit({ title: form.title.value.trim(), description: form.description.value, status: form.status.value, priority: form.priority.value, due_at: form.due_at.value ? new Date(form.due_at.value).toISOString() : null, project_id: form.project_id?.value || undefined, roadmap_item_id: form.roadmap_item_id?.value || undefined, work_cycle_id: form.work_cycle_id?.value || undefined, assigned_actor_ids: selected, }) } const defaultActors = initial.assigned_actor_ids || [] const leafProjects = getLeafProjects(projects) const projectOptions = flattenLeafProjectOptions(projects) const cycleOptions = workCycles.filter( (c) => PLANNING_SPRINT_STATUSES.has(c.status) || c.id === initial.work_cycle_id, ) const defaultCycleId = initial.work_cycle_id || (activeWorkCycle?.id && !initial.id ? activeWorkCycle.id : '') return (
) }