import React, { useCallback, useMemo, useState } from 'react'; import { mutate } from 'swr'; import styles from './review-imaging-form.scss'; import { useTranslation } from 'react-i18next'; import { createAttachment, showModal, showNotification, showSnackbar, useLayoutType, type UploadedFile, } from '@openmrs/esm-framework'; import { Stack, Button, ButtonSet, InlineLoading, Table, TableBody, TextArea, TableRow, TableCell, Column, } from '@carbon/react'; import { CardHeader, useAllowedFileExtensions } from '@openmrs/esm-patient-common-lib'; import { updateImagingProcedure } from '../../imaging-tabs/test-ordered/pick-imaging-order/add-to-worklist-dialog.resource'; import { DocumentAttachment } from '@carbon/react/icons'; import { type Result } from '../../imaging-tabs/work-list/work-list.resource'; interface ReviewOrderDialogProps { order: Result; closeWorkspace: () => void; } const ImagingReviewForm: React.FC = ({ order, closeWorkspace }) => { const { t } = useTranslation(); const isTablet = useLayoutType() === 'tablet'; const { allowedFileExtensions } = useAllowedFileExtensions(); const [notes, setNotes] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); const patientUuid = order?.patient?.uuid; const tableData = useMemo( () => [ { key: t('orderUrgency', 'Order Urgency'), value: order.urgency }, { key: t('scheduleDate', 'Schedule date'), value: order.scheduledDate || new Date().toLocaleDateString(), }, { key: t('bodySite', 'Body Site'), value: order.display }, { key: t('laterality', 'Laterality'), value: order.laterality }, { key: t('numberOfRepeats', 'Number of repeats'), value: order.numberOfRepeats }, { key: t('frequency', 'Frequency'), value: order.frequency?.display }, ], [order, t], ); const showAddAttachmentModal = useCallback(() => { const close = showModal('capture-photo-modal', { saveFile: (file: UploadedFile) => createAttachment(patientUuid, file), allowedExtensions: allowedFileExtensions, closeModal: () => close(), multipleFiles: true, collectDescription: true, }); }, [allowedFileExtensions, patientUuid]); const updateProcedures = async (event: React.FormEvent) => { event.preventDefault(); setIsSubmitting(true); try { await updateImagingProcedure(order?.procedures[0]?.uuid, { outcome: 'SUCCESSFUL', impressions: notes }); showSnackbar({ isLowContrast: true, title: t('createResponse', 'Create Review'), kind: 'success', subtitle: t('pickSuccessfully', 'You have successfully created a review'), }); closeWorkspace(); mutate((key) => typeof key === 'string' && key.startsWith('/ws/rest/v1/procedure')); mutate((key) => typeof key === 'string' && key.startsWith('/ws/rest/v1/order')); } catch (error: any) { showNotification({ title: t('errorPicking', 'Error Creating Review'), kind: 'error', critical: true, description: error?.message, }); } finally { setIsSubmitting(false); } }; return (
{tableData.map( (row, index) => row.key && row.value && ( {row.key} {row.value} ), )}