From 4dd62c199cf59a83fe12fb61a9264efbd04f81ab Mon Sep 17 00:00:00 2001 From: janpeter visser Date: Fri, 24 Apr 2026 11:46:18 +0200 Subject: [PATCH] feat: ST-201-ST-210 M2 stories, drag-and-drop en Zustand stores - usePlannerStore met pbiOrder/storyOrder init/reorder/rollback (ST-201) - useSelectionStore uitgebreid met selectedStoryId en clearSelection (ST-202) - PBI drag-and-drop binnen prioriteitsgroep via dnd-kit (ST-203) - PBI slepen over prioriteitsgrens wijzigt priority (ST-204) - Stories als blokken met prioriteit- en statusbadge (ST-205/ST-206) - Story drag-and-drop horizontaal binnen en tussen groepen (ST-207) - Story detail slide-over met bewerkformulier (ST-208) - Story verwijderen met bevestigingsstap (ST-209) - Filter op status en prioriteit in rechterpaneel (ST-210) - Fix: infinite loop in useEffect door stabiele string dependency Co-Authored-By: Claude Sonnet 4.6 --- .icons/icon-512.png | Bin 0 -> 40532 bytes .icons/icon-master.svg | 92 ++++++ .icons/icons/INSTALL.md | 125 +++++++ .icons/icons/app-icon.tsx | 70 ++++ .icons/icons/favicon.ico | Bin 0 -> 569 bytes .icons/icons/icon-120.png | Bin 0 -> 7218 bytes .icons/icons/icon-144.png | Bin 0 -> 8877 bytes .icons/icons/icon-152.png | Bin 0 -> 9566 bytes .icons/icons/icon-16.png | Bin 0 -> 573 bytes .icons/icons/icon-180.png | Bin 0 -> 11527 bytes .icons/icons/icon-192.png | Bin 0 -> 12479 bytes .icons/icons/icon-32.png | Bin 0 -> 1130 bytes .icons/icons/icon-48.png | Bin 0 -> 1799 bytes .icons/icons/icon-512.png | Bin 0 -> 40532 bytes .icons/icons/icon-76.png | Bin 0 -> 4162 bytes .icons/icons/icon-master.svg | 92 ++++++ .icons/icons/icon-simple.svg | 40 +++ CLAUDE.md | 22 +- Srum4MeIcons.html | 384 ++++++++++++++++++++++ actions/stories.ts | 195 +++++++++++ app/(app)/products/[id]/page.tsx | 25 +- components/backlog/pbi-list.tsx | 289 ++++++++++++---- components/backlog/story-panel.tsx | 506 +++++++++++++++++++++++++++-- stores/planner-store.ts | 46 +++ stores/selection-store.ts | 8 +- 25 files changed, 1794 insertions(+), 100 deletions(-) create mode 100644 .icons/icon-512.png create mode 100644 .icons/icon-master.svg create mode 100644 .icons/icons/INSTALL.md create mode 100644 .icons/icons/app-icon.tsx create mode 100644 .icons/icons/favicon.ico create mode 100644 .icons/icons/icon-120.png create mode 100644 .icons/icons/icon-144.png create mode 100644 .icons/icons/icon-152.png create mode 100644 .icons/icons/icon-16.png create mode 100644 .icons/icons/icon-180.png create mode 100644 .icons/icons/icon-192.png create mode 100644 .icons/icons/icon-32.png create mode 100644 .icons/icons/icon-48.png create mode 100644 .icons/icons/icon-512.png create mode 100644 .icons/icons/icon-76.png create mode 100644 .icons/icons/icon-master.svg create mode 100644 .icons/icons/icon-simple.svg create mode 100644 Srum4MeIcons.html create mode 100644 actions/stories.ts create mode 100644 stores/planner-store.ts diff --git a/.icons/icon-512.png b/.icons/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd109999cfa0684f6bc653c4a201f443a1ff15b GIT binary patch literal 40532 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�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 Sb2S72{F$7vFe)){iTNM5lc>G` literal 0 HcmV?d00001 diff --git a/.icons/icon-master.svg b/.icons/icon-master.svg new file mode 100644 index 0000000..f93d4a6 --- /dev/null +++ b/.icons/icon-master.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.icons/icons/INSTALL.md b/.icons/icons/INSTALL.md new file mode 100644 index 0000000..f2439e7 --- /dev/null +++ b/.icons/icons/INSTALL.md @@ -0,0 +1,125 @@ +# Scrum4Me — Icon installatie voor Next.js + +## Bestandslocaties + +Kopieer de bestanden naar de juiste plek in je Next.js App Router project: + +``` +app/ + favicon.ico ← favicon.ico + icon-192.png ← icon-192.png (rename: icon.png) + apple-icon.png ← icon-180.png (rename: apple-icon.png) + +public/ + icon-512.png ← voor PWA manifest + icon-192.png ← voor PWA manifest + +components/ + shared/ + app-icon.tsx ← herbruikbare React component +``` + +## Stap 1 — Favicon en app icons + +```bash +# Kopieer naar app/ map (Next.js pikt deze automatisch op) +cp favicon.ico ../app/favicon.ico +cp icon-192.png ../app/icon.png +cp icon-180.png ../app/apple-icon.png + +# Kopieer naar public/ voor manifest +cp icon-512.png ../public/icon-512.png +cp icon-192.png ../public/icon-192.png +``` + +## Stap 2 — Metadata in app/layout.tsx + +```tsx +// app/layout.tsx +import type { Metadata } from 'next' + +export const metadata: Metadata = { + title: { + default: 'Scrum4Me', + template: '%s — Scrum4Me', + }, + description: 'Lichtgewicht Scrum-planner voor solo developers en kleine teams', + icons: { + icon: [ + { url: '/favicon.ico', sizes: '48x48' }, + { url: '/icon.png', sizes: '192x192', type: 'image/png' }, + ], + apple: [ + { url: '/apple-icon.png', sizes: '180x180', type: 'image/png' }, + ], + }, + manifest: '/manifest.json', +} +``` + +## Stap 3 — PWA manifest (optioneel) + +Maak `public/manifest.json` aan: + +```json +{ + "name": "Scrum4Me", + "short_name": "Scrum4Me", + "description": "Lichtgewicht Scrum-planner voor solo developers en kleine teams", + "start_url": "/dashboard", + "display": "standalone", + "background_color": "#0d0a14", + "theme_color": "#7c3aed", + "icons": [ + { + "src": "/icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/icon-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ] +} +``` + +## Stap 4 — AppIcon component gebruiken + +```tsx +// In de navigatiebalk: +import { AppIcon } from '@/components/shared/app-icon' + +export function Navbar() { + return ( +

+ ) +} +``` + +## Gegenereerde bestanden — overzicht + +| Bestand | Formaat | Gebruik | +|---|---|---| +| `favicon.ico` | ICO (16+32+48) | Browser tabblad | +| `icon-16.png` | PNG 16×16 | Browser fallback | +| `icon-32.png` | PNG 32×32 | Browser retina tabblad | +| `icon-48.png` | PNG 48×48 | Windows taskbar | +| `icon-76.png` | PNG 76×76 | iPad non-retina | +| `icon-120.png` | PNG 120×120 | iPhone retina | +| `icon-144.png` | PNG 144×144 | Windows tile | +| `icon-152.png` | PNG 152×152 | iPad retina | +| `icon-180.png` | PNG 180×180 | Apple touch icon | +| `icon-192.png` | PNG 192×192 | Android / PWA | +| `icon-512.png` | PNG 512×512 | PWA splash / stores | +| `icon-master.svg` | SVG | Bronbestand (master) | +| `icon-simple.svg` | SVG | Vereenvoudigd voor kleine formaten | +| `app-icon.tsx` | React | Inline SVG component | diff --git a/.icons/icons/app-icon.tsx b/.icons/icons/app-icon.tsx new file mode 100644 index 0000000..0393493 --- /dev/null +++ b/.icons/icons/app-icon.tsx @@ -0,0 +1,70 @@ +// components/shared/app-icon.tsx +// Scrum4Me app icon — concept 5 (Rocket) +// Gebruik: of + +interface AppIconProps { + size?: number + className?: string +} + +export function AppIcon({ size = 32, className }: AppIconProps) { + return ( + + + + + + + + + + + + + {/* Background */} + + + {/* Block 1 — PBI */} + + + {/* Block 2 — Story */} + + + {/* Block 3 — Task */} + + + {/* Rocket nose */} + + + {/* Window */} + + + + + {/* Fins */} + + + + {/* Flame */} + + + + ) +} diff --git a/.icons/icons/favicon.ico b/.icons/icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ab882260d688f14dd0ff65cbf7071c8a4d09341e GIT binary patch literal 569 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 A3jhEB literal 0 HcmV?d00001 diff --git a/.icons/icons/icon-144.png b/.icons/icons/icon-144.png new file mode 100644 index 0000000000000000000000000000000000000000..2e15c3e5c171b4274c86014c506fd8f0a61d922a GIT binary patch literal 8877 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 literal 0 HcmV?d00001 diff --git a/.icons/icons/icon-152.png b/.icons/icons/icon-152.png new file mode 100644 index 0000000000000000000000000000000000000000..88796b1c9e01bd106d04f9f7bcde6f70f804ccd9 GIT binary patch literal 9566 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 CQ;A~$ literal 0 HcmV?d00001 diff --git a/.icons/icons/icon-16.png b/.icons/icons/icon-16.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc2d7a26f38eab38e6c275645eeb57339598d4b GIT binary patch literal 573 zcmV-D0>b@?P) zKsLRw0$$OFMUV?Z00^nS8_RVieJ~#Ps{eL3O*Xx-BD|LZ0~#;Hwrv18frZR2~_ z?36qGRB%2BU%IeF@xgO$-@41!osaz9{}E6lN0ym4ne@e0Q1(>vG{yTbux$qb&+GB< z@hXjGbpZD(rIr=;<{MYmIIP8}`y15#4GwEDmKWE8FhJZ2Gc2Df(5!e=w-Qvh5;Q9w z`Q&mCMhGX&?VX)%Y_rQK*75w#F&KmsHmWIqp0EhQ09MGH>8X7T?jGgFVf7VE!e`DF z_;Tv=u&Cd;zs_b0lz+Y+5gI&U%m+7l4%eNTxPYTmJUKT33noo8mV=eduvdOV#GM|t z7SL_)V@=IrEC+d=VN(aAmVCtlqKOQ(U+=LaandJq6aDM8Pk4W}i6%0%nx%olwj=2s za1%uPphWwiL@br#@@$z-G=pS_b@%wbU!~Rf#z+&$Xw%G`$S=zB*M;2iQ5hrdT#H=#i|`AOI900000 LNkvXXu0mjfK@SbK literal 0 HcmV?d00001 diff --git a/.icons/icons/icon-180.png b/.icons/icons/icon-180.png new file mode 100644 index 0000000000000000000000000000000000000000..628e71391861d7d3c30a1d64188bde0a8a290b68 GIT binary patch literal 11527 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 P5&-fam1QcWz6AY0>*6rW literal 0 HcmV?d00001 diff --git a/.icons/icons/icon-32.png b/.icons/icons/icon-32.png new file mode 100644 index 0000000000000000000000000000000000000000..52081af7cbb026c64b27b35da49b49f2577dbb98 GIT binary patch literal 1130 zcmV-w1eN=VP) zL=h5#a0qaT5Eqbg#bBZxknH2w|B*)QPIJ${& z9{BLa>hwo|Rp?cPgIx{#kBG8QAVkVt=6~R&d6SmuI<~ZQ`C4%TdHfWDd5iHvd`5Ei z;LX%b+z19c8}fI)W4yJcoz|B2o#F_@l&L-elsq z#fwczzyNx5ahK`lg^{=MxuT>KvgzkDn|N{LT}+o-3zzj-9xw#zb)Wg+p;4lNePoh0 z>4Zi6`W50c)1(s?nWRlLu#X3aMs;z3u%U~)O)m%gMv8ZQZt4upeSg#3yTZ>?r;G9X z`$wrUeL6S*h7Jxe(0K$`E zAnD}Bd2-Ir=`YU$khe)f9O2EAakfNmUJHl( zBdCT0w0iE|7A$S`X1f*+gT`ieHWoW81sBcPh< zJH?q$4)3__DZF(pWvG&D$Gxm2XZZ8?6BY3-yI{L5*&2JGB3`aFhI;c8*d7Nks^ROc z_~oXBOL0tPT*&W&s>R3`+#wFiTT+b5;2;>)@VZbBS;N?zQw0ae8U}&L9Tjn)awRl9 zK_cx(nVB-k=?mmWL`pQgWBa+LkGXKY?blfvexa}eSNzRg4TPTa?Cr}QsZ zkDy$&fMC|tHDa#2P7d!G=cPFBL5FBZ2;c<;Fc-^|~|B9ba8-{l=?6DTmgrzHP#gl?0s6WpFtP^ wA|=DwvO;?JGKwh?KCAWG?<_1VtQPwI1-d5NI+HDUV*mgE07*qoM6N<$f@#Pme*gdg literal 0 HcmV?d00001 diff --git a/.icons/icons/icon-48.png b/.icons/icons/icon-48.png new file mode 100644 index 0000000000000000000000000000000000000000..7f394f0304a6154dd2126fec56413c92d8505a3c GIT binary patch literal 1799 zcmV+i2l)7jP)ELQm;30;>M1Xb90zz zbe41`xdHh6-d>Nh?H}>f!UYxbZ|gUdzPM30tk#;(jy%QZA39F6*9XATa+H@&{eoBi z_#BpHHj2;fT)r9e4H|xL@HoP!Hv;c*dwKf!k2!qci#W6k%LK~=hjy`R$GvO`@8taZ zXUJqyjp6}1JkG>>MvE)>10d2U-eDL#{q>)*YhXWC2HS0OAj0-7d-?mjuVPtNBlv7+ z5u?=|cn0t{I_IBw_&#+d6zb_*w(J_u-j_@PdFSmnQp$Z3sUQ8RnkdkB~`7 zRoi`cALFjA_cn+J1z{}>E)NW&iN{BtA(Mi1Qu5pU{2Ui9y~Tw~Z!teVS9C6&6plUk zT^vSJ-T0NWF5T#Je(#PE+B|m@eZtez*EsjV3BtRD@NVJU2Pc@BzFw5m?g_JJ`-64k zbKz(N4{*=m7f2_HYg`%|<>;3Vv1e#I0Gm1koc_%yd$&JSl(+xxFZ0evuhxwRDI7rU z_@KX!F8?kv$>Lgxc%0y-w)}A*=w~^;RF>E28zkuKVe8YZ2Pvd!n} z;q^bfjhQjYq)py9HAXNkdFrPCw7dG* z(Y4Pux36QEw|TxUJgnRU_25D9Is3}ye>M!Z1s*`;AOK2f%oLb5?f9JGy73@5>cs;% zX)l}C#gSXBSI%+KZqs^oc%b|y&h4&;7hrj5kyOI8Nm*-9#gVq+C9PMFhx`C)#{kZ-G$CY4t&K5A-e zrKj&R=yligc2R!TG*e7od6`stu_io7jmv4WpM0omKi$2D*JRc@-O|ZGfjN7KeT0#J=ofYa;#zVEsX{hi8yb`DSsCCYl*3fn1o4jjss)>Adg|^ni z!^#z?6|Ws0@CGVzs*0j)ZxEws5Y^#9a_<3qgdJWfjXSgpv{9H@CA&hlHgJdbtlV4G zV{i7Vk9?hb;Hk)kpHS94d@_)>to<&LtN!SE5Bo?umY$X1vTTus^$K$=Gf{H7COm>%abQ^|QR-MdctN;%?_#9(b7r6HC?BcAuvxP{npHKN;A#G}Yc;*wBR+{M4Xx;d1s8b4dI)kl? z7l8hn8!9Od`AmNM%|%|ns0Job}jrlP8(*?RC~l&J<3 zz^0b)qoUM_M)0|UEg_3%zq-WrWC&mHJ_LweeU~oR6kmJJ%jFwI%ddLzAlA>L%QN4| z|D8C{+V@L^e5Db5uGsIfcyfP|a4$sP`Dyvp7~5X zwQ$nwZu=L=eW03e6MRO5XGQDBV@uN?7oI5l-zvH2?(X)c7WGjP^_Yn4P|znUZ|wg8 pJ_TGCxD1@urh0xMF?Gex`5!jN)&V&?-;)3U002ovPDHLkV1m6$ivj=u literal 0 HcmV?d00001 diff --git a/.icons/icons/icon-512.png b/.icons/icons/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd109999cfa0684f6bc653c4a201f443a1ff15b GIT binary patch literal 40532 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
f;gf&s~iCNfcDhtgFlq|JR8&_i#P9aya++sK^ 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�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 Sb2S72{F$7vFe)){iTNM5lc>G` literal 0 HcmV?d00001 diff --git a/.icons/icons/icon-76.png b/.icons/icons/icon-76.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5c29e492fbff6eff3880f68874f58cc7173706 GIT binary patch literal 4162 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 M07*qoM6N<$f;Gnj8~^|S literal 0 HcmV?d00001 diff --git a/.icons/icons/icon-master.svg b/.icons/icons/icon-master.svg new file mode 100644 index 0000000..f93d4a6 --- /dev/null +++ b/.icons/icons/icon-master.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.icons/icons/icon-simple.svg b/.icons/icons/icon-simple.svg new file mode 100644 index 0000000..4e3ca22 --- /dev/null +++ b/.icons/icons/icon-simple.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CLAUDE.md b/CLAUDE.md index 899c39a..7fffd2b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -21,6 +21,9 @@ Lees het relevante document voordat je aan een feature begint. Nooit gokken over | `scrum4me-backlog.md` | Welke task bouwen, in welke volgorde, "done when"-criteria | | `scrum4me-personas.md` | Lars (primaire gebruiker), Dina, Remi — gebruik bij UI-beslissingen | | `scrum4me-product-backlog.md` | Testdata voor de seed — PBI's en stories van Scrum4Me zelf | +| `scrum4me-styling.md` | **Lees dit voor elk component** — MD3-kleuren, shadcn gebruik, component-patronen | +| `theme.css` | Bronbestand — kopieer naar `styles/theme.css`, importeer in `app/globals.css` | +| `MD3_Color_Scheme_Documentation.md` | Volledige MD3-kleurendocumentatie als referentie | --- @@ -47,7 +50,8 @@ Per task: ``` Next.js 15 (App Router) + React 19 TypeScript strict -Tailwind CSS + shadcn/ui +Tailwind CSS + shadcn/ui ← UI-primitieven (Button, Dialog, Sheet, Badge, etc.) +MD3 kleurensysteem via theme.css ← semantische tokens, nooit willekeurige Tailwind-kleuren Zustand (client state) dnd-kit (drag-and-drop) Prisma v7 (ORM) @@ -58,6 +62,10 @@ Zod (validatie) Sonner (toasts) ``` +> **Stylingregel:** Gebruik **nooit** `bg-blue-500`, `bg-green-600` of andere willekeurige Tailwind-kleuren. +> Gebruik altijd semantische MD3-tokens: `bg-primary`, `bg-status-done`, `bg-priority-critical`, etc. +> Zie `scrum4me-styling.md` voor alle patronen en regels. + --- ## Exacte dependencies (package.json) @@ -97,6 +105,18 @@ Sonner (toasts) --- +## theme.css installeren + +```bash +# Kopieer theme.css naar de project root of styles map +cp theme.css app/styles/theme.css + +# Importeer bovenaan app/globals.css: +# @import './styles/theme.css'; +``` + +Dark mode werkt via `.dark` class op ``. Zie `scrum4me-styling.md` voor het ThemeToggle component. + ## shadcn/ui componenten om te installeren Voer deze uit na `npx shadcn@latest init`: diff --git a/Srum4MeIcons.html b/Srum4MeIcons.html new file mode 100644 index 0000000..0f116bf --- /dev/null +++ b/Srum4MeIcons.html @@ -0,0 +1,384 @@ + + + + + +Scrum4Me — Icoon Concepten + + + + +

