'use client' import { useState } from 'react' import { useForm } 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, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form' import { Input } from '@/components/ui/input' import { Button } from '@/components/ui/button' import { createCategory, updateCategory } from '@/lib/actions/products' import { Category } from '@/lib/types' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { ScrollArea } from '@/components/ui/scroll-area' import { Cloud, Utensils, HardDrive, Package } from 'lucide-react' const categorySchema = z.object({ name: z.string().min(2, 'Name muss mindestens 2 Zeichen lang sein'), description: z.string().optional(), icon: z.string().default('Package'), sort_order: z.coerce.number().int().min(0).default(0), }) type CategoryFormValues = z.infer export function CategoryDialog({ children, category }: { children?: React.ReactNode, category?: Category }) { const [open, setOpen] = useState(false) const form = useForm({ resolver: zodResolver(categorySchema) as any, defaultValues: { name: category?.name || '', description: category?.description || '', icon: category?.icon || 'Package', sort_order: category?.sort_order ?? 0, }, }) async function onSubmit(values: CategoryFormValues) { try { if (category) { await updateCategory(category.id, values) } else { await createCategory(values) } setOpen(false) form.reset() } catch (error) { console.error('Error saving category:', error) } } const icons = [ { name: 'Cloud', Icon: Cloud }, { name: 'Utensils', Icon: Utensils }, { name: 'HardDrive', Icon: HardDrive }, { name: 'Package', Icon: Package }, ] return ( {children || ( )} {category ? 'Kategorie bearbeiten' : 'Neue Kategorie erstellen'} Definieren Sie eine Kategorie für Ihre Produkte.
( Name )} /> ( Beschreibung )} /> ( Icon )} /> ( Reihenfolge im Bestellvorgang

Kleinere Zahl = weiter oben im Bestellformular angezeigt.

)} />
) }