import { Link } from 'react-router-dom' import { useMemo, useState } from 'react' import { EmptyState } from './EmptyState.jsx' import { StatusBadge } from './StatusBadge.jsx' import { PriorityBadge } from './PriorityBadge.jsx' import { Modal } from './Modal.jsx' import { ActionForm } from './ActionForm.jsx' import { gateTitleById } from './GateSelect.jsx' import { buildProjectPath, collectProjectSubtreeIds } from '../utils/projectTree.js' import { actionPath } from '../utils/routes.js' function formatProjectContext(projects, projectId) { if (!projectId) return 'Direkt am Vorhaben' const path = buildProjectPath(projects, projectId) return path.map((p) => p.title).join(' → ') } export function PlanActionsSection({ actions, projects = [], roadmapItems = [], scopeProjectId = '', hideDone, onHideDoneChange, canManage, onCreateAction, actors, actorsLoading, actorsError, actorsUsedFallback, onReloadActors, busy, }) { const [showCreate, setShowCreate] = useState(false) const visibleActions = useMemo(() => { let list = hideDone ? actions.filter((a) => a.status !== 'done' && a.status !== 'discarded') : [...actions] if (scopeProjectId) { const subtreeIds = collectProjectSubtreeIds(projects, scopeProjectId) list = list.filter((a) => a.project_id && subtreeIds.has(a.project_id)) } return list.sort((a, b) => { const projectA = a.project_id || '' const projectB = b.project_id || '' if (projectA !== projectB) { if (!projectA) return -1 if (!projectB) return 1 return projectA.localeCompare(projectB) } return (a.title || '').localeCompare(b.title || '') }) }, [actions, hideDone, scopeProjectId, projects]) async function handleCreate(payload) { await onCreateAction(payload) setShowCreate(false) } return (

Arbeit

Committete Arbeitspakete im Plan-Kontext — Detail und Ausführung über die Objektseite.

{canManage && ( )}
{scopeProjectId && (

Gefiltert nach Projekt im Scope — Scope oben leeren für alle Arbeitspakete.

)} {visibleActions.length === 0 && ( )} setShowCreate(false)} size="lg"> setShowCreate(false)} busy={busy} submitLabel="Anlegen" />
) }