@sis-cc/dotstatsuite-components 9.1.2 → 9.2.2

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 (77) hide show
  1. package/lib/rules/src/preparators/enhanceObservations.js +155 -0
  2. package/lib/rules/src/preparators/formatValue.js +77 -0
  3. package/lib/rules/src/preparators/getDimensions.js +55 -0
  4. package/lib/rules/src/preparators/getDisplay.js +32 -0
  5. package/lib/rules/src/preparators/getObservations.js +27 -0
  6. package/lib/rules/src/table/factories/getCells.js +1 -3
  7. package/lib/rules/src/table/factories/getLayoutData.js +118 -159
  8. package/lib/rules/src/table/factories/getSortedLayoutIndexes.js +118 -0
  9. package/lib/rules/src/table/factories/getTableData.js +12 -10
  10. package/lib/rules/src/table/factories/refineLayoutSize.js +210 -0
  11. package/lib/rules/src/table/preparators/prepareData.js +23 -23
  12. package/lib/rules/src/table/units/getAttachmentSeriesIndexes.js +1 -1
  13. package/lib/rules/src/table/units/getUnitsSeries.js +31 -0
  14. package/lib/rules/src/v8-transformer.js +2 -1
  15. package/package.json +2 -2
  16. package/src/rules/src/preparators/enhanceObservations.js +163 -0
  17. package/src/rules/src/preparators/formatValue.js +73 -0
  18. package/src/rules/src/preparators/getDimensions.js +49 -0
  19. package/src/rules/src/preparators/getDisplay.js +20 -0
  20. package/src/rules/src/preparators/getObservations.js +19 -0
  21. package/src/rules/src/table/factories/getCells.js +3 -7
  22. package/src/rules/src/table/factories/getLayoutData.js +150 -184
  23. package/src/rules/src/table/factories/getSortedLayoutIndexes.js +108 -0
  24. package/src/rules/src/table/factories/getTableData.js +10 -10
  25. package/src/rules/src/table/factories/refineLayoutSize.js +224 -0
  26. package/src/rules/src/table/preparators/prepareData.js +23 -32
  27. package/src/rules/src/table/units/getAttachmentSeriesIndexes.js +2 -1
  28. package/src/rules/src/table/units/getUnitsSeries.js +20 -0
  29. package/src/rules/src/v8-transformer.js +2 -1
  30. package/test/appendUnitsInLayoutDataEntry.test.js +3 -3
  31. package/test/enhanceObservations.test.js +270 -0
  32. package/test/getAttachmentSeriesIndexes.test.js +1 -1
  33. package/test/getCells.test.js +4 -39
  34. package/test/getLayoutData.test.js +193 -298
  35. package/test/getOneValueDimensions.test.js +1 -1
  36. package/test/getSortedLayoutIndexes.test.js +80 -0
  37. package/test/getUnitsArtefacts.test.js +1 -1
  38. package/test/getUnitsSeries.test.js +64 -0
  39. package/test/mocks/table-layout-multi-hierarchies--layout.json +621 -0
  40. package/test/mocks/table-layout-multi-hierarchies--layoutData.json +32410 -0
  41. package/test/mocks/table-layout-multi-hierarchies--layoutIndexes.json +2760 -0
  42. package/test/mocks/table-layout-multi-hierarchies--observations.json +30688 -0
  43. package/test/mocks/table-layout-multi-hierarchies--sizedIndexes.json +2761 -0
  44. package/test/mocks/table-layout-truncation1--layout.json +27469 -0
  45. package/test/mocks/table-layout-truncation1--layoutData.json +20357 -0
  46. package/test/mocks/table-layout-truncation1--layoutIndexes.json +7512 -0
  47. package/test/mocks/table-layout-truncation1--observations.json +70002 -0
  48. package/test/mocks/table-layout-truncation1--sizedIndexes.json +3010 -0
  49. package/test/mocks/table-prep-multi-hierarchies--attributes.json +44 -0
  50. package/test/mocks/table-prep-multi-hierarchies--dimensions.json +688 -0
  51. package/test/mocks/table-prep-multi-hierarchies--enhancedObservations.json +19696 -0
  52. package/test/mocks/table-prep-multi-hierarchies--observations.json +8246 -0
  53. package/test/mocks/table-prep-multi-hierarchies--sdmxJson.json +2985 -0
  54. package/test/mocks/table-prep-truncation1--dimensions.json +35057 -0
  55. package/test/mocks/table-prep-truncation1--enhancedObservations.json +70002 -0
  56. package/test/mocks/table-prep-truncation1--observations.json +27502 -0
  57. package/test/mocks/table-prep-truncation1--sdmxJson.json +55103 -0
  58. package/test/mocks/table-prep-units--observations.json +284286 -0
  59. package/test/mocks/table-prep-units--unitsSeries.json +41042 -0
  60. package/test/parseAttributes.test.js +1 -1
  61. package/test/refineLayoutSize.test.js +415 -0
  62. package/test/table-layout-perf.test.js +74 -0
  63. package/test/table-prep-perf.test.js +65 -0
  64. package/lib/rules/src/table/factories/getSortedLayoutData.js +0 -145
  65. package/lib/rules/src/table/factories/refineLayoutHierarchy.js +0 -61
  66. package/lib/rules/src/table/preparators/parseObservations.js +0 -76
  67. package/lib/rules/src/table/units/getUnitsSeriesOccurences.js +0 -39
  68. package/src/rules/src/table/factories/getSortedLayoutData.js +0 -133
  69. package/src/rules/src/table/factories/refineLayoutHierarchy.js +0 -64
  70. package/src/rules/src/table/preparators/parseObservations.js +0 -81
  71. package/src/rules/src/table/units/getUnitsSeriesOccurences.js +0 -51
  72. package/test/appendUnitsInLayoutData.test.js +0 -248
  73. package/test/getSortedLayoutData.test.js +0 -382
  74. package/test/getUnitsSeriesOccurences.test.js +0 -133
  75. package/test/parseObservations.test.js +0 -116
  76. package/test/refineDimSeriesUnits.test.js +0 -24
  77. package/test/refineLayoutHierarchy.test.js +0 -79
