diff --git a/src/containers/App/index.tsx b/src/containers/App/index.tsx index 725fca4d..4b795033 100644 --- a/src/containers/App/index.tsx +++ b/src/containers/App/index.tsx @@ -1,6 +1,6 @@ import { t } from '@lingui/macro'; import queryString from 'query-string'; -import { useContext, useEffect, useRef } from 'react'; +import { ReactElement, useContext, useEffect, useRef } from 'react'; import { Route, BrowserRouter, Routes, Navigate, useLocation, useNavigate } from 'react-router-dom'; import { RenderRemoteData } from 'aidbox-react/lib/components/RenderRemoteData'; @@ -10,6 +10,7 @@ import { success } from 'aidbox-react/lib/libs/remoteData'; import { User } from '@beda.software/aidbox-types'; import { AnonymousLayout, BaseLayout } from 'src/components/BaseLayout'; +import { MenuLayout } from 'src/components/BaseLayout/Sidebar/SidebarTop/context'; import { Spinner } from 'src/components/Spinner'; import { PublicAppointment } from 'src/containers/Appointment/PublicAppointment'; import { EncounterList } from 'src/containers/EncounterList'; @@ -23,7 +24,7 @@ import { QuestionnaireList } from 'src/containers/QuestionnaireList'; import { SignIn } from 'src/containers/SignIn'; import { VideoCall } from 'src/containers/VideoCall'; import { getToken, parseOAuthState, setToken } from 'src/services/auth'; -import { Role, matchCurrentUserRole } from 'src/utils/role'; +import { selectUserRole } from 'src/utils/role'; import { restoreUserSession } from './utils'; import { AidboxFormsBuilder } from '../AidboxFormsBuilder'; @@ -36,9 +37,13 @@ import { OrganizationScheduling } from '../OrganizationScheduling'; import { DocumentPrint } from '../PatientDetails/DocumentPrint'; import { Prescriptions } from '../Prescriptions'; import { SetPassword } from '../SetPassword'; -import { MenuLayout } from 'src/components/BaseLayout/Sidebar/SidebarTop/context'; -export function App() { +interface AppProps { + authenticatedRoutes?: ReactElement; + anonymousRoutes?: ReactElement; +} + +export function App({ authenticatedRoutes, anonymousRoutes }: AppProps) { const menuLayout = useContext(MenuLayout); const [userResponse] = useService(async () => { const appToken = getToken(); @@ -47,17 +52,12 @@ export function App() { const renderRoutes = (user: User | null) => { if (user) { - const layout = matchCurrentUserRole(menuLayout); - const defaultRoute = layout[0]?.path ?? '/encounters' - return matchCurrentUserRole({ - [Role.Admin]: () => , - [Role.Patient]: (patient) => , - [Role.Practitioner]: () => , - [Role.Receptionist]: () => , - }); + const layout = selectUserRole(user, menuLayout); + const defaultRoute = layout[0]?.path ?? '/encounters'; + return ; } - return ; + return ; }; return ( @@ -86,13 +86,14 @@ export function Auth() { return null; } -function AnonymousUserApp() { +function AnonymousUserApp({ extra }: { extra?: ReactElement }) { const location = useLocation(); const originPathRef = useRef(location.pathname); const navigate = useNavigate(); return ( + {extra} } /> } /> } /> @@ -135,61 +136,29 @@ function AnonymousUserApp() { interface RouteProps { defaultRoute: string; + extra?: ReactElement; } -function AuthenticatedAdminUserApp({ defaultRoute }:RouteProps) { +function AuthenticatedUserApp({ defaultRoute, extra }: RouteProps) { return ( } /> + } /> - {/* TODO: in the current implementation admin will get all patients via /patients, but it's wrong */} - } /> + {extra} } /> + } /> + } /> + } /> } /> } /> - } /> - } /> - } /> - documents/:id/edit} /> - } /> - } /> - } /> - } /> - } /> - } /> - } - /> - questionnaires/:id} /> - } /> - } /> - - - } - /> - - ); -} - -function AuthenticatedPractitionerUserApp({ defaultRoute }: RouteProps) { - return ( - - } /> - - } /> - } /> - } /> - } /> } /> + } /> documents/:id/edit} /> } /> } /> @@ -202,50 +171,7 @@ function AuthenticatedPractitionerUserApp({ defaultRoute }: RouteProps) { element={} /> questionnaires/:id} /> - } /> - - - } - /> - - ); -} - -function AuthenticatedReceptionistUserApp({ defaultRoute }: RouteProps) { - return ( - - } /> - - - } /> - } /> - } /> - } /> - } /> - } /> - - - } - /> - - ); -} - -function AuthenticatedPatientUserApp({ defaultRoute }: RouteProps) { - return ( - - } /> - - - } /> - } /> - } /> + } /> } />