import { useState, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import { useAuth } from '../../core/auth/AuthContext' const messageForError = (err) => { const code = err?.response?.data?.error?.code const msg = err?.response?.data?.error?.message switch (code) { case 'ACCOUNT_LOCKED': return msg || 'Akun terkunci sementara. Coba lagi nanti.' case 'INVALID_CREDENTIALS': return 'Email atau password salah.' case 'VALIDATION_ERROR': return 'Email dan password wajib diisi.' default: return 'Gagal masuk. Coba lagi.' } } export default function LoginPage() { const { user, loading: authLoading, login } = useAuth() const navigate = useNavigate() const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [error, setError] = useState('') const [loading, setLoading] = useState(false) useEffect(() => { if (user) navigate('/', { replace: true }) }, [user, navigate]) const handleSubmit = async (e) => { e.preventDefault() setError('') setLoading(true) try { await login(email, password) } catch (err) { setError(messageForError(err)) setLoading(false) } } if (authLoading) return
Loading...
return (

Halo Bestie

Control Center

setEmail(e.target.value)} required style={{ display: 'block', width: '100%', marginBottom: 12 }} />
setPassword(e.target.value)} required style={{ display: 'block', width: '100%', marginBottom: 12 }} />
{error &&

{error}

}
) }