'use client' import { useState, useTransition } from 'react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DialogClose, } from '@/components/ui/dialog' import { adminCreateProductAction, adminUpdateProductAction } from '@/actions/admin/products' type User = { id: string; username: string } type ProductData = { id: string name: string description: string | null repo_url: string | null definition_of_done: string auto_pr: boolean user_id: string } interface Props { mode: 'create' | 'edit' product?: ProductData allUsers: User[] trigger: React.ReactNode } export function ProductFormDialog({ mode, product, allUsers, trigger }: Props) { const [open, setOpen] = useState(false) const [pending, startTransition] = useTransition() const [error, setError] = useState(null) function handleSubmit(e: React.FormEvent) { e.preventDefault() const fd = new FormData(e.currentTarget) const data = { name: fd.get('name') as string, description: fd.get('description') as string || undefined, repo_url: fd.get('repo_url') as string || undefined, definition_of_done: fd.get('definition_of_done') as string, auto_pr: fd.get('auto_pr') === 'on', owner_user_id: fd.get('owner_user_id') as string, } setError(null) startTransition(async () => { try { if (mode === 'create') { await adminCreateProductAction(data) } else { await adminUpdateProductAction(product!.id, data) } setOpen(false) } catch (err) { setError(err instanceof Error ? err.message : 'Onbekende fout') } }) } return ( }>{trigger} {mode === 'create' ? 'Nieuw product' : 'Product bewerken'}
{mode === 'create' && (
)} {mode === 'edit' && ( )}
{error && (
{error}
)} }>Annuleer
) }