- useSprintStore met sprintStoryOrder/taskOrder (ST-301) - Sprint aanmaken modal met Sprint Goal validatie (ST-302) - Sprint Backlog pagina SplitPane layout met Sprint Goal header (ST-303) - Stories toevoegen aan Sprint via knop in rechterpaneel (ST-304) - Sprint Backlog volgorde aanpassen via dnd-kit (ST-305) - Story uit Sprint verwijderen met status terug naar OPEN (ST-306) - Sprint Planning pagina SplitPane met story selectie (ST-307) - Taken aanmaken inline in rechterpaneel (ST-308) - Taak drag-and-drop verticaal met optimistische update (ST-309) - Taakstatus toggle TO_DO/IN_PROGRESS/DONE met voortgangsindicator (ST-310) - Taak inline bewerken en verwijderen (ST-311) - Sprint afronden dialoog met per-story Done/Terug keuze (ST-312) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
'use client'
|
|
|
|
import { useSelectionStore } from '@/stores/selection-store'
|
|
import { TaskList } from './task-list'
|
|
import type { Task } from './task-list'
|
|
import type { SprintStory } from './sprint-backlog'
|
|
|
|
interface PlanningRightClientProps {
|
|
sprintId: string
|
|
productId: string
|
|
stories: SprintStory[]
|
|
tasksByStory: Record<string, Task[]>
|
|
isDemo: boolean
|
|
}
|
|
|
|
export function PlanningRightClient({ sprintId, productId, stories, tasksByStory, isDemo }: PlanningRightClientProps) {
|
|
const { selectedStoryId } = useSelectionStore()
|
|
|
|
const story = stories.find(s => s.id === selectedStoryId)
|
|
const tasks = selectedStoryId ? (tasksByStory[selectedStoryId] ?? []) : []
|
|
|
|
if (!selectedStoryId || !story) {
|
|
return (
|
|
<div className="flex items-center justify-center h-full">
|
|
<p className="text-sm text-muted-foreground">Selecteer een story om de taken te bekijken.</p>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<TaskList
|
|
storyId={selectedStoryId}
|
|
sprintId={sprintId}
|
|
productId={productId}
|
|
tasks={tasks}
|
|
isDemo={isDemo}
|
|
/>
|
|
)
|
|
}
|