@sis-cc/dotstatsuite-components 8.12.0 → 8.13.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.
@@ -4,40 +4,34 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
 
7
- var _isNil2 = require('lodash/isNil');
7
+ var _ramda = require('ramda');
8
8
 
9
- var _isNil3 = _interopRequireDefault(_isNil2);
10
-
11
- var _find2 = require('lodash/find');
12
-
13
- var _find3 = _interopRequireDefault(_find2);
14
-
15
- var _head2 = require('lodash/head');
16
-
17
- var _head3 = _interopRequireDefault(_head2);
18
-
19
- var _get2 = require('lodash/get');
20
-
21
- var _get3 = _interopRequireDefault(_get2);
9
+ var R = _interopRequireWildcard(_ramda);
22
10
 
23
11
  var _dotstatsuiteSdmxjs = require('@sis-cc/dotstatsuite-sdmxjs');
24
12
 
25
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ 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; } }
26
14
 
27
15
  exports.default = function (dimensions, singularity) {
28
- var mode = (0, _get3.default)(singularity, 'mode') === 'percent' ? 'percent' : 'values';
16
+ var value = dimensions.value,
17
+ values = dimensions.values;
18
+
19
+ var mode = R.prop('mode', singularity) === 'percent' ? 'percent' : 'values';
20
+ if (R.length(values) === 1) {
21
+ return { mode: mode, id: R.pathOr(null, [0, 'id'], value) };
22
+ }
29
23
  var serieDimension = null;
30
- var id = (0, _get3.default)(singularity, 'id');
31
- if (!(0, _isNil3.default)(id)) {
32
- serieDimension = (0, _find3.default)(dimensions, { id: id });
24
+ var id = R.prop('id', singularity);
25
+ if (!R.isNil(id)) {
26
+ serieDimension = R.find(R.propEq('id', id), values);
33
27
  }
34
- var areaDimension = (0, _dotstatsuiteSdmxjs.getRefAreaDimension)({ dimensions: dimensions });
35
- var timeDimension = (0, _dotstatsuiteSdmxjs.getTimePeriodDimension)({ dimensions: dimensions });
28
+ var areaDimension = (0, _dotstatsuiteSdmxjs.getRefAreaDimension)({ dimensions: values });
29
+ var timeDimension = (0, _dotstatsuiteSdmxjs.getTimePeriodDimension)({ dimensions: values });
36
30
 
37
- serieDimension = serieDimension || areaDimension || timeDimension || (0, _head3.default)(dimensions);
31
+ serieDimension = serieDimension || areaDimension || timeDimension || R.head(values);
38
32
 
39
33
  return {
40
34
  mode: mode,
41
- id: (0, _get3.default)(serieDimension, 'id', null)
35
+ id: R.propOr(null, 'id', serieDimension)
42
36
  };
43
37
  };
@@ -4,69 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
 
7
- var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
7
+ var _extends2 = require('babel-runtime/helpers/extends');
8
8
 
9
- var _defineProperty3 = _interopRequireDefault(_defineProperty2);
10
-
11
- var _extends3 = require('babel-runtime/helpers/extends');
12
-
13
- var _extends4 = _interopRequireDefault(_extends3);
14
-
15
- var _take2 = require('lodash/take');
16
-
17
- var _take3 = _interopRequireDefault(_take2);
18
-
19
- var _sumBy2 = require('lodash/sumBy');
20
-
21
- var _sumBy3 = _interopRequireDefault(_sumBy2);
22
-
23
- var _sortBy2 = require('lodash/sortBy');
24
-
25
- var _sortBy3 = _interopRequireDefault(_sortBy2);
26
-
27
- var _split2 = require('lodash/split');
28
-
29
- var _split3 = _interopRequireDefault(_split2);
30
-
31
- var _reduce2 = require('lodash/reduce');
32
-
33
- var _reduce3 = _interopRequireDefault(_reduce2);
34
-
35
- var _map2 = require('lodash/map');
36
-
37
- var _map3 = _interopRequireDefault(_map2);
38
-
39
- var _keyBy2 = require('lodash/keyBy');
40
-
41
- var _keyBy3 = _interopRequireDefault(_keyBy2);
42
-
43
- var _join2 = require('lodash/join');
44
-
45
- var _join3 = _interopRequireDefault(_join2);
46
-
47
- var _isUndefined2 = require('lodash/isUndefined');
48
-
49
- var _isUndefined3 = _interopRequireDefault(_isUndefined2);
50
-
51
- var _head2 = require('lodash/head');
52
-
53
- var _head3 = _interopRequireDefault(_head2);
54
-
55
- var _has2 = require('lodash/has');
56
-
57
- var _has3 = _interopRequireDefault(_has2);
58
-
59
- var _groupBy2 = require('lodash/groupBy');
60
-
61
- var _groupBy3 = _interopRequireDefault(_groupBy2);
62
-
63
- var _get2 = require('lodash/get');
64
-
65
- var _get3 = _interopRequireDefault(_get2);
66
-
67
- var _find2 = require('lodash/find');
68
-
69
- var _find3 = _interopRequireDefault(_find2);
9
+ var _extends3 = _interopRequireDefault(_extends2);
70
10
 
71
11
  var _dotstatsuiteSdmxjs = require('@sis-cc/dotstatsuite-sdmxjs');
72
12
 
@@ -74,137 +14,121 @@ var _dimensionUtils = require('../dimension-utils');
74
14
 
75
15
  var _observationFormater = require('../observation-formater');
76
16
 
17
+ var _ramda = require('ramda');
18
+
19
+ var R = _interopRequireWildcard(_ramda);
20
+
21
+ 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; } }
22
+
77
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
78
24
 
