// Auth Component // Handles user authentication - login, registration, and Google Sign-In function Auth({ onLogin }) { const [isLogin, setIsLogin] = useState(true); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [name, setName] = useState(''); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const handleSubmit = async (e) => { e.preventDefault(); setError(''); setLoading(true); try { const endpoint = isLogin ? '/auth/login' : '/auth/register'; const body = isLogin ? { email, password } : { email, password, name }; const response = await fetch(API_URL + endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) }); const data = await response.json(); if (!response.ok) { throw new Error(data.detail || 'Authentication failed'); } onLogin(data.user, data.token); } catch (err) { setError(err.message); } finally { setLoading(false); } }; const handleGoogleLogin = async () => { setError(''); setLoading(true); try { const provider = new firebase.auth.GoogleAuthProvider(); const result = await firebase.auth().signInWithPopup(provider); const idToken = await result.user.getIdToken(); const response = await fetch(API_URL + '/auth/google-login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id_token: idToken }) }); const data = await response.json(); if (!response.ok) { throw new Error(data.detail || 'Google login failed'); } onLogin(data.user, data.token); } catch (err) { setError(err.message || 'Google sign-in failed'); } finally { setLoading(false); } }; return (

📚 NoteVerse

Your Smart Study Companion

{!isLogin && (
setName(e.target.value)} placeholder="Enter your name" required />
)}
setEmail(e.target.value)} placeholder="student@university.edu" required />
setPassword(e.target.value)} placeholder="••••••••" required />
{error &&
{error}
}
OR
); } // Export to global scope window.Auth = Auth;