@@ -3,200 +3,159 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getLayoutData = exports.truncateHeader = exports.truncateSectionRows = exports.refineHeaderData = exports.refineSectionsData = undefined;
7
-
8
- var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
9
-
10
- var _defineProperty3 = _interopRequireDefault(_defineProperty2);
6
+ exports.getLayoutData = undefined;
11
7
 
12
8
  var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
13
9
 
14
10
  var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
15
11
 
16
- var _extends3 = require('babel-runtime/helpers/extends');
12
+ var _extends2 = require('babel-runtime/helpers/extends');
17
13
 
18
- var _extends4 = _interopRequireDefault(_extends3);
14
+ var _extends3 = _interopRequireDefault(_extends2);
19
15
 
20
16
  var _ramda = require('ramda');
21
17
 
22
18
  var R = _interopRequireWildcard(_ramda);
23
19
 
24
- var _getSortedLayoutData = require('./getSortedLayoutData');
25
-
26
- var _getCuratedCells = require('./getCuratedCells');
27
-
28
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; } }
29
21
 
30
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
23
 
32
- var layoutDataToKey = R.pipe(R.addIndex(R.map)(function (entry, index) {
33
- return (0, _extends4.default)({}, entry, { f: R.path([index, 'value', '__index']) });
34
- }), R.map(R.prop('f')), function (getters) {
35
- return R.converge(function () {
36
- for (var _len = arguments.length, results = Array(_len), _key = 0; _key < _len; _key++) {
37
- results[_key] = arguments[_key];
38
- }
39
-
40
- return R.join(':', results);
41
- }, getters);
42
- });
43
-
44
- var refineSectionsData = exports.refineSectionsData = function refineSectionsData(sectionsData, extractedKeys, curatedData, dataToKey) {
45
- return R.pipe(R.map(function (section) {
46
- var sectionKey = dataToKey.sections(R.head(section));
47
- return R.over(R.lensIndex(1), R.filter(function (rowData) {
48
- var rowKey = dataToKey.rows(rowData);
49
- return R.pipe(R.path([sectionKey, rowKey]), R.omit(extractedKeys), R.isEmpty, R.not)(curatedData);
50
- }))(section);
51
- }), R.filter(R.pipe(R.nth(1), R.isEmpty, R.not)))(sectionsData);
52
- };
53
-
54
- var refineHeaderData = exports.refineHeaderData = function refineHeaderData(headerData, extractedKeys, curatedData, dataToKey) {
55
- return R.filter( // extracted : { [sectionKey]: [...rowKeys] }
56
- function (header) {
57
- var headerKey = dataToKey.header(header);
58
- return R.pipe(R.prop(headerKey), function (sections) {
59
- return R.pickBy(function (rows, section) {
60
- return R.pipe(R.omit(R.propOr([], section, extractedKeys)), R.isEmpty, R.not)(rows);
61
- }, sections);
62
- }, R.isEmpty, R.not)(curatedData);
63
- })(headerData);
64
- };
65
-
66
- var truncateSectionRows = exports.truncateSectionRows = function truncateSectionRows(n, sectionsData, dataToKey) {
67
- var _R$pipe = R.pipe(R.last, // last section
68
- R.nth(1), // rows
69
- R.splitAt(R.negate(n)) // truncate from the end
70
- )(sectionsData),
71
- _R$pipe2 = (0, _slicedToArray3.default)(_R$pipe, 2),
72
- rest = _R$pipe2[0],
73
- extracted = _R$pipe2[1];
74
-
75
- var truncatedData = R.isEmpty(rest) ? R.dropLast(1, sectionsData) // remove section if no more rows
76
- : R.adjust(-1, R.adjust(1, R.always(rest)), sectionsData);
77
-
78
- var sectionKey = dataToKey.sections(R.pipe(R.last, R.head)(sectionsData));
79
- var rowKeys = R.map(dataToKey.rows, extracted);
80
-
81
- var extractedLength = R.length(extracted);
82
- if (extractedLength < n) {
83
- var _truncateSectionRows = truncateSectionRows(n - extractedLength, truncatedData, dataToKey),
84
- truncated = _truncateSectionRows.truncated,
85
- extractedKeys = _truncateSectionRows.extractedKeys;
86
-
87
- return { truncated: truncated, extractedKeys: (0, _extends4.default)({}, extractedKeys, (0, _defineProperty3.default)({}, sectionKey, rowKeys)) };
88
- }
89
-
90
- return { truncated: truncatedData, extractedKeys: (0, _defineProperty3.default)({}, sectionKey, rowKeys) };
24
+ var indexesToLayoutData = function indexesToLayoutData(dimensions, indexes) {
25
+ return R.addIndex(R.map)(function (valueIndex, dimensionIndex) {
26
+ var dimension = R.nth(dimensionIndex, dimensions);
27
+ return {
28
+ dimension: R.pick(['id', 'name', '__index'], dimension),
29
+ value: R.nth(Number(valueIndex), R.propOr([], 'values', dimension))
30
+ };
31
+ }, indexes);
91
32
  };
92
33
 
93
- var truncateHeader = exports.truncateHeader = function truncateHeader(n, headerData, dataToKey) {
94
- var _R$splitAt = R.splitAt(R.negate(n))(headerData),
95
- _R$splitAt2 = (0, _slicedToArray3.default)(_R$splitAt, 2),
96
- truncated = _R$splitAt2[0],
97
- extracted = _R$splitAt2[1];
98
-
99
- return { truncated: truncated, extractedKeys: R.map(dataToKey.header, extracted) };
100
- };
101
-
102
- var refineLength = function refineLength(length) {
103
- return length === 0 ? 1 : length;
104
- };
34
+ var parseParents = function parseParents(value, previous) {
35
+ var previousParents = R.pathOr([], ['value', 'parents'], previous);
36
+ var indexedParents = R.indexBy(R.identity, value.parents);
105
37
 
106
- var truncateLayout = function truncateLayout(isVertical) {
107
- return R.ifElse(R.always(isVertical), truncateSectionRows, truncateHeader);
108
- };
109
-
110
- var refineLayout = function refineLayout(isVertical) {
111
- return R.ifElse(R.always(isVertical), refineHeaderData, refineSectionsData);
38
+ var refinedParents = R.reduce(function (acc, id) {
39
+ if (R.has(id, indexedParents)) {
40
+ return R.append(id, acc);
41
+ }
42
+ return acc;
43
+ }, [], R.append(R.path(['value', 'id'], previous), previousParents));
44
+ var lastParent = R.last(refinedParents);
45
+ var missingParents = R.takeLastWhile(function (id) {
46
+ return id !== lastParent;
47
+ }, value.parents);
48
+
49
+ return { parents: refinedParents, missingIds: missingParents };
112
50
  };
113
51
 
114
- var getShape = function getShape(isVertical) {
115
- return isVertical ? ['header', 'sections', 'rows'] : ['sections', 'rows', 'header'];
116
- };
52
+ var getRowData = function getRowData(indexes, dimension) {
53
+ return R.pipe(R.propOr([], 'values'), R.props(indexes), R.reduce(function (_ref, _value) {
54
+ var data = _ref.data,
55
+ missingParents = _ref.missingParents;
56
+
57
+ var raw = {
58
+ dimension: R.pick(['id', 'name', '__index'], dimension),
59
+ value: _value
60
+ };
61
+ if (R.isNil(_value.parents) || R.isEmpty(_value.parents)) {
62
+ return { data: R.append([raw], data), missingParents: {} };
63
+ }
64
+ var previous = R.head(R.last(data) || []);
65
+ if (R.last(_value.parents) === R.path(['value', 'id'], previous)) {
66
+ //previous is parent
67
+ var _value2 = R.set(R.lensPath(['value', 'parents']), R.append(R.path(['value', 'id'], previous), R.pathOr([], ['value', 'parents'], previous)))(raw);
68
+ return { data: R.append([_value2], data), missingParents: {} };
69
+ }
117
70
 
118
- var getRefinedLayout = function getRefinedLayout(isVertical, truncated, refined) {
119
- return R.ifElse(R.always(isVertical), R.pipe(R.assoc('sectionsData', truncated), R.assoc('headerData', refined)), R.pipe(R.assoc('headerData', truncated), R.assoc('sectionsData', refined)))({});
120
- };
71
+ var previousParent = R.pipe(R.pathOr([], ['value', 'parents']), R.last)(previous);
72
+ if (R.last(_value.parents) === previousParent) {
73
+ //previous is bro
74
+ var _value3 = R.set(R.lensPath(['value']), (0, _extends3.default)({}, _value, {
75
+ name: R.isEmpty(missingParents) ? _value.name : missingParents.name + ' > ' + _value.name,
76
+ parents: R.pathOr([], ['value', 'parents'], previous)
77
+ }))(raw);
78
+ return { data: R.append([_value3], data), missingParents: missingParents };
79
+ }
121
80
 
122
- var segregateLayout = function segregateLayout(isVertical) {
123
- return R.ifElse(R.always(isVertical), R.props(['sectionsData', 'headerData']), R.props(['headerData', 'sectionsData']));
81
+ var _parseParents = parseParents(_value, previous),
82
+ parents = _parseParents.parents,
83
+ missingIds = _parseParents.missingIds;
84
+
85
+ var _missingParents = R.reduce(function (acc, value) {
86
+ if (value.id !== R.head(acc.missingIds)) {
87
+ return acc;
88
+ }
89
+ var _missingIds = R.tail(acc.missingIds);
90
+ if (R.isEmpty(acc.name)) {
91
+ return { name: value.name, missingIds: _missingIds };
92
+ }
93
+ return {
94
+ name: acc.name + ' > ' + value.name,
95
+ missingIds: _missingIds
96
+ };
97
+ }, { name: '', missingIds: missingIds }, dimension.values);
98
+
99
+ var value = R.set(R.lensProp('value'), (0, _extends3.default)({}, _value, {
100
+ parents: parents,
101
+ name: R.isEmpty(missingIds) ? _value.name : _missingParents.name + ' > ' + _value.name
102
+ }))(raw);
103
+
104
+ return { data: R.append([value], data), missingParents: R.isEmpty(missingIds) ? {} : _missingParents };
105
+ }, { data: [], missingParents: {} }), R.prop('data'))(dimension);
124
106
  };
125
107
 
126
- var getLayoutData = exports.getLayoutData = function getLayoutData(_ref) {
127
- var layout = _ref.layout,
128
- observations = _ref.observations,
129
- limit = _ref.limit;
130
-
131
- var layoutData = (0, _getSortedLayoutData.getSortedLayoutData)(layout, observations);
132
- var headerData = layoutData.headerData,
133
- sectionsData = layoutData.sectionsData;
108
+ var getRowsData = function getRowsData(rowsIndexes, dimensions) {
109
+ var dimension = R.head(dimensions);
134
110
 
135
- if (R.isNil(limit) || limit === 0 || R.all(R.isEmpty, [headerData, sectionsData])) {
136
- return R.assoc('truncated', false, layoutData);
111
+ if (R.length(dimensions) === 1) {
112
+ return getRowData(R.unnest(rowsIndexes), R.head(dimensions));
137
113
  }
138
114
 
139
- //number of dimensions in header
140
- var headerDimCount = R.pipe(R.head, // first column
141
- R.when(R.isNil, R.always([])), R.length // number of dims
142
- )(headerData);
143
-
144
- //number of columns for values
145
- var headerValuesCount = R.pipe(R.length, R.when(R.equals(0), R.always(1)))(headerData);
146
-
147
- //total of cells in header
148
- var headerCellsCount = headerDimCount * (headerValuesCount + 1);
149
-
150
- // number of dimensions in a row
151
- var rowDimCount = R.pipe(R.head, // firstSection
152
- R.last, // rows,
153
- R.head, // first row
154
- R.length)(sectionsData);
155
-
156
- // number of cells in a row
157
- var rowCellsCount = rowDimCount + headerValuesCount + 1;
158
-
159
- // number of rows
160
- var rowsCount = R.pipe(R.map(R.last), R.unnest, R.length, R.add(1))(sectionsData);
161
-
162
- // total of cells in all rows
163
- var rowsCellsCount = rowCellsCount * rowsCount;
164
-
165
- // number of sections cells
166
- var sectionsCellsCount = R.ifElse(R.pipe(R.head, R.head, R.length, R.equals(0)), R.always(0), R.length)(sectionsData);
167
-
168
- var total = rowsCellsCount + sectionsCellsCount + headerCellsCount;
169
-
170
- var excess = total - limit;
171
- if (excess <= 0) {
172
- return R.assoc('truncated', false, layoutData);
173
- }
115
+ var groupedIndexes = R.reduce(function (acc, indexes) {
116
+ var headIndex = R.head(indexes);
117
+ var last = R.last(acc.heads);
118
+ if (last === headIndex) {
119
+ return (0, _extends3.default)({}, acc, {
120
+ tails: R.over(R.lensIndex(-1), R.append(R.tail(indexes)))(acc.tails)
121
+ });
122
+ }
123
+ return {
124
+ heads: R.append(headIndex, acc.heads),
125
+ tails: R.append([R.tail(indexes)], acc.tails)
126
+ };
127
+ }, { heads: [], tails: [] }, rowsIndexes);
174
128
 
175
- // total of cells in one column
176
- var columnCellsCount = headerDimCount + rowsCount;
129
+ var headsDatas = getRowData(groupedIndexes.heads, R.head(dimensions));
177
130
 
178
- var isVertical = columnCellsCount > rowCellsCount;
131
+ var res = R.addIndex(R.map)(function (tail, i) {
132
+ var tailData = getRowsData(tail, R.tail(dimensions));
133
+ return R.map(R.prepend(R.head(headsDatas[i])), tailData);
134
+ }, groupedIndexes.tails);
179
135
 
180
- var _segregateLayout = segregateLayout(isVertical)(layoutData),
181
- _segregateLayout2 = (0, _slicedToArray3.default)(_segregateLayout, 2),
182
- toTruncate = _segregateLayout2[0],
183
- toRefine = _segregateLayout2[1];
136
+ return R.unnest(res);
137
+ };
184
138
 
185
- var cutLength = R.pipe(R.ifElse(R.identity, R.always(rowCellsCount), R.always(columnCellsCount)), R.divide(excess), Math.ceil)(isVertical);
139
+ var getLayoutData = exports.getLayoutData = function getLayoutData(layoutIndexes, layout) {
140
+ var header = layoutIndexes.header,
141
+ sections = layoutIndexes.sections,
142
+ truncated = layoutIndexes.truncated;
186
143
 
187
- var dataToKey = R.mapObjIndexed(layoutDataToKey, layout);
144
+ var headerData = R.map(function (i) {
145
+ return indexesToLayoutData(layout.header, i);
146
+ }, header);
188
147
 
189
- var _truncateLayout = truncateLayout(isVertical)(cutLength, toTruncate, dataToKey),
190
- truncated = _truncateLayout.truncated,
191
- extractedKeys = _truncateLayout.extractedKeys;
148
+ var sectionsData = R.map(function (_ref2) {
149
+ var _ref3 = (0, _slicedToArray3.default)(_ref2, 2),
150
+ sectionIndexes = _ref3[0],
151
+ rows = _ref3[1];
192
152
 
193
- var curatedData = R.pipe(getShape, function (shape) {
194
- return (0, _getCuratedCells.getCuratedCells)({ layout: layout, observations: observations, shape: shape });
195
- })(isVertical);
153
+ var sectionData = indexesToLayoutData(layout.sections, sectionIndexes);
196
154
 
197
- var refined = refineLayout(isVertical)(toRefine, extractedKeys, curatedData, dataToKey);
155
+ var rowsData = getRowsData(rows, layout.rows);
198
156
 
199
- var result = getRefinedLayout(isVertical, truncated, refined);
157
+ return [sectionData, rowsData];
158
+ }, sections);
200
159
 
201
- return R.assoc('truncated', true, result);
160
+ return { headerData: headerData, sectionsData: sectionsData, truncated: truncated };
202
161
  };
@@ -0,0 +1,118 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSortedLayoutIndexes = 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
+ 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
+ /*
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
+
41
+ */
42
+
43
+ var getLayoutPivots = function getLayoutPivots(layout) {
44
+ return R.mapObjIndexed(function (dimensions) {
45
+ return R.props(R.pluck('__index', dimensions));
46
+ })(layout);
47
+ };
48
+
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++;
54
+ }
55
+ return a[i] - b[i];
56
+ };
57
+ };
58
+
59
+ // simple call to ramda uniq method is very slow regarding performance
60
+ var uniqIndexes = function uniqIndexes(indexes) {
61
+ return R.pipe(R.reduce(function (acc, i) {
62
+ var key = R.join(':', i);
63
+ if (R.has(key, acc.keys)) {
64
+ return acc;
65
+ }
66
+ return {
67
+ indexes: R.append(i, acc.indexes),
68
+ keys: R.assoc(key, key, acc.keys)
69
+ };
70
+ }, { indexes: [], keys: {} }), R.prop('indexes'))(indexes);
71
+ };
72
+
73
+ var getSortedLayoutIndexes = exports.getSortedLayoutIndexes = function getSortedLayoutIndexes(layout, observations) {
74
+ var dimIndexes = R.pipe(R.values, R.pluck('orderedDimIndexes'))(observations);
75
+
76
+ var headerLength = R.length(layout.header);
77
+
78
+ var sectionLength = R.length(layout.sections);
79
+ var rowLength = R.length(layout.rows);
80
+
81
+ var layoutPivots = getLayoutPivots(layout);
82
+
83
+ 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);
87
+
88
+ return {
89
+ header: R.append(headerIndexes, acc.header),
90
+ sections: R.append(R.concat(sectionsIndexes, rowsIndexes), acc.sections)
91
+ };
92
+ }, { header: [], sections: [] }), R.mapObjIndexed(uniqIndexes), R.evolve({
93
+ header: R.sort(comparator(headerLength)),
94
+ sections: R.sort(comparator(sectionLength + rowLength))
95
+ }), function (indexes) {
96
+ return (0, _extends3.default)({}, indexes, {
97
+ sections: R.reduce(function (acc, i) {
98
+ var _R$splitAt = R.splitAt(sectionLength, i),
99
+ _R$splitAt2 = (0, _slicedToArray3.default)(_R$splitAt, 2),
100
+ sectionIndexes = _R$splitAt2[0],
101
+ rowIndexes = _R$splitAt2[1];
102
+
103
+ var previousSecIndexes = R.pipe(R.nth(-1), function (i) {
104
+ return R.isNil(i) ? null : R.head(i);
105
+ })(acc);
106
+ if (R.equals(sectionIndexes, previousSecIndexes)) {
107
+ return R.over(R.lensIndex(-1), R.over(R.lensIndex(1), R.append(rowIndexes)))(acc);
108
+ }
109
+
110
+ return R.append([sectionIndexes, [rowIndexes]], acc);
111
+ }, [], indexes.sections)
112
+ });
113
+ })(dimIndexes),
114
+ header = _R$pipe.header,
115
+ sections = _R$pipe.sections;
116
+
117
+ return { header: header, sections: sections };
118
+ };
@@ -21,18 +21,20 @@ var _getConfirmedSeriesAttributesIds = require('./getConfirmedSeriesAttributesId
21
21
 
22
22
  var _getCuratedCells = require('./getCuratedCells');
23
23
 
24
- var _getLayoutData = require('./getLayoutData');
25
-
26
24
  var _getLayoutWithFlags = require('./getLayoutWithFlags');
27
25
 
28
- var _refineLayoutHierarchy = require('./refineLayoutHierarchy');
29
-
30
26
  var _getUnitsinLayout = require('../units/getUnitsinLayout');
31
27
 
32
28
  var _appendUnitsInLayoutData = require('../units/appendUnitsInLayoutData');
33
29
 
34
30
  var _cleanUnitsInLayoutData = require('../units/cleanUnitsInLayoutData');
35
31
 
32
+ var _getSortedLayoutIndexes = require('./getSortedLayoutIndexes');
33
+
34
+ var _refineLayoutSize = require('./refineLayoutSize');
35
+
36
+ var _getLayoutData = require('./getLayoutData');
37
+
36
38
  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; } }
