import { format } from "date-fns"; import { it } from "date-fns/locale"; import { CalendarIcon } from "lucide-react"; import toast from "react-hot-toast"; import { z } from "zod/v4"; import { CredenzaBody, CredenzaClose, CredenzaFooter, } from "~/components/custom_ui/credenza"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "~/components/custom_ui/form"; import { MultiSelect } from "~/components/custom_ui/multiselect"; import { Button } from "~/components/ui/button"; import { Calendar } from "~/components/ui/calendar"; import { Popover, PopoverContent, PopoverTrigger, } from "~/components/ui/popover"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "~/components/ui/select"; import { Switch } from "~/components/ui/switch"; import { cn, formatCurrency } from "~/lib/utils"; import { useZodForm } from "~/lib/zodForm"; import OrderTypeEnum from "~/schemas/public/OrderTypeEnum"; import type { Prezziario } from "~/schemas/public/Prezziario"; import type { ServizioServizioId } from "~/schemas/public/Servizio"; import type { UsersId } from "~/schemas/public/Users"; import { zPrezziarioId } from "~/server/utils/zod_types"; import { api } from "~/utils/api"; type FormProps = { prezziario: Prezziario[]; servizioId: ServizioServizioId; userId: UsersId; setOpen: React.Dispatch>; }; export const FormNewOrder = ({ prezziario, servizioId, userId, setOpen, }: FormProps) => { const schema = z.object({ packid: zPrezziarioId, isActive: z.boolean(), type: z.custom(), created_at: z.date(), }); type FormValues = z.infer; z.config(z.locales.it()); const form = useZodForm(schema, { defaultValues: {}, }); const utils = api.useUtils(); const { mutate: createOrder } = api.servizio.createOrdine.useMutation({ onError: (error) => { toast.error(`Errore nella creazione dell'ordine: ${error.message}`); }, onSuccess: async () => { toast.success("Ordine creato con successo"); await utils.servizio.getOrdini.invalidate({ userId, }); setOpen(false); form.reset(); }, }); function onSubmit(fields: FormValues) { createOrder({ data: { ...fields, servizio_id: servizioId, userid: userId, }, }); } return ( <>
(
Servizio
{ const selected = zPrezziarioId.safeParse(value.value); if (selected.success) { field.onChange(selected.data); } else { console.error( "Invalid packid selected", value.value, ); } }} options={prezziario.map((p) => ({ label: `${p.idprezziario} - ${p.nome_it} (${formatCurrency(p.prezzo_cent / 100)})`, value: p.idprezziario, }))} placeholder="Seleziona..." />
)} /> (
Tipologia
)} /> (
Data Ordine
)} /> (
Attivo
Imposta se il servizio รจ attivo
)} />
); };