@sis-cc/dotstatsuite-components 14.0.0 → 14.2.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 (53) hide show
  1. package/lib/rules/src/preparators/enhanceObservations.js +0 -7
  2. package/lib/rules/src/table/factories/getCells.js +1 -1
  3. package/lib/rules/src/table/factories/getCuratedCells.js +2 -3
  4. package/lib/rules/src/table/factories/getTableData.js +6 -11
  5. package/lib/rules/src/table/preparators/prepareData.js +33 -5
  6. package/lib/rules/src/table/units/getUnitsSeries.js +15 -4
  7. package/lib/rules/src/v8-transformer.js +4 -22
  8. package/lib/rules2/src/duplicateObservations.js +51 -0
  9. package/lib/rules2/src/getDimensionValuesIndexes.js +19 -0
  10. package/lib/rules2/src/getHCodelistsRefsInData.js +46 -0
  11. package/lib/rules2/src/hierarchiseDimensionWithAdvancedHierarchy.js +47 -0
  12. package/lib/rules2/src/hierarchiseDimensionWithNativeHierarchy.js +28 -0
  13. package/lib/rules2/src/index.js +24 -0
  14. package/lib/rules2/src/invertTime.js +33 -0
  15. package/lib/rules2/src/parseHierarchicalCodelist.js +57 -0
  16. package/package.json +1 -1
  17. package/src/rules/src/preparators/enhanceObservations.js +0 -6
  18. package/src/rules/src/table/factories/getCells.js +2 -1
  19. package/src/rules/src/table/factories/getCuratedCells.js +3 -4
  20. package/src/rules/src/table/factories/getTableData.js +3 -22
  21. package/src/rules/src/table/preparators/prepareData.js +23 -3
  22. package/src/rules/src/table/units/getUnitsSeries.js +18 -6
  23. package/src/rules/src/v8-transformer.js +4 -26
  24. package/src/rules2/src/duplicateObservations.js +45 -0
  25. package/src/rules2/src/getDimensionValuesIndexes.js +13 -0
  26. package/src/rules2/src/getHCodelistsRefsInData.js +23 -0
  27. package/src/rules2/src/hierarchiseDimensionWithAdvancedHierarchy.js +44 -0
  28. package/src/rules2/src/hierarchiseDimensionWithNativeHierarchy.js +24 -0
  29. package/src/rules2/src/index.js +2 -0
  30. package/src/rules2/src/invertTime.js +22 -0
  31. package/src/rules2/src/parseHierarchicalCodelist.js +48 -0
  32. package/test/duplicateObservations.test.js +108 -0
  33. package/test/enhanceObservations.test.js +13 -48
  34. package/test/getCells.test.js +4 -11
  35. package/test/getDimensionValuesIndexes.test.js +33 -0
  36. package/test/getHCodelistsRefs.test.js +20 -0
  37. package/test/getUnitsSeries.test.js +112 -47
  38. package/test/hierarchiseDimensionWithAdvancedHierarchy.test.js +87 -0
  39. package/test/hierarchiseDimensionWithNativeHierarchy.test.js +32 -0
  40. package/test/invertTime.test.js +77 -0
  41. package/test/mocks/h-codelist.json +2095 -0
  42. package/test/mocks/table-invert-time--data.json +80211 -0
  43. package/test/mocks/table-invert-time--inverted.json +80076 -0
  44. package/test/mocks/table-prep-multi-duplicate--duplicated.json +26938 -0
  45. package/test/mocks/table-prep-multi-duplicate--indexes.json +1417 -0
  46. package/test/mocks/table-prep-multi-duplicate--observations.json +20330 -0
  47. package/test/mocks/table-prep-simple-duplicate--duplicated.json +77502 -0
  48. package/test/mocks/table-prep-simple-duplicate--indexes.json +274 -0
  49. package/test/mocks/table-prep-simple-duplicate--observations.json +60002 -0
  50. package/test/parseHierarchicalCodelist.test.js +140 -0
  51. package/test/table-invert-time-perf.test.js +11 -0
  52. package/test/table-prep-duplicate-perf.test.js +21 -0
  53. package/test/table-prep-perf.test.js +5 -2
@@ -74,12 +74,6 @@ var getObservationUnits = function getObservationUnits(observation, dimensions,
74
74
  return (0, _extends3.default)({}, dimensionsUnits, attributesUnits, { serieKey: serieKey });
75
75
  };
76
76
 
