diff --git a/dhis2-analytics-v29.6.0.tgz b/dhis2-analytics-v29.6.0.tgz new file mode 100644 index 000000000..8cfd4ca7d Binary files /dev/null and b/dhis2-analytics-v29.6.0.tgz differ diff --git a/src/modules/response/event/optionSet.js b/src/modules/response/event/optionSet.js index 34d635d55..1a47d3031 100644 --- a/src/modules/response/event/optionSet.js +++ b/src/modules/response/event/optionSet.js @@ -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) => { @@ -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 ) diff --git a/src/modules/response/event/response.js b/src/modules/response/event/response.js index 6868e60c2..428929619 100644 --- a/src/modules/response/event/response.js +++ b/src/modules/response/event/response.js @@ -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', }, } @@ -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 = {} } = {} @@ -134,10 +138,10 @@ export const transformResponse = ( ...response, metaData: { ...response.metaData, - items: applyMetaDataItemNameOverrides( + items: addNoValueItem(applyMetaDataItemNameOverrides( response.metaData.items, metaDataItemNames - ), + )), dimensions: { ...response.metaData.dimensions, }, @@ -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 }