@sis-cc/dotstatsuite-components 9.2.1 → 9.3.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.
@@ -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);
@@ -31,6 +35,24 @@ var indexesToLayoutData = function indexesToLayoutData(dimensions, indexes) {
31
35
  }, indexes);
32
36
  };
33
37
 
38
+ var parseParents = function parseParents(value, previous) {
39
+ var previousParents = R.pathOr([], ['value', 'parents'], previous);
40
+ var indexedParents = R.indexBy(R.identity, value.parents);
41
+
42
+ var refinedParents = R.reduce(function (acc, id) {
43
+ if (R.has(id, indexedParents)) {
44
+ return R.append(id, acc);
45
+ }
46
+ return acc;
47
+ }, [], R.append(R.path(['value', 'id'], previous), previousParents));
48
+ var lastParent = R.last(refinedParents);
49
+ var missingParents = R.takeLastWhile(function (id) {
50
+ return id !== lastParent;
51
+ }, value.parents);
52
+
53
+ return { parents: refinedParents, missingIds: missingParents };
54
+ };
55
+
34
56
  var getRowData = function getRowData(indexes, dimension) {
35
57
  return R.pipe(R.propOr([], 'values'), R.props(indexes), R.reduce(function (_ref, _value) {
36
58
  var data = _ref.data,
@@ -44,7 +66,6 @@ var getRowData = function getRowData(indexes, dimension) {
44
66
  return { data: R.append([raw], data), missingParents: {} };
45
67
  }
46
68
  var previous = R.head(R.last(data) || []);
47
-
48
69
  if (R.last(_value.parents) === R.path(['value', 'id'], previous)) {
49
70
  //previous is parent
50
71
  var _value2 = R.set(R.lensPath(['value', 'parents']), R.append(R.path(['value', 'id'], previous), R.pathOr([], ['value', 'parents'], previous)))(raw);
@@ -61,9 +82,10 @@ var getRowData = function getRowData(indexes, dimension) {
61
82
  return { data: R.append([_value3], data), missingParents: missingParents };
62
83
  }
63
84
 
64
- var missingIds = R.takeLastWhile(function (id) {
65
- return id !== R.path(['value', 'id'], previous);
66
- }, _value.parents);
85
+ var _parseParents = parseParents(_value, previous),
86
+ parents = _parseParents.parents,
87
+ missingIds = _parseParents.missingIds;
88
+
67
89
  var _missingParents = R.reduce(function (acc, value) {
68
90
  if (value.id !== R.head(acc.missingIds)) {
69
91
  return acc;
@@ -79,11 +101,11 @@ var getRowData = function getRowData(indexes, dimension) {
79
101
  }, { name: '', missingIds: missingIds }, dimension.values);
80
102
 
81
103
  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))
104
+ parents: parents,
105
+ name: R.isEmpty(missingIds) ? _value.name : _missingParents.name + ' > ' + _value.name
84
106
  }))(raw);
85
107
 
86
- return { data: R.append([value], data), missingParents: _missingParents };
108
+ return { data: R.append([value], data), missingParents: R.isEmpty(missingIds) ? {} : _missingParents };
87
109
  }, { data: [], missingParents: {} }), R.prop('data'))(dimension);
88
110
  };
89
111
 
@@ -118,10 +140,10 @@ var getRowsData = function getRowsData(rowsIndexes, dimensions) {
118
140
  return R.unnest(res);
119
141
  };
120
142
 
