import React, { useState, useEffect } from 'react'; import { useAuthContext } from '../AuthContext'; import { useNavigate, useSearchParams } from 'react-router-dom'; const EMAIL_FOR_SIGN_IN_KEY = 'emailForSignIn'; const Login: React.FC = () => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [isSignUp, setIsSignUp] = useState(false); const [displayName, setDisplayName] = useState(''); const [completingEmailLink, setCompletingEmailLink] = useState(false); const [emailForLinkCompletion, setEmailForLinkCompletion] = useState(''); const { loading, error, signInWithGoogle, signInWithEmail, signUpWithEmail, signInWithEmailLink, isSignInWithEmailLink, clearError, } = useAuthContext(); const navigate = useNavigate(); const [searchParams] = useSearchParams(); // Redirect on successful auth const { user } = useAuthContext(); useEffect(() => { if (user) { const returnUrl = searchParams.get('returnUrl') || '/'; navigate(returnUrl, { replace: true }); } }, [user, navigate, searchParams]); // Check if user is returning from email link useEffect(() => { if (isSignInWithEmailLink(window.location.href)) { const emailForSignIn = window.localStorage.getItem(EMAIL_FOR_SIGN_IN_KEY); if (emailForSignIn) { setCompletingEmailLink(true); signInWithEmailLink(emailForSignIn, window.location.href) .then(() => { window.localStorage.removeItem(EMAIL_FOR_SIGN_IN_KEY); window.history.replaceState({}, document.title, '/login'); setCompletingEmailLink(false); }) .catch(() => { setCompletingEmailLink(false); setEmailForLinkCompletion(emailForSignIn); }); } else { setCompletingEmailLink(true); setEmailForLinkCompletion(''); } } }, [signInWithEmailLink, isSignInWithEmailLink]); const handleGoogleSignIn = async () => { clearError(); await signInWithGoogle(); }; const handleEmailAuth = async (e: React.FormEvent) => { e.preventDefault(); clearError(); if (isSignUp) { await signUpWithEmail(email, password, displayName); } else { await signInWithEmail(email, password); } }; const handleCompleteEmailLink = async (e: React.FormEvent) => { e.preventDefault(); if (!emailForLinkCompletion.trim()) return; await signInWithEmailLink(emailForLinkCompletion, window.location.href); window.localStorage.removeItem(EMAIL_FOR_SIGN_IN_KEY); window.history.replaceState({}, document.title, '/login'); setCompletingEmailLink(false); setEmailForLinkCompletion(''); }; return (