77
- var getOrderedDimensionsIndexes = function getOrderedDimensionsIndexes(dimensions, indexes) {
78
- return R.addIndex(R.map)(function (valueIndex, dimensionIndex) {
79
- return R.path([dimensionIndex, 'values', valueIndex, '__indexPosition'], dimensions);
80
- }, indexes);
81
- };
82
-
83
77
  var getFormatAttributesIndexes = function getFormatAttributesIndexes(attributes, customAttributes) {
84
78
  return R.addIndex(R.reduce)(function (acc, attribute, index) {
85
79
  if (R.equals(attribute.id, customAttributes.decimals)) {
@@ -141,7 +135,6 @@ var enhanceObservations = exports.enhanceObservations = function enhanceObservat
141
135
  return (0, _extends3.default)({}, observation, {
142
136
  attributes: obsAttributes,
143
137
  formattedValue: (0, _formatValue.formatValue)(observation, formatAttributesIndexes, attributes),
144
- orderedDimIndexes: getOrderedDimensionsIndexes(dimensions, dimValuesIndexes),
145
138
  units: getObservationUnits(observation, dimensions, _attributes, options),
146
139
  indexedDimValIds: indexedDimValIds
147
140
  });
@@ -92,6 +92,6 @@ var getSideProps = function getSideProps(_ref2, customAttributes, metadataCoordi
92
92
 
93
93
  var getCells = exports.getCells = function getCells(data, display, customAttributes, unitsProps, metadataCoordinates) {
94
94
  return R.mapObjIndexed(function (observation) {
95
- return R.pipe(R.set(R.lensProp('flags'), getFlags(customAttributes, (0, _dimensionUtils.dimensionValueDisplay)(display), unitsProps)(observation)), R.set(R.lensProp('intValue'), R.prop('value', observation)), R.set(R.lensProp('value'), R.prop('formattedValue', observation)), R.assoc('indexedDimValIds', R.prop('indexedDimValIds', observation)), R.assoc('sideProps', getSideProps(observation, customAttributes, metadataCoordinates)))({});
95
+ return R.pipe(R.set(R.lensProp('flags'), getFlags(customAttributes, (0, _dimensionUtils.dimensionValueDisplay)(display), unitsProps)(observation)), R.set(R.lensProp('intValue'), R.prop('value', observation)), R.set(R.lensProp('value'), R.prop('formattedValue', observation)), R.assoc('indexedDimValIds', R.prop('indexedDimValIds', observation)), R.assoc('sideProps', getSideProps(observation, customAttributes, metadataCoordinates)), R.set(R.lensProp('key'), R.prop('key', observation)))({});
96
96
  }, R.propOr({}, 'observations', data));
97
97
  };
@@ -26,12 +26,11 @@ var getPivots = function getPivots(layout, shape) {
26
26
  };
27
27
 
28
28
  var indexWithPivots = function indexWithPivots(pivots, observations) {
29
- return R.pipe(R.keys, R.reduce(function (acc, obsKey) {
30
- var splitKey = R.split(':', obsKey);
29
+ return R.pipe(R.values, R.reduce(function (acc, obs) {
30
+ var splitKey = R.split(':', obs.key);
31
31
  var path = R.map(function (pivot) {
32
32
  return pivot(splitKey);
33
33
  }, pivots);
34
- var obs = R.prop(obsKey, observations);
35
34
  return R.over(R.lensPath(path), R.ifElse(R.isNil, R.always([obs]), R.append(obs)))(acc);
36
35
  }, {}))(observations);
37
36
  };
@@ -13,8 +13,6 @@ var _ramda = require('ramda');
13
13
 
14
14
  var R = _interopRequireWildcard(_ramda);
15
15
 
16
- var _dotstatsuiteSdmxjs = require('@sis-cc/dotstatsuite-sdmxjs');
17
-
18
16
  var _getCells = require('./getCells');
19
17
 
20
18
  var _getConfirmedSeriesAttributesIds = require('./getConfirmedSeriesAttributesIds');
@@ -37,6 +35,8 @@ var _getLayoutData = require('./getLayoutData');
37
35
 
38
36
  var _refineMetadataCoordinates = require('../../../../rules2/src/refineMetadataCoordinates');
39
37
 
38
+ var _invertTime2 = require('../../../../rules2/src/invertTime');
39
+
40
40
  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; } }
41
41
 
42
42
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -76,14 +76,9 @@ var getTableProps = exports.getTableProps = function getTableProps(_ref) {
76
76
  unitDimension: unitDimension, rejectedValueIds: rejectedValueIds, layoutDimsIds: layoutDimsIds
77
77
  }, refinedMetadataCoordinates.cells, data.observationsType);
78
78
 
79
- var dimensions = R.mapObjIndexed(R.pipe(R.when( // invert TimeDimension Values
80
- R.allPass([_dotstatsuiteSdmxjs.isTimePeriodDimension, R.always(isTimeInverted)]), function (dim) {
81
- return R.over(R.lensProp('values'), R.map(R.over(R.lensProp('__indexPosition'), R.negate)))(dim);
82
- }), function (dim) {
83
- return R.over( // sort values
84
- R.lensProp('values'), R.sortWith([R.ascend(R.prop('__indexPosition')), R.ascend(R.prop('order'))]))(dim);
85
- }, R.when( // refine hierarchy on rows
86
- R.pipe(R.prop('id'), R.flip(R.includes)(R.propOr([], 'rows', layoutIds))), _dotstatsuiteSdmxjs.withFlatHierarchy)), R.pathOr({}, ['dimensions', 'many'], data));
79
+ var _invertTime = (0, _invertTime2.invertTime)(data, isTimeInverted),
80
+ dimensions = _invertTime.dimensions,
81
+ observations = _invertTime.observations;
87
82
 
88
83
  var seriesAttributesValues = R.propOr({}, 'seriesAttributesValues', data);
89
84
  var layout = R.pipe(R.mergeRight({ header: [], sections: [], rows: [] }), R.mapObjIndexed(R.flip(R.props)(dimensions)))(layoutIds);
@@ -96,7 +91,7 @@ var getTableProps = exports.getTableProps = function getTableProps(_ref) {
96
91
  display: display, unitDimension: unitDimension, unitsDisplay: unitsLevelDisplay, unitsSeries: unitsSeries,
97
92
  unitsDefinitionCodes: unitsDefinitionCodes, unitsIndexes: unitsAttachmentIndexesInLayout,
98
93
  partialUnitSerieIndexes: partialUnitSerieIndexes, rejectedValueIds: rejectedValueIds, layoutIds: layoutIds
99
- }), (0, _getLayoutWithFlags.getLayoutDataWithFlags)(seriesAttributesValues, display, customAttributes, refinedMetadataCoordinates, unitDimension.id), (0, _cleanUnitsInLayoutData.cleanUnitsInLayoutData)({ unitsDisplay: unitsLevelDisplay, unitsLayoutIndexes: unitsIndexesInLayout }))(layout, R.propOr({}, 'observations', data));
94
+ }), (0, _getLayoutWithFlags.getLayoutDataWithFlags)(seriesAttributesValues, display, customAttributes, refinedMetadataCoordinates, unitDimension.id), (0, _cleanUnitsInLayoutData.cleanUnitsInLayoutData)({ unitsDisplay: unitsLevelDisplay, unitsLayoutIndexes: unitsIndexesInLayout }))(layout, observations);
100
95
 
