@sis-cc/dotstatsuite-components 9.1.0 → 9.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 (80) 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 +102 -161
  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/appendUnitsInLayoutDataEntry.js +10 -10
  13. package/lib/rules/src/table/units/getAttachmentSeriesIndexes.js +1 -1
  14. package/lib/rules/src/table/units/getUnitsSeries.js +31 -0
  15. package/lib/rules/src/v8-transformer.js +3 -2
  16. package/package.json +2 -2
  17. package/src/rules/src/preparators/enhanceObservations.js +163 -0
  18. package/src/rules/src/preparators/formatValue.js +73 -0
  19. package/src/rules/src/preparators/getDimensions.js +49 -0
  20. package/src/rules/src/preparators/getDisplay.js +20 -0
  21. package/src/rules/src/preparators/getObservations.js +19 -0
  22. package/src/rules/src/table/factories/getCells.js +3 -7
  23. package/src/rules/src/table/factories/getLayoutData.js +135 -184
  24. package/src/rules/src/table/factories/getSortedLayoutIndexes.js +108 -0
  25. package/src/rules/src/table/factories/getTableData.js +10 -10
  26. package/src/rules/src/table/factories/refineLayoutSize.js +224 -0
  27. package/src/rules/src/table/preparators/prepareData.js +23 -32
  28. package/src/rules/src/table/units/appendUnitsInLayoutDataEntry.js +15 -18
  29. package/src/rules/src/table/units/getAttachmentSeriesIndexes.js +2 -1
  30. package/src/rules/src/table/units/getUnitsSeries.js +20 -0
  31. package/src/rules/src/v8-transformer.js +4 -2
  32. package/test/appendUnitsInLayoutDataEntry.test.js +3 -3
  33. package/test/enhanceObservations.test.js +270 -0
  34. package/test/getAttachmentSeriesIndexes.test.js +1 -1
  35. package/test/getCells.test.js +4 -39
  36. package/test/getLayoutData2.test.js +194 -0
  37. package/test/getOneValueDimensions.test.js +1 -1
  38. package/test/getSortedLayoutIndexes.test.js +80 -0
  39. package/test/getUnitsArtefacts.test.js +1 -1
  40. package/test/getUnitsSeries.test.js +64 -0
  41. package/test/mocks/table-layout-multi-hierarchies--layout.json +621 -0
  42. package/test/mocks/table-layout-multi-hierarchies--layoutData.json +32410 -0
  43. package/test/mocks/table-layout-multi-hierarchies--layoutIndexes.json +2760 -0
  44. package/test/mocks/table-layout-multi-hierarchies--observations.json +30688 -0
  45. package/test/mocks/table-layout-multi-hierarchies--sizedIndexes.json +2761 -0
  46. package/test/mocks/table-layout-truncation1--layout.json +27469 -0
  47. package/test/mocks/table-layout-truncation1--layoutData.json +19413 -0
  48. package/test/mocks/table-layout-truncation1--layoutIndexes.json +7512 -0
  49. package/test/mocks/table-layout-truncation1--observations.json +70002 -0
  50. package/test/mocks/table-layout-truncation1--sizedIndexes.json +3010 -0
  51. package/test/mocks/table-prep-multi-hierarchies--attributes.json +44 -0
  52. package/test/mocks/table-prep-multi-hierarchies--dimensions.json +688 -0
  53. package/test/mocks/table-prep-multi-hierarchies--enhancedObservations.json +19696 -0
  54. package/test/mocks/table-prep-multi-hierarchies--observations.json +8246 -0
  55. package/test/mocks/table-prep-multi-hierarchies--sdmxJson.json +2985 -0
  56. package/test/mocks/table-prep-truncation1--dimensions.json +35057 -0
  57. package/test/mocks/table-prep-truncation1--enhancedObservations.json +70002 -0
  58. package/test/mocks/table-prep-truncation1--observations.json +27502 -0
  59. package/test/mocks/table-prep-truncation1--sdmxJson.json +55103 -0
  60. package/test/mocks/table-prep-units--observations.json +284286 -0
  61. package/test/mocks/table-prep-units--unitsSeries.json +41042 -0
  62. package/test/parseAttributes.test.js +1 -1
  63. package/test/refineLayoutSize.test.js +415 -0
  64. package/test/table-layout-perf.test.js +74 -0
  65. package/test/table-prep-perf.test.js +65 -0
  66. package/lib/rules/src/table/factories/getSortedLayoutData.js +0 -145
  67. package/lib/rules/src/table/factories/refineLayoutHierarchy.js +0 -61
  68. package/lib/rules/src/table/preparators/parseObservations.js +0 -76
  69. package/lib/rules/src/table/units/getUnitsSeriesOccurences.js +0 -39
  70. package/src/rules/src/table/factories/getSortedLayoutData.js +0 -133
  71. package/src/rules/src/table/factories/refineLayoutHierarchy.js +0 -64
  72. package/src/rules/src/table/preparators/parseObservations.js +0 -81
  73. package/src/rules/src/table/units/getUnitsSeriesOccurences.js +0 -51
  74. package/test/appendUnitsInLayoutData.test.js +0 -248
  75. package/test/getLayoutData.test.js +0 -311
  76. package/test/getSortedLayoutData.test.js +0 -382
  77. package/test/getUnitsSeriesOccurences.test.js +0 -133
  78. package/test/parseObservations.test.js +0 -116
  79. package/test/refineDimSeriesUnits.test.js +0 -24
  80. package/test/refineLayoutHierarchy.test.js +0 -79
