@deephaven/iris-grid 0.15.2-beta.0 → 0.15.2-beta.6

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.
@@ -27,33 +27,41 @@ var CONTEXT_MENU_DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.SSSSSSSSS';
27
27
 
28
28
  class IrisGridContextMenuHandler extends GridMouseHandler {
29
29
  /**
30
- * Get filter condition for quick filter with existed column filter and the new filter to be applied,
31
- * returns new filter if filters are not additive.
32
- * if filters are additive, returns filter conditions combined with 'and'.
30
+ * Get filter condition for quick filter and combines with a new filter using the operator specified,
31
+ * returns new filter if no operator supplied.
33
32
  * @param columnFilter
34
33
  * @param newColumnFilter
35
- * @param additive
34
+ * @param operator
36
35
  */
37
- static getQuickFilterCondition(columnFilter, newColumnFilter) {
38
- var additive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
36
+ static getQuickFilterCondition(columnFilter, newColumnFilter, operator) {
37
+ if (columnFilter && operator === '&&') {
38
+ return columnFilter.and(newColumnFilter);
39
+ }
39
40
 
40
- if (!additive || !columnFilter) {
41
- return newColumnFilter;
41
+ if (columnFilter && operator === '||') {
42
+ return columnFilter.or(newColumnFilter);
42
43
  }
43
44
 
44
- return columnFilter.and(newColumnFilter);
45
+ return newColumnFilter;
45
46
  }
46
47
  /**
47
- * combines filter text with '&&' if filters are additive
48
+ * combines filter text with operator if declared
48
49
  * @param filterText
49
50
  * @param newFilterText
50
- * @param additive
51
+ * @param operator
52
+ */
53
+
54
+
55
+ static getQuickFilterText(filterText, newFilterText, operator) {
56
+ return operator && filterText ? "".concat(filterText, " ").concat(operator, " ").concat(newFilterText) : newFilterText;
57
+ }
58
+ /**
59
+ * Converts operator to text string,
51
60
  */
52
61
 
53
62
 
54
- static getQuickFilterText(filterText, newFilterText) {
55
- var additive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
56
- return additive && filterText ? "".concat(filterText, " && ").concat(newFilterText) : newFilterText;
63
+ static getOperatorAsText(operator) {
64
+ return operator === '&&' ? 'And' : 'Or';
57
65
  }
58
66
  /**
59
67
  * Gets an equality filter for the provided numeric value
@@ -196,7 +204,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
196
204
  action: () => {
197
205
  this.irisGrid.clearAllFilters();
198
206
  },
199
- disabled: !(quickFilters.size > 0 || advancedFilters.size > 0 || searchFilter !== null)
207
+ disabled: !(quickFilters.size > 0 || advancedFilters.size > 0 || searchFilter != null)
200
208
  });
201
209
  actions.push({
202
210
  title: 'Sort by',
@@ -319,131 +327,121 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
319
327
  showTimeZone: settings === null || settings === void 0 ? void 0 : settings.showTimeZone,
320
328
  showTSeparator: settings === null || settings === void 0 ? void 0 : settings.showTSeparator,
321
329
  defaultDateTimeFormatString: CONTEXT_MENU_DATE_FORMAT
322
- }); // grid data area context menu options
323
-
324
- if (column != null && rowIndex != null) {
325
- if (model.isFilterable(modelColumn)) {
326
- // cell data area contextmenu options
327
- var filterMenu = {
328
- title: 'Filter By Value',
329
- icon: vsRemove,
330
- iconColor: filterIconColor,
331
- group: IrisGridContextMenuHandler.GROUP_FILTER,
332
- order: 10,
333
- actions: []
334
- };
335
- var andFilterMenu = {
336
- title: 'Add Filter By Value',
337
- icon: vsRemove,
338
- iconColor: filterIconColor,
339
- group: IrisGridContextMenuHandler.GROUP_FILTER,
340
- order: 20,
341
- actions: [],
342
- disabled: !quickFilters.get(modelColumn)
343
- };
344
- var gotoRow = {
345
- title: 'Go to',
346
- shortcut: SHORTCUTS.TABLE.GOTO_ROW,
347
- group: IrisGridContextMenuHandler.GROUP_GOTO,
348
- order: 10,
349
- action: () => this.irisGrid.toggleGotoRow("".concat(rowIndex + 1))
350
- };
351
-
352
- if (value != null) {
353
- // Chars get treated like numbers in terms of which filters are available
354
- if (TableUtils.isNumberType(column.type) || TableUtils.isCharType(column.type)) {
355
- assertNotNull(modelColumn); // We want to show the full unformatted value if it's a number, so user knows which value they are matching
356
- // If it's a Char we just show the char
357
-
358
- var numberValueText = TableUtils.isCharType(column.type) ? String.fromCharCode(value) : "".concat(value);
359
- filterMenu.actions = this.numberFilterActions(column, numberValueText, value, quickFilters.get(modelColumn));
360
- andFilterMenu.actions = this.numberFilterActions(column, numberValueText, value, quickFilters.get(modelColumn), true);
361
- } else if (TableUtils.isBooleanType(column.type)) {
362
- filterMenu.actions = this.booleanFilterActions(column, valueText);
363
- andFilterMenu.actions = this.booleanFilterActions(column, valueText, quickFilters.get(modelColumn), true);
364
- } else if (TableUtils.isDateType(column.type)) {
365
- var dateValueText = dateFilterFormatter.format(value);
366
- var previewValue = previewFilterFormatter.format(value);
367
- filterMenu.actions = this.dateFilterActions(column, dateValueText, previewValue, value);
368
- andFilterMenu.actions = this.dateFilterActions(column, dateValueText, previewValue, value, quickFilters.get(modelColumn), true);
369
- } else {
370
- filterMenu.actions = this.stringFilterActions(column, valueText, value);
371
- andFilterMenu.actions = this.stringFilterActions(column, valueText, value, quickFilters.get(modelColumn), true);
372
- }
373
- } else {
374
- filterMenu.actions = this.nullFilterActions(column);
375
- andFilterMenu.actions = this.nullFilterActions(column, quickFilters.get(modelColumn), true);
376
- }
330
+ });
331
+ if (column == null || rowIndex == null) return actions; // grid data area context menu options
377
332
 
378
- if (filterMenu.actions != null && filterMenu.actions.length > 0) {
379
- actions.push(filterMenu);
380
- }
333
+ if (model.isFilterable(modelColumn)) {
334
+ // cell data area contextmenu options
335
+ var filterMenu = {
336
+ title: 'Filter By Value',
337
+ icon: vsRemove,
338
+ iconColor: filterIconColor,
339
+ group: IrisGridContextMenuHandler.GROUP_FILTER,
340
+ order: 10,
341
+ actions: []
342
+ };
381
343
 
382
- if (andFilterMenu.actions != null && andFilterMenu.actions.length > 0) {
383
- actions.push(andFilterMenu);
344
+ if (value == null) {
345
+ if (quickFilters.get(modelColumn)) {
346
+ filterMenu.actions.push({
347
+ title: 'And',
348
+ actions: this.nullFilterActions(column, quickFilters.get(modelColumn), '&&'),
349
+ order: 2,
350
+ group: ContextActions.groups.high
351
+ });
384
352
  }
385
353
 
386
- actions.push(gotoRow);
387
- }
354
+ filterMenu.actions.push(...this.nullFilterActions(column));
355
+ } else if (TableUtils.isBooleanType(column.type)) {
356
+ // boolean should have OR condition, and handles it's own null menu options
357
+ if (quickFilters.get(modelColumn)) {
358
+ filterMenu.actions.push({
359
+ title: 'Or',
360
+ actions: this.booleanFilterActions(column, valueText, quickFilters.get(modelColumn), '||'),
361
+ order: 2,
362
+ group: ContextActions.groups.high
363
+ });
364
+ }
388
365
 
389
- if (canCopy) {
390
- actions.push({
391
- title: 'Copy Cell',
392
- group: IrisGridContextMenuHandler.GROUP_COPY,
393
- order: 10,
394
- action: () => {
395
- irisGrid.copyCell(columnIndex, rowIndex);
396
- }
397
- });
398
- actions.push({
399
- title: 'Copy Cell Unformatted',
400
- group: IrisGridContextMenuHandler.GROUP_COPY,
401
- order: 20,
402
- action: () => {
403
- irisGrid.copyCell(columnIndex, rowIndex, true);
404
- }
405
- });
406
- }
407
- } // data area, including blank space context menu options
366
+ filterMenu.actions.push(...this.booleanFilterActions(column, valueText));
367
+ } else if (TableUtils.isNumberType(column.type) || TableUtils.isCharType(column.type)) {
368
+ // Chars get treated like numbers in terms of which filters are available
369
+ assertNotNull(modelColumn); // We want to show the full unformatted value if it's a number, so user knows which value they are matching
370
+ // If it's a Char we just show the char
371
+
372
+ var numberValueText = TableUtils.isCharType(column.type) ? String.fromCharCode(value) : "".concat(value);
373
+
374
+ if (quickFilters.get(modelColumn)) {
375
+ filterMenu.actions.push({
376
+ title: 'And',
377
+ actions: this.numberFilterActions(column, numberValueText, value, quickFilters.get(modelColumn), '&&'),
378
+ order: 2,
379
+ group: ContextActions.groups.high
380
+ });
381
+ }
408
382
 
383
+ filterMenu.actions.push(...this.numberFilterActions(column, numberValueText, value, quickFilters.get(modelColumn)));
384
+ } else if (TableUtils.isDateType(column.type)) {
385
+ var dateValueText = dateFilterFormatter.format(value);
386
+ var previewValue = previewFilterFormatter.format(value);
387
+
388
+ if (quickFilters.get(modelColumn)) {
389
+ filterMenu.actions.push({
390
+ title: 'And',
391
+ actions: this.dateFilterActions(column, dateValueText, previewValue, value, quickFilters.get(modelColumn), '&&'),
392
+ order: 2,
393
+ group: ContextActions.groups.high
394
+ });
395
+ }
409
396
 
410
- var {
411
- selectedRanges
412
- } = grid.state;
397
+ filterMenu.actions.push(...this.dateFilterActions(column, dateValueText, previewValue, value, quickFilters.get(modelColumn)));
398
+ } else {
399
+ if (quickFilters.get(modelColumn)) {
400
+ filterMenu.actions.push({
401
+ title: 'And',
402
+ actions: this.stringFilterActions(column, valueText, value, quickFilters.get(modelColumn), '&&'),
403
+ order: 2,
404
+ group: ContextActions.groups.high
405
+ });
406
+ }
413
407
 
414
- if (selectedRanges.length > 0) {
415
- if (canCopy) {
416
- actions.push({
417
- title: 'Copy Selection',
418
- shortcut: GLOBAL_SHORTCUTS.COPY,
419
- group: IrisGridContextMenuHandler.GROUP_COPY,
420
- order: 30,
421
- action: () => {
422
- irisGrid.copyRanges(selectedRanges);
423
- }
424
- });
425
- actions.push({
426
- title: 'Copy Selection w/ Headers',
427
- group: IrisGridContextMenuHandler.GROUP_COPY,
428
- order: 40,
429
- action: () => {
430
- irisGrid.copyRanges(selectedRanges, true);
431
- }
432
- });
408
+ filterMenu.actions.push(...this.stringFilterActions(column, valueText, value));
433
409
  }
434
410
 
435
- if (isEditableGridModel(model) && model.isEditable) {
436
- actions.push({
437
- title: 'Delete Selected Rows',
438
- group: IrisGridContextMenuHandler.GROUP_EDIT,
439
- order: 50,
440
- action: () => {
441
- this.irisGrid.deleteRanges(selectedRanges);
442
- }
443
- });
411
+ if (filterMenu.actions != null && filterMenu.actions.length > 0) {
412
+ actions.push(filterMenu);
444
413
  }
445
414
  }
446
415
 
416
+ var gotoRow = {
417
+ title: 'Go to',
418
+ iconColor: filterIconColor,
419
+ shortcut: SHORTCUTS.TABLE.GOTO_ROW,
420
+ group: IrisGridContextMenuHandler.GROUP_GOTO,
421
+ order: 10,
422
+ action: () => this.irisGrid.toggleGotoRow("".concat(rowIndex + 1))
423
+ };
424
+ actions.push(gotoRow);
425
+
426
+ if (canCopy) {
427
+ actions.push({
428
+ title: 'Copy Cell',
429
+ group: IrisGridContextMenuHandler.GROUP_COPY,
430
+ order: 10,
431
+ action: () => {
432
+ irisGrid.copyCell(columnIndex, rowIndex);
433
+ }
434
+ });
435
+ actions.push({
436
+ title: 'Copy Cell Unformatted',
437
+ group: IrisGridContextMenuHandler.GROUP_COPY,
438
+ order: 20,
439
+ action: () => {
440
+ irisGrid.copyCell(columnIndex, rowIndex, true);
441
+ }
442
+ });
443
+ }
444
+
447
445
  return actions;
448
446
  }
449
447
 
@@ -459,7 +457,8 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
459
457
  var modelColumn = irisGrid.getModelColumn(columnIndex);
460
458
  var modelRow = irisGrid.getModelRow(rowIndex);
461
459
  var {
462
- model
460
+ model,
461
+ canCopy
463
462
  } = irisGrid.props;
464
463
  var {
465
464
  columns
@@ -468,7 +467,8 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
468
467
  metrics,
469
468
  isFilterBarShown,
470
469
  quickFilters,
471
- advancedFilters
470
+ advancedFilters,
471
+ selectedRanges
472
472
  } = irisGrid.state;
473
473
  assertNotNull(metrics);
474
474
  var {
@@ -497,30 +497,63 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
497
497
  modelColumn
498
498
  }));
499
499
  }
500
+ }
500
501
 
501
- if (modelColumn != null && column != null && model.isFilterable(modelColumn)) {
502
+ if (modelColumn != null && model.isFilterable(modelColumn)) {
503
+ // Clear column filter should still be available after last row
504
+ // And should be available in both header and body context menus
505
+ actions.push({
506
+ title: 'Clear Column Filter',
507
+ group: IrisGridContextMenuHandler.GROUP_FILTER,
508
+ order: 30,
509
+ action: () => {
510
+ this.irisGrid.removeColumnFilter(modelColumn);
511
+ },
512
+ disabled: !(quickFilters.has(modelColumn) || advancedFilters.has(modelColumn))
513
+ });
514
+ }
515
+
516
+ if (isFilterBarShown ? y <= gridY : y <= columnHeaderHeight) {
517
+ // grid header context menu options
518
+ if (modelColumn != null) {
519
+ actions.push(...this.getHeaderActions(modelColumn, gridPoint));
520
+ }
521
+ } else {
522
+ // grid body context menu options
523
+ if (modelColumn != null && modelRow != null) {
524
+ actions.push(...this.getCellActions(modelColumn, grid, gridPoint));
525
+ } // blank space context menu options
526
+
527
+
528
+ if (canCopy && selectedRanges.length > 0) {
502
529
  actions.push({
503
- title: 'Clear Column Filter',
504
- group: IrisGridContextMenuHandler.GROUP_FILTER,
530
+ title: 'Copy Selection',
531
+ shortcut: GLOBAL_SHORTCUTS.COPY,
532
+ group: IrisGridContextMenuHandler.GROUP_COPY,
505
533
  order: 30,
506
534
  action: () => {
507
- this.irisGrid.removeColumnFilter(modelColumn);
508
- },
509
- disabled: !(quickFilters.has(modelColumn) || advancedFilters.has(modelColumn))
535
+ irisGrid.copyRanges(selectedRanges);
536
+ }
537
+ });
538
+ actions.push({
539
+ title: 'Copy Selection w/ Headers',
540
+ group: IrisGridContextMenuHandler.GROUP_COPY,
541
+ order: 40,
542
+ action: () => {
543
+ irisGrid.copyRanges(selectedRanges, true);
544
+ }
510
545
  });
511
546
  }
512
- }
513
547
 
514
- if (modelColumn != null) {
515
- var _column = columns[modelColumn];
516
-
517
- if (isFilterBarShown ? y <= gridY : y <= columnHeaderHeight) {
518
- // grid header context menu options
519
- if (_column != null) {
520
- actions.push(...this.getHeaderActions(modelColumn, gridPoint));
521
- }
522
- } else {
523
- actions.push(...this.getCellActions(modelColumn, grid, gridPoint));
548
+ if (isEditableGridModel(model) && model.isEditable && selectedRanges.length > 0) {
549
+ actions.push({
550
+ title: 'Delete Selected Rows',
551
+ group: IrisGridContextMenuHandler.GROUP_EDIT,
552
+ order: 50,
553
+ action: () => {
554
+ this.irisGrid.deleteRanges(selectedRanges);
555
+ }
556
+ });
524
557
  }
525
558
  }
526
559
 
@@ -634,8 +667,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
634
667
  return actions;
635
668
  }
636
669
 
637
- stringFilterActions(column, valueText, value, quickFilter) {
638
- var additive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
670
+ stringFilterActions(column, valueText, value, quickFilter, operator) {
639
671
  var filterValue = dh.FilterValue.ofString(value);
640
672
  var newQuickFilter = quickFilter;
641
673
 
@@ -659,62 +691,68 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
659
691
  actions.push({
660
692
  menuElement: /*#__PURE__*/React.createElement("div", {
661
693
  className: "iris-grid-filter-menu-item-value"
662
- }, "\"", valueText, "\""),
663
- order: 1
694
+ }, operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', "\"", valueText, "\""),
695
+ order: 1,
696
+ group: ContextActions.groups.high
664
697
  });
665
698
  actions.push({
666
699
  title: 'text is exactly',
667
700
  description: "Show only rows where ".concat(column.name, " is ").concat(value, " (case sensitive)"),
668
701
  action: () => {
669
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().eq(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "=".concat(valueText), additive));
702
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().eq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "=".concat(valueText), operator));
670
703
  },
