/* eslint-disable @typescript-eslint/no-unused-expressions */ import React, { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { Formik, Form, Field, ErrorMessage } from "formik"; import * as Yup from "yup"; import { api } from "../../Api/Api"; import Cookies from "js-cookie"; // import { loginCustomer } from "../../Api/CustomerApi"; import SingnUpModal from "./SingnUpModal"; import ForgotModal from "./ForgotModal"; import HourGlassLoader from "../Loader/Loader"; interface LoginModalProps { onClose: () => void; token: string; resetToken?: string; } const LoginModal: React.FC = ({ onClose, token, resetToken }) => { const router = useRouter(); const [isLoading, setIsLoading] = useState(false); const [activeTab, setActiveTab] = useState("user"); const [isSubmitting, setSubmitting] = useState(false); const [modalType, setModalType] = useState("login"); const [showPassword, setShowPassword] = useState(false); const initialValues = { username: "", password: "", }; useEffect(() => { if (token || resetToken) { setModalType("register"); } }, [token, resetToken]); const validationSchema = Yup.object().shape({ username: Yup.string().required(activeTab === "staff" ? "Username is required" : "Email is required"), password: Yup.string().required("Password is required"), }); const [errorMessge, seterrorMessage] = useState(""); const handleLogin = async (values: typeof initialValues) => { try { setIsLoading(true); activeTab === "staff" ? api .post( "/customer/corporate/login", { email: values?.username, password: values?.password }, false ) .then(async function ([, response]) { setIsLoading(false); if (response?.token) { Cookies.set("AUTH_TOKEN", JSON.stringify(true)); localStorage?.setItem("AUTH_TOKEN", response?.token); // Dispatch storage event window.dispatchEvent(new StorageEvent('storage', { key: 'AUTH_TOKEN', newValue: response?.token, storageArea: localStorage })); localStorage?.setItem( "USER_TYPE", response?.data?.userType?.id ); localStorage?.setItem("USER_ID", response?.data?.id); localStorage?.setItem( "USER_TYPE_NAME", response?.data?.userType?.name ); localStorage?.setItem("USER_NAME", response?.data?.firstName); localStorage?.setItem("ALL_DATA", JSON.stringify(response)); // login(response?.token, response?.data); router.push(`/dashboard`); window.location.reload(); onClose(); // window.location.reload(); setSubmitting(false); } else { if (typeof response === "string") { seterrorMessage(response); } else if (response && typeof response?.message === "string") { seterrorMessage(response?.message); } else { seterrorMessage("An error occurred."); } setSubmitting(false); } }) .catch((err: unknown) => { setIsLoading(false); if ( typeof err === "object" && err !== null && "response" in err && // eslint-disable-next-line @typescript-eslint/no-explicit-any typeof (err as any).response === "object" ) { // eslint-disable-next-line @typescript-eslint/no-explicit-any const errorResponse = (err as any).response; setSubmitting(false); if (errorResponse.status === 401) { if (typeof errorResponse.data === "string") { seterrorMessage(errorResponse.data); } else if (errorResponse.data && typeof errorResponse.data.message === "string") { seterrorMessage(errorResponse.data.message); } else { seterrorMessage("An error occurred."); } } else if (errorResponse.status === 422) { // seterrorMessage((errorResponse.data as { message?: string })?.message); } else if (errorResponse.status === 500) { // seterrorMessage("Server Error. Please try again later."); } else { // seterrorMessage("An unexpected error occurred. Please try again."); } } else { console.error("Unknown error:", err); seterrorMessage("An unexpected error occurred."); } }) : api .post( "/user/login", { email: values?.username, password: values?.password }, false ) .then(async function ([, response]) { setIsLoading(false); if (response?.token) { Cookies.set("AUTH_TOKEN", JSON.stringify(true)); localStorage?.setItem("AUTH_TOKEN", response?.token); // Dispatch storage event window.dispatchEvent(new StorageEvent('storage', { key: 'AUTH_TOKEN', newValue: response?.token, storageArea: localStorage })); localStorage?.setItem( "USER_TYPE", response?.data?.userType?.id ); localStorage?.setItem("USER_ID", response?.data?.id); localStorage?.setItem( "USER_TYPE_NAME", response?.data?.userType?.name ); localStorage?.setItem("USER_NAME", response?.data?.firstName); localStorage?.setItem("ALL_DATA", JSON.stringify(response)); // login(response?.token, response?.data); router.push(`/dashboard`); window.location.reload(); onClose(); // window.location.reload(); setSubmitting(false); } else { if (typeof response === "string") { seterrorMessage(response); } else if (response && typeof response?.message === "string") { seterrorMessage(response?.message); } else { seterrorMessage("An error occurred."); } setSubmitting(false); } }) .catch((err: unknown) => { setSubmitting(false); setIsLoading(false); // Check if err is an AxiosError or has a response if ( typeof err === "object" && err !== null && "response" in err && // eslint-disable-next-line @typescript-eslint/no-explicit-any typeof (err as any).response === "object" ) { // eslint-disable-next-line @typescript-eslint/no-explicit-any const errorResponse = (err as any).response; const status = errorResponse.status; if (status === 401) { if (typeof errorResponse.data === "string") { seterrorMessage(errorResponse.data); } else if (errorResponse.data && typeof errorResponse.data.message === "string") { seterrorMessage(errorResponse.data.message); } else { seterrorMessage("An error occurred."); } } else if (status === 422) { // seterrorMessage((errorResponse.data as { message?: string })?.message); } else if (status === 500) { // seterrorMessage("Server Error. Please try again later."); } else { // seterrorMessage("An unexpected error occurred. Please try again."); } } else { console.error("Unknown error:", err); seterrorMessage("An unexpected error occurred."); } }); } catch (error) { console.error(error); } finally { setIsLoading(false); } }; const handleInitialRegister = (): void => { window.location.href = "/dashboard"; // 🔄 hard reload }; return ( <> {isLoading && } {modalType === "register" ? (
) : modalType === "forgot" ? (
) : (
{ handleLogin(values); }} > {() => ( <>
{/*

{`Let's start`}

*/}

Sign In

Enter your credentials below to sign into your account.

{errorMessge && (
{typeof errorMessge === "string" ? errorMessge : "An unexpected error occurred."}
)}
(required)
(required) setShowPassword(!showPassword)} style={{ position: "absolute", right: "10px", top: "50%", transform: "translateY(-50%)", cursor: "pointer", }} />
)}
{/* Dummy Menus */}