import React, { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, ModalBody, ModalFooter, ModalHeader, Tag } from '@carbon/react'; import { navigate, showSnackbar, useConfig } from '@openmrs/esm-framework'; import { type ConfigObject } from '../../config-schema'; import { mapVisitQueueEntryProperties, serveQueueEntry, updateQueueEntry } from '../../service-queues.resource'; import { requeueQueueEntry } from './call-queue-entry.resource'; import { useMutateQueueEntries } from '../../hooks/useQueueEntries'; import { type QueueEntry } from '../../types'; import styles from './call-queue-entry.scss'; interface CallQueueEntryModalProps { closeModal: () => void; queueEntry: QueueEntry; } enum priorityComment { REQUEUED = 'Requeued', } const CallQueueEntryModal: React.FC = ({ closeModal, queueEntry }) => { const { t } = useTranslation(); const config = useConfig(); const defaultTransitionStatus = config.concepts.defaultTransitionStatus; const mappedQueueEntry = mapVisitQueueEntryProperties(queueEntry, config.visitQueueNumberAttributeUuid); const preferredIdentifiers = mappedQueueEntry.identifiers.filter((identifier) => config.defaultIdentifierTypes.includes(identifier?.identifierType?.uuid), ); const { mutateQueueEntries } = useMutateQueueEntries(); const launchEditPriorityModal = useCallback(() => { const endedAt = new Date(); updateQueueEntry( mappedQueueEntry.visitUuid, mappedQueueEntry.queueUuid, mappedQueueEntry.queueUuid, mappedQueueEntry.queueEntryUuid, mappedQueueEntry.patientUuid, mappedQueueEntry.priority?.uuid, defaultTransitionStatus, endedAt, mappedQueueEntry.sortWeight, ).then( () => { serveQueueEntry(mappedQueueEntry.queue.name, mappedQueueEntry.visitQueueNumber, 'serving').then( ({ status }) => { showSnackbar({ isLowContrast: true, title: t('success', 'Success'), kind: 'success', subtitle: t('patientAttendingService', 'Patient attending service'), }); closeModal(); mutateQueueEntries(); navigate({ to: `\${openmrsSpaBase}/patient/${mappedQueueEntry.patientUuid}/chart` }); }, ); }, (error) => { showSnackbar({ title: t('queueEntryUpdateFailed', 'Error updating queue entry'), kind: 'error', isLowContrast: false, subtitle: error?.message, }); }, ); }, [ closeModal, defaultTransitionStatus, mutateQueueEntries, mappedQueueEntry.patientUuid, mappedQueueEntry.priority?.uuid, mappedQueueEntry.queue.name, mappedQueueEntry.queueEntryUuid, mappedQueueEntry.queueUuid, mappedQueueEntry.sortWeight, mappedQueueEntry.visitQueueNumber, mappedQueueEntry.visitUuid, t, ]); const handleRequeuePatient = useCallback(() => { requeueQueueEntry(priorityComment.REQUEUED, mappedQueueEntry.queueUuid, mappedQueueEntry.queueEntryUuid).then( () => { showSnackbar({ isLowContrast: true, title: t('success', 'Success'), kind: 'success', subtitle: t('patientRequeued', 'Patient has been requeued'), }); closeModal(); mutateQueueEntries(); }, (error) => { showSnackbar({ title: t('queueEntryUpdateFailed', 'Error updating queue entry'), kind: 'error', isLowContrast: false, subtitle: error?.message, }); }, ); }, [closeModal, mutateQueueEntries, mappedQueueEntry.queueEntryUuid, mappedQueueEntry.queueUuid, t]); return (

{t('patientName', 'Patient name')}:   {mappedQueueEntry.name}

{preferredIdentifiers?.length ? preferredIdentifiers.map((identifier) => (

{identifier?.identifierType?.display} :   {identifier?.identifier}

)) : ''}

{t('patientGender', 'Gender')}:   {mappedQueueEntry.patientGender}

{t('patientAge', 'Age')}:   {mappedQueueEntry.patientAge}

{mappedQueueEntry.identifiers?.map((identifier) => ( {identifier.display} ))}
); }; export default CallQueueEntryModal;