671
- order: 10
704
+ order: 10,
705
+ group: ContextActions.groups.low
672
706
  });
673
707
  actions.push({
674
708
  title: 'text is not exactly',
675
709
  description: "Show only rows where ".concat(column.name, " is not ").concat(valueText, " (case sensitive)"),
676
710
  action: () => {
677
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().notEq(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!=".concat(valueText), additive));
711
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().notEq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!=".concat(valueText), operator));
678
712
  },
679
- order: 20
713
+ order: 20,
714
+ group: ContextActions.groups.low
680
715
  });
681
716
  actions.push({
682
717
  title: "text contains",
683
718
  description: "Show only rows where ".concat(column.name, " contains ").concat(valueText),
684
719
  action: () => {
685
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().contains(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "~".concat(valueText), additive));
720
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().contains(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "~".concat(valueText), operator));
686
721
  },
687
- order: 30
722
+ order: 30,
723
+ group: ContextActions.groups.low
688
724
  });
689
725
  actions.push({
690
726
  title: 'text does not contain',
691
727
  description: "Show only rows where ".concat(column.name, " does not contain ").concat(value),
692
728
  action: () => {
693
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().contains(filterValue).not(), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!~".concat(valueText), additive));
729
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().contains(filterValue).not(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!~".concat(valueText), operator));
694
730
  },
695
- order: 40
731
+ order: 40,
732
+ group: ContextActions.groups.low
696
733
  });
697
734
  actions.push({
698
735
  title: 'text starts with',
699
736
  description: "Show only rows where ".concat(column.name, " starts with ").concat(valueText),
700
737
  action: () => {
701
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().invoke('startsWith', filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "".concat(valueText, "*"), additive));
738
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().invoke('startsWith', filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "".concat(valueText, "*"), operator));
702
739
  },
703
- order: 50
740
+ order: 50,
741
+ group: ContextActions.groups.low
704
742
  });
