From 079d1083ad4232b307bdde304a738c413eecc939 Mon Sep 17 00:00:00 2001 From: Pedro Sousa Date: Thu, 25 Jul 2024 09:09:13 +0100 Subject: [PATCH 1/2] Consider questions nested within obsgroups on grid export --- src/grid-utils/download.ts | 73 +++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/src/grid-utils/download.ts b/src/grid-utils/download.ts index 6fe4063..33d9515 100644 --- a/src/grid-utils/download.ts +++ b/src/grid-utils/download.ts @@ -228,40 +228,13 @@ function getGroups( let questionColumnName: string; if (question.type === 'encounterDatetime') { questionColumnName = getFormDateColumnName(form); - } else { - questionColumnName = getFormSchemaQuestionColumnName(form, question); - } - const matchingPatientGridColumnUuid = patientGrid.columns.find( - (column) => column.name === questionColumnName, - )?.uuid; - - if (!columnNamesToInclude.includes(questionColumnName) || !matchingPatientGridColumnUuid) { - continue; - } - for (let i = 0; i < patientGrid.columns.length; i++) { - if (patientGrid.columns[i].name === questionColumnName) { - questionColumnName = patientGrid.columns[i].display; + } else if (question.type === 'obsGroup' && !!question.questions) { + for (const obsNestedQuestion of question.questions ?? []) { + processQuestion(form, obsNestedQuestion, section, filteredEncounters); } + } else { + processQuestion(form, question, section, filteredEncounters); } - - let column = section.columns.find((c) => c.header === questionColumnName); - if (!column) { - column = { - header: questionColumnName, - values: [], - }; - section.columns.push(column); - } - - filteredEncounters.forEach((thisColumnEncounter, index) => { - if (question.type === 'encounterDatetime') { - const date = thisColumnEncounter[getFormDateColumnName(form)]; - column.values.push(formatDate(new Date(date))); - } else { - const obs = thisColumnEncounter?.[matchingPatientGridColumnUuid]; - column.values.push(typeof obs?.value === 'object' ? `${obs.value.display}` : `${obs?.value ?? ''}`); - } - }); } if (section.columns.length && !isExistingSection) { @@ -276,5 +249,41 @@ function getGroups( } }); + function processQuestion(form, question, section, filteredEncounters) { + let questionColumnName = getFormSchemaQuestionColumnName(form, question); + + const matchingPatientGridColumnUuid = patientGrid.columns.find( + (column) => column.name === questionColumnName, + )?.uuid; + + if (!columnNamesToInclude.includes(questionColumnName) || !matchingPatientGridColumnUuid) { + return; + } + for (let i = 0; i < patientGrid.columns.length; i++) { + if (patientGrid.columns[i].name === questionColumnName) { + questionColumnName = patientGrid.columns[i].display; + } + } + + let column = section.columns.find((c) => c.header === questionColumnName); + if (!column) { + column = { + header: questionColumnName, + values: [], + }; + section.columns.push(column); + } + + filteredEncounters.forEach((thisColumnEncounter, index) => { + if (question.type === 'encounterDatetime') { + const date = thisColumnEncounter[getFormDateColumnName(form)]; + column.values.push(formatDate(new Date(date))); + } else { + const obs = thisColumnEncounter?.[matchingPatientGridColumnUuid]; + column.values.push(typeof obs?.value === 'object' ? `${obs.value.display}` : `${obs?.value ?? ''}`); + } + }); + } + return result; } From 384a7d8d89048e4964e6a65186492cfe316d8f57 Mon Sep 17 00:00:00 2001 From: Pedro Sousa Date: Thu, 25 Jul 2024 15:31:02 +0100 Subject: [PATCH 2/2] Cleanup --- src/grid-utils/download.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/grid-utils/download.ts b/src/grid-utils/download.ts index 33d9515..8a69354 100644 --- a/src/grid-utils/download.ts +++ b/src/grid-utils/download.ts @@ -225,10 +225,7 @@ function getGroups( } for (const question of formSchemaSection.questions ?? []) { - let questionColumnName: string; - if (question.type === 'encounterDatetime') { - questionColumnName = getFormDateColumnName(form); - } else if (question.type === 'obsGroup' && !!question.questions) { + if (question.type === 'obsGroup' && !!question.questions) { for (const obsNestedQuestion of question.questions ?? []) { processQuestion(form, obsNestedQuestion, section, filteredEncounters); }