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 { useSendLogin, 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: sendLogin, isPending } = useSendLogin(); const { mutate: sendDevLogin, isPending: isDevLoginPending } = useSendDevLogin(); const { clearStorageCompletely } = useAuthStore(); const isDevelopmentMode = import.meta.env.VITE_DEV_MODE === "Development"; const onSubmit = (data: LoginFormValues) => { clearStorageCompletely(); sendLogin(data, { onSuccess: (response) => { const lastWord = response.message.trim().split(/\s+/).pop()?.replace(/[^\w]/g, ""); navigate("/2fa/verify", { state: { email: data.email, password: data.password, finalNumber: lastWord }, replace: true }) toast.success(response.message) }, onError: (error) => { const axiosError = error as AxiosError handleApiError(axiosError) } }); }; // Função para login de desenvolvimento const handleDevLogin = () => { const formValues = getValues(); sendDevLogin(formValues, { 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')}

navigate("/recover-password")} />
{/* Botão de login para desenvolvimento */} {isDevelopmentMode && ( )}
{t('auth.dontHaveAccount')}
); };