@sis-cc/dotstatsuite-components 17.1.0 → 17.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/layout.js +9 -2
- package/lib/rules/src/v8-transformer.js +13 -4
- package/lib/rules2/src/getManyValuesDimensions.js +1 -1
- package/lib/rules2/src/getOneValueDimensions.js +1 -1
- package/lib/rules2/src/index.js +9 -0
- package/lib/rules2/src/parseAttributes.js +2 -2
- package/lib/rules2/src/parseCombinations.js +4 -4
- package/lib/rules2/src/prepareData.js +10 -6
- package/lib/rules2/src/refineDimensions.js +39 -0
- package/lib/rules2/src/refineTimePeriod.js +146 -0
- package/lib/rules2/src/table/getLayout.js +3 -0
- package/package.json +1 -1
- package/src/rules/src/layout.js +6 -3
- package/src/rules/src/v8-transformer.js +21 -15
- package/src/rules2/src/getManyValuesDimensions.js +1 -1
- package/src/rules2/src/getOneValueDimensions.js +1 -1
- package/src/rules2/src/index.js +1 -0
- package/src/rules2/src/parseAttributes.js +2 -2
- package/src/rules2/src/parseCombinations.js +4 -4
- package/src/rules2/src/prepareData.js +8 -6
- package/src/rules2/src/refineDimensions.js +19 -0
- package/src/rules2/src/refineTimePeriod.js +122 -0
- package/src/rules2/src/table/getLayout.js +3 -0
- package/test/getOneValueDimensions.test.js +14 -11
- package/test/parseAttributes.test.js +7 -7
- package/test/parseCombinations.test.js +6 -6
- package/test/refineTimePeriod.test.js +564 -0
- package/test/refinedDimensions.test.js +35 -0
package/lib/rules/src/layout.js
CHANGED
|
@@ -11,10 +11,16 @@ var R = _interopRequireWildcard(_ramda);
|
|
|
11
11
|
|
|
12
12
|
var _constants = require('./constants');
|
|
13
13
|
|
|
14
|
+
var _src = require('../../rules2/src');
|
|
15
|
+
|
|
14
16
|
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; } }
|
|
15
17
|
|
|
16
18
|
var isTableLayoutCompatible = function isTableLayoutCompatible(data, layout) {
|
|
17
|
-
var
|
|
19
|
+
var dataquery = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
|
|
20
|
+
|
|
21
|
+
var multiValuesDimensions = R.pipe(R.pathOr([], ['structure', 'dimensions', 'observation']), function (dimensions) {
|
|
22
|
+
return (0, _src.refineDimensions)(dimensions, dataquery);
|
|
23
|
+
}, R.reject(R.prop('header')), R.pluck('id'))(data);
|
|
18
24
|
var dimensionsInLayout = R.pipe(R.values, R.unnest)(layout);
|
|
19
25
|
|
|
20
26
|
var dimensionsLength = R.length(multiValuesDimensions);
|
|
@@ -63,7 +69,8 @@ var isSharedLayoutCompatible = exports.isSharedLayoutCompatible = function isSha
|
|
|
63
69
|
var type = R.prop('type', sharedData);
|
|
64
70
|
if (type === 'table') {
|
|
65
71
|
var layoutIds = R.pathOr({}, ['config', 'table', 'layoutIds'], sharedData);
|
|
66
|
-
|
|
72
|
+
var dataquery = R.path(['config', 'sdmxSource', 'dataquery'], sharedData);
|
|
73
|
+
return isTableLayoutCompatible(sdmxData, layoutIds, dataquery);
|
|
67
74
|
}
|
|
68
75
|
var chartDimension = R.pathOr({}, ['config', 'chart', 'chartDimension'], sharedData);
|
|
69
76
|
return isChartLayoutCompatible(sdmxData, type, chartDimension);
|
|
@@ -27,6 +27,8 @@ var _getReportingYearStart = require('./preparators/getReportingYearStart');
|
|
|
27
27
|
|
|
28
28
|
var _src = require('../../rules2/src');
|
|
29
29
|
|
|
30
|
+
var _refineTimePeriod = require('../../rules2/src/refineTimePeriod');
|
|
31
|
+
|
|
30
32
|
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; } }
|
|
31
33
|
|
|
32
34
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -78,14 +80,14 @@ var dataTransformer = exports.dataTransformer = function dataTransformer(dataNew
|
|
|
78
80
|
end = reported.end;
|
|
79
81
|
var reportTimeNote = (0, _date.getReportedTimePeriodNote)(reportYearStart, start, end, options.frequency, options.isRtl);
|
|
80
82
|
notes = R.isNil(reportTimeNote) ? notes : R.append(reportTimeNote, notes);
|
|
81
|
-
__indexPosition =
|
|
83
|
+
//__indexPosition = dateFns.getTime(new Date(R.prop('start', value)));
|
|
82
84
|
}
|
|
83
85
|
if (isNaN(__indexPosition)) {
|
|
84
86
|
__indexPosition = (0, _dotstatsuiteSdmxjs.getCodeOrder)({ annotations: valueAnnotations });
|
|
85
87
|
}
|
|
86
88
|
var timeFormat = R.prop('timeFormat', options);
|
|
87
|
-
|
|
88
|
-
id: R.
|
|
89
|
+
var res = (0, _extends3.default)({}, value, {
|
|
90
|
+
id: R.when(R.isNil, R.always(parent + '-' + __index))(value.id),
|
|
89
91
|
display: !isHidden,
|
|
90
92
|
name: R.when(R.always(isTimeDimension), R.always((0, _date.getReportedTimePeriodLabel)(options.frequency, timeFormat, locale)(reportYearStart, { id: value.id, reportedStart: start, start: new Date(value.start) })))(name),
|
|
91
93
|
start: start ? start.toISOString() : null,
|
|
@@ -93,7 +95,14 @@ var dataTransformer = exports.dataTransformer = function dataTransformer(dataNew
|
|
|
93
95
|
__indexPosition: __indexPosition,
|
|
94
96
|
__index: __index
|
|
95
97
|
});
|
|
96
|
-
|
|
98
|
+
return isTimeDimension ? (0, _refineTimePeriod.refineTimePeriod)(res, { locale: locale }) : res;
|
|
99
|
+
}), R.ifElse(R.always(isTimeDimension), R.pipe(R.sortWith([R.ascend(function (val) {
|
|
100
|
+
return _dateFns2.default.getTime(new Date(R.prop('start', val)));
|
|
101
|
+
}), R.descend(function (val) {
|
|
102
|
+
return _dateFns2.default.getTime(new Date(R.prop('end', val)));
|
|
103
|
+
})]), R.addIndex(R.map)(function (val, ind) {
|
|
104
|
+
return R.assoc('__indexcPosition', ind, val);
|
|
105
|
+
})), R.sortWith([R.ascend(R.prop('__indexPosition')), R.ascend(R.propOr(-1, 'order'))])), R.addIndex(R.map)(function (val, index) {
|
|
97
106
|
return R.assoc('__indexPosition', index, val);
|
|
98
107
|
}),
|
|
99
108
|
/* NEW */
|
|
@@ -22,7 +22,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
22
22
|
var getManyValuesDimensions = exports.getManyValuesDimensions = function getManyValuesDimensions(dimensions, attributesSeries, customAttributes, combinations) {
|
|
23
23
|
var combConceptsIds = R.pipe(R.pluck('concepts'), R.unnest)(combinations);
|
|
24
24
|
return R.reduce(function (acc, dim) {
|
|
25
|
-
if (
|
|
25
|
+
if (dim.header) {
|
|
26
26
|
return acc;
|
|
27
27
|
}
|
|
28
28
|
var enhancedValues = R.map(function (val) {
|
|
@@ -39,7 +39,7 @@ var getOneValueDimensions = exports.getOneValueDimensions = function getOneValue
|
|
|
39
39
|
})(acc);
|
|
40
40
|
}, {}, attributes);
|
|
41
41
|
return R.reduce(function (acc, dim) {
|
|
42
|
-
if (
|
|
42
|
+
if (!dim.header) {
|
|
43
43
|
return acc;
|
|
44
44
|
}
|
|
45
45
|
var attrValues = R.propOr({}, dim.id, indexedRelevantAttributes);
|
package/lib/rules2/src/index.js
CHANGED
|
@@ -157,6 +157,15 @@ Object.defineProperty(exports, 'getCombinationDefinitions', {
|
|
|
157
157
|
}
|
|
158
158
|
});
|
|
159
159
|
|
|
160
|
+
var _refineDimensions = require('./refineDimensions');
|
|
161
|
+
|
|
162
|
+
Object.defineProperty(exports, 'refineDimensions', {
|
|
163
|
+
enumerable: true,
|
|
164
|
+
get: function get() {
|
|
165
|
+
return _refineDimensions.refineDimensions;
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
|
|
160
169
|
var _parseAttributes = require('./parseAttributes');
|
|
161
170
|
|
|
162
171
|
Object.defineProperty(exports, 'parseAttributes', {
|
|
@@ -39,8 +39,8 @@ var parseAttributes = exports.parseAttributes = function parseAttributes(attribu
|
|
|
39
39
|
return (0, _extends3.default)({}, res, { series: true, relationship: [] });
|
|
40
40
|
}
|
|
41
41
|
var seriesDimensions = R.pipe(R.pathOr([], ['relationship', 'dimensions']), R.filter(function (id) {
|
|
42
|
-
var
|
|
43
|
-
return
|
|
42
|
+
var dimension = R.prop(id, indexedDimensions);
|
|
43
|
+
return !dimension.header;
|
|
44
44
|
}))(attr);
|
|
45
45
|
if (R.length(seriesDimensions) > 0) {
|
|
46
46
|
return (0, _extends3.default)({}, res, { series: true, relationship: seriesDimensions });
|
|
@@ -42,11 +42,11 @@ var parseCombinations = exports.parseCombinations = function parseCombinations(c
|
|
|
42
42
|
return false;
|
|
43
43
|
}
|
|
44
44
|
if (R.has(concept, indexedDimensions)) {
|
|
45
|
-
var
|
|
46
|
-
relationship =
|
|
45
|
+
var dimension = R.prop(concept, indexedDimensions);
|
|
46
|
+
relationship = !dimension.header ? R.append(concept, relationship) : relationship;
|
|
47
47
|
ids = (0, _extends4.default)({}, ids, (0, _defineProperty3.default)({}, concept, concept));
|
|
48
|
-
displayable_values_count += R.length(values);
|
|
49
|
-
return
|
|
48
|
+
displayable_values_count += R.length(dimension.values || []);
|
|
49
|
+
return !dimension.header;
|
|
50
50
|
} else if (!R.has(concept, indexedAttributes)) {
|
|
51
51
|
return false;
|
|
52
52
|
}
|
|
@@ -11,6 +11,8 @@ var R = _interopRequireWildcard(_ramda);
|
|
|
11
11
|
|
|
12
12
|
var _src = require('../../rules/src');
|
|
13
13
|
|
|
14
|
+
var _refineDimensions = require('./refineDimensions');
|
|
15
|
+
|
|
14
16
|
var _enhanceObservations = require('./enhanceObservations');
|
|
15
17
|
|
|
16
18
|
var _parseAttributes = require('./parseAttributes');
|
|
@@ -53,9 +55,11 @@ var prepareData = exports.prepareData = function prepareData(sdmxJson, _ref) {
|
|
|
53
55
|
hierarchies = _ref.hierarchies,
|
|
54
56
|
dataflow = _ref.dataflow,
|
|
55
57
|
display = _ref.display,
|
|
56
|
-
defaultCombinations = _ref.defaultCombinations
|
|
58
|
+
defaultCombinations = _ref.defaultCombinations,
|
|
59
|
+
dataquery = _ref.dataquery;
|
|
57
60
|
|
|
58
61
|
var dimensions = R.pathOr([], ['data', 'structure', 'dimensions', 'observation'], sdmxJson);
|
|
62
|
+
var refinedDimensions = (0, _refineDimensions.refineDimensions)(dimensions, dataquery);
|
|
59
63
|
var attributes = R.pathOr([], ['data', 'structure', 'attributes', 'observation'], sdmxJson);
|
|
60
64
|
var annotations = R.pathOr([], ['data', 'structure', 'annotations'], sdmxJson);
|
|
61
65
|
var observations = (0, _src.getObservations)(sdmxJson);
|
|
@@ -68,15 +72,15 @@ var prepareData = exports.prepareData = function prepareData(sdmxJson, _ref) {
|
|
|
68
72
|
}
|
|
69
73
|
var metadataCoordinates = (0, _getMetadataCoordinates.getMetadataCoordinates)(sdmxJson);
|
|
70
74
|
|
|
71
|
-
var parsedAttributes = (0, _parseAttributes.parseAttributes)(attributes,
|
|
72
|
-
var parsedCombinations = (0, _parseCombinations.parseCombinations)(combinations, parsedAttributes,
|
|
75
|
+
var parsedAttributes = (0, _parseAttributes.parseAttributes)(attributes, refinedDimensions, customAttributes);
|
|
76
|
+
var parsedCombinations = (0, _parseCombinations.parseCombinations)(combinations, parsedAttributes, refinedDimensions);
|
|
73
77
|
var seriesCombinations = R.filter(R.prop('series'), parsedCombinations);
|
|
74
78
|
var refinedAttributes = (0, _refineAttributes.refineAttributes)(parsedAttributes, seriesCombinations);
|
|
75
79
|
|
|
76
|
-
var enhancedObservations = (0, _enhanceObservations.enhanceObservations)(
|
|
80
|
+
var enhancedObservations = (0, _enhanceObservations.enhanceObservations)(refinedDimensions, observations, refinedAttributes, { customAttributes: customAttributes });
|
|
77
81
|
var attributesSeries = (0, _getAttributesSeries.getAttributesSeries)(enhancedObservations);
|
|
78
|
-
var manyValuesDimensions = (0, _getManyValuesDimensions.getManyValuesDimensions)(
|
|
79
|
-
var oneValueDimensions = (0, _getOneValueDimensions.getOneValueDimensions)(
|
|
82
|
+
var manyValuesDimensions = (0, _getManyValuesDimensions.getManyValuesDimensions)(refinedDimensions, attributesSeries, customAttributes, seriesCombinations);
|
|
83
|
+
var oneValueDimensions = (0, _getOneValueDimensions.getOneValueDimensions)(refinedDimensions, parsedAttributes);
|
|
80
84
|
var headerCoordinates = (0, _getHeaderCoordinates.getHeaderCoordinates)(oneValueDimensions);
|
|
81
85
|
var hierarchisedDimensions = R.map(function (dim) {
|
|
82
86
|
if (R.isEmpty(R.propOr({}, dim.id, hierarchies))) {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.refineDimensions = undefined;
|
|
7
|
+
|
|
8
|
+
var _extends2 = require('babel-runtime/helpers/extends');
|
|
9
|
+
|
|
10
|
+
var _extends3 = _interopRequireDefault(_extends2);
|
|
11
|
+
|
|
12
|
+
var _ramda = require('ramda');
|
|
13
|
+
|
|
14
|
+
var R = _interopRequireWildcard(_ramda);
|
|
15
|
+
|
|
16
|
+
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; } }
|
|
17
|
+
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
|
+
var refineDimensions = exports.refineDimensions = function refineDimensions() {
|
|
21
|
+
var dimensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
22
|
+
var dataquery = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
23
|
+
|
|
24
|
+
var selectionIds = R.pipe(R.split('.'), R.map(R.split('+')))(dataquery);
|
|
25
|
+
|
|
26
|
+
return R.addIndex(R.map)(function (dim, index) {
|
|
27
|
+
var selection = R.nth(index, selectionIds);
|
|
28
|
+
if (R.isNil(selection) || R.length(selection) === 0 || R.isEmpty(R.head(selection))) {
|
|
29
|
+
return (0, _extends3.default)({}, dim, { header: R.length(dim.values || []) <= 1 });
|
|
30
|
+
}
|
|
31
|
+
var values = R.map(function (val) {
|
|
32
|
+
if (R.includes(val.id, selection)) {
|
|
33
|
+
return val;
|
|
34
|
+
}
|
|
35
|
+
return R.assoc('empty', true, val);
|
|
36
|
+
}, dim.values || []);
|
|
37
|
+
return (0, _extends3.default)({}, dim, { values: values, header: R.length(values) <= 1 || R.length(selection) === 1 });
|
|
38
|
+
}, dimensions);
|
|
39
|
+
};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.refineTimePeriod = exports.getStartDate = 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
|
+
var _dateFns = require('date-fns');
|
|
21
|
+
|
|
22
|
+
var dateFns = _interopRequireWildcard(_dateFns);
|
|
23
|
+
|
|
24
|
+
var _date = require('../../rules/src/date');
|
|
25
|
+
|
|
26
|
+
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
|
+
|
|
28
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
+
|
|
30
|
+
var computeDisplayFreq = function computeDisplayFreq(start, duration) {
|
|
31
|
+
var startMinute = dateFns.startOfMinute(start);
|
|
32
|
+
var startHour = dateFns.startOfHour(start);
|
|
33
|
+
var startDay = dateFns.startOfDay(start);
|
|
34
|
+
if (!dateFns.isEqual(start, startMinute) || duration === 'S') {
|
|
35
|
+
return 'S';
|
|
36
|
+
} else if (!dateFns.isEqual(start, startHour) || !dateFns.isEqual(start, startDay) || duration === 'H' || duration === 'm') {
|
|
37
|
+
return 'm';
|
|
38
|
+
} else if (!dateFns.isFirstDayOfMonth(start) || duration === 'D') {
|
|
39
|
+
return 'D';
|
|
40
|
+
} else if (dateFns.getMonth(start) !== 0 || duration === 'M') {
|
|
41
|
+
return 'M';
|
|
42
|
+
}
|
|
43
|
+
return 'Y';
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
var getAdder = function getAdder(duration) {
|
|
47
|
+
if (duration === 'S') return dateFns.addSeconds;
|
|
48
|
+
if (duration === 'm') return dateFns.addMinutes;
|
|
49
|
+
if (duration === 'H') return dateFns.addHours;
|
|
50
|
+
if (duration === 'D') return dateFns.addDays;
|
|
51
|
+
if (duration === 'M') return dateFns.addMonths;
|
|
52
|
+
return dateFns.addYears;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
var getFormat = function getFormat(freqDisplay) {
|
|
56
|
+
if (freqDisplay === 'Y') return 'YYYY';
|
|
57
|
+
if (freqDisplay === 'D') return 'YYYY-MM-DD';
|
|
58
|
+
if (freqDisplay === 'H' || freqDisplay === 'm') {
|
|
59
|
+
return 'HH:mm';
|
|
60
|
+
}
|
|
61
|
+
if (freqDisplay === 'S') {
|
|
62
|
+
return 'HH:mm:ss';
|
|
63
|
+
}
|
|
64
|
+
return 'MMM';
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
var getEndDate = function getEndDate(start, mult, duration) {
|
|
68
|
+
var adder = getAdder(duration);
|
|
69
|
+
var endDate = adder(start, Number(mult));
|
|
70
|
+
var startTZ = start.getTimezoneOffset();
|
|
71
|
+
var endTZ = endDate.getTimezoneOffset();
|
|
72
|
+
if (startTZ !== endTZ) {
|
|
73
|
+
endDate = dateFns.addMinutes(endDate, Math.abs(endTZ) - Math.abs(startTZ));
|
|
74
|
+
}
|
|
75
|
+
return dateFns.subSeconds(endDate, 1);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
var computeName = function computeName(start, end, freqDisplay, locale) {
|
|
79
|
+
var opts = { locale: (0, _date.getLocale)(locale) };
|
|
80
|
+
var isSameDay = dateFns.isSameDay(start, end);
|
|
81
|
+
var isSameYear = dateFns.isSameYear(start, end);
|
|
82
|
+
if (freqDisplay === 'H' || freqDisplay === 'm' || freqDisplay === 'S') {
|
|
83
|
+
var dayFormat = getFormat('D');
|
|
84
|
+
var timeFormat = getFormat(freqDisplay);
|
|
85
|
+
if (isSameDay) return dateFns.format(start, dayFormat, opts) + ' ' + dateFns.format(start, timeFormat, opts) + ' - ' + dateFns.format(end, timeFormat, opts);
|
|
86
|
+
return dateFns.format(start, dayFormat + ' ' + timeFormat, opts) + ' - ' + dateFns.format(end, dayFormat + ' ' + timeFormat, opts);
|
|
87
|
+
}
|
|
88
|
+
if (freqDisplay === 'D' || freqDisplay === 'Y') {
|
|
89
|
+
var _format = getFormat(freqDisplay);
|
|
90
|
+
return dateFns.format(start, _format, opts) + ' - ' + dateFns.format(end, _format, opts);
|
|
91
|
+
}
|
|
92
|
+
var yearFormat = getFormat('Y');
|
|
93
|
+
var monthFormat = getFormat('M');
|
|
94
|
+
if (isSameYear && locale === 'fr') {
|
|
95
|
+
return dateFns.format(start, monthFormat, opts) + ' - ' + dateFns.format(end, monthFormat, opts) + ' ' + dateFns.format(start, yearFormat, opts);
|
|
96
|
+
}
|
|
97
|
+
var format = locale === 'fr' ? monthFormat + ' ' + yearFormat : yearFormat + '-' + monthFormat;
|
|
98
|
+
return dateFns.format(start, format, opts) + ' - ' + dateFns.format(end, format, opts);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
var getStartDate = exports.getStartDate = function getStartDate(start) {
|
|
102
|
+
if (!R.includes('T', start) && !R.endsWith('Z', start)) {
|
|
103
|
+
return new Date(start);
|
|
104
|
+
}
|
|
105
|
+
var date = new Date(start);
|
|
106
|
+
return dateFns.addMinutes(date, -date.getTimezoneOffset());
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
var refineTimePeriod = exports.refineTimePeriod = function refineTimePeriod(timePeriod, _ref) {
|
|
110
|
+
var locale = _ref.locale;
|
|
111
|
+
var id = timePeriod.id;
|
|
112
|
+
|
|
113
|
+
var split = R.split('/', id);
|
|
114
|
+
if (R.length(split) !== 2) {
|
|
115
|
+
var _start = getStartDate(R.prop('start', timePeriod));
|
|
116
|
+
var end = getStartDate(R.prop('end', timePeriod));
|
|
117
|
+
return (0, _extends3.default)({}, timePeriod, { start: _start.toISOString(), end: end.toISOString() });
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
var _split = (0, _slicedToArray3.default)(split, 2),
|
|
121
|
+
start = _split[0],
|
|
122
|
+
range = _split[1];
|
|
123
|
+
|
|
124
|
+
var startDate = getStartDate(start);
|
|
125
|
+
var match = R.match(/^P(T?)(\d+)([YMDHS])$/, range);
|
|
126
|
+
if (R.isEmpty(match) || !dateFns.isValid(startDate)) {
|
|
127
|
+
return timePeriod;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
var _R$tail = R.tail(match),
|
|
131
|
+
_R$tail2 = (0, _slicedToArray3.default)(_R$tail, 3),
|
|
132
|
+
timeIndicator = _R$tail2[0],
|
|
133
|
+
mult = _R$tail2[1],
|
|
134
|
+
_duration = _R$tail2[2];
|
|
135
|
+
|
|
136
|
+
var duration = !R.isEmpty(timeIndicator) && _duration === 'M' ? 'm' : _duration;
|
|
137
|
+
var endDate = getEndDate(startDate, mult, duration);
|
|
138
|
+
var freqDisplay = computeDisplayFreq(start, duration);
|
|
139
|
+
var name = computeName((0, _date.dateWithoutTZ)(startDate), (0, _date.dateWithoutTZ)(endDate), freqDisplay, locale);
|
|
140
|
+
return (0, _extends3.default)({}, timePeriod, {
|
|
141
|
+
id: id,
|
|
142
|
+
name: name,
|
|
143
|
+
start: startDate.toISOString(),
|
|
144
|
+
end: endDate.toISOString()
|
|
145
|
+
});
|
|
146
|
+
};
|
|
@@ -79,6 +79,9 @@ var getLayout = exports.getLayout = function getLayout(layoutIds, dimensions, co
|
|
|
79
79
|
if (R.has(id, conceptIds)) {
|
|
80
80
|
return acc;
|
|
81
81
|
}
|
|
82
|
+
if (!R.has(id, indexedDimensions)) {
|
|
83
|
+
return acc;
|
|
84
|
+
}
|
|
82
85
|
return R.append(R.prop(id, indexedDimensions), acc);
|
|
83
86
|
}, [], layoutIds[key]);
|
|
84
87
|
return R.concat(rest, combs);
|
package/package.json
CHANGED
package/src/rules/src/layout.js
CHANGED
|
@@ -6,11 +6,13 @@ import {
|
|
|
6
6
|
STACKED_ROW,
|
|
7
7
|
V_SYMBOL
|
|
8
8
|
} from './constants';
|
|
9
|
+
import { refineDimensions } from '../../rules2/src';
|
|
9
10
|
|
|
10
|
-
const isTableLayoutCompatible = (data, layout) => {
|
|
11
|
+
const isTableLayoutCompatible = (data, layout, dataquery='') => {
|
|
11
12
|
const multiValuesDimensions = R.pipe(
|
|
12
13
|
R.pathOr([], ['structure', 'dimensions', 'observation']),
|
|
13
|
-
|
|
14
|
+
dimensions => refineDimensions(dimensions, dataquery),
|
|
15
|
+
R.reject(R.prop('header')),
|
|
14
16
|
R.pluck('id')
|
|
15
17
|
)(data);
|
|
16
18
|
const dimensionsInLayout = R.pipe(R.values, R.unnest)(layout);
|
|
@@ -82,7 +84,8 @@ export const isSharedLayoutCompatible = (sdmxData, sharedData) => {
|
|
|
82
84
|
const type = R.prop('type', sharedData);
|
|
83
85
|
if (type === 'table') {
|
|
84
86
|
const layoutIds = R.pathOr({}, ['config', 'table', 'layoutIds'], sharedData);
|
|
85
|
-
|
|
87
|
+
const dataquery = R.path(['config', 'sdmxSource', 'dataquery'], sharedData);
|
|
88
|
+
return isTableLayoutCompatible(sdmxData, layoutIds, dataquery);
|
|
86
89
|
}
|
|
87
90
|
const chartDimension = R.pathOr({}, ['config', 'chart', 'chartDimension'], sharedData);
|
|
88
91
|
return isChartLayoutCompatible(sdmxData, type, chartDimension);
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
import { getReportedTimePeriodLabel, getReportedTimePeriodNote, getReportedTimePeriod } from './date';
|
|
8
8
|
import { getReportingYearStart } from './preparators/getReportingYearStart';
|
|
9
9
|
import { getNotDisplayedIds } from '../../rules2/src';
|
|
10
|
+
import { refineTimePeriod } from '../../rules2/src/refineTimePeriod';
|
|
10
11
|
|
|
11
12
|
const TIME_PERIOD_ID = 'TIME_PERIOD';
|
|
12
13
|
|
|
@@ -55,23 +56,17 @@ export const dataTransformer = (dataNew, options = {}) => {
|
|
|
55
56
|
end = reported.end;
|
|
56
57
|
const reportTimeNote = getReportedTimePeriodNote(reportYearStart, start, end, options.frequency, options.isRtl);
|
|
57
58
|
notes = R.isNil(reportTimeNote) ? notes : R.append(reportTimeNote, notes);
|
|
58
|
-
__indexPosition = dateFns.getTime(new Date(R.prop('start', value)));
|
|
59
|
+
//__indexPosition = dateFns.getTime(new Date(R.prop('start', value)));
|
|
59
60
|
}
|
|
60
61
|
if (isNaN(__indexPosition)) {
|
|
61
62
|
__indexPosition = getCodeOrder({ annotations: valueAnnotations });
|
|
62
63
|
}
|
|
63
64
|
const timeFormat = R.prop('timeFormat', options);
|
|
64
|
-
|
|
65
|
+
const res = ({
|
|
65
66
|
...value,
|
|
66
|
-
id: R.
|
|
67
|
-
R.
|
|
68
|
-
|
|
69
|
-
R.always(`${parent}-${__index}`)
|
|
70
|
-
),
|
|
71
|
-
R.when(
|
|
72
|
-
R.always(isTimeDimension),
|
|
73
|
-
R.replace(/M/g, '')
|
|
74
|
-
)
|
|
67
|
+
id: R.when(
|
|
68
|
+
R.isNil,
|
|
69
|
+
R.always(`${parent}-${__index}`)
|
|
75
70
|
)(value.id),
|
|
76
71
|
display: !isHidden,
|
|
77
72
|
name: R.when(
|
|
@@ -83,11 +78,22 @@ export const dataTransformer = (dataNew, options = {}) => {
|
|
|
83
78
|
__indexPosition,
|
|
84
79
|
__index,
|
|
85
80
|
});
|
|
81
|
+
return isTimeDimension ? refineTimePeriod(res, { locale }) : res;
|
|
86
82
|
}),
|
|
87
|
-
R.
|
|
88
|
-
R.
|
|
89
|
-
R.
|
|
90
|
-
|
|
83
|
+
R.ifElse(
|
|
84
|
+
R.always(isTimeDimension),
|
|
85
|
+
R.pipe(
|
|
86
|
+
R.sortWith([
|
|
87
|
+
R.ascend(val => dateFns.getTime(new Date(R.prop('start', val)))),
|
|
88
|
+
R.descend(val => dateFns.getTime(new Date(R.prop('end', val)))),
|
|
89
|
+
]),
|
|
90
|
+
R.addIndex(R.map)((val, ind) => R.assoc('__indexcPosition', ind, val))
|
|
91
|
+
),
|
|
92
|
+
R.sortWith([
|
|
93
|
+
R.ascend(R.prop('__indexPosition')),
|
|
94
|
+
R.ascend(R.propOr(-1, 'order'))
|
|
95
|
+
])
|
|
96
|
+
),
|
|
91
97
|
R.addIndex(R.map)((val, index) => R.assoc('__indexPosition', index, val)),
|
|
92
98
|
/* NEW */
|
|
93
99
|
R.sortBy(R.prop('__index'))
|
|
@@ -5,7 +5,7 @@ export const getManyValuesDimensions = (dimensions, attributesSeries, customAttr
|
|
|
5
5
|
const combConceptsIds = R.pipe(R.pluck('concepts'), R.unnest)(combinations);
|
|
6
6
|
return R.reduce(
|
|
7
7
|
(acc, dim) => {
|
|
8
|
-
if (
|
|
8
|
+
if (dim.header) {
|
|
9
9
|
return acc;
|
|
10
10
|
}
|
|
11
11
|
const enhancedValues = R.map(val => {
|
|
@@ -22,7 +22,7 @@ export const getOneValueDimensions = (dimensions, attributes) => {
|
|
|
22
22
|
);
|
|
23
23
|
return R.reduce(
|
|
24
24
|
(acc, dim) => {
|
|
25
|
-
if (
|
|
25
|
+
if (!dim.header) {
|
|
26
26
|
return acc;
|
|
27
27
|
}
|
|
28
28
|
const attrValues = R.propOr({}, dim.id, indexedRelevantAttributes);
|
package/src/rules2/src/index.js
CHANGED
|
@@ -18,6 +18,7 @@ export { hierarchiseDimensionWithAdvancedHierarchy } from './hierarchiseDimensio
|
|
|
18
18
|
export { hierarchiseDimensionWithNativeHierarchy } from './hierarchiseDimensionWithNativeHierarchy';
|
|
19
19
|
export { getDimensionValuesIndexes } from './getDimensionValuesIndexes';
|
|
20
20
|
export { getCombinationDefinitions } from './getCombinationDefinitions';
|
|
21
|
+
export { refineDimensions } from './refineDimensions';
|
|
21
22
|
export { parseAttributes } from './parseAttributes';
|
|
22
23
|
export { parseCombinations } from './parseCombinations';
|
|
23
24
|
export { refineAttributes } from './refineAttributes';
|
|
@@ -24,8 +24,8 @@ export const parseAttributes = (attributes, dimensions, customAttributes) => {
|
|
|
24
24
|
const seriesDimensions = R.pipe(
|
|
25
25
|
R.pathOr([], ['relationship', 'dimensions']),
|
|
26
26
|
R.filter(id => {
|
|
27
|
-
const
|
|
28
|
-
return
|
|
27
|
+
const dimension = R.prop(id, indexedDimensions);
|
|
28
|
+
return !dimension.header;
|
|
29
29
|
}),
|
|
30
30
|
)(attr);
|
|
31
31
|
if (R.length(seriesDimensions) > 0) {
|
|
@@ -21,11 +21,11 @@ export const parseCombinations = (combinations, parsedAttributes, dimensions) =>
|
|
|
21
21
|
return false;
|
|
22
22
|
}
|
|
23
23
|
if (R.has(concept, indexedDimensions)) {
|
|
24
|
-
const
|
|
25
|
-
relationship =
|
|
24
|
+
const dimension = R.prop(concept, indexedDimensions);
|
|
25
|
+
relationship = !dimension.header ? R.append(concept, relationship) : relationship;
|
|
26
26
|
ids = { ...ids, [concept]: concept };
|
|
27
|
-
displayable_values_count += R.length(values);
|
|
28
|
-
return
|
|
27
|
+
displayable_values_count += R.length(dimension.values || []);
|
|
28
|
+
return !dimension.header;
|
|
29
29
|
}
|
|
30
30
|
else if (!R.has(concept, indexedAttributes)) {
|
|
31
31
|
return false;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as R from 'ramda';
|
|
2
2
|
import { getObservations } from '../../rules/src';
|
|
3
|
+
import { refineDimensions } from './refineDimensions';
|
|
3
4
|
import { enhanceObservations } from './enhanceObservations';
|
|
4
5
|
import { parseAttributes } from './parseAttributes';
|
|
5
6
|
import { getCombinationDefinitions, parseCombinationDefinition } from './getCombinationDefinitions';
|
|
@@ -18,8 +19,9 @@ import { getHeaderSubtitle } from './getHeaderSubtitle';
|
|
|
18
19
|
import { getHeaderCombinations } from './getHeaderCombinations';
|
|
19
20
|
import { getHeaderCoordinates } from './getHeaderCoordinates';
|
|
20
21
|
|
|
21
|
-
export const prepareData = (sdmxJson, { customAttributes, locale, hierarchies, dataflow, display, defaultCombinations }) => {
|
|
22
|
+
export const prepareData = (sdmxJson, { customAttributes, locale, hierarchies, dataflow, display, defaultCombinations, dataquery }) => {
|
|
22
23
|
const dimensions = R.pathOr([], ['data', 'structure', 'dimensions', 'observation'], sdmxJson);
|
|
24
|
+
const refinedDimensions = refineDimensions(dimensions, dataquery);
|
|
23
25
|
const attributes = R.pathOr([], ['data', 'structure', 'attributes', 'observation'], sdmxJson);
|
|
24
26
|
const annotations = R.pathOr([], ['data', 'structure', 'annotations'], sdmxJson);
|
|
25
27
|
const observations = getObservations(sdmxJson);
|
|
@@ -30,15 +32,15 @@ export const prepareData = (sdmxJson, { customAttributes, locale, hierarchies, d
|
|
|
30
32
|
}
|
|
31
33
|
const metadataCoordinates = getMetadataCoordinates(sdmxJson);
|
|
32
34
|
|
|
33
|
-
const parsedAttributes = parseAttributes(attributes,
|
|
34
|
-
const parsedCombinations = parseCombinations(combinations, parsedAttributes,
|
|
35
|
+
const parsedAttributes = parseAttributes(attributes, refinedDimensions, customAttributes);
|
|
36
|
+
const parsedCombinations = parseCombinations(combinations, parsedAttributes, refinedDimensions);
|
|
35
37
|
const seriesCombinations = R.filter(R.prop('series'), parsedCombinations);
|
|
36
38
|
const refinedAttributes = refineAttributes(parsedAttributes, seriesCombinations);
|
|
37
39
|
|
|
38
|
-
const enhancedObservations = enhanceObservations(
|
|
40
|
+
const enhancedObservations = enhanceObservations(refinedDimensions, observations, refinedAttributes, { customAttributes });
|
|
39
41
|
const attributesSeries = getAttributesSeries(enhancedObservations);
|
|
40
|
-
const manyValuesDimensions = getManyValuesDimensions(
|
|
41
|
-
const oneValueDimensions = getOneValueDimensions(
|
|
42
|
+
const manyValuesDimensions = getManyValuesDimensions(refinedDimensions, attributesSeries, customAttributes, seriesCombinations);
|
|
43
|
+
const oneValueDimensions = getOneValueDimensions(refinedDimensions, parsedAttributes);
|
|
42
44
|
const headerCoordinates = getHeaderCoordinates(oneValueDimensions);
|
|
43
45
|
const hierarchisedDimensions = R.map(dim => {
|
|
44
46
|
if (R.isEmpty(R.propOr({}, dim.id, hierarchies))) {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as R from 'ramda';
|
|
2
|
+
|
|
3
|
+
export const refineDimensions = (dimensions=[], dataquery='') => {
|
|
4
|
+
const selectionIds = R.pipe(R.split('.'), R.map(R.split('+')))(dataquery);
|
|
5
|
+
|
|
6
|
+
return R.addIndex(R.map)((dim, index) => {
|
|
7
|
+
const selection = R.nth(index, selectionIds);
|
|
8
|
+
if (R.isNil(selection) || R.length(selection) === 0 || R.isEmpty(R.head(selection))) {
|
|
9
|
+
return { ...dim, header: R.length(dim.values || []) <= 1 };
|
|
10
|
+
}
|
|
11
|
+
const values = R.map(val => {
|
|
12
|
+
if (R.includes(val.id, selection)) {
|
|
13
|
+
return val;
|
|
14
|
+
}
|
|
15
|
+
return R.assoc('empty', true, val);
|
|
16
|
+
}, dim.values || []);
|
|
17
|
+
return { ...dim, values, header: R.length(values) <= 1 || R.length(selection) === 1 };
|
|
18
|
+
}, dimensions);
|
|
19
|
+
};
|