import { z } from "zod/v4"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "~/components/custom_ui/form"; import Input from "~/components/custom_ui/input"; import { Textarea } from "~/components/custom_ui/textarea"; import { useZodForm } from "~/lib/zodForm"; import { api } from "~/utils/api"; import { useTranslation } from "~/providers/I18nProvider"; import { CheckCircle } from "lucide-react"; import { useState } from "react"; import { Checkbox } from "~/components/ui/checkbox"; import toast from "react-hot-toast"; import { useLocalStorage } from "react-use"; import { PhoneInput } from "~/components/phone-input"; type UserContattoData = { nome: string; email: string; telefono: string; }; export const FormContattoAnnucio = ({ codice }: { codice: string }) => { const { locale, t } = useTranslation(); const [hasSent, setHasSent] = useState(false); const schema = z.object({ nome: z.string().nonempty("Inserisci un nome valido"), email: z.email(), messaggio: z.string().nonempty("Inserisci un messaggio"), telefono: z.string().nonempty("Inserisci un numero di telefono"), checkbox: z.boolean().refine((val) => val === false), // Honeypot field }); const [value, setValue] = useLocalStorage( "infoalloggi-user-contatto", { nome: "", email: "", telefono: "", }, ); type FromValues = z.infer; const form = useZodForm(schema, { defaultValues: { ...value, messaggio: "", checkbox: false, // Honeypot field }, }); const { mutate } = api.servizio.sendContattoEmail.useMutation({ onMutate: () => { toast.loading("Invio in corso...", { id: "contatto", }); }, onSuccess: (data) => { setHasSent(true); form.reset(); toast.success( "Email inviata correttamente, ti contatteremo al più presto", { id: "contatto", }, ); setValue({ ...data, }); }, onError: (error) => { console.error(error); toast.error("Errore durante l'invio dell'email", { id: "contatto", }); }, }); const onSubmit = (data: FromValues) => { mutate({ ...data, telefono: data.telefono.replace(/\s/g, ""), // Remove spaces from phone number codice, }); }; z.config(z.locales[locale]()); return (
{hasSent ? (

Successo

Email inviata correttamente

) : (
(
{t.contact_form.nome}
)} /> (
{t.contact_form.email}
)} /> (
{t.contact_form.telefono}
)} /> (
{t.contact_form.messaggio}