'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' import { Category } from '@/lib/types' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" const moduleSchema = z.object({ name: z.string().min(2, 'Name muss mindestens 2 Zeichen lang sein'), description: z.string().optional(), price: z.coerce.number().min(0, 'Preis darf nicht negativ sein'), is_required: z.boolean().default(false), requirements: z.string().optional().default(''), // Will be converted to array exclusions: z.string().optional().default(''), // Will be converted to array }) 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'), category_id: z.string().min(1, 'Bitte wählen Sie eine Kategorie'), is_active: z.boolean().default(true), modules: z.array(moduleSchema).default([]), }) type ProductFormValues = z.infer export function CreateProductDialog({ categories }: { categories: Category[] }) { const [open, setOpen] = useState(false) const form = useForm({ resolver: zodResolver(productSchema) as any, defaultValues: { name: '', description: '', base_price: 0, category_id: '', is_active: true, modules: [], }, }) const { fields, append, remove } = useFieldArray({ name: 'modules', control: form.control, }) async function onSubmit(values: ProductFormValues) { try { const { modules, ...productData } = values const formattedModules = modules.map(m => ({ ...m, requirements: m.requirements ? m.requirements.split(',').map(s => s.trim()).filter(Boolean) : [], exclusions: m.exclusions ? m.exclusions.split(',').map(s => s.trim()).filter(Boolean) : [], })) await createProduct(productData as any, formattedModules as any) setOpen(false) form.reset() } catch (error) { console.error('Error creating product:', error) } } return ( Neues Produkt erstellen Definieren Sie das Basisprodukt und fügen Sie optionale oder erforderliche Module hinzu.
( Produktname )} /> ( Basispreis (€) )} />
( Kategorie )} /> ( Beschreibung )} />

Module

{fields.map((field, index) => (
( Modulname )} /> ( Aufpreis (€) )} />
( Benötigt (IDs, kommagetrennt) )} /> ( Schließt aus (IDs, kommagetrennt) )} />
(
Erforderlich
)} />
))} {fields.length === 0 && (
Noch keine Module hinzugefügt.
)}
) }