@deephaven/iris-grid 0.24.1-hierarchical-table.0 → 0.25.1-beta.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
@@ -1,753 +0,0 @@
1
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
- 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; }
3
- /* eslint-disable jsx-a11y/click-events-have-key-events */
4
- import React, { Component } from 'react';
5
- import classNames from 'classnames';
6
- import { GridUtils } from '@deephaven/grid';
7
- import { TextUtils, assertNotNull } from '@deephaven/utils';
8
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
- import { dhEye, dhEyeSlash, dhSortAlphaDown, dhSortAlphaUp, dhArrowToTop, dhArrowToBottom, vsChevronUp, vsChevronDown, vsGripper } from '@deephaven/icons';
10
- import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';
11
- import memoize from 'memoizee';
12
- import debounce from 'lodash.debounce';
13
- import { Button, SearchInput, Tooltip } from '@deephaven/components';
14
- import Log from '@deephaven/log';
15
- import "./VisibilityOrderingBuilder.css";
16
- var log = Log.module('VisibilityOrderingBuilder');
17
- var DEBOUNCE_SEARCH_COLUMN = 150;
18
- class VisibilityOrderingBuilder extends Component {
19
- constructor(props) {
20
- super(props);
21
- _defineProperty(this, "list", void 0);
22
- _defineProperty(this, "debouncedSearchColumns", debounce(this.searchColumns, DEBOUNCE_SEARCH_COLUMN));
23
- _defineProperty(this, "getFirstMovableIndex", memoize((model, columns) => {
24
- for (var i = 0; i < columns.length; i += 1) {
25
- if (model.isColumnMovable(i)) {
26
- return i;
27
- }
28
- }
29
- return null;
30
- }));
31
- _defineProperty(this, "getLastMovableIndex", memoize((model, columns) => {
32
- for (var i = columns.length - 1; i >= 0; i -= 1) {
33
- if (model.isColumnMovable(i)) {
34
- return i;
35
- }
36
- }
37
- return null;
38
- }));
39
- _defineProperty(this, "renderImmovableItem", memoize(columnName => /*#__PURE__*/React.createElement("div", {
40
- className: "visibility-ordering-list-item immovable",
41
- key: columnName
42
- }, /*#__PURE__*/React.createElement("div", {
43
- className: "column-item"
44
- }, /*#__PURE__*/React.createElement("span", {
45
- className: "column-name"
46
- }, columnName)))));
47
- _defineProperty(this, "renderVisibilityOrderingItem", memoize((columnName, modelIndex, visibleIndex, isHidden, isSelected, isDragging, isDragged, columnsDragged) => /*#__PURE__*/React.createElement(Draggable, {
48
- draggableId: "".concat(modelIndex) // draggableId requires string input
49
- ,
50
- index: visibleIndex,
51
- key: columnName,
52
- disableInteractiveElementBlocking: true
53
- }, provided => /*#__PURE__*/React.createElement("div", _extends({
54
- className: "visibility-ordering-list-item",
55
- ref: provided.innerRef
56
- // eslint-disable-next-line react/jsx-props-no-spreading
57
- }, provided.draggableProps), /*#__PURE__*/React.createElement(Button, {
58
- kind: "ghost",
59
- className: "btn-link-icon visibility",
60
- onMouseDown: event => {
61
- this.handleVisibilityDraggingStart(modelIndex, isHidden ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE, event);
62
- },
63
- onMouseEnter: event => {
64
- this.handleMouseEnter(modelIndex, event);
65
- },
66
- onMouseUp: event => {
67
- this.handleVisibilityDraggingEnd(event);
68
- },
69
- onClick: event => {
70
- this.handleItemClick(modelIndex, event, false);
71
- },
72
- onKeyDown: event => {
73
- // trigger on keyboard enter or space keys
74
- if (event.key === 'Enter' || event.key === ' ') {
75
- this.handleVisibilityKeyDown(modelIndex, isHidden ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE);
76
- event.stopPropagation();
77
- event.preventDefault();
78
- }
79
- },
80
- tooltip: isHidden ? 'Show' : 'Hide'
81
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
82
- icon: isHidden ? dhEyeSlash : dhEye
83
- })), /*#__PURE__*/React.createElement("div", _extends({
84
- role: "menuitem",
85
- tabIndex: 0,
86
- className: classNames('ordering column-item', {
87
- isSelected
88
- }, {
89
- isDragging
90
- }, {
91
- isDragged
92
- }, {
93
- 'two-dragged': columnsDragged === 2
94
- }, {
95
- 'multiple-dragged': columnsDragged != null && columnsDragged > 2
96
- }),
97
- onClick: event => {
98
- this.handleItemClick(modelIndex, event);
99
- }
100
- // eslint-disable-next-line react/jsx-props-no-spreading
101
- }, provided.dragHandleProps), /*#__PURE__*/React.createElement("span", {
102
- className: "column-name"
103
- }, columnName), /*#__PURE__*/React.createElement("div", null, columnsDragged != null && columnsDragged !== 0 && /*#__PURE__*/React.createElement("span", {
104
- className: "number-badge"
105
- }, columnsDragged), /*#__PURE__*/React.createElement(Tooltip, null, "Drag to re-order"), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
106
- icon: vsGripper
107
- })))))));
108
- this.handleSearchInputChange = this.handleSearchInputChange.bind(this);
109
- this.searchColumns = this.searchColumns.bind(this);
110
- this.handleOrderDraggingStart = this.handleOrderDraggingStart.bind(this);
111
- this.handleOrderDraggingEnd = this.handleOrderDraggingEnd.bind(this);
112
- this.state = {
113
- selectedColumns: [],
114
- // model index of selected column(s)
115
- lastSelectedColumns: [],
116
- isDraggingVisibility: false,
117
- visibilityDraggingOption: undefined,
118
- visibilityDraggingStartColumn: null,
119
- isDraggingOrder: false,
120
- orderDraggingColumn: null,
121
- searchFilter: ''
122
- };
123
- this.list = null;
124
- }
125
- componentWillUnmount() {
126
- this.debouncedSearchColumns.cancel();
127
- }
128
- resetVisibilityOrdering() {
129
- var {
130
- model,
131
- onColumnVisibilityChanged,
132
- onMovedColumnsChanged
133
- } = this.props;
134
- var {
135
- columns
136
- } = model;
137
- onColumnVisibilityChanged(columns.map(column => {
138
- var index = model.getColumnIndexByName(column.name);
139
- assertNotNull(index);
140
- return index;
141
- }), VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW);
142
- this.setState({
143
- selectedColumns: [],
144
- lastSelectedColumns: [],
145
- searchFilter: ''
146
- });
147
- onMovedColumnsChanged([]);
148
- }
149
- resetSelection() {
150
- var {
151
- isDraggingOrder
152
- } = this.state;
153
- // don't reset selection if user is dragging column(s)
154
- if (isDraggingOrder) {
155
- return;
156
- }
157
- this.setState({
158
- selectedColumns: [],
159
- lastSelectedColumns: []
160
- });
161
- }
162
- handleSearchInputChange(event) {
163
- var searchFilter = event.target.value;
164
- this.setState({
165
- searchFilter
166
- });
167
- if (!searchFilter) {
168
- this.debouncedSearchColumns.cancel();
169
- this.resetSelection();
170
- return;
171
- }
172
- this.debouncedSearchColumns(searchFilter);
173
- }
174
- searchColumns(searchFilter) {
175
- var {
176
- model,
177
- movedColumns
178
- } = this.props;
179
- var {
180
- columns
181
- } = model;
182
- var columnsMatch = [];
183
- var visibleIndexToFocus = columns.length;
184
- columns.forEach((column, index) => {
185
- var columnName = column.name.toLowerCase();
186
- if (model.isColumnMovable(index) && columnName.includes(searchFilter.toLowerCase())) {
187
- columnsMatch.push(index);
188
- visibleIndexToFocus = Math.min(visibleIndexToFocus, GridUtils.getVisibleIndex(index, movedColumns));
189
- }
190
- });
191
- this.addColumnToSelected(columnsMatch, false);
192
- if (columnsMatch.length > 0) {
193
- var _this$list;
194
- var columnItemToFocus = (_this$list = this.list) === null || _this$list === void 0 ? void 0 : _this$list.querySelectorAll('.column-item')[visibleIndexToFocus];
195
- columnItemToFocus === null || columnItemToFocus === void 0 ? void 0 : columnItemToFocus.scrollIntoView({
196
- block: 'center'
197
- });
198
- }
199
- }
200
- handleVisibilityKeyDown(modelIndex, visibilityOption) {
201
- var {
202
- onColumnVisibilityChanged
203
- } = this.props;
204
- onColumnVisibilityChanged([modelIndex], visibilityOption);
205
- }
206
- handleVisibilityDraggingStart(modelIndex, visibilityOption, event) {
207
- var {
208
- onColumnVisibilityChanged,
209
- movedColumns
210
- } = this.props;
211
- var isModifierKeyDown = GridUtils.isModifierKeyDown(event);
212
- var isShiftKeyDown = event.shiftKey;
213
- if (isModifierKeyDown || isShiftKeyDown) return;
214
- onColumnVisibilityChanged([modelIndex], visibilityOption);
215
- var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);
216
- this.setState({
217
- isDraggingVisibility: true,
218
- visibilityDraggingOption: visibilityOption,
219
- visibilityDraggingStartColumn: visibleIndex
220
- });
221
- this.addColumnToSelected([modelIndex]);
222
- }
223
- handleVisibilityDraggingEnd() {
224
- var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
225
- if (event) event.target.focus();
226
- var {
227
- isDraggingVisibility
228
- } = this.state;
229
- if (isDraggingVisibility) {
230
- this.setState({
231
- isDraggingVisibility: false,
232
- visibilityDraggingOption: undefined,
233
- visibilityDraggingStartColumn: null
234
- });
235
- }
236
- }
237
- handleOrderDraggingStart(start) {
238
- var _this$list2;
239
- document.documentElement.classList.add('drag-pointer-events-none');
240
- var {
241
- selectedColumns
242
- } = this.state;
243
- var {
244
- draggableId,
245
- source: {
246
- index: startIndex
247
- }
248
- } = start;
249
- var orderDraggingColumn = parseInt(draggableId, 10);
250
-
251
- // we want to clear focus from any eye toggles
252
- // however to maintain react-beautiful-dnd keyboard functionality the only valid
253
- // focus target is the drag target itself, so we set it there instead of blurring
254
- ((_this$list2 = this.list) === null || _this$list2 === void 0 ? void 0 : _this$list2.querySelectorAll('.column-item')[startIndex]).focus();
255
- if (!selectedColumns.includes(orderDraggingColumn)) {
256
- this.setState({
257
- isDraggingOrder: true,
258
- orderDraggingColumn,
259
- selectedColumns: [orderDraggingColumn]
260
- });
261
- return;
262
- }
263
- this.setState({
264
- isDraggingOrder: true,
265
- orderDraggingColumn
266
- });
267
- }
268
- handleOrderDraggingEnd(result) {
269
- document.documentElement.classList.remove('drag-pointer-events-none');
270
- var {
271
- movedColumns,
272
- onMovedColumnsChanged
273
- } = this.props;
274
- var {
275
- selectedColumns,
276
- orderDraggingColumn
277
- } = this.state;
278
-
279
- // reset dragging state
280
- this.setState({
281
- isDraggingOrder: false,
282
- orderDraggingColumn: null
283
- });
284
-
285
- // if dropped outside the list, re-focus on the dragged item if necessary
286
- if (!result.destination) {
287
- return;
288
- }
289
- var {
290
- index: destinationIndex
291
- } = result.destination;
292
- var selectedColumnsSortByVisibleIndex = [...selectedColumns].sort((columnA, columnB) => GridUtils.getVisibleIndex(columnA, movedColumns) - GridUtils.getVisibleIndex(columnB, movedColumns));
293
- var newMoves = [...movedColumns];
294
- assertNotNull(orderDraggingColumn);
295
- var draggingVisibleIndex = GridUtils.getVisibleIndex(orderDraggingColumn, newMoves);
296
- var upper = [];
297
- var lower = [];
298
-
299
- // move the dragged column to destination first,
300
- newMoves = GridUtils.moveItem(draggingVisibleIndex, destinationIndex, newMoves);
301
-
302
- // split selected columns into two parts on drop destination index: top & bottom
303
- selectedColumnsSortByVisibleIndex.forEach(column => {
304
- var columnVisibleIndex = GridUtils.getVisibleIndex(column, newMoves);
305
- if (column === orderDraggingColumn) {
306
- return;
307
- }
308
- if (columnVisibleIndex < destinationIndex) {
309
- upper.push(column);
310
- } else {
311
- lower.push(column);
312
- }
313
- });
314
-
315
- // for the top part, move column(s) to the destination index
316
- upper.forEach(column => {
317
- var visibleIndex = GridUtils.getVisibleIndex(column, newMoves);
318
- newMoves = GridUtils.moveItem(visibleIndex, destinationIndex, newMoves);
319
- });
320
-
321
- // for the bottom part, in reverse order, move column(s) to the drop destination index if there's no top column(s) or the dragged column is not dropped upside
322
- // otherwise, move column(s) under the dropping destination index
323
- var bottomDestinationIndex = upper.length > 0 || draggingVisibleIndex > destinationIndex ? destinationIndex + 1 : destinationIndex;
324
- lower.reverse().forEach(column => {
325
- var visibleIndex = GridUtils.getVisibleIndex(column, newMoves);
326
- newMoves = GridUtils.moveItem(visibleIndex, bottomDestinationIndex, newMoves);
327
- });
328
- onMovedColumnsChanged(newMoves);
329
- log.debug('move column order by drag & drop', newMoves);
330
- }
331
- handleMouseEnter(targetModelIndex, event) {
332
- var {
333
- onColumnVisibilityChanged,
334
- movedColumns,
335
- userColumnWidths
336
- } = this.props;
337
- var {
338
- isDraggingVisibility,
339
- visibilityDraggingOption,
340
- visibilityDraggingStartColumn: draggingStartVisibleIndex
341
- } = this.state;
342
- var targetVisibleIndex = GridUtils.getVisibleIndex(targetModelIndex, movedColumns);
343
- var isModifierKeyDown = GridUtils.isModifierKeyDown(event);
344
- var isShiftKeyDown = event.shiftKey;
345
- if (!isDraggingVisibility || isModifierKeyDown || isShiftKeyDown) {
346
- return;
347
- }
348
- event.target.focus();
349
-
350
- // browser can skip mouseEnter / mouseMove event if user moves the mouse too fast
351
- // try to check columns between dragging start index to current index to compensate missing event,
352
- var columnsToChangeVisibility = [targetModelIndex];
353
- assertNotNull(draggingStartVisibleIndex);
354
- var checkDownward = targetVisibleIndex > draggingStartVisibleIndex;
355
- for (var visibleIndexToCheck = draggingStartVisibleIndex; checkDownward ? visibleIndexToCheck < targetVisibleIndex : visibleIndexToCheck > targetVisibleIndex; checkDownward ? visibleIndexToCheck += 1 : visibleIndexToCheck -= 1) {
356
- var modelIndexToCheck = GridUtils.getModelIndex(visibleIndexToCheck, movedColumns);
357
- var isHidden = GridUtils.checkColumnHidden(modelIndexToCheck, userColumnWidths);
358
- if (isHidden && visibilityDraggingOption === VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW) {
359
- columnsToChangeVisibility.push(modelIndexToCheck);
360
- } else if (!isHidden && visibilityDraggingOption === VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE) {
361
- columnsToChangeVisibility.push(modelIndexToCheck);
362
- }
363
- }
364
- this.addColumnToSelected(columnsToChangeVisibility, true);
365
- onColumnVisibilityChanged(columnsToChangeVisibility, visibilityDraggingOption);
366
- }
367
- handleMoveColumns(option) {
368
- var {
369
- movedColumns,
370
- onMovedColumnsChanged,
371
- model
372
- } = this.props;
373
- var {
374
- columns
375
- } = model;
376
- var {
377
- selectedColumns
378
- } = this.state;
379
- if (selectedColumns.length === 0) {
380
- return;
381
- }
382
- var firstMovableIndex = this.getFirstMovableIndex(model, columns);
383
- var lastMovableIndex = this.getLastMovableIndex(model, columns);
384
- if (firstMovableIndex == null || lastMovableIndex == null) {
385
- return;
386
- }
387
-
388
- // for moving up and to the top, move column(s) in visibility index order
389
- // for moving down and to the bottom, move column(s) in reverse visibility index order
390
- var sortedSelectedColumns = [...selectedColumns].sort((columnA, columnB) => option === VisibilityOrderingBuilder.MOVE_OPTIONS.TOP || option === VisibilityOrderingBuilder.MOVE_OPTIONS.UP ? GridUtils.getVisibleIndex(columnA, movedColumns) - GridUtils.getVisibleIndex(columnB, movedColumns) : GridUtils.getVisibleIndex(columnB, movedColumns) - GridUtils.getVisibleIndex(columnA, movedColumns));
391
- var newMoves = [];
392
- var scrollListAfterMove = () => undefined;
393
- switch (option) {
394
- case VisibilityOrderingBuilder.MOVE_OPTIONS.TOP:
395
- sortedSelectedColumns.forEach((columnModelIndex, index) => {
396
- var visibleIndex = GridUtils.getVisibleIndex(columnModelIndex, movedColumns);
397
- newMoves = GridUtils.moveItem(visibleIndex, firstMovableIndex + index, newMoves);
398
- });
399
- scrollListAfterMove = () => {
400
- assertNotNull(this.list);
401
- this.list.scrollTop = 0;
402
- };
403
- break;
404
- case VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM:
405
- sortedSelectedColumns.forEach((columnModelIndex, index) => {
406
- var visibleIndex = GridUtils.getVisibleIndex(columnModelIndex, movedColumns);
407
- newMoves = GridUtils.moveItem(visibleIndex, lastMovableIndex - index, newMoves);
408
- });
409
- scrollListAfterMove = () => {
410
- assertNotNull(this.list);
411
- this.list.scrollTop = this.list.scrollHeight;
412
- };
413
- break;
414
- case VisibilityOrderingBuilder.MOVE_OPTIONS.UP:
415
- if (GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !== firstMovableIndex // check if the first visible column has reached top
416
- ) {
417
- sortedSelectedColumns.forEach(columnModelIndex => {
418
- var visibleIndex = GridUtils.getVisibleIndex(columnModelIndex, movedColumns);
419
- newMoves = GridUtils.moveItem(visibleIndex, visibleIndex - 1, newMoves);
420
- });
421
- }
422
- break;
423
- case VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN:
424
- if (GridUtils.getVisibleIndex(sortedSelectedColumns[0], movedColumns) !== lastMovableIndex // check if the last visible column has reached bottom
425
- ) {
426
- sortedSelectedColumns.forEach(columnModelIndex => {
427
- var visibleIndex = GridUtils.getVisibleIndex(columnModelIndex, movedColumns);
428
- newMoves = GridUtils.moveItem(visibleIndex, visibleIndex + 1, newMoves);
429
- });
430
- }
431
- break;
432
- default:
433
- break;
434
- }
435
- if (newMoves.length > 0) {
436
- onMovedColumnsChanged(movedColumns.concat(newMoves), scrollListAfterMove);
437
- }
438
- }
439
- handleSortColumns(option) {
440
- var {
441
- model,
442
- onMovedColumnsChanged
443
- } = this.props;
444
- var {
445
- columns
446
- } = model;
447
-
448
- // We can't move the immovable columns when sorting, so separate them out first
449
- var movableColumns = [];
450
- var immovableColumns = [];
451
- for (var modelIndex = 0; modelIndex < columns.length; modelIndex += 1) {
452
- if (model.isColumnMovable(modelIndex)) {
453
- movableColumns.push(modelIndex);
454
- } else {
455
- immovableColumns.push(modelIndex);
456
- }
457
- }
458
-
459
- // Sort all the movable columns
460
- var movableColumnsSorted = movableColumns.sort((a, b) => {
461
- var isAscending = option === VisibilityOrderingBuilder.SORTING_OPTIONS.ASC;
462
- var aName = columns[a].name.toUpperCase();
463
- var bName = columns[b].name.toUpperCase();
464
- return TextUtils.sort(aName, bName, isAscending);
465
- });
466
-
467
- // Place all the immovable columns where they need to be
468
- var modelIndexAlphaSorted = [];
469
- for (var i = 0; i < immovableColumns.length; i += 1) {
470
- var _modelIndex = immovableColumns[i];
471
- modelIndexAlphaSorted[_modelIndex] = _modelIndex;
472
- }
473
-
474
- // Then the rest of the sorted columns can be put in the empty spaces
475
- var insertIndex = 0;
476
- for (var _i = 0; _i < movableColumnsSorted.length; _i += 1) {
477
- while (modelIndexAlphaSorted[insertIndex] != null) {
478
- insertIndex += 1;
479
- }
480
- modelIndexAlphaSorted[insertIndex] = movableColumnsSorted[_i];
481
- }
482
- var newMoves = [];
483
- modelIndexAlphaSorted.forEach((modelIndex, index) => {
484
- var visibleIndex = GridUtils.getVisibleIndex(modelIndex, newMoves);
485
- newMoves = GridUtils.moveItem(visibleIndex, index, newMoves);
486
- });
487
- onMovedColumnsChanged(newMoves);
488
- }
489
- handleItemClick(modelIndexClicked, event) {
490
- var removeSelectionOnClick = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
491
- event.stopPropagation();
492
- event.currentTarget.focus();
493
- var {
494
- selectedColumns,
495
- lastSelectedColumns
496
- } = this.state;
497
- var isModifierKeyDown = GridUtils.isModifierKeyDown(event);
498
- var isShiftKeyDown = event.shiftKey;
499
- var isSelected = selectedColumns.includes(modelIndexClicked);
500
- var columnsToBeAdded = [modelIndexClicked];
501
- if (isSelected && isModifierKeyDown) {
502
- this.removeColumnFromSelected(modelIndexClicked);
503
- return;
504
- }
505
- if (isSelected && selectedColumns.length === 1 && removeSelectionOnClick) {
506
- this.removeColumnFromSelected(modelIndexClicked);
507
- return;
508
- }
509
- if (isShiftKeyDown) {
510
- var {
511
- movedColumns
512
- } = this.props;
513
- var lastSelectedColumn = lastSelectedColumns[lastSelectedColumns.length - 1];
514
- var lastSelectedColumnVisibleIndex = GridUtils.getVisibleIndex(lastSelectedColumn, movedColumns);
515
- var visibleIndexToBeSelected = GridUtils.getVisibleIndex(modelIndexClicked, movedColumns);
516
- var checkDownward = visibleIndexToBeSelected > lastSelectedColumnVisibleIndex;
517
- var columnsInBetween = [];
518
- for (var i = lastSelectedColumnVisibleIndex; checkDownward ? i < visibleIndexToBeSelected : i > visibleIndexToBeSelected; checkDownward ? i += 1 : i -= 1) {
519
- columnsInBetween.push(GridUtils.getModelIndex(i, movedColumns));
520
- }
521
- columnsInBetween.forEach(column => {
522
- if (!selectedColumns.includes(column)) {
523
- columnsToBeAdded.push(column);
524
- }
525
- });
526
- }
527
- this.addColumnToSelected(columnsToBeAdded, isModifierKeyDown || isShiftKeyDown);
528
- }
529
- addColumnToSelected(columnsToBeAdded) {
530
- var addToExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
531
- var {
532
- selectedColumns,
533
- lastSelectedColumns
534
- } = this.state;
535
- var newSelectedColumns = addToExisting ? selectedColumns.concat(columnsToBeAdded) : columnsToBeAdded;
536
- var newLastSelectedColumns = addToExisting ? lastSelectedColumns.concat(columnsToBeAdded) : columnsToBeAdded;
537
- this.setState({
538
- selectedColumns: newSelectedColumns,
539
- lastSelectedColumns: newLastSelectedColumns
540
- });
541
- }
542
- removeColumnFromSelected(modelIndex) {
543
- var {
544
- selectedColumns,
545
- lastSelectedColumns
546
- } = this.state;
547
- var newSelectedColumns = [...selectedColumns];
548
- newSelectedColumns.splice(newSelectedColumns.findIndex(selected => selected === modelIndex), 1);
549
- var lastSelectedColumn = lastSelectedColumns[lastSelectedColumns.length - 1];
550
- var newLastSelectedColumns = [...lastSelectedColumns];
551
- if (lastSelectedColumn === modelIndex) {
552
- newLastSelectedColumns.pop();
553
- }
554
- this.setState({
555
- selectedColumns: newSelectedColumns,
556
- lastSelectedColumns: newLastSelectedColumns
557
- });
558
- }
559
- makeVisibilityOrderingList() {
560
- var {
561
- model,
562
- userColumnWidths,
563
- movedColumns
564
- } = this.props;
565
- var {
566
- columns
567
- } = model;
568
- var {
569
- selectedColumns,
570
- isDraggingOrder,
571
- orderDraggingColumn
572
- } = this.state;
573
- var elements = [];
574
- var wasMovable = false;
575
- for (var visibleIndex = 0; visibleIndex < columns.length; visibleIndex += 1) {
576
- var modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);
577
- var column = columns[modelIndex];
578
- var isMovable = model.isColumnMovable(modelIndex);
579
- if (visibleIndex > 0 && isMovable !== wasMovable) {
580
- elements.push( /*#__PURE__*/React.createElement("hr", null));
581
- }
582
- if (isMovable) {
583
- var isHidden = userColumnWidths.get(modelIndex) === 0;
584
- var isSelected = selectedColumns.includes(modelIndex);
585
- var isDragged = orderDraggingColumn === modelIndex;
586
- var columnsDragged = isDraggingOrder && isDragged && selectedColumns.length > 1 ? selectedColumns.length : null;
587
- elements.push(this.renderVisibilityOrderingItem(column.name, modelIndex, visibleIndex, isHidden, isSelected, isDraggingOrder, isDragged, columnsDragged));
588
- } else {
589
- elements.push(this.renderImmovableItem(column.name));
590
- }
591
- wasMovable = isMovable;
592
- }
593
- return elements;
594
- }
595
- render() {
596
- var {
597
- model,
598
- userColumnWidths,
599
- onColumnVisibilityChanged
600
- } = this.props;
601
- var {
602
- selectedColumns,
603
- searchFilter
604
- } = this.state;
605
- var {
606
- columns
607
- } = model;
608
- var noSelection = selectedColumns.length === 0;
609
- var columnsToToggle = noSelection ? columns.map((c, i) => i).filter(i => model.isColumnMovable(i)) : [...selectedColumns];
610
- var toggleToShow = GridUtils.checkAllColumnsHidden(columnsToToggle, userColumnWidths);
611
- var selectedToggleText = toggleToShow ? 'Show Selected' : 'Hide Selected';
612
- var columnItems = this.makeVisibilityOrderingList();
613
- return /*#__PURE__*/React.createElement("div", {
614
- role: "menu",
615
- className: "visibility-ordering-builder",
616
- tabIndex: 0,
617
- onMouseUp: () => {
618
- this.handleVisibilityDraggingEnd();
619
- },
620
- onMouseLeave: () => {
621
- this.handleVisibilityDraggingEnd();
622
- }
623
- }, /*#__PURE__*/React.createElement("div", {
624
- className: "top-menu"
625
- }, /*#__PURE__*/React.createElement(Button, {
626
- kind: "ghost",
627
- onClick: () => {
628
- onColumnVisibilityChanged(columnsToToggle, toggleToShow ? VisibilityOrderingBuilder.VISIBILITY_OPTIONS.SHOW : VisibilityOrderingBuilder.VISIBILITY_OPTIONS.HIDE);
629
- },
630
- icon: toggleToShow ? dhEyeSlash : dhEye,
631
- tooltip: "Toggle column visibility"
632
- }, noSelection ? 'Toggle All' : selectedToggleText), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
633
- kind: "ghost",
634
- className: "text-muted",
635
- onClick: () => {
636
- this.resetVisibilityOrdering();
637
- },
638
- tooltip: "Reset to default"
639
- }, "Reset"), /*#__PURE__*/React.createElement(Button, {
640
- kind: "ghost",
641
- className: "btn-link-icon",
642
- onClick: () => {
643
- this.handleSortColumns(VisibilityOrderingBuilder.SORTING_OPTIONS.ASC);
644
- },
645
- tooltip: "Sort ascending"
646
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
647
- icon: dhSortAlphaDown
648
- })), /*#__PURE__*/React.createElement(Button, {
649
- kind: "ghost",
650
- className: "btn-link-icon",
651
- onClick: () => {
652
- this.handleSortColumns(VisibilityOrderingBuilder.SORTING_OPTIONS.DSC);
653
- },
654
- tooltip: "Sort descending"
655
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
656
- icon: dhSortAlphaUp
657
- })), /*#__PURE__*/React.createElement("span", {
658
- className: "vertical-divider"
659
- }), /*#__PURE__*/React.createElement(Button, {
660
- kind: "ghost",
661
- className: "btn-link-icon",
662
- onClick: () => {
663
- this.handleMoveColumns(VisibilityOrderingBuilder.MOVE_OPTIONS.UP);
664
- },
665
- disabled: noSelection,
666
- tooltip: "Move selection up"
667
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
668
- icon: vsChevronUp
669
- })), /*#__PURE__*/React.createElement(Button, {
670
- kind: "ghost",
671
- className: "btn-link-icon",
672
- onClick: () => {
673
- this.handleMoveColumns(VisibilityOrderingBuilder.MOVE_OPTIONS.DOWN);
674
- },
675
- disabled: noSelection,
676
- tooltip: "Move selection down"
677
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
678
- icon: vsChevronDown
679
- })), /*#__PURE__*/React.createElement(Button, {
680
- kind: "ghost",
681
- className: "btn-link-icon",
682
- onClick: () => {
683
- this.handleMoveColumns(VisibilityOrderingBuilder.MOVE_OPTIONS.TOP);
684
- },
685
- disabled: noSelection,
686
- tooltip: "Move selection to top"
687
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
688
- icon: dhArrowToTop
689
- })), /*#__PURE__*/React.createElement(Button, {
690
- kind: "ghost",
691
- className: "btn-link-icon",
692
- onClick: () => {
693
- this.handleMoveColumns(VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM);
694
- },
695
- disabled: noSelection,
696
- tooltip: "Move selection to bottom"
697
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
698
- icon: dhArrowToBottom
699
- })))), /*#__PURE__*/React.createElement("div", {
700
- className: "top-menu"
701
- }, /*#__PURE__*/React.createElement(SearchInput, {
702
- className: "w-100",
703
- value: searchFilter,
704
- matchCount: searchFilter ? selectedColumns.length : undefined,
705
- onChange: this.handleSearchInputChange
706
- })), /*#__PURE__*/React.createElement(DragDropContext, {
707
- onDragStart: this.handleOrderDraggingStart,
708
- onDragEnd: this.handleOrderDraggingEnd
709
- }, /*#__PURE__*/React.createElement(Droppable, {
710
- droppableId: "droppable-visibility-order-list"
711
- }, (provided, snapshot) =>
712
- /*#__PURE__*/
713
- // eslint-disable-next-line jsx-a11y/interactive-supports-focus
714
- React.createElement("div", _extends({
715
- role: "menu",
716
- className: classNames('visibility-ordering-list', {
717
- isDragging: snapshot.draggingFromThisWith
718
- }),
719
- ref: provided.innerRef
720
- // eslint-disable-next-line react/jsx-props-no-spreading
721
- }, provided.droppableProps), /*#__PURE__*/React.createElement("div", {
722
- className: "column-list",
723
- ref: list => {
724
- this.list = list;
725
- }
726
- }, columnItems, provided.placeholder)))));
727
- }
728
- }
729
- _defineProperty(VisibilityOrderingBuilder, "VISIBILITY_OPTIONS", {
730
- SHOW: 'SHOW',
731
- HIDE: 'HIDE'
732
- });
733
- _defineProperty(VisibilityOrderingBuilder, "SORTING_OPTIONS", {
734
- DSC: 'DSC',
735
- ASC: 'ASC'
736
- });
737
- _defineProperty(VisibilityOrderingBuilder, "MOVE_OPTIONS", {
738
- TOP: 'TOP',
739
- BOTTOM: 'BOTTOM',
740
- UP: 'UP',
741
- DOWN: 'DOWN'
742
- });
743
- _defineProperty(VisibilityOrderingBuilder, "COLUMN_CHANGE_OPTIONS", {
744
- ALL: 'ALL',
745
- SELECTION: 'SELECTION'
746
- });
747
- _defineProperty(VisibilityOrderingBuilder, "defaultProps", {
748
- movedColumns: [],
749
- onColumnVisibilityChanged: () => undefined,
750
- onMovedColumnsChanged: () => undefined
751
- });
752
- export default VisibilityOrderingBuilder;
753
- //# sourceMappingURL=VisibilityOrderingBuilder.js.map