import React from 'react'; import classNames from 'classnames'; import { useTranslation } from 'react-i18next'; import { Button, Tile } from '@carbon/react'; import { ArrowRight, CircleFilled } from '@carbon/react/icons'; import { type Visit, launchWorkspace2, useConfig, usePatient } from '@openmrs/esm-framework'; import { calculateBMI, assessValue, getReferenceRangesForConcept } from '../current-visit.resource'; import { useVitalsConceptMetadata } from '../hooks/useVitalsConceptMetadata'; import { serviceQueuesPatientVitalsWorkspace } from '../../constants'; import { type ConfigObject } from '../../config-schema'; import { type PatientVitals } from '../../types/index'; import styles from './triage-note.scss'; interface VitalsComponentProps { vitals: Array; patientUuid: string; visitType: string; visit?: Visit; } const Vitals: React.FC = ({ vitals, patientUuid, visitType, visit }) => { const { t } = useTranslation(); const config = useConfig(); const { patient } = usePatient(patientUuid); const { data: conceptUnits, conceptMetadata } = useVitalsConceptMetadata(); const vitalsToDisplay = vitals.reduce( (previousVital, currentVital) => Object.assign(previousVital, currentVital), {}, ); return (
{Object.keys(vitalsToDisplay).length > 0 ? (

{t('temperature', 'Temperature')}

{vitalsToDisplay.temperature ? vitalsToDisplay.temperature : '--'}

{conceptUnits.get(config.concepts.temperatureUuid) ?? ''}

{t('bp', 'Bp')}

{vitalsToDisplay.systolic ? vitalsToDisplay.systolic : '--'} / {vitalsToDisplay.diastolic ? vitalsToDisplay.diastolic : '--'}

{conceptUnits.get(config.concepts.systolicBloodPressureUuid) ?? ''}

{t('heartRate', 'Heart rate')} {assessValue( vitalsToDisplay.pulse, getReferenceRangesForConcept(config.concepts.pulseUuid, conceptMetadata), ) !== 'normal' ? ( ) : null}

{vitalsToDisplay.pulse ? vitalsToDisplay.pulse : '--'}

{conceptUnits.get(config.concepts.pulseUuid) ?? ''}

{assessValue( vitalsToDisplay.pulse, getReferenceRangesForConcept(config.concepts.pulseUuid, conceptMetadata), ) === 'high' ? ( ) : assessValue( vitalsToDisplay.pulse, getReferenceRangesForConcept(config.concepts.pulseUuid, conceptMetadata), ) === 'critically_high' ? ( ) : assessValue( vitalsToDisplay.pulse, getReferenceRangesForConcept(config.concepts.pulseUuid, conceptMetadata), ) === 'low' ? ( ) : assessValue( vitalsToDisplay.pulse, getReferenceRangesForConcept(config.concepts.pulseUuid, conceptMetadata), ) === 'critically_low' ? ( ) : null}

{t('sp02', 'Sp02')}

{vitalsToDisplay.oxygenSaturation ? vitalsToDisplay.oxygenSaturation : '--'}

{conceptUnits.get(config.concepts.oxygenSaturationUuid) ?? ''}

{t('rRate', 'R. Rate')}

{vitalsToDisplay.respiratoryRate ? vitalsToDisplay.respiratoryRate : '--'}

{conceptUnits.get(config.concepts.respiratoryRateUuid) ?? ''}

{t('height', 'Height')}

{vitalsToDisplay.height ? vitalsToDisplay.height : '--'}

{conceptUnits.get(config.concepts.heightUuid) ?? ''}

{t('weight', 'Weight')}

{vitalsToDisplay.weight ? vitalsToDisplay.weight : '--'}

{conceptUnits.get(config.concepts.weightUuid) ?? ''}

{t('bmi', 'Bmi')}

{' '} {calculateBMI(Number(vitalsToDisplay.weight), Number(vitalsToDisplay.height))}

{config.biometrics['bmiUnit']}

{vitalsToDisplay.provider?.name ? {vitalsToDisplay.provider.name} ยท : null} {vitalsToDisplay.time}

) : (
{visitType === 'currentVisit' ? (

{t('noVitalsRecorded', 'No vitals have been recorded in this visit')}

) : (

{t('noVitalsFound', 'No vitals found')}

)}
)}
); }; export default Vitals;