Skip to main content
Glama
QuickServiceRequests.tsx2.89 kB
// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors // SPDX-License-Identifier: Apache-2.0 import { showNotification } from '@mantine/notifications'; import { getReferenceString, normalizeErrorString } from '@medplum/core'; import type { Patient, Reference, Resource, ServiceRequest } from '@medplum/fhirtypes'; import { MedplumLink, sortByDateAndPriority, useMedplum, useResource } from '@medplum/react'; import cx from 'clsx'; import type { JSX } from 'react'; import { useEffect, useState } from 'react'; import { getPatient } from '../utils'; import classes from './QuickServiceRequests.module.css'; export interface QuickServiceRequestsProps { readonly value: Resource | Reference; } export function QuickServiceRequests(props: QuickServiceRequestsProps): JSX.Element | null { const medplum = useMedplum(); const resource = useResource(props.value); const [serviceRequests, setServiceRequests] = useState<ServiceRequest[]>(); useEffect(() => { if (!resource) { return; } const patient = getPatient(resource); if (!patient) { return; } const patientRefStr = 'reference' in patient ? patient.reference : getReferenceString(patient as Patient); medplum .search('ServiceRequest', 'subject=' + patientRefStr) .then((bundle) => { const entries = bundle.entry ?? []; const resources = entries.map((e) => e.resource as ServiceRequest); sortByDateAndPriority(resources); resources.reverse(); setServiceRequests(resources); }) .catch((err) => showNotification({ color: 'red', message: normalizeErrorString(err), autoClose: false })); }, [medplum, resource]); if (!serviceRequests) { return null; } return ( <div data-testid="quick-service-requests" className={classes.container}> {serviceRequests.map((r) => ( <div key={r.id} className={cx(classes.entry, { [classes.active]: r.id === resource?.id })}> <p> <MedplumLink to={r}>{getServiceRequestIdentifier(r)}</MedplumLink> </p> {r.category?.[0]?.text && <p>{r.category[0]?.text}</p>} {r.code?.coding?.[0]?.code && <p>{r.code.coding[0]?.code}</p>} <p>{getServiceRequestDate(r)}</p> </div> ))} </div> ); } function getServiceRequestIdentifier(serviceRequest: ServiceRequest): string { if (serviceRequest.identifier) { for (const identifier of serviceRequest.identifier) { if (identifier.value) { return identifier.value; } } } return serviceRequest.id || ''; } function getServiceRequestDate(serviceRequest: ServiceRequest): string { if (serviceRequest.authoredOn) { return serviceRequest.authoredOn.substring(0, 10); } if (serviceRequest.meta?.lastUpdated) { return serviceRequest.meta.lastUpdated.substring(0, 10); } return ''; }

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