1- import React , { useEffect , useState } from 'react' ;
1+ import React from 'react' ;
22import { BrowserRouter as Router , Routes , Route , Navigate } from 'react-router-dom' ;
3+ import AdminDashboard from './AdminDashboard' ;
4+ import DoctorDashboard from './DoctorDashboard' ;
5+ import PatientDashboard from './PatientDashboard' ;
36import Dashboard from './dashboard' ;
47import Patient from './patient' ;
58import Ward from './ward' ;
@@ -9,105 +12,34 @@ import Med from './med';
912import Lab from './lab' ;
1013import Doctors from './doc' ;
1114import NeumorphicLogin from './Counter' ;
12- import api from './api' ;
1315
14- function AdminDashboard ( ) {
15- const [ users , setUsers ] = useState ( [ ] ) ;
16- const [ stats , setStats ] = useState ( { } ) ;
17- const [ loading , setLoading ] = useState ( true ) ;
18- const [ error , setError ] = useState ( '' ) ;
19-
20- useEffect ( ( ) => {
21- async function fetchData ( ) {
22- setLoading ( true ) ;
23- setError ( '' ) ;
24- try {
25- const [ usersRes , patientsRes , doctorsRes , appointmentsRes , billingRes , medicinesRes , labTestsRes ] = await Promise . all ( [
26- api . get ( '/users' ) ,
27- api . get ( '/patients/stats/total' ) ,
28- api . get ( '/doctors/stats/total' ) ,
29- api . get ( '/appointments/stats/total' ) ,
30- api . get ( '/appointments/stats/billing' ) ,
31- api . get ( '/pharmacy/stats/total' ) ,
32- api . get ( '/lab/stats/total' ) ,
33- ] ) ;
34- setUsers ( usersRes . data ) ;
35- setStats ( {
36- patients : patientsRes . data . total ,
37- doctors : doctorsRes . data . total ,
38- appointments : appointmentsRes . data . total ,
39- billing : billingRes . data . total ,
40- medicines : medicinesRes . data . total ,
41- labTests : labTestsRes . data . total ,
42- } ) ;
43- } catch ( err ) {
44- setError ( 'Failed to load admin data.' ) ;
45- }
46- setLoading ( false ) ;
47- }
48- fetchData ( ) ;
49- } , [ ] ) ;
50-
51- if ( loading ) return < div style = { { padding :40 } } > Loading admin dashboard...</ div > ;
52- if ( error ) return < div style = { { padding :40 , color :'red' } } > { error } </ div > ;
53-
54- return (
55- < div style = { { padding :40 } } >
56- < h2 > Admin Dashboard</ h2 >
57- < h3 > Hospital Stats</ h3 >
58- < ul >
59- < li > < b > Total Patients:</ b > { stats . patients } </ li >
60- < li > < b > Total Doctors:</ b > { stats . doctors } </ li >
61- < li > < b > Total Appointments:</ b > { stats . appointments } </ li >
62- < li > < b > Total Billing Records:</ b > { stats . billing } </ li >
63- < li > < b > Total Medicines:</ b > { stats . medicines } </ li >
64- < li > < b > Total Lab Tests:</ b > { stats . labTests } </ li >
65- </ ul >
66- < h3 > All Users</ h3 >
67- < table border = "1" cellPadding = "8" style = { { marginTop :20 , borderCollapse :'collapse' } } >
68- < thead >
69- < tr >
70- < th > User ID</ th >
71- < th > Username</ th >
72- < th > Full Name</ th >
73- < th > Email</ th >
74- < th > Phone</ th >
75- < th > Role</ th >
76- </ tr >
77- </ thead >
78- < tbody >
79- { users . map ( user => (
80- < tr key = { user . user_id } >
81- < td > { user . user_id } </ td >
82- < td > { user . username } </ td >
83- < td > { user . full_name } </ td >
84- < td > { user . email } </ td >
85- < td > { user . phone } </ td >
86- < td > { user . role } </ td >
87- </ tr >
88- ) ) }
89- </ tbody >
90- </ table >
91- </ div >
92- ) ;
93- }
94-
95- function PrivateRoute ( { children, adminOnly } ) {
16+ function PrivateRoute ( { children, adminOnly, doctorOnly, patientOnly } ) {
9617 const token = localStorage . getItem ( 'token' ) ;
9718 const user = JSON . parse ( localStorage . getItem ( 'user' ) || '{}' ) ;
9819 if ( ! token ) return < Navigate to = "/login" /> ;
9920 if ( adminOnly && user . role !== 'admin' ) return < Navigate to = "/" /> ;
21+ if ( doctorOnly && user . role !== 'doctor' ) return < Navigate to = "/" /> ;
22+ if ( patientOnly && user . role !== 'patient' ) return < Navigate to = "/" /> ;
10023 return children ;
10124}
10225
10326function App ( ) {
27+ const user = JSON . parse ( localStorage . getItem ( 'user' ) || '{}' ) ;
10428 return (
10529 < Router >
10630 < Routes >
10731 < Route path = "/login" element = { < NeumorphicLogin /> } />
10832 < Route path = "/admin" element = { < PrivateRoute adminOnly = { true } > < AdminDashboard /> </ PrivateRoute > } />
109- < Route path = "/" element = { < PrivateRoute > < Dashboard /> </ PrivateRoute > } />
110- < Route path = "/patient" element = { < PrivateRoute > < Patient /> </ PrivateRoute > } />
33+ < Route path = "/doctor" element = { < PrivateRoute doctorOnly = { true } > < DoctorDashboard /> </ PrivateRoute > } />
34+ < Route path = "/patient" element = { < PrivateRoute patientOnly = { true } > < PatientDashboard /> </ PrivateRoute > } />
35+ { /* Fallback: redirect to role dashboard if logged in */ }
36+ < Route path = "/" element = {
37+ user . role === 'admin' ? < Navigate to = "/admin" /> :
38+ user . role === 'doctor' ? < Navigate to = "/doctor" /> :
39+ user . role === 'patient' ? < Navigate to = "/patient" /> :
40+ < Navigate to = "/login" />
41+ } />
42+ { /* Other routes for legacy pages if needed */ }
11143 < Route path = "/ward" element = { < PrivateRoute > < Ward /> </ PrivateRoute > } />
11244 < Route path = "/ambu" element = { < PrivateRoute > < Ambu /> </ PrivateRoute > } />
11345 < Route path = "/fin" element = { < PrivateRoute > < Fin /> </ PrivateRoute > } />
0 commit comments