@deephaven/iris-grid 0.57.2-beta.1 → 0.58.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 (71) hide show
  1. package/dist/AdvancedFilterCreator.css.map +1 -1
  2. package/dist/AdvancedFilterCreatorFilterItem.css.map +1 -1
  3. package/dist/AdvancedFilterCreatorSelectValue.css.map +1 -1
  4. package/dist/ColumnStatistics.css.map +1 -1
  5. package/dist/FilterInputField.css +11 -8
  6. package/dist/FilterInputField.css.map +1 -1
  7. package/dist/GotoRow.css.map +1 -1
  8. package/dist/IrisGrid.css +9 -6
  9. package/dist/IrisGrid.css.map +1 -1
  10. package/dist/IrisGrid.d.ts +4 -0
  11. package/dist/IrisGrid.d.ts.map +1 -1
  12. package/dist/IrisGrid.js +33 -5
  13. package/dist/IrisGrid.js.map +1 -1
  14. package/dist/IrisGridBottomBar.css +2 -3
  15. package/dist/IrisGridBottomBar.css.map +1 -1
  16. package/dist/IrisGridCellOverflowModal.js +1 -1
  17. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  18. package/dist/IrisGridCopyHandler.css +1 -2
  19. package/dist/IrisGridCopyHandler.css.map +1 -1
  20. package/dist/IrisGridCopyHandler.d.ts +12 -4
  21. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  22. package/dist/IrisGridCopyHandler.js +72 -32
  23. package/dist/IrisGridCopyHandler.js.map +1 -1
  24. package/dist/IrisGridPartitionSelector.css.map +1 -1
  25. package/dist/IrisGridRenderer.js +1 -1
  26. package/dist/IrisGridRenderer.js.map +1 -1
  27. package/dist/IrisGridTheme.d.ts.map +1 -1
  28. package/dist/IrisGridTheme.js +1 -0
  29. package/dist/IrisGridTheme.js.map +1 -1
  30. package/dist/IrisGridTheme.module.css +1 -0
  31. package/dist/IrisGridTheme.module.css.map +1 -1
  32. package/dist/PartitionSelectorSearch.css +2 -2
  33. package/dist/PartitionSelectorSearch.css.map +1 -1
  34. package/dist/PendingDataBottomBar.css +1 -8
  35. package/dist/PendingDataBottomBar.css.map +1 -1
  36. package/dist/format-context-menus/CustomFormatAction.css +1 -1
  37. package/dist/mousehandlers/IrisGridContextMenuHandler.css +2 -2
  38. package/dist/mousehandlers/IrisGridContextMenuHandler.css.map +1 -1
  39. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  40. package/dist/mousehandlers/IrisGridContextMenuHandler.js +2 -0
  41. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  42. package/dist/mousehandlers/IrisGridCopyCellMouseHandler.d.ts +10 -0
  43. package/dist/mousehandlers/IrisGridCopyCellMouseHandler.d.ts.map +1 -0
  44. package/dist/mousehandlers/IrisGridCopyCellMouseHandler.js +34 -0
  45. package/dist/mousehandlers/IrisGridCopyCellMouseHandler.js.map +1 -0
  46. package/dist/mousehandlers/index.d.ts +1 -0
  47. package/dist/mousehandlers/index.d.ts.map +1 -1
  48. package/dist/mousehandlers/index.js +1 -0
  49. package/dist/mousehandlers/index.js.map +1 -1
  50. package/dist/sidebar/ChartBuilder.css.map +1 -1
  51. package/dist/sidebar/CustomColumnBuilder.css +3 -3
  52. package/dist/sidebar/CustomColumnBuilder.css.map +1 -1
  53. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  54. package/dist/sidebar/CustomColumnBuilder.js +2 -5
  55. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  56. package/dist/sidebar/InputEditor.css.map +1 -1
  57. package/dist/sidebar/RollupRows.css +3 -2
  58. package/dist/sidebar/RollupRows.css.map +1 -1
  59. package/dist/sidebar/SelectDistinctBuilder.css.map +1 -1
  60. package/dist/sidebar/TableCsvExporter.css.map +1 -1
  61. package/dist/sidebar/aggregations/AggregationEdit.css.map +1 -1
  62. package/dist/sidebar/aggregations/Aggregations.css.map +1 -1
  63. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css +1 -1
  64. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css.map +1 -1
  65. package/dist/sidebar/conditional-formatting/StyleEditor.css +1 -1
  66. package/dist/sidebar/conditional-formatting/StyleEditor.css.map +1 -1
  67. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css +4 -2
  68. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +1 -1
  69. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +4 -4
  70. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -1
  71. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridContextMenuHandler.js","names":["React","FontAwesomeIcon","dhFilterFilled","vsRemove","vsCheck","vsFilter","debounce","ContextActions","ContextActionUtils","GLOBAL_SHORTCUTS","GridMouseHandler","GridRenderer","isEditableGridModel","isExpandableGridModel","TableColumnFormatter","DateTimeColumnFormatter","TableUtils","Log","assertNotNull","copyToClipboard","DateTimeFormatContextMenu","DecimalFormatContextMenu","IntegerFormatContextMenu","SHORTCUTS","jsxs","_jsxs","jsx","_jsx","log","module","DEBOUNCE_UPDATE_FORMAT","CONTEXT_MENU_DATE_FORMAT","IrisGridContextMenuHandler","getQuickFilterCondition","columnFilter","newColumnFilter","operator","and","or","getQuickFilterText","filterText","newFilterText","concat","getOperatorAsText","getRowOptionFormatted","command","cellValue","len","arguments","length","undefined","truncate","constructor","irisGrid","dh","_defineProperty","debouncedUpdateCustomFormat","handleFormatSelection","componentWillUnmount","flush","getHeaderActions","modelIndex","gridPoint","column","visibleIndex","model","props","columns","actions","metrics","reverseType","quickFilters","advancedFilters","searchFilter","state","theme","getTheme","filterIconColor","filterBarActiveColor","contextMenuSortIconColor","contextMenuReverseIconColor","modelSort","sort","columnSort","getSortForColumn","name","hasReverse","REVERSE_TYPE","NONE","userColumnWidths","isColumnHidden","values","some","columnWidth","isColumnFreezable","getColumnHeaderParentGroup","hasExpandableRows","isColumnFrozen","isColumnSortable","push","title","group","GROUP_HIDE_COLUMNS","action","hideColumnByVisibleIndex","disabled","unFreezeColumnByColumnName","freezeColumnByColumnName","order","showAllColumns","icon","iconColor","shortcut","TABLE","TOGGLE_QUICK_FILTER","GROUP_FILTER","toggleFilterBar","get","handleAdvancedMenuOpened","CLEAR_FILTERS","clearAllFilters","size","GROUP_SORT","sortByActions","additionalSortActions","sortColumn","COLUMN_SORT_DIRECTION","none","isReversible","REVERSE","reverse","POST_SORT","GROUP_COPY","_model$textForColumnH","textForColumnHeader","catch","e","error","isDateType","type","GROUP_FORMAT","dateFormatActions","isNumberType","_this$numberFormatAct","numberFormatActions","getCellActions","modelColumn","grid","columnIndex","row","rowIndex","canCopy","modelRow","getModelRow","sourceCell","sourceForCell","sourceColumn","sourceRow","value","valueForCell","valueText","textForCell","settings","dateFilterFormatter","timeZone","showTimeZone","showTSeparator","defaultDateTimeFormatString","previewFilterFormatter","isFilterable","filterMenu","nullFilterActions","groups","high","emptyStringFilterActions","isBooleanType","booleanFilterActions","isCharType","numberValueText","String","fromCharCode","numberFilterActions","dateValueText","format","previewValue","dateFilterActions","stringFilterActions","isRowExpandable","expandingColumn","cellText","isRowExpanded","GROUP_EXPAND_COLLAPSE","setRowExpanded","isExpandAllAvailable","expandAll","collapseAll","gotoRow","GOTO_ROW","GROUP_GOTO","toggleGotoRow","copyCell","GROUP_VIEW_CONTENTS","setState","showOverflowModal","overflowText","getValueForCell","getNumberValueEqualsFilter","filter","Number","POSITIVE_INFINITY","FilterCondition","invoke","greaterThan","FilterValue","ofNumber","NEGATIVE_INFINITY","lessThan","isNaN","filterValue","getFilterValueForNumberOrChar","eq","columnType","ofString","onContextMenu","event","y","columnHeaderDepth","getModelColumn","isFilterBarShown","selectedRanges","columnHeaderHeight","gridY","columnHeaderMaxDepth","clearFilterRange","getClearFilterRange","removeColumnFilter","Array","from","keys","col","COPY","copyRanges","isEditable","GROUP_EDIT","deleteRanges","gridWrapper","triggerMenu","clientX","clientY","_this","formatter","selectedFormat","getColumnFormat","formatOptions","getOptions","_loop","description","isSelected","i","getColumnIndexByName","_this2","isDecimalType","isIntegerType","_loop2","_objectSpread","TYPE_CONTEXT_CUSTOM","quickFilter","newQuickFilter","text","quickFilterValueText","escapeQuickTextFilter","menuElement","className","children","setQuickFilter","low","notEq","isNull","not","contains","isFinite","valueFilter","greaterThanOrEqualTo","lessThanOrEqualTo","isTrue","isFalse","sortActions","ascending","checkColumnSort","descending","style","color","isMacPlatform","direction","isAbs"],"sources":["../../src/mousehandlers/IrisGridContextMenuHandler.tsx"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhFilterFilled,\n vsRemove,\n vsCheck,\n vsFilter,\n IconDefinition,\n} from '@deephaven/icons';\nimport debounce from 'lodash.debounce';\nimport {\n ContextAction,\n ContextActions,\n ContextActionUtils,\n GLOBAL_SHORTCUTS,\n ResolvableContextAction,\n} from '@deephaven/components';\nimport {\n EventHandlerResult,\n Grid,\n GridMouseHandler,\n GridPoint,\n GridRenderer,\n isEditableGridModel,\n isExpandableGridModel,\n ModelIndex,\n} from '@deephaven/grid';\nimport type {\n Column,\n dh as DhType,\n FilterCondition,\n FilterValue,\n Sort,\n} from '@deephaven/jsapi-types';\nimport {\n TableColumnFormatter,\n DateTimeColumnFormatter,\n TableUtils,\n TableColumnFormat,\n IntegerColumnFormat,\n SortDirection,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport type { DebouncedFunc } from 'lodash';\nimport { assertNotNull, copyToClipboard } from '@deephaven/utils';\nimport {\n DateTimeFormatContextMenu,\n DecimalFormatContextMenu,\n IntegerFormatContextMenu,\n} from '../format-context-menus';\nimport './IrisGridContextMenuHandler.scss';\nimport SHORTCUTS from '../IrisGridShortcuts';\nimport IrisGrid from '../IrisGrid';\nimport { QuickFilter } from '../CommonTypes';\n\nconst log = Log.module('IrisGridContextMenuHandler');\n\nconst DEBOUNCE_UPDATE_FORMAT = 150;\nconst CONTEXT_MENU_DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.SSSSSSSSS';\n\n/**\n * Used to eat the mouse event in the bottom right corner of the scroll bar\n */\nclass IrisGridContextMenuHandler extends GridMouseHandler {\n static GROUP_EDIT = ContextActions.groups.high + 10;\n\n static GROUP_HIDE_COLUMNS = ContextActions.groups.high + 25;\n\n static GROUP_FILTER = ContextActions.groups.high + 50;\n\n static GROUP_EXPAND_COLLAPSE = ContextActions.groups.high + 55;\n\n static GROUP_GOTO = ContextActions.groups.high + 60;\n\n static GROUP_SORT = ContextActions.groups.high + 75;\n\n static GROUP_COPY = ContextActions.groups.high + 100;\n\n static GROUP_FORMAT = ContextActions.groups.high + 150;\n\n static GROUP_VIEW_CONTENTS = ContextActions.groups.high + 175;\n\n static COLUMN_SORT_DIRECTION = {\n ascending: 'ASC',\n descending: 'DESC',\n none: null,\n } as const;\n\n /**\n * Get filter condition for quick filter and combines with a new filter using the operator specified,\n * returns new filter if no operator supplied.\n * @param columnFilter\n * @param newColumnFilter\n * @param operator\n */\n static getQuickFilterCondition(\n columnFilter: FilterCondition | null | undefined,\n newColumnFilter: FilterCondition,\n operator?: '&&' | '||' | null\n ): FilterCondition {\n if (columnFilter && operator === '&&') {\n return columnFilter.and(newColumnFilter);\n }\n if (columnFilter && operator === '||') {\n return columnFilter.or(newColumnFilter);\n }\n return newColumnFilter;\n }\n\n /**\n * combines filter text with operator if declared\n * @param filterText\n * @param newFilterText\n * @param operator\n */\n static getQuickFilterText(\n filterText: string | null | undefined,\n newFilterText: string,\n operator?: '&&' | '||' | null\n ): string {\n return operator && filterText != null\n ? `${filterText} ${operator} ${newFilterText}`\n : newFilterText;\n }\n\n /**\n * Converts operator to text string,\n */\n static getOperatorAsText(operator: '&&' | '||'): 'And' | 'Or' {\n return operator === '&&' ? 'And' : 'Or';\n }\n\n static getRowOptionFormatted(\n command: string,\n cellValue: string,\n len = 30\n ): string {\n return `${command} \"${GridRenderer.truncate(\n cellValue,\n len - command.length - 3\n )}\"`;\n }\n\n irisGrid: IrisGrid;\n\n debouncedUpdateCustomFormat: DebouncedFunc<\n (modelIndex: number, selectedFormat: TableColumnFormat | null) => void\n >;\n\n constructor(irisGrid: IrisGrid, dh: DhType) {\n super();\n\n this.debouncedUpdateCustomFormat = debounce(\n irisGrid.handleFormatSelection,\n DEBOUNCE_UPDATE_FORMAT\n );\n\n this.dh = dh;\n this.irisGrid = irisGrid;\n }\n\n componentWillUnmount(): void {\n this.debouncedUpdateCustomFormat.flush();\n }\n\n dh: DhType;\n\n getHeaderActions(\n modelIndex: ModelIndex,\n gridPoint: GridPoint\n ): ContextAction[] {\n const { irisGrid } = this;\n const { column: visibleIndex } = gridPoint;\n assertNotNull(visibleIndex);\n const { model } = irisGrid.props;\n const { columns } = model;\n const column = columns[modelIndex];\n\n const actions = [] as ContextAction[];\n\n const {\n metrics,\n reverseType,\n quickFilters,\n advancedFilters,\n searchFilter,\n } = irisGrid.state;\n const theme = irisGrid.getTheme();\n assertNotNull(metrics);\n const {\n filterIconColor,\n filterBarActiveColor,\n contextMenuSortIconColor,\n contextMenuReverseIconColor,\n } = theme;\n\n const modelSort = model.sort;\n const columnSort = TableUtils.getSortForColumn(modelSort, column.name);\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n const { userColumnWidths } = metrics;\n const isColumnHidden = [...userColumnWidths.values()].some(\n columnWidth => columnWidth === 0\n );\n const isColumnFreezable =\n model.getColumnHeaderParentGroup(modelIndex, 0) === undefined &&\n !(isExpandableGridModel(model) && model.hasExpandableRows);\n const isColumnFrozen = model.isColumnFrozen(modelIndex);\n const isColumnSortable = model.isColumnSortable(modelIndex);\n actions.push({\n title: 'Hide Column',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.hideColumnByVisibleIndex(visibleIndex);\n },\n });\n actions.push({\n title: isColumnFrozen ? 'Unfreeze Column' : 'Freeze Column',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n disabled: !isColumnFreezable,\n action: () => {\n if (isColumnFrozen) {\n this.irisGrid.unFreezeColumnByColumnName(column.name);\n } else {\n this.irisGrid.freezeColumnByColumnName(column.name);\n }\n },\n order: 10,\n });\n actions.push({\n title: 'Show All Columns',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.showAllColumns();\n },\n disabled: !isColumnHidden,\n });\n actions.push({\n title: 'Quick Filters',\n icon: vsRemove,\n iconColor: filterBarActiveColor,\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 10,\n action: () => {\n this.irisGrid.toggleFilterBar(visibleIndex);\n },\n });\n actions.push({\n title: 'Advanced Filters',\n icon: advancedFilters.get(modelIndex) ? dhFilterFilled : vsFilter,\n iconColor: filterIconColor,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 20,\n action: () => {\n this.irisGrid.handleAdvancedMenuOpened(visibleIndex);\n },\n });\n actions.push({\n title: 'Clear Table Filters',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 40,\n // this just displays the shortcut, the actual listener is in irisgrid handleKeyDown\n shortcut: SHORTCUTS.TABLE.CLEAR_FILTERS,\n action: () => {\n this.irisGrid.clearAllFilters();\n },\n disabled: !(\n quickFilters.size > 0 ||\n advancedFilters.size > 0 ||\n searchFilter != null\n ),\n });\n actions.push({\n title: 'Sort by',\n icon: vsRemove,\n iconColor: contextMenuSortIconColor,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 10,\n actions: this.sortByActions(column, modelIndex, columnSort),\n disabled: !isColumnSortable,\n });\n actions.push({\n title: 'Add Additional Sort',\n /**\n * disable conditions:\n * 1. table is sorted only by this column\n * 2. table is only reversed\n * 3. 1 & 2 combined\n * 4. table has no sort\n * reverse is a type of sort, so needs to be accounted for in exclusions\n * */\n disabled:\n (columnSort && modelSort.length === 1) ||\n (hasReverse && modelSort.length === 1) ||\n (columnSort && hasReverse && modelSort.length === 2) ||\n modelSort.length === 0 ||\n !isColumnSortable,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 20,\n actions: this.additionalSortActions(column, modelIndex),\n });\n actions.push({\n title: 'Clear Table Sorting',\n disabled:\n // reverse is a type of sort, but special and needs to be exluded despite being part of model.sort\n modelSort.length === 0 || (hasReverse && modelSort.length === 1),\n group: IrisGridContextMenuHandler.GROUP_SORT,\n action: () => {\n this.irisGrid.sortColumn(\n visibleIndex,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.none\n );\n },\n order: 30,\n });\n actions.push({\n title:\n reverseType === TableUtils.REVERSE_TYPE.NONE\n ? 'Reverse Table'\n : 'Clear Reverse Table',\n icon: vsRemove,\n iconColor: contextMenuReverseIconColor,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 40,\n disabled: !model.isReversible,\n // this just displays the shortcut, the actual listener is in irisgrid handleKeyDown\n shortcut: SHORTCUTS.TABLE.REVERSE,\n action: () => {\n if (reverseType === TableUtils.REVERSE_TYPE.NONE) {\n this.irisGrid.reverse(TableUtils.REVERSE_TYPE.POST_SORT);\n } else {\n this.irisGrid.reverse(TableUtils.REVERSE_TYPE.NONE);\n }\n },\n });\n actions.push({\n title: 'Copy Column Name',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n action: () => {\n copyToClipboard(model.textForColumnHeader(modelIndex) ?? '').catch(e =>\n log.error('Unable to copy header', e)\n );\n },\n });\n\n if (TableUtils.isDateType(column.type)) {\n actions.push({\n title: 'Date/Time Format',\n group: IrisGridContextMenuHandler.GROUP_FORMAT,\n actions: this.dateFormatActions(column),\n });\n } else if (TableUtils.isNumberType(column.type)) {\n actions.push({\n title: 'Number Format',\n group: IrisGridContextMenuHandler.GROUP_FORMAT,\n actions: this.numberFormatActions(column) ?? undefined,\n });\n }\n return actions;\n }\n\n getCellActions(\n modelColumn: ModelIndex,\n grid: Grid,\n gridPoint: GridPoint\n ): ContextAction[] {\n const { dh, irisGrid } = this;\n const { column: columnIndex, row: rowIndex } = gridPoint;\n const { model, canCopy } = irisGrid.props;\n const { columns } = model;\n const modelRow = irisGrid.getModelRow(rowIndex);\n assertNotNull(modelRow);\n const sourceCell = model.sourceForCell(modelColumn, modelRow);\n const { column: sourceColumn, row: sourceRow } = sourceCell;\n const value = model.valueForCell(sourceColumn, sourceRow);\n\n const valueText = model.textForCell(sourceColumn, sourceRow);\n const column = columns[sourceColumn];\n\n const actions = [] as ContextAction[];\n\n const { quickFilters } = irisGrid.state;\n const theme = irisGrid.getTheme();\n const { filterIconColor } = theme;\n const { settings } = irisGrid.props;\n\n const dateFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone: settings?.timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: CONTEXT_MENU_DATE_FORMAT,\n });\n const previewFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone: settings?.timeZone,\n showTimeZone: settings?.showTimeZone,\n showTSeparator: settings?.showTSeparator,\n defaultDateTimeFormatString: CONTEXT_MENU_DATE_FORMAT,\n });\n\n if (column == null || rowIndex == null) return actions;\n\n // grid data area context menu options\n if (model.isFilterable(sourceColumn)) {\n // cell data area contextmenu options\n const filterMenu = {\n title: 'Filter by Value',\n icon: vsRemove,\n iconColor: filterIconColor,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 10,\n actions: [],\n } as {\n title: string;\n icon: IconDefinition;\n iconColor: string;\n group: number;\n order: number;\n actions: ContextAction[];\n };\n\n if (value == null) {\n // null gets a special menu\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.nullFilterActions(\n column,\n quickFilters.get(sourceColumn),\n '&&'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(...this.nullFilterActions(column));\n } else if (value === '') {\n // empty string gets a special menu\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n\n actions: this.emptyStringFilterActions(\n column,\n quickFilters.get(sourceColumn),\n '&&'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(...this.emptyStringFilterActions(column));\n } else if (TableUtils.isBooleanType(column.type)) {\n // boolean should have OR condition, and handles it's own null menu options\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'Or',\n actions: this.booleanFilterActions(\n column,\n valueText,\n quickFilters.get(sourceColumn),\n '||'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(\n ...this.booleanFilterActions(column, valueText)\n );\n } else if (\n TableUtils.isNumberType(column.type) ||\n TableUtils.isCharType(column.type)\n ) {\n // Chars get treated like numbers in terms of which filters are available\n assertNotNull(sourceColumn);\n // We want to show the full unformatted value if it's a number, so user knows which value they are matching\n // If it's a Char we just show the char\n const numberValueText = TableUtils.isCharType(column.type)\n ? String.fromCharCode(value as number)\n : `${value}`;\n\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.numberFilterActions(\n column,\n numberValueText,\n value,\n quickFilters.get(sourceColumn),\n '&&'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(\n ...this.numberFilterActions(\n column,\n numberValueText,\n value,\n quickFilters.get(sourceColumn)\n )\n );\n } else if (TableUtils.isDateType(column.type)) {\n const dateValueText = dateFilterFormatter.format(value as Date);\n const previewValue = previewFilterFormatter.format(value as Date);\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.dateFilterActions(\n column,\n dateValueText,\n previewValue,\n value,\n quickFilters.get(sourceColumn),\n '&&'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(\n ...this.dateFilterActions(\n column,\n dateValueText,\n previewValue,\n value,\n quickFilters.get(sourceColumn)\n )\n );\n } else {\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n\n actions: this.stringFilterActions(\n column,\n valueText,\n value,\n quickFilters.get(sourceColumn),\n '&&'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(\n ...this.stringFilterActions(column, valueText, value)\n );\n }\n\n if (filterMenu.actions != null && filterMenu.actions.length > 0) {\n actions.push(filterMenu);\n }\n }\n\n // Expand/Collapse options\n if (isExpandableGridModel(model) && model.isRowExpandable(sourceRow)) {\n // If there are grouped columns, then it is a rollup\n // The first column will be the \"group\" column with the value that should be expanded\n const expandingColumn = 0;\n const cellValue = model.valueForCell(expandingColumn, sourceRow);\n const cellText =\n cellValue == null\n ? 'null'\n : model.textForCell(expandingColumn, sourceRow);\n\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted(\n model.isRowExpanded(sourceRow) ? 'Collapse' : 'Expand',\n cellText\n ),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 10,\n action: () => {\n model.setRowExpanded(sourceRow, !model.isRowExpanded(sourceRow));\n },\n });\n\n if (model.isExpandAllAvailable === true) {\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted(\n 'Expand All in',\n cellText\n ),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 20,\n action: () => {\n model.setRowExpanded(sourceRow, true, true);\n },\n });\n }\n }\n\n if (\n isExpandableGridModel(model) &&\n model.hasExpandableRows &&\n model.isExpandAllAvailable === true\n ) {\n actions.push({\n title: 'Expand Entire Table',\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 30,\n action: () => {\n model.expandAll();\n },\n });\n\n actions.push({\n title: 'Collapse Entire Table',\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 40,\n action: () => {\n model.collapseAll();\n },\n });\n }\n\n const gotoRow = {\n title: 'Go to',\n iconColor: filterIconColor,\n shortcut: SHORTCUTS.TABLE.GOTO_ROW,\n group: IrisGridContextMenuHandler.GROUP_GOTO,\n order: 10,\n action: () =>\n this.irisGrid.toggleGotoRow(`${rowIndex + 1}`, `${value}`, column.name),\n };\n actions.push(gotoRow);\n\n if (canCopy) {\n actions.push({\n title: 'Copy Cell',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n order: 10,\n action: () => {\n irisGrid.copyCell(columnIndex, rowIndex);\n },\n });\n\n actions.push({\n title: 'Copy Cell Unformatted',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n order: 20,\n action: () => {\n irisGrid.copyCell(columnIndex, rowIndex, true);\n },\n });\n }\n\n actions.push({\n title: 'View Cell Contents',\n group: IrisGridContextMenuHandler.GROUP_VIEW_CONTENTS,\n order: 10,\n action: () => {\n irisGrid.setState({\n showOverflowModal: true,\n overflowText: irisGrid.getValueForCell(\n columnIndex,\n rowIndex\n ) as string,\n });\n },\n });\n\n return actions;\n }\n\n /**\n * Gets an equality filter for the provided numeric value\n * @param column The column to make the filter for\n * @param value The value to get the equality filter for\n */\n getNumberValueEqualsFilter(column: Column, value: number): FilterCondition {\n const { dh } = this;\n const columnFilter = column.filter();\n if (value === Number.POSITIVE_INFINITY) {\n return dh.FilterCondition.invoke('isInf', columnFilter).and(\n columnFilter.greaterThan(dh.FilterValue.ofNumber(0))\n );\n }\n if (value === Number.NEGATIVE_INFINITY) {\n return dh.FilterCondition.invoke('isInf', columnFilter).and(\n columnFilter.lessThan(dh.FilterValue.ofNumber(0))\n );\n }\n if (Number.isNaN(value)) {\n return dh.FilterCondition.invoke('isNaN', columnFilter);\n }\n\n const filterValue = this.getFilterValueForNumberOrChar(column.type, value);\n return columnFilter.eq(filterValue);\n }\n\n getFilterValueForNumberOrChar(\n columnType: string,\n value: unknown\n ): FilterValue {\n const { dh } = this;\n return TableUtils.isCharType(columnType)\n ? dh.FilterValue.ofString(String.fromCharCode(value as number))\n : dh.FilterValue.ofNumber(value);\n }\n\n onContextMenu(\n gridPoint: GridPoint,\n grid: Grid,\n event: React.MouseEvent<Element, MouseEvent>\n ): EventHandlerResult {\n const { irisGrid } = this;\n const {\n y,\n column: columnIndex,\n row: rowIndex,\n columnHeaderDepth,\n } = gridPoint;\n const modelColumn = irisGrid.getModelColumn(columnIndex);\n const modelRow = irisGrid.getModelRow(rowIndex);\n\n const { model, canCopy } = irisGrid.props;\n const { columns } = model;\n\n const {\n metrics,\n isFilterBarShown,\n quickFilters,\n advancedFilters,\n selectedRanges,\n } = irisGrid.state;\n\n assertNotNull(metrics);\n\n const { columnHeaderHeight, gridY, columnHeaderMaxDepth } = metrics;\n\n const actions: ResolvableContextAction[] = [];\n\n if (modelColumn != null && modelRow != null) {\n const sourceCell = model.sourceForCell(modelColumn, modelRow ?? 0);\n const { column: sourceColumn, row: sourceRow } = sourceCell;\n const value = model.valueForCell(sourceColumn, sourceRow);\n const valueText = model.textForCell(sourceColumn, sourceRow);\n const column = columns[sourceColumn];\n\n const { onContextMenu } = irisGrid.props;\n\n if (column != null) {\n actions.push(\n ...onContextMenu({\n model,\n value,\n valueText,\n column,\n rowIndex,\n columnIndex,\n modelRow,\n modelColumn,\n })\n );\n }\n }\n\n if (modelColumn != null) {\n const clearFilterRange = model.getClearFilterRange(modelColumn);\n if (clearFilterRange != null && clearFilterRange.length > 0) {\n // Clear column filter should still be available after last row\n // And should be available in both header and body context menus\n actions.push({\n title:\n clearFilterRange[1] - clearFilterRange[0] > 0\n ? 'Clear Group Filter'\n : 'Clear Column Filter',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 30,\n action: () => {\n this.irisGrid.removeColumnFilter(clearFilterRange);\n },\n disabled:\n !Array.from(quickFilters.keys()).some(\n col => col >= clearFilterRange[0] && col <= clearFilterRange[1]\n ) &&\n !Array.from(advancedFilters.keys()).some(\n col => col >= clearFilterRange[0] && col <= clearFilterRange[1]\n ),\n });\n }\n }\n\n if (\n isFilterBarShown\n ? y <= gridY\n : y <= columnHeaderHeight * columnHeaderMaxDepth &&\n columnHeaderDepth === 0\n ) {\n // grid header context menu options\n if (modelColumn != null) {\n actions.push(...this.getHeaderActions(modelColumn, gridPoint));\n }\n } else {\n // grid body context menu options\n if (modelColumn != null && modelRow != null) {\n actions.push(...this.getCellActions(modelColumn, grid, gridPoint));\n }\n\n // blank space context menu options\n if (canCopy && selectedRanges.length > 0) {\n actions.push({\n title: 'Copy Selection',\n shortcut: GLOBAL_SHORTCUTS.COPY,\n group: IrisGridContextMenuHandler.GROUP_COPY,\n order: 30,\n action: () => {\n irisGrid.copyRanges(selectedRanges);\n },\n });\n\n actions.push({\n title: 'Copy Selection w/ Headers',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n order: 40,\n action: () => {\n irisGrid.copyRanges(selectedRanges, true);\n },\n });\n }\n\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n selectedRanges.length > 0\n ) {\n actions.push({\n title: 'Delete Selected Rows',\n group: IrisGridContextMenuHandler.GROUP_EDIT,\n order: 50,\n action: () => {\n this.irisGrid.deleteRanges(selectedRanges);\n },\n });\n }\n }\n\n if (actions.length === 0) {\n return false;\n }\n\n assertNotNull(irisGrid.gridWrapper);\n\n ContextActions.triggerMenu(\n irisGrid.gridWrapper,\n event.clientX,\n event.clientY,\n actions\n );\n return true;\n }\n\n dateFormatActions(column: Column): ContextAction[] {\n const { model } = this.irisGrid.props;\n const { formatter } = model;\n const selectedFormat = formatter.getColumnFormat(column.type, column.name);\n\n const formatOptions = DateTimeFormatContextMenu.getOptions(\n formatter,\n selectedFormat\n );\n\n const actions = [];\n\n for (let i = 0; i < formatOptions.length; i += 1) {\n const { description, format, group, isSelected, title } =\n formatOptions[i];\n actions.push({\n title,\n description,\n icon: isSelected ? vsCheck : undefined,\n group,\n order: i,\n action: () => {\n const modelIndex = model.getColumnIndexByName(column.name);\n assertNotNull(modelIndex);\n this.irisGrid.handleFormatSelection(modelIndex, format);\n },\n });\n }\n return actions;\n }\n\n numberFormatActions(column: Column): ContextAction[] | null {\n const { model } = this.irisGrid.props;\n const { formatter } = model;\n const { dh } = this;\n const selectedFormat = formatter.getColumnFormat(\n column.type,\n column.name\n ) as IntegerColumnFormat;\n let formatOptions;\n\n const columnIndex = model.getColumnIndexByName(column.name);\n if (TableUtils.isDecimalType(column.type)) {\n formatOptions = DecimalFormatContextMenu.getOptions(\n dh,\n selectedFormat,\n format => {\n assertNotNull(columnIndex);\n this.debouncedUpdateCustomFormat(columnIndex, format);\n }\n );\n } else if (TableUtils.isIntegerType(column.type)) {\n formatOptions = IntegerFormatContextMenu.getOptions(\n dh,\n selectedFormat,\n format => {\n assertNotNull(columnIndex);\n this.debouncedUpdateCustomFormat(columnIndex, format);\n }\n );\n } else {\n log.error('Invalid column type in numberFormatActions');\n return null;\n }\n\n const actions = [];\n\n for (let i = 0; i < formatOptions.length; i += 1) {\n const { format, isSelected } = formatOptions[i];\n actions.push({\n ...formatOptions[i],\n icon: isSelected ? vsCheck : undefined,\n order: i,\n action: () => {\n if (\n columnIndex === undefined &&\n format &&\n format.type === TableColumnFormatter.TYPE_CONTEXT_CUSTOM\n ) {\n return;\n }\n assertNotNull(columnIndex);\n this.irisGrid.handleFormatSelection(columnIndex, format);\n },\n });\n }\n return actions;\n }\n\n stringFilterActions(\n column: Column,\n valueText: string | null,\n value?: unknown,\n quickFilter?: QuickFilter,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n const { dh } = this;\n const filterValue = dh.FilterValue.ofString(value);\n let newQuickFilter:\n | {\n filter: null | FilterCondition | undefined;\n text: string | null;\n }\n | undefined\n | null = quickFilter;\n if (!newQuickFilter) {\n newQuickFilter = { filter: null, text: null };\n }\n const { filter, text: filterText } = newQuickFilter;\n const actions = [];\n const { model } = this.irisGrid.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n\n const quickFilterValueText: string | null =\n TableUtils.escapeQuickTextFilter(valueText);\n\n assertNotNull(columnIndex);\n\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n &quot;{valueText}&quot;\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n\n actions.push({\n title: 'text is exactly',\n description: `Show only rows where ${column.name} is ${value} (case sensitive)`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().eq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `${quickFilterValueText}`,\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'text is not exactly',\n description: `Show only rows where ${column.name} is not ${valueText} (case sensitive)`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().notEq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `!=${quickFilterValueText}`,\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: `text contains`,\n description: `Show only rows where ${column.name} contains ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column\n .filter()\n .isNull()\n .not()\n .and(column.filter().contains(filterValue)),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `~${quickFilterValueText}`,\n operator\n )\n );\n },\n order: 30,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'text does not contain',\n description: `Show only rows where ${column.name} does not contain ${value}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column\n .filter()\n .isNull()\n .or(column.filter().contains(filterValue).not()),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `!~${quickFilterValueText}`,\n operator\n )\n );\n },\n order: 40,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'text starts with',\n description: `Show only rows where ${column.name} starts with ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column\n .filter()\n .isNull()\n .not()\n .and(column.filter().invoke('startsWith', filterValue)),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `${quickFilterValueText}*`,\n operator\n )\n );\n },\n order: 50,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'text ends with',\n description: `Show only rows where ${column.name} ends with ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column\n .filter()\n .isNull()\n .not()\n .and(column.filter().invoke('endsWith', filterValue)),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `*${quickFilterValueText}`,\n operator\n )\n );\n },\n order: 60,\n group: ContextActions.groups.low,\n });\n return actions;\n }\n\n numberFilterActions(\n column: Column,\n valueText: string,\n value: unknown,\n quickFilter?: QuickFilter | null,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n const filterValue = this.getFilterValueForNumberOrChar(column.type, value);\n let filter: FilterCondition | null = null;\n let filterText: string | null = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n const actions = [];\n const isFinite =\n value !== Number.POSITIVE_INFINITY &&\n value !== Number.NEGATIVE_INFINITY &&\n !Number.isNaN(value);\n const { model } = this.irisGrid.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n &quot;{valueText}&quot;\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n actions.push({\n title: 'is equal to',\n description: `Show only rows where ${column.name} is ${valueText}`,\n action: () => {\n const valueFilter = this.getNumberValueEqualsFilter(\n column,\n value as number\n );\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n valueFilter,\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `=${valueText}`,\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'is not equal to',\n description: `Show only rows where ${column.name} is not ${valueText}`,\n action: () => {\n const valueFilter = this.getNumberValueEqualsFilter(\n column,\n value as number\n ).not();\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n valueFilter,\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `!=${valueText}`,\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n\n // IDS-6092 Less/greater than filters don't make sense for Infinite/NaN\n // 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\n // They do not work in Powell though, so disable them.\n if (isFinite && !TableUtils.isCharType(column.type)) {\n actions.push({\n title: 'greater than',\n description: `Show only rows where ${column.name} is greater than ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().greaterThan(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `>${valueText}`,\n operator\n )\n );\n },\n order: 30,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'greater than or equal to',\n description: `Show only rows where ${column.name} is greater than or equal to ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().greaterThanOrEqualTo(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `>=${valueText}`,\n operator\n )\n );\n },\n order: 40,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'less than',\n description: `Show only rows where ${column.name} is less than ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().lessThan(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `<${valueText}`,\n operator\n )\n );\n },\n order: 50,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'less than or equal to',\n description: `Show only rows where ${column.name} is less than or equal to ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().lessThanOrEqualTo(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `<=${valueText}`,\n operator\n )\n );\n },\n order: 60,\n group: ContextActions.groups.low,\n });\n }\n return actions;\n }\n\n booleanFilterActions(\n column: Column,\n valueText: string | null,\n quickFilter?: QuickFilter | null,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n const actions: ContextAction[] = [];\n\n const { model } = this.irisGrid.props;\n const { filter, text: filterText } = quickFilter || {};\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n &quot;{valueText ?? 'null'}&quot;\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n\n actions.push({\n title: 'true',\n description: `Show only rows where ${column.name} is true`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isTrue(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n 'true',\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'false',\n description: `Show only rows where ${column.name} is false`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isFalse(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n 'false',\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'is null',\n description: `Show only rows where ${column.name} is null`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isNull(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n 'null',\n operator\n )\n );\n },\n order: 30,\n group: ContextActions.groups.low,\n });\n\n actions.push({\n title: 'is not null',\n description: `Show only rows where ${column.name} is not null`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isNull().not(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n '!null',\n operator\n )\n );\n },\n order: 40,\n group: ContextActions.groups.low,\n });\n\n return actions;\n }\n\n dateFilterActions(\n column: Column,\n valueText: string,\n previewValue: unknown,\n value: unknown,\n quickFilter?: QuickFilter | null,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n const { dh } = this;\n const filterValue = dh.FilterValue.ofNumber(value);\n\n let filter: FilterCondition | null = null;\n let filterText: string | null = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n const { model } = this.irisGrid.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n &quot;{previewValue}&quot;\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n actions.push({\n title: 'date is',\n description: `Show only rows where ${column.name} is ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().eq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `=${valueText}`,\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'date is not',\n description: `Show only rows where ${column.name} is not ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().notEq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `!=${valueText}`,\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'date is before',\n description: `Show only rows where ${column.name} is before ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().lessThan(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `<${valueText}`,\n operator\n )\n );\n },\n order: 30,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'date is before or equal',\n description: `Show only rows where ${column.name} is before or equal to ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().lessThanOrEqualTo(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `<=${valueText}`,\n operator\n )\n );\n },\n order: 40,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'date is after',\n description: `Show only rows where ${column.name} is greater than ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().greaterThan(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `>${valueText}`,\n operator\n )\n );\n },\n order: 50,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'date is after or equal',\n description: `Show only rows where ${column.name} is after or equal to ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().greaterThanOrEqualTo(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `>=${valueText}`,\n operator\n )\n );\n },\n order: 60,\n group: ContextActions.groups.low,\n });\n return actions;\n }\n\n emptyStringFilterActions(\n column: Column,\n quickFilter?: QuickFilter,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n const { dh } = this;\n const filterValue = dh.FilterValue.ofString('');\n let newQuickFilter:\n | {\n filter: null | FilterCondition | undefined;\n text: string | null;\n }\n | undefined\n | null = quickFilter;\n if (!newQuickFilter) {\n newQuickFilter = { filter: null, text: null };\n }\n const { filter, text: filterText } = newQuickFilter;\n const actions = [];\n const { model } = this.irisGrid.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n <i className=\"text-muted\">empty</i>\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n\n actions.push({\n title: 'is empty string',\n description: `Show only rows where ${column.name} is empty`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().eq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `=`,\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'is not empty string',\n description: `Show only rows where ${column.name} is not empty`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().notEq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `!=`,\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n\n return actions;\n }\n\n nullFilterActions(\n column: Column,\n quickFilter?: QuickFilter,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n let filter: FilterCondition | null = null;\n let filterText: string | null = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n const actions = [];\n const { model } = this.irisGrid.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n <i className=\"text-muted\">null</i>\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n actions.push({\n title: 'is null',\n description: `Show only rows where ${column.name} is null`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isNull(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n 'null',\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'is not null',\n description: `Show only rows where ${column.name} is not null`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isNull().not(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n '!null',\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n\n return actions;\n }\n\n sortByActions(\n column: Column,\n modelColumn: ModelIndex,\n columnSort: Sort | null\n ): ContextAction[] {\n const theme = this.irisGrid.getTheme();\n const { contextMenuSortIconColor } = theme;\n const sortActions = [\n {\n title: `${column.name} Ascending`,\n order: 10,\n action: () => {\n this.irisGrid.sortColumn(\n modelColumn,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending\n );\n },\n icon: this.checkColumnSort(\n columnSort,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending\n )\n ? vsRemove\n : undefined,\n iconColor: contextMenuSortIconColor,\n },\n {\n title: `${column.name} Descending`,\n order: 20,\n action: () => {\n this.irisGrid.sortColumn(\n modelColumn,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending\n );\n },\n icon: this.checkColumnSort(\n columnSort,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending\n )\n ? vsRemove\n : undefined,\n iconColor: contextMenuSortIconColor,\n },\n {\n title: `Remove Sort`,\n order: 50,\n action: () => {\n this.irisGrid.sortColumn(\n modelColumn,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.none,\n false,\n true\n );\n },\n disabled: !columnSort,\n },\n ];\n if (TableUtils.isNumberType(column.type)) {\n sortActions.push({\n title: `ABS(${column.name}) Ascending`,\n order: 30,\n action: () => {\n this.irisGrid.sortColumn(\n modelColumn,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending,\n true\n );\n },\n icon: this.checkColumnSort(\n columnSort,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending,\n true\n )\n ? vsRemove\n : undefined,\n iconColor: contextMenuSortIconColor,\n });\n sortActions.push({\n title: `ABS(${column.name}) Descending`,\n order: 40,\n action: () => {\n this.irisGrid.sortColumn(\n modelColumn,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending,\n true\n );\n },\n icon: this.checkColumnSort(\n columnSort,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending,\n true\n )\n ? vsRemove\n : undefined,\n iconColor: contextMenuSortIconColor,\n });\n }\n return sortActions;\n }\n\n additionalSortActions(\n column: Column,\n columnIndex: ModelIndex\n ): ContextAction[] {\n const theme = this.irisGrid.getTheme();\n const { contextMenuSortIconColor } = theme;\n const additionalSortActions = [\n {\n title: 'Add Sort By',\n menuElement: (\n <div className=\"btn-context-menu menu-title\">\n <span className=\"icon\">\n <FontAwesomeIcon\n icon={vsRemove}\n style={{ color: contextMenuSortIconColor ?? undefined }}\n />\n </span>\n <span className=\"title\">Add Additional Sort</span>\n <span className=\"shortcut\">\n {ContextActionUtils.isMacPlatform() ? '⌘Click' : 'Ctrl+Click'}\n </span>\n </div>\n ),\n order: 1,\n },\n {\n title: `${column.name} Ascending`,\n order: 10,\n action: () => {\n this.irisGrid.sortColumn(\n columnIndex,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending,\n false,\n true\n );\n },\n },\n {\n title: `${column.name} Descending`,\n order: 20,\n action: () => {\n this.irisGrid.sortColumn(\n columnIndex,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending,\n false,\n true\n );\n },\n },\n ];\n if (TableUtils.isNumberType(column.type)) {\n additionalSortActions.push({\n title: `ABS(${column.name}) Ascending`,\n order: 30,\n action: () => {\n this.irisGrid.sortColumn(\n columnIndex,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending,\n true,\n true\n );\n },\n });\n additionalSortActions.push({\n title: `ABS(${column.name}) Descending`,\n order: 40,\n action: () => {\n this.irisGrid.sortColumn(\n columnIndex,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending,\n true,\n true\n );\n },\n });\n }\n return additionalSortActions;\n }\n\n checkColumnSort(\n columnSort?: Sort | null,\n direction: SortDirection = null,\n isAbs = false\n ): boolean {\n if (!columnSort) {\n return false;\n }\n return columnSort.direction === direction && columnSort.isAbs === isAbs;\n }\n}\n\nexport default IrisGridContextMenuHandler;\n"],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridContextMenuHandler.js","names":["React","FontAwesomeIcon","dhFilterFilled","vsRemove","vsCheck","vsFilter","debounce","ContextActions","ContextActionUtils","GLOBAL_SHORTCUTS","GridMouseHandler","GridRenderer","isEditableGridModel","isExpandableGridModel","TableColumnFormatter","DateTimeColumnFormatter","TableUtils","Log","assertNotNull","copyToClipboard","DateTimeFormatContextMenu","DecimalFormatContextMenu","IntegerFormatContextMenu","SHORTCUTS","jsxs","_jsxs","jsx","_jsx","log","module","DEBOUNCE_UPDATE_FORMAT","CONTEXT_MENU_DATE_FORMAT","IrisGridContextMenuHandler","getQuickFilterCondition","columnFilter","newColumnFilter","operator","and","or","getQuickFilterText","filterText","newFilterText","concat","getOperatorAsText","getRowOptionFormatted","command","cellValue","len","arguments","length","undefined","truncate","constructor","irisGrid","dh","_defineProperty","debouncedUpdateCustomFormat","handleFormatSelection","componentWillUnmount","flush","getHeaderActions","modelIndex","gridPoint","column","visibleIndex","model","props","columns","actions","metrics","reverseType","quickFilters","advancedFilters","searchFilter","state","theme","getTheme","filterIconColor","filterBarActiveColor","contextMenuSortIconColor","contextMenuReverseIconColor","modelSort","sort","columnSort","getSortForColumn","name","hasReverse","REVERSE_TYPE","NONE","userColumnWidths","isColumnHidden","values","some","columnWidth","isColumnFreezable","getColumnHeaderParentGroup","hasExpandableRows","isColumnFrozen","isColumnSortable","push","title","group","GROUP_HIDE_COLUMNS","action","hideColumnByVisibleIndex","disabled","unFreezeColumnByColumnName","freezeColumnByColumnName","order","showAllColumns","icon","iconColor","shortcut","TABLE","TOGGLE_QUICK_FILTER","GROUP_FILTER","toggleFilterBar","get","handleAdvancedMenuOpened","CLEAR_FILTERS","clearAllFilters","size","GROUP_SORT","sortByActions","additionalSortActions","sortColumn","COLUMN_SORT_DIRECTION","none","isReversible","REVERSE","reverse","POST_SORT","GROUP_COPY","shortcutText","isMacPlatform","_model$textForColumnH","textForColumnHeader","catch","e","error","isDateType","type","GROUP_FORMAT","dateFormatActions","isNumberType","_this$numberFormatAct","numberFormatActions","getCellActions","modelColumn","grid","columnIndex","row","rowIndex","canCopy","modelRow","getModelRow","sourceCell","sourceForCell","sourceColumn","sourceRow","value","valueForCell","valueText","textForCell","settings","dateFilterFormatter","timeZone","showTimeZone","showTSeparator","defaultDateTimeFormatString","previewFilterFormatter","isFilterable","filterMenu","nullFilterActions","groups","high","emptyStringFilterActions","isBooleanType","booleanFilterActions","isCharType","numberValueText","String","fromCharCode","numberFilterActions","dateValueText","format","previewValue","dateFilterActions","stringFilterActions","isRowExpandable","expandingColumn","cellText","isRowExpanded","GROUP_EXPAND_COLLAPSE","setRowExpanded","isExpandAllAvailable","expandAll","collapseAll","gotoRow","GOTO_ROW","GROUP_GOTO","toggleGotoRow","copyCell","GROUP_VIEW_CONTENTS","setState","showOverflowModal","overflowText","getValueForCell","getNumberValueEqualsFilter","filter","Number","POSITIVE_INFINITY","FilterCondition","invoke","greaterThan","FilterValue","ofNumber","NEGATIVE_INFINITY","lessThan","isNaN","filterValue","getFilterValueForNumberOrChar","eq","columnType","ofString","onContextMenu","event","y","columnHeaderDepth","getModelColumn","isFilterBarShown","selectedRanges","columnHeaderHeight","gridY","columnHeaderMaxDepth","clearFilterRange","getClearFilterRange","removeColumnFilter","Array","from","keys","col","COPY","copyRanges","isEditable","GROUP_EDIT","deleteRanges","gridWrapper","triggerMenu","clientX","clientY","_this","formatter","selectedFormat","getColumnFormat","formatOptions","getOptions","_loop","description","isSelected","i","getColumnIndexByName","_this2","isDecimalType","isIntegerType","_loop2","_objectSpread","TYPE_CONTEXT_CUSTOM","quickFilter","newQuickFilter","text","quickFilterValueText","escapeQuickTextFilter","menuElement","className","children","setQuickFilter","low","notEq","isNull","not","contains","isFinite","valueFilter","greaterThanOrEqualTo","lessThanOrEqualTo","isTrue","isFalse","sortActions","ascending","checkColumnSort","descending","style","color","direction","isAbs"],"sources":["../../src/mousehandlers/IrisGridContextMenuHandler.tsx"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhFilterFilled,\n vsRemove,\n vsCheck,\n vsFilter,\n IconDefinition,\n} from '@deephaven/icons';\nimport debounce from 'lodash.debounce';\nimport {\n ContextAction,\n ContextActions,\n ContextActionUtils,\n GLOBAL_SHORTCUTS,\n ResolvableContextAction,\n} from '@deephaven/components';\nimport {\n EventHandlerResult,\n Grid,\n GridMouseHandler,\n GridPoint,\n GridRenderer,\n isEditableGridModel,\n isExpandableGridModel,\n ModelIndex,\n} from '@deephaven/grid';\nimport type {\n Column,\n dh as DhType,\n FilterCondition,\n FilterValue,\n Sort,\n} from '@deephaven/jsapi-types';\nimport {\n TableColumnFormatter,\n DateTimeColumnFormatter,\n TableUtils,\n TableColumnFormat,\n IntegerColumnFormat,\n SortDirection,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport type { DebouncedFunc } from 'lodash';\nimport { assertNotNull, copyToClipboard } from '@deephaven/utils';\nimport {\n DateTimeFormatContextMenu,\n DecimalFormatContextMenu,\n IntegerFormatContextMenu,\n} from '../format-context-menus';\nimport './IrisGridContextMenuHandler.scss';\nimport SHORTCUTS from '../IrisGridShortcuts';\nimport IrisGrid from '../IrisGrid';\nimport { QuickFilter } from '../CommonTypes';\n\nconst log = Log.module('IrisGridContextMenuHandler');\n\nconst DEBOUNCE_UPDATE_FORMAT = 150;\nconst CONTEXT_MENU_DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.SSSSSSSSS';\n\n/**\n * Used to eat the mouse event in the bottom right corner of the scroll bar\n */\nclass IrisGridContextMenuHandler extends GridMouseHandler {\n static GROUP_EDIT = ContextActions.groups.high + 10;\n\n static GROUP_HIDE_COLUMNS = ContextActions.groups.high + 25;\n\n static GROUP_FILTER = ContextActions.groups.high + 50;\n\n static GROUP_EXPAND_COLLAPSE = ContextActions.groups.high + 55;\n\n static GROUP_GOTO = ContextActions.groups.high + 60;\n\n static GROUP_SORT = ContextActions.groups.high + 75;\n\n static GROUP_COPY = ContextActions.groups.high + 100;\n\n static GROUP_FORMAT = ContextActions.groups.high + 150;\n\n static GROUP_VIEW_CONTENTS = ContextActions.groups.high + 175;\n\n static COLUMN_SORT_DIRECTION = {\n ascending: 'ASC',\n descending: 'DESC',\n none: null,\n } as const;\n\n /**\n * Get filter condition for quick filter and combines with a new filter using the operator specified,\n * returns new filter if no operator supplied.\n * @param columnFilter\n * @param newColumnFilter\n * @param operator\n */\n static getQuickFilterCondition(\n columnFilter: FilterCondition | null | undefined,\n newColumnFilter: FilterCondition,\n operator?: '&&' | '||' | null\n ): FilterCondition {\n if (columnFilter && operator === '&&') {\n return columnFilter.and(newColumnFilter);\n }\n if (columnFilter && operator === '||') {\n return columnFilter.or(newColumnFilter);\n }\n return newColumnFilter;\n }\n\n /**\n * combines filter text with operator if declared\n * @param filterText\n * @param newFilterText\n * @param operator\n */\n static getQuickFilterText(\n filterText: string | null | undefined,\n newFilterText: string,\n operator?: '&&' | '||' | null\n ): string {\n return operator && filterText != null\n ? `${filterText} ${operator} ${newFilterText}`\n : newFilterText;\n }\n\n /**\n * Converts operator to text string,\n */\n static getOperatorAsText(operator: '&&' | '||'): 'And' | 'Or' {\n return operator === '&&' ? 'And' : 'Or';\n }\n\n static getRowOptionFormatted(\n command: string,\n cellValue: string,\n len = 30\n ): string {\n return `${command} \"${GridRenderer.truncate(\n cellValue,\n len - command.length - 3\n )}\"`;\n }\n\n irisGrid: IrisGrid;\n\n debouncedUpdateCustomFormat: DebouncedFunc<\n (modelIndex: number, selectedFormat: TableColumnFormat | null) => void\n >;\n\n constructor(irisGrid: IrisGrid, dh: DhType) {\n super();\n\n this.debouncedUpdateCustomFormat = debounce(\n irisGrid.handleFormatSelection,\n DEBOUNCE_UPDATE_FORMAT\n );\n\n this.dh = dh;\n this.irisGrid = irisGrid;\n }\n\n componentWillUnmount(): void {\n this.debouncedUpdateCustomFormat.flush();\n }\n\n dh: DhType;\n\n getHeaderActions(\n modelIndex: ModelIndex,\n gridPoint: GridPoint\n ): ContextAction[] {\n const { irisGrid } = this;\n const { column: visibleIndex } = gridPoint;\n assertNotNull(visibleIndex);\n const { model } = irisGrid.props;\n const { columns } = model;\n const column = columns[modelIndex];\n\n const actions = [] as ContextAction[];\n\n const {\n metrics,\n reverseType,\n quickFilters,\n advancedFilters,\n searchFilter,\n } = irisGrid.state;\n const theme = irisGrid.getTheme();\n assertNotNull(metrics);\n const {\n filterIconColor,\n filterBarActiveColor,\n contextMenuSortIconColor,\n contextMenuReverseIconColor,\n } = theme;\n\n const modelSort = model.sort;\n const columnSort = TableUtils.getSortForColumn(modelSort, column.name);\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n const { userColumnWidths } = metrics;\n const isColumnHidden = [...userColumnWidths.values()].some(\n columnWidth => columnWidth === 0\n );\n const isColumnFreezable =\n model.getColumnHeaderParentGroup(modelIndex, 0) === undefined &&\n !(isExpandableGridModel(model) && model.hasExpandableRows);\n const isColumnFrozen = model.isColumnFrozen(modelIndex);\n const isColumnSortable = model.isColumnSortable(modelIndex);\n actions.push({\n title: 'Hide Column',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.hideColumnByVisibleIndex(visibleIndex);\n },\n });\n actions.push({\n title: isColumnFrozen ? 'Unfreeze Column' : 'Freeze Column',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n disabled: !isColumnFreezable,\n action: () => {\n if (isColumnFrozen) {\n this.irisGrid.unFreezeColumnByColumnName(column.name);\n } else {\n this.irisGrid.freezeColumnByColumnName(column.name);\n }\n },\n order: 10,\n });\n actions.push({\n title: 'Show All Columns',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.showAllColumns();\n },\n disabled: !isColumnHidden,\n });\n actions.push({\n title: 'Quick Filters',\n icon: vsRemove,\n iconColor: filterBarActiveColor,\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 10,\n action: () => {\n this.irisGrid.toggleFilterBar(visibleIndex);\n },\n });\n actions.push({\n title: 'Advanced Filters',\n icon: advancedFilters.get(modelIndex) ? dhFilterFilled : vsFilter,\n iconColor: filterIconColor,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 20,\n action: () => {\n this.irisGrid.handleAdvancedMenuOpened(visibleIndex);\n },\n });\n actions.push({\n title: 'Clear Table Filters',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 40,\n // this just displays the shortcut, the actual listener is in irisgrid handleKeyDown\n shortcut: SHORTCUTS.TABLE.CLEAR_FILTERS,\n action: () => {\n this.irisGrid.clearAllFilters();\n },\n disabled: !(\n quickFilters.size > 0 ||\n advancedFilters.size > 0 ||\n searchFilter != null\n ),\n });\n actions.push({\n title: 'Sort by',\n icon: vsRemove,\n iconColor: contextMenuSortIconColor,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 10,\n actions: this.sortByActions(column, modelIndex, columnSort),\n disabled: !isColumnSortable,\n });\n actions.push({\n title: 'Add Additional Sort',\n /**\n * disable conditions:\n * 1. table is sorted only by this column\n * 2. table is only reversed\n * 3. 1 & 2 combined\n * 4. table has no sort\n * reverse is a type of sort, so needs to be accounted for in exclusions\n * */\n disabled:\n (columnSort && modelSort.length === 1) ||\n (hasReverse && modelSort.length === 1) ||\n (columnSort && hasReverse && modelSort.length === 2) ||\n modelSort.length === 0 ||\n !isColumnSortable,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 20,\n actions: this.additionalSortActions(column, modelIndex),\n });\n actions.push({\n title: 'Clear Table Sorting',\n disabled:\n // reverse is a type of sort, but special and needs to be exluded despite being part of model.sort\n modelSort.length === 0 || (hasReverse && modelSort.length === 1),\n group: IrisGridContextMenuHandler.GROUP_SORT,\n action: () => {\n this.irisGrid.sortColumn(\n visibleIndex,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.none\n );\n },\n order: 30,\n });\n actions.push({\n title:\n reverseType === TableUtils.REVERSE_TYPE.NONE\n ? 'Reverse Table'\n : 'Clear Reverse Table',\n icon: vsRemove,\n iconColor: contextMenuReverseIconColor,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 40,\n disabled: !model.isReversible,\n // this just displays the shortcut, the actual listener is in irisgrid handleKeyDown\n shortcut: SHORTCUTS.TABLE.REVERSE,\n action: () => {\n if (reverseType === TableUtils.REVERSE_TYPE.NONE) {\n this.irisGrid.reverse(TableUtils.REVERSE_TYPE.POST_SORT);\n } else {\n this.irisGrid.reverse(TableUtils.REVERSE_TYPE.NONE);\n }\n },\n });\n actions.push({\n title: 'Copy Column Name',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n shortcutText: ContextActionUtils.isMacPlatform() ? '⌥Click' : 'Alt+Click',\n action: () => {\n copyToClipboard(model.textForColumnHeader(modelIndex) ?? '').catch(e =>\n log.error('Unable to copy header', e)\n );\n },\n });\n\n if (TableUtils.isDateType(column.type)) {\n actions.push({\n title: 'Date/Time Format',\n group: IrisGridContextMenuHandler.GROUP_FORMAT,\n actions: this.dateFormatActions(column),\n });\n } else if (TableUtils.isNumberType(column.type)) {\n actions.push({\n title: 'Number Format',\n group: IrisGridContextMenuHandler.GROUP_FORMAT,\n actions: this.numberFormatActions(column) ?? undefined,\n });\n }\n return actions;\n }\n\n getCellActions(\n modelColumn: ModelIndex,\n grid: Grid,\n gridPoint: GridPoint\n ): ContextAction[] {\n const { dh, irisGrid } = this;\n const { column: columnIndex, row: rowIndex } = gridPoint;\n const { model, canCopy } = irisGrid.props;\n const { columns } = model;\n const modelRow = irisGrid.getModelRow(rowIndex);\n assertNotNull(modelRow);\n const sourceCell = model.sourceForCell(modelColumn, modelRow);\n const { column: sourceColumn, row: sourceRow } = sourceCell;\n const value = model.valueForCell(sourceColumn, sourceRow);\n\n const valueText = model.textForCell(sourceColumn, sourceRow);\n const column = columns[sourceColumn];\n\n const actions = [] as ContextAction[];\n\n const { quickFilters } = irisGrid.state;\n const theme = irisGrid.getTheme();\n const { filterIconColor } = theme;\n const { settings } = irisGrid.props;\n\n const dateFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone: settings?.timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: CONTEXT_MENU_DATE_FORMAT,\n });\n const previewFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone: settings?.timeZone,\n showTimeZone: settings?.showTimeZone,\n showTSeparator: settings?.showTSeparator,\n defaultDateTimeFormatString: CONTEXT_MENU_DATE_FORMAT,\n });\n\n if (column == null || rowIndex == null) return actions;\n\n // grid data area context menu options\n if (model.isFilterable(sourceColumn)) {\n // cell data area contextmenu options\n const filterMenu = {\n title: 'Filter by Value',\n icon: vsRemove,\n iconColor: filterIconColor,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 10,\n actions: [],\n } as {\n title: string;\n icon: IconDefinition;\n iconColor: string;\n group: number;\n order: number;\n actions: ContextAction[];\n };\n\n if (value == null) {\n // null gets a special menu\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.nullFilterActions(\n column,\n quickFilters.get(sourceColumn),\n '&&'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(...this.nullFilterActions(column));\n } else if (value === '') {\n // empty string gets a special menu\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n\n actions: this.emptyStringFilterActions(\n column,\n quickFilters.get(sourceColumn),\n '&&'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(...this.emptyStringFilterActions(column));\n } else if (TableUtils.isBooleanType(column.type)) {\n // boolean should have OR condition, and handles it's own null menu options\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'Or',\n actions: this.booleanFilterActions(\n column,\n valueText,\n quickFilters.get(sourceColumn),\n '||'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(\n ...this.booleanFilterActions(column, valueText)\n );\n } else if (\n TableUtils.isNumberType(column.type) ||\n TableUtils.isCharType(column.type)\n ) {\n // Chars get treated like numbers in terms of which filters are available\n assertNotNull(sourceColumn);\n // We want to show the full unformatted value if it's a number, so user knows which value they are matching\n // If it's a Char we just show the char\n const numberValueText = TableUtils.isCharType(column.type)\n ? String.fromCharCode(value as number)\n : `${value}`;\n\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.numberFilterActions(\n column,\n numberValueText,\n value,\n quickFilters.get(sourceColumn),\n '&&'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(\n ...this.numberFilterActions(\n column,\n numberValueText,\n value,\n quickFilters.get(sourceColumn)\n )\n );\n } else if (TableUtils.isDateType(column.type)) {\n const dateValueText = dateFilterFormatter.format(value as Date);\n const previewValue = previewFilterFormatter.format(value as Date);\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.dateFilterActions(\n column,\n dateValueText,\n previewValue,\n value,\n quickFilters.get(sourceColumn),\n '&&'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(\n ...this.dateFilterActions(\n column,\n dateValueText,\n previewValue,\n value,\n quickFilters.get(sourceColumn)\n )\n );\n } else {\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n\n actions: this.stringFilterActions(\n column,\n valueText,\n value,\n quickFilters.get(sourceColumn),\n '&&'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(\n ...this.stringFilterActions(column, valueText, value)\n );\n }\n\n if (filterMenu.actions != null && filterMenu.actions.length > 0) {\n actions.push(filterMenu);\n }\n }\n\n // Expand/Collapse options\n if (isExpandableGridModel(model) && model.isRowExpandable(sourceRow)) {\n // If there are grouped columns, then it is a rollup\n // The first column will be the \"group\" column with the value that should be expanded\n const expandingColumn = 0;\n const cellValue = model.valueForCell(expandingColumn, sourceRow);\n const cellText =\n cellValue == null\n ? 'null'\n : model.textForCell(expandingColumn, sourceRow);\n\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted(\n model.isRowExpanded(sourceRow) ? 'Collapse' : 'Expand',\n cellText\n ),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 10,\n action: () => {\n model.setRowExpanded(sourceRow, !model.isRowExpanded(sourceRow));\n },\n });\n\n if (model.isExpandAllAvailable === true) {\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted(\n 'Expand All in',\n cellText\n ),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 20,\n action: () => {\n model.setRowExpanded(sourceRow, true, true);\n },\n });\n }\n }\n\n if (\n isExpandableGridModel(model) &&\n model.hasExpandableRows &&\n model.isExpandAllAvailable === true\n ) {\n actions.push({\n title: 'Expand Entire Table',\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 30,\n action: () => {\n model.expandAll();\n },\n });\n\n actions.push({\n title: 'Collapse Entire Table',\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 40,\n action: () => {\n model.collapseAll();\n },\n });\n }\n\n const gotoRow = {\n title: 'Go to',\n iconColor: filterIconColor,\n shortcut: SHORTCUTS.TABLE.GOTO_ROW,\n group: IrisGridContextMenuHandler.GROUP_GOTO,\n order: 10,\n action: () =>\n this.irisGrid.toggleGotoRow(`${rowIndex + 1}`, `${value}`, column.name),\n };\n actions.push(gotoRow);\n\n if (canCopy) {\n actions.push({\n title: 'Copy Cell',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n shortcutText: ContextActionUtils.isMacPlatform()\n ? '⌥Click'\n : 'Alt+Click',\n order: 10,\n action: () => {\n irisGrid.copyCell(columnIndex, rowIndex);\n },\n });\n\n actions.push({\n title: 'Copy Cell Unformatted',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n order: 20,\n action: () => {\n irisGrid.copyCell(columnIndex, rowIndex, true);\n },\n });\n }\n\n actions.push({\n title: 'View Cell Contents',\n group: IrisGridContextMenuHandler.GROUP_VIEW_CONTENTS,\n order: 10,\n action: () => {\n irisGrid.setState({\n showOverflowModal: true,\n overflowText: irisGrid.getValueForCell(\n columnIndex,\n rowIndex\n ) as string,\n });\n },\n });\n\n return actions;\n }\n\n /**\n * Gets an equality filter for the provided numeric value\n * @param column The column to make the filter for\n * @param value The value to get the equality filter for\n */\n getNumberValueEqualsFilter(column: Column, value: number): FilterCondition {\n const { dh } = this;\n const columnFilter = column.filter();\n if (value === Number.POSITIVE_INFINITY) {\n return dh.FilterCondition.invoke('isInf', columnFilter).and(\n columnFilter.greaterThan(dh.FilterValue.ofNumber(0))\n );\n }\n if (value === Number.NEGATIVE_INFINITY) {\n return dh.FilterCondition.invoke('isInf', columnFilter).and(\n columnFilter.lessThan(dh.FilterValue.ofNumber(0))\n );\n }\n if (Number.isNaN(value)) {\n return dh.FilterCondition.invoke('isNaN', columnFilter);\n }\n\n const filterValue = this.getFilterValueForNumberOrChar(column.type, value);\n return columnFilter.eq(filterValue);\n }\n\n getFilterValueForNumberOrChar(\n columnType: string,\n value: unknown\n ): FilterValue {\n const { dh } = this;\n return TableUtils.isCharType(columnType)\n ? dh.FilterValue.ofString(String.fromCharCode(value as number))\n : dh.FilterValue.ofNumber(value);\n }\n\n onContextMenu(\n gridPoint: GridPoint,\n grid: Grid,\n event: React.MouseEvent<Element, MouseEvent>\n ): EventHandlerResult {\n const { irisGrid } = this;\n const {\n y,\n column: columnIndex,\n row: rowIndex,\n columnHeaderDepth,\n } = gridPoint;\n const modelColumn = irisGrid.getModelColumn(columnIndex);\n const modelRow = irisGrid.getModelRow(rowIndex);\n\n const { model, canCopy } = irisGrid.props;\n const { columns } = model;\n\n const {\n metrics,\n isFilterBarShown,\n quickFilters,\n advancedFilters,\n selectedRanges,\n } = irisGrid.state;\n\n assertNotNull(metrics);\n\n const { columnHeaderHeight, gridY, columnHeaderMaxDepth } = metrics;\n\n const actions: ResolvableContextAction[] = [];\n\n if (modelColumn != null && modelRow != null) {\n const sourceCell = model.sourceForCell(modelColumn, modelRow ?? 0);\n const { column: sourceColumn, row: sourceRow } = sourceCell;\n const value = model.valueForCell(sourceColumn, sourceRow);\n const valueText = model.textForCell(sourceColumn, sourceRow);\n const column = columns[sourceColumn];\n\n const { onContextMenu } = irisGrid.props;\n\n if (column != null) {\n actions.push(\n ...onContextMenu({\n model,\n value,\n valueText,\n column,\n rowIndex,\n columnIndex,\n modelRow,\n modelColumn,\n })\n );\n }\n }\n\n if (modelColumn != null) {\n const clearFilterRange = model.getClearFilterRange(modelColumn);\n if (clearFilterRange != null && clearFilterRange.length > 0) {\n // Clear column filter should still be available after last row\n // And should be available in both header and body context menus\n actions.push({\n title:\n clearFilterRange[1] - clearFilterRange[0] > 0\n ? 'Clear Group Filter'\n : 'Clear Column Filter',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 30,\n action: () => {\n this.irisGrid.removeColumnFilter(clearFilterRange);\n },\n disabled:\n !Array.from(quickFilters.keys()).some(\n col => col >= clearFilterRange[0] && col <= clearFilterRange[1]\n ) &&\n !Array.from(advancedFilters.keys()).some(\n col => col >= clearFilterRange[0] && col <= clearFilterRange[1]\n ),\n });\n }\n }\n\n if (\n isFilterBarShown\n ? y <= gridY\n : y <= columnHeaderHeight * columnHeaderMaxDepth &&\n columnHeaderDepth === 0\n ) {\n // grid header context menu options\n if (modelColumn != null) {\n actions.push(...this.getHeaderActions(modelColumn, gridPoint));\n }\n } else {\n // grid body context menu options\n if (modelColumn != null && modelRow != null) {\n actions.push(...this.getCellActions(modelColumn, grid, gridPoint));\n }\n\n // blank space context menu options\n if (canCopy && selectedRanges.length > 0) {\n actions.push({\n title: 'Copy Selection',\n shortcut: GLOBAL_SHORTCUTS.COPY,\n group: IrisGridContextMenuHandler.GROUP_COPY,\n order: 30,\n action: () => {\n irisGrid.copyRanges(selectedRanges);\n },\n });\n\n actions.push({\n title: 'Copy Selection w/ Headers',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n order: 40,\n action: () => {\n irisGrid.copyRanges(selectedRanges, true);\n },\n });\n }\n\n if (\n isEditableGridModel(model) &&\n model.isEditable &&\n selectedRanges.length > 0\n ) {\n actions.push({\n title: 'Delete Selected Rows',\n group: IrisGridContextMenuHandler.GROUP_EDIT,\n order: 50,\n action: () => {\n this.irisGrid.deleteRanges(selectedRanges);\n },\n });\n }\n }\n\n if (actions.length === 0) {\n return false;\n }\n\n assertNotNull(irisGrid.gridWrapper);\n\n ContextActions.triggerMenu(\n irisGrid.gridWrapper,\n event.clientX,\n event.clientY,\n actions\n );\n return true;\n }\n\n dateFormatActions(column: Column): ContextAction[] {\n const { model } = this.irisGrid.props;\n const { formatter } = model;\n const selectedFormat = formatter.getColumnFormat(column.type, column.name);\n\n const formatOptions = DateTimeFormatContextMenu.getOptions(\n formatter,\n selectedFormat\n );\n\n const actions = [];\n\n for (let i = 0; i < formatOptions.length; i += 1) {\n const { description, format, group, isSelected, title } =\n formatOptions[i];\n actions.push({\n title,\n description,\n icon: isSelected ? vsCheck : undefined,\n group,\n order: i,\n action: () => {\n const modelIndex = model.getColumnIndexByName(column.name);\n assertNotNull(modelIndex);\n this.irisGrid.handleFormatSelection(modelIndex, format);\n },\n });\n }\n return actions;\n }\n\n numberFormatActions(column: Column): ContextAction[] | null {\n const { model } = this.irisGrid.props;\n const { formatter } = model;\n const { dh } = this;\n const selectedFormat = formatter.getColumnFormat(\n column.type,\n column.name\n ) as IntegerColumnFormat;\n let formatOptions;\n\n const columnIndex = model.getColumnIndexByName(column.name);\n if (TableUtils.isDecimalType(column.type)) {\n formatOptions = DecimalFormatContextMenu.getOptions(\n dh,\n selectedFormat,\n format => {\n assertNotNull(columnIndex);\n this.debouncedUpdateCustomFormat(columnIndex, format);\n }\n );\n } else if (TableUtils.isIntegerType(column.type)) {\n formatOptions = IntegerFormatContextMenu.getOptions(\n dh,\n selectedFormat,\n format => {\n assertNotNull(columnIndex);\n this.debouncedUpdateCustomFormat(columnIndex, format);\n }\n );\n } else {\n log.error('Invalid column type in numberFormatActions');\n return null;\n }\n\n const actions = [];\n\n for (let i = 0; i < formatOptions.length; i += 1) {\n const { format, isSelected } = formatOptions[i];\n actions.push({\n ...formatOptions[i],\n icon: isSelected ? vsCheck : undefined,\n order: i,\n action: () => {\n if (\n columnIndex === undefined &&\n format &&\n format.type === TableColumnFormatter.TYPE_CONTEXT_CUSTOM\n ) {\n return;\n }\n assertNotNull(columnIndex);\n this.irisGrid.handleFormatSelection(columnIndex, format);\n },\n });\n }\n return actions;\n }\n\n stringFilterActions(\n column: Column,\n valueText: string | null,\n value?: unknown,\n quickFilter?: QuickFilter,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n const { dh } = this;\n const filterValue = dh.FilterValue.ofString(value);\n let newQuickFilter:\n | {\n filter: null | FilterCondition | undefined;\n text: string | null;\n }\n | undefined\n | null = quickFilter;\n if (!newQuickFilter) {\n newQuickFilter = { filter: null, text: null };\n }\n const { filter, text: filterText } = newQuickFilter;\n const actions = [];\n const { model } = this.irisGrid.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n\n const quickFilterValueText: string | null =\n TableUtils.escapeQuickTextFilter(valueText);\n\n assertNotNull(columnIndex);\n\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n &quot;{valueText}&quot;\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n\n actions.push({\n title: 'text is exactly',\n description: `Show only rows where ${column.name} is ${value} (case sensitive)`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().eq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `${quickFilterValueText}`,\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'text is not exactly',\n description: `Show only rows where ${column.name} is not ${valueText} (case sensitive)`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().notEq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `!=${quickFilterValueText}`,\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: `text contains`,\n description: `Show only rows where ${column.name} contains ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column\n .filter()\n .isNull()\n .not()\n .and(column.filter().contains(filterValue)),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `~${quickFilterValueText}`,\n operator\n )\n );\n },\n order: 30,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'text does not contain',\n description: `Show only rows where ${column.name} does not contain ${value}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column\n .filter()\n .isNull()\n .or(column.filter().contains(filterValue).not()),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `!~${quickFilterValueText}`,\n operator\n )\n );\n },\n order: 40,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'text starts with',\n description: `Show only rows where ${column.name} starts with ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column\n .filter()\n .isNull()\n .not()\n .and(column.filter().invoke('startsWith', filterValue)),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `${quickFilterValueText}*`,\n operator\n )\n );\n },\n order: 50,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'text ends with',\n description: `Show only rows where ${column.name} ends with ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column\n .filter()\n .isNull()\n .not()\n .and(column.filter().invoke('endsWith', filterValue)),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `*${quickFilterValueText}`,\n operator\n )\n );\n },\n order: 60,\n group: ContextActions.groups.low,\n });\n return actions;\n }\n\n numberFilterActions(\n column: Column,\n valueText: string,\n value: unknown,\n quickFilter?: QuickFilter | null,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n const filterValue = this.getFilterValueForNumberOrChar(column.type, value);\n let filter: FilterCondition | null = null;\n let filterText: string | null = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n const actions = [];\n const isFinite =\n value !== Number.POSITIVE_INFINITY &&\n value !== Number.NEGATIVE_INFINITY &&\n !Number.isNaN(value);\n const { model } = this.irisGrid.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n &quot;{valueText}&quot;\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n actions.push({\n title: 'is equal to',\n description: `Show only rows where ${column.name} is ${valueText}`,\n action: () => {\n const valueFilter = this.getNumberValueEqualsFilter(\n column,\n value as number\n );\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n valueFilter,\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `=${valueText}`,\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'is not equal to',\n description: `Show only rows where ${column.name} is not ${valueText}`,\n action: () => {\n const valueFilter = this.getNumberValueEqualsFilter(\n column,\n value as number\n ).not();\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n valueFilter,\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `!=${valueText}`,\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n\n // IDS-6092 Less/greater than filters don't make sense for Infinite/NaN\n // 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\n // They do not work in Powell though, so disable them.\n if (isFinite && !TableUtils.isCharType(column.type)) {\n actions.push({\n title: 'greater than',\n description: `Show only rows where ${column.name} is greater than ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().greaterThan(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `>${valueText}`,\n operator\n )\n );\n },\n order: 30,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'greater than or equal to',\n description: `Show only rows where ${column.name} is greater than or equal to ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().greaterThanOrEqualTo(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `>=${valueText}`,\n operator\n )\n );\n },\n order: 40,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'less than',\n description: `Show only rows where ${column.name} is less than ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().lessThan(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `<${valueText}`,\n operator\n )\n );\n },\n order: 50,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'less than or equal to',\n description: `Show only rows where ${column.name} is less than or equal to ${valueText}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().lessThanOrEqualTo(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `<=${valueText}`,\n operator\n )\n );\n },\n order: 60,\n group: ContextActions.groups.low,\n });\n }\n return actions;\n }\n\n booleanFilterActions(\n column: Column,\n valueText: string | null,\n quickFilter?: QuickFilter | null,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n const actions: ContextAction[] = [];\n\n const { model } = this.irisGrid.props;\n const { filter, text: filterText } = quickFilter || {};\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n &quot;{valueText ?? 'null'}&quot;\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n\n actions.push({\n title: 'true',\n description: `Show only rows where ${column.name} is true`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isTrue(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n 'true',\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'false',\n description: `Show only rows where ${column.name} is false`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isFalse(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n 'false',\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'is null',\n description: `Show only rows where ${column.name} is null`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isNull(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n 'null',\n operator\n )\n );\n },\n order: 30,\n group: ContextActions.groups.low,\n });\n\n actions.push({\n title: 'is not null',\n description: `Show only rows where ${column.name} is not null`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isNull().not(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n '!null',\n operator\n )\n );\n },\n order: 40,\n group: ContextActions.groups.low,\n });\n\n return actions;\n }\n\n dateFilterActions(\n column: Column,\n valueText: string,\n previewValue: unknown,\n value: unknown,\n quickFilter?: QuickFilter | null,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n const { dh } = this;\n const filterValue = dh.FilterValue.ofNumber(value);\n\n let filter: FilterCondition | null = null;\n let filterText: string | null = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n const { model } = this.irisGrid.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n &quot;{previewValue}&quot;\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n actions.push({\n title: 'date is',\n description: `Show only rows where ${column.name} is ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().eq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `=${valueText}`,\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'date is not',\n description: `Show only rows where ${column.name} is not ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().notEq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `!=${valueText}`,\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'date is before',\n description: `Show only rows where ${column.name} is before ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().lessThan(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `<${valueText}`,\n operator\n )\n );\n },\n order: 30,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'date is before or equal',\n description: `Show only rows where ${column.name} is before or equal to ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().lessThanOrEqualTo(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `<=${valueText}`,\n operator\n )\n );\n },\n order: 40,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'date is after',\n description: `Show only rows where ${column.name} is greater than ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().greaterThan(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `>${valueText}`,\n operator\n )\n );\n },\n order: 50,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'date is after or equal',\n description: `Show only rows where ${column.name} is after or equal to ${previewValue}`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().greaterThanOrEqualTo(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `>=${valueText}`,\n operator\n )\n );\n },\n order: 60,\n group: ContextActions.groups.low,\n });\n return actions;\n }\n\n emptyStringFilterActions(\n column: Column,\n quickFilter?: QuickFilter,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n const { dh } = this;\n const filterValue = dh.FilterValue.ofString('');\n let newQuickFilter:\n | {\n filter: null | FilterCondition | undefined;\n text: string | null;\n }\n | undefined\n | null = quickFilter;\n if (!newQuickFilter) {\n newQuickFilter = { filter: null, text: null };\n }\n const { filter, text: filterText } = newQuickFilter;\n const actions = [];\n const { model } = this.irisGrid.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n <i className=\"text-muted\">empty</i>\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n\n actions.push({\n title: 'is empty string',\n description: `Show only rows where ${column.name} is empty`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().eq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `=`,\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'is not empty string',\n description: `Show only rows where ${column.name} is not empty`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().notEq(filterValue),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n `!=`,\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n\n return actions;\n }\n\n nullFilterActions(\n column: Column,\n quickFilter?: QuickFilter,\n operator?: '&&' | '||' | null\n ): ContextAction[] {\n let filter: FilterCondition | null = null;\n let filterText: string | null = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n const actions = [];\n const { model } = this.irisGrid.props;\n const columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n\n actions.push({\n menuElement: (\n <div className=\"iris-grid-filter-menu-item-value\">\n {operator\n ? IrisGridContextMenuHandler.getOperatorAsText(operator)\n : ''}{' '}\n <i className=\"text-muted\">null</i>\n </div>\n ),\n order: 1,\n group: ContextActions.groups.high,\n });\n actions.push({\n title: 'is null',\n description: `Show only rows where ${column.name} is null`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isNull(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n 'null',\n operator\n )\n );\n },\n order: 10,\n group: ContextActions.groups.low,\n });\n actions.push({\n title: 'is not null',\n description: `Show only rows where ${column.name} is not null`,\n action: () => {\n this.irisGrid.setQuickFilter(\n columnIndex,\n IrisGridContextMenuHandler.getQuickFilterCondition(\n filter,\n column.filter().isNull().not(),\n operator\n ),\n IrisGridContextMenuHandler.getQuickFilterText(\n filterText,\n '!null',\n operator\n )\n );\n },\n order: 20,\n group: ContextActions.groups.low,\n });\n\n return actions;\n }\n\n sortByActions(\n column: Column,\n modelColumn: ModelIndex,\n columnSort: Sort | null\n ): ContextAction[] {\n const theme = this.irisGrid.getTheme();\n const { contextMenuSortIconColor } = theme;\n const sortActions = [\n {\n title: `${column.name} Ascending`,\n order: 10,\n action: () => {\n this.irisGrid.sortColumn(\n modelColumn,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending\n );\n },\n icon: this.checkColumnSort(\n columnSort,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending\n )\n ? vsRemove\n : undefined,\n iconColor: contextMenuSortIconColor,\n },\n {\n title: `${column.name} Descending`,\n order: 20,\n action: () => {\n this.irisGrid.sortColumn(\n modelColumn,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending\n );\n },\n icon: this.checkColumnSort(\n columnSort,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending\n )\n ? vsRemove\n : undefined,\n iconColor: contextMenuSortIconColor,\n },\n {\n title: `Remove Sort`,\n order: 50,\n action: () => {\n this.irisGrid.sortColumn(\n modelColumn,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.none,\n false,\n true\n );\n },\n disabled: !columnSort,\n },\n ];\n if (TableUtils.isNumberType(column.type)) {\n sortActions.push({\n title: `ABS(${column.name}) Ascending`,\n order: 30,\n action: () => {\n this.irisGrid.sortColumn(\n modelColumn,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending,\n true\n );\n },\n icon: this.checkColumnSort(\n columnSort,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending,\n true\n )\n ? vsRemove\n : undefined,\n iconColor: contextMenuSortIconColor,\n });\n sortActions.push({\n title: `ABS(${column.name}) Descending`,\n order: 40,\n action: () => {\n this.irisGrid.sortColumn(\n modelColumn,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending,\n true\n );\n },\n icon: this.checkColumnSort(\n columnSort,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending,\n true\n )\n ? vsRemove\n : undefined,\n iconColor: contextMenuSortIconColor,\n });\n }\n return sortActions;\n }\n\n additionalSortActions(\n column: Column,\n columnIndex: ModelIndex\n ): ContextAction[] {\n const theme = this.irisGrid.getTheme();\n const { contextMenuSortIconColor } = theme;\n const additionalSortActions = [\n {\n title: 'Add Sort By',\n menuElement: (\n <div className=\"btn-context-menu menu-title\">\n <span className=\"icon\">\n <FontAwesomeIcon\n icon={vsRemove}\n style={{ color: contextMenuSortIconColor ?? undefined }}\n />\n </span>\n <span className=\"title\">Add Additional Sort</span>\n <span className=\"shortcut\">\n {ContextActionUtils.isMacPlatform() ? '⌘Click' : 'Ctrl+Click'}\n </span>\n </div>\n ),\n order: 1,\n },\n {\n title: `${column.name} Ascending`,\n order: 10,\n action: () => {\n this.irisGrid.sortColumn(\n columnIndex,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending,\n false,\n true\n );\n },\n },\n {\n title: `${column.name} Descending`,\n order: 20,\n action: () => {\n this.irisGrid.sortColumn(\n columnIndex,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending,\n false,\n true\n );\n },\n },\n ];\n if (TableUtils.isNumberType(column.type)) {\n additionalSortActions.push({\n title: `ABS(${column.name}) Ascending`,\n order: 30,\n action: () => {\n this.irisGrid.sortColumn(\n columnIndex,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending,\n true,\n true\n );\n },\n });\n additionalSortActions.push({\n title: `ABS(${column.name}) Descending`,\n order: 40,\n action: () => {\n this.irisGrid.sortColumn(\n columnIndex,\n IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending,\n true,\n true\n );\n },\n });\n }\n return additionalSortActions;\n }\n\n checkColumnSort(\n columnSort?: Sort | null,\n direction: SortDirection = null,\n isAbs = false\n ): boolean {\n if (!columnSort) {\n return false;\n }\n return columnSort.direction === direction && columnSort.isAbs === isAbs;\n }\n}\n\nexport default IrisGridContextMenuHandler;\n"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Grid, GridMouseHandler, GridPoint, EventHandlerResult, GridMouseEvent } from '@deephaven/grid';
