import React, { useState, useEffect, useRef } from "react"; import { useAuth } from "../contexts/AuthContext"; import PasswordStrengthMeter from "./PasswordStrengthMeter"; interface AuthModalProps { show: boolean; onHide: () => void; initialMode?: "login" | "signup"; } const AuthModal: React.FC = ({ show, onHide, initialMode = "login", }) => { const [mode, setMode] = useState<"login" | "signup">(initialMode); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [firstName, setFirstName] = useState(""); const [lastName, setLastName] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const googleButtonRef = useRef(null); const { login, register, googleLogin, updateUser } = useAuth(); // Update mode when modal is opened with different initialMode useEffect(() => { if (show && initialMode) { setMode(initialMode); } }, [show, initialMode]); // Initialize Google Sign-In useEffect(() => { if (show && window.google && process.env.REACT_APP_GOOGLE_CLIENT_ID) { try { window.google.accounts.id.initialize({ client_id: process.env.REACT_APP_GOOGLE_CLIENT_ID, callback: handleGoogleResponse, auto_select: false, cancel_on_tap_outside: false, }); } catch (error) { console.error("Error initializing Google Sign-In:", error); } } }, [show]); const handleGoogleResponse = async (response: any) => { try { setLoading(true); setError(""); if (!response?.credential) { throw new Error("No credential received from Google"); } await googleLogin(response.credential); onHide(); resetModal(); } catch (err: any) { setError( err.response?.data?.error || err.message || "Failed to sign in with Google" ); } finally { setLoading(false); } }; const handleEmailSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(""); try { if (mode === "login") { await login(email, password); onHide(); } else { await register({ email, password, firstName, lastName, username: email.split("@")[0], // Generate username from email }); onHide(); } } catch (err: any) { setError(err.response?.data?.message || "An error occurred"); } finally { setLoading(false); } }; const handleSocialLogin = (provider: string) => { if (provider === "google") { if (window.google) { try { window.google.accounts.id.prompt(); } catch (error) { setError("Failed to open Google Sign-In. Please try again."); } } else { setError("Google Sign-In is not available. Please try again later."); } } }; const resetModal = () => { setError(""); setEmail(""); setPassword(""); setFirstName(""); setLastName(""); }; if (!show) return null; return ( <>

Welcome to CommunityRentals.App

{error && (
{error}
)} {/* Email Form */}
{mode === "signup" && ( <>
setFirstName(e.target.value)} required />
setLastName(e.target.value)} required />
)}
setEmail(e.target.value)} required />
setPassword(e.target.value)} required /> {mode === "signup" && ( )}

or
{/* Social Login Options */}

By continuing, you agree to CommunityRentals.App's{" "} Terms of Service {" "} and{" "} Privacy Policy .

); }; export default AuthModal;