121
- var getLayoutData = exports.getLayoutData = function getLayoutData(layoutIndexes, layout) {
143
+ var getLayoutData = function getLayoutData(layoutIndexes, layout) {
122
144
  var header = layoutIndexes.header,
123
145
  sections = layoutIndexes.sections,
124
- truncated = layoutIndexes.truncated;
146
+ rest = (0, _objectWithoutProperties3.default)(layoutIndexes, ['header', 'sections']);
125
147
 
126
148
  var headerData = R.map(function (i) {
127
149
  return indexesToLayoutData(layout.header, i);
@@ -139,5 +161,6 @@ var getLayoutData = exports.getLayoutData = function getLayoutData(layoutIndexes
139
161
  return [sectionData, rowsData];
140
162
  }, sections);
141
163
 
142
- return { headerData: headerData, sectionsData: sectionsData, truncated: truncated };
143
- };
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.assoc('truncated', false, layoutIndexes);
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.assoc('truncated', false, layoutIndexes);
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.assoc('truncated', true, result);
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), 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.1",
4
+ "version": "9.3.2",
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.4.2",
23
+ "@sis-cc/dotstatsuite-visions": "^6.6.0",
24
24
  "date-fns": "^1.30.1",
25
25
  "glamor": "^2.20.40",
26
26
  "glamorous": "^4.13.1",
@@ -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
+ };
@@ -11,6 +11,26 @@ const indexesToLayoutData = (dimensions, indexes) => R.addIndex(R.map)(
11
11
  indexes
12
12
  );
13
13
 
