Changeset 20d16ca for frontend/src/pages


Ignore:
Timestamp:
08/30/26 00:27:08 (2 weeks ago)
Author:
MBK <marija.karapandzova@…>
Branches:
master
Children:
e1f74f6
Parents:
b63d7b5
Message:

Implement advanced database queries

File:
1 edited

Legend:

Unmodified
Added
Removed
  • frontend/src/pages/Login.js

    rb63d7b5 r20d16ca  
    4747
    4848      localStorage.setItem('token', data.token);
    49       localStorage.setItem('user', JSON.stringify({
     49      const userData = {
    5050        userId: data.userId,
    5151        patientId: data.patientId,
     
    5555        firstName: data.firstName,
    5656        lastName: data.lastName,
     57      };
     58      localStorage.setItem('user', JSON.stringify(userData));
     59
     60      // Dispatch custom event to notify components on the same tab
     61      window.dispatchEvent(new CustomEvent('userStorageChange', {
     62        detail: { userData }
    5763      }));
    5864
     
    6066      setTimeout(() => {
    6167        navigate('/');
    62       }, 1000);
     68      }, 500);
    6369    } catch (err) {
    6470      setError(err.message || 'Login failed');
     
    6975
    7076  return (
    71     <div className="min-h-screen bg-blue-200 flex items-center justify-center p-4">
    72       <div className="bg-white rounded-lg shadow-2xl p-8 w-full max-w-md">
    73         <div className="text-center mb-8">
    74           <h1 className="text-5xl font-bold text-purple-600 mb-2">Medora</h1>
    75           <p className="text-gray-600">Hospital Management System</p>
    76         </div>
    77 
    78         {error && <ErrorAlert message={error} onClose={() => setError(null)} />}
    79         {success && <SuccessAlert message={success} onClose={() => setSuccess(null)} />}
    80 
    81         <form onSubmit={handleLogin} className="space-y-6">
    82           <div>
    83             <label className="block text-sm font-normal text-gray-700 mb-2">
    84               Username (EMBG for Patients)
    85             </label>
    86             <input
    87               type="text"
    88               value={username}
    89               onChange={(e) => setUsername(e.target.value)}
    90               placeholder="Enter your username or EMBG"
    91               className="w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:border-purple-500 transition"
    92               disabled={loading}
    93             />
     77      <div className="min-h-screen bg-blue-200 flex items-center justify-center p-4">
     78        <div className="bg-white rounded-lg shadow-2xl p-8 w-full max-w-md">
     79          <div className="text-center mb-8">
     80            <h1 className="text-5xl font-bold text-purple-600 mb-2">Medora</h1>
     81            <p className="text-gray-600">Hospital Management System</p>
    9482          </div>
    9583
    96           <div>
    97             <label className="block text-sm font-normal text-gray-700 mb-2">
    98               Password
    99             </label>
    100             <input
    101               type="password"
    102               value={password}
    103               onChange={(e) => setPassword(e.target.value)}
    104               placeholder="Enter your password"
    105               className="w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:border-purple-500 transition"
    106               disabled={loading}
    107             />
     84          {error && <ErrorAlert message={error} onClose={() => setError(null)} />}
     85          {success && <SuccessAlert message={success} onClose={() => setSuccess(null)} />}
     86
     87          <form onSubmit={handleLogin} className="space-y-6">
     88            <div>
     89              <label className="block text-sm font-normal text-gray-700 mb-2">
     90                Username (EMBG for Patients)
     91              </label>
     92              <input
     93                  type="text"
     94                  value={username}
     95                  onChange={(e) => setUsername(e.target.value)}
     96                  placeholder="Enter your username or EMBG"
     97                  className="w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:border-purple-500 transition"
     98                  disabled={loading}
     99              />
     100            </div>
     101
     102            <div>
     103              <label className="block text-sm font-normal text-gray-700 mb-2">
     104                Password
     105              </label>
     106              <input
     107                  type="password"
     108                  value={password}
     109                  onChange={(e) => setPassword(e.target.value)}
     110                  placeholder="Enter your password"
     111                  className="w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:border-purple-500 transition"
     112                  disabled={loading}
     113              />
     114            </div>
     115
     116            <button
     117                type="submit"
     118                disabled={loading}
     119                className="w-full bg-purple-600 text-white font-bold py-3 rounded-lg hover:bg-purple-700 transition disabled:opacity-50 disabled:cursor-not-allowed"
     120            >
     121              {loading ? 'Logging in...' : 'Login'}
     122            </button>
     123          </form>
     124
     125          <div className="mt-8 p-4 bg-purple-50 rounded-lg border border-purple-200">
     126            <p className="text-sm text-gray-700 font-normal mb-2">Demo Credentials:</p>
     127            <p className="text-sm text-gray-600 mb-2">
     128              <strong>Admin:</strong> username: admin | password: admin123
     129            </p>
     130            <p className="text-sm text-gray-600 mb-2">
     131              <strong>Doctor:</strong> username: ivan.stojanov@medora.com | password: doctor123
     132            </p>
     133            <p className="text-sm text-gray-600">
     134              <strong>Patient:</strong> username: [EMBG] | password: password123
     135            </p>
    108136          </div>
    109 
    110           <button
    111             type="submit"
    112             disabled={loading}
    113             className="w-full bg-purple-600 text-white font-bold py-3 rounded-lg hover:bg-purple-700 transition disabled:opacity-50 disabled:cursor-not-allowed"
    114           >
    115             {loading ? 'Logging in...' : 'Login'}
    116           </button>
    117         </form>
    118 
    119         <div className="mt-8 p-4 bg-purple-50 rounded-lg border border-purple-200">
    120           <p className="text-sm text-gray-700 font-normal mb-2">Demo Credentials:</p>
    121           <p className="text-sm text-gray-600 mb-2">
    122             <strong>Admin:</strong> username: admin | password: admin123
    123           </p>
    124           <p className="text-sm text-gray-600 mb-2">
    125             <strong>Doctor:</strong> username: ivan.stojanov@medora.com | password: doctor123
    126           </p>
    127           <p className="text-sm text-gray-600">
    128             <strong>Patient:</strong> username: [EMBG] | password: password123
    129           </p>
    130137        </div>
    131138      </div>
    132     </div>
    133139  );
    134140}
Note: See TracChangeset for help on using the changeset viewer.