@sis-cc/dotstatsuite-visions 7.18.6 → 7.19.1

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.
@@ -0,0 +1,382 @@
1
+ 'use strict';
2
+
3
+ exports.__esModule = true;
4
+ exports.getDepth = exports.getHasChildrenOnLevel = exports.getDisplayedIds = exports.getHierarchicalId = undefined;
5
+
6
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
7
+
8
+ var _react = require('react');
9
+
10
+ var _react2 = _interopRequireDefault(_react);
11
+
12
+ var _propTypes = require('prop-types');
13
+
14
+ var _propTypes2 = _interopRequireDefault(_propTypes);
15
+
16
+ var _ramda = require('ramda');
17
+
18
+ var R = _interopRequireWildcard(_ramda);
19
+
20
+ var _AutoSizer = require('react-virtualized/dist/commonjs/AutoSizer');
21
+
22
+ var _AutoSizer2 = _interopRequireDefault(_AutoSizer);
23
+
24
+ var _List = require('react-virtualized/dist/commonjs/List');
25
+
26
+ var _List2 = _interopRequireDefault(_List);
27
+
28
+ var _Button = require('@material-ui/core/Button');
29
+
30
+ var _Button2 = _interopRequireDefault(_Button);
31
+
32
+ var _ExpandMore = require('@material-ui/icons/ExpandMore');
33
+
34
+ var _ExpandMore2 = _interopRequireDefault(_ExpandMore);
35
+
36
+ var _ExpandLess = require('@material-ui/icons/ExpandLess');
37
+
38
+ var _ExpandLess2 = _interopRequireDefault(_ExpandLess);
39
+
40
+ var _List3 = require('@material-ui/core/List');
41
+
42
+ var _List4 = _interopRequireDefault(_List3);
43
+
44
+ var _Item = require('./Item');
45
+
46
+ var _Item2 = _interopRequireDefault(_Item);
47
+
48
+ var _core = require('@material-ui/core');
49
+
50
+ var _styles = require('../ScopeList/styles');
51
+
52
+ var _utils = require('../utils');
53
+
54
+ 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; } }
55
+
56
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
57
+
58
+ var getSingleItemScope = function getSingleItemScope(item) {
59
+ return [item];
60
+ };
61
+
62
+ var getHierarchicalId = exports.getHierarchicalId = function getHierarchicalId(item) {
63
+ return R.prop('hierarchicalId', item) || R.prop('id', item);
64
+ };
65
+
66
+ var getDisplayedIds = exports.getDisplayedIds = function getDisplayedIds(items, grouped, expanded) {
67
+ return R.pipe(R.map(function (item) {
68
+ var hierarchicalId = getHierarchicalId(item);
69
+ if (R.has(hierarchicalId, grouped) && R.has(hierarchicalId, expanded)) {
70
+ var children = getDisplayedIds(R.prop(hierarchicalId, grouped), grouped, expanded);
71
+ return R.prepend(hierarchicalId, children);
72
+ }
73
+ return [hierarchicalId];
74
+ }), R.unnest)(items);
75
+ };
76
+
77
+ var getHasChildrenOnLevel = exports.getHasChildrenOnLevel = function getHasChildrenOnLevel(groupedItems) {
78
+ return function (item) {
79
+ if (R.has(getHierarchicalId(item), groupedItems)) {
80
+ return true;
81
+ }
82
+ return R.pipe(R.prop(R.propOr('#ROOT', 'parentId', item)), R.find(function (it) {
83
+ return R.has(getHierarchicalId(it), groupedItems);
84
+ }), R.complement(R.isNil))(groupedItems);
85
+ };
86
+ };
87
+
88
+ var getDepth = exports.getDepth = function getDepth(indexedItems) {
89
+ return function (item) {
90
+ if (R.isNil(item.parentId)) {
91
+ return 0;
92
+ }
93
+ var parent = R.prop(item.parentId, indexedItems);
94
+ return getDepth(indexedItems)(parent) + 1;
95
+ };
96
+ };
97
+
98
+ var VirtualizedTree = function VirtualizedTree(props) {
99
+ var accessibility = props.accessibility,
100
+ changeSelection = props.changeSelection,
101
+ disableAccessor = props.disableAccessor,
102
+ HTMLRenderer = props.HTMLRenderer,
103
+ items = props.items,
104
+ labelRenderer = props.labelRenderer,
105
+ labels = props.labels,
106
+ withExpandControl = props.withExpandControl,
107
+ _props$maxTreeHeight = props.maxTreeHeight,
108
+ maxTreeHeight = _props$maxTreeHeight === undefined ? 250 : _props$maxTreeHeight,
109
+ _props$getItemScope = props.getItemScope,
110
+ getItemScope = _props$getItemScope === undefined ? getSingleItemScope : _props$getItemScope;
111
+
112
+ var theme = (0, _core.useTheme)();
113
+
114
+ var _useState = (0, _react.useState)({}),
115
+ expandedIds = _useState[0],
116
+ setExpandedIds = _useState[1];
117
+
118
+ var _useState2 = (0, _react.useState)(undefined),
119
+ scrollTop = _useState2[0],
120
+ setScrollTop = _useState2[1];
121
+
122
+ var _useState3 = (0, _react.useState)([]),
123
+ shiftIndexes = _useState3[0],
124
+ setShiftIndexes = _useState3[1];
125
+
126
+ var _useState4 = (0, _react.useState)({}),
127
+ selectIds = _useState4[0],
128
+ setSelectIds = _useState4[1];
129
+
130
+ var _useState5 = (0, _react.useState)(false),
131
+ isMouseDown = _useState5[0],
132
+ setIsMouseDown = _useState5[1];
133
+
134
+ var _useMemo = (0, _react.useMemo)(function () {
135
+ var indexedItemsById = R.indexBy(getHierarchicalId, items);
136
+ var groupedItemsByParentId = R.groupBy(R.propOr('#ROOT', 'parentId'), items);
137
+ return { indexedItemsById: indexedItemsById, groupedItemsByParentId: groupedItemsByParentId };
138
+ }, [items]),
139
+ indexedItemsById = _useMemo.indexedItemsById,
140
+ groupedItemsByParentId = _useMemo.groupedItemsByParentId;
141
+
142
+ var list = (0, _react.useMemo)(function () {
143
+ return getDisplayedIds(R.propOr([], '#ROOT', groupedItemsByParentId), groupedItemsByParentId, expandedIds);
144
+ }, [items, expandedIds]);
145
+ var multiSelect = function multiSelect(id) {
146
+ var item = R.prop(id, indexedItemsById);
147
+ var ids = R.pipe(getItemScope, R.filter(function (v) {
148
+ return v.isSelected === item.isSelected;
149
+ }), R.map(getHierarchicalId))(item);
150
+ if (R.has(id, selectIds)) {
151
+ setSelectIds(R.omit(ids, selectIds));
152
+ } else {
153
+ setSelectIds(_extends({}, selectIds, R.indexBy(R.identity, ids)));
154
+ }
155
+ };
156
+ var shiftSelect = function shiftSelect(index) {
157
+ if (R.isEmpty(shiftIndexes)) {
158
+ var item = R.nth(index, list);
159
+ var ids = R.pipe(getItemScope, R.filter(function (v) {
160
+ return v.isSelected === item.isSelected;
161
+ }), R.map(getHierarchicalId), R.indexBy(R.identity))(item);
162
+ setShiftIndexes(R.append(index, shiftIndexes));
163
+ setSelectIds(ids);
164
+ } else if (R.length(shiftIndexes) === 1 && index === R.head(shiftIndexes)) {
165
+ setShiftIndexes([]);
166
+ setSelectIds({});
167
+ } else {
168
+ var indexes = [R.head(shiftIndexes), index];
169
+ var isSelected = void 0;
170
+ var _selectIds = R.pipe(R.slice(Math.min.apply(Math, indexes), Math.max.apply(Math, indexes) + 1), function (ids) {
171
+ return R.props(ids, indexedItemsById);
172
+ }, function (items) {
173
+ isSelected = R.pipe(R.head, R.prop('isSelected'))(items);
174
+ return items;
175
+ }, R.map(getItemScope), R.unnest, R.filter(function (v) {
176
+ return v.isSelected === isSelected;
177
+ }), R.map(getHierarchicalId), R.indexBy(R.identity))(list);
178
+ setShiftIndexes(indexes);
179
+ setSelectIds(_selectIds);
180
+ }
181
+ };
182
+ var apply = function apply() {
183
+ if (!R.isEmpty(selectIds)) {
184
+ var ids = R.values(selectIds);
185
+ var selection = R.pipe(R.props(ids), R.pluck('id'), R.uniq)(indexedItemsById);
186
+ changeSelection(selection);
187
+ setShiftIndexes([]);
188
+ setSelectIds({});
189
+ setIsMouseDown(false);
190
+ }
191
+ };
192
+ var eventsCallbacks = function eventsCallbacks(id, index) {
193
+ return {
194
+ onMouseUp: isMouseDown ? function () {
195
+ apply();
196
+ } : null,
197
+ onMouseDown: function onMouseDown(e) {
198
+ if (e.ctrlKey || e.shiftKey) {
199
+ return;
200
+ }
201
+ multiSelect(id);
202
+ setIsMouseDown(true);
203
+ },
204
+ onMouseEnter: isMouseDown ? function (e) {
205
+ if (e.ctrlKey || e.shiftKey) {
206
+ return;
207
+ }
208
+ multiSelect(id);
209
+ } : null,
210
+ onClick: function onClick(e) {
211
+ if (e.ctrlKey) {
212
+ multiSelect(id);
213
+ } else if (e.shiftKey) {
214
+ shiftSelect(index);
215
+ }
216
+ }
217
+ };
218
+ };
219
+ var onKeyUp = function onKeyUp(e) {
220
+ if (e.key === 'Shift' && !R.isEmpty(shiftIndexes)) {
221
+ apply();
222
+ } else if (e.key === 'Control' && !R.isEmpty(selectIds)) {
223
+ apply();
224
+ }
225
+ };
226
+ var isItemSelected = function isItemSelected(item, index) {
227
+ if (!R.isEmpty(shiftIndexes) && index >= Math.min.apply(Math, shiftIndexes) && index <= Math.max.apply(Math, shiftIndexes)) {
228
+ return !item.isSelected;
229
+ }
230
+ if (!R.isEmpty(selectIds) && R.has(getHierarchicalId(item), selectIds)) {
231
+ return !item.isSelected;
232
+ }
233
+ return !!item.isSelected;
234
+ };
235
+ var ref = (0, _react.useRef)();
236
+ var classes = (0, _styles.useStyles)();
237
+
238
+ (0, _react.useEffect)(function () {
239
+ var current = ref.current;
240
+ var handler = function handler(event) {
241
+ if (R.or(event.ctrlKey, event.shiftKey)) {
242
+ // ugly hack, to get div element created by react-virtuliase (get scroll height)
243
+ // ReactVirtualized__Grid ReactVirtualized__List made the scrollbar
244
+ var scrollEl = R.path(['children', 0, 'children', 0], current);
245
+ var isBottom = R.gte(R.add(R.prop('scrollTop')(scrollEl), R.prop('clientHeight')(scrollEl)), R.prop('scrollHeight')(scrollEl));
246
+ var nextpos = (scrollTop || scrollEl.scrollTop) + event.deltaY / 2;
247
+ if (R.or(event.deltaY < 0, event.deltaY > 0 && R.not(isBottom))) {
248
+ setScrollTop(nextpos < 0 ? 0 : nextpos);
249
+ }
250
+ event.preventDefault();
251
+ }
252
+ if (R.not(event.ctrlKey) && R.not(event.shiftKey)) {
253
+ setScrollTop(undefined); // should be undefined if the user want use the normal scroll
254
+ }
255
+ };
256
+ if (scrollTop === 0) {
257
+ setScrollTop(undefined);
258
+ }
259
+ if (R.isNil(current)) return;
260
+
261
+ current.addEventListener('wheel', handler, { passive: false });
262
+ return function () {
263
+ current.removeEventListener('wheel', handler, { passive: false });
264
+ };
265
+ }, [scrollTop]);
266
+ var maxHeight = R.pipe(R.length, R.multiply(_styles.height), R.ifElse(R.gt(maxTreeHeight), R.add(10), R.always(maxTreeHeight)))(list);
267
+
268
+ var expand = function expand(index) {
269
+ var parentId = R.nth(index, list);
270
+ setExpandedIds(R.assoc(parentId, parentId, expandedIds));
271
+ };
272
+
273
+ var collapse = function collapse(index) {
274
+ var parentId = R.nth(index, list);
275
+ setExpandedIds(R.dissoc(parentId, expandedIds));
276
+ };
277
+
278
+ var expandAll = function expandAll() {
279
+ setExpandedIds(indexedItemsById);
280
+ };
281
+
282
+ var collapseAll = function collapseAll() {
283
+ setExpandedIds({});
284
+ };
285
+
286
+ if (R.isEmpty(list)) {
287
+ return null;
288
+ }
289
+ var isRtl = (0, _utils.getIsRtl)(theme);
290
+
291
+ return _react2.default.createElement(
292
+ _react.Fragment,
293
+ null,
294
+ _react2.default.createElement(
295
+ _List4.default,
296
+ { disablePadding: true, style: { height: maxHeight + 2 }, onKeyUp: onKeyUp, ref: ref },
297
+ _react2.default.createElement(
298
+ _AutoSizer2.default,
299
+ null,
300
+ function (_ref) {
301
+ var height = _ref.height,
302
+ width = _ref.width;
303
+ return _react2.default.createElement(_List2.default, {
304
+ overscan: 10,
305
+ tabIndex: -1,
306
+ height: height + 2,
307
+ width: width,
308
+ scrollTop: scrollTop // control scroll position with ctrl or shift key
309
+ , rowCount: R.length(list),
310
+ rowHeight: R.add(1)(_styles.height) // 1 is space between elements
311
+ , rowRenderer: function rowRenderer(_ref2) {
312
+ var index = _ref2.index,
313
+ style = _ref2.style;
314
+
315
+ var itemId = R.nth(index, list);
316
+ var item = R.prop(itemId, indexedItemsById);
317
+ return _react2.default.createElement(_Item2.default, _extends({}, item, {
318
+ id: getHierarchicalId(item),
319
+ label: labelRenderer(item),
320
+ key: getHierarchicalId(item),
321
+ depth: getDepth(indexedItemsById)(item),
322
+ hasChild: R.has(itemId, groupedItemsByParentId),
323
+ hasChildrenOnLevel: getHasChildrenOnLevel(groupedItemsByParentId)(item),
324
+ changeList: R.has(itemId, expandedIds) ? function () {
325
+ return collapse(index);
326
+ } : function () {
327
+ return expand(index);
328
+ },
329
+ NavigateIcon: R.has(itemId, expandedIds) ? _ExpandLess2.default : _ExpandMore2.default,
330
+ isRtl: isRtl,
331
+ isDisabled: R.is(Function, disableAccessor) ? disableAccessor(item) : false,
332
+ eventsCallbacks: eventsCallbacks,
333
+ isSelected: isItemSelected(item, index),
334
+ HTMLRenderer: HTMLRenderer,
335
+ classes: classes,
336
+ labels: labels,
337
+ index: index,
338
+ style: style,
339
+ accessibility: accessibility,
340
+ ariaLabel: R.prop('navigateNext')(labels)
341
+ }));
342
+ }
343
+ });
344
+ }
345
+ )
346
+ ),
347
+ withExpandControl && _react2.default.createElement(
348
+ 'div',
349
+ null,
350
+ _react2.default.createElement(
351
+ _Button2.default,
352
+ { onClick: collapseAll, color: 'primary' },
353
+ R.prop('colapseAll', labels)
354
+ ),
355
+ _react2.default.createElement(
356
+ _Button2.default,
357
+ { onClick: expandAll, color: 'primary' },
358
+ R.prop('expandAll', labels)
359
+ )
360
+ )
361
+ );
362
+ };
363
+
364
+ VirtualizedTree.propTypes = process.env.NODE_ENV !== "production" ? {
365
+ accessibility: _propTypes2.default.bool,
366
+ changeSelection: _propTypes2.default.func,
367
+ disableAccessor: _propTypes2.default.func,
368
+ getItemScope: _propTypes2.default.func,
369
+ HTMLRenderer: _propTypes2.default.func,
370
+ isRtl: _propTypes2.default.bool,
371
+ items: _propTypes2.default.array,
372
+ labels: _propTypes2.default.shape({
373
+ disableItemLabel: _propTypes2.default.string,
374
+ colapseAll: _propTypes2.default.string,
375
+ expandAll: _propTypes2.default.string
376
+ }),
377
+ labelRenderer: _propTypes2.default.func,
378
+ withExpandControl: _propTypes2.default.bool,
379
+ maxTreeHeight: _propTypes2.default.number
380
+ } : {};
381
+
382
+ exports.default = VirtualizedTree;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ exports.__esModule = true;
4
+
5
+ var _VirtualizedTree = require('./VirtualizedTree');
6
+
7
+ Object.defineProperty(exports, 'default', {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _interopRequireDefault(_VirtualizedTree).default;
11
+ }
12
+ });
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ module.exports = exports['default'];
package/lib/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  exports.__esModule = true;
4
- exports.T4_BREAKPOINTS = exports.innerPalette = exports.sisccTheme = exports.AuthDialog = exports.VerticalButton = exports.UserRightForm = exports.Tooltip = exports.ToggleButton = exports.Tag = exports.TablePreview = exports.TableLayout = exports.Cell = exports.TableHtml5 = exports.TableHeader = exports.TableFooter = exports.Spotlight = exports.SisccFooter = exports.Share = exports.Select = exports.ScopeList = exports.reduceChildren = exports.spotlightScopeListEngine = exports.PeriodPicker = exports.Pagination = exports.NoData = exports.Logo = exports.Loading = exports.LabelDivider = exports.InputNumber = exports.Input = exports.ExpansionPanel = exports.DataFooter = exports.DataHeader = exports.Dataflow = exports.DataEdit = exports.Contact = exports.CollapsibleTree = exports.CollapseButtons = exports.Chips = exports.ChartsConfig = exports.Button = exports.Breadcrumbs = exports.ApiQueries = exports.Alert = undefined;
4
+ exports.T4_BREAKPOINTS = exports.innerPalette = exports.sisccTheme = exports.HierarchicalFilter = exports.AdvancedFilterDialog = exports.VirtualizedTree = exports.AuthDialog = exports.VerticalButton = exports.UserRightForm = exports.Tooltip = exports.ToggleButton = exports.Tag = exports.TablePreview = exports.TableLayout = exports.Cell = exports.TableHtml5 = exports.TableHeader = exports.TableFooter = exports.Spotlight = exports.SisccFooter = exports.Share = exports.Select = exports.ScopeList = exports.reduceChildren = exports.spotlightScopeListEngine = exports.PeriodPicker = exports.Pagination = exports.NoData = exports.Logo = exports.Loading = exports.LabelDivider = exports.InputNumber = exports.Input = exports.ExpansionPanel = exports.DataFooter = exports.DataHeader = exports.Dataflow = exports.DataEdit = exports.Contact = exports.CollapsibleTree = exports.CollapseButtons = exports.Chips = exports.ChartsConfig = exports.Button = exports.Breadcrumbs = exports.ApiQueries = exports.Alert = undefined;
5
5
 
