@sis-cc/dotstatsuite-components 13.4.2 → 13.5.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.
- package/lib/rules/src/date.js +54 -1
- package/lib/rules/src/header/getDefaultSubtitle.js +1 -1
- package/lib/rules/src/header/getSubtitleFlags.js +1 -1
- package/lib/rules/src/table/factories/getCells.js +6 -2
- package/lib/rules/src/table/preparators/getManyValuesDimensions.js +1 -1
- package/lib/rules/src/v8-transformer.js +8 -4
- package/lib/rules2/src/getMSDInformations.js +4 -2
- package/lib/rules2/src/parseMetadataSeries.js +1 -1
- package/package.json +1 -1
- package/src/rules/src/date.js +54 -1
- package/src/rules/src/header/getDefaultSubtitle.js +1 -1
- package/src/rules/src/header/getSubtitleFlags.js +1 -1
- package/src/rules/src/table/factories/getCells.js +3 -2
- package/src/rules/src/table/preparators/getManyValuesDimensions.js +1 -1
- package/src/rules/src/v8-transformer.js +9 -5
- package/src/rules2/src/getMSDInformations.js +5 -3
- package/src/rules2/src/parseMetadataSeries.js +1 -1
- package/test/getMSDInformations.test.js +21 -21
- package/test/mocks/MSD_TEST.json +6 -0
- package/test/parseMetadataSeries.test.js +28 -28
package/lib/rules/src/date.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getTimePeriodLabel = exports.getReportedTimePeriodLabel = exports.getLocale = undefined;
|
|
6
|
+
exports.getTimePeriodLabel = exports.getReportedTimePeriodNote = exports.getReportedTimePeriod = exports.getReportedTimePeriodLabel = exports.getLocale = undefined;
|
|
7
7
|
|
|
8
8
|
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
|
9
9
|
|
|
@@ -119,6 +119,59 @@ var getReportedTimePeriodLabel = exports.getReportedTimePeriodLabel = function g
|
|
|
119
119
|
};
|
|
120
120
|
};
|
|
121
121
|
|
|
122
|
+
var getReportedTimePeriod = exports.getReportedTimePeriod = function getReportedTimePeriod(reportYearStart, value, freq) {
|
|
123
|
+
var start = new Date(R.prop('start', value));
|
|
124
|
+
var end = new Date(R.prop('end', value));
|
|
125
|
+
if (reportYearStart.month === '01' && reportYearStart.day === '01') {
|
|
126
|
+
return { start: start, end: end };
|
|
127
|
+
}
|
|
128
|
+
start = _dateFns2.default.addMinutes(start, start.getTimezoneOffset());
|
|
129
|
+
start = _dateFns2.default.addMonths(start, reportYearStart.month - 1);
|
|
130
|
+
start = _dateFns2.default.addDays(start, reportYearStart.day - 1);
|
|
131
|
+
if (freq === 'A') {
|
|
132
|
+
end = _dateFns2.default.addYears(start, 1);
|
|
133
|
+
}
|
|
134
|
+
if (freq === 'S') {
|
|
135
|
+
end = _dateFns2.default.addMonths(start, 6);
|
|
136
|
+
}
|
|
137
|
+
if (freq === 'Q') {
|
|
138
|
+
end = _dateFns2.default.addMonths(start, 3);
|
|
139
|
+
}
|
|
140
|
+
if (freq === 'M') {
|
|
141
|
+
end = _dateFns2.default.addMonths(start, 6);
|
|
142
|
+
}
|
|
143
|
+
if (freq === 'W' || freq === 'B') {
|
|
144
|
+
end = _dateFns2.default.addDays(start, 7);
|
|
145
|
+
}
|
|
146
|
+
if (freq === 'D') {
|
|
147
|
+
end = _dateFns2.default.addDays(start, 1);
|
|
148
|
+
}
|
|
149
|
+
if (freq === 'H') {
|
|
150
|
+
end = _dateFns2.default.addHours(start, 1);
|
|
151
|
+
}
|
|
152
|
+
if (freq === 'N') {
|
|
153
|
+
end = _dateFns2.default.addMinutes(start, 1);
|
|
154
|
+
}
|
|
155
|
+
end = _dateFns2.default.subSeconds(end, 1);
|
|
156
|
+
return { start: start, end: end };
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
var getReportedTimePeriodNote = exports.getReportedTimePeriodNote = function getReportedTimePeriodNote(reportYearStart, start, end, freq) {
|
|
160
|
+
if (reportYearStart.month === '01' && reportYearStart.day === '01') {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
if (R.includes(freq, ['D', 'H', 'N'])) {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
var isFirstDayOfMonth = _dateFns2.default.isFirstDayOfMonth(start);
|
|
167
|
+
if (freq === 'M' && isFirstDayOfMonth) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
var formatedStart = _dateFns2.default.format(start, 'YYYY-MM-DD');
|
|
171
|
+
var formatedEnd = _dateFns2.default.format(end, 'YYYY-MM-DD');
|
|
172
|
+
return { label: formatedStart + ' - ' + formatedEnd };
|
|
173
|
+
};
|
|
174
|
+
|
|
122
175
|
var getTimePeriodLabel = exports.getTimePeriodLabel = function getTimePeriodLabel(locale) {
|
|
123
176
|
var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'YYYY MMM';
|
|
124
177
|
return R.pipe(R.when(R.isNil, R.always('')), R.when(isValidDate, formaterPeriod(locale, format)));
|
|
@@ -39,7 +39,7 @@ var getDefaultSubtitle = exports.getDefaultSubtitle = function getDefaultSubtitl
|
|
|
39
39
|
return acc;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
var flags = _getFlags({ attributes: R.propOr({}, 'attributes', value) });
|
|
42
|
+
var flags = _getFlags({ attributes: R.propOr({}, 'attributes', value), notes: R.propOr([], 'notes', value) });
|
|
43
43
|
|
|
44
44
|
return R.append({
|
|
45
45
|
header: formatter(dim) + ':',
|
|
@@ -39,7 +39,7 @@ var getSubtitleFlags = exports.getSubtitleFlags = function getSubtitleFlags(_ref
|
|
|
39
39
|
return acc;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
var flags = _getFlags({ attributes: R.propOr({}, 'attributes', value) });
|
|
42
|
+
var flags = _getFlags({ attributes: R.propOr({}, 'attributes', value), notes: R.propOr([], 'notes', value) });
|
|
43
43
|
if (R.isEmpty(flags)) {
|
|
44
44
|
return acc;
|
|
45
45
|
}
|
|
@@ -32,7 +32,9 @@ var getFlags = exports.getFlags = function getFlags(customAttributesIds, display
|
|
|
32
32
|
var _ref$attributes = _ref.attributes,
|
|
33
33
|
attributes = _ref$attributes === undefined ? {} : _ref$attributes,
|
|
34
34
|
_ref$units = _ref.units,
|
|
35
|
-
units = _ref$units === undefined ? {} : _ref$units
|
|
35
|
+
units = _ref$units === undefined ? {} : _ref$units,
|
|
36
|
+
_ref$notes = _ref.notes,
|
|
37
|
+
notes = _ref$notes === undefined ? [] : _ref$notes;
|
|
36
38
|
|
|
37
39
|
var refinedAttributes = R.omit(R.propOr([], 'rejected', customAttributesIds), attributes);
|
|
38
40
|
var flags = R.pipe(R.pick(R.propOr([], 'flags', customAttributesIds)), R.values)(refinedAttributes);
|
|
@@ -70,7 +72,9 @@ var getFlags = exports.getFlags = function getFlags(customAttributesIds, display
|
|
|
70
72
|
return { code: code, label: label };
|
|
71
73
|
}, [R.path(['value', 'id']), getAttrLabel(display)])), R.pipe(R.flip(R.concat)(separatedUnitsFootnotes), R.map(R.pipe(getAttrLabel(display), function (label) {
|
|
72
74
|
return { label: label };
|
|
73
|
-
})), R.when(R.always(unitsDisplay === 'cells' && !R.isEmpty(fullUnitsFootnote)), R.append(fullUnitsFootnote))
|
|
75
|
+
})), R.when(R.always(unitsDisplay === 'cells' && !R.isEmpty(fullUnitsFootnote)), R.append(fullUnitsFootnote)), function (res) {
|
|
76
|
+
return R.concat(res, notes);
|
|
77
|
+
})])(flags, footnotes);
|
|
74
78
|
};
|
|
75
79
|
};
|
|
76
80
|
|
|
@@ -24,7 +24,7 @@ var getManyValuesDimensions = exports.getManyValuesDimensions = function getMany
|
|
|
24
24
|
var dimensionIndex = R.prop(dimension.id, dimensionsIds);
|
|
25
25
|
var values = R.map(function (value) {
|
|
26
26
|
var valueAttributes = (0, _refineObservationsAttributesValues.refineObservationsAttributesValues)(attributes)(R.propOr({}, dimensionIndex + ':' + value.__index, attributeValues));
|
|
27
|
-
return (0, _extends3.default)({}, R.pick(['id', 'name', '__indexPosition', 'parent', '__index'], value), {
|
|
27
|
+
return (0, _extends3.default)({}, R.pick(['id', 'name', '__indexPosition', 'parent', '__index', 'notes'], value), {
|
|
28
28
|
attributes: valueAttributes
|
|
29
29
|
});
|
|
30
30
|
}, dimension.values);
|
|
@@ -66,12 +66,15 @@ var dataTransformer = exports.dataTransformer = function dataTransformer(dataNew
|
|
|
66
66
|
var isHidden = R.has(parent + '.' + value.id, hiddenIds) || (0, _sdmxData.getIsHidden)(valueAnnotations);
|
|
67
67
|
var name = (0, _dotstatsuiteSdmxjs.getRefinedName)(value);
|
|
68
68
|
var __indexPosition = NaN;
|
|
69
|
+
var notes = [];
|
|
69
70
|
var start = null;
|
|
71
|
+
var end = null;
|
|
70
72
|
if (isTimeDimension) {
|
|
71
|
-
|
|
72
|
-
start =
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
var reported = (0, _date.getReportedTimePeriod)(reportYearStart, value, options.frequency);
|
|
74
|
+
start = reported.start;
|
|
75
|
+
end = reported.end;
|
|
76
|
+
var reportTimeNote = (0, _date.getReportedTimePeriodNote)(reportYearStart, start, end, options.frequency, options.isRtl);
|
|
77
|
+
notes = R.isNil(reportTimeNote) ? notes : R.append(reportTimeNote, notes);
|
|
75
78
|
__indexPosition = _dateFns2.default.getTime(new Date(R.prop('start', value)));
|
|
76
79
|
}
|
|
77
80
|
if (isNaN(__indexPosition)) {
|
|
@@ -83,6 +86,7 @@ var dataTransformer = exports.dataTransformer = function dataTransformer(dataNew
|
|
|
83
86
|
display: !isHidden,
|
|
84
87
|
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),
|
|
85
88
|
start: start ? start.toISOString() : null,
|
|
89
|
+
notes: notes,
|
|
86
90
|
__indexPosition: __indexPosition,
|
|
87
91
|
__index: __index
|
|
88
92
|
});
|
|
@@ -23,17 +23,19 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
23
23
|
|
|
24
24
|
var getMSDInformations = exports.getMSDInformations = function getMSDInformations(msdJson) {
|
|
25
25
|
var attributesDefinitions = R.pathOr([], ['data', 'metadataStructures', 0, 'metadataStructureComponents', 'reportStructures', 0, 'metadataAttributes'], msdJson);
|
|
26
|
+
var indexedConcepts = R.pipe(R.pathOr([], ['data', 'conceptSchemes', 0, 'concepts']), R.indexBy(R.prop('id')))(msdJson);
|
|
26
27
|
|
|
27
28
|
var parseAttributes = function parseAttributes(parent) {
|
|
28
29
|
return R.reduce(function (acc, attribute) {
|
|
29
30
|
var id = attribute.id;
|
|
31
|
+
var name = R.path([id, 'name'], indexedConcepts);
|
|
30
32
|
var hierarchicalId = parent === '#ROOT' ? id : parent + '.' + id;
|
|
31
33
|
var format = R.path(['localRepresentation', 'textFormat', 'textType'], attribute);
|
|
32
34
|
if (R.has('metadataAttributes', attribute)) {
|
|
33
35
|
var collection = parseAttributes(hierarchicalId)(attribute.metadataAttributes);
|
|
34
|
-
return (0, _extends4.default)({}, acc, collection, (0, _defineProperty3.default)({}, hierarchicalId, { format: format, parent: parent, id: id }));
|
|
36
|
+
return (0, _extends4.default)({}, acc, collection, (0, _defineProperty3.default)({}, hierarchicalId, { format: format, parent: parent, id: id, name: name }));
|
|
35
37
|
}
|
|
36
|
-
return R.assoc(hierarchicalId, { format: format, parent: parent, id: id }, acc);
|
|
38
|
+
return R.assoc(hierarchicalId, { format: format, parent: parent, id: id, name: name }, acc);
|
|
37
39
|
}, {});
|
|
38
40
|
};
|
|
39
41
|
|
|
@@ -94,7 +94,7 @@ var parseMetadataSeries = exports.parseMetadataSeries = function parseMetadataSe
|
|
|
94
94
|
}
|
|
95
95
|
return R.append({
|
|
96
96
|
id: id,
|
|
97
|
-
label: dimensionValueDisplay(options.display)({ id: id }),
|
|
97
|
+
label: dimensionValueDisplay(options.display)({ id: id, name: R.path(['attributes', id, 'name'], options) }),
|
|
98
98
|
handlerProps: R.omit(['id'], R.pathOr({}, ['attributes', id], options))
|
|
99
99
|
}, acc);
|
|
100
100
|
}, attributes, R.keys(groupedAttrs));
|
package/package.json
CHANGED
package/src/rules/src/date.js
CHANGED
|
@@ -55,7 +55,60 @@ export const getReportedTimePeriodLabel = (freq, _format, locale) => (reportYear
|
|
|
55
55
|
// freq === 'W'
|
|
56
56
|
const [week] = R.match(/W[\d]{2}/, id)
|
|
57
57
|
return `${year}/${nextYear}-${week}`;
|
|
58
|
-
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const getReportedTimePeriod = (reportYearStart, value, freq) => {
|
|
61
|
+
let start = new Date(R.prop('start', value));
|
|
62
|
+
let end = new Date(R.prop('end', value));
|
|
63
|
+
if(reportYearStart.month === '01' && reportYearStart.day === '01') {
|
|
64
|
+
return ({ start, end });
|
|
65
|
+
}
|
|
66
|
+
start = dateFns.addMinutes(start, start.getTimezoneOffset());
|
|
67
|
+
start = dateFns.addMonths(start, reportYearStart.month - 1);
|
|
68
|
+
start = dateFns.addDays(start, reportYearStart.day - 1);
|
|
69
|
+
if (freq === 'A') {
|
|
70
|
+
end = dateFns.addYears(start, 1);
|
|
71
|
+
}
|
|
72
|
+
if (freq === 'S') {
|
|
73
|
+
end = dateFns.addMonths(start, 6);
|
|
74
|
+
}
|
|
75
|
+
if (freq === 'Q') {
|
|
76
|
+
end = dateFns.addMonths(start, 3);
|
|
77
|
+
}
|
|
78
|
+
if (freq === 'M') {
|
|
79
|
+
end = dateFns.addMonths(start, 6);
|
|
80
|
+
}
|
|
81
|
+
if (freq === 'W' || freq === 'B') {
|
|
82
|
+
end = dateFns.addDays(start, 7);
|
|
83
|
+
}
|
|
84
|
+
if (freq === 'D') {
|
|
85
|
+
end = dateFns.addDays(start, 1);
|
|
86
|
+
}
|
|
87
|
+
if (freq === 'H') {
|
|
88
|
+
end = dateFns.addHours(start, 1);
|
|
89
|
+
}
|
|
90
|
+
if (freq === 'N') {
|
|
91
|
+
end = dateFns.addMinutes(start, 1);
|
|
92
|
+
}
|
|
93
|
+
end = dateFns.subSeconds(end, 1);
|
|
94
|
+
return ({ start, end });
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const getReportedTimePeriodNote = (reportYearStart, start, end, freq) => {
|
|
98
|
+
if(reportYearStart.month === '01' && reportYearStart.day === '01') {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
if (R.includes(freq, ['D', 'H', 'N'])) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const isFirstDayOfMonth = dateFns.isFirstDayOfMonth(start);
|
|
105
|
+
if (freq === 'M' && isFirstDayOfMonth) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
const formatedStart = dateFns.format(start, 'YYYY-MM-DD');
|
|
109
|
+
const formatedEnd = dateFns.format(end, 'YYYY-MM-DD');
|
|
110
|
+
return ({ label: `${formatedStart} - ${formatedEnd}` });
|
|
111
|
+
};
|
|
59
112
|
|
|
60
113
|
|
|
61
114
|
export const getTimePeriodLabel = (locale, format = 'YYYY MMM') => R.pipe(
|
|
@@ -26,7 +26,7 @@ export const getDefaultSubtitle = ({ customAttributes, dimensions, display, unit
|
|
|
26
26
|
return acc;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
const flags = _getFlags({ attributes: R.propOr({}, 'attributes', value) });
|
|
29
|
+
const flags = _getFlags({ attributes: R.propOr({}, 'attributes', value), notes: R.propOr([], 'notes', value) });
|
|
30
30
|
|
|
31
31
|
return R.append({
|
|
32
32
|
header: `${formatter(dim)}:`,
|
|
@@ -26,7 +26,7 @@ export const getSubtitleFlags = ({ customAttributes, dimensions, display, units
|
|
|
26
26
|
return acc;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
const flags = _getFlags({ attributes: R.propOr({}, 'attributes', value) });
|
|
29
|
+
const flags = _getFlags({ attributes: R.propOr({}, 'attributes', value), notes: R.propOr([], 'notes', value) });
|
|
30
30
|
if (R.isEmpty(flags)) {
|
|
31
31
|
return acc;
|
|
32
32
|
}
|
|
@@ -4,7 +4,7 @@ import { hasCellMetadata } from '../../../../rules2/src/hasCellMetadata';
|
|
|
4
4
|
|
|
5
5
|
const getAttrLabel = (display) => (attribute) => `${display(attribute)}: ${display(R.propOr({}, 'value', attribute))}`;
|
|
6
6
|
|
|
7
|
-
export const getFlags = (customAttributesIds, display, unitsProps) => ({ attributes={}, units={} }) => {
|
|
7
|
+
export const getFlags = (customAttributesIds, display, unitsProps) => ({ attributes={}, units={}, notes=[] }) => {
|
|
8
8
|
const refinedAttributes = R.omit(R.propOr([], 'rejected', customAttributesIds), attributes);
|
|
9
9
|
const flags = R.pipe(R.pick(R.propOr([], 'flags', customAttributesIds)), R.values)(refinedAttributes);
|
|
10
10
|
const footnotes = R.pipe(R.pick(R.propOr([], 'notes', customAttributesIds)), R.values)(refinedAttributes);
|
|
@@ -68,7 +68,8 @@ export const getFlags = (customAttributesIds, display, unitsProps) => ({ attribu
|
|
|
68
68
|
R.when(
|
|
69
69
|
R.always(unitsDisplay === 'cells' && !R.isEmpty(fullUnitsFootnote)),
|
|
70
70
|
R.append(fullUnitsFootnote)
|
|
71
|
-
)
|
|
71
|
+
),
|
|
72
|
+
res => R.concat(res, notes)
|
|
72
73
|
)
|
|
73
74
|
]
|
|
74
75
|
)(flags, footnotes);
|
|
@@ -9,7 +9,7 @@ export const getManyValuesDimensions = (dimensionsByIds, dimensionsIds, attribut
|
|
|
9
9
|
const valueAttributes = refineObservationsAttributesValues(attributes)
|
|
10
10
|
(R.propOr({}, `${dimensionIndex}:${value.__index}`, attributeValues));
|
|
11
11
|
return ({
|
|
12
|
-
...R.pick(['id', 'name', '__indexPosition', 'parent', '__index'], value),
|
|
12
|
+
...R.pick(['id', 'name', '__indexPosition', 'parent', '__index', 'notes'], value),
|
|
13
13
|
attributes: valueAttributes,
|
|
14
14
|
});
|
|
15
15
|
}, dimension.values);
|
|
@@ -3,7 +3,7 @@ import dateFns from 'date-fns';
|
|
|
3
3
|
import { getCodeOrder, getRefinedName, isTimePeriodDimension } from '@sis-cc/dotstatsuite-sdmxjs';
|
|
4
4
|
import {
|
|
5
5
|
getRelationnalAnnotations, setAnnotationsLayout, getIsHidden } from './sdmx-data';
|
|
6
|
-
import { getReportedTimePeriodLabel } from './date';
|
|
6
|
+
import { getReportedTimePeriodLabel, getReportedTimePeriodNote, getReportedTimePeriod } from './date';
|
|
7
7
|
import { getReportingYearStart } from './preparators/getReportingYearStart';
|
|
8
8
|
import { getNotDisplayedIds } from '../../rules2/src';
|
|
9
9
|
|
|
@@ -43,12 +43,15 @@ export const dataTransformer = (dataNew, options = {}) => {
|
|
|
43
43
|
const isHidden = R.has(`${parent}.${value.id}`, hiddenIds) || getIsHidden(valueAnnotations);
|
|
44
44
|
const name = getRefinedName(value);
|
|
45
45
|
let __indexPosition = NaN;
|
|
46
|
+
let notes = [];
|
|
46
47
|
let start = null;
|
|
48
|
+
let end = null;
|
|
47
49
|
if (isTimeDimension) {
|
|
48
|
-
|
|
49
|
-
start =
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
const reported = getReportedTimePeriod(reportYearStart, value, options.frequency);
|
|
51
|
+
start = reported.start;
|
|
52
|
+
end = reported.end;
|
|
53
|
+
const reportTimeNote = getReportedTimePeriodNote(reportYearStart, start, end, options.frequency, options.isRtl);
|
|
54
|
+
notes = R.isNil(reportTimeNote) ? notes : R.append(reportTimeNote, notes);
|
|
52
55
|
__indexPosition = dateFns.getTime(new Date(R.prop('start', value)));
|
|
53
56
|
}
|
|
54
57
|
if (isNaN(__indexPosition)) {
|
|
@@ -67,6 +70,7 @@ export const dataTransformer = (dataNew, options = {}) => {
|
|
|
67
70
|
R.always(getReportedTimePeriodLabel(options.frequency, timeFormat, locale)(reportYearStart, { id: value.id, reportedStart: start, start:value.start }))
|
|
68
71
|
)(name),
|
|
69
72
|
start: start ? start.toISOString() : null,
|
|
73
|
+
notes,
|
|
70
74
|
__indexPosition,
|
|
71
75
|
__index,
|
|
72
76
|
});
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import * as R from 'ramda';
|
|
2
2
|
|
|
3
|
-
export const getMSDInformations =
|
|
3
|
+
export const getMSDInformations = msdJson => {
|
|
4
4
|
const attributesDefinitions = R.pathOr([], ['data', 'metadataStructures', 0, 'metadataStructureComponents', 'reportStructures', 0, 'metadataAttributes'], msdJson);
|
|
5
|
+
const indexedConcepts = R.pipe(R.pathOr([], ['data', 'conceptSchemes', 0, 'concepts']), R.indexBy(R.prop('id')))(msdJson);
|
|
5
6
|
|
|
6
7
|
const parseAttributes = (parent) => R.reduce(
|
|
7
8
|
(acc, attribute) => {
|
|
8
9
|
const id = attribute.id;
|
|
10
|
+
const name = R.path([id, 'name'], indexedConcepts);
|
|
9
11
|
const hierarchicalId = parent === '#ROOT' ? id : `${parent}.${id}`;
|
|
10
12
|
const format = R.path(['localRepresentation', 'textFormat', 'textType'], attribute);
|
|
11
13
|
if (R.has('metadataAttributes', attribute)) {
|
|
12
14
|
const collection = parseAttributes(hierarchicalId)(attribute.metadataAttributes);
|
|
13
|
-
return ({ ...acc, ...collection, [hierarchicalId]: { format, parent, id } });
|
|
15
|
+
return ({ ...acc, ...collection, [hierarchicalId]: { format, parent, id, name } });
|
|
14
16
|
}
|
|
15
|
-
return R.assoc(hierarchicalId, { format, parent, id }, acc);
|
|
17
|
+
return R.assoc(hierarchicalId, { format, parent, id, name }, acc);
|
|
16
18
|
},
|
|
17
19
|
{}
|
|
18
20
|
)
|
|
@@ -85,7 +85,7 @@ export const parseMetadataSeries = (metadataJson, options) => {
|
|
|
85
85
|
}
|
|
86
86
|
return R.append({
|
|
87
87
|
id,
|
|
88
|
-
label: dimensionValueDisplay(options.display)({ id }),
|
|
88
|
+
label: dimensionValueDisplay(options.display)({ id, name: R.path(['attributes', id, 'name'], options) }),
|
|
89
89
|
handlerProps: R.omit(['id'], R.pathOr({}, ['attributes', id], options))
|
|
90
90
|
}, acc);
|
|
91
91
|
},
|
|
@@ -6,27 +6,27 @@ describe('getMSDInformations tests', () => {
|
|
|
6
6
|
it('complete test', () => {
|
|
7
7
|
const expected = {
|
|
8
8
|
attributes: {
|
|
9
|
-
STRING_TYPE: { format: 'String', parent: '#ROOT', id: 'STRING_TYPE' },
|
|
10
|
-
STRING_MULTILANG_TYPE: { format: 'String', parent: '#ROOT', id: 'STRING_MULTILANG_TYPE' },
|
|
11
|
-
ALPHANUMERIC_TYPE: { format: 'AlphaNumeric', parent: '#ROOT', id: 'ALPHANUMERIC_TYPE' },
|
|
12
|
-
ALPHANUMERIC_MULTILANG_TYPE: { format: 'AlphaNumeric', parent: '#ROOT', id: 'ALPHANUMERIC_MULTILANG_TYPE' },
|
|
13
|
-
BOOLEAN_TYPE: { format: 'Boolean', parent: '#ROOT', id: 'BOOLEAN_TYPE' },
|
|
14
|
-
XHTML_TYPE: { format: 'XHTML', parent: '#ROOT', id: 'XHTML_TYPE' },
|
|
15
|
-
XHTML_MULTILANG_TYPE: { format: 'XHTML', parent: '#ROOT', id: 'XHTML_MULTILANG_TYPE' },
|
|
16
|
-
INTEGER_TYPE: { format: 'Integer', parent: '#ROOT', id: 'INTEGER_TYPE' },
|
|
17
|
-
INTEGER_MULTILANG_TYPE: { format: 'Integer', parent: '#ROOT', id: 'INTEGER_MULTILANG_TYPE' },
|
|
18
|
-
DECIMAL_TYPE: { format: 'Decimal', parent: '#ROOT', id: 'DECIMAL_TYPE' },
|
|
19
|
-
DECIMAL_MULTILANG_TYPE: { format: 'Decimal', parent: '#ROOT', id: 'DECIMAL_MULTILANG_TYPE' },
|
|
20
|
-
DATETIME_TYPE: { format: 'DateTime', parent: '#ROOT', id: 'DATETIME_TYPE' },
|
|
21
|
-
TIME_TYPE: { format: 'Time', parent: '#ROOT', id: 'TIME_TYPE' },
|
|
22
|
-
GREGORIANDAY_TYPE: { format: 'GregorianDay', parent: '#ROOT', id: 'GREGORIANDAY_TYPE' },
|
|
23
|
-
GREGORIAN_YEAR_TYPE: { format: 'GregorianYear', parent: '#ROOT', id: 'GREGORIAN_YEAR_TYPE' },
|
|
24
|
-
GREGORIAN_YEARMONTH_TYPE: { format: 'GregorianYearMonth', parent: '#ROOT', id: 'GREGORIAN_YEARMONTH_TYPE' },
|
|
25
|
-
CONTACT: { format: 'String', parent: '#ROOT', id: 'CONTACT' },
|
|
26
|
-
'CONTACT.CONTACT_NAME': { format: 'String', parent: 'CONTACT', id: 'CONTACT_NAME' },
|
|
27
|
-
'CONTACT.CONTACT_EMAIL': { format: 'String', parent: 'CONTACT', id: 'CONTACT_EMAIL' },
|
|
28
|
-
'CONTACT.CONTACT_PHONE': { format: 'Numeric', parent: 'CONTACT', id: 'CONTACT_PHONE' },
|
|
29
|
-
'CONTACT.CONTACT_ORGANISATION': { format: 'String', parent: 'CONTACT', id: 'CONTACT_ORGANISATION' }
|
|
9
|
+
STRING_TYPE: { format: 'String', parent: '#ROOT', id: 'STRING_TYPE', name: 'STRING_TYPE en' },
|
|
10
|
+
STRING_MULTILANG_TYPE: { format: 'String', parent: '#ROOT', id: 'STRING_MULTILANG_TYPE', name: [undefined] },
|
|
11
|
+
ALPHANUMERIC_TYPE: { format: 'AlphaNumeric', parent: '#ROOT', id: 'ALPHANUMERIC_TYPE', name: [undefined] },
|
|
12
|
+
ALPHANUMERIC_MULTILANG_TYPE: { format: 'AlphaNumeric', parent: '#ROOT', id: 'ALPHANUMERIC_MULTILANG_TYPE', name: [undefined] },
|
|
13
|
+
BOOLEAN_TYPE: { format: 'Boolean', parent: '#ROOT', id: 'BOOLEAN_TYPE', name: [undefined] },
|
|
14
|
+
XHTML_TYPE: { format: 'XHTML', parent: '#ROOT', id: 'XHTML_TYPE', name: [undefined] },
|
|
15
|
+
XHTML_MULTILANG_TYPE: { format: 'XHTML', parent: '#ROOT', id: 'XHTML_MULTILANG_TYPE', name: [undefined] },
|
|
16
|
+
INTEGER_TYPE: { format: 'Integer', parent: '#ROOT', id: 'INTEGER_TYPE', name: [undefined] },
|
|
17
|
+
INTEGER_MULTILANG_TYPE: { format: 'Integer', parent: '#ROOT', id: 'INTEGER_MULTILANG_TYPE', name: [undefined] },
|
|
18
|
+
DECIMAL_TYPE: { format: 'Decimal', parent: '#ROOT', id: 'DECIMAL_TYPE', name: [undefined] },
|
|
19
|
+
DECIMAL_MULTILANG_TYPE: { format: 'Decimal', parent: '#ROOT', id: 'DECIMAL_MULTILANG_TYPE', name: [undefined] },
|
|
20
|
+
DATETIME_TYPE: { format: 'DateTime', parent: '#ROOT', id: 'DATETIME_TYPE', name: [undefined] },
|
|
21
|
+
TIME_TYPE: { format: 'Time', parent: '#ROOT', id: 'TIME_TYPE', name: [undefined] },
|
|
22
|
+
GREGORIANDAY_TYPE: { format: 'GregorianDay', parent: '#ROOT', id: 'GREGORIANDAY_TYPE', name: [undefined] },
|
|
23
|
+
GREGORIAN_YEAR_TYPE: { format: 'GregorianYear', parent: '#ROOT', id: 'GREGORIAN_YEAR_TYPE', name: [undefined] },
|
|
24
|
+
GREGORIAN_YEARMONTH_TYPE: { format: 'GregorianYearMonth', parent: '#ROOT', id: 'GREGORIAN_YEARMONTH_TYPE', name: [undefined] },
|
|
25
|
+
CONTACT: { format: 'String', parent: '#ROOT', id: 'CONTACT', name: [undefined] },
|
|
26
|
+
'CONTACT.CONTACT_NAME': { format: 'String', parent: 'CONTACT', id: 'CONTACT_NAME', name: [undefined] },
|
|
27
|
+
'CONTACT.CONTACT_EMAIL': { format: 'String', parent: 'CONTACT', id: 'CONTACT_EMAIL', name: [undefined] },
|
|
28
|
+
'CONTACT.CONTACT_PHONE': { format: 'Numeric', parent: 'CONTACT', id: 'CONTACT_PHONE', name: [undefined] },
|
|
29
|
+
'CONTACT.CONTACT_ORGANISATION': { format: 'String', parent: 'CONTACT', id: 'CONTACT_ORGANISATION', name: [undefined] }
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
32
|
|
package/test/mocks/MSD_TEST.json
CHANGED
|
@@ -19,12 +19,12 @@ const dimensions = [
|
|
|
19
19
|
];
|
|
20
20
|
|
|
21
21
|
const attributes = {
|
|
22
|
-
DIRECT_SOURCE: { id: 'DIRECT_SOURCE', prop: 'test', parent: '#ROOT' },
|
|
23
|
-
KEY_STATISTICAL_CONCEPT: { id: 'KEY_STATISTICAL_CONCEPT', parent: '#ROOT' },
|
|
24
|
-
UNIT_OF_MEASURE_USED: { id: 'UNIT_OF_MEASURE_USED', parent: '#ROOT' },
|
|
25
|
-
POWER_CODE: { id: 'POWER_CODE', parent: '#ROOT' },
|
|
26
|
-
POREFERENCE_PERIODWER_CODE: { id: 'POREFERENCE_PERIODWER_CODE', parent: '#ROOT' },
|
|
27
|
-
RANDOM: { prop: 'invalid' }
|
|
22
|
+
DIRECT_SOURCE: { id: 'DIRECT_SOURCE', prop: 'test', parent: '#ROOT', name: 'DIRECT_SOURCE' },
|
|
23
|
+
KEY_STATISTICAL_CONCEPT: { id: 'KEY_STATISTICAL_CONCEPT', parent: '#ROOT', name: 'KEY_STATISTICAL_CONCEPT' },
|
|
24
|
+
UNIT_OF_MEASURE_USED: { id: 'UNIT_OF_MEASURE_USED', parent: '#ROOT', name: 'UNIT_OF_MEASURE_USED' },
|
|
25
|
+
POWER_CODE: { id: 'POWER_CODE', parent: '#ROOT', name: 'POWER_CODE' },
|
|
26
|
+
POREFERENCE_PERIODWER_CODE: { id: 'POREFERENCE_PERIODWER_CODE', parent: '#ROOT', name: 'POREFERENCE_PERIODWER_CODE' },
|
|
27
|
+
RANDOM: { prop: 'invalid', name: 'RANDOM' }
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
describe('parseMetadataSeries test', () => {
|
|
@@ -35,13 +35,13 @@ describe('parseMetadataSeries test', () => {
|
|
|
35
35
|
id: 'DIRECT_SOURCE',
|
|
36
36
|
label: 'DIRECT_SOURCE: Direct source',
|
|
37
37
|
value: "Reply to the National Accounts Questionnaire from the Australian Bureau of Statistics, Canberra. The official estimates are published in 'Australian system of national accounts', ABS, catalogue 5204.0.",
|
|
38
|
-
handlerProps: { prop: 'test', parent: '#ROOT' }
|
|
38
|
+
handlerProps: { prop: 'test', parent: '#ROOT', name: 'DIRECT_SOURCE' },
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
id: 'KEY_STATISTICAL_CONCEPT',
|
|
42
42
|
label: 'KEY_STATISTICAL_CONCEPT: Key statistical concept',
|
|
43
43
|
value: "As from December 2009, national accounts estimates are compiled according to the 2008 SNA ('System of National Accounts 2008', Commission of the European Communities-Eurostat, International Monetary Fund, Organisation for Economic Co-operation and Development, United Nations and World Bank, 2009).<br><br>Detailed information about the implementation of the 2008 SNA in Australian national accounts could be found in ABS website: <br><br><a href=\"http://www.abs.gov.au/ausstats/abs@.nsf/mf/5310.0.55.002\">ABS website</a><br><br>All the data refer to fiscal years beginning on the 1st July of the year indicated.<br><br>The financial intermediation services indirectly measured (FISIM) are allocated to industries and institutional sectors. <br><br>Original chain constant price estimates for main aggregates are referenced to fiscal year 2019-2020.",
|
|
44
|
-
handlerProps: { parent: '#ROOT' }
|
|
44
|
+
handlerProps: { parent: '#ROOT', name: 'KEY_STATISTICAL_CONCEPT' },
|
|
45
45
|
}
|
|
46
46
|
],
|
|
47
47
|
'0::0:': [
|
|
@@ -49,33 +49,33 @@ describe('parseMetadataSeries test', () => {
|
|
|
49
49
|
id: 'UNIT_OF_MEASURE_USED',
|
|
50
50
|
label: 'UNIT_OF_MEASURE_USED: Unit of measure used',
|
|
51
51
|
value: 'Australian Dollar',
|
|
52
|
-
handlerProps: { parent: '#ROOT' }
|
|
52
|
+
handlerProps: { parent: '#ROOT', name: 'UNIT_OF_MEASURE_USED' },
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
id: 'POWER_CODE',
|
|
56
56
|
label: 'POWER_CODE: Power code',
|
|
57
57
|
value: 6,
|
|
58
|
-
handlerProps: { parent: '#ROOT' }
|
|
58
|
+
handlerProps: { parent: '#ROOT', name: 'POWER_CODE' },
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
id: 'POREFERENCE_PERIODWER_CODE',
|
|
62
62
|
label: 'POREFERENCE_PERIODWER_CODE: Reference period',
|
|
63
63
|
value: '2019',
|
|
64
|
-
handlerProps: { parent: '#ROOT' }
|
|
64
|
+
handlerProps: { parent: '#ROOT', name: 'POREFERENCE_PERIODWER_CODE' },
|
|
65
65
|
}
|
|
66
66
|
]
|
|
67
67
|
});
|
|
68
68
|
});
|
|
69
69
|
it('hierarchy test', () => {
|
|
70
70
|
const attributes = {
|
|
71
|
-
ROOT1: { id: 'ROOT1', parent: '#ROOT' },
|
|
72
|
-
ROOT2: { id: 'ROOT2', parent: '#ROOT' },
|
|
73
|
-
PARENT1: { id: 'PARENT1', parent: '#ROOT' },
|
|
74
|
-
'PARENT1.CHILD1': { id: 'CHILD1', parent: 'PARENT1' },
|
|
75
|
-
'PARENT1.CHILD2': { id: 'CHILD2', parent: 'PARENT1' },
|
|
76
|
-
PARENT2: { id: 'PARENT1', parent: '#ROOT' },
|
|
77
|
-
'PARENT2.CHILD3': { id: 'CHILD3', parent: 'PARENT2' },
|
|
78
|
-
'PARENT2.CHILD4': { id: 'CHILD4', parent: 'PARENT2' },
|
|
71
|
+
ROOT1: { id: 'ROOT1', parent: '#ROOT', name: 'ROOT1' },
|
|
72
|
+
ROOT2: { id: 'ROOT2', parent: '#ROOT', name: 'ROOT2' },
|
|
73
|
+
PARENT1: { id: 'PARENT1', parent: '#ROOT', name: 'PARENT1' },
|
|
74
|
+
'PARENT1.CHILD1': { id: 'CHILD1', parent: 'PARENT1', name: 'CHILD1' },
|
|
75
|
+
'PARENT1.CHILD2': { id: 'CHILD2', parent: 'PARENT1', name: 'CHILD2' },
|
|
76
|
+
PARENT2: { id: 'PARENT1', parent: '#ROOT', name: 'PARENT2' },
|
|
77
|
+
'PARENT2.CHILD3': { id: 'CHILD3', parent: 'PARENT2', name: 'CHILD3' },
|
|
78
|
+
'PARENT2.CHILD4': { id: 'CHILD4', parent: 'PARENT2', name: 'CHILD4' },
|
|
79
79
|
};
|
|
80
80
|
const metadata = {
|
|
81
81
|
data: {
|
|
@@ -102,24 +102,24 @@ describe('parseMetadataSeries test', () => {
|
|
|
102
102
|
|
|
103
103
|
expect(parseMetadataSeries(metadata, { display: 'name', locale: 'en', dimensions: [], attributes })).to.deep.equal({
|
|
104
104
|
'::': [
|
|
105
|
-
{ id: 'ROOT1', label: 'Root 1', value: 'v', handlerProps: { parent: '#ROOT' } },
|
|
106
|
-
{ id: 'ROOT2', label: 'Root 2', value: 'v', handlerProps: { parent: '#ROOT' } },
|
|
105
|
+
{ id: 'ROOT1', label: 'Root 1', value: 'v', handlerProps: { parent: '#ROOT', name: 'ROOT1' } },
|
|
106
|
+
{ id: 'ROOT2', label: 'Root 2', value: 'v', handlerProps: { parent: '#ROOT', name: 'ROOT2' } },
|
|
107
107
|
{
|
|
108
108
|
id: 'PARENT1',
|
|
109
109
|
label: 'Parent 1',
|
|
110
|
-
handlerProps: { parent: '#ROOT' },
|
|
110
|
+
handlerProps: { parent: '#ROOT', name: 'PARENT1' },
|
|
111
111
|
children: [
|
|
112
|
-
{ id: 'PARENT1.CHILD1', label: 'Child 1', value: 'v', handlerProps: { parent: 'PARENT1' } },
|
|
113
|
-
{ id: 'PARENT1.CHILD2', label: 'Child 2', value: 'v', handlerProps: { parent: 'PARENT1' } },
|
|
112
|
+
{ id: 'PARENT1.CHILD1', label: 'Child 1', value: 'v', handlerProps: { parent: 'PARENT1', name: 'CHILD1' } },
|
|
113
|
+
{ id: 'PARENT1.CHILD2', label: 'Child 2', value: 'v', handlerProps: { parent: 'PARENT1', name: 'CHILD2' } },
|
|
114
114
|
]
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
117
|
id: 'PARENT2',
|
|
118
|
-
label: '
|
|
119
|
-
handlerProps: { parent: '#ROOT' },
|
|
118
|
+
label: 'PARENT2',
|
|
119
|
+
handlerProps: { parent: '#ROOT', name: 'PARENT2' },
|
|
120
120
|
children: [
|
|
121
|
-
{ id: 'PARENT2.CHILD3', label: 'Child 3', value: 'v', handlerProps: { parent: 'PARENT2' } },
|
|
122
|
-
{ id: 'PARENT2.CHILD4', label: 'Child 4', value: 'v', handlerProps: { parent: 'PARENT2' } },
|
|
121
|
+
{ id: 'PARENT2.CHILD3', label: 'Child 3', value: 'v', handlerProps: { parent: 'PARENT2', name: 'CHILD3' } },
|
|
122
|
+
{ id: 'PARENT2.CHILD4', label: 'Child 4', value: 'v', handlerProps: { parent: 'PARENT2', name: 'CHILD4' } },
|
|
123
123
|
]
|
|
124
124
|
}
|
|
125
125
|
]
|