@@ -3,200 +3,141 @@
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) };
91
- };
92
-
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
- };
105
-
106
- var truncateLayout = function truncateLayout(isVertical) {
107
- return R.ifElse(R.always(isVertical), truncateSectionRows, truncateHeader);
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);
108
32
  };
109
33
 
110
- var refineLayout = function refineLayout(isVertical) {
111
- return R.ifElse(R.always(isVertical), refineHeaderData, refineSectionsData);
112
- };
34
+ var getRowData = function getRowData(indexes, dimension) {
35
+ return R.pipe(R.propOr([], 'values'), R.props(indexes), R.reduce(function (_ref, _value) {
36
+ var data = _ref.data,
37
+ missingParents = _ref.missingParents;
38
+
39
+ var raw = {
40
+ dimension: R.pick(['id', 'name', '__index'], dimension),
41
+ value: _value
42
+ };
43
+ if (R.isNil(_value.parents) || R.isEmpty(_value.parents)) {
44
+ return { data: R.append([raw], data), missingParents: {} };
45
+ }
46
+ var previous = R.head(R.last(data) || []);
113
47
 
114
- var getShape = function getShape(isVertical) {
115
- return isVertical ? ['header', 'sections', 'rows'] : ['sections', 'rows', 'header'];
116
- };
48
+ if (R.last(_value.parents) === R.path(['value', 'id'], previous)) {
49
+ //previous is parent
50
+ var _value2 = R.set(R.lensPath(['value', 'parents']), R.append(R.path(['value', 'id'], previous), R.pathOr([], ['value', 'parents'], previous)))(raw);
51
+ return { data: R.append([_value2], data), missingParents: {} };
52
+ }
117
53
 
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
- };
54
+ var previousParent = R.pipe(R.pathOr([], ['value', 'parents']), R.last)(previous);
55
+ if (R.last(_value.parents) === previousParent) {
56
+ //previous is bro
57
+ var _value3 = R.set(R.lensPath(['value']), (0, _extends3.default)({}, _value, {
58
+ name: R.isEmpty(missingParents) ? _value.name : missingParents.name + ' > ' + _value.name,
59
+ parents: R.pathOr([], ['value', 'parents'], previous)
60
+ }))(raw);
61
+ return { data: R.append([_value3], data), missingParents: missingParents };
62
+ }
121
63
 
122
- var segregateLayout = function segregateLayout(isVertical) {
123
- return R.ifElse(R.always(isVertical), R.props(['sectionsData', 'headerData']), R.props(['headerData', 'sectionsData']));
64
+ var missingIds = R.takeLastWhile(function (id) {
65
+ return id !== R.path(['value', 'id'], previous);
66
+ }, _value.parents);
67
+ var _missingParents = R.reduce(function (acc, value) {
68
+ if (value.id !== R.head(acc.missingIds)) {
69
+ return acc;
70
+ }
71
+ var _missingIds = R.tail(acc.missingIds);
72
+ if (R.isEmpty(acc.name)) {
73
+ return { name: value.name, missingIds: _missingIds };
74
+ }
75
+ return {
76
+ name: acc.name + ' > ' + value.name,
77
+ missingIds: _missingIds
78
+ };
79
+ }, { name: '', missingIds: missingIds }, dimension.values);
80
+
81
+ var value = R.set(R.lensProp('value'), (0, _extends3.default)({}, _value, {
82
+ name: _missingParents.name + ' > ' + _value.name,
83
+ parents: R.length(missingIds) === R.length(_value.parents) ? [] : R.append(R.path(['value', 'id'], previous), R.pathOr([], ['value', 'parents'], previous))
84
+ }))(raw);
85
+
86
+ return { data: R.append([value], data), missingParents: _missingParents };
87
+ }, { data: [], missingParents: {} }), R.prop('data'))(dimension);
124
88
  };
