diff --git a/src/data-table/index.jsx b/src/data-table/index.jsx index f804a30..3a62a44 100644 --- a/src/data-table/index.jsx +++ b/src/data-table/index.jsx @@ -5,6 +5,7 @@ import DataCell from './data-cell.jsx'; import RowHeader from './row-header.jsx'; import { injectSeparators } from '../utilities'; +// eslint-disable-next-line react/prefer-stateless-function class DataTable extends React.PureComponent { render () { const { @@ -20,6 +21,7 @@ class DataTable extends React.PureComponent { const { headers: { dimension1, + dimension2, measurements }, matrix @@ -30,6 +32,36 @@ class DataTable extends React.PureComponent { maxWidth: columnSeparatorWidth }; + const renderMeasurementData = (dimIndex, atEvery) => { + const injectSeparatorsArray = injectSeparators( + matrix[dimIndex], + columnSeparatorWidth, + atEvery + ); + + if (dimension2.length <= 0) { + return injectSeparatorsArray; + } + + let measurementDataRow = [], + index = 0; + dimension2.forEach((dim2) => { + measurements.forEach((measure) => { + for (index = 0; index < injectSeparatorsArray.length; index++) { + if (dimension1[dimIndex].displayValue === injectSeparatorsArray[index].parents.dimension1.header) { + if (dim2.displayValue === injectSeparatorsArray[index].parents.dimension2.header) { + if (measure.name === injectSeparatorsArray[index].parents.measurement.header) { + measurementDataRow.push(injectSeparatorsArray[index]); + break; + } + } + } + } + }); + }); + return measurementDataRow; + }; + return (
@@ -65,11 +97,7 @@ class DataTable extends React.PureComponent { styling={styling} /> : null } - {renderData && injectSeparators( - matrix[dimensionIndex], - columnSeparatorWidth, - { atEvery: measurements.length } - ).map((measurementData, index) => { + {renderData && renderMeasurementData(dimensionIndex, { atEvery: measurements.length }).map((measurementData, index) => { if (measurementData.isSeparator) { return (
{ rowDataIndex = appendMissingCells( - row, newRow, rowDataIndex, measurements, rowIndex, dim.elementNumber); + row, newRow, rowDataIndex, measurements, rowIndex, dim, dimension1); }); } else { appendMissingCells(row, newRow, 0, measurements, rowIndex); @@ -165,14 +166,11 @@ function generateDataSet ( * index of the dimension2 value being processed. */ function appendMissingCells ( - sourceRow, destRow, sourceIndex, measurements, dim1ElementNumber, dim2ElementNumber = -1) { + sourceRow, destRow, sourceIndex, measurements, matrixIndex, dim2, dim1) { let index = sourceIndex; measurements.forEach((measurement, measureIndex) => { - if (index < sourceRow.length - && (dim2ElementNumber === -1 - || sourceRow[index].parents.dimension2.elementNumber === dim2ElementNumber) - && sourceRow[index].parents.measurement.header === measurement.name) { + if (index < sourceRow.length) { // Source contains the expected cell destRow.push(sourceRow[index]); index++; @@ -181,8 +179,14 @@ function appendMissingCells ( destRow.push({ displayValue: '', parents: { - dimension1: { elementNumber: dim1ElementNumber }, - dimension2: { elementNumber: dim2ElementNumber }, + dimension1: { + elementNumber: dim1[matrixIndex].elementNumber, + header: dim1[matrixIndex].displayValue + }, + dimension2: { + elementNumber: dim2.elementNumber, + header: dim2.displayValue + }, measurement: { header: measurement.name, index: measureIndex