101
96
  return (0, _extends3.default)({
102
97
  cells: (0, _getCuratedCells.getCuratedCells)({ layout: layout, observations: cells, shape: ['header', 'sections', 'rows'] }),
@@ -5,9 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.prepareData = undefined;
7
7
 
8
- var _extends2 = require('babel-runtime/helpers/extends');
8
+ var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
9
9
 
10
- var _extends3 = _interopRequireDefault(_extends2);
10
+ var _defineProperty3 = _interopRequireDefault(_defineProperty2);
11
+
12
+ var _extends3 = require('babel-runtime/helpers/extends');
13
+
14
+ var _extends4 = _interopRequireDefault(_extends3);
11
15
 
12
16
  var _ramda = require('ramda');
13
17
 
@@ -49,6 +53,14 @@ var _getMetadataCoordinates = require('../../../../rules2/src/getMetadataCoordin
49
53
 
50
54
  var _getAdvancedAttributes = require('../../../../rules2/src/getAdvancedAttributes');
51
55
 
56
+ var _duplicateObservations = require('../../../../rules2/src/duplicateObservations');
57
+
58
+ var _hierarchiseDimensionWithAdvancedHierarchy = require('../../../../rules2/src/hierarchiseDimensionWithAdvancedHierarchy');
59
+
60
+ var _hierarchiseDimensionWithNativeHierarchy = require('../../../../rules2/src/hierarchiseDimensionWithNativeHierarchy');
61
+
62
+ var _getDimensionValuesIndexes = require('../../../../rules2/src/getDimensionValuesIndexes');
63
+
52
64
  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; } }
53
65
 
54
66
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -56,6 +68,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
56
68
  var prepareData = exports.prepareData = function prepareData(sdmxJson, customAttributes) {
57
69
  var unitsProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
58
70
 
71
+ var _options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
72
+
59
73
  var _R$pick = R.pick(['defaultCodes', 'annotationsDefinitionCodes', 'rejectedValueIds'], unitsProps),
60
74
  _R$pick$defaultCodes = _R$pick.defaultCodes,
61
75
  defaultCodes = _R$pick$defaultCodes === undefined ? [] : _R$pick$defaultCodes,
@@ -70,6 +84,7 @@ var prepareData = exports.prepareData = function prepareData(sdmxJson, customAtt
70
84
  var _customAttributes = R.assoc('units', unitsDefinitionCodes, customAttributes);
71
85
  var dimensions = R.pathOr([], ['data', 'structure', 'dimensions', 'observation'], sdmxJson);
72
86
 
87
+ var hierarchies = _options.hierarchies || {};
73
88
  var dimensionsIndexedByIds = R.indexBy(R.prop('id'), dimensions);
74
89
 
75
90
  var parsedDimensionsIds = (0, _parseDimensionsIds.parseDimensionsIds)(dimensions);
@@ -150,10 +165,23 @@ var prepareData = exports.prepareData = function prepareData(sdmxJson, customAtt
150
165
 
151
166
  var seriesAdvancedAttributes = (0, _getAdvancedAttributes.getSeriesAdvancedAttributes)(seriesAttributesValues, dimensions, seriesAdvancedAttributesIds);
152
167
 
168
+ var hierarchisedDimensions = R.map(function (dim) {
169
+ if (R.isEmpty(R.propOr({}, dim.id, hierarchies))) {
170
+ return (0, _hierarchiseDimensionWithNativeHierarchy.hierarchiseDimensionWithNativeHierarchy)(dim);
171
+ }
172
+ return (0, _hierarchiseDimensionWithAdvancedHierarchy.hierarchiseDimensionWithAdvancedHierarchy)(dim, R.prop(dim.id, hierarchies));
173
+ })(manyValuesDimensions);
174
+
175
+ var valuesIndexes = R.reduce(function (acc, dim) {
176
+ return (0, _extends4.default)({}, acc, (0, _defineProperty3.default)({}, dim.__index, (0, _getDimensionValuesIndexes.getDimensionValuesIndexes)(dim.values)));
177
+ }, {}, R.values(hierarchisedDimensions));
178
+
179
+ var duplicatedObservations = (0, _duplicateObservations.duplicateObservations)(observations, valuesIndexes);
180
+
153
181
  return {
154
182
  dimensions: {
155
183
  one: oneValueDimensions,
156
- many: manyValuesDimensions,
184
+ many: hierarchisedDimensions,
157
185
  length: R.length(dimensions)
158
186
  },
159
187
  units: {
@@ -164,8 +192,8 @@ var prepareData = exports.prepareData = function prepareData(sdmxJson, customAtt
164
192
  unitsSeries: unitsSeries
165
193
  },
166
194
  metadataCoordinates: metadataCoordinates,
167
- advancedAttributes: (0, _extends3.default)({}, dataflowAdvancedAttributes, observationsAdvancedAttributes, seriesAdvancedAttributes),
168
- observations: observations,
195
+ advancedAttributes: (0, _extends4.default)({}, dataflowAdvancedAttributes, observationsAdvancedAttributes, seriesAdvancedAttributes),
196
+ observations: duplicatedObservations,
169
197
  observationsType: (0, _getObservationsType.getObservationsType)(sdmxJson.data),
170
198
  dataflowAttributes: dataflowAttributes,
171
199
  dataflowName: R.path(['data', 'structure', 'name'], sdmxJson),
@@ -15,6 +15,13 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
15
15
  observations = { [obsKey]: { units: { serieKey: '', [id]: { id, name, value } } } };
16
16
  */
17
17
 
18
+ var getIndex = R.path(['value', 'index']);
19
+ var getUnits = function getUnits(keys, acc, units) {
20
+ return R.pick(keys, R.mergeWith(function (a, b) {
21
+ return getIndex(a) === getIndex(b) ? a : null;
22
+ }, acc, units));
23
+ };
24
+
18
25
  var getUnitsSeries = exports.getUnitsSeries = function getUnitsSeries(observations) {
19
26
  var series = {};
20
27
  R.map(function (obs) {
@@ -23,9 +30,13 @@ var getUnitsSeries = exports.getUnitsSeries = function getUnitsSeries(observatio
23
30
 
24
31
  return R.map(function (serie) {
25
32
  return R.reduce(function (acc, units) {
26
- return R.mergeWith(function (a, b) {
27
- return R.path(['value', 'index'], a) === R.path(['value', 'index'], b) ? a : null;
28
- }, acc, units);
29
- }, {}, serie);
33
+ var unitsKeys = R.keys(units);
34
+ if (R.isEmpty(acc.unitsKeys)) return { units: getUnits(unitsKeys, acc.units, units), unitsKeys: unitsKeys };
35
+ var communKeys = R.intersection(acc.unitsKeys, unitsKeys);
36
+ return {
37
+ units: getUnits(communKeys, acc.units, units),
38
+ unitsKeys: unitsKeys
39
+ };
40
+ }, { unitsKeys: [], units: {} }, serie).units;
30
41
  })(series);
31
42
  };
@@ -94,7 +94,9 @@ var dataTransformer = exports.dataTransformer = function dataTransformer(dataNew
94
94
  });
95
95
  }), R.sortWith([R.ascend(R.prop('__indexPosition')), R.ascend(R.propOr(-1, 'order'))]), R.addIndex(R.map)(function (val, index) {
96
96
  return R.assoc('__indexPosition', index, val);
97
- }));
97
+ }),
98
+ /* NEW */
99
+ R.sortBy(R.prop('__index')));
98
100
  };
