@deephaven/iris-grid 0.24.1-beta.3 → 0.25.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.
Files changed (106) hide show
  1. package/dist/ColumnHeaderGroup.d.ts +10 -3
  2. package/dist/ColumnHeaderGroup.d.ts.map +1 -1
  3. package/dist/ColumnHeaderGroup.js +20 -1
  4. package/dist/ColumnHeaderGroup.js.map +1 -1
  5. package/dist/IrisGrid.css.map +1 -1
  6. package/dist/IrisGrid.d.ts +6 -3
  7. package/dist/IrisGrid.d.ts.map +1 -1
  8. package/dist/IrisGrid.js +42 -25
  9. package/dist/IrisGrid.js.map +1 -1
  10. package/dist/IrisGridModel.d.ts +9 -2
  11. package/dist/IrisGridModel.d.ts.map +1 -1
  12. package/dist/IrisGridModel.js +0 -13
  13. package/dist/IrisGridModel.js.map +1 -1
  14. package/dist/IrisGridModelUpdater.d.ts +3 -1
  15. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  16. package/dist/IrisGridModelUpdater.js +5 -1
  17. package/dist/IrisGridModelUpdater.js.map +1 -1
  18. package/dist/IrisGridProxyModel.d.ts +7 -2
  19. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  20. package/dist/IrisGridProxyModel.js +16 -4
  21. package/dist/IrisGridProxyModel.js.map +1 -1
  22. package/dist/IrisGridTableModel.d.ts +1 -1
  23. package/dist/IrisGridTableModel.d.ts.map +1 -1
  24. package/dist/IrisGridTableModel.js.map +1 -1
  25. package/dist/IrisGridTableModelTemplate.d.ts +18 -9
  26. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  27. package/dist/IrisGridTableModelTemplate.js +143 -165
  28. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  29. package/dist/IrisGridTestUtils.d.ts +8 -2
  30. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  31. package/dist/IrisGridTestUtils.js +9 -4
  32. package/dist/IrisGridTestUtils.js.map +1 -1
  33. package/dist/IrisGridTheme.module.css.map +1 -1
  34. package/dist/IrisGridUtils.d.ts +16 -2
  35. package/dist/IrisGridUtils.d.ts.map +1 -1
  36. package/dist/IrisGridUtils.js +151 -48
  37. package/dist/IrisGridUtils.js.map +1 -1
  38. package/dist/index.d.ts +1 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +1 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/sidebar/index.d.ts +1 -1
  43. package/dist/sidebar/index.d.ts.map +1 -1
  44. package/dist/sidebar/index.js +1 -1
  45. package/dist/sidebar/index.js.map +1 -1
  46. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css +68 -0
  47. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +1 -0
  48. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +156 -0
  49. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -0
  50. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +962 -0
  51. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -0
  52. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts +26 -0
  53. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.d.ts.map +1 -0
  54. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +130 -0
  55. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -0
  56. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css +29 -0
  57. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css.map +1 -0
  58. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.d.ts +13 -0
  59. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.d.ts.map +1 -0
  60. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +160 -0
  61. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -0
  62. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts +19 -0
  63. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -0
  64. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +81 -0
  65. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -0
  66. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.d.ts +13 -0
  67. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.d.ts.map +1 -0
  68. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +28 -0
  69. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -0
  70. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts +18 -0
  71. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts.map +1 -0
  72. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +156 -0
  73. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -0
  74. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts +19 -0
  75. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts.map +1 -0
  76. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +144 -0
  77. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -0
  78. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts +7 -0
  79. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts.map +1 -0
  80. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +57 -0
  81. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -0
  82. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +139 -0
  83. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -0
  84. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts +36 -0
  85. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts.map +1 -0
  86. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +44 -0
  87. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -0
  88. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts +4 -0
  89. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts.map +1 -0
  90. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +127 -0
  91. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -0
  92. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.d.ts +20 -0
  93. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.d.ts.map +1 -0
  94. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js +4 -0
  95. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -0
  96. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +55 -0
  97. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -0
  98. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +265 -0
  99. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -0
  100. package/package.json +20 -16
  101. package/dist/sidebar/VisibilityOrderingBuilder.css +0 -156
  102. package/dist/sidebar/VisibilityOrderingBuilder.css.map +0 -1
  103. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +0 -79
  104. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +0 -1
  105. package/dist/sidebar/VisibilityOrderingBuilder.js +0 -753
  106. package/dist/sidebar/VisibilityOrderingBuilder.js.map +0 -1