6
6
  var _Alert = require('./Alert');
7
7
 
@@ -378,6 +378,33 @@ Object.defineProperty(exports, 'AuthDialog', {
378
378
  }
379
379
  });
380
380
 
381
+ var _VirtualizedTree = require('./VirtualizedTree');
382
+
383
+ Object.defineProperty(exports, 'VirtualizedTree', {
384
+ enumerable: true,
385
+ get: function get() {
386
+ return _interopRequireDefault(_VirtualizedTree).default;
387
+ }
388
+ });
389
+
390
+ var _AdvancedFilterDialog = require('./AdvancedFilterDialog');
391
+
392
+ Object.defineProperty(exports, 'AdvancedFilterDialog', {
393
+ enumerable: true,
394
+ get: function get() {
395
+ return _interopRequireDefault(_AdvancedFilterDialog).default;
396
+ }
397
+ });
398
+
399
+ var _HierarchicalFilter = require('./HierarchicalFilter');
400
+
401
+ Object.defineProperty(exports, 'HierarchicalFilter', {
402
+ enumerable: true,
403
+ get: function get() {
404
+ return _interopRequireDefault(_HierarchicalFilter).default;
405
+ }
406
+ });
407
+
381
408
  var _theme = require('./theme');
382
409
 
383
410
  Object.defineProperty(exports, 'sisccTheme', {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sis-cc/dotstatsuite-visions",
3
- "version": "7.18.6",
3
+ "version": "7.19.1",
4
4
  "description": "Library of visual components",
5
5
  "author": "OECD",
6
6
  "homepage": "https://visions-qa.siscc.org/#o",
@@ -43,6 +43,7 @@
43
43
  "react": "^16.13.0",
44
44
  "react-beautiful-dnd": "^13.0.0",
45
45
  "react-dom": "^16.8.6",
46
+ "react-draggable": "^4.4.5",
46
47
  "react-router-dom": "^5.0.1",
47
48
  "react-virtualized": "^9.21.2",
48
49
  "recompose": "^0.30.0"