+

Scrum4Me — Icoon Concepten

+

2 · S4M Lettermerk  ·  3 · Iteratielus  ·  5 · Raket

+
+ +
+ + +
+
+ + +
+ + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + +
+
+ + + + + +
+
+ +
+
+ 02 — S4M Lettermerk + S · 4 · M als geïntegreerd monogram
accent-dot als leesteken +
+
+ + +
+
+ + +
+ + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + +
+
+ + + + +
+
+ +
+
+ 03 — Iteratielus + Open boog · gradient cyan→indigo→violet
pijlpunt markeert de opening +
+
+ + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ +
+
+ 05 — De Raket + 3 blokken (PBI · story · taak) die opstijgen
neus · vinnen · uitlaatpit +
+
+ +
+ +
Scrum4Me · Icoon Concepten v0.1 · april 2026
+ + + \ No newline at end of file diff --git a/actions/stories.ts b/actions/stories.ts new file mode 100644 index 0000000..d6b4345 --- /dev/null +++ b/actions/stories.ts @@ -0,0 +1,195 @@ +'use server' + +import { revalidatePath } from 'next/cache' +import { cookies } from 'next/headers' +import { getIronSession } from 'iron-session' +import { z } from 'zod' +import { prisma } from '@/lib/prisma' +import { SessionData, sessionOptions } from '@/lib/session' + +async function getSession() { + return getIronSession(await cookies(), sessionOptions) +} + +async function verifyStoryOwnership(storyId: string, userId: string) { + return prisma.story.findFirst({ + where: { id: storyId, product: { user_id: userId } }, + include: { product: true }, + }) +} + +const createStorySchema = z.object({ + pbiId: z.string(), + productId: z.string(), + title: z.string().min(1, 'Titel is verplicht').max(200), + priority: z.coerce.number().int().min(1).max(4), +}) + +const updateStorySchema = z.object({ + id: z.string(), + title: z.string().min(1, 'Titel is verplicht').max(200), + description: z.string().max(2000).optional(), + acceptance_criteria: z.string().max(2000).optional(), + priority: z.coerce.number().int().min(1).max(4), +}) + +export async function createStoryAction(_prevState: unknown, formData: FormData) { + const session = await getSession() + if (!session.userId) return { error: 'Niet ingelogd' } + if (session.isDemo) return { error: 'Niet beschikbaar in demo-modus' } + + const parsed = createStorySchema.safeParse({ + pbiId: formData.get('pbiId'), + productId: formData.get('productId'), + title: formData.get('title'), + priority: formData.get('priority') ?? 2, + }) + if (!parsed.success) return { error: parsed.error.flatten().fieldErrors } + + // Verify ownership via product + const pbi = await prisma.pbi.findFirst({ + where: { id: parsed.data.pbiId, product: { user_id: session.userId } }, + }) + if (!pbi) return { error: 'PBI niet gevonden' } + + const last = await prisma.story.findFirst({ + where: { pbi_id: parsed.data.pbiId, priority: parsed.data.priority }, + orderBy: { sort_order: 'desc' }, + }) + const sort_order = (last?.sort_order ?? 0) + 1.0 + + const story = await prisma.story.create({ + data: { + pbi_id: parsed.data.pbiId, + product_id: parsed.data.productId, + title: parsed.data.title, + priority: parsed.data.priority, + sort_order, + status: 'OPEN', + }, + }) + + revalidatePath(`/products/${parsed.data.productId}`) + return { success: true, story } +} + +export async function updateStoryAction(_prevState: unknown, formData: FormData) { + const session = await getSession() + if (!session.userId) return { error: 'Niet ingelogd' } + if (session.isDemo) return { error: 'Niet beschikbaar in demo-modus' } + + const parsed = updateStorySchema.safeParse({ + id: formData.get('id'), + title: formData.get('title'), + description: formData.get('description') || undefined, + acceptance_criteria: formData.get('acceptance_criteria') || undefined, + priority: formData.get('priority'), + }) + if (!parsed.success) return { error: parsed.error.flatten().fieldErrors } + + const story = await verifyStoryOwnership(parsed.data.id, session.userId) + if (!story) return { error: 'Story niet gevonden' } + + await prisma.story.update({ + where: { id: parsed.data.id }, + data: { + title: parsed.data.title, + description: parsed.data.description ?? null, + acceptance_criteria: parsed.data.acceptance_criteria ?? null, + priority: parsed.data.priority, + }, + }) + + revalidatePath(`/products/${story.product_id}`) + return { success: true } +} + +export async function deleteStoryAction(id: string) { + const session = await getSession() + if (!session.userId) return { error: 'Niet ingelogd' } + if (session.isDemo) return { error: 'Niet beschikbaar in demo-modus' } + + const story = await verifyStoryOwnership(id, session.userId) + if (!story) return { error: 'Story niet gevonden' } + + await prisma.story.delete({ where: { id } }) + + revalidatePath(`/products/${story.product_id}`) + return { success: true } +} + +export async function reorderPbisAction(productId: string, orderedIds: string[]) { + const session = await getSession() + if (!session.userId) return { error: 'Niet ingelogd' } + if (session.isDemo) return { error: 'Niet beschikbaar in demo-modus' } + + const product = await prisma.product.findFirst({ + where: { id: productId, user_id: session.userId }, + }) + if (!product) return { error: 'Product niet gevonden' } + + await prisma.$transaction( + orderedIds.map((id, i) => + prisma.pbi.update({ where: { id }, data: { sort_order: i + 1.0 } }) + ) + ) + + revalidatePath(`/products/${productId}`) + return { success: true } +} + +export async function updatePbiPriorityAction(pbiId: string, priority: number, productId: string) { + const session = await getSession() + if (!session.userId) return { error: 'Niet ingelogd' } + if (session.isDemo) return { error: 'Niet beschikbaar in demo-modus' } + + const pbi = await prisma.pbi.findFirst({ + where: { id: pbiId, product: { user_id: session.userId } }, + }) + if (!pbi) return { error: 'PBI niet gevonden' } + + // Place at the end of the target priority group + const last = await prisma.pbi.findFirst({ + where: { product_id: productId, priority }, + orderBy: { sort_order: 'desc' }, + }) + + await prisma.pbi.update({ + where: { id: pbiId }, + data: { priority, sort_order: (last?.sort_order ?? 0) + 1.0 }, + }) + + revalidatePath(`/products/${productId}`) + return { success: true } +} + +export async function reorderStoriesAction( + pbiId: string, + productId: string, + orderedIds: string[], + newPriority?: number +) { + const session = await getSession() + if (!session.userId) return { error: 'Niet ingelogd' } + if (session.isDemo) return { error: 'Niet beschikbaar in demo-modus' } + + const pbi = await prisma.pbi.findFirst({ + where: { id: pbiId, product: { user_id: session.userId } }, + }) + if (!pbi) return { error: 'PBI niet gevonden' } + + await prisma.$transaction( + orderedIds.map((id, i) => + prisma.story.update({ + where: { id }, + data: { + sort_order: i + 1.0, + ...(newPriority !== undefined ? { priority: newPriority } : {}), + }, + }) + ) + ) + + revalidatePath(`/products/${productId}`) + return { success: true } +} diff --git a/app/(app)/products/[id]/page.tsx b/app/(app)/products/[id]/page.tsx index 3975f1f..03e6204 100644 --- a/app/(app)/products/[id]/page.tsx +++ b/app/(app)/products/[id]/page.tsx @@ -6,6 +6,8 @@ import { prisma } from '@/lib/prisma' import { SplitPane } from '@/components/split-pane/split-pane' import { PbiList } from '@/components/backlog/pbi-list' import { StoryPanel } from '@/components/backlog/story-panel' +import type { Story } from '@/components/backlog/story-panel' +import Link from 'next/link' interface Props { params: Promise<{ id: string }> @@ -28,16 +30,26 @@ export default async function ProductBacklogPage({ params }: Props) { const stories = await prisma.story.findMany({ where: { product_id: id }, orderBy: [{ priority: 'asc' }, { sort_order: 'asc' }], - select: { id: true, title: true, status: true, pbi_id: true }, + select: { + id: true, + title: true, + description: true, + acceptance_criteria: true, + priority: true, + status: true, + pbi_id: true, + }, }) // Group stories by PBI id - const storiesByPbi: Record = {} + const storiesByPbi: Record = {} for (const story of stories) { if (!storiesByPbi[story.pbi_id]) storiesByPbi[story.pbi_id] = [] storiesByPbi[story.pbi_id].push(story) } + const isDemo = session.isDemo ?? false + return (
{/* Product header */} @@ -48,12 +60,12 @@ export default async function ProductBacklogPage({ params }: Props) {

{product.description}

)}
-
Instellingen - + {/* Split pane */} @@ -64,13 +76,14 @@ export default async function ProductBacklogPage({ params }: Props) { ({ id: p.id, title: p.title, priority: p.priority }))} - isDemo={session.isDemo ?? false} + isDemo={isDemo} /> } right={ } /> diff --git a/components/backlog/pbi-list.tsx b/components/backlog/pbi-list.tsx index 011058e..f2e515a 100644 --- a/components/backlog/pbi-list.tsx +++ b/components/backlog/pbi-list.tsx @@ -1,15 +1,35 @@ 'use client' -import { useState, useTransition } from 'react' +import { useState, useTransition, useEffect } from 'react' import { useActionState } from 'react' import { useFormStatus } from 'react-dom' +import { + DndContext, + DragEndEvent, + DragOverlay, + DragStartEvent, + PointerSensor, + useSensor, + useSensors, + closestCenter, +} from '@dnd-kit/core' +import { + SortableContext, + useSortable, + verticalListSortingStrategy, + arrayMove, +} from '@dnd-kit/sortable' +import { CSS } from '@dnd-kit/utilities' +import { toast } from 'sonner' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Badge } from '@/components/ui/badge' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { PanelNavBar } from '@/components/shared/panel-nav-bar' import { useSelectionStore } from '@/stores/selection-store' +import { usePlannerStore } from '@/stores/planner-store' import { createPbiAction, deletePbiAction } from '@/actions/pbis' +import { reorderPbisAction, updatePbiPriorityAction } from '@/actions/stories' import { cn } from '@/lib/utils' const PRIORITY_LABELS: Record = { @@ -38,7 +58,74 @@ interface PbiListProps { isDemo: boolean } -function CreatePbiForm({ productId, priority, onDone }: { productId: string; priority: number; onDone: () => void }) { +// --- Sortable PBI row --- +function SortablePbiRow({ + pbi, + isSelected, + isDemo, + onSelect, + onDelete, +}: { + pbi: Pbi + isSelected: boolean + isDemo: boolean + onSelect: () => void + onDelete: () => void +}) { + const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ + id: pbi.id, + }) + + const style = { + transform: CSS.Transform.toString(transform), + transition, + opacity: isDragging ? 0.4 : 1, + } + + return ( +
+ {!isDemo && ( + e.stopPropagation()} + > + ⠿ + + )} + {pbi.title} + {!isDemo && ( + + )} +
+ ) +} + +// --- Inline create form --- +function CreatePbiForm({ + productId, + priority, + onDone, +}: { + productId: string + priority: number + onDone: () => void +}) { const [state, formAction] = useActionState( async (_prev: unknown, fd: FormData) => { const result = await createPbiAction(_prev, fd) @@ -53,16 +140,10 @@ function CreatePbiForm({ productId, priority, onDone }: { productId: string; pri
- + {typeof error === 'string' && (

{error}

@@ -80,13 +161,33 @@ function CreateSubmitButton() { ) } +// --- Main component --- export function PbiList({ productId, pbis, isDemo }: PbiListProps) { const { selectedPbiId, selectPbi } = useSelectionStore() + const { pbiOrder, pbiPriority, initPbis, reorderPbis, rollbackPbis, updatePbiPriority } = usePlannerStore() const [filterPriority, setFilterPriority] = useState(null) const [creatingForPriority, setCreatingForPriority] = useState(null) + const [activeDragId, setActiveDragId] = useState(null) const [, startTransition] = useTransition() - const filtered = filterPriority ? pbis.filter(p => p.priority === filterPriority) : pbis + // Sync server data into store — use stable string dep to avoid infinite loop + const pbiIdKey = pbis.map(p => p.id).join(',') + useEffect(() => { + initPbis(productId, pbiIdKey ? pbiIdKey.split(',') : []) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [productId, pbiIdKey]) + + // Build ordered PBI list from store (or fall back to server order) + const order = pbiOrder[productId] ?? pbis.map(p => p.id) + const pbiMap = Object.fromEntries(pbis.map(p => [p.id, p])) + + // Apply priority overrides from store + const orderedPbis = order + .map(id => pbiMap[id]) + .filter(Boolean) + .map(p => ({ ...p, priority: pbiPriority[p.id] ?? p.priority })) + + const filtered = filterPriority ? orderedPbis.filter(p => p.priority === filterPriority) : orderedPbis const grouped = [1, 2, 3, 4].reduce>((acc, p) => { acc[p] = filtered.filter(pbi => pbi.priority === p) @@ -97,6 +198,49 @@ export function PbiList({ productId, pbis, isDemo }: PbiListProps) { p => grouped[p].length > 0 || creatingForPriority === p ) + const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } })) + + function handleDragStart(event: DragStartEvent) { + setActiveDragId(event.active.id as string) + } + + function handleDragEnd(event: DragEndEvent) { + setActiveDragId(null) + const { active, over } = event + if (!over || active.id === over.id) return + + const activePbi = pbiMap[active.id as string] + const overPbi = pbiMap[over.id as string] + if (!activePbi || !overPbi) return + + const prevOrder = [...order] + const oldIndex = order.indexOf(active.id as string) + const newIndex = order.indexOf(over.id as string) + const newOrder = arrayMove([...order], oldIndex, newIndex) + + // Optimistic update + reorderPbis(productId, newOrder) + + const priorityChanged = activePbi.priority !== overPbi.priority + + startTransition(async () => { + if (priorityChanged) { + updatePbiPriority(active.id as string, overPbi.priority) + const result = await updatePbiPriorityAction(active.id as string, overPbi.priority, productId) + if (!result.success) { + rollbackPbis(productId, prevOrder) + toast.error('Prioriteit opslaan mislukt') + } + } else { + const result = await reorderPbisAction(productId, newOrder) + if (!result.success) { + rollbackPbis(productId, prevOrder) + toast.error('Volgorde opslaan mislukt') + } + } + }) + } + function handleDelete(id: string) { startTransition(async () => { await deletePbiAction(id) @@ -104,6 +248,8 @@ export function PbiList({ productId, pbis, isDemo }: PbiListProps) { }) } + const activePbi = activeDragId ? pbiMap[activeDragId] : null + return (
) : ( -
- {visiblePriorities.map(priority => ( -
- {/* Priority group header */} -
- - {PRIORITY_LABELS[priority]} - -
- {!isDemo && ( - - )} -
- - {/* PBI items */} - {grouped[priority].map(pbi => ( -
selectPbi(pbi.id)} - className={cn( - 'group flex items-center justify-between px-4 py-2 cursor-pointer transition-colors hover:bg-surface-container', - selectedPbiId === pbi.id && 'bg-primary-container text-primary-container-foreground' - )} - > - {pbi.title} + +
+ {visiblePriorities.map(priority => ( +
+
+ + {PRIORITY_LABELS[priority]} + +
{!isDemo && ( )}
- ))} - {/* Inline create form for this priority */} - {creatingForPriority === priority && ( + p.id)} + strategy={verticalListSortingStrategy} + > + {grouped[priority].map(pbi => ( + selectPbi(pbi.id)} + onDelete={() => handleDelete(pbi.id)} + /> + ))} + + + {creatingForPriority === priority && ( + setCreatingForPriority(null)} + /> + )} +
+ ))} + + {creatingForPriority !== null && !visiblePriorities.includes(creatingForPriority) && ( +
+
+ + {PRIORITY_LABELS[creatingForPriority]} + +
+
setCreatingForPriority(null)} /> - )} -
- ))} - - {/* If creating for a priority that has no items yet and isn't in visiblePriorities */} - {creatingForPriority !== null && !visiblePriorities.includes(creatingForPriority) && ( -
-
- - {PRIORITY_LABELS[creatingForPriority]} - -
- setCreatingForPriority(null)} - /> -
- )} -
+ )} +
+ + + {activePbi && ( +
+ {activePbi.title} +
+ )} +
+ )}
diff --git a/components/backlog/story-panel.tsx b/components/backlog/story-panel.tsx index 4adb86f..ed3015f 100644 --- a/components/backlog/story-panel.tsx +++ b/components/backlog/story-panel.tsx @@ -1,56 +1,516 @@ 'use client' -import { useSelectionStore } from '@/stores/selection-store' +import { useState, useTransition, useEffect, useActionState } from 'react' +import { useFormStatus } from 'react-dom' +import { + DndContext, + DragEndEvent, + DragOverlay, + DragStartEvent, + PointerSensor, + useSensor, + useSensors, + closestCenter, +} from '@dnd-kit/core' +import { + SortableContext, + useSortable, + horizontalListSortingStrategy, + arrayMove, +} from '@dnd-kit/sortable' +import { CSS } from '@dnd-kit/utilities' +import { toast } from 'sonner' +import { Button } from '@/components/ui/button' +import { Input } from '@/components/ui/input' +import { Textarea } from '@/components/ui/textarea' +import { Badge } from '@/components/ui/badge' +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' +import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet' import { PanelNavBar } from '@/components/shared/panel-nav-bar' +import { useSelectionStore } from '@/stores/selection-store' +import { usePlannerStore } from '@/stores/planner-store' +import { createStoryAction, updateStoryAction, deleteStoryAction, reorderStoriesAction } from '@/actions/stories' +import { cn } from '@/lib/utils' -interface Story { +const PRIORITY_LABELS: Record = { 1: 'Kritiek', 2: 'Hoog', 3: 'Gemiddeld', 4: 'Laag' } +const PRIORITY_COLORS: Record = { + 1: 'bg-priority-critical/15 text-priority-critical border-priority-critical/30', + 2: 'bg-priority-high/15 text-priority-high border-priority-high/30', + 3: 'bg-priority-medium/15 text-priority-medium border-priority-medium/30', + 4: 'bg-priority-low/15 text-priority-low border-priority-low/30', +} +const STATUS_COLORS: Record = { + OPEN: 'bg-status-todo/15 text-status-todo border-status-todo/30', + IN_SPRINT: 'bg-status-in-progress/15 text-status-in-progress border-status-in-progress/30', + DONE: 'bg-status-done/15 text-status-done border-status-done/30', +} +const STATUS_LABELS: Record = { + OPEN: 'Open', + IN_SPRINT: 'In Sprint', + DONE: 'Klaar', +} + +export interface Story { id: string title: string + description: string | null + acceptance_criteria: string | null + priority: number status: string + pbi_id: string } interface StoryPanelProps { + productId: string storiesByPbi: Record isDemo: boolean } -export function StoryPanel({ storiesByPbi, isDemo }: StoryPanelProps) { - const { selectedPbiId } = useSelectionStore() +// --- Sortable story block --- +function SortableStoryBlock({ + story, + onClick, +}: { + story: Story + onClick: () => void +}) { + const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ + id: story.id, + }) - const stories = selectedPbiId ? (storiesByPbi[selectedPbiId] ?? []) : null + const style = { + transform: CSS.Transform.toString(transform), + transition, + opacity: isDragging ? 0.4 : 1, + } + + return ( +
+

+ {story.title} +

+
+ + {PRIORITY_LABELS[story.priority]} + + + {STATUS_LABELS[story.status] ?? story.status} + +
+
+ ) +} + +// --- Story detail slide-over --- +function StoryDetailSheet({ + story, + productId, + pbiId, + onClose, + isDemo, +}: { + story: Story + productId: string + pbiId: string + onClose: () => void + isDemo: boolean +}) { + const [confirmDelete, setConfirmDelete] = useState(false) + const [isDeleting, startDeleteTransition] = useTransition() + + const [state, formAction] = useActionState( + async (_prev: unknown, fd: FormData) => { + const result = await updateStoryAction(_prev, fd) + if (result?.success) onClose() + return result + }, + undefined + ) + + function handleDelete() { + startDeleteTransition(async () => { + await deleteStoryAction(story.id) + onClose() + }) + } + + const fieldError = (field: string) => { + const err = state?.error + if (!err || typeof err === 'string') return undefined + return (err as Record)[field]?.[0] + } + + return ( + { if (!open) onClose() }}> + + + {story.title} +
+ + {PRIORITY_LABELS[story.priority]} + + + {STATUS_LABELS[story.status]} + +
+
+ +
+ {!isDemo ? ( + + + + +
+ + + {fieldError('title') &&

{fieldError('title')}

} +
+ +
+ +