import { Button } from "@/components/ui/button"; import { Separator } from "@/components/ui/separator"; import { FormField } from "@/components/Fields/form-field"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { useRequestMagicLink, useSendDevLogin } from "@/hook/queries/authentication"; import { Loader2 } from "lucide-react"; import { LoginFormValues, loginSchema } from "./schema"; import TermloansLogo from "@/assets/Termloans-logo.svg"; import Logo from "@/assets/Logo.svg"; import GoogleLogo from "@/assets/Login/Google-logo.svg"; import { AxiosError } from "axios"; import { useNavigate } from "react-router-dom"; import { toast } from "react-toastify"; import { handleApiError, NewAPIErrorResponse } from "@/utils/handle_api_error"; import { authActions, useAuthStore } from "@/store/useAuthStore"; import { googleCallbackUri, googleClientId } from "@/config"; import LazySliderDesktop from "@/components/LazySliderDesktop"; import { useTranslation } from "react-i18next"; import SEO from "@/components/SEO"; const googleSignInUrl = `https://accounts.google.com/o/oauth2/v2/auth?redirect_uri=${googleCallbackUri}&prompt=consent&response_type=code&client_id=${googleClientId}&scope=openid%20email%20profile&access_type=offline` export default function Login() { const { t } = useTranslation(); const navigate = useNavigate(); const { register, handleSubmit, formState: { errors, isValid }, getValues } = useForm({ resolver: zodResolver(loginSchema), mode: "onChange", }); const { mutate: requestMagicLink, isPending } = useRequestMagicLink(); const { mutate: sendDevLogin, isPending: isDevLoginPending } = useSendDevLogin(); const { clearStorageCompletely } = useAuthStore(); const isDevelopmentMode = import.meta.env.VITE_DEV_MODE === "Development"; const onSubmit = (data: LoginFormValues) => { clearStorageCompletely(); requestMagicLink(data.email, { onSuccess: (response) => { toast.success("Verification code sent to your phone via SMS!"); navigate("/verify-magic-code", { state: { email: data.email, phoneLastDigits: response.data.phone_last_digits }, replace: true }); }, onError: (error) => { const axiosError = error as AxiosError; handleApiError(axiosError); } }); }; // Função para login de desenvolvimento (mantém email + senha para dev) const handleDevLogin = () => { const formValues = getValues(); sendDevLogin({ email: formValues.email, password: "" } as any, { onSuccess: (response) => { if (response.access && response.refresh) { authActions.login({ access: response.access, refresh: response.refresh, user: response.user }); toast.success("Dev login successful!"); navigate("/home", { replace: true }); } }, onError: (error) => { handleApiError(error as AxiosError); } }); }; return ( <>
Logo termloans

{t('auth.welcomeBack')}

{t('auth.welcomeSubtext')}

We'll send a verification code to your phone via SMS

{/* Botão de login para desenvolvimento */} {isDevelopmentMode && ( )}
{t('auth.dontHaveAccount')}
); };