From 3ebc2b9e296b1e2658cdbc9c14159ef4c6ec7e6e Mon Sep 17 00:00:00 2001 From: Purwa Shrivastava Date: Fri, 29 Nov 2019 16:17:49 +0100 Subject: [PATCH 1/2] Adding Dim 2 to the rendering logic. --- src/data-table/index.jsx | 76 +++++++++++++++++++++-------------- src/index.js | 1 - src/initialize-transformed.js | 22 +++++----- 3 files changed, 58 insertions(+), 41 deletions(-) diff --git a/src/data-table/index.jsx b/src/data-table/index.jsx index f804a30..dd4302f 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,47 @@ class DataTable extends React.PureComponent { maxWidth: columnSeparatorWidth }; + const renderMeasurementData = (dimIndex, atEvery, styleBuilder) => { + const injectSeparatorsArray = injectSeparators( + matrix[dimIndex], + columnSeparatorWidth, + atEvery + ); + + let measurementData; + injectSeparatorsArray.forEach((matrixRow) => { + if (dimension1[dimIndex].displayValue === matrixRow.parents.dimension1.header) { + dimension2.forEach((dim2) => { + if (dim2.displayValue === matrixRow.parents.dimension2.header) { + measurementData = matrixRow; + } + }); + } + if (measurementData && measurementData.isSeparator) { + return ( + + ); + } + const id = `${dimension1.elementNumber}-${dimension2 && dimension2.elementNumber}-${measurementData.header}-${measurementData.index}`; + return ( + + ); + }); + }; + return (
@@ -65,36 +108,7 @@ class DataTable extends React.PureComponent { styling={styling} /> : null } - {renderData && injectSeparators( - matrix[dimensionIndex], - columnSeparatorWidth, - { atEvery: measurements.length } - ).map((measurementData, index) => { - if (measurementData.isSeparator) { - return ( - ); })} @@ -112,6 +126,7 @@ DataTable.defaultProps = { DataTable.propTypes = { cellWidth: PropTypes.string.isRequired, columnSeparatorWidth: PropTypes.string.isRequired, + component: PropTypes.shape({}).isRequired, data: PropTypes.shape({ headers: PropTypes.shape({ dimension1: PropTypes.array.isRequired @@ -119,7 +134,6 @@ DataTable.propTypes = { matrix: PropTypes.arrayOf(PropTypes.array.isRequired).isRequired }).isRequired, general: PropTypes.shape({}).isRequired, - component: PropTypes.shape({}).isRequired, renderData: PropTypes.bool, styling: PropTypes.shape({ hasCustomFileStyle: PropTypes.bool.isRequired diff --git a/src/index.js b/src/index.js index 8b8ec4a..e9ae4ae 100644 --- a/src/index.js +++ b/src/index.js @@ -50,7 +50,6 @@ export default { } ], qMeasures: [], - qSuppressMissing: true, qSuppressZero: false } }, diff --git a/src/initialize-transformed.js b/src/initialize-transformed.js index f2b1b95..2579553 100644 --- a/src/initialize-transformed.js +++ b/src/initialize-transformed.js @@ -64,7 +64,8 @@ function generateMatrixCell ({ cell, dimension1Information, dimension2Informatio if (dimension2Information) { matrixCell.parents.dimension2 = { - elementNumber: dimension2Information.qElemNumber + elementNumber: dimension2Information.qElemNumber, + header: dimension2Information.qText }; } @@ -141,7 +142,7 @@ function generateDataSet ( let rowDataIndex = 0; dimension2.forEach(dim => { 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[index].elementNumber, + header: dim1[index].displayValue + }, + dimension2: { + elementNumber: dim2.elementNumber, + header: dim2.displayValue + }, measurement: { header: measurement.name, index: measureIndex From 8aa86275f0c868aee3deb7eb766a45fb41e8d4dd Mon Sep 17 00:00:00 2001 From: Purwa Shrivastava Date: Wed, 4 Dec 2019 11:15:14 +0100 Subject: [PATCH 2/2] Changed the rendering of each data cell to check for the headers of each dimesnsion and measure where it shall be written. --- src/data-table/index.jsx | 79 +++++++++++++++++++++-------------- src/initialize-transformed.js | 4 +- 2 files changed, 49 insertions(+), 34 deletions(-) diff --git a/src/data-table/index.jsx b/src/data-table/index.jsx index dd4302f..3a62a44 100644 --- a/src/data-table/index.jsx +++ b/src/data-table/index.jsx @@ -32,45 +32,34 @@ class DataTable extends React.PureComponent { maxWidth: columnSeparatorWidth }; - const renderMeasurementData = (dimIndex, atEvery, styleBuilder) => { + const renderMeasurementData = (dimIndex, atEvery) => { const injectSeparatorsArray = injectSeparators( matrix[dimIndex], columnSeparatorWidth, atEvery ); - let measurementData; - injectSeparatorsArray.forEach((matrixRow) => { - if (dimension1[dimIndex].displayValue === matrixRow.parents.dimension1.header) { - dimension2.forEach((dim2) => { - if (dim2.displayValue === matrixRow.parents.dimension2.header) { - measurementData = matrixRow; + 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; + } + } } - }); - } - if (measurementData && measurementData.isSeparator) { - return ( - ); })} diff --git a/src/initialize-transformed.js b/src/initialize-transformed.js index 2579553..4a841c6 100644 --- a/src/initialize-transformed.js +++ b/src/initialize-transformed.js @@ -180,8 +180,8 @@ function appendMissingCells ( displayValue: '', parents: { dimension1: { - elementNumber: dim1[index].elementNumber, - header: dim1[index].displayValue + elementNumber: dim1[matrixIndex].elementNumber, + header: dim1[matrixIndex].displayValue }, dimension2: { elementNumber: dim2.elementNumber,
- ); - } - - const { dimension1: dimension1Info, dimension2, measurement } = measurementData.parents; - const id = `${dimension1Info.elementNumber}-${dimension2 && dimension2.elementNumber}-${measurement.header}-${measurement.index}`; - return ( - - ); - })} + {renderData && renderMeasurementData(dimensionIndex, { atEvery: measurements.length }, styleBuilder)}
- ); - } - const id = `${dimension1.elementNumber}-${dimension2 && dimension2.elementNumber}-${measurementData.header}-${measurementData.index}`; - return ( - - ); + } + }); }); + return measurementDataRow; }; return ( @@ -108,7 +97,33 @@ class DataTable extends React.PureComponent { styling={styling} /> : null } - {renderData && renderMeasurementData(dimensionIndex, { atEvery: measurements.length }, styleBuilder)} + {renderData && renderMeasurementData(dimensionIndex, { atEvery: measurements.length }).map((measurementData, index) => { + if (measurementData.isSeparator) { + return ( + + ); + } + + // eslint-disable-next-line no-shadow + const { dimension1: dimension1Info, dimension2, measurement } = measurementData.parents; + const id = `${dimension1Info.elementNumber}-${dimension2 && dimension2.elementNumber}-${measurement.header}-${measurement.index}`; + return ( + + ); + })}