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 (

Welcome to PMS!

{IsLoginWithOTP ? "Enter your email to receive a one-time password (OTP)." : "Please sign in to your account and start the adventure"}

{/* Email */}
{errors.username && (
{errors.username.message}
)}
{/* Password */} {!IsLoginWithOTP && ( <>
setHidepass(!hidepass)} >
{errors.password && (
{errors.password.message}
)}
{/* Remember Me + Forgot Password */}
Forgot Password?
)} {/* Submit */} {/* Login With OTP Button */} {!IsLoginWithOTP && ( <>
or
)}
{/* Footer Text */} {!IsLoginWithOTP ? (

New on our platform? Request a Demo

) : (
)}
); }; export default LoginPage;