705
743
  actions.push({
706
744
  title: 'text ends with',
707
745
  description: "Show only rows where ".concat(column.name, " ends with ").concat(valueText),
708
746
  action: () => {
709
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().invoke('endsWith', filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "*".concat(valueText), additive));
747
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().invoke('endsWith', filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "*".concat(valueText), operator));
710
748
  },
711
- order: 60
749
+ order: 60,
750
+ group: ContextActions.groups.low
712
751
  });
713
752
  return actions;
714
753
  }
715
754
 
716
- numberFilterActions(column, valueText, value, quickFilter) {
717
- var additive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
755
+ numberFilterActions(column, valueText, value, quickFilter, operator) {
718
756
  var filterValue = IrisGridContextMenuHandler.getFilterValueForNumberOrChar(column.type, value);
719
757
  var filter = null;
720
758
  var filterText = null;
@@ -734,26 +772,29 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
734
772
  actions.push({
735
773
  menuElement: /*#__PURE__*/React.createElement("div", {
736
774
  className: "iris-grid-filter-menu-item-value"
737
- }, additive ? ' AND ' : '', "\"", valueText, "\""),
738
- order: 1
775
+ }, operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', "\"", valueText, "\""),
776
+ order: 1,
777
+ group: ContextActions.groups.high
739
778
  });
740
779
  actions.push({
741
780
  title: 'is equal to',
742
781
  description: "Show only rows where ".concat(column.name, " is ").concat(valueText),
743
782
  action: () => {
744
783
  var valueFilter = IrisGridContextMenuHandler.getNumberValueEqualsFilter(column, value);
745
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, valueFilter, additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "=".concat(valueText), additive));
784
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, valueFilter, operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "=".concat(valueText), operator));
746
785
  },
