source: frontend/src/App.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 11 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 5.8 KB
Line 
1import React, { useEffect, useState } from 'react';
2import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
3import Navbar from './components/Navbar';
4import ProtectedRoute from './components/ProtectedRoute';
5import Login from './pages/Login';
6import Dashboard from './pages/Dashboard';
7import PatientList from './pages/patients/PatientList';
8import PatientDetail from './pages/patients/PatientDetail';
9import PatientForm from './pages/patients/PatientForm';
10import DoctorList from './pages/doctors/DoctorList';
11import DoctorDetail from './pages/doctors/DoctorDetail';
12import DoctorForm from './pages/doctors/DoctorForm';
13import AppointmentList from './pages/appointments/AppointmentList';
14import AppointmentForm from './pages/appointments/AppointmentForm';
15import MedicalRecordList from './pages/medical-records/MedicalRecordList';
16import MedicalRecordDetail from './pages/medical-records/MedicalRecordDetail';
17import BillingList from './pages/billing/BillingList';
18import BillingDetail from './pages/billing/BillingDetail';
19import ReferralList from './pages/referrals/ReferralList';
20import MedicalReportList from './pages/medical-reports/MedicalReportList';
21import LabTestList from './pages/lab-tests/LabTestList';
22import LabResultForm from './pages/lab-tests/LabResultForm';
23import ProcedureList from './pages/procedures/ProcedureList';
24import ProcedureResultForm from './pages/procedures/ProcedureResultForm';
25import DepartmentList from './pages/departments/DepartmentList';
26import DepartmentDetail from './pages/departments/DepartmentDetail';
27import DoctorsByDepartment from './pages/departments/DoctorsByDepartment';
28
29function App() {
30 const [user, setUser] = useState(null);
31 const [refresh, setRefresh] = useState(0);
32
33 useEffect(() => {
34 const loadUser = () => {
35 const userStr = localStorage.getItem('user');
36 if (userStr) {
37 try {
38 setUser(JSON.parse(userStr));
39 } catch (err) {
40 console.error('Failed to parse user:', err);
41 setUser(null);
42 }
43 } else {
44 setUser(null);
45 }
46 };
47
48 loadUser();
49
50 // Listen for storage changes (other tabs/windows)
51 window.addEventListener('storage', loadUser);
52
53 // Create a custom event listener for same-tab changes
54 const handleStorageChange = (e) => {
55 console.log('Storage change detected:', e.detail);
56 loadUser();
57 };
58 window.addEventListener('userStorageChange', handleStorageChange);
59
60 return () => {
61 window.removeEventListener('storage', loadUser);
62 window.removeEventListener('userStorageChange', handleStorageChange);
63 };
64 }, [refresh]);
65
66 return (
67 <Router>
68 <div className="min-h-screen bg-gray-50">
69 {user && <Navbar />}
70 <main className={user ? "container mx-auto px-4 py-8" : ""}>
71 <Routes>
72 <Route path="/login" element={<Login />} />
73
74 <Route path="/" element={
75 <ProtectedRoute>
76 <Dashboard />
77 </ProtectedRoute>
78 } />
79
80 {/* Patient Routes */}
81 <Route path="/patients" element={<ProtectedRoute><PatientList /></ProtectedRoute>} />
82 <Route path="/patients/new" element={<ProtectedRoute><PatientForm /></ProtectedRoute>} />
83 <Route path="/patients/:id" element={<ProtectedRoute><PatientDetail /></ProtectedRoute>} />
84 <Route path="/patients/:id/edit" element={<ProtectedRoute><PatientForm /></ProtectedRoute>} />
85
86 {/* Doctor Routes */}
87 <Route path="/doctors" element={<ProtectedRoute><DoctorList /></ProtectedRoute>} />
88 <Route path="/doctors/new" element={<ProtectedRoute><DoctorForm /></ProtectedRoute>} />
89 <Route path="/doctors/:id" element={<ProtectedRoute><DoctorDetail /></ProtectedRoute>} />
90 <Route path="/doctors/:id/edit" element={<ProtectedRoute><DoctorForm /></ProtectedRoute>} />
91
92 {/* Department Routes */}
93 <Route path="/departments" element={<ProtectedRoute><DepartmentList /></ProtectedRoute>} />
94 <Route path="/departments/:departmentId" element={<ProtectedRoute><DepartmentDetail /></ProtectedRoute>} />
95 <Route path="/departments/:departmentId/doctors" element={<ProtectedRoute><DoctorsByDepartment /></ProtectedRoute>} />
96
97 {/* Appointment Routes */}
98 <Route path="/appointments" element={<ProtectedRoute><AppointmentList /></ProtectedRoute>} />
99 <Route path="/appointments/new" element={<ProtectedRoute><AppointmentForm /></ProtectedRoute>} />
100
101 {/* Medical Record Routes */}
102 <Route path="/medical-records" element={<ProtectedRoute><MedicalRecordList /></ProtectedRoute>} />
103 <Route path="/medical-records/:id" element={<ProtectedRoute><MedicalRecordDetail /></ProtectedRoute>} />
104
105 {/* Medical Report Routes */}
106 <Route path="/medical-reports" element={<ProtectedRoute><MedicalReportList /></ProtectedRoute>} />
107
108 {/* Lab Test Routes */}
109 <Route path="/lab-tests" element={<ProtectedRoute><LabTestList /></ProtectedRoute>} />
110 <Route path="/lab-tests/results" element={<ProtectedRoute><LabResultForm /></ProtectedRoute>} />
111
112 {/* Procedure Routes */}
113 <Route path="/procedures" element={<ProtectedRoute><ProcedureList /></ProtectedRoute>} />
114 <Route path="/procedures/results" element={<ProtectedRoute><ProcedureResultForm /></ProtectedRoute>} />
115
116 {/* Billing Routes */}
117 <Route path="/billing" element={<ProtectedRoute><BillingList /></ProtectedRoute>} />
118 <Route path="/billing/:id" element={<ProtectedRoute><BillingDetail /></ProtectedRoute>} />
119
120 {/* Referral Routes */}
121 <Route path="/referrals" element={<ProtectedRoute><ReferralList /></ProtectedRoute>} />
122 </Routes>
123 </main>
124 </div>
125 </Router>
126 );
127}
128
129export default App;
Note: See TracBrowser for help on using the repository browser.