@sis-cc/dotstatsuite-components 15.0.21 → 16.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/lib/rules/src/index.js +1 -145
  2. package/lib/rules/src/table/index.js +0 -42
  3. package/lib/rules2/src/constants.js +4 -1
  4. package/lib/rules2/src/enhanceObservations.js +98 -0
  5. package/lib/rules2/src/getAttributesSeries.js +33 -0
  6. package/lib/rules2/src/getCombinationDefinitions.js +48 -0
  7. package/lib/rules2/src/getHeaderCombinations.js +42 -0
  8. package/lib/rules2/src/getHeaderSubtitle.js +41 -0
  9. package/lib/rules2/src/getManyValuesDimensions.js +39 -0
  10. package/lib/rules2/src/getOneValueDimensions.js +46 -0
  11. package/lib/rules2/src/hasCellMetadata.js +1 -1
  12. package/lib/rules2/src/index.js +186 -18
  13. package/lib/rules2/src/parseAttributes.js +50 -0
  14. package/lib/rules2/src/parseCombinations.js +54 -0
  15. package/lib/rules2/src/parseMetadataSeries.js +4 -2
  16. package/lib/rules2/src/prepareData.js +74 -0
  17. package/lib/{rules/src/table/preparators/getAttributeValue.js → rules2/src/refineAttributes.js} +13 -11
  18. package/lib/rules2/src/table/getCells.js +74 -0
  19. package/lib/rules2/src/table/getCellsAttributesIds.js +63 -0
  20. package/lib/rules2/src/table/getCombinationDimensionsData.js +47 -0
  21. package/lib/rules2/src/table/getCuratedCells.js +28 -0
  22. package/lib/rules2/src/table/getFlagsAndNotes.js +28 -0
  23. package/lib/rules2/src/table/getIndexedCombinationsByDisplay.js +31 -0
  24. package/lib/rules2/src/table/getLayout.js +93 -0
  25. package/lib/rules2/src/table/getLayoutData.js +202 -0
  26. package/lib/{rules/src/table/factories → rules2/src/table}/getSortedLayoutIndexes.js +55 -40
  27. package/lib/rules2/src/table/getTableProps.js +64 -0
  28. package/lib/rules2/src/table/parseValueHierarchy.js +55 -0
  29. package/lib/{rules/src/table/factories → rules2/src/table}/refineLayoutSize.js +17 -8
  30. package/lib/rules2/src/{hasLayoutEntryMetadata.js → utils.js} +9 -6
  31. package/package.json +1 -1
  32. package/src/rules/src/index.js +1 -19
  33. package/src/rules/src/table/index.js +0 -4
  34. package/src/rules2/src/constants.js +3 -0
  35. package/src/rules2/src/enhanceObservations.js +88 -0
  36. package/src/rules2/src/getAttributesSeries.js +29 -0
  37. package/src/rules2/src/getCombinationDefinitions.js +29 -0
  38. package/src/rules2/src/getHeaderCombinations.js +39 -0
  39. package/src/rules2/src/getHeaderSubtitle.js +34 -0
  40. package/src/rules2/src/getManyValuesDimensions.js +34 -0
  41. package/src/rules2/src/getOneValueDimensions.js +33 -0
  42. package/src/rules2/src/hasCellMetadata.js +1 -1
  43. package/src/rules2/src/index.js +21 -6
  44. package/src/rules2/src/parseAttributes.js +36 -0
  45. package/src/rules2/src/parseCombinations.js +36 -0
  46. package/src/rules2/src/parseMetadataSeries.js +3 -2
  47. package/src/rules2/src/prepareData.js +50 -0
  48. package/src/rules2/src/refineAttributes.js +16 -0
  49. package/src/rules2/src/table/getCells.js +72 -0
  50. package/src/rules2/src/table/getCellsAttributesIds.js +38 -0
  51. package/src/rules2/src/table/getCombinationDimensionsData.js +38 -0
  52. package/src/rules2/src/table/getCuratedCells.js +33 -0
  53. package/src/rules2/src/table/getFlagsAndNotes.js +21 -0
  54. package/src/rules2/src/table/getIndexedCombinationsByDisplay.js +16 -0
  55. package/src/rules2/src/table/getLayout.js +80 -0
  56. package/src/rules2/src/table/getLayoutData.js +183 -0
  57. package/src/rules2/src/table/getSortedLayoutIndexes.js +119 -0
  58. package/src/rules2/src/table/getTableProps.js +36 -0
  59. package/src/rules2/src/table/parseValueHierarchy.js +27 -0
  60. package/src/{rules/src/table/factories → rules2/src/table}/refineLayoutSize.js +24 -8
  61. package/src/rules2/src/utils.js +12 -0
  62. package/test/enhanceObservations2.test.js +219 -0
  63. package/test/getAttributesSeries.test.js +58 -0
  64. package/test/getCells.test.js +6 -40
  65. package/test/getCombinationDimensionsData.test.js +48 -0
  66. package/test/getSortedLayoutIndexes.test.js +1025 -3
  67. package/test/mocks/OECD_SNA_TABLE1_1.0_-_AUS_V_metadata.json +2 -2
  68. package/test/parseAttributes.test.js +17 -62
  69. package/test/parseMetadataSeries.test.js +1 -1
  70. package/test/parseValueHierarchy.test.js +88 -0
  71. package/test/refineLayoutSize.test.js +2621 -1
  72. package/lib/rules/src/table/factories/getCells.js +0 -97
  73. package/lib/rules/src/table/factories/getConfirmedSeriesAttributesIds.js +0 -26
  74. package/lib/rules/src/table/factories/getCuratedCells.js +0 -45
  75. package/lib/rules/src/table/factories/getLayoutData.js +0 -168
  76. package/lib/rules/src/table/factories/getLayoutWithFlags.js +0 -133
  77. package/lib/rules/src/table/factories/getTableCells.js +0 -24
  78. package/lib/rules/src/table/factories/getTableData.js +0 -98
  79. package/lib/rules/src/table/preparators/getDimensionsAttributesRegisters.js +0 -43
  80. package/lib/rules/src/table/preparators/getManyValuesDimensions.js +0 -33
  81. package/lib/rules/src/table/preparators/getOneValueDimensions.js +0 -24
  82. package/lib/rules/src/table/preparators/getUniqValuesAttributes.js +0 -36
  83. package/lib/rules/src/table/preparators/parseAttributes.js +0 -84
  84. package/lib/rules/src/table/preparators/parseAttributesValuesFromObservations.js +0 -22
  85. package/lib/rules/src/table/preparators/parseDimensionsIds.js +0 -22
  86. package/lib/rules/src/table/preparators/prepareData.js +0 -191
  87. package/lib/rules/src/table/preparators/refineObservationsAttributesValues.js +0 -31
  88. package/lib/rules/src/table/preparators/refineSeriesAttributesValues.js +0 -23
  89. package/lib/rules/src/table/units/appendUnitsInLayoutData.js +0 -82
  90. package/lib/rules/src/table/units/appendUnitsInLayoutDataEntry.js +0 -45
  91. package/lib/rules/src/table/units/cleanUnitsInLayoutData.js +0 -66
  92. package/lib/rules/src/table/units/getAttachmentSeriesIndexes.js +0 -25
  93. package/lib/rules/src/table/units/getHeaderUnits.js +0 -35
  94. package/lib/rules/src/table/units/getUnitsArtefacts.js +0 -85
  95. package/lib/rules/src/table/units/getUnitsCodes.js +0 -23
  96. package/lib/rules/src/table/units/getUnitsDefinition.js +0 -33
  97. package/lib/rules/src/table/units/getUnitsDisplay.js +0 -33
  98. package/lib/rules/src/table/units/getUnitsSerieIndexes.js +0 -23
  99. package/lib/rules/src/table/units/getUnitsSeries.js +0 -49
  100. package/lib/rules/src/table/units/getUnitsinLayout.js +0 -74
  101. package/lib/rules/src/table/units/refineDimSeriesUnits.js +0 -44
  102. package/lib/rules2/src/getAdvancedAttributes.js +0 -124
  103. package/lib/rules2/src/invertTime.js +0 -33
  104. package/src/rules/src/table/factories/getCells.js +0 -102
  105. package/src/rules/src/table/factories/getConfirmedSeriesAttributesIds.js +0 -27
  106. package/src/rules/src/table/factories/getCuratedCells.js +0 -40
  107. package/src/rules/src/table/factories/getLayoutData.js +0 -171
  108. package/src/rules/src/table/factories/getLayoutWithFlags.js +0 -137
  109. package/src/rules/src/table/factories/getSortedLayoutIndexes.js +0 -108
  110. package/src/rules/src/table/factories/getTableCells.js +0 -16
  111. package/src/rules/src/table/factories/getTableData.js +0 -86
  112. package/src/rules/src/table/preparators/getAttributeValue.js +0 -17
  113. package/src/rules/src/table/preparators/getDimensionsAttributesRegisters.js +0 -51
  114. package/src/rules/src/table/preparators/getManyValuesDimensions.js +0 -19
  115. package/src/rules/src/table/preparators/getOneValueDimensions.js +0 -17
  116. package/src/rules/src/table/preparators/getUniqValuesAttributes.js +0 -24
  117. package/src/rules/src/table/preparators/parseAttributes.js +0 -113
  118. package/src/rules/src/table/preparators/parseAttributesValuesFromObservations.js +0 -16
  119. package/src/rules/src/table/preparators/parseDimensionsIds.js +0 -17
  120. package/src/rules/src/table/preparators/prepareData.js +0 -197
  121. package/src/rules/src/table/preparators/refineObservationsAttributesValues.js +0 -22
  122. package/src/rules/src/table/preparators/refineSeriesAttributesValues.js +0 -11
  123. package/src/rules/src/table/units/appendUnitsInLayoutData.js +0 -56
  124. package/src/rules/src/table/units/appendUnitsInLayoutDataEntry.js +0 -38
  125. package/src/rules/src/table/units/cleanUnitsInLayoutData.js +0 -65
  126. package/src/rules/src/table/units/getAttachmentSeriesIndexes.js +0 -27
  127. package/src/rules/src/table/units/getHeaderUnits.js +0 -32
  128. package/src/rules/src/table/units/getUnitsArtefacts.js +0 -90
  129. package/src/rules/src/table/units/getUnitsCodes.js +0 -22
  130. package/src/rules/src/table/units/getUnitsDefinition.js +0 -34
  131. package/src/rules/src/table/units/getUnitsDisplay.js +0 -19
  132. package/src/rules/src/table/units/getUnitsSerieIndexes.js +0 -12
  133. package/src/rules/src/table/units/getUnitsSeries.js +0 -41
  134. package/src/rules/src/table/units/getUnitsinLayout.js +0 -71
  135. package/src/rules/src/table/units/refineDimSeriesUnits.js +0 -26
  136. package/src/rules2/src/getAdvancedAttributes.js +0 -111
  137. package/src/rules2/src/hasLayoutEntryMetadata.js +0 -9
  138. package/src/rules2/src/invertTime.js +0 -22
  139. package/test/advanced-attributes-parsing-perf.test.js +0 -16
  140. package/test/appendUnitsInLayoutDataEntry.test.js +0 -65
  141. package/test/cleanUnitsInLayoutData.test.js +0 -85
  142. package/test/enhanceObservations.test.js +0 -340
  143. package/test/getAttachmentSeriesIndexes.test.js +0 -35
  144. package/test/getConfirmedSeriesAttributesIds.test.js +0 -27
  145. package/test/getDataflowAdvancedAttributes.test.js +0 -32
  146. package/test/getHeaderUnits.test.js +0 -51
  147. package/test/getLayoutData.test.js +0 -206
  148. package/test/getLayoutDataWithFlags.test.js +0 -142
  149. package/test/getOneValueDimensions.test.js +0 -26
  150. package/test/getSeriesAdvancedAttributes.test.js +0 -32
  151. package/test/getSubtitleFlags.test.js +0 -42
  152. package/test/getTableData.test.js +0 -1317
  153. package/test/getUnitsArtefacts.test.js +0 -117
  154. package/test/getUnitsDefinition.test.js +0 -37
  155. package/test/getUnitsInLayout.test.js +0 -77
  156. package/test/getUnitsSeries.test.js +0 -154
  157. package/test/invertTime.test.js +0 -77
  158. package/test/parseAttributesValuesFromObservations.test.js +0 -45
  159. package/test/parseDimensionsIds.test.js +0 -20
  160. package/test/prepareData.test.js +0 -29
  161. package/test/refineObservationsAttributesValues.test.js +0 -33
  162. package/test/table-invert-time-perf.test.js +0 -11
  163. package/test/table-layout-perf.test.js +0 -74
  164. package/test/table-prep-duplicate-perf.test.js +0 -15
  165. package/test/table-prep-perf.test.js +0 -61
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getCuratedCells = undefined;
7
+
8
+ var _ramda = require('ramda');
9
+
10
+ var R = _interopRequireWildcard(_ramda);
11
+
12
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
13
+
14
+ var getCuratedCells = exports.getCuratedCells = function getCuratedCells(cells, layout) {
15
+ var layoutIds = R.map(R.pipe(R.map(function (entry) {
16
+ return R.has('dimensions', entry) ? R.pluck('id', entry.dimensions || []) : entry.id;
17
+ }), R.unnest))(layout);
18
+ return R.pipe(R.values, R.reduce(function (acc, cell) {
19
+ var keys = R.map(R.pipe(R.map(function (dim) {
20
+ var val = R.prop(dim, cell.indexedDimValIds);
21
+ return dim + '=' + val;
22
+ }), R.join(':')), layoutIds);
23
+
24
+ return R.over(R.lensPath(R.props(['header', 'sections', 'rows'], keys)), function (cells) {
25
+ return R.isNil(cells) ? [cell] : R.append(cell, cells);
26
+ }, acc);
27
+ }, {}))(cells);
28
+ };
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getFlagsAndNotes = undefined;
7
+
8
+ var _ramda = require('ramda');
9
+
10
+ var R = _interopRequireWildcard(_ramda);
11
+
12
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
13
+
14
+ var getFlagsAndNotes = exports.getFlagsAndNotes = function getFlagsAndNotes(attributesValues, customAttributes) {
15
+ var flagsIds = R.propOr([], 'flags', customAttributes);
16
+ var notesIds = R.propOr([], 'notes', customAttributes);
17
+
18
+ return R.addIndex(R.reduce)(function (acc, id, index) {
19
+ if (!R.has(id, attributesValues)) {
20
+ return acc;
21
+ }
22
+ var attr = R.prop(id, attributesValues);
23
+ if (R.isNil(attr.value)) {
24
+ return acc;
25
+ }
26
+ return R.append(index < flagsIds.length ? R.assoc('code', R.path(['value', 'id'], attr), attr) : attr, acc);
27
+ }, [], R.concat(flagsIds, notesIds));
28
+ };
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getIndexedCombinationsByDisplay = undefined;
7
+
8
+ var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
9
+
10
+ var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
11
+
12
+ var _ramda = require('ramda');
13
+
14
+ var R = _interopRequireWildcard(_ramda);
15
+
16
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ var getIndexedCombinationsByDisplay = exports.getIndexedCombinationsByDisplay = function getIndexedCombinationsByDisplay(layout, combinations) {
21
+ var layoutIds = R.pipe(R.map(R.pluck('id')), R.values, R.unnest, R.indexBy(R.identity))(layout);
22
+
23
+ var _R$partition = R.partition(function (comb) {
24
+ return R.has(comb.id, layoutIds);
25
+ }, combinations),
26
+ _R$partition2 = (0, _slicedToArray3.default)(_R$partition, 2),
27
+ combsInLayout = _R$partition2[0],
28
+ combsInCells = _R$partition2[1];
29
+
30
+ return { cells: combsInCells, layout: combsInLayout };
31
+ };
@@ -0,0 +1,93 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getLayout = undefined;
7
+
8
+ var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
9
+
10
+ var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
11
+
12
+ var _extends2 = require('babel-runtime/helpers/extends');
13
+
14
+ var _extends3 = _interopRequireDefault(_extends2);
15
+
16
+ var _ramda = require('ramda');
17
+
18
+ var R = _interopRequireWildcard(_ramda);
19
+
20
+ var _dotstatsuiteSdmxjs = require('@sis-cc/dotstatsuite-sdmxjs');
21
+
22
+ var _utils = require('../utils');
23
+
24
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
25
+
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+
28
+ var getLayout = exports.getLayout = function getLayout(layoutIds, dimensions, combinations, isTimeInverted, fixedDimensions) {
29
+ var indexedDimensions = R.pipe(R.indexBy(R.prop('id')), R.map(function (d) {
30
+ return (0, _dotstatsuiteSdmxjs.isTimePeriodDimension)(d) && isTimeInverted ? R.assoc('isInverted', true, d) : d;
31
+ }))(dimensions);
32
+ var indexedFixedDimsValues = R.reduce(function (acc, dim) {
33
+ var value = R.head(dim.values);
34
+ return !dim.display || !value.display ? acc : R.assoc(dim.id, R.head(dim.values), acc);
35
+ }, {}, fixedDimensions);
36
+ var indexedHeaderIds = R.indexBy(R.identity, layoutIds.header);
37
+ var indexedSectionsIds = R.indexBy(R.identity, layoutIds.sections);
38
+ var indexedRowsIds = (0, _extends3.default)({}, indexedSectionsIds, R.indexBy(R.identity, layoutIds.rows));
39
+ var layout = { header: [], sections: [], rows: [] };
40
+ R.forEach(function (comb) {
41
+ if (R.isEmpty(comb.relationship)) {
42
+ return;
43
+ }
44
+
45
+ var _R$partition = R.partition(function (id) {
46
+ return R.has(id, indexedHeaderIds);
47
+ }, comb.relationship),
48
+ _R$partition2 = (0, _slicedToArray3.default)(_R$partition, 2),
49
+ idsInHeader = _R$partition2[0],
50
+ rest = _R$partition2[1];
51
+
52
+ if (R.isEmpty(rest)) {
53
+ layout = R.over(R.lensProp('header'), R.append((0, _extends3.default)({}, comb, {
54
+ dimensions: (0, _utils.trimedProps)(comb.concepts, indexedDimensions),
55
+ fixedDimValues: R.pick(comb.concepts, indexedFixedDimsValues)
56
+ })))(layout);
57
+ } else if (!R.isEmpty(idsInHeader)) {
58
+ return;
59
+ } else {
60
+ var idsNotInSections = R.reject(function (id) {
61
+ return R.has(id, indexedSectionsIds);
62
+ }, comb.relationship);
63
+ if (R.isEmpty(idsNotInSections)) {
64
+ layout = R.over(R.lensProp('sections'), R.append((0, _extends3.default)({}, comb, {
65
+ dimensions: (0, _utils.trimedProps)(comb.concepts, indexedDimensions),
66
+ fixedDimValues: R.pick(comb.concepts, indexedFixedDimsValues)
67
+ })))(layout);
68
+ } else {
69
+ var idsNotInRows = R.reject(function (id) {
70
+ return R.has(id, indexedRowsIds);
71
+ }, comb.relationship);
72
+ if (R.isEmpty(idsNotInRows)) {
73
+ layout = R.over(R.lensProp('rows'), R.append((0, _extends3.default)({}, comb, {
74
+ dimensions: R.pipe(R.omit(layoutIds.sections), function (o) {
75
+ return (0, _utils.trimedProps)(comb.concepts, o);
76
+ })(indexedDimensions),
77
+ fixedDimValues: R.pick(comb.concepts, indexedFixedDimsValues)
78
+ })))(layout);
79
+ }
80
+ }
81
+ }
82
+ }, combinations);
83
+ return R.mapObjIndexed(function (combs, key) {
84
+ var conceptIds = R.pipe(R.pluck('concepts'), R.unnest, R.indexBy(R.identity))(combs);
85
+ var rest = R.reduce(function (acc, id) {
86
+ if (R.has(id, conceptIds)) {
87
+ return acc;
88
+ }
89
+ return R.append(R.prop(id, indexedDimensions), acc);
90
+ }, [], layoutIds[key]);
91
+ return R.concat(rest, combs);
92
+ }, layout);
93
+ };
@@ -0,0 +1,202 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getLayoutData = undefined;
7
+
8
+ var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
9
+
10
+ var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
11
+
12
+ var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
13
+
14
+ var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
15
+
16
+ var _extends2 = require('babel-runtime/helpers/extends');
17
+
18
+ var _extends3 = _interopRequireDefault(_extends2);
19
+
20
+ var _ramda = require('ramda');
21
+
22
+ var R = _interopRequireWildcard(_ramda);
23
+
24
+ var _getFlagsAndNotes = require('./getFlagsAndNotes');
25
+
26
+ var _hasCellMetadata = require('../hasCellMetadata');
27
+
28
+ var _getCombinationDimensionsData = require('./getCombinationDimensionsData');
29
+
30
+ var _parseValueHierarchy = require('./parseValueHierarchy');
31
+
32
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
33
+
34
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
+
36
+ var getSubLayoutData = function getSubLayoutData(series, _definition, _ref) {
37
+ var metadataCoordinates = _ref.metadataCoordinates,
38
+ attributesSeries = _ref.attributesSeries,
39
+ customAttributes = _ref.customAttributes;
40
+
41
+ var getHasAdvancedAttributes = function getHasAdvancedAttributes(attrValues) {
42
+ return R.pipe(R.omit(R.concat(customAttributes.flags, customAttributes.notes)), R.isEmpty, R.not)(attrValues);
43
+ };
44
+
45
+ var combinationConceptIds = R.reduce(function (acc, def) {
46
+ var concepts = R.propOr([], 'concepts', def);
47
+ if (R.isEmpty(concepts)) {
48
+ return acc;
49
+ }
50
+ return R.concat(acc, concepts);
51
+ }, [], _definition);
52
+
53
+ var definition = R.map( //used for parseValueHierarchy ...
54
+ function (entry) {
55
+ if (R.has('dimensions', entry)) {
56
+ return (0, _extends3.default)({}, entry, {
57
+ dimensions: R.map(function (dim) {
58
+ return R.assoc('indexedValues', R.indexBy(R.prop('id'), dim.values || []), dim);
59
+ }, entry.dimensions)
60
+ });
61
+ }
62
+ return R.assoc('indexedValues', R.indexBy(R.prop('id'), entry.values || []), entry);
63
+ }, _definition);
64
+
65
+ var _R$reduce = R.reduce(function (acc, serie) {
66
+ var data = [];
67
+ var next = [];
68
+ var sameSerie = true;
69
+ var i = 0;
70
+ var hasAdvancedAttributes = false;
71
+ var coordinates = {};
72
+ var ids = [];
73
+ while (i < serie.length) {
74
+ var entry = serie[i];
75
+ if (R.is(Array, entry)) {
76
+ var combination = definition[i];
77
+ var previousDimValues = R.nth(i, acc.previous);
78
+ var combData = (0, _getCombinationDimensionsData.getCombinationDimensionsData)(entry, combination, previousDimValues, sameSerie);
79
+ data = R.append({
80
+ dimension: R.pick(['id', 'name'], combination),
81
+ dimValues: combData.dimValues
82
+ }, data);
83
+ next = R.append(combData.dimValues, next);
84
+ hasAdvancedAttributes = !hasAdvancedAttributes ? combData.hasAdvancedAttributes : true;
85
+ sameSerie = combData.sameSerie;
86
+ coordinates = (0, _extends3.default)({}, coordinates, combData.coordinates);
87
+ ids = R.concat(ids, combData.ids);
88
+ } else {
89
+ var dimension = definition[i];
90
+ var value = R.nth(Math.abs(entry), dimension.values || []);
91
+ var previousValue = R.nth(i, acc.previous) || {};
92
+ coordinates = R.assoc(dimension.id, value.id, coordinates);
93
+ ids = R.append(dimension.id + '=' + value.id, ids);
94
+ if (value.id === R.prop('id', previousValue || {}) && sameSerie) {
95
+ next = R.append(previousValue, next);
96
+ data = R.append({
97
+ dimension: R.pick(['id', 'name', '__index'], dimension),
98
+ value: previousValue
99
+ }, data);
100
+ } else {
101
+ hasAdvancedAttributes = !hasAdvancedAttributes ? value.hasAdvancedAttributes : true;
102
+ var parsedValue = (0, _parseValueHierarchy.parseValueHierarchy)(value, sameSerie ? previousValue || {} : {}, dimension.indexedValues);
103
+ next = R.append(parsedValue, next);
104
+ data = R.append({
105
+ dimension: R.pick(['id', 'name', '__index'], dimension),
106
+ value: parsedValue
107
+ }, data);
108
+ if (!R.isNil(acc.previous)) {
109
+ sameSerie = false;
110
+ }
111
+ }
112
+ }
113
+ i++;
114
+ }
115
+
116
+ var attributesValues = R.reduce(function (acc, key) {
117
+ var splitKey = R.split(':', key);
118
+ var isValid = R.all(function (entry) {
119
+ var _R$split = R.split('=', entry),
120
+ _R$split2 = (0, _slicedToArray3.default)(_R$split, 2),
121
+ d = _R$split2[0],
122
+ v = _R$split2[1];
123
+
124
+ return R.propEq(d, v, coordinates);
125
+ }, splitKey);
126
+ return isValid ? (0, _extends3.default)({}, acc, R.length(splitKey) === 1 ? R.pick(combinationConceptIds, R.prop(key, attributesSeries)) : R.prop(key, attributesSeries)) : acc;
127
+ }, {}, R.keys(attributesSeries));
128
+
129
+ data = R.addIndex(R.map)(function (entry, ind) {
130
+ if (!R.has('dimValues', entry)) {
131
+ return entry;
132
+ }
133
+ var dimValues = entry.dimValues,
134
+ dimension = entry.dimension;
135
+
136
+ var def = R.nth(ind, definition);
137
+ var fixedDimValues = R.propOr([], 'fixedDimValues', def);
138
+ var values = R.reduce(function (_acc, id) {
139
+ if (R.has(id, dimValues)) {
140
+ return R.append(R.prop(id, dimValues), _acc);
141
+ }
142
+ if (R.has(id, fixedDimValues)) {
143
+ return R.append(R.prop(id, fixedDimValues), _acc);
144
+ }
145
+ if (!R.has(id, attributesValues)) {
146
+ return _acc;
147
+ }
148
+ return R.append(R.path([id, 'value'], attributesValues), _acc);
149
+ }, [], def.concepts);
150
+ return { dimension: dimension, values: values };
151
+ }, data);
152
+
153
+ var layoutAttrValues = R.pipe(R.omit(combinationConceptIds), R.reject(R.prop('isObs')))(attributesValues);
154
+
155
+ var flags = (0, _getFlagsAndNotes.getFlagsAndNotes)(layoutAttrValues, customAttributes);
156
+ var hasMetadata = (0, _hasCellMetadata.hasCellMetadata)(metadataCoordinates, coordinates);
157
+
158
+ if (!hasAdvancedAttributes) {
159
+ hasAdvancedAttributes = getHasAdvancedAttributes(layoutAttrValues);
160
+ }
161
+
162
+ var sideProps = hasMetadata || hasAdvancedAttributes ? { hasMetadata: hasMetadata, hasAdvancedAttributes: hasAdvancedAttributes, coordinates: coordinates } : null;
163
+
164
+ return {
165
+ res: R.append({ data: data, key: R.join(':', ids), flags: flags, sideProps: sideProps }, acc.res),
166
+ previous: next
167
+ };
168
+ }, { res: [], previous: [] }, series),
169
+ res = _R$reduce.res;
170
+
171
+ return res;
172
+ };
173
+
174
+ var getLayoutData = function getLayoutData(layoutIndexes, layout, _ref2) {
175
+ var metadataCoordinates = _ref2.metadataCoordinates,
176
+ attributesSeries = _ref2.attributesSeries,
177
+ customAttributes = _ref2.customAttributes;
178
+ var header = layoutIndexes.header,
179
+ sections = layoutIndexes.sections,
180
+ rest = (0, _objectWithoutProperties3.default)(layoutIndexes, ['header', 'sections']);
181
+
182
+ var opts = { metadataCoordinates: metadataCoordinates, attributesSeries: attributesSeries, customAttributes: customAttributes };
183
+ var headerData = getSubLayoutData(header, layout.header, opts);
184
+ var sectionsData = R.pipe(R.transpose, function (_ref3) {
185
+ var _ref4 = (0, _slicedToArray3.default)(_ref3, 2),
186
+ sections = _ref4[0],
187
+ sectionsRows = _ref4[1];
188
+
189
+ if (R.isNil(sections)) {
190
+ return [];
191
+ }
192
+ var _sectionsData = getSubLayoutData(sections, layout.sections, opts);
193
+ var rowsData = R.map(function (rows) {
194
+ return getSubLayoutData(rows, layout.rows, opts);
195
+ }, sectionsRows);
196
+
197
+ return R.transpose([_sectionsData, rowsData]);
198
+ })(sections);
199
+
200
+ return (0, _extends3.default)({ headerData: headerData, sectionsData: sectionsData }, rest);
201
+ };
202
+ exports.getLayoutData = getLayoutData;
@@ -21,45 +21,62 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
21
21
 
