import Link from "next/link"; import { useRouter } from "next/router"; import { useState } from "react"; 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 { LoadingSpinner } from "~/components/spinner"; import { Button } from "~/components/ui/button"; import { Checkbox } from "~/components/ui/checkbox"; import { env } from "~/env"; import { useZodForm } from "~/lib/zodForm"; import { useTranslation } from "~/providers/I18nProvider"; import { api } from "~/utils/api"; export const FormLogin = () => { const router = useRouter(); const { redirect } = router.query; const LoginSchema = z.object({ checkbox: z.boolean().refine((val) => val === false), // Honeypot field email: z.email(), password: z.string(), }); type LoginFormValues = z.infer; const defaultValues: LoginFormValues = { checkbox: false, // Honeypot field email: "", password: "", }; const { locale, t } = useTranslation(); z.config(z.locales[locale]()); const form = useZodForm(LoginSchema, { defaultValues: defaultValues, }); const utils = api.useUtils(); const { mutate, isPending } = api.auth.loginUser.useMutation({ onError: ({ message }) => { toast.error(`${t.auth.login.fail}\n${message}`); }, onSuccess: async () => { await utils.auth.getSession.invalidate(); setAlreadyRequested(true); toast.success(t.auth.login.success); await router.push(redirect ? (redirect as string) : "/"); //window.location.replace(redirect ? (redirect as string) : "/"); }, }); const [altreadyRequested, setAlreadyRequested] = useState(false); function onSubmit(fields: LoginFormValues) { mutate({ email: fields.email, password: fields.password, }); form.reset(); } return ( <>

{t.auth.login.titolo}

{t.auth.login.sottotitolo}

{env.NEXT_PUBLIC_BASE_URL.includes("localhost") && ( )}
(
{t.auth.login.email}{" "}
)} /> (
{t.auth.login.password}
{t.auth.login.password_forgotten}
)} /> (
Check Me
)} />
{t.auth.login.psa_1} {t.auth.login.psa_terms} {t.auth.login.psa_2} {t.auth.login.psa_privacy} .
); };