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 (
-
- } />
-
-
- } />
- } />
- } />
+ } />
} />