747
- order: 10
786
+ order: 10,
787
+ group: ContextActions.groups.low
748
788
  });
749
789
  actions.push({
750
790
  title: 'is not equal to',
751
791
  description: "Show only rows where ".concat(column.name, " is not ").concat(valueText),
752
792
  action: () => {
753
793
  var valueFilter = IrisGridContextMenuHandler.getNumberValueEqualsFilter(column, value).not();
754
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, valueFilter, additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!=".concat(valueText), additive));
794
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, valueFilter, operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!=".concat(valueText), operator));
755
795
  },
756
- order: 20
796
+ order: 20,
797
+ group: ContextActions.groups.low
757
798
  }); // IDS-6092 Less/greater than filters don't make sense for Infinite/NaN
758
799
  // TODO (DH-11799): These char filters should work in Bard, with the merge for DH-11040: https://gitlab.eng.illumon.com/illumon/iris/merge_requests/5801
759
800
  // They do not work in Powell though, so disable them.
@@ -763,91 +804,101 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
763
804
  title: 'greater than',
764
805
  description: "Show only rows where ".concat(column.name, " is greater than ").concat(valueText),
765
806
  action: () => {
766
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThan(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, ">".concat(valueText), additive));
807
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThan(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, ">".concat(valueText), operator));
767
808
  },