14
+ const parseParents = (value, previous) => {
15
+ const previousParents = R.pathOr([], ['value', 'parents'], previous);
16
+ const indexedParents = R.indexBy(R.identity, value.parents);
17
+
18
+ const refinedParents = R.reduce(
19
+ (acc, id) => {
20
+ if (R.has(id, indexedParents)) {
21
+ return R.append(id, acc);
22
+ }
23
+ return acc;
24
+ },
25
+ [],
26
+ R.append(R.path(['value', 'id'], previous), previousParents)
27
+ );
28
+ const lastParent = R.last(refinedParents);
29
+ const missingParents = R.takeLastWhile(id => id !== lastParent, value.parents);
30
+
31
+ return ({ parents: refinedParents, missingIds: missingParents });
32
+ };
33
+
14
34
  const getRowData = (indexes, dimension) => {
15
35
  return R.pipe(
16
36
  R.propOr([], 'values'),
@@ -25,7 +45,6 @@ const getRowData = (indexes, dimension) => {
25
45
  return ({ data: R.append([raw], data), missingParents: {} });
26
46
  }
27
47
  const previous = R.head(R.last(data) || []);
28
-
29
48
  if (R.last(_value.parents) === R.path(['value', 'id'], previous)) { //previous is parent
30
49
  const value = R.set(
31
50
  R.lensPath(['value', 'parents']),
@@ -49,8 +68,7 @@ const getRowData = (indexes, dimension) => {
49
68
  )(raw);
50
69
  return ({ data: R.append([value], data), missingParents });
51
70
  }
52
-
53
- const missingIds = R.takeLastWhile(id => id !== R.path(['value', 'id'], previous), _value.parents);
71
+ const { parents, missingIds } = parseParents(_value, previous);
54
72
  const _missingParents = R.reduce(
55
73
  (acc, value) => {
56
74
  if (value.id !== R.head(acc.missingIds)) {
@@ -73,14 +91,12 @@ const getRowData = (indexes, dimension) => {
73
91
  R.lensProp('value'),
74
92
  {
75
93
  ..._value,
76
- name: `${_missingParents.name} > ${_value.name}`,
77
- parents: R.length(missingIds) === R.length(_value.parents)
78
- ? []
79
- : R.append(R.path(['value', 'id'], previous), R.pathOr([], ['value', 'parents'], previous))
94
+ parents,
95
+ name: R.isEmpty(missingIds) ? _value.name : `${_missingParents.name} > ${_value.name}`,
80
96
  }
81
97
  )(raw);
82
98
 
83
- return ({ data: R.append([value], data), missingParents: _missingParents });
99
+ return ({ data: R.append([value], data), missingParents: R.isEmpty(missingIds) ? {} : _missingParents });
84
100
  },
85
101
  { data: [], missingParents: {} }
86
102
  ),
@@ -134,7 +150,7 @@ const getRowsData = (rowsIndexes, dimensions) => {
134
150
  };
135
151
 
136
152
  export const getLayoutData = (layoutIndexes, layout) => {
137
- const { header, sections, truncated } = layoutIndexes;
153
+ const { header, sections, ...rest } = layoutIndexes;
138
154
  const headerData = R.map(i => indexesToLayoutData(layout.header, i), header);
139
155
 
140
156
  const sectionsData = R.map(
@@ -149,6 +165,5 @@ export const getLayoutData = (layoutIndexes, layout) => {
149
165
  sections
150
166
  );
151
167
 
152
- return ({ headerData, sectionsData, truncated });
168
+ return ({ headerData, sectionsData, ...rest });
153
169
  };
154
-
@@ -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.assoc('truncated', false, layoutIndexes);
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.assoc('truncated', false, layoutIndexes);
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.assoc('truncated', true, result);
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 { 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
  });
@@ -1,7 +1,7 @@
1
1
  import { expect } from 'chai';
2
2
  import { getLayoutData } from '../src/rules/src/table/factories/getLayoutData';
3
3
 
4
- describe('getLayoutData2 tests', () => {
4
+ describe('getLayoutData tests', () => {
5
5
  it ('simple single row diension case', () => {
6
6
  const layout = {
7
7
  header: [],
@@ -46,7 +46,9 @@ describe('getLayoutData2 tests', () => {
46
46
  { id: '3v0', name: '3V0' },
47
47
  { id: '3v0.0', name: '3V0.0', parents: ['3v0'] },
48
48
  { id: '3v0.0.0', name: '3V0.0.0', parents: ['3v0', '3v0.0'] },
49
- { id: '3v0.0.1', name: '3V0.0.1', parents: ['3v0', '3v0.0'] }
49
+ { id: '3v0.0.1', name: '3V0.0.1', parents: ['3v0', '3v0.0'] },
50
+ { id: '3v0.1', name: '3V0.1', parents: ['3v0'] },
51
+ { id: '3v0.1.0', name: '3V0.1.0', parents: ['3v0', '3v0.1'] }
50
52
  ]
51
53
  },
52
54
  ]
@@ -74,7 +76,9 @@ describe('getLayoutData2 tests', () => {
74
76
  [3, 0],
75
77
  [3, 1],
76
78
  [3, 2],
77
- [3, 3]
79
+ [3, 3],
80
+ [3, 4],
81
+ [3, 5]
78
82
  ]
79
83
  ],
80
84
  [
@@ -162,6 +166,14 @@ describe('getLayoutData2 tests', () => {
162
166
  [
163
167
  { dimension: { id: 'd2' }, value: { id: '2v0.0.1', name: '2V0.0.1', parents: ['2v0', '2v0.0'] } },
164
168
  { dimension: { id: 'd3' }, value: { id: '3v0.0.1', name: '3V0.0.1', parents: ['3v0', '3v0.0'] } }
169
+ ],
170
+ [
171
+ { dimension: { id: 'd2' }, value: { id: '2v0.0.1', name: '2V0.0.1', parents: ['2v0', '2v0.0'] } },
172
+ { dimension: { id: 'd3' }, value: { id: '3v0.1', name: '3V0.1', parents: ['3v0'] } }
173
+ ],
174
+ [
175
+ { dimension: { id: 'd2' }, value: { id: '2v0.0.1', name: '2V0.0.1', parents: ['2v0', '2v0.0'] } },
176
+ { dimension: { id: 'd3' }, value: { id: '3v0.1.0', name: '3V0.1.0', parents: ['3v0', '3v0.1'] } }
165
177
  ]
166
178
  ]
167
179
  ],
@@ -1306,6 +1306,7 @@ describe('getTableData tests', () => {
1306
1306
  observationsType: null
1307
1307
  })).to.deep.equal({
1308
1308
  truncated: false,
1309
+ totalCells: null,
1309
1310
  cells: {},
1310
1311
  headerData: [],
1311
1312
  sectionsData: [],
@@ -32406,5 +32406,6 @@
32406
32406
  ]
32407
32407
  ]
32408
32408
  ],
32409
- "truncated": false
32409
+ "truncated": false,
32410
+ "totalCells": 2754
32410
32411
  }
@@ -2757,5 +2757,6 @@
2757
2757
  ]
2758
2758
  ]
2759
2759
  ],
2760
- "truncated": false
2760
+ "truncated": false,
2761
+ "totalCells": 2754
2761
2762
  }