import React, { useState } from 'react'; import classNames from 'classnames'; import { useTranslation } from 'react-i18next'; import { Button, ModalBody, ModalFooter, ModalHeader, RadioButton, RadioButtonGroup } from '@carbon/react'; import { launchWorkspace2, formatDatetime, parseDate } from '@openmrs/esm-framework'; import { type Order } from '@openmrs/esm-patient-common-lib'; import styles from './edit-lab-results.scss'; type EditLabResultModalProps = { orders: Array; closeModal: () => void; patient: fhir.Patient; /** The workspace name to launch. Defaults to 'test-results-form-workspace' for patient chart context. * Use 'lab-app-test-results-form-workspace' when opening from outside the patient chart (e.g., Laboratory app). */ workspaceName?: string; }; /** * This modal is meant for use outside the patient chart (e.g., Laboratory app). * The props passed to launchWorkspace2 are only compatible with the exported test results form. */ const EditLabResultModal: React.FC = ({ orders, closeModal, patient, workspaceName = 'test-results-form-workspace', }) => { const { t } = useTranslation(); const [selectedOrder, setSelectedOrder] = useState(orders?.[0]); const getGender = (gender: string): string => { switch (gender) { case 'M': case 'male': return t('male', 'Male'); case 'F': case 'female': return t('female', 'Female'); case 'O': case 'other': return t('other', 'Other'); case 'U': case 'unknown': return t('unknown', 'Unknown'); default: return gender; } }; const handleOrderSelection = (orderId: string) => { const order = orders.find((order) => order.uuid === orderId); if (order) { setSelectedOrder(order); } }; const handleLaunchWorkspace = () => { if (selectedOrder) { launchWorkspace2(workspaceName, { order: selectedOrder, patient }); closeModal(); } }; const confirmationText = orders.length > 1 ? t('selectTestPrompt', 'Please select which test you would like to edit for the following patient:') : t('confirmEditResults', 'Do you want to edit test results for the following patient?'); return ( <>

{confirmationText}

{selectedOrder && ( <>

{t('patientDetails', 'Patient details')}

{t('name', 'Name')}: {selectedOrder.patient?.person?.display}

{t('age', 'Age')}: {selectedOrder.patient?.person?.age}

{t('gender', 'Gender')}: {getGender(selectedOrder.patient?.person?.gender)}

{t('orderDetails', 'Order details')}

{t('testName', 'Test name')}: {selectedOrder.concept?.display || selectedOrder.concept?.name?.display || '--'}

{t('orderNumber', 'Order number')}: {selectedOrder.orderNumber}

{selectedOrder.encounter?.location?.display && (

{t('location', 'Location')}: {selectedOrder.encounter.location.display}

)}

{t('dateOrdered', 'Date ordered')}: {formatDatetime(parseDate(selectedOrder.dateActivated), { mode: 'standard', noToday: true })}

)} {orders.length > 1 && (

{t('selectTestToEdit', 'Select test to edit')}

{orders.map((order) => ( {order.concept.display || order.concept.name?.display || '--'} } value={order.uuid} className={styles.radioItem} /> ))}
)}
); }; export default EditLabResultModal;