@deephaven/iris-grid 0.55.1-beta.1 → 0.55.1-beta.11

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.
@@ -183,11 +183,25 @@ class VisibilityOrderingBuilder extends PureComponent {
183
183
  this.handleDragStart = this.handleDragStart.bind(this);
184
184
  this.state = {
185
185
  selectedColumns: new Set(),
186
+ queriedColumnIndex: undefined,
187
+ queriedColumnRange: undefined,
188
+ prevQueriedColumns: undefined,
186
189
  lastSelectedColumn: '',
187
190
  searchFilter: ''
188
191
  };
189
192
  this.list = null;
190
193
  }
194
+ componentDidUpdate(prevProps) {
195
+ var {
196
+ movedColumns
197
+ } = this.props;
198
+ if (movedColumns !== prevProps.movedColumns) {
199
+ var {
200
+ searchFilter
201
+ } = this.state;
202
+ this.searchColumns(searchFilter, false);
203
+ }
204
+ }
191
205
  componentWillUnmount() {
192
206
  this.debouncedSearchColumns.cancel();
193
207
  }
@@ -200,6 +214,9 @@ class VisibilityOrderingBuilder extends PureComponent {
200
214
  } = this.props;
201
215
  this.setState({
202
216
  selectedColumns: new Set(),
217
+ queriedColumnIndex: undefined,
218
+ queriedColumnRange: undefined,
219
+ prevQueriedColumns: undefined,
203
220
  lastSelectedColumn: '',
204
221
  searchFilter: ''
205
222
  });
@@ -226,6 +243,7 @@ class VisibilityOrderingBuilder extends PureComponent {
226
243
  this.debouncedSearchColumns(searchFilter);
227
244
  }
228
245
  searchColumns(searchFilter) {
246
+ var updateQuery = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
229
247
  var flattenedItems = flattenTree(this.getTreeItems());
230
248
  var itemsMatch = flattenedItems.filter(_ref6 => {
231
249
  var _data$group$isNew, _data$group;
@@ -235,26 +253,140 @@ class VisibilityOrderingBuilder extends PureComponent {
235
253
  } = _ref6;
236
254
  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());
237
255
  });