37
39
 
38
40
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -74,21 +76,21 @@ var getTableProps = exports.getTableProps = function getTableProps(_ref) {
74
76
  }), function (dim) {
75
77
  return R.over( // sort values
76
78
  R.lensProp('values'), R.sortWith([R.ascend(R.prop('__indexPosition')), R.ascend(R.prop('order'))]))(dim);
77
- }, R.when( // refine hierarchy on last row
78
- R.pipe(R.prop('id'), R.equals(R.last(R.propOr([], 'rows', layoutIds)))), _dotstatsuiteSdmxjs.withFlatHierarchy)), R.pathOr({}, ['dimensions', 'many'], data));
79
+ }, R.when( // refine hierarchy on rows
80
+ R.pipe(R.prop('id'), R.flip(R.includes)(R.propOr([], 'rows', layoutIds))), _dotstatsuiteSdmxjs.withFlatHierarchy)), R.pathOr({}, ['dimensions', 'many'], data));
79
81
 
80
82
  var seriesAttributesValues = R.propOr({}, 'seriesAttributesValues', data);
81
83
  var layout = R.pipe(R.mergeRight({ header: [], sections: [], rows: [] }), R.mapObjIndexed(R.flip(R.props)(dimensions)))(layoutIds);
82
84
 
83
85
  var partialUnitSerieIndexes = R.pipe(R.pathOr(0, ['dimensions', 'length']), R.times(R.always('x')))(data);
