Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added dhis2-analytics-v29.6.0.tgz
Binary file not shown.
11 changes: 8 additions & 3 deletions src/modules/response/event/optionSet.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { NA_VALUE } from './response.js'
import { D2__NOVALUE, NA_VALUE } from './response.js'

export const getOptionCodeIdMap = (optionIds, items) =>
optionIds.reduce((map, optionId) => {
Expand All @@ -25,9 +25,14 @@ export const getOptionIdRows = (rows, optionCodeIdMap, headerIndex) => {

export const applyOptionSetHandler = (response, headerIndex) => {
const header = response.headers[headerIndex]
const optionIds = response.metaData.dimensions[header.name]

if (response.metaData.dimensions[header.name].includes(D2__NOVALUE)) {
response.metaData.dimensions[header.name] = response.metaData.dimensions[header.name]
.map(id => id === D2__NOVALUE ? NA_VALUE : id)
}

const optionCodeIdMap = getOptionCodeIdMap(
optionIds,
response.metaData.dimensions[header.name],
response.metaData.items
)

Expand Down
25 changes: 15 additions & 10 deletions src/modules/response/event/response.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,12 @@ import { applyOptionSetHandler } from './optionSet.js'

export const PREFIX_SEPARATOR = '_'
export const NA_VALUE = ''
export const D2__NOVALUE = 'D2__NOVALUE'
export const NA_VALUE_ITEM = {
name: i18n.t('No value'),
code: D2__NOVALUE,
style: {
fontStyle: 'italic',
color: '#6C7787',
fontFamily: 'monospace',
letterSpacing: '-0.3px',
},
}

Expand Down Expand Up @@ -124,6 +123,11 @@ const applyMetaDataItemNameOverrides = (items, metaDataItemNames) =>
{ ...items }
)

const addNoValueItem = items => ({
...items,
[NA_VALUE]: NA_VALUE_ITEM
})

export const transformResponse = (
response,
{ hideNaData = false, metaDataItemNames = {} } = {}
Expand All @@ -134,10 +138,10 @@ export const transformResponse = (
...response,
metaData: {
...response.metaData,
items: applyMetaDataItemNameOverrides(
items: addNoValueItem(applyMetaDataItemNameOverrides(
response.metaData.items,
metaDataItemNames
),
)),
dimensions: {
...response.metaData.dimensions,
},
Expand Down Expand Up @@ -181,22 +185,23 @@ export const transformResponse = (
}
})

// Add "No value" dimension item if "Hide NA data" option is disabled
// Only add if there is at least one empty value
// Add "No value" dimension item if
// - "Hide NA data" option is disabled
// - NA_VALUE is not already a dimension
// - there is at least one empty value
if (!hideNaData) {
metaHeaders.forEach((header) => {
if (
!transformedResponse.metaData.dimensions[header.name].includes(NA_VALUE) &&
response.rows.map((row) => row[header.index]).includes(NA_VALUE)
) {
transformedResponse.metaData.dimensions[header.name] = [
...transformedResponse.metaData.dimensions[header.name],
NA_VALUE,
]

transformedResponse.metaData.items[NA_VALUE] = NA_VALUE_ITEM
}
})
}

return transformedResponse
}
Loading