Skip to main content
Glama
ResourcePanel.tsx1.79 kB
// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors // SPDX-License-Identifier: Apache-2.0 import { Box, Text } from '@mantine/core'; import type { DiagnosticReport, Encounter, Reference, Resource, ServiceRequest, Task } from '@medplum/fhirtypes'; import { ResourceTable, useResource, PatientSummary } from '@medplum/react'; import type { JSX } from 'react'; import { LabResultDetails } from '../labs/LabResultDetails'; import { LabOrderDetails } from '../labs/LabOrderDetails'; import { EncounterChart } from '../encounter/EncounterChart'; import { TaskDetailPanel } from '../tasks/TaskDetailPanel'; interface ResourcePanelProps<T extends Resource = Resource> { resource: Reference<T> | T; } export function ResourcePanel<T extends Resource = Resource>(props: ResourcePanelProps<T>): JSX.Element | null { const { resource } = props; const displayResource = useResource(resource); const renderResourceContent = (): JSX.Element => { if (!displayResource) { return <Text c="dimmed">Loading resource...</Text>; } switch (displayResource.resourceType) { case 'Patient': return <PatientSummary patient={displayResource} />; case 'Task': return <TaskDetailPanel task={displayResource as Task} />; case 'DiagnosticReport': return <LabResultDetails result={displayResource as DiagnosticReport} />; case 'ServiceRequest': return <LabOrderDetails order={displayResource as ServiceRequest} />; case 'Encounter': return <EncounterChart encounter={displayResource as Encounter} />; default: return <ResourceTable value={displayResource} />; } }; return ( <Box p="md" data-testid="resource-panel"> {renderResourceContent()} </Box> ); }

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