@sis-cc/dotstatsuite-components 9.2.2 → 9.3.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.
- package/lib/rules/src/date.js +59 -3
- package/lib/rules/src/preparators/getReportingYearStart.js +44 -0
- package/lib/rules/src/v8-transformer.js +10 -4
- package/package.json +1 -1
- package/src/rules/src/date.js +34 -1
- package/src/rules/src/preparators/getReportingYearStart.js +13 -0
- package/src/rules/src/v8-transformer.js +10 -3
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
|
+
};
|
|
@@ -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
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
|
+
};
|
|
@@ -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
|
});
|