diff --git a/src/data-table/data-cell.jsx b/src/data-table/data-cell.jsx index 2c3dd59..316eb2d 100644 --- a/src/data-table/data-cell.jsx +++ b/src/data-table/data-cell.jsx @@ -59,7 +59,10 @@ class DataCell extends React.PureComponent { const isValidConditionalColoringValue = !styleBuilder.hasComments() && !isNaN(measurement.value); const isSpecifiedRow = conditionalColoring.rows.indexOf(measurement.parents.dimension1.header) !== -1; - const shouldHaveConditionalColoring = conditionalColoring.colorAllRows || isSpecifiedRow; + const isSpecifiedMeasure = + conditionalColoring.measures.indexOf(measurement.parents.measurement.index) !== -1; + const shouldHaveConditionalColoring = (conditionalColoring.colorAllRows || isSpecifiedRow) + && (conditionalColoring.colorAllMeasures || isSpecifiedMeasure); if (isValidConditionalColoringValue && shouldHaveConditionalColoring) { const { color, textColor } = getConditionalColor(measurement, conditionalColoring); cellStyle.backgroundColor = color.color; diff --git a/src/definition/conditional-coloring.js b/src/definition/conditional-coloring.js index 05452e4..0924d1b 100644 --- a/src/definition/conditional-coloring.js +++ b/src/definition/conditional-coloring.js @@ -61,6 +61,36 @@ const conditionalColoring = { return data.conditionalcoloring.enabled && !data.conditionalcoloring.colorall; } }, + ColorAllMeasures: { + ref: 'conditionalcoloring.colorallmeasures', + type: 'boolean', + label: 'Color all measures', + component: 'switch', + defaultValue: true, + options: [ + { + value: true, + label: 'All measures' + }, + { + value: false, + label: 'Specified measures' + } + ], + show (data) { + return data.conditionalcoloring.enabled; + } + }, + Measures: { + ref: 'conditionalcoloring.measures', + translation: 'Measure indices (ex: 0,3)', + type: 'string', + defaultValue: '', + show (data) { + return data.conditionalcoloring.enabled + && data.conditionalcoloring.colorallmeasures === false; + } + }, ThresholdPoor: { ref: 'conditionalcoloring.threshold_poor', translation: 'Poor is less than', diff --git a/src/initialize-transformed.js b/src/initialize-transformed.js index f7a5b77..6ec9a3c 100644 --- a/src/initialize-transformed.js +++ b/src/initialize-transformed.js @@ -90,7 +90,8 @@ function generateMatrixCell ({ cell, dimension1Information, dimension2Informatio header: dimension1Information.qText }, measurement: { - header: measurementInformation.name + header: measurementInformation.name, + index: measurementInformation.index } }, value: cell.qNum @@ -130,6 +131,7 @@ function generateDataSet ( .slice(firstDataCell, row.length) .map((cell, cellIndex) => { const measurementInformation = measurements[cellIndex]; + measurementInformation.index = cellIndex; const dimension1Information = row[0]; // eslint-disable-line prefer-destructuring const dimension2Information = hasSecondDimension ? row[1] : null; const generatedCell = generateMatrixCell({ @@ -201,7 +203,7 @@ function appendMissingCells ( sourceRow, destRow, sourceIndex, measurements, dim1ElementNumber, dim2ElementNumber = -1) { let index = sourceIndex; - measurements.forEach(measurement => { + measurements.forEach((measurement, measureIndex) => { if (index < sourceRow.length && (dim2ElementNumber === -1 || sourceRow[index].parents.dimension2.elementNumber === dim2ElementNumber) @@ -216,7 +218,10 @@ function appendMissingCells ( parents: { dimension1: { elementNumber: dim1ElementNumber }, dimension2: { elementNumber: dim2ElementNumber }, - measurement: { header: measurement.name } + measurement: { + header: measurement.name, + index: measureIndex + } } }); } @@ -309,6 +314,10 @@ function initializeTransformed ({ $element, component, dataCube, designList, lay enabled: layout.conditionalcoloring.enabled, colorAllRows: layout.conditionalcoloring.colorall, rows: layout.conditionalcoloring.rows.map(row => row.rowname), + colorAllMeasures: typeof layout.conditionalcoloring.colorallmeasures === 'undefined' + || layout.conditionalcoloring.colorallmeasures, + measures: !layout.conditionalcoloring.measures + ? [] : layout.conditionalcoloring.measures.split(',').map(index => Number(index)), threshold: { poor: layout.conditionalcoloring.threshold_poor, fair: layout.conditionalcoloring.threshold_fair