From 486736f26722c7fae3bf6d10c6de16fd4e688fc9 Mon Sep 17 00:00:00 2001 From: Madhura68 Date: Fri, 8 May 2026 02:02:24 +0200 Subject: [PATCH] feat: nieuwe sprint wordt direct geselecteerd zonder redirect createSprintAction zet nu de active-sprint cookie naar de zojuist aangemaakte sprint, en de StartSprintButton refresht de huidige pagina i.p.v. te redirecten naar /sprint. Resultaat: gebruiker blijft op de product backlog en ziet de nieuwe sprint direct geselecteerd in de sprint-pulldown. Co-Authored-By: Claude Opus 4.7 (1M context) --- __tests__/actions/sprint-dates.test.ts | 2 +- actions/sprints.ts | 1 + components/sprint/start-sprint-button.tsx | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/__tests__/actions/sprint-dates.test.ts b/__tests__/actions/sprint-dates.test.ts index 875ab1d..6adb153 100644 --- a/__tests__/actions/sprint-dates.test.ts +++ b/__tests__/actions/sprint-dates.test.ts @@ -1,7 +1,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest' vi.mock('next/cache', () => ({ revalidatePath: vi.fn() })) -vi.mock('next/headers', () => ({ cookies: vi.fn().mockResolvedValue({}) })) +vi.mock('next/headers', () => ({ cookies: vi.fn().mockResolvedValue({ set: vi.fn(), get: vi.fn(), delete: vi.fn() }) })) vi.mock('iron-session', () => ({ getIronSession: vi.fn().mockResolvedValue({ userId: 'user-1', isDemo: false }), })) diff --git a/actions/sprints.ts b/actions/sprints.ts index dc5d55e..a431ced 100644 --- a/actions/sprints.ts +++ b/actions/sprints.ts @@ -72,6 +72,7 @@ export async function createSprintAction(_prevState: unknown, formData: FormData }), ) + await setActiveSprintCookie(parsed.data.productId, sprint.id) revalidatePath(`/products/${parsed.data.productId}`) return { success: true, sprintId: sprint.id } } diff --git a/components/sprint/start-sprint-button.tsx b/components/sprint/start-sprint-button.tsx index 2889c48..9d3ab18 100644 --- a/components/sprint/start-sprint-button.tsx +++ b/components/sprint/start-sprint-button.tsx @@ -51,7 +51,7 @@ export function StartSprintButton({ productId, isDemo = false }: StartSprintButt if (result?.success) { setOpen(false) setDirty(false) - router.push(`/products/${productId}/sprint`) + router.refresh() } else if (result?.code !== 422 && result?.error) { // Toast handled by caller; here we just keep the form open }