79
25
  var flatDatapoints = function flatDatapoints(observations, dimensions, dimensionsWithValuesIndexedById, serieDimensionId, display, formaterAttrs) {
80
- return (0, _map3.default)(observations, function (observationValue, observationKey) {
26
+
27
+ var datapoints = R.mapObjIndexed(function (observationValue, observationKey) {
81
28
  var x = null;
82
- var y = Number((0, _head3.default)(observationValue));
29
+ var y = Number(R.head(observationValue));
83
30
  var formater = (0, _observationFormater.getObservationFormater)(observationValue, formaterAttrs);
84
- var splittedKey = (0, _split3.default)(observationKey, ':');
31
+ var splittedKey = R.split(':', observationKey);
85
32
  var layerKey = [];
86
- var layerDimensions = (0, _reduce3.default)(splittedKey, function (memo, dimensionValueIndex, dimensionIndex) {
87
- var dimension = (0, _get3.default)(dimensions, '[' + dimensionIndex + ']');
88
- if ((0, _has3.default)(dimensionsWithValuesIndexedById, dimension.id)) {
89
- var dimensionValue = (0, _extends4.default)({}, (0, _get3.default)(dimension, 'values[' + dimensionValueIndex + ']', {}), {
90
- index: dimensionValueIndex,
91
- label: (0, _dimensionUtils.dimensionValueDisplay)(display)((0, _get3.default)(dimension, 'values[' + dimensionValueIndex + ']', {}))
92
- });
93
- if (dimension.id === serieDimensionId) {
94
- x = dimensionValue;
95
- } else {
96
- memo.push(dimensionValue);
97
- layerKey.push(dimensionValueIndex);
98
- }
33
+ var layerDimensions = R.addIndex(R.reduce)(function (memo, dimensionValueIndex, dimensionIndex) {
34
+ var dimension = R.nth(dimensionIndex, dimensions);
35
+ var _dimensionValue = R.pathOr({}, ['values', Number(dimensionValueIndex)], dimension);
36
+ var label = (0, _dimensionUtils.dimensionValueDisplay)(display)(_dimensionValue);
37
+ var dimensionValue = (0, _extends3.default)({}, _dimensionValue, {
38
+ index: Number(dimensionValueIndex),
39
+ label: label
40
+ });
41
+ if (dimension.id === serieDimensionId) {
42
+ x = dimensionValue;
43
+ } else if (R.has(dimension.id, dimensionsWithValuesIndexedById)) {
44
+ memo.push(dimensionValue);
45
+ layerKey.push(dimensionValueIndex);
99
46
  }
100
47
  return memo;
101
- }, []);
102
- return { formater: formater, x: x, y: y, layerDimensions: layerDimensions, layerKey: (0, _join3.default)(layerKey, ':') };
103
- });
48
+ }, [], splittedKey);
49
+ return { formater: formater, x: x, y: y, layerDimensions: layerDimensions, layerKey: R.join(':', layerKey) };
50
+ }, observations);
51
+
52
+ return R.values(datapoints);
104
53
  };
105
54
 
106
55
  var serie = function serie(observations, dimensions, dimensionsWithValuesIndexedById, serieDimensionId, display, formaterAttrs) {
107
- var serieDimension = (0, _find3.default)(dimensionsWithValuesIndexedById, function (d) {
108
- return d.id === serieDimensionId;
109
- });
110
- if ((0, _isUndefined3.default)(serieDimension)) {
111
- return [];
56
+ var serieDimension = R.find(R.propEq('id', serieDimensionId), dimensions);
57
+ if (R.isNil(serieDimension)) {
58
+ return { datapoints: [], layerSeries: [] };
112
59
  }
113
60
  var _flatDatapoints = flatDatapoints(observations, dimensions, dimensionsWithValuesIndexedById, serieDimensionId, display, formaterAttrs);
114
- var layeredDatapoints = (0, _groupBy3.default)(_flatDatapoints, function (dp) {
115
- return dp.layerKey;
116
- }); // { [layeredKey]: [dps] }
117
- var layerFullSeries = (0, _map3.default)(layeredDatapoints, function (datapoints, layerKey) {
118
- return { layerDimensions: (0, _get3.default)((0, _head3.default)(datapoints), 'layerDimensions'), layerKey: layerKey };
119
- }); // [{ layerDimensions, layerKey }]
120
- var layerSeries = (0, _take3.default)((0, _sortBy3.default)(layerFullSeries, function (layer) {
121
- return layer.layerKey;
122
- }), 5);
123
- var layeredDatapointsKeyedByX = (0, _reduce3.default)(layeredDatapoints, function (memo, layerDps, key) {
124
- var dps = (0, _keyBy3.default)(layerDps, function (dp) {
125
- return (0, _get3.default)(dp, 'x.id', '');
126
- });
127
- return (0, _extends4.default)({}, memo, (0, _defineProperty3.default)({}, '' + key, dps));
128
- }, {}); // { [layeredKey]: { [x.id]: dp } }
129
- var datapoints = (0, _map3.default)(serieDimension.values, function (serieValue, index) {
61
+
62
+ var layeredDatapoints = R.groupBy(R.prop('layerKey'), _flatDatapoints); // { [layeredKey]: [dps] }
63
+
64
+ var layerFullSeries = R.map(function (datapoints) {
65
+ return {
66
+ layerDimensions: R.prop('layerDimensions', R.head(datapoints)),
67
+ layerKey: R.prop('layerKey', R.head(datapoints))
68
+ };
69
+ }, R.values(layeredDatapoints)); // [{ layerDimensions, layerKey }]
70
+ var layerSeries = R.take(5, R.sortBy(R.prop('layerKey'), layerFullSeries));
71
+ var layeredDatapointsKeyedByX = R.mapObjIndexed(R.indexBy(R.path(['x', 'id'])), layeredDatapoints); // { [layeredKey]: { [x.id]: dp } }
72
+ var datapoints = R.addIndex(R.map)(function (serieValue, index) {
130
73
  var serieValueId = serieValue.id;
131
74
  var x = (0, _dimensionUtils.dimensionValueDisplay)(display)(serieValue);
132
- var y = (0, _map3.default)(layerSeries, function (_ref) {
75
+ var y = R.map(function (_ref) {
133
76
  var layerKey = _ref.layerKey;
134
- return (0, _get3.default)(layeredDatapointsKeyedByX, layerKey + '.' + serieValueId + '.y', null);
135
- });
136
- var formaters = (0, _map3.default)(layerSeries, function (_ref2) {
77
+ return R.pathOr(null, [layerKey, serieValueId, 'y'], layeredDatapointsKeyedByX);
78
+ }, layerSeries);
79
+ var formaters = R.map(function (_ref2) {
137
80
  var layerKey = _ref2.layerKey;
138
- return (0, _get3.default)(layeredDatapointsKeyedByX, layerKey + '.' + serieValueId + '.formater', null);
139
- });
81
+ return R.pathOr(null, [layerKey, serieValueId, 'formater'], layeredDatapointsKeyedByX);
82
+ }, layerSeries);
140
83
  return { category: x, formaters: formaters, index: index, x: x, y: y, key: serieValueId };
141
- });
84
+ }, serieDimension.values);
85
+ var _datapoints = R.when(R.pipe(R.length, R.equals(1)), R.pipe(R.set(R.lensPath([0, 'category']), ''), R.set(R.lensPath([0, 'x']), '')), datapoints);
142
86
  return {
143
- datapoints: datapoints,
144
- layerSeries: (0, _map3.default)(layerSeries, function (layer) {
87
+ datapoints: _datapoints,
88
+ layerSeries: R.map(function (layer) {
145
89
  return {
146
- id: (0, _join3.default)((0, _map3.default)(layer.layerDimensions, function (l) {
147
- return l.id;
148
- }), ' - '),
149
- label: (0, _join3.default)((0, _map3.default)(layer.layerDimensions, function (l) {
150
- return l.label;
151
- }), ' - ')
90
+ id: R.pipe(R.prop('layerDimensions'), R.pluck('id'), R.join(' - '))(layer),
91
+ label: R.pipe(R.prop('layerDimensions'), R.pluck('label'), R.join(' - '))(layer)
152
92
  };
153
- })
93
+ }, layerSeries)
154
94
  };
155
95
  };
156
96
 
157
- var percentSerie = function percentSerie(serie) {
158
- return [{
159
- layerSeries: serie.layerSeries,
160
- datapoints: (0, _map3.default)(serie.datapoints, function (dp) {
161
- var total = (0, _sumBy3.default)(dp.y, function (val) {
162
- return Math.abs(val);
163
- });
164
- if (!total) {
165
- return dp;
166
- }
167
- return (0, _extends4.default)({}, dp, {
168
- y: (0, _map3.default)(dp.y, function (value) {
169
- return Math.abs(value) / total * 100;
170
- }),
171
- formaters: null
172
- });
173
- })
174
- }];
175
- };
97
+ var percentSerie = R.pipe(R.over(R.lensProp('datapoints'), R.map(function (dp) {
98
+ var total = R.pipe(R.map(function (v) {
99
+ return Math.abs(v);
100
+ }), R.sum)(dp.y);
101
+ if (!total) {
102
+ return dp;
103
+ }
104
+ return (0, _extends3.default)({}, dp, {
105
+ y: R.map(function (v) {
106
+ return Math.abs(v) / total * 100;
107
+ }, dp.y),
108
+ formaters: null
109
+ });
110
+ })), R.of);
176
111
 
177
- var serieSortedByTotal = function serieSortedByTotal(serie) {
178
- return [{
179
- layerSeries: serie.layerSeries,
180
- datapoints: (0, _sortBy3.default)(serie.datapoints, function (dp) {
181
- return (0, _sumBy3.default)(dp.y, function (val) {
182
- return val > 0 ? -1 * val : 0;
183
- });
184
- })
185
- }];
186
- };
112
+ var serieSortedByTotal = R.pipe(R.over(R.lensProp('datapoints'), R.sortBy(R.pipe(R.prop('y'), R.map(function (v) {
113
+ return v > 0 ? R.negate(v) : 0;
114
+ }), R.sum))), R.of);
187
115
 
188
- var serieSortedByDataOrder = function serieSortedByDataOrder(serie) {
189
- return [{ //to robustize with date generation, as in timeline series
190
- layerSeries: serie.layerSeries,
191
- datapoints: (0, _sortBy3.default)(serie.datapoints, function (dp) {
192
- return dp.index;
193
- })
194
- }];
195
- };
116
+ var serieSortedByDataOrder = R.pipe(R.over(R.lensProp('datapoints'), R.sortBy(R.prop('index'))), R.of);
196
117
 
197
118
  exports.default = function (_ref3, dimensionsWithValuesIndexedById, singularity, display, formaterAttrs) {
198
119
  var observations = _ref3.observations,
199
120
  dimensions = _ref3.dimensions;
200
121
 
201
- var mode = (0, _get3.default)(singularity, 'mode', 'values');
202
- var serieDimensionId = (0, _get3.default)(singularity, 'id', null);
122
+ var mode = R.propOr('values', 'mode', singularity);
123
+ var serieDimensionId = R.propOr(null, 'id', singularity);
203
124
  var _serie = serie(observations, dimensions, dimensionsWithValuesIndexedById, serieDimensionId, display, formaterAttrs);
204
125
  if (mode === 'percent') {
205
126
  return percentSerie(_serie);
206
127
  } else if ((0, _dotstatsuiteSdmxjs.isTimePeriodDimension)({ id: serieDimensionId })) {
207
128
  return serieSortedByDataOrder(_serie);
208
129
  }
209
- return serieSortedByTotal(_serie);
130
+ //console.log('raw serie', _serie);
131
+ var res = serieSortedByTotal(_serie);
132
+ //console.log('serie', res);
133
+ return res;
210
134
  };
@@ -482,10 +482,7 @@ var _symbolDimension = function _symbolDimension(data, ids) {
482
482
  var symbolDimension = exports.symbolDimension = (0, _memoizee2.default)(_symbolDimension);
483
483
 
484
484
  var _stackedDimension = function _stackedDimension(data, singularity) {
485
- var _splitDimensions4 = splitDimensions(data),
486
- values = _splitDimensions4.values;
487
-
488
- return (0, _stackedDimension3.default)(values, singularity);
485
+ return (0, _stackedDimension3.default)(splitDimensions(data), singularity);
489
486
  };
490
487
  var stackedDimension = exports.stackedDimension = (0, _memoizee2.default)(_stackedDimension);
491
488
 
@@ -618,8 +615,8 @@ var parseFocus = exports.parseFocus = (0, _memoizee2.default)(_parseFocus);
618
615
  var _defaultSubtitle = function _defaultSubtitle(data, display) {
619
616
  var REJECTED_SUBTITLE_IDS = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _constants.DEFAULT_REJECTED_SUBTITLE_IDS;
620
617
 
621
- var _splitDimensions5 = splitDimensions(data),
622
- value = _splitDimensions5.value;
618
+ var _splitDimensions4 = splitDimensions(data),
619
+ value = _splitDimensions4.value;
623
620
 
624
621
  var values = (0, _reduce3.default)(R.reject(R.prop('isHidden'))(value), function (memo, d) {
625
622
  var dvId = (0, _get3.default)(d, 'values[0].id');
@@ -375,7 +375,7 @@ var toProperties = exports.toProperties = function toProperties(props, state, _o
375
375
  },
376
376
  stackedDimension: {
377
377
  id: 'stackedDimension',
378
- isActive: (0, _stacked.isStacked)(props.type),
378
+ isActive: (0, _stacked.isStackedDimActive)(props),
379
379
  options: (0, _utils.chartDimensionOptions)(props, _stacked.isStacked),
380
380
  onChange: R.pipe(_utils.optionParser, (0, _stacked.onChangeStackedDimension)(props, state), _onChange),
381
381
  value: (0, _utils.chartDimensionToOption)('stackedDimension')(props, state)
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.stackedStateFromNewProps = exports.onChangeStackedMode = exports.stackedModeOptions = exports.onChangeStackedDimension = exports.toStackedSingularity = exports.isStacked = undefined;
6
+ exports.stackedStateFromNewProps = exports.onChangeStackedMode = exports.isStackedDimActive = exports.stackedModeOptions = exports.onChangeStackedDimension = exports.toStackedSingularity = exports.isStacked = undefined;
7
7
 
8
8
  var _extends2 = require('babel-runtime/helpers/extends');
9
9
 
@@ -23,6 +23,8 @@ var _constants = require('../constants');
23
23
 
24
24
  var _utils = require('./utils');
25
25
 
26
+ var _ = require('../');
27
+
26
28
  var _focus = require('./focus');
27
29
 
28
30
  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; } }
@@ -68,6 +70,20 @@ var onChangeStackedDimension = exports.onChangeStackedDimension = function onCha
68
70
 
69
71
  var stackedModeOptions = exports.stackedModeOptions = [{ value: _constants.VALUES }, { value: _constants.PERCENT }];
70
72
 
73
+ var isStackedDimActive = exports.isStackedDimActive = function isStackedDimActive(_ref2) {
74
+ var data = _ref2.data,
75
+ type = _ref2.type;
76
+
77
+ var _splitDimensions = (0, _.splitDimensions)(data),
78
+ values = _splitDimensions.values;
79
+
80
+ if (R.length(values) < 2) {
81
+ console.log('niet');
82
+ return false;
83
+ }
84
+ return isStacked(type);
85
+ };
86
+
71
87
  var onChangeStackedMode = exports.onChangeStackedMode = function onChangeStackedMode(value) {
72
88
  return R.has(value, stackedModes) ? { stackedMode: value } : {};
73
89
  };
@@ -86,17 +102,25 @@ var stackedStateFromNewProps = exports.stackedStateFromNewProps = function stack
86
102
 
87
103
  var dimension = getStackedDimension(data, state);
88
104
  if (R.isNil(dimension)) {
89
- var _getGroupedDimensions = (0, _utils.getGroupedDimensions)(data),
90
- area = _getGroupedDimensions.area,
91
- time = _getGroupedDimensions.time,
92
- other = _getGroupedDimensions.other;
93
-
94
- if (!R.isNil(area) && !R.isEmpty(area)) {
95
- dimension = R.head(area);
96
- } else if (!R.isNil(time) && !R.isEmpty(time)) {
97
- dimension = R.head(time);
105
+ var _splitDimensions2 = (0, _.splitDimensions)(data),
106
+ value = _splitDimensions2.value,
107
+ values = _splitDimensions2.values;
108
+
109
+ if (R.length(values) === 1) {
110
+ dimension = R.head(value);
98
111
  } else {
99
- dimension = R.head(other);
112
+ var _getGroupedDimensions = (0, _utils.getGroupedDimensions)(data),
113
+ area = _getGroupedDimensions.area,
114
+ time = _getGroupedDimensions.time,
115
+ other = _getGroupedDimensions.other;
116
+
117
+ if (!R.isNil(area) && !R.isEmpty(area)) {
118
+ dimension = R.head(area);
119
+ } else if (!R.isNil(time) && !R.isEmpty(time)) {
120
+ dimension = R.head(time);
121
+ } else {
122
+ dimension = R.head(other);
123
+ }
100
124
  }
101
125
  }
102
126
  var _mode = R.prop('stackedMode', state);
@@ -51,7 +51,10 @@ var toState = exports.toState = function toState(artefact) {
51
51
  var getPropertyDimension = exports.getPropertyDimension = function getPropertyDimension(property) {
52
52
  return function (data, state) {
53
53
  var statePropertyDimensionId = (0, _ramda.prop)(property, state);
54
- var dimensions = getDimensionsWithValues(data);
54
+
55
+ var _extractSdmxArtefacts = (0, _.extractSdmxArtefacts)(data),
56
+ dimensions = _extractSdmxArtefacts.dimensions;
57
+
55
58
  return (0, _ramda.find)((0, _ramda.propEq)('id', statePropertyDimensionId), dimensions);
56
59
  };
57
60
  };
@@ -116,5 +119,8 @@ var chartDimensionOptions = exports.chartDimensionOptions = function chartDimens
116
119
  return [];
117
120
  }
118
121
  var dimensions = (0, _ramda.prop)('values', (0, _.splitDimensions)(data));
122
+ if ((0, _ramda.equals)(type, _constants.STACKED) && (0, _ramda.length)(dimensions) === 1) {
123
+ return [];
124
+ }
119
125
  return (0, _ramda.map)(artefactToOption(display), dimensions);
120
126
  };
@@ -53,7 +53,9 @@ var getSymbolSeriesItems = function getSymbolSeriesItems(_ref) {
53
53
  }))(data);
54
54
  };
55
55
 
56
- var getStackedSeriesItems = R.pathOr([], ['options', 'serie', 'stacked', 'layerSeries']);
56
+ var getStackedSeriesItems = R.pipe(R.pathOr([], ['options', 'serie', 'stacked', 'layerSeries']), R.when(function (s) {
57
+ return R.length(s) === 1;
58
+ }, R.always([])));
57
59
 
58
60
  var stackedLayerRenderer = function stackedLayerRenderer(_ref2) {
59
61
  var baseColor = _ref2.baseColor;
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": "8.12.0",
4
+ "version": "8.13.0",
5
5
  "main": "lib/index.js",
6
6
  "author": "OECD",
7
7
  "license": "MIT",
@@ -1,20 +1,24 @@
1
- import { get, head, find, isNil } from 'lodash';
1
+ import * as R from 'ramda';
2
2
  import { getRefAreaDimension, getTimePeriodDimension } from '@sis-cc/dotstatsuite-sdmxjs';
3
3
 
4
4
  export default (dimensions, singularity) => {
5
- const mode = get(singularity, 'mode') === 'percent' ? 'percent' : 'values';
5
+ const { value, values } = dimensions;
6
+ const mode = R.prop('mode', singularity) === 'percent' ? 'percent' : 'values';
7
+ if (R.length(values) === 1) {
8
+ return ({ mode, id: R.pathOr(null, [0, 'id'], value) });
9
+ }
6
10
  let serieDimension = null;
7
- const id = get(singularity, 'id');
8
- if (!isNil(id)) {
9
- serieDimension = find(dimensions, { id });
11
+ const id = R.prop('id', singularity);
12
+ if (!R.isNil(id)) {
13
+ serieDimension = R.find(R.propEq('id', id), values);
10
14
  }
11
- const areaDimension = getRefAreaDimension({ dimensions });
12
- const timeDimension = getTimePeriodDimension({ dimensions });
15
+ const areaDimension = getRefAreaDimension({ dimensions: values });
16
+ const timeDimension = getTimePeriodDimension({ dimensions: values });
13
17
 
14
- serieDimension = serieDimension || areaDimension || timeDimension || head(dimensions);
18
+ serieDimension = serieDimension || areaDimension || timeDimension || R.head(values);
15
19
 
16
20
  return ({
17
- mode: mode,
18
- id: get(serieDimension, 'id', null)
21
+ mode,
22
+ id: R.propOr(null, 'id', serieDimension)
19
23
  });
20
24
  }
@@ -1,139 +1,144 @@
1
- import { find, get, groupBy, has, head, isUndefined, join, keyBy, map, reduce, split, sortBy, sumBy, take } from 'lodash';
2
1
  import { isTimePeriodDimension } from '@sis-cc/dotstatsuite-sdmxjs';
3
2
  import { dimensionValueDisplay } from '../dimension-utils';
4
3
  import { getObservationFormater } from '../observation-formater';
4
+ import * as R from 'ramda';
5
5
 
6
6
  const flatDatapoints = (observations, dimensions, dimensionsWithValuesIndexedById, serieDimensionId, display, formaterAttrs) => {
7
- return map(
8
- observations,
7
+
8
+ const datapoints = R.mapObjIndexed(
9
9
  (observationValue, observationKey) => {
10
10
  let x = null;
11
- const y = Number(head(observationValue));
11
+ const y = Number(R.head(observationValue));
12
12
  const formater = getObservationFormater(observationValue, formaterAttrs);
13
- const splittedKey = split(observationKey, ':');
13
+ const splittedKey = R.split(':', observationKey);
14
14
  let layerKey = [];
15
- const layerDimensions = reduce(
16
- splittedKey,
15
+ const layerDimensions = R.addIndex(R.reduce)(
17
16
  (memo, dimensionValueIndex, dimensionIndex) => {
18
- const dimension = get(dimensions, `[${dimensionIndex}]`);
19
- if (has(dimensionsWithValuesIndexedById, dimension.id)) {
20
- const dimensionValue = {
21
- ...get(dimension, `values[${dimensionValueIndex}]`, {}),
22
- index: dimensionValueIndex,
23
- label: dimensionValueDisplay(display)(get(dimension, `values[${dimensionValueIndex}]`, {}))
24
- }
25
- if (dimension.id === serieDimensionId) {
26
- x = dimensionValue;
27
- }
28
- else {
29
- memo.push(dimensionValue);
30
- layerKey.push(dimensionValueIndex);
31
- }
17
+ const dimension = R.nth(dimensionIndex, dimensions);
18
+ const _dimensionValue = R.pathOr({}, ['values', Number(dimensionValueIndex)], dimension);
19
+ const label = dimensionValueDisplay(display)(_dimensionValue);
20
+ const dimensionValue = {
21
+ ..._dimensionValue,
22
+ index: Number(dimensionValueIndex),
23
+ label
24
+ };
25
+ if (dimension.id === serieDimensionId) {
26
+ x = dimensionValue;
27
+ }
28
+ else if (R.has(dimension.id, dimensionsWithValuesIndexedById)) {
29
+ memo.push(dimensionValue);
30
+ layerKey.push(dimensionValueIndex);
32
31
  }
33
32
  return memo;
34
33
  },
35
- []
34
+ [],
35
+ splittedKey
36
36
  );
37
- return ({ formater, x, y, layerDimensions, layerKey: join(layerKey, ':') });
38
- }
37
+ return ({ formater, x, y, layerDimensions, layerKey: R.join(':', layerKey) });
38
+ },
39
+ observations
39
40
  );
41
+
42
+ return R.values(datapoints);
40
43
  };
41
44
 
42
45
  const serie = (observations, dimensions, dimensionsWithValuesIndexedById, serieDimensionId, display, formaterAttrs) => {
43
- const serieDimension = find(dimensionsWithValuesIndexedById, d => d.id === serieDimensionId);
44
- if (isUndefined(serieDimension)) {
45
- return [];
46
+ const serieDimension = R.find(R.propEq('id', serieDimensionId), dimensions);
47
+ if (R.isNil(serieDimension)) {
48
+ return { datapoints: [], layerSeries: [] };
46
49
  }
47
50
  const _flatDatapoints = flatDatapoints(observations, dimensions, dimensionsWithValuesIndexedById, serieDimensionId, display, formaterAttrs);
48
- const layeredDatapoints = groupBy(
49
- _flatDatapoints,
50
- dp => dp.layerKey
51
+
52
+ const layeredDatapoints = R.groupBy(
53
+ R.prop('layerKey'),
54
+ _flatDatapoints
51
55
  ); // { [layeredKey]: [dps] }
52
- const layerFullSeries = map(
53
- layeredDatapoints,
54
- (datapoints, layerKey) => ({ layerDimensions: get(head(datapoints), 'layerDimensions'), layerKey })
56
+
57
+ const layerFullSeries = R.map(
58
+ datapoints => ({
59
+ layerDimensions: R.prop('layerDimensions', R.head(datapoints)),
60
+ layerKey: R.prop('layerKey', R.head(datapoints))
61
+ }),
62
+ R.values(layeredDatapoints)
55
63
  ); // [{ layerDimensions, layerKey }]
56
- const layerSeries = take(sortBy(layerFullSeries, layer => layer.layerKey), 5);
57
- const layeredDatapointsKeyedByX = reduce(
58
- layeredDatapoints,
59
- (memo, layerDps, key) => {
60
- const dps = keyBy(layerDps, dp => get(dp, 'x.id', ''));
61
- return ({
62
- ...memo,
63
- [`${key}`]: dps
64
- });
65
- },
66
- {}
64
+ const layerSeries = R.take(5, R.sortBy(R.prop('layerKey'), layerFullSeries));
65
+ const layeredDatapointsKeyedByX = R.mapObjIndexed(
66
+ R.indexBy(R.path(['x', 'id'])),
67
+ layeredDatapoints
67
68
  ); // { [layeredKey]: { [x.id]: dp } }
68
- const datapoints = map(
69
- serieDimension.values,
69
+ const datapoints = R.addIndex(R.map)(
70
70
  (serieValue, index) => {
71
71
  const serieValueId = serieValue.id;
72
72
  const x = dimensionValueDisplay(display)(serieValue);
73
- const y = map(
73
+ const y = R.map(
74
+ ({ layerKey }) => R.pathOr(null, [layerKey, serieValueId, 'y'], layeredDatapointsKeyedByX),
74
75
  layerSeries,
75
- ({ layerKey }) => get(layeredDatapointsKeyedByX, `${layerKey}.${serieValueId}.y`, null)
76
76
  );
77
- const formaters = map(
77
+ const formaters = R.map(
78
+ ({ layerKey }) => R.pathOr(null, [layerKey, serieValueId, 'formater'], layeredDatapointsKeyedByX),
78
79
  layerSeries,
79
- ({ layerKey }) => get(layeredDatapointsKeyedByX, `${layerKey}.${serieValueId}.formater`, null)
80
80
  );
81
81
  return ({ category: x, formaters, index, x, y, key: serieValueId });
82
- }
82
+ },
83
+ serieDimension.values,
84
+ );
85
+ const _datapoints = R.when(
86
+ R.pipe(R.length, R.equals(1)),
87
+ R.pipe(
88
+ R.set(R.lensPath([0, 'category']), ''),
89
+ R.set(R.lensPath([0, 'x']), ''),
90
+ ),
91
+ datapoints
83
92
  );
84
93
  return ({
85
- datapoints,
86
- layerSeries: map(
87
- layerSeries,
94
+ datapoints: _datapoints,
95
+ layerSeries: R.map(
88
96
  layer => ({
89
- id: join(map(layer.layerDimensions, l => l.id), ' - '),
90
- label: join(map(layer.layerDimensions, l => l.label), ' - '),
91
- })
97
+ id: R.pipe(R.prop('layerDimensions'), R.pluck('id'), R.join(' - '))(layer),
98
+ label: R.pipe(R.prop('layerDimensions'), R.pluck('label'), R.join(' - '))(layer),
99
+ }),
100
+ layerSeries
92
101
  )
93
102
  });
94
103
  };
95
104
 
96
- const percentSerie = (serie) => {
97
- return [{
98
- layerSeries: serie.layerSeries,
99
- datapoints: map(
100
- serie.datapoints,
101
- dp => {
102
- const total = sumBy(dp.y, val => Math.abs(val));
103
- if (!total) {
104
- return dp;
105
- }
106
- return ({
107
- ...dp,
108
- y: map(dp.y, value => (Math.abs(value) / total) * 100),
109
- formaters: null,
110
- });
105
+ const percentSerie = R.pipe(
106
+ R.over(
107
+ R.lensProp('datapoints'),
108
+ R.map(dp => {
109
+ const total = R.pipe(R.map(v => Math.abs(v)), R.sum)(dp.y);
110
+ if (!total) {
111
+ return dp;
111
112
  }
112
- )
113
- }];
114
- };
113
+ return ({
114
+ ...dp,
115
+ y: R.map(v => (Math.abs(v) / total) * 100, dp.y),
116
+ formaters: null,
117
+ });
118
+ })
119
+ ),
120
+ R.of
121
+ );
115
122
 
116
- const serieSortedByTotal = (serie) => {
117
- return [{
118
- layerSeries: serie.layerSeries,
119
- datapoints: sortBy(
120
- serie.datapoints,
121
- dp => sumBy(dp.y, val => val > 0 ? (-1 * val) : 0)
122
- )
123
- }];
124
- };
123
+ const serieSortedByTotal = R.pipe(
124
+ R.over(
125
+ R.lensProp('datapoints'),
126
+ R.sortBy(R.pipe(R.prop('y'), R.map(v => v > 0 ? R.negate(v) : 0), R.sum))
127
+ ),
128
+ R.of
129
+ );
125
130
 
126
- const serieSortedByDataOrder = (serie) => [{ //to robustize with date generation, as in timeline series
127
- layerSeries: serie.layerSeries,
128
- datapoints: sortBy(
129
- serie.datapoints,
130
- dp => dp.index
131
- )
132
- }];
131
+ const serieSortedByDataOrder = R.pipe(
132
+ R.over(
133
+ R.lensProp('datapoints'),
134
+ R.sortBy(R.prop('index'))
135
+ ),
136
+ R.of
137
+ );
133
138
 
134
139
  export default ({ observations, dimensions }, dimensionsWithValuesIndexedById, singularity, display, formaterAttrs) => {
135
- const mode = get(singularity, 'mode', 'values');
136
- const serieDimensionId = get(singularity, 'id', null);
140
+ const mode = R.propOr('values', 'mode', singularity);
141
+ const serieDimensionId = R.propOr(null, 'id', singularity);
137
142
  const _serie = serie(observations, dimensions, dimensionsWithValuesIndexedById, serieDimensionId, display, formaterAttrs);
138
143
  if (mode === 'percent') {
139
144
  return percentSerie(_serie);
@@ -141,5 +146,8 @@ export default ({ observations, dimensions }, dimensionsWithValuesIndexedById, s
141
146
  else if (isTimePeriodDimension({ id: serieDimensionId })) {
142
147
  return serieSortedByDataOrder(_serie);
143
148
  }
144
- return serieSortedByTotal(_serie);
149
+ //console.log('raw serie', _serie);
150
+ const res = serieSortedByTotal(_serie);
151
+ //console.log('serie', res);
152
+ return res;
145
153
  };
@@ -129,8 +129,7 @@ const _symbolDimension = (data, ids) => {
129
129
  export const symbolDimension = memoizee(_symbolDimension);
130
130
 
131
131
  const _stackedDimension = (data, singularity) => {
132
- const { values } = splitDimensions(data);
133
- return __stackedDimension(values, singularity);
132
+ return __stackedDimension(splitDimensions(data), singularity);
134
133
  }
135
134
  export const stackedDimension = memoizee(_stackedDimension);
136
135
 
@@ -40,6 +40,7 @@ import {
40
40
  } from './symbol';
41
41
  import {
42
42
  isStacked,
43
+ isStackedDimActive,
43
44
  onChangeStackedDimension,
44
45
  onChangeStackedMode,
45
46
  stackedModeOptions,
@@ -404,7 +405,7 @@ export const toProperties = (props, state, onChange) => ({
404
405
  },
405
406
  stackedDimension: {
406
407
  id: 'stackedDimension',
407
- isActive: isStacked(props.type),
408
+ isActive: isStackedDimActive(props),
408
409
  options: chartDimensionOptions(props, isStacked),
409
410
  onChange: R.pipe(
410
411
  optionParser,
@@ -6,6 +6,7 @@ import {
6
6
  getPropertyDimension,
7
7
  toState
8
8
  } from './utils';
9
+ import { splitDimensions } from '../';
9
10
  import { focusStateFromNewProps } from './focus';
10
11
 
11
12
  const getStackedDimension = getPropertyDimension('stackedDimension');
@@ -38,6 +39,15 @@ export const onChangeStackedDimension = ({ data }, state) => (value) => {
38
39
 
39
40
  export const stackedModeOptions = [{ value: VALUES }, { value: PERCENT }];
40
41
 
42
+ export const isStackedDimActive = ({ data, type }) => {
43
+ const { values } = splitDimensions(data);
44
+ if (R.length(values) < 2) {
45
+ console.log('niet');
46
+ return false;
47
+ }
48
+ return isStacked(type);
49
+ };
50
+
41
51
  export const onChangeStackedMode = (value) => R.has(value, stackedModes)
42
52
  ? ({ stackedMode: value })
43
53
  : ({});
@@ -54,15 +64,21 @@ export const stackedStateFromNewProps = (props, state) => {
54
64
 
55
65
  let dimension = getStackedDimension(data, state);
56
66
  if (R.isNil(dimension)) {
57
- const { area, time, other } = getGroupedDimensions(data);
58
- if (!R.isNil(area) && !R.isEmpty(area)) {
59
- dimension = R.head(area);
60
- }
61
- else if (!R.isNil(time) && !R.isEmpty(time)) {
62
- dimension = R.head(time)
67
+ const { value, values } = splitDimensions(data);
68
+ if (R.length(values) === 1) {
69
+ dimension = R.head(value);
63
70
  }
64
71
  else {
65
- dimension = R.head(other);
72
+ const { area, time, other } = getGroupedDimensions(data);
73
+ if (!R.isNil(area) && !R.isEmpty(area)) {
74
+ dimension = R.head(area);
75
+ }
76
+ else if (!R.isNil(time) && !R.isEmpty(time)) {
77
+ dimension = R.head(time)
78
+ }
79
+ else {
80
+ dimension = R.head(other);
81
+ }
66
82
  }
67
83
  }
68
84
  const _mode = R.prop('stackedMode', state);
@@ -1,10 +1,12 @@
1
1
  import {
2
- groupBy,
2
+ equals,
3
3
  find,
4
+ groupBy,
4
5
  has,
5
6
  head,
6
7
  is,
7
8
  isNil,
9
+ length,
8
10
  map,
9
11
  not,
10
12
  omit,
@@ -15,7 +17,7 @@ import {
15
17
  } from 'ramda';
16
18
  import { isRefAreaDimension, isTimePeriodDimension } from '@sis-cc/dotstatsuite-sdmxjs';
17
19
  import { extractSdmxArtefacts, parseDisplay, splitDimensions } from '../';
18
- import { CHORO, H_SYMBOL, SCATTER, TYPES, V_SYMBOL } from '../constants';
20
+ import { CHORO, H_SYMBOL, SCATTER, STACKED, TYPES, V_SYMBOL } from '../constants';
19
21
  import { dimensionValueDisplay } from '../dimension-utils';
20
22
 
21
23
  export const isNumber = (input) => {
@@ -44,7 +46,7 @@ export const toState = (artefact) => prop('id', artefact);
44
46
 
45
47
  export const getPropertyDimension = (property) => (data, state) => {
46
48
  const statePropertyDimensionId = prop(property, state);
47
- const dimensions = getDimensionsWithValues(data);
49
+ const { dimensions } = extractSdmxArtefacts(data);
48
50
  return find(
49
51
  propEq('id', statePropertyDimensionId),
50
52
  dimensions
@@ -99,6 +101,9 @@ export const chartDimensionOptions = ({ data, type, display }, typeValidator) =>
99
101
  return [];
100
102
  }
101
103
  const dimensions = prop('values', splitDimensions(data));
104
+ if (equals(type, STACKED) && length(dimensions) === 1) {
105
+ return [];
106
+ }
102
107
  return map(
103
108
  artefactToOption(display),
104
109
  dimensions
@@ -33,7 +33,10 @@ const getSymbolSeriesItems = ({ data, options }) => {
33
33
  )(data);
34
34
  };
35
35
 
36
- const getStackedSeriesItems = R.pathOr([], ['options', 'serie', 'stacked', 'layerSeries']);
36
+ const getStackedSeriesItems = R.pipe(
37
+ R.pathOr([], ['options', 'serie', 'stacked', 'layerSeries']),
38
+ R.when(s => R.length(s) === 1, R.always([]))
39
+ );
37
40
 
38
41
  const stackedLayerRenderer = ({ baseColor }) => (
39
42
  <svg width="21" height="14">