import toast from "react-hot-toast"; import { z } from "zod/v4"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "~/components/custom_ui/form"; import { useZodForm } from "~/lib/zodForm"; import { api } from "~/utils/api"; import Input from "~/components/custom_ui/input"; import { Button, buttonVariants } from "~/components/ui/button"; import { useTranslation } from "~/providers/I18nProvider"; import { useStrongPassword } from "~/hooks/useStrongPassword"; import { cn } from "~/lib/utils"; import { Eye, EyeOff } from "lucide-react"; import { PhoneInput } from "~/components/phone-input"; import { generatePassword } from "~/lib/basicPwGenerator"; export const FormNewUser = ({ setOpen, }: { setOpen: (status: boolean) => void; }) => { const { isVisible, getStrengthColor, passwordRefine, getStrengthTxt, strengthScore, toggleVisibility, } = useStrongPassword(); const NewUserSchema = z .object({ email: z.email(), password: z.string(), nome: z.string().nonempty("Inserisci un nome valido"), cognome: z.string().nonempty("Inserisci un cognome valido"), telefono: z.string().nonempty("Inserisci un numero di telefono"), }) .superRefine(({ password }, refinementContext) => { passwordRefine({ password, refinementContext, path: "password", }); }); type NewUserFormValues = z.infer; // This can come from your database or API. const defaultValues: NewUserFormValues = { nome: "", cognome: "", email: "", password: "", telefono: "", }; const { locale, t } = useTranslation(); z.config(z.locales[locale]()); const form = useZodForm(NewUserSchema, { defaultValues: defaultValues, }); const utils = api.useUtils(); const { mutate } = api.auth.addUserAdmin.useMutation({ onSuccess: async () => { toast.success(t.newUser.accountCreato); await utils.users.getUsersWChatInfo.invalidate(); await utils.stats.adminDashStats.invalidate(); setOpen(false); }, onError: (error) => { toast.error(error.message); }, }); function onSubmit(fields: NewUserFormValues) { mutate({ nome: fields.nome, cognome: fields.cognome, email: fields.email, password: fields.password, telefono: fields.telefono.replace(/\s/g, ""), }); } return (
(
{t.newUser.nome}
)} /> (
{t.newUser.cognome}
)} /> (
{t.newUser.email}{" "}
)} /> (
{t.auth.signup.password} {" "}
{ field.onChange(e); await form.trigger("password"); }} aria-invalid={form.getFieldState("password").invalid} aria-describedby="password-strength" />
)} /> (
{t.profile.telefono}
)} /> ); };