Skip to main content
Glama
App.tsx4.56 kB
// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors // SPDX-License-Identifier: Apache-2.0 import { AppShell, Loading, Logo, useMedplum, useMedplumProfile } from '@medplum/react'; import { IconBuildingCommunity, IconBuildingHospital, IconHome, IconMessage, IconNurse, IconReportMedical, IconStethoscope, IconUpload, IconUser, IconUserPlus, } from '@tabler/icons-react'; import { Suspense } from 'react'; import type { JSX } from 'react'; import { Navigate, Route, Routes } from 'react-router'; import { ClinicPage } from './pages/AllClinicsPage'; import { CommunicationPage } from './pages/CommunicationsListPage'; import { DiagnosticReportPage } from './pages/DiagnosticReportPage'; import { EncounterPage } from './pages/EncountersListPage'; import { LandingPage } from './pages/LandingPage'; import { ManageClinicPage } from './pages/ManageClinicPage'; import { NewClinicPage } from './pages/NewClinicPage'; import { NewClinicianPage } from './pages/NewClinicianPage'; import { ObservationPage } from './pages/ObservationsListPage'; import { PatientPage } from './pages/PatientsListPage'; import { ResourcePage } from './pages/ResourcePage'; import { SignInPage } from './pages/SignInPage'; import { UploadAccessPolicyPage } from './pages/UploadAccessPolicyPage'; import { UploadBundlePage } from './pages/UploadBundlePage'; export function App(): JSX.Element { const medplum = useMedplum(); const profile = useMedplumProfile(); if (medplum.isLoading()) { return <Loading />; } return ( <AppShell logo={<Logo size={24} />} menus={menus}> <Suspense fallback={<Loading />}> <Routes> {profile ? ( <> <Route path="/signin" element={<SignInPage />} /> <Route path="/" element={<LandingPage />} /> <Route path="/Patient" element={<PatientPage />} /> <Route path="/Organization" element={<ClinicPage />} /> <Route path="/Organization/:id/manage" element={<ManageClinicPage />} /> <Route path="/Observation" element={<ObservationPage />} /> <Route path="/DiagnosticReport" element={<DiagnosticReportPage />} /> <Route path="/Encounter" element={<EncounterPage />} /> <Route path="/Communication" element={<CommunicationPage />} /> <Route path="/:resourceType/:id" element={<ResourcePage />} /> <Route path="/Organization/new" element={<NewClinicPage />} /> <Route path="/Practitioner/new" element={<NewClinicianPage />} /> <Route path="/admin/access-policy" element={<UploadAccessPolicyPage />} /> <Route path="/admin/upload-bundle" element={<UploadBundlePage />} /> </> ) : ( <> <Route path="/signin" element={<SignInPage />} /> <Route path="*" element={<Navigate to="/signin" replace />} /> </> )} </Routes> </Suspense> </AppShell> ); } const menus = [ { title: 'Managed Service Organization', links: [ { icon: <IconHome />, label: 'Directions', href: '/', }, ], }, { title: 'Upload Data', links: [ { icon: <IconUpload />, label: 'Upload Access Policy', href: '/admin/access-policy', }, { icon: <IconUpload />, label: 'Upload FHIR Bundle', href: '/admin/upload-bundle', }, ], }, { title: 'Management', links: [ { icon: <IconBuildingHospital />, label: 'Create New Clinic', href: '/Organization/new', }, { icon: <IconUserPlus />, label: 'Create New Clinician', href: '/Practitioner/new', }, { icon: <IconBuildingCommunity />, label: 'Manage Clinics', href: '/Organization', }, ], }, { title: 'Resources', links: [ { icon: <IconUser />, label: 'Patients', href: '/Patient', }, { icon: <IconStethoscope />, label: 'Observations', href: '/Observation', }, { icon: <IconReportMedical />, label: 'Diagnostic Reports', href: '/DiagnosticReport', }, { icon: <IconNurse />, label: 'Encounters', href: '/Encounter', }, { icon: <IconMessage />, label: 'Communications', href: '/Communication', }, ], }, ];

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/medplum/medplum'

If you have feedback or need assistance with the MCP directory API, please join our Discord server