import { z } from "zod/v4"; import { useZodForm } from "~/lib/zodForm"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "~/components/custom_ui/form"; import Input from "~/components/custom_ui/input"; import { useTranslation } from "~/providers/I18nProvider"; import { api } from "~/utils/api"; import { useRouter } from "next/router"; import toast from "react-hot-toast"; import { Button } from "~/components/ui/button"; import { LoadingSpinner } from "~/components/spinner"; import { useState } from "react"; import { Checkbox } from "~/components/ui/checkbox"; import type { ServizioServizioId } from "~/schemas/public/Servizio"; import type { Users } from "~/schemas/public/Users"; import { useStrongPassword } from "~/hooks/useStrongPassword"; import { cn } from "~/lib/utils"; import { Eye, EyeOff } from "lucide-react"; type FormPwSetupProps = { user: Pick; servizioId: ServizioServizioId; }; export const FormPwSetup = ({ user, servizioId }: FormPwSetupProps) => { const router = useRouter(); const { isVisible, getStrengthColor, passwordRefine, getStrengthTxt, strengthScore, toggleVisibility, } = useStrongPassword(); const Schema = z .object({ password: z.string(), checkbox: z.boolean().refine((val) => val === false), // Honeypot field }) .superRefine(({ password }, refinementContext) => { passwordRefine({ password, refinementContext, path: "password", }); }); type LoginFormValues = z.infer; const defaultValues: LoginFormValues = { password: "", checkbox: false, // Honeypot field }; const { locale, t } = useTranslation(); z.config(z.locales[locale]()); const form = useZodForm(Schema, { defaultValues: defaultValues, }); const utils = api.useUtils(); const { mutate, isPending } = api.auth.UpdatePasswordAndLogin.useMutation({ onSuccess: async () => { await utils.auth.getSession.invalidate(); setAlreadyRequested(true); toast.success(t.auth.login.success); await router.push(`/servizio/onboard/${servizioId}`); }, onError: () => { toast.error(t.auth.login.fail); }, }); const [altreadyRequested, setAlreadyRequested] = useState(false); function onSubmit(fields: LoginFormValues) { mutate({ id: user.id, password: fields.password, }); } return (

Scegli la tua password

Imposta una password per accedere al tuo account.

(
{t.auth.signup.password}
{ field.onChange(e); await form.trigger("password"); }} aria-invalid={form.getFieldState("password").invalid} aria-describedby="password-strength" />
)} /> (
Check Me
)} />
); };