import { useEffect, useState } from "react"; import { Link, useNavigate } from "react-router-dom"; import AuthRepository from "../../repositories/AuthRepository"; import showToast from "../../services/toastService"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { AuthWrapper } from "./AuthWrapper"; const LoginPage = () => { const navigate = useNavigate(); const [loading, setLoading] = useState(false); const [hidepass, setHidepass] = useState(true); const [IsLoginWithOTP, setLoginWithOtp] = useState(false); const now = Date.now(); const loginSchema = IsLoginWithOTP ? z.object({ username: z.string().email({ message: "Valid email required" }), }) : z.object({ username: z.string().email({ message: "Valid email required" }), password: z.string().min(1, { message: "Password required" }), rememberMe: z.boolean(), }); const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(loginSchema), }); const onSubmit = async (data) => { setLoading(true); try { const username = data.username.trim(); const password = data.password?.trim(); if (!IsLoginWithOTP) { const userCredential = { username, password, }; const response = await AuthRepository.login(userCredential); localStorage.setItem("jwtToken", response.data.token); localStorage.setItem("refreshToken", response.data.refreshToken); setLoading(false); navigate("/dashboard"); } else { await AuthRepository.sendOTP({ email: username }); showToast("OTP has been sent to your email.", "success"); localStorage.setItem("otpUsername", username); localStorage.setItem("otpSentTime", now.toString()); navigate("/auth/login-otp"); } } catch (err) { showToast("Invalid username or password.", "error"); setLoading(false); } }; useEffect(() => { const otpSentTime = localStorage.getItem("otpSentTime"); if ( localStorage.getItem("otpUsername") && IsLoginWithOTP && now - Number(otpSentTime) < 10 * 60 * 1000 ) { navigate("/auth/login-otp"); } }, [IsLoginWithOTP]); return (
{IsLoginWithOTP ? "Enter your email to receive a one-time password (OTP)." : "Please sign in to your account and start the adventure"}
{/* Footer Text */} {!IsLoginWithOTP ? (New on our platform? Request a Demo
) : (