@@ -0,0 +1,962 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ import React, { Component } from 'react';
5
+ import classNames from 'classnames';
6
+ import { GridUtils } from '@deephaven/grid';
7
+ import { TextUtils, assertNotNull, DbNameValidator } from '@deephaven/utils';
8
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
+ import { dhEye, dhEyeSlash, dhSortAlphaDown, dhSortAlphaUp, dhArrowToTop, dhArrowToBottom, vsChevronUp, vsChevronDown, vsSymbolStructure, vsRefresh, vsCircleLargeFilled, vsAdd } from '@deephaven/icons';
10
+ import memoize from 'memoizee';
11
+ import debounce from 'lodash.debounce';
12
+ import { Button, SearchInput } from '@deephaven/components';
13
+ import clamp from 'lodash.clamp';
14
+ import throttle from 'lodash.throttle';
15
+ import "./VisibilityOrderingBuilder.css";
16
+ import ColumnHeaderGroup from "../../ColumnHeaderGroup.js";
17
+ import VisibilityOrderingItem from "./VisibilityOrderingItem.js";
18
+ import { flattenTree, getTreeItems } from "./sortable-tree/utilities.js";
19
+ import SortableTree from "./sortable-tree/SortableTree.js";
20
+ import { moveItemsFromDrop, moveToGroup } from "./VisibilityOrderingBuilderUtils.js";
21
+ var DEBOUNCE_SEARCH_COLUMN = 150;
22
+ class VisibilityOrderingBuilder extends Component {
23
+ constructor(props) {
24
+ super(props);
25
+ _defineProperty(this, "list", void 0);
26
+ _defineProperty(this, "debouncedSearchColumns", debounce(this.searchColumns, DEBOUNCE_SEARCH_COLUMN));
27
+ _defineProperty(this, "handleGroupColorChange", throttle((group, color) => {
28
+ var {
29
+ columnHeaderGroups,
30
+ onColumnHeaderGroupChanged
31
+ } = this.props;
32
+ var newGroups = [...columnHeaderGroups];
33
+ var newGroup = new ColumnHeaderGroup(_objectSpread(_objectSpread({}, group), {}, {
34
+ color
35
+ }));
36
+ newGroups.splice(newGroups.findIndex(_ref => {
37
+ var {
38
+ name
39
+ } = _ref;
40
+ return name === group.name;
41
+ }), 1, newGroup);
42
+ onColumnHeaderGroupChanged(newGroups);
43
+ }, 250));
44
+ _defineProperty(this, "renderItem", memoize(_ref2 => {
45
+ var {
46
+ value,
47
+ clone,
48
+ item,
49
+ ref,
50
+ handleProps
51
+ } = _ref2;
52
+ var {
53
+ onColumnVisibilityChanged
54
+ } = this.props;
55
+ var {
56
+ selectedColumns
57
+ } = this.state;
58
+ var displayString = value;
59
+
60
+ // The cloned drag overlay we want to show the items being dragged
61
+ if (clone) {
62
+ var selectedItemNames = this.getSelectedParentItems().map(_ref3 => {
63
+ var {
64
+ id
65
+ } = _ref3;
66
+ return id;
67
+ });
68
+ displayString = selectedItemNames.join(', ');
69
+ }
70
+ return /*#__PURE__*/React.createElement(VisibilityOrderingItem, {
71
+ ref: ref,
72
+ value: displayString,
73
+ clone: clone,
74
+ item: item,
75
+ childCount: selectedColumns.size,
76
+ onVisibilityChange: onColumnVisibilityChanged,
77
+ onClick: this.handleItemClick,
78
+ onGroupDelete: this.handleGroupDelete,
79
+ onGroupColorChange: this.handleGroupColorChange,
80
+ onGroupNameChange: this.handleGroupNameChange,
81
+ validateGroupName: this.validateGroupName,
82
+ handleProps: handleProps
83
+ });
84
+ }));
85
+ _defineProperty(this, "getMemoizedFirstMovableIndex", memoize((model, columns, movedColumns) => {
86
+ for (var i = 0; i < columns.length; i += 1) {
87
+ var modelIndex = GridUtils.getModelIndex(i, movedColumns);
88
+ if (model.isColumnMovable(modelIndex)) {
89
+ return i;
90
+ }
91
+ }
92
+ return null;
93
+ }));
94
+ _defineProperty(this, "getMemoizedLastMovableIndex", memoize((model, columns, movedColumns) => {
95
+ for (var i = columns.length - 1; i >= 0; i -= 1) {
96
+ var modelIndex = GridUtils.getModelIndex(i, movedColumns);
97
+ if (model.isColumnMovable(modelIndex)) {
98
+ return i;
99
+ }
100
+ }
101
+ return null;
102
+ }));
103
+ _defineProperty(this, "memoizedGetTreeItems", memoize((columns, movedColumns, columnHeaderGroups, userColumnWidths, selectedColumns) => getTreeItems(columns, movedColumns, columnHeaderGroups, userColumnWidths, [...selectedColumns.values()])));
104
+ _defineProperty(this, "makeVisibilityOrderingList", memoize((columns, treeItems) => {
105
+ var {
106
+ movedColumns
107
+ } = this.props;
108
+ var elements = [];
109
+ var firstMovableIndex = this.getFirstMovableIndex();
110
+ var lastMovableIndex = this.getLastMovableIndex();
111
+ var firstMovableTreeIndex = treeItems.findIndex(_ref4 => {
112
+ var {
113
+ data
114
+ } = _ref4;
115
+ return Array.isArray(data.visibleIndex) ? data.visibleIndex[0] === firstMovableIndex : data.visibleIndex === firstMovableIndex;
116
+ });
117
+ var lastMovableTreeIndex = treeItems.findIndex(_ref5 => {
118
+ var {
119
+ data
120
+ } = _ref5;
121
+ return Array.isArray(data.visibleIndex) ? data.visibleIndex[1] === lastMovableIndex : data.visibleIndex === lastMovableIndex;
122
+ });
123
+ var movableItems = treeItems.slice(firstMovableTreeIndex, lastMovableTreeIndex + 1);
124
+
125
+ // No movable items. Render all as immovable
126
+ if (firstMovableIndex == null || lastMovableIndex === null) {
127
+ for (var visibleIndex = 0; visibleIndex < columns.length; visibleIndex += 1) {
128
+ var modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);
129
+ var column = columns[modelIndex];
130
+ elements.push(this.renderImmovableItem(column.name));
131
+ }
132
+ return elements;
133
+ }
134
+
135
+ // Currently immovable groups are not supported
136
+ for (var _visibleIndex = 0; _visibleIndex < firstMovableIndex; _visibleIndex += 1) {
137
+ var _modelIndex = GridUtils.getModelIndex(_visibleIndex, movedColumns);
138
+ var _column = columns[_modelIndex];
139
+ elements.push(this.renderImmovableItem(_column.name));
140
+ }
141
+ if (firstMovableIndex !== null && firstMovableIndex > 0) {
142
+ elements.push( /*#__PURE__*/React.createElement("hr", {
143
+ key: "top-horizontal-divider"
144
+ }));
145
+ }
146
+ elements.push( /*#__PURE__*/React.createElement(SortableTree, {
147
+ key: "movable-items",
148
+ items: movableItems,
149
+ renderItem: this.renderItem,
150
+ onDragStart: this.handleDragStart,
151
+ onDragEnd: this.handleDragEnd
152
+ }));
153
+ if (lastMovableIndex != null && lastMovableIndex < columns.length - 1) {
154
+ elements.push( /*#__PURE__*/React.createElement("hr", {
155
+ key: "bottom-horizontal-divider"
156
+ }));
157
+ }
158
+ for (var _visibleIndex2 = lastMovableIndex + 1; _visibleIndex2 < columns.length; _visibleIndex2 += 1) {
159
+ var _modelIndex2 = GridUtils.getModelIndex(_visibleIndex2, movedColumns);
160
+ var _column2 = columns[_modelIndex2];
161
+ elements.push(this.renderImmovableItem(_column2.name));
162
+ }
163
+ return elements;
164
+ }));
165
+ _defineProperty(this, "renderImmovableItem", memoize(columnName => /*#__PURE__*/React.createElement("div", {
166
+ className: "visibility-ordering-list-item immovable",
167
+ key: columnName
168
+ }, /*#__PURE__*/React.createElement("div", {
169
+ className: "column-item"
170
+ }, /*#__PURE__*/React.createElement("span", {
171
+ className: "column-name"
172
+ }, columnName)))));
173
+ this.handleSearchInputChange = this.handleSearchInputChange.bind(this);
174
+ this.searchColumns = this.searchColumns.bind(this);
175
+ this.handleItemClick = this.handleItemClick.bind(this);
176
+ this.handleDragEnd = this.handleDragEnd.bind(this);
177
+ this.handleGroupDelete = this.handleGroupDelete.bind(this);
178
+ this.handleGroupNameChange = this.handleGroupNameChange.bind(this);
179
+ this.handleGroupCreate = this.handleGroupCreate.bind(this);
180
+ this.validateGroupName = this.validateGroupName.bind(this);
181
+ this.addColumnToSelected = this.addColumnToSelected.bind(this);
182
+ this.handleDragStart = this.handleDragStart.bind(this);
183
+ this.state = {
184
+ selectedColumns: new Set(),
185
+ lastSelectedColumn: '',
186
+ searchFilter: ''
187
+ };
188
+ this.list = null;
189
+ }
190
+ componentWillUnmount() {
191
+ this.debouncedSearchColumns.cancel();
192
+ }
193
+ resetVisibilityOrdering() {
194
+ var {
195
+ model,
196
+ onColumnVisibilityChanged,
197
+ onMovedColumnsChanged,
198
+ onColumnHeaderGroupChanged
199
+ } = this.props;
200
+ var {
201
+ columns
202
+ } = model;
203
+ onColumnVisibilityChanged(columns.map((_, i) => i), true);
204
+ this.setState({
205
+ selectedColumns: new Set(),
206
+ lastSelectedColumn: '',
207
+ searchFilter: ''
208
+ });
209
+ onColumnHeaderGroupChanged(model.initialColumnHeaderGroups);
210
+ onMovedColumnsChanged(model.initialMovedColumns);
211
+ }
212
+ resetSelection() {
213
+ this.setState({
214
+ selectedColumns: new Set(),
215
+ lastSelectedColumn: ''
216
+ });
217
+ }
218
+ handleSearchInputChange(event) {
219
+ var searchFilter = event.target.value;
220
+ this.setState({
221
+ searchFilter
222
+ });
223
+ if (!searchFilter) {
224
+ this.debouncedSearchColumns.cancel();
225
+ this.resetSelection();
226
+ return;
227
+ }
228
+ this.debouncedSearchColumns(searchFilter);
229
+ }
230
+ searchColumns(searchFilter) {
231
+ var flattenedItems = flattenTree(this.getTreeItems());
232
+ var itemsMatch = flattenedItems.filter(_ref6 => {
233
+ var {
234
+ id
235
+ } = _ref6;
236
+ return id.toLowerCase().includes(searchFilter.toLowerCase());
237
+ });
238
+ var columnsMatch = itemsMatch.map(_ref7 => {
239
+ var {
240
+ id
241
+ } = _ref7;
242
+ return id;
243
+ });
244
+ var visibleIndexToFocus = flattenedItems.findIndex(_ref8 => {
245
+ var {
246
+ id
247
+ } = _ref8;
248
+ return id.toLowerCase().includes(searchFilter.toLowerCase());
249
+ });
250
+ this.addColumnToSelected(columnsMatch, false);
251
+ if (columnsMatch.length > 0) {
252
+ var _this$list;
253
+ var columnItemToFocus = (_this$list = this.list) === null || _this$list === void 0 ? void 0 : _this$list.querySelectorAll('.item-wrapper')[visibleIndexToFocus];
254
+ columnItemToFocus === null || columnItemToFocus === void 0 ? void 0 : columnItemToFocus.scrollIntoView({
255
+ block: 'center'
256
+ });
257
+ }
258
+ }
259
+
260
+ /**
261
+ * Moves the currently selected columns in the direction specified.
262
+ * Does not commit any changes to any state, just gets the required modifications.
263
+ *
264
+ * Items that are part of a selected group should not be moved separate from the group.
265
+ *
266
+ * Items moved to top or bottom should be removed from any groups they are within,
267
+ * unless part of a group that is also selected. The highest level selected group will
268
+ * be moved to the root level of the tree.
269
+ *
270
+ * Items moved up or down should move into and out of groups when applicable.
271
+ * They should never move more than 1 depth level at a time.
272
+ *
273
+ * Multiple selected items should move to the top or bottom in their existing order,
274
+ * but become one block of continuous columns.
275
+ *
276
+ * Multiple selected items moving up or down should move independently,
277
+ * unless they are at the same depth and contiguous. In that case, they should
278
+ * move in and out of groups together. I.e. if the 2 items above a group are selected,
279
+ * and the move down button is pressed, then both items should be moved into the group.
280
+ *
281
+ * @param option The movement option
282
+ * @returns A new copy of the movedColumns including moves required to perform the operation.
283
+ *
284
+ */
285
+ moveSelectedColumns(option) {
286
+ var {
287
+ columnHeaderGroups
288
+ } = this.props;
289
+ var {
290
+ selectedColumns
291
+ } = this.state;
292
+ var treeItems = flattenTree(this.getTreeItems());
293
+ var firstMovableIndex = this.getFirstMovableIndex();
294
+ var lastMovableIndex = this.getLastMovableIndex();
295
+ assertNotNull(firstMovableIndex);
296
+ assertNotNull(lastMovableIndex);
297
+ var selectedItems = this.getSelectedParentItems();
298
+ var isMovingUpward = option === VisibilityOrderingBuilder.MOVE_OPTIONS.UP || option === VisibilityOrderingBuilder.MOVE_OPTIONS.TOP;
299
+
300
+ // for moving up and to the top, move column(s) in visibility index order
301
+ // for moving down and to the bottom, move column(s) in reverse visibility index order
302
+ if (!isMovingUpward) {
303
+ selectedItems.reverse();
304
+ }
305
+ var newMoves = [];
306
+ var updatedGroups = columnHeaderGroups;
307
+ var _loop = function _loop(i) {
308
+ var {
309
+ id,
310
+ parentId,
311
+ depth,
312
+ data: {
313
+ visibleIndex
314
+ }
315
+ } = selectedItems[i];
316
+ switch (option) {
317
+ case VisibilityOrderingBuilder.MOVE_OPTIONS.TOP:
318
+ {
319
+ newMoves = GridUtils.moveItemOrRange(visibleIndex, firstMovableIndex, newMoves, true);
320
+ var size = Array.isArray(visibleIndex) ? visibleIndex[1] - visibleIndex[0] + 1 : 1;
321
+ firstMovableIndex += size;
322
+ // Moving items to top should move out of any groups
323
+ updatedGroups = moveToGroup(selectedItems[i], null, updatedGroups);
324
+ break;
325
+ }
326
+ case VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM:
327
+ {
328
+ newMoves = GridUtils.moveItemOrRange(visibleIndex, lastMovableIndex, newMoves, true);
329
+ var _size = Array.isArray(visibleIndex) ? visibleIndex[1] - visibleIndex[0] + 1 : 1;
330
+ lastMovableIndex -= _size;
331
+ // Moving items to bottom should move out of any groups
332
+ updatedGroups = moveToGroup(selectedItems[i], null, updatedGroups);
333
+ break;
334
+ }
335
+ case VisibilityOrderingBuilder.MOVE_OPTIONS.UP:
336
+ {
337
+ var itemIndex = treeItems.findIndex(item => item.id === id);
338
+ // Array.findLast would be better here, but it's too new for our browser support
339
+ var prevItemIndex = treeItems.map((item, idx) => idx < itemIndex && !selectedColumns.has(item.id)).lastIndexOf(true);
340
+ var prevItem = treeItems[prevItemIndex];
341
+ if (prevItem != null && prevItem.parentId !== parentId) {
342
+ // Moving into a different parent
343
+ if (Math.abs(prevItem.depth - depth) > 1) {
344
+ // Prev item is more than 1 level away
345
+ // Find prev parent at same depth as current
346
+ // This way we only ever move 1 depth level per event
347
+ var newParentItemIndex = treeItems.map((item, idx) => idx < prevItemIndex && item.depth === depth).lastIndexOf(true);
348
+ var newParentItem = treeItems[newParentItemIndex];
349
+ updatedGroups = moveToGroup(selectedItems[i], newParentItem.id, updatedGroups);
350
+ } else {
351
+ updatedGroups = moveToGroup(selectedItems[i], prevItem.parentId, updatedGroups);
352
+ }
353
+ } else {
354
+ var toIndex = clamp(Array.isArray(visibleIndex) ? visibleIndex[0] - 1 : visibleIndex - 1, firstMovableIndex, lastMovableIndex);
355
+ newMoves = GridUtils.moveItemOrRange(visibleIndex, toIndex, newMoves, false);
356
+ var _size2 = Array.isArray(visibleIndex) ? visibleIndex[1] - visibleIndex[0] + 1 : 1;
357
+ firstMovableIndex += _size2;
358
+ }
359
+ break;
360
+ }
361
+ case VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN:
362
+ {
363
+ var _itemIndex = treeItems.findIndex(item => item.id === id);
364
+ var nextItem = treeItems.find((item, idx) => idx > _itemIndex && !selectedColumns.has(item.id));
365
+ if ((nextItem === null || nextItem === void 0 ? void 0 : nextItem.parentId) !== parentId) {
366
+ var _parentItem$parentId;
367
+ // Moving out of our group
368
+ // Move to the parent of our parent
369
+ // That way we only ever move 1 level at a time
370
+ var parentItem = treeItems.find(item => item.id === parentId);
371
+ updatedGroups = moveToGroup(selectedItems[i], (_parentItem$parentId = parentItem === null || parentItem === void 0 ? void 0 : parentItem.parentId) !== null && _parentItem$parentId !== void 0 ? _parentItem$parentId : null, updatedGroups);
372
+ break;
373
+ } else if ((nextItem === null || nextItem === void 0 ? void 0 : nextItem.children.length) > 0) {
374
+ // Moving into a group as 1st item
375
+ updatedGroups = moveToGroup(selectedItems[i], nextItem.id, updatedGroups);
376
+ break;
377
+ }
378
+ var _toIndex = clamp(Array.isArray(visibleIndex) ? visibleIndex[0] + 1 : visibleIndex + 1, firstMovableIndex, lastMovableIndex);
379
+ newMoves = GridUtils.moveItemOrRange(visibleIndex, _toIndex, newMoves, false);
380
+ var _size3 = Array.isArray(visibleIndex) ? visibleIndex[1] - visibleIndex[0] + 1 : 1;
381
+ lastMovableIndex -= _size3;
382
+ break;
383
+ }
384
+ }
385
+ };
386
+ for (var i = 0; i < selectedItems.length; i += 1) {
387
+ _loop(i);
388
+ }
389
+ return {
390
+ newMoves,
391
+ groups: updatedGroups
392
+ };
393
+ }
394
+
395
+ /**
396
+ * Moves the selected columns according to the option.
397
+ * Commits changes to state and scrolls the list if moving to top or bottom.
398
+ *
399
+ * @param option The move operation
400
+ */
401
+ handleMoveColumns(option) {
402
+ var {
403
+ onMovedColumnsChanged,
404
+ movedColumns,
405
+ onColumnHeaderGroupChanged
406
+ } = this.props;
407
+ var {
408
+ newMoves,
409
+ groups
410
+ } = this.moveSelectedColumns(option);
411
+ var scrollListAfterMove;
412
+ if (option === VisibilityOrderingBuilder.MOVE_OPTIONS.TOP) {
413
+ scrollListAfterMove = () => {
414
+ var _this$list2, _this$list2$parentEle;
415
+ (_this$list2 = this.list) === null || _this$list2 === void 0 ? void 0 : (_this$list2$parentEle = _this$list2.parentElement) === null || _this$list2$parentEle === void 0 ? void 0 : _this$list2$parentEle.scroll({
416
+ top: 0
417
+ });
418
+ };
419
+ }
420
+ if (option === VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM) {
421
+ scrollListAfterMove = () => {
422
+ var _this$list3, _this$list3$parentEle;
423
+ (_this$list3 = this.list) === null || _this$list3 === void 0 ? void 0 : (_this$list3$parentEle = _this$list3.parentElement) === null || _this$list3$parentEle === void 0 ? void 0 : _this$list3$parentEle.scroll({
424
+ top: this.list.parentElement.scrollHeight
425
+ });
426
+ };
427
+ }
428
+ onColumnHeaderGroupChanged(groups);
429
+ if (newMoves.length > 0) {
430
+ onMovedColumnsChanged(movedColumns.concat(newMoves), scrollListAfterMove);
431
+ }
432
+ }
433
+
434
+ /**
435
+ * Get the move operations required to recursively sort the grid
436
+ * Column header groups are sorted using their name
437
+ * Children of column header groups are then sorted within each group
438
+ *
439
+ * @param items The tree items to sort
440
+ * @param option Direction of the sort
441
+ * @param movedColumns The existing moved columns for the sort
442
+ * Grids may use an initial move list from the model (e.g. column header groups)
443
+ * Also used to recursively sort header groups
444
+ * @returns The moves required to sort the grid. Includes the starting movedColumns in the array
445
+ */
446
+ getSortMoves(itemsParam, option, movedColumns) {
447
+ var items = [...itemsParam];
448
+ // Sort all the movable columns
449
+ var isAscending = option === VisibilityOrderingBuilder.SORTING_OPTIONS.ASC;
450
+ items.sort((a, b) => {
451
+ var aName = a.id.toUpperCase();
452
+ var bName = b.id.toUpperCase();
453
+ return TextUtils.sort(aName, bName, isAscending);
454
+ });
455
+ var newMoves = [...movedColumns]; // Start with the base state moves by the model
456
+ var moveToIndex = Math.min(...items.flatMap(item => {
457
+ var {
458
+ modelIndex
459
+ } = item.data;
460
+ return Array.isArray(modelIndex) ? GridUtils.getVisibleIndexes(modelIndex, newMoves) : GridUtils.getVisibleIndex(modelIndex, newMoves);
461
+ }));
462
+ for (var i = 0; i < items.length; i += 1) {
463
+ var item = items[i];
464
+ var {
465
+ modelIndex
466
+ } = item.data;
467
+ var visibleIndex = Array.isArray(modelIndex) ? GridUtils.getVisibleIndexes(modelIndex, newMoves) : GridUtils.getVisibleIndex(modelIndex, newMoves);
468
+ newMoves = Array.isArray(visibleIndex) ? GridUtils.moveRange([Math.min(...visibleIndex), Math.max(...visibleIndex)], moveToIndex, newMoves, true) : GridUtils.moveItem(visibleIndex, moveToIndex, newMoves);
469
+ if (Array.isArray(visibleIndex)) {
470
+ // Recursively sort groups
471
+ newMoves = this.getSortMoves(item.children, option, newMoves);
472
+ }
473
+ moveToIndex += Array.isArray(modelIndex) ? modelIndex.length : 1;
474
+ }
475
+ return newMoves;
476
+ }
477
+ handleSortColumns(option) {
478
+ var {
479
+ model,
480
+ onMovedColumnsChanged
481
+ } = this.props;
482
+ var newMoves = this.getSortMoves(this.getTreeItems(), option, model.initialMovedColumns);
483
+ onMovedColumnsChanged(newMoves);
484
+ }
485
+ handleItemClick(name, event) {
486
+ event.stopPropagation();
487
+
488
+ // Click was triggered by an interactive element. Ignore select
489
+ if (event.target instanceof HTMLElement && (event.target.tagName === 'BUTTON' || event.target.tagName === 'INPUT')) {
490
+ return;
491
+ }
492
+ event.currentTarget.focus();
493
+ var {
494
+ selectedColumns,
495
+ lastSelectedColumn
496
+ } = this.state;
497
+ var isModifierKeyDown = GridUtils.isModifierKeyDown(event);
498
+ var isShiftKeyDown = event.shiftKey;
499
+ var isSelected = selectedColumns.has(name);
500
+ var columnsToBeAdded = [name];
501
+ if (isSelected && isModifierKeyDown) {
502
+ this.removeColumnFromSelected(name);
503
+ return;
504
+ }
505
+ var movableItems = flattenTree(this.getTreeItems());
506
+ if (isSelected && !isShiftKeyDown && lastSelectedColumn === name) {
507
+ var selectedItem = movableItems.find(_ref9 => {
508
+ var {
509
+ id
510
+ } = _ref9;
511
+ return id === name;
512
+ });
513
+ assertNotNull(selectedItem);
514
+ var childCount = flattenTree(selectedItem.children).length;
515
+ // If clicking on an item and it's the only thing selected, deselect it
516
+ if (childCount + 1 === selectedColumns.size) {
517
+ this.resetSelection();
518
+ return;
519
+ }
520
+ }
521
+ if (isShiftKeyDown) {
522
+ var selectedIndex = movableItems.findIndex(item => item.id === name);
523
+ var lastSelectedIndex = movableItems.findIndex(item => item.id === lastSelectedColumn);
524
+ columnsToBeAdded.push(...movableItems.slice(Math.min(lastSelectedIndex, selectedIndex), Math.max(lastSelectedIndex, selectedIndex) + 1).map(item => item.id));
525
+ }
526
+ this.addColumnToSelected(columnsToBeAdded, isModifierKeyDown || isShiftKeyDown);
527
+ this.setState({
528
+ lastSelectedColumn: name
529
+ });
530
+ }
531
+
532
+ /**
533
+ * Adds columns or groups to the selected column set
534
+ * Groups being added will add all of their children to the selection as well
535
+ *
536
+ * @param columnsToBeAdded Array of column or group names to add
537
+ * @param addToExisting If these should be added to the existing selection or overwrite it
538
+ */
539
+ addColumnToSelected(columnsToBeAdded, addToExisting) {
540
+ var {
541
+ selectedColumns
542
+ } = this.state;
543
+ var newSelectedColumns = new Set(addToExisting ? [...selectedColumns.values()].concat(columnsToBeAdded) : columnsToBeAdded);
544
+ var flattenedItems = flattenTree(this.getTreeItems());
545
+
546
+ // Add all children of selected groups to the selected columns
547
+ // The treeItems array will always be parent -> child in the order
548
+ // We don't need to recursively iterate because of this
549
+ // The parent will always be added before any children for nested selections
550
+ flattenedItems.forEach(_ref10 => {
551
+ var {
552
+ id,
553
+ children
554
+ } = _ref10;
555
+ if (newSelectedColumns.has(id)) {
556
+ children.forEach(child => newSelectedColumns.add(child.id));
557
+ }
558
+ });
559
+ this.setState({
560
+ selectedColumns: newSelectedColumns
561
+ });
562
+ }
563
+
564
+ /**
565
+ * Removes a column or group from selected columns set.
566
+ *
567
+ * Removing a group will deselect all of its children.
568
+ *
569
+ * Removing a child will deselect all parent groups.
570
+ * Other children in those parents will stay selected, just not the group item.
571
+ *
572
+ * @param name Name of the column to remove
573
+ */
574
+ removeColumnFromSelected(name) {
575
+ var {
576
+ selectedColumns
577
+ } = this.state;
578
+ var flattenedItems = flattenTree(this.getTreeItems());
579
+ var item = flattenedItems.find(_ref11 => {
580
+ var {
581
+ id
582
+ } = _ref11;
583
+ return id === name;
584
+ });
585
+ assertNotNull(item);
586
+ var parentItem = flattenedItems.find(_ref12 => {
587
+ var {
588
+ id
589
+ } = _ref12;
590
+ return id === item.parentId;
591
+ });
592
+
593
+ // Remove all children of deselected groups
594
+ flattenTree(item === null || item === void 0 ? void 0 : item.children).forEach(child => selectedColumns.delete(child.id));
595
+
596
+ // Remove all parents of the removed group since it is no longer fully selected
597
+ var _loop2 = function _loop2() {
598
+ selectedColumns.delete(parentItem.id);
599
+ var newParentId = parentItem.parentId;
600
+ parentItem = flattenedItems.find(_ref13 => {
601
+ var {
602
+ id
603
+ } = _ref13;
604
+ return id === newParentId;
605
+ });
606
+ };
607
+ while (parentItem != null) {
608
+ _loop2();
609
+ }
610
+ selectedColumns.delete(name);
611
+ this.setState({
612
+ selectedColumns: new Set(selectedColumns)
613
+ });
614
+ }
615
+ handleDragStart(id) {
616
+ var {
617
+ selectedColumns
618
+ } = this.state;
619
+ if (!selectedColumns.has(id)) {
620
+ this.addColumnToSelected([id], false);
621
+ }
622
+ }
623
+ handleDragEnd(from, to) {
624
+ var {
625
+ movedColumns,
626
+ onMovedColumnsChanged,
627
+ columnHeaderGroups,
628
+ onColumnHeaderGroupChanged
629
+ } = this.props;
630
+ var selectedParentItems = this.getSelectedParentItems();
631
+ var flattenedItems = flattenTree(this.getTreeItems()).map((item, i) => _objectSpread(_objectSpread({}, item), {}, {
632
+ index: i
633
+ }));
634
+ var firstMovableIndex = this.getFirstMovableIndex();
635
+ var lastMovableIndex = this.getLastMovableIndex();
636
+ assertNotNull(firstMovableIndex);
637
+ assertNotNull(lastMovableIndex);
638
+ var {
639
+ groups: newGroups,
640
+ movedColumns: newMoves
641
+ } = moveItemsFromDrop(from, to, movedColumns, columnHeaderGroups, flattenedItems, selectedParentItems, firstMovableIndex, lastMovableIndex);
642
+ onColumnHeaderGroupChanged(newGroups);
643
+ onMovedColumnsChanged(newMoves);
644
+ }
645
+ handleGroupNameChange(group, newName) {
646
+ var {
647
+ columnHeaderGroups,
648
+ onColumnHeaderGroupChanged
649
+ } = this.props;
650
+ var newGroups = [...columnHeaderGroups];
651
+ var oldName = group.name;
652
+ var groupIndex = newGroups.findIndex(_ref14 => {
653
+ var {
654
+ name
655
+ } = _ref14;
656
+ return name === oldName;
657
+ });
658
+ var oldGroup = newGroups[groupIndex];
659
+ assertNotNull(oldGroup); // Also means groupIndex >= 0
660
+
661
+ var newGroup = new ColumnHeaderGroup(oldGroup);
662
+ newGroup.name = newName;
663
+ newGroups.splice(groupIndex, 1, newGroup);
664
+ var parentIndex = newGroups.findIndex(_ref15 => {
665
+ var {
666
+ name
667
+ } = _ref15;
668
+ return name === newGroup.parent;
669
+ });
670
+ if (parentIndex >= 0) {
671
+ var newParent = new ColumnHeaderGroup(newGroups[parentIndex]);
672
+ newParent.removeChildren([oldName]);
673
+ newParent.addChildren([newName]);
674
+ newGroups.splice(parentIndex, 1, newParent);
675
+ }
676
+ onColumnHeaderGroupChanged(newGroups);
677
+ }
678
+ handleGroupDelete(group) {
679
+ var {
680
+ columnHeaderGroups,
681
+ onColumnHeaderGroupChanged
682
+ } = this.props;
683
+ var newGroups = columnHeaderGroups.filter(g => g.name !== group.name);
684
+ var parentIndex = newGroups.findIndex(g => g.name === group.parent);
685
+ if (parentIndex >= 0) {
686
+ var newParent = new ColumnHeaderGroup(newGroups[parentIndex]);
687
+ newParent.addChildren(group.children);
688
+ newParent.removeChildren([group.name]);
689
+ newGroups.splice(parentIndex, 1, newParent);
690
+ }
691
+ onColumnHeaderGroupChanged(newGroups);
692
+ }
693
+ handleGroupCreate() {
694
+ var {
695
+ movedColumns,
696
+ onMovedColumnsChanged,
697
+ onColumnHeaderGroupChanged
698
+ } = this.props;
699
+ var {
700
+ newMoves,
701
+ groups
702
+ } = this.moveSelectedColumns(VisibilityOrderingBuilder.MOVE_OPTIONS.TOP);
703
+ var newGroups = groups.filter(group => !group.isNew);
704
+ var selectedItems = this.getSelectedParentItems();
705
+ var childIndexes = selectedItems.map(item => item.data.modelIndex).flat().filter(index => index >= 0);
706
+
707
+ // We don't care about this name really as long as it's unique
708
+ // The user must change it and we display a placeholder instead
709
+ var name = "".concat(ColumnHeaderGroup.NEW_GROUP_PREFIX, "-").concat(Date.now());
710
+ var newGroup = new ColumnHeaderGroup({
711
+ name,
712
+ children: selectedItems.map(_ref16 => {
713
+ var {
714
+ id
715
+ } = _ref16;
716
+ return id;
717
+ }),
718
+ depth: 0,
719
+ childIndexes: [...new Set(childIndexes)] // Remove any duplicates
720
+ });
721
+
722
+ onMovedColumnsChanged(movedColumns.concat(newMoves), () => {
723
+ var _this$list4, _this$list4$parentEle;
724
+ (_this$list4 = this.list) === null || _this$list4 === void 0 ? void 0 : (_this$list4$parentEle = _this$list4.parentElement) === null || _this$list4$parentEle === void 0 ? void 0 : _this$list4$parentEle.scroll({
725
+ top: 0
726
+ });
727
+ });
728
+ onColumnHeaderGroupChanged(newGroups.concat([newGroup]));
729
+ this.resetSelection();
730
+ }
731
+
732
+ /**
733
+ * Validates if a header group name is valid and not in use by any header groups or columns
734
+ * @param groupName The name to validate
735
+ * @returns Error message if invalid
736
+ */
737
+ validateGroupName(groupName) {
738
+ var {
739
+ model,
740
+ columnHeaderGroups
741
+ } = this.props;
742
+ var {
743
+ columns
744
+ } = model;
745
+ if (!DbNameValidator.isValidColumnName(groupName)) {
746
+ return 'Invalid name';
747
+ }
748
+ if (columns.some(_ref17 => {
749
+ var {
750
+ name
751
+ } = _ref17;
752
+ return name === groupName;
753
+ }) || columnHeaderGroups.some(_ref18 => {
754
+ var {
755
+ name
756
+ } = _ref18;
757
+ return name === groupName;
758
+ })) {
759
+ return 'Duplicate name';
760
+ }
761
+ return '';
762
+ }
763
+ /**
764
+ * Gets the first movable visible index
765
+ */
766
+ getFirstMovableIndex() {
767
+ var {
768
+ model,
769
+ movedColumns
770
+ } = this.props;
771
+ return this.getMemoizedFirstMovableIndex(model, model.columns, movedColumns);
772
+ }
773
+ /**
774
+ * Gets the last movable visible index
775
+ */
776
+ getLastMovableIndex() {
777
+ var {
778
+ model,
779
+ movedColumns
780
+ } = this.props;
781
+ return this.getMemoizedLastMovableIndex(model, model.columns, movedColumns);
782
+ }
783
+ /**
784
+ * Gets the tree of movable items in order. Memoized for efficiency
785
+ * Use flattenItems(this.getTreeItems()) if a flat list is needed
786
+ * @returns The movable tree items in order
787
+ */
788
+ getTreeItems() {
789
+ var {
790
+ model,
791
+ movedColumns,
792
+ userColumnWidths,
793
+ columnHeaderGroups
794
+ } = this.props;
795
+ var {
796
+ selectedColumns
797
+ } = this.state;
798
+ return this.memoizedGetTreeItems(model.columns, movedColumns, columnHeaderGroups, userColumnWidths, selectedColumns);
799
+ }
800
+
801
+ /**
802
+ * Gets the selected items that are movable.
803
+ * This is any item whose parent is not also selected.
804
+ *
805
+ * @returns The array of items whose parents are not selected
806
+ */
807
+ getSelectedParentItems() {
808
+ var {
809
+ selectedColumns
810
+ } = this.state;
811
+ var treeItems = flattenTree(this.getTreeItems());
812
+ return treeItems.filter(_ref19 => {
813
+ var {
814
+ id,
815
+ parentId
816
+ } = _ref19;
817
+ return (
818
+ // All items whose parents are not selected
819
+ selectedColumns.has(id) && !selectedColumns.has(parentId !== null && parentId !== void 0 ? parentId : '')
820
+ );
821
+ });
822
+ }
823
+ render() {
824
+ var {
825
+ model,
826
+ userColumnWidths,
827
+ onColumnVisibilityChanged
828
+ } = this.props;
829
+ var {
830
+ selectedColumns,
831
+ searchFilter
832
+ } = this.state;
833
+ var hasSelection = selectedColumns.size > 0;
834
+ var treeItems = this.getTreeItems();
835
+ var nameToIndexes = new Map(flattenTree(treeItems).map(item => [item.id, item.data.modelIndex]));
836
+ var columnsToToggle = [
837
+ // Pass through Set to dedupe model indexes
838
+ ...new Set(hasSelection ? [...selectedColumns.values()].map(name => nameToIndexes.get(name)).filter(i => i != null).flat() : treeItems.map(item => item.data.modelIndex).flat())];
839
+ var areSomeVisible = !GridUtils.checkAllColumnsHidden(columnsToToggle, userColumnWidths);
840
+ var allToggleText = areSomeVisible ? 'Hide All' : 'Show All';
841
+ var selectedToggleText = areSomeVisible ? 'Hide Selected' : 'Show Selected';
842
+ var visibilityOrderingList = this.makeVisibilityOrderingList(model.columns, treeItems);
843
+ return /*#__PURE__*/React.createElement("div", {
844
+ role: "menu",
845
+ className: "visibility-ordering-builder",
846
+ tabIndex: 0
847
+ }, /*#__PURE__*/React.createElement("div", {
848
+ className: "top-menu"
849
+ }, /*#__PURE__*/React.createElement(Button, {
850
+ kind: "ghost",
851
+ className: "toggle-visibility-btn",
852
+ onClick: () => {
853
+ onColumnVisibilityChanged(columnsToToggle, !areSomeVisible);
854
+ },
855
+ icon: areSomeVisible ? dhEye : dhEyeSlash,
856
+ tooltip: "Toggle column visibility"
857
+ }, !hasSelection ? allToggleText : selectedToggleText), /*#__PURE__*/React.createElement(SearchInput, {
858
+ className: "visibility-search",
859
+ value: searchFilter,
860
+ matchCount: searchFilter ? selectedColumns.size : undefined,
861
+ onChange: this.handleSearchInputChange
862
+ })), /*#__PURE__*/React.createElement("div", {
863
+ className: "top-menu"
864
+ }, /*#__PURE__*/React.createElement(Button, {
865
+ kind: "ghost",
866
+ icon: vsRefresh,
867
+ tooltip: "Reset to default",
868
+ onClick: () => {
869
+ this.resetVisibilityOrdering();
870
+ }
871
+ }, "Reset"), /*#__PURE__*/React.createElement("span", {
872
+ className: "vertical-divider"
873
+ }), /*#__PURE__*/React.createElement(Button, {
874
+ kind: "ghost",
875
+ icon: dhSortAlphaDown,
876
+ tooltip: "Sort ascending",
877
+ onClick: () => {
878
+ this.handleSortColumns(VisibilityOrderingBuilder.SORTING_OPTIONS.ASC);
879
+ }
880
+ }), /*#__PURE__*/React.createElement(Button, {
881
+ kind: "ghost",
882
+ icon: dhSortAlphaUp,
883
+ tooltip: "Sort descending",
884
+ onClick: () => {
885
+ this.handleSortColumns(VisibilityOrderingBuilder.SORTING_OPTIONS.DSC);
886
+ }
887
+ }), /*#__PURE__*/React.createElement("span", {
888
+ className: "vertical-divider"
889
+ }), /*#__PURE__*/React.createElement(Button, {
890
+ kind: "ghost",
891
+ tooltip: "Create group from selection",
892
+ disabled: !hasSelection,
893
+ onClick: this.handleGroupCreate
894
+ }, /*#__PURE__*/React.createElement("span", {
895
+ className: "fa-layers",
896
+ style: {
897
+ marginRight: '0.75rem'
898
+ }
899
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
900
+ mask: vsSymbolStructure,
901
+ icon: vsCircleLargeFilled,
902
+ transform: "right-7 down-5 shrink-6"
903
+ }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
904
+ icon: vsAdd,
905
+ transform: "right-8 down-6 shrink-8"
906
+ })), "Group"), /*#__PURE__*/React.createElement("span", {
907
+ className: "vertical-divider"
908
+ }), /*#__PURE__*/React.createElement(Button, {
909
+ kind: "ghost",
910
+ icon: vsChevronUp,
911
+ tooltip: "Move selection up",
912
+ onClick: () => {
913
+ this.handleMoveColumns(VisibilityOrderingBuilder.MOVE_OPTIONS.UP);
914
+ },
915
+ disabled: !hasSelection
916
+ }), /*#__PURE__*/React.createElement(Button, {
917
+ kind: "ghost",
918
+ icon: vsChevronDown,
919
+ tooltip: "Move selection down",
920
+ onClick: () => {
921
+ this.handleMoveColumns(VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN);
922
+ },
923
+ disabled: !hasSelection
924
+ }), /*#__PURE__*/React.createElement(Button, {
925
+ kind: "ghost",
926
+ icon: dhArrowToTop,
927
+ tooltip: "Move selection to top",
928
+ onClick: () => {
929
+ this.handleMoveColumns(VisibilityOrderingBuilder.MOVE_OPTIONS.TOP);
930
+ },
931
+ disabled: !hasSelection
932
+ }), /*#__PURE__*/React.createElement(Button, {
933
+ kind: "ghost",
934
+ icon: dhArrowToBottom,
935
+ tooltip: "Move selection to bottom",
936
+ onClick: () => {
937
+ this.handleMoveColumns(VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM);
938
+ },
939
+ disabled: !hasSelection
940
+ })), /*#__PURE__*/React.createElement("div", {
941
+ role: "menu",
942
+ className: classNames('visibility-ordering-list')
943
+ }, /*#__PURE__*/React.createElement("div", {
944
+ className: "column-list",
945
+ ref: list => {
946
+ this.list = list;
947
+ }
948
+ }, visibilityOrderingList)));
949
+ }
950
+ }
951
+ _defineProperty(VisibilityOrderingBuilder, "SORTING_OPTIONS", {
952
+ DSC: 'DSC',
953
+ ASC: 'ASC'
954
+ });
955
+ _defineProperty(VisibilityOrderingBuilder, "MOVE_OPTIONS", {
956
+ TOP: 'TOP',
957
+ BOTTOM: 'BOTTOM',
958
+ UP: 'UP',
959
+ DOWN: 'DOWN'
960
+ });
961
+ export default VisibilityOrderingBuilder;
962
+ //# sourceMappingURL=VisibilityOrderingBuilder.js.map