@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.
@@ -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), function (name) {
60
- return R.isNil(timeFormat) ? name : (0, _date.getTimePeriodLabel)(locale, timeFormat)(R.prop('start', value));
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.2.2",
4
+ "version": "9.3.0",
5
5
  "main": "lib/index.js",
6
6
  "author": "OECD",
7
7
  "license": "MIT",
@@ -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 { getTimePeriodLabel } from './date';
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
- name => R.isNil(timeFormat) ? name : getTimePeriodLabel(locale, timeFormat)(R.prop('start', value))
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
  });