"use client"; import axios from "axios"; import { useStoreActions } from "@hooks/store"; import { FormEvent, MouseEvent, useEffect, useRef, useState } from "react"; import { ErrorRes } from "@appTypes/Axios"; interface AuthModalProps { isOpen: boolean; // bool for if the modal should be visible onClose: () => void; //A function that will be executed to close the modal } export default function AuthModal({ isOpen, onClose }: AuthModalProps) { const [isLogin, setIsLogin] = useState(true); const modalRef = useRef(null); const [isFailed, setIsFailed] = useState(false); const [failMessage, setFailMessage] = useState(); const setUser = useStoreActions((actions) => actions.setUser); useEffect(() => { if (isOpen) setIsLogin(true); // runs when isOpen changes, if it is true, the login is shown }, [isOpen]); if (!isOpen) return null; // if is open is false, the model isnt shown const handleOverlayClick = (e: MouseEvent) => { if (modalRef.current && !modalRef.current.contains(e.target as Node)) { onClose(); } }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setIsFailed(false); const formData = new FormData(e.currentTarget); const email = formData.get("email") as string; const password = formData.get("password") as string; const name = isLogin ? undefined : (formData.get("name") as string); try { const res = await axios.post( `/api/${isLogin ? "login" : "signup"}`, isLogin ? { email, password } : { name, email, password }, { headers: { "Content-Type": "application/json" }, } ); if (res.status === 200) { setUser(res.data.user); onClose(); } else { console.error("Unexpected response status:", res.status, res.data); setFailMessage("Unexpected error occurred"); setIsFailed(true); } } catch (error) { const axiosError = error as ErrorRes; if (axiosError.response) { const { status, data } = axiosError.response; if (status >= 400 && status < 500) { console.log("4xx error:", data); setFailMessage(data.message || "Invalid request"); setIsFailed(true); } else { console.error("Server error:", data); setFailMessage("Server error occurred"); setIsFailed(true); } } else { console.error("Request failed:", axiosError.message); setFailMessage("Network error occurred"); setIsFailed(true); } } }; return (

{isLogin ? "Login" : "Sign Up"}

{/* Form */}
{!isLogin && (
)}
{isFailed && (
)}

{isLogin ? "Need an account?" : "Already have an account?"}{" "}

); }