@deephaven/iris-grid 1.8.1-beta.9 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/IrisGrid.d.ts +19 -0
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +17 -9
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridMetricCalculator.d.ts +34 -1
- package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
- package/dist/IrisGridMetricCalculator.js +136 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/LazyIrisGrid.d.ts +1 -0
- package/dist/LazyIrisGrid.d.ts.map +1 -1
- package/dist/TreeRebalanceUtil.d.ts +50 -0
- package/dist/TreeRebalanceUtil.d.ts.map +1 -0
- package/dist/TreeRebalanceUtil.js +105 -0
- package/dist/TreeRebalanceUtil.js.map +1 -0
- package/dist/sidebar/visibility-ordering-builder/SearchItem.d.ts +12 -0
- package/dist/sidebar/visibility-ordering-builder/SearchItem.d.ts.map +1 -0
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js +55 -0
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -0
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css +408 -0
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css.map +1 -0
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.d.ts +14 -0
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.d.ts.map +1 -0
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +235 -0
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -0
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +43 -43
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +427 -466
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts +7 -2
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +7 -4
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts +7 -15
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +53 -137
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.d.ts +14 -0
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.d.ts.map +1 -0
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +245 -0
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -0
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts +4 -3
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +2 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +45 -22
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts +13 -14
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +9 -7
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +8 -7
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +4 -4
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +5 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- package/package.json +20 -19
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts +0 -21
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts.map +0 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +0 -149
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +0 -1
|
@@ -4,14 +4,14 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
|
|
|
4
4
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
5
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
6
6
|
import React, { memo, PureComponent, useCallback, useEffect, useRef } from 'react';
|
|
7
|
+
import { flushSync } from 'react-dom';
|
|
7
8
|
import classNames from 'classnames';
|
|
8
9
|
import { GridUtils } from '@deephaven/grid';
|
|
9
10
|
import { TextUtils, assertNotNull, DbNameValidator } from '@deephaven/utils';
|
|
10
11
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
11
12
|
import { dhEye, dhEyeSlash, dhSortAlphaDown, dhSortAlphaUp, dhArrowToTop, dhArrowToBottom, vsChevronUp, vsChevronDown, vsSymbolStructure, vsRefresh, vsCircleLargeFilled, vsAdd, vsBlank, vsCheck, vsKebabVertical } from '@deephaven/icons';
|
|
12
13
|
import memoize from 'memoizee';
|
|
13
|
-
import
|
|
14
|
-
import { ActionButton, Button, GLOBAL_SHORTCUTS, Icon, Item, Keyboard, MenuTrigger, SearchInput, Section, SpectrumMenu, Text } from '@deephaven/components';
|
|
14
|
+
import { ActionButton, Button, GLOBAL_SHORTCUTS, Icon, Item, Keyboard, MenuTrigger, Section, SpectrumMenu, Text } from '@deephaven/components';
|
|
15
15
|
import clamp from 'lodash.clamp';
|
|
16
16
|
import throttle from 'lodash.throttle';
|
|
17
17
|
import { useUndoRedo } from '@deephaven/react-hooks';
|
|
@@ -23,9 +23,10 @@ import { flattenTree, getTreeItems } from "./sortable-tree/utilities.js";
|
|
|
23
23
|
import SortableTree from "./sortable-tree/SortableTree.js";
|
|
24
24
|
import { moveItemsFromDrop, moveToGroup } from "./VisibilityOrderingBuilderUtils.js";
|
|
25
25
|
import IrisGridUtils from "../../IrisGridUtils.js";
|
|
26
|
+
import SearchWithModal from "./SearchWithModal.js";
|
|
27
|
+
import SortableTreeDndContext from "./sortable-tree/SortableTreeDndContext.js";
|
|
26
28
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
27
29
|
var log = Log.module('VisibilityOrderingBuilder');
|
|
28
|
-
var DEBOUNCE_SEARCH_COLUMN = 150;
|
|
29
30
|
class VisibilityOrderingBuilderInner extends PureComponent {
|
|
30
31
|
static shouldRenderColumn(column) {
|
|
31
32
|
// We don't want to render the proxy column in the visibility ordering list
|
|
@@ -34,9 +35,17 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
34
35
|
constructor(props) {
|
|
35
36
|
super(props);
|
|
36
37
|
_defineProperty(this, "wrapperRef", /*#__PURE__*/React.createRef());
|
|
38
|
+
/**
|
|
39
|
+
* Used to track the last focused item index to maintain focus on updates.
|
|
40
|
+
* Cannot use name because it may change or be deleted when undoing or redoing.
|
|
41
|
+
*/
|
|
37
42
|
_defineProperty(this, "lastFocusedItemIndex", null);
|
|
38
43
|
_defineProperty(this, "list", void 0);
|
|
39
|
-
|
|
44
|
+
/**
|
|
45
|
+
* This is set by the search modal handlers since a column could be hidden
|
|
46
|
+
* and not displayed in the list. We need to wait until the update to scroll to it.
|
|
47
|
+
*/
|
|
48
|
+
_defineProperty(this, "scrollAndFocusColumnOnUpdate", null);
|
|
40
49
|
_defineProperty(this, "handleGroupColorChange", throttle((group, color) => {
|
|
41
50
|
var {
|
|
42
51
|
columnHeaderGroups,
|
|
@@ -54,49 +63,6 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
54
63
|
}), 1, newGroup);
|
|
55
64
|
onColumnHeaderGroupChanged(newGroups);
|
|
56
65
|
}, 250));
|
|
57
|
-
_defineProperty(this, "renderItem", memoize(_ref2 => {
|
|
58
|
-
var {
|
|
59
|
-
value,
|
|
60
|
-
clone,
|
|
61
|
-
item,
|
|
62
|
-
ref,
|
|
63
|
-
handleProps
|
|
64
|
-
} = _ref2;
|
|
65
|
-
var {
|
|
66
|
-
onColumnVisibilityChanged
|
|
67
|
-
} = this.props;
|
|
68
|
-
var {
|
|
69
|
-
selectedColumns
|
|
70
|
-
} = this.state;
|
|
71
|
-
var displayString = value;
|
|
72
|
-
|
|
73
|
-
// The cloned drag overlay we want to show the items being dragged
|
|
74
|
-
if (clone) {
|
|
75
|
-
var selectedItemNames = this.getSelectedParentItems().map(_ref3 => {
|
|
76
|
-
var {
|
|
77
|
-
id
|
|
78
|
-
} = _ref3;
|
|
79
|
-
return id;
|
|
80
|
-
});
|
|
81
|
-
displayString = selectedItemNames.join(', ');
|
|
82
|
-
}
|
|
83
|
-
return /*#__PURE__*/_jsx(VisibilityOrderingItem, {
|
|
84
|
-
ref: ref,
|
|
85
|
-
value: displayString,
|
|
86
|
-
clone: clone,
|
|
87
|
-
item: item,
|
|
88
|
-
childCount: selectedColumns.size,
|
|
89
|
-
onVisibilityChange: onColumnVisibilityChanged,
|
|
90
|
-
onClick: this.handleItemClick,
|
|
91
|
-
onGroupDelete: this.handleGroupDelete,
|
|
92
|
-
onGroupColorChange: this.handleGroupColorChange,
|
|
93
|
-
onGroupNameChange: this.handleGroupNameChange,
|
|
94
|
-
validateGroupName: this.validateGroupName,
|
|
95
|
-
handleProps: handleProps
|
|
96
|
-
}, item.id);
|
|
97
|
-
}, {
|
|
98
|
-
max: 1000
|
|
99
|
-
}));
|
|
100
66
|
_defineProperty(this, "getMemoizedFirstMovableIndex", memoize((model, columns, movedColumns) => {
|
|
101
67
|
for (var i = 0; i < columns.length; i += 1) {
|
|
102
68
|
var modelIndex = GridUtils.getModelIndex(i, movedColumns);
|
|
@@ -122,23 +88,23 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
122
88
|
_defineProperty(this, "memoizedGetTreeItems", memoize((columns, movedColumns, columnHeaderGroups, hiddenColumns, selectedColumns, showHiddenColumns) => getTreeItems(columns, movedColumns, columnHeaderGroups, hiddenColumns, [...selectedColumns.values()], showHiddenColumns), {
|
|
123
89
|
max: 1000
|
|
124
90
|
}));
|
|
125
|
-
_defineProperty(this, "makeVisibilityOrderingList", memoize((columns, treeItems, showHiddenColumns) => {
|
|
91
|
+
_defineProperty(this, "makeVisibilityOrderingList", memoize((columns, treeItems, showHiddenColumns, isDraggable) => {
|
|
126
92
|
var {
|
|
127
93
|
movedColumns
|
|
128
94
|
} = this.props;
|
|
129
95
|
var elements = [];
|
|
130
96
|
var firstMovableIndex = this.getFirstMovableIndex();
|
|
131
97
|
var lastMovableIndex = this.getLastMovableIndex();
|
|
132
|
-
var firstMovableTreeIndex = treeItems.findIndex(
|
|
98
|
+
var firstMovableTreeIndex = treeItems.findIndex(_ref2 => {
|
|
133
99
|
var {
|
|
134
100
|
data
|
|
135
|
-
} =
|
|
101
|
+
} = _ref2;
|
|
136
102
|
return Array.isArray(data.visibleIndex) ? data.visibleIndex[0] === firstMovableIndex : data.visibleIndex === firstMovableIndex;
|
|
137
103
|
});
|
|
138
|
-
var lastMovableTreeIndex = treeItems.findIndex(
|
|
104
|
+
var lastMovableTreeIndex = treeItems.findIndex(_ref3 => {
|
|
139
105
|
var {
|
|
140
106
|
data
|
|
141
|
-
} =
|
|
107
|
+
} = _ref3;
|
|
142
108
|
return Array.isArray(data.visibleIndex) ? data.visibleIndex[1] === lastMovableIndex : data.visibleIndex === lastMovableIndex;
|
|
143
109
|
});
|
|
144
110
|
var movableItems = treeItems.slice(firstMovableTreeIndex, lastMovableTreeIndex + 1);
|
|
@@ -172,8 +138,7 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
172
138
|
elements.push(/*#__PURE__*/_jsx(SortableTree, {
|
|
173
139
|
items: movableItems,
|
|
174
140
|
renderItem: this.renderItem,
|
|
175
|
-
|
|
176
|
-
onDragEnd: this.handleDragEnd
|
|
141
|
+
isDraggable: isDraggable
|
|
177
142
|
}, "movable-items"));
|
|
178
143
|
if (lastMovableIndex != null && lastMovableIndex < columns.length - 1) {
|
|
179
144
|
elements.push(/*#__PURE__*/_jsx("hr", {}, "bottom-horizontal-divider"));
|
|
@@ -201,8 +166,6 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
201
166
|
}, columnName), {
|
|
202
167
|
max: 1000
|
|
203
168
|
}));
|
|
204
|
-
this.handleSearchInputChange = this.handleSearchInputChange.bind(this);
|
|
205
|
-
this.searchColumns = this.searchColumns.bind(this);
|
|
206
169
|
this.handleItemClick = this.handleItemClick.bind(this);
|
|
207
170
|
this.handleDragEnd = this.handleDragEnd.bind(this);
|
|
208
171
|
this.handleGroupDelete = this.handleGroupDelete.bind(this);
|
|
@@ -213,14 +176,16 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
213
176
|
this.handleDragStart = this.handleDragStart.bind(this);
|
|
214
177
|
this.handleOverflowAction = this.handleOverflowAction.bind(this);
|
|
215
178
|
this.handleKeyboardShortcut = this.handleKeyboardShortcut.bind(this);
|
|
179
|
+
this.handleSearchModalOpenChange = this.handleSearchModalOpenChange.bind(this);
|
|
180
|
+
this.handleSearchSelect = this.handleSearchSelect.bind(this);
|
|
181
|
+
this.handleSearchItemClicked = this.handleSearchItemClicked.bind(this);
|
|
182
|
+
this.renderItem = this.renderItem.bind(this);
|
|
216
183
|
this.state = {
|
|
217
184
|
selectedColumns: new Set(),
|
|
218
|
-
queriedColumnIndex: undefined,
|
|
219
|
-
queriedColumnRange: undefined,
|
|
220
|
-
prevQueriedColumns: undefined,
|
|
221
185
|
lastSelectedColumn: '',
|
|
222
|
-
|
|
223
|
-
|
|
186
|
+
showHiddenColumns: true,
|
|
187
|
+
isSearchModalOpen: false,
|
|
188
|
+
movedColumns: props.movedColumns
|
|
224
189
|
};
|
|
225
190
|
this.list = null;
|
|
226
191
|
}
|
|
@@ -239,34 +204,46 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
239
204
|
});
|
|
240
205
|
}
|
|
241
206
|
componentDidUpdate(prevProps) {
|
|
207
|
+
// If we change because of undo/redo or reorders in the grid, update internal state
|
|
242
208
|
var {
|
|
243
209
|
movedColumns
|
|
244
210
|
} = this.props;
|
|
245
|
-
if (movedColumns !==
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
|
|
211
|
+
if (prevProps.movedColumns !== movedColumns) {
|
|
212
|
+
this.setState({
|
|
213
|
+
movedColumns
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Scroll to the item when it's available
|
|
218
|
+
if (this.scrollAndFocusColumnOnUpdate != null) {
|
|
219
|
+
var _this$list;
|
|
220
|
+
var itemElement = (_this$list = this.list) === null || _this$list === void 0 ? void 0 : _this$list.querySelector(".item-wrapper[data-id=\"".concat(this.scrollAndFocusColumnOnUpdate, "\"] .tree-item"));
|
|
221
|
+
if (itemElement instanceof HTMLElement) {
|
|
222
|
+
itemElement.scrollIntoView({
|
|
223
|
+
block: 'nearest'
|
|
224
|
+
});
|
|
225
|
+
itemElement.focus();
|
|
226
|
+
this.scrollAndFocusColumnOnUpdate = null;
|
|
227
|
+
}
|
|
250
228
|
}
|
|
251
229
|
|
|
252
230
|
// document.activeElement is either body or html when nothing is focused.
|
|
253
231
|
// If there is no focused element, then we probably deleted or renamed a group
|
|
254
232
|
// resulting in focus loss. Try to re-establish focus.
|
|
255
|
-
// Cannot
|
|
233
|
+
// Cannot rely on focusout event for this because it doesn't fire when the focused element is deleted
|
|
256
234
|
// (except in Chrome which is against the spec here).
|
|
257
|
-
if ((document.activeElement === document.body || document.activeElement === document.documentElement) && this.lastFocusedItemIndex
|
|
258
|
-
var _this$
|
|
259
|
-
var itemToFocus = (_this$
|
|
260
|
-
if (itemToFocus
|
|
235
|
+
if ((document.activeElement === document.body || document.activeElement === document.documentElement) && this.lastFocusedItemIndex !== null) {
|
|
236
|
+
var _this$list2;
|
|
237
|
+
var itemToFocus = (_this$list2 = this.list) === null || _this$list2 === void 0 ? void 0 : _this$list2.querySelector(".item-wrapper:nth-child(".concat(this.lastFocusedItemIndex + 1, ") .tree-item"));
|
|
238
|
+
if (itemToFocus != null && itemToFocus instanceof HTMLElement) {
|
|
239
|
+
itemToFocus.focus();
|
|
240
|
+
} else {
|
|
261
241
|
log.warn('Could not maintain focus');
|
|
262
242
|
this.lastFocusedItemIndex = null;
|
|
263
|
-
return;
|
|
264
243
|
}
|
|
265
|
-
itemToFocus.focus();
|
|
266
244
|
}
|
|
267
245
|
}
|
|
268
246
|
componentWillUnmount() {
|
|
269
|
-
this.debouncedSearchColumns.cancel();
|
|
270
247
|
var {
|
|
271
248
|
columnHeaderGroups,
|
|
272
249
|
onColumnHeaderGroupChanged
|
|
@@ -286,11 +263,7 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
286
263
|
} = this.props;
|
|
287
264
|
this.setState({
|
|
288
265
|
selectedColumns: new Set(),
|
|
289
|
-
|
|
290
|
-
queriedColumnRange: undefined,
|
|
291
|
-
prevQueriedColumns: undefined,
|
|
292
|
-
lastSelectedColumn: '',
|
|
293
|
-
searchFilter: ''
|
|
266
|
+
lastSelectedColumn: ''
|
|
294
267
|
});
|
|
295
268
|
onReset();
|
|
296
269
|
onColumnHeaderGroupChanged(model.initialColumnHeaderGroups);
|
|
@@ -302,164 +275,6 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
302
275
|
lastSelectedColumn: ''
|
|
303
276
|
});
|
|
304
277
|
}
|
|
305
|
-
handleSearchInputChange(event) {
|
|
306
|
-
var searchFilter = event.target.value;
|
|
307
|
-
this.setState({
|
|
308
|
-
searchFilter
|
|
309
|
-
});
|
|
310
|
-
if (!searchFilter) {
|
|
311
|
-
this.debouncedSearchColumns.cancel();
|
|
312
|
-
this.resetSelection();
|
|
313
|
-
return;
|
|
314
|
-
}
|
|
315
|
-
this.debouncedSearchColumns(searchFilter);
|
|
316
|
-
}
|
|
317
|
-
searchColumns(searchFilter) {
|
|
318
|
-
var updateQuery = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
319
|
-
var flattenedItems = flattenTree(this.getTreeItems());
|
|
320
|
-
var itemsMatch = flattenedItems.filter(_ref6 => {
|
|
321
|
-
var _data$group$isNew, _data$group;
|
|
322
|
-
var {
|
|
323
|
-
id,
|
|
324
|
-
data
|
|
325
|
-
} = _ref6;
|
|
326
|
-
return !((_data$group$isNew = (_data$group = data.group) === null || _data$group === void 0 ? void 0 : _data$group.isNew) !== null && _data$group$isNew !== void 0 ? _data$group$isNew : false) && id.toLowerCase().includes(searchFilter.toLowerCase());
|
|
327
|
-
});
|
|
328
|
-
var columnsMatchMap = itemsMatch.reduce((acc, _ref7) => {
|
|
329
|
-
var {
|
|
330
|
-
id
|
|
331
|
-
} = _ref7;
|
|
332
|
-
var originalIndex = flattenedItems.findIndex(item => item.id === id);
|
|
333
|
-
return _objectSpread(_objectSpread({}, acc), {}, {
|
|
334
|
-
[originalIndex]: id
|
|
335
|
-
});
|
|
336
|
-
}, {});
|
|
337
|
-
if (!updateQuery) {
|
|
338
|
-
this.setState({
|
|
339
|
-
prevQueriedColumns: columnsMatchMap
|
|
340
|
-
});
|
|
341
|
-
return;
|
|
342
|
-
}
|
|
343
|
-
var columnIds = itemsMatch.map(_ref8 => {
|
|
344
|
-
var {
|
|
345
|
-
id
|
|
346
|
-
} = _ref8;
|
|
347
|
-
return id;
|
|
348
|
-
});
|
|
349
|
-
this.addColumnToSelected(columnIds, false);
|
|
350
|
-
if (columnIds.length > 0) {
|
|
351
|
-
var _this$list2;
|
|
352
|
-
var visibleIndexToFocus = flattenedItems.findIndex(_ref9 => {
|
|
353
|
-
var {
|
|
354
|
-
id
|
|
355
|
-
} = _ref9;
|
|
356
|
-
return id.toLowerCase().includes(searchFilter.toLowerCase());
|
|
357
|
-
});
|
|
358
|
-
var columnItemToFocus = (_this$list2 = this.list) === null || _this$list2 === void 0 ? void 0 : _this$list2.querySelectorAll('.item-wrapper')[visibleIndexToFocus];
|
|
359
|
-
columnItemToFocus === null || columnItemToFocus === void 0 || columnItemToFocus.scrollIntoView({
|
|
360
|
-
block: 'center'
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
this.setState({
|
|
364
|
-
prevQueriedColumns: columnsMatchMap,
|
|
365
|
-
queriedColumnIndex: undefined
|
|
366
|
-
});
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
/**
|
|
370
|
-
* Change the selected column to the next or previous column that matches the search criteria.
|
|
371
|
-
*
|
|
372
|
-
* queriedColumnRange stores the closes options in the case that the user clicks on an option that didn't fulfill the search criteria.
|
|
373
|
-
* On click of the forward/back button, queriedColumnIndex is updated to either the upper or lower index in queriedColumnRange
|
|
374
|
-
*
|
|
375
|
-
* queriedColumnIndex is the current index within prevQueriedColumns. Not their actual index in the tree.
|
|
376
|
-
*
|
|
377
|
-
* @param direction The direction to move the selection
|
|
378
|
-
*/
|
|
379
|
-
|
|
380
|
-
changeSelectedColumn(direction) {
|
|
381
|
-
var _this$list3;
|
|
382
|
-
var {
|
|
383
|
-
queriedColumnIndex,
|
|
384
|
-
queriedColumnRange,
|
|
385
|
-
prevQueriedColumns
|
|
386
|
-
} = this.state;
|
|
387
|
-
var newQueriedColumnIndex = queriedColumnIndex;
|
|
388
|
-
if (prevQueriedColumns === undefined) return;
|
|
389
|
-
var queriedColumnsLength = Object.keys(prevQueriedColumns).length;
|
|
390
|
-
if (direction === 'forward') {
|
|
391
|
-
if (queriedColumnRange !== undefined) {
|
|
392
|
-
newQueriedColumnIndex = queriedColumnRange.nextIndex;
|
|
393
|
-
} else if (newQueriedColumnIndex === undefined || newQueriedColumnIndex >= queriedColumnsLength - 1) {
|
|
394
|
-
newQueriedColumnIndex = 0;
|
|
395
|
-
} else {
|
|
396
|
-
newQueriedColumnIndex += 1;
|
|
397
|
-
}
|
|
398
|
-
} else if (direction === 'back') {
|
|
399
|
-
if (queriedColumnRange !== undefined) {
|
|
400
|
-
newQueriedColumnIndex = queriedColumnRange.prevIndex;
|
|
401
|
-
} else if (newQueriedColumnIndex === undefined || newQueriedColumnIndex <= 0) {
|
|
402
|
-
newQueriedColumnIndex = queriedColumnsLength - 1;
|
|
403
|
-
} else {
|
|
404
|
-
newQueriedColumnIndex -= 1;
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
this.addColumnToSelected([Object.values(prevQueriedColumns)[newQueriedColumnIndex]], false);
|
|
408
|
-
var actualColumnIndex = parseInt(Object.keys(prevQueriedColumns)[newQueriedColumnIndex], 10);
|
|
409
|
-
var columnItemToFocus = (_this$list3 = this.list) === null || _this$list3 === void 0 ? void 0 : _this$list3.querySelectorAll('.item-wrapper')[actualColumnIndex];
|
|
410
|
-
columnItemToFocus === null || columnItemToFocus === void 0 || columnItemToFocus.scrollIntoView({
|
|
411
|
-
block: 'center'
|
|
412
|
-
});
|
|
413
|
-
this.setState({
|
|
414
|
-
queriedColumnIndex: newQueriedColumnIndex,
|
|
415
|
-
queriedColumnRange: undefined
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
/**
|
|
420
|
-
* Handles changing the queriedColumnIndex on user click.
|
|
421
|
-
*
|
|
422
|
-
* If the option clicked matches the search criteria the index is updated immediately.
|
|
423
|
-
*
|
|
424
|
-
* If the option clicked doesn't meet the search criteria, the two closest options that fulfill the criteria are stored.
|
|
425
|
-
* On click of the forward/back button the selection will change to one of those options. (Think of VS Code search functionality)
|
|
426
|
-
*
|
|
427
|
-
* @param name the name of the clicked column
|
|
428
|
-
*/
|
|
429
|
-
adjustQueriedIndex(name) {
|
|
430
|
-
var {
|
|
431
|
-
prevQueriedColumns
|
|
432
|
-
} = this.state;
|
|
433
|
-
if (prevQueriedColumns === undefined) return;
|
|
434
|
-
if (name in Object.values(prevQueriedColumns)) {
|
|
435
|
-
var newQueriedColumnIndex = Object.values(prevQueriedColumns).indexOf(name);
|
|
436
|
-
this.setState({
|
|
437
|
-
queriedColumnIndex: newQueriedColumnIndex,
|
|
438
|
-
queriedColumnRange: undefined
|
|
439
|
-
});
|
|
440
|
-
return;
|
|
441
|
-
}
|
|
442
|
-
var flattenedItems = flattenTree(this.getTreeItems());
|
|
443
|
-
var clickedIndex = flattenedItems.findIndex(item => item.id === name);
|
|
444
|
-
var queriedColumnsIndexes = Object.keys(prevQueriedColumns).map(idx => parseInt(idx, 10));
|
|
445
|
-
var prevIndex = queriedColumnsIndexes.length - 1;
|
|
446
|
-
var nextIndex = 0;
|
|
447
|
-
for (var i = 0; i < queriedColumnsIndexes.length; i += 1) {
|
|
448
|
-
var index = queriedColumnsIndexes[i];
|
|
449
|
-
if (index < clickedIndex) {
|
|
450
|
-
prevIndex = i;
|
|
451
|
-
} else if (index > clickedIndex) {
|
|
452
|
-
nextIndex = i;
|
|
453
|
-
break;
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
this.setState({
|
|
457
|
-
queriedColumnRange: {
|
|
458
|
-
prevIndex,
|
|
459
|
-
nextIndex
|
|
460
|
-
}
|
|
461
|
-
});
|
|
462
|
-
}
|
|
463
278
|
|
|
464
279
|
/**
|
|
465
280
|
* Moves the currently selected columns in the direction specified.
|
|
@@ -615,16 +430,16 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
615
430
|
var scrollListAfterMove;
|
|
616
431
|
if (option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP) {
|
|
617
432
|
scrollListAfterMove = () => {
|
|
618
|
-
var _this$
|
|
619
|
-
(_this$
|
|
433
|
+
var _this$list3;
|
|
434
|
+
(_this$list3 = this.list) === null || _this$list3 === void 0 || (_this$list3 = _this$list3.parentElement) === null || _this$list3 === void 0 || _this$list3.scroll({
|
|
620
435
|
top: 0
|
|
621
436
|
});
|
|
622
437
|
};
|
|
623
438
|
}
|
|
624
439
|
if (option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM) {
|
|
625
440
|
scrollListAfterMove = () => {
|
|
626
|
-
var _this$
|
|
627
|
-
(_this$
|
|
441
|
+
var _this$list4;
|
|
442
|
+
(_this$list4 = this.list) === null || _this$list4 === void 0 || (_this$list4 = _this$list4.parentElement) === null || _this$list4 === void 0 || _this$list4.scroll({
|
|
628
443
|
top: this.list.parentElement.scrollHeight
|
|
629
444
|
});
|
|
630
445
|
};
|
|
@@ -705,14 +520,27 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
705
520
|
var newMoves = this.getSortMoves(moveableTree, option, initialAndFrozenMovedColumns);
|
|
706
521
|
onMovedColumnsChanged(newMoves);
|
|
707
522
|
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Handles clicking on an item in the visibility ordering list.
|
|
526
|
+
* Adds and removes to selection as necessary based on modifier and shift keys.
|
|
527
|
+
* Returns the columns to be added to the selection, if any.
|
|
528
|
+
*
|
|
529
|
+
* @param name The name of the column clicked
|
|
530
|
+
* @param event The click event
|
|
531
|
+
* @param showHiddenColumns If hidden columns should be included in the selection
|
|
532
|
+
* @returns The columns to be added to the selection, if any`
|
|
533
|
+
*/
|
|
708
534
|
handleItemClick(name, event) {
|
|
535
|
+
var _event$currentTarget;
|
|
536
|
+
var showHiddenColumns = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
709
537
|
event.stopPropagation();
|
|
710
538
|
|
|
711
539
|
// Click was triggered by an interactive element. Ignore select
|
|
712
540
|
if (event.target instanceof HTMLElement && (event.target.tagName === 'BUTTON' || event.target.tagName === 'INPUT')) {
|
|
713
|
-
return;
|
|
541
|
+
return [];
|
|
714
542
|
}
|
|
715
|
-
event.currentTarget.focus();
|
|
543
|
+
(_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 || _event$currentTarget.focus();
|
|
716
544
|
var {
|
|
717
545
|
selectedColumns,
|
|
718
546
|
lastSelectedColumn
|
|
@@ -723,14 +551,14 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
723
551
|
var columnsToBeAdded = [name];
|
|
724
552
|
if (isSelected && isModifierKeyDown) {
|
|
725
553
|
this.removeColumnFromSelected(name);
|
|
726
|
-
return;
|
|
554
|
+
return [];
|
|
727
555
|
}
|
|
728
|
-
var movableItems = flattenTree(this.getTreeItems());
|
|
556
|
+
var movableItems = flattenTree(this.getTreeItems(showHiddenColumns));
|
|
729
557
|
if (isSelected && !isShiftKeyDown && lastSelectedColumn === name) {
|
|
730
|
-
var selectedItem = movableItems.find(
|
|
558
|
+
var selectedItem = movableItems.find(_ref4 => {
|
|
731
559
|
var {
|
|
732
560
|
id
|
|
733
|
-
} =
|
|
561
|
+
} = _ref4;
|
|
734
562
|
return id === name;
|
|
735
563
|
});
|
|
736
564
|
assertNotNull(selectedItem);
|
|
@@ -738,7 +566,7 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
738
566
|
// If clicking on an item and it's the only thing selected, deselect it
|
|
739
567
|
if (childCount + 1 === selectedColumns.size) {
|
|
740
568
|
this.resetSelection();
|
|
741
|
-
return;
|
|
569
|
+
return [];
|
|
742
570
|
}
|
|
743
571
|
}
|
|
744
572
|
if (isShiftKeyDown) {
|
|
@@ -747,10 +575,48 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
747
575
|
columnsToBeAdded.push(...movableItems.slice(Math.min(lastSelectedIndex, selectedIndex), Math.max(lastSelectedIndex, selectedIndex) + 1).map(item => item.id));
|
|
748
576
|
}
|
|
749
577
|
this.addColumnToSelected(columnsToBeAdded, isModifierKeyDown || isShiftKeyDown);
|
|
750
|
-
this.adjustQueriedIndex(name);
|
|
751
578
|
this.setState({
|
|
752
579
|
lastSelectedColumn: name
|
|
753
580
|
});
|
|
581
|
+
return columnsToBeAdded;
|
|
582
|
+
}
|
|
583
|
+
handleSearchItemClicked(name, event) {
|
|
584
|
+
var columnsToAdd = this.handleItemClick(name, event, true);
|
|
585
|
+
var {
|
|
586
|
+
showHiddenColumns
|
|
587
|
+
} = this.state;
|
|
588
|
+
var {
|
|
589
|
+
onColumnVisibilityChanged
|
|
590
|
+
} = this.props;
|
|
591
|
+
if (columnsToAdd.length === 0) {
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
var modelIndexesToShow = this.getSelectedItemModelIndexes(new Set(columnsToAdd));
|
|
595
|
+
if (!showHiddenColumns) {
|
|
596
|
+
onColumnVisibilityChanged(modelIndexesToShow, true);
|
|
597
|
+
}
|
|
598
|
+
if (event.shiftKey || GridUtils.isModifierKeyDown(event)) {
|
|
599
|
+
return;
|
|
600
|
+
}
|
|
601
|
+
this.scrollAndFocusColumnOnUpdate = name;
|
|
602
|
+
}
|
|
603
|
+
handleSearchSelect(names) {
|
|
604
|
+
if (names.length === 0) {
|
|
605
|
+
return;
|
|
606
|
+
}
|
|
607
|
+
var {
|
|
608
|
+
showHiddenColumns
|
|
609
|
+
} = this.state;
|
|
610
|
+
var {
|
|
611
|
+
onColumnVisibilityChanged
|
|
612
|
+
} = this.props;
|
|
613
|
+
if (!showHiddenColumns) {
|
|
614
|
+
var modelIndexesToShow = this.getSelectedItemModelIndexes(new Set(names));
|
|
615
|
+
onColumnVisibilityChanged(modelIndexesToShow, true);
|
|
616
|
+
}
|
|
617
|
+
var [firstItem] = names;
|
|
618
|
+
this.scrollAndFocusColumnOnUpdate = firstItem;
|
|
619
|
+
this.addColumnToSelected(names, false);
|
|
754
620
|
}
|
|
755
621
|
|
|
756
622
|
/**
|
|
@@ -771,11 +637,11 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
771
637
|
// The treeItems array will always be parent -> child in the order
|
|
772
638
|
// We don't need to recursively iterate because of this
|
|
773
639
|
// The parent will always be added before any children for nested selections
|
|
774
|
-
flattenedItems.forEach(
|
|
640
|
+
flattenedItems.forEach(_ref5 => {
|
|
775
641
|
var {
|
|
776
642
|
id,
|
|
777
643
|
children
|
|
778
|
-
} =
|
|
644
|
+
} = _ref5;
|
|
779
645
|
if (newSelectedColumns.has(id)) {
|
|
780
646
|
children.forEach(child => newSelectedColumns.add(child.id));
|
|
781
647
|
}
|
|
@@ -800,17 +666,17 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
800
666
|
selectedColumns
|
|
801
667
|
} = this.state;
|
|
802
668
|
var flattenedItems = flattenTree(this.getTreeItems());
|
|
803
|
-
var item = flattenedItems.find(
|
|
669
|
+
var item = flattenedItems.find(_ref6 => {
|
|
804
670
|
var {
|
|
805
671
|
id
|
|
806
|
-
} =
|
|
672
|
+
} = _ref6;
|
|
807
673
|
return id === name;
|
|
808
674
|
});
|
|
809
675
|
assertNotNull(item);
|
|
810
|
-
var parentItem = flattenedItems.find(
|
|
676
|
+
var parentItem = flattenedItems.find(_ref7 => {
|
|
811
677
|
var {
|
|
812
678
|
id
|
|
813
|
-
} =
|
|
679
|
+
} = _ref7;
|
|
814
680
|
return id === item.parentId;
|
|
815
681
|
});
|
|
816
682
|
|
|
@@ -821,10 +687,10 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
821
687
|
var _loop2 = function _loop2() {
|
|
822
688
|
selectedColumns.delete(parentItem.id);
|
|
823
689
|
var newParentId = parentItem.parentId;
|
|
824
|
-
parentItem = flattenedItems.find(
|
|
690
|
+
parentItem = flattenedItems.find(_ref8 => {
|
|
825
691
|
var {
|
|
826
692
|
id
|
|
827
|
-
} =
|
|
693
|
+
} = _ref8;
|
|
828
694
|
return id === newParentId;
|
|
829
695
|
});
|
|
830
696
|
};
|
|
@@ -836,13 +702,25 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
836
702
|
selectedColumns: new Set(selectedColumns)
|
|
837
703
|
});
|
|
838
704
|
}
|
|
839
|
-
handleDragStart(id) {
|
|
705
|
+
handleDragStart(id, event) {
|
|
840
706
|
var {
|
|
841
707
|
selectedColumns
|
|
842
708
|
} = this.state;
|
|
843
|
-
if (
|
|
844
|
-
|
|
709
|
+
if (selectedColumns.has(id)) {
|
|
710
|
+
return;
|
|
845
711
|
}
|
|
712
|
+
var dragEvent = event.activatorEvent;
|
|
713
|
+
var isAddingToSelection = GridUtils.isModifierKeyDown(dragEvent) || dragEvent.shiftKey;
|
|
714
|
+
// For some reason, flushSync is needed here to prevent issues when
|
|
715
|
+
// dragging multiple items, dropping, then immediately dragging a single item
|
|
716
|
+
// over the previously dragged group. Without flushSync, the item being dragged
|
|
717
|
+
// can cause items in the previously dragged group to be in completely wrong places.
|
|
718
|
+
flushSync(() => {
|
|
719
|
+
this.handleItemClick(id, event.activatorEvent, true);
|
|
720
|
+
// Always add the dragged item back to selected in case the user ctrl+dragged on an already
|
|
721
|
+
// selected item. The handleItemClick would deselect it, but we want to keep it selected.
|
|
722
|
+
this.addColumnToSelected([id], isAddingToSelection);
|
|
723
|
+
});
|
|
846
724
|
}
|
|
847
725
|
handleDragEnd(from, to) {
|
|
848
726
|
var {
|
|
@@ -863,6 +741,15 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
863
741
|
} = moveItemsFromDrop(from, to, movedColumns, columnHeaderGroups, flattenedItems, selectedParentItems, firstMovableIndex, lastMovableIndex);
|
|
864
742
|
onColumnHeaderGroupChanged(newGroups);
|
|
865
743
|
onMovedColumnsChanged(newMoves);
|
|
744
|
+
// Without tracking the state here, React 18 is rendering the child separately from
|
|
745
|
+
// the render which changes the prop. As a result, the drop animations go to the
|
|
746
|
+
// original location because of that render with stale items. I could not find any
|
|
747
|
+
// other way to fix this (removing memoization, removing keys, etc.)
|
|
748
|
+
this.setState({
|
|
749
|
+
movedColumns: newMoves
|
|
750
|
+
});
|
|
751
|
+
// Focus the dragged item after the move. Should not scroll since it's already in view
|
|
752
|
+
this.scrollAndFocusColumnOnUpdate = from.id;
|
|
866
753
|
}
|
|
867
754
|
handleGroupNameChange(group, newName) {
|
|
868
755
|
var {
|
|
@@ -872,10 +759,10 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
872
759
|
} = this.props;
|
|
873
760
|
var newGroups = [...columnHeaderGroups];
|
|
874
761
|
var oldName = group.name;
|
|
875
|
-
var groupIndex = newGroups.findIndex(
|
|
762
|
+
var groupIndex = newGroups.findIndex(_ref9 => {
|
|
876
763
|
var {
|
|
877
764
|
name
|
|
878
|
-
} =
|
|
765
|
+
} = _ref9;
|
|
879
766
|
return name === oldName;
|
|
880
767
|
});
|
|
881
768
|
var oldGroup = newGroups[groupIndex];
|
|
@@ -884,10 +771,10 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
884
771
|
var newGroup = new ColumnHeaderGroup(oldGroup);
|
|
885
772
|
newGroup.name = newName;
|
|
886
773
|
newGroups.splice(groupIndex, 1, newGroup);
|
|
887
|
-
var parentIndex = newGroups.findIndex(
|
|
774
|
+
var parentIndex = newGroups.findIndex(_ref0 => {
|
|
888
775
|
var {
|
|
889
776
|
name
|
|
890
|
-
} =
|
|
777
|
+
} = _ref0;
|
|
891
778
|
return name === newGroup.parent;
|
|
892
779
|
});
|
|
893
780
|
if (parentIndex >= 0) {
|
|
@@ -896,6 +783,10 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
896
783
|
newParent.addChildren([newName]);
|
|
897
784
|
newGroups.splice(parentIndex, 1, newParent);
|
|
898
785
|
}
|
|
786
|
+
|
|
787
|
+
// The group will be a new item, so focus it after the update
|
|
788
|
+
// otherwise we may lose focus entirely
|
|
789
|
+
this.scrollAndFocusColumnOnUpdate = newName;
|
|
899
790
|
onColumnHeaderGroupChanged(newGroups);
|
|
900
791
|
endUndoGroup();
|
|
901
792
|
}
|
|
@@ -937,10 +828,10 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
937
828
|
var name = "".concat(ColumnHeaderGroup.NEW_GROUP_PREFIX, "-").concat(Date.now());
|
|
938
829
|
var newGroup = new ColumnHeaderGroup({
|
|
939
830
|
name,
|
|
940
|
-
children: selectedItems.map(
|
|
831
|
+
children: selectedItems.map(_ref1 => {
|
|
941
832
|
var {
|
|
942
833
|
id
|
|
943
|
-
} =
|
|
834
|
+
} = _ref1;
|
|
944
835
|
return id;
|
|
945
836
|
}),
|
|
946
837
|
depth: 0,
|
|
@@ -948,8 +839,8 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
948
839
|
});
|
|
949
840
|
startUndoGroup();
|
|
950
841
|
onMovedColumnsChanged(movedColumns.concat(newMoves), () => {
|
|
951
|
-
var _this$
|
|
952
|
-
(_this$
|
|
842
|
+
var _this$list5;
|
|
843
|
+
(_this$list5 = this.list) === null || _this$list5 === void 0 || (_this$list5 = _this$list5.parentElement) === null || _this$list5 === void 0 || _this$list5.scroll({
|
|
953
844
|
top: 0
|
|
954
845
|
});
|
|
955
846
|
});
|
|
@@ -973,21 +864,64 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
973
864
|
if (!DbNameValidator.isValidColumnName(groupName)) {
|
|
974
865
|
return 'Invalid name';
|
|
975
866
|
}
|
|
976
|
-
if (columns.some(
|
|
867
|
+
if (columns.some(_ref10 => {
|
|
977
868
|
var {
|
|
978
869
|
name
|
|
979
|
-
} =
|
|
870
|
+
} = _ref10;
|
|
980
871
|
return name === groupName;
|
|
981
|
-
}) || columnHeaderGroups.some(
|
|
872
|
+
}) || columnHeaderGroups.some(_ref11 => {
|
|
982
873
|
var {
|
|
983
874
|
name
|
|
984
|
-
} =
|
|
875
|
+
} = _ref11;
|
|
985
876
|
return name === groupName;
|
|
986
877
|
})) {
|
|
987
878
|
return 'Duplicate name';
|
|
988
879
|
}
|
|
989
880
|
return '';
|
|
990
881
|
}
|
|
882
|
+
renderItem(_ref12) {
|
|
883
|
+
var {
|
|
884
|
+
value,
|
|
885
|
+
clone,
|
|
886
|
+
item,
|
|
887
|
+
ref,
|
|
888
|
+
handleProps
|
|
889
|
+
} = _ref12;
|
|
890
|
+
var {
|
|
891
|
+
onColumnVisibilityChanged
|
|
892
|
+
} = this.props;
|
|
893
|
+
var {
|
|
894
|
+
selectedColumns,
|
|
895
|
+
showHiddenColumns
|
|
896
|
+
} = this.state;
|
|
897
|
+
var displayString = value;
|
|
898
|
+
|
|
899
|
+
// The cloned drag overlay we want to show the items being dragged
|
|
900
|
+
if (clone) {
|
|
901
|
+
var selectedItemNames = this.getSelectedParentItems().map(_ref13 => {
|
|
902
|
+
var {
|
|
903
|
+
id
|
|
904
|
+
} = _ref13;
|
|
905
|
+
return id;
|
|
906
|
+
});
|
|
907
|
+
displayString = selectedItemNames.join(', ');
|
|
908
|
+
}
|
|
909
|
+
return /*#__PURE__*/_jsx(VisibilityOrderingItem, {
|
|
910
|
+
ref: ref,
|
|
911
|
+
value: displayString,
|
|
912
|
+
clone: clone,
|
|
913
|
+
item: item,
|
|
914
|
+
childCount: selectedColumns.size,
|
|
915
|
+
onVisibilityChange: onColumnVisibilityChanged,
|
|
916
|
+
visibilityClickAndDrag: showHiddenColumns,
|
|
917
|
+
onClick: this.handleItemClick,
|
|
918
|
+
onGroupDelete: this.handleGroupDelete,
|
|
919
|
+
onGroupColorChange: this.handleGroupColorChange,
|
|
920
|
+
onGroupNameChange: this.handleGroupNameChange,
|
|
921
|
+
validateGroupName: this.validateGroupName,
|
|
922
|
+
handleProps: handleProps
|
|
923
|
+
}, item.id);
|
|
924
|
+
}
|
|
991
925
|
/**
|
|
992
926
|
* Gets the first movable visible index
|
|
993
927
|
*/
|
|
@@ -1011,20 +945,27 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
1011
945
|
/**
|
|
1012
946
|
* Gets the tree of movable items in order. Memoized for efficiency
|
|
1013
947
|
* Use flattenItems(this.getTreeItems()) if a flat list is needed
|
|
948
|
+
* @param showHiddenColumns Whether to show hidden columns in the tree. Defaults to the current state value.
|
|
1014
949
|
* @returns The movable tree items in order
|
|
1015
950
|
*/
|
|
1016
|
-
getTreeItems() {
|
|
951
|
+
getTreeItems(showHiddenColumns) {
|
|
1017
952
|
var {
|
|
1018
953
|
model,
|
|
1019
|
-
movedColumns,
|
|
1020
954
|
hiddenColumns,
|
|
1021
955
|
columnHeaderGroups
|
|
1022
956
|
} = this.props;
|
|
1023
957
|
var {
|
|
958
|
+
movedColumns,
|
|
1024
959
|
selectedColumns,
|
|
1025
|
-
showHiddenColumns
|
|
960
|
+
showHiddenColumns: showHiddenColumnsState
|
|
1026
961
|
} = this.state;
|
|
1027
|
-
return this.memoizedGetTreeItems(model.columns, movedColumns, columnHeaderGroups, hiddenColumns, selectedColumns, showHiddenColumns);
|
|
962
|
+
return this.memoizedGetTreeItems(model.columns, movedColumns, columnHeaderGroups, hiddenColumns, selectedColumns, showHiddenColumns !== null && showHiddenColumns !== void 0 ? showHiddenColumns : showHiddenColumnsState);
|
|
963
|
+
}
|
|
964
|
+
getSelectedItemModelIndexes(columnNames) {
|
|
965
|
+
var {
|
|
966
|
+
model
|
|
967
|
+
} = this.props;
|
|
968
|
+
return [...columnNames.values()].map(name => model.getColumnIndexByName(name)).filter(i => i != null).flat();
|
|
1028
969
|
}
|
|
1029
970
|
|
|
1030
971
|
/**
|
|
@@ -1038,11 +979,11 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
1038
979
|
selectedColumns
|
|
1039
980
|
} = this.state;
|
|
1040
981
|
var treeItems = flattenTree(this.getTreeItems());
|
|
1041
|
-
return treeItems.filter(
|
|
982
|
+
return treeItems.filter(_ref14 => {
|
|
1042
983
|
var {
|
|
1043
984
|
id,
|
|
1044
985
|
parentId
|
|
1045
|
-
} =
|
|
986
|
+
} = _ref14;
|
|
1046
987
|
return (
|
|
1047
988
|
// All items whose parents are not selected
|
|
1048
989
|
selectedColumns.has(id) && !selectedColumns.has(parentId !== null && parentId !== void 0 ? parentId : '')
|
|
@@ -1063,7 +1004,8 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
1063
1004
|
break;
|
|
1064
1005
|
case 'showHidden':
|
|
1065
1006
|
this.setState(prev => ({
|
|
1066
|
-
showHiddenColumns: !prev.showHiddenColumns
|
|
1007
|
+
showHiddenColumns: !prev.showHiddenColumns,
|
|
1008
|
+
selectedColumns: new Set()
|
|
1067
1009
|
}));
|
|
1068
1010
|
break;
|
|
1069
1011
|
}
|
|
@@ -1083,6 +1025,27 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
1083
1025
|
redo();
|
|
1084
1026
|
}
|
|
1085
1027
|
}
|
|
1028
|
+
handleSearchModalOpenChange(isOpen) {
|
|
1029
|
+
if (isOpen) {
|
|
1030
|
+
this.resetSelection();
|
|
1031
|
+
} else {
|
|
1032
|
+
var {
|
|
1033
|
+
showHiddenColumns,
|
|
1034
|
+
selectedColumns
|
|
1035
|
+
} = this.state;
|
|
1036
|
+
var {
|
|
1037
|
+
onColumnVisibilityChanged
|
|
1038
|
+
} = this.props;
|
|
1039
|
+
// Make sure all selected columns are visible when closing the search modal
|
|
1040
|
+
if (!showHiddenColumns) {
|
|
1041
|
+
var modelIndexesToShow = this.getSelectedItemModelIndexes(selectedColumns);
|
|
1042
|
+
onColumnVisibilityChanged(modelIndexesToShow, true);
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
this.setState({
|
|
1046
|
+
isSearchModalOpen: isOpen
|
|
1047
|
+
});
|
|
1048
|
+
}
|
|
1086
1049
|
render() {
|
|
1087
1050
|
var {
|
|
1088
1051
|
model,
|
|
@@ -1093,199 +1056,195 @@ class VisibilityOrderingBuilderInner extends PureComponent {
|
|
|
1093
1056
|
} = this.props;
|
|
1094
1057
|
var {
|
|
1095
1058
|
selectedColumns,
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
queriedColumnIndex,
|
|
1099
|
-
showHiddenColumns
|
|
1059
|
+
showHiddenColumns,
|
|
1060
|
+
isSearchModalOpen
|
|
1100
1061
|
} = this.state;
|
|
1101
1062
|
var hasSelection = selectedColumns.size > 0;
|
|
1102
1063
|
var treeItems = this.getTreeItems();
|
|
1103
|
-
var
|
|
1064
|
+
var flattenedItems = flattenTree(treeItems);
|
|
1104
1065
|
var hiddenColumnsSet = new Set(hiddenColumns);
|
|
1105
|
-
var columnsToToggle =
|
|
1106
|
-
// Pass through Set to dedupe model indexes
|
|
1107
|
-
...new Set(hasSelection ? [...selectedColumns.values()].map(name => nameToIndexes.get(name)).filter(i => i != null).flat() : treeItems.map(item => item.data.modelIndex).flat())];
|
|
1066
|
+
var columnsToToggle = hasSelection ? this.getSelectedItemModelIndexes(selectedColumns) : treeItems.map(item => item.data.modelIndex).flat();
|
|
1108
1067
|
var areSomeVisible = columnsToToggle.some(column => !hiddenColumnsSet.has(column));
|
|
1109
1068
|
var allToggleText = areSomeVisible ? 'Hide All' : 'Show All';
|
|
1110
1069
|
var selectedToggleText = areSomeVisible ? 'Hide Selected' : 'Show Selected';
|
|
1111
|
-
var visibilityOrderingList = this.makeVisibilityOrderingList(model.columns, treeItems, showHiddenColumns);
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
})
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
})
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
})
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
})
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
})]
|
|
1175
|
-
},
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
})
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
})
|
|
1187
|
-
}
|
|
1070
|
+
var visibilityOrderingList = this.makeVisibilityOrderingList(model.columns, treeItems, showHiddenColumns, !isSearchModalOpen);
|
|
1071
|
+
return /*#__PURE__*/_jsx(SortableTreeDndContext, {
|
|
1072
|
+
items: flattenedItems,
|
|
1073
|
+
onDragStart: this.handleDragStart,
|
|
1074
|
+
onDragEnd: this.handleDragEnd,
|
|
1075
|
+
renderItem: this.renderItem,
|
|
1076
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
1077
|
+
role: "menu",
|
|
1078
|
+
ref: this.wrapperRef,
|
|
1079
|
+
className: "visibility-ordering-builder",
|
|
1080
|
+
tabIndex: 0,
|
|
1081
|
+
onKeyUp: this.handleKeyboardShortcut,
|
|
1082
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
1083
|
+
className: "top-menu",
|
|
1084
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
1085
|
+
kind: "ghost",
|
|
1086
|
+
className: "toggle-visibility-btn",
|
|
1087
|
+
onClick: () => {
|
|
1088
|
+
onColumnVisibilityChanged(columnsToToggle, !areSomeVisible);
|
|
1089
|
+
},
|
|
1090
|
+
icon: areSomeVisible ? dhEye : dhEyeSlash,
|
|
1091
|
+
tooltip: "Toggle column visibility",
|
|
1092
|
+
children: !hasSelection ? allToggleText : selectedToggleText
|
|
1093
|
+
}), /*#__PURE__*/_jsx(SearchWithModal, {
|
|
1094
|
+
items: flattenedItems,
|
|
1095
|
+
onModalOpenChange: this.handleSearchModalOpenChange,
|
|
1096
|
+
onClick: this.handleSearchItemClicked,
|
|
1097
|
+
setSelection: this.handleSearchSelect
|
|
1098
|
+
}), /*#__PURE__*/_jsxs(MenuTrigger, {
|
|
1099
|
+
closeOnSelect: false,
|
|
1100
|
+
children: [/*#__PURE__*/_jsx(ActionButton, {
|
|
1101
|
+
isQuiet: true,
|
|
1102
|
+
"aria-label": "More options",
|
|
1103
|
+
children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
1104
|
+
icon: vsKebabVertical
|
|
1105
|
+
})
|
|
1106
|
+
}), /*#__PURE__*/_jsxs(SpectrumMenu, {
|
|
1107
|
+
onAction: this.handleOverflowAction,
|
|
1108
|
+
disabledKeys: [!canUndo && 'undo', !canRedo && 'redo'].filter(k => typeof k === 'string'),
|
|
1109
|
+
children: [/*#__PURE__*/_jsxs(Section, {
|
|
1110
|
+
"aria-label": "Undo and Redo",
|
|
1111
|
+
children: [/*#__PURE__*/_jsxs(Item, {
|
|
1112
|
+
textValue: "Undo",
|
|
1113
|
+
children: [/*#__PURE__*/_jsx(Icon, {
|
|
1114
|
+
children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
1115
|
+
icon: vsBlank
|
|
1116
|
+
})
|
|
1117
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
1118
|
+
children: "Undo"
|
|
1119
|
+
}), /*#__PURE__*/_jsx(Keyboard, {
|
|
1120
|
+
children: GLOBAL_SHORTCUTS.UNDO.getDisplayText()
|
|
1121
|
+
})]
|
|
1122
|
+
}, "undo"), /*#__PURE__*/_jsxs(Item, {
|
|
1123
|
+
textValue: "Redo",
|
|
1124
|
+
children: [/*#__PURE__*/_jsx(Icon, {
|
|
1125
|
+
children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
1126
|
+
icon: vsBlank
|
|
1127
|
+
})
|
|
1128
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
1129
|
+
children: "Redo"
|
|
1130
|
+
}), /*#__PURE__*/_jsx(Keyboard, {
|
|
1131
|
+
children: GLOBAL_SHORTCUTS.REDO.getDisplayText()
|
|
1132
|
+
})]
|
|
1133
|
+
}, "redo")]
|
|
1134
|
+
}), /*#__PURE__*/_jsx(Section, {
|
|
1135
|
+
"aria-label": "More actions",
|
|
1136
|
+
children: /*#__PURE__*/_jsxs(Item, {
|
|
1137
|
+
textValue: "Show hidden columns",
|
|
1138
|
+
children: [/*#__PURE__*/_jsx(Icon, {
|
|
1139
|
+
children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
1140
|
+
icon: showHiddenColumns ? vsCheck : vsBlank
|
|
1141
|
+
})
|
|
1142
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
1143
|
+
children: "Show hidden columns"
|
|
1144
|
+
})]
|
|
1145
|
+
}, "showHidden")
|
|
1146
|
+
})]
|
|
1188
1147
|
})]
|
|
1189
1148
|
})]
|
|
1149
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
1150
|
+
className: "top-menu",
|
|
1151
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
1152
|
+
kind: "ghost",
|
|
1153
|
+
icon: vsRefresh,
|
|
1154
|
+
className: "px-1",
|
|
1155
|
+
tooltip: "Reset to default",
|
|
1156
|
+
onClick: () => {
|
|
1157
|
+
this.resetVisibilityOrdering();
|
|
1158
|
+
},
|
|
1159
|
+
children: "Reset"
|
|
1160
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
1161
|
+
className: "vertical-divider"
|
|
1162
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
1163
|
+
kind: "ghost",
|
|
1164
|
+
icon: dhSortAlphaDown,
|
|
1165
|
+
className: "px-1",
|
|
1166
|
+
tooltip: "Sort ascending",
|
|
1167
|
+
onClick: () => {
|
|
1168
|
+
this.handleSortColumns(VisibilityOrderingBuilderInner.SORTING_OPTIONS.ASC);
|
|
1169
|
+
}
|
|
1170
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
1171
|
+
kind: "ghost",
|
|
1172
|
+
icon: dhSortAlphaUp,
|
|
1173
|
+
className: "px-1",
|
|
1174
|
+
tooltip: "Sort descending",
|
|
1175
|
+
onClick: () => {
|
|
1176
|
+
this.handleSortColumns(VisibilityOrderingBuilderInner.SORTING_OPTIONS.DSC);
|
|
1177
|
+
}
|
|
1178
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
1179
|
+
className: "vertical-divider"
|
|
1180
|
+
}), /*#__PURE__*/_jsxs(Button, {
|
|
1181
|
+
kind: "ghost",
|
|
1182
|
+
className: "px-1",
|
|
1183
|
+
tooltip: "Create group from selection",
|
|
1184
|
+
disabled: !hasSelection,
|
|
1185
|
+
onClick: this.handleGroupCreate,
|
|
1186
|
+
children: [/*#__PURE__*/_jsxs("span", {
|
|
1187
|
+
className: "fa-layers",
|
|
1188
|
+
children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
1189
|
+
mask: vsSymbolStructure,
|
|
1190
|
+
icon: vsCircleLargeFilled,
|
|
1191
|
+
transform: "right-7 down-5 shrink-6"
|
|
1192
|
+
}), /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
1193
|
+
icon: vsAdd,
|
|
1194
|
+
transform: "right-8 down-6 shrink-8"
|
|
1195
|
+
})]
|
|
1196
|
+
}), "Group"]
|
|
1197
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
1198
|
+
className: "vertical-divider"
|
|
1199
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
1200
|
+
kind: "ghost",
|
|
1201
|
+
icon: vsChevronUp,
|
|
1202
|
+
className: "px-1",
|
|
1203
|
+
tooltip: "Move selection up",
|
|
1204
|
+
onClick: () => {
|
|
1205
|
+
this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.UP);
|
|
1206
|
+
},
|
|
1207
|
+
disabled: !hasSelection
|
|
1208
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
1209
|
+
kind: "ghost",
|
|
1210
|
+
icon: vsChevronDown,
|
|
1211
|
+
className: "px-1",
|
|
1212
|
+
tooltip: "Move selection down",
|
|
1213
|
+
onClick: () => {
|
|
1214
|
+
this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.DOWN);
|
|
1215
|
+
},
|
|
1216
|
+
disabled: !hasSelection
|
|
1217
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
1218
|
+
kind: "ghost",
|
|
1219
|
+
icon: dhArrowToTop,
|
|
1220
|
+
className: "px-1",
|
|
1221
|
+
tooltip: "Move selection to top",
|
|
1222
|
+
onClick: () => {
|
|
1223
|
+
this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP);
|
|
1224
|
+
},
|
|
1225
|
+
disabled: !hasSelection
|
|
1226
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
1227
|
+
kind: "ghost",
|
|
1228
|
+
icon: dhArrowToBottom,
|
|
1229
|
+
className: "px-1",
|
|
1230
|
+
tooltip: "Move selection to bottom",
|
|
1231
|
+
onClick: () => {
|
|
1232
|
+
this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM);
|
|
1233
|
+
},
|
|
1234
|
+
disabled: !hasSelection
|
|
1235
|
+
})]
|
|
1236
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
1237
|
+
role: "menu",
|
|
1238
|
+
className: classNames('visibility-ordering-list'),
|
|
1239
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
1240
|
+
className: "column-list",
|
|
1241
|
+
ref: list => {
|
|
1242
|
+
this.list = list;
|
|
1243
|
+
},
|
|
1244
|
+
children: visibilityOrderingList
|
|
1245
|
+
})
|
|
1190
1246
|
})]
|
|
1191
|
-
})
|
|
1192
|
-
className: "top-menu",
|
|
1193
|
-
children: [/*#__PURE__*/_jsx(Button, {
|
|
1194
|
-
kind: "ghost",
|
|
1195
|
-
icon: vsRefresh,
|
|
1196
|
-
className: "px-1",
|
|
1197
|
-
tooltip: "Reset to default",
|
|
1198
|
-
onClick: () => {
|
|
1199
|
-
this.resetVisibilityOrdering();
|
|
1200
|
-
},
|
|
1201
|
-
children: "Reset"
|
|
1202
|
-
}), /*#__PURE__*/_jsx("span", {
|
|
1203
|
-
className: "vertical-divider"
|
|
1204
|
-
}), /*#__PURE__*/_jsx(Button, {
|
|
1205
|
-
kind: "ghost",
|
|
1206
|
-
icon: dhSortAlphaDown,
|
|
1207
|
-
className: "px-1",
|
|
1208
|
-
tooltip: "Sort ascending",
|
|
1209
|
-
onClick: () => {
|
|
1210
|
-
this.handleSortColumns(VisibilityOrderingBuilderInner.SORTING_OPTIONS.ASC);
|
|
1211
|
-
}
|
|
1212
|
-
}), /*#__PURE__*/_jsx(Button, {
|
|
1213
|
-
kind: "ghost",
|
|
1214
|
-
icon: dhSortAlphaUp,
|
|
1215
|
-
className: "px-1",
|
|
1216
|
-
tooltip: "Sort descending",
|
|
1217
|
-
onClick: () => {
|
|
1218
|
-
this.handleSortColumns(VisibilityOrderingBuilderInner.SORTING_OPTIONS.DSC);
|
|
1219
|
-
}
|
|
1220
|
-
}), /*#__PURE__*/_jsx("span", {
|
|
1221
|
-
className: "vertical-divider"
|
|
1222
|
-
}), /*#__PURE__*/_jsxs(Button, {
|
|
1223
|
-
kind: "ghost",
|
|
1224
|
-
className: "px-1",
|
|
1225
|
-
tooltip: "Create group from selection",
|
|
1226
|
-
disabled: !hasSelection,
|
|
1227
|
-
onClick: this.handleGroupCreate,
|
|
1228
|
-
children: [/*#__PURE__*/_jsxs("span", {
|
|
1229
|
-
className: "fa-layers",
|
|
1230
|
-
children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
1231
|
-
mask: vsSymbolStructure,
|
|
1232
|
-
icon: vsCircleLargeFilled,
|
|
1233
|
-
transform: "right-7 down-5 shrink-6"
|
|
1234
|
-
}), /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
1235
|
-
icon: vsAdd,
|
|
1236
|
-
transform: "right-8 down-6 shrink-8"
|
|
1237
|
-
})]
|
|
1238
|
-
}), "Group"]
|
|
1239
|
-
}), /*#__PURE__*/_jsx("span", {
|
|
1240
|
-
className: "vertical-divider"
|
|
1241
|
-
}), /*#__PURE__*/_jsx(Button, {
|
|
1242
|
-
kind: "ghost",
|
|
1243
|
-
icon: vsChevronUp,
|
|
1244
|
-
className: "px-1",
|
|
1245
|
-
tooltip: "Move selection up",
|
|
1246
|
-
onClick: () => {
|
|
1247
|
-
this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.UP);
|
|
1248
|
-
},
|
|
1249
|
-
disabled: !hasSelection
|
|
1250
|
-
}), /*#__PURE__*/_jsx(Button, {
|
|
1251
|
-
kind: "ghost",
|
|
1252
|
-
icon: vsChevronDown,
|
|
1253
|
-
className: "px-1",
|
|
1254
|
-
tooltip: "Move selection down",
|
|
1255
|
-
onClick: () => {
|
|
1256
|
-
this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.DOWN);
|
|
1257
|
-
},
|
|
1258
|
-
disabled: !hasSelection
|
|
1259
|
-
}), /*#__PURE__*/_jsx(Button, {
|
|
1260
|
-
kind: "ghost",
|
|
1261
|
-
icon: dhArrowToTop,
|
|
1262
|
-
className: "px-1",
|
|
1263
|
-
tooltip: "Move selection to top",
|
|
1264
|
-
onClick: () => {
|
|
1265
|
-
this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP);
|
|
1266
|
-
},
|
|
1267
|
-
disabled: !hasSelection
|
|
1268
|
-
}), /*#__PURE__*/_jsx(Button, {
|
|
1269
|
-
kind: "ghost",
|
|
1270
|
-
icon: dhArrowToBottom,
|
|
1271
|
-
className: "px-1",
|
|
1272
|
-
tooltip: "Move selection to bottom",
|
|
1273
|
-
onClick: () => {
|
|
1274
|
-
this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM);
|
|
1275
|
-
},
|
|
1276
|
-
disabled: !hasSelection
|
|
1277
|
-
})]
|
|
1278
|
-
}), /*#__PURE__*/_jsx("div", {
|
|
1279
|
-
role: "menu",
|
|
1280
|
-
className: classNames('visibility-ordering-list'),
|
|
1281
|
-
children: /*#__PURE__*/_jsx("div", {
|
|
1282
|
-
className: "column-list",
|
|
1283
|
-
ref: list => {
|
|
1284
|
-
this.list = list;
|
|
1285
|
-
},
|
|
1286
|
-
children: visibilityOrderingList
|
|
1287
|
-
})
|
|
1288
|
-
})]
|
|
1247
|
+
})
|
|
1289
1248
|
});
|
|
1290
1249
|
}
|
|
1291
1250
|
}
|
|
@@ -1357,10 +1316,12 @@ var VisibilityOrderingBuilder = /*#__PURE__*/memo(props => {
|
|
|
1357
1316
|
}
|
|
1358
1317
|
}, [columnHeaderGroups, hiddenColumns, isBatched, movedColumns, onColumnHeaderGroupChanged, onColumnVisibilityChanged, onFrozenColumnsChanged, onMovedColumnsChanged, props.model.frozenColumns, setUndoState, state.columnHeaderGroups, state.frozenColumns, state.hiddenColumns, state.movedColumns]);
|
|
1359
1318
|
var handleColumnHeaderGroupChanged = useCallback(groups => {
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1319
|
+
if (groups !== columnHeaderGroups) {
|
|
1320
|
+
onColumnHeaderGroupChanged(
|
|
1321
|
+
// Updates which model indexes are in the groups if items were added/removed
|
|
1322
|
+
IrisGridUtils.parseColumnHeaderGroups(props.model, groups).groups);
|
|
1323
|
+
}
|
|
1324
|
+
}, [columnHeaderGroups, onColumnHeaderGroupChanged, props.model]);
|
|
1364
1325
|
var handleUndo = useCallback(() => {
|
|
1365
1326
|
isUndoRedoAction.current = true;
|
|
1366
1327
|
undo();
|