@sis-cc/dotstatsuite-components 9.2.2 → 9.3.3
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.
- package/lib/rules/src/date.js +59 -3
- package/lib/rules/src/preparators/getReportingYearStart.js +44 -0
- package/lib/rules/src/table/factories/getLayoutData.js +9 -4
- package/lib/rules/src/table/factories/refineLayoutSize.js +3 -3
- package/lib/rules/src/v8-transformer.js +10 -4
- package/package.json +2 -2
- package/src/rules/src/date.js +34 -1
- package/src/rules/src/preparators/getReportingYearStart.js +13 -0
- package/src/rules/src/table/factories/getLayoutData.js +2 -2
- package/src/rules/src/table/factories/refineLayoutSize.js +12 -4
- package/src/rules/src/v8-transformer.js +10 -3
- package/test/getTableData.test.js +1 -0
- package/test/mocks/table-layout-multi-hierarchies--layoutData.json +2 -1
- package/test/mocks/table-layout-multi-hierarchies--sizedIndexes.json +2 -1
- package/test/mocks/table-layout-truncation1--layoutData.json +2 -1
- package/test/mocks/table-layout-truncation1--sizedIndexes.json +2 -1
- package/test/refineLayoutSize.test.js +6 -0
package/lib/rules/src/date.js
CHANGED
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getTimePeriodLabel = exports.getLocale = undefined;
|
|
6
|
+
exports.getTimePeriodLabel = exports.getReportedTimePeriodLabel = exports.getLocale = undefined;
|
|
7
|
+
|
|
8
|
+
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
|
9
|
+
|
|
10
|
+
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
|
|
7
11
|
|
|
8
12
|
var _ramda = require('ramda');
|
|
9
13
|
|
|
@@ -45,10 +49,10 @@ var _th = require('date-fns/locale/th');
|
|
|
45
49
|
|
|
46
50
|
var _th2 = _interopRequireDefault(_th);
|
|
47
51
|
|
|
48
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
49
|
-
|
|
50
52
|
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; } }
|
|
51
53
|
|
|
54
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
55
|
+
|
|
52
56
|
var isValidDate = function isValidDate(period) {
|
|
53
57
|
return R.and(_dateFns2.default.isDate, function (date) {
|
|
54
58
|
return R.not(R.equals(date.getTime(date), NaN));
|
|
@@ -63,6 +67,58 @@ var formaterPeriod = function formaterPeriod(locale, format) {
|
|
|
63
67
|
};
|
|
64
68
|
};
|
|
65
69
|
|
|
70
|
+
var getReportedTimePeriodLabel = exports.getReportedTimePeriodLabel = function getReportedTimePeriodLabel(freq, _format, locale) {
|
|
71
|
+
return function (reportYearStart, _ref) {
|
|
72
|
+
var id = _ref.id,
|
|
73
|
+
start = _ref.start,
|
|
74
|
+
reportedStart = _ref.reportedStart;
|
|
75
|
+
|
|
76
|
+
var year = _dateFns2.default.getYear(start);
|
|
77
|
+
var reportStartDate = new Date(year, reportYearStart.month, reportYearStart.day);
|
|
78
|
+
var isReportFirstDate = _dateFns2.default.isEqual(reportStartDate, new Date(year, 1, 1));
|
|
79
|
+
if (isReportFirstDate || freq === 'D') {
|
|
80
|
+
return R.isNil(_format) ? id : _dateFns2.default.format(start, _format, { locale: getLocale(locale) });
|
|
81
|
+
}
|
|
82
|
+
var nextYear = year + 1;
|
|
83
|
+
if (freq === 'A') {
|
|
84
|
+
return year + '/' + nextYear;
|
|
85
|
+
}
|
|
86
|
+
if (freq === 'S') {
|
|
87
|
+
var _R$match = R.match(/S\d/, id),
|
|
88
|
+
_R$match2 = (0, _slicedToArray3.default)(_R$match, 1),
|
|
89
|
+
semester = _R$match2[0];
|
|
90
|
+
|
|
91
|
+
return year + '/' + nextYear + '-' + semester;
|
|
92
|
+
}
|
|
93
|
+
if (freq === 'Q') {
|
|
94
|
+
var _R$match3 = R.match(/Q\d/, id),
|
|
95
|
+
_R$match4 = (0, _slicedToArray3.default)(_R$match3, 1),
|
|
96
|
+
quarter = _R$match4[0];
|
|
97
|
+
|
|
98
|
+
return year + '/' + nextYear + '-' + quarter;
|
|
99
|
+
}
|
|
100
|
+
if (freq === 'M') {
|
|
101
|
+
var isFirstDayOfMonth = _dateFns2.default.isFirstDayOfMonth(reportedStart);
|
|
102
|
+
if (isFirstDayOfMonth) {
|
|
103
|
+
return R.isNil(_format) ? id : _dateFns2.default.format(reportedStart, _format, { locale: getLocale(locale) });
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
var _R$match5 = R.match(/M[\d]{2}/, id),
|
|
107
|
+
_R$match6 = (0, _slicedToArray3.default)(_R$match5, 1),
|
|
108
|
+
month = _R$match6[0];
|
|
109
|
+
|
|
110
|
+
return year + '/' + nextYear + '-' + month;
|
|
111
|
+
}
|
|
112
|
+
// freq === 'W'
|
|
113
|
+
|
|
114
|
+
var _R$match7 = R.match(/W[\d]{2}/, id),
|
|
115
|
+
_R$match8 = (0, _slicedToArray3.default)(_R$match7, 1),
|
|
116
|
+
week = _R$match8[0];
|
|
117
|
+
|
|
118
|
+
return year + '/' + nextYear + '-' + week;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
|
|
66
122
|
var getTimePeriodLabel = exports.getTimePeriodLabel = function getTimePeriodLabel(locale) {
|
|
67
123
|
var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'YYYY MMM';
|
|
68
124
|
return R.pipe(R.when(R.isNil, R.always('')), R.when(isValidDate, formaterPeriod(locale, format)));
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getReportingYearStart = undefined;
|
|
7
|
+
|
|
8
|
+
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
|
9
|
+
|
|
10
|
+
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
|
|
11
|
+
|
|
12
|
+
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
|
|
13
|
+
|
|
14
|
+
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
|
|
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 getReportingYearStart = exports.getReportingYearStart = function getReportingYearStart(sdmxJson) {
|
|
25
|
+
var attributes = R.pipe(R.pathOr({}, ['data', 'structure', 'attributes']), function (_ref) {
|
|
26
|
+
var _ref$dataSet = _ref.dataSet,
|
|
27
|
+
dataSet = _ref$dataSet === undefined ? [] : _ref$dataSet,
|
|
28
|
+
_ref$observation = _ref.observation,
|
|
29
|
+
observation = _ref$observation === undefined ? [] : _ref$observation,
|
|
30
|
+
_ref$series = _ref.series,
|
|
31
|
+
series = _ref$series === undefined ? [] : _ref$series;
|
|
32
|
+
return [].concat((0, _toConsumableArray3.default)(dataSet), (0, _toConsumableArray3.default)(observation), (0, _toConsumableArray3.default)(series));
|
|
33
|
+
})(sdmxJson);
|
|
34
|
+
|
|
35
|
+
var reportYearStartAttr = R.find(R.propEq('id', 'REPORTING_YEAR_START_DAY'), attributes) || {};
|
|
36
|
+
var reportYearStart = R.pathOr('--01-01', ['values', 0, 'name'], reportYearStartAttr);
|
|
37
|
+
|
|
38
|
+
var _R$match = R.match(/[\d]{2}/g, reportYearStart),
|
|
39
|
+
_R$match2 = (0, _slicedToArray3.default)(_R$match, 2),
|
|
40
|
+
month = _R$match2[0],
|
|
41
|
+
day = _R$match2[1];
|
|
42
|
+
|
|
43
|
+
return { month: month, day: day };
|
|
44
|
+
};
|
|
@@ -9,6 +9,10 @@ var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
|
|
9
9
|
|
|
10
10
|
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
|
|
11
11
|
|
|
12
|
+
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
|
|
13
|
+
|
|
14
|
+
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
|
|
15
|
+
|
|
12
16
|
var _extends2 = require('babel-runtime/helpers/extends');
|
|
13
17
|
|
|
14
18
|
var _extends3 = _interopRequireDefault(_extends2);
|
|
@@ -136,10 +140,10 @@ var getRowsData = function getRowsData(rowsIndexes, dimensions) {
|
|
|
136
140
|
return R.unnest(res);
|
|
137
141
|
};
|
|
138
142
|
|
|
139
|
-
var getLayoutData =
|
|
143
|
+
var getLayoutData = function getLayoutData(layoutIndexes, layout) {
|
|
140
144
|
var header = layoutIndexes.header,
|
|
141
145
|
sections = layoutIndexes.sections,
|
|
142
|
-
|
|
146
|
+
rest = (0, _objectWithoutProperties3.default)(layoutIndexes, ['header', 'sections']);
|
|
143
147
|
|
|
144
148
|
var headerData = R.map(function (i) {
|
|
145
149
|
return indexesToLayoutData(layout.header, i);
|
|
@@ -157,5 +161,6 @@ var getLayoutData = exports.getLayoutData = function getLayoutData(layoutIndexes
|
|
|
157
161
|
return [sectionData, rowsData];
|
|
158
162
|
}, sections);
|
|
159
163
|
|
|
160
|
-
return { headerData: headerData, sectionsData: sectionsData,
|
|
161
|
-
};
|
|
164
|
+
return (0, _extends3.default)({ headerData: headerData, sectionsData: sectionsData }, rest);
|
|
165
|
+
};
|
|
166
|
+
exports.getLayoutData = getLayoutData;
|
|
@@ -142,7 +142,7 @@ var refineLayoutSize = exports.refineLayoutSize = function refineLayoutSize(_ref
|
|
|
142
142
|
sections = layoutIndexes.sections;
|
|
143
143
|
|
|
144
144
|
if (R.isNil(limit) || limit === 0 || R.all(R.isEmpty, [header, sections])) {
|
|
145
|
-
return R.
|
|
145
|
+
return R.pipe(R.set(R.lensProp('truncated'), false), R.set(R.lensProp('totalCells'), null))(layoutIndexes);
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
//number of dimensions in header
|
|
@@ -178,7 +178,7 @@ var refineLayoutSize = exports.refineLayoutSize = function refineLayoutSize(_ref
|
|
|
178
178
|
|
|
179
179
|
var excess = total - limit;
|
|
180
180
|
if (excess <= 0) {
|
|
181
|
-
return R.
|
|
181
|
+
return R.pipe(R.set(R.lensProp('truncated'), false), R.set(R.lensProp('totalCells'), total))(layoutIndexes);
|
|
182
182
|
}
|
|
183
183
|
|
|
184
184
|
// total of cells in one column
|
|
@@ -205,6 +205,6 @@ var refineLayoutSize = exports.refineLayoutSize = function refineLayoutSize(_ref
|
|
|
205
205
|
|
|
206
206
|
var result = getRefinedLayout(isVertical, truncated, refined);
|
|
207
207
|
|
|
208
|
-
return R.
|
|
208
|
+
return R.pipe(R.set(R.lensProp('truncated'), true), R.set(R.lensProp('totalCells'), total))(result);
|
|
209
209
|
};
|
|
210
210
|
};
|
|
@@ -23,6 +23,8 @@ var _sdmxData = require('./sdmx-data');
|
|
|
23
23
|
|
|
24
24
|
var _date = require('./date');
|
|
25
25
|
|
|
26
|
+
var _getReportingYearStart = require('./preparators/getReportingYearStart');
|
|
27
|
+
|
|
26
28
|
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; } }
|
|
27
29
|
|
|
28
30
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -32,7 +34,7 @@ var dataTransformer = exports.dataTransformer = function dataTransformer(dataNew
|
|
|
32
34
|
|
|
33
35
|
var getLanguage = R.pipe(R.pathOr('', ['meta', 'contentLanguages']), R.head());
|
|
34
36
|
var locale = getLanguage(dataNew);
|
|
35
|
-
|
|
37
|
+
var reportYearStart = (0, _getReportingYearStart.getReportingYearStart)(dataNew);
|
|
36
38
|
var getProp = function getProp(prop, locale) {
|
|
37
39
|
return R.pathOr(null, [prop, locale]);
|
|
38
40
|
};
|
|
@@ -47,7 +49,12 @@ var dataTransformer = exports.dataTransformer = function dataTransformer(dataNew
|
|
|
47
49
|
var valueAnnotations = R.pipe(R.propOr([], 'annotations'), R.flip(R.props)(annotations))(value);
|
|
48
50
|
var name = getLocalisedProp('names')(value);
|
|
49
51
|
var __indexPosition = NaN;
|
|
52
|
+
var start = null;
|
|
50
53
|
if (isTimeDimension) {
|
|
54
|
+
start = new Date(R.prop('start', value));
|
|
55
|
+
start = Date.UTC(_dateFns2.default.getYear(start), _dateFns2.default.getMonth(start), _dateFns2.default.getDate(start), _dateFns2.default.getHours(start), _dateFns2.default.getMinutes(start), _dateFns2.default.getSeconds(start));
|
|
56
|
+
start = _dateFns2.default.addMonths(start, reportYearStart.month - 1);
|
|
57
|
+
start = _dateFns2.default.addDays(start, reportYearStart.day - 1);
|
|
51
58
|
__indexPosition = _dateFns2.default.getTime(new Date(R.prop('start', value)));
|
|
52
59
|
}
|
|
53
60
|
if (isNaN(__indexPosition)) {
|
|
@@ -56,9 +63,8 @@ var dataTransformer = exports.dataTransformer = function dataTransformer(dataNew
|
|
|
56
63
|
var timeFormat = R.prop('timeFormat', options);
|
|
57
64
|
return (0, _extends3.default)({}, value, {
|
|
58
65
|
id: R.when(R.always(isTimeDimension), R.replace(/M/g, ''))(value.id),
|
|
59
|
-
name: R.when(R.always(isTimeDimension),
|
|
60
|
-
|
|
61
|
-
})(name),
|
|
66
|
+
name: R.when(R.always(isTimeDimension), R.always((0, _date.getReportedTimePeriodLabel)(options.frequency, timeFormat, locale)(reportYearStart, { id: value.id, reportedStart: start, start: value.start })))(name),
|
|
67
|
+
start: start ? start.toISOString() : null,
|
|
62
68
|
__indexPosition: __indexPosition,
|
|
63
69
|
__index: __index
|
|
64
70
|
});
|
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": "9.
|
|
4
|
+
"version": "9.3.3",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"author": "OECD",
|
|
7
7
|
"license": "MIT",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"@react-hook/size": "^2.1.1",
|
|
21
21
|
"@sis-cc/dotstatsuite-d3-charts": "^8.0.0",
|
|
22
22
|
"@sis-cc/dotstatsuite-sdmxjs": "^4.5.2",
|
|
23
|
-
"@sis-cc/dotstatsuite-visions": "^6.
|
|
23
|
+
"@sis-cc/dotstatsuite-visions": "^6.6.1",
|
|
24
24
|
"date-fns": "^1.30.1",
|
|
25
25
|
"glamor": "^2.20.40",
|
|
26
26
|
"glamorous": "^4.13.1",
|
package/src/rules/src/date.js
CHANGED
|
@@ -23,7 +23,40 @@ export const getLocale = R.cond([
|
|
|
23
23
|
[R.T, R.always(en)]
|
|
24
24
|
]);
|
|
25
25
|
|
|
26
|
-
const formaterPeriod = (locale, format) => date => dateFns.format(date, format, { locale: getLocale(locale) })
|
|
26
|
+
const formaterPeriod = (locale, format) => date => dateFns.format(date, format, { locale: getLocale(locale) });
|
|
27
|
+
|
|
28
|
+
export const getReportedTimePeriodLabel = (freq, _format, locale) => (reportYearStart, { id, start, reportedStart }) => {
|
|
29
|
+
const year = dateFns.getYear(start);
|
|
30
|
+
const reportStartDate = new Date(year, reportYearStart.month, reportYearStart.day);
|
|
31
|
+
const isReportFirstDate = dateFns.isEqual(reportStartDate, new Date(year, 1, 1));
|
|
32
|
+
if (isReportFirstDate || freq === 'D') {
|
|
33
|
+
return R.isNil(_format) ? id : dateFns.format(start, _format, { locale: getLocale(locale) });
|
|
34
|
+
}
|
|
35
|
+
const nextYear = year + 1;
|
|
36
|
+
if (freq === 'A') {
|
|
37
|
+
return `${year}/${nextYear}`;
|
|
38
|
+
}
|
|
39
|
+
if (freq === 'S') {
|
|
40
|
+
const [semester] = R.match(/S\d/, id);
|
|
41
|
+
return `${year}/${nextYear}-${semester}`;
|
|
42
|
+
}
|
|
43
|
+
if (freq === 'Q') {
|
|
44
|
+
const [quarter] = R.match(/Q\d/, id);
|
|
45
|
+
return `${year}/${nextYear}-${quarter}`;
|
|
46
|
+
}
|
|
47
|
+
if (freq === 'M') {
|
|
48
|
+
const isFirstDayOfMonth = dateFns.isFirstDayOfMonth(reportedStart);
|
|
49
|
+
if (isFirstDayOfMonth) {
|
|
50
|
+
return R.isNil(_format) ? id : dateFns.format(reportedStart, _format, { locale: getLocale(locale) });
|
|
51
|
+
}
|
|
52
|
+
const [month] = R.match(/M[\d]{2}/, id);
|
|
53
|
+
return `${year}/${nextYear}-${month}`;
|
|
54
|
+
}
|
|
55
|
+
// freq === 'W'
|
|
56
|
+
const [week] = R.match(/W[\d]{2}/, id)
|
|
57
|
+
return `${year}/${nextYear}-${week}`;
|
|
58
|
+
}
|
|
59
|
+
|
|
27
60
|
|
|
28
61
|
export const getTimePeriodLabel = (locale, format = 'YYYY MMM') => R.pipe(
|
|
29
62
|
R.when(R.isNil, R.always('')),
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as R from 'ramda';
|
|
2
|
+
|
|
3
|
+
export const getReportingYearStart = (sdmxJson) => {
|
|
4
|
+
const attributes = R.pipe(
|
|
5
|
+
R.pathOr({}, ['data', 'structure', 'attributes']),
|
|
6
|
+
({ dataSet=[], observation=[], series=[] }) => [...dataSet, ...observation, ...series]
|
|
7
|
+
)(sdmxJson);
|
|
8
|
+
|
|
9
|
+
const reportYearStartAttr = R.find(R.propEq('id', 'REPORTING_YEAR_START_DAY'), attributes) || {};
|
|
10
|
+
const reportYearStart = R.pathOr('--01-01', ['values', 0, 'name'], reportYearStartAttr);
|
|
11
|
+
const [month, day] = R.match(/[\d]{2}/g, reportYearStart);
|
|
12
|
+
return ({ month, day });
|
|
13
|
+
};
|
|
@@ -150,7 +150,7 @@ const getRowsData = (rowsIndexes, dimensions) => {
|
|
|
150
150
|
};
|
|
151
151
|
|
|
152
152
|
export const getLayoutData = (layoutIndexes, layout) => {
|
|
153
|
-
const { header, sections,
|
|
153
|
+
const { header, sections, ...rest } = layoutIndexes;
|
|
154
154
|
const headerData = R.map(i => indexesToLayoutData(layout.header, i), header);
|
|
155
155
|
|
|
156
156
|
const sectionsData = R.map(
|
|
@@ -165,5 +165,5 @@ export const getLayoutData = (layoutIndexes, layout) => {
|
|
|
165
165
|
sections
|
|
166
166
|
);
|
|
167
167
|
|
|
168
|
-
return ({ headerData, sectionsData,
|
|
168
|
+
return ({ headerData, sectionsData, ...rest });
|
|
169
169
|
};
|
|
@@ -140,7 +140,10 @@ const segregateLayout = (isVertical) => R.ifElse(
|
|
|
140
140
|
export const refineLayoutSize = ({ layout, observations, limit }) => layoutIndexes => {
|
|
141
141
|
const { header, sections } = layoutIndexes;
|
|
142
142
|
if (R.isNil(limit) || limit === 0 || R.all(R.isEmpty, [header, sections])) {
|
|
143
|
-
return R.
|
|
143
|
+
return R.pipe(
|
|
144
|
+
R.set(R.lensProp('truncated'), false),
|
|
145
|
+
R.set(R.lensProp('totalCells'), null),
|
|
146
|
+
)(layoutIndexes);
|
|
144
147
|
}
|
|
145
148
|
|
|
146
149
|
//number of dimensions in header
|
|
@@ -192,7 +195,10 @@ export const refineLayoutSize = ({ layout, observations, limit }) => layoutIndex
|
|
|
192
195
|
|
|
193
196
|
const excess = total - limit;
|
|
194
197
|
if (excess <= 0) {
|
|
195
|
-
return R.
|
|
198
|
+
return R.pipe(
|
|
199
|
+
R.set(R.lensProp('truncated'), false),
|
|
200
|
+
R.set(R.lensProp('totalCells'), total),
|
|
201
|
+
)(layoutIndexes);
|
|
196
202
|
}
|
|
197
203
|
|
|
198
204
|
// total of cells in one column
|
|
@@ -202,7 +208,6 @@ export const refineLayoutSize = ({ layout, observations, limit }) => layoutIndex
|
|
|
202
208
|
|
|
203
209
|
const [toTruncate, toRefine] = segregateLayout(isVertical)(layoutIndexes);
|
|
204
210
|
|
|
205
|
-
|
|
206
211
|
const cutLength = R.pipe(
|
|
207
212
|
R.ifElse(R.identity, R.always(rowCellsCount), R.always(columnCellsCount)),
|
|
208
213
|
R.divide(excess),
|
|
@@ -220,5 +225,8 @@ export const refineLayoutSize = ({ layout, observations, limit }) => layoutIndex
|
|
|
220
225
|
|
|
221
226
|
const result = getRefinedLayout(isVertical, truncated, refined);
|
|
222
227
|
|
|
223
|
-
return R.
|
|
228
|
+
return R.pipe(
|
|
229
|
+
R.set(R.lensProp('truncated'), true),
|
|
230
|
+
R.set(R.lensProp('totalCells'), total),
|
|
231
|
+
)(result);
|
|
224
232
|
};
|
|
@@ -3,12 +3,13 @@ import dateFns from 'date-fns';
|
|
|
3
3
|
import { getCodeOrder, isTimePeriodDimension } from '@sis-cc/dotstatsuite-sdmxjs';
|
|
4
4
|
import {
|
|
5
5
|
getRelationnalAnnotations, setAnnotationsLayout, getIsHidden, hiddenFormat } from './sdmx-data';
|
|
6
|
-
import {
|
|
6
|
+
import { getReportedTimePeriodLabel } from './date';
|
|
7
|
+
import { getReportingYearStart } from './preparators/getReportingYearStart';
|
|
7
8
|
|
|
8
9
|
export const dataTransformer = (dataNew, options = {}) => {
|
|
9
10
|
const getLanguage = R.pipe(R.pathOr('', ['meta', 'contentLanguages']), R.head());
|
|
10
11
|
const locale = getLanguage(dataNew);
|
|
11
|
-
|
|
12
|
+
const reportYearStart = getReportingYearStart(dataNew);
|
|
12
13
|
const getProp = (prop, locale) => R.pathOr(null,[prop, locale]);
|
|
13
14
|
const getLocalisedProp = R.curry((prop, collection) => getProp(prop, locale)(collection));
|
|
14
15
|
const getValues = R.map((value) => ({ ...value, name: getLocalisedProp('names', value) }));
|
|
@@ -21,7 +22,12 @@ export const dataTransformer = (dataNew, options = {}) => {
|
|
|
21
22
|
)(value);
|
|
22
23
|
const name = getLocalisedProp('names')(value);
|
|
23
24
|
let __indexPosition = NaN;
|
|
25
|
+
let start = null;
|
|
24
26
|
if (isTimeDimension) {
|
|
27
|
+
start = new Date(R.prop('start', value));
|
|
28
|
+
start = Date.UTC(dateFns.getYear(start), dateFns.getMonth(start), dateFns.getDate(start), dateFns.getHours(start), dateFns.getMinutes(start), dateFns.getSeconds(start));
|
|
29
|
+
start = dateFns.addMonths(start, reportYearStart.month - 1);
|
|
30
|
+
start = dateFns.addDays(start, reportYearStart.day - 1);
|
|
25
31
|
__indexPosition = dateFns.getTime(new Date(R.prop('start', value)));
|
|
26
32
|
}
|
|
27
33
|
if (isNaN(__indexPosition)) {
|
|
@@ -36,8 +42,9 @@ export const dataTransformer = (dataNew, options = {}) => {
|
|
|
36
42
|
)(value.id),
|
|
37
43
|
name: R.when(
|
|
38
44
|
R.always(isTimeDimension),
|
|
39
|
-
|
|
45
|
+
R.always(getReportedTimePeriodLabel(options.frequency, timeFormat, locale)(reportYearStart, { id: value.id, reportedStart: start, start:value.start }))
|
|
40
46
|
)(name),
|
|
47
|
+
start: start ? start.toISOString() : null,
|
|
41
48
|
__indexPosition,
|
|
42
49
|
__index,
|
|
43
50
|
});
|
|
@@ -32406,5 +32406,6 @@
|
|
|
32406
32406
|
]
|
|
32407
32407
|
]
|
|
32408
32408
|
],
|
|
32409
|
-
"truncated": false
|
|
32409
|
+
"truncated": false,
|
|
32410
|
+
"totalCells": 2754
|
|
32410
32411
|
}
|
|
@@ -20353,5 +20353,6 @@
|
|
|
20353
20353
|
]
|
|
20354
20354
|
]
|
|
20355
20355
|
],
|
|
20356
|
-
"truncated": true
|
|
20356
|
+
"truncated": true,
|
|
20357
|
+
"totalCells": 7503
|
|
20357
20358
|
}
|
|
@@ -118,6 +118,7 @@ describe('refineLayoutSize tests', () => {
|
|
|
118
118
|
|
|
119
119
|
const expected = {
|
|
120
120
|
truncated: false,
|
|
121
|
+
totalCells: 57,
|
|
121
122
|
header: [[0], [1], [2]],
|
|
122
123
|
sections: [
|
|
123
124
|
[[0], [[0], [1], [2]]],
|
|
@@ -179,6 +180,7 @@ describe('refineLayoutSize tests', () => {
|
|
|
179
180
|
};
|
|
180
181
|
|
|
181
182
|
const expected = {
|
|
183
|
+
totalCells: 140,
|
|
182
184
|
truncated: true,
|
|
183
185
|
header: [[]],
|
|
184
186
|
sections: [
|
|
@@ -260,6 +262,7 @@ describe('refineLayoutSize tests', () => {
|
|
|
260
262
|
};
|
|
261
263
|
|
|
262
264
|
const expected = {
|
|
265
|
+
totalCells: 140,
|
|
263
266
|
truncated: true,
|
|
264
267
|
header: [
|
|
265
268
|
[0, 0, 0],
|
|
@@ -310,6 +313,7 @@ describe('refineLayoutSize tests', () => {
|
|
|
310
313
|
};
|
|
311
314
|
|
|
312
315
|
const expected = {
|
|
316
|
+
totalCells: 57,
|
|
313
317
|
truncated: true,
|
|
314
318
|
header: [[0],[2]],
|
|
315
319
|
sections: [
|
|
@@ -349,6 +353,7 @@ describe('refineLayoutSize tests', () => {
|
|
|
349
353
|
};
|
|
350
354
|
|
|
351
355
|
const expected = {
|
|
356
|
+
totalCells: 64,
|
|
352
357
|
truncated:true,
|
|
353
358
|
header: [
|
|
354
359
|
[0, 0],
|
|
@@ -392,6 +397,7 @@ describe('refineLayoutSize tests', () => {
|
|
|
392
397
|
};
|
|
393
398
|
|
|
394
399
|
const expected = {
|
|
400
|
+
totalCells: 64,
|
|
395
401
|
truncated: true,
|
|
396
402
|
header: [
|
|
397
403
|
[0, 0],
|