Compare commits
5 Commits
pol/bd
...
QB-493/wro
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8aa86275f0 | ||
|
|
3ebc2b9e29 | ||
|
|
ce81549011 | ||
|
|
e64af66dab | ||
|
|
ca1b1a9b53 |
@@ -5,6 +5,7 @@ import DataCell from './data-cell.jsx';
|
|||||||
import RowHeader from './row-header.jsx';
|
import RowHeader from './row-header.jsx';
|
||||||
import { injectSeparators } from '../utilities';
|
import { injectSeparators } from '../utilities';
|
||||||
|
|
||||||
|
// eslint-disable-next-line react/prefer-stateless-function
|
||||||
class DataTable extends React.PureComponent {
|
class DataTable extends React.PureComponent {
|
||||||
render () {
|
render () {
|
||||||
const {
|
const {
|
||||||
@@ -20,6 +21,7 @@ class DataTable extends React.PureComponent {
|
|||||||
const {
|
const {
|
||||||
headers: {
|
headers: {
|
||||||
dimension1,
|
dimension1,
|
||||||
|
dimension2,
|
||||||
measurements
|
measurements
|
||||||
},
|
},
|
||||||
matrix
|
matrix
|
||||||
@@ -30,6 +32,36 @@ class DataTable extends React.PureComponent {
|
|||||||
maxWidth: columnSeparatorWidth
|
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 (
|
return (
|
||||||
<div className="row-wrapper">
|
<div className="row-wrapper">
|
||||||
<table>
|
<table>
|
||||||
@@ -65,11 +97,7 @@ class DataTable extends React.PureComponent {
|
|||||||
styling={styling}
|
styling={styling}
|
||||||
/> : null
|
/> : null
|
||||||
}
|
}
|
||||||
{renderData && injectSeparators(
|
{renderData && renderMeasurementData(dimensionIndex, { atEvery: measurements.length }).map((measurementData, index) => {
|
||||||
matrix[dimensionIndex],
|
|
||||||
columnSeparatorWidth,
|
|
||||||
{ atEvery: measurements.length }
|
|
||||||
).map((measurementData, index) => {
|
|
||||||
if (measurementData.isSeparator) {
|
if (measurementData.isSeparator) {
|
||||||
return (
|
return (
|
||||||
<td
|
<td
|
||||||
@@ -80,6 +108,7 @@ class DataTable extends React.PureComponent {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-shadow
|
||||||
const { dimension1: dimension1Info, dimension2, measurement } = measurementData.parents;
|
const { dimension1: dimension1Info, dimension2, measurement } = measurementData.parents;
|
||||||
const id = `${dimension1Info.elementNumber}-${dimension2 && dimension2.elementNumber}-${measurement.header}-${measurement.index}`;
|
const id = `${dimension1Info.elementNumber}-${dimension2 && dimension2.elementNumber}-${measurement.header}-${measurement.index}`;
|
||||||
return (
|
return (
|
||||||
@@ -112,6 +141,7 @@ DataTable.defaultProps = {
|
|||||||
DataTable.propTypes = {
|
DataTable.propTypes = {
|
||||||
cellWidth: PropTypes.string.isRequired,
|
cellWidth: PropTypes.string.isRequired,
|
||||||
columnSeparatorWidth: PropTypes.string.isRequired,
|
columnSeparatorWidth: PropTypes.string.isRequired,
|
||||||
|
component: PropTypes.shape({}).isRequired,
|
||||||
data: PropTypes.shape({
|
data: PropTypes.shape({
|
||||||
headers: PropTypes.shape({
|
headers: PropTypes.shape({
|
||||||
dimension1: PropTypes.array.isRequired
|
dimension1: PropTypes.array.isRequired
|
||||||
@@ -119,7 +149,6 @@ DataTable.propTypes = {
|
|||||||
matrix: PropTypes.arrayOf(PropTypes.array.isRequired).isRequired
|
matrix: PropTypes.arrayOf(PropTypes.array.isRequired).isRequired
|
||||||
}).isRequired,
|
}).isRequired,
|
||||||
general: PropTypes.shape({}).isRequired,
|
general: PropTypes.shape({}).isRequired,
|
||||||
component: PropTypes.shape({}).isRequired,
|
|
||||||
renderData: PropTypes.bool,
|
renderData: PropTypes.bool,
|
||||||
styling: PropTypes.shape({
|
styling: PropTypes.shape({
|
||||||
hasCustomFileStyle: PropTypes.bool.isRequired
|
hasCustomFileStyle: PropTypes.bool.isRequired
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ export default {
|
|||||||
uses: 'measures'
|
uses: 'measures'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// Prevent conversion from and to this object
|
||||||
|
exportProperties: null,
|
||||||
|
importProperties: null,
|
||||||
definition,
|
definition,
|
||||||
initialProperties: {
|
initialProperties: {
|
||||||
version: 1.0,
|
version: 1.0,
|
||||||
@@ -47,7 +50,6 @@ export default {
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
qMeasures: [],
|
qMeasures: [],
|
||||||
qSuppressMissing: true,
|
|
||||||
qSuppressZero: false
|
qSuppressZero: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -64,7 +64,8 @@ function generateMatrixCell ({ cell, dimension1Information, dimension2Informatio
|
|||||||
|
|
||||||
if (dimension2Information) {
|
if (dimension2Information) {
|
||||||
matrixCell.parents.dimension2 = {
|
matrixCell.parents.dimension2 = {
|
||||||
elementNumber: dimension2Information.qElemNumber
|
elementNumber: dimension2Information.qElemNumber,
|
||||||
|
header: dimension2Information.qText
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,7 +142,7 @@ function generateDataSet (
|
|||||||
let rowDataIndex = 0;
|
let rowDataIndex = 0;
|
||||||
dimension2.forEach(dim => {
|
dimension2.forEach(dim => {
|
||||||
rowDataIndex = appendMissingCells(
|
rowDataIndex = appendMissingCells(
|
||||||
row, newRow, rowDataIndex, measurements, rowIndex, dim.elementNumber);
|
row, newRow, rowDataIndex, measurements, rowIndex, dim, dimension1);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
appendMissingCells(row, newRow, 0, measurements, rowIndex);
|
appendMissingCells(row, newRow, 0, measurements, rowIndex);
|
||||||
@@ -165,14 +166,11 @@ function generateDataSet (
|
|||||||
* index of the dimension2 value being processed.
|
* index of the dimension2 value being processed.
|
||||||
*/
|
*/
|
||||||
function appendMissingCells (
|
function appendMissingCells (
|
||||||
sourceRow, destRow, sourceIndex, measurements, dim1ElementNumber, dim2ElementNumber = -1) {
|
sourceRow, destRow, sourceIndex, measurements, matrixIndex, dim2, dim1) {
|
||||||
|
|
||||||
let index = sourceIndex;
|
let index = sourceIndex;
|
||||||
measurements.forEach((measurement, measureIndex) => {
|
measurements.forEach((measurement, measureIndex) => {
|
||||||
if (index < sourceRow.length
|
if (index < sourceRow.length) {
|
||||||
&& (dim2ElementNumber === -1
|
|
||||||
|| sourceRow[index].parents.dimension2.elementNumber === dim2ElementNumber)
|
|
||||||
&& sourceRow[index].parents.measurement.header === measurement.name) {
|
|
||||||
// Source contains the expected cell
|
// Source contains the expected cell
|
||||||
destRow.push(sourceRow[index]);
|
destRow.push(sourceRow[index]);
|
||||||
index++;
|
index++;
|
||||||
@@ -181,8 +179,14 @@ function appendMissingCells (
|
|||||||
destRow.push({
|
destRow.push({
|
||||||
displayValue: '',
|
displayValue: '',
|
||||||
parents: {
|
parents: {
|
||||||
dimension1: { elementNumber: dim1ElementNumber },
|
dimension1: {
|
||||||
dimension2: { elementNumber: dim2ElementNumber },
|
elementNumber: dim1[matrixIndex].elementNumber,
|
||||||
|
header: dim1[matrixIndex].displayValue
|
||||||
|
},
|
||||||
|
dimension2: {
|
||||||
|
elementNumber: dim2.elementNumber,
|
||||||
|
header: dim2.displayValue
|
||||||
|
},
|
||||||
measurement: {
|
measurement: {
|
||||||
header: measurement.name,
|
header: measurement.name,
|
||||||
index: measureIndex
|
index: measureIndex
|
||||||
|
|||||||
Reference in New Issue
Block a user