238
- var columnsMatch = itemsMatch.map(_ref7 => {
256
+ var columnsMatchMap = itemsMatch.reduce((acc, _ref7) => {
239
257
  var {
240
258
  id
241
259
  } = _ref7;
242
- return id;
243
- });
244
- var visibleIndexToFocus = flattenedItems.findIndex(_ref8 => {
260
+ var originalIndex = flattenedItems.findIndex(item => item.id === id);
261
+ return _objectSpread(_objectSpread({}, acc), {}, {
262
+ [originalIndex]: id
263
+ });
264
+ }, {});
265
+ if (!updateQuery) {
266
+ this.setState({
267
+ prevQueriedColumns: columnsMatchMap
268
+ });
269
+ return;
270
+ }
271
+ var columnIds = itemsMatch.map(_ref8 => {
245
272
  var {
246
273
  id
247
274
  } = _ref8;
248
- return id.toLowerCase().includes(searchFilter.toLowerCase());
275
+ return id;
249
276
  });
250
- this.addColumnToSelected(columnsMatch, false);
251
- if (columnsMatch.length > 0) {
277
+ this.addColumnToSelected(columnIds, false);
278
+ if (columnIds.length > 0) {
252
279
  var _this$list;
280
+ var visibleIndexToFocus = flattenedItems.findIndex(_ref9 => {
281
+ var {
282
+ id
283
+ } = _ref9;
284
+ return id.toLowerCase().includes(searchFilter.toLowerCase());
285
+ });
253
286
  var columnItemToFocus = (_this$list = this.list) === null || _this$list === void 0 ? void 0 : _this$list.querySelectorAll('.item-wrapper')[visibleIndexToFocus];
254
287
  columnItemToFocus === null || columnItemToFocus === void 0 ? void 0 : columnItemToFocus.scrollIntoView({
255
288
  block: 'center'
256
289
  });
257
290
  }
291
+ this.setState({
292
+ prevQueriedColumns: columnsMatchMap,
293
+ queriedColumnIndex: undefined
294
+ });
295
+ }
296
+
297
+ /**
298
+ * Change the selected column to the next or previous column that matches the search criteria.
299
+ *
300
+ * queriedColumnRange stores the closes options in the case that the user clicks on an option that didn't fulfill the search criteria.
301
+ * On click of the forward/back button, queriedColumnIndex is updated to either the upper or lower index in queriedColumnRange
302
+ *
303
+ * queriedColumnIndex is the current index within prevQueriedColumns. Not their actual index in the tree.
304
+ *
305
+ * @param direction The direction to move the selection
306
+ */
307
+
308
+ changeSelectedColumn(direction) {
309
+ var _this$list2;
310
+ var {
311
+ queriedColumnIndex,
312
+ queriedColumnRange,
313
+ prevQueriedColumns
314
+ } = this.state;
315
+ var newQueriedColumnIndex = queriedColumnIndex;
316
+ if (prevQueriedColumns === undefined) return;
317
+ var queriedColumnsLength = Object.keys(prevQueriedColumns).length;
318
+ if (direction === 'forward') {
319
+ if (queriedColumnRange !== undefined) {
320
+ newQueriedColumnIndex = queriedColumnRange.nextIndex;
321
+ } else if (newQueriedColumnIndex === undefined || newQueriedColumnIndex >= queriedColumnsLength - 1) {
322
+ newQueriedColumnIndex = 0;
323
+ } else {
324
+ newQueriedColumnIndex += 1;
325
+ }
326
+ } else if (direction === 'back') {
327
+ if (queriedColumnRange !== undefined) {
328
+ newQueriedColumnIndex = queriedColumnRange.prevIndex;
329
+ } else if (newQueriedColumnIndex === undefined || newQueriedColumnIndex <= 0) {
330
+ newQueriedColumnIndex = queriedColumnsLength - 1;
331
+ } else {
332
+ newQueriedColumnIndex -= 1;
333
+ }
334
+ }
335
+ this.addColumnToSelected([Object.values(prevQueriedColumns)[newQueriedColumnIndex]], false);
336
+ var actualColumnIndex = parseInt(Object.keys(prevQueriedColumns)[newQueriedColumnIndex], 10);
337
+ var columnItemToFocus = (_this$list2 = this.list) === null || _this$list2 === void 0 ? void 0 : _this$list2.querySelectorAll('.item-wrapper')[actualColumnIndex];
338
+ columnItemToFocus === null || columnItemToFocus === void 0 ? void 0 : columnItemToFocus.scrollIntoView({
339
+ block: 'center'
340
+ });
341
+ this.setState({
342
+ queriedColumnIndex: newQueriedColumnIndex,
343
+ queriedColumnRange: undefined
344
+ });
345
+ }
346
+
347
+ /**
348
+ * Handles changing the queriedColumnIndex on user click.
349
+ *
350
+ * If the option clicked matches the search criteria the index is updated immediately.
351
+ *
352
+ * If the option clicked doesn't meet the search criteria, the two closest options that fulfill the criteria are stored.
353
+ * On click of the forward/back button the selection will change to one of those options. (Think of VS Code search functionality)
354
+ *
355
+ * @param name the name of the clicked column
356
+ */
357
+ adjustQueriedIndex(name) {
358
+ var {
359
+ prevQueriedColumns
360
+ } = this.state;
361
+ if (prevQueriedColumns === undefined) return;
362
+ if (name in Object.values(prevQueriedColumns)) {
363
+ var newQueriedColumnIndex = Object.values(prevQueriedColumns).indexOf(name);
364
+ this.setState({
365
+ queriedColumnIndex: newQueriedColumnIndex,
366
+ queriedColumnRange: undefined
367
+ });
368
+ return;
369
+ }
370
+ var flattenedItems = flattenTree(this.getTreeItems());
371
+ var clickedIndex = flattenedItems.findIndex(item => item.id === name);
372
+ var queriedColumnsIndexes = Object.keys(prevQueriedColumns).map(idx => parseInt(idx, 10));
373
+ var prevIndex = queriedColumnsIndexes.length - 1;
374
+ var nextIndex = 0;
375
+ for (var i = 0; i < queriedColumnsIndexes.length; i += 1) {
376
+ var index = queriedColumnsIndexes[i];
377
+ if (index < clickedIndex) {
378
+ prevIndex = i;
379
+ } else if (index > clickedIndex) {
380
+ nextIndex = i;
381
+ break;
382
+ }
383
+ }
384
+ this.setState({
385
+ queriedColumnRange: {
386
+ prevIndex,
387
+ nextIndex
388
+ }
389
+ });
258
390
  }
259
391
 
260
392
  /**
@@ -411,16 +543,16 @@ class VisibilityOrderingBuilder extends PureComponent {
411
543
  var scrollListAfterMove;
412
544
  if (option === VisibilityOrderingBuilder.MOVE_OPTIONS.TOP) {
413
545
  scrollListAfterMove = () => {
414
- var _this$list2, _this$list2$parentEle;
415
- (_this$list2 = this.list) === null || _this$list2 === void 0 ? void 0 : (_this$list2$parentEle = _this$list2.parentElement) === null || _this$list2$parentEle === void 0 ? void 0 : _this$list2$parentEle.scroll({
546
+ var _this$list3, _this$list3$parentEle;
547
+ (_this$list3 = this.list) === null || _this$list3 === void 0 ? void 0 : (_this$list3$parentEle = _this$list3.parentElement) === null || _this$list3$parentEle === void 0 ? void 0 : _this$list3$parentEle.scroll({
416
548
  top: 0
417
549
  });
418
550
  };
419
551
  }
420
552
  if (option === VisibilityOrderingBuilder.MOVE_OPTIONS.BOTTOM) {
421
553
  scrollListAfterMove = () => {
422
- var _this$list3, _this$list3$parentEle;
423
- (_this$list3 = this.list) === null || _this$list3 === void 0 ? void 0 : (_this$list3$parentEle = _this$list3.parentElement) === null || _this$list3$parentEle === void 0 ? void 0 : _this$list3$parentEle.scroll({
554
+ var _this$list4, _this$list4$parentEle;
555
+ (_this$list4 = this.list) === null || _this$list4 === void 0 ? void 0 : (_this$list4$parentEle = _this$list4.parentElement) === null || _this$list4$parentEle === void 0 ? void 0 : _this$list4$parentEle.scroll({
424
556
  top: this.list.parentElement.scrollHeight
425
557
  });
426
558
  };
@@ -504,10 +636,10 @@ class VisibilityOrderingBuilder extends PureComponent {
504
636
  }
505
637
  var movableItems = flattenTree(this.getTreeItems());
506
638
  if (isSelected && !isShiftKeyDown && lastSelectedColumn === name) {
507
- var selectedItem = movableItems.find(_ref9 => {
639
+ var selectedItem = movableItems.find(_ref10 => {
508
640
  var {
509
641
  id
510
- } = _ref9;
642
+ } = _ref10;
511
643
  return id === name;
512
644
  });
513
645
  assertNotNull(selectedItem);
@@ -524,6 +656,7 @@ class VisibilityOrderingBuilder extends PureComponent {
524
656
  columnsToBeAdded.push(...movableItems.slice(Math.min(lastSelectedIndex, selectedIndex), Math.max(lastSelectedIndex, selectedIndex) + 1).map(item => item.id));
525
657
  }
526
658
  this.addColumnToSelected(columnsToBeAdded, isModifierKeyDown || isShiftKeyDown);
659
+ this.adjustQueriedIndex(name);
527
660
  this.setState({
528
661
  lastSelectedColumn: name
529
662
  });
@@ -547,11 +680,11 @@ class VisibilityOrderingBuilder extends PureComponent {
547
680
  // The treeItems array will always be parent -> child in the order
548
681
  // We don't need to recursively iterate because of this
549
682
  // The parent will always be added before any children for nested selections
550
- flattenedItems.forEach(_ref10 => {
683
+ flattenedItems.forEach(_ref11 => {
551
684
  var {
552
685
  id,
553
686
  children
554
- } = _ref10;
687
+ } = _ref11;
555
688
  if (newSelectedColumns.has(id)) {
556
689
  children.forEach(child => newSelectedColumns.add(child.id));
557
690
  }
@@ -576,17 +709,17 @@ class VisibilityOrderingBuilder extends PureComponent {
576
709
  selectedColumns
577
710
  } = this.state;
578
711
  var flattenedItems = flattenTree(this.getTreeItems());
579
- var item = flattenedItems.find(_ref11 => {
712
+ var item = flattenedItems.find(_ref12 => {
580
713
  var {
581
714
  id
582
- } = _ref11;
715
+ } = _ref12;
583
716
  return id === name;
584
717
  });
585
718
  assertNotNull(item);
586
- var parentItem = flattenedItems.find(_ref12 => {
719
+ var parentItem = flattenedItems.find(_ref13 => {
587
720
  var {
588
721
  id
589
- } = _ref12;
722
+ } = _ref13;
590
723
  return id === item.parentId;
591
724
  });
592
725
 
@@ -597,10 +730,10 @@ class VisibilityOrderingBuilder extends PureComponent {
597
730
  var _loop2 = function _loop2() {
598
731
  selectedColumns.delete(parentItem.id);
599
732
  var newParentId = parentItem.parentId;
600
- parentItem = flattenedItems.find(_ref13 => {
733
+ parentItem = flattenedItems.find(_ref14 => {
601
734
  var {
602
735
  id
603
- } = _ref13;
736
+ } = _ref14;
604
737
  return id === newParentId;
605
738
  });
606
739
  };
@@ -649,10 +782,10 @@ class VisibilityOrderingBuilder extends PureComponent {
649
782
  } = this.props;
650
783
  var newGroups = [...columnHeaderGroups];
651
784
  var oldName = group.name;
652
- var groupIndex = newGroups.findIndex(_ref14 => {
785
+ var groupIndex = newGroups.findIndex(_ref15 => {
653
786
  var {
654
787
  name
655
- } = _ref14;
788
+ } = _ref15;
656
789
  return name === oldName;
657
790
  });
658
791
  var oldGroup = newGroups[groupIndex];
@@ -661,10 +794,10 @@ class VisibilityOrderingBuilder extends PureComponent {
661
794
  var newGroup = new ColumnHeaderGroup(oldGroup);
662
795
  newGroup.name = newName;
663
796
  newGroups.splice(groupIndex, 1, newGroup);
664
- var parentIndex = newGroups.findIndex(_ref15 => {
797
+ var parentIndex = newGroups.findIndex(_ref16 => {
665
798
  var {
666
799
  name
667
- } = _ref15;
800
+ } = _ref16;
668
801
  return name === newGroup.parent;
669
802
  });
670
803
  if (parentIndex >= 0) {
@@ -709,10 +842,10 @@ class VisibilityOrderingBuilder extends PureComponent {
709
842
  var name = "".concat(ColumnHeaderGroup.NEW_GROUP_PREFIX, "-").concat(Date.now());
710
843
  var newGroup = new ColumnHeaderGroup({
711
844
  name,
712
- children: selectedItems.map(_ref16 => {
845
+ children: selectedItems.map(_ref17 => {
713
846
  var {
714
847
  id
715
- } = _ref16;
848
+ } = _ref17;
716
849
  return id;
717
850
  }),
718
851
  depth: 0,
@@ -720,8 +853,8 @@ class VisibilityOrderingBuilder extends PureComponent {
720
853
  });
721
854
 
722
855
  onMovedColumnsChanged(movedColumns.concat(newMoves), () => {
723
- var _this$list4, _this$list4$parentEle;
724
- (_this$list4 = this.list) === null || _this$list4 === void 0 ? void 0 : (_this$list4$parentEle = _this$list4.parentElement) === null || _this$list4$parentEle === void 0 ? void 0 : _this$list4$parentEle.scroll({
856
+ var _this$list5, _this$list5$parentEle;
857
+ (_this$list5 = this.list) === null || _this$list5 === void 0 ? void 0 : (_this$list5$parentEle = _this$list5.parentElement) === null || _this$list5$parentEle === void 0 ? void 0 : _this$list5$parentEle.scroll({
725
858
  top: 0
726
859
  });
727
860
  });
@@ -745,15 +878,15 @@ class VisibilityOrderingBuilder extends PureComponent {
745
878
  if (!DbNameValidator.isValidColumnName(groupName)) {
746
879
  return 'Invalid name';
747
880
  }
748
- if (columns.some(_ref17 => {
881
+ if (columns.some(_ref18 => {
749
882
  var {
750
883
  name
751
- } = _ref17;
884
+ } = _ref18;
752
885
  return name === groupName;
753
- }) || columnHeaderGroups.some(_ref18 => {
886
+ }) || columnHeaderGroups.some(_ref19 => {
754
887
  var {
755
888
  name
756
- } = _ref18;
889
+ } = _ref19;
757
890
  return name === groupName;
758
891
  })) {
759
892
  return 'Duplicate name';
@@ -809,11 +942,11 @@ class VisibilityOrderingBuilder extends PureComponent {
809
942
  selectedColumns
810
943
  } = this.state;
811
944
  var treeItems = flattenTree(this.getTreeItems());
812
- return treeItems.filter(_ref19 => {
945
+ return treeItems.filter(_ref20 => {
813
946
  var {
814
947
  id,
815
948
  parentId
816
- } = _ref19;
949
+ } = _ref20;
817
950
  return (
818
951
  // All items whose parents are not selected
819
952
  selectedColumns.has(id) && !selectedColumns.has(parentId !== null && parentId !== void 0 ? parentId : '')
@@ -828,7 +961,9 @@ class VisibilityOrderingBuilder extends PureComponent {
828
961
  } = this.props;
829
962
  var {
830
963
  selectedColumns,
831
- searchFilter
964
+ searchFilter,
965
+ prevQueriedColumns,
966
+ queriedColumnIndex
832
967
  } = this.state;
833
968
  var hasSelection = selectedColumns.size > 0;
834
969
  var treeItems = this.getTreeItems();
@@ -841,6 +976,11 @@ class VisibilityOrderingBuilder extends PureComponent {
841
976
  var allToggleText = areSomeVisible ? 'Hide All' : 'Show All';
842
977
  var selectedToggleText = areSomeVisible ? 'Hide Selected' : 'Show Selected';
843
978
  var visibilityOrderingList = this.makeVisibilityOrderingList(model.columns, treeItems);
979
+ var cursor = {
980
+ index: queriedColumnIndex,
981
+ next: direction => this.changeSelectedColumn(direction)
982
+ };
983
+ var matchCount = Object.keys(prevQueriedColumns !== null && prevQueriedColumns !== void 0 ? prevQueriedColumns : {}).length;
844
984
  return /*#__PURE__*/_jsxs("div", {
845
985
  role: "menu",
846
986
  className: "visibility-ordering-builder",
@@ -859,8 +999,9 @@ class VisibilityOrderingBuilder extends PureComponent {
859
999
  }), /*#__PURE__*/_jsx(SearchInput, {
860
1000
  className: "visibility-search",
861
1001
  value: searchFilter,
862
- matchCount: searchFilter ? selectedColumns.size : undefined,
863
- onChange: this.handleSearchInputChange
1002
+ matchCount: searchFilter ? matchCount : undefined,
1003
+ onChange: this.handleSearchInputChange,
1004
+ cursor: cursor
864
1005
  })]
865
1006
  }), /*#__PURE__*/_jsxs("div", {
866
1007
  className: "top-menu",