@deephaven/iris-grid 0.41.2-beta.3 → 0.41.2-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts +2 -2
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +12 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +1 -0
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +73 -7
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/package.json +16 -16
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { PureComponent, ReactElement } from 'react';
|
|
2
2
|
import type { dh as DhType, FilterCondition, Table } from '@deephaven/jsapi-types';
|
|
3
3
|
import { Formatter } from '@deephaven/jsapi-utils';
|
|
4
4
|
import { SelectValueList, SelectItem } from '@deephaven/components';
|
|
@@ -50,7 +50,7 @@ declare class AdvancedFilterCreatorSelectValueList<T = unknown> extends PureComp
|
|
|
50
50
|
resetViewport(): void;
|
|
51
51
|
updateItemSelection(): void;
|
|
52
52
|
updateViewport(top: number, bottom: number, isLoading?: boolean): void;
|
|
53
|
-
render():
|
|
53
|
+
render(): ReactElement;
|
|
54
54
|
}
|
|
55
55
|
export default AdvancedFilterCreatorSelectValueList;
|
|
56
56
|
//# sourceMappingURL=AdvancedFilterCreatorSelectValueList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreatorSelectValueList.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"names":[],"mappings":"AACA,
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreatorSelectValueList.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"names":[],"mappings":"AACA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EACV,EAAE,IAAI,MAAM,EACZ,eAAe,EACf,KAAK,EACN,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAEL,eAAe,EACf,UAAU,EACX,MAAM,uBAAuB,CAAC;AAK/B,UAAU,yCAAyC,CAAC,CAAC;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;IAClE,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,UAAU,yCAAyC,CAAC,CAAC;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AACD;;;GAGG;AACH,cAAM,oCAAoC,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,aAAa,CAC3E,yCAAyC,CAAC,CAAC,CAAC,EAC5C,yCAAyC,CAAC,CAAC,CAAC,CAC7C;IACC,MAAM,CAAC,YAAY;;;wBAGH,IAAI;MAClB;IAEF;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM;gBAkB7C,KAAK,EAAE,yCAAyC,CAAC,CAAC,CAAC;IAsB/D,iBAAiB,IAAI,IAAI;IAKzB,kBAAkB,CAChB,SAAS,EAAE,yCAAyC,CAAC,CAAC,CAAC,GACtD,IAAI;IAsBP,oBAAoB,IAAI,IAAI;IAK5B,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAEhC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAiC/C,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIvD,qBAAqB,IAAI,IAAI;IAI7B,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAqC3C,eAAe,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAalC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIlC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAOjC,aAAa,IAAI,IAAI;IAMrB,mBAAmB,IAAI,IAAI;IAc3B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,IAAI;IAkBpE,MAAM,IAAI,YAAY;CA6BvB;AAED,eAAe,oCAAoC,CAAC"}
|
|
@@ -146,7 +146,18 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
|
|
|
146
146
|
for (var r = 0; r < data.rows.length; r += 1) {
|
|
147
147
|
var row = data.rows[r];
|
|
148
148
|
var value = row.get(column);
|
|
149
|
-
var displayValue =
|
|
149
|
+
var displayValue = void 0;
|
|
150
|
+
if (value == null) {
|
|
151
|
+
displayValue = /*#__PURE__*/React.createElement("i", {
|
|
152
|
+
className: "text-muted"
|
|
153
|
+
}, "null");
|
|
154
|
+
} else if (value === '') {
|
|
155
|
+
displayValue = /*#__PURE__*/React.createElement("i", {
|
|
156
|
+
className: "text-muted"
|
|
157
|
+
}, "empty");
|
|
158
|
+
} else {
|
|
159
|
+
displayValue = formatter.getFormattedString(value, column.type, column.name);
|
|
160
|
+
}
|
|
150
161
|
var isSelected = this.isValueSelected(value);
|
|
151
162
|
items.push({
|
|
152
163
|
displayValue,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreatorSelectValueList.js","names":["React","PureComponent","CSSTransition","LoadingSpinner","SelectValueList","Log","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","selectedValues","dh","list","state","itemCount","items","offset","isLoading","componentDidMount","table","startListening","componentDidUpdate","prevProps","filters","invertSelection","stopListening","resetViewport","setState","applyFilter","componentWillUnmount","itemIndex","selectedIndex","splice","push","isSelected","visibleItemIndex","onChange","top","bottom","updateViewport","updateItemSelection","event","formatter","data","detail","column","columns","r","rows","row","get","displayValue","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","viewportSize","Math","max","setViewport","render","undefined"],"sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport type {\n dh as DhType,\n FilterCondition,\n Table,\n} from '@deephaven/jsapi-types';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport {\n LoadingSpinner,\n SelectValueList,\n SelectItem,\n} from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\ninterface AdvancedFilterCreatorSelectValueListProps<T> {\n dh: DhType;\n selectedValues: T[];\n table?: Table;\n filters: FilterCondition[];\n invertSelection: boolean;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterCreatorSelectValueListState<T> {\n itemCount: number;\n items: SelectItem<T>[];\n offset: number;\n selectedValues: T[];\n isLoading: boolean;\n}\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueListProps<T>,\n AdvancedFilterCreatorSelectValueListState<T>\n> {\n static defaultProps = {\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n };\n\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param value The value to search for\n * @param values The array of values to search within\n */\n static indexOf(value: unknown, values: unknown[]): number {\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n if (\n v === value ||\n (v != null &&\n v.valueOf != null &&\n value != null &&\n value.valueOf != null &&\n v.valueOf() === value.valueOf())\n ) {\n return i;\n }\n }\n\n return -1;\n }\n\n constructor(props: AdvancedFilterCreatorSelectValueListProps<T>) {\n super(props);\n\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n\n const { selectedValues, dh } = this.props;\n\n this.dh = dh;\n this.list = null;\n\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n const { table } = this.props;\n if (table) this.startListening(table);\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueListProps<T>\n ): void {\n const { filters, invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n if (prevProps.table) this.stopListening(prevProps.table);\n if (table) this.startListening(table);\n this.resetViewport();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ selectedValues: [] }, this.handleSelectionUpdate);\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues }, this.handleSelectionUpdate);\n }\n\n if (prevProps.filters !== filters) {\n table?.applyFilter(filters);\n this.resetViewport();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.props;\n if (table) this.stopListening(table);\n }\n\n dh: DhType;\n\n list: SelectValueList<T> | null;\n\n handleSelect(itemIndex: number, value: T): void {\n const { invertSelection } = this.props;\n let { selectedValues } = this.state;\n selectedValues = [...selectedValues];\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n\n let isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n\n const { offset } = this.state;\n let { items } = this.state;\n items = [...items];\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n\n this.setState({ items, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleViewportChange(top: number, bottom: number): void {\n this.updateViewport(top, bottom);\n }\n\n handleSelectionUpdate(): void {\n this.updateItemSelection();\n }\n\n handleTableUpdate(event: CustomEvent): void {\n const { table, formatter } = this.props;\n if (!table) return;\n\n const data = event.detail;\n const { offset } = data;\n const items = [];\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n const displayValue = formatter.getFormattedString(\n value,\n column.type,\n column.name\n );\n const isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected,\n });\n }\n\n log.debug2('Received table update:', offset, items.length);\n\n const itemCount = table.size;\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n isValueSelected(value: T): boolean {\n const { invertSelection } = this.props;\n const { selectedValues } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n\n startListening(table: Table): void {\n table.addEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n stopListening(table: Table): void {\n table.removeEventListener(\n this.dh.Table.EVENT_UPDATED,\n this.handleTableUpdate\n );\n }\n\n resetViewport(): void {\n if (this.list && this.list.topRow != null && this.list.bottomRow != null) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n\n updateItemSelection(): void {\n let { items } = this.state;\n\n items = [...items];\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value } = item;\n item.isSelected = this.isValueSelected(value);\n }\n\n this.setState({ items });\n }\n\n updateViewport(top: number, bottom: number, isLoading = false): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n if (isLoading) {\n this.setState({ isLoading: true });\n }\n\n const viewportSize = bottom - top + 1;\n const topRow = Math.max(0, top - viewportSize * 3);\n const bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow);\n }\n\n render(): React.ReactElement {\n const { offset, isLoading, items, itemCount } = this.state;\n\n return (\n <div className=\"select-value-list-wrapper\">\n <SelectValueList\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n ref={list => {\n this.list = list;\n }}\n />\n <CSSTransition\n in={isLoading}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </CSSTransition>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreatorSelectValueList.js","names":["React","PureComponent","CSSTransition","LoadingSpinner","SelectValueList","Log","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","selectedValues","dh","list","state","itemCount","items","offset","isLoading","componentDidMount","table","startListening","componentDidUpdate","prevProps","filters","invertSelection","stopListening","resetViewport","setState","applyFilter","componentWillUnmount","itemIndex","selectedIndex","splice","push","isSelected","visibleItemIndex","onChange","top","bottom","updateViewport","updateItemSelection","event","formatter","data","detail","column","columns","r","rows","row","get","displayValue","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","viewportSize","Math","max","setViewport","render","undefined"],"sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent, ReactElement } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport type {\n dh as DhType,\n FilterCondition,\n Table,\n} from '@deephaven/jsapi-types';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport {\n LoadingSpinner,\n SelectValueList,\n SelectItem,\n} from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\ninterface AdvancedFilterCreatorSelectValueListProps<T> {\n dh: DhType;\n selectedValues: T[];\n table?: Table;\n filters: FilterCondition[];\n invertSelection: boolean;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterCreatorSelectValueListState<T> {\n itemCount: number;\n items: SelectItem<T>[];\n offset: number;\n selectedValues: T[];\n isLoading: boolean;\n}\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueListProps<T>,\n AdvancedFilterCreatorSelectValueListState<T>\n> {\n static defaultProps = {\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n };\n\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param value The value to search for\n * @param values The array of values to search within\n */\n static indexOf(value: unknown, values: unknown[]): number {\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n if (\n v === value ||\n (v != null &&\n v.valueOf != null &&\n value != null &&\n value.valueOf != null &&\n v.valueOf() === value.valueOf())\n ) {\n return i;\n }\n }\n\n return -1;\n }\n\n constructor(props: AdvancedFilterCreatorSelectValueListProps<T>) {\n super(props);\n\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n\n const { selectedValues, dh } = this.props;\n\n this.dh = dh;\n this.list = null;\n\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n const { table } = this.props;\n if (table) this.startListening(table);\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueListProps<T>\n ): void {\n const { filters, invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n if (prevProps.table) this.stopListening(prevProps.table);\n if (table) this.startListening(table);\n this.resetViewport();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ selectedValues: [] }, this.handleSelectionUpdate);\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues }, this.handleSelectionUpdate);\n }\n\n if (prevProps.filters !== filters) {\n table?.applyFilter(filters);\n this.resetViewport();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.props;\n if (table) this.stopListening(table);\n }\n\n dh: DhType;\n\n list: SelectValueList<T> | null;\n\n handleSelect(itemIndex: number, value: T): void {\n const { invertSelection } = this.props;\n let { selectedValues } = this.state;\n selectedValues = [...selectedValues];\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n\n let isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n\n const { offset } = this.state;\n let { items } = this.state;\n items = [...items];\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n\n this.setState({ items, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleViewportChange(top: number, bottom: number): void {\n this.updateViewport(top, bottom);\n }\n\n handleSelectionUpdate(): void {\n this.updateItemSelection();\n }\n\n handleTableUpdate(event: CustomEvent): void {\n const { table, formatter } = this.props;\n if (!table) return;\n\n const data = event.detail;\n const { offset } = data;\n const items = [];\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n let displayValue: string | JSX.Element;\n if (value == null) {\n displayValue = <i className=\"text-muted\">null</i>;\n } else if (value === '') {\n displayValue = <i className=\"text-muted\">empty</i>;\n } else {\n displayValue = formatter.getFormattedString(\n value,\n column.type,\n column.name\n );\n }\n const isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected,\n });\n }\n\n log.debug2('Received table update:', offset, items.length);\n\n const itemCount = table.size;\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n isValueSelected(value: T): boolean {\n const { invertSelection } = this.props;\n const { selectedValues } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n\n startListening(table: Table): void {\n table.addEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n stopListening(table: Table): void {\n table.removeEventListener(\n this.dh.Table.EVENT_UPDATED,\n this.handleTableUpdate\n );\n }\n\n resetViewport(): void {\n if (this.list && this.list.topRow != null && this.list.bottomRow != null) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n\n updateItemSelection(): void {\n let { items } = this.state;\n\n items = [...items];\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value } = item;\n item.isSelected = this.isValueSelected(value);\n }\n\n this.setState({ items });\n }\n\n updateViewport(top: number, bottom: number, isLoading = false): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n if (isLoading) {\n this.setState({ isLoading: true });\n }\n\n const viewportSize = bottom - top + 1;\n const topRow = Math.max(0, top - viewportSize * 3);\n const bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow);\n }\n\n render(): ReactElement {\n const { offset, isLoading, items, itemCount } = this.state;\n\n return (\n <div className=\"select-value-list-wrapper\">\n <SelectValueList\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n ref={list => {\n this.list = list;\n }}\n />\n <CSSTransition\n in={isLoading}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </CSSTransition>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"mappings":"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"}
|
|
@@ -65,6 +65,7 @@ declare class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
65
65
|
numberFilterActions(column: Column, valueText: string, value: unknown, quickFilter?: QuickFilter | null, operator?: '&&' | '||' | null): ContextAction[];
|
|
66
66
|
booleanFilterActions(column: Column, valueText: string | null, quickFilter?: QuickFilter | null, operator?: '&&' | '||' | null): ContextAction[];
|
|
67
67
|
dateFilterActions(column: Column, valueText: string, previewValue: unknown, value: unknown, quickFilter?: QuickFilter | null, operator?: '&&' | '||' | null): ContextAction[];
|
|
68
|
+
emptyStringFilterActions(column: Column, quickFilter?: QuickFilter, operator?: '&&' | '||' | null): ContextAction[];
|
|
68
69
|
nullFilterActions(column: Column, quickFilter?: QuickFilter, operator?: '&&' | '||' | null): ContextAction[];
|
|
69
70
|
sortByActions(column: Column, modelColumn: ModelIndex, columnSort: Sort | null): ContextAction[];
|
|
70
71
|
additionalSortActions(column: Column, columnIndex: ModelIndex): ContextAction[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridContextMenuHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridContextMenuHandler.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EACL,aAAa,EAId,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,IAAI,EACJ,gBAAgB,EAChB,SAAS,EAIT,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,MAAM,EACN,EAAE,IAAI,MAAM,EACZ,eAAe,EACf,WAAW,EACX,IAAI,EACL,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAIL,iBAAiB,EAEjB,aAAa,EACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAO5C,OAAO,mCAAmC,CAAC;AAE3C,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAO7C;;GAEG;AACH,cAAM,0BAA2B,SAAQ,gBAAgB;IACvD,MAAM,CAAC,UAAU,SAAmC;IAEpD,MAAM,CAAC,kBAAkB,SAAmC;IAE5D,MAAM,CAAC,YAAY,SAAmC;IAEtD,MAAM,CAAC,qBAAqB,SAAmC;IAE/D,MAAM,CAAC,UAAU,SAAmC;IAEpD,MAAM,CAAC,UAAU,SAAmC;IAEpD,MAAM,CAAC,UAAU,SAAoC;IAErD,MAAM,CAAC,YAAY,SAAoC;IAEvD,MAAM,CAAC,qBAAqB;;;;MAIjB;IAEX;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAC5B,YAAY,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAChD,eAAe,EAAE,eAAe,EAChC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,eAAe;IAUlB;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CACvB,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAC5B,MAAM;IAMT;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI;IAI7D,MAAM,CAAC,qBAAqB,CAC1B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,GAAG,SAAK,GACP,MAAM;IAOT,QAAQ,EAAE,QAAQ,CAAC;IAEnB,2BAA2B,EAAE,aAAa,CACxC,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CACvE,CAAC;gBAEU,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM;IAY1C,oBAAoB,IAAI,IAAI;IAI5B,EAAE,EAAE,MAAM,CAAC;IAEX,gBAAgB,CACd,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,GACnB,aAAa,EAAE;IA4LlB,cAAc,CACZ,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACtC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,GACnB,aAAa,EAAE;
|
|
1
|
+
{"version":3,"file":"IrisGridContextMenuHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridContextMenuHandler.tsx"],"names":[],"mappings":"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"}
|
|
@@ -307,6 +307,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
307
307
|
actions: []
|
|
308
308
|
};
|
|
309
309
|
if (value == null) {
|
|
310
|
+
// null gets a special menu
|
|
310
311
|
if (quickFilters.get(modelColumn)) {
|
|
311
312
|
filterMenu.actions.push({
|
|
312
313
|
title: 'And',
|
|
@@ -316,6 +317,17 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
316
317
|
});
|
|
317
318
|
}
|
|
318
319
|
filterMenu.actions.push(...this.nullFilterActions(column));
|
|
320
|
+
} else if (value === '') {
|
|
321
|
+
// empty string gets a special menu
|
|
322
|
+
if (quickFilters.get(modelColumn)) {
|
|
323
|
+
filterMenu.actions.push({
|
|
324
|
+
title: 'And',
|
|
325
|
+
actions: this.emptyStringFilterActions(column, quickFilters.get(modelColumn), '&&'),
|
|
326
|
+
order: 2,
|
|
327
|
+
group: ContextActions.groups.high
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
filterMenu.actions.push(...this.emptyStringFilterActions(column));
|
|
319
331
|
} else if (TableUtils.isBooleanType(column.type)) {
|
|
320
332
|
// boolean should have OR condition, and handles it's own null menu options
|
|
321
333
|
if (quickFilters.get(modelColumn)) {
|
|
@@ -696,6 +708,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
696
708
|
model
|
|
697
709
|
} = this.irisGrid.props;
|
|
698
710
|
var columnIndex = model.getColumnIndexByName(column.name);
|
|
711
|
+
var quickFilterValueText = TableUtils.escapeQuickTextFilter(valueText);
|
|
699
712
|
assertNotNull(columnIndex);
|
|
700
713
|
actions.push({
|
|
701
714
|
menuElement: /*#__PURE__*/React.createElement("div", {
|
|
@@ -708,7 +721,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
708
721
|
title: 'text is exactly',
|
|
709
722
|
description: "Show only rows where ".concat(column.name, " is ").concat(value, " (case sensitive)"),
|
|
710
723
|
action: () => {
|
|
711
|
-
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().eq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "
|
|
724
|
+
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().eq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "".concat(quickFilterValueText), operator));
|
|
712
725
|
},
|
|
713
726
|
order: 10,
|
|
714
727
|
group: ContextActions.groups.low
|
|
@@ -717,7 +730,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
717
730
|
title: 'text is not exactly',
|
|
718
731
|
description: "Show only rows where ".concat(column.name, " is not ").concat(valueText, " (case sensitive)"),
|
|
719
732
|
action: () => {
|
|
720
|
-
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().notEq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!=".concat(
|
|
733
|
+
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().notEq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!=".concat(quickFilterValueText), operator));
|
|
721
734
|
},
|
|
722
735
|
order: 20,
|
|
723
736
|
group: ContextActions.groups.low
|
|
@@ -726,7 +739,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
726
739
|
title: "text contains",
|
|
727
740
|
description: "Show only rows where ".concat(column.name, " contains ").concat(valueText),
|
|
728
741
|
action: () => {
|
|
729
|
-
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().contains(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "~".concat(
|
|
742
|
+
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(column.filter().contains(filterValue)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "~".concat(quickFilterValueText), operator));
|
|
730
743
|
},
|
|
731
744
|
order: 30,
|
|
732
745
|
group: ContextActions.groups.low
|
|
@@ -735,7 +748,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
735
748
|
title: 'text does not contain',
|
|
736
749
|
description: "Show only rows where ".concat(column.name, " does not contain ").concat(value),
|
|
737
750
|
action: () => {
|
|
738
|
-
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().contains(filterValue).not(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!~".concat(
|
|
751
|
+
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().or(column.filter().contains(filterValue).not()), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!~".concat(quickFilterValueText), operator));
|
|
739
752
|
},
|
|
740
753
|
order: 40,
|
|
741
754
|
group: ContextActions.groups.low
|
|
@@ -744,7 +757,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
744
757
|
title: 'text starts with',
|
|
745
758
|
description: "Show only rows where ".concat(column.name, " starts with ").concat(valueText),
|
|
746
759
|
action: () => {
|
|
747
|
-
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().invoke('startsWith', filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "".concat(
|
|
760
|
+
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(column.filter().invoke('startsWith', filterValue)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "".concat(quickFilterValueText, "*"), operator));
|
|
748
761
|
},
|
|
749
762
|
order: 50,
|
|
750
763
|
group: ContextActions.groups.low
|
|
@@ -753,7 +766,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
753
766
|
title: 'text ends with',
|
|
754
767
|
description: "Show only rows where ".concat(column.name, " ends with ").concat(valueText),
|
|
755
768
|
action: () => {
|
|
756
|
-
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().invoke('endsWith', filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "*".concat(
|
|
769
|
+
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(column.filter().invoke('endsWith', filterValue)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "*".concat(quickFilterValueText), operator));
|
|
757
770
|
},
|
|
758
771
|
order: 60,
|
|
759
772
|
group: ContextActions.groups.low
|
|
@@ -982,6 +995,57 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
982
995
|
});
|
|
983
996
|
return actions;
|
|
984
997
|
}
|
|
998
|
+
emptyStringFilterActions(column, quickFilter, operator) {
|
|
999
|
+
var {
|
|
1000
|
+
dh
|
|
1001
|
+
} = this;
|
|
1002
|
+
var filterValue = dh.FilterValue.ofString('');
|
|
1003
|
+
var newQuickFilter = quickFilter;
|
|
1004
|
+
if (!newQuickFilter) {
|
|
1005
|
+
newQuickFilter = {
|
|
1006
|
+
filter: null,
|
|
1007
|
+
text: null
|
|
1008
|
+
};
|
|
1009
|
+
}
|
|
1010
|
+
var {
|
|
1011
|
+
filter,
|
|
1012
|
+
text: filterText
|
|
1013
|
+
} = newQuickFilter;
|
|
1014
|
+
var actions = [];
|
|
1015
|
+
var {
|
|
1016
|
+
model
|
|
1017
|
+
} = this.irisGrid.props;
|
|
1018
|
+
var columnIndex = model.getColumnIndexByName(column.name);
|
|
1019
|
+
assertNotNull(columnIndex);
|
|
1020
|
+
actions.push({
|
|
1021
|
+
menuElement: /*#__PURE__*/React.createElement("div", {
|
|
1022
|
+
className: "iris-grid-filter-menu-item-value"
|
|
1023
|
+
}, operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', /*#__PURE__*/React.createElement("i", {
|
|
1024
|
+
className: "text-muted"
|
|
1025
|
+
}, "empty")),
|
|
1026
|
+
order: 1,
|
|
1027
|
+
group: ContextActions.groups.high
|
|
1028
|
+
});
|
|
1029
|
+
actions.push({
|
|
1030
|
+
title: 'is empty string',
|
|
1031
|
+
description: "Show only rows where ".concat(column.name, " is empty"),
|
|
1032
|
+
action: () => {
|
|
1033
|
+
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().eq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "=", operator));
|
|
1034
|
+
},
|
|
1035
|
+
order: 10,
|
|
1036
|
+
group: ContextActions.groups.low
|
|
1037
|
+
});
|
|
1038
|
+
actions.push({
|
|
1039
|
+
title: 'is not empty string',
|
|
1040
|
+
description: "Show only rows where ".concat(column.name, " is not empty"),
|
|
1041
|
+
action: () => {
|
|
1042
|
+
this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().notEq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!=", operator));
|
|
1043
|
+
},
|
|
1044
|
+
order: 20,
|
|
1045
|
+
group: ContextActions.groups.low
|
|
1046
|
+
});
|
|
1047
|
+
return actions;
|
|
1048
|
+
}
|
|
985
1049
|
nullFilterActions(column, quickFilter, operator) {
|
|
986
1050
|
var filter = null;
|
|
987
1051
|
var filterText = null;
|
|
@@ -998,7 +1062,9 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
|
|
|
998
1062
|
actions.push({
|
|
999
1063
|
menuElement: /*#__PURE__*/React.createElement("div", {
|
|
1000
1064
|
className: "iris-grid-filter-menu-item-value"
|
|
1001
|
-
}, operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', "
|
|
1065
|
+
}, operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', /*#__PURE__*/React.createElement("i", {
|
|
1066
|
+
className: "text-muted"
|
|
1067
|
+
}, "null")),
|
|
1002
1068
|
order: 1,
|
|
1003
1069
|
group: ContextActions.groups.high
|
|
1004
1070
|
});
|
|
@@ -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","log","module","DEBOUNCE_UPDATE_FORMAT","CONTEXT_MENU_DATE_FORMAT","IrisGridContextMenuHandler","getQuickFilterCondition","columnFilter","newColumnFilter","operator","and","or","getQuickFilterText","filterText","newFilterText","getOperatorAsText","getRowOptionFormatted","command","cellValue","len","truncate","length","constructor","irisGrid","dh","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","undefined","hasExpandableRows","isColumnFrozen","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","textForColumnHeader","catch","e","error","isDateType","type","GROUP_FORMAT","dateFormatActions","isNumberType","numberFormatActions","getCellActions","modelColumn","grid","columnIndex","row","rowIndex","canCopy","modelRow","getModelRow","value","valueForCell","valueText","textForCell","settings","dateFilterFormatter","timeZone","showTimeZone","showTSeparator","defaultDateTimeFormatString","previewFilterFormatter","isFilterable","filterMenu","nullFilterActions","groups","high","isBooleanType","booleanFilterActions","isCharType","numberValueText","String","fromCharCode","numberFilterActions","dateValueText","format","previewValue","dateFilterActions","stringFilterActions","isRowExpandable","expandingColumn","groupedColumns","depthForRow","cellText","isRowExpanded","GROUP_EXPAND_COLLAPSE","setRowExpanded","isExpandAllAvailable","expandAll","collapseAll","gotoRow","GOTO_ROW","GROUP_GOTO","toggleGotoRow","copyCell","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","removeColumnFilter","has","COPY","copyRanges","isEditable","GROUP_EDIT","deleteRanges","gridWrapper","triggerMenu","clientX","clientY","formatter","selectedFormat","getColumnFormat","formatOptions","getOptions","description","isSelected","i","getColumnIndexByName","isDecimalType","isIntegerType","TYPE_CONTEXT_CUSTOM","quickFilter","newQuickFilter","text","menuElement","setQuickFilter","low","notEq","contains","not","isFinite","valueFilter","greaterThanOrEqualTo","lessThanOrEqualTo","isTrue","isFalse","isNull","sortActions","ascending","checkColumnSort","descending","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} 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 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 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 });\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 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: number | undefined | null,\n grid: Grid,\n gridPoint: GridPoint\n ): ContextAction[] {\n assertNotNull(modelColumn);\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 value = model.valueForCell(modelColumn, modelRow);\n\n const valueText = model.textForCell(modelColumn, modelRow);\n const column = columns[modelColumn];\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(modelColumn)) {\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 if (quickFilters.get(modelColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.nullFilterActions(\n column,\n quickFilters.get(modelColumn),\n '&&'\n ),\n order: 2,\n group: ContextActions.groups.high,\n });\n }\n filterMenu.actions.push(...this.nullFilterActions(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(modelColumn)) {\n filterMenu.actions.push({\n title: 'Or',\n actions: this.booleanFilterActions(\n column,\n valueText,\n quickFilters.get(modelColumn),\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(modelColumn);\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(modelColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.numberFilterActions(\n column,\n numberValueText,\n value,\n quickFilters.get(modelColumn),\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(modelColumn)\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(modelColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.dateFilterActions(\n column,\n dateValueText,\n previewValue,\n value,\n quickFilters.get(modelColumn),\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(modelColumn)\n )\n );\n } else {\n if (quickFilters.get(modelColumn)) {\n filterMenu.actions.push({\n title: 'And',\n\n actions: this.stringFilterActions(\n column,\n valueText,\n value,\n quickFilters.get(modelColumn),\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(modelRow)) {\n // If there are grouped columns, then it is a rollup\n // For rollups, the column number will be the depth minus one\n const expandingColumn =\n model.groupedColumns.length > 0 ? model.depthForRow(modelRow) - 1 : 0;\n const cellValue = model.valueForCell(expandingColumn, modelRow);\n const cellText =\n cellValue == null\n ? 'null'\n : model.textForCell(expandingColumn, modelRow);\n\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted(\n model.isRowExpanded(modelRow) ? 'Collapse' : 'Expand',\n cellText\n ),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 10,\n action: () => {\n model.setRowExpanded(modelRow, !model.isRowExpanded(modelRow));\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(modelRow, 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 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 = [] as ContextAction[];\n\n if (modelColumn != null && modelRow != null) {\n const value = model.valueForCell(modelColumn, modelRow);\n\n const valueText = model.textForCell(modelColumn, modelRow);\n const column = columns[modelColumn];\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 && model.isFilterable(modelColumn)) {\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: 'Clear Column Filter',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 30,\n action: () => {\n this.irisGrid.removeColumnFilter(modelColumn);\n },\n disabled: !(\n quickFilters.has(modelColumn) || advancedFilters.has(modelColumn)\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 } = formatOptions[\n i\n ];\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 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 "{valueText}"\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 `=${valueText}`,\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 `!=${valueText}`,\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.filter().contains(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: '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.filter().contains(filterValue).not(),\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: '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.filter().invoke('startsWith', 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: '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.filter().invoke('endsWith', 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 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 "{valueText}"\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 "{valueText ?? 'null'}"\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 "{previewValue}"\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 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 "null"\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","log","module","DEBOUNCE_UPDATE_FORMAT","CONTEXT_MENU_DATE_FORMAT","IrisGridContextMenuHandler","getQuickFilterCondition","columnFilter","newColumnFilter","operator","and","or","getQuickFilterText","filterText","newFilterText","getOperatorAsText","getRowOptionFormatted","command","cellValue","len","truncate","length","constructor","irisGrid","dh","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","undefined","hasExpandableRows","isColumnFrozen","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","textForColumnHeader","catch","e","error","isDateType","type","GROUP_FORMAT","dateFormatActions","isNumberType","numberFormatActions","getCellActions","modelColumn","grid","columnIndex","row","rowIndex","canCopy","modelRow","getModelRow","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","groupedColumns","depthForRow","cellText","isRowExpanded","GROUP_EXPAND_COLLAPSE","setRowExpanded","isExpandAllAvailable","expandAll","collapseAll","gotoRow","GOTO_ROW","GROUP_GOTO","toggleGotoRow","copyCell","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","removeColumnFilter","has","COPY","copyRanges","isEditable","GROUP_EDIT","deleteRanges","gridWrapper","triggerMenu","clientX","clientY","formatter","selectedFormat","getColumnFormat","formatOptions","getOptions","description","isSelected","i","getColumnIndexByName","isDecimalType","isIntegerType","TYPE_CONTEXT_CUSTOM","quickFilter","newQuickFilter","text","quickFilterValueText","escapeQuickTextFilter","menuElement","setQuickFilter","low","notEq","isNull","not","contains","isFinite","valueFilter","greaterThanOrEqualTo","lessThanOrEqualTo","isTrue","isFalse","sortActions","ascending","checkColumnSort","descending","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} 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 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 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 });\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 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: number | undefined | null,\n grid: Grid,\n gridPoint: GridPoint\n ): ContextAction[] {\n assertNotNull(modelColumn);\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 value = model.valueForCell(modelColumn, modelRow);\n\n const valueText = model.textForCell(modelColumn, modelRow);\n const column = columns[modelColumn];\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(modelColumn)) {\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(modelColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.nullFilterActions(\n column,\n quickFilters.get(modelColumn),\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(modelColumn)) {\n filterMenu.actions.push({\n title: 'And',\n\n actions: this.emptyStringFilterActions(\n column,\n quickFilters.get(modelColumn),\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(modelColumn)) {\n filterMenu.actions.push({\n title: 'Or',\n actions: this.booleanFilterActions(\n column,\n valueText,\n quickFilters.get(modelColumn),\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(modelColumn);\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(modelColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.numberFilterActions(\n column,\n numberValueText,\n value,\n quickFilters.get(modelColumn),\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(modelColumn)\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(modelColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: this.dateFilterActions(\n column,\n dateValueText,\n previewValue,\n value,\n quickFilters.get(modelColumn),\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(modelColumn)\n )\n );\n } else {\n if (quickFilters.get(modelColumn)) {\n filterMenu.actions.push({\n title: 'And',\n\n actions: this.stringFilterActions(\n column,\n valueText,\n value,\n quickFilters.get(modelColumn),\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(modelRow)) {\n // If there are grouped columns, then it is a rollup\n // For rollups, the column number will be the depth minus one\n const expandingColumn =\n model.groupedColumns.length > 0 ? model.depthForRow(modelRow) - 1 : 0;\n const cellValue = model.valueForCell(expandingColumn, modelRow);\n const cellText =\n cellValue == null\n ? 'null'\n : model.textForCell(expandingColumn, modelRow);\n\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted(\n model.isRowExpanded(modelRow) ? 'Collapse' : 'Expand',\n cellText\n ),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 10,\n action: () => {\n model.setRowExpanded(modelRow, !model.isRowExpanded(modelRow));\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(modelRow, 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 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 = [] as ContextAction[];\n\n if (modelColumn != null && modelRow != null) {\n const value = model.valueForCell(modelColumn, modelRow);\n\n const valueText = model.textForCell(modelColumn, modelRow);\n const column = columns[modelColumn];\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 && model.isFilterable(modelColumn)) {\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: 'Clear Column Filter',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 30,\n action: () => {\n this.irisGrid.removeColumnFilter(modelColumn);\n },\n disabled: !(\n quickFilters.has(modelColumn) || advancedFilters.has(modelColumn)\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 } = formatOptions[\n i\n ];\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:\n | string\n | null = 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 "{valueText}"\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 "{valueText}"\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 "{valueText ?? 'null'}"\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 "{previewValue}"\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/iris-grid",
|
|
3
|
-
"version": "0.41.2-beta.
|
|
3
|
+
"version": "0.41.2-beta.4+ed3a8c5f",
|
|
4
4
|
"description": "Deephaven Iris Grid",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -23,17 +23,17 @@
|
|
|
23
23
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@deephaven/components": "^0.41.2-beta.
|
|
27
|
-
"@deephaven/console": "^0.41.2-beta.
|
|
28
|
-
"@deephaven/filters": "^0.41.2-beta.
|
|
29
|
-
"@deephaven/grid": "^0.41.2-beta.
|
|
30
|
-
"@deephaven/icons": "^0.41.2-beta.
|
|
31
|
-
"@deephaven/jsapi-types": "^0.41.2-beta.
|
|
32
|
-
"@deephaven/jsapi-utils": "^0.41.2-beta.
|
|
33
|
-
"@deephaven/log": "^0.41.2-beta.
|
|
34
|
-
"@deephaven/react-hooks": "^0.41.2-beta.
|
|
35
|
-
"@deephaven/storage": "^0.41.2-beta.
|
|
36
|
-
"@deephaven/utils": "^0.41.2-beta.
|
|
26
|
+
"@deephaven/components": "^0.41.2-beta.4+ed3a8c5f",
|
|
27
|
+
"@deephaven/console": "^0.41.2-beta.4+ed3a8c5f",
|
|
28
|
+
"@deephaven/filters": "^0.41.2-beta.4+ed3a8c5f",
|
|
29
|
+
"@deephaven/grid": "^0.41.2-beta.4+ed3a8c5f",
|
|
30
|
+
"@deephaven/icons": "^0.41.2-beta.4+ed3a8c5f",
|
|
31
|
+
"@deephaven/jsapi-types": "^0.41.2-beta.4+ed3a8c5f",
|
|
32
|
+
"@deephaven/jsapi-utils": "^0.41.2-beta.4+ed3a8c5f",
|
|
33
|
+
"@deephaven/log": "^0.41.2-beta.4+ed3a8c5f",
|
|
34
|
+
"@deephaven/react-hooks": "^0.41.2-beta.4+ed3a8c5f",
|
|
35
|
+
"@deephaven/storage": "^0.41.2-beta.4+ed3a8c5f",
|
|
36
|
+
"@deephaven/utils": "^0.41.2-beta.4+ed3a8c5f",
|
|
37
37
|
"@dnd-kit/core": "^6.0.5",
|
|
38
38
|
"@dnd-kit/sortable": "^7.0.0",
|
|
39
39
|
"@dnd-kit/utilities": "^3.2.0",
|
|
@@ -56,9 +56,9 @@
|
|
|
56
56
|
"react-dom": "^17.x"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@deephaven/jsapi-shim": "^0.41.2-beta.
|
|
60
|
-
"@deephaven/mocks": "^0.41.2-beta.
|
|
61
|
-
"@deephaven/tsconfig": "^0.41.2-beta.
|
|
59
|
+
"@deephaven/jsapi-shim": "^0.41.2-beta.4+ed3a8c5f",
|
|
60
|
+
"@deephaven/mocks": "^0.41.2-beta.4+ed3a8c5f",
|
|
61
|
+
"@deephaven/tsconfig": "^0.41.2-beta.4+ed3a8c5f"
|
|
62
62
|
},
|
|
63
63
|
"files": [
|
|
64
64
|
"dist"
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"publishConfig": {
|
|
70
70
|
"access": "public"
|
|
71
71
|
},
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "ed3a8c5f224094306ff55f9b41706cb58ff709e2"
|
|
73
73
|
}
|