22
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
23
 
24
- /*
25
-
26
- const layout = {
27
- header: [
28
- { ...dim, values: [] } // values already sorted regarding order annotation
29
- ],
30
- rows: [],
31
- sections: []
32
- };
33
-
34
- const observations = {
35
- [obsKey]: {
36
- ...obs,
37
- orderedDimIndexes: [sortedValIndex]
38
- }
39
- }
40
-
24
+ /*
25
+ const layout = {
26
+ header: [
27
+ { id, __index },
28
+ { id: COMB, dimensions: [{ id, __index }] }
29
+ ],
30
+ sections: [],
31
+ rows: []
32
+ }
33
+
41
34
  */
42
35
 
43
- var getLayoutPivots = function getLayoutPivots(layout) {
44
- return R.mapObjIndexed(function (dimensions) {
45
- return R.props(R.pluck('__index', dimensions));
46
- })(layout);
36
+ var getLayoutPivots = function getLayoutPivots(layoutEntry) {
37
+ var valIndexGetter = function valIndexGetter(d) {
38
+ return R.pipe(R.nth(R.prop('__index', d)), function (ind) {
39
+ return d.isInverted ? R.negate(ind) : ind;
40
+ });
41
+ };
42
+ return function (indexes) {
43
+ return R.map(R.ifElse(R.has('dimensions'), function (c) {
44
+ return R.map(function (d) {
45
+ return valIndexGetter(d)(indexes);
46
+ }, R.prop('dimensions', c));
47
+ }, function (d) {
48
+ return valIndexGetter(d)(indexes);
49
+ }), layoutEntry);
50
+ };
47
51
  };
48
52
 
49
- var comparator = function comparator(size) {
50
- return function (a, b) {
51
- var i = 0;
52
- while (a[i] === b[i] && i < size) {
53
- i++;
53
+ var comparator = function comparator(a, b) {
54
+ var size = R.length(a);
55
+ var i = 0;
56
+ while (i < size) {
57
+ if (R.is(Array, a[i])) {
58
+ var _a = a[i];
59
+ var _b = b[i];
60
+ var _size = R.length(_a);
61
+ var j = 0;
62
+ while (_a[j] === _b[j] && j < _size) {
63
+ j++;
64
+ }
65
+ if (_a[j] !== _b[j]) {
66
+ return _a[j] - _b[j];
67
+ }
68
+ } else if (a[i] !== b[i]) {
69
+ return a[i] - b[i];
54
70
  }
55
- return a[i] - b[i];
56
- };
71
+ i++;
72
+ }
73
+ return a[i] - b[i];
57
74
  };
58
75
 
59
76
  // simple call to ramda uniq method is very slow regarding performance
60
77
  var uniqIndexes = function uniqIndexes(indexes) {
61
78
  return R.pipe(R.reduce(function (acc, i) {
62
- var key = R.join(':', i);
79
+ var key = R.join(':', R.unnest(i));
63
80
  if (R.has(key, acc.keys)) {
64
81
  return acc;
65
82
  }
@@ -73,25 +90,22 @@ var uniqIndexes = function uniqIndexes(indexes) {
73
90
  var getSortedLayoutIndexes = exports.getSortedLayoutIndexes = function getSortedLayoutIndexes(layout, observations) {
74
91
  var dimIndexes = R.pipe(R.values, R.map(R.propOr([], 'orderedDimIndexes')))(observations);
75
92
 
76
- var headerLength = R.length(layout.header);
93
+ var headerPivots = getLayoutPivots(layout.header);
94
+ var sectionsPivots = getLayoutPivots(R.concat(layout.sections, layout.rows));
77
95
 
78
96
  var sectionLength = R.length(layout.sections);
79
- var rowLength = R.length(layout.rows);
80
-
81
- var layoutPivots = getLayoutPivots(layout);
82
97
 
83
98
  var _R$pipe = R.pipe(R.reduce(function (acc, indexes) {
84
- var headerIndexes = layoutPivots.header(indexes);
85
- var sectionsIndexes = layoutPivots.sections(indexes);
86
- var rowsIndexes = layoutPivots.rows(indexes);
99
+ var headerIndexes = headerPivots(indexes);
100
+ var sectionsIndexes = sectionsPivots(indexes);
87
101
 
88
102
  return {
89
103
  header: R.append(headerIndexes, acc.header),
90
- sections: R.append(R.concat(sectionsIndexes, rowsIndexes), acc.sections)
104
+ sections: R.append(sectionsIndexes, acc.sections)
91
105
  };
92
106
  }, { header: [], sections: [] }), R.mapObjIndexed(uniqIndexes), R.evolve({
93
- header: R.sort(comparator(headerLength)),
94
- sections: R.sort(comparator(sectionLength + rowLength))
107
+ header: R.sort(comparator),
108
+ sections: R.sort(comparator)
95
109
  }), function (indexes) {
96
110
  return (0, _extends3.default)({}, indexes, {
97
111
  sections: R.reduce(function (acc, i) {
@@ -103,7 +117,8 @@ var getSortedLayoutIndexes = exports.getSortedLayoutIndexes = function getSorted
103
117
  var previousSecIndexes = R.pipe(R.nth(-1), function (i) {
104
118
  return R.isNil(i) ? null : R.head(i);
105
119
  })(acc);
106
- if (R.equals(sectionIndexes, previousSecIndexes)) {
120
+ if (R.equals(R.unnest(sectionIndexes), previousSecIndexes ? R.unnest(previousSecIndexes) : null)) {
121
+ //perhaps a bit dirty ...
107
122
  return R.over(R.lensIndex(-1), R.over(R.lensIndex(1), R.append(rowIndexes)))(acc);
108
123
  }
109
124
 
@@ -0,0 +1,64 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getTableProps = undefined;
7
+
8
+ var _extends2 = require('babel-runtime/helpers/extends');
9
+
10
+ var _extends3 = _interopRequireDefault(_extends2);
11
+
12
+ var _ramda = require('ramda');
13
+
14
+ var R = _interopRequireWildcard(_ramda);
15
+
16
+ var _getLayout = require('./getLayout');
17
+
18
+ var _getSortedLayoutIndexes = require('./getSortedLayoutIndexes');
19
+
20
+ var _refineLayoutSize = require('./refineLayoutSize');
21
+
22
+ var _getLayoutData = require('./getLayoutData');
23
+
24
+ var _getCellsAttributesIds = require('./getCellsAttributesIds');
25
+
26
+ var _getIndexedCombinationsByDisplay = require('./getIndexedCombinationsByDisplay');
27
+
28
+ var _getCells = require('./getCells');
29
+
30
+ var _getCuratedCells = require('./getCuratedCells');
31
+
32
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
33
+
34
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
+
36
+ var getTableProps = exports.getTableProps = function getTableProps(_ref) {
37
+ var data = _ref.data,
38
+ layoutIds = _ref.layoutIds,
39
+ customAttributes = _ref.customAttributes,
40
+ limit = _ref.limit,
41
+ isTimeInverted = _ref.isTimeInverted;
42
+ var observations = data.observations,
43
+ dimensions = data.dimensions,
44
+ combinations = data.combinations,
45
+ oneValueDimensions = data.oneValueDimensions,
46
+ attributesSeries = data.attributesSeries,
47
+ metadataCoordinates = data.metadataCoordinates,
48
+ attributes = data.attributes;
49
+
50
+
51
+ var seriesCombinations = R.filter(R.prop('series'), combinations);
52
+ var layout = (0, _getLayout.getLayout)(layoutIds, dimensions, seriesCombinations, isTimeInverted, oneValueDimensions);
53
+ var layoutIndexes = (0, _getSortedLayoutIndexes.getSortedLayoutIndexes)(layout, observations);
54
+ var refinedLayoutIndexes = (0, _refineLayoutSize.refineLayoutSize)({ layout: layout, observations: observations, limit: limit })(layoutIndexes);
55
+ var layoutData = (0, _getLayoutData.getLayoutData)(refinedLayoutIndexes, layout, { metadataCoordinates: metadataCoordinates, attributesSeries: attributesSeries, customAttributes: customAttributes });
56
+
57
+ var cellsAttributesIds = (0, _getCellsAttributesIds.getCellsAttributesIds)(layoutIds, attributes);
58
+ var indexedCombinations = (0, _getIndexedCombinationsByDisplay.getIndexedCombinationsByDisplay)(layout, seriesCombinations);
59
+ var cells = (0, _getCells.getCells)(customAttributes, cellsAttributesIds, indexedCombinations, attributesSeries, metadataCoordinates)(observations);
60
+
61
+ return (0, _extends3.default)({}, layoutData, {
62
+ cells: (0, _getCuratedCells.getCuratedCells)(cells, layout)
63
+ });
64
+ };
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parseValueHierarchy = undefined;
7
+
8
+ var _extends2 = require('babel-runtime/helpers/extends');
9
+
10
+ var _extends3 = _interopRequireDefault(_extends2);
11
+
12
+ var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
13
+
14
+ var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
15
+
16
+ var _ramda = require('ramda');
17
+
18
+ var R = _interopRequireWildcard(_ramda);
19
+
20
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ var parseValueHierarchy = exports.parseValueHierarchy = function parseValueHierarchy(value, previousValue, indexedValues) {
25
+ var parentsIds = R.propOr([], 'parents', value);
26
+ if (R.isEmpty(parentsIds)) {
27
+ return value;
28
+ }
29
+ var _previousParentsIds = R.propOr([], 'parentsIds', previousValue);
30
+ var previousParentsIds = R.isNil(previousValue) ? [] : R.append(R.prop('id', previousValue), _previousParentsIds);
31
+
32
+ var _R$addIndex = R.addIndex(R.splitWhen)(function (val, ind) {
33
+ return R.nth(ind, previousParentsIds) !== val;
34
+ }, parentsIds),
35
+ _R$addIndex2 = (0, _slicedToArray3.default)(_R$addIndex, 2),
36
+ presentIds = _R$addIndex2[0],
37
+ missingIds = _R$addIndex2[1];
38
+ //console.log({ presentIds, missingIds });
39
+
40
+
41
+ var _previousParents = R.propOr([], 'parents', previousValue);
42
+ var previousParents = R.isNil(previousValue) ? [] : R.append(R.pick(['id', 'name'], previousValue), _previousParents);
43
+ //console.log('previousParents', previousParents);
44
+ var parents = R.takeWhile(function (p) {
45
+ return R.includes(p.id, presentIds);
46
+ }, previousParents);
47
+ var missingParents = R.concat(R.includes(R.prop('id', previousValue), presentIds) ? [] : R.takeWhile(function (p) {
48
+ return R.includes(p.id, presentIds);
49
+ }, R.propOr([], 'missingParents', previousValue)), R.props(missingIds, indexedValues));
50
+ return (0, _extends3.default)({}, value, {
51
+ parents: parents,
52
+ parentsIds: parentsIds,
53
+ missingParents: missingParents
54
+ });
55
+ };