import { useMemo } from 'react' import { Link } from 'react-router-dom' import { RequireInitiativeScope } from '../../components/RequireInitiativeScope.jsx' import { ScopedInitiativeProvider } from '../../layout/ScopedInitiativeProvider.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, editingAction, setEditingAction, actionContextById, actors, actorsLoading, actorsError, actorsUsedFallback, reloadActors, handleCreateAction, handleUpdateAction, handleQuickStatus, handleCreateBlockerForAction, initiative, steeringSnapshot, steeringSnapshotLoading, visibleActions, } = ops 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 = initiative?.archetype_key === 'initiative.product' return ( <> {error &&

{error}

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

Product-Ist (ohne aktiven Sprint)

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

setShowActionForm((v) => !v)} editingActionId={editingAction?.id} onEditAction={setEditingAction} onCancelEdit={() => setEditingAction(null)} onCreateAction={handleCreateAction} onUpdateAction={handleUpdateAction} onQuickStatus={handleQuickStatus} onCreateBlockerForAction={handleCreateBlockerForAction} 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={editingAction?.id} onEditAction={setEditingAction} onCancelEdit={() => setEditingAction(null)} onCreateAction={createAction} onUpdateAction={handleUpdateAction} onQuickStatus={handleQuickStatus} onCreateBlockerForAction={handleCreateBlockerForAction} 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} /> )} ) } export function WorkSprintPage() { return ( ) }