768
- order: 30
809
+ order: 30,
810
+ group: ContextActions.groups.low
769
811
  });
770
812
  actions.push({
771
813
  title: 'greater than or equal to',
772
814
  description: "Show only rows where ".concat(column.name, " is greater than or equal to ").concat(valueText),
773
815
  action: () => {
774
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThanOrEqualTo(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, ">=".concat(valueText), additive));
816
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThanOrEqualTo(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, ">=".concat(valueText), operator));
775
817
  },
776
- order: 40
818
+ order: 40,
819
+ group: ContextActions.groups.low
777
820
  });
778
821
  actions.push({
779
822
  title: 'less than',
780
823
  description: "Show only rows where ".concat(column.name, " is less than ").concat(valueText),
781
824
  action: () => {
782
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThan(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "<".concat(valueText), additive));
825
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThan(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "<".concat(valueText), operator));
783
826
  },
784
- order: 50
827
+ order: 50,
828
+ group: ContextActions.groups.low
785
829
  });
786
830
  actions.push({
787
831
  title: 'less than or equal to',
788
832
  description: "Show only rows where ".concat(column.name, " is less than or equal to ").concat(valueText),
789
833
  action: () => {
790
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThanOrEqualTo(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "<=".concat(valueText), additive));
834
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThanOrEqualTo(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "<=".concat(valueText), operator));
791
835
  },
