'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' 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 { Checkbox } from '@/components/ui/checkbox' 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), is_required: z.boolean().default(true), allow_multiselect: z.boolean().default(false), free_items_limit: z.coerce.number().int().min(0).default(0), preselect: z.boolean().default(true), }) type CategoryFormValues = z.infer export function CategoryDialog({ children, category }: { children?: React.ReactNode, category?: Category }) { const [open, setOpen] = useState(false) const router = useRouter() 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, is_required: category?.is_required ?? true, allow_multiselect: category?.allow_multiselect ?? false, free_items_limit: category?.free_items_limit ?? 0, preselect: category?.preselect ?? true, }, }) async function onSubmit(values: CategoryFormValues) { try { if (category) { await updateCategory(category.id, values as any) } else { await createCategory(values as any) } setOpen(false) form.reset() router.refresh() } 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.

)} /> (
Pflichtauswahl im Bestellvorgang

Wenn aktiv, muss der Kunde aus dieser Kategorie einen Artikel wählen. Wenn deaktiviert, ist die Kategorie optional.

)} /> ( { field.onChange(checked); if (checked) { form.setValue('preselect', false); } }} />
Mehrfachauswahl erlauben

Erlaubt die Auswahl mehrerer Produkte/Module innerhalb dieser Kategorie.

)} /> {!form.watch('allow_multiselect') && ( (
Vorauswahl aktivieren

Wenn aktiv, wird beim Öffnen des Wizards automatisch das erste Produkt dieser Kategorie ausgewählt.

)} /> )} {form.watch('allow_multiselect') && ( ( Inklusive Freie Artikel Limit

Bis zu dieser Anzahl sind gewählte Artikel in dieser Kategorie kostenlos. Alle darüber hinausgehenden werden voll berechnet (günstigste Artikel zuerst frei).

)} /> )}
) }