import { useEffect, useMemo } from 'react' import { Link } from 'react-router-dom' import { RequireInitiativeScope } from '../../components/RequireInitiativeScope.jsx' import { InitiativeActionsHub } from '../../components/InitiativeActionsHub.jsx' import { NextActionWidget } from '../../widgets/NextActionWidget.jsx' import { LoadingState } from '../../components/LoadingState.jsx' import { EmptyState } from '../../components/EmptyState.jsx' import { useInitiativeOperations } from '../../context/InitiativeOperationsContext.jsx' import { useProgramScope } from '../../context/ProgramScopeContext.jsx' import { scopedPath } from '../../utils/routes.js' function WorkSprintInner() { const { initiativeId, hrefWithScope } = useProgramScope() const ops = useInitiativeOperations() const { activeWorkCycle, sprintActions, projects, roadmapItems, capabilities, hideDone, setHideDone, loading, error, formBusy, showActionForm, setShowActionForm, editingActionId, setEditingActionId, actionContextById, actors, actorsLoading, actorsError, actorsUsedFallback, reloadActors, handleCreateAction, handleUpdateAction, handleQuickStatus, handleCreateBlockerForAction, handleMoveActionToSprint, handleUnplanAction, initiative, operatingContext, dataSlices, uiFeatures, steeringSnapshot, steeringSnapshotLoading, visibleActions, reloadSlices, } = ops const supportsWorkCycles = dataSlices.includes('work_cycles') const isContinuousProductMode = uiFeatures.continuousProductWorkMode && supportsWorkCycles const loadSteeringSnapshot = uiFeatures.steeringSnapshotOnWorkSprint useEffect(() => { if (initiativeId && loadSteeringSnapshot && !steeringSnapshot && !steeringSnapshotLoading) { reloadSlices(['steering_snapshot']) } }, [ initiativeId, loadSteeringSnapshot, steeringSnapshot, steeringSnapshotLoading, reloadSlices, ]) const defaultWorkCycleId = activeWorkCycle?.id || '' const createAction = useMemo( () => async (payload) => { await handleCreateAction({ ...payload, work_cycle_id: payload.work_cycle_id || defaultWorkCycleId || undefined, }) }, [handleCreateAction, defaultWorkCycleId], ) if (loading) { return } const isProductArchetype = isContinuousProductMode return ( <> {error &&

{error}

} {!activeWorkCycle && isProductArchetype && ( <>

Product-Ist (ohne aktiven Sprint)

Kein aktiver Sprint — Kairo steuert nach{' '} {operatingContext?.method_key || 'continuous_product'} (wirkungsvollster Schritt). Sprint-Planung unter{' '} Plan → Sprint .

setShowActionForm((v) => !v)} editingActionId={editingActionId} onEditAction={setEditingActionId} onCancelEdit={() => setEditingActionId(null)} onCreateAction={handleCreateAction} onUpdateAction={handleUpdateAction} onQuickStatus={handleQuickStatus} onCreateBlockerForAction={handleCreateBlockerForAction} onMoveToSprint={handleMoveActionToSprint} onUnplanToBacklog={handleUnplanAction} canManage={capabilities.has('kairo.action.manage')} canManageBlocker={capabilities.has('kairo.blocker.manage')} formBusy={formBusy} actors={actors} actorsLoading={actorsLoading} actorsError={actorsError} actorsUsedFallback={actorsUsedFallback} onReloadActors={reloadActors} workCycles={ops.workCycles} activeWorkCycle={activeWorkCycle} sectionTitle="Committete Arbeitspakete" sectionLead="Ohne aktiven Sprint — alle offenen Arbeitspakete im Product-Vorhaben." /> )} {activeWorkCycle && ( <>

Sprint-Backlog

{activeWorkCycle.title} {activeWorkCycle.goal_description && ` — ${activeWorkCycle.goal_description}`} {' · '} Product Backlog triagierst du unter{' '} Plan → Eingang .

setShowActionForm((v) => !v)} editingActionId={editingActionId} onEditAction={setEditingActionId} onCancelEdit={() => setEditingActionId(null)} onCreateAction={createAction} onUpdateAction={handleUpdateAction} onQuickStatus={handleQuickStatus} onCreateBlockerForAction={handleCreateBlockerForAction} onMoveToSprint={handleMoveActionToSprint} onUnplanToBacklog={handleUnplanAction} canManage={capabilities.has('kairo.action.manage')} canManageBlocker={capabilities.has('kairo.blocker.manage')} formBusy={formBusy} actors={actors} actorsLoading={actorsLoading} actorsError={actorsError} actorsUsedFallback={actorsUsedFallback} onReloadActors={reloadActors} workCycles={ops.workCycles} activeWorkCycle={activeWorkCycle} allActions={ops.actions} /> )} {!activeWorkCycle && !supportsWorkCycles && ( )} ) } export function WorkSprintPage() { return ( ) }