From f254ae4919c4916a23a977cc25e56d6c2fc7172d Mon Sep 17 00:00:00 2001 From: AJAL ODORA JONATHAN <43242517+ODORA0@users.noreply.github.com> Date: Tue, 8 Apr 2025 09:15:06 +0300 Subject: [PATCH] (enhancement) Update getLatestObs to Support Multi-Checkbox Observations --- src/api/index.ts | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/api/index.ts b/src/api/index.ts index 72fe0f44..bf7d73ac 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -80,14 +80,37 @@ export async function getLatestObs( patientUuid: string, conceptUuid: string, encounterTypeUuid?: string, -): Promise { + multiSelect: boolean = false, +): Promise { let params = `patient=${patientUuid}&code=${conceptUuid}${ encounterTypeUuid ? `&encounter.type=${encounterTypeUuid}` : '' }`; - // the latest obs - params += '&_sort=-date&_count=1'; - const { data } = await openmrsFetch(`${fhirBaseUrl}/Observation?${params}`); - return data.entry?.length ? data.entry[0].resource : null; + + if (!multiSelect) { + params += '&_sort=-date&_count=1'; + const { data } = await openmrsFetch(`${fhirBaseUrl}/Observation?${params}`); + return data.entry?.length ? data.entry[0].resource : null; + } + const sortedParams = `${params}&_sort=-date&_count=1`; + const { data: latestData } = await openmrsFetch(`${fhirBaseUrl}/Observation?${sortedParams}`); + + if (!latestData.entry?.length) { + return []; + } + + const latestObs = latestData.entry[0].resource; + const encounterReference = latestObs.encounter?.reference; + + if (!encounterReference) { + return [latestObs]; + } + + const encounterId = encounterReference.split('/')[1]; + + const encounterParams = `patient=${patientUuid}&code=${conceptUuid}&encounter=${encounterId}`; + const { data: encounterData } = await openmrsFetch(`${fhirBaseUrl}/Observation?${encounterParams}`); + + return encounterData.entry?.length ? encounterData.entry.map(entry => entry.resource) : []; } /**