99
101
 
100
102
  //--------------------------------------------------------------------------------------------Header
@@ -154,33 +156,13 @@ var dataTransformer = exports.dataTransformer = function dataTransformer(dataNew
154
156
  var isHidden = R.has(id, hiddenIds) || (0, _sdmxData.getIsHidden)(dimAnnotations);
155
157
  var isTime = observation.id === timePeriodId;
156
158
  var values = getValuesEnhanced(locale, annotations, isTime, id)(R.propOr([], 'values', observation));
157
- var ids = R.pipe(R.pluck('id'), R.indexBy(R.identity))(values);
158
- var groupedByParentsValues = R.groupBy(function (val) {
159
- var parentId = R.propOr('##ROOT', 'parent', val);
160
- if (parentId !== '##ROOT' && !R.has(parentId, ids)) {
161
- return '##ROOT';
162
- }
163
- return parentId;
164
- }, values);
165
- var sortedGroupedValues = R.mapObjIndexed(R.sortWith([R.ascend(R.prop('__indexPosition')), R.ascend(R.prop('__index'))]), groupedByParentsValues);
166
-
167
- var getReccursiveChildren = function getReccursiveChildren(parent) {
168
- var children = R.propOr([], parent, sortedGroupedValues);
169
- return R.map(function (child) {
170
- return R.prepend(child, getReccursiveChildren(child.id));
171
- }, children);
172
- };
173
-
174
- var sortedValues = R.pipe(getReccursiveChildren, R.flatten, R.addIndex(R.map)(function (value, index) {
175
- return R.assoc('__indexPosition', index, value);
176
- }), R.sortBy(R.prop('__index')))('##ROOT');
177
159
 
178
160
  return {
179
161
  observation: R.append((0, _extends3.default)({}, observation, {
180
162
  display: !isHidden,
181
163
  __index: obsIndex,
182
164
  name: (0, _dotstatsuiteSdmxjs.getRefinedName)(observation),
183
- values: sortedValues,
165
+ values: values,
184
166
  role: isTime ? TIME_PERIOD_ID : R.head(R.propOr([], 'roles', observation))
185
167
  }))(acc.observation),
186
168
  dimensionsLayout: (0, _sdmxData.setAnnotationsLayout)(id, acc.dimensionsLayout)(dimAnnotations)
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.duplicateObservations = 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
+ 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 duplicateObservations = exports.duplicateObservations = function duplicateObservations(observations, indexes) {
21
+ return R.addIndex(R.reduce)(function (acc, obs, i) {
22
+
23
+ var orderedIndexes = R.addIndex(R.map)(function (valueIndex, dimIndex) {
24
+ return R.pathOr([Number(valueIndex)], [dimIndex, valueIndex], indexes);
25
+ }, R.propOr([], 'dimValuesIndexes', obs));
26
+
27
+ var cartesian = void 0;
28
+
29
+ if (R.any(function (is) {
30
+ return R.length(is) > 1;
31
+ })(orderedIndexes)) {
32
+ cartesian = R.reduce(function (acc, oInds) {
33
+ var r = R.map(function (i) {
34
+ return R.map(function (is) {
35
+ return R.append(i, is);
36
+ }, acc);
37
+ }, oInds);
38
+ return R.unnest(r);
39
+ }, R.pipe(R.head, R.map(R.of))(orderedIndexes), R.tail(orderedIndexes));
40
+ } else {
41
+ cartesian = [R.unnest(orderedIndexes)];
42
+ }
43
+
44
+ var duplicatedObs = R.reduce(function (acc, orderedDimIndexes) {
45
+ var key = R.join(':', orderedDimIndexes);
46
+ return R.assoc(key, (0, _extends3.default)({}, obs, { orderedDimIndexes: orderedDimIndexes }), acc);
47
+ }, {}, cartesian);
48
+
49
+ return R.mergeRight(acc, duplicatedObs);
50
+ }, {}, R.values(observations));
51
+ };
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getDimensionValuesIndexes = 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 getDimensionValuesIndexes = exports.getDimensionValuesIndexes = function getDimensionValuesIndexes(values) {
15
+ return R.addIndex(R.reduce)(function (acc, value, position) {
16
+ var sdmxIndex = value.__index;
17
+ return R.over(R.lensProp(String(sdmxIndex)), R.ifElse(R.isNil, R.always([position]), R.append(position)))(acc);
18
+ }, {}, values);
19
+ };
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getHCodelistsRefsInData = exports.getHCodelistsRefs = 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 getHCodelistsRefs = exports.getHCodelistsRefs = function getHCodelistsRefs(annotations) {
21
+ return R.reduce(function (acc, annotation) {
22
+ if (annotation.type !== 'HIER_CONTEXT') {
23
+ return acc;
24
+ }
25
+ var reference = annotation.text || annotation.title || '';
26
+ var match = reference.match(/([\w@_.]+):([\w@_.]+):([\w@_.]+)\(([\d.]+)\).([\w@_.]+)$/);
27
+ if (R.isNil(match)) {
28
+ return acc;
29
+ }
30
+
31
+ var _R$tail = R.tail(match),
32
+ _R$tail2 = (0, _slicedToArray3.default)(_R$tail, 5),
33
+ codelistId = _R$tail2[0],
34
+ agencyId = _R$tail2[1],
35
+ code = _R$tail2[2],
36
+ version = _R$tail2[3],
37
+ hierarchy = _R$tail2[4];
38
+
39
+ return R.assoc(codelistId, { agencyId: agencyId, code: code, version: version, hierarchy: hierarchy, codelistId: codelistId }, acc);
40
+ }, {}, annotations);
41
+ };
42
+
43
+ var getHCodelistsRefsInData = exports.getHCodelistsRefsInData = function getHCodelistsRefsInData(sdmxJson) {
44
+ var annotations = R.pathOr([], ['data', 'structure', 'annotations'], sdmxJson);
45
+ return getHCodelistsRefs(annotations);
46
+ };
@@ -0,0 +1,47 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hierarchiseDimensionWithAdvancedHierarchy = 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
+ 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 hierarchiseDimensionWithAdvancedHierarchy = exports.hierarchiseDimensionWithAdvancedHierarchy = function hierarchiseDimensionWithAdvancedHierarchy(dimension, hierarchy) {
21
+ var indexed = R.indexBy(R.prop('id'), dimension.values);
22
+
23
+ var rest = indexed;
24
+ var getChildren = function getChildren(parents) {
25
+ return R.pipe(function (ids) {
26
+ rest = R.omit(ids, rest);
27
+ return R.props(ids, indexed);
28
+ }, R.filter(R.identity), R.map(function (val) {
29
+ var _val = (0, _extends3.default)({}, val, {
30
+ parent: R.last(parents),
31
+ parents: parents
32
+ });
33
+ var children = getChildren(R.append(val.id, parents));
34
+ return R.prepend(_val, children);
35
+ }))(R.propOr([], R.isEmpty(parents) ? '#ROOT' : R.join('.', parents), hierarchy));
36
+ };
37
+
38
+ return R.set(R.lensProp('values'), R.pipe(getChildren, R.flatten, function (values) {
39
+ if (R.isEmpty(rest)) {
40
+ return values;
41
+ }
42
+ var sortedRest = R.pipe(R.values, R.map(function (val) {
43
+ return (0, _extends3.default)({}, val, { parent: undefined, parents: [] });
44
+ }), R.sortBy(R.prop('__indexPosition')))(rest);
45
+ return R.concat(sortedRest, values);
46
+ })([]))(dimension);
47
+ };
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hierarchiseDimensionWithNativeHierarchy = 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 hierarchiseDimensionWithNativeHierarchy = exports.hierarchiseDimensionWithNativeHierarchy = function hierarchiseDimensionWithNativeHierarchy(dimension) {
15
+ var values = R.sortBy(R.prop('__indexPosition'), dimension.values || []);
16
+ var grouped = R.groupBy(R.propOr('#ROOT', 'parent'), values);
17
+
18
+ var getChildren = function getChildren(parents) {
19
+ var childs = R.propOr([], R.last(parents) || '#ROOT', grouped);
20
+ return R.reduce(function (acc, child) {
21
+ var refined = R.assoc('parents', parents, child);
22
+ var children = getChildren(R.append(child.id, parents));
23
+ return R.concat(acc, R.prepend(refined, children));
24
+ }, [], childs);
25
+ };
26
+
27
+ return R.set(R.lensProp('values'), getChildren([]))(dimension);
28
+ };
@@ -71,4 +71,28 @@ Object.defineProperty(exports, 'getNotDisplayedIds', {
71
71
  get: function get() {
72
72
  return _getNotDisplayedIds.getNotDisplayedIds;
73
73
  }
74
+ });
75
+
76
+ var _getHCodelistsRefsInData = require('./getHCodelistsRefsInData');
77
+
78
+ Object.defineProperty(exports, 'getHCodelistsRefs', {
79
+ enumerable: true,
80
+ get: function get() {
81
+ return _getHCodelistsRefsInData.getHCodelistsRefs;
82
+ }
83
+ });
84
+ Object.defineProperty(exports, 'getHCodelistsRefsInData', {
85
+ enumerable: true,
86
+ get: function get() {
87
+ return _getHCodelistsRefsInData.getHCodelistsRefsInData;
88
+ }
89
+ });
90
+
91
+ var _parseHierarchicalCodelist = require('./parseHierarchicalCodelist');
92
+
93
+ Object.defineProperty(exports, 'parseHierarchicalCodelist', {
94
+ enumerable: true,
95
+ get: function get() {
96
+ return _parseHierarchicalCodelist.parseHierarchicalCodelist;
97
+ }
74
98
  });
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.invertTime = undefined;
7
+
8
+ var _ramda = require('ramda');
9
+
10
+ var R = _interopRequireWildcard(_ramda);
11
+
12
+ var _dotstatsuiteSdmxjs = require('@sis-cc/dotstatsuite-sdmxjs');
13
+
14
+ 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; } }
15
+
16
+ var invertTime = exports.invertTime = function invertTime(data, isTimeInverted) {
17
+ var dimensions = R.pathOr([], ['dimensions', 'many'], data);
18
+ var observations = R.propOr({}, 'observations', data);
19
+ if (!isTimeInverted) {
20
+ return { dimensions: dimensions, observations: observations };
21
+ }
22
+ var timeD = R.find(_dotstatsuiteSdmxjs.isTimePeriodDimension, R.values(dimensions));
23
+ if (!timeD) {
24
+ return { dimensions: dimensions, observations: observations };
25
+ }
26
+ var timeLength = R.length(timeD.values);
27
+ var timeIndex = timeD.__index;
28
+ var invertTimeInObs = R.map(R.over(R.lensProp('orderedDimIndexes'), R.over(R.lensIndex(timeIndex), function (i) {
29
+ return timeLength - i - 1;
30
+ })), observations);
31
+ var invertedTimeInDims = R.over(R.lensProp(timeD.id), R.over(R.lensProp('values'), R.reverse))(dimensions);
32
+ return { dimensions: invertedTimeInDims, observations: invertTimeInObs };
33
+ };
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parseHierarchicalCodelist = undefined;
7
+
8
+ var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
9
+
10
+ var _defineProperty3 = _interopRequireDefault(_defineProperty2);
11
+
12
+ var _extends4 = require('babel-runtime/helpers/extends');
13
+
14
+ var _extends5 = _interopRequireDefault(_extends4);
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 parseHierarchicalCodelist = exports.parseHierarchicalCodelist = function parseHierarchicalCodelist(sdmxJson, hierarchyId) {
25
+ var hCodelist = R.pathOr({}, ['data', 'hierarchicalCodelists', 0], sdmxJson);
26
+ var hierarchy = R.find(R.propEq('id', hierarchyId), hCodelist.hierarchies || []);
27
+
28
+ var getParentedCodes = function getParentedCodes(codes, parent) {
29
+ var ids = R.pluck('codeID', codes);
30
+
31
+ var siblings = R.reduce(function (acc, code) {
32
+ if (R.isEmpty(code.hierarchicalCodes || [])) {
33
+ return acc;
34
+ }
35
+ return R.mergeRight(acc, getParentedCodes(code.hierarchicalCodes, code.id));
36
+ }, {}, codes);
37
+
38
+ return (0, _extends5.default)({}, siblings, (0, _defineProperty3.default)({}, parent, ids));
39
+ };
40
+
41
+ var getChildren = function getChildren(codes, parents) {
42
+ var ids = R.pluck('codeID', codes);
43
+
44
+ var children = R.reduce(function (acc, code) {
45
+ if (R.isEmpty(code.hierarchicalCodes || [])) {
46
+ return acc;
47
+ }
48
+ return (0, _extends5.default)({}, acc, getChildren(code.hierarchicalCodes, R.append(code.codeID, parents)));
49
+ }, {}, codes);
50
+ var key = R.isEmpty(parents) ? '#ROOT' : R.join('.', parents);
51
+ return (0, _extends5.default)({}, children, (0, _defineProperty3.default)({}, key, ids));
52
+ };
53
+
54
+ return R.pipe(R.propOr([], 'hierarchicalCodes'), function (codes) {
55
+ return getChildren(codes, []);
56
+ })(hierarchy);
57
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sis-cc/dotstatsuite-components",
3
3
  "description": "Set components based on React.",
4
- "version": "14.0.0",
4
+ "version": "14.2.0",
5
5
  "main": "lib/index.js",
6
6
  "author": "OECD",
7
7
  "license": "MIT",
@@ -71,11 +71,6 @@ const getObservationUnits = (observation, dimensions, attributes, options) => {
71
71
  return ({ ...dimensionsUnits, ...attributesUnits, serieKey });
72
72
  };
73
73
 
74
- const getOrderedDimensionsIndexes = (dimensions, indexes) => R.addIndex(R.map)(
75
- (valueIndex, dimensionIndex) => R.path([dimensionIndex, 'values', valueIndex, '__indexPosition'], dimensions),
76
- indexes
77
- );
78
-
79
74
  const getFormatAttributesIndexes = (attributes, customAttributes) => R.addIndex(R.reduce)(
80
75
  (acc, attribute, index) => {
81
76
  if (R.equals(attribute.id, customAttributes.decimals)) {
@@ -148,7 +143,6 @@ export const enhanceObservations = (dimensions = [], observations = {}, attribut
148
143
  ...observation,
149
144
  attributes: obsAttributes,
150
145
  formattedValue: formatValue(observation, formatAttributesIndexes, attributes),
151
- orderedDimIndexes: getOrderedDimensionsIndexes(dimensions, dimValuesIndexes),
152
146
  units: getObservationUnits(observation, dimensions, _attributes, options),
153
147
  indexedDimValIds,
154
148
  });
@@ -95,7 +95,8 @@ export const getCells = (data, display, customAttributes, unitsProps, metadataCo
95
95
  R.set(R.lensProp('intValue'), R.prop('value', observation)),
96
96
  R.set(R.lensProp('value'), R.prop('formattedValue', observation)),
97
97
  R.assoc('indexedDimValIds', R.prop('indexedDimValIds', observation)),
98
- R.assoc('sideProps', getSideProps(observation, customAttributes, metadataCoordinates))
98
+ R.assoc('sideProps', getSideProps(observation, customAttributes, metadataCoordinates)),
99
+ R.set(R.lensProp('key'), R.prop('key', observation)),
99
100
  )({}),
100
101
  R.propOr({}, 'observations', data)
101
102
  );
@@ -17,15 +17,14 @@ const getPivots = (layout, shape) => R.pipe(
17
17
  )(layout);
18
18
 
19
19
  const indexWithPivots = (pivots, observations) => R.pipe(
20
- R.keys,
20
+ R.values,
21
21
  R.reduce(
22
- (acc, obsKey) => {
23
- const splitKey = R.split(':', obsKey);
22
+ (acc, obs) => {
23
+ const splitKey = R.split(':', obs.key);
24
24
  const path = R.map(
25
25
  pivot => pivot(splitKey),
26
26
  pivots
27
27
  );
28
- const obs = R.prop(obsKey, observations);
29
28
  return R.over(
30
29
  R.lensPath(path),
31
30
  R.ifElse(R.isNil, R.always([obs]), R.append(obs))