import { CheckCircle } from "lucide-react"; import { useState } from "react"; import toast from "react-hot-toast"; import { useLocalStorage } from "react-use"; import { z } from "zod/v4"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "~/components/custom_ui/form"; import { Textarea } from "~/components/custom_ui/textarea"; import { Checkbox } from "~/components/ui/checkbox"; import Input from "~/components/ui/input"; import { PhoneInput } from "~/components/ui/phone-input"; import { useZodForm } from "~/lib/zodForm"; import { useTranslation } from "~/providers/I18nProvider"; import { api } from "~/utils/api"; 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({ checkbox: z.boolean().refine((val) => val === false), // Honeypot field email: z.email(), messaggio: z.string().nonempty("Inserisci un messaggio"), nome: z.string().nonempty("Inserisci un nome valido"), telefono: z.string().nonempty("Inserisci un numero di telefono"), }); const [value, setValue] = useLocalStorage( "infoalloggi-user-contatto", { email: "", nome: "", telefono: "", }, ); type FromValues = z.infer; const form = useZodForm(schema, { defaultValues: { ...value, checkbox: false, // Honeypot field messaggio: "", }, }); const { mutate } = api.comunicazioni.sendContattoAnnuncioEmail.useMutation({ onError: (error) => { console.error(error); toast.error("Errore durante l'invio dell'email", { id: "contatto", }); }, 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, }); }, }); const onSubmit = (data: FromValues) => { mutate({ ...data, codice, telefono: data.telefono.replace(/\s/g, ""), // Remove spaces from phone number }); }; 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}