'use client' import { useState } from 'react' import { useForm, useFieldArray } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import * as z from 'zod' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog' import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form' import { Input } from '@/components/ui/input' import { Button } from '@/components/ui/button' import { Checkbox } from '@/components/ui/checkbox' import { Plus, Trash2, X, PlusCircle } from 'lucide-react' import { createProduct } from '@/lib/actions/products' import { ScrollArea } from '@/components/ui/scroll-area' import { Separator } from '@/components/ui/separator' const moduleSchema = z.object({ name: z.string().min(2, 'Name muss mindestens 2 Zeichen lang sein'), description: z.string().optional(), additional_price: z.coerce.number().min(0, 'Preis darf nicht negativ sein'), is_required: z.boolean().default(false), }) const productSchema = z.object({ name: z.string().min(2, 'Name muss mindestens 2 Zeichen lang sein'), description: z.string().optional(), base_price: z.coerce.number().min(0, 'Preis darf nicht negativ sein'), is_active: z.boolean().default(true), modules: z.array(moduleSchema).default([]), }) type ProductFormValues = z.infer export function CreateProductDialog({ children }: { children: React.ReactNode }) { const [open, setOpen] = useState(false) const form = useForm({ resolver: zodResolver(productSchema) as any, defaultValues: { name: '', description: '', base_price: 0, is_active: true, modules: [], }, }) const { fields, append, remove } = useFieldArray({ name: 'modules', control: form.control, }) async function onSubmit(values: ProductFormValues) { try { const { modules, ...productData } = values await createProduct(productData, modules) setOpen(false) form.reset() } catch (error) { console.error('Error creating product:', error) } } return ( {children} Neues Produkt erstellen Definieren Sie das Basisprodukt und fügen Sie optionale oder erforderliche Module hinzu.
( Produktname )} /> ( Basispreis (€) )} />
( Beschreibung )} />

Module

{fields.map((field, index) => (
( Modulname )} /> ( Aufpreis (€) )} />
(
Erforderlich
)} />
))} {fields.length === 0 && (
Noch keine Module hinzugefügt.
)}
) }