792
- order: 60
836
+ order: 60,
837
+ group: ContextActions.groups.low
793
838
  });
794
839
  }
795
840
 
796
841
  return actions;
797
842
  }
798
843
 
799
- booleanFilterActions(column, valueText, quickFilter) {
800
- var additive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
844
+ booleanFilterActions(column, valueText, quickFilter, operator) {
801
845
  var actions = [];
802
-
803
- if (quickFilter == null) {
804
- return actions;
805
- }
806
-
807
- var {
808
- filter,
809
- text: filterText
810
- } = quickFilter;
811
846
  var {
812
847
  model
813
848
  } = this.irisGrid.props;
849
+ var {
850
+ filter,
851
+ text: filterText
852
+ } = quickFilter || {};
814
853
  var columnIndex = model.getColumnIndexByName(column.name);
815
854
  assertNotNull(columnIndex);
816
855
  actions.push({
817
856
  menuElement: /*#__PURE__*/React.createElement("div", {
818
857
  className: "iris-grid-filter-menu-item-value"
819
- }, additive ? 'AND ' : '', "\"", valueText, "\""),
820
- order: 1
858
+ }, operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', "\"", valueText || 'null', "\""),
859
+ order: 1,
860
+ group: ContextActions.groups.high
821
861
  });
822
862
  actions.push({
823
863
  title: 'true',
824
864
  description: "Show only rows where ".concat(column.name, " is true"),
825
865
  action: () => {
826
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isTrue(), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'true', additive));
866
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isTrue(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'true', operator));
827
867
  },
