diff --git a/frontend/src/components/BacklogSection.jsx b/frontend/src/components/BacklogSection.jsx index 7fa6838..0377fd5 100644 --- a/frontend/src/components/BacklogSection.jsx +++ b/frontend/src/components/BacklogSection.jsx @@ -12,12 +12,14 @@ import { useMinWidth } from '../hooks/useMinWidth.js' const PLANNING_STATUSES = new Set(['planned', 'active', 'at_risk']) /** Backend erlaubt Convert für diese Status — UI war nur bei „Freigegeben“ sichtbar. */ const COMMITTABLE_STATUSES = new Set(['accepted', 'triaged', 'new']) +const SPRINT_TARGET_STORAGE_PREFIX = 'kairo-sprint-target:' export function BacklogSection({ items, roadmapItems = [], workCycles = [], activeWorkCycle = null, + initiativeId = '', sprintPlanningEnabled = false, canManage, onCreate, @@ -46,8 +48,12 @@ export function BacklogSection({ const showSprintPlanning = sprintPlanningEnabled && planableSprints.length > 0 useEffect(() => { - if (!showSprintPlanning) { - setSprintTargetId('') + if (!showSprintPlanning || !initiativeId) { + return + } + const stored = sessionStorage.getItem(SPRINT_TARGET_STORAGE_PREFIX + initiativeId) + if (stored && planableSprints.some((cycle) => cycle.id === stored)) { + setSprintTargetId(stored) return } if (sprintTargetId && planableSprints.some((cycle) => cycle.id === sprintTargetId)) { @@ -55,7 +61,12 @@ export function BacklogSection({ } const preferred = activeWorkCycle?.id || planableSprints[0]?.id || '' setSprintTargetId(preferred) - }, [showSprintPlanning, sprintTargetId, planableSprints, activeWorkCycle?.id]) + }, [showSprintPlanning, initiativeId, planableSprints, activeWorkCycle?.id]) + + useEffect(() => { + if (!initiativeId || !sprintTargetId) return + sessionStorage.setItem(SPRINT_TARGET_STORAGE_PREFIX + initiativeId, sprintTargetId) + }, [initiativeId, sprintTargetId]) const selectedSprint = planableSprints.find((cycle) => cycle.id === sprintTargetId) || null diff --git a/frontend/src/components/WorkCyclesPanel.jsx b/frontend/src/components/WorkCyclesPanel.jsx index f54b93d..64705e2 100644 --- a/frontend/src/components/WorkCyclesPanel.jsx +++ b/frontend/src/components/WorkCyclesPanel.jsx @@ -5,10 +5,13 @@ import { EmptyState } from './EmptyState.jsx' export function WorkCyclesPanel({ workCycles = [], activeWorkCycle = null, + selectedSprintId = '', + actionCountByCycleId = {}, canManage, onCreate, onActivate, onComplete, + onSelectSprint, busy = false, }) { const [title, setTitle] = useState('') @@ -34,8 +37,8 @@ export function WorkCyclesPanel({

Sprint

- Der aktive Sprint definiert den Sprint-Backlog — committete Arbeitspakete mit - Sprint-Zuweisung erscheinen unter Ausführen → Sprint. + Sprint anklicken, um den geplanten Sprint-Backlog zu sehen — aktiv oder geplant. + Committete Arbeitspakete aus dem Eingang erscheinen beim gewählten Sprint.

@@ -46,12 +49,9 @@ export function WorkCyclesPanel({ {activeWorkCycle.goal_description && ( — {activeWorkCycle.goal_description} )} - {typeof activeWorkCycle.open_action_count === 'number' && ( - ({activeWorkCycle.open_action_count} offene APs) - )}

) : ( -

Kein aktiver Sprint — committete Arbeitspakete gelten als Product-Ist.

+

Kein aktiver Sprint — du kannst trotzdem geplante Sprints einsehen.

)} {canManage && ( @@ -91,38 +91,57 @@ export function WorkCyclesPanel({ {workCycles.length === 0 ? ( ) : ( -