84
86
 
85
- var layoutData = R.pipe(_getLayoutData.getLayoutData, R.over(R.lensProp('sectionsData'), function (sectionsData) {
86
- return (0, _refineLayoutHierarchy.refineLayoutHierarchy)(sectionsData, R.last(R.prop('rows', layout)));
87
- }), (0, _appendUnitsInLayoutData.appendUnitsInLayoutData)({
87
+ var layoutData = R.pipe(_getSortedLayoutIndexes.getSortedLayoutIndexes, (0, _refineLayoutSize.refineLayoutSize)({ layout: layout, observations: data.observations, limit: R.when(R.isNil, R.always(0))(limit) }), function (indexes) {
88
+ return (0, _getLayoutData.getLayoutData)(indexes, layout);
89
+ }, (0, _appendUnitsInLayoutData.appendUnitsInLayoutData)({
88
90
  display: display, unitDimension: unitDimension, unitsDisplay: unitsLevelDisplay, unitsSeries: unitsSeries,
89
91
  unitsDefinitionCodes: unitsDefinitionCodes, unitsIndexes: unitsAttachmentIndexesInLayout,
90
92
  partialUnitSerieIndexes: partialUnitSerieIndexes, rejectedValueIds: rejectedValueIds, layoutIds: layoutIds
91
- }), (0, _getLayoutWithFlags.getLayoutDataWithFlags)(seriesAttributesValues, display, customAttributes), (0, _cleanUnitsInLayoutData.cleanUnitsInLayoutData)({ unitsDisplay: unitsLevelDisplay, unitsLayoutIndexes: unitsIndexesInLayout }))({ layout: layout, observations: cells, limit: R.when(R.isNil, R.always(0))(limit) });
93
+ }), (0, _getLayoutWithFlags.getLayoutDataWithFlags)(seriesAttributesValues, display, customAttributes), (0, _cleanUnitsInLayoutData.cleanUnitsInLayoutData)({ unitsDisplay: unitsLevelDisplay, unitsLayoutIndexes: unitsIndexesInLayout }))(layout, R.propOr({}, 'observations', data));
92
94
  return (0, _extends3.default)({
93
95
  cells: (0, _getCuratedCells.getCuratedCells)({ layout: layout, observations: cells, shape: ['header', 'sections', 'rows'] }),
94
96
  layout: layout