Skip to main content
Glama
MedicationDialog.tsx3.12 kB
// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors // SPDX-License-Identifier: Apache-2.0 import { Alert, Group, Radio, Stack } from '@mantine/core'; import { HTTP_HL7_ORG, addProfileToResource, createReference } from '@medplum/core'; import type { CodeableConcept, Encounter, MedicationRequest, Patient } from '@medplum/fhirtypes'; import { useMedplumProfile } from '@medplum/react-hooks'; import type { JSX } from 'react'; import { useCallback, useState } from 'react'; import { CodeableConceptInput } from '../CodeableConceptInput/CodeableConceptInput'; import { Form } from '../Form/Form'; import { SubmitButton } from '../Form/SubmitButton'; export interface MedicationDialogProps { readonly patient: Patient; readonly encounter?: Encounter; readonly medication?: MedicationRequest; readonly onSubmit: (medication: MedicationRequest) => void; } const HTTP = 'http://'; const statusValues: MedicationRequest['status'][] = [ 'active', 'stopped', 'on-hold', 'cancelled', 'completed', 'entered-in-error', 'draft', 'unknown', ]; export function MedicationDialog(props: MedicationDialogProps): JSX.Element { const me = useMedplumProfile(); const { patient, encounter, medication, onSubmit } = props; const [code, setCode] = useState<CodeableConcept | undefined>(medication?.medicationCodeableConcept); const handleSubmit = useCallback( (formData: Record<string, string>) => { if (!me) { throw new Error('Not signed in'); } onSubmit( addProfileToResource( { ...medication, resourceType: 'MedicationRequest', status: formData.status as MedicationRequest['status'], intent: medication?.intent ?? 'order', encounter: medication?.encounter ?? (encounter && createReference(encounter)), requester: medication?.requester ?? createReference(me), medicationCodeableConcept: code, subject: createReference(patient), }, HTTP_HL7_ORG + '/fhir/us/core/StructureDefinition/us-core-medicationrequest' ) ); }, [me, onSubmit, medication, encounter, code, patient] ); if (!me) { return <Alert color="red">Not signed in</Alert>; } return ( <Form onSubmit={handleSubmit}> <Stack> <CodeableConceptInput name="request" path="MedicationRequest.medication[x]" data-autofocus={true} binding={HTTP + 'cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1010.4'} maxValues={1} defaultValue={medication?.medicationCodeableConcept} onChange={(request) => setCode(request)} outcome={undefined} /> <Radio.Group name="status" label="Request Status" required defaultValue={medication?.status}> {statusValues.map((sv) => ( <Radio key={sv} value={sv} label={sv} my="xs" required /> ))} </Radio.Group> <Group justify="flex-end" gap={4}> <SubmitButton>Save</SubmitButton> </Group> </Stack> </Form> ); }

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