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 (
Hospital Management System
Demo Credentials:
Admin: username: admin | password: admin123
Doctor: username: ivan.stojanov@medora.com | password: doctor123
Patient: username: [EMBG] | password: password123