import { DataTableSkeleton, InlineLoading, Layer, Tile } from '@carbon/react'; import { ErrorState, formatDatetime, parseDate, useConfig, usePatient } from '@openmrs/esm-framework'; import { CardHeader, EmptyDataIllustration } from '@openmrs/esm-patient-common-lib/src'; import dayjs from 'dayjs'; import React, { useMemo, type FC } from 'react'; import { useTranslation } from 'react-i18next'; import { type WardConfigObject } from '../config-schema'; import { useAdmissionLocation } from '../hooks/useAdmissionLocation'; import useCurrentPatientAdmissionEncounter from '../hooks/useCurrentPatientAdmissionEncounter'; import InpatientForms from './inpatient-forms.component'; import styles from './inpatient.scss'; type InpatientDetailViewProps = { patientUuid: string; }; const InpatientDetailView: FC = ({ patientUuid }) => { const { isLoading: isLoadingPatient, patient, error } = usePatient(patientUuid); const { isLoading: isLoadingAdmissionEncounter, error: errorAdmissionEncounter, currentVisit, } = useCurrentPatientAdmissionEncounter(patientUuid); const { inPatientVisitTypeUuid } = useConfig(); const { t } = useTranslation(); if (isLoadingAdmissionEncounter || isLoadingPatient) { return ; } if (error || errorAdmissionEncounter) { return ( ); } if (!currentVisit || currentVisit?.visitType?.uuid !== inPatientVisitTypeUuid) { return ( <>

{t('noActiveVisit', 'This Patient Not currently admitted to ward')}

); } return (
); }; export default InpatientDetailView; const PatientAdmitted: FC<{ patientUuid: string; patient: fhir.Patient; }> = ({ patient, patientUuid }) => { const { admissionEncounter, isPatientAdmitted } = useCurrentPatientAdmissionEncounter(patientUuid); const { t } = useTranslation(); const { dateOfAdmission, dayasInWard } = useMemo(() => { const dateOfAdmission = admissionEncounter?.encounterDatetime ? parseDate(admissionEncounter?.encounterDatetime) : null; const today = dayjs().startOf('day'); const dayasInWard = dateOfAdmission ? Math.abs(today.diff(dateOfAdmission, 'days')) : 0; return { dateOfAdmission, dayasInWard, }; }, [admissionEncounter?.encounterDatetime]); const { isLoading, admissionLocation, error } = useAdmissionLocation(undefined, admissionEncounter?.location?.uuid); const bedLayout = useMemo(() => { return admissionLocation?.bedLayouts?.find((layout) => layout.patients?.some((pat) => pat?.uuid === patientUuid)); }, [admissionLocation, patientUuid]); if (!isPatientAdmitted) { return ( <>

{t('patientNotAdmitted', 'This Patient Not currently admitted to ward')}

;
); } return (
{t('dateOfAdmission', 'Date of Admission')}

{formatDatetime(dateOfAdmission)}

{t('daysInWard', 'Days in ward')}

{dayasInWard}

{t('ward', 'Ward')}

{admissionEncounter?.location?.display}

{isLoading ? ( ) : ( <> {t('bed', 'Bed')}

{bedLayout?.bedNumber}

)}
); };