import React, { useState } from 'react'; import Modal from './Modal'; import Spinner from './common/Spinner'; import { login, register } from '../client/auth-client'; const VIEW = { LOGIN: 'login', REGISTER: 'register', }; export default function AuthModal({ isOpen, setIsOpen, onAuthSuccess }) { const [view, setView] = useState(VIEW.LOGIN); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(''); const [loginUsername, setLoginUsername] = useState(''); const [loginPassword, setLoginPassword] = useState(''); const [registerUsername, setRegisterUsername] = useState(''); const [registerEmail, setRegisterEmail] = useState(''); const [registerPassword, setRegisterPassword] = useState(''); const [registerConfirmPassword, setRegisterConfirmPassword] = useState(''); const resetForm = () => { setLoginUsername(''); setLoginPassword(''); setRegisterUsername(''); setRegisterEmail(''); setRegisterPassword(''); setRegisterConfirmPassword(''); setError(''); }; const handleClose = () => { resetForm(); setView(VIEW.LOGIN); }; const switchView = newView => { resetForm(); setView(newView); }; const handleLogin = async e => { e.preventDefault(); setError(''); if (!loginUsername || !loginPassword) { setError('Please fill in all fields'); return; } setIsLoading(true); const result = await login(loginUsername, loginPassword); setIsLoading(false); if (result.success) { resetForm(); setIsOpen(false); if (onAuthSuccess) { onAuthSuccess(result.value); } } else { setError(result.error || 'Login failed'); } }; const handleRegister = async e => { e.preventDefault(); setError(''); if (!registerUsername || !registerEmail || !registerPassword || !registerConfirmPassword) { setError('Please fill in all fields'); return; } if (registerPassword !== registerConfirmPassword) { setError('Passwords do not match'); return; } if (registerPassword.length < 8) { setError('Password must be at least 8 characters'); return; } setIsLoading(true); const result = await register(registerUsername, registerEmail, registerPassword); setIsLoading(false); if (result.success) { resetForm(); setIsOpen(false); if (onAuthSuccess) { onAuthSuccess(result.value); } } else { setError(result.error || 'Registration failed'); } }; return ( {view === VIEW.LOGIN ? 'Login' : 'Create Account'} {view === VIEW.LOGIN ? (
{error &&
{error}
}
) : (
{error &&
{error}
}
)}
{view === VIEW.LOGIN ? (

Don't have an account?{' '}

) : (

Already have an account?{' '}

)}
); }