import { useCallback, useEffect, useState } from 'react' import { createActionTask, deleteTask, listActionTasks, updateTask, } from '../api/tasks.js' import { TASK_STATUSES, TASK_STATUS_LABELS } from '../constants/status.js' import { EmptyState } from './EmptyState.jsx' import { gateTitleById } from './GateSelect.jsx' export function TasksSection({ actionId, canManage, roadmapItems = [] }) { const [tasks, setTasks] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [busy, setBusy] = useState(false) const [title, setTitle] = useState('') const [gateId, setGateId] = useState('') const load = useCallback(async () => { if (!actionId) return setLoading(true) setError(null) try { setTasks(await listActionTasks(actionId)) } catch (err) { setError(err.message) } finally { setLoading(false) } }, [actionId]) useEffect(() => { load() }, [load]) async function handleCreate(e) { e.preventDefault() if (!title.trim()) return setBusy(true) try { await createActionTask(actionId, { title: title.trim(), roadmap_item_id: gateId || undefined, }) setTitle('') setGateId('') await load() } catch (err) { setError(err.message) } finally { setBusy(false) } } async function handleStatus(taskId, status) { setBusy(true) try { await updateTask(taskId, { status }) await load() } catch (err) { setError(err.message) } finally { setBusy(false) } } async function handleGate(taskId, roadmapItemId) { setBusy(true) try { await updateTask(taskId, { roadmap_item_id: roadmapItemId || undefined, clear_roadmap_item: !roadmapItemId, }) await load() } catch (err) { setError(err.message) } finally { setBusy(false) } } async function handleDelete(taskId) { setBusy(true) try { await deleteTask(taskId) await load() } catch (err) { setError(err.message) } finally { setBusy(false) } } if (loading) return

Tasks werden geladen…

return (

Aufgaben

Kleinste ausführbare Schritte — optional einem Zielzustand (Gate) zugeordnet.

{error &&

{error}

} {canManage && (
{roadmapItems.length > 0 && ( )}
)} {tasks.length === 0 && ( )}
) }