125
89
 
126
- var getLayoutData = exports.getLayoutData = function getLayoutData(_ref) {
127
- var layout = _ref.layout,
128
- observations = _ref.observations,
129
- limit = _ref.limit;
90
+ var getRowsData = function getRowsData(rowsIndexes, dimensions) {
91
+ var dimension = R.head(dimensions);
130
92
 
131
- var layoutData = (0, _getSortedLayoutData.getSortedLayoutData)(layout, observations);
132
- var headerData = layoutData.headerData,
133
- sectionsData = layoutData.sectionsData;
134
-
135
- if (R.isNil(limit) || limit === 0 || R.all(R.isEmpty, [headerData, sectionsData])) {
136
- return R.assoc('truncated', false, layoutData);
93
+ if (R.length(dimensions) === 1) {
94
+ return getRowData(R.unnest(rowsIndexes), R.head(dimensions));
137
95
  }
138
96
 
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
- }
97
+ var groupedIndexes = R.reduce(function (acc, indexes) {
98
+ var headIndex = R.head(indexes);
99
+ var last = R.last(acc.heads);
100
+ if (last === headIndex) {
101
+ return (0, _extends3.default)({}, acc, {
102
+ tails: R.over(R.lensIndex(-1), R.append(R.tail(indexes)))(acc.tails)
103
+ });
104
+ }
105
+ return {
106
+ heads: R.append(headIndex, acc.heads),
107
+ tails: R.append([R.tail(indexes)], acc.tails)
108
+ };
109
+ }, { heads: [], tails: [] }, rowsIndexes);
174
110
 
175
- // total of cells in one column
176
- var columnCellsCount = headerDimCount + rowsCount;
111
+ var headsDatas = getRowData(groupedIndexes.heads, R.head(dimensions));
177
112
 
178
- var isVertical = columnCellsCount > rowCellsCount;
113
+ var res = R.addIndex(R.map)(function (tail, i) {
114
+ var tailData = getRowsData(tail, R.tail(dimensions));
115
+ return R.map(R.prepend(R.head(headsDatas[i])), tailData);
116
+ }, groupedIndexes.tails);
179
117
 
180
- var _segregateLayout = segregateLayout(isVertical)(layoutData),
181
- _segregateLayout2 = (0, _slicedToArray3.default)(_segregateLayout, 2),
182
- toTruncate = _segregateLayout2[0],
183
- toRefine = _segregateLayout2[1];
118
+ return R.unnest(res);
119
+ };
184
120
 
185
- var cutLength = R.pipe(R.ifElse(R.identity, R.always(rowCellsCount), R.always(columnCellsCount)), R.divide(excess), Math.ceil)(isVertical);
121
+ var getLayoutData = exports.getLayoutData = function getLayoutData(layoutIndexes, layout) {
122
+ var header = layoutIndexes.header,
123
+ sections = layoutIndexes.sections,
124
+ truncated = layoutIndexes.truncated;
186
125
 
187
- var dataToKey = R.mapObjIndexed(layoutDataToKey, layout);
126
+ var headerData = R.map(function (i) {
127
+ return indexesToLayoutData(layout.header, i);
128
+ }, header);
188
129
 
189
- var _truncateLayout = truncateLayout(isVertical)(cutLength, toTruncate, dataToKey),
190
- truncated = _truncateLayout.truncated,
191
- extractedKeys = _truncateLayout.extractedKeys;
130
+ var sectionsData = R.map(function (_ref2) {
131
+ var _ref3 = (0, _slicedToArray3.default)(_ref2, 2),
132
+ sectionIndexes = _ref3[0],
133
+ rows = _ref3[1];
192
134
 
193
- var curatedData = R.pipe(getShape, function (shape) {
194
- return (0, _getCuratedCells.getCuratedCells)({ layout: layout, observations: observations, shape: shape });
195
- })(isVertical);
135
+ var sectionData = indexesToLayoutData(layout.sections, sectionIndexes);
196
136
 
197
- var refined = refineLayout(isVertical)(toRefine, extractedKeys, curatedData, dataToKey);
137
+ var rowsData = getRowsData(rows, layout.rows);
198
138
 
199
- var result = getRefinedLayout(isVertical, truncated, refined);
139
+ return [sectionData, rowsData];
140
+ }, sections);
200
141
 
201
- return R.assoc('truncated', true, result);
142
+ return { headerData: headerData, sectionsData: sectionsData, truncated: truncated };
202
143
  };
@@ -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