import toast from "react-hot-toast"; 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 { DualInputLayout } from "~/components/custom_ui/inputLayouts"; import { PhoneInput } from "~/components/phone-input"; import { Button } from "~/components/ui/button"; import { Switch } from "~/components/ui/switch"; import { useZodForm } from "~/lib/zodForm"; import { useTranslation } from "~/providers/I18nProvider"; import type { Users, UsersId } from "~/schemas/public/Users"; import { api } from "~/utils/api"; type ProfileFromAccountProps = Pick< Users, "id" | "nome" | "cognome" | "email" | "telefono" > & Partial>; export const ProfileFormAccount = ({ id, nome, cognome, email, telefono, isAdmin, }: ProfileFromAccountProps) => { const profileFormSchema = z.object({ nome: z.string().nonempty("Inserisci un nome valido"), cognome: z.string().nonempty("Inserisci un cognome valido"), email: z.email(), telefono: z.string().nonempty("Inserisci un numero di telefono"), isAdmin: z.boolean().optional(), }); type ProfileFormValues = z.infer; const defaultValues: ProfileFormValues = { nome: nome || "", cognome: cognome || "", email: email, telefono, isAdmin: isAdmin, }; const { locale, t } = useTranslation(); z.config(z.locales[locale]()); const form = useZodForm(profileFormSchema, { defaultValues: defaultValues, }); const utils = api.useUtils(); const { mutate } = api.users.editUser.useMutation({ onSuccess: async () => { toast.success(t.profile.aggiornato); await utils.auth.getSession.invalidate(); await utils.users.getUser.invalidate(); await utils.users.getClientProfilo.invalidate(); }, onError: (error) => { toast.error(error.message); }, }); function onSubmit(fields: ProfileFormValues) { const data: { id: UsersId; email: string; isAdmin?: boolean; nome: string; cognome: string; telefono: string; } = { id: id, nome: fields.nome, cognome: fields.cognome, email: fields.email, telefono: fields.telefono.replace(/\s/g, ""), }; if (isAdmin !== undefined) { data.isAdmin = fields.isAdmin; } mutate(data); } return ( <>
(
{t.profile.nome}
)} /> } children2={ (
{t.profile.cognome}
)} /> } /> (
{t.profile.email}{" "}
)} /> } children2={ (
{t.profile.telefono}
)} /> } /> {isAdmin !== undefined && ( (
Admin { field.onChange(v); }} id="isAdmin" className="data-[state=checked]:bg-neutral-700" />
)} /> )} ); };