828
- order: 10
868
+ order: 10,
869
+ group: ContextActions.groups.low
829
870
  });
830
871
  actions.push({
831
872
  title: 'false',
832
873
  description: "Show only rows where ".concat(column.name, " is false"),
833
874
  action: () => {
834
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isFalse(), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'false', additive));
875
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isFalse(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'false', operator));
835
876
  },
836
- order: 20
877
+ order: 20,
878
+ group: ContextActions.groups.low
837
879
  });
838
880
  actions.push({
839
- title: 'null',
881
+ title: 'is null',
840
882
  description: "Show only rows where ".concat(column.name, " is null"),
841
883
  action: () => {
842
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull(), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'null', additive));
884
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'null', operator));
843
885
  },
844
- order: 30
886
+ order: 30,
887
+ group: ContextActions.groups.low
888
+ });
889
+ actions.push({
890
+ title: 'is not null',
891
+ description: "Show only rows where ".concat(column.name, " is not null"),
892
+ action: () => {
893
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, '!null', operator));
894
+ },
895
+ order: 40,
896
+ group: ContextActions.groups.low
845
897
  });
846
898
  return actions;
847
899
  }
848
900
 
849
- dateFilterActions(column, valueText, previewValue, value, quickFilter) {
850
- var additive = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
901
+ dateFilterActions(column, valueText, previewValue, value, quickFilter, operator) {
851
902
  var filterValue = dh.FilterValue.ofNumber(value);
852
903
  var filter = null;
853
904
  var filterText = null;
@@ -866,62 +917,68 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
866
917
  actions.push({
867
918
  menuElement: /*#__PURE__*/React.createElement("div", {
868
919
  className: "iris-grid-filter-menu-item-value"
869
- }, additive ? ' AND ' : '', "\"", previewValue, "\""),
870
- order: 1
920
+ }, operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', "\"", previewValue, "\""),
921
+ order: 1,
922
+ group: ContextActions.groups.high
871
923
  });
872
924
  actions.push({
873
925
  title: 'date is',
874
926
  description: "Show only rows where ".concat(column.name, " is ").concat(previewValue),
875
927
  action: () => {
876
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().eq(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "=".concat(valueText), additive));
928
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().eq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "=".concat(valueText), operator));
877
929
  },
