import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import ErrorAlert from '../components/ErrorAlert'; import SuccessAlert from '../components/SuccessAlert'; function Login() { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); const navigate = useNavigate(); const handleLogin = async (e) => { e.preventDefault(); if (!username.trim()) { setError('Username is required'); return; } if (!password.trim()) { setError('Password is required'); return; } try { setLoading(true); setError(null); const response = await fetch('/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ username, password, }), }); if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.error || 'Login failed'); } const data = await response.json(); localStorage.setItem('token', data.token); const userData = { userId: data.userId, patientId: data.patientId, doctorId: data.doctorId, username: data.username, role: data.role, firstName: data.firstName, lastName: data.lastName, }; localStorage.setItem('user', JSON.stringify(userData)); // Dispatch custom event to notify components on the same tab window.dispatchEvent(new CustomEvent('userStorageChange', { detail: { userData } })); setSuccess('Login successful! Redirecting...'); setTimeout(() => { navigate('/'); }, 500); } catch (err) { setError(err.message || 'Login failed'); } finally { setLoading(false); } }; return (

Medora

Hospital Management System

{error && setError(null)} />} {success && setSuccess(null)} />}
setUsername(e.target.value)} placeholder="Enter your username or EMBG" className="w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:border-purple-500 transition" disabled={loading} />
setPassword(e.target.value)} placeholder="Enter your password" className="w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:border-purple-500 transition" disabled={loading} />

Demo Credentials:

Admin: username: admin | password: admin123

Doctor: username: ivan.stojanov@medora.com | password: doctor123

Patient: username: [EMBG] | password: password123

); } export default Login;