feat: add optional categories - admins can mark categories as optional in the order wizard

This commit is contained in:
DanielS
2026-05-01 02:29:00 +02:00
parent cb6668d614
commit 1ec164cd7b
5 changed files with 55 additions and 7 deletions

View File

@@ -23,6 +23,7 @@ import {
} 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 {
@@ -40,6 +41,7 @@ const categorySchema = z.object({
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),
})
type CategoryFormValues = z.infer<typeof categorySchema>
@@ -60,6 +62,7 @@ export function CategoryDialog({
description: category?.description || '',
icon: category?.icon || 'Package',
sort_order: category?.sort_order ?? 0,
is_required: category?.is_required ?? true,
},
})
@@ -178,6 +181,29 @@ export function CategoryDialog({
</FormItem>
)}
/>
<FormField
control={form.control}
name="is_required"
render={({ field }) => (
<FormItem className="flex flex-row items-start space-x-3 space-y-0 rounded-lg border border-white/10 bg-white/5 p-4">
<FormControl>
<Checkbox
checked={field.value}
onCheckedChange={field.onChange}
/>
</FormControl>
<div className="space-y-1 leading-none">
<FormLabel className="text-white font-semibold cursor-pointer">
Pflichtauswahl im Bestellvorgang
</FormLabel>
<p className="text-xs text-slate-400">
Wenn aktiv, muss der Kunde aus dieser Kategorie einen Artikel wählen.
Wenn deaktiviert, ist die Kategorie optional.
</p>
</div>
</FormItem>
)}
/>
</div>
</ScrollArea>
<DialogFooter className="pt-4">