2
+ import IrisGrid from '../IrisGrid';
3
+ declare class IrisGridCopyCellMouseHandler extends GridMouseHandler {
4
+ private irisGrid;
5
+ constructor(irisGrid: IrisGrid);
6
+ onClick(gridPoint: GridPoint, grid: Grid, event: GridMouseEvent): EventHandlerResult;
7
+ onMove(gridPoint: GridPoint, _grid: Grid, event: GridMouseEvent): EventHandlerResult;
8
+ }
9
+ export default IrisGridCopyCellMouseHandler;
10
+ //# sourceMappingURL=IrisGridCopyCellMouseHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IrisGridCopyCellMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridCopyCellMouseHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,gBAAgB,EAChB,SAAS,EACT,kBAAkB,EAClB,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,QAAQ,MAAM,aAAa,CAAC;AAEnC,cAAM,4BAA6B,SAAQ,gBAAgB;IACzD,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,EAAE,QAAQ;IAO9B,OAAO,CACL,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,cAAc,GACpB,kBAAkB;IAsBrB,MAAM,CACJ,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,IAAI,EACX,KAAK,EAAE,cAAc,GACpB,kBAAkB;CAatB;AACD,eAAe,4BAA4B,CAAC"}
@@ -0,0 +1,34 @@
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
+ import { GridMouseHandler, GridRange } from '@deephaven/grid';
5
+ import { ContextActionUtils } from '@deephaven/components';
6
+ class IrisGridCopyCellMouseHandler extends GridMouseHandler {
7
+ constructor(irisGrid) {
8
+ super(250);
9
+ _defineProperty(this, "irisGrid", void 0);
10
+ this.irisGrid = irisGrid;
11
+ this.cursor = null;
12
+ }
13
+ onClick(gridPoint, grid, event) {
14
+ if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey) {
15
+ this.cursor = null;
16
+ if (gridPoint.columnHeaderDepth !== undefined) {
17
+ this.irisGrid.copyColumnHeader(gridPoint.column, gridPoint.columnHeaderDepth);
18
+ } else {
19
+ this.irisGrid.copyRanges([GridRange.makeCell(gridPoint.column, gridPoint.row)]);
20
+ }
21
+ return true;
22
+ }
23
+ return false;
24
+ }
25
+ onMove(gridPoint, _grid, event) {
26
+ if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey && gridPoint.column != null && (gridPoint.row != null || gridPoint.columnHeaderDepth != null)) {
27
+ this.cursor = this.irisGrid.props.copyCursor;
28
+ return true;
29
+ }
30
+ return false;
31
+ }
32
+ }
33
+ export default IrisGridCopyCellMouseHandler;
34
+ //# sourceMappingURL=IrisGridCopyCellMouseHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IrisGridCopyCellMouseHandler.js","names":["GridMouseHandler","GridRange","ContextActionUtils","IrisGridCopyCellMouseHandler","constructor","irisGrid","_defineProperty","cursor","onClick","gridPoint","grid","event","altKey","isModifierKeyDown","shiftKey","columnHeaderDepth","undefined","copyColumnHeader","column","copyRanges","makeCell","row","onMove","_grid","props","copyCursor"],"sources":["../../src/mousehandlers/IrisGridCopyCellMouseHandler.ts"],"sourcesContent":["import {\n Grid,\n GridMouseHandler,\n GridPoint,\n EventHandlerResult,\n GridMouseEvent,\n GridRange,\n} from '@deephaven/grid';\nimport { ContextActionUtils } from '@deephaven/components';\nimport IrisGrid from '../IrisGrid';\n\nclass IrisGridCopyCellMouseHandler extends GridMouseHandler {\n private irisGrid: IrisGrid;\n\n constructor(irisGrid: IrisGrid) {\n super(250);\n\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n\n onClick(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n if (\n event.altKey &&\n !ContextActionUtils.isModifierKeyDown(event) &&\n !event.shiftKey\n ) {\n this.cursor = null;\n if (gridPoint.columnHeaderDepth !== undefined) {\n this.irisGrid.copyColumnHeader(\n gridPoint.column,\n gridPoint.columnHeaderDepth\n );\n } else {\n this.irisGrid.copyRanges([\n GridRange.makeCell(gridPoint.column, gridPoint.row),\n ]);\n }\n return true;\n }\n return false;\n }\n\n onMove(\n gridPoint: GridPoint,\n _grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n if (\n event.altKey &&\n !ContextActionUtils.isModifierKeyDown(event) &&\n !event.shiftKey &&\n gridPoint.column != null &&\n (gridPoint.row != null || gridPoint.columnHeaderDepth != null)\n ) {\n this.cursor = this.irisGrid.props.copyCursor;\n return true;\n }\n return false;\n }\n}\nexport default IrisGridCopyCellMouseHandler;\n"],"mappings":";;;AAAA,SAEEA,gBAAgB,EAIhBC,SAAS,QACJ,iBAAiB;AACxB,SAASC,kBAAkB,QAAQ,uBAAuB;AAG1D,MAAMC,4BAA4B,SAASH,gBAAgB,CAAC;EAG1DI,WAAWA,CAACC,QAAkB,EAAE;IAC9B,KAAK,CAAC,GAAG,CAAC;IAACC,eAAA;IAEX,IAAI,CAACD,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACE,MAAM,GAAG,IAAI;EACpB;EAEAC,OAAOA,CACLC,SAAoB,EACpBC,IAAU,EACVC,KAAqB,EACD;IACpB,IACEA,KAAK,CAACC,MAAM,IACZ,CAACV,kBAAkB,CAACW,iBAAiB,CAACF,KAAK,CAAC,IAC5C,CAACA,KAAK,CAACG,QAAQ,EACf;MACA,IAAI,CAACP,MAAM,GAAG,IAAI;MAClB,IAAIE,SAAS,CAACM,iBAAiB,KAAKC,SAAS,EAAE;QAC7C,IAAI,CAACX,QAAQ,CAACY,gBAAgB,CAC5BR,SAAS,CAACS,MAAM,EAChBT,SAAS,CAACM,iBACZ,CAAC;MACH,CAAC,MAAM;QACL,IAAI,CAACV,QAAQ,CAACc,UAAU,CAAC,CACvBlB,SAAS,CAACmB,QAAQ,CAACX,SAAS,CAACS,MAAM,EAAET,SAAS,CAACY,GAAG,CAAC,CACpD,CAAC;MACJ;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAC,MAAMA,CACJb,SAAoB,EACpBc,KAAW,EACXZ,KAAqB,EACD;IACpB,IACEA,KAAK,CAACC,MAAM,IACZ,CAACV,kBAAkB,CAACW,iBAAiB,CAACF,KAAK,CAAC,IAC5C,CAACA,KAAK,CAACG,QAAQ,IACfL,SAAS,CAACS,MAAM,IAAI,IAAI,KACvBT,SAAS,CAACY,GAAG,IAAI,IAAI,IAAIZ,SAAS,CAACM,iBAAiB,IAAI,IAAI,CAAC,EAC9D;MACA,IAAI,CAACR,MAAM,GAAG,IAAI,CAACF,QAAQ,CAACmB,KAAK,CAACC,UAAU;MAC5C,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF;AACA,eAAetB,4BAA4B"}