--- title: "TaskDialog Profiel" status: active audience: [maintainer, contributor] language: nl last_updated: 2026-05-03 --- # TaskDialog Profiel > Volgt **`docs/patterns/dialog.md`** (de generieke spec voor élke entity-dialog in Scrum4Me). > Dit document beschrijft alleen de Task-specifieke afwijkingen en keuzes — alle gedeelde regels (layout, motion, demo-policy, foutcodes, validatie, theming, dialog-gedrag) staan in de generieke spec en worden hier niet herhaald. > **Belangrijk:** als een regel in dit profiel botst met de generieke spec, wint de generieke spec. Documenteer hier de afwijking + reden, of pas de generieke spec aan. --- ## Velden | Veld | Type | Mode | Validatie | |---|---|---|---| | `title` | `string` (required) | beide | trim, 1-120 chars | | `description` | `string \| null` | beide | optional, max 2.000 chars, markdown | | `implementation_plan` | `string \| null` | beide | optional, max 10.000 chars, markdown | | `priority` | `int` (1-4, P1 = hoogste) | beide | int 1-4, default 3 | | `status` | `TaskStatus` enum | alleen edit (default `TO_DO` op create, niet getoond) | enum | | `created_at` | `Date` | alleen edit | read-only metadata in header | `TaskStatus` enum: `TO_DO | IN_PROGRESS | REVIEW | DONE`. ### Veld-specifiek gedrag - **Auto-grow textareas** (`description`, `implementation_plan`) via `react-textarea-autosize`. Max 6 regels (description) / 12 regels (implementation_plan), daarna `overflow-y-auto`. - **Karakter-counter** vanaf 75% van de limiet, klein, rechtsonder, `text-muted-foreground`. Bv. `1547 / 2000`. - **Markdown-hint** onder elk textarea: `Markdown ondersteund (lijstjes, **vet**, \`code\`)`. - **Priority** als segmented buttons via `` / ``. Default P3 (Medium). - **Status** met gekleurde dot: - `TO_DO` — grijs - `IN_PROGRESS` — `status-in-progress` (blauw) - `REVIEW` — paars - `DONE` — `status-done` (groen) - **`created_at` als header-metadata** in edit-mode, naast de titel: `Aangemaakt: 23 apr 2026`. Klein, `muted-foreground`, géén form-veld. --- ## URL- of state-pattern - **Gekozen:** URL-based (`searchParams`) - **Reden:** TaskDialog wordt geopend vanuit twee context-pagina's (sprint-detail en product-backlog) en moet deep-linkable zijn voor share/refresh-scenario's. Suspense + skeleton voor edit-mode loading is gewenst. - **Routes:** ``` /sprint/?newTask=1 → create /sprint/?editTask= → edit /products//backlog?newTask=1 → create /products//backlog?editTask= → edit ``` - **Sluiten:** `router.push()` zonder query-params. - **Server-side fetch in edit-mode:** server component fetcht de taak vóór render mét `productAccessFilter(userId)`. Bestaat de taak niet of valt 'm buiten scope → toast + redirect naar de context-route. - Optioneel: `nuqs` als de query-state-handling te omslachtig wordt — pas introduceren als losse refactor-task, niet inline. --- ## Status-veld Verberg `status` in **create-mode** (default = `TO_DO` is genoeg). Toon alleen in edit-mode als `