import { z } from "zod/v4"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "~/components/custom_ui/form"; import { useZodForm } from "~/lib/zodForm"; import Input from "~/components/custom_ui/input"; import { Button } from "~/components/ui/button"; import { MultiSelect, UnpackOptions } from "~/components/custom_ui/multiselect"; import type { Prezziario, PrezziarioIdprezziario, } from "~/schemas/public/Prezziario"; import { api } from "~/utils/api"; import { Switch } from "~/components/ui/switch"; import { Textarea } from "~/components/custom_ui/textarea"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "~/components/ui/select"; import { useEffect } from "react"; type FormPrezzoProps = { initialValues: Prezziario | null; submitMutation: (values: Omit) => void; }; export const FormPrezzo = ({ initialValues, submitMutation, }: FormPrezzoProps) => { const { data: stringhe_condizioni } = api.settings.getStringheCondizioni.useQuery(); const stringhe_condizioni_options = [ "", ...(stringhe_condizioni ? stringhe_condizioni.map((v) => String(v.stinga_id)) : []), ]; const PrezzoSchema = z .object({ idprezziario: z.custom(), prezzo_cent: z.number().positive(), testo_condizioni: z.string().nullable(), isAcconto: z.boolean(), isSaldo: z.boolean(), isConsulenza: z.boolean(), isActive: z.boolean(), nome_it: z.string(), desc_it: z.string(), nome_en: z.string(), desc_en: z.string(), sconto: z.number().min(0).max(100), isTransitorio: z.boolean(), isStabile: z.boolean(), }) .superRefine(({ testo_condizioni }, ctx) => { if (testo_condizioni) { if ( stringhe_condizioni_options.length > 0 && !stringhe_condizioni_options.includes(testo_condizioni) ) { console.log("testo_condizioni", testo_condizioni); console.log( "stringhe_condizioni_options", stringhe_condizioni_options, ); ctx.addIssue({ code: "custom", message: "Testo condizioni non valido", input: testo_condizioni, path: ["testo_condizioni"], }); } } }); type PrezzoFormValues = z.infer; // This can come from your database or API. const defaultValues: PrezzoFormValues = initialValues || { idprezziario: "" as PrezziarioIdprezziario, prezzo_cent: 0, testo_condizioni: "", isAcconto: false, isSaldo: false, isConsulenza: false, isActive: false, nome_it: "", desc_it: "", nome_en: "", desc_en: "", sconto: 0, isTransitorio: false, isStabile: false, }; z.config(z.locales.it()); const form = useZodForm(PrezzoSchema, { defaultValues: defaultValues, }); function onSubmit(fields: PrezzoFormValues) { submitMutation({ ...fields, testo_condizioni: fields.testo_condizioni || null, }); } const { watch } = form; useEffect(() => { const subscription = watch((value, { name, type }) => console.log(value, name, type), ); return () => subscription.unsubscribe(); }, [watch]); const scontoWch = watch(["sconto", "prezzo_cent"]); return ( <>
(
Codice
)} /> (
Nome IT
)} /> (
Descrizione IT