878
- order: 10
930
+ order: 10,
931
+ group: ContextActions.groups.low
879
932
  });
880
933
  actions.push({
881
934
  title: 'date is not',
882
935
  description: "Show only rows where ".concat(column.name, " is not ").concat(previewValue),
883
936
  action: () => {
884
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().notEq(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!=".concat(valueText), additive));
937
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().notEq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!=".concat(valueText), operator));
885
938
  },
886
- order: 20
939
+ order: 20,
940
+ group: ContextActions.groups.low
887
941
  });
888
942
  actions.push({
889
943
  title: 'date is before',
890
944
  description: "Show only rows where ".concat(column.name, " is before ").concat(previewValue),
891
945
  action: () => {
892
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThan(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "<".concat(valueText), additive));
946
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThan(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "<".concat(valueText), operator));
893
947
  },
894
- order: 30
948
+ order: 30,
949
+ group: ContextActions.groups.low
895
950
  });
896
951
  actions.push({
897
952
  title: 'date is before or equal',
898
953
  description: "Show only rows where ".concat(column.name, " is before or equal to ").concat(previewValue),
899
954
  action: () => {
900
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThanOrEqualTo(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, "<=".concat(valueText), additive));
955
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThanOrEqualTo(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "<=".concat(valueText), operator));
901
956
  },
902
- order: 40
957
+ order: 40,
958
+ group: ContextActions.groups.low
903
959
  });
904
960
  actions.push({
905
961
  title: 'date is after',
906
962
  description: "Show only rows where ".concat(column.name, " is greater than ").concat(previewValue),
907
963
  action: () => {
908
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThan(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, ">".concat(valueText), additive));
964
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThan(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, ">".concat(valueText), operator));
909
965
  },
910
- order: 50
966
+ order: 50,
967
+ group: ContextActions.groups.low
911
968
  });
912
969
  actions.push({
913
970
  title: 'date is after or equal',
914
971
  description: "Show only rows where ".concat(column.name, " is after or equal to ").concat(previewValue),
915
972
  action: () => {
916
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThanOrEqualTo(filterValue), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, ">=".concat(valueText), additive));
973
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThanOrEqualTo(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, ">=".concat(valueText), operator));
917
974
  },
918
- order: 60
975
+ order: 60,
976
+ group: ContextActions.groups.low
919
977
  });
920
978
  return actions;
921
979
  }
922
980
 
923
- nullFilterActions(column, quickFilter) {
924
- var additive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
981
+ nullFilterActions(column, quickFilter, operator) {
925
982
  var filter = null;
926
983
  var filterText = null;
927
984
 
@@ -939,24 +996,27 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
939
996
  actions.push({
940
997
  menuElement: /*#__PURE__*/React.createElement("div", {
941
998
  className: "iris-grid-filter-menu-item-value"
942
- }, additive ? ' AND ' : '', "\"null\""),
943
- order: 1
999
+ }, operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', "\"null\""),
1000
+ order: 1,
1001
+ group: ContextActions.groups.high
944
1002
  });
945
1003
  actions.push({
946
- title: 'equals null',
1004
+ title: 'is null',
947
1005
  description: "Show only rows where ".concat(column.name, " is null"),
948
1006
  action: () => {
949
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull(), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'null', additive));
1007
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'null', operator));
950
1008
  },
951
- order: 10
1009
+ order: 10,
1010
+ group: ContextActions.groups.low
952
1011
  });
953
1012
  actions.push({
954
- title: 'not equals null',
1013
+ title: 'is not null',
955
1014
  description: "Show only rows where ".concat(column.name, " is not null"),
956
1015
  action: () => {
957
- this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not(), additive), IrisGridContextMenuHandler.getQuickFilterText(filterText, '!null', additive));
1016
+ this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, '!null', operator));
958
1017
  },
959
- order: 20
1018
+ order: 20,
1019
+ group: ContextActions.groups.low
960
1020
  });
961
1021
  return actions;
962
1022
  }