diff --git a/components/todos/todo-list.tsx b/components/todos/todo-list.tsx index a0022e1..5db21b3 100644 --- a/components/todos/todo-list.tsx +++ b/components/todos/todo-list.tsx @@ -3,6 +3,7 @@ import { useState, useTransition, useMemo, useEffect, useRef, useCallback } from 'react' import { useActionState } from 'react' import { useFormStatus } from 'react-dom' +import { useRouter } from 'next/navigation' import { useReactTable, getCoreRowModel, @@ -26,6 +27,7 @@ import { archiveSelectedTodosAction, promoteTodoToPbiAction, promoteTodoToStoryAction, + promoteTodoToIdeaAction, } from '@/actions/todos' interface Todo { @@ -233,6 +235,60 @@ function PromoteStoryDialog({ ) } +// --- Promote to Idea dialog (M12 T-514) --- +// Geen extra inputs nodig — title/description komen uit de todo, en +// promoteTodoToIdeaAction archiveert de todo automatisch. +function PromoteIdeaDialog({ + todo, + onClose, +}: { todo: Todo; onClose: () => void }) { + const router = useRouter() + const handleKey = useCallback((e: KeyboardEvent) => { if (e.key === 'Escape') onClose() }, [onClose]) + useEffect(() => { + document.addEventListener('keydown', handleKey) + return () => document.removeEventListener('keydown', handleKey) + }, [handleKey]) + + const [pending, startTransition] = useTransition() + + function handleConfirm() { + startTransition(async () => { + const r = await promoteTodoToIdeaAction(todo.id) + if ('error' in r) { + toast.error(r.error) + return + } + toast.success(`Idee aangemaakt (${r.idea_code})`) + onClose() + router.push(`/ideas/${r.idea_id}`) + }) + } + + return ( +
+ Maak een nieuw idee van ‘{todo.title}’. De Todo wordt + gearchiveerd; je kunt hem later terugvinden in de archief-filter. +
+
+ Het idee start als DRAFT. Je kunt het daarna grillen, plannen, en
+ materialiseren tot een PBI.
+