@deephaven/code-studio 0.82.1-beta.6 → 0.82.1-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/build/assets/{AppRoot-e0623c71.js → AppRoot-98ad8cf7.js} +3 -3
  2. package/build/assets/{AppRoot-e0623c71.js.map → AppRoot-98ad8cf7.js.map} +1 -1
  3. package/build/assets/{Chart-e5224823.js → Chart-a9c6e441.js} +2 -2
  4. package/build/assets/{Chart-e5224823.js.map → Chart-a9c6e441.js.map} +1 -1
  5. package/build/assets/{ControlType-ee9c672e.js → ControlType-c918f1cd.js} +3 -3
  6. package/build/assets/{ControlType-ee9c672e.js.map → ControlType-c918f1cd.js.map} +1 -1
  7. package/build/assets/FontBootstrap-93399df4.js +4 -0
  8. package/build/assets/FontBootstrap-93399df4.js.map +1 -0
  9. package/build/assets/{FormatterUtils-aa7386ef.js → FormatterUtils-8bc07bb9.js} +2 -2
  10. package/build/assets/{FormatterUtils-aa7386ef.js.map → FormatterUtils-8bc07bb9.js.map} +1 -1
  11. package/build/assets/{Grid-4206eb66.js → Grid-68f28f7c.js} +2 -2
  12. package/build/assets/{Grid-4206eb66.js.map → Grid-68f28f7c.js.map} +1 -1
  13. package/build/assets/GridRenderer-beadd456.js +2 -0
  14. package/build/assets/GridRenderer-beadd456.js.map +1 -0
  15. package/build/assets/{IrisGrid-c5f818f4.js → IrisGrid-8471fc12.js} +2 -2
  16. package/build/assets/{IrisGrid-c5f818f4.js.map → IrisGrid-8471fc12.js.map} +1 -1
  17. package/build/assets/{IrisGridModel-f63f94cc.js → IrisGridModel-db71cdf7.js} +2 -2
  18. package/build/assets/{IrisGridModel-f63f94cc.js.map → IrisGridModel-db71cdf7.js.map} +1 -1
  19. package/build/assets/{IrisGridShortcuts-c8a512d6.js → IrisGridShortcuts-6b660c54.js} +2 -2
  20. package/build/assets/{IrisGridShortcuts-c8a512d6.js.map → IrisGridShortcuts-6b660c54.js.map} +1 -1
  21. package/build/assets/{IrisGridThemeProvider-ed895144.js → IrisGridThemeProvider-98bbe2be.js} +2 -2
  22. package/build/assets/{IrisGridThemeProvider-ed895144.js.map → IrisGridThemeProvider-98bbe2be.js.map} +1 -1
  23. package/build/assets/{LocalWorkspaceStorage-8e43291a.js → LocalWorkspaceStorage-20cf2372.js} +2 -2
  24. package/build/assets/{LocalWorkspaceStorage-8e43291a.js.map → LocalWorkspaceStorage-20cf2372.js.map} +1 -1
  25. package/build/assets/{MarkdownEditor-d90e4bef.js → MarkdownEditor-92833d91.js} +2 -2
  26. package/build/assets/{MarkdownEditor-d90e4bef.js.map → MarkdownEditor-92833d91.js.map} +1 -1
  27. package/build/assets/{MarkdownNotebook-7c4e9125.js → MarkdownNotebook-58af34d7.js} +2 -2
  28. package/build/assets/{MarkdownNotebook-7c4e9125.js.map → MarkdownNotebook-58af34d7.js.map} +1 -1
  29. package/build/assets/{MissingPartitionError-1e490bac.js → MissingPartitionError-6ffc79b5.js} +2 -2
  30. package/build/assets/{MissingPartitionError-1e490bac.js.map → MissingPartitionError-6ffc79b5.js.map} +1 -1
  31. package/build/assets/{StyleGuideRoot-42855334.js → StyleGuideRoot-d45b2596.js} +12 -12
  32. package/build/assets/{StyleGuideRoot-42855334.js.map → StyleGuideRoot-d45b2596.js.map} +1 -1
  33. package/build/assets/index-0b8d9e03.js +2 -0
  34. package/build/assets/{index-0e1c1551.js.map → index-0b8d9e03.js.map} +1 -1
  35. package/build/assets/{index-2f2129be.js → index-7440403e.js} +2 -2
  36. package/build/assets/{index-2f2129be.js.map → index-7440403e.js.map} +1 -1
  37. package/build/assets/{index-1f683a88.js → index-ea785fe0.js} +3 -3
  38. package/build/assets/{index-1f683a88.js.map → index-ea785fe0.js.map} +1 -1
  39. package/build/index.html +1 -1
  40. package/package.json +30 -30
  41. package/build/assets/FontBootstrap-4f906e56.js +0 -4
  42. package/build/assets/FontBootstrap-4f906e56.js.map +0 -1
  43. package/build/assets/GridRenderer-bf66c0c9.js +0 -2
  44. package/build/assets/GridRenderer-bf66c0c9.js.map +0 -1
  45. package/build/assets/index-0e1c1551.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGrid-c5f818f4.js","sources":["../../../iris-grid/dist/AdvancedFilterCreatorFilterItem.js","../../../iris-grid/dist/AdvancedFilterCreatorSelectValueList.js","../../../iris-grid/dist/AdvancedFilterCreatorSelectValue.js","../../../iris-grid/dist/AdvancedFilterCreator.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js","../../../iris-grid/dist/IrisGridBottomBar.js","../../../iris-grid/dist/PendingDataBottomBar.js","../../../iris-grid/dist/IrisGridCopyHandler.js","../../../iris-grid/dist/FilterInputField.js","../../../iris-grid/dist/key-handlers/CopyCellKeyHandler.js","../../../iris-grid/dist/key-handlers/CopyKeyHandler.js","../../../iris-grid/dist/key-handlers/ReverseKeyHandler.js","../../../iris-grid/dist/key-handlers/ClearFilterKeyHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js","../../../iris-grid/dist/format-context-menus/CustomFormatAction.js","../../../iris-grid/dist/format-context-menus/FormatContextMenuUtils.js","../../../iris-grid/dist/format-context-menus/DateTimeFormatContextMenu.js","../../../iris-grid/dist/format-context-menus/DecimalFormatContextMenu.js","../../../iris-grid/dist/format-context-menus/IntegerFormatContextMenu.js","../../../iris-grid/dist/mousehandlers/IrisGridContextMenuHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridCopyCellMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridDataSelectMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridFilterMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridRowTreeMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridSortMouseHandler.js","../../../iris-grid/dist/mousehandlers/PendingMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridTokenMouseHandler.js","../../../iris-grid/dist/ToastBottomBar.js","../../../iris-grid/dist/IrisGridModelUpdater.js","../../../iris-grid/dist/ColumnStatistics.js","../../../iris-grid/dist/CrossColumnSearch.js","../../../iris-grid/dist/IrisGridPartitionSelector.js","../../../iris-grid/dist/sidebar/SelectDistinctBuilder.js","../../../iris-grid/dist/sidebar/AdvancedSettingsMenu.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/StyleEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/ColumnFormatEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/RowFormatEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js","../../../iris-grid/dist/IrisGridCellOverflowModal.js","../../../iris-grid/dist/GotoRow.js","../../../iris-grid/dist/IrisGrid.js"],"sourcesContent":["function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { Button, Select } from '@deephaven/components';\nimport { getLabelForBooleanFilter, getLabelForDateFilter, getLabelForNumberFilter, getLabelForTextFilter } from '@deephaven/filters';\nimport { vsTrash } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport classNames from 'classnames';\nimport memoizeOne from 'memoize-one';\nimport \"./AdvancedFilterCreatorFilterItem.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreatorFilterItem');\nexport class AdvancedFilterCreatorFilterItem extends PureComponent {\n static getLabelForFilter(columnType, filterType) {\n try {\n if (TableUtils.isNumberType(columnType) || TableUtils.isCharType(columnType)) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getLabelForBooleanFilter(filterType);\n }\n throw new Error(\"Unrecognized column type: \".concat(columnType));\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"typeDropdown\", void 0);\n _defineProperty(this, \"getCachedIsValid\", memoizeOne((column, operation, value, timeZone, tableUtils) => {\n try {\n // We don't want to show an error for an empty value\n return !value || tableUtils.makeAdvancedValueFilter(column, operation, value, timeZone) != null;\n } catch (e) {\n return false;\n }\n }));\n this.handleDelete = this.handleDelete.bind(this);\n this.handleTypeChange = this.handleTypeChange.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.typeDropdown = null;\n var {\n value: _value = '',\n filterTypes,\n selectedType = filterTypes[0]\n } = props;\n this.state = {\n selectedType,\n value: _value\n };\n }\n componentDidMount() {\n var _this$typeDropdown;\n (_this$typeDropdown = this.typeDropdown) === null || _this$typeDropdown === void 0 ? void 0 : _this$typeDropdown.focus();\n }\n componentDidUpdate(prevProps) {\n var {\n value,\n selectedType\n } = this.props;\n if (selectedType !== undefined && prevProps.selectedType !== selectedType) {\n this.setState({\n selectedType\n });\n }\n if (value !== undefined && prevProps.value !== value) {\n this.setState({\n value\n });\n }\n }\n handleTypeChange(eventTargetValue) {\n var selectedType = eventTargetValue;\n log.debug2('typeChange', selectedType);\n this.setState({\n selectedType\n });\n var {\n onChange\n } = this.props;\n var {\n value\n } = this.state;\n if (value != null && value.length > 0) {\n // Don't send an update unless there's already a value entered\n onChange(selectedType, value);\n }\n }\n handleValueChange(event) {\n log.debug2('valueChange');\n var {\n value\n } = event.target;\n this.setState({\n value\n });\n var {\n onChange\n } = this.props;\n var {\n selectedType\n } = this.state;\n if (selectedType != null) {\n // Don't send an update unless they've already selected a type\n onChange(selectedType, value);\n }\n }\n handleDelete() {\n log.debug('delete');\n var {\n onDelete\n } = this.props;\n onDelete();\n }\n render() {\n var {\n column,\n filterTypes,\n formatter,\n tableUtils\n } = this.props;\n var {\n selectedType,\n value\n } = this.state;\n var showValueInput = !TableUtils.isBooleanType(column.type);\n var typeOptionElements = [];\n var isValid = this.getCachedIsValid(column, selectedType, value, formatter.timeZone, tableUtils);\n for (var i = 0; i < filterTypes.length; i += 1) {\n var _type = filterTypes[i];\n var label = AdvancedFilterCreatorFilterItem.getLabelForFilter(column.type, _type);\n var element = /*#__PURE__*/_jsx(\"option\", {\n value: _type,\n children: label\n }, _type);\n typeOptionElements.push(element);\n }\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-creator-filter-item\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col\",\n children: /*#__PURE__*/_jsx(Select, {\n className: \"form-control\",\n value: selectedType,\n onChange: this.handleTypeChange,\n ref: typeDropdown => {\n this.typeDropdown = typeDropdown;\n },\n children: typeOptionElements\n })\n }), showValueInput && /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"input-group\",\n children: /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: classNames('form-control', {\n error: !isValid\n }),\n placeholder: \"Enter value\",\n value: value,\n onChange: this.handleValueChange\n })\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col-1 px-0\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"w-100 h-100 p-0 m-0\",\n onClick: this.handleDelete,\n icon: vsTrash,\n tooltip: \"Remove Filter\"\n })\n })]\n })\n });\n }\n}\nexport default AdvancedFilterCreatorFilterItem;\n//# sourceMappingURL=AdvancedFilterCreatorFilterItem.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { LoadingSpinner, SelectValueList, FadeTransition } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreatorSelectValueList');\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList extends PureComponent {\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, values) {\n for (var i = 0; i < values.length; i += 1) {\n var v = values[i];\n if (v === value || v != null && v.valueOf != null && value != null && value.valueOf != null && v.valueOf() === value.valueOf()) {\n return i;\n }\n }\n return -1;\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"list\", void 0);\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 var {\n selectedValues,\n dh\n } = this.props;\n this.dh = dh;\n this.list = null;\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true\n };\n }\n componentDidMount() {\n var {\n table\n } = this.props;\n if (table) this.startListening(table);\n }\n componentDidUpdate(prevProps) {\n var {\n filters,\n invertSelection,\n selectedValues,\n table\n } = 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 if (prevProps.invertSelection !== invertSelection) {\n this.setState({\n selectedValues: []\n }, this.handleSelectionUpdate);\n }\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({\n selectedValues\n }, this.handleSelectionUpdate);\n }\n if (prevProps.filters !== filters) {\n table === null || table === void 0 ? void 0 : table.applyFilter(filters);\n this.resetViewport();\n }\n }\n componentWillUnmount() {\n var {\n table\n } = this.props;\n if (table) this.stopListening(table);\n }\n handleSelect(itemIndex, value) {\n var {\n invertSelection\n } = this.props;\n var {\n selectedValues\n } = this.state;\n selectedValues = [...selectedValues];\n var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n var isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n var {\n offset\n } = this.state;\n var {\n items\n } = this.state;\n items = [...items];\n var visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n this.setState({\n items,\n selectedValues\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n handleViewportChange(top, bottom) {\n this.updateViewport(top, bottom);\n }\n handleSelectionUpdate() {\n this.updateItemSelection();\n }\n handleTableUpdate(event) {\n var {\n table,\n formatter\n } = this.props;\n if (!table) return;\n var data = event.detail;\n var {\n offset\n } = data;\n var items = [];\n var column = table.columns[0];\n for (var r = 0; r < data.rows.length; r += 1) {\n var row = data.rows[r];\n var value = row.get(column);\n var displayValue = void 0;\n if (value == null) {\n displayValue = /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"null\"\n });\n } else if (value === '') {\n displayValue = /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"empty\"\n });\n } else {\n displayValue = formatter.getFormattedString(value, column.type, column.name);\n }\n var isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected\n });\n }\n log.debug2('Received table update:', offset, items.length);\n var itemCount = table.size;\n this.setState({\n itemCount,\n items,\n offset,\n isLoading: false\n });\n }\n isValueSelected(value) {\n var {\n invertSelection\n } = this.props;\n var {\n selectedValues\n } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n startListening(table) {\n table.addEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n stopListening(table) {\n table.removeEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n resetViewport() {\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 updateItemSelection() {\n var {\n items\n } = this.state;\n items = [...items];\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n var {\n value\n } = item;\n item.isSelected = this.isValueSelected(value);\n }\n this.setState({\n items\n });\n }\n updateViewport(top, bottom) {\n var isLoading = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n table\n } = this.props;\n if (table == null) {\n return;\n }\n if (isLoading) {\n this.setState({\n isLoading: true\n });\n }\n var viewportSize = bottom - top + 1;\n var topRow = Math.max(0, top - viewportSize * 3);\n var bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow);\n }\n render() {\n var {\n offset,\n isLoading,\n items,\n itemCount\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"select-value-list-wrapper\",\n children: [/*#__PURE__*/_jsx(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 }), /*#__PURE__*/_jsx(FadeTransition, {\n in: isLoading,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"loading-list\",\n children: /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-large\"\n })\n })\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreatorSelectValueList, \"defaultProps\", {\n invertSelection: true,\n selectedValues: [],\n onChange: () => undefined\n});\nexport default AdvancedFilterCreatorSelectValueList;\n//# sourceMappingURL=AdvancedFilterCreatorSelectValueList.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Button, FadeTransition } from '@deephaven/components';\nimport AdvancedFilterCreatorSelectValueList from \"./AdvancedFilterCreatorSelectValueList.js\";\nimport \"./AdvancedFilterCreatorSelectValue.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nclass AdvancedFilterCreatorSelectValue extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"searchTablePromise\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"updateFilterTimer\", void 0);\n this.handleSelectAllClick = this.handleSelectAllClick.bind(this);\n this.handleClearAllClick = this.handleClearAllClick.bind(this);\n this.handleListChange = this.handleListChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUpdateFilterTimeout = this.handleUpdateFilterTimeout.bind(this);\n var {\n dh,\n invertSelection,\n selectedValues\n } = props;\n this.tableUtils = new TableUtils(dh);\n this.state = {\n filters: [],\n invertSelection,\n selectedValues,\n searchText: ''\n };\n }\n componentDidMount() {\n this.initSearchTable();\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n invertSelection,\n selectedValues,\n table\n } = this.props;\n if (prevProps.table !== table) {\n this.initSearchTable();\n }\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({\n invertSelection\n });\n }\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({\n selectedValues\n });\n }\n var {\n table: searchTable,\n searchText\n } = this.state;\n if (searchTable !== prevState.table) {\n if (prevState.table != null) {\n prevState.table.close();\n }\n if (searchTable != null) {\n this.startUpdateFilterTimer();\n }\n }\n if (searchText !== prevState.searchText) {\n this.startUpdateFilterTimer();\n }\n }\n componentWillUnmount() {\n var {\n table\n } = this.state;\n if (table != null) {\n table.close();\n }\n this.searchTablePromise = undefined;\n this.stopUpdateFilterTimer();\n }\n getColumnName() {\n var {\n table\n } = this.props;\n if (table != null) {\n return table.columns[0].name;\n }\n return '';\n }\n getDisplayedValuesCount() {\n var {\n invertSelection,\n selectedValues,\n table\n } = this.state;\n if (table == null) {\n return null;\n }\n if (invertSelection) {\n return table.totalSize - selectedValues.length;\n }\n return selectedValues.length;\n }\n getDisplayedValueText() {\n var count = this.getDisplayedValuesCount();\n var {\n table\n } = this.state;\n var {\n formatter\n } = this.props;\n if (count != null && table != null) {\n var formattedCount = formatter.getFormattedString(count, 'long');\n var formattedTableSize = formatter.getFormattedString(table.totalSize, 'long');\n var prefix = '';\n if (count < 1000000) {\n prefix = 'Displaying ';\n }\n return \"\".concat(prefix).concat(formattedCount, \" of \").concat(formattedTableSize);\n }\n return null;\n }\n initSearchTable() {\n var {\n table\n } = this.props;\n if (table == null) {\n return;\n }\n var searchTablePromise = table.copy();\n this.searchTablePromise = searchTablePromise;\n this.searchTablePromise.then(searchTable => {\n if (this.searchTablePromise === searchTablePromise) {\n this.setState({\n table: searchTable\n });\n this.searchTablePromise = undefined;\n } else {\n searchTable.close();\n }\n });\n }\n handleListChange(selectedValues, invertSelection) {\n this.setState({\n selectedValues,\n invertSelection\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n handleSearchChange(event) {\n var searchText = event.target.value;\n this.setState({\n searchText\n });\n }\n handleSelectAllClick() {\n this.resetSelection(true);\n }\n handleClearAllClick() {\n this.resetSelection(false);\n }\n handleUpdateFilterTimeout() {\n this.updateFilterTimer = undefined;\n this.updateTableFilter();\n }\n resetSelection(invertSelection) {\n var selectedValues = [];\n this.setState({\n invertSelection,\n selectedValues\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n startUpdateFilterTimer() {\n this.stopUpdateFilterTimer();\n this.updateFilterTimer = setTimeout(this.handleUpdateFilterTimeout, AdvancedFilterCreatorSelectValue.searchDebounceTime);\n }\n stopUpdateFilterTimer() {\n if (this.updateFilterTimer != null) {\n clearTimeout(this.updateFilterTimer);\n this.updateFilterTimer = undefined;\n }\n }\n updateTableFilter() {\n var {\n table,\n searchText\n } = this.state;\n var {\n timeZone\n } = this.props;\n var {\n tableUtils\n } = this;\n var column = table === null || table === void 0 ? void 0 : table.columns[0];\n var filters = [];\n if (column == null) {\n return;\n }\n var error;\n if (searchText.length > 0) {\n var filter = null;\n if (TableUtils.isCharType(column.type)) {\n // Just exact match for char\n filter = tableUtils.makeQuickFilter(column, searchText);\n } else if (TableUtils.isTextType(column.type)) {\n // case insensitive & contains search text\n filter = tableUtils.makeQuickFilter(column, \"~\".concat(searchText), timeZone);\n } else {\n // greater than or equal search for everything else\n // we may want to be smarter with some other types (like dates)\n filter = tableUtils.makeQuickFilter(column, \">=\".concat(searchText), timeZone);\n }\n if (filter != null) {\n filters.push(filter);\n } else {\n error = 'Invalid search text';\n }\n }\n this.setState({\n filters,\n error\n });\n }\n render() {\n var {\n error,\n filters,\n invertSelection,\n selectedValues,\n searchText,\n table\n } = this.state;\n var {\n dh,\n formatter,\n showSearch\n } = this.props;\n var columnName = this.getColumnName();\n var displayedValuesText = this.getDisplayedValueText();\n var placeholderText = columnName ? \"Find \".concat(columnName, \"...\") : '';\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator-select-value\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: showSearch ? 'form-group' : '',\n children: [/*#__PURE__*/_jsx(\"label\", {\n htmlFor: \"advanced-filter-creator-select-value-input\",\n children: \"Select Values\"\n }), showSearch && /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: classNames('form-control', {\n 'is-invalid': error != null\n }),\n id: \"advanced-filter-creator-select-value-input\",\n placeholder: placeholderText,\n value: searchText,\n onChange: this.handleSearchChange\n })]\n }), /*#__PURE__*/_jsx(AdvancedFilterCreatorSelectValueList, {\n dh: dh,\n table: table,\n filters: filters,\n invertSelection: invertSelection,\n selectedValues: selectedValues,\n formatter: formatter,\n onChange: this.handleListChange\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator-select-meta-row\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleSelectAllClick,\n children: \"Select All\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleClearAllClick,\n children: \"Clear\"\n })]\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: displayedValuesText != null,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"row-count-info\",\n children: displayedValuesText\n })\n })]\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreatorSelectValue, \"searchDebounceTime\", 250);\n_defineProperty(AdvancedFilterCreatorSelectValue, \"defaultProps\", {\n invertSelection: true,\n selectedValues: [],\n onChange: () => undefined,\n showSearch: true\n});\nexport default AdvancedFilterCreatorSelectValue;\n//# sourceMappingURL=AdvancedFilterCreatorSelectValue.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n// disabled for tab-index on focus traps, which are intentionally non-interactive\n\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport memoize from 'memoize-one';\nimport { Operator as FilterOperator, assertOperatorValue as assertFilterOperatorValue } from '@deephaven/filters';\nimport { dhSortAmountDown, dhNewCircleLargeFilled } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Button, ContextActionUtils } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { assertNotNull, PromiseUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport AdvancedFilterCreatorFilterItem from \"./AdvancedFilterCreatorFilterItem.js\";\nimport AdvancedFilterCreatorSelectValue from \"./AdvancedFilterCreatorSelectValue.js\";\nimport \"./AdvancedFilterCreator.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreator');\nclass AdvancedFilterCreator extends PureComponent {\n static makeFilterItem() {\n return {\n key: nanoid()\n };\n }\n constructor(props) {\n var _options$filterItems$, _options$filterItems;\n super(props);\n _defineProperty(this, \"focusTrapContainer\", void 0);\n _defineProperty(this, \"debounceTimeout\", void 0);\n _defineProperty(this, \"valuesTablePromise\", void 0);\n _defineProperty(this, \"getFilterTypes\", memoize(columnType => TableUtils.getFilterTypes(columnType)));\n this.handleAddAnd = this.handleAddAnd.bind(this);\n this.handleAddOr = this.handleAddOr.bind(this);\n this.handleChangeFilterOperator = this.handleChangeFilterOperator.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterDelete = this.handleFilterDelete.bind(this);\n this.handleSelectValueChange = this.handleSelectValueChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSortDown = this.handleSortDown.bind(this);\n this.handleSortUp = this.handleSortUp.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleFocusTrapStart = this.handleFocusTrapStart.bind(this);\n this.handleFocusTrapEnd = this.handleFocusTrapEnd.bind(this);\n this.handleUpdateTimeout = this.handleUpdateTimeout.bind(this);\n this.focusTrapContainer = /*#__PURE__*/React.createRef();\n var {\n model,\n column,\n options\n } = props;\n var {\n filterOperators,\n invertSelection,\n selectedValues\n } = options;\n\n // can be null or an empty array\n var filterItems = (_options$filterItems$ = (_options$filterItems = options.filterItems) === null || _options$filterItems === void 0 ? void 0 : _options$filterItems.map(_ref => {\n var {\n selectedType,\n value\n } = _ref;\n return {\n selectedType,\n value,\n key: nanoid()\n };\n })) !== null && _options$filterItems$ !== void 0 ? _options$filterItems$ : [];\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n if (filterOperators == null) {\n filterOperators = [];\n }\n if (invertSelection == null) {\n invertSelection = true;\n }\n if (selectedValues == null) {\n selectedValues = [];\n }\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var isSortable = model.isColumnSortable(columnIndex);\n this.state = {\n // Filter items\n filterItems,\n // And/Or between the filter items\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTableError: null,\n valuesTable: undefined,\n isSortable\n };\n }\n componentDidMount() {\n this.initValuesTable();\n }\n componentWillUnmount() {\n if (this.debounceTimeout != null) {\n clearTimeout(this.debounceTimeout);\n this.sendUpdate();\n }\n if (this.valuesTablePromise != null) {\n this.valuesTablePromise.cancel();\n }\n }\n getFilterChangeHandler(index) {\n return this.handleFilterChange.bind(this, index);\n }\n getFilterDeleteHandler(index) {\n return this.handleFilterDelete.bind(this, index);\n }\n initValuesTable() {\n var {\n model,\n column\n } = this.props;\n if (!model.isValuesTableAvailable) {\n log.debug('No values table for this model, just ignore');\n return;\n }\n this.valuesTablePromise = TableUtils.makeCancelableTablePromise(model.valuesTable(column));\n this.valuesTablePromise.then(valuesTable => {\n var _valuesTable$columns$;\n if ((_valuesTable$columns$ = valuesTable.columns[0].isSortable) !== null && _valuesTable$columns$ !== void 0 ? _valuesTable$columns$ : true) {\n var sort = valuesTable.columns[0].sort().asc();\n valuesTable.applySort([sort]);\n }\n this.setState({\n valuesTable\n });\n }).catch(error => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error('Unable to open values table', error);\n this.setState({\n valuesTableError: error\n });\n });\n }\n handleFocusTrapEnd() {\n var _this$focusTrapContai, _this$focusTrapContai2;\n ((_this$focusTrapContai = this.focusTrapContainer) === null || _this$focusTrapContai === void 0 ? void 0 : (_this$focusTrapContai2 = _this$focusTrapContai.current) === null || _this$focusTrapContai2 === void 0 ? void 0 : _this$focusTrapContai2.querySelector('button,select,input,textarea')).focus();\n }\n handleFocusTrapStart() {\n var _this$focusTrapContai3, _this$focusTrapContai4;\n var inputs = (_this$focusTrapContai3 = this.focusTrapContainer) === null || _this$focusTrapContai3 === void 0 ? void 0 : (_this$focusTrapContai4 = _this$focusTrapContai3.current) === null || _this$focusTrapContai4 === void 0 ? void 0 : _this$focusTrapContai4.querySelectorAll('button,select,input,textarea');\n if (inputs && inputs.length > 0) {\n var element = inputs[inputs.length - 1];\n element.focus();\n }\n }\n handleAddAnd() {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.and);\n this.setState({\n filterItems,\n filterOperators\n });\n }\n handleAddOr() {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.or);\n this.setState({\n filterItems,\n filterOperators\n });\n }\n handleChangeFilterOperator(index, operator) {\n var {\n filterOperators\n } = this.state;\n filterOperators = [...filterOperators];\n assertFilterOperatorValue(operator);\n filterOperators[index] = operator;\n this.setState({\n filterOperators\n });\n this.startUpdateTimer();\n }\n handleFilterChange(filterIndex, selectedType, value) {\n var {\n filterItems\n } = this.state;\n filterItems = [...filterItems];\n var {\n key\n } = filterItems[filterIndex];\n filterItems[filterIndex] = {\n key,\n selectedType,\n value\n };\n this.setState({\n filterItems\n });\n this.startUpdateTimer();\n }\n handleFilterDelete(filterIndex) {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = [...filterItems];\n filterOperators = [...filterOperators];\n if (filterIndex < filterItems.length) {\n filterItems.splice(filterIndex, 1);\n }\n if (filterIndex < filterOperators.length) {\n filterOperators.splice(filterIndex, 1);\n } else if (filterIndex === filterOperators.length) {\n // When deleting the last filter item, we also need to remove the last filter operator\n filterOperators.splice(filterOperators.length - 1, 1);\n }\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n this.setState({\n filterItems,\n filterOperators\n });\n this.startUpdateTimer();\n }\n handleSelectValueChange(selectedValues, invertSelection) {\n this.setState({\n selectedValues,\n invertSelection\n });\n this.startUpdateTimer();\n }\n handleReset() {\n log.debug('Resetting Advanced Filter');\n this.setState({\n filterItems: [AdvancedFilterCreator.makeFilterItem()],\n filterOperators: [],\n selectedValues: [],\n invertSelection: true\n });\n this.startUpdateTimer();\n }\n handleSortDown(event) {\n var addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.descending, addToExisting);\n }\n handleSortUp(event) {\n var addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.ascending, addToExisting);\n }\n handleSubmit(event) {\n log.debug('Submitting Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n event.preventDefault();\n }\n handleDone(event) {\n log.debug('Submitting and Closing Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n var {\n onDone\n } = this.props;\n onDone();\n event.preventDefault();\n }\n handleUpdateTimeout() {\n this.debounceTimeout = undefined;\n this.sendUpdate();\n }\n\n /**\n * Convenience function to check if the previous filter has been inputted, and\n * we should show the add filter buttons (+ AND OR)\n * @returns true If the add filter buttons should be shown, false otherwise\n */\n shouldShowAddFilter() {\n var {\n filterItems\n } = this.state;\n if (filterItems.length === 0) {\n return false;\n }\n var filterItem = filterItems[filterItems.length - 1];\n var {\n selectedType,\n value\n } = filterItem;\n return selectedType != null && selectedType.length > 0 && value != null && value.length > 0;\n }\n\n /**\n * Sorts the table in the specified direction. If already sorted in that direction, remove it.\n * @param direction The sort direction, ASC or DESC\n * @param addToExisting Add to the existing sort, or replace the existing table sort\n */\n sortTable(direction) {\n var addToExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n column,\n onSortChange\n } = this.props;\n var {\n isSortable\n } = this.state;\n if (isSortable) {\n onSortChange(column, direction, addToExisting);\n }\n }\n startUpdateTimer() {\n this.stopUpdateTimer();\n this.debounceTimeout = setTimeout(this.handleUpdateTimeout, AdvancedFilterCreator.debounceFilterUpdate);\n }\n stopUpdateTimer() {\n if (this.debounceTimeout !== undefined) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n sendUpdate() {\n var {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues\n } = this.state;\n var {\n column,\n onFilterChange,\n model,\n tableUtils\n } = this.props;\n var {\n formatter\n } = model;\n var items = filterItems.filter(_ref2 => {\n var {\n selectedType,\n value\n } = _ref2;\n return selectedType != null && value != null && value !== '';\n });\n var operators = filterOperators.filter((operator, i) => operator != null && filterItems[i].selectedType != null && filterItems[i].value != null && filterItems[i].value !== '').slice(0, items.length - 1);\n // slice last operator, user may have set an operator but not a value\n\n var options = {\n filterItems: items,\n filterOperators: operators,\n invertSelection,\n selectedValues\n };\n var filter = tableUtils.makeAdvancedFilter(column, options, formatter.timeZone);\n onFilterChange(column, filter, options);\n }\n render() {\n var _this = this;\n var {\n column,\n model,\n sortDirection,\n formatter,\n tableUtils\n } = this.props;\n var {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTable,\n valuesTableError,\n isSortable\n } = this.state;\n var {\n dh,\n isValuesTableAvailable\n } = model;\n var isBoolean = TableUtils.isBooleanType(column.type);\n var isDateType = TableUtils.isDateType(column.type);\n var filterTypes = this.getFilterTypes(column.type);\n var columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n var filterItemElements = [];\n if (!isBoolean && filterTypes.length) {\n var _loop = function _loop(i) {\n var filterItem = filterItems[i];\n var {\n key,\n selectedType,\n value\n } = filterItem;\n var element = /*#__PURE__*/_jsx(AdvancedFilterCreatorFilterItem, {\n column: column,\n filterTypes: filterTypes,\n onChange: _this.getFilterChangeHandler(i),\n onDelete: _this.getFilterDeleteHandler(i),\n selectedType: selectedType,\n value: value,\n formatter: formatter,\n tableUtils: tableUtils\n }, key);\n filterItemElements.push(element);\n if (i < filterOperators.length) {\n var filterOperator = filterOperators[i];\n var isAndFilter = filterOperator === FilterOperator.and;\n var operatorElement = /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row justify-content-end advanced-filter-creator-filter-operator\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('filter-operator', {\n active: isAndFilter\n }),\n onClick: () => _this.handleChangeFilterOperator(i, FilterOperator.and),\n children: \"AND\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('filter-operator', {\n active: !isAndFilter\n }),\n onClick: () => _this.handleChangeFilterOperator(i, FilterOperator.or),\n children: \"OR\"\n })]\n }, \"filterOperator\".concat(key));\n filterItemElements.push(operatorElement);\n }\n };\n for (var i = 0; i < filterItems.length; i += 1) {\n _loop(i);\n }\n }\n var showAddFilterItem = this.shouldShowAddFilter();\n var addFilterItem = /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('form-row justify-content-end add-filter-item', {\n hidden: !showAddFilterItem\n }),\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"text-muted\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhNewCircleLargeFilled\n })\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-filter-item\",\n onClick: this.handleAddAnd,\n disabled: !showAddFilterItem,\n tooltip: \"Add filter with AND\",\n children: \"AND\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-filter-item\",\n onClick: this.handleAddOr,\n disabled: !showAddFilterItem,\n tooltip: \"Add filter with OR\",\n children: \"OR\"\n })]\n }, \"addFilterItem\");\n filterItemElements.push(addFilterItem);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator\",\n role: \"presentation\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n tabIndex: 0,\n onFocus: this.handleFocusTrapStart\n }), /*#__PURE__*/_jsxs(\"form\", {\n onSubmit: this.handleSubmit,\n ref: this.focusTrapContainer,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"title-bar\",\n children: [/*#__PURE__*/_jsx(\"h6\", {\n className: \"advanced-filter-title\",\n children: \"Advanced Filters\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-menu-buttons\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.descending\n }),\n onClick: this.handleSortDown,\n icon: dhSortAmountDown,\n tooltip: isSortable ? \"Sort \".concat(column.name, \" Descending\") : 'Not sortable',\n disabled: !isSortable\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.ascending\n }),\n onClick: this.handleSortUp,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSortAmountDown,\n rotation: 180\n }),\n tooltip: isSortable ? \"Sort \".concat(column.name, \" Ascending\") : 'Not sortable',\n disabled: !isSortable\n })]\n })]\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-column-name\",\n children: [column.name, \"\\xA0\", /*#__PURE__*/_jsxs(\"span\", {\n className: \"column-type\",\n children: [\"(\", columnType, \")\"]\n })]\n }), filterItemElements, isValuesTableAvailable && valuesTableError == null && /*#__PURE__*/_jsxs(_Fragment, {\n children: [!isBoolean && /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group\",\n children: /*#__PURE__*/_jsx(AdvancedFilterCreatorSelectValue, {\n dh: dh,\n table: valuesTable,\n onChange: this.handleSelectValueChange,\n invertSelection: invertSelection,\n selectedValues: selectedValues,\n formatter: formatter,\n showSearch: !isDateType,\n timeZone: formatter.timeZone\n })\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row justify-content-end\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n className: \"mr-2\",\n onClick: this.handleReset,\n children: \"Reset\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: this.handleDone,\n children: \"Done\"\n })]\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n tabIndex: 0,\n onFocus: this.handleFocusTrapEnd\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreator, \"debounceFilterUpdate\", 250);\n_defineProperty(AdvancedFilterCreator, \"defaultProps\", {\n options: {\n filterItems: null,\n filterOperators: null,\n invertSelection: true,\n selectedValues: []\n },\n sortDirection: null\n});\nexport default AdvancedFilterCreator;\n//# sourceMappingURL=AdvancedFilterCreator.js.map","import { getConditionDBString, getStyleDBString } from \"./ConditionalFormattingUtils.js\"; // Conditional formatting API utils in a separate file\n// to make ConditionalFormattingUtils.ts easier to test.\n// https://github.com/facebook/jest/issues/936#issuecomment-545080082\nexport function makeTernaryFormatRule(config, prevRule) {\n var styleDBString = getStyleDBString(config);\n if (styleDBString === undefined) {\n return undefined;\n }\n var conditionDBString = getConditionDBString(config);\n return \"\".concat(conditionDBString, \" ? \").concat(styleDBString, \" : \").concat(prevRule);\n}\nexport function makeRowFormatColumn(dh, rule) {\n return dh.Column.formatRowColor(rule);\n}\nexport function makeColumnFormatColumn(col, rule) {\n return col.formatColor(rule);\n}\n//# sourceMappingURL=ConditionalFormattingAPIUtils.js.map","import Log from '@deephaven/log';\nimport { DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport { makeColumnFormatColumn, makeRowFormatColumn, makeTernaryFormatRule } from \"./ConditionalFormattingAPIUtils.js\";\nvar log = Log.module('ConditionalFormattingUtils');\nexport var FormatterType;\n(function (FormatterType) {\n FormatterType[\"CONDITIONAL\"] = \"conditional\";\n FormatterType[\"ROWS\"] = \"rows\";\n})(FormatterType || (FormatterType = {}));\nexport var NumberCondition;\n(function (NumberCondition) {\n NumberCondition[\"IS_EQUAL\"] = \"is-equal\";\n NumberCondition[\"IS_NOT_EQUAL\"] = \"is-not-equal\";\n NumberCondition[\"IS_BETWEEN\"] = \"is-between\";\n NumberCondition[\"GREATER_THAN\"] = \"greater-than\";\n NumberCondition[\"GREATER_THAN_OR_EQUAL\"] = \"greater-than-or-equal\";\n NumberCondition[\"LESS_THAN\"] = \"less-than\";\n NumberCondition[\"LESS_THAN_OR_EQUAL\"] = \"less-than-or-equal\";\n NumberCondition[\"IS_NULL\"] = \"is-null\";\n NumberCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n})(NumberCondition || (NumberCondition = {}));\nexport var StringCondition;\n(function (StringCondition) {\n StringCondition[\"IS_EXACTLY\"] = \"is-exactly\";\n StringCondition[\"IS_NOT_EXACTLY\"] = \"is-not-exactly\";\n StringCondition[\"CONTAINS\"] = \"contains\";\n StringCondition[\"DOES_NOT_CONTAIN\"] = \"does-not-contain\";\n StringCondition[\"STARTS_WITH\"] = \"starts-with\";\n StringCondition[\"ENDS_WITH\"] = \"ends-with\";\n StringCondition[\"IS_NULL\"] = \"is-null\";\n StringCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n})(StringCondition || (StringCondition = {}));\nexport var DateCondition;\n(function (DateCondition) {\n DateCondition[\"IS_EXACTLY\"] = \"is-exactly\";\n DateCondition[\"IS_NOT_EXACTLY\"] = \"is-not-exactly\";\n DateCondition[\"IS_BEFORE\"] = \"is-before\";\n DateCondition[\"IS_BEFORE_OR_EQUAL\"] = \"is-before-or-equal\";\n DateCondition[\"IS_AFTER\"] = \"is-after\";\n DateCondition[\"IS_AFTER_OR_EQUAL\"] = \"is-after-or-equal\";\n DateCondition[\"IS_NULL\"] = \"is-null\";\n DateCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n})(DateCondition || (DateCondition = {}));\nexport var BooleanCondition;\n(function (BooleanCondition) {\n BooleanCondition[\"IS_TRUE\"] = \"is-true\";\n BooleanCondition[\"IS_FALSE\"] = \"is-false\";\n BooleanCondition[\"IS_NULL\"] = \"is-null\";\n BooleanCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n})(BooleanCondition || (BooleanCondition = {}));\nexport var CharCondition;\n(function (CharCondition) {\n CharCondition[\"IS_EQUAL\"] = \"is-equal\";\n CharCondition[\"IS_NOT_EQUAL\"] = \"is-not-equal\";\n CharCondition[\"IS_NULL\"] = \"is-null\";\n CharCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n})(CharCondition || (CharCondition = {}));\nexport var FormatStyleType;\n(function (FormatStyleType) {\n FormatStyleType[\"NO_FORMATTING\"] = \"no-formatting\";\n FormatStyleType[\"POSITIVE\"] = \"positive\";\n FormatStyleType[\"NEGATIVE\"] = \"negative\";\n FormatStyleType[\"WARN\"] = \"warn\";\n FormatStyleType[\"NEUTRAL\"] = \"neutral\";\n FormatStyleType[\"ACCENT_1\"] = \"accent-1\";\n FormatStyleType[\"ACCENT_2\"] = \"accent-2\";\n FormatStyleType[\"CUSTOM\"] = \"custom\";\n})(FormatStyleType || (FormatStyleType = {}));\nexport function getLabelForStyleType(option) {\n switch (option) {\n case FormatStyleType.NO_FORMATTING:\n return 'No formatting';\n case FormatStyleType.POSITIVE:\n return 'Positive';\n case FormatStyleType.NEGATIVE:\n return 'Negative';\n case FormatStyleType.WARN:\n return 'Warn';\n case FormatStyleType.NEUTRAL:\n return 'Neutral';\n case FormatStyleType.ACCENT_1:\n return 'Accent 1';\n case FormatStyleType.ACCENT_2:\n return 'Accent 2';\n case FormatStyleType.CUSTOM:\n return 'Custom...';\n }\n}\nexport function getBackgroundForStyleConfig(config) {\n var {\n type,\n customConfig\n } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#9fde6f';\n case FormatStyleType.NEGATIVE:\n return '#ff6087';\n case FormatStyleType.WARN:\n return '#f67f40';\n case FormatStyleType.NEUTRAL:\n return '#ffd95c';\n case FormatStyleType.ACCENT_1:\n return '#78dce8';\n case FormatStyleType.ACCENT_2:\n return '#ab9bf5';\n case FormatStyleType.CUSTOM:\n return customConfig === null || customConfig === void 0 ? void 0 : customConfig.background;\n default:\n return undefined;\n }\n}\nexport function getColorForStyleConfig(config) {\n var {\n type,\n customConfig\n } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#526a3f';\n case FormatStyleType.NEGATIVE:\n return '#802f44';\n case FormatStyleType.WARN:\n return '#663318';\n case FormatStyleType.NEUTRAL:\n return '#63562b';\n case FormatStyleType.ACCENT_1:\n return '#3f6469';\n case FormatStyleType.ACCENT_2:\n return '#554d72';\n case FormatStyleType.CUSTOM:\n return customConfig === null || customConfig === void 0 ? void 0 : customConfig.color;\n default:\n return undefined;\n }\n}\nexport function getStyleDBString(config) {\n var color = getColorForStyleConfig(config.style);\n var bg = getBackgroundForStyleConfig(config.style);\n if (color === undefined || bg === undefined) {\n return undefined;\n }\n return \"bgfg(`\".concat(bg, \"`, `\").concat(color, \"`)\");\n}\nfunction getNumberConditionText(config) {\n var {\n column,\n value,\n start,\n end\n } = config;\n return getTextForNumberCondition(column.name, config.condition, value, start, end);\n}\nfunction getStringConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForStringCondition(column.name, config.condition, value);\n}\nfunction getDateConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForDateCondition(column.name, config.condition, value);\n}\nfunction getBooleanConditionText(config) {\n var {\n column\n } = config;\n return getTextForBooleanCondition(column.name, config.condition);\n}\nfunction getCharConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForCharCondition(column.name, config.condition, value);\n}\nexport function getConditionDBString(config) {\n var {\n column\n } = config;\n if (TableUtils.isNumberType(column.type)) {\n return getNumberConditionText(config);\n }\n if (TableUtils.isCharType(column.type)) {\n return getCharConditionText(config);\n }\n if (TableUtils.isStringType(column.type)) {\n return getStringConditionText(config);\n }\n if (TableUtils.isDateType(column.type)) {\n return getDateConditionText(config);\n }\n if (TableUtils.isBooleanType(column.type)) {\n return getBooleanConditionText(config);\n }\n throw new Error('Invalid column type');\n}\nexport function getLabelForNumberCondition(condition) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return 'is equal to';\n case NumberCondition.IS_NOT_EQUAL:\n return 'is not equal to';\n case NumberCondition.IS_BETWEEN:\n return 'is between';\n case NumberCondition.GREATER_THAN:\n return 'greater than';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return 'greater than or equal to';\n case NumberCondition.LESS_THAN:\n return 'less than';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return 'less than or equal to';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForStringCondition(condition) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return 'is exactly';\n case StringCondition.IS_NOT_EXACTLY:\n return 'is not exactly';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForDateCondition(condition) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return 'is';\n case DateCondition.IS_NOT_EXACTLY:\n return 'is not';\n case DateCondition.IS_BEFORE:\n return 'is before';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return 'is before or equal';\n case DateCondition.IS_AFTER:\n return 'is after';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return 'is after or equal';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForBooleanCondition(condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForCharCondition(condition) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return 'is';\n case CharCondition.IS_NOT_EQUAL:\n return 'is not';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getDefaultConditionForType(columnType) {\n if (TableUtils.isNumberType(columnType)) {\n return NumberCondition.IS_EQUAL;\n }\n if (TableUtils.isCharType(columnType)) {\n return CharCondition.IS_EQUAL;\n }\n if (TableUtils.isStringType(columnType)) {\n return StringCondition.IS_EXACTLY;\n }\n if (TableUtils.isDateType(columnType)) {\n return DateCondition.IS_EXACTLY;\n }\n if (TableUtils.isBooleanType(columnType)) {\n return BooleanCondition.IS_TRUE;\n }\n throw new Error('Invalid column type');\n}\nexport function getDefaultValueForType(columnType) {\n if (TableUtils.isCharType(columnType)) {\n return '';\n }\n if (TableUtils.isStringType(columnType)) {\n return '';\n }\n return undefined;\n}\nexport function getConditionConfig(config) {\n var {\n condition,\n value,\n start,\n end\n } = config;\n return {\n condition,\n value,\n start,\n end\n };\n}\nexport function getDefaultConditionConfigForType(type) {\n return {\n condition: getDefaultConditionForType(type),\n value: getDefaultValueForType(type),\n start: undefined,\n end: undefined\n };\n}\nexport function getDefaultStyleConfig() {\n return {\n type: FormatStyleType.NO_FORMATTING\n };\n}\nfunction getShortLabelForStringCondition(condition) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return '==';\n case StringCondition.IS_NOT_EXACTLY:\n return '!=';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForDateCondition(condition) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return '==';\n case DateCondition.IS_NOT_EXACTLY:\n return '!=';\n case DateCondition.IS_BEFORE:\n return '<';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return '<=';\n case DateCondition.IS_AFTER:\n return '>';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return '>=';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForBooleanCondition(condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForCharCondition(condition) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return '==';\n case CharCondition.IS_NOT_EQUAL:\n return '!=';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getShortLabelForNumberCondition(condition) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return '==';\n case NumberCondition.IS_NOT_EQUAL:\n return '!=';\n case NumberCondition.IS_BETWEEN:\n return '==';\n case NumberCondition.GREATER_THAN:\n return '>';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return '>=';\n case NumberCondition.LESS_THAN:\n return '<';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return '<=';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getTextForNumberCondition(columnName, condition, value, start, end) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return \"\".concat(columnName, \" == \").concat(value);\n case NumberCondition.IS_NOT_EQUAL:\n return \"\".concat(columnName, \" != \").concat(value);\n case NumberCondition.IS_BETWEEN:\n return \"\".concat(columnName, \" > \").concat(start, \" && \").concat(columnName, \" < \").concat(end);\n case NumberCondition.GREATER_THAN:\n return \"\".concat(columnName, \" > \").concat(value);\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return \"\".concat(columnName, \" >= \").concat(value);\n case NumberCondition.LESS_THAN:\n return \"\".concat(columnName, \" < \").concat(value);\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return \"\".concat(columnName, \" <= \").concat(value);\n case NumberCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case NumberCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForStringCondition(columnName, condition, value) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return \"\".concat(columnName, \" == \\\"\").concat(value, \"\\\"\");\n case StringCondition.IS_NOT_EXACTLY:\n return \"\".concat(columnName, \" != \\\"\").concat(value, \"\\\"\");\n case StringCondition.CONTAINS:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".contains(\\\"\").concat(value, \"\\\")\");\n case StringCondition.DOES_NOT_CONTAIN:\n return \"\".concat(columnName, \" != null && !\").concat(columnName, \".contains(\\\"\").concat(value, \"\\\")\");\n case StringCondition.STARTS_WITH:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".startsWith(\\\"\").concat(value, \"\\\")\");\n case StringCondition.ENDS_WITH:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".endsWith(\\\"\").concat(value, \"\\\")\");\n case StringCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case StringCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForDateCondition(columnName, condition, value) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return \"\".concat(columnName, \" == convertDateTime(\\\"\").concat(value, \"\\\")\");\n case DateCondition.IS_NOT_EXACTLY:\n return \"\".concat(columnName, \" != convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_BEFORE:\n return \"\".concat(columnName, \" < convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return \"\".concat(columnName, \" <= convertDateTime(\\\"\").concat(value, \"\\\")\");\n case DateCondition.IS_AFTER:\n return \"\".concat(columnName, \" > convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_AFTER_OR_EQUAL:\n return \"\".concat(columnName, \" >= convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case DateCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForBooleanCondition(columnName, condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return \"\".concat(columnName, \" == true\");\n case BooleanCondition.IS_FALSE:\n return \"\".concat(columnName, \" == false\");\n case BooleanCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case BooleanCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForCharCondition(columnName, condition, value) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return \"\".concat(columnName, \" == '\").concat(value, \"'\");\n case CharCondition.IS_NOT_EQUAL:\n return \"\".concat(columnName, \" != '\").concat(value, \"'\");\n case CharCondition.IS_NULL:\n return \"isNull(\".concat(columnName, \")\");\n case CharCondition.IS_NOT_NULL:\n return \"!isNull(\".concat(columnName, \")\");\n }\n}\nexport function getShortLabelForConditionType(columnType, condition) {\n if (TableUtils.isNumberType(columnType)) {\n return getShortLabelForNumberCondition(condition);\n }\n if (TableUtils.isCharType(columnType)) {\n return getShortLabelForCharCondition(condition);\n }\n if (TableUtils.isStringType(columnType)) {\n return getShortLabelForStringCondition(condition);\n }\n if (TableUtils.isDateType(columnType)) {\n return getShortLabelForDateCondition(condition);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getShortLabelForBooleanCondition(condition);\n }\n throw new Error('Invalid column type');\n}\n\n/**\n * Get format columns array for the given columns and formatting rules\n * @param columns Available columns\n * @param rules Formatting rules to build the format columns from\n * @returns Array of format columns\n */\nexport function getFormatColumns(dh, columns, rules) {\n if (rules === undefined) {\n log.debug(\"no rules passed.\");\n return [];\n }\n var result = [];\n // There can be only one row format custom column\n // and multiple column format custom columns (one per column)\n var rowFormatConfig;\n var columnFormatConfigMap = new Map();\n rules.forEach(_ref => {\n var _ref3;\n var {\n config,\n type: formatterType\n } = _ref;\n var {\n column\n } = config;\n // Check both name and type because the type can change\n var col = columns.find(_ref2 => {\n var {\n name,\n type\n } = _ref2;\n return name === column.name && type === column.type;\n });\n if (col === undefined) {\n log.debug(\"Column \".concat(column.name, \":\").concat(column.type, \" not found. Ignoring format rule.\"), config);\n return;\n }\n // Stack ternary format conditions by column\n var [prevRule, prevFormatColumn] = (_ref3 = formatterType === FormatterType.CONDITIONAL ? columnFormatConfigMap.get(col.name) : rowFormatConfig) !== null && _ref3 !== void 0 ? _ref3 : ['null', undefined];\n var rule = makeTernaryFormatRule(config, prevRule);\n if (rule === undefined) {\n log.debug(\"Ignoring format rule.\", config);\n return;\n }\n // Replace existing formatColumn with the new stacked format\n var index = prevFormatColumn === undefined ? -1 : result.indexOf(prevFormatColumn);\n if (index > -1) {\n result.splice(index, 1);\n }\n var formatColumn = formatterType === FormatterType.CONDITIONAL ? makeColumnFormatColumn(col, rule) : makeRowFormatColumn(dh, rule);\n result.push(formatColumn);\n if (formatterType === FormatterType.CONDITIONAL) {\n columnFormatConfigMap.set(col.name, [rule, formatColumn]);\n } else {\n rowFormatConfig = [rule, formatColumn];\n }\n });\n return result;\n}\n\n/**\n * Validate that a given date condition + value pair is valid.\n * @param condition\n * @param value\n */\nexport function isDateConditionValid(dh, condition, value) {\n switch (condition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return true;\n default:\n {\n var [dateTimeString, ...rest] = (value !== null && value !== void 0 ? value : '').split(' ');\n // Reconstitute all tokens after the first ' ' in case the user included garbage data at the end\n // e.g. '2020-01-01 NY blah'\n var tzCode = rest.join(' ');\n try {\n DateUtils.parseDateTimeString(dateTimeString);\n } catch (e) {\n log.debug('Invalid datetime string', dateTimeString);\n return false;\n }\n try {\n dh.i18n.TimeZone.getTimeZone(tzCode);\n } catch (e) {\n log.debug('Invalid timezone string', tzCode);\n return false;\n }\n return true;\n }\n }\n}\nexport function isSupportedColumn(_ref4) {\n var {\n type\n } = _ref4;\n return TableUtils.isNumberType(type) || TableUtils.isCharType(type) || TableUtils.isStringType(type) || TableUtils.isDateType(type) || TableUtils.isBooleanType(type);\n}\n//# sourceMappingURL=ConditionalFormattingUtils.js.map","import React from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport \"./IrisGridBottomBar.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function IrisGridBottomBar(_ref) {\n var {\n animation = 'iris-grid-bottom-bar-slide-up',\n children,\n className,\n isShown,\n onClick,\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = _ref;\n return /*#__PURE__*/_jsx(CSSTransition, {\n in: isShown,\n timeout: ThemeExport.transitionMs,\n classNames: animation,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: classNames('iris-grid-bottom-bar', className),\n role: \"presentation\",\n onClick: onClick,\n onKeyPress: onClick,\n children: children\n })\n });\n}\nexport default IrisGridBottomBar;\n//# sourceMappingURL=IrisGridBottomBar.js.map","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./PendingDataBottomBar.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar HIDE_TIMEOUT = 3000;\nvar MAX_NUMBER_ROWS_SHOWN = 5;\nexport function PendingDataBottomBar(_ref) {\n var {\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited: _onExited\n } = _ref;\n var [isSuccessShown, setIsSuccessShown] = useState(false);\n var [wasSuccessShown, setWasSuccessShown] = useState(false);\n var successTimeout = useRef();\n var prevIsSaving = usePrevious(isSaving);\n var errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return \"Key can't be empty (on pending row\".concat(pendingDataErrors.size > 1 ? 's' : '', \" \").concat(Array.from(pendingDataErrors.keys()).join(', ').trim(), \")\");\n }\n return \"Key can't be empty (on \".concat(pendingDataErrors.size, \" rows)\");\n }, [error, pendingDataErrors]);\n useEffect(function showSuccessMessage() {\n if (prevIsSaving != null && prevIsSaving && !isSaving && errorMessage == null) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n }, [errorMessage, isSaving, prevIsSaving]);\n useEffect(function hideSuccessMessage() {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n }, [pendingDataMap]);\n useEffect(function cleanupTimeout() {\n return () => successTimeout.current ? clearTimeout(successTimeout.current) : undefined;\n }, []);\n var pendingRowCount = pendingDataMap.size;\n var commitIcon;\n if (isSaving) {\n commitIcon = /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n });\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n return /*#__PURE__*/_jsxs(IrisGridBottomBar, {\n className: \"pending-data-bottom-bar\",\n isShown: pendingRowCount > 0 || isSuccessShown || errorMessage != null,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: () => {\n setWasSuccessShown(false);\n if (_onExited) {\n _onExited();\n }\n },\n children: [errorMessage != null && errorMessage !== '' && /*#__PURE__*/_jsxs(\"div\", {\n className: \"error-message\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsWarning\n }), /*#__PURE__*/_jsx(\"span\", {\n children: \"\".concat(errorMessage)\n })]\n }), (errorMessage == null || errorMessage === '') && /*#__PURE__*/_jsx(\"div\", {\n className: \"status-message\",\n children: pendingRowCount > 0 && /*#__PURE__*/_jsx(\"span\", {\n children: \"\".concat(pendingRowCount, \" row\").concat(pendingRowCount > 1 ? 's' : '', \" pending\")\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"buttons-container\",\n children: [!isSaving && !wasSuccessShown && /*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: onDiscard,\n tooltip: discardTooltip,\n children: \"Discard\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: wasSuccessShown ? 'success' : 'primary',\n onClick: onSave,\n icon: commitIcon,\n disabled: isSaving || wasSuccessShown || errorMessage != null,\n tooltip: saveTooltip,\n children: [isSaving && \"Committing...\", !isSaving && wasSuccessShown && \"Success\", !isSaving && !wasSuccessShown && \"Commit\"]\n })]\n })]\n });\n}\nexport default PendingDataBottomBar;\n//# sourceMappingURL=PendingDataBottomBar.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { Button, FadeTransition, LoadingSpinner } from '@deephaven/components';\nimport { GridRange, GridUtils } from '@deephaven/grid';\nimport { CanceledPromiseError, copyToClipboard, PromiseUtils } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./IrisGridCopyHandler.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridCopyHandler');\nfunction isCopyRangesOperation(copyOperation) {\n return copyOperation.ranges != null;\n}\nfunction isCopyHeaderOperation(copyOperation) {\n return copyOperation.columnIndex != null;\n}\n/**\n * Component for handling copying of data from the Iris Grid.\n * - Prompts if necessary (large amount of rows copied)\n * - Tries to async copy, falls back to showing a \"Click to Copy\" button if that fails\n */\nclass IrisGridCopyHandler extends Component {\n /**\n * Different states for the current copy operation\n */\n\n static getStatusMessageText(copyState, rowCount) {\n switch (copyState) {\n case IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED:\n return \"Are you sure you want to copy \".concat(rowCount.toLocaleString(), \" rows to your clipboard?\");\n case IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED:\n return \"Fetched \".concat(rowCount.toLocaleString(), \" rows!\");\n case IrisGridCopyHandler.COPY_STATES.FETCH_ERROR:\n return 'Unable to copy data.';\n case IrisGridCopyHandler.COPY_STATES.FETCH_RANGES_IN_PROGRESS:\n return \"Fetching \".concat(rowCount.toLocaleString(), \" rows for clipboard...\");\n case IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS:\n return 'Fetching header for clipboard...';\n case IrisGridCopyHandler.COPY_STATES.DONE:\n return 'Copied to Clipboard!';\n default:\n return '';\n }\n }\n static getCopyButtonText(buttonState) {\n switch (buttonState) {\n case IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS:\n return 'Fetching';\n case IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY:\n return 'Click to Copy';\n case IrisGridCopyHandler.BUTTON_STATES.RETRY:\n return 'Retry';\n default:\n return 'Copy';\n }\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"textData\", void 0);\n _defineProperty(this, \"hideTimer\", void 0);\n _defineProperty(this, \"fetchPromise\", void 0);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleCopyClick = this.handleCopyClick.bind(this);\n this.handleHideTimeout = this.handleHideTimeout.bind(this);\n this.state = {\n error: undefined,\n copyState: IrisGridCopyHandler.COPY_STATES.IDLE,\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n isShown: false,\n rowCount: 0\n };\n }\n componentDidMount() {\n var {\n copyOperation\n } = this.props;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n componentDidUpdate(prevProps) {\n var {\n copyOperation\n } = this.props;\n if (prevProps.copyOperation !== copyOperation) {\n this.startCopy();\n }\n }\n componentWillUnmount() {\n this.stopCopy();\n }\n startCopy() {\n log.debug2('startCopy');\n this.stopCopy();\n var {\n copyOperation\n } = this.props;\n if (copyOperation == null) {\n log.debug2('No copy operation set, cancelling out');\n this.setState({\n isShown: false\n });\n return;\n }\n var {\n error\n } = copyOperation;\n if (error != null) {\n log.debug('Showing copy error', error);\n this.setState({\n isShown: true,\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n error\n });\n this.startHideTimer();\n return;\n }\n this.setState({\n isShown: true,\n error: undefined\n });\n if (isCopyRangesOperation(copyOperation)) {\n var {\n ranges\n } = copyOperation;\n var rowCount = GridRange.rowCount(ranges);\n this.setState({\n rowCount\n });\n if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED\n });\n return;\n }\n }\n this.startFetch();\n }\n stopCopy() {\n this.textData = undefined;\n this.stopFetch();\n this.stopHideTimer();\n }\n handleBackgroundClick() {\n log.debug2('handleBackgroundClick');\n var {\n copyState\n } = this.state;\n if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {\n this.setState({\n isShown: false\n });\n }\n }\n handleCancelClick() {\n log.debug2('handleCancelClick');\n this.stopFetch();\n this.setState({\n isShown: false\n });\n }\n handleCopyClick() {\n var _this = this;\n return _asyncToGenerator(function* () {\n log.debug2('handleCopyClick');\n if (_this.textData != null) {\n try {\n yield _this.copyText(_this.textData);\n _this.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n _this.setState({\n error: 'Unable to copy. Verify your browser permissions.'\n });\n }\n } else {\n _this.startFetch();\n }\n })();\n }\n handleHideTimeout() {\n log.debug2('handleHideTimeout');\n this.stopHideTimer();\n this.setState({\n isShown: false\n });\n }\n copyText(text) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n log.debug2('copyText', text);\n _this2.textData = text;\n yield copyToClipboard(text);\n })();\n }\n showCopyDone() {\n this.setState({\n copyState: IrisGridCopyHandler.COPY_STATES.DONE\n });\n this.startHideTimer();\n }\n startFetch() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n _this3.stopFetch();\n var {\n model,\n copyOperation\n } = _this3.props;\n if (isCopyHeaderOperation(copyOperation)) {\n var {\n columnIndex,\n columnDepth,\n movedColumns\n } = copyOperation;\n log.debug('startFetch copyHeader', columnIndex, columnDepth);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS\n });\n var modelIndex = GridUtils.getModelIndex(columnIndex, movedColumns);\n var copyText = model.textForColumnHeader(modelIndex, columnDepth);\n if (copyText === undefined) {\n _this3.fetchPromise = undefined;\n _this3.setState({\n error: 'Invalid column header selected.',\n copyState: IrisGridCopyHandler.COPY_STATES.DONE\n });\n return;\n }\n _this3.fetchPromise = PromiseUtils.makeCancelable(copyText);\n } else {\n var {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns: _movedColumns,\n formatValues\n } = copyOperation;\n log.debug('startFetch copyRanges', ranges);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_RANGES_IN_PROGRESS\n });\n var hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n var modelRanges = GridUtils.getModelRanges(ranges, _movedColumns);\n if (hiddenColumns.length > 0) {\n var subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(modelRanges, subtractRanges);\n }\n\n // Remove the hidden columns from the snapshot\n var formatValue = formatValues != null && formatValues ? (value, column) => model.displayString(value, column.type, column.name) : value => \"\".concat(value);\n _this3.fetchPromise = PromiseUtils.makeCancelable(model.textSnapshot(modelRanges, includeHeaders, formatValue));\n }\n try {\n var text = yield _this3.fetchPromise;\n _this3.fetchPromise = undefined;\n try {\n yield _this3.copyText(text);\n _this3.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED\n });\n }\n } catch (e) {\n if (e instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', e);\n _this3.fetchPromise = undefined;\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR\n });\n }\n }\n })();\n }\n stopFetch() {\n if (this.fetchPromise) {\n log.debug2('stopFetch');\n this.fetchPromise.cancel();\n this.fetchPromise = undefined;\n }\n }\n startHideTimer() {\n this.stopHideTimer();\n this.hideTimer = setTimeout(this.handleHideTimeout, IrisGridCopyHandler.HIDE_TIMEOUT);\n }\n stopHideTimer() {\n if (this.hideTimer != null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n render() {\n var {\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = this.props;\n var {\n buttonState,\n copyState,\n isShown,\n rowCount,\n error\n } = this.state;\n var animation = copyState === IrisGridCopyHandler.COPY_STATES.DONE ? 'fade' : 'copy-slide-up';\n var copyButtonText = IrisGridCopyHandler.getCopyButtonText(buttonState);\n var statusMessageText = error !== null && error !== void 0 ? error : IrisGridCopyHandler.getStatusMessageText(copyState, rowCount);\n var isButtonContainerVisible = copyState !== IrisGridCopyHandler.COPY_STATES.DONE;\n var isFetching = buttonState === IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS;\n var isDone = copyState === IrisGridCopyHandler.COPY_STATES.DONE;\n return /*#__PURE__*/_jsxs(IrisGridBottomBar, {\n animation: animation,\n isShown: isShown,\n className: classNames('iris-grid-copy-handler', {\n 'copy-done': isDone\n }),\n onClick: this.handleBackgroundClick,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"status-message\",\n children: /*#__PURE__*/_jsx(\"span\", {\n children: statusMessageText\n })\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: isButtonContainerVisible,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"buttons-container\",\n children: [/*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-outline-secondary btn-cancel\",\n onClick: this.handleCancelClick,\n children: \"Cancel\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: isFetching ? 'tertiary' : 'primary',\n className: classNames('btn-copy', {\n 'btn-spinner': isFetching\n }),\n onClick: this.handleCopyClick,\n disabled: isFetching,\n children: [isFetching && /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n }), copyButtonText]\n })]\n })\n })]\n });\n }\n}\n_defineProperty(IrisGridCopyHandler, \"NO_PROMPT_THRESHOLD\", 10000);\n_defineProperty(IrisGridCopyHandler, \"HIDE_TIMEOUT\", 3000);\n_defineProperty(IrisGridCopyHandler, \"COPY_STATES\", {\n // No copy operation in progress\n IDLE: 'IDLE',\n // Large copy operation, confirmation required\n CONFIRMATION_REQUIRED: 'CONFIRMATION_REQUIRED',\n // Fetch is currently in progress for copy ranges operation\n FETCH_RANGES_IN_PROGRESS: 'FETCH_RANGES_IN_PROGRESS',\n // Fetch is currently in progress for copy header operation\n FETCH_HEADER_IN_PROGRESS: 'FETCH_HEADER_IN_PROGRESS',\n // There was an error fetching the data\n FETCH_ERROR: 'FETCH_ERROR',\n // Click is required to copy\n CLICK_REQUIRED: 'CLICK_REQUIRED',\n // The copy operation is completed and successfully copied to the clipboard\n DONE: 'DONE'\n});\n_defineProperty(IrisGridCopyHandler, \"BUTTON_STATES\", {\n COPY: 'COPY',\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n CLICK_TO_COPY: 'CLICK_TO_COPY',\n RETRY: 'RETRY'\n});\n_defineProperty(IrisGridCopyHandler, \"defaultProps\", {\n copyOperation: null,\n onEntering: () => undefined,\n onEntered: () => undefined,\n onExiting: () => undefined,\n onExited: () => undefined\n});\nexport default IrisGridCopyHandler;\n//# sourceMappingURL=IrisGridCopyHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport \"./FilterInputField.css\";\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"inputField\", void 0);\n _defineProperty(this, \"initialValue\", void 0);\n _defineProperty(this, \"debouncedSendUpdate\", void 0);\n var {\n debounceMs\n } = props;\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleCommit = this.handleCommit.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.inputField = null;\n var {\n value\n } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value\n };\n }\n componentDidMount() {\n var _this$inputField;\n (_this$inputField = this.inputField) === null || _this$inputField === void 0 ? void 0 : _this$inputField.focus();\n }\n componentDidUpdate(prevProps) {\n var {\n debounceMs\n } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n }\n }\n componentWillUnmount() {\n this.debouncedSendUpdate.cancel();\n }\n // clear filters needs to be able to reset the value externally\n // and due to the way this component handles its own debouncing\n // this was easier than moving state up.\n setValue(value) {\n this.initialValue = value;\n this.setState({\n value\n });\n }\n focus() {\n var _this$inputField2;\n (_this$inputField2 = this.inputField) === null || _this$inputField2 === void 0 ? void 0 : _this$inputField2.focus();\n }\n handleChange(event) {\n var {\n value\n } = event.target;\n this.setState({\n value,\n isChanged: true\n });\n this.debouncedSendUpdate(value);\n }\n handleCancel() {\n this.debouncedSendUpdate.cancel();\n var {\n initialValue\n } = this;\n var {\n isChanged\n } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n var {\n onDone\n } = this.props;\n onDone();\n }\n handleCommit() {\n var setGridFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var defocusInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n this.debouncedSendUpdate.flush();\n var {\n onDone\n } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n handleFocus() {\n var _this$inputField3;\n (_this$inputField3 = this.inputField) === null || _this$inputField3 === void 0 ? void 0 : _this$inputField3.select();\n }\n handleBlur(event) {\n var {\n relatedTarget\n } = event;\n // handleCommit results in a call that steals focus\n if (relatedTarget != null && relatedTarget.classList.contains('context-menu-container')) {\n // input blurred by calling context-menu\n // don't set grid focus, but do null column focus\n this.handleCommit(false, true);\n } else if (relatedTarget != null && relatedTarget.classList.contains('advanced-filter-button')) {\n // blurred by clicking an advanced filter button\n // don't set grid focus, maintain focusedFilterBarColumn state\n this.handleCommit(false, false);\n } else {\n // clear both, blurred elsewhere\n this.handleCommit(true, true);\n }\n }\n handleTab() {\n var backward = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n this.debouncedSendUpdate.flush();\n var {\n onTab\n } = this.props;\n onTab(backward);\n }\n handleKeyDown(event) {\n switch (event.key) {\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.handleCancel();\n break;\n case 'Enter':\n event.stopPropagation();\n event.preventDefault();\n this.handleCommit();\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n this.handleTab(event.shiftKey);\n break;\n default:\n break;\n }\n }\n handleContextMenu(event) {\n var {\n onContextMenu\n } = this.props;\n onContextMenu(event);\n }\n sendUpdate(value) {\n var {\n onChange\n } = this.props;\n onChange(value);\n }\n render() {\n var {\n className,\n style,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered\n } = this.props;\n var {\n value\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n style: style,\n className: \"iris-grid-input-autosized-wrapper\",\n \"data-value\": value // used by css based autosizer\n ,\n children: [/*#__PURE__*/_jsx(\"input\", {\n ref: inputField => {\n this.inputField = inputField;\n },\n className: classNames('iris-grid-input-field', className),\n type: \"text\",\n value: value,\n onBlur: this.handleBlur,\n onFocus: this.handleFocus,\n onChange: this.handleChange,\n onKeyDown: this.handleKeyDown,\n onContextMenu: this.handleContextMenu,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-button-container\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isAdvancedFilterSet\n }),\n onClick: onAdvancedFiltersTriggered,\n onContextMenu: this.handleContextMenu,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers \",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhFilterFilled,\n className: \"filter-solid\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsFilter,\n className: \"filter-light\"\n })]\n })\n })\n })]\n });\n }\n}\n_defineProperty(FilterInputField, \"defaultProps\", {\n style: {},\n className: '',\n value: '',\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: () => undefined,\n onChange: () => undefined,\n onDone: () => undefined,\n onTab: () => undefined,\n onContextMenu: () => undefined,\n debounceMs: 150\n});\nexport default FilterInputField;\n//# sourceMappingURL=FilterInputField.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { KeyHandler } from '@deephaven/grid';\nimport { ContextActionUtils } from '@deephaven/components';\nclass CopyCellKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n onDown(event, grid) {\n if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey) {\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n var gridPoint = grid.getGridPointFromXY(mouseX, mouseY);\n if (gridPoint.column != null && gridPoint.row != null) {\n this.cursor = this.irisGrid.props.copyCursor;\n return true;\n }\n }\n return false;\n }\n onUp(event, grid) {\n if (this.cursor === this.irisGrid.props.copyCursor) {\n this.cursor = null;\n return true;\n }\n return false;\n }\n}\nexport default CopyCellKeyHandler;\n//# sourceMappingURL=CopyCellKeyHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { ContextActionUtils } from '@deephaven/components';\nimport { KeyHandler } from '@deephaven/grid';\nimport IrisGridUtils from \"../IrisGridUtils.js\";\nclass CopyKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n var {\n selectedRanges\n } = this.irisGrid.state;\n if (event.key === 'c' && ContextActionUtils.isModifierKeyDown(event)) {\n if (IrisGridUtils.isValidSnapshotRanges(selectedRanges)) {\n this.irisGrid.copyRanges(selectedRanges);\n } else {\n this.irisGrid.copyRanges(selectedRanges, false, false, 'Invalid copy ranges');\n }\n return true;\n }\n return false;\n }\n}\nexport default CopyKeyHandler;\n//# sourceMappingURL=CopyKeyHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { KeyHandler } from '@deephaven/grid';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport IrisGridShortcuts from \"../IrisGridShortcuts.js\";\nclass ReverseKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n if (IrisGridShortcuts.TABLE.REVERSE.matchesEvent(event)) {\n if (!this.irisGrid.isReversible()) {\n return false;\n }\n var {\n reverseType\n } = this.irisGrid.state;\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 return true;\n }\n return false;\n }\n}\nexport default ReverseKeyHandler;\n//# sourceMappingURL=ReverseKeyHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { KeyHandler } from '@deephaven/grid';\nimport IrisGridShortcuts from \"../IrisGridShortcuts.js\";\nclass ClearFilterKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n if (IrisGridShortcuts.TABLE.CLEAR_FILTERS.matchesEvent(event)) {\n this.irisGrid.clearAllFilters();\n return true;\n }\n return false;\n }\n}\nexport default ClearFilterKeyHandler;\n//# sourceMappingURL=ClearFilterKeyHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { GridMouseHandler } from '@deephaven/grid';\nimport deepEqual from 'fast-deep-equal';\n/**\n * Handles cursor and click action for cell overflow button\n * The button is rendered via IrisGridRenderer\n */\nclass IrisGridCellOverflowMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(850); // Needs to be before GridSelectionMouseHandler\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n destroyColumnTooltip() {\n this.irisGrid.setState({\n overflowButtonTooltipProps: null\n });\n }\n setCursor(point) {\n if (this.isHoveringOverflowButton(point)) {\n this.cursor = 'pointer';\n return {\n stopPropagation: false,\n preventDefault: false\n };\n }\n this.cursor = null;\n return false;\n }\n getButtonPosition(_ref) {\n var {\n x,\n y,\n column,\n row\n } = _ref;\n if (column == null || row == null) {\n return null;\n }\n var {\n renderer,\n grid,\n state,\n props\n } = this.irisGrid;\n if (!grid) {\n return null;\n }\n var {\n metrics\n } = state;\n var {\n model\n } = props;\n var {\n canvasContext: context\n } = grid;\n var theme = grid.getTheme();\n var rendererState = {\n context,\n mouseX: x,\n mouseY: y,\n metrics,\n model,\n theme\n };\n var {\n left,\n top,\n width,\n height\n } = renderer.getCellOverflowButtonPosition(rendererState);\n if (left == null || width == null || top == null || height == null) {\n return null;\n }\n return {\n left,\n top,\n width,\n height\n };\n }\n isHoveringOverflowButton(point) {\n var _this$getButtonPositi;\n var {\n x,\n y\n } = point;\n var {\n left,\n top,\n width,\n height\n } = (_this$getButtonPositi = this.getButtonPosition(point)) !== null && _this$getButtonPositi !== void 0 ? _this$getButtonPositi : {};\n if (left == null || width == null || top == null || height == null) {\n return false;\n }\n var {\n renderer,\n grid,\n state,\n props\n } = this.irisGrid;\n if (!grid) {\n return false;\n }\n var {\n metrics\n } = state;\n var {\n model\n } = props;\n var {\n canvasContext: context\n } = grid;\n var theme = grid.getTheme();\n var rendererState = {\n context,\n mouseX: x,\n mouseY: y,\n metrics,\n model,\n theme\n };\n return renderer.shouldRenderOverflowButton(rendererState) && x >= left && x <= left + width && y >= top && y <= top + height;\n }\n onMove(point) {\n if (this.isHoveringOverflowButton(point)) {\n var {\n overflowButtonTooltipProps\n } = this.irisGrid.state;\n var newProps = this.getButtonPosition(point);\n if (!deepEqual(overflowButtonTooltipProps, newProps)) {\n this.irisGrid.setState({\n overflowButtonTooltipProps: newProps\n });\n }\n } else {\n this.destroyColumnTooltip();\n }\n return this.setCursor(point);\n }\n onWheel(point) {\n this.destroyColumnTooltip();\n return this.onMove(point);\n }\n\n // Needs to be onDown and not onClick b/c of GridSelectionMouseHandler shifting cell onDown\n onDown(point) {\n this.destroyColumnTooltip();\n var {\n column,\n row\n } = point;\n if (this.isHoveringOverflowButton(point)) {\n this.irisGrid.setState({\n showOverflowModal: true,\n overflowText: this.irisGrid.getValueForCell(column, row)\n });\n }\n return false;\n }\n onContextMenu() {\n this.destroyColumnTooltip();\n return false;\n }\n onLeave() {\n this.destroyColumnTooltip();\n return false;\n }\n}\nexport default IrisGridCellOverflowMouseHandler;\n//# sourceMappingURL=IrisGridCellOverflowMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Handles interaction with tables when the Linker tool is active\n */\nclass IrisGridColumnSelectMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n isActive() {\n var {\n isSelectingColumn\n } = this.irisGrid.props;\n return isSelectingColumn;\n }\n isValidColumn(tableColumn) {\n if (tableColumn == null || tableColumn.isProxy === true) {\n return false;\n }\n var {\n columnSelectionValidator\n } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n return columnSelectionValidator(tableColumn);\n }\n return true;\n }\n updateColumnSelectionStatus() {\n var {\n columnSelectionValidator\n } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n columnSelectionValidator(null);\n }\n }\n getTableColumn(columnIndex) {\n if (columnIndex == null) {\n return null;\n }\n var {\n model\n } = this.irisGrid.props;\n var modelColumn = this.irisGrid.getModelColumn(columnIndex);\n if (modelColumn == null) {\n return null;\n }\n return model.columns[modelColumn];\n }\n onMove(gridPoint) {\n if (!this.isActive()) {\n return false;\n }\n var {\n columnAllowedCursor,\n columnNotAllowedCursor\n } = this.irisGrid.props;\n var {\n column\n } = gridPoint;\n var tableColumn = this.getTableColumn(column);\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: column\n });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: null\n });\n }\n return true;\n }\n\n // keeps linker cursor state during wheel event\n onWheel(gridPoint) {\n if (!this.isActive()) {\n return false;\n }\n var {\n columnAllowedCursor,\n columnNotAllowedCursor\n } = this.irisGrid.props;\n var {\n column\n } = gridPoint;\n var tableColumn = this.getTableColumn(column);\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: column\n });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: null\n });\n }\n\n // don't block wheel event from scrolling\n return {\n preventDefault: false,\n stopPropagation: false\n };\n }\n onLeave() {\n if (this.isActive()) {\n this.irisGrid.setState({\n hoverSelectColumn: null\n });\n }\n this.updateColumnSelectionStatus();\n return false;\n }\n onDown() {\n return this.isActive();\n }\n onClick(gridPoint) {\n if (!this.isActive()) {\n return false;\n }\n var {\n column\n } = gridPoint;\n var tableColumn = this.getTableColumn(column);\n if (tableColumn != null && this.isValidColumn(tableColumn)) {\n this.irisGrid.selectColumn(tableColumn);\n }\n return true;\n }\n}\nexport default IrisGridColumnSelectMouseHandler;\n//# sourceMappingURL=IrisGridColumnSelectMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Detects mouse hover over column headers and displays the appropriate tooltip\n */\nclass IrisGridColumnTooltipMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n hideColumnTooltip() {\n var {\n tooltip\n } = this.irisGrid;\n if (tooltip) {\n tooltip.stopTimer();\n tooltip.hide();\n }\n }\n onDown() {\n this.hideColumnTooltip();\n return false;\n }\n onContextMenu() {\n this.hideColumnTooltip();\n return false;\n }\n onWheel() {\n this.hideColumnTooltip();\n return false;\n }\n onLeave(gridPoint, grid, event) {\n /**\n * This should always be a react event\n * React seems to be handling onMouseLeave incorrectly at times\n * When moving to the padding between the column and popper, React sets\n * event.relatedTarget to window, but event.nativeEvent.relatedTarget is the popper.\n * It's possibly related to popper being rendered in a portal\n */\n var {\n relatedTarget\n } = event instanceof MouseEvent ? event : event.nativeEvent;\n var {\n tooltip\n } = this.irisGrid;\n if (!tooltip) {\n return false;\n }\n var popper = tooltip.popper.current;\n if (popper && relatedTarget instanceof Element && popper.element.contains(relatedTarget)) {\n // Do not hide the popper if we moved the cursor from canvas to popper\n return false;\n }\n this.hideColumnTooltip();\n return false;\n }\n onMove(gridPoint) {\n var {\n column,\n row,\n columnHeaderDepth\n } = gridPoint;\n var {\n shownColumnTooltip\n } = this.irisGrid.state;\n var newTooltip = null;\n if (column !== null && row === null && columnHeaderDepth === 0) {\n newTooltip = column;\n }\n if (newTooltip !== shownColumnTooltip) {\n this.irisGrid.setState({\n shownColumnTooltip: newTooltip\n });\n }\n return false;\n }\n}\nexport default IrisGridColumnTooltipMouseHandler;\n//# sourceMappingURL=IrisGridColumnTooltipMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { Tooltip } from '@deephaven/components';\nimport { DOMUtils } from '@deephaven/utils';\nimport \"./CustomFormatAction.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Renders menuElement option with custom format input for use in formatting context menus\n *\n * TODO:\n * - capture focus when this menu action is selected via ArrowUp/ArrowDown keys\n * - dynamically update selected menu item when clicking on the input box\n */\nclass CustomFormatAction extends Component {\n constructor() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : CustomFormatAction.defaultProps;\n super(props);\n _defineProperty(this, \"inputRef\", void 0);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.inputRef = /*#__PURE__*/React.createRef();\n }\n handleInputChange() {\n var {\n onChange\n } = this.props;\n if (this.inputRef.current) {\n onChange(this.inputRef.current.value);\n }\n }\n closeContextMenu() {\n var {\n forwardedProps\n } = this.props;\n var {\n closeMenu\n } = forwardedProps;\n closeMenu(true);\n }\n revertToDefault() {\n var {\n onChange\n } = this.props;\n onChange(null);\n }\n returnFocusToContextMenu() {\n var parentContextMenu = DOMUtils.getClosestByClassName(this.inputRef.current, 'context-menu-container');\n if (parentContextMenu instanceof HTMLElement) {\n parentContextMenu.focus();\n }\n }\n handleKeyDown(event) {\n switch (event.key) {\n case 'Enter':\n event.stopPropagation();\n this.closeContextMenu();\n break;\n case 'Escape':\n event.stopPropagation();\n this.revertToDefault();\n this.closeContextMenu();\n break;\n case 'ArrowRight':\n case 'ArrowLeft':\n event.stopPropagation();\n break;\n case 'ArrowUp':\n case 'ArrowDown':\n this.returnFocusToContextMenu();\n break;\n default:\n event.stopPropagation();\n }\n }\n render() {\n var {\n formatString,\n forwardedProps,\n placeholder,\n title\n } = this.props;\n var {\n menuItem: {\n description\n },\n iconElement\n } = forwardedProps;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-group flex-grow mb-0\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"custom-format-title\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"icon\",\n children: iconElement\n }), /*#__PURE__*/_jsxs(\"label\", {\n className: \"title mb-0\",\n htmlFor: \"custom-format-input\",\n children: [title, description != null && /*#__PURE__*/_jsx(Tooltip, {\n children: description\n })]\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"pl-2 pr-2 pb-2\",\n children: /*#__PURE__*/_jsx(\"input\", {\n id: \"custom-format-input\",\n className: \"form-control text-right mb-0\",\n type: \"text\",\n defaultValue: formatString,\n ref: this.inputRef,\n placeholder: placeholder,\n onKeyDown: this.handleKeyDown,\n onChange: this.handleInputChange,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\"\n })\n })]\n });\n }\n}\n_defineProperty(CustomFormatAction, \"defaultProps\", {\n formatString: '',\n forwardedProps: {\n menuItem: {},\n closeMenu(focusInput) {\n // no-op\n },\n iconElement: null\n },\n placeholder: '',\n title: '',\n onChange(value) {\n // no-op\n }\n});\nexport default CustomFormatAction;\n//# sourceMappingURL=CustomFormatAction.js.map","import React from 'react';\nimport { TableColumnFormatter } from '@deephaven/jsapi-utils';\nimport CustomFormatAction from \"./CustomFormatAction.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nclass FormatContextMenuUtils {\n /**\n * Returns true if default option should be active in the context menu\n * @param selectedFormat selected format object or null\n */\n static isDefaultSelected(selectedFormat) {\n return !selectedFormat || ![TableColumnFormatter.TYPE_CONTEXT_CUSTOM, TableColumnFormatter.TYPE_CONTEXT_PRESET].includes(selectedFormat.type);\n }\n\n /**\n * Returns true if custom format option should be active in the context menu\n * @param selectedFormat selected format object or null\n */\n static isCustomSelected(selectedFormat) {\n return selectedFormat != null && selectedFormat.type === TableColumnFormatter.TYPE_CONTEXT_CUSTOM;\n }\n\n /**\n * Creates context menu option\n * @param title Context menu title\n * @param format Format object\n * @param group Context menu group\n * @param isSelected Is current option selected\n */\n static makeOption(title, format, group, isSelected) {\n return {\n title,\n description: title,\n group,\n format,\n isSelected\n };\n }\n\n /**\n * Creates context menu option with an input element\n * @param format Format object\n * @param group Context menu group\n * @param placeholder Input element placeholder\n * @param isSelected Is current option selected\n * @param onChange Input element onChange callback\n */\n static makeCustomFormatOption(format, group, placeholder, isSelected, onChange) {\n var _format$formatString;\n return {\n title: format.label,\n description: format.label,\n format,\n group,\n isSelected,\n menuElement: /*#__PURE__*/_jsx(CustomFormatAction, {\n formatString: (_format$formatString = format.formatString) !== null && _format$formatString !== void 0 ? _format$formatString : undefined,\n title: format.label,\n placeholder: placeholder,\n onChange: onChange\n })\n };\n }\n}\nexport default FormatContextMenuUtils;\n//# sourceMappingURL=FormatContextMenuUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { DateTimeColumnFormatter, TableUtils } from '@deephaven/jsapi-utils';\nimport FormatContextMenuUtils from \"./FormatContextMenuUtils.js\";\nclass DateTimeFormatContextMenu {\n /**\n * Creates list of formatting options for DateTime context menu\n * @param formatter Formatter instance\n * @param selectedFormat Selected format object, null for no selected format\n * @returns Array of formatting options for the context menu\n */\n static getOptions(formatter, selectedFormat) {\n var currentTime = new Date();\n var formatItems = [{\n group: DateTimeFormatContextMenu.dateGroup,\n formatString: 'yyyy-MM-dd'\n }, {\n group: DateTimeFormatContextMenu.dateGroup,\n formatString: 'MM-dd-yyyy'\n }, {\n group: DateTimeFormatContextMenu.timeGroup,\n formatString: 'HH:mm:ss'\n }, {\n group: DateTimeFormatContextMenu.timeGroup,\n formatString: 'HH:mm:ss.SSS'\n }, {\n group: DateTimeFormatContextMenu.timeGroup,\n formatString: 'HH:mm:ss.SSSSSSSSS'\n }, {\n group: DateTimeFormatContextMenu.dateTimeGroup,\n formatString: \"yyyy-MM-dd HH:mm:ss\"\n }, {\n group: DateTimeFormatContextMenu.dateTimeGroup,\n formatString: \"yyyy-MM-dd HH:mm:ss.SSS\"\n }, {\n group: DateTimeFormatContextMenu.dateTimeGroup,\n formatString: \"yyyy-MM-dd HH:mm:ss.SSSSSSSSS\"\n }];\n var presetFormatOptions = formatItems.map(item => {\n var format = DateTimeColumnFormatter.makeFormat('', item.formatString, DateTimeColumnFormatter.TYPE_CONTEXT_PRESET);\n var title = formatter.getFormattedString(currentTime, TableUtils.dataType.DATETIME, '', format);\n return FormatContextMenuUtils.makeOption(title, format, item.group, DateTimeColumnFormatter.isSameFormat(format, selectedFormat));\n });\n var defaultOption = FormatContextMenuUtils.makeOption('Default', null, DateTimeFormatContextMenu.dateGroup, FormatContextMenuUtils.isDefaultSelected(selectedFormat));\n return [defaultOption, ...presetFormatOptions];\n }\n}\n_defineProperty(DateTimeFormatContextMenu, \"dateGroup\", 10);\n_defineProperty(DateTimeFormatContextMenu, \"timeGroup\", 20);\n_defineProperty(DateTimeFormatContextMenu, \"dateTimeGroup\", 30);\nexport default DateTimeFormatContextMenu;\n//# sourceMappingURL=DateTimeFormatContextMenu.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { DecimalColumnFormatter } from '@deephaven/jsapi-utils';\nimport FormatContextMenuUtils from \"./FormatContextMenuUtils.js\";\nclass DecimalFormatContextMenu {\n /**\n * Creates list of formatting options for Decimal context menu\n * @param dh JSAPI instance\n * @param selectedFormat Selected format object, null for no selected format\n * @param onCustomFormatChange Callback to call when the custom format is changed\n * @returns Array of formatting options for the context menu\n */\n static getOptions(dh, selectedFormat, onCustomFormatChange) {\n var formatItems = [{\n format: DecimalColumnFormatter.FORMAT_PERCENT,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_BASIS_POINTS,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_MILLIONS,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_SCIENTIFIC_NOTATION,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_ROUND,\n group: DecimalFormatContextMenu.presetRoundGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_ROUND_TWO_DECIMALS,\n group: DecimalFormatContextMenu.presetRoundGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_ROUND_FOUR_DECIMALS,\n group: DecimalFormatContextMenu.presetRoundGroup\n }];\n var defaultFormatOption = FormatContextMenuUtils.makeOption('Default', null, DecimalFormatContextMenu.defaultGroup, FormatContextMenuUtils.isDefaultSelected(selectedFormat));\n var presetFormatOptions = formatItems.map(item => FormatContextMenuUtils.makeOption(item.format.label, item.format, item.group, DecimalColumnFormatter.isSameFormat(item.format, selectedFormat)));\n var isCustomSelected = FormatContextMenuUtils.isCustomSelected(selectedFormat);\n var customFormat = isCustomSelected ? selectedFormat : DecimalColumnFormatter.makeCustomFormat();\n var customFormatOption = FormatContextMenuUtils.makeCustomFormatOption(customFormat, DecimalFormatContextMenu.customGroup, DecimalColumnFormatter.DEFAULT_FORMAT_STRING, isCustomSelected, formatString => {\n if (formatString != null) {\n var newCustomFormat = DecimalColumnFormatter.makeCustomFormat(formatString);\n if (DecimalColumnFormatter.isValid(dh, newCustomFormat)) {\n onCustomFormatChange(newCustomFormat);\n }\n } else {\n onCustomFormatChange(null);\n }\n });\n return [defaultFormatOption, ...presetFormatOptions, customFormatOption];\n }\n}\n_defineProperty(DecimalFormatContextMenu, \"defaultGroup\", 10);\n_defineProperty(DecimalFormatContextMenu, \"presetGroup\", 20);\n_defineProperty(DecimalFormatContextMenu, \"presetRoundGroup\", 30);\n_defineProperty(DecimalFormatContextMenu, \"customGroup\", 40);\nexport default DecimalFormatContextMenu;\n//# sourceMappingURL=DecimalFormatContextMenu.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { IntegerColumnFormatter } from '@deephaven/jsapi-utils';\nimport FormatContextMenuUtils from \"./FormatContextMenuUtils.js\";\nclass IntegerFormatContextMenu {\n /**\n * Creates list of formatting options for Integer context menu\n * @param dh JSAPI instance\n * @param selectedFormat Selected format object, null for no selected format\n * @param onCustomFormatChange Callback to call when the custom format is changed\n * @returns Array of formatting options for the context menu\n */\n static getOptions(dh, selectedFormat, onCustomFormatChange) {\n var formatItems = [{\n format: IntegerColumnFormatter.FORMAT_MILLIONS,\n group: IntegerFormatContextMenu.presetGroup\n }, {\n format: IntegerColumnFormatter.FORMAT_SCIENTIFIC_NOTATION,\n group: IntegerFormatContextMenu.presetGroup\n }];\n var defaultFormatOption = FormatContextMenuUtils.makeOption('Default', null, IntegerFormatContextMenu.defaultGroup, FormatContextMenuUtils.isDefaultSelected(selectedFormat));\n var presetFormatOptions = formatItems.map(item => FormatContextMenuUtils.makeOption(item.format.label, item.format, item.group, IntegerColumnFormatter.isSameFormat(item.format, selectedFormat)));\n var isCustomSelected = FormatContextMenuUtils.isCustomSelected(selectedFormat);\n var customFormat = isCustomSelected ? selectedFormat : IntegerColumnFormatter.makeCustomFormat();\n var customFormatOption = FormatContextMenuUtils.makeCustomFormatOption(customFormat, IntegerFormatContextMenu.customGroup, IntegerColumnFormatter.DEFAULT_FORMAT_STRING, isCustomSelected, formatString => {\n if (formatString != null) {\n var newCustomFormat = IntegerColumnFormatter.makeCustomFormat(formatString);\n if (IntegerColumnFormatter.isValid(dh, newCustomFormat)) {\n onCustomFormatChange(newCustomFormat);\n }\n } else {\n onCustomFormatChange(null);\n }\n });\n return [defaultFormatOption, ...presetFormatOptions, customFormatOption];\n }\n}\n_defineProperty(IntegerFormatContextMenu, \"defaultGroup\", 10);\n_defineProperty(IntegerFormatContextMenu, \"presetGroup\", 20);\n_defineProperty(IntegerFormatContextMenu, \"customGroup\", 30);\nexport default IntegerFormatContextMenu;\n//# sourceMappingURL=IntegerFormatContextMenu.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhFilterFilled, vsRemove, vsCheck, vsFilter } from '@deephaven/icons';\nimport debounce from 'lodash.debounce';\nimport { ContextActions, ContextActionUtils, GLOBAL_SHORTCUTS } from '@deephaven/components';\nimport { GridMouseHandler, GridRange, GridRenderer, isDeletableGridModel, isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport { TableColumnFormatter, DateTimeColumnFormatter, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { TextUtils, assertNotEmpty, assertNotNaN, assertNotNull, copyToClipboard } from '@deephaven/utils';\nimport { DateTimeFormatContextMenu, DecimalFormatContextMenu, IntegerFormatContextMenu } from \"../format-context-menus/index.js\";\nimport \"./IrisGridContextMenuHandler.css\";\nimport SHORTCUTS from \"../IrisGridShortcuts.js\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridContextMenuHandler');\nvar DEBOUNCE_UPDATE_FORMAT = 150;\nvar CONTEXT_MENU_DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.SSSSSSSSS';\nvar MAX_MULTISELECT_ROWS = 1000;\n\n/**\n * Used to eat the mouse event in the bottom right corner of the scroll bar\n */\nclass IrisGridContextMenuHandler extends GridMouseHandler {\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(columnFilter, newColumnFilter, operator) {\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(filterText, newFilterText, operator) {\n return operator && filterText != null ? \"\".concat(filterText, \" \").concat(operator, \" \").concat(newFilterText) : newFilterText;\n }\n\n /**\n * Converts operator to text string,\n */\n static getOperatorAsText(operator) {\n return operator === '&&' ? 'And' : 'Or';\n }\n static getRowOptionFormatted(command, cellValue) {\n var len = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 30;\n return \"\".concat(command, \" \\\"\").concat(GridRenderer.truncate(cellValue, len - command.length - 3), \"\\\"\");\n }\n constructor(irisGrid, dh) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n _defineProperty(this, \"debouncedUpdateCustomFormat\", void 0);\n _defineProperty(this, \"dh\", void 0);\n this.getNumberValueEqualsFilter = this.getNumberValueEqualsFilter.bind(this);\n this.getFilterValueForNumberOrChar = this.getFilterValueForNumberOrChar.bind(this);\n this.debouncedUpdateCustomFormat = debounce(irisGrid.handleFormatSelection, DEBOUNCE_UPDATE_FORMAT);\n this.dh = dh;\n this.irisGrid = irisGrid;\n }\n componentWillUnmount() {\n this.debouncedUpdateCustomFormat.flush();\n }\n getHeaderActions(modelIndex, gridPoint) {\n var {\n irisGrid\n } = this;\n var {\n column: visibleIndex\n } = gridPoint;\n assertNotNull(visibleIndex);\n var {\n model\n } = irisGrid.props;\n var {\n columns\n } = model;\n var column = columns[modelIndex];\n var actions = [];\n var {\n metrics,\n reverseType,\n quickFilters,\n advancedFilters,\n searchFilter\n } = irisGrid.state;\n var theme = irisGrid.getTheme();\n assertNotNull(metrics);\n var {\n filterIconColor,\n filterBarActiveColor,\n contextMenuSortIconColor,\n contextMenuReverseIconColor\n } = theme;\n var modelSort = model.sort;\n var columnSort = TableUtils.getSortForColumn(modelSort, column.name);\n var hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n var {\n userColumnWidths\n } = metrics;\n var isColumnHidden = [...userColumnWidths.values()].some(columnWidth => columnWidth === 0);\n var isColumnFreezable = model.getColumnHeaderParentGroup(modelIndex, 0) === undefined && !(isExpandableGridModel(model) && model.hasExpandableRows);\n var isColumnFrozen = model.isColumnFrozen(modelIndex);\n var isColumnSortable = model.isColumnSortable(modelIndex);\n actions.push({\n title: 'Hide Column',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.hideColumnByVisibleIndex(visibleIndex);\n }\n });\n actions.push({\n title: isColumnFrozen ? 'Unfreeze Column' : 'Freeze Column',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n disabled: !isColumnFreezable,\n action: () => {\n if (isColumnFrozen) {\n this.irisGrid.unFreezeColumnByColumnName(column.name);\n } else {\n this.irisGrid.freezeColumnByColumnName(column.name);\n }\n },\n order: 10\n });\n actions.push({\n title: 'Show All Columns',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.showAllColumns();\n },\n disabled: !isColumnHidden\n });\n actions.push({\n title: 'Quick Filters',\n icon: vsRemove,\n iconColor: filterBarActiveColor,\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 10,\n action: () => {\n this.irisGrid.toggleFilterBar(visibleIndex);\n }\n });\n actions.push({\n title: 'Advanced Filters',\n icon: advancedFilters.get(modelIndex) ? dhFilterFilled : vsFilter,\n iconColor: filterIconColor,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 20,\n action: () => {\n this.irisGrid.handleAdvancedMenuOpened(visibleIndex);\n }\n });\n actions.push({\n title: 'Clear Table Filters',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 40,\n // this just displays the shortcut, the actual listener is in irisgrid handleKeyDown\n shortcut: SHORTCUTS.TABLE.CLEAR_FILTERS,\n action: () => {\n this.irisGrid.clearAllFilters();\n },\n disabled: !(quickFilters.size > 0 || advancedFilters.size > 0 || searchFilter != null)\n });\n actions.push({\n title: 'Sort by',\n icon: vsRemove,\n iconColor: contextMenuSortIconColor,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 10,\n actions: this.sortByActions(column, modelIndex, columnSort),\n disabled: !isColumnSortable\n });\n actions.push({\n title: 'Add Additional Sort',\n /**\n * disable conditions:\n * 1. table is sorted only by this column\n * 2. table is only reversed\n * 3. 1 & 2 combined\n * 4. table has no sort\n * reverse is a type of sort, so needs to be accounted for in exclusions\n * */\n disabled: columnSort && modelSort.length === 1 || hasReverse && modelSort.length === 1 || columnSort && hasReverse && modelSort.length === 2 || modelSort.length === 0 || !isColumnSortable,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 20,\n actions: this.additionalSortActions(column, modelIndex)\n });\n actions.push({\n title: 'Clear Table Sorting',\n disabled:\n // reverse is a type of sort, but special and needs to be exluded despite being part of model.sort\n modelSort.length === 0 || hasReverse && modelSort.length === 1,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n action: () => {\n this.irisGrid.sortColumn(visibleIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.none);\n },\n order: 30\n });\n actions.push({\n title: reverseType === TableUtils.REVERSE_TYPE.NONE ? 'Reverse Table' : 'Clear Reverse Table',\n icon: vsRemove,\n iconColor: contextMenuReverseIconColor,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 40,\n disabled: !model.isReversible,\n // this just displays the shortcut, the actual listener is in irisgrid handleKeyDown\n shortcut: SHORTCUTS.TABLE.REVERSE,\n action: () => {\n if (reverseType === TableUtils.REVERSE_TYPE.NONE) {\n this.irisGrid.reverse(TableUtils.REVERSE_TYPE.POST_SORT);\n } else {\n this.irisGrid.reverse(TableUtils.REVERSE_TYPE.NONE);\n }\n }\n });\n actions.push({\n title: 'Copy Column Name',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n shortcutText: ContextActionUtils.isMacPlatform() ? '⌥Click' : 'Alt+Click',\n action: () => {\n var _model$textForColumnH;\n copyToClipboard((_model$textForColumnH = model.textForColumnHeader(modelIndex)) !== null && _model$textForColumnH !== void 0 ? _model$textForColumnH : '').catch(e => log.error('Unable to copy header', e));\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 var _this$numberFormatAct;\n actions.push({\n title: 'Number Format',\n group: IrisGridContextMenuHandler.GROUP_FORMAT,\n actions: (_this$numberFormatAct = this.numberFormatActions(column)) !== null && _this$numberFormatAct !== void 0 ? _this$numberFormatAct : undefined\n });\n }\n return actions;\n }\n getCellActions(modelColumn, grid, gridPoint) {\n var {\n irisGrid\n } = this;\n var {\n column: columnIndex,\n row: rowIndex\n } = gridPoint;\n var {\n model,\n canCopy\n } = irisGrid.props;\n var {\n columns\n } = model;\n var modelRow = irisGrid.getModelRow(rowIndex);\n assertNotNull(modelRow);\n var sourceCell = model.sourceForCell(modelColumn, modelRow);\n var {\n column: sourceColumn,\n row: sourceRow\n } = sourceCell;\n var value = model.valueForCell(sourceColumn, sourceRow);\n var column = columns[sourceColumn];\n var actions = [];\n var theme = irisGrid.getTheme();\n var {\n filterIconColor\n } = theme;\n if (column == null || rowIndex == null) return actions;\n\n // Expand/Collapse options\n if (isExpandableGridModel(model) && model.isRowExpandable(sourceRow)) {\n // If there are grouped columns, then it is a rollup\n // The first column will be the \"group\" column with the value that should be expanded\n var expandingColumn = 0;\n var cellValue = model.valueForCell(expandingColumn, sourceRow);\n var cellText = cellValue == null ? 'null' : model.textForCell(expandingColumn, sourceRow);\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted(model.isRowExpanded(sourceRow) ? 'Collapse' : 'Expand', cellText),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 10,\n action: () => {\n model.setRowExpanded(sourceRow, !model.isRowExpanded(sourceRow));\n }\n });\n if (model.isExpandAllAvailable === true) {\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted('Expand All in', cellText),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 20,\n action: () => {\n model.setRowExpanded(sourceRow, true, true);\n }\n });\n }\n }\n if (isExpandableGridModel(model) && model.hasExpandableRows && model.isExpandAllAvailable === true) {\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 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 var gotoRow = {\n title: 'Go to',\n iconColor: filterIconColor,\n shortcut: SHORTCUTS.TABLE.GOTO_ROW,\n group: IrisGridContextMenuHandler.GROUP_GOTO,\n order: 10,\n action: () => this.irisGrid.toggleGotoRow(\"\".concat(rowIndex + 1), \"\".concat(value), column.name)\n };\n actions.push(gotoRow);\n if (canCopy) {\n actions.push({\n title: 'Copy Cell',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n shortcutText: ContextActionUtils.isMacPlatform() ? '⌥Click' : 'Alt+Click',\n order: 10,\n action: () => {\n irisGrid.copyCell(columnIndex, rowIndex);\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 actions.push({\n title: 'View Cell Contents',\n group: IrisGridContextMenuHandler.GROUP_VIEW_CONTENTS,\n order: 10,\n action: () => {\n irisGrid.setState({\n showOverflowModal: true,\n overflowText: irisGrid.getValueForCell(columnIndex, rowIndex)\n });\n }\n });\n return actions;\n }\n\n // moved out of getCellActions since snapshots are async\n getCellFilterActions(modelColumn, grid, gridPoint) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n dh,\n irisGrid\n } = _this;\n var {\n row: rowIndex\n } = gridPoint;\n var {\n model\n } = irisGrid.props;\n var {\n columns\n } = model;\n var modelRow = irisGrid.getModelRow(rowIndex);\n var {\n getSelectedRanges\n } = grid;\n assertNotNull(modelRow);\n var sourceCell = model.sourceForCell(modelColumn, modelRow);\n var {\n column: sourceColumn,\n row: sourceRow\n } = sourceCell;\n var column = columns[sourceColumn];\n if (column == null || rowIndex == null) return [];\n if (!model.isFilterable(sourceColumn)) return [];\n var {\n quickFilters\n } = irisGrid.state;\n var theme = irisGrid.getTheme();\n var {\n filterIconColor\n } = theme;\n var {\n settings\n } = irisGrid.props;\n var selectedRanges = [...getSelectedRanges()];\n // no selected range (i.e. right clicked a cell without highlighting it)\n // although GridSelectionMouseHandler does change selectedRanges, state isn't updated in\n // time for getSelectedRanges to show the selected cell\n if (selectedRanges.length === 0) {\n selectedRanges.push(new GridRange(sourceColumn, sourceRow, sourceColumn, sourceRow));\n }\n\n // - this block truncates the selected ranges to MAX_MULTISELECT_ROWS rows\n // - NOT first MAX_MULTISELECT_ROWS rows after the first row\n // - NOT first MAX_MULTISELECT_ROWS unique values (prevent case where there are a small\n // amount of values, but a large amount of rows with those values)\n if (GridRange.containsCell(selectedRanges, sourceColumn, sourceRow)) {\n var rowCount = GridRange.rowCount(selectedRanges);\n while (rowCount > MAX_MULTISELECT_ROWS) {\n var lastRow = selectedRanges.pop();\n // should never occur, sanity check\n assertNotNull(lastRow, 'Selected ranges should not be empty');\n var lastRowSize = GridRange.rowCount([lastRow]);\n // should never occur, sanity check\n assertNotNaN(lastRowSize, 'Selected ranges should not be unbounded');\n\n // if removing the last rows makes it dip below the max, then need to\n // bring it back but truncated\n if (rowCount - lastRowSize < MAX_MULTISELECT_ROWS) {\n var _lastRow$endRow;\n // nullish operator to make TS happy, but the check above should prevent this\n selectedRanges.push(new GridRange(lastRow.startColumn, lastRow.startRow, lastRow.endColumn, ((_lastRow$endRow = lastRow.endRow) !== null && _lastRow$endRow !== void 0 ? _lastRow$endRow : 0) - (rowCount - MAX_MULTISELECT_ROWS)));\n break;\n }\n rowCount -= lastRowSize;\n }\n } else {\n // if the block is not in the selected ranges, meaning the user must've right-clicked\n // outside the selected ranges`\n selectedRanges = [new GridRange(sourceColumn, sourceRow, sourceColumn, sourceRow)];\n }\n\n // this should be non empty\n // - valid selected ranges will always have a startRow and endRow\n // - if there are no selected ranges, then one with sourceColumn/Row is added\n assertNotEmpty(selectedRanges);\n\n // get the snapshot values, but ignore all null/undefined values\n var snapshot = yield model.snapshot(selectedRanges);\n var snapshotValues = new Set();\n for (var i = 0; i < snapshot.length; i += 1) {\n if (snapshot[i].length === 1) {\n // if the selected range has start/end columns defined, so the snapshot is a 1D array of the row\n if (snapshot[i][0] != null) {\n snapshotValues.add(snapshot[i][0]);\n }\n } else if (snapshot[i][sourceColumn] != null) {\n // if the selected range is an entire row\n snapshotValues.add(snapshot[i][sourceColumn]);\n }\n }\n // if snapshotValues is empty here, it means all of the snapshot's values were null/undefined\n\n var filterMenu = {\n title: \"Filter by Value\".concat(snapshotValues.size > 1 ? 's' : ''),\n icon: vsRemove,\n iconColor: filterIconColor,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 10,\n actions: []\n };\n\n // only made of null/undefineds\n if (snapshotValues.size === 0) {\n // null gets a special menu\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.nullFilterActions(column, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.nullFilterActions(column));\n } else if (snapshotValues.size === 1 && snapshotValues.has('')) {\n // empty string gets a special menu\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.emptyStringFilterActions(column, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.emptyStringFilterActions(column));\n } else if (TableUtils.isBooleanType(column.type)) {\n // boolean should have OR condition, and handles it's own null menu options\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'Or',\n actions: _this.booleanFilterActions(column, model.textForCell(sourceColumn, sourceRow), quickFilters.get(sourceColumn), '||'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.booleanFilterActions(column, model.textForCell(sourceColumn, sourceRow)));\n } else if (TableUtils.isNumberType(column.type) || TableUtils.isCharType(column.type)) {\n // Chars get treated like numbers in terms of which filters are available\n assertNotNull(sourceColumn);\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.numberFilterActions(column, snapshotValues, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.numberFilterActions(column, snapshotValues, quickFilters.get(sourceColumn)));\n } else if (TableUtils.isDateType(column.type)) {\n var dateFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone: settings === null || settings === void 0 ? void 0 : settings.timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: CONTEXT_MENU_DATE_FORMAT\n });\n var previewFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone: settings === null || settings === void 0 ? void 0 : settings.timeZone,\n showTimeZone: settings === null || settings === void 0 ? void 0 : settings.showTimeZone,\n showTSeparator: settings === null || settings === void 0 ? void 0 : settings.showTSeparator,\n defaultDateTimeFormatString: CONTEXT_MENU_DATE_FORMAT\n });\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.dateFilterActions(column, snapshotValues, dateFilterFormatter, previewFilterFormatter, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.dateFilterActions(column, snapshotValues, dateFilterFormatter, previewFilterFormatter, quickFilters.get(sourceColumn)));\n } else {\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.stringFilterActions(column, snapshotValues, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.stringFilterActions(column, snapshotValues));\n }\n return [filterMenu];\n })();\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, value) {\n var {\n dh\n } = this;\n var columnFilter = column.filter();\n if (value === Number.POSITIVE_INFINITY) {\n return dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.greaterThan(dh.FilterValue.ofNumber(0)));\n }\n if (value === Number.NEGATIVE_INFINITY) {\n return dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.lessThan(dh.FilterValue.ofNumber(0)));\n }\n if (Number.isNaN(value)) {\n return dh.FilterCondition.invoke('isNaN', columnFilter);\n }\n var filterValue = this.getFilterValueForNumberOrChar(column.type, value);\n return columnFilter.eq(filterValue);\n }\n getFilterValueForNumberOrChar(columnType, value) {\n var {\n dh\n } = this;\n return TableUtils.isCharType(columnType) ? dh.FilterValue.ofString(String.fromCharCode(value)) : dh.FilterValue.ofNumber(value);\n }\n onContextMenu(gridPoint, grid, event) {\n var {\n irisGrid\n } = this;\n var {\n y,\n column: columnIndex,\n row: rowIndex,\n columnHeaderDepth\n } = gridPoint;\n var modelColumn = irisGrid.getModelColumn(columnIndex);\n var modelRow = irisGrid.getModelRow(rowIndex);\n var {\n model,\n canCopy\n } = irisGrid.props;\n var {\n columns\n } = model;\n var {\n metrics,\n isFilterBarShown,\n quickFilters,\n advancedFilters,\n selectedRanges\n } = irisGrid.state;\n assertNotNull(metrics);\n var {\n columnHeaderHeight,\n gridY,\n columnHeaderMaxDepth\n } = metrics;\n var actions = [];\n if (modelColumn != null && modelRow != null) {\n var sourceCell = model.sourceForCell(modelColumn, modelRow !== null && modelRow !== void 0 ? modelRow : 0);\n var {\n column: sourceColumn,\n row: sourceRow\n } = sourceCell;\n var value = model.valueForCell(sourceColumn, sourceRow);\n var valueText = model.textForCell(sourceColumn, sourceRow);\n var column = columns[sourceColumn];\n var {\n onContextMenu\n } = irisGrid.props;\n if (column != null) {\n actions.push(...onContextMenu({\n model,\n value,\n valueText,\n column,\n rowIndex,\n columnIndex,\n modelRow,\n modelColumn\n }));\n }\n }\n if (modelColumn != null) {\n var clearFilterRange = model.getClearFilterRange(modelColumn);\n if (clearFilterRange != null && clearFilterRange.length > 0) {\n // Clear column filter should still be available after last row\n // And should be available in both header and body context menus\n actions.push({\n title: clearFilterRange[1] - clearFilterRange[0] > 0 ? 'Clear Group Filter' : 'Clear Column Filter',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 30,\n action: () => {\n this.irisGrid.removeColumnFilter(clearFilterRange);\n },\n disabled: !Array.from(quickFilters.keys()).some(col => col >= clearFilterRange[0] && col <= clearFilterRange[1]) && !Array.from(advancedFilters.keys()).some(col => col >= clearFilterRange[0] && col <= clearFilterRange[1])\n });\n }\n }\n if (isFilterBarShown ? y <= gridY : y <= columnHeaderHeight * columnHeaderMaxDepth && columnHeaderDepth === 0) {\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 actions.push(this.getCellFilterActions(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 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 if (isEditableGridModel(model) && model.isEditable && selectedRanges.length > 0 && isDeletableGridModel(model) && model.isDeletable) {\n actions.push({\n title: 'Delete Selected Rows',\n group: IrisGridContextMenuHandler.GROUP_EDIT,\n disabled: !model.isDeletableRanges(selectedRanges),\n order: 50,\n action: () => {\n this.irisGrid.deleteRanges(selectedRanges);\n }\n });\n }\n }\n if (actions.length === 0) {\n return false;\n }\n assertNotNull(irisGrid.gridWrapper);\n ContextActions.triggerMenu(irisGrid.gridWrapper, event.clientX, event.clientY, actions);\n return true;\n }\n dateFormatActions(column) {\n var _this2 = this;\n var {\n model\n } = this.irisGrid.props;\n var {\n formatter\n } = model;\n var selectedFormat = formatter.getColumnFormat(column.type, column.name);\n var formatOptions = DateTimeFormatContextMenu.getOptions(formatter, selectedFormat);\n var actions = [];\n var _loop = function _loop() {\n var {\n description,\n format,\n group,\n isSelected,\n title\n } = formatOptions[i];\n actions.push({\n title,\n description,\n icon: isSelected ? vsCheck : undefined,\n group,\n order: i,\n action: () => {\n var modelIndex = model.getColumnIndexByName(column.name);\n assertNotNull(modelIndex);\n _this2.irisGrid.handleFormatSelection(modelIndex, format);\n }\n });\n };\n for (var i = 0; i < formatOptions.length; i += 1) {\n _loop();\n }\n return actions;\n }\n numberFormatActions(column) {\n var _this3 = this;\n var {\n model\n } = this.irisGrid.props;\n var {\n formatter\n } = model;\n var {\n dh\n } = this;\n var selectedFormat = formatter.getColumnFormat(column.type, column.name);\n var formatOptions;\n var columnIndex = model.getColumnIndexByName(column.name);\n if (TableUtils.isDecimalType(column.type)) {\n formatOptions = DecimalFormatContextMenu.getOptions(dh, selectedFormat, format => {\n assertNotNull(columnIndex);\n this.debouncedUpdateCustomFormat(columnIndex, format);\n });\n } else if (TableUtils.isIntegerType(column.type)) {\n formatOptions = IntegerFormatContextMenu.getOptions(dh, selectedFormat, format => {\n assertNotNull(columnIndex);\n this.debouncedUpdateCustomFormat(columnIndex, format);\n });\n } else {\n log.error('Invalid column type in numberFormatActions');\n return null;\n }\n var actions = [];\n var _loop2 = function _loop2() {\n var {\n format,\n isSelected\n } = formatOptions[i];\n actions.push(_objectSpread(_objectSpread({}, formatOptions[i]), {}, {\n icon: isSelected ? vsCheck : undefined,\n order: i,\n action: () => {\n if (columnIndex === undefined && format && format.type === TableColumnFormatter.TYPE_CONTEXT_CUSTOM) {\n return;\n }\n assertNotNull(columnIndex);\n _this3.irisGrid.handleFormatSelection(columnIndex, format);\n }\n }));\n };\n for (var i = 0; i < formatOptions.length; i += 1) {\n _loop2();\n }\n return actions;\n }\n stringFilterActions(column, snapshotValues, quickFilter, operator) {\n var {\n dh\n } = this;\n var values = Array.from(snapshotValues.keys());\n var filterValues = values.map(value => dh.FilterValue.ofString(value));\n var valueDescription = filterValues.length === 1 ? filterValues[0] : 'the selected values';\n var newQuickFilter = quickFilter;\n if (!newQuickFilter) {\n newQuickFilter = {\n filter: null,\n text: null\n };\n }\n var {\n filter,\n text: filterText\n } = newQuickFilter;\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n var toFilterText = item => {\n var _TableUtils$escapeQui;\n return (_TableUtils$escapeQui = TableUtils.escapeQuickTextFilter(item)) !== null && _TableUtils$escapeQui !== void 0 ? _TableUtils$escapeQui : '';\n };\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', TextUtils.join(values.slice(0, 20).map(value => \"\\\"\".concat(toFilterText(value), \"\\\"\"))), values.length > 1 && /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-subtitle\",\n children: [\"(\", values.length, \" values selected)\"]\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'text is exactly',\n description: \"Show only rows where \".concat(column.name, \" is \").concat(valueDescription, \" (case sensitive)\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(filterValue => column.filter().eq(filterValue)).reduce((prev, curr) => prev.or(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(toFilterText).join(' || '), operator));\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 \".concat(column.name, \" is not \").concat(valueDescription, \" (case sensitive)\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(filterValue => column.filter().notEq(filterValue)).reduce((prev, curr) => prev.and(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!=\".concat(toFilterText(value))).join(' && '), operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n actions.push({\n title: \"text contains\",\n description: \"Show only rows where \".concat(column.name, \" contains \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(filterValues.map(filterValue => column.filter().contains(filterValue)).reduce((prev, curr) => prev.or(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"~\".concat(toFilterText(value))).join(' || '), operator));\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 \".concat(column.name, \" does not contain \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().or(filterValues.map(filterValue => column.filter().contains(filterValue).not()).reduce((prev, curr) => prev.and(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!~\".concat(toFilterText(value))).join(' && '), operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'text starts with',\n description: \"Show only rows where \".concat(column.name, \" starts with \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(filterValues.map(filterValue => column.filter().invoke('startsWith', filterValue)).reduce((prev, curr) => prev.or(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"\".concat(toFilterText(value), \"*\")).join(' || '), operator));\n },\n order: 50,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'text ends with',\n description: \"Show only rows where \".concat(column.name, \" ends with \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(filterValues.map(filterValue => column.filter().invoke('endsWith', filterValue)).reduce((prev, curr) => prev.or(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"*\".concat(toFilterText(value))).join(' || '), operator));\n },\n order: 60,\n group: ContextActions.groups.low\n });\n return actions;\n }\n numberFilterActions(column, snapshotValues, quickFilter, operator) {\n var values = Array.from(snapshotValues.keys());\n var valueDesc = values.length === 1 ? \"\".concat(values) : 'the selected values';\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 var toFilterText = item => TableUtils.isCharType(column.type) ? String.fromCharCode(item) : \"\".concat(item);\n var filter = null;\n var filterText = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', TextUtils.join(values.slice(0, 20).map(value => \"\\\"\".concat(toFilterText(value), \"\\\"\"))), values.length > 1 && /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-subtitle\",\n children: [\"(\", values.length, \" values selected)\"]\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'is equal to',\n description: \"Show only rows where \".concat(column.name, \" is \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, values.map(value => this.getNumberValueEqualsFilter(column, value)).reduce((acc, curr) => acc.or(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"=\".concat(toFilterText(value))).join(' || '), operator));\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 \".concat(column.name, \" is not \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, values.map(value => this.getNumberValueEqualsFilter(column, value).not()).reduce((acc, curr) => acc.and(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!=\".concat(toFilterText(value))).join(' && '), operator));\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 (!snapshotValues.has(Number.NaN) && !snapshotValues.has(Number.POSITIVE_INFINITY) && !snapshotValues.has(Number.NEGATIVE_INFINITY) && !TableUtils.isCharType(column.type)) {\n // get the min/max because these are all ge/ne filters\n var maxValue = values.reduce((a, b) => a > b ? a : b);\n var minValue = values.reduce((a, b) => a < b ? a : b);\n var maxFilterValue = this.getFilterValueForNumberOrChar(column.type, maxValue);\n var minFilterValue = this.getFilterValueForNumberOrChar(column.type, minValue);\n var maxValueText = \"\".concat(maxFilterValue);\n var minValueText = \"\".concat(minFilterValue);\n actions.push({\n title: 'greater than',\n description: \"Show only rows where \".concat(column.name, \" is greater than \").concat(maxValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThan(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">\".concat(toFilterText(maxValue)), operator));\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 \".concat(column.name, \" is greater than or equal to \").concat(maxValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThanOrEqualTo(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">=\".concat(toFilterText(maxValue)), operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'less than',\n description: \"Show only rows where \".concat(column.name, \" is less than \").concat(minValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThan(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<\".concat(toFilterText(minValue)), operator));\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 \".concat(column.name, \" is less than or equal to \").concat(minValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThanOrEqualTo(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<=\".concat(toFilterText(minValue)), operator));\n },\n order: 60,\n group: ContextActions.groups.low\n });\n }\n return actions;\n }\n booleanFilterActions(column, valueText, quickFilter, operator) {\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var {\n filter,\n text: filterText\n } = quickFilter || {};\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', \"\\\"\", valueText !== null && valueText !== void 0 ? valueText : 'null', \"\\\"\"]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'true',\n description: \"Show only rows where \".concat(column.name, \" is true\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isTrue(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'true', operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'false',\n description: \"Show only rows where \".concat(column.name, \" is false\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isFalse(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'false', operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'is null',\n description: \"Show only rows where \".concat(column.name, \" is null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'null', operator));\n },\n order: 30,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'is not null',\n description: \"Show only rows where \".concat(column.name, \" is not null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, '!null', operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n return actions;\n }\n dateFilterActions(column, snapshotValues, dateFilterFormatter, previewFilterFormatter, quickFilter, operator) {\n var {\n dh\n } = this;\n var values = Array.from(snapshotValues.keys());\n var filterValues = values.map(value => dh.FilterValue.ofNumber(value));\n var valueDesc = filterValues.length === 1 ? previewFilterFormatter.format(values[0]) : 'the selected values';\n var maxValue = values.reduce((a, b) => a > b ? a : b);\n var minValue = values.reduce((a, b) => a < b ? a : b);\n var maxFilterValue = dh.FilterValue.ofNumber(maxValue);\n var minFilterValue = dh.FilterValue.ofNumber(minValue);\n var maxDateText = dateFilterFormatter.format(maxValue);\n var minDateText = dateFilterFormatter.format(minValue);\n var maxPreviewText = previewFilterFormatter.format(maxValue);\n var minPreviewText = previewFilterFormatter.format(minValue);\n var filter = null;\n var filterText = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var actions = [];\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', TextUtils.join(values.slice(0, 20).map(value => \"\\\"\".concat(previewFilterFormatter.format(value), \"\\\"\"))), values.length > 1 && /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-subtitle\",\n children: [\"(\", values.length, \" values selected)\"]\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'date is',\n description: \"Show only rows where \".concat(column.name, \" is \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(valueFilter => column.filter().eq(valueFilter)).reduce((acc, curr) => acc.or(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"=\".concat(dateFilterFormatter.format(value))).join(' || '), operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'date is not',\n description: \"Show only rows where \".concat(column.name, \" is not \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(valueFilter => column.filter().notEq(valueFilter)).reduce((acc, curr) => acc.and(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!=\".concat(dateFilterFormatter.format(value))).join(' && '), operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'date is before',\n description: \"Show only rows where \".concat(column.name, \" is before \").concat(minPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThan(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<\".concat(minDateText), operator));\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 \".concat(column.name, \" is before or equal to \").concat(minPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThanOrEqualTo(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<=\".concat(minDateText), operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'date is after',\n description: \"Show only rows where \".concat(column.name, \" is greater than \").concat(maxPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThan(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">\".concat(maxDateText), operator));\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 \".concat(column.name, \" is after or equal to \").concat(maxPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThanOrEqualTo(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">=\".concat(maxDateText), operator));\n },\n order: 60,\n group: ContextActions.groups.low\n });\n return actions;\n }\n emptyStringFilterActions(column, quickFilter, operator) {\n var {\n dh\n } = this;\n var filterValue = dh.FilterValue.ofString('');\n var newQuickFilter = quickFilter;\n if (!newQuickFilter) {\n newQuickFilter = {\n filter: null,\n text: null\n };\n }\n var {\n filter,\n text: filterText\n } = newQuickFilter;\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"empty\"\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'is empty string',\n description: \"Show only rows where \".concat(column.name, \" is empty\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().eq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"=\", operator));\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 \".concat(column.name, \" is not empty\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().notEq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"!=\", operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n return actions;\n }\n nullFilterActions(column, quickFilter, operator) {\n var filter = null;\n var filterText = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"null\"\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'is null',\n description: \"Show only rows where \".concat(column.name, \" is null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'null', operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'is not null',\n description: \"Show only rows where \".concat(column.name, \" is not null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, '!null', operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n return actions;\n }\n sortByActions(column, modelColumn, columnSort) {\n var theme = this.irisGrid.getTheme();\n var {\n contextMenuSortIconColor\n } = theme;\n var sortActions = [{\n title: \"\".concat(column.name, \" Ascending\"),\n order: 10,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n }, {\n title: \"\".concat(column.name, \" Descending\"),\n order: 20,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n }, {\n title: \"Remove Sort\",\n order: 50,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.none, false, true);\n },\n disabled: !columnSort\n }];\n if (TableUtils.isNumberType(column.type)) {\n sortActions.push({\n title: \"ABS(\".concat(column.name, \") Ascending\"),\n order: 30,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, true);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, true) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n });\n sortActions.push({\n title: \"ABS(\".concat(column.name, \") Descending\"),\n order: 40,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, true);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, true) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n });\n }\n return sortActions;\n }\n additionalSortActions(column, columnIndex) {\n var theme = this.irisGrid.getTheme();\n var {\n contextMenuSortIconColor\n } = theme;\n var additionalSortActions = [{\n title: 'Add Sort By',\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"btn-context-menu menu-title\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"icon\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsRemove,\n style: {\n color: contextMenuSortIconColor !== null && contextMenuSortIconColor !== void 0 ? contextMenuSortIconColor : undefined\n }\n })\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"title\",\n children: \"Add Additional Sort\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"shortcut\",\n children: ContextActionUtils.isMacPlatform() ? '⌘Click' : 'Ctrl+Click'\n })]\n }),\n order: 1\n }, {\n title: \"\".concat(column.name, \" Ascending\"),\n order: 10,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, false, true);\n }\n }, {\n title: \"\".concat(column.name, \" Descending\"),\n order: 20,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, false, true);\n }\n }];\n if (TableUtils.isNumberType(column.type)) {\n additionalSortActions.push({\n title: \"ABS(\".concat(column.name, \") Ascending\"),\n order: 30,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, true, true);\n }\n });\n additionalSortActions.push({\n title: \"ABS(\".concat(column.name, \") Descending\"),\n order: 40,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, true, true);\n }\n });\n }\n return additionalSortActions;\n }\n checkColumnSort(columnSort) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var isAbs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (!columnSort) {\n return false;\n }\n return columnSort.direction === direction && columnSort.isAbs === isAbs;\n }\n}\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_EDIT\", ContextActions.groups.high + 10);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_HIDE_COLUMNS\", ContextActions.groups.high + 25);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_FILTER\", ContextActions.groups.high + 50);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_EXPAND_COLLAPSE\", ContextActions.groups.high + 55);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_GOTO\", ContextActions.groups.high + 60);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_SORT\", ContextActions.groups.high + 75);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_COPY\", ContextActions.groups.high + 100);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_FORMAT\", ContextActions.groups.high + 150);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_VIEW_CONTENTS\", ContextActions.groups.high + 175);\n_defineProperty(IrisGridContextMenuHandler, \"COLUMN_SORT_DIRECTION\", {\n ascending: 'ASC',\n descending: 'DESC',\n none: null\n});\nexport default IrisGridContextMenuHandler;\n//# sourceMappingURL=IrisGridContextMenuHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { GridMouseHandler, GridRange } from '@deephaven/grid';\nimport { ContextActionUtils } from '@deephaven/components';\nclass IrisGridCopyCellMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(250);\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n onClick(gridPoint, grid, event) {\n if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey) {\n this.cursor = null;\n if (gridPoint.columnHeaderDepth !== undefined) {\n this.irisGrid.copyColumnHeader(gridPoint.column, gridPoint.columnHeaderDepth);\n } else {\n this.irisGrid.copyRanges([GridRange.makeCell(gridPoint.column, gridPoint.row)]);\n }\n return true;\n }\n return false;\n }\n onMove(gridPoint, _grid, event) {\n if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey && gridPoint.column != null && (gridPoint.row != null || gridPoint.columnHeaderDepth != null)) {\n this.cursor = this.irisGrid.props.copyCursor;\n return true;\n }\n return false;\n }\n}\nexport default IrisGridCopyCellMouseHandler;\n//# sourceMappingURL=IrisGridCopyCellMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Handles sending data selected via double click\n */\nclass IrisGridDataSelectMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(880);\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDoubleClick(gridPoint, grid) {\n var {\n column,\n row\n } = gridPoint;\n if (row == null || column == null) {\n return false;\n }\n this.irisGrid.selectData(column, row);\n return false;\n }\n}\nexport default IrisGridDataSelectMouseHandler;\n//# sourceMappingURL=IrisGridDataSelectMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Trigger quick filters and advanced filters\n */\nclass IrisGridFilterMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(gridPoint) {\n var {\n y,\n column,\n row\n } = gridPoint;\n if (column !== null && row === null) {\n var {\n isFilterBarShown,\n metrics\n } = this.irisGrid.state;\n if (!metrics) throw new Error('Metrics not set');\n var {\n columnHeaderMaxDepth\n } = metrics;\n var theme = this.irisGrid.getTheme();\n if (isFilterBarShown && theme.columnHeaderHeight != null && theme.filterBarHeight != null && y > theme.columnHeaderHeight * columnHeaderMaxDepth && y <= theme.columnHeaderHeight * columnHeaderMaxDepth + theme.filterBarHeight) {\n this.irisGrid.focusFilterBar(column);\n return true;\n }\n }\n return false;\n }\n onMove(gridPoint) {\n var {\n y,\n column\n } = gridPoint;\n var {\n isFilterBarShown,\n hoverAdvancedFilter,\n metrics\n } = this.irisGrid.state;\n if (!metrics) throw new Error('Metrics not set');\n var {\n columnHeaderMaxDepth\n } = metrics;\n var theme = this.irisGrid.getTheme();\n var newHoverAdvancedFilter = null;\n if (isFilterBarShown && theme.columnHeaderHeight != null && theme.filterBarHeight != null && column !== null && y >= theme.columnHeaderHeight * columnHeaderMaxDepth && y <= theme.columnHeaderHeight * columnHeaderMaxDepth + theme.filterBarHeight) {\n newHoverAdvancedFilter = column;\n }\n if (newHoverAdvancedFilter !== hoverAdvancedFilter) {\n this.irisGrid.setState({\n hoverAdvancedFilter: newHoverAdvancedFilter\n });\n }\n return false;\n }\n onLeave(gridPoint) {\n var {\n column\n } = gridPoint;\n var {\n hoverAdvancedFilter\n } = this.irisGrid.state;\n if (hoverAdvancedFilter !== null && column !== hoverAdvancedFilter) {\n this.irisGrid.setState({\n hoverAdvancedFilter: null\n });\n }\n return false;\n }\n}\nexport default IrisGridFilterMouseHandler;\n//# sourceMappingURL=IrisGridFilterMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { GridMouseHandler, GridRowTreeMouseHandler, isExpandableGridModel } from '@deephaven/grid';\nimport { assertNotNull } from '@deephaven/utils';\nimport deepEqual from 'fast-deep-equal';\nclass IrisGridRowTreeMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(750); // Needs to be before GridRowTreeMouseHandler\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n destroyTooltip() {\n this.irisGrid.setState({\n expandCellTooltipProps: null\n });\n }\n setCursor(gridPoint, grid) {\n if (GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid)) {\n this.cursor = 'pointer';\n return {\n stopPropagation: false,\n preventDefault: false\n };\n }\n this.cursor = null;\n return false;\n }\n getButtonPosition(_ref) {\n var {\n x,\n y,\n column,\n row\n } = _ref;\n if (column == null || row == null) {\n return null;\n }\n var {\n renderer,\n grid,\n state,\n props\n } = this.irisGrid;\n if (!grid) {\n return null;\n }\n var {\n metrics\n } = state;\n var {\n model\n } = props;\n var {\n canvasContext: context\n } = grid;\n var theme = grid.getTheme();\n var rendererState = {\n context,\n mouseX: x,\n mouseY: y,\n metrics,\n model,\n theme\n };\n var depth = isExpandableGridModel(model) ? model.depthForRow(row) : null;\n var {\n left,\n top,\n width,\n height\n } = renderer.getExpandButtonPosition(rendererState, depth);\n if (left == null || width == null || top == null || height == null) {\n return null;\n }\n return {\n left,\n top,\n width,\n height\n };\n }\n onMove(gridPoint, grid) {\n if (GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid)) {\n var {\n expandCellTooltipProps\n } = this.irisGrid.state;\n var {\n model\n } = this.irisGrid.props;\n var newProps = this.getButtonPosition(gridPoint);\n var {\n row\n } = gridPoint;\n assertNotNull(row);\n var isRowExpanded = isExpandableGridModel(model) && model.isRowExpanded(row);\n if (!deepEqual(expandCellTooltipProps, newProps)) {\n this.irisGrid.setState({\n expandCellTooltipProps: newProps,\n expandTooltipDisplayValue: isRowExpanded ? 'collapse' : 'expand'\n });\n }\n } else {\n this.destroyTooltip();\n }\n return this.setCursor(gridPoint, grid);\n }\n onDown() {\n this.destroyTooltip();\n return false;\n }\n onContextMenu() {\n this.destroyTooltip();\n return false;\n }\n onWheel() {\n this.destroyTooltip();\n return false;\n }\n onLeave() {\n this.destroyTooltip();\n return false;\n }\n}\nexport default IrisGridRowTreeMouseHandler;\n//# sourceMappingURL=IrisGridRowTreeMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport { ContextActionUtils } from '@deephaven/components';\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Used to handle sorting on column header clicks\n */\nclass IrisGridSortMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n _defineProperty(this, \"column\", void 0);\n this.column = null;\n this.irisGrid = irisGrid;\n }\n getColumnFromGridPoint(gridPoint) {\n var {\n column,\n row,\n columnHeaderDepth\n } = gridPoint;\n if (column !== null && row === null && columnHeaderDepth === 0) {\n return column;\n }\n return null;\n }\n\n // We need to remember where the down started, because the canvas element will trigger a click whereever mouseUp is\n onDown(gridPoint) {\n this.column = this.getColumnFromGridPoint(gridPoint);\n return false;\n }\n onClick(gridPoint, grid, event) {\n var column = this.getColumnFromGridPoint(gridPoint);\n if (column != null && column === this.column) {\n var addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.irisGrid.toggleSort(column, addToExisting);\n return true;\n }\n return false;\n }\n}\nexport default IrisGridSortMouseHandler;\n//# sourceMappingURL=IrisGridSortMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler, GridUtils, isEditableGridModel } from '@deephaven/grid';\nimport { assertNotNull } from '@deephaven/utils';\n\n/**\n * Handles sending data selected via double click\n */\n\nclass PendingMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n this.irisGrid = irisGrid;\n }\n onWheel(gridPoint, grid, wheelEvent) {\n var {\n irisGrid\n } = this;\n var {\n model\n } = irisGrid.props;\n var {\n metrics,\n pendingRowCount\n } = irisGrid.state;\n assertNotNull(metrics);\n var {\n bottom,\n rowCount,\n rowHeight\n } = metrics;\n var {\n deltaY\n } = GridUtils.getScrollDelta(wheelEvent);\n if (isEditableGridModel(model) && model.isEditable && bottom >= rowCount - 1 && deltaY > 0) {\n // We add new rows onto the bottom, but we don't consume the event\n irisGrid.setState({\n pendingRowCount: pendingRowCount + Math.ceil(deltaY / rowHeight)\n });\n }\n return false;\n }\n}\nexport default PendingMouseHandler;\n//# sourceMappingURL=PendingMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getOrThrow, GridMouseHandler, GridUtils, isLinkToken, isTokenBoxCellRenderer } from '@deephaven/grid';\nimport deepEqual from 'fast-deep-equal';\nclass IrisGridTokenMouseHandler extends GridMouseHandler {\n // Stores the current hovered token box if it exists with translated coordinates\n\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n _defineProperty(this, \"currentLinkBox\", void 0);\n this.irisGrid = irisGrid;\n }\n destroyTooltip() {\n this.irisGrid.setState({\n linkHoverTooltipProps: null\n });\n }\n isHoveringLink(gridPoint, grid) {\n var {\n column,\n row,\n x,\n y\n } = gridPoint;\n var {\n renderer,\n metrics,\n props\n } = grid;\n var {\n model\n } = props;\n if (column == null || row == null || metrics == null) {\n this.currentLinkBox = undefined;\n return false;\n }\n var {\n modelRows,\n modelColumns\n } = metrics;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var renderType = model.renderTypeForCell(modelColumn, modelRow);\n var cellRenderer = renderer.getCellRenderer(renderType);\n if (!isTokenBoxCellRenderer(cellRenderer)) {\n return false;\n }\n if (this.currentLinkBox != null) {\n var {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom\n } = this.currentLinkBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n return true;\n }\n }\n var renderState = grid.updateRenderState();\n var tokensInCell = cellRenderer.getTokenBoxesForVisibleCell(column, row, renderState);\n\n // Loop through each link and check if cursor is in bounds\n for (var i = 0; i < tokensInCell.length; i += 1) {\n if (isLinkToken(tokensInCell[i].token)) {\n var translatedTokenBox = GridUtils.translateTokenBox(tokensInCell[i], metrics);\n var {\n x1: _left,\n x2: _right,\n y1: _top,\n y2: _bottom\n } = translatedTokenBox;\n if (x >= _left && x <= _right && y >= _top && y <= _bottom) {\n this.currentLinkBox = translatedTokenBox;\n return true;\n }\n }\n }\n\n // If this point is reached, that means the cursor was not hovering any of the links or there are no links\n this.currentLinkBox = undefined;\n return false;\n }\n setCursor(gridPoint, grid) {\n if (this.isHoveringLink(gridPoint, grid)) {\n this.cursor = 'pointer';\n return {\n stopPropagation: false,\n preventDefault: false\n };\n }\n this.cursor = null;\n return false;\n }\n onMove(gridPoint, grid) {\n var isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n if (isUserHoveringLink && this.currentLinkBox != null && isLinkToken(this.currentLinkBox.token)) {\n var {\n linkHoverTooltipProps\n } = this.irisGrid.state;\n if (this.currentLinkBox == null) {\n return false;\n }\n var {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom\n } = this.currentLinkBox;\n var {\n href\n } = this.currentLinkBox.token;\n var width = right - left;\n var height = bottom - top;\n var newProps = {\n left,\n top: top + 1,\n width,\n height\n };\n if (!deepEqual(linkHoverTooltipProps, newProps)) {\n this.irisGrid.setState({\n linkHoverTooltipProps: newProps,\n linkHoverDisplayValue: href\n });\n }\n } else {\n this.destroyTooltip();\n }\n return this.setCursor(gridPoint, grid);\n }\n onDown() {\n this.destroyTooltip();\n return false;\n }\n onContextMenu() {\n this.destroyTooltip();\n return false;\n }\n onWheel() {\n this.destroyTooltip();\n return false;\n }\n onLeave() {\n this.destroyTooltip();\n return false;\n }\n}\nexport default IrisGridTokenMouseHandler;\n//# sourceMappingURL=IrisGridTokenMouseHandler.js.map","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./PendingDataBottomBar.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar HIDE_TIMEOUT = 3000;\nexport function ToastBottomBar(_ref) {\n var {\n children = null,\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = _ref;\n var [isShown, setIsShown] = useState(false);\n var timeout = useRef();\n var prevChildren = usePrevious(children);\n var startTimer = useCallback(() => {\n setIsShown(true);\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n timeout.current = setTimeout(() => {\n setIsShown(false);\n }, HIDE_TIMEOUT);\n }, [setIsShown, timeout]);\n useEffect(() => {\n if (prevChildren !== children && children != null) {\n startTimer();\n }\n }, [children, prevChildren, setIsShown, startTimer]);\n useEffect(() => () => timeout.current ? clearTimeout(timeout.current) : undefined, []);\n return /*#__PURE__*/_jsx(IrisGridBottomBar, {\n className: \"toast-bottom-bar\",\n isShown: isShown,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n children: children\n });\n}\nexport default ToastBottomBar;\n//# sourceMappingURL=ToastBottomBar.js.map","/* eslint-disable react/require-default-props */\n/* eslint-disable no-param-reassign */\nimport React, { useEffect, useMemo } from 'react';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport { isPartitionedGridModel } from \"./PartitionedGridModel.js\";\nvar COLUMN_BUFFER_PAGES = 1;\n/**\n * React component to keep IrisGridModel in sync\n */\nvar IrisGridModelUpdater = /*#__PURE__*/React.memo(_ref => {\n var {\n model,\n modelColumns,\n top,\n bottom,\n left,\n right,\n filter,\n formatter,\n reverseType = TableUtils.REVERSE_TYPE.NONE,\n sorts,\n customColumns,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n rollupConfig = null,\n totalsConfig = null,\n selectDistinctColumns = EMPTY_ARRAY,\n pendingRowCount = 0,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n formatColumns,\n columnHeaderGroups,\n partitionConfig\n } = _ref;\n var columns = useMemo(() => IrisGridUtils.getModelViewportColumns(modelColumns, left, right, movedColumns, hiddenColumns, alwaysFetchColumns, COLUMN_BUFFER_PAGES), [modelColumns, left, right, movedColumns, hiddenColumns, alwaysFetchColumns]);\n useEffect(function updateFilter() {\n model.filter = filter;\n }, [model, filter]);\n useEffect(function updateSorts() {\n var sortsForModel = [...sorts];\n if (reverseType !== TableUtils.REVERSE_TYPE.NONE) {\n sortsForModel.push(model.dh.Table.reverse());\n }\n model.sort = sortsForModel;\n }, [model, sorts, reverseType]);\n useEffect(function updateFormatter() {\n model.formatter = formatter;\n }, [model, formatter]);\n useEffect(function updateCustomColumns() {\n if (model.isCustomColumnsAvailable) {\n model.customColumns = customColumns;\n }\n }, [model, customColumns]);\n useEffect(function updateFormatColumns() {\n if (model.isFormatColumnsAvailable) {\n model.formatColumns = formatColumns;\n }\n }, [model, formatColumns]);\n useEffect(function updateViewport() {\n model.setViewport(top, bottom, columns);\n }, [model, top, bottom, columns]);\n useEffect(function updateRollupCOnfig() {\n if (model.isRollupAvailable) {\n model.rollupConfig = rollupConfig;\n }\n }, [model, model.isRollupAvailable, rollupConfig]);\n useEffect(function updateSelectDistinctColumns() {\n if (model.isSelectDistinctAvailable) {\n model.selectDistinctColumns = selectDistinctColumns;\n }\n }, [model, selectDistinctColumns]);\n useEffect(function updateTotalsConfig() {\n if (model.isTotalsAvailable) {\n model.totalsConfig = totalsConfig;\n }\n }, [model, model.isTotalsAvailable, totalsConfig]);\n useEffect(function updatePendingRowCount() {\n model.pendingRowCount = pendingRowCount;\n }, [model, pendingRowCount]);\n useEffect(function updatePendingDataMap() {\n model.pendingDataMap = pendingDataMap;\n }, [model, pendingDataMap]);\n useEffect(function updateFrozenColumns() {\n if (frozenColumns) {\n model.updateFrozenColumns(frozenColumns);\n }\n }, [model, frozenColumns]);\n useEffect(function updateColumnHeaderGroups() {\n model.columnHeaderGroups = columnHeaderGroups;\n }, [model, columnHeaderGroups]);\n useEffect(function updatePartitionConfig() {\n if (partitionConfig && isPartitionedGridModel(model)) {\n model.partitionConfig = partitionConfig;\n }\n }, [model, partitionConfig]);\n return null;\n});\nIrisGridModelUpdater.displayName = 'IrisGridModelUpdater';\nexport default IrisGridModelUpdater;\n//# sourceMappingURL=IrisGridModelUpdater.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CopyButton, LoadingSpinner } from '@deephaven/components';\nimport { dhFreeze, dhRefresh, dhSortSlash, vsLock } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport { isExpandableGridModel } from '@deephaven/grid';\nimport \"./ColumnStatistics.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('ColumnStatistics');\nvar STATS_LABEL_OVERRIDES = {\n SIZE: 'Number of Rows'\n};\nclass ColumnStatistics extends Component {\n /** Automatically generate the statistics when the row count is below this threshold */\n\n static getStatsLabel(operation) {\n var _STATS_LABEL_OVERRIDE;\n return (_STATS_LABEL_OVERRIDE = STATS_LABEL_OVERRIDES[operation]) !== null && _STATS_LABEL_OVERRIDE !== void 0 ? _STATS_LABEL_OVERRIDE : operation.split(' ').map(w => w[0].toUpperCase() + w.substr(1).toLowerCase()).join(' ');\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"cancelablePromise\", void 0);\n this.handleError = this.handleError.bind(this);\n this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);\n this.handleStatistics = this.handleStatistics.bind(this);\n this.cancelablePromise = null;\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0\n };\n }\n componentDidMount() {\n this.maybeGenerateStatistics();\n }\n componentWillUnmount() {\n if (this.cancelablePromise) {\n this.cancelablePromise.cancel();\n }\n }\n maybeGenerateStatistics() {\n var {\n column,\n model\n } = this.props;\n var numRows = model.rowCount - model.pendingRowCount - model.floatingBottomRowCount - model.floatingTopRowCount;\n this.setState({\n numRows\n });\n if (!model.isColumnStatisticsAvailable || column.isProxy === true) {\n this.setState({\n loading: false\n });\n } else if (numRows < ColumnStatistics.AUTO_GENERATE_LIMIT) {\n this.handleGenerateStatistics();\n }\n }\n handleGenerateStatistics() {\n this.setState({\n loading: true\n });\n var {\n column,\n model\n } = this.props;\n this.cancelablePromise = PromiseUtils.makeCancelable(model.columnStatistics(column));\n this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);\n }\n handleStatistics(stats) {\n log.debug('Received statistics', stats);\n var {\n model,\n onStatistics\n } = this.props;\n var statistics = [];\n stats.statisticsMap.forEach((value, operation) => {\n statistics.push({\n operation: ColumnStatistics.getStatsLabel(operation),\n value,\n type: stats.getType(operation)\n });\n });\n stats.uniqueValues.forEach((value, operation) => {\n statistics.push({\n operation,\n className: 'column-statistics-unique-value',\n value,\n type: 'long'\n });\n });\n this.setState({\n loading: false,\n statistics,\n numRows: model.rowCount - model.pendingRowCount - model.floatingBottomRowCount - model.floatingTopRowCount\n });\n onStatistics();\n }\n handleError(error) {\n if (error != null && PromiseUtils.isCanceled(error)) {\n log.debug('Called handleError on a cancelled promise result');\n return;\n }\n log.error('Error generating statistics', error);\n this.setState({\n error,\n loading: false,\n statistics: null\n });\n }\n render() {\n var _column$displayName;\n var {\n column,\n model\n } = this.props;\n var {\n error,\n loading,\n statistics,\n numRows\n } = this.state;\n var showGenerateStatistics = !loading && error == null && statistics == null && model.isColumnStatisticsAvailable;\n var statisticElements = [];\n var columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n var description = column.description === null ? null : column.description;\n if (statistics != null) {\n for (var i = 0; i < statistics.length; i += 1) {\n var {\n operation,\n className,\n value,\n type\n } = statistics[i];\n var formattedValue = !type ? model.displayString(value, column.type, column.name) : model.displayString(value, type);\n var statisticElement = /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: classNames('column-statistic-operation', className),\n children: operation\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-value\",\n children: formattedValue\n })]\n }, operation);\n statisticElements.push(statisticElement);\n }\n }\n var rowCountLabel = isExpandableGridModel(model) && model.hasExpandableRows ? 'Expanded Rows' : 'Number of Rows';\n var formattedRowCount = model.displayString(numRows, 'long');\n var columnIndex = model.getColumnIndexByName(column.name);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-title\",\n children: [(_column$displayName = column.displayName) !== null && _column$displayName !== void 0 ? _column$displayName : column.name, /*#__PURE__*/_jsxs(\"span\", {\n className: \"column-statistics-type\",\n children: [\"\\xA0(\", columnType, \")\"]\n }), /*#__PURE__*/_jsx(CopyButton, {\n className: \"column-statistics-copy\",\n tooltip: \"Copy column name\",\n copy: column.name\n })]\n }), description != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistics-description\",\n children: description\n }), columnIndex != null && !model.isColumnSortable(columnIndex) && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-status\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSortSlash,\n className: \"mr-1\"\n }), \"Not sortable\"]\n }), columnIndex != null && !model.isColumnMovable(columnIndex) && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-status\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock,\n className: \"mr-1\"\n }), model.isColumnFrozen(columnIndex) ? 'Frozen' : 'Not movable']\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-grid\",\n children: [statistics == null && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-operation\",\n children: rowCountLabel\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-value\",\n children: formattedRowCount\n })]\n }), statisticElements]\n }), showGenerateStatistics && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"px-0\",\n onClick: this.handleGenerateStatistics,\n children: \"Generate Stats\"\n }), error != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: \"\".concat(error)\n }), statistics && !loading && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"px-0\",\n onClick: this.handleGenerateStatistics,\n icon: dhRefresh,\n children: \"Refresh\"\n }), loading && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-loading\",\n children: [/*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n }), \"Calculating Stats...\"]\n })]\n });\n }\n}\n_defineProperty(ColumnStatistics, \"AUTO_GENERATE_LIMIT\", 100000);\nexport default ColumnStatistics;\n//# sourceMappingURL=ColumnStatistics.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport { dhGearFilled, dhCheckSquare, dhSquareFilled, dhRemoveSquareFilled, dhWarningCircleFilled, vsCircleLargeFilled } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport \"./CrossColumnSearch.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nclass CrossColumnSearch extends PureComponent {\n static createSearchFilter(dh, searchValue, selectedColumns, columns, invertSelection) {\n var filterColumns = invertSelection ? columns.filter(column => !selectedColumns.includes(column.name)).map(column => column.name) : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n var filterValue = dh.FilterValue.ofString(searchValue);\n var searchFilter = filterColumns.length === columns.length ? dh.FilterCondition.search(filterValue) : dh.FilterCondition.search(filterValue, columns.filter(column => filterColumns.includes(column.name)).map(column => column.filter()));\n return searchFilter;\n }\n return undefined;\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"searchField\", void 0);\n this.handleSearchValueChange = this.handleSearchValueChange.bind(this);\n this.toggleColumn = this.toggleColumn.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n this.selectNumbers = this.selectNumbers.bind(this);\n this.searchField = /*#__PURE__*/React.createRef();\n this.state = {\n isConfigureColumnsShown: false\n };\n }\n focus() {\n var _this$searchField$cur;\n (_this$searchField$cur = this.searchField.current) === null || _this$searchField$cur === void 0 ? void 0 : _this$searchField$cur.focus();\n }\n handleSearchValueChange(event) {\n var {\n onChange,\n selectedColumns,\n invertSelection\n } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n sendColumnChange(selectedColumns, invertSelection) {\n var {\n onChange,\n value\n } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n setInvertSelection(invertSelection) {\n var {\n onChange,\n value\n } = this.props;\n onChange(value, [], invertSelection);\n }\n toggleColumn(name) {\n var {\n selectedColumns,\n invertSelection\n } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(selectedColumns.filter(c => c !== name), invertSelection);\n } else {\n var update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n selectAll() {\n this.setInvertSelection(true);\n }\n clear() {\n this.setInvertSelection(false);\n }\n selectNumbers() {\n var {\n columns\n } = this.props;\n this.sendColumnChange(columns.filter(c => TableUtils.isNumberType(c.type)).map(column => column.name), false);\n }\n render() {\n var {\n value,\n selectedColumns,\n invertSelection,\n columns\n } = this.props;\n var {\n isConfigureColumnsShown\n } = this.state;\n var hasAllColumnsSelected = selectedColumns.length === 0 && invertSelection === true || selectedColumns.length === columns.length && invertSelection === false;\n var hasNoColumnsSelected = selectedColumns.length === 0 && invertSelection === false || selectedColumns.length === columns.length && invertSelection === true;\n\n // set icon layers\n var icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSquareFilled,\n mask: dhGearFilled,\n transform: \"shrink-2 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhCheckSquare,\n className: \"text-primary\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCircleLargeFilled,\n mask: dhGearFilled,\n transform: \"shrink-1 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhWarningCircleFilled,\n className: \"text-danger\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n } else {\n // icon if some columns selected, but not all\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSquareFilled,\n mask: dhGearFilled,\n transform: \"shrink-2 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhRemoveSquareFilled,\n className: \"text-primary\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-container\",\n children: [/*#__PURE__*/_jsx(SearchInput, {\n className: \"cross-column-search\",\n placeholder: \"Search Data...\",\n \"data-testid\": \"cross-column-search\",\n value: value,\n onChange: this.handleSearchValueChange,\n ref: this.searchField\n }), /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: \"btn btn-link btn-link-icon px-2\",\n onClick: () => {\n if (isConfigureColumnsShown) {\n this.setState({\n isConfigureColumnsShown: false\n });\n } else {\n this.setState({\n isConfigureColumnsShown: true\n });\n }\n },\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"fa-layers\",\n children: icon\n }), /*#__PURE__*/_jsx(Tooltip, {\n children: \"Configure Columns\"\n }), /*#__PURE__*/_jsx(Popper, {\n isShown: isConfigureColumnsShown,\n className: \"cross-column-popper\",\n onExited: () => {\n this.setState({\n isConfigureColumnsShown: false\n });\n },\n closeOnBlur: true,\n interactive: true,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-popup\",\n children: [\"Searched Columns\", /*#__PURE__*/_jsx(\"div\", {\n className: \"cross-column-scroll\",\n children: columns.map(column => {\n if (column.isProxy === true) return null;\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(Checkbox, {\n className: \"cross-column-checkbox\",\n checked: invertSelection ? !selectedColumns.includes(column.name) : selectedColumns.includes(column.name),\n onChange: () => this.toggleColumn(column.name),\n children: column.name\n }), column.type.substring(column.type.lastIndexOf('.') + 1)]\n }, column.name);\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-button-bar\",\n children: [/*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.selectAll,\n children: \"Select All\"\n }), /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.clear,\n children: \"Clear\"\n }), /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.selectNumbers,\n children: \"Numbers Only\"\n })]\n }), hasNoColumnsSelected && /*#__PURE__*/_jsxs(\"p\", {\n className: \"text-danger\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhWarningCircleFilled\n }), \" Select at least one column to search.\"]\n })]\n })\n })]\n })]\n });\n }\n}\nexport default CrossColumnSearch;\n//# sourceMappingURL=CrossColumnSearch.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport memoizee from 'memoizee';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { vsChevronRight, vsMerge, vsKey } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Picker } from '@deephaven/jsapi-components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport \"./IrisGridPartitionSelector.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridPartitionSelector');\nclass IrisGridPartitionSelector extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"getCachedChangeCallback\", memoizee(index => value => this.handlePartitionSelect(index, value)));\n _defineProperty(this, \"getCachedFormatValueCallback\", memoizee(index => value => this.getDisplayValue(index, value)));\n this.handleKeyTableClick = this.handleKeyTableClick.bind(this);\n this.handleMergeClick = this.handleMergeClick.bind(this);\n this.handlePartitionSelect = this.handlePartitionSelect.bind(this);\n var {\n model\n } = props;\n this.tableUtils = new TableUtils(model.dh);\n this.pending = new Pending();\n this.state = {\n // We start be loading the partition tables, so we should be in a loading state\n isLoading: true,\n keysTable: null,\n partitionFilters: null,\n partitionTables: null\n };\n }\n componentDidMount() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n model\n } = _this.props;\n try {\n var keysTable = yield _this.pending.add(model.partitionKeysTable().then(keyTable => {\n var sorts = model.partitionColumns.map(column => column.sort().desc());\n keyTable.applySort(sorts);\n return keyTable;\n }), t => t.close());\n var partitionTables = yield Promise.all(model.partitionColumns.map( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (_, i) {\n return _this.pending.add(keysTable.selectDistinct(model.partitionColumns.slice(0, i + 1)), t => t.close());\n });\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }()));\n var partitionFilters = _this.getPartitionFilters(partitionTables);\n _this.setState({\n isLoading: false,\n keysTable,\n partitionFilters,\n partitionTables\n });\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n // Just re-throw the error if it's not a cancel\n throw e;\n }\n }\n })();\n }\n componentDidUpdate(prevProps) {\n var {\n partitionConfig: prevConfig\n } = prevProps;\n var {\n partitionConfig\n } = this.props;\n if (prevConfig !== partitionConfig) {\n this.updatePartitionFilters();\n }\n }\n componentWillUnmount() {\n this.pending.cancel();\n var {\n keysTable,\n partitionTables\n } = this.state;\n keysTable === null || keysTable === void 0 ? void 0 : keysTable.close();\n partitionTables === null || partitionTables === void 0 ? void 0 : partitionTables.forEach(table => table.close());\n }\n handleKeyTableClick() {\n log.debug2('handleKeyTableClick');\n var {\n partitionConfig\n } = this.props;\n var newPartitionConfig = _objectSpread({}, partitionConfig);\n // Toggle between Keys and Partition mode\n newPartitionConfig.mode = partitionConfig.mode === 'keys' ? 'partition' : 'keys';\n this.sendUpdate(newPartitionConfig);\n }\n handleMergeClick() {\n log.debug2('handleMergeClick');\n var {\n partitionConfig\n } = this.props;\n var newPartitionConfig = _objectSpread({}, partitionConfig);\n // Toggle between Merged and Partition mode\n newPartitionConfig.mode = partitionConfig.mode === 'merged' ? 'partition' : 'merged';\n this.sendUpdate(newPartitionConfig);\n }\n\n /**\n * Handles when a partition dropdown selection is changed. Will send an update with the new partition config\n * @param index Index of the partition column that was changed\n * @param selectedValue Selected value of the partition column\n */\n handlePartitionSelect(index, selectedValue) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var {\n model,\n partitionConfig: prevConfig\n } = _this2.props;\n log.debug('handlePartitionSelect', index, selectedValue, prevConfig);\n var newPartitions = [...prevConfig.partitions];\n newPartitions[index] = selectedValue;\n\n // If it's the last partition changed, we know it's already a valid value, just emit it\n if (index === model.partitionColumns.length - 1) {\n _this2.sendUpdate({\n partitions: newPartitions,\n mode: 'partition'\n });\n return;\n }\n var {\n keysTable\n } = _this2.state;\n // Otherwise, we need to get the value from a filtered key table\n assertNotNull(keysTable);\n try {\n _this2.setState({\n isLoading: true\n });\n var t = yield _this2.pending.add(keysTable.copy(), tCopy => tCopy.close());\n\n // Apply our partition filters, and just get the first value\n var partitionFilters = newPartitions.slice(0, index + 1).map((partition, i) => {\n var partitionColumn = t.columns[i];\n return _this2.tableUtils.makeNullableEqFilter(partitionColumn, partition);\n });\n t.applyFilter(partitionFilters);\n t.setViewport(0, 0, t.columns);\n var data = yield _this2.pending.add(t.getViewportData());\n var newConfig = {\n // Core JSAPI returns undefined for null table values,\n // coalesce with null to differentiate null from no selection in the dropdown\n // https://github.com/deephaven/deephaven-core/issues/5400\n partitions: t.columns.map(column => {\n var _data$rows$0$get;\n return (_data$rows$0$get = data.rows[0].get(column)) !== null && _data$rows$0$get !== void 0 ? _data$rows$0$get : null;\n }),\n mode: 'partition'\n };\n t.close();\n _this2.sendUpdate(newConfig);\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to get partition tables', e);\n }\n } finally {\n _this2.setState({\n isLoading: false\n });\n }\n })();\n }\n sendUpdate(partitionConfig) {\n log.debug2('sendUpdate', partitionConfig);\n var {\n onChange\n } = this.props;\n onChange(partitionConfig);\n }\n\n /**\n * Calls model.displayString with a special character case\n * @param index The index of the partition column to get the display value for\n * @param value The partition value to get the display value for\n */\n getDisplayValue(index, value) {\n var {\n model\n } = this.props;\n if (value === null) {\n return '(null)';\n }\n if (value === undefined || value === '') {\n return '';\n }\n var column = model.partitionColumns[index];\n if (TableUtils.isCharType(column.type) && value.toString().length > 0) {\n return String.fromCharCode(parseInt(value.toString(), 10));\n }\n return model.displayString(value, column.type, column.name);\n }\n\n /**\n * Update the filters on the partition dropdown tables\n */\n updatePartitionFilters() {\n var {\n partitionTables\n } = this.state;\n assertNotNull(partitionTables);\n var {\n partitionConfig\n } = this.props;\n var {\n mode\n } = partitionConfig;\n log.debug('updatePartitionFilters', partitionConfig);\n if (mode !== 'partition') {\n // We only need to update the filters if the mode is `partitions`\n // In the other modes, we disable the dropdowns anyway\n return;\n }\n var partitionFilters = this.getPartitionFilters(partitionTables);\n this.setState({\n partitionFilters\n });\n }\n getPartitionFilters(partitionTables) {\n var {\n model,\n partitionConfig\n } = this.props;\n var {\n partitions\n } = partitionConfig;\n log.debug('getPartitionFilters', partitionConfig);\n if (partitions.length !== partitionTables.length) {\n throw new Error(\"Invalid partition config set. Expected \".concat(partitionTables.length, \" partitions, but got \").concat(partitions.length));\n }\n\n // The filters are applied in order, so we need to build up the filters for each partition\n var partitionFilters = [];\n for (var i = 0; i < partitions.length; i += 1) {\n if (i === 0) {\n // There's no reason to ever filter the first table\n partitionFilters.push([]);\n } else {\n var previousFilter = partitionFilters[i - 1];\n var previousPartition = partitions[i - 1];\n var previousColumn = model.partitionColumns[i - 1];\n var partitionFilter = [...previousFilter, this.tableUtils.makeNullableEqFilter(previousColumn, previousPartition)];\n partitionFilters.push(partitionFilter);\n }\n }\n return partitionFilters;\n }\n render() {\n var {\n model,\n partitionConfig\n } = this.props;\n var {\n isLoading,\n partitionFilters,\n partitionTables\n } = this.state;\n var {\n partitions\n } = partitionConfig;\n if (partitionFilters !== null && partitionTables !== null) {\n partitionFilters.forEach((filter, index) => {\n partitionTables[index].applyFilter(filter);\n });\n }\n var partitionSelectors = model.partitionColumns.map((column, index) => /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-selector\",\n children: [(partitionTables === null || partitionTables === void 0 ? void 0 : partitionTables[index]) && /*#__PURE__*/_jsx(Picker, {\n label: column.name,\n labelPosition: \"side\",\n table: partitionTables[index],\n direction: \"bottom\",\n shouldFlip: false,\n keyColumn: partitionTables[index].columns[index].name,\n placeholder: 'Loading...',\n labelColumn: partitionTables[index].columns[index].name,\n onChange: this.getCachedChangeCallback(index),\n defaultSelectedKey: partitions[index],\n isDisabled: index > 0 && partitionConfig.mode !== 'partition' || isLoading\n }), model.partitionColumns.length - 1 === index || /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronRight\n })]\n }, \"selector-\".concat(column.name)));\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-partition-selector\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"table-name\",\n children: \"Partitioned Table\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"partition-button-group\",\n children: [/*#__PURE__*/_jsx(Button, {\n onClick: this.handleKeyTableClick,\n kind: \"inline\",\n tooltip: \"View keys as table\",\n icon: vsKey,\n active: partitionConfig.mode === 'keys',\n disabled: isLoading,\n children: \"Keys\"\n }), /*#__PURE__*/_jsx(Button, {\n onClick: this.handleMergeClick,\n kind: \"inline\",\n tooltip: \"View all partitions as one merged table\",\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsMerge,\n rotation: 90\n }),\n active: partitionConfig.mode === 'merged',\n disabled: isLoading,\n children: \"Merge\"\n })]\n }), partitionSelectors]\n });\n }\n}\nexport default IrisGridPartitionSelector;\n//# sourceMappingURL=IrisGridPartitionSelector.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Button, Select } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport \"./SelectDistinctBuilder.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('SelectDistinctBuilder');\nclass SelectDistinctBuilder extends Component {\n constructor(props) {\n super(props);\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleDropdownChanged = this.handleDropdownChanged.bind(this);\n var {\n model,\n selectDistinctColumns\n } = this.props;\n this.state = {\n inputs: selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns\n };\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n inputs\n } = this.state;\n var {\n onChange\n } = this.props;\n if (prevState.inputs !== inputs) {\n var filteredInputs = inputs.filter(val => val !== '');\n if (!deepEqual(prevState.inputs.filter(val => val !== ''), filteredInputs)) {\n onChange(filteredInputs);\n }\n }\n }\n handleAddColumnClick() {\n this.setState(_ref => {\n var {\n inputs: prevInputs\n } = _ref;\n return {\n inputs: [...prevInputs, '']\n };\n });\n }\n handleDeleteColumn(index) {\n this.setState(_ref2 => {\n var {\n inputs\n } = _ref2;\n return {\n inputs: inputs.length === 1 && index === 0 ? [''] : inputs.filter((input, inputIndex) => index !== inputIndex)\n };\n });\n }\n handleDropdownChanged(index, value) {\n log.debug('handleDropdownChanged', index, value);\n this.setState(_ref3 => {\n var {\n inputs: prevInputs\n } = _ref3;\n var inputs = [...prevInputs];\n inputs[index] = value;\n return {\n inputs\n };\n });\n }\n renderInputs() {\n var {\n columns,\n inputs\n } = this.state;\n return inputs.map((value, index) => {\n var options = columns.filter(_ref4 => {\n var {\n name\n } = _ref4;\n return name === value || !inputs.includes(name);\n }).map(_ref5 => {\n var {\n name\n } = _ref5;\n return /*#__PURE__*/_jsx(\"option\", {\n value: name,\n children: name\n }, name);\n });\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n _jsxs(\"div\", {\n className: \"form-inline px-3 pb-3\",\n children: [/*#__PURE__*/_jsxs(Select, {\n className: \"form-control custom-select col\",\n value: value,\n onChange: eventTargetValue => this.handleDropdownChanged(index, eventTargetValue),\n children: [/*#__PURE__*/_jsx(\"option\", {\n value: \"\",\n children: \"Select a column\"\n }), options]\n }), (inputs.length > 1 || value !== '') && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"ml-1 px-2\",\n onClick: () => {\n this.handleDeleteColumn(index);\n },\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsTrash,\n transform: \"grow-3\"\n }),\n tooltip: \"Delete column\"\n })]\n }, index)\n );\n });\n }\n render() {\n var {\n columns,\n inputs\n } = this.state;\n var disableAddButton = inputs.length >= columns.length;\n return /*#__PURE__*/_jsxs(\"div\", {\n role: \"presentation\",\n className: \"select-distinct-builder-container h-100\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-title\",\n children: \"Display Unique Values From\"\n }), this.renderInputs(), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(\"div\", {\n className: \"pt-1 px-3\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-add-column\",\n onClick: this.handleAddColumnClick,\n disabled: disableAddButton,\n icon: dhNewCircleLargeFilled,\n children: \"Add Additional Column\"\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-builder-footer\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-builder-hint\",\n children: \"Display only unique values from the selected table columns. Note that this will reset any filters and display only the selected columns.\"\n })\n })]\n });\n }\n}\n_defineProperty(SelectDistinctBuilder, \"defaultProps\", {\n selectDistinctColumns: [],\n onChange: () => undefined\n});\nexport default SelectDistinctBuilder;\n//# sourceMappingURL=SelectDistinctBuilder.js.map","import React from 'react';\nimport { Menu } from '@deephaven/components';\nimport AdvancedSettingsType from \"./AdvancedSettingsType.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction AdvancedSettingsMenu(_ref) {\n var {\n items,\n onChange: _onChange = () => undefined\n } = _ref;\n return /*#__PURE__*/_jsx(Menu, {\n items: Array.from(items.entries()).map(_ref2 => {\n var [key, isOn] = _ref2;\n return {\n title: AdvancedSettingsMenu.getAdvancedSettingsTitleForKey(key),\n isOn,\n onChange: value => _onChange(key, value)\n };\n })\n });\n}\nAdvancedSettingsMenu.getAdvancedSettingsTitleForKey = key => {\n switch (key) {\n case AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS:\n return 'Clear current table filters before applying new filters from a control';\n case AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS:\n return 'Clear current table filters before applying new filters from an incoming link filter';\n }\n};\nexport default AdvancedSettingsMenu;\n//# sourceMappingURL=AdvancedSettingsMenu.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { useCallback } from 'react';\nimport { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsGripper, vsTrash } from '@deephaven/icons';\nimport { Button, DragUtils, Tooltip } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport \"./ConditionalFormattingMenu.css\";\nimport { FormatterType, getBackgroundForStyleConfig, getColorForStyleConfig, getShortLabelForConditionType, NumberCondition, StringCondition, DateCondition } from \"./ConditionalFormattingUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionalFormattingMenu');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction getRuleValue(config) {\n var {\n column: {\n type\n }\n } = config;\n if (TableUtils.isNumberType(type)) {\n return config.condition === NumberCondition.IS_NULL || config.condition === NumberCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isCharType(type)) {\n return config.condition === DateCondition.IS_NULL || config.condition === DateCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isStringType(type)) {\n return config.condition === StringCondition.IS_NULL || config.condition === StringCondition.IS_NOT_NULL ? '' : \"\\\"\".concat(config.value, \"\\\"\");\n }\n if (TableUtils.isDateType(type)) {\n return config.condition === DateCondition.IS_NULL || config.condition === DateCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isBooleanType(type)) {\n return '';\n }\n throw new Error(\"Invalid column type \".concat(type, \" in getRuleValue\"));\n}\nfunction getRuleTitle(config) {\n if (TableUtils.isNumberType(config.column.type) && config.condition === NumberCondition.IS_BETWEEN) {\n return \"\".concat(config.start, \" < \").concat(config.column.name, \" < \").concat(config.end);\n }\n return \"\".concat(config.column.name, \" \").concat(getShortLabelForConditionType(config.column.type, config.condition), \" \\n \").concat(getRuleValue(config));\n}\nfunction ConditionalFormattingMenu(props) {\n var {\n rules = [],\n onChange = DEFAULT_CALLBACK,\n onCreate = DEFAULT_CALLBACK,\n onSelect = DEFAULT_CALLBACK\n } = props;\n var handleRuleClick = useCallback((e, rule, index) => {\n e.stopPropagation();\n log.debug('Rule clicked', rule, index);\n onSelect(index);\n }, [onSelect]);\n var handleDeleteClick = useCallback((e, rule, index) => {\n e.stopPropagation();\n log.debug('Delete button clicked', rule, index);\n var updatedRules = [...rules];\n updatedRules.splice(index, 1);\n onChange(updatedRules);\n }, [onChange, rules]);\n var handleDragHandlerClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n var handleDragEnd = useCallback(result => {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (result.destination == null) {\n return;\n }\n var sourceIndex = result.source.index;\n var destinationIndex = result.destination.index;\n var updatedRules = [...rules];\n var sourceInput = rules[sourceIndex];\n updatedRules.splice(sourceIndex, 1);\n updatedRules.splice(destinationIndex, 0, sourceInput);\n onChange(updatedRules);\n }, [onChange, rules]);\n\n // Display list of rules\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-formatting-rules\",\n children: [/*#__PURE__*/_jsx(DragDropContext, {\n onDragStart: DragUtils.startDragging,\n onDragEnd: handleDragEnd,\n children: /*#__PURE__*/_jsx(Droppable, {\n droppableId: \"droppable-custom-columns\",\n children: (provided, snapshot) => /*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread({\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.droppableProps), {}, {\n className: classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith\n }),\n children: [rules.length === 0 && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted pl-2\",\n children: \"No formats defined\"\n }), rules.map((rule, index) => /*#__PURE__*/_jsx(Draggable\n // eslint-disable-next-line react/no-array-index-key\n , {\n draggableId: \"\".concat(index, \"-\").concat(rule.type),\n index: index,\n disableInteractiveElementBlocking: true,\n children:\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (provided, snapshot) => /*#__PURE__*/_jsx(\"div\", _objectSpread(_objectSpread({\n role: \"menuitem\",\n tabIndex: 0,\n onClick: e => handleRuleClick(e, rule, index),\n className: classNames('draggable-container', {\n dragging: snapshot.isDragging\n }),\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.draggableProps), {}, {\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"conditional-formatting-list-item\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"formatting-item\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"rule-icon\",\n children: /*#__PURE__*/_jsx(\"span\", {\n className: \"rule-icon-bg\",\n style: {\n backgroundColor: getBackgroundForStyleConfig(rule.config.style),\n color: getColorForStyleConfig(rule.config.style)\n },\n children: rule.type === FormatterType.ROWS ? 'row' : 'col'\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"rule-title\",\n children: getRuleTitle(rule.config)\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"ml-1 px-2\",\n onClick: e => handleDeleteClick(e, rule, index),\n icon: vsTrash,\n tooltip: \"Delete rule\"\n }), /*#__PURE__*/_jsxs(\"button\", _objectSpread(_objectSpread({\n type: \"button\",\n className: \"btn btn-link btn-link-icon px-2 btn-drag-handle\",\n onClick: handleDragHandlerClick\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.dragHandleProps), {}, {\n children: [/*#__PURE__*/_jsx(Tooltip, {\n children: \"Drag to re-order\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGripper\n })]\n }))]\n })\n })\n }))\n }, \"\".concat(index, \"-\").concat(rule.type))), provided.placeholder]\n }))\n })\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: onCreate,\n icon: dhNewCircleLargeFilled,\n children: \"Add New Rule\"\n })]\n });\n}\nexport default ConditionalFormattingMenu;\n//# sourceMappingURL=ConditionalFormattingMenu.js.map","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { Select } from '@deephaven/components';\nimport { StringCondition, DateCondition, getLabelForNumberCondition, getLabelForDateCondition, getLabelForStringCondition, NumberCondition, getDefaultConditionForType, getLabelForBooleanCondition, BooleanCondition, CharCondition, getLabelForCharCondition, isDateConditionValid, getDefaultValueForType } from \"./ConditionalFormattingUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nvar numberConditionOptions = [NumberCondition.IS_EQUAL, NumberCondition.IS_NOT_EQUAL, NumberCondition.IS_BETWEEN, NumberCondition.GREATER_THAN, NumberCondition.GREATER_THAN_OR_EQUAL, NumberCondition.LESS_THAN, NumberCondition.LESS_THAN_OR_EQUAL, NumberCondition.IS_NULL, NumberCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForNumberCondition(option)\n}, option));\nvar stringConditions = [StringCondition.IS_EXACTLY, StringCondition.IS_NOT_EXACTLY, StringCondition.CONTAINS, StringCondition.DOES_NOT_CONTAIN, StringCondition.STARTS_WITH, StringCondition.ENDS_WITH, StringCondition.IS_NULL, StringCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForStringCondition(option)\n}, option));\nvar dateConditions = [DateCondition.IS_EXACTLY, DateCondition.IS_NOT_EXACTLY, DateCondition.IS_BEFORE, DateCondition.IS_BEFORE_OR_EQUAL, DateCondition.IS_AFTER, DateCondition.IS_AFTER_OR_EQUAL, DateCondition.IS_NULL, DateCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForDateCondition(option)\n}, option));\nvar booleanConditions = [BooleanCondition.IS_TRUE, BooleanCondition.IS_FALSE, BooleanCondition.IS_NULL, BooleanCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForBooleanCondition(option)\n}, option));\nvar charConditions = [CharCondition.IS_EQUAL, CharCondition.IS_NOT_EQUAL, CharCondition.IS_NULL, CharCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForCharCondition(option)\n}, option));\nfunction isNumberConditionValid(condition, value, startValue, endValue) {\n if (condition === NumberCondition.IS_NULL || condition === NumberCondition.IS_NOT_NULL) {\n return true;\n }\n if (condition === NumberCondition.IS_BETWEEN && startValue != null && startValue !== '' && !Number.isNaN(Number.parseFloat(startValue)) && endValue != null && endValue !== '' && !Number.isNaN(Number.parseFloat(endValue))) {\n return true;\n }\n if (condition !== NumberCondition.IS_BETWEEN && value !== undefined && value !== '' && !Number.isNaN(Number.parseFloat(value))) {\n return true;\n }\n return false;\n}\nfunction getNumberInputs(selectedCondition, handleValueChange, handleStartValueChange, handleEndValueChange, conditionValue, startValue, endValue) {\n switch (selectedCondition) {\n case NumberCondition.IS_EQUAL:\n case NumberCondition.IS_NOT_EQUAL:\n case NumberCondition.GREATER_THAN:\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n case NumberCondition.LESS_THAN:\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n case NumberCondition.IS_BETWEEN:\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex flex-row\",\n children: [/*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control d-flex mr-2\",\n placeholder: \"Start value\",\n value: startValue !== null && startValue !== void 0 ? startValue : '',\n onChange: handleStartValueChange\n }), /*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control d-flex\",\n placeholder: \"End value\",\n value: endValue !== null && endValue !== void 0 ? endValue : '',\n onChange: handleEndValueChange\n })]\n });\n case NumberCondition.IS_NULL:\n case NumberCondition.IS_NOT_NULL:\n return null;\n }\n}\nfunction getStringInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case StringCondition.IS_NULL:\n case StringCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction getDateInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction getBooleanInputs() {\n return null;\n}\nfunction getCharInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case CharCondition.IS_NULL:\n case CharCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n maxLength: 1,\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction ConditionEditor(props) {\n var {\n column,\n config,\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var selectedColumnType = column.type;\n var [prevColumnType, setPrevColumnType] = useState(selectedColumnType);\n var [selectedCondition, setCondition] = useState(config.condition);\n var [conditionValue, setValue] = useState(config.value);\n var [startValue, setStartValue] = useState(config.start);\n var [endValue, setEndValue] = useState(config.end);\n if (selectedColumnType !== prevColumnType) {\n // Column type changed, reset condition and value fields\n setCondition(getDefaultConditionForType(selectedColumnType));\n setValue(getDefaultValueForType(selectedColumnType));\n setStartValue(undefined);\n setEndValue(undefined);\n setPrevColumnType(selectedColumnType);\n }\n var conditions = useMemo(() => {\n if (selectedColumnType === undefined) {\n return [];\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return numberConditionOptions;\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return charConditions;\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return stringConditions;\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return dateConditions;\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return booleanConditions;\n }\n }, [selectedColumnType]);\n var handleConditionChange = useCallback(value => {\n log.debug('handleConditionChange', value);\n setCondition(value);\n }, []);\n var handleValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleValueChange', value);\n setValue(value);\n }, []);\n var handleStartValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n }, []);\n var handleEndValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n }, []);\n useEffect(function changeCondition() {\n var isValid = true;\n if (selectedCondition === undefined) {\n log.debug('Unable to create formatting rule. Condition is not selected.');\n isValid = false;\n } else if (TableUtils.isNumberType(column.type) && !isNumberConditionValid(selectedCondition, conditionValue, startValue, endValue)) {\n log.debug('Unable to create formatting rule. Invalid value', conditionValue);\n isValid = false;\n } else if (TableUtils.isDateType(column.type) && !isDateConditionValid(dh, selectedCondition, conditionValue)) {\n log.debug('Unable to create formatting rule. Invalid date condition', conditionValue);\n isValid = false;\n }\n onChange({\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue\n }, isValid);\n }, [onChange, column.type, dh, selectedCondition, conditionValue, startValue, endValue]);\n var conditionInputs = useMemo(() => {\n if (selectedColumnType === undefined) {\n // Column not selected\n return null;\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return getNumberInputs(selectedCondition, handleValueChange, handleStartValueChange, handleEndValueChange, conditionValue, startValue, endValue);\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [selectedColumnType, selectedCondition, conditionValue, startValue, endValue, handleValueChange, handleStartValueChange, handleEndValueChange]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"condition-editor mb-2\",\n children: [/*#__PURE__*/_jsx(Select, {\n value: selectedCondition,\n \"data-testid\": \"condition-select\",\n className: \"custom-select mb-2\",\n onChange: handleConditionChange,\n children: conditions\n }), conditionInputs]\n });\n}\nexport default ConditionEditor;\n//# sourceMappingURL=ConditionEditor.js.map","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Log from '@deephaven/log';\nimport { ColorUtils } from '@deephaven/utils';\nimport { vsCheck } from '@deephaven/icons';\nimport { Button, DropdownMenu } from '@deephaven/components';\nimport { FormatStyleType, getLabelForStyleType, getBackgroundForStyleConfig, getColorForStyleConfig } from \"./ConditionalFormattingUtils.js\";\nimport \"./StyleEditor.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('StyleEditor');\nvar DEFAULT_BACKGROUND = '#fcfcfa';\nvar DEFAULT_COLOR_LIGHT = '#f0f0ee';\nvar DEFAULT_COLOR_DARK = '#1a171a';\nvar DEFAULT_DROPDOWN_WIDTH = 200;\nvar DEFAULT_CALLBACK = () => undefined;\nfunction StyleEditor(props) {\n var _config$customConfig$, _config$customConfig;\n var {\n config,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [styleType, setStyleType] = useState(config.type);\n var [background, setBackground] = useState((_config$customConfig$ = (_config$customConfig = config.customConfig) === null || _config$customConfig === void 0 ? void 0 : _config$customConfig.background) !== null && _config$customConfig$ !== void 0 ? _config$customConfig$ : DEFAULT_BACKGROUND);\n var [isShown, setShown] = useState(false);\n var [dropdownWidth, setDropdownWidth] = useState(DEFAULT_DROPDOWN_WIDTH);\n var csContainer = useRef(null);\n var handleBackgroundChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleBackgroundChange', value);\n setBackground(value);\n }, []);\n var handleMenuClosed = useCallback(() => {\n if (isShown) {\n setShown(false);\n }\n }, [isShown]);\n var handleToggleClick = useCallback(() => {\n if (!isShown) {\n updateDropdownWidth();\n }\n setShown(!isShown);\n }, [isShown]);\n var styleOptions = useMemo(() => [FormatStyleType.NO_FORMATTING, FormatStyleType.POSITIVE, FormatStyleType.NEGATIVE, FormatStyleType.WARN, FormatStyleType.NEUTRAL, FormatStyleType.ACCENT_1, FormatStyleType.ACCENT_2, FormatStyleType.CUSTOM], []);\n function updateDropdownWidth() {\n if (csContainer.current) {\n setDropdownWidth(csContainer.current.getBoundingClientRect().width);\n }\n }\n useEffect(function updateTheme() {\n onChange({\n type: styleType,\n customConfig: {\n color: ColorUtils.isDark(background) ? DEFAULT_COLOR_LIGHT : DEFAULT_COLOR_DARK,\n background\n }\n });\n }, [onChange, styleType, background]);\n var renderOptions = useCallback(() => {\n var matchFound = false;\n var optionArray = [];\n var _loop = function _loop() {\n var option = styleOptions[index];\n var key = \"option-\".concat(index, \"-\").concat(option);\n matchFound = matchFound || option === styleType;\n optionArray.push( /*#__PURE__*/_jsxs(Button, {\n kind: \"inline\",\n className: \"style-option-btn\",\n onClick: () => {\n setStyleType(option);\n setShown(false);\n },\n style: {\n color: getColorForStyleConfig({\n type: option\n }),\n background: getBackgroundForStyleConfig({\n type: option\n })\n },\n children: [option === styleType && /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCheck,\n className: \"mr-2\"\n }), option !== styleType && /*#__PURE__*/_jsx(\"span\", {\n className: \"mr-4\"\n }), getLabelForStyleType(option)]\n }, key));\n };\n for (var index = 0; index < styleOptions.length; index += 1) {\n _loop();\n }\n return optionArray;\n }, [styleOptions, styleType]);\n var renderMenuElement = useCallback(() => /*#__PURE__*/_jsx(\"div\", {\n className: \"style-menu-container\",\n role: \"presentation\",\n style: {\n width: dropdownWidth\n },\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"style-options\",\n children: renderOptions()\n })\n }), [dropdownWidth, renderOptions]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"style-editor\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n ref: csContainer,\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Style\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: \"inline\",\n className: \"cs-dropdown custom-select\",\n style: {\n color: getColorForStyleConfig({\n type: styleType\n }),\n background: getBackgroundForStyleConfig({\n type: styleType\n })\n },\n onClick: handleToggleClick,\n children: [getLabelForStyleType(styleType), /*#__PURE__*/_jsx(DropdownMenu, {\n isShown: isShown,\n actions: {\n menuElement: renderMenuElement()\n },\n popperOptions: {\n placement: 'bottom-start'\n },\n popperClassName: \"style-dropdown-menu\",\n onMenuClosed: handleMenuClosed,\n menuStyle: {\n maxWidth: '100rem'\n }\n })]\n })]\n }), styleType === FormatStyleType.CUSTOM && /*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Background\"\n }), /*#__PURE__*/_jsx(\"input\", {\n type: \"color\",\n value: background,\n className: \"custom-select color-select\",\n onChange: handleBackgroundChange\n })]\n })]\n });\n}\nexport default StyleEditor;\n//# sourceMappingURL=StyleEditor.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport { getDefaultConditionConfigForType, getConditionConfig, getDefaultStyleConfig, FormatStyleType } from \"./ConditionalFormattingUtils.js\";\nimport ConditionEditor from \"./ConditionEditor.js\";\nimport StyleEditor from \"./StyleEditor.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('ColumnFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction makeDefaultConfig(columns) {\n var {\n type,\n name\n } = columns[0];\n var column = {\n type,\n name\n };\n var config = _objectSpread({\n column,\n style: getDefaultStyleConfig()\n }, getDefaultConditionConfigForType(type));\n return config;\n}\nfunction ColumnFormatEditor(props) {\n var _columns$find;\n var {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [selectedColumn, setColumn] = useState((_columns$find = columns.find(c => c.name === config.column.name && c.type === config.column.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]);\n var [conditionConfig, setConditionConfig] = useState(getConditionConfig(config));\n var [conditionValid, setConditionValid] = useState(false);\n var [selectedStyle, setStyle] = useState(config.style);\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var {\n name\n } = _ref;\n return name === value;\n });\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(\"Column \".concat(value, \" not found.\"));\n }\n }, [columns, selectedColumn]);\n var handleConditionChange = useCallback((updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n }, []);\n var handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n useEffect(function updateColumnFormat() {\n var isValid = conditionValid;\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, invalidating update.');\n isValid = false;\n }\n if (selectedStyle === undefined || selectedStyle.type === FormatStyleType.NO_FORMATTING) {\n log.debug('Style is not selected, invalidating update.');\n isValid = false;\n }\n var {\n type,\n name\n } = selectedColumn;\n var column = {\n type,\n name\n };\n onChange(_objectSpread({\n column,\n style: selectedStyle\n }, conditionConfig), isValid);\n }, [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]);\n var columnNames = useMemo(() => columns.map(_ref2 => {\n var {\n name\n } = _ref2;\n return name;\n }), [columns]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-rule-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Format Cell If\"\n }), /*#__PURE__*/_jsx(ComboBox, {\n \"aria-label\": \"Select column to format\",\n defaultSelectedKey: selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.name,\n onChange: handleColumnChange,\n children: columnNames\n })]\n }), selectedColumn !== undefined && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(ConditionEditor, {\n dh: dh,\n column: selectedColumn,\n config: conditionConfig,\n onChange: handleConditionChange\n }), /*#__PURE__*/_jsx(StyleEditor, {\n config: selectedStyle,\n onChange: handleStyleChange\n })]\n })]\n });\n}\nexport default ColumnFormatEditor;\n//# sourceMappingURL=ColumnFormatEditor.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport { getDefaultConditionConfigForType, getConditionConfig, getDefaultStyleConfig } from \"./ConditionalFormattingUtils.js\";\nimport ConditionEditor from \"./ConditionEditor.js\";\nimport StyleEditor from \"./StyleEditor.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('RowFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction makeDefaultConfig(columns) {\n var {\n type,\n name\n } = columns[0];\n var column = {\n type,\n name\n };\n var config = _objectSpread({\n column,\n style: getDefaultStyleConfig()\n }, getDefaultConditionConfigForType(type));\n return config;\n}\nfunction RowFormatEditor(props) {\n var _columns$find;\n var {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [selectedColumn, setColumn] = useState((_columns$find = columns.find(c => c.name === config.column.name && c.type === config.column.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]);\n var [conditionConfig, setConditionConfig] = useState(getConditionConfig(config));\n var [conditionValid, setConditionValid] = useState(false);\n var [selectedStyle, setStyle] = useState(config.style);\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var {\n name\n } = _ref;\n return name === value;\n });\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(\"Column \".concat(value, \" not found.\"));\n }\n }, [columns, selectedColumn]);\n var handleConditionChange = useCallback((updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n }, []);\n var handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n useEffect(function updateRowFormat() {\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, skip update.');\n return;\n }\n if (selectedStyle === undefined) {\n log.debug('Style is not selected, skip update.');\n return;\n }\n var {\n type,\n name\n } = selectedColumn;\n var column = {\n type,\n name\n };\n onChange(_objectSpread({\n column,\n style: selectedStyle\n }, conditionConfig), conditionValid);\n }, [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]);\n var columnNames = useMemo(() => columns.map(_ref2 => {\n var {\n name\n } = _ref2;\n return name;\n }), [columns]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-rule-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Format Row If\"\n }), /*#__PURE__*/_jsx(ComboBox, {\n \"aria-label\": \"Select column to format row by\",\n defaultSelectedKey: selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.name,\n onChange: handleColumnChange,\n children: columnNames\n })]\n }), selectedColumn !== undefined && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(ConditionEditor, {\n column: selectedColumn,\n config: conditionConfig,\n dh: dh,\n onChange: handleConditionChange\n }), /*#__PURE__*/_jsx(StyleEditor, {\n config: selectedStyle,\n onChange: handleStyleChange\n })]\n })]\n });\n}\nexport default RowFormatEditor;\n//# sourceMappingURL=RowFormatEditor.js.map","import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { FormatColumnWhereIcon, FormatRowWhereIcon } from \"../icons/index.js\";\nimport ColumnFormatEditor from \"./ColumnFormatEditor.js\";\nimport RowFormatEditor from \"./RowFormatEditor.js\";\nimport { FormatterType, isSupportedColumn } from \"./ConditionalFormattingUtils.js\";\nimport \"./ConditionalFormatEditor.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionalFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction getFormatterTypeIcon(option) {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return /*#__PURE__*/_jsx(FormatColumnWhereIcon, {});\n case FormatterType.ROWS:\n return /*#__PURE__*/_jsx(FormatRowWhereIcon, {});\n }\n}\nfunction getFormatterTypeLabel(option) {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return 'Conditional';\n case FormatterType.ROWS:\n return 'Rows';\n }\n}\nvar formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];\nfunction ConditionalFormatEditor(props) {\n var _defaultRule$type;\n var {\n columns: originalColumns,\n dh,\n onSave = DEFAULT_CALLBACK,\n onUpdate = DEFAULT_CALLBACK,\n onCancel = DEFAULT_CALLBACK,\n rule: defaultRule\n } = props;\n var columns = originalColumns.filter(isSupportedColumn);\n var [selectedFormatter, setFormatter] = useState((_defaultRule$type = defaultRule === null || defaultRule === void 0 ? void 0 : defaultRule.type) !== null && _defaultRule$type !== void 0 ? _defaultRule$type : formatterTypes[0]);\n var [rule, setRule] = useState(defaultRule);\n var [isValid, setIsValid] = useState(false);\n var handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n var handleSave = useCallback(() => {\n if (rule === undefined) {\n log.error('Rule is not defined.');\n return;\n }\n onSave(rule);\n }, [onSave, rule]);\n var handleFormatterChange = useCallback(value => {\n log.debug('handleFormatterChange', value);\n setFormatter(value);\n }, []);\n var handleRuleChange = useCallback((ruleConfig, isRuleValid) => {\n log.debug('handleRuleChange', ruleConfig, isRuleValid, selectedFormatter);\n var updatedRule = {\n type: selectedFormatter,\n config: ruleConfig\n };\n setRule(updatedRule);\n setIsValid(isRuleValid);\n onUpdate(isRuleValid ? updatedRule : undefined);\n }, [onUpdate, selectedFormatter]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-format-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n htmlFor: \"formatter-select\",\n children: \"Select Formatter\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"formatter-list\",\n children: formatterTypes.map((type, index) => /*#__PURE__*/_jsx(\"div\", {\n className: \"formatter-type\",\n children: /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: classNames('btn', 'btn-icon', 'btn-formatter-type', {\n active: type === selectedFormatter\n }),\n \"data-index\": index,\n onClick: () => handleFormatterChange(type),\n children: [getFormatterTypeIcon(type), getFormatterTypeLabel(type)]\n })\n }, type))\n })]\n }), selectedFormatter === FormatterType.CONDITIONAL && /*#__PURE__*/_jsx(ColumnFormatEditor, {\n columns: columns,\n dh: dh,\n config: rule === null || rule === void 0 ? void 0 : rule.config,\n onChange: handleRuleChange\n }), selectedFormatter === FormatterType.ROWS && /*#__PURE__*/_jsx(RowFormatEditor, {\n columns: columns,\n config: rule === null || rule === void 0 ? void 0 : rule.config,\n dh: dh,\n onChange: handleRuleChange\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex justify-content-end my-3\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: handleCancel,\n className: \"mr-2\",\n children: \"Cancel\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: handleSave,\n disabled: rule === undefined || !isValid,\n children: \"Done\"\n })]\n })]\n });\n}\nexport default ConditionalFormatEditor;\n//# sourceMappingURL=ConditionalFormatEditor.js.map","import React, { useEffect, useRef, useState } from 'react';\nimport { Editor } from '@deephaven/console';\nimport { Button, CopyButton, Modal, ModalBody, ModalHeader } from '@deephaven/components';\nimport { vsJson, vsListOrdered } from '@deephaven/icons';\nimport \"./IrisGridCellOverflowModal.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function IrisGridCellOverflowModal(_ref) {\n var _editorRef$current$ge, _editorRef$current2;\n var {\n text,\n isOpen,\n onClose\n } = _ref;\n var [isOpened, setIsOpened] = useState(false);\n var [height, setHeight] = useState(0);\n var [showLineNumbers, setShowLineNumbers] = useState(false);\n var [isFormatted, setIsFormatted] = useState(false);\n var [canFormat, setCanFormat] = useState(false);\n var editorRef = useRef();\n\n // Update format button on open\n useEffect(function enableFormatButtonWhenOpen() {\n if (!isOpen) {\n return;\n }\n try {\n JSON.parse(text);\n setCanFormat(true);\n } catch (_unused) {\n setCanFormat(false);\n }\n setIsFormatted(false);\n }, [isOpen, text]);\n\n // Re-layout editor on height change\n useEffect(function updateLayoutOnHeightChange() {\n if (editorRef.current) {\n editorRef.current.layout();\n }\n }, [height]);\n\n // Update editor options on line number toggle\n useEffect(function toggleShowLineNumber() {\n if (editorRef.current) {\n editorRef.current.updateOptions({\n lineNumbers: showLineNumbers ? 'on' : 'off'\n });\n }\n }, [showLineNumbers]);\n function toggleLineNumbers() {\n setShowLineNumbers(!showLineNumbers);\n }\n function formatAsJSON() {\n var _editorRef$current;\n var model = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getModel();\n if (!canFormat || !model) {\n return;\n }\n if (!isFormatted) {\n model.setValue(JSON.stringify(JSON.parse(text), undefined, 2));\n setIsFormatted(true);\n } else {\n model.setValue(text);\n setIsFormatted(false);\n }\n autoSetLineNumbers();\n }\n function autoSetLineNumbers() {\n var _editor$getModel$getL, _editor$getModel;\n var editor = editorRef.current;\n if (!editor) {\n return;\n }\n setShowLineNumbers(((_editor$getModel$getL = (_editor$getModel = editor.getModel()) === null || _editor$getModel === void 0 ? void 0 : _editor$getModel.getLineCount()) !== null && _editor$getModel$getL !== void 0 ? _editor$getModel$getL : 0) > 1);\n }\n function handleToggle() {\n if (isOpened) {\n editorRef.current = undefined;\n onClose();\n }\n }\n function onEditorInitialized(editor) {\n editorRef.current = editor;\n setHeight(editor.getContentHeight());\n editor.onDidContentSizeChange(_ref2 => {\n var {\n contentHeight\n } = _ref2;\n return setHeight(contentHeight);\n });\n autoSetLineNumbers();\n }\n if (!isOpen && !isOpened) {\n return null;\n }\n return /*#__PURE__*/_jsxs(Modal, {\n isOpen: isOpen,\n centered: true,\n keyboard: true,\n toggle: handleToggle,\n onOpened: () => setIsOpened(true),\n onClosed: () => {\n setIsOpened(false);\n setHeight(0);\n },\n className: \"cell-overflow-modal\",\n size: \"xl\",\n children: [/*#__PURE__*/_jsxs(ModalHeader, {\n toggle: onClose,\n children: [/*#__PURE__*/_jsx(\"h5\", {\n className: \"overflow-modal-title\",\n children: \"Cell Contents\"\n }), /*#__PURE__*/_jsx(CopyButton, {\n kind: \"inline\",\n tooltip: \"Copy cell contents\",\n copy: (_editorRef$current$ge = (_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 ? void 0 : _editorRef$current2.getValue()) !== null && _editorRef$current$ge !== void 0 ? _editorRef$current$ge : text\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"inline\",\n active: showLineNumbers,\n icon: vsListOrdered,\n tooltip: \"Toggle line numbers\",\n onClick: toggleLineNumbers\n }), canFormat && /*#__PURE__*/_jsx(Button, {\n kind: \"inline\",\n icon: vsJson,\n active: isFormatted,\n tooltip: \"Format as JSON\",\n onClick: formatAsJSON\n })]\n }), /*#__PURE__*/_jsx(ModalBody, {\n style: {\n height\n },\n children: /*#__PURE__*/_jsx(Editor, {\n onEditorInitialized: onEditorInitialized,\n settings: {\n value: text,\n readOnly: true,\n wordWrap: 'on',\n // Loading json language w/o the monaco workers causes UI freezes and monaco errors. TS colorizes the same\n language: canFormat ? 'typescript' : 'plaintext',\n folding: canFormat,\n padding: {\n bottom: 16\n },\n lineNumbers: showLineNumbers ? 'on' : 'off',\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n /*\n The entire string may be 1 giant line\n Monaco by default seeds find w/ that line\n On very long strings this hangs the browser, so never seed the search\n */\n find: {\n seedSearchStringFromSelection: 'never'\n }\n }\n })\n })]\n });\n}\n//# sourceMappingURL=IrisGridCellOverflowModal.js.map","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose, vsArrowUp, vsArrowDown } from '@deephaven/icons';\nimport React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { Type as FilterType } from '@deephaven/filters';\nimport { Button, DateTimeInput, Select } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport classNames from 'classnames';\nimport \"./GotoRow.css\";\nimport { nanoid } from 'nanoid';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction isIrisGridProxyModel(model) {\n return model.model !== undefined;\n}\nvar DEFAULT_FORMAT_STRING = '###,##0';\nvar GotoRow = /*#__PURE__*/forwardRef((_ref, ref) => {\n var {\n gotoRow,\n gotoRowError,\n gotoValueError,\n onGotoRowSubmit,\n isShown,\n onEntering,\n onEntered: _onEntered,\n onExiting,\n onExited,\n model,\n onGotoRowNumberChanged,\n onClose,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueFilter,\n onGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged,\n onGotoValueChanged,\n onGotoValueSubmit\n } = _ref;\n var gotoRowInputRef = useRef(null);\n var gotoValueInputRef = useRef(null);\n var [isGotoRowActive, setIsGotoRowActive] = useState(false);\n var columns = [];\n if (isIrisGridProxyModel(model) && model.table !== undefined) {\n ({\n columns\n } = model.table);\n }\n var {\n dh,\n rowCount\n } = model;\n var gotoRowInputId = useMemo(() => \"goto-row-input-\".concat(nanoid()), []);\n var handleGotoValueNumberKeyDown = e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit();\n } else if ((e.key === 'Backspace' || e.key === 'Delete') && (gotoValue === \"\".concat(Number.POSITIVE_INFINITY) || gotoValue === \"\".concat(Number.NEGATIVE_INFINITY))) {\n onGotoValueInputChanged('');\n }\n };\n var handleGotoValueKeySubmit = e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit(e.shiftKey);\n }\n };\n var index = model.getColumnIndexByName(gotoValueSelectedColumnName);\n var selectedColumn = columns[index !== null && index !== void 0 ? index : 0];\n var columnType = selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.type;\n var normalizedType = TableUtils.getNormalizedType(columnType);\n var onGotoValueInputChanged = value => {\n onGotoValueChanged(value !== null && value !== void 0 ? value : '');\n };\n useImperativeHandle(ref, () => ({\n focus() {\n var _gotoRowInputRef$curr;\n setIsGotoRowActive(true);\n (_gotoRowInputRef$curr = gotoRowInputRef.current) === null || _gotoRowInputRef$curr === void 0 ? void 0 : _gotoRowInputRef$curr.select();\n }\n }));\n var selectInput = () => {\n // when row changes without focus (i.e. via context menu), re-select input\n if (isGotoRowActive && document.activeElement !== gotoRowInputRef.current) {\n var _gotoRowInputRef$curr2;\n (_gotoRowInputRef$curr2 = gotoRowInputRef.current) === null || _gotoRowInputRef$curr2 === void 0 ? void 0 : _gotoRowInputRef$curr2.select();\n } else if (!isGotoRowActive && document.activeElement !== gotoValueInputRef.current) {\n var _gotoValueInputRef$cu;\n (_gotoValueInputRef$cu = gotoValueInputRef.current) === null || _gotoValueInputRef$cu === void 0 ? void 0 : _gotoValueInputRef$cu.select();\n }\n };\n useEffect(selectInput, [isGotoRowActive]);\n var renderValueInput = () => {\n switch (normalizedType) {\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: classNames('form-control', {\n 'is-invalid': gotoValueError !== ''\n }),\n onKeyDown: handleGotoValueNumberKeyDown,\n placeholder: \"value\",\n onChange: e => {\n var value = e.target.value.toLowerCase();\n // regex tests for\n if (/^-?[0-9]*\\.?[0-9]*$/.test(e.target.value)) {\n onGotoValueInputChanged(e.target.value);\n } else if (value === '-i' || value === '-infinity') {\n onGotoValueInputChanged(\"\".concat(Number.NEGATIVE_INFINITY));\n } else if (value === 'i' || value === 'infinity') {\n onGotoValueInputChanged(\"\".concat(Number.POSITIVE_INFINITY));\n }\n },\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n });\n case TableUtils.dataType.DATETIME:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-value-date-time-input\",\n children: /*#__PURE__*/_jsx(DateTimeInput, {\n ref: gotoValueInputRef,\n className: classNames('form-control', 'goto-value-date-time-input', {\n 'is-invalid': gotoValueError !== ''\n }),\n defaultValue: gotoValue,\n onChange: onGotoValueInputChanged,\n onSubmit: handleGotoValueKeySubmit,\n \"aria-label\": \"Value Input\"\n })\n });\n case TableUtils.dataType.STRING:\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsxs(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n onGotoValueSelectedFilterChanged(eventTargetValue);\n },\n value: gotoValueFilter,\n \"aria-label\": \"filter-type-select\",\n children: [/*#__PURE__*/_jsx(\"option\", {\n value: FilterType.eqIgnoreCase,\n children: \"Equals (case-insensitive)\"\n }, FilterType.eqIgnoreCase), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.containsIgnoreCase,\n children: \"Contains (case-insensitive)\"\n }, FilterType.containsIgnoreCase), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.eq,\n children: \"Equals\"\n }, FilterType.eq), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.contains,\n children: \"Contains\"\n }, FilterType.contains)]\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: classNames('form-control', {\n 'is-invalid': gotoValueError !== ''\n }),\n onKeyDown: handleGotoValueKeySubmit,\n placeholder: \"value\",\n onChange: e => onGotoValueInputChanged(e.target.value),\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n })]\n });\n case TableUtils.dataType.BOOLEAN:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsxs(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n onGotoValueInputChanged(eventTargetValue);\n },\n value: gotoValue,\n \"aria-label\": \"Value Input\",\n children: [/*#__PURE__*/_jsx(\"option\", {\n \"aria-label\": \"null value\",\n value: \"\"\n }, \"null\"), /*#__PURE__*/_jsx(\"option\", {\n value: \"true\",\n children: \"true\"\n }, \"true\"), /*#__PURE__*/_jsx(\"option\", {\n value: \"false\",\n children: \"false\"\n }, \"false\")]\n })\n });\n default:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: \"form-control\",\n onKeyDown: handleGotoValueKeySubmit,\n placeholder: \"value\",\n onChange: e => onGotoValueInputChanged(e.target.value),\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n });\n }\n };\n return /*#__PURE__*/_jsx(IrisGridBottomBar, {\n isShown: isShown,\n className: classNames('goto-row'),\n onEntering: onEntering,\n onEntered: () => {\n _onEntered();\n selectInput();\n },\n onExiting: onExiting,\n onExited: onExited,\n children: /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"goto-row-row\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: classNames('goto-row-wrapper', {\n 'is-inactive': !isGotoRowActive\n }),\n onClick: () => setIsGotoRowActive(true),\n onFocus: () => setIsGotoRowActive(true),\n role: \"group\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"goto-row-text\",\n htmlFor: gotoRowInputId,\n children: \"Go to row\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoRowInputRef,\n \"data-testid\": \"goto-row-input\",\n type: \"number\",\n onKeyDown: e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoRowSubmit();\n }\n },\n className: classNames('form-control', {\n 'is-invalid': gotoRowError !== ''\n }),\n placeholder: \"Row number\",\n onChange: event => {\n onGotoRowNumberChanged(event);\n },\n value: gotoRow,\n id: gotoRowInputId\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"goto-row-text\",\n children: [\"of\", ' ', dh.i18n.NumberFormat.format(DEFAULT_FORMAT_STRING, rowCount)]\n }), gotoRowError && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-danger\",\n children: gotoRowError\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-close\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: onClose,\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsClose,\n style: {\n marginRight: '0'\n }\n })\n })\n })]\n }), model.isSeekRowAvailable && /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-row\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('goto-row-wrapper', {\n 'is-inactive': isGotoRowActive\n }),\n onClick: () => setIsGotoRowActive(false),\n onFocus: () => setIsGotoRowActive(false),\n role: \"group\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-text\",\n children: \"Go to value\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n var columnName = eventTargetValue;\n onGotoValueSelectedColumnNameChanged(columnName);\n },\n value: gotoValueSelectedColumnName,\n \"aria-label\": \"column-name-select\",\n id: \"column-name-select\",\n children: columns.map(column => /*#__PURE__*/_jsx(\"option\", {\n value: column.name,\n children: column.name\n }, column.name))\n })\n }), renderValueInput(), /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Button, {\n tooltip: \"Previous match\",\n icon: vsArrowUp,\n kind: \"ghost\",\n disabled: gotoValue === '',\n onClick: () => {\n onGotoValueSubmit(true);\n }\n }), /*#__PURE__*/_jsx(Button, {\n tooltip: \"Next match\",\n icon: vsArrowDown,\n kind: \"ghost\",\n disabled: gotoValue === '',\n onClick: () => {\n onGotoValueSubmit(false);\n }\n })]\n }), gotoValueError && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-danger\",\n children: gotoValueError\n })]\n })\n })]\n })\n });\n});\nGotoRow.displayName = 'GotoRow';\nexport default GotoRow;\n//# sourceMappingURL=GotoRow.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport deepEqual from 'fast-deep-equal';\nimport Log from '@deephaven/log';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ContextActions, Stack, Menu, Page, Popper, ThemeExport, Tooltip, Button, ContextActionUtils, SlideTransition } from '@deephaven/components';\nimport { Grid, GridRange, GridUtils, isEditableGridModel, isExpandableGridModel, isDeletableGridModel } from '@deephaven/grid';\nimport { dhEye, dhFilterFilled, dhGraphLineUp, dhTriangleDownSquare, vsClose, vsCloudDownload, vsEdit, vsFilter, vsMenu, vsReply, vsRuby, vsSearch, vsSplitHorizontal, vsSymbolOperator, vsTools } from '@deephaven/icons';\nimport { DateUtils, Formatter, FormatterUtils, TableUtils, isSortDirection } from '@deephaven/jsapi-utils';\nimport { assertNotNull, copyToClipboard, EMPTY_ARRAY, EMPTY_MAP, Pending, PromiseUtils, ValidationError, getOrThrow } from '@deephaven/utils';\nimport { Type as FilterType } from '@deephaven/filters';\nimport throttle from 'lodash.throttle';\nimport debounce from 'lodash.debounce';\nimport clamp from 'lodash.clamp';\nimport { getFormatColumns } from \"./sidebar/conditional-formatting/ConditionalFormattingUtils.js\";\nimport PendingDataBottomBar from \"./PendingDataBottomBar.js\";\nimport IrisGridCopyHandler from \"./IrisGridCopyHandler.js\";\nimport FilterInputField from \"./FilterInputField.js\";\nimport { CopyCellKeyHandler, ClearFilterKeyHandler, CopyKeyHandler, ReverseKeyHandler } from \"./key-handlers/index.js\";\nimport { IrisGridCellOverflowMouseHandler, IrisGridColumnSelectMouseHandler, IrisGridColumnTooltipMouseHandler, IrisGridContextMenuHandler, IrisGridCopyCellMouseHandler, IrisGridDataSelectMouseHandler, IrisGridFilterMouseHandler, IrisGridRowTreeMouseHandler, IrisGridSortMouseHandler, IrisGridTokenMouseHandler, PendingMouseHandler } from \"./mousehandlers/index.js\";\nimport ToastBottomBar from \"./ToastBottomBar.js\";\nimport IrisGridMetricCalculator from \"./IrisGridMetricCalculator.js\";\nimport IrisGridModelUpdater from \"./IrisGridModelUpdater.js\";\nimport IrisGridRenderer from \"./IrisGridRenderer.js\";\nimport { createDefaultIrisGridTheme } from \"./IrisGridTheme.js\";\nimport ColumnStatistics from \"./ColumnStatistics.js\";\nimport \"./IrisGrid.css\";\nimport AdvancedFilterCreator from \"./AdvancedFilterCreator.js\";\nimport { Aggregations, AggregationEdit, AggregationUtils, ChartBuilder, CustomColumnBuilder, OptionType, RollupRows, TableCsvExporter, TableSaver, VisibilityOrderingBuilder, DownloadServiceWorkerUtils } from \"./sidebar/index.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport CrossColumnSearch from \"./CrossColumnSearch.js\";\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport { isPartitionedGridModel } from \"./PartitionedGridModel.js\";\nimport IrisGridPartitionSelector from \"./IrisGridPartitionSelector.js\";\nimport SelectDistinctBuilder from \"./sidebar/SelectDistinctBuilder.js\";\nimport AdvancedSettingsType from \"./sidebar/AdvancedSettingsType.js\";\nimport AdvancedSettingsMenu from \"./sidebar/AdvancedSettingsMenu.js\";\nimport SHORTCUTS from \"./IrisGridShortcuts.js\";\nimport ConditionalFormattingMenu from \"./sidebar/conditional-formatting/ConditionalFormattingMenu.js\";\nimport ConditionalFormatEditor from \"./sidebar/conditional-formatting/ConditionalFormatEditor.js\";\nimport IrisGridCellOverflowModal from \"./IrisGridCellOverflowModal.js\";\nimport GotoRow from \"./GotoRow.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport { IrisGridThemeContext } from \"./IrisGridThemeProvider.js\";\nimport { isMissingPartitionError } from \"./MissingPartitionError.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGrid');\nvar VIEWPORT_LOADING_DELAY = 500;\nvar UPDATE_DOWNLOAD_THROTTLE = 500;\nvar SET_FILTER_DEBOUNCE = 250;\nvar SEEK_ROW_DEBOUNCE = 250;\nvar SET_CONDITIONAL_FORMAT_DEBOUNCE = 250;\nvar DEFAULT_AGGREGATION_SETTINGS = Object.freeze({\n aggregations: EMPTY_ARRAY,\n showOnTop: false\n});\nvar UNFORMATTED_DATE_PATTERN = \"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z\";\nfunction isEmptyConfig(_ref) {\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = _ref;\n return advancedFilters.size === 0 && aggregationSettings.aggregations.length === 0 && customColumns.length === 0 && quickFilters.size === 0 && reverseType === TableUtils.REVERSE_TYPE.NONE && rollupConfig == null && searchFilter == null && selectDistinctColumns.length === 0 && sorts.length === 0;\n}\nclass IrisGrid extends Component {\n constructor(props) {\n var _model$layoutHints, _model$layoutHints$hi, _model$columns$0$name, _model$columns$;\n super(props);\n _defineProperty(this, \"grid\", void 0);\n _defineProperty(this, \"lastFocusedFilterBarColumn\", void 0);\n _defineProperty(this, \"lastLoadedConfig\", void 0);\n _defineProperty(this, \"tooltip\", void 0);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"globalColumnFormats\", void 0);\n _defineProperty(this, \"dateTimeFormatterOptions\", void 0);\n _defineProperty(this, \"decimalFormatOptions\", void 0);\n _defineProperty(this, \"integerFormatOptions\", void 0);\n _defineProperty(this, \"truncateNumbersWithPound\", void 0);\n _defineProperty(this, \"showEmptyStrings\", void 0);\n _defineProperty(this, \"showNullStrings\", void 0);\n _defineProperty(this, \"loadingScrimStartTime\", void 0);\n _defineProperty(this, \"loadingScrimFinishTime\", void 0);\n _defineProperty(this, \"animationFrame\", void 0);\n _defineProperty(this, \"loadingTimer\", void 0);\n _defineProperty(this, \"tableSaver\", void 0);\n _defineProperty(this, \"crossColumnRef\", void 0);\n _defineProperty(this, \"isAnimating\", void 0);\n _defineProperty(this, \"filterInputRef\", void 0);\n _defineProperty(this, \"gotoRowRef\", void 0);\n _defineProperty(this, \"isCopying\", void 0);\n _defineProperty(this, \"toggleFilterBarAction\", void 0);\n _defineProperty(this, \"toggleSearchBarAction\", void 0);\n _defineProperty(this, \"toggleGotoRowAction\", void 0);\n _defineProperty(this, \"discardAction\", void 0);\n _defineProperty(this, \"commitAction\", void 0);\n _defineProperty(this, \"contextActions\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"keyHandlers\", void 0);\n _defineProperty(this, \"mouseHandlers\", void 0);\n _defineProperty(this, \"getAdvancedMenuOpenedHandler\", memoize(column => this.handleAdvancedMenuOpened.bind(this, column), {\n max: 100\n }));\n _defineProperty(this, \"getCachedAdvancedFilterMenuActions\", memoize((model, column, advancedFilterOptions, sortDirection, formatter) => /*#__PURE__*/_jsx(AdvancedFilterCreator, {\n model: model,\n column: column,\n onFilterChange: this.handleAdvancedFilterChange,\n onSortChange: this.handleAdvancedFilterSortChange,\n onDone: this.handleAdvancedFilterDone,\n options: advancedFilterOptions,\n sortDirection: sortDirection,\n formatter: formatter,\n tableUtils: this.tableUtils\n }), {\n max: 50\n }));\n _defineProperty(this, \"getCachedOptionItems\", memoize((isChartBuilderAvailable, isCustomColumnsAvailable, isFormatColumnsAvailable, isRollupAvailable, isTotalsAvailable, isSelectDistinctAvailable, isExportAvailable, toggleFilterBarAction, toggleSearchBarAction, toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, canToggleSearch, showGotoRow, hasAdvancedSettings) => {\n var optionItems = [];\n if (isChartBuilderAvailable) {\n optionItems.push({\n type: OptionType.CHART_BUILDER,\n title: 'Chart Builder',\n icon: dhGraphLineUp\n });\n }\n optionItems.push({\n type: OptionType.VISIBILITY_ORDERING_BUILDER,\n title: 'Organize Columns',\n icon: dhEye\n });\n if (isFormatColumnsAvailable) {\n optionItems.push({\n type: OptionType.CONDITIONAL_FORMATTING,\n title: 'Conditional Formatting',\n icon: vsEdit\n });\n }\n if (isCustomColumnsAvailable) {\n optionItems.push({\n type: OptionType.CUSTOM_COLUMN_BUILDER,\n title: 'Custom Columns',\n icon: vsSplitHorizontal\n });\n }\n if (isRollupAvailable) {\n optionItems.push({\n type: OptionType.ROLLUP_ROWS,\n title: 'Rollup Rows',\n icon: dhTriangleDownSquare\n });\n }\n if (isTotalsAvailable) {\n optionItems.push({\n type: OptionType.AGGREGATIONS,\n title: 'Aggregate Columns',\n icon: vsSymbolOperator\n });\n }\n if (isSelectDistinctAvailable) {\n optionItems.push({\n type: OptionType.SELECT_DISTINCT,\n title: 'Select Distinct Values',\n icon: vsRuby\n });\n }\n if (isExportAvailable && canDownloadCsv) {\n optionItems.push({\n type: OptionType.TABLE_EXPORTER,\n title: 'Download CSV',\n icon: vsCloudDownload\n });\n }\n if (hasAdvancedSettings) {\n optionItems.push({\n type: OptionType.ADVANCED_SETTINGS,\n title: 'Advanced Settings',\n icon: vsTools\n });\n }\n optionItems.push({\n type: OptionType.QUICK_FILTERS,\n title: 'Quick Filters',\n subtitle: toggleFilterBarAction.shortcut.getDisplayText(),\n icon: vsFilter,\n isOn: isFilterBarShown,\n onChange: toggleFilterBarAction.action\n });\n if (canToggleSearch) {\n optionItems.push({\n type: OptionType.SEARCH_BAR,\n title: 'Search Bar',\n subtitle: toggleSearchBarAction.shortcut.getDisplayText(),\n icon: vsSearch,\n isOn: showSearchBar,\n onChange: toggleSearchBarAction.action\n });\n }\n optionItems.push({\n type: OptionType.GOTO,\n title: 'Go to',\n subtitle: toggleGotoRowAction.shortcut.getDisplayText(),\n icon: vsReply,\n isOn: showGotoRow,\n onChange: toggleGotoRowAction.action\n });\n return Object.freeze(optionItems);\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedHiddenColumns\", memoize((metricCalculator, userColumnWidths) => IrisGridUtils.getHiddenColumns(new Map([...metricCalculator.initialColumnWidths, ...userColumnWidths])), {\n max: 1\n }));\n _defineProperty(this, \"getAggregationMap\", memoize((columns, aggregations) => {\n var aggregationMap = {};\n aggregations.forEach(_ref2 => {\n var {\n operation,\n selected,\n invert\n } = _ref2;\n aggregationMap[operation] = AggregationUtils.getOperationColumnNames(columns, operation, selected, invert);\n });\n return aggregationMap;\n }));\n _defineProperty(this, \"getOperationMap\", memoize((columns, aggregations) => {\n var operationMap = {};\n aggregations.filter(a => !AggregationUtils.isRollupOperation(a.operation)).forEach(_ref3 => {\n var {\n operation,\n selected,\n invert\n } = _ref3;\n AggregationUtils.getOperationColumnNames(columns, operation, selected, invert).forEach(name => {\n var _operationMap$name;\n var newOperations = [...((_operationMap$name = operationMap[name]) !== null && _operationMap$name !== void 0 ? _operationMap$name : []), operation];\n operationMap[name] = Object.freeze(newOperations);\n });\n });\n return operationMap;\n }));\n _defineProperty(this, \"getOperationOrder\", memoize(aggregations => aggregations.map(a => a.operation).filter(o => !AggregationUtils.isRollupOperation(o))));\n _defineProperty(this, \"getCachedFormatColumns\", memoize((dh, columns, rules) => getFormatColumns(dh, columns, rules)));\n _defineProperty(this, \"getCachedPreviewFormatColumns\", memoize((dh, columns, rulesParam, preview, editIndex) => {\n log.debug('getCachedPreviewFormatColumns', rulesParam, preview, editIndex);\n if (preview !== undefined && editIndex !== undefined) {\n var rules = [...rulesParam];\n rules[editIndex] = preview;\n return this.getCachedFormatColumns(dh, columns, rules);\n }\n return this.getCachedFormatColumns(dh, columns, rulesParam);\n }));\n _defineProperty(this, \"getModelRollupConfig\", memoize((originalColumns, config, aggregationSettings) => IrisGridUtils.getModelRollupConfig(originalColumns, config, aggregationSettings)));\n _defineProperty(this, \"getModelTotalsConfig\", memoize((columns, config, aggregationSettings) => {\n var _config$columns$lengt, _config$columns;\n if (((_config$columns$lengt = config === null || config === void 0 ? void 0 : (_config$columns = config.columns) === null || _config$columns === void 0 ? void 0 : _config$columns.length) !== null && _config$columns$lengt !== void 0 ? _config$columns$lengt : 0) > 0) {\n // If we've got rollups, then aggregations are applied as part of that...\n return null;\n }\n\n // Filter out aggregations without any columns actually selected\n var aggregations = aggregationSettings.aggregations.filter(agg => agg.selected.length > 0 || agg.invert);\n if (aggregations.length === 0) {\n // We don't actually have any aggregations set, don't bother\n return null;\n }\n var operationMap = this.getOperationMap(columns, aggregations);\n var operationOrder = this.getOperationOrder(aggregations);\n return {\n operationMap,\n operationOrder,\n showOnTop: aggregationSettings.showOnTop,\n defaultOperation: AggregationOperation.SKIP\n };\n }));\n _defineProperty(this, \"getCachedStateOverride\", memoize((hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverseType, rollupConfig, isMenuShown) => ({\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown\n }), {\n max: 1\n }));\n _defineProperty(this, \"getCachedFilter\", memoize((customFilters, quickFilters, advancedFilters, searchFilter) => [...(customFilters !== null && customFilters !== void 0 ? customFilters : []), ...IrisGridUtils.getFiltersFromFilterMap(quickFilters), ...IrisGridUtils.getFiltersFromFilterMap(advancedFilters), ...(searchFilter !== undefined ? [searchFilter] : [])], {\n max: 1\n }));\n _defineProperty(this, \"getCachedTheme\", memoize((contextTheme, theme, isEditable, floatingRowCount) => {\n var _theme$rowFooterWidth;\n // If a theme is available via context, use that as the base theme.\n // If iris-grid is standalone without a context, initialize a default theme.\n var defaultTheme = contextTheme !== null && contextTheme !== void 0 ? contextTheme : createDefaultIrisGridTheme();\n\n // We only show the row footers when we have floating rows for aggregations\n var rowFooterWidth = floatingRowCount > 0 ? (_theme$rowFooterWidth = theme === null || theme === void 0 ? void 0 : theme.rowFooterWidth) !== null && _theme$rowFooterWidth !== void 0 ? _theme$rowFooterWidth : defaultTheme.rowFooterWidth : 0;\n return _objectSpread(_objectSpread(_objectSpread({}, defaultTheme), theme), {}, {\n autoSelectRow: !isEditable,\n rowFooterWidth\n });\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedKeyHandlers\", memoize(keyHandlers => [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)));\n _defineProperty(this, \"getCachedMouseHandlers\", memoize(mouseHandlers => [...mouseHandlers, ...this.mouseHandlers]));\n _defineProperty(this, \"getCachedRenderer\", memoize(rendererProp => rendererProp !== null && rendererProp !== void 0 ? rendererProp : new IrisGridRenderer(), {\n max: 1\n }));\n _defineProperty(this, \"getAlwaysFetchColumns\", memoize((alwaysFetchColumns, columns, movedColumns, floatingLeftColumnCount, floatingRightColumnCount, draggingRange) => {\n var floatingColumns = [];\n for (var i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(i, movedColumns)].name);\n }\n for (var _i = 0; _i < floatingRightColumnCount; _i += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(columns.length - 1 - _i, movedColumns)].name);\n }\n if (draggingRange) {\n for (var _i2 = draggingRange[0]; _i2 <= draggingRange[1]; _i2 += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(_i2, movedColumns)].name);\n }\n }\n var columnSet = new Set([...alwaysFetchColumns, ...floatingColumns]);\n return Object.freeze([...columnSet]);\n }));\n _defineProperty(this, \"updateSearchFilter\", debounce((searchValue, selectedSearchColumns, columns, invertSearchColumns) => {\n var {\n model\n } = this.props;\n var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, selectedSearchColumns, columns, invertSearchColumns);\n this.setState({\n searchFilter\n });\n }, SET_FILTER_DEBOUNCE));\n _defineProperty(this, \"showViewportLoading\", throttle(() => {\n var {\n model\n } = this.props;\n var {\n loadingSpinnerShown\n } = this.state;\n if (model.isViewportPending && !loadingSpinnerShown) {\n // We only want to show the viewport loading if the viewport is still loading\n // and we're not already showing a loader for something else\n this.startLoading('Waiting for viewport...', {\n loadingCancelShown: false,\n loadingBlocksGrid: false\n });\n }\n }, VIEWPORT_LOADING_DELAY, {\n leading: false,\n trailing: true\n }));\n _defineProperty(this, \"handleConditionalFormatEditorUpdate\", debounce(conditionalFormatPreview => {\n this.setState({\n conditionalFormatPreview\n });\n }, SET_CONDITIONAL_FORMAT_DEBOUNCE));\n _defineProperty(this, \"handleDownloadProgressUpdate\", throttle((tableDownloadProgress, tableDownloadEstimatedTime) => {\n var {\n tableDownloadStatus\n } = this.state;\n if (tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING) {\n this.setState({\n tableDownloadProgress,\n tableDownloadEstimatedTime\n });\n }\n }, UPDATE_DOWNLOAD_THROTTLE));\n _defineProperty(this, \"getOverflowButtonTooltip\", memoize(overflowButtonTooltipProps => {\n if (overflowButtonTooltipProps == null) {\n return null;\n }\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, overflowButtonTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'left',\n modifiers: {\n flip: {\n behavior: ['left', 'right']\n }\n }\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: \"View full contents\"\n }, Date.now())\n });\n }));\n _defineProperty(this, \"getExpandCellTooltip\", memoize(expandCellTooltipProps => {\n if (expandCellTooltipProps == null) {\n return null;\n }\n var {\n expandTooltipDisplayValue\n } = this.state;\n var {\n model\n } = this.props;\n var isExpandAllAvailable = isExpandableGridModel(model) && model.isExpandAllAvailable;\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, expandCellTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'bottom-start'\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: /*#__PURE__*/_jsxs(\"div\", {\n style: {\n textAlign: 'left'\n },\n children: [\"Click to \", expandTooltipDisplayValue, \" row\", isExpandAllAvailable && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"br\", {}), ContextActionUtils.isMacPlatform() ? '⌘' : 'Ctrl+', \"Click to expand row and all children\"]\n })]\n })\n }, Date.now())\n });\n }));\n _defineProperty(this, \"getLinkHoverTooltip\", memoize(linkHoverTooltipProps => {\n if (linkHoverTooltipProps == null) {\n return null;\n }\n var {\n linkHoverDisplayValue\n } = this.state;\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, linkHoverTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'bottom'\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"link-hover-tooltip\",\n children: [linkHoverDisplayValue, \" - Click once to follow.\", /*#__PURE__*/_jsx(\"br\", {}), \"Click and hold to select this cell.\"]\n })\n })\n });\n }));\n _defineProperty(this, \"handleGotoValueChanged\", input => {\n this.setState({\n gotoValue: input,\n gotoValueManuallyChanged: true\n });\n this.debouncedSeekRow(input);\n });\n _defineProperty(this, \"debouncedSeekRow\", debounce(input => {\n this.seekRow(input);\n }, SEEK_ROW_DEBOUNCE));\n this.handleAdvancedFilterChange = this.handleAdvancedFilterChange.bind(this);\n this.handleAdvancedFilterSortChange = this.handleAdvancedFilterSortChange.bind(this);\n this.handleAdvancedFilterDone = this.handleAdvancedFilterDone.bind(this);\n this.handleAdvancedMenuOpened = this.handleAdvancedMenuOpened.bind(this);\n this.handleGotoRowOpened = this.handleGotoRowOpened.bind(this);\n this.handleGotoRowClosed = this.handleGotoRowClosed.bind(this);\n this.handleAdvancedMenuClosed = this.handleAdvancedMenuClosed.bind(this);\n this.handleAggregationChange = this.handleAggregationChange.bind(this);\n this.handleAggregationsChange = this.handleAggregationsChange.bind(this);\n this.handleAggregationEdit = this.handleAggregationEdit.bind(this);\n this.handleAnimationLoop = this.handleAnimationLoop.bind(this);\n this.handleAnimationStart = this.handleAnimationStart.bind(this);\n this.handleAnimationEnd = this.handleAnimationEnd.bind(this);\n this.handleChartChange = this.handleChartChange.bind(this);\n this.handleChartCreate = this.handleChartCreate.bind(this);\n this.handleGridError = this.handleGridError.bind(this);\n this.handleFilterBarChange = this.handleFilterBarChange.bind(this);\n this.handleFilterBarDone = this.handleFilterBarDone.bind(this);\n this.handleFilterBarTab = this.handleFilterBarTab.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleMenu = this.handleMenu.bind(this);\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleMenuSelect = this.handleMenuSelect.bind(this);\n this.handleMenuBack = this.handleMenuBack.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleSelectionChanged = this.handleSelectionChanged.bind(this);\n this.handleMovedColumnsChanged = this.handleMovedColumnsChanged.bind(this);\n this.handleHeaderGroupsChanged = this.handleHeaderGroupsChanged.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleTooltipRef = this.handleTooltipRef.bind(this);\n this.handleViewChanged = this.handleViewChanged.bind(this);\n this.handleFormatSelection = this.handleFormatSelection.bind(this);\n this.handleConditionalFormatCreate = this.handleConditionalFormatCreate.bind(this);\n this.handleConditionalFormatEdit = this.handleConditionalFormatEdit.bind(this);\n this.handleConditionalFormatsChange = this.handleConditionalFormatsChange.bind(this);\n this.handleConditionalFormatEditorSave = this.handleConditionalFormatEditorSave.bind(this);\n this.handleConditionalFormatEditorCancel = this.handleConditionalFormatEditorCancel.bind(this);\n this.handleUpdateCustomColumns = this.handleUpdateCustomColumns.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(this);\n this.handleSelectDistinctChanged = this.handleSelectDistinctChanged.bind(this);\n this.handlePendingDataUpdated = this.handlePendingDataUpdated.bind(this);\n this.handleViewportUpdated = this.handleViewportUpdated.bind(this);\n this.handlePendingCommitClicked = this.handlePendingCommitClicked.bind(this);\n this.handlePendingDiscardClicked = this.handlePendingDiscardClicked.bind(this);\n this.handleGotoRowSelectedRowNumberSubmit = this.handleGotoRowSelectedRowNumberSubmit.bind(this);\n this.focusRowInGrid = this.focusRowInGrid.bind(this);\n this.handleDownloadTable = this.handleDownloadTable.bind(this);\n this.handleDownloadTableStart = this.handleDownloadTableStart.bind(this);\n this.handleCancelDownloadTable = this.handleCancelDownloadTable.bind(this);\n this.handleDownloadCanceled = this.handleDownloadCanceled.bind(this);\n this.handleDownloadCompleted = this.handleDownloadCompleted.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handleColumnVisibilityChanged = this.handleColumnVisibilityChanged.bind(this);\n this.handleColumnVisibilityReset = this.handleColumnVisibilityReset.bind(this);\n this.handleCrossColumnSearch = this.handleCrossColumnSearch.bind(this);\n this.handleRollupChange = this.handleRollupChange.bind(this);\n this.handleOverflowClose = this.handleOverflowClose.bind(this);\n this.getColumnBoundingRect = this.getColumnBoundingRect.bind(this);\n this.handleGotoRowSelectedRowNumberChanged = this.handleGotoRowSelectedRowNumberChanged.bind(this);\n this.handleGotoValueSelectedColumnNameChanged = this.handleGotoValueSelectedColumnNameChanged.bind(this);\n this.handleGotoValueSelectedFilterChanged = this.handleGotoValueSelectedFilterChanged.bind(this);\n this.handleGotoValueChanged = this.handleGotoValueChanged.bind(this);\n this.handleGotoValueSubmitted = this.handleGotoValueSubmitted.bind(this);\n this.handleViewportUpdated = this.handleViewportUpdated.bind(this);\n this.makeQuickFilter = this.makeQuickFilter.bind(this);\n this.grid = null;\n this.lastLoadedConfig = null;\n this.pending = new Pending();\n this.globalColumnFormats = EMPTY_ARRAY;\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.truncateNumbersWithPound = false;\n this.showEmptyStrings = true;\n this.showNullStrings = true;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n this.tableSaver = null;\n this.crossColumnRef = /*#__PURE__*/React.createRef();\n this.isAnimating = false;\n this.filterInputRef = /*#__PURE__*/React.createRef();\n this.gotoRowRef = /*#__PURE__*/React.createRef();\n this.isCopying = false;\n this.toggleFilterBarAction = {\n action: () => this.toggleFilterBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER\n };\n this.toggleSearchBarAction = {\n action: () => this.toggleSearchBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_SEARCH\n };\n this.toggleGotoRowAction = {\n action: () => this.toggleGotoRow(),\n shortcut: SHORTCUTS.TABLE.GOTO_ROW\n };\n this.discardAction = {\n action: () => {\n var {\n model\n } = this.props;\n if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0) {\n this.discardPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.DISCARD\n };\n this.commitAction = {\n action: () => {\n var {\n model\n } = this.props;\n if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0 && model.pendingDataErrors.size === 0) {\n this.commitPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.COMMIT\n };\n this.contextActions = [this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, this.discardAction, this.commitAction];\n var {\n aggregationSettings: _aggregationSettings,\n conditionalFormats,\n customColumnFormatMap,\n isFilterBarShown: _isFilterBarShown,\n isSelectingPartition,\n partitions,\n partitionConfig,\n model: _model,\n movedColumns: movedColumnsProp,\n movedRows: movedRowsProp,\n rollupConfig: _rollupConfig,\n userColumnWidths: _userColumnWidths,\n userRowHeights,\n showSearchBar: _showSearchBar,\n searchValue: _searchValue,\n selectedSearchColumns: _selectedSearchColumns,\n invertSearchColumns: _invertSearchColumns,\n advancedFilters: _advancedFilters,\n quickFilters: _quickFilters,\n selectDistinctColumns,\n pendingDataMap,\n canCopy,\n frozenColumns,\n columnHeaderGroups\n } = props;\n var {\n dh: _dh\n } = _model;\n var _keyHandlers = [new CopyCellKeyHandler(this), new ReverseKeyHandler(this), new ClearFilterKeyHandler(this)];\n var _mouseHandlers = [new IrisGridCellOverflowMouseHandler(this), new IrisGridRowTreeMouseHandler(this), new IrisGridTokenMouseHandler(this), new IrisGridColumnSelectMouseHandler(this), new IrisGridColumnTooltipMouseHandler(this), new IrisGridSortMouseHandler(this), new IrisGridFilterMouseHandler(this), new IrisGridContextMenuHandler(this, _dh), new IrisGridDataSelectMouseHandler(this), new PendingMouseHandler(this)];\n if (canCopy) {\n _keyHandlers.push(new CopyKeyHandler(this));\n _mouseHandlers.push(new IrisGridCopyCellMouseHandler(this));\n }\n var _movedColumns = movedColumnsProp.length > 0 ? movedColumnsProp : _model.initialMovedColumns;\n var movedRows = movedRowsProp.length > 0 ? movedRowsProp : _model.initialMovedRows;\n var _metricCalculator = new IrisGridMetricCalculator({\n userColumnWidths: new Map(_userColumnWidths),\n userRowHeights: new Map(userRowHeights),\n movedColumns: _movedColumns,\n initialColumnWidths: new Map(_model === null || _model === void 0 ? void 0 : (_model$layoutHints = _model.layoutHints) === null || _model$layoutHints === void 0 ? void 0 : (_model$layoutHints$hi = _model$layoutHints.hiddenColumns) === null || _model$layoutHints$hi === void 0 ? void 0 : _model$layoutHints$hi.map(name => [_model.getColumnIndexByName(name), 0]))\n });\n var searchColumns = _selectedSearchColumns !== null && _selectedSearchColumns !== void 0 ? _selectedSearchColumns : [];\n var _searchFilter = CrossColumnSearch.createSearchFilter(_dh, _searchValue, searchColumns, _model.columns, _invertSearchColumns);\n this.tableUtils = new TableUtils(_dh);\n this.mouseHandlers = _mouseHandlers;\n this.keyHandlers = _keyHandlers;\n this.state = {\n isFilterBarShown: _isFilterBarShown,\n isSelectingPartition,\n focusedFilterBarColumn: null,\n metricCalculator: _metricCalculator,\n metrics: undefined,\n partitionConfig: partitionConfig !== null && partitionConfig !== void 0 ? partitionConfig : partitions && partitions.length ? {\n partitions,\n mode: 'partition'\n } : undefined,\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: _quickFilters ? new Map(_quickFilters) : new Map(),\n advancedFilters: new Map(_advancedFilters),\n shownAdvancedFilter: null,\n hoverAdvancedFilter: null,\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: [],\n selectDistinctColumns,\n // selected range in table\n selectedRanges: [],\n // Current ongoing copy operation\n copyOperation: null,\n // The filter that is currently being applied. Reset after update is received\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n loadingCancelShown: false,\n loadingBlocksGrid: false,\n movedColumns: _movedColumns,\n movedRows,\n shownColumnTooltip: null,\n formatter: new Formatter(_dh),\n isMenuShown: false,\n customColumnFormatMap: new Map(customColumnFormatMap),\n conditionalFormats,\n conditionalFormatEditIndex: null,\n conditionalFormatPreview: undefined,\n // Column user is hovering over for selection\n hoverSelectColumn: null,\n isTableDownloading: false,\n isReady: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: 0,\n showSearchBar: _showSearchBar,\n searchFilter: _searchFilter,\n searchValue: _searchValue,\n selectedSearchColumns: searchColumns,\n invertSearchColumns: _invertSearchColumns,\n rollupConfig: _rollupConfig,\n rollupSelectedColumns: [],\n aggregationSettings: _aggregationSettings,\n selectedAggregation: null,\n openOptions: [],\n pendingRowCount: 0,\n pendingDataMap: pendingDataMap !== null && pendingDataMap !== void 0 ? pendingDataMap : new Map(),\n pendingDataErrors: new Map(),\n pendingSavePromise: null,\n pendingSaveError: null,\n toastMessage: null,\n frozenColumns,\n showOverflowModal: false,\n overflowText: '',\n overflowButtonTooltipProps: null,\n expandCellTooltipProps: null,\n expandTooltipDisplayValue: 'expand',\n linkHoverTooltipProps: null,\n linkHoverDisplayValue: '',\n isGotoShown: false,\n gotoRow: '',\n gotoRowError: '',\n gotoValueError: '',\n gotoValueSelectedColumnName: (_model$columns$0$name = (_model$columns$ = _model.columns[0]) === null || _model$columns$ === void 0 ? void 0 : _model$columns$.name) !== null && _model$columns$0$name !== void 0 ? _model$columns$0$name : '',\n gotoValueSelectedFilter: FilterType.eqIgnoreCase,\n gotoValue: '',\n gotoValueManuallyChanged: false,\n columnHeaderGroups: columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : _model.initialColumnHeaderGroups\n };\n }\n componentDidMount() {\n var {\n model\n } = this.props;\n this.initState();\n this.startListening(model);\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n inputFilters,\n isSelectingColumn,\n settings,\n model,\n customFilters,\n sorts\n } = this.props;\n if (model !== prevProps.model) {\n this.stopListening(prevProps.model);\n this.startListening(model);\n }\n var changedInputFilters = inputFilters !== prevProps.inputFilters ? inputFilters.filter(inputFilter => !prevProps.inputFilters.includes(inputFilter)) : [];\n if (changedInputFilters.length > 0) {\n var _advancedSettings$get;\n var {\n advancedSettings\n } = this.props;\n var replaceExistingFilters = (_advancedSettings$get = advancedSettings.get(AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get !== void 0 ? _advancedSettings$get : false;\n if (replaceExistingFilters) {\n this.clearGridInputField();\n this.clearCrossColumSearch();\n }\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.applyInputFilters(changedInputFilters, replaceExistingFilters);\n }\n if (isSelectingColumn !== prevProps.isSelectingColumn) {\n this.resetColumnSelection();\n }\n if (settings !== prevProps.settings) {\n this.updateFormatterSettings(settings);\n }\n if (customFilters !== prevProps.customFilters) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n }\n if (sorts !== prevProps.sorts) {\n this.updateSorts(sorts);\n }\n var {\n loadingScrimStartTime,\n loadingScrimFinishTime\n } = this;\n if (loadingScrimStartTime != null && loadingScrimFinishTime != null) {\n window.requestAnimationFrame(() => {\n var now = Date.now();\n var currentTime = now - loadingScrimStartTime;\n var totalTime = loadingScrimFinishTime - loadingScrimStartTime;\n var loadingScrimProgress = Math.min(currentTime / totalTime, 1);\n if (loadingScrimFinishTime < now) {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n }\n this.setState(state => {\n if (state.loadingScrimProgress == null) {\n log.debug2('Ignoring scrim update because loading cancelled.');\n return null;\n }\n return {\n loadingScrimProgress\n };\n });\n });\n }\n var {\n openOptions\n } = this.state;\n if (openOptions !== prevState.openOptions) {\n var isAggEditType = option => option.type === OptionType.AGGREGATION_EDIT;\n if (!openOptions.some(isAggEditType) && prevState.openOptions.some(isAggEditType)) {\n this.removeEmptyAggregations();\n }\n }\n this.sendStateChange();\n }\n componentWillUnmount() {\n var {\n model\n } = this.props;\n this.stopListening(model);\n this.pending.cancel();\n this.updateSearchFilter.cancel();\n if (this.loadingTimer) {\n clearTimeout(this.loadingTimer);\n }\n this.handleDownloadProgressUpdate.cancel();\n if (this.animationFrame !== undefined) {\n cancelAnimationFrame(this.animationFrame);\n }\n this.showViewportLoading.cancel();\n }\n\n // When the loading scrim started/when it should extend to the end of the screen.\n\n get gridWrapper() {\n var _this$grid$canvasWrap, _this$grid;\n return (_this$grid$canvasWrap = (_this$grid = this.grid) === null || _this$grid === void 0 ? void 0 : _this$grid.canvasWrapper.current) !== null && _this$grid$canvasWrap !== void 0 ? _this$grid$canvasWrap : null;\n }\n\n /**\n * Builds formatColumns array based on the provided formatting rules with optional preview\n * @param columns Array of columns\n * @param rulesParam Array of formatting rules\n * @param preview Optional temporary formatting rule for previewing live changes\n * @param editIndex Index in the rulesParam array to replace with the preview, null if preview not applicable\n * @returns Format columns array\n */\n\n getKeyHandlers() {\n var {\n keyHandlers\n } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n get renderer() {\n var {\n renderer\n } = this.props;\n return this.getCachedRenderer(renderer);\n }\n getMouseHandlers() {\n var {\n mouseHandlers\n } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n getValueForCell(columnIndex, rowIndex) {\n var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n model\n } = this.props;\n var {\n dh\n } = model;\n var modelColumn = this.getModelColumn(columnIndex);\n var modelRow = this.getModelRow(rowIndex);\n if (rawValue && modelColumn != null && modelRow != null) {\n var _value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isDateType(model.columns[modelColumn].type)) {\n // The returned value is just a long value, we should return the value formatted as a full date string\n var {\n formatter\n } = model;\n return dh.i18n.DateTimeFormat.format(UNFORMATTED_DATE_PATTERN, _value, dh.i18n.TimeZone.getTimeZone(formatter.timeZone));\n }\n return _value;\n }\n if (rawValue) {\n return null;\n }\n if (modelColumn != null && modelRow != null) {\n return model.textForCell(modelColumn, modelRow);\n }\n return '';\n }\n getModelColumn(columnIndex) {\n var {\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n modelColumns\n } = metrics;\n if (modelColumns == null) {\n return null;\n }\n return columnIndex != null ? modelColumns.get(columnIndex) : null;\n }\n getModelRow(rowIndex) {\n var {\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n modelRows\n } = metrics;\n if (modelRows == null) {\n return null;\n }\n return rowIndex != null ? modelRows.get(rowIndex) : null;\n }\n getTheme() {\n var _ref4;\n var {\n model,\n theme\n } = this.props;\n return this.getCachedTheme(this.context, theme, (_ref4 = isEditableGridModel(model) && model.isEditable) !== null && _ref4 !== void 0 ? _ref4 : false, model.floatingTopRowCount + model.floatingBottomRowCount);\n }\n getVisibleColumn(modelIndex) {\n var {\n movedColumns\n } = this.state;\n return GridUtils.getVisibleIndex(modelIndex, movedColumns);\n }\n makeQuickFilter(column, text, timeZone) {\n try {\n return this.tableUtils.makeQuickFilter(column, text, timeZone);\n } catch (err) {\n log.error('Error creating quick filter', err);\n }\n return null;\n }\n\n /**\n * Applies the provided input filters as quick filters,\n * and clears any existing quickFilters or advancedFilters on that column\n * @param inputFilters Array of input filters to apply\n * @param replaceExisting If true, new filters will replace the existing ones, instead of merging\n */\n applyInputFilters(inputFilters) {\n var replaceExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n model\n } = this.props;\n var {\n advancedFilters,\n quickFilters\n } = this.state;\n var newAdvancedFilters = replaceExisting ? new Map() : new Map(advancedFilters);\n var newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);\n var isChanged = replaceExisting && advancedFilters.size > 0;\n inputFilters.forEach(_ref5 => {\n var {\n name,\n type,\n value\n } = _ref5;\n var modelIndex = model.columns.findIndex(_ref6 => {\n var {\n name: columnName,\n type: columnType\n } = _ref6;\n return columnName === name && columnType === type;\n });\n if (modelIndex >= 0) {\n isChanged = newAdvancedFilters.delete(modelIndex) || isChanged;\n isChanged = this.applyQuickFilter(modelIndex, value, newQuickFilters) || isChanged;\n } else {\n log.error('Unable to find column for inputFilter', name, type, value);\n }\n });\n if (isChanged) {\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n }\n\n /**\n * Applies a quick filter\n * @param modelIndex The index in the model of the column to set\n * @param value The string value to set to the quick filter\n * @param quickFilters The quick filters map\n * @returns True if the filters have changed because this quick filter was applied\n */\n applyQuickFilter(modelIndex, value, quickFilters) {\n var {\n model\n } = this.props;\n var {\n formatter\n } = model;\n var column = model.columns[modelIndex];\n if (value != null && \"\".concat(value).trim().length > 0) {\n var quickFilter = quickFilters.get(modelIndex);\n if (quickFilter != null) {\n var {\n text\n } = quickFilter;\n if (text === value) {\n log.debug2('Ignoring change to existing filter');\n return false;\n }\n }\n quickFilters.set(modelIndex, {\n text: value,\n filter: this.makeQuickFilter(column, value, formatter.timeZone)\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n setAdvancedFilterMap(advancedFilters) {\n this.setState({\n advancedFilters\n });\n }\n setAdvancedFilter(modelIndex, filter, options) {\n log.debug('Setting advanced filter', modelIndex, filter);\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref7 => {\n var {\n advancedFilters\n } = _ref7;\n var newAdvancedFilters = new Map(advancedFilters);\n if (filter == null) {\n newAdvancedFilters.delete(modelIndex);\n } else {\n newAdvancedFilters.set(modelIndex, {\n filter,\n options\n });\n }\n return {\n advancedFilters: newAdvancedFilters\n };\n });\n }\n\n /**\n * Sets a quick filter against the provided column\n * @param modelIndex The index in the model for the column this filter is applied to\n * @param filter A filter to apply to the column, or null if there was an error\n * @param text The original text the filter was created with\n */\n setQuickFilter(modelIndex, filter, text) {\n log.debug('Setting quick filter', modelIndex, filter, text);\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref8 => {\n var {\n quickFilters\n } = _ref8;\n var newQuickFilters = new Map(quickFilters);\n newQuickFilters.set(modelIndex, {\n filter,\n text\n });\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n\n /**\n * Set grid filters based on the filter map\n * @param filterMap Filter map\n */\n setFilterMap(filterMap) {\n var _advancedSettings$get2;\n log.debug('setFilterMap', filterMap);\n var {\n advancedSettings\n } = this.props;\n var clearFiltersOnLinkerFilterUpdate = (_advancedSettings$get2 = advancedSettings.get(AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get2 !== void 0 ? _advancedSettings$get2 : false;\n if (clearFiltersOnLinkerFilterUpdate) {\n this.clearAllFilters();\n }\n var {\n model\n } = this.props;\n filterMap.forEach((_ref9, columnName) => {\n var {\n columnType,\n filterList\n } = _ref9;\n var column = model.columns.find(c => c.name === columnName && c.type === columnType);\n if (column == null) {\n return;\n }\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var combinedText = IrisGridUtils.combineFiltersFromList(columnType, filterList);\n if (combinedText.length === 0) {\n this.removeQuickFilter(columnIndex);\n } else {\n var {\n formatter\n } = model;\n this.setQuickFilter(columnIndex, this.makeQuickFilter(column, combinedText, formatter.timeZone), \"\".concat(combinedText));\n }\n });\n }\n removeColumnFilter(modelRange) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n var clearRange = Array.isArray(modelRange) ? modelRange : [modelRange, modelRange];\n this.setState(_ref10 => {\n var {\n advancedFilters,\n quickFilters\n } = _ref10;\n var newAdvancedFilters = advancedFilters ? new Map(advancedFilters) : new Map();\n var newQuickFilters = quickFilters ? new Map(quickFilters) : new Map();\n newAdvancedFilters.forEach((_, column) => {\n if (column >= clearRange[0] && column <= clearRange[1]) {\n newAdvancedFilters.delete(column);\n }\n });\n newQuickFilters.forEach((_, column) => {\n if (column >= clearRange[0] && column <= clearRange[1]) {\n newQuickFilters.delete(column);\n }\n });\n return {\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n };\n });\n }\n removeQuickFilter(modelColumn) {\n this.startLoading('Clearing Filter...', {\n resetRanges: true\n });\n this.setState(_ref11 => {\n var {\n quickFilters\n } = _ref11;\n var newQuickFilters = new Map(quickFilters);\n newQuickFilters.delete(modelColumn);\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n clearAllFilters() {\n log.debug('Clearing all filters');\n var {\n advancedFilters,\n quickFilters,\n searchFilter\n } = this.state;\n if (quickFilters.size === 0 && advancedFilters.size === 0 && searchFilter === null) {\n return;\n }\n\n // if there is an active quick filter input field, reset it as well\n this.clearGridInputField();\n this.startLoading('Clearing Filters...', {\n resetRanges: true\n });\n this.setState({\n quickFilters: new Map(),\n advancedFilters: new Map(),\n searchValue: '',\n searchFilter: undefined\n });\n }\n clearCrossColumSearch() {\n log.debug('Clearing cross-column search');\n this.setState({\n searchValue: '',\n searchFilter: undefined\n });\n }\n clearGridInputField() {\n if (this.filterInputRef.current != null) {\n this.filterInputRef.current.setValue('');\n }\n }\n\n /**\n * Rebuilds all the current filters. Necessary if something like the time zone has changed.\n */\n rebuildFilters() {\n log.debug('Rebuilding filters');\n var {\n model\n } = this.props;\n var {\n advancedFilters,\n quickFilters\n } = this.state;\n var {\n columns,\n formatter\n } = model;\n var newAdvancedFilters = new Map();\n var newQuickFilters = new Map();\n advancedFilters.forEach((value, key) => {\n var {\n options\n } = value;\n var column = columns[key];\n var filter = this.tableUtils.makeAdvancedFilter(column, options, formatter.timeZone);\n newAdvancedFilters.set(key, {\n options,\n filter\n });\n });\n quickFilters.forEach((value, key) => {\n var {\n text\n } = value;\n var column = columns[key];\n newQuickFilters.set(key, {\n text,\n filter: this.makeQuickFilter(column, text, formatter.timeZone)\n });\n });\n this.startLoading('Rebuilding filters...', {\n resetRanges: true\n });\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n setFilters(_ref12) {\n var {\n quickFilters,\n advancedFilters\n } = _ref12;\n this.setState({\n quickFilters,\n advancedFilters\n });\n }\n updateFormatterSettings(settings) {\n var _settings$defaultDeci, _settings$defaultInte, _settings$truncateNum, _settings$showEmptySt, _settings$showNullStr;\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var globalColumnFormats = FormatterUtils.getColumnFormats(settings);\n var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);\n var defaultDecimalFormatOptions = (_settings$defaultDeci = settings === null || settings === void 0 ? void 0 : settings.defaultDecimalFormatOptions) !== null && _settings$defaultDeci !== void 0 ? _settings$defaultDeci : {};\n var defaultIntegerFormatOptions = (_settings$defaultInte = settings === null || settings === void 0 ? void 0 : settings.defaultIntegerFormatOptions) !== null && _settings$defaultInte !== void 0 ? _settings$defaultInte : {};\n var truncateNumbersWithPound = (_settings$truncateNum = settings === null || settings === void 0 ? void 0 : settings.truncateNumbersWithPound) !== null && _settings$truncateNum !== void 0 ? _settings$truncateNum : false;\n var showEmptyStrings = (_settings$showEmptySt = settings === null || settings === void 0 ? void 0 : settings.showEmptyStrings) !== null && _settings$showEmptySt !== void 0 ? _settings$showEmptySt : true;\n var showNullStrings = (_settings$showNullStr = settings === null || settings === void 0 ? void 0 : settings.showNullStrings) !== null && _settings$showNullStr !== void 0 ? _settings$showNullStr : true;\n var isColumnFormatChanged = !deepEqual(this.globalColumnFormats, globalColumnFormats);\n var isDateFormattingChanged = !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions);\n var isDecimalFormattingChanged = !deepEqual(this.decimalFormatOptions, settings === null || settings === void 0 ? void 0 : settings.defaultDecimalFormatOptions);\n var isIntegerFormattingChanged = !deepEqual(this.integerFormatOptions, defaultIntegerFormatOptions);\n var isTruncateNumbersChanged = this.truncateNumbersWithPound !== truncateNumbersWithPound;\n var isShowEmptyStringsChanged = this.showEmptyStrings !== showEmptyStrings;\n var isShowNullStringsChanged = this.showNullStrings !== showNullStrings;\n if (isColumnFormatChanged || isDateFormattingChanged || isDecimalFormattingChanged || isIntegerFormattingChanged || isTruncateNumbersChanged || isShowEmptyStringsChanged || isShowNullStringsChanged) {\n this.globalColumnFormats = globalColumnFormats;\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.showEmptyStrings = showEmptyStrings;\n this.showNullStrings = showNullStrings;\n this.updateFormatter({}, forceUpdate);\n if (isDateFormattingChanged && forceUpdate) {\n this.rebuildFilters();\n }\n }\n }\n updateFormatter(updatedFormats) {\n var _this$globalColumnFor;\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var {\n customColumnFormatMap\n } = this.state;\n var {\n model\n } = this.props;\n var update = _objectSpread({\n customColumnFormatMap\n }, updatedFormats);\n var mergedColumnFormats = [...((_this$globalColumnFor = this.globalColumnFormats) !== null && _this$globalColumnFor !== void 0 ? _this$globalColumnFor : []), ...update.customColumnFormatMap.values()];\n var formatter = new Formatter(model.dh, mergedColumnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions, this.truncateNumbersWithPound, this.showEmptyStrings, this.showNullStrings);\n log.debug('updateFormatter', this.globalColumnFormats, mergedColumnFormats);\n this.setState(_objectSpread(_objectSpread({}, update), {}, {\n formatter\n }), () => {\n if (forceUpdate && this.grid) {\n this.grid.forceUpdate();\n }\n });\n }\n initFormatter() {\n var {\n settings\n } = this.props;\n this.updateFormatterSettings(settings);\n }\n initState() {\n var {\n model\n } = this.props;\n try {\n if (isPartitionedGridModel(model) && model.isPartitionRequired) {\n this.loadPartitionsTable(model);\n } else {\n this.loadTableState();\n }\n } catch (error) {\n this.handleTableLoadError(error);\n }\n }\n loadTableState() {\n var {\n applyInputFiltersOnInit,\n inputFilters,\n sorts,\n model,\n reverseType,\n customColumns,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns\n } = this.props;\n var searchColumns = selectedSearchColumns !== null && selectedSearchColumns !== void 0 ? selectedSearchColumns : [];\n var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, searchColumns, model.columns, invertSearchColumns);\n if (applyInputFiltersOnInit) {\n // There may be more than one input filter on the same column with value === '' applied last\n // We don't want to skip it here, so only excluding the ones that were never applied (null)\n var inputFiltersWithValues = inputFilters.filter(inputFilter => inputFilter.value != null);\n this.applyInputFilters(inputFiltersWithValues);\n }\n this.setState({\n sorts,\n reverseType,\n customColumns,\n isReady: true,\n searchFilter\n });\n this.initFormatter();\n }\n loadPartitionsTable(model) {\n var _this = this;\n return _asyncToGenerator(function* () {\n try {\n var partitionConfig = yield _this.getInitialPartitionConfig(model);\n _this.setState({\n isSelectingPartition: true,\n partitionConfig\n }, _this.loadTableState);\n } catch (error) {\n if (!PromiseUtils.isCanceled(error)) {\n _this.handleTableLoadError(error);\n }\n }\n })();\n }\n\n /**\n * Gets the initial partition config for the currently set model.\n * Sorts the key table and gets the first key.\n * If the table is ticking, it will wait for the first tick.\n */\n getInitialPartitionConfig(model) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var {\n partitionConfig\n } = _this2.state;\n if (partitionConfig !== undefined) {\n // User already has a partition selected, just use that\n return partitionConfig;\n }\n var keyTable = yield _this2.pending.add(model.partitionKeysTable(), resolved => resolved.close());\n var {\n dh\n } = model;\n var sorts = keyTable.columns.map(column => column.sort().desc());\n keyTable.applySort(sorts);\n keyTable.setViewport(0, 0);\n return new Promise((resolve, reject) => {\n // We want to wait for the first UPDATED event instead of just getting viewport data here\n // It's possible that the key table does not have any rows of data yet, so just wait until it does have one\n keyTable.addEventListener(dh.Table.EVENT_UPDATED, event => {\n try {\n var {\n detail: _data\n } = event;\n if (_data.rows.length === 0) {\n // Table is empty, wait for the next updated event\n return;\n }\n var row = _data.rows[0];\n // Core JSAPI returns undefined for null table values, IrisGridPartitionSelector expects null\n // https://github.com/deephaven/deephaven-core/issues/5400\n var values = keyTable.columns.map(column => {\n var _row$get;\n return (_row$get = row.get(column)) !== null && _row$get !== void 0 ? _row$get : null;\n });\n var newPartition = {\n partitions: values,\n mode: 'partition'\n };\n keyTable.close();\n resolve(newPartition);\n } catch (e) {\n keyTable.close();\n reject(e);\n }\n });\n });\n })();\n }\n copyCell(columnIndex, rowIndex) {\n var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n canCopy\n } = this.props;\n if (canCopy) {\n var _value2 = String(this.getValueForCell(columnIndex, rowIndex, rawValue));\n copyToClipboard(_value2).catch(e => log.error('Unable to copy cell', e));\n } else {\n log.error('Attempted to copyCell for user without copy permission.');\n }\n }\n copyColumnHeader(columnIndex) {\n var columnDepth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (columnIndex === null) {\n return;\n }\n var {\n canCopy\n } = this.props;\n var {\n movedColumns\n } = this.state;\n if (canCopy) {\n var copyOperation = {\n columnIndex,\n columnDepth,\n movedColumns\n };\n this.setState({\n copyOperation\n });\n } else {\n log.error('Attempted copyColumnHeader for user without copy permission.');\n }\n }\n\n /**\n * Copy the provided ranges to the clipboard\n * @paramranges The ranges to copy\n * @param includeHeaders Include the headers or not\n * @param formatValues Whether to format values or not\n * @param error Error message if one occurred\n */\n copyRanges(ranges) {\n var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var formatValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var error = arguments.length > 3 ? arguments[3] : undefined;\n var {\n model,\n canCopy\n } = this.props;\n var {\n metricCalculator,\n movedColumns\n } = this.state;\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n if (canCopy) {\n var copyOperation = {\n ranges: GridRange.boundedRanges(ranges, model.columnCount, model.rowCount),\n includeHeaders,\n formatValues,\n movedColumns,\n userColumnWidths,\n error\n };\n this.setState({\n copyOperation\n });\n } else {\n log.error('Attempted copyRanges for user without copy permission.');\n }\n }\n startLoading(loadingText) {\n var {\n resetRanges = false,\n loadingCancelShown = true,\n loadingBlocksGrid = true\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.setState({\n loadingText,\n loadingCancelShown,\n loadingBlocksGrid\n });\n var theme = this.getTheme();\n if (resetRanges && this.grid) {\n this.grid.clearSelectedRanges();\n this.grid.setViewState({\n top: 0\n }, true);\n }\n if (this.loadingScrimStartTime == null) {\n var _this$gridWrapper$get, _this$gridWrapper;\n var {\n minScrimTransitionTime,\n maxScrimTransitionTime\n } = theme;\n assertNotNull(minScrimTransitionTime);\n assertNotNull(maxScrimTransitionTime);\n var height = (_this$gridWrapper$get = (_this$gridWrapper = this.gridWrapper) === null || _this$gridWrapper === void 0 ? void 0 : _this$gridWrapper.getBoundingClientRect().height) !== null && _this$gridWrapper$get !== void 0 ? _this$gridWrapper$get : 0;\n var scrimTransitionTime = Math.max(minScrimTransitionTime, Math.min(height / 2, maxScrimTransitionTime));\n this.loadingScrimStartTime = Date.now();\n this.loadingScrimFinishTime = this.loadingScrimStartTime + scrimTransitionTime;\n this.setState({\n loadingScrimProgress: 0\n });\n this.loadingTimer = setTimeout(() => {\n this.setState({\n loadingSpinnerShown: true\n });\n }, IrisGrid.loadingSpinnerDelay);\n }\n }\n stopLoading() {\n this.showViewportLoading.cancel();\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n this.setState({\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n loadingCancelShown: false\n });\n if (this.loadingTimer != null) {\n clearTimeout(this.loadingTimer);\n this.loadingTimer = undefined;\n }\n }\n\n /**\n * Rolls back the table state to the last known safe state, or if that's not available then clears all sorts/filters/custom columns.\n */\n rollback() {\n if (this.lastLoadedConfig) {\n log.debug('loading last loading config', this.lastLoadedConfig);\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = this.lastLoadedConfig;\n this.lastLoadedConfig = null;\n this.setState({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n });\n } else {\n log.debug('remove all sorts, filters, and custom columns');\n this.setState({\n advancedFilters: new Map(),\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n customColumns: [],\n quickFilters: new Map(),\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n rollupConfig: undefined,\n selectDistinctColumns: [],\n sorts: []\n });\n }\n }\n\n /**\n * Check if we can rollback the current state to a safe state.\n * @returns true if there's a previously known safe state or if some of the current state isn't empty.\n */\n canRollback() {\n return this.lastLoadedConfig != null || !isEmptyConfig(this.state);\n }\n startListening(model) {\n model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.addEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);\n model.addEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);\n model.addEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);\n model.addEventListener(IrisGridModel.EVENT.VIEWPORT_UPDATED, this.handleViewportUpdated);\n }\n stopListening(model) {\n model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.removeEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);\n model.removeEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);\n model.removeEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);\n model.removeEventListener(IrisGridModel.EVENT.VIEWPORT_UPDATED, this.handleViewportUpdated);\n }\n focus() {\n var _this$grid2;\n (_this$grid2 = this.grid) === null || _this$grid2 === void 0 ? void 0 : _this$grid2.focus();\n }\n focusFilterBar(column) {\n var {\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n var {\n columnCount\n } = model;\n var modelColumn = GridUtils.getModelIndex(column, movedColumns);\n if (column == null || column < 0 || columnCount <= column || !model.isFilterable(modelColumn)) {\n this.setState({\n focusedFilterBarColumn: null\n });\n return;\n }\n var {\n metricCalculator,\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n left,\n rightVisible,\n lastLeft\n } = metrics;\n if (column < left) {\n var _this$grid3;\n (_this$grid3 = this.grid) === null || _this$grid3 === void 0 ? void 0 : _this$grid3.setViewState({\n left: column\n }, true);\n } else if (rightVisible < column) {\n var _this$grid4, _this$grid5;\n var metricState = (_this$grid4 = this.grid) === null || _this$grid4 === void 0 ? void 0 : _this$grid4.getMetricState();\n assertNotNull(metricState);\n var newLeft = metricCalculator.getLastLeft(metricState, column, metricCalculator.getVisibleWidth(metricState));\n (_this$grid5 = this.grid) === null || _this$grid5 === void 0 ? void 0 : _this$grid5.setViewState({\n left: Math.min(newLeft, lastLeft),\n leftOffset: 0\n }, true);\n }\n this.lastFocusedFilterBarColumn = column;\n this.setState({\n focusedFilterBarColumn: column,\n isFilterBarShown: true\n });\n }\n hideColumnByVisibleIndex(columnVisibleIndex) {\n var _this$grid6;\n var {\n metricCalculator,\n movedColumns\n } = this.state;\n metricCalculator.setColumnWidth(GridUtils.getModelIndex(columnVisibleIndex, movedColumns), 0);\n (_this$grid6 = this.grid) === null || _this$grid6 === void 0 ? void 0 : _this$grid6.forceUpdate();\n }\n freezeColumnByColumnName(columnName) {\n var {\n frozenColumns,\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n log.debug2('freezing column', columnName);\n var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);\n allFrozenColumns.add(columnName);\n var modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n var newMovedColumns = GridUtils.moveItem(visibleIndex, allFrozenColumns.size - 1, movedColumns);\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns\n });\n }\n unFreezeColumnByColumnName(columnName) {\n var {\n frozenColumns,\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n log.debug2('unfreezing column', columnName);\n var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);\n allFrozenColumns.delete(columnName);\n var modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n // Move to after remaining frozen columns and front columns\n var newMovedColumns = GridUtils.moveItem(visibleIndex, allFrozenColumns.size + model.frontColumns.length, movedColumns);\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns\n });\n }\n handleColumnVisibilityChanged(modelIndexes, isVisible) {\n var _this$grid7;\n var {\n metricCalculator,\n metrics\n } = this.state;\n assertNotNull(metrics);\n if (isVisible) {\n modelIndexes.forEach(modelIndex => {\n var defaultWidth = metricCalculator.initialColumnWidths.get(modelIndex);\n var calculatedWidth = getOrThrow(metrics.calculatedColumnWidths, modelIndex);\n if (defaultWidth !== calculatedWidth) {\n metricCalculator.setColumnWidth(modelIndex, calculatedWidth);\n } else {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n (_this$grid7 = this.grid) === null || _this$grid7 === void 0 ? void 0 : _this$grid7.forceUpdate();\n }\n handleColumnVisibilityReset() {\n var _model$layoutHints$fr, _model$layoutHints2;\n var {\n metricCalculator,\n metrics\n } = this.state;\n var {\n model\n } = this.props;\n assertNotNull(metrics);\n for (var i = 0; i < metrics.columnCount; i += 1) {\n metricCalculator.resetColumnWidth(i);\n }\n this.handleMovedColumnsChanged(model.initialMovedColumns);\n this.handleHeaderGroupsChanged(model.initialColumnHeaderGroups);\n this.setState({\n frozenColumns: (_model$layoutHints$fr = (_model$layoutHints2 = model.layoutHints) === null || _model$layoutHints2 === void 0 ? void 0 : _model$layoutHints2.frozenColumns) !== null && _model$layoutHints$fr !== void 0 ? _model$layoutHints$fr : []\n });\n }\n handleCrossColumnSearch(searchValue, selectedSearchColumns, invertSearchColumns) {\n var {\n model\n } = this.props;\n this.startLoading('Searching...');\n this.updateSearchFilter(searchValue, selectedSearchColumns, model.columns, invertSearchColumns);\n this.setState({\n searchValue,\n selectedSearchColumns,\n invertSearchColumns\n });\n }\n handleAnimationLoop() {\n var _this$grid8;\n (_this$grid8 = this.grid) === null || _this$grid8 === void 0 ? void 0 : _this$grid8.updateCanvas();\n if (this.isAnimating) {\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n }\n handleAnimationStart() {\n log.debug2('handleAnimationStart');\n this.isAnimating = true;\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n handleAnimationEnd() {\n log.debug2('handleAnimationEnd');\n this.isAnimating = false;\n }\n handlePartitionChange(partitionConfig) {\n this.startLoading('Partitioning...');\n this.setState({\n partitionConfig\n });\n }\n handleTableLoadError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n var {\n onError\n } = this.props;\n onError(error);\n }\n handleViewportUpdated() {\n var {\n model\n } = this.props;\n var {\n loadingText,\n loadingSpinnerShown\n } = this.state;\n var loadingMessage = 'Waiting for viewport...';\n\n // pending and no timer already exists\n if (model.isViewportPending && !loadingSpinnerShown) {\n this.showViewportLoading();\n } else if (loadingText === loadingMessage && !model.isViewportPending) {\n // extra conditions because timeout might get cleared by update\n this.stopLoading();\n }\n }\n showAllColumns() {\n var _this$grid9;\n var {\n metricCalculator\n } = this.state;\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n var entries = [...userColumnWidths.entries()];\n for (var i = 0; i < entries.length; i += 1) {\n var [modelIndex, columnWidth] = entries[i];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n (_this$grid9 = this.grid) === null || _this$grid9 === void 0 ? void 0 : _this$grid9.forceUpdate();\n }\n toggleSort(columnIndex, addToExisting) {\n log.info('Toggling sort for column', columnIndex);\n var {\n model\n } = this.props;\n var modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n if (model.isColumnSortable(columnIndex)) {\n var {\n sorts: currentSorts\n } = this.state;\n var sorts = TableUtils.toggleSortForColumn(currentSorts, model.columns, modelColumn, addToExisting);\n this.updateSorts(sorts);\n } else {\n log.debug('Column type was not sortable', model.columns[columnIndex]);\n }\n }\n updateSorts(sorts) {\n var _this$grid10;\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid10 = this.grid) === null || _this$grid10 === void 0 ? void 0 : _this$grid10.forceUpdate();\n }\n sortColumn(modelColumn) {\n var _this$grid11;\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : TableUtils.sortDirection.none;\n var isAbs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n assertNotNull(modelColumn);\n var {\n model\n } = this.props;\n var sorts = TableUtils.sortColumn(model.sort, model.columns, modelColumn, direction, isAbs, addToExisting);\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid11 = this.grid) === null || _this$grid11 === void 0 ? void 0 : _this$grid11.forceUpdate();\n }\n reverse(reverseType) {\n var _this$grid12;\n this.startLoading('Reversing...');\n this.setState({\n reverseType\n });\n (_this$grid12 = this.grid) === null || _this$grid12 === void 0 ? void 0 : _this$grid12.forceUpdate();\n }\n isReversible() {\n var {\n model\n } = this.props;\n return model.isReversible;\n }\n toggleFilterBar() {\n var focusIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.lastFocusedFilterBarColumn;\n var {\n isFilterBarShown\n } = this.state;\n isFilterBarShown = !isFilterBarShown;\n this.setState({\n isFilterBarShown\n });\n if (isFilterBarShown) {\n if (focusIndex != null) {\n this.focusFilterBar(focusIndex);\n } else {\n var columnIndex = 0;\n var {\n model: _model2\n } = this.props;\n var {\n columnCount\n } = _model2;\n for (var i = 0; i < columnCount; i += 1) {\n var modelColumn = this.getModelColumn(i);\n if (modelColumn != null) {\n var _column = _model2.columns[modelColumn];\n if (_column != null && TableUtils.isTextType(_column.type)) {\n columnIndex = i;\n break;\n }\n }\n }\n this.focusFilterBar(columnIndex);\n }\n } else {\n var _this$grid13;\n (_this$grid13 = this.grid) === null || _this$grid13 === void 0 ? void 0 : _this$grid13.focus();\n }\n }\n isTableSearchAvailable() {\n var _model$layoutHints3, _dh$SearchDisplayMode, _dh$SearchDisplayMode2;\n var {\n model,\n canToggleSearch\n } = this.props;\n var {\n dh\n } = model;\n var searchDisplayMode = model === null || model === void 0 ? void 0 : (_model$layoutHints3 = model.layoutHints) === null || _model$layoutHints3 === void 0 ? void 0 : _model$layoutHints3.searchDisplayMode;\n if (searchDisplayMode === ((_dh$SearchDisplayMode = dh.SearchDisplayMode) === null || _dh$SearchDisplayMode === void 0 ? void 0 : _dh$SearchDisplayMode.SEARCH_DISPLAY_HIDE)) {\n return false;\n }\n if (searchDisplayMode === ((_dh$SearchDisplayMode2 = dh.SearchDisplayMode) === null || _dh$SearchDisplayMode2 === void 0 ? void 0 : _dh$SearchDisplayMode2.SEARCH_DISPLAY_SHOW)) {\n return true;\n }\n return canToggleSearch;\n }\n toggleSearchBar() {\n var {\n showSearchBar\n } = this.state;\n if (!this.isTableSearchAvailable()) {\n return;\n }\n var update = !showSearchBar;\n this.setState({\n showSearchBar: update\n }, () => {\n var _this$crossColumnRef;\n if (update && (_this$crossColumnRef = this.crossColumnRef) !== null && _this$crossColumnRef !== void 0 && _this$crossColumnRef.current) {\n var _this$crossColumnRef2;\n (_this$crossColumnRef2 = this.crossColumnRef) === null || _this$crossColumnRef2 === void 0 ? void 0 : _this$crossColumnRef2.current.focus();\n } else {\n var _this$grid14;\n (_this$grid14 = this.grid) === null || _this$grid14 === void 0 ? void 0 : _this$grid14.focus();\n }\n });\n }\n toggleGotoRow() {\n var _this$grid15, _this$grid16;\n var row = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var {\n isGotoShown\n } = this.state;\n if (row || value) {\n var _this$gotoRowRef$curr;\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoShown: true,\n gotoValue: value,\n gotoValueSelectedColumnName: columnName,\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n this.focusRowInGrid(row);\n (_this$gotoRowRef$curr = this.gotoRowRef.current) === null || _this$gotoRowRef$curr === void 0 ? void 0 : _this$gotoRowRef$curr.focus();\n return;\n }\n var cursorRow = (_this$grid15 = this.grid) === null || _this$grid15 === void 0 ? void 0 : _this$grid15.state.cursorRow;\n var cursorColumn = (_this$grid16 = this.grid) === null || _this$grid16 === void 0 ? void 0 : _this$grid16.state.cursorColumn;\n if (cursorRow == null || cursorColumn == null) {\n // if a cell is not selected / grid is not rendered\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: '',\n gotoValue: '',\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n return;\n }\n // if a row is selected\n var {\n model\n } = this.props;\n var {\n name,\n type\n } = model.columns[cursorColumn];\n var cellValue = model.valueForCell(cursorColumn, cursorRow);\n var text = IrisGridUtils.convertValueToText(cellValue, type);\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: \"\".concat(cursorRow + 1),\n gotoValue: text,\n gotoValueSelectedColumnName: name,\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n }\n commitPending() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n var _document, _document$activeEleme;\n var {\n model\n } = _this3.props;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n var {\n pendingSavePromise\n } = _this3.state;\n if (pendingSavePromise != null) {\n throw new Error('Save already in progress');\n }\n var containsGridCellInputField = (_document = document) === null || _document === void 0 ? void 0 : (_document$activeEleme = _document.activeElement) === null || _document$activeEleme === void 0 ? void 0 : _document$activeEleme.classList.contains('grid-cell-input-field');\n if (containsGridCellInputField != null && containsGridCellInputField) {\n var _this3$grid;\n if (document.activeElement != null && document.activeElement.classList.contains('error')) {\n throw new ValidationError('Current input is invalid');\n }\n\n // Focus the grid again to commit any pending input changes\n (_this3$grid = _this3.grid) === null || _this3$grid === void 0 ? void 0 : _this3$grid.focus();\n }\n var newPendingSavePromise = _this3.pending.add(model.commitPending()).then(() => {\n _this3.setState({\n pendingSaveError: null,\n pendingSavePromise: null\n });\n }).catch(err => {\n if (!PromiseUtils.isCanceled(err)) {\n _this3.setState({\n pendingSaveError: err,\n pendingSavePromise: null\n });\n }\n });\n _this3.setState({\n pendingSavePromise: newPendingSavePromise\n });\n return newPendingSavePromise;\n })();\n }\n discardPending() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var {\n pendingSavePromise\n } = _this4.state;\n if (pendingSavePromise != null) {\n throw new Error('Cannot cancel a save in progress');\n }\n _this4.setState({\n pendingSavePromise: null,\n pendingSaveError: null,\n pendingDataMap: new Map(),\n pendingDataErrors: new Map()\n });\n })();\n }\n\n /**\n * Select the passed in column and notify listener\n * @param column The column in this table to link\n */\n selectColumn(column) {\n var {\n onColumnSelected\n } = this.props;\n onColumnSelected(column);\n }\n\n /**\n * Get the row data map for a given row and notifies the listener\n */\n selectData(columnIndex, rowIndex) {\n var dataMap = this.getRowDataMap(rowIndex);\n var {\n onDataSelected\n } = this.props;\n onDataSelected(rowIndex, dataMap);\n }\n\n /**\n * Get the data map for the given row\n * @param rowIndex Row to get the data map for\n * @returns Data map for the row\n */\n getRowDataMap(rowIndex) {\n var _this5 = this;\n var {\n model\n } = this.props;\n var {\n columns,\n groupedColumns\n } = model;\n var dataMap = {};\n var _loop = function _loop() {\n var column = columns[i];\n var {\n name,\n type\n } = column;\n var value = model.valueForCell(i, rowIndex);\n var text = model.textForCell(i, rowIndex);\n var visibleIndex = _this5.getVisibleColumn(i);\n var isExpandable = isExpandableGridModel(model) && model.isRowExpandable(rowIndex);\n var isGrouped = groupedColumns.find(c => c.name === name) != null;\n dataMap[name] = {\n value,\n text,\n type,\n isGrouped,\n isExpandable,\n visibleIndex\n };\n };\n for (var i = 0; i < columns.length; i += 1) {\n _loop();\n }\n return dataMap;\n }\n handleAdvancedFilterChange(column, filter, options) {\n var {\n model\n } = this.props;\n var index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n this.setAdvancedFilter(index, filter, options);\n }\n handleAdvancedFilterSortChange(column, direction) {\n var _this$grid17;\n var addToExisting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n model\n } = this.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var columnName = model.columns[columnIndex].name;\n var oldSort = TableUtils.getSortForColumn(model.sort, columnName);\n var newSort = null;\n if (oldSort == null || oldSort.direction !== direction) {\n if (direction === TableUtils.sortDirection.descending) {\n newSort = column.sort().desc();\n } else {\n newSort = column.sort().asc();\n }\n }\n var sorts = TableUtils.setSortForColumn(model.sort, columnName, newSort, addToExisting);\n log.info('Setting table sorts', sorts);\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid17 = this.grid) === null || _this$grid17 === void 0 ? void 0 : _this$grid17.forceUpdate();\n }\n handleAdvancedFilterDone() {\n var _this$grid18;\n (_this$grid18 = this.grid) === null || _this$grid18 === void 0 ? void 0 : _this$grid18.focus();\n }\n handleAdvancedMenuOpened(column) {\n this.setState({\n shownAdvancedFilter: column\n });\n }\n handleGotoRowOpened() {\n this.setState({\n isGotoShown: true,\n gotoValueManuallyChanged: false\n });\n }\n handleGotoRowClosed() {\n this.setState({\n isGotoShown: false,\n gotoValueManuallyChanged: false\n });\n }\n handleAdvancedMenuClosed(columnIndex) {\n var _this$filterInputRef;\n var {\n focusedFilterBarColumn,\n isFilterBarShown\n } = this.state;\n if (isFilterBarShown && focusedFilterBarColumn === columnIndex && ((_this$filterInputRef = this.filterInputRef) === null || _this$filterInputRef === void 0 ? void 0 : _this$filterInputRef.current) !== null) {\n var _this$filterInputRef2;\n (_this$filterInputRef2 = this.filterInputRef) === null || _this$filterInputRef2 === void 0 ? void 0 : _this$filterInputRef2.current.focus();\n this.setState({\n shownAdvancedFilter: null\n });\n } else {\n this.setState({\n focusedFilterBarColumn: null,\n shownAdvancedFilter: null\n });\n }\n }\n handleCancel() {\n this.rollback();\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleChartChange() {\n // TODO: IDS-4242 Update Chart Preview\n }\n handleChartCreate(settings) {\n var {\n model,\n onCreateChart\n } = this.props;\n onCreateChart(settings, model);\n }\n handleGridError(error) {\n log.warn('Grid Error', error);\n this.setState({\n toastMessage: /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: \"\".concat(error)\n })\n });\n }\n handleFilterBarChange(value) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref13 => {\n var {\n focusedFilterBarColumn,\n quickFilters\n } = _ref13;\n var newQuickFilters = new Map(quickFilters);\n if (focusedFilterBarColumn != null) {\n var modelIndex = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelIndex);\n this.applyQuickFilter(modelIndex, value, newQuickFilters);\n }\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n handleFilterBarDone() {\n var setGridFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var defocusInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (setGridFocus) {\n var _this$grid19;\n (_this$grid19 = this.grid) === null || _this$grid19 === void 0 ? void 0 : _this$grid19.focus();\n }\n if (defocusInput) {\n this.setState({\n focusedFilterBarColumn: null\n });\n }\n }\n handleFilterBarTab(backward) {\n var {\n focusedFilterBarColumn\n } = this.state;\n assertNotNull(focusedFilterBarColumn);\n if (backward) {\n this.focusFilterBar(focusedFilterBarColumn - 1);\n } else {\n this.focusFilterBar(focusedFilterBarColumn + 1);\n }\n }\n handleFormatSelection(modelIndex, selectedFormat) {\n var {\n model\n } = this.props;\n var column = model.columns[modelIndex];\n var {\n customColumnFormatMap: prevCustomColumnFormatMap\n } = this.state;\n var customColumnFormatMap = new Map(prevCustomColumnFormatMap);\n if (selectedFormat != null) {\n var normalizedType = TableUtils.getNormalizedType(column.type);\n assertNotNull(normalizedType);\n var columnFormattingRule = Formatter.makeColumnFormattingRule(normalizedType, column.name, selectedFormat);\n customColumnFormatMap.set(column.name, columnFormattingRule);\n } else {\n customColumnFormatMap.delete(column.name);\n }\n this.updateFormatter({\n customColumnFormatMap\n });\n }\n handleMenu(e) {\n e.stopPropagation();\n this.setState({\n isMenuShown: true\n });\n }\n handleMenuClose() {\n this.setState({\n isMenuShown: false,\n openOptions: []\n });\n }\n handleMenuBack() {\n this.setState(_ref14 => {\n var {\n openOptions\n } = _ref14;\n var newOptions = [...openOptions];\n newOptions.pop();\n return {\n openOptions: newOptions\n };\n });\n }\n handleMenuSelect(option) {\n this.setState(_ref15 => {\n var {\n openOptions\n } = _ref15;\n return {\n openOptions: [...openOptions, option]\n };\n });\n }\n handleRequestFailed(event) {\n var {\n detail: error\n } = event;\n log.error('request failed:', error);\n this.stopLoading();\n var {\n partitionConfig\n } = this.state;\n if (isMissingPartitionError(error) && partitionConfig != null) {\n // We'll try loading the initial partition again\n this.startLoading('Reloading partition...', {\n resetRanges: true\n });\n this.setState({\n partitionConfig: undefined\n }, () => {\n this.initState();\n });\n } else if (this.canRollback()) {\n this.startLoading('Rolling back changes...', {\n resetRanges: true\n });\n this.rollback();\n } else {\n log.error('Table failed and unable to rollback');\n var {\n onError\n } = this.props;\n onError(new Error(\"Error displaying table: \".concat(error)));\n }\n }\n handleUpdate() {\n var _this$grid20;\n log.debug2('Received model update');\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = this.state;\n var config = {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n };\n if (!isEmptyConfig(config)) {\n this.lastLoadedConfig = config;\n } else {\n this.lastLoadedConfig = null;\n }\n (_this$grid20 = this.grid) === null || _this$grid20 === void 0 ? void 0 : _this$grid20.forceUpdate();\n this.stopLoading();\n }\n handleViewChanged(metrics) {\n var _this$grid$state, _this$grid21;\n var {\n model\n } = this.props;\n var {\n selectionEndRow = 0\n } = (_this$grid$state = (_this$grid21 = this.grid) === null || _this$grid21 === void 0 ? void 0 : _this$grid21.state) !== null && _this$grid$state !== void 0 ? _this$grid$state : {};\n var pendingRowCount = 0;\n if (isEditableGridModel(model) && model.isEditable) {\n assertNotNull(metrics);\n var {\n bottomViewport\n } = metrics;\n\n // We have an editable table that we can add new rows to\n // Display empty rows beneath the table rows that user can fill in\n var bottomNonFloating = model.rowCount - model.floatingBottomRowCount;\n if (selectionEndRow === bottomNonFloating - 1) {\n // Selection is in the last row, add another blank row\n pendingRowCount = model.pendingRowCount + 1;\n } else if (selectionEndRow === bottomNonFloating - 2) {\n // We may have just added a row based on selection moving, so just leave it as is\n pendingRowCount = model.pendingRowCount;\n } else {\n // Otherwise fill up the viewport with empty cells\n pendingRowCount = Math.max(0, bottomViewport - (model.rowCount - model.pendingRowCount) - model.floatingTopRowCount - model.floatingBottomRowCount - 1);\n }\n }\n this.setState({\n metrics,\n pendingRowCount\n });\n }\n handleSelectionChanged(selectedRanges) {\n var _this$grid22;\n assertNotNull(selectedRanges);\n var {\n onSelectionChanged\n } = this.props;\n var {\n copyOperation\n } = this.state;\n this.setState({\n selectedRanges\n });\n if (copyOperation != null) {\n this.setState({\n copyOperation: null\n });\n }\n if (((_this$grid22 = this.grid) === null || _this$grid22 === void 0 ? void 0 : _this$grid22.state.cursorRow) != null) {\n this.setState({\n gotoRow: \"\".concat(this.grid.state.cursorRow + 1)\n });\n }\n onSelectionChanged(selectedRanges);\n }\n handleMovedColumnsChanged(movedColumns, onChangeApplied) {\n this.setState({\n movedColumns\n }, onChangeApplied);\n }\n handleHeaderGroupsChanged(columnHeaderGroups) {\n var {\n model\n } = this.props;\n this.setState({\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(model, columnHeaderGroups).groups\n }, () => {\n var _this$grid23;\n return (_this$grid23 = this.grid) === null || _this$grid23 === void 0 ? void 0 : _this$grid23.forceUpdate();\n });\n }\n handleTooltipRef(tooltip) {\n // Need to start the timer right away, since we're creating the tooltip when we want the timer to start\n if (tooltip != null) {\n tooltip.startTimer();\n }\n this.tooltip = tooltip;\n }\n handleConditionalFormatsChange(conditionalFormats) {\n log.debug('Updated conditional formats', conditionalFormats);\n this.setState({\n conditionalFormats\n });\n }\n handleConditionalFormatCreate() {\n log.debug('Create new conditional format');\n var {\n openOptions,\n conditionalFormats\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: \"Create Formatting Rule\"\n }],\n conditionalFormatEditIndex: conditionalFormats.length,\n // Start with a blank rule\n conditionalFormatPreview: undefined\n });\n }\n handleConditionalFormatEdit(index) {\n log.debug('Edit conditional format', index);\n var {\n openOptions,\n conditionalFormats\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: \"Edit Formatting Rule\"\n }],\n conditionalFormatEditIndex: index,\n // Clone rule to preview temporary changes\n conditionalFormatPreview: _objectSpread({}, conditionalFormats[index])\n });\n }\n\n // Apply live changes\n\n handleConditionalFormatEditorSave(config) {\n log.debug('Save conditional format changes', config);\n this.setState(state => {\n if (state.conditionalFormatEditIndex === null) {\n log.debug('Invalid format index');\n return null;\n }\n var conditionalFormats = [...state.conditionalFormats];\n conditionalFormats[state.conditionalFormatEditIndex] = config;\n return {\n conditionalFormats\n };\n }, () => {\n this.handleMenuBack();\n });\n }\n handleConditionalFormatEditorCancel() {\n this.handleMenuBack();\n // Not resetting conditionalFormatPreview here\n // to prevent editor fields change during the menu transition\n this.setState({\n conditionalFormatEditIndex: null\n });\n }\n handleUpdateCustomColumns(customColumns) {\n log.info(\"handleUpdateCustomColumns:\", customColumns);\n var {\n model\n } = this.props;\n var {\n movedColumns,\n sorts,\n quickFilters,\n advancedFilters,\n selectDistinctColumns\n } = this.state;\n var {\n columns\n } = model;\n var oldCustomColumns = model.customColumns.map(customColumn => \"\".concat(customColumn));\n var removedColumnNames = IrisGridUtils.getRemovedCustomColumnNames(oldCustomColumns, customColumns);\n if (removedColumnNames.length > 0) {\n var newSorts = IrisGridUtils.removeSortsInColumns(sorts, removedColumnNames);\n var newQuickFilters = IrisGridUtils.removeFiltersInColumns(columns, quickFilters, removedColumnNames);\n var newAdvancedFilters = IrisGridUtils.removeFiltersInColumns(columns, advancedFilters, removedColumnNames);\n var newMovedColumns = IrisGridUtils.removeColumnFromMovedColumns(columns, movedColumns, removedColumnNames);\n var newSelectDistinctColumns = IrisGridUtils.removeColumnsFromSelectDistinctColumns(selectDistinctColumns, removedColumnNames);\n if (newSorts.length !== sorts.length) {\n log.debug('removing sorts from removed custom columns...');\n this.setState({\n sorts: newSorts\n });\n }\n if (newQuickFilters.size !== quickFilters.size || newAdvancedFilters.size !== advancedFilters.size) {\n log.debug(\"removing filters from removed custom columns...\");\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n if (!deepEqual(movedColumns, newMovedColumns)) {\n log.debug(\"change moved columns for removed custom columns\", newMovedColumns);\n this.setState({\n movedColumns: newMovedColumns\n });\n }\n if (!deepEqual(selectDistinctColumns, newSelectDistinctColumns)) {\n log.debug(\"change selectDistinct columns for removed custom columns\", newMovedColumns);\n this.setState({\n selectDistinctColumns: newSelectDistinctColumns\n });\n }\n }\n this.setState({\n customColumns\n });\n if (customColumns.length > 0) {\n // If there are no custom columns, the change handler never fires\n // This causes the loader to stay until canceled by the user\n this.startLoading('Applying custom columns...');\n }\n }\n handleCustomColumnsChanged() {\n log.debug('custom columns changed');\n var {\n isReady\n } = this.state;\n if (isReady) {\n var _this$grid24;\n this.stopLoading();\n (_this$grid24 = this.grid) === null || _this$grid24 === void 0 ? void 0 : _this$grid24.forceUpdate();\n } else {\n this.loadTableState();\n }\n }\n handlePendingCommitClicked() {\n return this.commitPending();\n }\n handlePendingDiscardClicked() {\n return this.discardPending();\n }\n handlePendingDataUpdated() {\n var _this$grid25;\n log.debug('pending data updated');\n var {\n model\n } = this.props;\n var {\n pendingDataMap,\n pendingDataErrors\n } = model;\n this.setState({\n pendingDataMap,\n pendingDataErrors,\n pendingSaveError: null\n });\n (_this$grid25 = this.grid) === null || _this$grid25 === void 0 ? void 0 : _this$grid25.forceUpdate();\n }\n\n /**\n * User added, removed, or changed the order of aggregations, or position\n * @param aggregationSettings The new aggregation settings\n */\n handleAggregationsChange(aggregationSettings) {\n log.debug('handleAggregationsChange', aggregationSettings);\n this.startLoading(\"Aggregating \".concat(aggregationSettings.aggregations.map(a => a.operation).join(', '), \"...\"));\n this.setState({\n aggregationSettings\n });\n }\n\n /**\n * A specific aggregation has been modified\n * @param aggregation The new aggregation\n */\n handleAggregationChange(aggregation) {\n log.debug('handleAggregationChange', aggregation);\n this.startLoading(\"Aggregating \".concat(aggregation.operation, \"...\"));\n this.setState(_ref16 => {\n var {\n aggregationSettings\n } = _ref16;\n return {\n selectedAggregation: aggregation,\n aggregationSettings: _objectSpread(_objectSpread({}, aggregationSettings), {}, {\n aggregations: aggregationSettings.aggregations.map(a => a.operation === aggregation.operation ? aggregation : a)\n })\n };\n });\n }\n\n /**\n * An aggregations has been selected for editing\n * @param aggregation The aggregation to edit\n */\n handleAggregationEdit(aggregation) {\n log.debug('handleAggregationEdit', aggregation);\n var {\n openOptions\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.AGGREGATION_EDIT,\n title: \"Edit Columns to \".concat(aggregation.operation)\n }],\n selectedAggregation: aggregation\n });\n }\n handleRollupChange(rollupConfig) {\n var _rollupConfig$columns, _rollupConfig$columns2;\n log.info('Rollup change', rollupConfig);\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n this.startLoading(\"Grouping by columns \".concat((_rollupConfig$columns = rollupConfig === null || rollupConfig === void 0 ? void 0 : (_rollupConfig$columns2 = rollupConfig.columns) === null || _rollupConfig$columns2 === void 0 ? void 0 : _rollupConfig$columns2.join(', ')) !== null && _rollupConfig$columns !== void 0 ? _rollupConfig$columns : '', \"...\"));\n\n // Have to clear select distinct since rollup uses the original columns, not the current ones.\n // IrisGridProxyModel has a check to prevent model update\n // when selectDistinctModel is cleared and the rollupConfig is set on the model.\n this.setState({\n rollupConfig,\n movedColumns: [],\n frozenColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n selectDistinctColumns: []\n });\n }\n handleSelectDistinctChanged(columnNames) {\n log.debug('SelectDistinct change', columnNames);\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n this.startLoading(\"Selecting distinct values in \".concat(columnNames.length > 0 ? columnNames.join(', ') : '', \"...\"));\n this.setState({\n selectDistinctColumns: columnNames,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE\n });\n }\n handleDownloadTableStart() {\n var {\n canDownloadCsv\n } = this.props;\n if (canDownloadCsv) {\n this.setState({\n isTableDownloading: true,\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.INITIATING\n });\n } else {\n log.error('Attempted to handleDownloadTableStart for user without download CSV permission.');\n }\n }\n handleDownloadTable(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues) {\n var {\n canDownloadCsv\n } = this.props;\n if (canDownloadCsv) {\n log.info('start table downloading', fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);\n this.setState(() => {\n if (this.tableSaver) {\n this.tableSaver.startDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);\n }\n return {\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n };\n });\n } else {\n log.error('Attempted to handleDownloadTable for user without download CSV permission.');\n }\n }\n\n /**\n * Aggregation editing has completed. Need to filter out any aggregations that have no columns selected\n */\n removeEmptyAggregations() {\n log.debug('removeEmptyAggregations');\n this.setState(_ref17 => {\n var {\n aggregationSettings\n } = _ref17;\n var {\n aggregations\n } = aggregationSettings;\n var newAggregations = aggregations.filter(a => a.selected.length > 0 || a.invert);\n if (newAggregations.length !== aggregations.length) {\n return {\n selectedAggregation: null,\n aggregationSettings: _objectSpread(_objectSpread({}, aggregationSettings), {}, {\n aggregations: newAggregations\n })\n };\n }\n return {\n selectedAggregation: null,\n aggregationSettings\n };\n });\n }\n seekRow(inputString) {\n var _arguments = arguments,\n _this6 = this;\n return _asyncToGenerator(function* () {\n var _this6$grid;\n var isBackwards = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n var {\n gotoValueSelectedColumnName: selectedColumnName,\n gotoValueSelectedFilter\n } = _this6.state;\n var {\n model\n } = _this6.props;\n var {\n dh\n } = model;\n if (!model.isSeekRowAvailable) {\n return;\n }\n if (inputString === '') {\n return;\n }\n var selectedColumn = IrisGridUtils.getColumnByName(model.columns, selectedColumnName);\n if (selectedColumn === undefined) {\n return;\n }\n var searchFromRow = (_this6$grid = _this6.grid) === null || _this6$grid === void 0 ? void 0 : _this6$grid.state.cursorRow;\n if (searchFromRow == null) {\n searchFromRow = 0;\n }\n var isContains = gotoValueSelectedFilter === FilterType.contains || gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n var isIgnoreCase = gotoValueSelectedFilter === FilterType.eqIgnoreCase || gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n try {\n var _this6$grid2;\n var {\n formatter\n } = model;\n var columnDataType = TableUtils.getNormalizedType(selectedColumn.type);\n var rowIndex;\n switch (columnDataType) {\n case TableUtils.dataType.CHAR:\n case TableUtils.dataType.STRING:\n {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, inputString, isIgnoreCase, isContains, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n break;\n }\n case TableUtils.dataType.DATETIME:\n {\n var [startDate] = DateUtils.parseDateRange(dh, inputString, formatter.timeZone);\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.DATETIME, startDate, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n break;\n }\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT:\n {\n if (!TableUtils.isBigDecimalType(selectedColumn.type) && !TableUtils.isBigIntegerType(selectedColumn.type)) {\n var inputValue = parseInt(inputString, 10);\n if (inputString === '-Infinity') {\n inputValue = Number.NEGATIVE_INFINITY;\n } else if (inputString === 'Infinity') {\n inputValue = Number.POSITIVE_INFINITY;\n }\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.NUMBER, inputValue, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n } else {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, inputString, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n }\n break;\n }\n default:\n {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, _this6.tableUtils.makeValue(selectedColumn.type, inputString, formatter.timeZone), undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n }\n }\n (_this6$grid2 = _this6.grid) === null || _this6$grid2 === void 0 ? void 0 : _this6$grid2.setFocusRow(rowIndex);\n _this6.setState({\n gotoValueError: ''\n });\n } catch (e) {\n _this6.setState({\n gotoValueError: 'invalid input'\n });\n }\n })();\n }\n handleCancelDownloadTable() {\n var _this$tableSaver;\n (_this$tableSaver = this.tableSaver) === null || _this$tableSaver === void 0 ? void 0 : _this$tableSaver.cancelDownload();\n this.setState({\n isTableDownloading: false\n });\n }\n handleDownloadCompleted() {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 100,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.FINISHED\n });\n }\n handleDownloadCanceled() {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 0,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.CANCELED\n });\n }\n\n /**\n * Delete the specified ranges from the table.\n * @param ranges The ranges to delete\n */\n deleteRanges(ranges) {\n var {\n model\n } = this.props;\n if (!isDeletableGridModel(model) || !model.isDeletable) {\n throw new Error('Model does not support deleting ranges');\n }\n this.pending.add(model.delete(ranges)).catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to delete ranges', ranges, e);\n }\n });\n }\n resetColumnSelection() {\n if (this.grid == null) {\n return;\n }\n var {\n isSelectingColumn\n } = this.props;\n if (isSelectingColumn) {\n var {\n columnAllowedCursor\n } = this.props;\n this.grid.setState({\n cursor: columnAllowedCursor\n });\n } else {\n this.grid.setState({\n cursor: null\n });\n this.setState({\n hoverSelectColumn: null\n });\n }\n }\n resetGridViewState() {\n var forceUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n if (!this.grid) {\n return;\n }\n this.grid.clearSelectedRanges();\n this.grid.setViewState({\n left: 0,\n top: 0,\n topOffset: 0,\n leftOffset: 0\n }, forceUpdate);\n }\n sendStateChange() {\n if (!this.grid) {\n return;\n }\n var {\n state: irisGridState\n } = this;\n var {\n state: gridState\n } = this.grid;\n var {\n onStateChange\n } = this.props;\n onStateChange(irisGridState, gridState);\n }\n handleOverflowClose() {\n this.setState({\n showOverflowModal: false\n });\n }\n getColumnBoundingRect() {\n var _this$gridWrapper2;\n var {\n metrics,\n shownColumnTooltip\n } = this.state;\n assertNotNull(metrics);\n assertNotNull(shownColumnTooltip);\n var gridRect = (_this$gridWrapper2 = this.gridWrapper) === null || _this$gridWrapper2 === void 0 ? void 0 : _this$gridWrapper2.getBoundingClientRect();\n var popperMargin = 20;\n assertNotNull(gridRect);\n var {\n columnHeaderHeight,\n allColumnXs,\n allColumnWidths,\n width,\n columnHeaderMaxDepth\n } = metrics;\n var columnX = allColumnXs.get(shownColumnTooltip);\n var columnWidth = allColumnWidths.get(shownColumnTooltip);\n assertNotNull(columnX);\n assertNotNull(columnWidth);\n var left = gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin);\n return {\n top: gridRect.top + (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin),\n bottom: gridRect.top + columnHeaderMaxDepth * columnHeaderHeight,\n right: gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin) + 1,\n width: 1,\n height: columnHeaderHeight,\n x: left,\n y: gridRect.top,\n toJSON: () => {\n throw new Error('not implemented');\n }\n };\n }\n handleGotoRowSelectedRowNumberSubmit() {\n var {\n gotoRow: rowNumber\n } = this.state;\n this.focusRowInGrid(rowNumber);\n }\n focusRowInGrid(rowNumber) {\n var {\n model\n } = this.props;\n var {\n rowCount\n } = model;\n this.setState({\n gotoRow: rowNumber\n });\n if (rowNumber === '') {\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n return;\n }\n var rowInt = parseInt(rowNumber, 10);\n if (rowInt > rowCount || rowInt < -rowCount) {\n this.setState({\n gotoRowError: 'Invalid row index'\n });\n } else if (rowInt === 0) {\n var _this$grid26;\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n (_this$grid26 = this.grid) === null || _this$grid26 === void 0 ? void 0 : _this$grid26.setFocusRow(0);\n } else if (rowInt < 0) {\n var _this$grid27;\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n (_this$grid27 = this.grid) === null || _this$grid27 === void 0 ? void 0 : _this$grid27.setFocusRow(rowInt + rowCount);\n } else {\n var _this$grid28;\n (_this$grid28 = this.grid) === null || _this$grid28 === void 0 ? void 0 : _this$grid28.setFocusRow(rowInt - 1);\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n }\n }\n handleGotoRowSelectedRowNumberChanged(event) {\n var rowNumber = event.target.value;\n this.focusRowInGrid(rowNumber);\n }\n getColumnTooltip(visibleIndex, metrics, model) {\n var {\n columnHeaderHeight,\n columnHeaderMaxDepth,\n allColumnXs,\n allColumnWidths,\n width\n } = metrics;\n var columnX = allColumnXs.get(visibleIndex);\n var columnWidth = allColumnWidths.get(visibleIndex);\n if (columnX == null || columnWidth == null) {\n return null;\n }\n\n /**\n * Create a wrapper dom element, the size of the column header.\n * The wrapper acts as tooltip parent, the tooltip component\n * will trigger hide on mouseleave of wrapper or tooltip.\n * The wrapper should be bound to within the grid dimensions,\n * so popper only remains triggered while mouse is inside the panel.\n */\n var boundedLeft = Math.max(0, columnX);\n var boundedWidth = columnWidth;\n if (columnX + columnWidth > width) {\n // column is extending past right edge\n boundedWidth = width - columnX;\n } else if (columnX < 0) {\n // column is extending past left edge\n boundedWidth = columnWidth - Math.abs(columnX);\n }\n var wrapperStyle = {\n position: 'absolute',\n top: (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: boundedLeft,\n width: boundedWidth,\n height: columnHeaderHeight,\n pointerEvents: 'none'\n };\n\n /**\n * Because the popper parent wrapper center is no longer the same as\n * the column label center, we create a popper virtual ref, to handle\n * positioning and keep the popper centered on the label. Creates a\n * 1px x headerHeight virtual object, placed centered on the column\n * label, clamped to 0 + margin to width - margin. We add a margin,\n * otherwise the arrow wants to escape the boundary.\n */\n var virtualReference = {\n clientWidth: 1,\n clientHeight: columnHeaderHeight,\n getBoundingClientRect: this.getColumnBoundingRect\n };\n var popperOptions = {\n placement: 'bottom',\n modifiers: {\n flip: {\n behavior: ['bottom', 'top']\n }\n }\n };\n var modelColumn = this.getModelColumn(visibleIndex);\n if (modelColumn == null) return null;\n var column = model.columns[modelColumn];\n if (column == null) return null;\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n timeout: 400,\n interactive: true,\n options: popperOptions,\n ref: this.handleTooltipRef,\n referenceObject: virtualReference,\n onExited: () => {\n this.setState({\n shownColumnTooltip: null\n });\n },\n children: /*#__PURE__*/_jsx(ColumnStatistics, {\n model: model,\n column: column,\n onStatistics: () => {\n var _this$tooltip;\n (_this$tooltip = this.tooltip) === null || _this$tooltip === void 0 ? void 0 : _this$tooltip.update();\n }\n })\n }, column.name)\n });\n }\n handleGotoValueSelectedColumnNameChanged(columnName) {\n var _this$grid29;\n var {\n model\n } = this.props;\n var cursorRow = (_this$grid29 = this.grid) === null || _this$grid29 === void 0 ? void 0 : _this$grid29.state.cursorRow;\n var {\n gotoValueSelectedColumnName: prevColumnName,\n gotoValueManuallyChanged\n } = this.state;\n if (cursorRow != null) {\n var _index = model.getColumnIndexByName(columnName);\n var _column2 = IrisGridUtils.getColumnByName(model.columns, columnName);\n var prevColumn = IrisGridUtils.getColumnByName(model.columns, prevColumnName);\n if (_index == null || _column2 == null) {\n return;\n }\n var _value3 = model.valueForCell(_index, cursorRow);\n var text = IrisGridUtils.convertValueToText(_value3, _column2.type);\n\n // do NOT update value if user manually changed value AND column type remains the same\n if (gotoValueManuallyChanged && _column2.type === (prevColumn === null || prevColumn === void 0 ? void 0 : prevColumn.type)) {\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: ''\n });\n } else {\n // do update, and set goToValueManuallyChanged to false because value was automatically changed\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValue: text,\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n }\n }\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: ''\n });\n }\n handleGotoValueSelectedFilterChanged(value) {\n this.setState({\n gotoValueSelectedFilter: value,\n gotoValueError: ''\n });\n }\n handleGotoValueSubmitted(isBackwards) {\n var {\n gotoValue\n } = this.state;\n this.seekRow(gotoValue, isBackwards);\n }\n render() {\n var _rollupConfig$columns3,\n _rollupConfig$columns4,\n _this7 = this,\n _this$grid31,\n _this$grid31$state$dr,\n _openOptions;\n var {\n children,\n customFilters,\n getDownloadWorker,\n isSelectingColumn,\n isStuckToBottom,\n isStuckToRight,\n model,\n name,\n onlyFetchVisibleColumns,\n alwaysFetchColumns,\n advancedSettings,\n onAdvancedSettingsChange,\n canDownloadCsv,\n onCreateChart\n } = this.props;\n var {\n metricCalculator,\n metrics,\n isFilterBarShown,\n isSelectingPartition,\n isMenuShown,\n isReady,\n copyOperation,\n focusedFilterBarColumn,\n loadingText,\n loadingScrimProgress,\n loadingSpinnerShown,\n loadingCancelShown,\n loadingBlocksGrid,\n shownColumnTooltip,\n hoverAdvancedFilter,\n shownAdvancedFilter,\n hoverSelectColumn,\n quickFilters,\n advancedFilters,\n searchFilter,\n selectDistinctColumns,\n movedColumns,\n movedRows,\n formatter,\n conditionalFormats,\n conditionalFormatPreview,\n conditionalFormatEditIndex,\n sorts,\n reverseType,\n customColumns,\n selectedRanges,\n isTableDownloading,\n tableDownloadStatus,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n aggregationSettings,\n selectedAggregation,\n rollupConfig,\n openOptions,\n pendingSavePromise,\n pendingSaveError,\n pendingRowCount,\n pendingDataErrors,\n pendingDataMap,\n toastMessage,\n frozenColumns,\n columnHeaderGroups,\n showOverflowModal,\n overflowText,\n overflowButtonTooltipProps,\n expandCellTooltipProps,\n linkHoverTooltipProps,\n isGotoShown,\n gotoRow,\n gotoRowError,\n gotoValueError,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueSelectedFilter,\n partitionConfig\n } = this.state;\n if (!isReady) {\n return null;\n }\n var theme = this.getTheme();\n var filter = this.getCachedFilter(customFilters, quickFilters, advancedFilters, searchFilter);\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n var stateOverride = this.getCachedStateOverride(hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverseType, rollupConfig, isMenuShown);\n var top = metrics ? metrics.top : 0;\n var bottom = metrics ? metrics.bottomViewport : 0;\n var left = null;\n var right = null;\n if (onlyFetchVisibleColumns) {\n left = metrics ? metrics.left : 0;\n right = metrics ? metrics.right : 0;\n }\n var isVisible = metrics != null && metrics.width > 0 && metrics.height > 0;\n var isRollup = ((_rollupConfig$columns3 = rollupConfig === null || rollupConfig === void 0 ? void 0 : (_rollupConfig$columns4 = rollupConfig.columns) === null || _rollupConfig$columns4 === void 0 ? void 0 : _rollupConfig$columns4.length) !== null && _rollupConfig$columns3 !== void 0 ? _rollupConfig$columns3 : 0) > 0;\n var focusField = null;\n var debounceMs = metrics ? Math.min(Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)), IrisGrid.maxDebounce) : IrisGrid.maxDebounce;\n if (isFilterBarShown && focusedFilterBarColumn != null && metrics != null) {\n var {\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n width\n } = metrics;\n var columnX = allColumnXs.get(focusedFilterBarColumn);\n var columnWidth = allColumnWidths.get(focusedFilterBarColumn);\n if (columnX != null && columnWidth != null) {\n var _theme$filterBarHeigh, _theme$filterBarHeigh2, _this$grid30;\n var x = gridX + columnX;\n var y = gridY - ((_theme$filterBarHeigh = theme.filterBarHeight) !== null && _theme$filterBarHeigh !== void 0 ? _theme$filterBarHeigh : 0);\n var fieldWidth = columnWidth + 1; // cover right border\n var fieldHeight = ((_theme$filterBarHeigh2 = theme.filterBarHeight) !== null && _theme$filterBarHeigh2 !== void 0 ? _theme$filterBarHeigh2 : 0) - 1; // remove bottom border\n var style = {\n top: y,\n left: x,\n minWidth: Math.min(fieldWidth, width - x),\n // Don't cause overflow\n height: fieldHeight\n };\n var _value4 = '';\n var isValid = true;\n var modelColumn = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelColumn);\n var quickFilter = quickFilters.get(modelColumn);\n var advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter != null) {\n _value4 = quickFilter.text;\n isValid = quickFilter.filter != null;\n }\n var isBarFiltered = quickFilters.size !== 0 || advancedFilters.size !== 0;\n focusField = /*#__PURE__*/_jsx(FilterInputField, {\n ref: this.filterInputRef,\n style: style,\n className: classNames({\n error: !isValid,\n active: _value4 !== '' || advancedFilter != null,\n 'iris-grid-has-filter': isBarFiltered\n }),\n isAdvancedFilterSet: advancedFilter != null,\n onAdvancedFiltersTriggered: () => {\n this.setState({\n shownAdvancedFilter: focusedFilterBarColumn\n });\n },\n onChange: this.handleFilterBarChange,\n onDone: this.handleFilterBarDone,\n onTab: this.handleFilterBarTab,\n onContextMenu: (_this$grid30 = this.grid) === null || _this$grid30 === void 0 ? void 0 : _this$grid30.handleContextMenu,\n debounceMs: debounceMs,\n value: _value4\n }, focusedFilterBarColumn);\n }\n }\n var loadingElement = null;\n if (loadingText != null) {\n var loadingStatus = /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-loading-status\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: classNames('iris-grid-loading-status-bar', {\n show: loadingSpinnerShown\n }),\n children: loadingText\n }), /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n onClick: this.handleCancel,\n className: classNames('iris-grid-btn-cancel', {\n show: loadingCancelShown\n }),\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsClose,\n transform: \"down-1\"\n }), \"Cancel\"]\n })]\n });\n var _gridY = metrics ? metrics.gridY : 0;\n loadingElement = /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-loading\",\n style: loadingBlocksGrid ? {\n top: _gridY\n } : {},\n children: loadingStatus\n });\n }\n var columnTooltip = null;\n if (shownColumnTooltip != null && metrics) {\n var _this$tooltip2;\n columnTooltip = this.getColumnTooltip(shownColumnTooltip, metrics, model);\n // #510 We may need to update the position of the tooltip if it's already opened and columns are resized\n (_this$tooltip2 = this.tooltip) === null || _this$tooltip2 === void 0 ? void 0 : _this$tooltip2.update();\n }\n var filterBar = [];\n if (metrics && isFilterBarShown) {\n var {\n gridX: _gridX,\n gridY: _gridY2,\n visibleColumns,\n allColumnXs: _allColumnXs,\n allColumnWidths: _allColumnWidths\n } = metrics;\n var {\n filterBarHeight\n } = theme;\n var _loop2 = function _loop2() {\n var columnIndex = visibleColumns[i];\n var columnX = _allColumnXs.get(columnIndex);\n var columnWidth = _allColumnWidths.get(columnIndex);\n var modelColumn = _this7.getModelColumn(columnIndex);\n if (modelColumn != null) {\n var isFilterable = model.isFilterable(modelColumn);\n if (isFilterable && columnX != null && columnWidth != null && columnWidth > 0) {\n var _x = _gridX + columnX + columnWidth - 24;\n var _y = _gridY2 - (filterBarHeight !== null && filterBarHeight !== void 0 ? filterBarHeight : 0) + 2; // 2 acts as top margin for the button\n var _style = {\n position: 'absolute',\n top: _y,\n left: _x\n };\n var _advancedFilter = advancedFilters.get(modelColumn);\n var isFilterSet = _advancedFilter != null;\n var isFilterVisible = columnIndex === hoverAdvancedFilter || columnIndex === focusedFilterBarColumn || isFilterSet;\n var element = /*#__PURE__*/_jsx(\"div\", {\n className: classNames('advanced-filter-button-container', {\n hidden: !isFilterVisible\n }),\n style: _style,\n children: isFilterVisible && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isFilterSet\n }),\n onClick: () => {\n _this7.setState({\n shownAdvancedFilter: columnIndex\n });\n },\n onContextMenu: event => {\n var _this7$grid;\n (_this7$grid = _this7.grid) === null || _this7$grid === void 0 ? void 0 : _this7$grid.handleContextMenu(event);\n },\n onMouseEnter: () => {\n _this7.setState({\n hoverAdvancedFilter: columnIndex\n });\n },\n onMouseLeave: () => {\n _this7.setState({\n hoverAdvancedFilter: null\n });\n },\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhFilterFilled,\n className: \"filter-solid\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsFilter,\n className: \"filter-light\"\n })]\n })\n })\n }, columnIndex);\n filterBar.push(element);\n }\n }\n };\n for (var i = 0; i < visibleColumns.length; i += 1) {\n _loop2();\n }\n }\n var advancedFilterMenus = [];\n if (metrics) {\n var {\n gridX: _gridX2,\n visibleColumns: _visibleColumns,\n allColumnXs: _allColumnXs2,\n allColumnWidths: _allColumnWidths2,\n columnHeaderHeight\n } = metrics;\n var _loop3 = function _loop3() {\n var columnIndex = _visibleColumns[_i3];\n var columnX = _allColumnXs2.get(columnIndex);\n var columnWidth = _allColumnWidths2.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n var xColumnHeader = _gridX2 + columnX;\n var xFilterBar = _gridX2 + columnX + columnWidth - 20;\n var _style2 = isFilterBarShown ? {\n position: 'absolute',\n top: columnHeaderHeight,\n left: xFilterBar,\n width: 20,\n height: theme.filterBarHeight\n } : {\n position: 'absolute',\n top: 0,\n left: xColumnHeader,\n width: columnWidth,\n height: columnHeaderHeight\n };\n var _modelColumn = _this7.getModelColumn(columnIndex);\n if (_modelColumn != null) {\n var _column3 = model.columns[_modelColumn];\n if (_column3 == null) {\n // Grid metrics is likely out of sync with model\n log.warn(\"Column does not exist at index \".concat(_modelColumn, \" for column array of length \").concat(model.columns.length));\n // eslint-disable-next-line no-continue\n return \"continue\";\n }\n var _advancedFilter2 = advancedFilters.get(_modelColumn);\n var {\n options: advancedFilterOptions\n } = _advancedFilter2 || {};\n var sort = TableUtils.getSortForColumn(model.sort, _column3.name);\n var sortDirection = sort ? sort.direction : null;\n if (!isSortDirection(sortDirection)) {\n throw new Error(\"Invalid sort direction: \".concat(sortDirection));\n }\n var element = /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-menu-container\",\n style: _style2,\n children: /*#__PURE__*/_jsx(Popper, {\n className: \"advanced-filter-menu-popper\",\n onEntered: _this7.getAdvancedMenuOpenedHandler(columnIndex),\n onExited: () => {\n _this7.handleAdvancedMenuClosed(columnIndex);\n },\n isShown: shownAdvancedFilter === columnIndex,\n interactive: true,\n closeOnBlur: true,\n options: {\n positionFixed: true\n },\n children: _this7.getCachedAdvancedFilterMenuActions(model, _column3, advancedFilterOptions, sortDirection, formatter)\n })\n }, columnIndex);\n advancedFilterMenus.push(element);\n }\n }\n };\n for (var _i3 = 0; _i3 < _visibleColumns.length; _i3 += 1) {\n var _ret = _loop3();\n if (_ret === \"continue\") continue;\n }\n }\n var optionItems = this.getCachedOptionItems(onCreateChart !== undefined && model.isChartBuilderAvailable, model.isCustomColumnsAvailable, model.isFormatColumnsAvailable, model.isRollupAvailable, model.isTotalsAvailable || isRollup, model.isSelectDistinctAvailable, model.isExportAvailable, this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, this.isTableSearchAvailable(), isGotoShown, advancedSettings.size > 0);\n var hiddenColumns = this.getCachedHiddenColumns(metricCalculator, userColumnWidths);\n var openOptionsStack = openOptions.map(option => {\n switch (option.type) {\n case OptionType.CHART_BUILDER:\n return /*#__PURE__*/_jsx(ChartBuilder, {\n model: model,\n onChange: this.handleChartChange,\n onSubmit: this.handleChartCreate\n }, OptionType.CHART_BUILDER);\n case OptionType.VISIBILITY_ORDERING_BUILDER:\n return /*#__PURE__*/_jsx(VisibilityOrderingBuilder, {\n model: model,\n movedColumns: movedColumns,\n hiddenColumns: hiddenColumns,\n columnHeaderGroups: columnHeaderGroups,\n onColumnVisibilityChanged: this.handleColumnVisibilityChanged,\n onReset: this.handleColumnVisibilityReset,\n onMovedColumnsChanged: this.handleMovedColumnsChanged,\n onColumnHeaderGroupChanged: this.handleHeaderGroupsChanged\n }, OptionType.VISIBILITY_ORDERING_BUILDER);\n case OptionType.CONDITIONAL_FORMATTING:\n return /*#__PURE__*/_jsx(ConditionalFormattingMenu, {\n rules: conditionalFormats,\n onChange: this.handleConditionalFormatsChange,\n onCreate: this.handleConditionalFormatCreate,\n onSelect: this.handleConditionalFormatEdit\n });\n case OptionType.CONDITIONAL_FORMATTING_EDIT:\n assertNotNull(model.columns);\n assertNotNull(this.handleConditionalFormatEditorUpdate);\n return /*#__PURE__*/_jsx(ConditionalFormatEditor, {\n dh: model.dh,\n columns: model.columns,\n rule: conditionalFormatPreview,\n onUpdate: this.handleConditionalFormatEditorUpdate,\n onSave: this.handleConditionalFormatEditorSave,\n onCancel: this.handleConditionalFormatEditorCancel\n });\n case OptionType.CUSTOM_COLUMN_BUILDER:\n return /*#__PURE__*/_jsx(CustomColumnBuilder, {\n model: model,\n customColumns: customColumns,\n onSave: this.handleUpdateCustomColumns,\n onCancel: this.handleMenuBack\n }, OptionType.CUSTOM_COLUMN_BUILDER);\n case OptionType.ROLLUP_ROWS:\n return /*#__PURE__*/_jsx(RollupRows, {\n model: model,\n onChange: this.handleRollupChange,\n config: rollupConfig\n }, OptionType.ROLLUP_ROWS);\n case OptionType.AGGREGATIONS:\n return /*#__PURE__*/_jsx(Aggregations, {\n settings: aggregationSettings,\n isRollup: isRollup,\n onChange: this.handleAggregationsChange,\n onEdit: this.handleAggregationEdit\n });\n case OptionType.AGGREGATION_EDIT:\n return selectedAggregation && /*#__PURE__*/_jsx(AggregationEdit, {\n aggregation: selectedAggregation,\n columns: model.originalColumns,\n onChange: this.handleAggregationChange\n });\n case OptionType.TABLE_EXPORTER:\n return /*#__PURE__*/_jsx(TableCsvExporter, {\n model: model,\n name: name,\n userColumnWidths: userColumnWidths,\n movedColumns: movedColumns,\n isDownloading: isTableDownloading,\n tableDownloadStatus: tableDownloadStatus,\n tableDownloadProgress: tableDownloadProgress,\n tableDownloadEstimatedTime: tableDownloadEstimatedTime !== null && tableDownloadEstimatedTime !== void 0 ? tableDownloadEstimatedTime : undefined,\n onDownload: this.handleDownloadTable,\n onDownloadStart: this.handleDownloadTableStart,\n onCancel: this.handleCancelDownloadTable,\n selectedRanges: selectedRanges\n }, OptionType.TABLE_EXPORTER);\n case OptionType.SELECT_DISTINCT:\n return /*#__PURE__*/_jsx(SelectDistinctBuilder, {\n model: model,\n selectDistinctColumns: selectDistinctColumns,\n onChange: this.handleSelectDistinctChanged\n });\n case OptionType.ADVANCED_SETTINGS:\n return /*#__PURE__*/_jsx(AdvancedSettingsMenu, {\n items: advancedSettings,\n onChange: onAdvancedSettingsChange\n });\n default:\n throw Error(\"Unexpected option type \".concat(option.type));\n }\n });\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid\",\n role: \"presentation\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-column\",\n children: [children != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-bar\",\n children: children\n }), /*#__PURE__*/_jsx(CSSTransition, {\n in: isSelectingPartition,\n timeout: ThemeExport.transitionSlowMs,\n classNames: \"iris-grid-bar-horizontal\",\n onEnter: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExit: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-partition-selector-wrapper iris-grid-bar iris-grid-bar-primary\",\n children: isPartitionedGridModel(model) && model.isPartitionRequired && partitionConfig && /*#__PURE__*/_jsx(IrisGridPartitionSelector, {\n model: model,\n partitionConfig: partitionConfig,\n onChange: this.handlePartitionChange\n })\n })\n }), /*#__PURE__*/_jsx(CSSTransition, {\n in: showSearchBar,\n timeout: ThemeExport.transitionSlowMs,\n classNames: \"iris-grid-bar-horizontal\",\n onEnter: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExit: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-bar\",\n children: /*#__PURE__*/_jsx(CrossColumnSearch, {\n value: searchValue,\n selectedColumns: selectedSearchColumns,\n invertSelection: invertSearchColumns,\n onChange: this.handleCrossColumnSearch,\n columns: model.columns,\n ref: this.crossColumnRef\n })\n })\n }), /*#__PURE__*/_jsxs(Grid, {\n ref: grid => {\n this.grid = grid;\n },\n isStickyBottom: !isEditableGridModel(model) || !model.isEditable,\n isStuckToBottom: isStuckToBottom,\n isStuckToRight: isStuckToRight,\n metricCalculator: metricCalculator,\n model: model,\n keyHandlers: this.getKeyHandlers(),\n mouseHandlers: this.getMouseHandlers(),\n movedColumns: movedColumns,\n movedRows: movedRows,\n onError: this.handleGridError,\n onViewChanged: this.handleViewChanged,\n onSelectionChanged: this.handleSelectionChanged,\n onMovedColumnsChanged: this.handleMovedColumnsChanged,\n renderer: this.renderer,\n stateOverride: stateOverride,\n theme: theme,\n children: [/*#__PURE__*/_jsx(IrisGridCellOverflowModal, {\n isOpen: showOverflowModal,\n text: overflowText,\n onClose: this.handleOverflowClose\n }), isVisible && /*#__PURE__*/_jsx(IrisGridModelUpdater, {\n model: model,\n modelColumns: model.columns,\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n filter: filter,\n formatter: formatter,\n sorts: sorts,\n reverseType: reverseType,\n movedColumns: movedColumns,\n customColumns: customColumns,\n hiddenColumns: hiddenColumns,\n alwaysFetchColumns: this.getAlwaysFetchColumns(alwaysFetchColumns, model.columns, movedColumns, model.floatingLeftColumnCount, model.floatingRightColumnCount, (_this$grid31 = this.grid) === null || _this$grid31 === void 0 ? void 0 : (_this$grid31$state$dr = _this$grid31.state.draggingColumn) === null || _this$grid31$state$dr === void 0 ? void 0 : _this$grid31$state$dr.range),\n formatColumns: this.getCachedPreviewFormatColumns(model.dh, model.columns, conditionalFormats, conditionalFormatPreview,\n // Disable the preview format when we press Back on the format edit page\n ((_openOptions = openOptions[openOptions.length - 1]) === null || _openOptions === void 0 ? void 0 : _openOptions.type) === OptionType.CONDITIONAL_FORMATTING_EDIT ? conditionalFormatEditIndex !== null && conditionalFormatEditIndex !== void 0 ? conditionalFormatEditIndex : undefined : undefined),\n rollupConfig: this.getModelRollupConfig(model.originalColumns, rollupConfig, aggregationSettings),\n totalsConfig: this.getModelTotalsConfig(model.columns, rollupConfig, aggregationSettings),\n selectDistinctColumns: selectDistinctColumns,\n pendingRowCount: pendingRowCount,\n pendingDataMap: pendingDataMap,\n frozenColumns: frozenColumns,\n columnHeaderGroups: columnHeaderGroups,\n partitionConfig: partitionConfig\n }), !isMenuShown && /*#__PURE__*/_jsx(\"div\", {\n className: \"grid-settings-button\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n \"data-testid\": \"btn-iris-grid-settings-button-\".concat(name),\n onClick: this.handleMenu,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsMenu,\n transform: \"up-1\"\n }),\n tooltip: \"Table Options\"\n })\n }), focusField, loadingElement, filterBar, columnTooltip, advancedFilterMenus, overflowButtonTooltipProps && this.getOverflowButtonTooltip(overflowButtonTooltipProps), expandCellTooltipProps && this.getExpandCellTooltip(expandCellTooltipProps), linkHoverTooltipProps && this.getLinkHoverTooltip(linkHoverTooltipProps)]\n }), /*#__PURE__*/_jsx(GotoRow, {\n ref: this.gotoRowRef,\n model: model,\n isShown: isGotoShown,\n gotoRow: gotoRow,\n gotoRowError: gotoRowError,\n gotoValueError: gotoValueError,\n onGotoRowSubmit: this.handleGotoRowSelectedRowNumberSubmit,\n onGotoRowNumberChanged: this.handleGotoRowSelectedRowNumberChanged,\n onClose: this.handleGotoRowClosed,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: () => {\n this.handleAnimationStart();\n this.focus();\n },\n onExited: this.handleAnimationEnd,\n gotoValueSelectedColumnName: gotoValueSelectedColumnName,\n gotoValue: gotoValue,\n gotoValueFilter: gotoValueSelectedFilter,\n onGotoValueSelectedColumnNameChanged: this.handleGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged: this.handleGotoValueSelectedFilterChanged,\n onGotoValueChanged: this.handleGotoValueChanged,\n onGotoValueSubmit: this.handleGotoValueSubmitted\n }), /*#__PURE__*/_jsx(PendingDataBottomBar, {\n error: pendingSaveError,\n isSaving: pendingSavePromise != null,\n saveTooltip: \"Commit (\".concat(this.commitAction.shortcut.getDisplayText(), \")\"),\n discardTooltip: \"Discard (\".concat(this.discardAction.shortcut.getDisplayText(), \")\"),\n pendingDataErrors: pendingDataErrors,\n pendingDataMap: pendingDataMap,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n onSave: this.handlePendingCommitClicked,\n onDiscard: this.handlePendingDiscardClicked\n }), /*#__PURE__*/_jsx(ToastBottomBar, {\n children: toastMessage\n }), /*#__PURE__*/_jsx(IrisGridCopyHandler, {\n model: model,\n copyOperation: copyOperation !== null && copyOperation !== void 0 ? copyOperation : undefined,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd\n }), /*#__PURE__*/_jsx(TableSaver, {\n dh: model.dh,\n ref: tableSaver => {\n this.tableSaver = tableSaver;\n },\n getDownloadWorker: getDownloadWorker,\n onDownloadCompleted: this.handleDownloadCompleted,\n onDownloadCanceled: this.handleDownloadCanceled,\n onDownloadProgressUpdate: this.handleDownloadProgressUpdate,\n isDownloading: tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING,\n formatter: formatter\n })]\n }), /*#__PURE__*/_jsx(SlideTransition, {\n in: isMenuShown,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"table-sidebar\",\n children: /*#__PURE__*/_jsxs(Stack, {\n children: [/*#__PURE__*/_jsx(Page, {\n title: \"Table Options\",\n onClose: this.handleMenuClose,\n children: /*#__PURE__*/_jsx(Menu, {\n onSelect: i => this.handleMenuSelect(optionItems[i]),\n items: optionItems\n })\n }), openOptionsStack.map((option, i) => /*#__PURE__*/_jsx(Page, {\n title: openOptions[i].title,\n onBack: this.handleMenuBack,\n onClose: this.handleMenuClose,\n children: option\n }, openOptions[i].type))]\n })\n })\n }), /*#__PURE__*/_jsx(ContextActions, {\n actions: this.contextActions\n })]\n });\n }\n}\n_defineProperty(IrisGrid, \"contextType\", IrisGridThemeContext);\n_defineProperty(IrisGrid, \"minDebounce\", 150);\n_defineProperty(IrisGrid, \"maxDebounce\", 500);\n_defineProperty(IrisGrid, \"loadingSpinnerDelay\", 800);\n_defineProperty(IrisGrid, \"defaultProps\", {\n children: null,\n advancedFilters: EMPTY_MAP,\n advancedSettings: EMPTY_MAP,\n alwaysFetchColumns: EMPTY_ARRAY,\n conditionalFormats: EMPTY_ARRAY,\n customColumnFormatMap: EMPTY_MAP,\n isFilterBarShown: false,\n applyInputFiltersOnInit: false,\n movedColumns: EMPTY_ARRAY,\n movedRows: EMPTY_ARRAY,\n inputFilters: EMPTY_ARRAY,\n customFilters: EMPTY_ARRAY,\n onCreateChart: undefined,\n onColumnSelected: () => undefined,\n onDataSelected: () => undefined,\n onError: () => undefined,\n onStateChange: () => undefined,\n onAdvancedSettingsChange: () => undefined,\n partitions: undefined,\n partitionConfig: undefined,\n quickFilters: EMPTY_MAP,\n selectDistinctColumns: EMPTY_ARRAY,\n sorts: EMPTY_ARRAY,\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: EMPTY_ARRAY,\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n rollupConfig: undefined,\n userColumnWidths: EMPTY_MAP,\n userRowHeights: EMPTY_MAP,\n onSelectionChanged: () => undefined,\n isSelectingColumn: false,\n isSelectingPartition: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n columnSelectionValidator: null,\n columnAllowedCursor: null,\n columnNotAllowedCursor: null,\n copyCursor: 'copy',\n name: 'table',\n onlyFetchVisibleColumns: true,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: null,\n invertSearchColumns: true,\n onContextMenu: () => EMPTY_ARRAY,\n pendingDataMap: EMPTY_MAP,\n getDownloadWorker: DownloadServiceWorkerUtils.getServiceWorker,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n truncateNumbersWithPound: false,\n showEmptyStrings: true,\n showNullStrings: true,\n formatter: EMPTY_ARRAY,\n decimalFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string\n }),\n integerFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string\n })\n },\n canCopy: true,\n canDownloadCsv: true,\n frozenColumns: null,\n theme: null,\n canToggleSearch: true,\n mouseHandlers: EMPTY_ARRAY,\n keyHandlers: EMPTY_ARRAY\n});\nexport default IrisGrid;\n//# sourceMappingURL=IrisGrid.js.map"],"names":["_defineProperty","obj","key","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","log","Log","AdvancedFilterCreatorFilterItem","PureComponent","columnType","filterType","TableUtils","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","getLabelForBooleanFilter","e","props","memoizeOne","column","operation","timeZone","tableUtils","_value","filterTypes","selectedType","_this$typeDropdown","prevProps","eventTargetValue","onChange","event","onDelete","formatter","showValueInput","typeOptionElements","isValid","i","_type","label","element","_jsx","_jsxs","Select","typeDropdown","classNames","Button","vsTrash","AdvancedFilterCreatorFilterItem$1","AdvancedFilterCreatorSelectValueList","values","v","selectedValues","dh","table","filters","invertSelection","itemIndex","selectedIndex","isSelected","offset","items","visibleItemIndex","top","bottom","data","r","row","displayValue","itemCount","item","isLoading","viewportSize","topRow","bottomRow","SelectValueList","list","FadeTransition","LoadingSpinner","AdvancedFilterCreatorSelectValueList$1","AdvancedFilterCreatorSelectValue","prevState","searchTable","searchText","count","formattedCount","formattedTableSize","prefix","searchTablePromise","error","filter","showSearch","columnName","displayedValuesText","placeholderText","AdvancedFilterCreatorSelectValue$1","AdvancedFilterCreator","nanoid","_options$filterItems$","_options$filterItems","memoize","React","model","options","filterOperators","filterItems","_ref","columnIndex","assertNotNull","isSortable","index","valuesTable","_valuesTable$columns$","sort","PromiseUtils","_this$focusTrapContai","_this$focusTrapContai2","_this$focusTrapContai3","_this$focusTrapContai4","inputs","FilterOperator","operator","assertFilterOperatorValue","filterIndex","addToExisting","ContextActionUtils","onDone","filterItem","direction","onSortChange","onFilterChange","_ref2","operators","_this","sortDirection","valuesTableError","isValuesTableAvailable","isBoolean","isDateType","filterItemElements","_loop","filterOperator","isAndFilter","operatorElement","showAddFilterItem","addFilterItem","FontAwesomeIcon","dhNewCircleLargeFilled","dhSortAmountDown","_Fragment","AdvancedFilterCreator$1","makeTernaryFormatRule","config","prevRule","styleDBString","getStyleDBString","conditionDBString","getConditionDBString","makeRowFormatColumn","rule","makeColumnFormatColumn","col","FormatterType","NumberCondition","StringCondition","DateCondition","BooleanCondition","CharCondition","FormatStyleType","getLabelForStyleType","option","getBackgroundForStyleConfig","type","customConfig","getColorForStyleConfig","color","bg","getNumberConditionText","start","end","getTextForNumberCondition","getStringConditionText","getTextForStringCondition","getDateConditionText","getTextForDateCondition","getBooleanConditionText","getTextForBooleanCondition","getCharConditionText","getTextForCharCondition","getLabelForNumberCondition","condition","getLabelForStringCondition","getLabelForDateCondition","getLabelForBooleanCondition","getLabelForCharCondition","getDefaultConditionForType","getDefaultValueForType","getConditionConfig","getDefaultConditionConfigForType","getDefaultStyleConfig","getShortLabelForStringCondition","getShortLabelForDateCondition","getShortLabelForBooleanCondition","getShortLabelForCharCondition","getShortLabelForNumberCondition","getShortLabelForConditionType","getFormatColumns","columns","rules","result","rowFormatConfig","columnFormatConfigMap","_ref3","formatterType","name","prevFormatColumn","formatColumn","isDateConditionValid","dateTimeString","rest","tzCode","DateUtils","isSupportedColumn","_ref4","IrisGridBottomBar","animation","children","className","isShown","onClick","onEntering","onEntered","onExiting","onExited","CSSTransition","ThemeExport","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","pendingDataErrors","pendingDataMap","_onExited","isSuccessShown","setIsSuccessShown","useState","wasSuccessShown","setWasSuccessShown","successTimeout","useRef","prevIsSaving","usePrevious","errorMessage","useMemo","useEffect","pendingRowCount","commitIcon","vsPass","vsWarning","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","_asyncToGenerator","fn","self","args","err","isCopyRangesOperation","copyOperation","isCopyHeaderOperation","IrisGridCopyHandler","Component","copyState","rowCount","buttonState","ranges","GridRange","text","_this2","copyToClipboard","_this3","columnDepth","movedColumns","modelIndex","GridUtils","copyText","includeHeaders","userColumnWidths","_movedColumns","formatValues","hiddenColumns","IrisGridUtils","modelRanges","subtractRanges","formatValue","CanceledPromiseError","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","IrisGridCopyHandler$1","FilterInputField","debounceMs","debounce","_this$inputField","_this$inputField2","initialValue","isChanged","setGridFocus","defocusInput","_this$inputField3","relatedTarget","backward","onTab","onContextMenu","style","isAdvancedFilterSet","onAdvancedFiltersTriggered","inputField","dhFilterFilled","vsFilter","FilterInputField$1","CopyCellKeyHandler","KeyHandler","irisGrid","grid","mouseX","mouseY","gridPoint","CopyCellKeyHandler$1","CopyKeyHandler","selectedRanges","CopyKeyHandler$1","ReverseKeyHandler","IrisGridShortcuts","reverseType","ReverseKeyHandler$1","ClearFilterKeyHandler","ClearFilterKeyHandler$1","IrisGridCellOverflowMouseHandler","GridMouseHandler","point","x","y","renderer","state","metrics","context","theme","rendererState","left","width","height","_this$getButtonPositi","overflowButtonTooltipProps","newProps","deepEqual","IrisGridCellOverflowMouseHandler$1","IrisGridColumnSelectMouseHandler","isSelectingColumn","tableColumn","columnSelectionValidator","modelColumn","columnAllowedCursor","columnNotAllowedCursor","IrisGridColumnSelectMouseHandler$1","IrisGridColumnTooltipMouseHandler","tooltip","popper","columnHeaderDepth","shownColumnTooltip","newTooltip","IrisGridColumnTooltipMouseHandler$1","CustomFormatAction","forwardedProps","closeMenu","parentContextMenu","DOMUtils","formatString","placeholder","title","description","iconElement","Tooltip","focusInput","CustomFormatAction$1","FormatContextMenuUtils","selectedFormat","TableColumnFormatter","format","group","_format$formatString","FormatContextMenuUtils$1","DateTimeFormatContextMenu","currentTime","formatItems","presetFormatOptions","DateTimeColumnFormatter","defaultOption","DateTimeFormatContextMenu$1","DecimalFormatContextMenu","onCustomFormatChange","DecimalColumnFormatter","defaultFormatOption","isCustomSelected","customFormat","customFormatOption","newCustomFormat","DecimalFormatContextMenu$1","IntegerFormatContextMenu","IntegerColumnFormatter","IntegerFormatContextMenu$1","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","source","DEBOUNCE_UPDATE_FORMAT","CONTEXT_MENU_DATE_FORMAT","MAX_MULTISELECT_ROWS","IrisGridContextMenuHandler","columnFilter","newColumnFilter","filterText","newFilterText","command","cellValue","len","GridRenderer","visibleIndex","actions","quickFilters","advancedFilters","searchFilter","filterIconColor","filterBarActiveColor","contextMenuSortIconColor","contextMenuReverseIconColor","modelSort","columnSort","hasReverse","isColumnHidden","columnWidth","isColumnFreezable","isExpandableGridModel","isColumnFrozen","isColumnSortable","vsRemove","SHORTCUTS","_model$textForColumnH","_this$numberFormatAct","rowIndex","canCopy","modelRow","sourceCell","sourceColumn","sourceRow","expandingColumn","cellText","gotoRow","getSelectedRanges","settings","lastRow","lastRowSize","assertNotNaN","_lastRow$endRow","assertNotEmpty","snapshot","snapshotValues","filterMenu","ContextActions","dateFilterFormatter","previewFilterFormatter","filterValue","isFilterBarShown","columnHeaderHeight","gridY","columnHeaderMaxDepth","valueText","clearFilterRange","GLOBAL_SHORTCUTS","isEditableGridModel","isDeletableGridModel","formatOptions","vsCheck","_loop2","quickFilter","filterValues","valueDescription","newQuickFilter","toFilterText","_TableUtils$escapeQui","TextUtils","prev","curr","valueDesc","acc","maxValue","a","b","minValue","maxFilterValue","minFilterValue","maxValueText","minValueText","maxDateText","minDateText","maxPreviewText","minPreviewText","valueFilter","sortActions","additionalSortActions","isAbs","IrisGridContextMenuHandler$1","IrisGridCopyCellMouseHandler","_grid","IrisGridCopyCellMouseHandler$1","IrisGridDataSelectMouseHandler","IrisGridDataSelectMouseHandler$1","IrisGridFilterMouseHandler","hoverAdvancedFilter","newHoverAdvancedFilter","IrisGridFilterMouseHandler$1","IrisGridRowTreeMouseHandler","GridRowTreeMouseHandler","depth","expandCellTooltipProps","isRowExpanded","IrisGridRowTreeMouseHandler$1","IrisGridSortMouseHandler","IrisGridSortMouseHandler$1","PendingMouseHandler","wheelEvent","rowHeight","deltaY","PendingMouseHandler$1","IrisGridTokenMouseHandler","modelRows","modelColumns","getOrThrow","renderType","cellRenderer","isTokenBoxCellRenderer","right","renderState","tokensInCell","isLinkToken","translatedTokenBox","_left","_right","_top","_bottom","isUserHoveringLink","linkHoverTooltipProps","href","IrisGridTokenMouseHandler$1","ToastBottomBar","setIsShown","timeout","prevChildren","startTimer","useCallback","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","sorts","customColumns","alwaysFetchColumns","rollupConfig","totalsConfig","selectDistinctColumns","EMPTY_ARRAY","EMPTY_MAP","frozenColumns","formatColumns","columnHeaderGroups","partitionConfig","sortsForModel","isPartitionedGridModel","IrisGridModelUpdater$1","STATS_LABEL_OVERRIDES","ColumnStatistics","_STATS_LABEL_OVERRIDE","w","numRows","stats","onStatistics","statistics","_column$displayName","loading","showGenerateStatistics","statisticElements","formattedValue","statisticElement","rowCountLabel","formattedRowCount","CopyButton","dhSortSlash","dhFreeze","vsLock","dhRefresh","ColumnStatistics$1","CrossColumnSearch","searchValue","selectedColumns","filterColumns","_this$searchField$cur","c","update","isConfigureColumnsShown","hasAllColumnsSelected","hasNoColumnsSelected","icon","dhSquareFilled","dhGearFilled","dhCheckSquare","vsCircleLargeFilled","dhWarningCircleFilled","dhRemoveSquareFilled","SearchInput","Popper","Checkbox","CrossColumnSearch$1","IrisGridPartitionSelector","memoizee","Pending","keysTable","keyTable","t","partitionTables","_","_x","_x2","partitionFilters","prevConfig","newPartitionConfig","selectedValue","newPartitions","tCopy","partition","partitionColumn","newConfig","_data$rows$0$get","mode","partitions","previousFilter","previousPartition","previousColumn","partitionFilter","partitionSelectors","Picker","vsChevronRight","vsKey","vsMerge","IrisGridPartitionSelector$1","SelectDistinctBuilder","filteredInputs","val","prevInputs","inputIndex","_ref5","disableAddButton","SelectDistinctBuilder$1","AdvancedSettingsMenu","_onChange","Menu","isOn","AdvancedSettingsType","DEFAULT_CALLBACK","getRuleValue","getRuleTitle","ConditionalFormattingMenu","onCreate","onSelect","handleRuleClick","handleDeleteClick","updatedRules","handleDragHandlerClick","handleDragEnd","DragUtils","sourceIndex","destinationIndex","sourceInput","DragDropContext","Droppable","provided","Draggable","vsGripper","numberConditionOptions","stringConditions","dateConditions","booleanConditions","charConditions","isNumberConditionValid","startValue","endValue","getNumberInputs","selectedCondition","handleValueChange","handleStartValueChange","handleEndValueChange","conditionValue","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","ConditionEditor","selectedColumnType","prevColumnType","setPrevColumnType","setCondition","setValue","setStartValue","setEndValue","conditions","handleConditionChange","conditionInputs","DEFAULT_BACKGROUND","DEFAULT_COLOR_LIGHT","DEFAULT_COLOR_DARK","DEFAULT_DROPDOWN_WIDTH","StyleEditor","_config$customConfig$","_config$customConfig","styleType","setStyleType","background","setBackground","setShown","dropdownWidth","setDropdownWidth","csContainer","handleBackgroundChange","handleMenuClosed","handleToggleClick","updateDropdownWidth","styleOptions","ColorUtils","renderOptions","optionArray","renderMenuElement","DropdownMenu","makeDefaultConfig","ColumnFormatEditor","_columns$find","selectedColumn","setColumn","conditionConfig","setConditionConfig","conditionValid","setConditionValid","selectedStyle","setStyle","handleColumnChange","newColumn","updatedConditionConfig","handleStyleChange","updatedStyleConfig","columnNames","ComboBox","RowFormatEditor","getFormatterTypeIcon","FormatColumnWhereIcon","FormatRowWhereIcon","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","_defaultRule$type","originalColumns","onUpdate","onCancel","defaultRule","selectedFormatter","setFormatter","setRule","setIsValid","handleCancel","handleSave","handleFormatterChange","handleRuleChange","ruleConfig","isRuleValid","updatedRule","IrisGridCellOverflowModal","_editorRef$current$ge","_editorRef$current2","isOpen","onClose","isOpened","setIsOpened","setHeight","showLineNumbers","setShowLineNumbers","isFormatted","setIsFormatted","canFormat","setCanFormat","editorRef","toggleLineNumbers","formatAsJSON","_editorRef$current","autoSetLineNumbers","_editor$getModel$getL","_editor$getModel","editor","handleToggle","onEditorInitialized","contentHeight","Modal","ModalHeader","vsListOrdered","vsJson","ModalBody","Editor","isIrisGridProxyModel","DEFAULT_FORMAT_STRING","GotoRow","forwardRef","ref","gotoRowError","gotoValueError","onGotoRowSubmit","_onEntered","onGotoRowNumberChanged","gotoValueSelectedColumnName","gotoValue","gotoValueFilter","onGotoValueSelectedColumnNameChanged","onGotoValueSelectedFilterChanged","onGotoValueChanged","onGotoValueSubmit","gotoRowInputRef","gotoValueInputRef","isGotoRowActive","setIsGotoRowActive","gotoRowInputId","handleGotoValueNumberKeyDown","onGotoValueInputChanged","handleGotoValueKeySubmit","normalizedType","useImperativeHandle","_gotoRowInputRef$curr","selectInput","_gotoRowInputRef$curr2","_gotoValueInputRef$cu","renderValueInput","DateTimeInput","FilterType","vsClose","vsArrowUp","vsArrowDown","GotoRow$1","VIEWPORT_LOADING_DELAY","UPDATE_DOWNLOAD_THROTTLE","SET_FILTER_DEBOUNCE","SEEK_ROW_DEBOUNCE","SET_CONDITIONAL_FORMAT_DEBOUNCE","DEFAULT_AGGREGATION_SETTINGS","UNFORMATTED_DATE_PATTERN","isEmptyConfig","aggregationSettings","IrisGrid","_model$layoutHints","_model$layoutHints$hi","_model$columns$0$name","_model$columns$","advancedFilterOptions","isChartBuilderAvailable","isCustomColumnsAvailable","isFormatColumnsAvailable","isRollupAvailable","isTotalsAvailable","isSelectDistinctAvailable","isExportAvailable","toggleFilterBarAction","toggleSearchBarAction","toggleGotoRowAction","showSearchBar","canDownloadCsv","canToggleSearch","showGotoRow","hasAdvancedSettings","optionItems","OptionType","dhGraphLineUp","dhEye","vsEdit","vsSplitHorizontal","dhTriangleDownSquare","vsSymbolOperator","vsRuby","vsCloudDownload","vsTools","vsSearch","vsReply","metricCalculator","aggregations","aggregationMap","selected","invert","AggregationUtils","operationMap","_operationMap$name","newOperations","o","rulesParam","preview","editIndex","_config$columns$lengt","_config$columns","agg","operationOrder","AggregationOperation","hoverSelectColumn","loadingScrimProgress","isMenuShown","customFilters","contextTheme","isEditable","floatingRowCount","_theme$rowFooterWidth","defaultTheme","createDefaultIrisGridTheme","rowFooterWidth","keyHandlers","mouseHandlers","rendererProp","IrisGridRenderer","floatingLeftColumnCount","floatingRightColumnCount","draggingRange","floatingColumns","_i","_i2","columnSet","selectedSearchColumns","invertSearchColumns","throttle","loadingSpinnerShown","conditionalFormatPreview","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","TableCsvExporter","wrapperStyle","popperOptions","expandTooltipDisplayValue","isExpandAllAvailable","linkHoverDisplayValue","_aggregationSettings","conditionalFormats","customColumnFormatMap","_isFilterBarShown","isSelectingPartition","_model","movedColumnsProp","movedRowsProp","_rollupConfig","_userColumnWidths","userRowHeights","_showSearchBar","_searchValue","_selectedSearchColumns","_invertSearchColumns","_advancedFilters","_quickFilters","_dh","_keyHandlers","_mouseHandlers","movedRows","_metricCalculator","IrisGridMetricCalculator","searchColumns","_searchFilter","Formatter","inputFilters","changedInputFilters","inputFilter","_advancedSettings$get","advancedSettings","replaceExistingFilters","loadingScrimStartTime","loadingScrimFinishTime","now","totalTime","openOptions","isAggEditType","_this$grid$canvasWrap","_this$grid","rawValue","replaceExisting","newAdvancedFilters","newQuickFilters","_ref6","_ref7","_ref8","filterMap","_advancedSettings$get2","clearFiltersOnLinkerFilterUpdate","_ref9","filterList","combinedText","modelRange","clearRange","_ref10","_ref11","_ref12","_settings$defaultDeci","_settings$defaultInte","_settings$truncateNum","_settings$showEmptySt","_settings$showNullStr","forceUpdate","globalColumnFormats","FormatterUtils","dateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","isColumnFormatChanged","isDateFormattingChanged","isDecimalFormattingChanged","isIntegerFormattingChanged","isTruncateNumbersChanged","isShowEmptyStringsChanged","isShowNullStringsChanged","updatedFormats","_this$globalColumnFor","mergedColumnFormats","applyInputFiltersOnInit","inputFiltersWithValues","resolved","_data","_row$get","newPartition","_value2","loadingText","resetRanges","loadingCancelShown","loadingBlocksGrid","_this$gridWrapper$get","_this$gridWrapper","minScrimTransitionTime","maxScrimTransitionTime","scrimTransitionTime","IrisGridModel","_this$grid2","columnCount","rightVisible","lastLeft","_this$grid3","_this$grid4","_this$grid5","metricState","newLeft","columnVisibleIndex","_this$grid6","allFrozenColumns","newMovedColumns","modelIndexes","isVisible","_this$grid7","defaultWidth","calculatedWidth","_model$layoutHints$fr","_model$layoutHints2","_this$grid8","onError","loadingMessage","_this$grid9","entries","currentSorts","_this$grid10","_this$grid11","_this$grid12","focusIndex","_model2","_column","_this$grid13","_model$layoutHints3","_dh$SearchDisplayMode","_dh$SearchDisplayMode2","searchDisplayMode","_this$crossColumnRef","_this$crossColumnRef2","_this$grid14","_this$grid15","_this$grid16","isGotoShown","_this$gotoRowRef$curr","cursorRow","cursorColumn","_document","_document$activeEleme","pendingSavePromise","containsGridCellInputField","_this3$grid","ValidationError","newPendingSavePromise","_this4","onColumnSelected","dataMap","onDataSelected","_this5","groupedColumns","isExpandable","isGrouped","_this$grid17","oldSort","newSort","_this$grid18","_this$filterInputRef","focusedFilterBarColumn","_this$filterInputRef2","onCreateChart","_ref13","_this$grid19","prevCustomColumnFormatMap","columnFormattingRule","_ref14","newOptions","_ref15","isMissingPartitionError","_this$grid20","_this$grid$state","_this$grid21","selectionEndRow","bottomViewport","bottomNonFloating","_this$grid22","onSelectionChanged","onChangeApplied","_this$grid23","oldCustomColumns","customColumn","removedColumnNames","newSorts","newSelectDistinctColumns","isReady","_this$grid24","_this$grid25","aggregation","_ref16","_rollupConfig$columns","_rollupConfig$columns2","fileName","frozenTable","tableSubscription","snapshotRanges","includeColumnHeaders","useUnformattedValues","_ref17","newAggregations","inputString","_arguments","_this6","_this6$grid","isBackwards","selectedColumnName","gotoValueSelectedFilter","searchFromRow","isContains","isIgnoreCase","_this6$grid2","columnDataType","startDate","inputValue","_this$tableSaver","irisGridState","gridState","onStateChange","_this$gridWrapper2","gridRect","popperMargin","allColumnXs","allColumnWidths","columnX","clamp","rowNumber","rowInt","_this$grid26","_this$grid27","_this$grid28","boundedLeft","boundedWidth","virtualReference","_this$tooltip","_this$grid29","prevColumnName","gotoValueManuallyChanged","_index","_column2","prevColumn","_value3","_rollupConfig$columns3","_rollupConfig$columns4","_this7","_this$grid31","_this$grid31$state$dr","_openOptions","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","shownAdvancedFilter","conditionalFormatEditIndex","isTableDownloading","selectedAggregation","pendingSaveError","toastMessage","showOverflowModal","overflowText","stateOverride","isRollup","focusField","gridX","_theme$filterBarHeigh","_theme$filterBarHeigh2","_this$grid30","fieldWidth","fieldHeight","_value4","advancedFilter","isBarFiltered","loadingElement","loadingStatus","_gridY","columnTooltip","_this$tooltip2","filterBar","_gridX","_gridY2","visibleColumns","_allColumnXs","_allColumnWidths","filterBarHeight","isFilterable","_y","_style","_advancedFilter","isFilterSet","isFilterVisible","_this7$grid","advancedFilterMenus","_gridX2","_visibleColumns","_allColumnXs2","_allColumnWidths2","_loop3","_i3","xColumnHeader","xFilterBar","_style2","_modelColumn","_column3","_advancedFilter2","isSortDirection","_ret","openOptionsStack","ChartBuilder","VisibilityOrderingBuilder","CustomColumnBuilder","RollupRows","Aggregations","AggregationEdit","Grid","vsMenu","TableSaver","tableSaver","SlideTransition","Stack","Page","IrisGridThemeContext","DownloadServiceWorkerUtils","PropTypes"],"mappings":"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"}
1
+ {"version":3,"file":"IrisGrid-8471fc12.js","sources":["../../../iris-grid/dist/AdvancedFilterCreatorFilterItem.js","../../../iris-grid/dist/AdvancedFilterCreatorSelectValueList.js","../../../iris-grid/dist/AdvancedFilterCreatorSelectValue.js","../../../iris-grid/dist/AdvancedFilterCreator.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js","../../../iris-grid/dist/IrisGridBottomBar.js","../../../iris-grid/dist/PendingDataBottomBar.js","../../../iris-grid/dist/IrisGridCopyHandler.js","../../../iris-grid/dist/FilterInputField.js","../../../iris-grid/dist/key-handlers/CopyCellKeyHandler.js","../../../iris-grid/dist/key-handlers/CopyKeyHandler.js","../../../iris-grid/dist/key-handlers/ReverseKeyHandler.js","../../../iris-grid/dist/key-handlers/ClearFilterKeyHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js","../../../iris-grid/dist/format-context-menus/CustomFormatAction.js","../../../iris-grid/dist/format-context-menus/FormatContextMenuUtils.js","../../../iris-grid/dist/format-context-menus/DateTimeFormatContextMenu.js","../../../iris-grid/dist/format-context-menus/DecimalFormatContextMenu.js","../../../iris-grid/dist/format-context-menus/IntegerFormatContextMenu.js","../../../iris-grid/dist/mousehandlers/IrisGridContextMenuHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridCopyCellMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridDataSelectMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridFilterMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridRowTreeMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridSortMouseHandler.js","../../../iris-grid/dist/mousehandlers/PendingMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridTokenMouseHandler.js","../../../iris-grid/dist/ToastBottomBar.js","../../../iris-grid/dist/IrisGridModelUpdater.js","../../../iris-grid/dist/ColumnStatistics.js","../../../iris-grid/dist/CrossColumnSearch.js","../../../iris-grid/dist/IrisGridPartitionSelector.js","../../../iris-grid/dist/sidebar/SelectDistinctBuilder.js","../../../iris-grid/dist/sidebar/AdvancedSettingsMenu.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/StyleEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/ColumnFormatEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/RowFormatEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js","../../../iris-grid/dist/IrisGridCellOverflowModal.js","../../../iris-grid/dist/GotoRow.js","../../../iris-grid/dist/IrisGrid.js"],"sourcesContent":["function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { Button, Select } from '@deephaven/components';\nimport { getLabelForBooleanFilter, getLabelForDateFilter, getLabelForNumberFilter, getLabelForTextFilter } from '@deephaven/filters';\nimport { vsTrash } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport classNames from 'classnames';\nimport memoizeOne from 'memoize-one';\nimport \"./AdvancedFilterCreatorFilterItem.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreatorFilterItem');\nexport class AdvancedFilterCreatorFilterItem extends PureComponent {\n static getLabelForFilter(columnType, filterType) {\n try {\n if (TableUtils.isNumberType(columnType) || TableUtils.isCharType(columnType)) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getLabelForBooleanFilter(filterType);\n }\n throw new Error(\"Unrecognized column type: \".concat(columnType));\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"typeDropdown\", void 0);\n _defineProperty(this, \"getCachedIsValid\", memoizeOne((column, operation, value, timeZone, tableUtils) => {\n try {\n // We don't want to show an error for an empty value\n return !value || tableUtils.makeAdvancedValueFilter(column, operation, value, timeZone) != null;\n } catch (e) {\n return false;\n }\n }));\n this.handleDelete = this.handleDelete.bind(this);\n this.handleTypeChange = this.handleTypeChange.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.typeDropdown = null;\n var {\n value: _value = '',\n filterTypes,\n selectedType = filterTypes[0]\n } = props;\n this.state = {\n selectedType,\n value: _value\n };\n }\n componentDidMount() {\n var _this$typeDropdown;\n (_this$typeDropdown = this.typeDropdown) === null || _this$typeDropdown === void 0 ? void 0 : _this$typeDropdown.focus();\n }\n componentDidUpdate(prevProps) {\n var {\n value,\n selectedType\n } = this.props;\n if (selectedType !== undefined && prevProps.selectedType !== selectedType) {\n this.setState({\n selectedType\n });\n }\n if (value !== undefined && prevProps.value !== value) {\n this.setState({\n value\n });\n }\n }\n handleTypeChange(eventTargetValue) {\n var selectedType = eventTargetValue;\n log.debug2('typeChange', selectedType);\n this.setState({\n selectedType\n });\n var {\n onChange\n } = this.props;\n var {\n value\n } = this.state;\n if (value != null && value.length > 0) {\n // Don't send an update unless there's already a value entered\n onChange(selectedType, value);\n }\n }\n handleValueChange(event) {\n log.debug2('valueChange');\n var {\n value\n } = event.target;\n this.setState({\n value\n });\n var {\n onChange\n } = this.props;\n var {\n selectedType\n } = this.state;\n if (selectedType != null) {\n // Don't send an update unless they've already selected a type\n onChange(selectedType, value);\n }\n }\n handleDelete() {\n log.debug('delete');\n var {\n onDelete\n } = this.props;\n onDelete();\n }\n render() {\n var {\n column,\n filterTypes,\n formatter,\n tableUtils\n } = this.props;\n var {\n selectedType,\n value\n } = this.state;\n var showValueInput = !TableUtils.isBooleanType(column.type);\n var typeOptionElements = [];\n var isValid = this.getCachedIsValid(column, selectedType, value, formatter.timeZone, tableUtils);\n for (var i = 0; i < filterTypes.length; i += 1) {\n var _type = filterTypes[i];\n var label = AdvancedFilterCreatorFilterItem.getLabelForFilter(column.type, _type);\n var element = /*#__PURE__*/_jsx(\"option\", {\n value: _type,\n children: label\n }, _type);\n typeOptionElements.push(element);\n }\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-creator-filter-item\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col\",\n children: /*#__PURE__*/_jsx(Select, {\n className: \"form-control\",\n value: selectedType,\n onChange: this.handleTypeChange,\n ref: typeDropdown => {\n this.typeDropdown = typeDropdown;\n },\n children: typeOptionElements\n })\n }), showValueInput && /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"input-group\",\n children: /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: classNames('form-control', {\n error: !isValid\n }),\n placeholder: \"Enter value\",\n value: value,\n onChange: this.handleValueChange\n })\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col-1 px-0\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"w-100 h-100 p-0 m-0\",\n onClick: this.handleDelete,\n icon: vsTrash,\n tooltip: \"Remove Filter\"\n })\n })]\n })\n });\n }\n}\nexport default AdvancedFilterCreatorFilterItem;\n//# sourceMappingURL=AdvancedFilterCreatorFilterItem.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { LoadingSpinner, SelectValueList, FadeTransition } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreatorSelectValueList');\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList extends PureComponent {\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, values) {\n for (var i = 0; i < values.length; i += 1) {\n var v = values[i];\n if (v === value || v != null && v.valueOf != null && value != null && value.valueOf != null && v.valueOf() === value.valueOf()) {\n return i;\n }\n }\n return -1;\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"list\", void 0);\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 var {\n selectedValues,\n dh\n } = this.props;\n this.dh = dh;\n this.list = null;\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true\n };\n }\n componentDidMount() {\n var {\n table\n } = this.props;\n if (table) this.startListening(table);\n }\n componentDidUpdate(prevProps) {\n var {\n filters,\n invertSelection,\n selectedValues,\n table\n } = 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 if (prevProps.invertSelection !== invertSelection) {\n this.setState({\n selectedValues: []\n }, this.handleSelectionUpdate);\n }\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({\n selectedValues\n }, this.handleSelectionUpdate);\n }\n if (prevProps.filters !== filters) {\n table === null || table === void 0 ? void 0 : table.applyFilter(filters);\n this.resetViewport();\n }\n }\n componentWillUnmount() {\n var {\n table\n } = this.props;\n if (table) this.stopListening(table);\n }\n handleSelect(itemIndex, value) {\n var {\n invertSelection\n } = this.props;\n var {\n selectedValues\n } = this.state;\n selectedValues = [...selectedValues];\n var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n var isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n var {\n offset\n } = this.state;\n var {\n items\n } = this.state;\n items = [...items];\n var visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n this.setState({\n items,\n selectedValues\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n handleViewportChange(top, bottom) {\n this.updateViewport(top, bottom);\n }\n handleSelectionUpdate() {\n this.updateItemSelection();\n }\n handleTableUpdate(event) {\n var {\n table,\n formatter\n } = this.props;\n if (!table) return;\n var data = event.detail;\n var {\n offset\n } = data;\n var items = [];\n var column = table.columns[0];\n for (var r = 0; r < data.rows.length; r += 1) {\n var row = data.rows[r];\n var value = row.get(column);\n var displayValue = void 0;\n if (value == null) {\n displayValue = /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"null\"\n });\n } else if (value === '') {\n displayValue = /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"empty\"\n });\n } else {\n displayValue = formatter.getFormattedString(value, column.type, column.name);\n }\n var isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected\n });\n }\n log.debug2('Received table update:', offset, items.length);\n var itemCount = table.size;\n this.setState({\n itemCount,\n items,\n offset,\n isLoading: false\n });\n }\n isValueSelected(value) {\n var {\n invertSelection\n } = this.props;\n var {\n selectedValues\n } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n startListening(table) {\n table.addEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n stopListening(table) {\n table.removeEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n resetViewport() {\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 updateItemSelection() {\n var {\n items\n } = this.state;\n items = [...items];\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n var {\n value\n } = item;\n item.isSelected = this.isValueSelected(value);\n }\n this.setState({\n items\n });\n }\n updateViewport(top, bottom) {\n var isLoading = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n table\n } = this.props;\n if (table == null) {\n return;\n }\n if (isLoading) {\n this.setState({\n isLoading: true\n });\n }\n var viewportSize = bottom - top + 1;\n var topRow = Math.max(0, top - viewportSize * 3);\n var bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow);\n }\n render() {\n var {\n offset,\n isLoading,\n items,\n itemCount\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"select-value-list-wrapper\",\n children: [/*#__PURE__*/_jsx(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 }), /*#__PURE__*/_jsx(FadeTransition, {\n in: isLoading,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"loading-list\",\n children: /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-large\"\n })\n })\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreatorSelectValueList, \"defaultProps\", {\n invertSelection: true,\n selectedValues: [],\n onChange: () => undefined\n});\nexport default AdvancedFilterCreatorSelectValueList;\n//# sourceMappingURL=AdvancedFilterCreatorSelectValueList.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Button, FadeTransition } from '@deephaven/components';\nimport AdvancedFilterCreatorSelectValueList from \"./AdvancedFilterCreatorSelectValueList.js\";\nimport \"./AdvancedFilterCreatorSelectValue.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nclass AdvancedFilterCreatorSelectValue extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"searchTablePromise\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"updateFilterTimer\", void 0);\n this.handleSelectAllClick = this.handleSelectAllClick.bind(this);\n this.handleClearAllClick = this.handleClearAllClick.bind(this);\n this.handleListChange = this.handleListChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUpdateFilterTimeout = this.handleUpdateFilterTimeout.bind(this);\n var {\n dh,\n invertSelection,\n selectedValues\n } = props;\n this.tableUtils = new TableUtils(dh);\n this.state = {\n filters: [],\n invertSelection,\n selectedValues,\n searchText: ''\n };\n }\n componentDidMount() {\n this.initSearchTable();\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n invertSelection,\n selectedValues,\n table\n } = this.props;\n if (prevProps.table !== table) {\n this.initSearchTable();\n }\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({\n invertSelection\n });\n }\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({\n selectedValues\n });\n }\n var {\n table: searchTable,\n searchText\n } = this.state;\n if (searchTable !== prevState.table) {\n if (prevState.table != null) {\n prevState.table.close();\n }\n if (searchTable != null) {\n this.startUpdateFilterTimer();\n }\n }\n if (searchText !== prevState.searchText) {\n this.startUpdateFilterTimer();\n }\n }\n componentWillUnmount() {\n var {\n table\n } = this.state;\n if (table != null) {\n table.close();\n }\n this.searchTablePromise = undefined;\n this.stopUpdateFilterTimer();\n }\n getColumnName() {\n var {\n table\n } = this.props;\n if (table != null) {\n return table.columns[0].name;\n }\n return '';\n }\n getDisplayedValuesCount() {\n var {\n invertSelection,\n selectedValues,\n table\n } = this.state;\n if (table == null) {\n return null;\n }\n if (invertSelection) {\n return table.totalSize - selectedValues.length;\n }\n return selectedValues.length;\n }\n getDisplayedValueText() {\n var count = this.getDisplayedValuesCount();\n var {\n table\n } = this.state;\n var {\n formatter\n } = this.props;\n if (count != null && table != null) {\n var formattedCount = formatter.getFormattedString(count, 'long');\n var formattedTableSize = formatter.getFormattedString(table.totalSize, 'long');\n var prefix = '';\n if (count < 1000000) {\n prefix = 'Displaying ';\n }\n return \"\".concat(prefix).concat(formattedCount, \" of \").concat(formattedTableSize);\n }\n return null;\n }\n initSearchTable() {\n var {\n table\n } = this.props;\n if (table == null) {\n return;\n }\n var searchTablePromise = table.copy();\n this.searchTablePromise = searchTablePromise;\n this.searchTablePromise.then(searchTable => {\n if (this.searchTablePromise === searchTablePromise) {\n this.setState({\n table: searchTable\n });\n this.searchTablePromise = undefined;\n } else {\n searchTable.close();\n }\n });\n }\n handleListChange(selectedValues, invertSelection) {\n this.setState({\n selectedValues,\n invertSelection\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n handleSearchChange(event) {\n var searchText = event.target.value;\n this.setState({\n searchText\n });\n }\n handleSelectAllClick() {\n this.resetSelection(true);\n }\n handleClearAllClick() {\n this.resetSelection(false);\n }\n handleUpdateFilterTimeout() {\n this.updateFilterTimer = undefined;\n this.updateTableFilter();\n }\n resetSelection(invertSelection) {\n var selectedValues = [];\n this.setState({\n invertSelection,\n selectedValues\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n startUpdateFilterTimer() {\n this.stopUpdateFilterTimer();\n this.updateFilterTimer = setTimeout(this.handleUpdateFilterTimeout, AdvancedFilterCreatorSelectValue.searchDebounceTime);\n }\n stopUpdateFilterTimer() {\n if (this.updateFilterTimer != null) {\n clearTimeout(this.updateFilterTimer);\n this.updateFilterTimer = undefined;\n }\n }\n updateTableFilter() {\n var {\n table,\n searchText\n } = this.state;\n var {\n timeZone\n } = this.props;\n var {\n tableUtils\n } = this;\n var column = table === null || table === void 0 ? void 0 : table.columns[0];\n var filters = [];\n if (column == null) {\n return;\n }\n var error;\n if (searchText.length > 0) {\n var filter = null;\n if (TableUtils.isCharType(column.type)) {\n // Just exact match for char\n filter = tableUtils.makeQuickFilter(column, searchText);\n } else if (TableUtils.isTextType(column.type)) {\n // case insensitive & contains search text\n filter = tableUtils.makeQuickFilter(column, \"~\".concat(searchText), timeZone);\n } else {\n // greater than or equal search for everything else\n // we may want to be smarter with some other types (like dates)\n filter = tableUtils.makeQuickFilter(column, \">=\".concat(searchText), timeZone);\n }\n if (filter != null) {\n filters.push(filter);\n } else {\n error = 'Invalid search text';\n }\n }\n this.setState({\n filters,\n error\n });\n }\n render() {\n var {\n error,\n filters,\n invertSelection,\n selectedValues,\n searchText,\n table\n } = this.state;\n var {\n dh,\n formatter,\n showSearch\n } = this.props;\n var columnName = this.getColumnName();\n var displayedValuesText = this.getDisplayedValueText();\n var placeholderText = columnName ? \"Find \".concat(columnName, \"...\") : '';\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator-select-value\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: showSearch ? 'form-group' : '',\n children: [/*#__PURE__*/_jsx(\"label\", {\n htmlFor: \"advanced-filter-creator-select-value-input\",\n children: \"Select Values\"\n }), showSearch && /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: classNames('form-control', {\n 'is-invalid': error != null\n }),\n id: \"advanced-filter-creator-select-value-input\",\n placeholder: placeholderText,\n value: searchText,\n onChange: this.handleSearchChange\n })]\n }), /*#__PURE__*/_jsx(AdvancedFilterCreatorSelectValueList, {\n dh: dh,\n table: table,\n filters: filters,\n invertSelection: invertSelection,\n selectedValues: selectedValues,\n formatter: formatter,\n onChange: this.handleListChange\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator-select-meta-row\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleSelectAllClick,\n children: \"Select All\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleClearAllClick,\n children: \"Clear\"\n })]\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: displayedValuesText != null,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"row-count-info\",\n children: displayedValuesText\n })\n })]\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreatorSelectValue, \"searchDebounceTime\", 250);\n_defineProperty(AdvancedFilterCreatorSelectValue, \"defaultProps\", {\n invertSelection: true,\n selectedValues: [],\n onChange: () => undefined,\n showSearch: true\n});\nexport default AdvancedFilterCreatorSelectValue;\n//# sourceMappingURL=AdvancedFilterCreatorSelectValue.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n// disabled for tab-index on focus traps, which are intentionally non-interactive\n\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport memoize from 'memoize-one';\nimport { Operator as FilterOperator, assertOperatorValue as assertFilterOperatorValue } from '@deephaven/filters';\nimport { dhSortAmountDown, dhNewCircleLargeFilled } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Button, ContextActionUtils } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { assertNotNull, PromiseUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport AdvancedFilterCreatorFilterItem from \"./AdvancedFilterCreatorFilterItem.js\";\nimport AdvancedFilterCreatorSelectValue from \"./AdvancedFilterCreatorSelectValue.js\";\nimport \"./AdvancedFilterCreator.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreator');\nclass AdvancedFilterCreator extends PureComponent {\n static makeFilterItem() {\n return {\n key: nanoid()\n };\n }\n constructor(props) {\n var _options$filterItems$, _options$filterItems;\n super(props);\n _defineProperty(this, \"focusTrapContainer\", void 0);\n _defineProperty(this, \"debounceTimeout\", void 0);\n _defineProperty(this, \"valuesTablePromise\", void 0);\n _defineProperty(this, \"getFilterTypes\", memoize(columnType => TableUtils.getFilterTypes(columnType)));\n this.handleAddAnd = this.handleAddAnd.bind(this);\n this.handleAddOr = this.handleAddOr.bind(this);\n this.handleChangeFilterOperator = this.handleChangeFilterOperator.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterDelete = this.handleFilterDelete.bind(this);\n this.handleSelectValueChange = this.handleSelectValueChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSortDown = this.handleSortDown.bind(this);\n this.handleSortUp = this.handleSortUp.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleFocusTrapStart = this.handleFocusTrapStart.bind(this);\n this.handleFocusTrapEnd = this.handleFocusTrapEnd.bind(this);\n this.handleUpdateTimeout = this.handleUpdateTimeout.bind(this);\n this.focusTrapContainer = /*#__PURE__*/React.createRef();\n var {\n model,\n column,\n options\n } = props;\n var {\n filterOperators,\n invertSelection,\n selectedValues\n } = options;\n\n // can be null or an empty array\n var filterItems = (_options$filterItems$ = (_options$filterItems = options.filterItems) === null || _options$filterItems === void 0 ? void 0 : _options$filterItems.map(_ref => {\n var {\n selectedType,\n value\n } = _ref;\n return {\n selectedType,\n value,\n key: nanoid()\n };\n })) !== null && _options$filterItems$ !== void 0 ? _options$filterItems$ : [];\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n if (filterOperators == null) {\n filterOperators = [];\n }\n if (invertSelection == null) {\n invertSelection = true;\n }\n if (selectedValues == null) {\n selectedValues = [];\n }\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var isSortable = model.isColumnSortable(columnIndex);\n this.state = {\n // Filter items\n filterItems,\n // And/Or between the filter items\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTableError: null,\n valuesTable: undefined,\n isSortable\n };\n }\n componentDidMount() {\n this.initValuesTable();\n }\n componentWillUnmount() {\n if (this.debounceTimeout != null) {\n clearTimeout(this.debounceTimeout);\n this.sendUpdate();\n }\n if (this.valuesTablePromise != null) {\n this.valuesTablePromise.cancel();\n }\n }\n getFilterChangeHandler(index) {\n return this.handleFilterChange.bind(this, index);\n }\n getFilterDeleteHandler(index) {\n return this.handleFilterDelete.bind(this, index);\n }\n initValuesTable() {\n var {\n model,\n column\n } = this.props;\n if (!model.isValuesTableAvailable) {\n log.debug('No values table for this model, just ignore');\n return;\n }\n this.valuesTablePromise = TableUtils.makeCancelableTablePromise(model.valuesTable(column));\n this.valuesTablePromise.then(valuesTable => {\n var _valuesTable$columns$;\n if ((_valuesTable$columns$ = valuesTable.columns[0].isSortable) !== null && _valuesTable$columns$ !== void 0 ? _valuesTable$columns$ : true) {\n var sort = valuesTable.columns[0].sort().asc();\n valuesTable.applySort([sort]);\n }\n this.setState({\n valuesTable\n });\n }).catch(error => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error('Unable to open values table', error);\n this.setState({\n valuesTableError: error\n });\n });\n }\n handleFocusTrapEnd() {\n var _this$focusTrapContai, _this$focusTrapContai2;\n ((_this$focusTrapContai = this.focusTrapContainer) === null || _this$focusTrapContai === void 0 ? void 0 : (_this$focusTrapContai2 = _this$focusTrapContai.current) === null || _this$focusTrapContai2 === void 0 ? void 0 : _this$focusTrapContai2.querySelector('button,select,input,textarea')).focus();\n }\n handleFocusTrapStart() {\n var _this$focusTrapContai3, _this$focusTrapContai4;\n var inputs = (_this$focusTrapContai3 = this.focusTrapContainer) === null || _this$focusTrapContai3 === void 0 ? void 0 : (_this$focusTrapContai4 = _this$focusTrapContai3.current) === null || _this$focusTrapContai4 === void 0 ? void 0 : _this$focusTrapContai4.querySelectorAll('button,select,input,textarea');\n if (inputs && inputs.length > 0) {\n var element = inputs[inputs.length - 1];\n element.focus();\n }\n }\n handleAddAnd() {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.and);\n this.setState({\n filterItems,\n filterOperators\n });\n }\n handleAddOr() {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.or);\n this.setState({\n filterItems,\n filterOperators\n });\n }\n handleChangeFilterOperator(index, operator) {\n var {\n filterOperators\n } = this.state;\n filterOperators = [...filterOperators];\n assertFilterOperatorValue(operator);\n filterOperators[index] = operator;\n this.setState({\n filterOperators\n });\n this.startUpdateTimer();\n }\n handleFilterChange(filterIndex, selectedType, value) {\n var {\n filterItems\n } = this.state;\n filterItems = [...filterItems];\n var {\n key\n } = filterItems[filterIndex];\n filterItems[filterIndex] = {\n key,\n selectedType,\n value\n };\n this.setState({\n filterItems\n });\n this.startUpdateTimer();\n }\n handleFilterDelete(filterIndex) {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = [...filterItems];\n filterOperators = [...filterOperators];\n if (filterIndex < filterItems.length) {\n filterItems.splice(filterIndex, 1);\n }\n if (filterIndex < filterOperators.length) {\n filterOperators.splice(filterIndex, 1);\n } else if (filterIndex === filterOperators.length) {\n // When deleting the last filter item, we also need to remove the last filter operator\n filterOperators.splice(filterOperators.length - 1, 1);\n }\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n this.setState({\n filterItems,\n filterOperators\n });\n this.startUpdateTimer();\n }\n handleSelectValueChange(selectedValues, invertSelection) {\n this.setState({\n selectedValues,\n invertSelection\n });\n this.startUpdateTimer();\n }\n handleReset() {\n log.debug('Resetting Advanced Filter');\n this.setState({\n filterItems: [AdvancedFilterCreator.makeFilterItem()],\n filterOperators: [],\n selectedValues: [],\n invertSelection: true\n });\n this.startUpdateTimer();\n }\n handleSortDown(event) {\n var addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.descending, addToExisting);\n }\n handleSortUp(event) {\n var addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.ascending, addToExisting);\n }\n handleSubmit(event) {\n log.debug('Submitting Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n event.preventDefault();\n }\n handleDone(event) {\n log.debug('Submitting and Closing Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n var {\n onDone\n } = this.props;\n onDone();\n event.preventDefault();\n }\n handleUpdateTimeout() {\n this.debounceTimeout = undefined;\n this.sendUpdate();\n }\n\n /**\n * Convenience function to check if the previous filter has been inputted, and\n * we should show the add filter buttons (+ AND OR)\n * @returns true If the add filter buttons should be shown, false otherwise\n */\n shouldShowAddFilter() {\n var {\n filterItems\n } = this.state;\n if (filterItems.length === 0) {\n return false;\n }\n var filterItem = filterItems[filterItems.length - 1];\n var {\n selectedType,\n value\n } = filterItem;\n return selectedType != null && selectedType.length > 0 && value != null && value.length > 0;\n }\n\n /**\n * Sorts the table in the specified direction. If already sorted in that direction, remove it.\n * @param direction The sort direction, ASC or DESC\n * @param addToExisting Add to the existing sort, or replace the existing table sort\n */\n sortTable(direction) {\n var addToExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n column,\n onSortChange\n } = this.props;\n var {\n isSortable\n } = this.state;\n if (isSortable) {\n onSortChange(column, direction, addToExisting);\n }\n }\n startUpdateTimer() {\n this.stopUpdateTimer();\n this.debounceTimeout = setTimeout(this.handleUpdateTimeout, AdvancedFilterCreator.debounceFilterUpdate);\n }\n stopUpdateTimer() {\n if (this.debounceTimeout !== undefined) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n sendUpdate() {\n var {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues\n } = this.state;\n var {\n column,\n onFilterChange,\n model,\n tableUtils\n } = this.props;\n var {\n formatter\n } = model;\n var items = filterItems.filter(_ref2 => {\n var {\n selectedType,\n value\n } = _ref2;\n return selectedType != null && value != null && value !== '';\n });\n var operators = filterOperators.filter((operator, i) => operator != null && filterItems[i].selectedType != null && filterItems[i].value != null && filterItems[i].value !== '').slice(0, items.length - 1);\n // slice last operator, user may have set an operator but not a value\n\n var options = {\n filterItems: items,\n filterOperators: operators,\n invertSelection,\n selectedValues\n };\n var filter = tableUtils.makeAdvancedFilter(column, options, formatter.timeZone);\n onFilterChange(column, filter, options);\n }\n render() {\n var _this = this;\n var {\n column,\n model,\n sortDirection,\n formatter,\n tableUtils\n } = this.props;\n var {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTable,\n valuesTableError,\n isSortable\n } = this.state;\n var {\n dh,\n isValuesTableAvailable\n } = model;\n var isBoolean = TableUtils.isBooleanType(column.type);\n var isDateType = TableUtils.isDateType(column.type);\n var filterTypes = this.getFilterTypes(column.type);\n var columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n var filterItemElements = [];\n if (!isBoolean && filterTypes.length) {\n var _loop = function _loop(i) {\n var filterItem = filterItems[i];\n var {\n key,\n selectedType,\n value\n } = filterItem;\n var element = /*#__PURE__*/_jsx(AdvancedFilterCreatorFilterItem, {\n column: column,\n filterTypes: filterTypes,\n onChange: _this.getFilterChangeHandler(i),\n onDelete: _this.getFilterDeleteHandler(i),\n selectedType: selectedType,\n value: value,\n formatter: formatter,\n tableUtils: tableUtils\n }, key);\n filterItemElements.push(element);\n if (i < filterOperators.length) {\n var filterOperator = filterOperators[i];\n var isAndFilter = filterOperator === FilterOperator.and;\n var operatorElement = /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row justify-content-end advanced-filter-creator-filter-operator\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('filter-operator', {\n active: isAndFilter\n }),\n onClick: () => _this.handleChangeFilterOperator(i, FilterOperator.and),\n children: \"AND\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('filter-operator', {\n active: !isAndFilter\n }),\n onClick: () => _this.handleChangeFilterOperator(i, FilterOperator.or),\n children: \"OR\"\n })]\n }, \"filterOperator\".concat(key));\n filterItemElements.push(operatorElement);\n }\n };\n for (var i = 0; i < filterItems.length; i += 1) {\n _loop(i);\n }\n }\n var showAddFilterItem = this.shouldShowAddFilter();\n var addFilterItem = /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('form-row justify-content-end add-filter-item', {\n hidden: !showAddFilterItem\n }),\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"text-muted\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhNewCircleLargeFilled\n })\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-filter-item\",\n onClick: this.handleAddAnd,\n disabled: !showAddFilterItem,\n tooltip: \"Add filter with AND\",\n children: \"AND\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-filter-item\",\n onClick: this.handleAddOr,\n disabled: !showAddFilterItem,\n tooltip: \"Add filter with OR\",\n children: \"OR\"\n })]\n }, \"addFilterItem\");\n filterItemElements.push(addFilterItem);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator\",\n role: \"presentation\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n tabIndex: 0,\n onFocus: this.handleFocusTrapStart\n }), /*#__PURE__*/_jsxs(\"form\", {\n onSubmit: this.handleSubmit,\n ref: this.focusTrapContainer,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"title-bar\",\n children: [/*#__PURE__*/_jsx(\"h6\", {\n className: \"advanced-filter-title\",\n children: \"Advanced Filters\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-menu-buttons\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.descending\n }),\n onClick: this.handleSortDown,\n icon: dhSortAmountDown,\n tooltip: isSortable ? \"Sort \".concat(column.name, \" Descending\") : 'Not sortable',\n disabled: !isSortable\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.ascending\n }),\n onClick: this.handleSortUp,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSortAmountDown,\n rotation: 180\n }),\n tooltip: isSortable ? \"Sort \".concat(column.name, \" Ascending\") : 'Not sortable',\n disabled: !isSortable\n })]\n })]\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-column-name\",\n children: [column.name, \"\\xA0\", /*#__PURE__*/_jsxs(\"span\", {\n className: \"column-type\",\n children: [\"(\", columnType, \")\"]\n })]\n }), filterItemElements, isValuesTableAvailable && valuesTableError == null && /*#__PURE__*/_jsxs(_Fragment, {\n children: [!isBoolean && /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group\",\n children: /*#__PURE__*/_jsx(AdvancedFilterCreatorSelectValue, {\n dh: dh,\n table: valuesTable,\n onChange: this.handleSelectValueChange,\n invertSelection: invertSelection,\n selectedValues: selectedValues,\n formatter: formatter,\n showSearch: !isDateType,\n timeZone: formatter.timeZone\n })\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row justify-content-end\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n className: \"mr-2\",\n onClick: this.handleReset,\n children: \"Reset\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: this.handleDone,\n children: \"Done\"\n })]\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n tabIndex: 0,\n onFocus: this.handleFocusTrapEnd\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreator, \"debounceFilterUpdate\", 250);\n_defineProperty(AdvancedFilterCreator, \"defaultProps\", {\n options: {\n filterItems: null,\n filterOperators: null,\n invertSelection: true,\n selectedValues: []\n },\n sortDirection: null\n});\nexport default AdvancedFilterCreator;\n//# sourceMappingURL=AdvancedFilterCreator.js.map","import { getConditionDBString, getStyleDBString } from \"./ConditionalFormattingUtils.js\"; // Conditional formatting API utils in a separate file\n// to make ConditionalFormattingUtils.ts easier to test.\n// https://github.com/facebook/jest/issues/936#issuecomment-545080082\nexport function makeTernaryFormatRule(config, prevRule) {\n var styleDBString = getStyleDBString(config);\n if (styleDBString === undefined) {\n return undefined;\n }\n var conditionDBString = getConditionDBString(config);\n return \"\".concat(conditionDBString, \" ? \").concat(styleDBString, \" : \").concat(prevRule);\n}\nexport function makeRowFormatColumn(dh, rule) {\n return dh.Column.formatRowColor(rule);\n}\nexport function makeColumnFormatColumn(col, rule) {\n return col.formatColor(rule);\n}\n//# sourceMappingURL=ConditionalFormattingAPIUtils.js.map","import Log from '@deephaven/log';\nimport { DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport { makeColumnFormatColumn, makeRowFormatColumn, makeTernaryFormatRule } from \"./ConditionalFormattingAPIUtils.js\";\nvar log = Log.module('ConditionalFormattingUtils');\nexport var FormatterType;\n(function (FormatterType) {\n FormatterType[\"CONDITIONAL\"] = \"conditional\";\n FormatterType[\"ROWS\"] = \"rows\";\n})(FormatterType || (FormatterType = {}));\nexport var NumberCondition;\n(function (NumberCondition) {\n NumberCondition[\"IS_EQUAL\"] = \"is-equal\";\n NumberCondition[\"IS_NOT_EQUAL\"] = \"is-not-equal\";\n NumberCondition[\"IS_BETWEEN\"] = \"is-between\";\n NumberCondition[\"GREATER_THAN\"] = \"greater-than\";\n NumberCondition[\"GREATER_THAN_OR_EQUAL\"] = \"greater-than-or-equal\";\n NumberCondition[\"LESS_THAN\"] = \"less-than\";\n NumberCondition[\"LESS_THAN_OR_EQUAL\"] = \"less-than-or-equal\";\n NumberCondition[\"IS_NULL\"] = \"is-null\";\n NumberCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n})(NumberCondition || (NumberCondition = {}));\nexport var StringCondition;\n(function (StringCondition) {\n StringCondition[\"IS_EXACTLY\"] = \"is-exactly\";\n StringCondition[\"IS_NOT_EXACTLY\"] = \"is-not-exactly\";\n StringCondition[\"CONTAINS\"] = \"contains\";\n StringCondition[\"DOES_NOT_CONTAIN\"] = \"does-not-contain\";\n StringCondition[\"STARTS_WITH\"] = \"starts-with\";\n StringCondition[\"ENDS_WITH\"] = \"ends-with\";\n StringCondition[\"IS_NULL\"] = \"is-null\";\n StringCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n})(StringCondition || (StringCondition = {}));\nexport var DateCondition;\n(function (DateCondition) {\n DateCondition[\"IS_EXACTLY\"] = \"is-exactly\";\n DateCondition[\"IS_NOT_EXACTLY\"] = \"is-not-exactly\";\n DateCondition[\"IS_BEFORE\"] = \"is-before\";\n DateCondition[\"IS_BEFORE_OR_EQUAL\"] = \"is-before-or-equal\";\n DateCondition[\"IS_AFTER\"] = \"is-after\";\n DateCondition[\"IS_AFTER_OR_EQUAL\"] = \"is-after-or-equal\";\n DateCondition[\"IS_NULL\"] = \"is-null\";\n DateCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n})(DateCondition || (DateCondition = {}));\nexport var BooleanCondition;\n(function (BooleanCondition) {\n BooleanCondition[\"IS_TRUE\"] = \"is-true\";\n BooleanCondition[\"IS_FALSE\"] = \"is-false\";\n BooleanCondition[\"IS_NULL\"] = \"is-null\";\n BooleanCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n})(BooleanCondition || (BooleanCondition = {}));\nexport var CharCondition;\n(function (CharCondition) {\n CharCondition[\"IS_EQUAL\"] = \"is-equal\";\n CharCondition[\"IS_NOT_EQUAL\"] = \"is-not-equal\";\n CharCondition[\"IS_NULL\"] = \"is-null\";\n CharCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n})(CharCondition || (CharCondition = {}));\nexport var FormatStyleType;\n(function (FormatStyleType) {\n FormatStyleType[\"NO_FORMATTING\"] = \"no-formatting\";\n FormatStyleType[\"POSITIVE\"] = \"positive\";\n FormatStyleType[\"NEGATIVE\"] = \"negative\";\n FormatStyleType[\"WARN\"] = \"warn\";\n FormatStyleType[\"NEUTRAL\"] = \"neutral\";\n FormatStyleType[\"ACCENT_1\"] = \"accent-1\";\n FormatStyleType[\"ACCENT_2\"] = \"accent-2\";\n FormatStyleType[\"CUSTOM\"] = \"custom\";\n})(FormatStyleType || (FormatStyleType = {}));\nexport function getLabelForStyleType(option) {\n switch (option) {\n case FormatStyleType.NO_FORMATTING:\n return 'No formatting';\n case FormatStyleType.POSITIVE:\n return 'Positive';\n case FormatStyleType.NEGATIVE:\n return 'Negative';\n case FormatStyleType.WARN:\n return 'Warn';\n case FormatStyleType.NEUTRAL:\n return 'Neutral';\n case FormatStyleType.ACCENT_1:\n return 'Accent 1';\n case FormatStyleType.ACCENT_2:\n return 'Accent 2';\n case FormatStyleType.CUSTOM:\n return 'Custom...';\n }\n}\nexport function getBackgroundForStyleConfig(config) {\n var {\n type,\n customConfig\n } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#9fde6f';\n case FormatStyleType.NEGATIVE:\n return '#ff6087';\n case FormatStyleType.WARN:\n return '#f67f40';\n case FormatStyleType.NEUTRAL:\n return '#ffd95c';\n case FormatStyleType.ACCENT_1:\n return '#78dce8';\n case FormatStyleType.ACCENT_2:\n return '#ab9bf5';\n case FormatStyleType.CUSTOM:\n return customConfig === null || customConfig === void 0 ? void 0 : customConfig.background;\n default:\n return undefined;\n }\n}\nexport function getColorForStyleConfig(config) {\n var {\n type,\n customConfig\n } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#526a3f';\n case FormatStyleType.NEGATIVE:\n return '#802f44';\n case FormatStyleType.WARN:\n return '#663318';\n case FormatStyleType.NEUTRAL:\n return '#63562b';\n case FormatStyleType.ACCENT_1:\n return '#3f6469';\n case FormatStyleType.ACCENT_2:\n return '#554d72';\n case FormatStyleType.CUSTOM:\n return customConfig === null || customConfig === void 0 ? void 0 : customConfig.color;\n default:\n return undefined;\n }\n}\nexport function getStyleDBString(config) {\n var color = getColorForStyleConfig(config.style);\n var bg = getBackgroundForStyleConfig(config.style);\n if (color === undefined || bg === undefined) {\n return undefined;\n }\n return \"bgfg(`\".concat(bg, \"`, `\").concat(color, \"`)\");\n}\nfunction getNumberConditionText(config) {\n var {\n column,\n value,\n start,\n end\n } = config;\n return getTextForNumberCondition(column.name, config.condition, value, start, end);\n}\nfunction getStringConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForStringCondition(column.name, config.condition, value);\n}\nfunction getDateConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForDateCondition(column.name, config.condition, value);\n}\nfunction getBooleanConditionText(config) {\n var {\n column\n } = config;\n return getTextForBooleanCondition(column.name, config.condition);\n}\nfunction getCharConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForCharCondition(column.name, config.condition, value);\n}\nexport function getConditionDBString(config) {\n var {\n column\n } = config;\n if (TableUtils.isNumberType(column.type)) {\n return getNumberConditionText(config);\n }\n if (TableUtils.isCharType(column.type)) {\n return getCharConditionText(config);\n }\n if (TableUtils.isStringType(column.type)) {\n return getStringConditionText(config);\n }\n if (TableUtils.isDateType(column.type)) {\n return getDateConditionText(config);\n }\n if (TableUtils.isBooleanType(column.type)) {\n return getBooleanConditionText(config);\n }\n throw new Error('Invalid column type');\n}\nexport function getLabelForNumberCondition(condition) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return 'is equal to';\n case NumberCondition.IS_NOT_EQUAL:\n return 'is not equal to';\n case NumberCondition.IS_BETWEEN:\n return 'is between';\n case NumberCondition.GREATER_THAN:\n return 'greater than';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return 'greater than or equal to';\n case NumberCondition.LESS_THAN:\n return 'less than';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return 'less than or equal to';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForStringCondition(condition) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return 'is exactly';\n case StringCondition.IS_NOT_EXACTLY:\n return 'is not exactly';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForDateCondition(condition) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return 'is';\n case DateCondition.IS_NOT_EXACTLY:\n return 'is not';\n case DateCondition.IS_BEFORE:\n return 'is before';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return 'is before or equal';\n case DateCondition.IS_AFTER:\n return 'is after';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return 'is after or equal';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForBooleanCondition(condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForCharCondition(condition) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return 'is';\n case CharCondition.IS_NOT_EQUAL:\n return 'is not';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getDefaultConditionForType(columnType) {\n if (TableUtils.isNumberType(columnType)) {\n return NumberCondition.IS_EQUAL;\n }\n if (TableUtils.isCharType(columnType)) {\n return CharCondition.IS_EQUAL;\n }\n if (TableUtils.isStringType(columnType)) {\n return StringCondition.IS_EXACTLY;\n }\n if (TableUtils.isDateType(columnType)) {\n return DateCondition.IS_EXACTLY;\n }\n if (TableUtils.isBooleanType(columnType)) {\n return BooleanCondition.IS_TRUE;\n }\n throw new Error('Invalid column type');\n}\nexport function getDefaultValueForType(columnType) {\n if (TableUtils.isCharType(columnType)) {\n return '';\n }\n if (TableUtils.isStringType(columnType)) {\n return '';\n }\n return undefined;\n}\nexport function getConditionConfig(config) {\n var {\n condition,\n value,\n start,\n end\n } = config;\n return {\n condition,\n value,\n start,\n end\n };\n}\nexport function getDefaultConditionConfigForType(type) {\n return {\n condition: getDefaultConditionForType(type),\n value: getDefaultValueForType(type),\n start: undefined,\n end: undefined\n };\n}\nexport function getDefaultStyleConfig() {\n return {\n type: FormatStyleType.NO_FORMATTING\n };\n}\nfunction getShortLabelForStringCondition(condition) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return '==';\n case StringCondition.IS_NOT_EXACTLY:\n return '!=';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForDateCondition(condition) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return '==';\n case DateCondition.IS_NOT_EXACTLY:\n return '!=';\n case DateCondition.IS_BEFORE:\n return '<';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return '<=';\n case DateCondition.IS_AFTER:\n return '>';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return '>=';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForBooleanCondition(condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForCharCondition(condition) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return '==';\n case CharCondition.IS_NOT_EQUAL:\n return '!=';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getShortLabelForNumberCondition(condition) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return '==';\n case NumberCondition.IS_NOT_EQUAL:\n return '!=';\n case NumberCondition.IS_BETWEEN:\n return '==';\n case NumberCondition.GREATER_THAN:\n return '>';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return '>=';\n case NumberCondition.LESS_THAN:\n return '<';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return '<=';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getTextForNumberCondition(columnName, condition, value, start, end) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return \"\".concat(columnName, \" == \").concat(value);\n case NumberCondition.IS_NOT_EQUAL:\n return \"\".concat(columnName, \" != \").concat(value);\n case NumberCondition.IS_BETWEEN:\n return \"\".concat(columnName, \" > \").concat(start, \" && \").concat(columnName, \" < \").concat(end);\n case NumberCondition.GREATER_THAN:\n return \"\".concat(columnName, \" > \").concat(value);\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return \"\".concat(columnName, \" >= \").concat(value);\n case NumberCondition.LESS_THAN:\n return \"\".concat(columnName, \" < \").concat(value);\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return \"\".concat(columnName, \" <= \").concat(value);\n case NumberCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case NumberCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForStringCondition(columnName, condition, value) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return \"\".concat(columnName, \" == \\\"\").concat(value, \"\\\"\");\n case StringCondition.IS_NOT_EXACTLY:\n return \"\".concat(columnName, \" != \\\"\").concat(value, \"\\\"\");\n case StringCondition.CONTAINS:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".contains(\\\"\").concat(value, \"\\\")\");\n case StringCondition.DOES_NOT_CONTAIN:\n return \"\".concat(columnName, \" != null && !\").concat(columnName, \".contains(\\\"\").concat(value, \"\\\")\");\n case StringCondition.STARTS_WITH:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".startsWith(\\\"\").concat(value, \"\\\")\");\n case StringCondition.ENDS_WITH:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".endsWith(\\\"\").concat(value, \"\\\")\");\n case StringCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case StringCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForDateCondition(columnName, condition, value) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return \"\".concat(columnName, \" == convertDateTime(\\\"\").concat(value, \"\\\")\");\n case DateCondition.IS_NOT_EXACTLY:\n return \"\".concat(columnName, \" != convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_BEFORE:\n return \"\".concat(columnName, \" < convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return \"\".concat(columnName, \" <= convertDateTime(\\\"\").concat(value, \"\\\")\");\n case DateCondition.IS_AFTER:\n return \"\".concat(columnName, \" > convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_AFTER_OR_EQUAL:\n return \"\".concat(columnName, \" >= convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case DateCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForBooleanCondition(columnName, condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return \"\".concat(columnName, \" == true\");\n case BooleanCondition.IS_FALSE:\n return \"\".concat(columnName, \" == false\");\n case BooleanCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case BooleanCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForCharCondition(columnName, condition, value) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return \"\".concat(columnName, \" == '\").concat(value, \"'\");\n case CharCondition.IS_NOT_EQUAL:\n return \"\".concat(columnName, \" != '\").concat(value, \"'\");\n case CharCondition.IS_NULL:\n return \"isNull(\".concat(columnName, \")\");\n case CharCondition.IS_NOT_NULL:\n return \"!isNull(\".concat(columnName, \")\");\n }\n}\nexport function getShortLabelForConditionType(columnType, condition) {\n if (TableUtils.isNumberType(columnType)) {\n return getShortLabelForNumberCondition(condition);\n }\n if (TableUtils.isCharType(columnType)) {\n return getShortLabelForCharCondition(condition);\n }\n if (TableUtils.isStringType(columnType)) {\n return getShortLabelForStringCondition(condition);\n }\n if (TableUtils.isDateType(columnType)) {\n return getShortLabelForDateCondition(condition);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getShortLabelForBooleanCondition(condition);\n }\n throw new Error('Invalid column type');\n}\n\n/**\n * Get format columns array for the given columns and formatting rules\n * @param columns Available columns\n * @param rules Formatting rules to build the format columns from\n * @returns Array of format columns\n */\nexport function getFormatColumns(dh, columns, rules) {\n if (rules === undefined) {\n log.debug(\"no rules passed.\");\n return [];\n }\n var result = [];\n // There can be only one row format custom column\n // and multiple column format custom columns (one per column)\n var rowFormatConfig;\n var columnFormatConfigMap = new Map();\n rules.forEach(_ref => {\n var _ref3;\n var {\n config,\n type: formatterType\n } = _ref;\n var {\n column\n } = config;\n // Check both name and type because the type can change\n var col = columns.find(_ref2 => {\n var {\n name,\n type\n } = _ref2;\n return name === column.name && type === column.type;\n });\n if (col === undefined) {\n log.debug(\"Column \".concat(column.name, \":\").concat(column.type, \" not found. Ignoring format rule.\"), config);\n return;\n }\n // Stack ternary format conditions by column\n var [prevRule, prevFormatColumn] = (_ref3 = formatterType === FormatterType.CONDITIONAL ? columnFormatConfigMap.get(col.name) : rowFormatConfig) !== null && _ref3 !== void 0 ? _ref3 : ['null', undefined];\n var rule = makeTernaryFormatRule(config, prevRule);\n if (rule === undefined) {\n log.debug(\"Ignoring format rule.\", config);\n return;\n }\n // Replace existing formatColumn with the new stacked format\n var index = prevFormatColumn === undefined ? -1 : result.indexOf(prevFormatColumn);\n if (index > -1) {\n result.splice(index, 1);\n }\n var formatColumn = formatterType === FormatterType.CONDITIONAL ? makeColumnFormatColumn(col, rule) : makeRowFormatColumn(dh, rule);\n result.push(formatColumn);\n if (formatterType === FormatterType.CONDITIONAL) {\n columnFormatConfigMap.set(col.name, [rule, formatColumn]);\n } else {\n rowFormatConfig = [rule, formatColumn];\n }\n });\n return result;\n}\n\n/**\n * Validate that a given date condition + value pair is valid.\n * @param condition\n * @param value\n */\nexport function isDateConditionValid(dh, condition, value) {\n switch (condition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return true;\n default:\n {\n var [dateTimeString, ...rest] = (value !== null && value !== void 0 ? value : '').split(' ');\n // Reconstitute all tokens after the first ' ' in case the user included garbage data at the end\n // e.g. '2020-01-01 NY blah'\n var tzCode = rest.join(' ');\n try {\n DateUtils.parseDateTimeString(dateTimeString);\n } catch (e) {\n log.debug('Invalid datetime string', dateTimeString);\n return false;\n }\n try {\n dh.i18n.TimeZone.getTimeZone(tzCode);\n } catch (e) {\n log.debug('Invalid timezone string', tzCode);\n return false;\n }\n return true;\n }\n }\n}\nexport function isSupportedColumn(_ref4) {\n var {\n type\n } = _ref4;\n return TableUtils.isNumberType(type) || TableUtils.isCharType(type) || TableUtils.isStringType(type) || TableUtils.isDateType(type) || TableUtils.isBooleanType(type);\n}\n//# sourceMappingURL=ConditionalFormattingUtils.js.map","import React from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport \"./IrisGridBottomBar.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function IrisGridBottomBar(_ref) {\n var {\n animation = 'iris-grid-bottom-bar-slide-up',\n children,\n className,\n isShown,\n onClick,\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = _ref;\n return /*#__PURE__*/_jsx(CSSTransition, {\n in: isShown,\n timeout: ThemeExport.transitionMs,\n classNames: animation,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: classNames('iris-grid-bottom-bar', className),\n role: \"presentation\",\n onClick: onClick,\n onKeyPress: onClick,\n children: children\n })\n });\n}\nexport default IrisGridBottomBar;\n//# sourceMappingURL=IrisGridBottomBar.js.map","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./PendingDataBottomBar.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar HIDE_TIMEOUT = 3000;\nvar MAX_NUMBER_ROWS_SHOWN = 5;\nexport function PendingDataBottomBar(_ref) {\n var {\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited: _onExited\n } = _ref;\n var [isSuccessShown, setIsSuccessShown] = useState(false);\n var [wasSuccessShown, setWasSuccessShown] = useState(false);\n var successTimeout = useRef();\n var prevIsSaving = usePrevious(isSaving);\n var errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return \"Key can't be empty (on pending row\".concat(pendingDataErrors.size > 1 ? 's' : '', \" \").concat(Array.from(pendingDataErrors.keys()).join(', ').trim(), \")\");\n }\n return \"Key can't be empty (on \".concat(pendingDataErrors.size, \" rows)\");\n }, [error, pendingDataErrors]);\n useEffect(function showSuccessMessage() {\n if (prevIsSaving != null && prevIsSaving && !isSaving && errorMessage == null) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n }, [errorMessage, isSaving, prevIsSaving]);\n useEffect(function hideSuccessMessage() {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n }, [pendingDataMap]);\n useEffect(function cleanupTimeout() {\n return () => successTimeout.current ? clearTimeout(successTimeout.current) : undefined;\n }, []);\n var pendingRowCount = pendingDataMap.size;\n var commitIcon;\n if (isSaving) {\n commitIcon = /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n });\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n return /*#__PURE__*/_jsxs(IrisGridBottomBar, {\n className: \"pending-data-bottom-bar\",\n isShown: pendingRowCount > 0 || isSuccessShown || errorMessage != null,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: () => {\n setWasSuccessShown(false);\n if (_onExited) {\n _onExited();\n }\n },\n children: [errorMessage != null && errorMessage !== '' && /*#__PURE__*/_jsxs(\"div\", {\n className: \"error-message\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsWarning\n }), /*#__PURE__*/_jsx(\"span\", {\n children: \"\".concat(errorMessage)\n })]\n }), (errorMessage == null || errorMessage === '') && /*#__PURE__*/_jsx(\"div\", {\n className: \"status-message\",\n children: pendingRowCount > 0 && /*#__PURE__*/_jsx(\"span\", {\n children: \"\".concat(pendingRowCount, \" row\").concat(pendingRowCount > 1 ? 's' : '', \" pending\")\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"buttons-container\",\n children: [!isSaving && !wasSuccessShown && /*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: onDiscard,\n tooltip: discardTooltip,\n children: \"Discard\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: wasSuccessShown ? 'success' : 'primary',\n onClick: onSave,\n icon: commitIcon,\n disabled: isSaving || wasSuccessShown || errorMessage != null,\n tooltip: saveTooltip,\n children: [isSaving && \"Committing...\", !isSaving && wasSuccessShown && \"Success\", !isSaving && !wasSuccessShown && \"Commit\"]\n })]\n })]\n });\n}\nexport default PendingDataBottomBar;\n//# sourceMappingURL=PendingDataBottomBar.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { Button, FadeTransition, LoadingSpinner } from '@deephaven/components';\nimport { GridRange, GridUtils } from '@deephaven/grid';\nimport { CanceledPromiseError, copyToClipboard, PromiseUtils } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./IrisGridCopyHandler.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridCopyHandler');\nfunction isCopyRangesOperation(copyOperation) {\n return copyOperation.ranges != null;\n}\nfunction isCopyHeaderOperation(copyOperation) {\n return copyOperation.columnIndex != null;\n}\n/**\n * Component for handling copying of data from the Iris Grid.\n * - Prompts if necessary (large amount of rows copied)\n * - Tries to async copy, falls back to showing a \"Click to Copy\" button if that fails\n */\nclass IrisGridCopyHandler extends Component {\n /**\n * Different states for the current copy operation\n */\n\n static getStatusMessageText(copyState, rowCount) {\n switch (copyState) {\n case IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED:\n return \"Are you sure you want to copy \".concat(rowCount.toLocaleString(), \" rows to your clipboard?\");\n case IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED:\n return \"Fetched \".concat(rowCount.toLocaleString(), \" rows!\");\n case IrisGridCopyHandler.COPY_STATES.FETCH_ERROR:\n return 'Unable to copy data.';\n case IrisGridCopyHandler.COPY_STATES.FETCH_RANGES_IN_PROGRESS:\n return \"Fetching \".concat(rowCount.toLocaleString(), \" rows for clipboard...\");\n case IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS:\n return 'Fetching header for clipboard...';\n case IrisGridCopyHandler.COPY_STATES.DONE:\n return 'Copied to Clipboard!';\n default:\n return '';\n }\n }\n static getCopyButtonText(buttonState) {\n switch (buttonState) {\n case IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS:\n return 'Fetching';\n case IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY:\n return 'Click to Copy';\n case IrisGridCopyHandler.BUTTON_STATES.RETRY:\n return 'Retry';\n default:\n return 'Copy';\n }\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"textData\", void 0);\n _defineProperty(this, \"hideTimer\", void 0);\n _defineProperty(this, \"fetchPromise\", void 0);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleCopyClick = this.handleCopyClick.bind(this);\n this.handleHideTimeout = this.handleHideTimeout.bind(this);\n this.state = {\n error: undefined,\n copyState: IrisGridCopyHandler.COPY_STATES.IDLE,\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n isShown: false,\n rowCount: 0\n };\n }\n componentDidMount() {\n var {\n copyOperation\n } = this.props;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n componentDidUpdate(prevProps) {\n var {\n copyOperation\n } = this.props;\n if (prevProps.copyOperation !== copyOperation) {\n this.startCopy();\n }\n }\n componentWillUnmount() {\n this.stopCopy();\n }\n startCopy() {\n log.debug2('startCopy');\n this.stopCopy();\n var {\n copyOperation\n } = this.props;\n if (copyOperation == null) {\n log.debug2('No copy operation set, cancelling out');\n this.setState({\n isShown: false\n });\n return;\n }\n var {\n error\n } = copyOperation;\n if (error != null) {\n log.debug('Showing copy error', error);\n this.setState({\n isShown: true,\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n error\n });\n this.startHideTimer();\n return;\n }\n this.setState({\n isShown: true,\n error: undefined\n });\n if (isCopyRangesOperation(copyOperation)) {\n var {\n ranges\n } = copyOperation;\n var rowCount = GridRange.rowCount(ranges);\n this.setState({\n rowCount\n });\n if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED\n });\n return;\n }\n }\n this.startFetch();\n }\n stopCopy() {\n this.textData = undefined;\n this.stopFetch();\n this.stopHideTimer();\n }\n handleBackgroundClick() {\n log.debug2('handleBackgroundClick');\n var {\n copyState\n } = this.state;\n if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {\n this.setState({\n isShown: false\n });\n }\n }\n handleCancelClick() {\n log.debug2('handleCancelClick');\n this.stopFetch();\n this.setState({\n isShown: false\n });\n }\n handleCopyClick() {\n var _this = this;\n return _asyncToGenerator(function* () {\n log.debug2('handleCopyClick');\n if (_this.textData != null) {\n try {\n yield _this.copyText(_this.textData);\n _this.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n _this.setState({\n error: 'Unable to copy. Verify your browser permissions.'\n });\n }\n } else {\n _this.startFetch();\n }\n })();\n }\n handleHideTimeout() {\n log.debug2('handleHideTimeout');\n this.stopHideTimer();\n this.setState({\n isShown: false\n });\n }\n copyText(text) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n log.debug2('copyText', text);\n _this2.textData = text;\n yield copyToClipboard(text);\n })();\n }\n showCopyDone() {\n this.setState({\n copyState: IrisGridCopyHandler.COPY_STATES.DONE\n });\n this.startHideTimer();\n }\n startFetch() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n _this3.stopFetch();\n var {\n model,\n copyOperation\n } = _this3.props;\n if (isCopyHeaderOperation(copyOperation)) {\n var {\n columnIndex,\n columnDepth,\n movedColumns\n } = copyOperation;\n log.debug('startFetch copyHeader', columnIndex, columnDepth);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS\n });\n var modelIndex = GridUtils.getModelIndex(columnIndex, movedColumns);\n var copyText = model.textForColumnHeader(modelIndex, columnDepth);\n if (copyText === undefined) {\n _this3.fetchPromise = undefined;\n _this3.setState({\n error: 'Invalid column header selected.',\n copyState: IrisGridCopyHandler.COPY_STATES.DONE\n });\n return;\n }\n _this3.fetchPromise = PromiseUtils.makeCancelable(copyText);\n } else {\n var {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns: _movedColumns,\n formatValues\n } = copyOperation;\n log.debug('startFetch copyRanges', ranges);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_RANGES_IN_PROGRESS\n });\n var hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n var modelRanges = GridUtils.getModelRanges(ranges, _movedColumns);\n if (hiddenColumns.length > 0) {\n var subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(modelRanges, subtractRanges);\n }\n\n // Remove the hidden columns from the snapshot\n var formatValue = formatValues != null && formatValues ? (value, column) => model.displayString(value, column.type, column.name) : value => \"\".concat(value);\n _this3.fetchPromise = PromiseUtils.makeCancelable(model.textSnapshot(modelRanges, includeHeaders, formatValue));\n }\n try {\n var text = yield _this3.fetchPromise;\n _this3.fetchPromise = undefined;\n try {\n yield _this3.copyText(text);\n _this3.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED\n });\n }\n } catch (e) {\n if (e instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', e);\n _this3.fetchPromise = undefined;\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR\n });\n }\n }\n })();\n }\n stopFetch() {\n if (this.fetchPromise) {\n log.debug2('stopFetch');\n this.fetchPromise.cancel();\n this.fetchPromise = undefined;\n }\n }\n startHideTimer() {\n this.stopHideTimer();\n this.hideTimer = setTimeout(this.handleHideTimeout, IrisGridCopyHandler.HIDE_TIMEOUT);\n }\n stopHideTimer() {\n if (this.hideTimer != null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n render() {\n var {\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = this.props;\n var {\n buttonState,\n copyState,\n isShown,\n rowCount,\n error\n } = this.state;\n var animation = copyState === IrisGridCopyHandler.COPY_STATES.DONE ? 'fade' : 'copy-slide-up';\n var copyButtonText = IrisGridCopyHandler.getCopyButtonText(buttonState);\n var statusMessageText = error !== null && error !== void 0 ? error : IrisGridCopyHandler.getStatusMessageText(copyState, rowCount);\n var isButtonContainerVisible = copyState !== IrisGridCopyHandler.COPY_STATES.DONE;\n var isFetching = buttonState === IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS;\n var isDone = copyState === IrisGridCopyHandler.COPY_STATES.DONE;\n return /*#__PURE__*/_jsxs(IrisGridBottomBar, {\n animation: animation,\n isShown: isShown,\n className: classNames('iris-grid-copy-handler', {\n 'copy-done': isDone\n }),\n onClick: this.handleBackgroundClick,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"status-message\",\n children: /*#__PURE__*/_jsx(\"span\", {\n children: statusMessageText\n })\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: isButtonContainerVisible,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"buttons-container\",\n children: [/*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-outline-secondary btn-cancel\",\n onClick: this.handleCancelClick,\n children: \"Cancel\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: isFetching ? 'tertiary' : 'primary',\n className: classNames('btn-copy', {\n 'btn-spinner': isFetching\n }),\n onClick: this.handleCopyClick,\n disabled: isFetching,\n children: [isFetching && /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n }), copyButtonText]\n })]\n })\n })]\n });\n }\n}\n_defineProperty(IrisGridCopyHandler, \"NO_PROMPT_THRESHOLD\", 10000);\n_defineProperty(IrisGridCopyHandler, \"HIDE_TIMEOUT\", 3000);\n_defineProperty(IrisGridCopyHandler, \"COPY_STATES\", {\n // No copy operation in progress\n IDLE: 'IDLE',\n // Large copy operation, confirmation required\n CONFIRMATION_REQUIRED: 'CONFIRMATION_REQUIRED',\n // Fetch is currently in progress for copy ranges operation\n FETCH_RANGES_IN_PROGRESS: 'FETCH_RANGES_IN_PROGRESS',\n // Fetch is currently in progress for copy header operation\n FETCH_HEADER_IN_PROGRESS: 'FETCH_HEADER_IN_PROGRESS',\n // There was an error fetching the data\n FETCH_ERROR: 'FETCH_ERROR',\n // Click is required to copy\n CLICK_REQUIRED: 'CLICK_REQUIRED',\n // The copy operation is completed and successfully copied to the clipboard\n DONE: 'DONE'\n});\n_defineProperty(IrisGridCopyHandler, \"BUTTON_STATES\", {\n COPY: 'COPY',\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n CLICK_TO_COPY: 'CLICK_TO_COPY',\n RETRY: 'RETRY'\n});\n_defineProperty(IrisGridCopyHandler, \"defaultProps\", {\n copyOperation: null,\n onEntering: () => undefined,\n onEntered: () => undefined,\n onExiting: () => undefined,\n onExited: () => undefined\n});\nexport default IrisGridCopyHandler;\n//# sourceMappingURL=IrisGridCopyHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport \"./FilterInputField.css\";\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"inputField\", void 0);\n _defineProperty(this, \"initialValue\", void 0);\n _defineProperty(this, \"debouncedSendUpdate\", void 0);\n var {\n debounceMs\n } = props;\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleCommit = this.handleCommit.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.inputField = null;\n var {\n value\n } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value\n };\n }\n componentDidMount() {\n var _this$inputField;\n (_this$inputField = this.inputField) === null || _this$inputField === void 0 ? void 0 : _this$inputField.focus();\n }\n componentDidUpdate(prevProps) {\n var {\n debounceMs\n } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n }\n }\n componentWillUnmount() {\n this.debouncedSendUpdate.cancel();\n }\n // clear filters needs to be able to reset the value externally\n // and due to the way this component handles its own debouncing\n // this was easier than moving state up.\n setValue(value) {\n this.initialValue = value;\n this.setState({\n value\n });\n }\n focus() {\n var _this$inputField2;\n (_this$inputField2 = this.inputField) === null || _this$inputField2 === void 0 ? void 0 : _this$inputField2.focus();\n }\n handleChange(event) {\n var {\n value\n } = event.target;\n this.setState({\n value,\n isChanged: true\n });\n this.debouncedSendUpdate(value);\n }\n handleCancel() {\n this.debouncedSendUpdate.cancel();\n var {\n initialValue\n } = this;\n var {\n isChanged\n } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n var {\n onDone\n } = this.props;\n onDone();\n }\n handleCommit() {\n var setGridFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var defocusInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n this.debouncedSendUpdate.flush();\n var {\n onDone\n } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n handleFocus() {\n var _this$inputField3;\n (_this$inputField3 = this.inputField) === null || _this$inputField3 === void 0 ? void 0 : _this$inputField3.select();\n }\n handleBlur(event) {\n var {\n relatedTarget\n } = event;\n // handleCommit results in a call that steals focus\n if (relatedTarget != null && relatedTarget.classList.contains('context-menu-container')) {\n // input blurred by calling context-menu\n // don't set grid focus, but do null column focus\n this.handleCommit(false, true);\n } else if (relatedTarget != null && relatedTarget.classList.contains('advanced-filter-button')) {\n // blurred by clicking an advanced filter button\n // don't set grid focus, maintain focusedFilterBarColumn state\n this.handleCommit(false, false);\n } else {\n // clear both, blurred elsewhere\n this.handleCommit(true, true);\n }\n }\n handleTab() {\n var backward = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n this.debouncedSendUpdate.flush();\n var {\n onTab\n } = this.props;\n onTab(backward);\n }\n handleKeyDown(event) {\n switch (event.key) {\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.handleCancel();\n break;\n case 'Enter':\n event.stopPropagation();\n event.preventDefault();\n this.handleCommit();\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n this.handleTab(event.shiftKey);\n break;\n default:\n break;\n }\n }\n handleContextMenu(event) {\n var {\n onContextMenu\n } = this.props;\n onContextMenu(event);\n }\n sendUpdate(value) {\n var {\n onChange\n } = this.props;\n onChange(value);\n }\n render() {\n var {\n className,\n style,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered\n } = this.props;\n var {\n value\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n style: style,\n className: \"iris-grid-input-autosized-wrapper\",\n \"data-value\": value // used by css based autosizer\n ,\n children: [/*#__PURE__*/_jsx(\"input\", {\n ref: inputField => {\n this.inputField = inputField;\n },\n className: classNames('iris-grid-input-field', className),\n type: \"text\",\n value: value,\n onBlur: this.handleBlur,\n onFocus: this.handleFocus,\n onChange: this.handleChange,\n onKeyDown: this.handleKeyDown,\n onContextMenu: this.handleContextMenu,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-button-container\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isAdvancedFilterSet\n }),\n onClick: onAdvancedFiltersTriggered,\n onContextMenu: this.handleContextMenu,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers \",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhFilterFilled,\n className: \"filter-solid\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsFilter,\n className: \"filter-light\"\n })]\n })\n })\n })]\n });\n }\n}\n_defineProperty(FilterInputField, \"defaultProps\", {\n style: {},\n className: '',\n value: '',\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: () => undefined,\n onChange: () => undefined,\n onDone: () => undefined,\n onTab: () => undefined,\n onContextMenu: () => undefined,\n debounceMs: 150\n});\nexport default FilterInputField;\n//# sourceMappingURL=FilterInputField.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { KeyHandler } from '@deephaven/grid';\nimport { ContextActionUtils } from '@deephaven/components';\nclass CopyCellKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n onDown(event, grid) {\n if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey) {\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n var gridPoint = grid.getGridPointFromXY(mouseX, mouseY);\n if (gridPoint.column != null && gridPoint.row != null) {\n this.cursor = this.irisGrid.props.copyCursor;\n return true;\n }\n }\n return false;\n }\n onUp(event, grid) {\n if (this.cursor === this.irisGrid.props.copyCursor) {\n this.cursor = null;\n return true;\n }\n return false;\n }\n}\nexport default CopyCellKeyHandler;\n//# sourceMappingURL=CopyCellKeyHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { ContextActionUtils } from '@deephaven/components';\nimport { KeyHandler } from '@deephaven/grid';\nimport IrisGridUtils from \"../IrisGridUtils.js\";\nclass CopyKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n var {\n selectedRanges\n } = this.irisGrid.state;\n if (event.key === 'c' && ContextActionUtils.isModifierKeyDown(event)) {\n if (IrisGridUtils.isValidSnapshotRanges(selectedRanges)) {\n this.irisGrid.copyRanges(selectedRanges);\n } else {\n this.irisGrid.copyRanges(selectedRanges, false, false, 'Invalid copy ranges');\n }\n return true;\n }\n return false;\n }\n}\nexport default CopyKeyHandler;\n//# sourceMappingURL=CopyKeyHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { KeyHandler } from '@deephaven/grid';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport IrisGridShortcuts from \"../IrisGridShortcuts.js\";\nclass ReverseKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n if (IrisGridShortcuts.TABLE.REVERSE.matchesEvent(event)) {\n if (!this.irisGrid.isReversible()) {\n return false;\n }\n var {\n reverseType\n } = this.irisGrid.state;\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 return true;\n }\n return false;\n }\n}\nexport default ReverseKeyHandler;\n//# sourceMappingURL=ReverseKeyHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { KeyHandler } from '@deephaven/grid';\nimport IrisGridShortcuts from \"../IrisGridShortcuts.js\";\nclass ClearFilterKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n if (IrisGridShortcuts.TABLE.CLEAR_FILTERS.matchesEvent(event)) {\n this.irisGrid.clearAllFilters();\n return true;\n }\n return false;\n }\n}\nexport default ClearFilterKeyHandler;\n//# sourceMappingURL=ClearFilterKeyHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { GridMouseHandler } from '@deephaven/grid';\nimport deepEqual from 'fast-deep-equal';\n/**\n * Handles cursor and click action for cell overflow button\n * The button is rendered via IrisGridRenderer\n */\nclass IrisGridCellOverflowMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(850); // Needs to be before GridSelectionMouseHandler\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n destroyColumnTooltip() {\n this.irisGrid.setState({\n overflowButtonTooltipProps: null\n });\n }\n setCursor(point) {\n if (this.isHoveringOverflowButton(point)) {\n this.cursor = 'pointer';\n return {\n stopPropagation: false,\n preventDefault: false\n };\n }\n this.cursor = null;\n return false;\n }\n getButtonPosition(_ref) {\n var {\n x,\n y,\n column,\n row\n } = _ref;\n if (column == null || row == null) {\n return null;\n }\n var {\n renderer,\n grid,\n state,\n props\n } = this.irisGrid;\n if (!grid) {\n return null;\n }\n var {\n metrics\n } = state;\n var {\n model\n } = props;\n var {\n canvasContext: context\n } = grid;\n var theme = grid.getTheme();\n var rendererState = {\n context,\n mouseX: x,\n mouseY: y,\n metrics,\n model,\n theme\n };\n var {\n left,\n top,\n width,\n height\n } = renderer.getCellOverflowButtonPosition(rendererState);\n if (left == null || width == null || top == null || height == null) {\n return null;\n }\n return {\n left,\n top,\n width,\n height\n };\n }\n isHoveringOverflowButton(point) {\n var _this$getButtonPositi;\n var {\n x,\n y\n } = point;\n var {\n left,\n top,\n width,\n height\n } = (_this$getButtonPositi = this.getButtonPosition(point)) !== null && _this$getButtonPositi !== void 0 ? _this$getButtonPositi : {};\n if (left == null || width == null || top == null || height == null) {\n return false;\n }\n var {\n renderer,\n grid,\n state,\n props\n } = this.irisGrid;\n if (!grid) {\n return false;\n }\n var {\n metrics\n } = state;\n var {\n model\n } = props;\n var {\n canvasContext: context\n } = grid;\n var theme = grid.getTheme();\n var rendererState = {\n context,\n mouseX: x,\n mouseY: y,\n metrics,\n model,\n theme\n };\n return renderer.shouldRenderOverflowButton(rendererState) && x >= left && x <= left + width && y >= top && y <= top + height;\n }\n onMove(point) {\n if (this.isHoveringOverflowButton(point)) {\n var {\n overflowButtonTooltipProps\n } = this.irisGrid.state;\n var newProps = this.getButtonPosition(point);\n if (!deepEqual(overflowButtonTooltipProps, newProps)) {\n this.irisGrid.setState({\n overflowButtonTooltipProps: newProps\n });\n }\n } else {\n this.destroyColumnTooltip();\n }\n return this.setCursor(point);\n }\n onWheel(point) {\n this.destroyColumnTooltip();\n return this.onMove(point);\n }\n\n // Needs to be onDown and not onClick b/c of GridSelectionMouseHandler shifting cell onDown\n onDown(point) {\n this.destroyColumnTooltip();\n var {\n column,\n row\n } = point;\n if (this.isHoveringOverflowButton(point)) {\n this.irisGrid.setState({\n showOverflowModal: true,\n overflowText: this.irisGrid.getValueForCell(column, row)\n });\n }\n return false;\n }\n onContextMenu() {\n this.destroyColumnTooltip();\n return false;\n }\n onLeave() {\n this.destroyColumnTooltip();\n return false;\n }\n}\nexport default IrisGridCellOverflowMouseHandler;\n//# sourceMappingURL=IrisGridCellOverflowMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Handles interaction with tables when the Linker tool is active\n */\nclass IrisGridColumnSelectMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n isActive() {\n var {\n isSelectingColumn\n } = this.irisGrid.props;\n return isSelectingColumn;\n }\n isValidColumn(tableColumn) {\n if (tableColumn == null || tableColumn.isProxy === true) {\n return false;\n }\n var {\n columnSelectionValidator\n } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n return columnSelectionValidator(tableColumn);\n }\n return true;\n }\n updateColumnSelectionStatus() {\n var {\n columnSelectionValidator\n } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n columnSelectionValidator(null);\n }\n }\n getTableColumn(columnIndex) {\n if (columnIndex == null) {\n return null;\n }\n var {\n model\n } = this.irisGrid.props;\n var modelColumn = this.irisGrid.getModelColumn(columnIndex);\n if (modelColumn == null) {\n return null;\n }\n return model.columns[modelColumn];\n }\n onMove(gridPoint) {\n if (!this.isActive()) {\n return false;\n }\n var {\n columnAllowedCursor,\n columnNotAllowedCursor\n } = this.irisGrid.props;\n var {\n column\n } = gridPoint;\n var tableColumn = this.getTableColumn(column);\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: column\n });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: null\n });\n }\n return true;\n }\n\n // keeps linker cursor state during wheel event\n onWheel(gridPoint) {\n if (!this.isActive()) {\n return false;\n }\n var {\n columnAllowedCursor,\n columnNotAllowedCursor\n } = this.irisGrid.props;\n var {\n column\n } = gridPoint;\n var tableColumn = this.getTableColumn(column);\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: column\n });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: null\n });\n }\n\n // don't block wheel event from scrolling\n return {\n preventDefault: false,\n stopPropagation: false\n };\n }\n onLeave() {\n if (this.isActive()) {\n this.irisGrid.setState({\n hoverSelectColumn: null\n });\n }\n this.updateColumnSelectionStatus();\n return false;\n }\n onDown() {\n return this.isActive();\n }\n onClick(gridPoint) {\n if (!this.isActive()) {\n return false;\n }\n var {\n column\n } = gridPoint;\n var tableColumn = this.getTableColumn(column);\n if (tableColumn != null && this.isValidColumn(tableColumn)) {\n this.irisGrid.selectColumn(tableColumn);\n }\n return true;\n }\n}\nexport default IrisGridColumnSelectMouseHandler;\n//# sourceMappingURL=IrisGridColumnSelectMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Detects mouse hover over column headers and displays the appropriate tooltip\n */\nclass IrisGridColumnTooltipMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n hideColumnTooltip() {\n var {\n tooltip\n } = this.irisGrid;\n if (tooltip) {\n tooltip.stopTimer();\n tooltip.hide();\n }\n }\n onDown() {\n this.hideColumnTooltip();\n return false;\n }\n onContextMenu() {\n this.hideColumnTooltip();\n return false;\n }\n onWheel() {\n this.hideColumnTooltip();\n return false;\n }\n onLeave(gridPoint, grid, event) {\n /**\n * This should always be a react event\n * React seems to be handling onMouseLeave incorrectly at times\n * When moving to the padding between the column and popper, React sets\n * event.relatedTarget to window, but event.nativeEvent.relatedTarget is the popper.\n * It's possibly related to popper being rendered in a portal\n */\n var {\n relatedTarget\n } = event instanceof MouseEvent ? event : event.nativeEvent;\n var {\n tooltip\n } = this.irisGrid;\n if (!tooltip) {\n return false;\n }\n var popper = tooltip.popper.current;\n if (popper && relatedTarget instanceof Element && popper.element.contains(relatedTarget)) {\n // Do not hide the popper if we moved the cursor from canvas to popper\n return false;\n }\n this.hideColumnTooltip();\n return false;\n }\n onMove(gridPoint) {\n var {\n column,\n row,\n columnHeaderDepth\n } = gridPoint;\n var {\n shownColumnTooltip\n } = this.irisGrid.state;\n var newTooltip = null;\n if (column !== null && row === null && columnHeaderDepth === 0) {\n newTooltip = column;\n }\n if (newTooltip !== shownColumnTooltip) {\n this.irisGrid.setState({\n shownColumnTooltip: newTooltip\n });\n }\n return false;\n }\n}\nexport default IrisGridColumnTooltipMouseHandler;\n//# sourceMappingURL=IrisGridColumnTooltipMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport { Tooltip } from '@deephaven/components';\nimport { DOMUtils } from '@deephaven/utils';\nimport \"./CustomFormatAction.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Renders menuElement option with custom format input for use in formatting context menus\n *\n * TODO:\n * - capture focus when this menu action is selected via ArrowUp/ArrowDown keys\n * - dynamically update selected menu item when clicking on the input box\n */\nclass CustomFormatAction extends Component {\n constructor() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : CustomFormatAction.defaultProps;\n super(props);\n _defineProperty(this, \"inputRef\", void 0);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.inputRef = /*#__PURE__*/React.createRef();\n }\n handleInputChange() {\n var {\n onChange\n } = this.props;\n if (this.inputRef.current) {\n onChange(this.inputRef.current.value);\n }\n }\n closeContextMenu() {\n var {\n forwardedProps\n } = this.props;\n var {\n closeMenu\n } = forwardedProps;\n closeMenu(true);\n }\n revertToDefault() {\n var {\n onChange\n } = this.props;\n onChange(null);\n }\n returnFocusToContextMenu() {\n var parentContextMenu = DOMUtils.getClosestByClassName(this.inputRef.current, 'context-menu-container');\n if (parentContextMenu instanceof HTMLElement) {\n parentContextMenu.focus();\n }\n }\n handleKeyDown(event) {\n switch (event.key) {\n case 'Enter':\n event.stopPropagation();\n this.closeContextMenu();\n break;\n case 'Escape':\n event.stopPropagation();\n this.revertToDefault();\n this.closeContextMenu();\n break;\n case 'ArrowRight':\n case 'ArrowLeft':\n event.stopPropagation();\n break;\n case 'ArrowUp':\n case 'ArrowDown':\n this.returnFocusToContextMenu();\n break;\n default:\n event.stopPropagation();\n }\n }\n render() {\n var {\n formatString,\n forwardedProps,\n placeholder,\n title\n } = this.props;\n var {\n menuItem: {\n description\n },\n iconElement\n } = forwardedProps;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-group flex-grow mb-0\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"custom-format-title\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"icon\",\n children: iconElement\n }), /*#__PURE__*/_jsxs(\"label\", {\n className: \"title mb-0\",\n htmlFor: \"custom-format-input\",\n children: [title, description != null && /*#__PURE__*/_jsx(Tooltip, {\n children: description\n })]\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"pl-2 pr-2 pb-2\",\n children: /*#__PURE__*/_jsx(\"input\", {\n id: \"custom-format-input\",\n className: \"form-control text-right mb-0\",\n type: \"text\",\n defaultValue: formatString,\n ref: this.inputRef,\n placeholder: placeholder,\n onKeyDown: this.handleKeyDown,\n onChange: this.handleInputChange,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\"\n })\n })]\n });\n }\n}\n_defineProperty(CustomFormatAction, \"defaultProps\", {\n formatString: '',\n forwardedProps: {\n menuItem: {},\n closeMenu(focusInput) {\n // no-op\n },\n iconElement: null\n },\n placeholder: '',\n title: '',\n onChange(value) {\n // no-op\n }\n});\nexport default CustomFormatAction;\n//# sourceMappingURL=CustomFormatAction.js.map","import React from 'react';\nimport { TableColumnFormatter } from '@deephaven/jsapi-utils';\nimport CustomFormatAction from \"./CustomFormatAction.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nclass FormatContextMenuUtils {\n /**\n * Returns true if default option should be active in the context menu\n * @param selectedFormat selected format object or null\n */\n static isDefaultSelected(selectedFormat) {\n return !selectedFormat || ![TableColumnFormatter.TYPE_CONTEXT_CUSTOM, TableColumnFormatter.TYPE_CONTEXT_PRESET].includes(selectedFormat.type);\n }\n\n /**\n * Returns true if custom format option should be active in the context menu\n * @param selectedFormat selected format object or null\n */\n static isCustomSelected(selectedFormat) {\n return selectedFormat != null && selectedFormat.type === TableColumnFormatter.TYPE_CONTEXT_CUSTOM;\n }\n\n /**\n * Creates context menu option\n * @param title Context menu title\n * @param format Format object\n * @param group Context menu group\n * @param isSelected Is current option selected\n */\n static makeOption(title, format, group, isSelected) {\n return {\n title,\n description: title,\n group,\n format,\n isSelected\n };\n }\n\n /**\n * Creates context menu option with an input element\n * @param format Format object\n * @param group Context menu group\n * @param placeholder Input element placeholder\n * @param isSelected Is current option selected\n * @param onChange Input element onChange callback\n */\n static makeCustomFormatOption(format, group, placeholder, isSelected, onChange) {\n var _format$formatString;\n return {\n title: format.label,\n description: format.label,\n format,\n group,\n isSelected,\n menuElement: /*#__PURE__*/_jsx(CustomFormatAction, {\n formatString: (_format$formatString = format.formatString) !== null && _format$formatString !== void 0 ? _format$formatString : undefined,\n title: format.label,\n placeholder: placeholder,\n onChange: onChange\n })\n };\n }\n}\nexport default FormatContextMenuUtils;\n//# sourceMappingURL=FormatContextMenuUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { DateTimeColumnFormatter, TableUtils } from '@deephaven/jsapi-utils';\nimport FormatContextMenuUtils from \"./FormatContextMenuUtils.js\";\nclass DateTimeFormatContextMenu {\n /**\n * Creates list of formatting options for DateTime context menu\n * @param formatter Formatter instance\n * @param selectedFormat Selected format object, null for no selected format\n * @returns Array of formatting options for the context menu\n */\n static getOptions(formatter, selectedFormat) {\n var currentTime = new Date();\n var formatItems = [{\n group: DateTimeFormatContextMenu.dateGroup,\n formatString: 'yyyy-MM-dd'\n }, {\n group: DateTimeFormatContextMenu.dateGroup,\n formatString: 'MM-dd-yyyy'\n }, {\n group: DateTimeFormatContextMenu.timeGroup,\n formatString: 'HH:mm:ss'\n }, {\n group: DateTimeFormatContextMenu.timeGroup,\n formatString: 'HH:mm:ss.SSS'\n }, {\n group: DateTimeFormatContextMenu.timeGroup,\n formatString: 'HH:mm:ss.SSSSSSSSS'\n }, {\n group: DateTimeFormatContextMenu.dateTimeGroup,\n formatString: \"yyyy-MM-dd HH:mm:ss\"\n }, {\n group: DateTimeFormatContextMenu.dateTimeGroup,\n formatString: \"yyyy-MM-dd HH:mm:ss.SSS\"\n }, {\n group: DateTimeFormatContextMenu.dateTimeGroup,\n formatString: \"yyyy-MM-dd HH:mm:ss.SSSSSSSSS\"\n }];\n var presetFormatOptions = formatItems.map(item => {\n var format = DateTimeColumnFormatter.makeFormat('', item.formatString, DateTimeColumnFormatter.TYPE_CONTEXT_PRESET);\n var title = formatter.getFormattedString(currentTime, TableUtils.dataType.DATETIME, '', format);\n return FormatContextMenuUtils.makeOption(title, format, item.group, DateTimeColumnFormatter.isSameFormat(format, selectedFormat));\n });\n var defaultOption = FormatContextMenuUtils.makeOption('Default', null, DateTimeFormatContextMenu.dateGroup, FormatContextMenuUtils.isDefaultSelected(selectedFormat));\n return [defaultOption, ...presetFormatOptions];\n }\n}\n_defineProperty(DateTimeFormatContextMenu, \"dateGroup\", 10);\n_defineProperty(DateTimeFormatContextMenu, \"timeGroup\", 20);\n_defineProperty(DateTimeFormatContextMenu, \"dateTimeGroup\", 30);\nexport default DateTimeFormatContextMenu;\n//# sourceMappingURL=DateTimeFormatContextMenu.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { DecimalColumnFormatter } from '@deephaven/jsapi-utils';\nimport FormatContextMenuUtils from \"./FormatContextMenuUtils.js\";\nclass DecimalFormatContextMenu {\n /**\n * Creates list of formatting options for Decimal context menu\n * @param dh JSAPI instance\n * @param selectedFormat Selected format object, null for no selected format\n * @param onCustomFormatChange Callback to call when the custom format is changed\n * @returns Array of formatting options for the context menu\n */\n static getOptions(dh, selectedFormat, onCustomFormatChange) {\n var formatItems = [{\n format: DecimalColumnFormatter.FORMAT_PERCENT,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_BASIS_POINTS,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_MILLIONS,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_SCIENTIFIC_NOTATION,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_ROUND,\n group: DecimalFormatContextMenu.presetRoundGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_ROUND_TWO_DECIMALS,\n group: DecimalFormatContextMenu.presetRoundGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_ROUND_FOUR_DECIMALS,\n group: DecimalFormatContextMenu.presetRoundGroup\n }];\n var defaultFormatOption = FormatContextMenuUtils.makeOption('Default', null, DecimalFormatContextMenu.defaultGroup, FormatContextMenuUtils.isDefaultSelected(selectedFormat));\n var presetFormatOptions = formatItems.map(item => FormatContextMenuUtils.makeOption(item.format.label, item.format, item.group, DecimalColumnFormatter.isSameFormat(item.format, selectedFormat)));\n var isCustomSelected = FormatContextMenuUtils.isCustomSelected(selectedFormat);\n var customFormat = isCustomSelected ? selectedFormat : DecimalColumnFormatter.makeCustomFormat();\n var customFormatOption = FormatContextMenuUtils.makeCustomFormatOption(customFormat, DecimalFormatContextMenu.customGroup, DecimalColumnFormatter.DEFAULT_FORMAT_STRING, isCustomSelected, formatString => {\n if (formatString != null) {\n var newCustomFormat = DecimalColumnFormatter.makeCustomFormat(formatString);\n if (DecimalColumnFormatter.isValid(dh, newCustomFormat)) {\n onCustomFormatChange(newCustomFormat);\n }\n } else {\n onCustomFormatChange(null);\n }\n });\n return [defaultFormatOption, ...presetFormatOptions, customFormatOption];\n }\n}\n_defineProperty(DecimalFormatContextMenu, \"defaultGroup\", 10);\n_defineProperty(DecimalFormatContextMenu, \"presetGroup\", 20);\n_defineProperty(DecimalFormatContextMenu, \"presetRoundGroup\", 30);\n_defineProperty(DecimalFormatContextMenu, \"customGroup\", 40);\nexport default DecimalFormatContextMenu;\n//# sourceMappingURL=DecimalFormatContextMenu.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { IntegerColumnFormatter } from '@deephaven/jsapi-utils';\nimport FormatContextMenuUtils from \"./FormatContextMenuUtils.js\";\nclass IntegerFormatContextMenu {\n /**\n * Creates list of formatting options for Integer context menu\n * @param dh JSAPI instance\n * @param selectedFormat Selected format object, null for no selected format\n * @param onCustomFormatChange Callback to call when the custom format is changed\n * @returns Array of formatting options for the context menu\n */\n static getOptions(dh, selectedFormat, onCustomFormatChange) {\n var formatItems = [{\n format: IntegerColumnFormatter.FORMAT_MILLIONS,\n group: IntegerFormatContextMenu.presetGroup\n }, {\n format: IntegerColumnFormatter.FORMAT_SCIENTIFIC_NOTATION,\n group: IntegerFormatContextMenu.presetGroup\n }];\n var defaultFormatOption = FormatContextMenuUtils.makeOption('Default', null, IntegerFormatContextMenu.defaultGroup, FormatContextMenuUtils.isDefaultSelected(selectedFormat));\n var presetFormatOptions = formatItems.map(item => FormatContextMenuUtils.makeOption(item.format.label, item.format, item.group, IntegerColumnFormatter.isSameFormat(item.format, selectedFormat)));\n var isCustomSelected = FormatContextMenuUtils.isCustomSelected(selectedFormat);\n var customFormat = isCustomSelected ? selectedFormat : IntegerColumnFormatter.makeCustomFormat();\n var customFormatOption = FormatContextMenuUtils.makeCustomFormatOption(customFormat, IntegerFormatContextMenu.customGroup, IntegerColumnFormatter.DEFAULT_FORMAT_STRING, isCustomSelected, formatString => {\n if (formatString != null) {\n var newCustomFormat = IntegerColumnFormatter.makeCustomFormat(formatString);\n if (IntegerColumnFormatter.isValid(dh, newCustomFormat)) {\n onCustomFormatChange(newCustomFormat);\n }\n } else {\n onCustomFormatChange(null);\n }\n });\n return [defaultFormatOption, ...presetFormatOptions, customFormatOption];\n }\n}\n_defineProperty(IntegerFormatContextMenu, \"defaultGroup\", 10);\n_defineProperty(IntegerFormatContextMenu, \"presetGroup\", 20);\n_defineProperty(IntegerFormatContextMenu, \"customGroup\", 30);\nexport default IntegerFormatContextMenu;\n//# sourceMappingURL=IntegerFormatContextMenu.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhFilterFilled, vsRemove, vsCheck, vsFilter } from '@deephaven/icons';\nimport debounce from 'lodash.debounce';\nimport { ContextActions, ContextActionUtils, GLOBAL_SHORTCUTS } from '@deephaven/components';\nimport { GridMouseHandler, GridRange, GridRenderer, isDeletableGridModel, isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport { TableColumnFormatter, DateTimeColumnFormatter, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { TextUtils, assertNotEmpty, assertNotNaN, assertNotNull, copyToClipboard } from '@deephaven/utils';\nimport { DateTimeFormatContextMenu, DecimalFormatContextMenu, IntegerFormatContextMenu } from \"../format-context-menus/index.js\";\nimport \"./IrisGridContextMenuHandler.css\";\nimport SHORTCUTS from \"../IrisGridShortcuts.js\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridContextMenuHandler');\nvar DEBOUNCE_UPDATE_FORMAT = 150;\nvar CONTEXT_MENU_DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.SSSSSSSSS';\nvar MAX_MULTISELECT_ROWS = 1000;\n\n/**\n * Used to eat the mouse event in the bottom right corner of the scroll bar\n */\nclass IrisGridContextMenuHandler extends GridMouseHandler {\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(columnFilter, newColumnFilter, operator) {\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(filterText, newFilterText, operator) {\n return operator && filterText != null ? \"\".concat(filterText, \" \").concat(operator, \" \").concat(newFilterText) : newFilterText;\n }\n\n /**\n * Converts operator to text string,\n */\n static getOperatorAsText(operator) {\n return operator === '&&' ? 'And' : 'Or';\n }\n static getRowOptionFormatted(command, cellValue) {\n var len = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 30;\n return \"\".concat(command, \" \\\"\").concat(GridRenderer.truncate(cellValue, len - command.length - 3), \"\\\"\");\n }\n constructor(irisGrid, dh) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n _defineProperty(this, \"debouncedUpdateCustomFormat\", void 0);\n _defineProperty(this, \"dh\", void 0);\n this.getNumberValueEqualsFilter = this.getNumberValueEqualsFilter.bind(this);\n this.getFilterValueForNumberOrChar = this.getFilterValueForNumberOrChar.bind(this);\n this.debouncedUpdateCustomFormat = debounce(irisGrid.handleFormatSelection, DEBOUNCE_UPDATE_FORMAT);\n this.dh = dh;\n this.irisGrid = irisGrid;\n }\n componentWillUnmount() {\n this.debouncedUpdateCustomFormat.flush();\n }\n getHeaderActions(modelIndex, gridPoint) {\n var {\n irisGrid\n } = this;\n var {\n column: visibleIndex\n } = gridPoint;\n assertNotNull(visibleIndex);\n var {\n model\n } = irisGrid.props;\n var {\n columns\n } = model;\n var column = columns[modelIndex];\n var actions = [];\n var {\n metrics,\n reverseType,\n quickFilters,\n advancedFilters,\n searchFilter\n } = irisGrid.state;\n var theme = irisGrid.getTheme();\n assertNotNull(metrics);\n var {\n filterIconColor,\n filterBarActiveColor,\n contextMenuSortIconColor,\n contextMenuReverseIconColor\n } = theme;\n var modelSort = model.sort;\n var columnSort = TableUtils.getSortForColumn(modelSort, column.name);\n var hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n var {\n userColumnWidths\n } = metrics;\n var isColumnHidden = [...userColumnWidths.values()].some(columnWidth => columnWidth === 0);\n var isColumnFreezable = model.getColumnHeaderParentGroup(modelIndex, 0) === undefined && !(isExpandableGridModel(model) && model.hasExpandableRows);\n var isColumnFrozen = model.isColumnFrozen(modelIndex);\n var isColumnSortable = model.isColumnSortable(modelIndex);\n actions.push({\n title: 'Hide Column',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.hideColumnByVisibleIndex(visibleIndex);\n }\n });\n actions.push({\n title: isColumnFrozen ? 'Unfreeze Column' : 'Freeze Column',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n disabled: !isColumnFreezable,\n action: () => {\n if (isColumnFrozen) {\n this.irisGrid.unFreezeColumnByColumnName(column.name);\n } else {\n this.irisGrid.freezeColumnByColumnName(column.name);\n }\n },\n order: 10\n });\n actions.push({\n title: 'Show All Columns',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.showAllColumns();\n },\n disabled: !isColumnHidden\n });\n actions.push({\n title: 'Quick Filters',\n icon: vsRemove,\n iconColor: filterBarActiveColor,\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 10,\n action: () => {\n this.irisGrid.toggleFilterBar(visibleIndex);\n }\n });\n actions.push({\n title: 'Advanced Filters',\n icon: advancedFilters.get(modelIndex) ? dhFilterFilled : vsFilter,\n iconColor: filterIconColor,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 20,\n action: () => {\n this.irisGrid.handleAdvancedMenuOpened(visibleIndex);\n }\n });\n actions.push({\n title: 'Clear Table Filters',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 40,\n // this just displays the shortcut, the actual listener is in irisgrid handleKeyDown\n shortcut: SHORTCUTS.TABLE.CLEAR_FILTERS,\n action: () => {\n this.irisGrid.clearAllFilters();\n },\n disabled: !(quickFilters.size > 0 || advancedFilters.size > 0 || searchFilter != null)\n });\n actions.push({\n title: 'Sort by',\n icon: vsRemove,\n iconColor: contextMenuSortIconColor,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 10,\n actions: this.sortByActions(column, modelIndex, columnSort),\n disabled: !isColumnSortable\n });\n actions.push({\n title: 'Add Additional Sort',\n /**\n * disable conditions:\n * 1. table is sorted only by this column\n * 2. table is only reversed\n * 3. 1 & 2 combined\n * 4. table has no sort\n * reverse is a type of sort, so needs to be accounted for in exclusions\n * */\n disabled: columnSort && modelSort.length === 1 || hasReverse && modelSort.length === 1 || columnSort && hasReverse && modelSort.length === 2 || modelSort.length === 0 || !isColumnSortable,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 20,\n actions: this.additionalSortActions(column, modelIndex)\n });\n actions.push({\n title: 'Clear Table Sorting',\n disabled:\n // reverse is a type of sort, but special and needs to be exluded despite being part of model.sort\n modelSort.length === 0 || hasReverse && modelSort.length === 1,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n action: () => {\n this.irisGrid.sortColumn(visibleIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.none);\n },\n order: 30\n });\n actions.push({\n title: reverseType === TableUtils.REVERSE_TYPE.NONE ? 'Reverse Table' : 'Clear Reverse Table',\n icon: vsRemove,\n iconColor: contextMenuReverseIconColor,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 40,\n disabled: !model.isReversible,\n // this just displays the shortcut, the actual listener is in irisgrid handleKeyDown\n shortcut: SHORTCUTS.TABLE.REVERSE,\n action: () => {\n if (reverseType === TableUtils.REVERSE_TYPE.NONE) {\n this.irisGrid.reverse(TableUtils.REVERSE_TYPE.POST_SORT);\n } else {\n this.irisGrid.reverse(TableUtils.REVERSE_TYPE.NONE);\n }\n }\n });\n actions.push({\n title: 'Copy Column Name',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n shortcutText: ContextActionUtils.isMacPlatform() ? '⌥Click' : 'Alt+Click',\n action: () => {\n var _model$textForColumnH;\n copyToClipboard((_model$textForColumnH = model.textForColumnHeader(modelIndex)) !== null && _model$textForColumnH !== void 0 ? _model$textForColumnH : '').catch(e => log.error('Unable to copy header', e));\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 var _this$numberFormatAct;\n actions.push({\n title: 'Number Format',\n group: IrisGridContextMenuHandler.GROUP_FORMAT,\n actions: (_this$numberFormatAct = this.numberFormatActions(column)) !== null && _this$numberFormatAct !== void 0 ? _this$numberFormatAct : undefined\n });\n }\n return actions;\n }\n getCellActions(modelColumn, grid, gridPoint) {\n var {\n irisGrid\n } = this;\n var {\n column: columnIndex,\n row: rowIndex\n } = gridPoint;\n var {\n model,\n canCopy\n } = irisGrid.props;\n var {\n columns\n } = model;\n var modelRow = irisGrid.getModelRow(rowIndex);\n assertNotNull(modelRow);\n var sourceCell = model.sourceForCell(modelColumn, modelRow);\n var {\n column: sourceColumn,\n row: sourceRow\n } = sourceCell;\n var value = model.valueForCell(sourceColumn, sourceRow);\n var column = columns[sourceColumn];\n var actions = [];\n var theme = irisGrid.getTheme();\n var {\n filterIconColor\n } = theme;\n if (column == null || rowIndex == null) return actions;\n\n // Expand/Collapse options\n if (isExpandableGridModel(model) && model.isRowExpandable(sourceRow)) {\n // If there are grouped columns, then it is a rollup\n // The first column will be the \"group\" column with the value that should be expanded\n var expandingColumn = 0;\n var cellValue = model.valueForCell(expandingColumn, sourceRow);\n var cellText = cellValue == null ? 'null' : model.textForCell(expandingColumn, sourceRow);\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted(model.isRowExpanded(sourceRow) ? 'Collapse' : 'Expand', cellText),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 10,\n action: () => {\n model.setRowExpanded(sourceRow, !model.isRowExpanded(sourceRow));\n }\n });\n if (model.isExpandAllAvailable === true) {\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted('Expand All in', cellText),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 20,\n action: () => {\n model.setRowExpanded(sourceRow, true, true);\n }\n });\n }\n }\n if (isExpandableGridModel(model) && model.hasExpandableRows && model.isExpandAllAvailable === true) {\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 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 var gotoRow = {\n title: 'Go to',\n iconColor: filterIconColor,\n shortcut: SHORTCUTS.TABLE.GOTO_ROW,\n group: IrisGridContextMenuHandler.GROUP_GOTO,\n order: 10,\n action: () => this.irisGrid.toggleGotoRow(\"\".concat(rowIndex + 1), \"\".concat(value), column.name)\n };\n actions.push(gotoRow);\n if (canCopy) {\n actions.push({\n title: 'Copy Cell',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n shortcutText: ContextActionUtils.isMacPlatform() ? '⌥Click' : 'Alt+Click',\n order: 10,\n action: () => {\n irisGrid.copyCell(columnIndex, rowIndex);\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 actions.push({\n title: 'View Cell Contents',\n group: IrisGridContextMenuHandler.GROUP_VIEW_CONTENTS,\n order: 10,\n action: () => {\n irisGrid.setState({\n showOverflowModal: true,\n overflowText: irisGrid.getValueForCell(columnIndex, rowIndex)\n });\n }\n });\n return actions;\n }\n\n // moved out of getCellActions since snapshots are async\n getCellFilterActions(modelColumn, grid, gridPoint) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n dh,\n irisGrid\n } = _this;\n var {\n row: rowIndex\n } = gridPoint;\n var {\n model\n } = irisGrid.props;\n var {\n columns\n } = model;\n var modelRow = irisGrid.getModelRow(rowIndex);\n var {\n getSelectedRanges\n } = grid;\n assertNotNull(modelRow);\n var sourceCell = model.sourceForCell(modelColumn, modelRow);\n var {\n column: sourceColumn,\n row: sourceRow\n } = sourceCell;\n var column = columns[sourceColumn];\n if (column == null || rowIndex == null) return [];\n if (!model.isFilterable(sourceColumn)) return [];\n var {\n quickFilters\n } = irisGrid.state;\n var theme = irisGrid.getTheme();\n var {\n filterIconColor\n } = theme;\n var {\n settings\n } = irisGrid.props;\n var selectedRanges = [...getSelectedRanges()];\n // no selected range (i.e. right clicked a cell without highlighting it)\n // although GridSelectionMouseHandler does change selectedRanges, state isn't updated in\n // time for getSelectedRanges to show the selected cell\n if (selectedRanges.length === 0) {\n selectedRanges.push(new GridRange(sourceColumn, sourceRow, sourceColumn, sourceRow));\n }\n\n // - this block truncates the selected ranges to MAX_MULTISELECT_ROWS rows\n // - NOT first MAX_MULTISELECT_ROWS rows after the first row\n // - NOT first MAX_MULTISELECT_ROWS unique values (prevent case where there are a small\n // amount of values, but a large amount of rows with those values)\n if (GridRange.containsCell(selectedRanges, sourceColumn, sourceRow)) {\n var rowCount = GridRange.rowCount(selectedRanges);\n while (rowCount > MAX_MULTISELECT_ROWS) {\n var lastRow = selectedRanges.pop();\n // should never occur, sanity check\n assertNotNull(lastRow, 'Selected ranges should not be empty');\n var lastRowSize = GridRange.rowCount([lastRow]);\n // should never occur, sanity check\n assertNotNaN(lastRowSize, 'Selected ranges should not be unbounded');\n\n // if removing the last rows makes it dip below the max, then need to\n // bring it back but truncated\n if (rowCount - lastRowSize < MAX_MULTISELECT_ROWS) {\n var _lastRow$endRow;\n // nullish operator to make TS happy, but the check above should prevent this\n selectedRanges.push(new GridRange(lastRow.startColumn, lastRow.startRow, lastRow.endColumn, ((_lastRow$endRow = lastRow.endRow) !== null && _lastRow$endRow !== void 0 ? _lastRow$endRow : 0) - (rowCount - MAX_MULTISELECT_ROWS)));\n break;\n }\n rowCount -= lastRowSize;\n }\n } else {\n // if the block is not in the selected ranges, meaning the user must've right-clicked\n // outside the selected ranges`\n selectedRanges = [new GridRange(sourceColumn, sourceRow, sourceColumn, sourceRow)];\n }\n\n // this should be non empty\n // - valid selected ranges will always have a startRow and endRow\n // - if there are no selected ranges, then one with sourceColumn/Row is added\n assertNotEmpty(selectedRanges);\n\n // get the snapshot values, but ignore all null/undefined values\n var snapshot = yield model.snapshot(selectedRanges);\n var snapshotValues = new Set();\n for (var i = 0; i < snapshot.length; i += 1) {\n if (snapshot[i].length === 1) {\n // if the selected range has start/end columns defined, so the snapshot is a 1D array of the row\n if (snapshot[i][0] != null) {\n snapshotValues.add(snapshot[i][0]);\n }\n } else if (snapshot[i][sourceColumn] != null) {\n // if the selected range is an entire row\n snapshotValues.add(snapshot[i][sourceColumn]);\n }\n }\n // if snapshotValues is empty here, it means all of the snapshot's values were null/undefined\n\n var filterMenu = {\n title: \"Filter by Value\".concat(snapshotValues.size > 1 ? 's' : ''),\n icon: vsRemove,\n iconColor: filterIconColor,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 10,\n actions: []\n };\n\n // only made of null/undefineds\n if (snapshotValues.size === 0) {\n // null gets a special menu\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.nullFilterActions(column, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.nullFilterActions(column));\n } else if (snapshotValues.size === 1 && snapshotValues.has('')) {\n // empty string gets a special menu\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.emptyStringFilterActions(column, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.emptyStringFilterActions(column));\n } else if (TableUtils.isBooleanType(column.type)) {\n // boolean should have OR condition, and handles it's own null menu options\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'Or',\n actions: _this.booleanFilterActions(column, model.textForCell(sourceColumn, sourceRow), quickFilters.get(sourceColumn), '||'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.booleanFilterActions(column, model.textForCell(sourceColumn, sourceRow)));\n } else if (TableUtils.isNumberType(column.type) || TableUtils.isCharType(column.type)) {\n // Chars get treated like numbers in terms of which filters are available\n assertNotNull(sourceColumn);\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.numberFilterActions(column, snapshotValues, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.numberFilterActions(column, snapshotValues, quickFilters.get(sourceColumn)));\n } else if (TableUtils.isDateType(column.type)) {\n var dateFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone: settings === null || settings === void 0 ? void 0 : settings.timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: CONTEXT_MENU_DATE_FORMAT\n });\n var previewFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone: settings === null || settings === void 0 ? void 0 : settings.timeZone,\n showTimeZone: settings === null || settings === void 0 ? void 0 : settings.showTimeZone,\n showTSeparator: settings === null || settings === void 0 ? void 0 : settings.showTSeparator,\n defaultDateTimeFormatString: CONTEXT_MENU_DATE_FORMAT\n });\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.dateFilterActions(column, snapshotValues, dateFilterFormatter, previewFilterFormatter, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.dateFilterActions(column, snapshotValues, dateFilterFormatter, previewFilterFormatter, quickFilters.get(sourceColumn)));\n } else {\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.stringFilterActions(column, snapshotValues, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.stringFilterActions(column, snapshotValues));\n }\n return [filterMenu];\n })();\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, value) {\n var {\n dh\n } = this;\n var columnFilter = column.filter();\n if (value === Number.POSITIVE_INFINITY) {\n return dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.greaterThan(dh.FilterValue.ofNumber(0)));\n }\n if (value === Number.NEGATIVE_INFINITY) {\n return dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.lessThan(dh.FilterValue.ofNumber(0)));\n }\n if (Number.isNaN(value)) {\n return dh.FilterCondition.invoke('isNaN', columnFilter);\n }\n var filterValue = this.getFilterValueForNumberOrChar(column.type, value);\n return columnFilter.eq(filterValue);\n }\n getFilterValueForNumberOrChar(columnType, value) {\n var {\n dh\n } = this;\n return TableUtils.isCharType(columnType) ? dh.FilterValue.ofString(String.fromCharCode(value)) : dh.FilterValue.ofNumber(value);\n }\n onContextMenu(gridPoint, grid, event) {\n var {\n irisGrid\n } = this;\n var {\n y,\n column: columnIndex,\n row: rowIndex,\n columnHeaderDepth\n } = gridPoint;\n var modelColumn = irisGrid.getModelColumn(columnIndex);\n var modelRow = irisGrid.getModelRow(rowIndex);\n var {\n model,\n canCopy\n } = irisGrid.props;\n var {\n columns\n } = model;\n var {\n metrics,\n isFilterBarShown,\n quickFilters,\n advancedFilters,\n selectedRanges\n } = irisGrid.state;\n assertNotNull(metrics);\n var {\n columnHeaderHeight,\n gridY,\n columnHeaderMaxDepth\n } = metrics;\n var actions = [];\n if (modelColumn != null && modelRow != null) {\n var sourceCell = model.sourceForCell(modelColumn, modelRow !== null && modelRow !== void 0 ? modelRow : 0);\n var {\n column: sourceColumn,\n row: sourceRow\n } = sourceCell;\n var value = model.valueForCell(sourceColumn, sourceRow);\n var valueText = model.textForCell(sourceColumn, sourceRow);\n var column = columns[sourceColumn];\n var {\n onContextMenu\n } = irisGrid.props;\n if (column != null) {\n actions.push(...onContextMenu({\n model,\n value,\n valueText,\n column,\n rowIndex,\n columnIndex,\n modelRow,\n modelColumn\n }));\n }\n }\n if (modelColumn != null) {\n var clearFilterRange = model.getClearFilterRange(modelColumn);\n if (clearFilterRange != null && clearFilterRange.length > 0) {\n // Clear column filter should still be available after last row\n // And should be available in both header and body context menus\n actions.push({\n title: clearFilterRange[1] - clearFilterRange[0] > 0 ? 'Clear Group Filter' : 'Clear Column Filter',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 30,\n action: () => {\n this.irisGrid.removeColumnFilter(clearFilterRange);\n },\n disabled: !Array.from(quickFilters.keys()).some(col => col >= clearFilterRange[0] && col <= clearFilterRange[1]) && !Array.from(advancedFilters.keys()).some(col => col >= clearFilterRange[0] && col <= clearFilterRange[1])\n });\n }\n }\n if (isFilterBarShown ? y <= gridY : y <= columnHeaderHeight * columnHeaderMaxDepth && columnHeaderDepth === 0) {\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 actions.push(this.getCellFilterActions(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 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 if (isEditableGridModel(model) && model.isEditable && selectedRanges.length > 0 && isDeletableGridModel(model) && model.isDeletable) {\n actions.push({\n title: 'Delete Selected Rows',\n group: IrisGridContextMenuHandler.GROUP_EDIT,\n disabled: !model.isDeletableRanges(selectedRanges),\n order: 50,\n action: () => {\n this.irisGrid.deleteRanges(selectedRanges);\n }\n });\n }\n }\n if (actions.length === 0) {\n return false;\n }\n assertNotNull(irisGrid.gridWrapper);\n ContextActions.triggerMenu(irisGrid.gridWrapper, event.clientX, event.clientY, actions);\n return true;\n }\n dateFormatActions(column) {\n var _this2 = this;\n var {\n model\n } = this.irisGrid.props;\n var {\n formatter\n } = model;\n var selectedFormat = formatter.getColumnFormat(column.type, column.name);\n var formatOptions = DateTimeFormatContextMenu.getOptions(formatter, selectedFormat);\n var actions = [];\n var _loop = function _loop() {\n var {\n description,\n format,\n group,\n isSelected,\n title\n } = formatOptions[i];\n actions.push({\n title,\n description,\n icon: isSelected ? vsCheck : undefined,\n group,\n order: i,\n action: () => {\n var modelIndex = model.getColumnIndexByName(column.name);\n assertNotNull(modelIndex);\n _this2.irisGrid.handleFormatSelection(modelIndex, format);\n }\n });\n };\n for (var i = 0; i < formatOptions.length; i += 1) {\n _loop();\n }\n return actions;\n }\n numberFormatActions(column) {\n var _this3 = this;\n var {\n model\n } = this.irisGrid.props;\n var {\n formatter\n } = model;\n var {\n dh\n } = this;\n var selectedFormat = formatter.getColumnFormat(column.type, column.name);\n var formatOptions;\n var columnIndex = model.getColumnIndexByName(column.name);\n if (TableUtils.isDecimalType(column.type)) {\n formatOptions = DecimalFormatContextMenu.getOptions(dh, selectedFormat, format => {\n assertNotNull(columnIndex);\n this.debouncedUpdateCustomFormat(columnIndex, format);\n });\n } else if (TableUtils.isIntegerType(column.type)) {\n formatOptions = IntegerFormatContextMenu.getOptions(dh, selectedFormat, format => {\n assertNotNull(columnIndex);\n this.debouncedUpdateCustomFormat(columnIndex, format);\n });\n } else {\n log.error('Invalid column type in numberFormatActions');\n return null;\n }\n var actions = [];\n var _loop2 = function _loop2() {\n var {\n format,\n isSelected\n } = formatOptions[i];\n actions.push(_objectSpread(_objectSpread({}, formatOptions[i]), {}, {\n icon: isSelected ? vsCheck : undefined,\n order: i,\n action: () => {\n if (columnIndex === undefined && format && format.type === TableColumnFormatter.TYPE_CONTEXT_CUSTOM) {\n return;\n }\n assertNotNull(columnIndex);\n _this3.irisGrid.handleFormatSelection(columnIndex, format);\n }\n }));\n };\n for (var i = 0; i < formatOptions.length; i += 1) {\n _loop2();\n }\n return actions;\n }\n stringFilterActions(column, snapshotValues, quickFilter, operator) {\n var {\n dh\n } = this;\n var values = Array.from(snapshotValues.keys());\n var filterValues = values.map(value => dh.FilterValue.ofString(value));\n var valueDescription = filterValues.length === 1 ? filterValues[0] : 'the selected values';\n var newQuickFilter = quickFilter;\n if (!newQuickFilter) {\n newQuickFilter = {\n filter: null,\n text: null\n };\n }\n var {\n filter,\n text: filterText\n } = newQuickFilter;\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n var toFilterText = item => {\n var _TableUtils$escapeQui;\n return (_TableUtils$escapeQui = TableUtils.escapeQuickTextFilter(item)) !== null && _TableUtils$escapeQui !== void 0 ? _TableUtils$escapeQui : '';\n };\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', TextUtils.join(values.slice(0, 20).map(value => \"\\\"\".concat(toFilterText(value), \"\\\"\"))), values.length > 1 && /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-subtitle\",\n children: [\"(\", values.length, \" values selected)\"]\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'text is exactly',\n description: \"Show only rows where \".concat(column.name, \" is \").concat(valueDescription, \" (case sensitive)\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(filterValue => column.filter().eq(filterValue)).reduce((prev, curr) => prev.or(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(toFilterText).join(' || '), operator));\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 \".concat(column.name, \" is not \").concat(valueDescription, \" (case sensitive)\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(filterValue => column.filter().notEq(filterValue)).reduce((prev, curr) => prev.and(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!=\".concat(toFilterText(value))).join(' && '), operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n actions.push({\n title: \"text contains\",\n description: \"Show only rows where \".concat(column.name, \" contains \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(filterValues.map(filterValue => column.filter().contains(filterValue)).reduce((prev, curr) => prev.or(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"~\".concat(toFilterText(value))).join(' || '), operator));\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 \".concat(column.name, \" does not contain \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().or(filterValues.map(filterValue => column.filter().contains(filterValue).not()).reduce((prev, curr) => prev.and(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!~\".concat(toFilterText(value))).join(' && '), operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'text starts with',\n description: \"Show only rows where \".concat(column.name, \" starts with \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(filterValues.map(filterValue => column.filter().invoke('startsWith', filterValue)).reduce((prev, curr) => prev.or(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"\".concat(toFilterText(value), \"*\")).join(' || '), operator));\n },\n order: 50,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'text ends with',\n description: \"Show only rows where \".concat(column.name, \" ends with \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(filterValues.map(filterValue => column.filter().invoke('endsWith', filterValue)).reduce((prev, curr) => prev.or(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"*\".concat(toFilterText(value))).join(' || '), operator));\n },\n order: 60,\n group: ContextActions.groups.low\n });\n return actions;\n }\n numberFilterActions(column, snapshotValues, quickFilter, operator) {\n var values = Array.from(snapshotValues.keys());\n var valueDesc = values.length === 1 ? \"\".concat(values) : 'the selected values';\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 var toFilterText = item => TableUtils.isCharType(column.type) ? String.fromCharCode(item) : \"\".concat(item);\n var filter = null;\n var filterText = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', TextUtils.join(values.slice(0, 20).map(value => \"\\\"\".concat(toFilterText(value), \"\\\"\"))), values.length > 1 && /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-subtitle\",\n children: [\"(\", values.length, \" values selected)\"]\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'is equal to',\n description: \"Show only rows where \".concat(column.name, \" is \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, values.map(value => this.getNumberValueEqualsFilter(column, value)).reduce((acc, curr) => acc.or(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"=\".concat(toFilterText(value))).join(' || '), operator));\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 \".concat(column.name, \" is not \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, values.map(value => this.getNumberValueEqualsFilter(column, value).not()).reduce((acc, curr) => acc.and(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!=\".concat(toFilterText(value))).join(' && '), operator));\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 (!snapshotValues.has(Number.NaN) && !snapshotValues.has(Number.POSITIVE_INFINITY) && !snapshotValues.has(Number.NEGATIVE_INFINITY) && !TableUtils.isCharType(column.type)) {\n // get the min/max because these are all ge/ne filters\n var maxValue = values.reduce((a, b) => a > b ? a : b);\n var minValue = values.reduce((a, b) => a < b ? a : b);\n var maxFilterValue = this.getFilterValueForNumberOrChar(column.type, maxValue);\n var minFilterValue = this.getFilterValueForNumberOrChar(column.type, minValue);\n var maxValueText = \"\".concat(maxFilterValue);\n var minValueText = \"\".concat(minFilterValue);\n actions.push({\n title: 'greater than',\n description: \"Show only rows where \".concat(column.name, \" is greater than \").concat(maxValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThan(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">\".concat(toFilterText(maxValue)), operator));\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 \".concat(column.name, \" is greater than or equal to \").concat(maxValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThanOrEqualTo(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">=\".concat(toFilterText(maxValue)), operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'less than',\n description: \"Show only rows where \".concat(column.name, \" is less than \").concat(minValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThan(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<\".concat(toFilterText(minValue)), operator));\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 \".concat(column.name, \" is less than or equal to \").concat(minValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThanOrEqualTo(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<=\".concat(toFilterText(minValue)), operator));\n },\n order: 60,\n group: ContextActions.groups.low\n });\n }\n return actions;\n }\n booleanFilterActions(column, valueText, quickFilter, operator) {\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var {\n filter,\n text: filterText\n } = quickFilter || {};\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', \"\\\"\", valueText !== null && valueText !== void 0 ? valueText : 'null', \"\\\"\"]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'true',\n description: \"Show only rows where \".concat(column.name, \" is true\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isTrue(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'true', operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'false',\n description: \"Show only rows where \".concat(column.name, \" is false\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isFalse(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'false', operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'is null',\n description: \"Show only rows where \".concat(column.name, \" is null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'null', operator));\n },\n order: 30,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'is not null',\n description: \"Show only rows where \".concat(column.name, \" is not null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, '!null', operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n return actions;\n }\n dateFilterActions(column, snapshotValues, dateFilterFormatter, previewFilterFormatter, quickFilter, operator) {\n var {\n dh\n } = this;\n var values = Array.from(snapshotValues.keys());\n var filterValues = values.map(value => dh.FilterValue.ofNumber(value));\n var valueDesc = filterValues.length === 1 ? previewFilterFormatter.format(values[0]) : 'the selected values';\n var maxValue = values.reduce((a, b) => a > b ? a : b);\n var minValue = values.reduce((a, b) => a < b ? a : b);\n var maxFilterValue = dh.FilterValue.ofNumber(maxValue);\n var minFilterValue = dh.FilterValue.ofNumber(minValue);\n var maxDateText = dateFilterFormatter.format(maxValue);\n var minDateText = dateFilterFormatter.format(minValue);\n var maxPreviewText = previewFilterFormatter.format(maxValue);\n var minPreviewText = previewFilterFormatter.format(minValue);\n var filter = null;\n var filterText = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var actions = [];\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', TextUtils.join(values.slice(0, 20).map(value => \"\\\"\".concat(previewFilterFormatter.format(value), \"\\\"\"))), values.length > 1 && /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-subtitle\",\n children: [\"(\", values.length, \" values selected)\"]\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'date is',\n description: \"Show only rows where \".concat(column.name, \" is \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(valueFilter => column.filter().eq(valueFilter)).reduce((acc, curr) => acc.or(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"=\".concat(dateFilterFormatter.format(value))).join(' || '), operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'date is not',\n description: \"Show only rows where \".concat(column.name, \" is not \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(valueFilter => column.filter().notEq(valueFilter)).reduce((acc, curr) => acc.and(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!=\".concat(dateFilterFormatter.format(value))).join(' && '), operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'date is before',\n description: \"Show only rows where \".concat(column.name, \" is before \").concat(minPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThan(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<\".concat(minDateText), operator));\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 \".concat(column.name, \" is before or equal to \").concat(minPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThanOrEqualTo(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<=\".concat(minDateText), operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'date is after',\n description: \"Show only rows where \".concat(column.name, \" is greater than \").concat(maxPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThan(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">\".concat(maxDateText), operator));\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 \".concat(column.name, \" is after or equal to \").concat(maxPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThanOrEqualTo(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">=\".concat(maxDateText), operator));\n },\n order: 60,\n group: ContextActions.groups.low\n });\n return actions;\n }\n emptyStringFilterActions(column, quickFilter, operator) {\n var {\n dh\n } = this;\n var filterValue = dh.FilterValue.ofString('');\n var newQuickFilter = quickFilter;\n if (!newQuickFilter) {\n newQuickFilter = {\n filter: null,\n text: null\n };\n }\n var {\n filter,\n text: filterText\n } = newQuickFilter;\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"empty\"\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'is empty string',\n description: \"Show only rows where \".concat(column.name, \" is empty\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().eq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"=\", operator));\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 \".concat(column.name, \" is not empty\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().notEq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"!=\", operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n return actions;\n }\n nullFilterActions(column, quickFilter, operator) {\n var filter = null;\n var filterText = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"null\"\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'is null',\n description: \"Show only rows where \".concat(column.name, \" is null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'null', operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'is not null',\n description: \"Show only rows where \".concat(column.name, \" is not null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, '!null', operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n return actions;\n }\n sortByActions(column, modelColumn, columnSort) {\n var theme = this.irisGrid.getTheme();\n var {\n contextMenuSortIconColor\n } = theme;\n var sortActions = [{\n title: \"\".concat(column.name, \" Ascending\"),\n order: 10,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n }, {\n title: \"\".concat(column.name, \" Descending\"),\n order: 20,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n }, {\n title: \"Remove Sort\",\n order: 50,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.none, false, true);\n },\n disabled: !columnSort\n }];\n if (TableUtils.isNumberType(column.type)) {\n sortActions.push({\n title: \"ABS(\".concat(column.name, \") Ascending\"),\n order: 30,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, true);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, true) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n });\n sortActions.push({\n title: \"ABS(\".concat(column.name, \") Descending\"),\n order: 40,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, true);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, true) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n });\n }\n return sortActions;\n }\n additionalSortActions(column, columnIndex) {\n var theme = this.irisGrid.getTheme();\n var {\n contextMenuSortIconColor\n } = theme;\n var additionalSortActions = [{\n title: 'Add Sort By',\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"btn-context-menu menu-title\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"icon\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsRemove,\n style: {\n color: contextMenuSortIconColor !== null && contextMenuSortIconColor !== void 0 ? contextMenuSortIconColor : undefined\n }\n })\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"title\",\n children: \"Add Additional Sort\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"shortcut\",\n children: ContextActionUtils.isMacPlatform() ? '⌘Click' : 'Ctrl+Click'\n })]\n }),\n order: 1\n }, {\n title: \"\".concat(column.name, \" Ascending\"),\n order: 10,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, false, true);\n }\n }, {\n title: \"\".concat(column.name, \" Descending\"),\n order: 20,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, false, true);\n }\n }];\n if (TableUtils.isNumberType(column.type)) {\n additionalSortActions.push({\n title: \"ABS(\".concat(column.name, \") Ascending\"),\n order: 30,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, true, true);\n }\n });\n additionalSortActions.push({\n title: \"ABS(\".concat(column.name, \") Descending\"),\n order: 40,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, true, true);\n }\n });\n }\n return additionalSortActions;\n }\n checkColumnSort(columnSort) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var isAbs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (!columnSort) {\n return false;\n }\n return columnSort.direction === direction && columnSort.isAbs === isAbs;\n }\n}\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_EDIT\", ContextActions.groups.high + 10);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_HIDE_COLUMNS\", ContextActions.groups.high + 25);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_FILTER\", ContextActions.groups.high + 50);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_EXPAND_COLLAPSE\", ContextActions.groups.high + 55);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_GOTO\", ContextActions.groups.high + 60);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_SORT\", ContextActions.groups.high + 75);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_COPY\", ContextActions.groups.high + 100);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_FORMAT\", ContextActions.groups.high + 150);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_VIEW_CONTENTS\", ContextActions.groups.high + 175);\n_defineProperty(IrisGridContextMenuHandler, \"COLUMN_SORT_DIRECTION\", {\n ascending: 'ASC',\n descending: 'DESC',\n none: null\n});\nexport default IrisGridContextMenuHandler;\n//# sourceMappingURL=IrisGridContextMenuHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { GridMouseHandler, GridRange } from '@deephaven/grid';\nimport { ContextActionUtils } from '@deephaven/components';\nclass IrisGridCopyCellMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(250);\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n onClick(gridPoint, grid, event) {\n if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey) {\n this.cursor = null;\n if (gridPoint.columnHeaderDepth !== undefined) {\n this.irisGrid.copyColumnHeader(gridPoint.column, gridPoint.columnHeaderDepth);\n } else {\n this.irisGrid.copyRanges([GridRange.makeCell(gridPoint.column, gridPoint.row)]);\n }\n return true;\n }\n return false;\n }\n onMove(gridPoint, _grid, event) {\n if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey && gridPoint.column != null && (gridPoint.row != null || gridPoint.columnHeaderDepth != null)) {\n this.cursor = this.irisGrid.props.copyCursor;\n return true;\n }\n return false;\n }\n}\nexport default IrisGridCopyCellMouseHandler;\n//# sourceMappingURL=IrisGridCopyCellMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Handles sending data selected via double click\n */\nclass IrisGridDataSelectMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(880);\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDoubleClick(gridPoint, grid) {\n var {\n column,\n row\n } = gridPoint;\n if (row == null || column == null) {\n return false;\n }\n this.irisGrid.selectData(column, row);\n return false;\n }\n}\nexport default IrisGridDataSelectMouseHandler;\n//# sourceMappingURL=IrisGridDataSelectMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Trigger quick filters and advanced filters\n */\nclass IrisGridFilterMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(gridPoint) {\n var {\n y,\n column,\n row\n } = gridPoint;\n if (column !== null && row === null) {\n var {\n isFilterBarShown,\n metrics\n } = this.irisGrid.state;\n if (!metrics) throw new Error('Metrics not set');\n var {\n columnHeaderMaxDepth\n } = metrics;\n var theme = this.irisGrid.getTheme();\n if (isFilterBarShown && theme.columnHeaderHeight != null && theme.filterBarHeight != null && y > theme.columnHeaderHeight * columnHeaderMaxDepth && y <= theme.columnHeaderHeight * columnHeaderMaxDepth + theme.filterBarHeight) {\n this.irisGrid.focusFilterBar(column);\n return true;\n }\n }\n return false;\n }\n onMove(gridPoint) {\n var {\n y,\n column\n } = gridPoint;\n var {\n isFilterBarShown,\n hoverAdvancedFilter,\n metrics\n } = this.irisGrid.state;\n if (!metrics) throw new Error('Metrics not set');\n var {\n columnHeaderMaxDepth\n } = metrics;\n var theme = this.irisGrid.getTheme();\n var newHoverAdvancedFilter = null;\n if (isFilterBarShown && theme.columnHeaderHeight != null && theme.filterBarHeight != null && column !== null && y >= theme.columnHeaderHeight * columnHeaderMaxDepth && y <= theme.columnHeaderHeight * columnHeaderMaxDepth + theme.filterBarHeight) {\n newHoverAdvancedFilter = column;\n }\n if (newHoverAdvancedFilter !== hoverAdvancedFilter) {\n this.irisGrid.setState({\n hoverAdvancedFilter: newHoverAdvancedFilter\n });\n }\n return false;\n }\n onLeave(gridPoint) {\n var {\n column\n } = gridPoint;\n var {\n hoverAdvancedFilter\n } = this.irisGrid.state;\n if (hoverAdvancedFilter !== null && column !== hoverAdvancedFilter) {\n this.irisGrid.setState({\n hoverAdvancedFilter: null\n });\n }\n return false;\n }\n}\nexport default IrisGridFilterMouseHandler;\n//# sourceMappingURL=IrisGridFilterMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { GridMouseHandler, GridRowTreeMouseHandler, isExpandableGridModel } from '@deephaven/grid';\nimport { assertNotNull } from '@deephaven/utils';\nimport deepEqual from 'fast-deep-equal';\nclass IrisGridRowTreeMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(750); // Needs to be before GridRowTreeMouseHandler\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n destroyTooltip() {\n this.irisGrid.setState({\n expandCellTooltipProps: null\n });\n }\n setCursor(gridPoint, grid) {\n if (GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid)) {\n this.cursor = 'pointer';\n return {\n stopPropagation: false,\n preventDefault: false\n };\n }\n this.cursor = null;\n return false;\n }\n getButtonPosition(_ref) {\n var {\n x,\n y,\n column,\n row\n } = _ref;\n if (column == null || row == null) {\n return null;\n }\n var {\n renderer,\n grid,\n state,\n props\n } = this.irisGrid;\n if (!grid) {\n return null;\n }\n var {\n metrics\n } = state;\n var {\n model\n } = props;\n var {\n canvasContext: context\n } = grid;\n var theme = grid.getTheme();\n var rendererState = {\n context,\n mouseX: x,\n mouseY: y,\n metrics,\n model,\n theme\n };\n var depth = isExpandableGridModel(model) ? model.depthForRow(row) : null;\n var {\n left,\n top,\n width,\n height\n } = renderer.getExpandButtonPosition(rendererState, depth);\n if (left == null || width == null || top == null || height == null) {\n return null;\n }\n return {\n left,\n top,\n width,\n height\n };\n }\n onMove(gridPoint, grid) {\n if (GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid)) {\n var {\n expandCellTooltipProps\n } = this.irisGrid.state;\n var {\n model\n } = this.irisGrid.props;\n var newProps = this.getButtonPosition(gridPoint);\n var {\n row\n } = gridPoint;\n assertNotNull(row);\n var isRowExpanded = isExpandableGridModel(model) && model.isRowExpanded(row);\n if (!deepEqual(expandCellTooltipProps, newProps)) {\n this.irisGrid.setState({\n expandCellTooltipProps: newProps,\n expandTooltipDisplayValue: isRowExpanded ? 'collapse' : 'expand'\n });\n }\n } else {\n this.destroyTooltip();\n }\n return this.setCursor(gridPoint, grid);\n }\n onDown() {\n this.destroyTooltip();\n return false;\n }\n onContextMenu() {\n this.destroyTooltip();\n return false;\n }\n onWheel() {\n this.destroyTooltip();\n return false;\n }\n onLeave() {\n this.destroyTooltip();\n return false;\n }\n}\nexport default IrisGridRowTreeMouseHandler;\n//# sourceMappingURL=IrisGridRowTreeMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport { ContextActionUtils } from '@deephaven/components';\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Used to handle sorting on column header clicks\n */\nclass IrisGridSortMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n _defineProperty(this, \"column\", void 0);\n this.column = null;\n this.irisGrid = irisGrid;\n }\n getColumnFromGridPoint(gridPoint) {\n var {\n column,\n row,\n columnHeaderDepth\n } = gridPoint;\n if (column !== null && row === null && columnHeaderDepth === 0) {\n return column;\n }\n return null;\n }\n\n // We need to remember where the down started, because the canvas element will trigger a click whereever mouseUp is\n onDown(gridPoint) {\n this.column = this.getColumnFromGridPoint(gridPoint);\n return false;\n }\n onClick(gridPoint, grid, event) {\n var column = this.getColumnFromGridPoint(gridPoint);\n if (column != null && column === this.column) {\n var addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.irisGrid.toggleSort(column, addToExisting);\n return true;\n }\n return false;\n }\n}\nexport default IrisGridSortMouseHandler;\n//# sourceMappingURL=IrisGridSortMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler, GridUtils, isEditableGridModel } from '@deephaven/grid';\nimport { assertNotNull } from '@deephaven/utils';\n\n/**\n * Handles sending data selected via double click\n */\n\nclass PendingMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n this.irisGrid = irisGrid;\n }\n onWheel(gridPoint, grid, wheelEvent) {\n var {\n irisGrid\n } = this;\n var {\n model\n } = irisGrid.props;\n var {\n metrics,\n pendingRowCount\n } = irisGrid.state;\n assertNotNull(metrics);\n var {\n bottom,\n rowCount,\n rowHeight\n } = metrics;\n var {\n deltaY\n } = GridUtils.getScrollDelta(wheelEvent);\n if (isEditableGridModel(model) && model.isEditable && bottom >= rowCount - 1 && deltaY > 0) {\n // We add new rows onto the bottom, but we don't consume the event\n irisGrid.setState({\n pendingRowCount: pendingRowCount + Math.ceil(deltaY / rowHeight)\n });\n }\n return false;\n }\n}\nexport default PendingMouseHandler;\n//# sourceMappingURL=PendingMouseHandler.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getOrThrow, GridMouseHandler, GridUtils, isLinkToken, isTokenBoxCellRenderer } from '@deephaven/grid';\nimport deepEqual from 'fast-deep-equal';\nclass IrisGridTokenMouseHandler extends GridMouseHandler {\n // Stores the current hovered token box if it exists with translated coordinates\n\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n _defineProperty(this, \"currentLinkBox\", void 0);\n this.irisGrid = irisGrid;\n }\n destroyTooltip() {\n this.irisGrid.setState({\n linkHoverTooltipProps: null\n });\n }\n isHoveringLink(gridPoint, grid) {\n var {\n column,\n row,\n x,\n y\n } = gridPoint;\n var {\n renderer,\n metrics,\n props\n } = grid;\n var {\n model\n } = props;\n if (column == null || row == null || metrics == null) {\n this.currentLinkBox = undefined;\n return false;\n }\n var {\n modelRows,\n modelColumns\n } = metrics;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var renderType = model.renderTypeForCell(modelColumn, modelRow);\n var cellRenderer = renderer.getCellRenderer(renderType);\n if (!isTokenBoxCellRenderer(cellRenderer)) {\n return false;\n }\n if (this.currentLinkBox != null) {\n var {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom\n } = this.currentLinkBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n return true;\n }\n }\n var renderState = grid.updateRenderState();\n var tokensInCell = cellRenderer.getTokenBoxesForVisibleCell(column, row, renderState);\n\n // Loop through each link and check if cursor is in bounds\n for (var i = 0; i < tokensInCell.length; i += 1) {\n if (isLinkToken(tokensInCell[i].token)) {\n var translatedTokenBox = GridUtils.translateTokenBox(tokensInCell[i], metrics);\n var {\n x1: _left,\n x2: _right,\n y1: _top,\n y2: _bottom\n } = translatedTokenBox;\n if (x >= _left && x <= _right && y >= _top && y <= _bottom) {\n this.currentLinkBox = translatedTokenBox;\n return true;\n }\n }\n }\n\n // If this point is reached, that means the cursor was not hovering any of the links or there are no links\n this.currentLinkBox = undefined;\n return false;\n }\n setCursor(gridPoint, grid) {\n if (this.isHoveringLink(gridPoint, grid)) {\n this.cursor = 'pointer';\n return {\n stopPropagation: false,\n preventDefault: false\n };\n }\n this.cursor = null;\n return false;\n }\n onMove(gridPoint, grid) {\n var isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n if (isUserHoveringLink && this.currentLinkBox != null && isLinkToken(this.currentLinkBox.token)) {\n var {\n linkHoverTooltipProps\n } = this.irisGrid.state;\n if (this.currentLinkBox == null) {\n return false;\n }\n var {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom\n } = this.currentLinkBox;\n var {\n href\n } = this.currentLinkBox.token;\n var width = right - left;\n var height = bottom - top;\n var newProps = {\n left,\n top: top + 1,\n width,\n height\n };\n if (!deepEqual(linkHoverTooltipProps, newProps)) {\n this.irisGrid.setState({\n linkHoverTooltipProps: newProps,\n linkHoverDisplayValue: href\n });\n }\n } else {\n this.destroyTooltip();\n }\n return this.setCursor(gridPoint, grid);\n }\n onDown() {\n this.destroyTooltip();\n return false;\n }\n onContextMenu() {\n this.destroyTooltip();\n return false;\n }\n onWheel() {\n this.destroyTooltip();\n return false;\n }\n onLeave() {\n this.destroyTooltip();\n return false;\n }\n}\nexport default IrisGridTokenMouseHandler;\n//# sourceMappingURL=IrisGridTokenMouseHandler.js.map","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./PendingDataBottomBar.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar HIDE_TIMEOUT = 3000;\nexport function ToastBottomBar(_ref) {\n var {\n children = null,\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = _ref;\n var [isShown, setIsShown] = useState(false);\n var timeout = useRef();\n var prevChildren = usePrevious(children);\n var startTimer = useCallback(() => {\n setIsShown(true);\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n timeout.current = setTimeout(() => {\n setIsShown(false);\n }, HIDE_TIMEOUT);\n }, [setIsShown, timeout]);\n useEffect(() => {\n if (prevChildren !== children && children != null) {\n startTimer();\n }\n }, [children, prevChildren, setIsShown, startTimer]);\n useEffect(() => () => timeout.current ? clearTimeout(timeout.current) : undefined, []);\n return /*#__PURE__*/_jsx(IrisGridBottomBar, {\n className: \"toast-bottom-bar\",\n isShown: isShown,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n children: children\n });\n}\nexport default ToastBottomBar;\n//# sourceMappingURL=ToastBottomBar.js.map","/* eslint-disable react/require-default-props */\n/* eslint-disable no-param-reassign */\nimport React, { useEffect, useMemo } from 'react';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport { isPartitionedGridModel } from \"./PartitionedGridModel.js\";\nvar COLUMN_BUFFER_PAGES = 1;\n/**\n * React component to keep IrisGridModel in sync\n */\nvar IrisGridModelUpdater = /*#__PURE__*/React.memo(_ref => {\n var {\n model,\n modelColumns,\n top,\n bottom,\n left,\n right,\n filter,\n formatter,\n reverseType = TableUtils.REVERSE_TYPE.NONE,\n sorts,\n customColumns,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n rollupConfig = null,\n totalsConfig = null,\n selectDistinctColumns = EMPTY_ARRAY,\n pendingRowCount = 0,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n formatColumns,\n columnHeaderGroups,\n partitionConfig\n } = _ref;\n var columns = useMemo(() => IrisGridUtils.getModelViewportColumns(modelColumns, left, right, movedColumns, hiddenColumns, alwaysFetchColumns, COLUMN_BUFFER_PAGES), [modelColumns, left, right, movedColumns, hiddenColumns, alwaysFetchColumns]);\n useEffect(function updateFilter() {\n model.filter = filter;\n }, [model, filter]);\n useEffect(function updateSorts() {\n var sortsForModel = [...sorts];\n if (reverseType !== TableUtils.REVERSE_TYPE.NONE) {\n sortsForModel.push(model.dh.Table.reverse());\n }\n model.sort = sortsForModel;\n }, [model, sorts, reverseType]);\n useEffect(function updateFormatter() {\n model.formatter = formatter;\n }, [model, formatter]);\n useEffect(function updateCustomColumns() {\n if (model.isCustomColumnsAvailable) {\n model.customColumns = customColumns;\n }\n }, [model, customColumns]);\n useEffect(function updateFormatColumns() {\n if (model.isFormatColumnsAvailable) {\n model.formatColumns = formatColumns;\n }\n }, [model, formatColumns]);\n useEffect(function updateViewport() {\n model.setViewport(top, bottom, columns);\n }, [model, top, bottom, columns]);\n useEffect(function updateRollupCOnfig() {\n if (model.isRollupAvailable) {\n model.rollupConfig = rollupConfig;\n }\n }, [model, model.isRollupAvailable, rollupConfig]);\n useEffect(function updateSelectDistinctColumns() {\n if (model.isSelectDistinctAvailable) {\n model.selectDistinctColumns = selectDistinctColumns;\n }\n }, [model, selectDistinctColumns]);\n useEffect(function updateTotalsConfig() {\n if (model.isTotalsAvailable) {\n model.totalsConfig = totalsConfig;\n }\n }, [model, model.isTotalsAvailable, totalsConfig]);\n useEffect(function updatePendingRowCount() {\n model.pendingRowCount = pendingRowCount;\n }, [model, pendingRowCount]);\n useEffect(function updatePendingDataMap() {\n model.pendingDataMap = pendingDataMap;\n }, [model, pendingDataMap]);\n useEffect(function updateFrozenColumns() {\n if (frozenColumns) {\n model.updateFrozenColumns(frozenColumns);\n }\n }, [model, frozenColumns]);\n useEffect(function updateColumnHeaderGroups() {\n model.columnHeaderGroups = columnHeaderGroups;\n }, [model, columnHeaderGroups]);\n useEffect(function updatePartitionConfig() {\n if (partitionConfig && isPartitionedGridModel(model)) {\n model.partitionConfig = partitionConfig;\n }\n }, [model, partitionConfig]);\n return null;\n});\nIrisGridModelUpdater.displayName = 'IrisGridModelUpdater';\nexport default IrisGridModelUpdater;\n//# sourceMappingURL=IrisGridModelUpdater.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CopyButton, LoadingSpinner } from '@deephaven/components';\nimport { dhFreeze, dhRefresh, dhSortSlash, vsLock } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport { isExpandableGridModel } from '@deephaven/grid';\nimport \"./ColumnStatistics.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('ColumnStatistics');\nvar STATS_LABEL_OVERRIDES = {\n SIZE: 'Number of Rows'\n};\nclass ColumnStatistics extends Component {\n /** Automatically generate the statistics when the row count is below this threshold */\n\n static getStatsLabel(operation) {\n var _STATS_LABEL_OVERRIDE;\n return (_STATS_LABEL_OVERRIDE = STATS_LABEL_OVERRIDES[operation]) !== null && _STATS_LABEL_OVERRIDE !== void 0 ? _STATS_LABEL_OVERRIDE : operation.split(' ').map(w => w[0].toUpperCase() + w.substr(1).toLowerCase()).join(' ');\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"cancelablePromise\", void 0);\n this.handleError = this.handleError.bind(this);\n this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);\n this.handleStatistics = this.handleStatistics.bind(this);\n this.cancelablePromise = null;\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0\n };\n }\n componentDidMount() {\n this.maybeGenerateStatistics();\n }\n componentWillUnmount() {\n if (this.cancelablePromise) {\n this.cancelablePromise.cancel();\n }\n }\n maybeGenerateStatistics() {\n var {\n column,\n model\n } = this.props;\n var numRows = model.rowCount - model.pendingRowCount - model.floatingBottomRowCount - model.floatingTopRowCount;\n this.setState({\n numRows\n });\n if (!model.isColumnStatisticsAvailable || column.isProxy === true) {\n this.setState({\n loading: false\n });\n } else if (numRows < ColumnStatistics.AUTO_GENERATE_LIMIT) {\n this.handleGenerateStatistics();\n }\n }\n handleGenerateStatistics() {\n this.setState({\n loading: true\n });\n var {\n column,\n model\n } = this.props;\n this.cancelablePromise = PromiseUtils.makeCancelable(model.columnStatistics(column));\n this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);\n }\n handleStatistics(stats) {\n log.debug('Received statistics', stats);\n var {\n model,\n onStatistics\n } = this.props;\n var statistics = [];\n stats.statisticsMap.forEach((value, operation) => {\n statistics.push({\n operation: ColumnStatistics.getStatsLabel(operation),\n value,\n type: stats.getType(operation)\n });\n });\n stats.uniqueValues.forEach((value, operation) => {\n statistics.push({\n operation,\n className: 'column-statistics-unique-value',\n value,\n type: 'long'\n });\n });\n this.setState({\n loading: false,\n statistics,\n numRows: model.rowCount - model.pendingRowCount - model.floatingBottomRowCount - model.floatingTopRowCount\n });\n onStatistics();\n }\n handleError(error) {\n if (error != null && PromiseUtils.isCanceled(error)) {\n log.debug('Called handleError on a cancelled promise result');\n return;\n }\n log.error('Error generating statistics', error);\n this.setState({\n error,\n loading: false,\n statistics: null\n });\n }\n render() {\n var _column$displayName;\n var {\n column,\n model\n } = this.props;\n var {\n error,\n loading,\n statistics,\n numRows\n } = this.state;\n var showGenerateStatistics = !loading && error == null && statistics == null && model.isColumnStatisticsAvailable;\n var statisticElements = [];\n var columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n var description = column.description === null ? null : column.description;\n if (statistics != null) {\n for (var i = 0; i < statistics.length; i += 1) {\n var {\n operation,\n className,\n value,\n type\n } = statistics[i];\n var formattedValue = !type ? model.displayString(value, column.type, column.name) : model.displayString(value, type);\n var statisticElement = /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: classNames('column-statistic-operation', className),\n children: operation\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-value\",\n children: formattedValue\n })]\n }, operation);\n statisticElements.push(statisticElement);\n }\n }\n var rowCountLabel = isExpandableGridModel(model) && model.hasExpandableRows ? 'Expanded Rows' : 'Number of Rows';\n var formattedRowCount = model.displayString(numRows, 'long');\n var columnIndex = model.getColumnIndexByName(column.name);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-title\",\n children: [(_column$displayName = column.displayName) !== null && _column$displayName !== void 0 ? _column$displayName : column.name, /*#__PURE__*/_jsxs(\"span\", {\n className: \"column-statistics-type\",\n children: [\"\\xA0(\", columnType, \")\"]\n }), /*#__PURE__*/_jsx(CopyButton, {\n className: \"column-statistics-copy\",\n tooltip: \"Copy column name\",\n copy: column.name\n })]\n }), description != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistics-description\",\n children: description\n }), columnIndex != null && !model.isColumnSortable(columnIndex) && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-status\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSortSlash,\n className: \"mr-1\"\n }), \"Not sortable\"]\n }), columnIndex != null && !model.isColumnMovable(columnIndex) && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-status\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock,\n className: \"mr-1\"\n }), model.isColumnFrozen(columnIndex) ? 'Frozen' : 'Not movable']\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-grid\",\n children: [statistics == null && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-operation\",\n children: rowCountLabel\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-value\",\n children: formattedRowCount\n })]\n }), statisticElements]\n }), showGenerateStatistics && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"px-0\",\n onClick: this.handleGenerateStatistics,\n children: \"Generate Stats\"\n }), error != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: \"\".concat(error)\n }), statistics && !loading && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"px-0\",\n onClick: this.handleGenerateStatistics,\n icon: dhRefresh,\n children: \"Refresh\"\n }), loading && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-loading\",\n children: [/*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n }), \"Calculating Stats...\"]\n })]\n });\n }\n}\n_defineProperty(ColumnStatistics, \"AUTO_GENERATE_LIMIT\", 100000);\nexport default ColumnStatistics;\n//# sourceMappingURL=ColumnStatistics.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport { dhGearFilled, dhCheckSquare, dhSquareFilled, dhRemoveSquareFilled, dhWarningCircleFilled, vsCircleLargeFilled } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport \"./CrossColumnSearch.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nclass CrossColumnSearch extends PureComponent {\n static createSearchFilter(dh, searchValue, selectedColumns, columns, invertSelection) {\n var filterColumns = invertSelection ? columns.filter(column => !selectedColumns.includes(column.name)).map(column => column.name) : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n var filterValue = dh.FilterValue.ofString(searchValue);\n var searchFilter = filterColumns.length === columns.length ? dh.FilterCondition.search(filterValue) : dh.FilterCondition.search(filterValue, columns.filter(column => filterColumns.includes(column.name)).map(column => column.filter()));\n return searchFilter;\n }\n return undefined;\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"searchField\", void 0);\n this.handleSearchValueChange = this.handleSearchValueChange.bind(this);\n this.toggleColumn = this.toggleColumn.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n this.selectNumbers = this.selectNumbers.bind(this);\n this.searchField = /*#__PURE__*/React.createRef();\n this.state = {\n isConfigureColumnsShown: false\n };\n }\n focus() {\n var _this$searchField$cur;\n (_this$searchField$cur = this.searchField.current) === null || _this$searchField$cur === void 0 ? void 0 : _this$searchField$cur.focus();\n }\n handleSearchValueChange(event) {\n var {\n onChange,\n selectedColumns,\n invertSelection\n } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n sendColumnChange(selectedColumns, invertSelection) {\n var {\n onChange,\n value\n } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n setInvertSelection(invertSelection) {\n var {\n onChange,\n value\n } = this.props;\n onChange(value, [], invertSelection);\n }\n toggleColumn(name) {\n var {\n selectedColumns,\n invertSelection\n } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(selectedColumns.filter(c => c !== name), invertSelection);\n } else {\n var update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n selectAll() {\n this.setInvertSelection(true);\n }\n clear() {\n this.setInvertSelection(false);\n }\n selectNumbers() {\n var {\n columns\n } = this.props;\n this.sendColumnChange(columns.filter(c => TableUtils.isNumberType(c.type)).map(column => column.name), false);\n }\n render() {\n var {\n value,\n selectedColumns,\n invertSelection,\n columns\n } = this.props;\n var {\n isConfigureColumnsShown\n } = this.state;\n var hasAllColumnsSelected = selectedColumns.length === 0 && invertSelection === true || selectedColumns.length === columns.length && invertSelection === false;\n var hasNoColumnsSelected = selectedColumns.length === 0 && invertSelection === false || selectedColumns.length === columns.length && invertSelection === true;\n\n // set icon layers\n var icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSquareFilled,\n mask: dhGearFilled,\n transform: \"shrink-2 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhCheckSquare,\n className: \"text-primary\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCircleLargeFilled,\n mask: dhGearFilled,\n transform: \"shrink-1 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhWarningCircleFilled,\n className: \"text-danger\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n } else {\n // icon if some columns selected, but not all\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSquareFilled,\n mask: dhGearFilled,\n transform: \"shrink-2 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhRemoveSquareFilled,\n className: \"text-primary\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-container\",\n children: [/*#__PURE__*/_jsx(SearchInput, {\n className: \"cross-column-search\",\n placeholder: \"Search Data...\",\n \"data-testid\": \"cross-column-search\",\n value: value,\n onChange: this.handleSearchValueChange,\n ref: this.searchField\n }), /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: \"btn btn-link btn-link-icon px-2\",\n onClick: () => {\n if (isConfigureColumnsShown) {\n this.setState({\n isConfigureColumnsShown: false\n });\n } else {\n this.setState({\n isConfigureColumnsShown: true\n });\n }\n },\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"fa-layers\",\n children: icon\n }), /*#__PURE__*/_jsx(Tooltip, {\n children: \"Configure Columns\"\n }), /*#__PURE__*/_jsx(Popper, {\n isShown: isConfigureColumnsShown,\n className: \"cross-column-popper\",\n onExited: () => {\n this.setState({\n isConfigureColumnsShown: false\n });\n },\n closeOnBlur: true,\n interactive: true,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-popup\",\n children: [\"Searched Columns\", /*#__PURE__*/_jsx(\"div\", {\n className: \"cross-column-scroll\",\n children: columns.map(column => {\n if (column.isProxy === true) return null;\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(Checkbox, {\n className: \"cross-column-checkbox\",\n checked: invertSelection ? !selectedColumns.includes(column.name) : selectedColumns.includes(column.name),\n onChange: () => this.toggleColumn(column.name),\n children: column.name\n }), column.type.substring(column.type.lastIndexOf('.') + 1)]\n }, column.name);\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-button-bar\",\n children: [/*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.selectAll,\n children: \"Select All\"\n }), /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.clear,\n children: \"Clear\"\n }), /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.selectNumbers,\n children: \"Numbers Only\"\n })]\n }), hasNoColumnsSelected && /*#__PURE__*/_jsxs(\"p\", {\n className: \"text-danger\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhWarningCircleFilled\n }), \" Select at least one column to search.\"]\n })]\n })\n })]\n })]\n });\n }\n}\nexport default CrossColumnSearch;\n//# sourceMappingURL=CrossColumnSearch.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport memoizee from 'memoizee';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { vsChevronRight, vsMerge, vsKey } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Picker } from '@deephaven/jsapi-components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport \"./IrisGridPartitionSelector.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridPartitionSelector');\nclass IrisGridPartitionSelector extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"getCachedChangeCallback\", memoizee(index => value => this.handlePartitionSelect(index, value)));\n _defineProperty(this, \"getCachedFormatValueCallback\", memoizee(index => value => this.getDisplayValue(index, value)));\n this.handleKeyTableClick = this.handleKeyTableClick.bind(this);\n this.handleMergeClick = this.handleMergeClick.bind(this);\n this.handlePartitionSelect = this.handlePartitionSelect.bind(this);\n var {\n model\n } = props;\n this.tableUtils = new TableUtils(model.dh);\n this.pending = new Pending();\n this.state = {\n // We start be loading the partition tables, so we should be in a loading state\n isLoading: true,\n keysTable: null,\n partitionFilters: null,\n partitionTables: null\n };\n }\n componentDidMount() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n model\n } = _this.props;\n try {\n var keysTable = yield _this.pending.add(model.partitionKeysTable().then(keyTable => {\n var sorts = model.partitionColumns.map(column => column.sort().desc());\n keyTable.applySort(sorts);\n return keyTable;\n }), t => t.close());\n var partitionTables = yield Promise.all(model.partitionColumns.map( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (_, i) {\n return _this.pending.add(keysTable.selectDistinct(model.partitionColumns.slice(0, i + 1)), t => t.close());\n });\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }()));\n var partitionFilters = _this.getPartitionFilters(partitionTables);\n _this.setState({\n isLoading: false,\n keysTable,\n partitionFilters,\n partitionTables\n });\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n // Just re-throw the error if it's not a cancel\n throw e;\n }\n }\n })();\n }\n componentDidUpdate(prevProps) {\n var {\n partitionConfig: prevConfig\n } = prevProps;\n var {\n partitionConfig\n } = this.props;\n if (prevConfig !== partitionConfig) {\n this.updatePartitionFilters();\n }\n }\n componentWillUnmount() {\n this.pending.cancel();\n var {\n keysTable,\n partitionTables\n } = this.state;\n keysTable === null || keysTable === void 0 ? void 0 : keysTable.close();\n partitionTables === null || partitionTables === void 0 ? void 0 : partitionTables.forEach(table => table.close());\n }\n handleKeyTableClick() {\n log.debug2('handleKeyTableClick');\n var {\n partitionConfig\n } = this.props;\n var newPartitionConfig = _objectSpread({}, partitionConfig);\n // Toggle between Keys and Partition mode\n newPartitionConfig.mode = partitionConfig.mode === 'keys' ? 'partition' : 'keys';\n this.sendUpdate(newPartitionConfig);\n }\n handleMergeClick() {\n log.debug2('handleMergeClick');\n var {\n partitionConfig\n } = this.props;\n var newPartitionConfig = _objectSpread({}, partitionConfig);\n // Toggle between Merged and Partition mode\n newPartitionConfig.mode = partitionConfig.mode === 'merged' ? 'partition' : 'merged';\n this.sendUpdate(newPartitionConfig);\n }\n\n /**\n * Handles when a partition dropdown selection is changed. Will send an update with the new partition config\n * @param index Index of the partition column that was changed\n * @param selectedValue Selected value of the partition column\n */\n handlePartitionSelect(index, selectedValue) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var {\n model,\n partitionConfig: prevConfig\n } = _this2.props;\n log.debug('handlePartitionSelect', index, selectedValue, prevConfig);\n var newPartitions = [...prevConfig.partitions];\n newPartitions[index] = selectedValue;\n\n // If it's the last partition changed, we know it's already a valid value, just emit it\n if (index === model.partitionColumns.length - 1) {\n _this2.sendUpdate({\n partitions: newPartitions,\n mode: 'partition'\n });\n return;\n }\n var {\n keysTable\n } = _this2.state;\n // Otherwise, we need to get the value from a filtered key table\n assertNotNull(keysTable);\n try {\n _this2.setState({\n isLoading: true\n });\n var t = yield _this2.pending.add(keysTable.copy(), tCopy => tCopy.close());\n\n // Apply our partition filters, and just get the first value\n var partitionFilters = newPartitions.slice(0, index + 1).map((partition, i) => {\n var partitionColumn = t.columns[i];\n return _this2.tableUtils.makeNullableEqFilter(partitionColumn, partition);\n });\n t.applyFilter(partitionFilters);\n t.setViewport(0, 0, t.columns);\n var data = yield _this2.pending.add(t.getViewportData());\n var newConfig = {\n // Core JSAPI returns undefined for null table values,\n // coalesce with null to differentiate null from no selection in the dropdown\n // https://github.com/deephaven/deephaven-core/issues/5400\n partitions: t.columns.map(column => {\n var _data$rows$0$get;\n return (_data$rows$0$get = data.rows[0].get(column)) !== null && _data$rows$0$get !== void 0 ? _data$rows$0$get : null;\n }),\n mode: 'partition'\n };\n t.close();\n _this2.sendUpdate(newConfig);\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to get partition tables', e);\n }\n } finally {\n _this2.setState({\n isLoading: false\n });\n }\n })();\n }\n sendUpdate(partitionConfig) {\n log.debug2('sendUpdate', partitionConfig);\n var {\n onChange\n } = this.props;\n onChange(partitionConfig);\n }\n\n /**\n * Calls model.displayString with a special character case\n * @param index The index of the partition column to get the display value for\n * @param value The partition value to get the display value for\n */\n getDisplayValue(index, value) {\n var {\n model\n } = this.props;\n if (value === null) {\n return '(null)';\n }\n if (value === undefined || value === '') {\n return '';\n }\n var column = model.partitionColumns[index];\n if (TableUtils.isCharType(column.type) && value.toString().length > 0) {\n return String.fromCharCode(parseInt(value.toString(), 10));\n }\n return model.displayString(value, column.type, column.name);\n }\n\n /**\n * Update the filters on the partition dropdown tables\n */\n updatePartitionFilters() {\n var {\n partitionTables\n } = this.state;\n assertNotNull(partitionTables);\n var {\n partitionConfig\n } = this.props;\n var {\n mode\n } = partitionConfig;\n log.debug('updatePartitionFilters', partitionConfig);\n if (mode !== 'partition') {\n // We only need to update the filters if the mode is `partitions`\n // In the other modes, we disable the dropdowns anyway\n return;\n }\n var partitionFilters = this.getPartitionFilters(partitionTables);\n this.setState({\n partitionFilters\n });\n }\n getPartitionFilters(partitionTables) {\n var {\n model,\n partitionConfig\n } = this.props;\n var {\n partitions\n } = partitionConfig;\n log.debug('getPartitionFilters', partitionConfig);\n if (partitions.length !== partitionTables.length) {\n throw new Error(\"Invalid partition config set. Expected \".concat(partitionTables.length, \" partitions, but got \").concat(partitions.length));\n }\n\n // The filters are applied in order, so we need to build up the filters for each partition\n var partitionFilters = [];\n for (var i = 0; i < partitions.length; i += 1) {\n if (i === 0) {\n // There's no reason to ever filter the first table\n partitionFilters.push([]);\n } else {\n var previousFilter = partitionFilters[i - 1];\n var previousPartition = partitions[i - 1];\n var previousColumn = model.partitionColumns[i - 1];\n var partitionFilter = [...previousFilter, this.tableUtils.makeNullableEqFilter(previousColumn, previousPartition)];\n partitionFilters.push(partitionFilter);\n }\n }\n return partitionFilters;\n }\n render() {\n var {\n model,\n partitionConfig\n } = this.props;\n var {\n isLoading,\n partitionFilters,\n partitionTables\n } = this.state;\n var {\n partitions\n } = partitionConfig;\n if (partitionFilters !== null && partitionTables !== null) {\n partitionFilters.forEach((filter, index) => {\n partitionTables[index].applyFilter(filter);\n });\n }\n var partitionSelectors = model.partitionColumns.map((column, index) => /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-selector\",\n children: [(partitionTables === null || partitionTables === void 0 ? void 0 : partitionTables[index]) && /*#__PURE__*/_jsx(Picker, {\n label: column.name,\n labelPosition: \"side\",\n table: partitionTables[index],\n direction: \"bottom\",\n shouldFlip: false,\n keyColumn: partitionTables[index].columns[index].name,\n placeholder: 'Loading...',\n labelColumn: partitionTables[index].columns[index].name,\n onChange: this.getCachedChangeCallback(index),\n defaultSelectedKey: partitions[index],\n isDisabled: index > 0 && partitionConfig.mode !== 'partition' || isLoading\n }), model.partitionColumns.length - 1 === index || /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronRight\n })]\n }, \"selector-\".concat(column.name)));\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-partition-selector\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"table-name\",\n children: \"Partitioned Table\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"partition-button-group\",\n children: [/*#__PURE__*/_jsx(Button, {\n onClick: this.handleKeyTableClick,\n kind: \"inline\",\n tooltip: \"View keys as table\",\n icon: vsKey,\n active: partitionConfig.mode === 'keys',\n disabled: isLoading,\n children: \"Keys\"\n }), /*#__PURE__*/_jsx(Button, {\n onClick: this.handleMergeClick,\n kind: \"inline\",\n tooltip: \"View all partitions as one merged table\",\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsMerge,\n rotation: 90\n }),\n active: partitionConfig.mode === 'merged',\n disabled: isLoading,\n children: \"Merge\"\n })]\n }), partitionSelectors]\n });\n }\n}\nexport default IrisGridPartitionSelector;\n//# sourceMappingURL=IrisGridPartitionSelector.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Button, Select } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport \"./SelectDistinctBuilder.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('SelectDistinctBuilder');\nclass SelectDistinctBuilder extends Component {\n constructor(props) {\n super(props);\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleDropdownChanged = this.handleDropdownChanged.bind(this);\n var {\n model,\n selectDistinctColumns\n } = this.props;\n this.state = {\n inputs: selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns\n };\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n inputs\n } = this.state;\n var {\n onChange\n } = this.props;\n if (prevState.inputs !== inputs) {\n var filteredInputs = inputs.filter(val => val !== '');\n if (!deepEqual(prevState.inputs.filter(val => val !== ''), filteredInputs)) {\n onChange(filteredInputs);\n }\n }\n }\n handleAddColumnClick() {\n this.setState(_ref => {\n var {\n inputs: prevInputs\n } = _ref;\n return {\n inputs: [...prevInputs, '']\n };\n });\n }\n handleDeleteColumn(index) {\n this.setState(_ref2 => {\n var {\n inputs\n } = _ref2;\n return {\n inputs: inputs.length === 1 && index === 0 ? [''] : inputs.filter((input, inputIndex) => index !== inputIndex)\n };\n });\n }\n handleDropdownChanged(index, value) {\n log.debug('handleDropdownChanged', index, value);\n this.setState(_ref3 => {\n var {\n inputs: prevInputs\n } = _ref3;\n var inputs = [...prevInputs];\n inputs[index] = value;\n return {\n inputs\n };\n });\n }\n renderInputs() {\n var {\n columns,\n inputs\n } = this.state;\n return inputs.map((value, index) => {\n var options = columns.filter(_ref4 => {\n var {\n name\n } = _ref4;\n return name === value || !inputs.includes(name);\n }).map(_ref5 => {\n var {\n name\n } = _ref5;\n return /*#__PURE__*/_jsx(\"option\", {\n value: name,\n children: name\n }, name);\n });\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n _jsxs(\"div\", {\n className: \"form-inline px-3 pb-3\",\n children: [/*#__PURE__*/_jsxs(Select, {\n className: \"form-control custom-select col\",\n value: value,\n onChange: eventTargetValue => this.handleDropdownChanged(index, eventTargetValue),\n children: [/*#__PURE__*/_jsx(\"option\", {\n value: \"\",\n children: \"Select a column\"\n }), options]\n }), (inputs.length > 1 || value !== '') && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"ml-1 px-2\",\n onClick: () => {\n this.handleDeleteColumn(index);\n },\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsTrash,\n transform: \"grow-3\"\n }),\n tooltip: \"Delete column\"\n })]\n }, index)\n );\n });\n }\n render() {\n var {\n columns,\n inputs\n } = this.state;\n var disableAddButton = inputs.length >= columns.length;\n return /*#__PURE__*/_jsxs(\"div\", {\n role: \"presentation\",\n className: \"select-distinct-builder-container h-100\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-title\",\n children: \"Display Unique Values From\"\n }), this.renderInputs(), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(\"div\", {\n className: \"pt-1 px-3\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-add-column\",\n onClick: this.handleAddColumnClick,\n disabled: disableAddButton,\n icon: dhNewCircleLargeFilled,\n children: \"Add Additional Column\"\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-builder-footer\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-builder-hint\",\n children: \"Display only unique values from the selected table columns. Note that this will reset any filters and display only the selected columns.\"\n })\n })]\n });\n }\n}\n_defineProperty(SelectDistinctBuilder, \"defaultProps\", {\n selectDistinctColumns: [],\n onChange: () => undefined\n});\nexport default SelectDistinctBuilder;\n//# sourceMappingURL=SelectDistinctBuilder.js.map","import React from 'react';\nimport { Menu } from '@deephaven/components';\nimport AdvancedSettingsType from \"./AdvancedSettingsType.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction AdvancedSettingsMenu(_ref) {\n var {\n items,\n onChange: _onChange = () => undefined\n } = _ref;\n return /*#__PURE__*/_jsx(Menu, {\n items: Array.from(items.entries()).map(_ref2 => {\n var [key, isOn] = _ref2;\n return {\n title: AdvancedSettingsMenu.getAdvancedSettingsTitleForKey(key),\n isOn,\n onChange: value => _onChange(key, value)\n };\n })\n });\n}\nAdvancedSettingsMenu.getAdvancedSettingsTitleForKey = key => {\n switch (key) {\n case AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS:\n return 'Clear current table filters before applying new filters from a control';\n case AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS:\n return 'Clear current table filters before applying new filters from an incoming link filter';\n }\n};\nexport default AdvancedSettingsMenu;\n//# sourceMappingURL=AdvancedSettingsMenu.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { useCallback } from 'react';\nimport { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsGripper, vsTrash } from '@deephaven/icons';\nimport { Button, DragUtils, Tooltip } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport \"./ConditionalFormattingMenu.css\";\nimport { FormatterType, getBackgroundForStyleConfig, getColorForStyleConfig, getShortLabelForConditionType, NumberCondition, StringCondition, DateCondition } from \"./ConditionalFormattingUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionalFormattingMenu');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction getRuleValue(config) {\n var {\n column: {\n type\n }\n } = config;\n if (TableUtils.isNumberType(type)) {\n return config.condition === NumberCondition.IS_NULL || config.condition === NumberCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isCharType(type)) {\n return config.condition === DateCondition.IS_NULL || config.condition === DateCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isStringType(type)) {\n return config.condition === StringCondition.IS_NULL || config.condition === StringCondition.IS_NOT_NULL ? '' : \"\\\"\".concat(config.value, \"\\\"\");\n }\n if (TableUtils.isDateType(type)) {\n return config.condition === DateCondition.IS_NULL || config.condition === DateCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isBooleanType(type)) {\n return '';\n }\n throw new Error(\"Invalid column type \".concat(type, \" in getRuleValue\"));\n}\nfunction getRuleTitle(config) {\n if (TableUtils.isNumberType(config.column.type) && config.condition === NumberCondition.IS_BETWEEN) {\n return \"\".concat(config.start, \" < \").concat(config.column.name, \" < \").concat(config.end);\n }\n return \"\".concat(config.column.name, \" \").concat(getShortLabelForConditionType(config.column.type, config.condition), \" \\n \").concat(getRuleValue(config));\n}\nfunction ConditionalFormattingMenu(props) {\n var {\n rules = [],\n onChange = DEFAULT_CALLBACK,\n onCreate = DEFAULT_CALLBACK,\n onSelect = DEFAULT_CALLBACK\n } = props;\n var handleRuleClick = useCallback((e, rule, index) => {\n e.stopPropagation();\n log.debug('Rule clicked', rule, index);\n onSelect(index);\n }, [onSelect]);\n var handleDeleteClick = useCallback((e, rule, index) => {\n e.stopPropagation();\n log.debug('Delete button clicked', rule, index);\n var updatedRules = [...rules];\n updatedRules.splice(index, 1);\n onChange(updatedRules);\n }, [onChange, rules]);\n var handleDragHandlerClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n var handleDragEnd = useCallback(result => {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (result.destination == null) {\n return;\n }\n var sourceIndex = result.source.index;\n var destinationIndex = result.destination.index;\n var updatedRules = [...rules];\n var sourceInput = rules[sourceIndex];\n updatedRules.splice(sourceIndex, 1);\n updatedRules.splice(destinationIndex, 0, sourceInput);\n onChange(updatedRules);\n }, [onChange, rules]);\n\n // Display list of rules\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-formatting-rules\",\n children: [/*#__PURE__*/_jsx(DragDropContext, {\n onDragStart: DragUtils.startDragging,\n onDragEnd: handleDragEnd,\n children: /*#__PURE__*/_jsx(Droppable, {\n droppableId: \"droppable-custom-columns\",\n children: (provided, snapshot) => /*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread({\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.droppableProps), {}, {\n className: classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith\n }),\n children: [rules.length === 0 && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted pl-2\",\n children: \"No formats defined\"\n }), rules.map((rule, index) => /*#__PURE__*/_jsx(Draggable\n // eslint-disable-next-line react/no-array-index-key\n , {\n draggableId: \"\".concat(index, \"-\").concat(rule.type),\n index: index,\n disableInteractiveElementBlocking: true,\n children:\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (provided, snapshot) => /*#__PURE__*/_jsx(\"div\", _objectSpread(_objectSpread({\n role: \"menuitem\",\n tabIndex: 0,\n onClick: e => handleRuleClick(e, rule, index),\n className: classNames('draggable-container', {\n dragging: snapshot.isDragging\n }),\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.draggableProps), {}, {\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"conditional-formatting-list-item\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"formatting-item\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"rule-icon\",\n children: /*#__PURE__*/_jsx(\"span\", {\n className: \"rule-icon-bg\",\n style: {\n backgroundColor: getBackgroundForStyleConfig(rule.config.style),\n color: getColorForStyleConfig(rule.config.style)\n },\n children: rule.type === FormatterType.ROWS ? 'row' : 'col'\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"rule-title\",\n children: getRuleTitle(rule.config)\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"ml-1 px-2\",\n onClick: e => handleDeleteClick(e, rule, index),\n icon: vsTrash,\n tooltip: \"Delete rule\"\n }), /*#__PURE__*/_jsxs(\"button\", _objectSpread(_objectSpread({\n type: \"button\",\n className: \"btn btn-link btn-link-icon px-2 btn-drag-handle\",\n onClick: handleDragHandlerClick\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.dragHandleProps), {}, {\n children: [/*#__PURE__*/_jsx(Tooltip, {\n children: \"Drag to re-order\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGripper\n })]\n }))]\n })\n })\n }))\n }, \"\".concat(index, \"-\").concat(rule.type))), provided.placeholder]\n }))\n })\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: onCreate,\n icon: dhNewCircleLargeFilled,\n children: \"Add New Rule\"\n })]\n });\n}\nexport default ConditionalFormattingMenu;\n//# sourceMappingURL=ConditionalFormattingMenu.js.map","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { Select } from '@deephaven/components';\nimport { StringCondition, DateCondition, getLabelForNumberCondition, getLabelForDateCondition, getLabelForStringCondition, NumberCondition, getDefaultConditionForType, getLabelForBooleanCondition, BooleanCondition, CharCondition, getLabelForCharCondition, isDateConditionValid, getDefaultValueForType } from \"./ConditionalFormattingUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nvar numberConditionOptions = [NumberCondition.IS_EQUAL, NumberCondition.IS_NOT_EQUAL, NumberCondition.IS_BETWEEN, NumberCondition.GREATER_THAN, NumberCondition.GREATER_THAN_OR_EQUAL, NumberCondition.LESS_THAN, NumberCondition.LESS_THAN_OR_EQUAL, NumberCondition.IS_NULL, NumberCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForNumberCondition(option)\n}, option));\nvar stringConditions = [StringCondition.IS_EXACTLY, StringCondition.IS_NOT_EXACTLY, StringCondition.CONTAINS, StringCondition.DOES_NOT_CONTAIN, StringCondition.STARTS_WITH, StringCondition.ENDS_WITH, StringCondition.IS_NULL, StringCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForStringCondition(option)\n}, option));\nvar dateConditions = [DateCondition.IS_EXACTLY, DateCondition.IS_NOT_EXACTLY, DateCondition.IS_BEFORE, DateCondition.IS_BEFORE_OR_EQUAL, DateCondition.IS_AFTER, DateCondition.IS_AFTER_OR_EQUAL, DateCondition.IS_NULL, DateCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForDateCondition(option)\n}, option));\nvar booleanConditions = [BooleanCondition.IS_TRUE, BooleanCondition.IS_FALSE, BooleanCondition.IS_NULL, BooleanCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForBooleanCondition(option)\n}, option));\nvar charConditions = [CharCondition.IS_EQUAL, CharCondition.IS_NOT_EQUAL, CharCondition.IS_NULL, CharCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForCharCondition(option)\n}, option));\nfunction isNumberConditionValid(condition, value, startValue, endValue) {\n if (condition === NumberCondition.IS_NULL || condition === NumberCondition.IS_NOT_NULL) {\n return true;\n }\n if (condition === NumberCondition.IS_BETWEEN && startValue != null && startValue !== '' && !Number.isNaN(Number.parseFloat(startValue)) && endValue != null && endValue !== '' && !Number.isNaN(Number.parseFloat(endValue))) {\n return true;\n }\n if (condition !== NumberCondition.IS_BETWEEN && value !== undefined && value !== '' && !Number.isNaN(Number.parseFloat(value))) {\n return true;\n }\n return false;\n}\nfunction getNumberInputs(selectedCondition, handleValueChange, handleStartValueChange, handleEndValueChange, conditionValue, startValue, endValue) {\n switch (selectedCondition) {\n case NumberCondition.IS_EQUAL:\n case NumberCondition.IS_NOT_EQUAL:\n case NumberCondition.GREATER_THAN:\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n case NumberCondition.LESS_THAN:\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n case NumberCondition.IS_BETWEEN:\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex flex-row\",\n children: [/*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control d-flex mr-2\",\n placeholder: \"Start value\",\n value: startValue !== null && startValue !== void 0 ? startValue : '',\n onChange: handleStartValueChange\n }), /*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control d-flex\",\n placeholder: \"End value\",\n value: endValue !== null && endValue !== void 0 ? endValue : '',\n onChange: handleEndValueChange\n })]\n });\n case NumberCondition.IS_NULL:\n case NumberCondition.IS_NOT_NULL:\n return null;\n }\n}\nfunction getStringInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case StringCondition.IS_NULL:\n case StringCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction getDateInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction getBooleanInputs() {\n return null;\n}\nfunction getCharInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case CharCondition.IS_NULL:\n case CharCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n maxLength: 1,\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction ConditionEditor(props) {\n var {\n column,\n config,\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var selectedColumnType = column.type;\n var [prevColumnType, setPrevColumnType] = useState(selectedColumnType);\n var [selectedCondition, setCondition] = useState(config.condition);\n var [conditionValue, setValue] = useState(config.value);\n var [startValue, setStartValue] = useState(config.start);\n var [endValue, setEndValue] = useState(config.end);\n if (selectedColumnType !== prevColumnType) {\n // Column type changed, reset condition and value fields\n setCondition(getDefaultConditionForType(selectedColumnType));\n setValue(getDefaultValueForType(selectedColumnType));\n setStartValue(undefined);\n setEndValue(undefined);\n setPrevColumnType(selectedColumnType);\n }\n var conditions = useMemo(() => {\n if (selectedColumnType === undefined) {\n return [];\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return numberConditionOptions;\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return charConditions;\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return stringConditions;\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return dateConditions;\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return booleanConditions;\n }\n }, [selectedColumnType]);\n var handleConditionChange = useCallback(value => {\n log.debug('handleConditionChange', value);\n setCondition(value);\n }, []);\n var handleValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleValueChange', value);\n setValue(value);\n }, []);\n var handleStartValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n }, []);\n var handleEndValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n }, []);\n useEffect(function changeCondition() {\n var isValid = true;\n if (selectedCondition === undefined) {\n log.debug('Unable to create formatting rule. Condition is not selected.');\n isValid = false;\n } else if (TableUtils.isNumberType(column.type) && !isNumberConditionValid(selectedCondition, conditionValue, startValue, endValue)) {\n log.debug('Unable to create formatting rule. Invalid value', conditionValue);\n isValid = false;\n } else if (TableUtils.isDateType(column.type) && !isDateConditionValid(dh, selectedCondition, conditionValue)) {\n log.debug('Unable to create formatting rule. Invalid date condition', conditionValue);\n isValid = false;\n }\n onChange({\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue\n }, isValid);\n }, [onChange, column.type, dh, selectedCondition, conditionValue, startValue, endValue]);\n var conditionInputs = useMemo(() => {\n if (selectedColumnType === undefined) {\n // Column not selected\n return null;\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return getNumberInputs(selectedCondition, handleValueChange, handleStartValueChange, handleEndValueChange, conditionValue, startValue, endValue);\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [selectedColumnType, selectedCondition, conditionValue, startValue, endValue, handleValueChange, handleStartValueChange, handleEndValueChange]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"condition-editor mb-2\",\n children: [/*#__PURE__*/_jsx(Select, {\n value: selectedCondition,\n \"data-testid\": \"condition-select\",\n className: \"custom-select mb-2\",\n onChange: handleConditionChange,\n children: conditions\n }), conditionInputs]\n });\n}\nexport default ConditionEditor;\n//# sourceMappingURL=ConditionEditor.js.map","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Log from '@deephaven/log';\nimport { ColorUtils } from '@deephaven/utils';\nimport { vsCheck } from '@deephaven/icons';\nimport { Button, DropdownMenu } from '@deephaven/components';\nimport { FormatStyleType, getLabelForStyleType, getBackgroundForStyleConfig, getColorForStyleConfig } from \"./ConditionalFormattingUtils.js\";\nimport \"./StyleEditor.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('StyleEditor');\nvar DEFAULT_BACKGROUND = '#fcfcfa';\nvar DEFAULT_COLOR_LIGHT = '#f0f0ee';\nvar DEFAULT_COLOR_DARK = '#1a171a';\nvar DEFAULT_DROPDOWN_WIDTH = 200;\nvar DEFAULT_CALLBACK = () => undefined;\nfunction StyleEditor(props) {\n var _config$customConfig$, _config$customConfig;\n var {\n config,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [styleType, setStyleType] = useState(config.type);\n var [background, setBackground] = useState((_config$customConfig$ = (_config$customConfig = config.customConfig) === null || _config$customConfig === void 0 ? void 0 : _config$customConfig.background) !== null && _config$customConfig$ !== void 0 ? _config$customConfig$ : DEFAULT_BACKGROUND);\n var [isShown, setShown] = useState(false);\n var [dropdownWidth, setDropdownWidth] = useState(DEFAULT_DROPDOWN_WIDTH);\n var csContainer = useRef(null);\n var handleBackgroundChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleBackgroundChange', value);\n setBackground(value);\n }, []);\n var handleMenuClosed = useCallback(() => {\n if (isShown) {\n setShown(false);\n }\n }, [isShown]);\n var handleToggleClick = useCallback(() => {\n if (!isShown) {\n updateDropdownWidth();\n }\n setShown(!isShown);\n }, [isShown]);\n var styleOptions = useMemo(() => [FormatStyleType.NO_FORMATTING, FormatStyleType.POSITIVE, FormatStyleType.NEGATIVE, FormatStyleType.WARN, FormatStyleType.NEUTRAL, FormatStyleType.ACCENT_1, FormatStyleType.ACCENT_2, FormatStyleType.CUSTOM], []);\n function updateDropdownWidth() {\n if (csContainer.current) {\n setDropdownWidth(csContainer.current.getBoundingClientRect().width);\n }\n }\n useEffect(function updateTheme() {\n onChange({\n type: styleType,\n customConfig: {\n color: ColorUtils.isDark(background) ? DEFAULT_COLOR_LIGHT : DEFAULT_COLOR_DARK,\n background\n }\n });\n }, [onChange, styleType, background]);\n var renderOptions = useCallback(() => {\n var matchFound = false;\n var optionArray = [];\n var _loop = function _loop() {\n var option = styleOptions[index];\n var key = \"option-\".concat(index, \"-\").concat(option);\n matchFound = matchFound || option === styleType;\n optionArray.push( /*#__PURE__*/_jsxs(Button, {\n kind: \"inline\",\n className: \"style-option-btn\",\n onClick: () => {\n setStyleType(option);\n setShown(false);\n },\n style: {\n color: getColorForStyleConfig({\n type: option\n }),\n background: getBackgroundForStyleConfig({\n type: option\n })\n },\n children: [option === styleType && /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCheck,\n className: \"mr-2\"\n }), option !== styleType && /*#__PURE__*/_jsx(\"span\", {\n className: \"mr-4\"\n }), getLabelForStyleType(option)]\n }, key));\n };\n for (var index = 0; index < styleOptions.length; index += 1) {\n _loop();\n }\n return optionArray;\n }, [styleOptions, styleType]);\n var renderMenuElement = useCallback(() => /*#__PURE__*/_jsx(\"div\", {\n className: \"style-menu-container\",\n role: \"presentation\",\n style: {\n width: dropdownWidth\n },\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"style-options\",\n children: renderOptions()\n })\n }), [dropdownWidth, renderOptions]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"style-editor\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n ref: csContainer,\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Style\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: \"inline\",\n className: \"cs-dropdown custom-select\",\n style: {\n color: getColorForStyleConfig({\n type: styleType\n }),\n background: getBackgroundForStyleConfig({\n type: styleType\n })\n },\n onClick: handleToggleClick,\n children: [getLabelForStyleType(styleType), /*#__PURE__*/_jsx(DropdownMenu, {\n isShown: isShown,\n actions: {\n menuElement: renderMenuElement()\n },\n popperOptions: {\n placement: 'bottom-start'\n },\n popperClassName: \"style-dropdown-menu\",\n onMenuClosed: handleMenuClosed,\n menuStyle: {\n maxWidth: '100rem'\n }\n })]\n })]\n }), styleType === FormatStyleType.CUSTOM && /*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Background\"\n }), /*#__PURE__*/_jsx(\"input\", {\n type: \"color\",\n value: background,\n className: \"custom-select color-select\",\n onChange: handleBackgroundChange\n })]\n })]\n });\n}\nexport default StyleEditor;\n//# sourceMappingURL=StyleEditor.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport { getDefaultConditionConfigForType, getConditionConfig, getDefaultStyleConfig, FormatStyleType } from \"./ConditionalFormattingUtils.js\";\nimport ConditionEditor from \"./ConditionEditor.js\";\nimport StyleEditor from \"./StyleEditor.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('ColumnFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction makeDefaultConfig(columns) {\n var {\n type,\n name\n } = columns[0];\n var column = {\n type,\n name\n };\n var config = _objectSpread({\n column,\n style: getDefaultStyleConfig()\n }, getDefaultConditionConfigForType(type));\n return config;\n}\nfunction ColumnFormatEditor(props) {\n var _columns$find;\n var {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [selectedColumn, setColumn] = useState((_columns$find = columns.find(c => c.name === config.column.name && c.type === config.column.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]);\n var [conditionConfig, setConditionConfig] = useState(getConditionConfig(config));\n var [conditionValid, setConditionValid] = useState(false);\n var [selectedStyle, setStyle] = useState(config.style);\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var {\n name\n } = _ref;\n return name === value;\n });\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(\"Column \".concat(value, \" not found.\"));\n }\n }, [columns, selectedColumn]);\n var handleConditionChange = useCallback((updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n }, []);\n var handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n useEffect(function updateColumnFormat() {\n var isValid = conditionValid;\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, invalidating update.');\n isValid = false;\n }\n if (selectedStyle === undefined || selectedStyle.type === FormatStyleType.NO_FORMATTING) {\n log.debug('Style is not selected, invalidating update.');\n isValid = false;\n }\n var {\n type,\n name\n } = selectedColumn;\n var column = {\n type,\n name\n };\n onChange(_objectSpread({\n column,\n style: selectedStyle\n }, conditionConfig), isValid);\n }, [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]);\n var columnNames = useMemo(() => columns.map(_ref2 => {\n var {\n name\n } = _ref2;\n return name;\n }), [columns]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-rule-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Format Cell If\"\n }), /*#__PURE__*/_jsx(ComboBox, {\n \"aria-label\": \"Select column to format\",\n defaultSelectedKey: selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.name,\n onChange: handleColumnChange,\n children: columnNames\n })]\n }), selectedColumn !== undefined && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(ConditionEditor, {\n dh: dh,\n column: selectedColumn,\n config: conditionConfig,\n onChange: handleConditionChange\n }), /*#__PURE__*/_jsx(StyleEditor, {\n config: selectedStyle,\n onChange: handleStyleChange\n })]\n })]\n });\n}\nexport default ColumnFormatEditor;\n//# sourceMappingURL=ColumnFormatEditor.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport { getDefaultConditionConfigForType, getConditionConfig, getDefaultStyleConfig } from \"./ConditionalFormattingUtils.js\";\nimport ConditionEditor from \"./ConditionEditor.js\";\nimport StyleEditor from \"./StyleEditor.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('RowFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction makeDefaultConfig(columns) {\n var {\n type,\n name\n } = columns[0];\n var column = {\n type,\n name\n };\n var config = _objectSpread({\n column,\n style: getDefaultStyleConfig()\n }, getDefaultConditionConfigForType(type));\n return config;\n}\nfunction RowFormatEditor(props) {\n var _columns$find;\n var {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [selectedColumn, setColumn] = useState((_columns$find = columns.find(c => c.name === config.column.name && c.type === config.column.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]);\n var [conditionConfig, setConditionConfig] = useState(getConditionConfig(config));\n var [conditionValid, setConditionValid] = useState(false);\n var [selectedStyle, setStyle] = useState(config.style);\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var {\n name\n } = _ref;\n return name === value;\n });\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(\"Column \".concat(value, \" not found.\"));\n }\n }, [columns, selectedColumn]);\n var handleConditionChange = useCallback((updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n }, []);\n var handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n useEffect(function updateRowFormat() {\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, skip update.');\n return;\n }\n if (selectedStyle === undefined) {\n log.debug('Style is not selected, skip update.');\n return;\n }\n var {\n type,\n name\n } = selectedColumn;\n var column = {\n type,\n name\n };\n onChange(_objectSpread({\n column,\n style: selectedStyle\n }, conditionConfig), conditionValid);\n }, [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]);\n var columnNames = useMemo(() => columns.map(_ref2 => {\n var {\n name\n } = _ref2;\n return name;\n }), [columns]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-rule-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Format Row If\"\n }), /*#__PURE__*/_jsx(ComboBox, {\n \"aria-label\": \"Select column to format row by\",\n defaultSelectedKey: selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.name,\n onChange: handleColumnChange,\n children: columnNames\n })]\n }), selectedColumn !== undefined && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(ConditionEditor, {\n column: selectedColumn,\n config: conditionConfig,\n dh: dh,\n onChange: handleConditionChange\n }), /*#__PURE__*/_jsx(StyleEditor, {\n config: selectedStyle,\n onChange: handleStyleChange\n })]\n })]\n });\n}\nexport default RowFormatEditor;\n//# sourceMappingURL=RowFormatEditor.js.map","import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { FormatColumnWhereIcon, FormatRowWhereIcon } from \"../icons/index.js\";\nimport ColumnFormatEditor from \"./ColumnFormatEditor.js\";\nimport RowFormatEditor from \"./RowFormatEditor.js\";\nimport { FormatterType, isSupportedColumn } from \"./ConditionalFormattingUtils.js\";\nimport \"./ConditionalFormatEditor.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionalFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction getFormatterTypeIcon(option) {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return /*#__PURE__*/_jsx(FormatColumnWhereIcon, {});\n case FormatterType.ROWS:\n return /*#__PURE__*/_jsx(FormatRowWhereIcon, {});\n }\n}\nfunction getFormatterTypeLabel(option) {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return 'Conditional';\n case FormatterType.ROWS:\n return 'Rows';\n }\n}\nvar formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];\nfunction ConditionalFormatEditor(props) {\n var _defaultRule$type;\n var {\n columns: originalColumns,\n dh,\n onSave = DEFAULT_CALLBACK,\n onUpdate = DEFAULT_CALLBACK,\n onCancel = DEFAULT_CALLBACK,\n rule: defaultRule\n } = props;\n var columns = originalColumns.filter(isSupportedColumn);\n var [selectedFormatter, setFormatter] = useState((_defaultRule$type = defaultRule === null || defaultRule === void 0 ? void 0 : defaultRule.type) !== null && _defaultRule$type !== void 0 ? _defaultRule$type : formatterTypes[0]);\n var [rule, setRule] = useState(defaultRule);\n var [isValid, setIsValid] = useState(false);\n var handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n var handleSave = useCallback(() => {\n if (rule === undefined) {\n log.error('Rule is not defined.');\n return;\n }\n onSave(rule);\n }, [onSave, rule]);\n var handleFormatterChange = useCallback(value => {\n log.debug('handleFormatterChange', value);\n setFormatter(value);\n }, []);\n var handleRuleChange = useCallback((ruleConfig, isRuleValid) => {\n log.debug('handleRuleChange', ruleConfig, isRuleValid, selectedFormatter);\n var updatedRule = {\n type: selectedFormatter,\n config: ruleConfig\n };\n setRule(updatedRule);\n setIsValid(isRuleValid);\n onUpdate(isRuleValid ? updatedRule : undefined);\n }, [onUpdate, selectedFormatter]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-format-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n htmlFor: \"formatter-select\",\n children: \"Select Formatter\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"formatter-list\",\n children: formatterTypes.map((type, index) => /*#__PURE__*/_jsx(\"div\", {\n className: \"formatter-type\",\n children: /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: classNames('btn', 'btn-icon', 'btn-formatter-type', {\n active: type === selectedFormatter\n }),\n \"data-index\": index,\n onClick: () => handleFormatterChange(type),\n children: [getFormatterTypeIcon(type), getFormatterTypeLabel(type)]\n })\n }, type))\n })]\n }), selectedFormatter === FormatterType.CONDITIONAL && /*#__PURE__*/_jsx(ColumnFormatEditor, {\n columns: columns,\n dh: dh,\n config: rule === null || rule === void 0 ? void 0 : rule.config,\n onChange: handleRuleChange\n }), selectedFormatter === FormatterType.ROWS && /*#__PURE__*/_jsx(RowFormatEditor, {\n columns: columns,\n config: rule === null || rule === void 0 ? void 0 : rule.config,\n dh: dh,\n onChange: handleRuleChange\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex justify-content-end my-3\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: handleCancel,\n className: \"mr-2\",\n children: \"Cancel\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: handleSave,\n disabled: rule === undefined || !isValid,\n children: \"Done\"\n })]\n })]\n });\n}\nexport default ConditionalFormatEditor;\n//# sourceMappingURL=ConditionalFormatEditor.js.map","import React, { useEffect, useRef, useState } from 'react';\nimport { Editor } from '@deephaven/console';\nimport { Button, CopyButton, Modal, ModalBody, ModalHeader } from '@deephaven/components';\nimport { vsJson, vsListOrdered } from '@deephaven/icons';\nimport \"./IrisGridCellOverflowModal.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function IrisGridCellOverflowModal(_ref) {\n var _editorRef$current$ge, _editorRef$current2;\n var {\n text,\n isOpen,\n onClose\n } = _ref;\n var [isOpened, setIsOpened] = useState(false);\n var [height, setHeight] = useState(0);\n var [showLineNumbers, setShowLineNumbers] = useState(false);\n var [isFormatted, setIsFormatted] = useState(false);\n var [canFormat, setCanFormat] = useState(false);\n var editorRef = useRef();\n\n // Update format button on open\n useEffect(function enableFormatButtonWhenOpen() {\n if (!isOpen) {\n return;\n }\n try {\n JSON.parse(text);\n setCanFormat(true);\n } catch (_unused) {\n setCanFormat(false);\n }\n setIsFormatted(false);\n }, [isOpen, text]);\n\n // Re-layout editor on height change\n useEffect(function updateLayoutOnHeightChange() {\n if (editorRef.current) {\n editorRef.current.layout();\n }\n }, [height]);\n\n // Update editor options on line number toggle\n useEffect(function toggleShowLineNumber() {\n if (editorRef.current) {\n editorRef.current.updateOptions({\n lineNumbers: showLineNumbers ? 'on' : 'off'\n });\n }\n }, [showLineNumbers]);\n function toggleLineNumbers() {\n setShowLineNumbers(!showLineNumbers);\n }\n function formatAsJSON() {\n var _editorRef$current;\n var model = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getModel();\n if (!canFormat || !model) {\n return;\n }\n if (!isFormatted) {\n model.setValue(JSON.stringify(JSON.parse(text), undefined, 2));\n setIsFormatted(true);\n } else {\n model.setValue(text);\n setIsFormatted(false);\n }\n autoSetLineNumbers();\n }\n function autoSetLineNumbers() {\n var _editor$getModel$getL, _editor$getModel;\n var editor = editorRef.current;\n if (!editor) {\n return;\n }\n setShowLineNumbers(((_editor$getModel$getL = (_editor$getModel = editor.getModel()) === null || _editor$getModel === void 0 ? void 0 : _editor$getModel.getLineCount()) !== null && _editor$getModel$getL !== void 0 ? _editor$getModel$getL : 0) > 1);\n }\n function handleToggle() {\n if (isOpened) {\n editorRef.current = undefined;\n onClose();\n }\n }\n function onEditorInitialized(editor) {\n editorRef.current = editor;\n setHeight(editor.getContentHeight());\n editor.onDidContentSizeChange(_ref2 => {\n var {\n contentHeight\n } = _ref2;\n return setHeight(contentHeight);\n });\n autoSetLineNumbers();\n }\n if (!isOpen && !isOpened) {\n return null;\n }\n return /*#__PURE__*/_jsxs(Modal, {\n isOpen: isOpen,\n centered: true,\n keyboard: true,\n toggle: handleToggle,\n onOpened: () => setIsOpened(true),\n onClosed: () => {\n setIsOpened(false);\n setHeight(0);\n },\n className: \"cell-overflow-modal\",\n size: \"xl\",\n children: [/*#__PURE__*/_jsxs(ModalHeader, {\n toggle: onClose,\n children: [/*#__PURE__*/_jsx(\"h5\", {\n className: \"overflow-modal-title\",\n children: \"Cell Contents\"\n }), /*#__PURE__*/_jsx(CopyButton, {\n kind: \"inline\",\n tooltip: \"Copy cell contents\",\n copy: (_editorRef$current$ge = (_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 ? void 0 : _editorRef$current2.getValue()) !== null && _editorRef$current$ge !== void 0 ? _editorRef$current$ge : text\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"inline\",\n active: showLineNumbers,\n icon: vsListOrdered,\n tooltip: \"Toggle line numbers\",\n onClick: toggleLineNumbers\n }), canFormat && /*#__PURE__*/_jsx(Button, {\n kind: \"inline\",\n icon: vsJson,\n active: isFormatted,\n tooltip: \"Format as JSON\",\n onClick: formatAsJSON\n })]\n }), /*#__PURE__*/_jsx(ModalBody, {\n style: {\n height\n },\n children: /*#__PURE__*/_jsx(Editor, {\n onEditorInitialized: onEditorInitialized,\n settings: {\n value: text,\n readOnly: true,\n wordWrap: 'on',\n // Loading json language w/o the monaco workers causes UI freezes and monaco errors. TS colorizes the same\n language: canFormat ? 'typescript' : 'plaintext',\n folding: canFormat,\n padding: {\n bottom: 16\n },\n lineNumbers: showLineNumbers ? 'on' : 'off',\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n /*\n The entire string may be 1 giant line\n Monaco by default seeds find w/ that line\n On very long strings this hangs the browser, so never seed the search\n */\n find: {\n seedSearchStringFromSelection: 'never'\n }\n }\n })\n })]\n });\n}\n//# sourceMappingURL=IrisGridCellOverflowModal.js.map","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose, vsArrowUp, vsArrowDown } from '@deephaven/icons';\nimport React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { Type as FilterType } from '@deephaven/filters';\nimport { Button, DateTimeInput, Select } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport classNames from 'classnames';\nimport \"./GotoRow.css\";\nimport { nanoid } from 'nanoid';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction isIrisGridProxyModel(model) {\n return model.model !== undefined;\n}\nvar DEFAULT_FORMAT_STRING = '###,##0';\nvar GotoRow = /*#__PURE__*/forwardRef((_ref, ref) => {\n var {\n gotoRow,\n gotoRowError,\n gotoValueError,\n onGotoRowSubmit,\n isShown,\n onEntering,\n onEntered: _onEntered,\n onExiting,\n onExited,\n model,\n onGotoRowNumberChanged,\n onClose,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueFilter,\n onGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged,\n onGotoValueChanged,\n onGotoValueSubmit\n } = _ref;\n var gotoRowInputRef = useRef(null);\n var gotoValueInputRef = useRef(null);\n var [isGotoRowActive, setIsGotoRowActive] = useState(false);\n var columns = [];\n if (isIrisGridProxyModel(model) && model.table !== undefined) {\n ({\n columns\n } = model.table);\n }\n var {\n dh,\n rowCount\n } = model;\n var gotoRowInputId = useMemo(() => \"goto-row-input-\".concat(nanoid()), []);\n var handleGotoValueNumberKeyDown = e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit();\n } else if ((e.key === 'Backspace' || e.key === 'Delete') && (gotoValue === \"\".concat(Number.POSITIVE_INFINITY) || gotoValue === \"\".concat(Number.NEGATIVE_INFINITY))) {\n onGotoValueInputChanged('');\n }\n };\n var handleGotoValueKeySubmit = e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit(e.shiftKey);\n }\n };\n var index = model.getColumnIndexByName(gotoValueSelectedColumnName);\n var selectedColumn = columns[index !== null && index !== void 0 ? index : 0];\n var columnType = selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.type;\n var normalizedType = TableUtils.getNormalizedType(columnType);\n var onGotoValueInputChanged = value => {\n onGotoValueChanged(value !== null && value !== void 0 ? value : '');\n };\n useImperativeHandle(ref, () => ({\n focus() {\n var _gotoRowInputRef$curr;\n setIsGotoRowActive(true);\n (_gotoRowInputRef$curr = gotoRowInputRef.current) === null || _gotoRowInputRef$curr === void 0 ? void 0 : _gotoRowInputRef$curr.select();\n }\n }));\n var selectInput = () => {\n // when row changes without focus (i.e. via context menu), re-select input\n if (isGotoRowActive && document.activeElement !== gotoRowInputRef.current) {\n var _gotoRowInputRef$curr2;\n (_gotoRowInputRef$curr2 = gotoRowInputRef.current) === null || _gotoRowInputRef$curr2 === void 0 ? void 0 : _gotoRowInputRef$curr2.select();\n } else if (!isGotoRowActive && document.activeElement !== gotoValueInputRef.current) {\n var _gotoValueInputRef$cu;\n (_gotoValueInputRef$cu = gotoValueInputRef.current) === null || _gotoValueInputRef$cu === void 0 ? void 0 : _gotoValueInputRef$cu.select();\n }\n };\n useEffect(selectInput, [isGotoRowActive]);\n var renderValueInput = () => {\n switch (normalizedType) {\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: classNames('form-control', {\n 'is-invalid': gotoValueError !== ''\n }),\n onKeyDown: handleGotoValueNumberKeyDown,\n placeholder: \"value\",\n onChange: e => {\n var value = e.target.value.toLowerCase();\n // regex tests for\n if (/^-?[0-9]*\\.?[0-9]*$/.test(e.target.value)) {\n onGotoValueInputChanged(e.target.value);\n } else if (value === '-i' || value === '-infinity') {\n onGotoValueInputChanged(\"\".concat(Number.NEGATIVE_INFINITY));\n } else if (value === 'i' || value === 'infinity') {\n onGotoValueInputChanged(\"\".concat(Number.POSITIVE_INFINITY));\n }\n },\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n });\n case TableUtils.dataType.DATETIME:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-value-date-time-input\",\n children: /*#__PURE__*/_jsx(DateTimeInput, {\n ref: gotoValueInputRef,\n className: classNames('form-control', 'goto-value-date-time-input', {\n 'is-invalid': gotoValueError !== ''\n }),\n defaultValue: gotoValue,\n onChange: onGotoValueInputChanged,\n onSubmit: handleGotoValueKeySubmit,\n \"aria-label\": \"Value Input\"\n })\n });\n case TableUtils.dataType.STRING:\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsxs(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n onGotoValueSelectedFilterChanged(eventTargetValue);\n },\n value: gotoValueFilter,\n \"aria-label\": \"filter-type-select\",\n children: [/*#__PURE__*/_jsx(\"option\", {\n value: FilterType.eqIgnoreCase,\n children: \"Equals (case-insensitive)\"\n }, FilterType.eqIgnoreCase), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.containsIgnoreCase,\n children: \"Contains (case-insensitive)\"\n }, FilterType.containsIgnoreCase), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.eq,\n children: \"Equals\"\n }, FilterType.eq), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.contains,\n children: \"Contains\"\n }, FilterType.contains)]\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: classNames('form-control', {\n 'is-invalid': gotoValueError !== ''\n }),\n onKeyDown: handleGotoValueKeySubmit,\n placeholder: \"value\",\n onChange: e => onGotoValueInputChanged(e.target.value),\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n })]\n });\n case TableUtils.dataType.BOOLEAN:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsxs(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n onGotoValueInputChanged(eventTargetValue);\n },\n value: gotoValue,\n \"aria-label\": \"Value Input\",\n children: [/*#__PURE__*/_jsx(\"option\", {\n \"aria-label\": \"null value\",\n value: \"\"\n }, \"null\"), /*#__PURE__*/_jsx(\"option\", {\n value: \"true\",\n children: \"true\"\n }, \"true\"), /*#__PURE__*/_jsx(\"option\", {\n value: \"false\",\n children: \"false\"\n }, \"false\")]\n })\n });\n default:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: \"form-control\",\n onKeyDown: handleGotoValueKeySubmit,\n placeholder: \"value\",\n onChange: e => onGotoValueInputChanged(e.target.value),\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n });\n }\n };\n return /*#__PURE__*/_jsx(IrisGridBottomBar, {\n isShown: isShown,\n className: classNames('goto-row'),\n onEntering: onEntering,\n onEntered: () => {\n _onEntered();\n selectInput();\n },\n onExiting: onExiting,\n onExited: onExited,\n children: /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"goto-row-row\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: classNames('goto-row-wrapper', {\n 'is-inactive': !isGotoRowActive\n }),\n onClick: () => setIsGotoRowActive(true),\n onFocus: () => setIsGotoRowActive(true),\n role: \"group\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"goto-row-text\",\n htmlFor: gotoRowInputId,\n children: \"Go to row\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoRowInputRef,\n \"data-testid\": \"goto-row-input\",\n type: \"number\",\n onKeyDown: e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoRowSubmit();\n }\n },\n className: classNames('form-control', {\n 'is-invalid': gotoRowError !== ''\n }),\n placeholder: \"Row number\",\n onChange: event => {\n onGotoRowNumberChanged(event);\n },\n value: gotoRow,\n id: gotoRowInputId\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"goto-row-text\",\n children: [\"of\", ' ', dh.i18n.NumberFormat.format(DEFAULT_FORMAT_STRING, rowCount)]\n }), gotoRowError && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-danger\",\n children: gotoRowError\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-close\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: onClose,\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsClose,\n style: {\n marginRight: '0'\n }\n })\n })\n })]\n }), model.isSeekRowAvailable && /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-row\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('goto-row-wrapper', {\n 'is-inactive': isGotoRowActive\n }),\n onClick: () => setIsGotoRowActive(false),\n onFocus: () => setIsGotoRowActive(false),\n role: \"group\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-text\",\n children: \"Go to value\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n var columnName = eventTargetValue;\n onGotoValueSelectedColumnNameChanged(columnName);\n },\n value: gotoValueSelectedColumnName,\n \"aria-label\": \"column-name-select\",\n id: \"column-name-select\",\n children: columns.map(column => /*#__PURE__*/_jsx(\"option\", {\n value: column.name,\n children: column.name\n }, column.name))\n })\n }), renderValueInput(), /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Button, {\n tooltip: \"Previous match\",\n icon: vsArrowUp,\n kind: \"ghost\",\n disabled: gotoValue === '',\n onClick: () => {\n onGotoValueSubmit(true);\n }\n }), /*#__PURE__*/_jsx(Button, {\n tooltip: \"Next match\",\n icon: vsArrowDown,\n kind: \"ghost\",\n disabled: gotoValue === '',\n onClick: () => {\n onGotoValueSubmit(false);\n }\n })]\n }), gotoValueError && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-danger\",\n children: gotoValueError\n })]\n })\n })]\n })\n });\n});\nGotoRow.displayName = 'GotoRow';\nexport default GotoRow;\n//# sourceMappingURL=GotoRow.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport deepEqual from 'fast-deep-equal';\nimport Log from '@deephaven/log';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ContextActions, Stack, Menu, Page, Popper, ThemeExport, Tooltip, Button, ContextActionUtils, SlideTransition } from '@deephaven/components';\nimport { Grid, GridRange, GridUtils, isEditableGridModel, isExpandableGridModel, isDeletableGridModel } from '@deephaven/grid';\nimport { dhEye, dhFilterFilled, dhGraphLineUp, dhTriangleDownSquare, vsClose, vsCloudDownload, vsEdit, vsFilter, vsMenu, vsReply, vsRuby, vsSearch, vsSplitHorizontal, vsSymbolOperator, vsTools } from '@deephaven/icons';\nimport { DateUtils, Formatter, FormatterUtils, TableUtils, isSortDirection } from '@deephaven/jsapi-utils';\nimport { assertNotNull, copyToClipboard, EMPTY_ARRAY, EMPTY_MAP, Pending, PromiseUtils, ValidationError, getOrThrow } from '@deephaven/utils';\nimport { Type as FilterType } from '@deephaven/filters';\nimport throttle from 'lodash.throttle';\nimport debounce from 'lodash.debounce';\nimport clamp from 'lodash.clamp';\nimport { getFormatColumns } from \"./sidebar/conditional-formatting/ConditionalFormattingUtils.js\";\nimport PendingDataBottomBar from \"./PendingDataBottomBar.js\";\nimport IrisGridCopyHandler from \"./IrisGridCopyHandler.js\";\nimport FilterInputField from \"./FilterInputField.js\";\nimport { CopyCellKeyHandler, ClearFilterKeyHandler, CopyKeyHandler, ReverseKeyHandler } from \"./key-handlers/index.js\";\nimport { IrisGridCellOverflowMouseHandler, IrisGridColumnSelectMouseHandler, IrisGridColumnTooltipMouseHandler, IrisGridContextMenuHandler, IrisGridCopyCellMouseHandler, IrisGridDataSelectMouseHandler, IrisGridFilterMouseHandler, IrisGridRowTreeMouseHandler, IrisGridSortMouseHandler, IrisGridTokenMouseHandler, PendingMouseHandler } from \"./mousehandlers/index.js\";\nimport ToastBottomBar from \"./ToastBottomBar.js\";\nimport IrisGridMetricCalculator from \"./IrisGridMetricCalculator.js\";\nimport IrisGridModelUpdater from \"./IrisGridModelUpdater.js\";\nimport IrisGridRenderer from \"./IrisGridRenderer.js\";\nimport { createDefaultIrisGridTheme } from \"./IrisGridTheme.js\";\nimport ColumnStatistics from \"./ColumnStatistics.js\";\nimport \"./IrisGrid.css\";\nimport AdvancedFilterCreator from \"./AdvancedFilterCreator.js\";\nimport { Aggregations, AggregationEdit, AggregationUtils, ChartBuilder, CustomColumnBuilder, OptionType, RollupRows, TableCsvExporter, TableSaver, VisibilityOrderingBuilder, DownloadServiceWorkerUtils } from \"./sidebar/index.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport CrossColumnSearch from \"./CrossColumnSearch.js\";\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport { isPartitionedGridModel } from \"./PartitionedGridModel.js\";\nimport IrisGridPartitionSelector from \"./IrisGridPartitionSelector.js\";\nimport SelectDistinctBuilder from \"./sidebar/SelectDistinctBuilder.js\";\nimport AdvancedSettingsType from \"./sidebar/AdvancedSettingsType.js\";\nimport AdvancedSettingsMenu from \"./sidebar/AdvancedSettingsMenu.js\";\nimport SHORTCUTS from \"./IrisGridShortcuts.js\";\nimport ConditionalFormattingMenu from \"./sidebar/conditional-formatting/ConditionalFormattingMenu.js\";\nimport ConditionalFormatEditor from \"./sidebar/conditional-formatting/ConditionalFormatEditor.js\";\nimport IrisGridCellOverflowModal from \"./IrisGridCellOverflowModal.js\";\nimport GotoRow from \"./GotoRow.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport { IrisGridThemeContext } from \"./IrisGridThemeProvider.js\";\nimport { isMissingPartitionError } from \"./MissingPartitionError.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGrid');\nvar VIEWPORT_LOADING_DELAY = 500;\nvar UPDATE_DOWNLOAD_THROTTLE = 500;\nvar SET_FILTER_DEBOUNCE = 250;\nvar SEEK_ROW_DEBOUNCE = 250;\nvar SET_CONDITIONAL_FORMAT_DEBOUNCE = 250;\nvar DEFAULT_AGGREGATION_SETTINGS = Object.freeze({\n aggregations: EMPTY_ARRAY,\n showOnTop: false\n});\nvar UNFORMATTED_DATE_PATTERN = \"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z\";\nfunction isEmptyConfig(_ref) {\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = _ref;\n return advancedFilters.size === 0 && aggregationSettings.aggregations.length === 0 && customColumns.length === 0 && quickFilters.size === 0 && reverseType === TableUtils.REVERSE_TYPE.NONE && rollupConfig == null && searchFilter == null && selectDistinctColumns.length === 0 && sorts.length === 0;\n}\nclass IrisGrid extends Component {\n constructor(props) {\n var _model$layoutHints, _model$layoutHints$hi, _model$columns$0$name, _model$columns$;\n super(props);\n _defineProperty(this, \"grid\", void 0);\n _defineProperty(this, \"lastFocusedFilterBarColumn\", void 0);\n _defineProperty(this, \"lastLoadedConfig\", void 0);\n _defineProperty(this, \"tooltip\", void 0);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"globalColumnFormats\", void 0);\n _defineProperty(this, \"dateTimeFormatterOptions\", void 0);\n _defineProperty(this, \"decimalFormatOptions\", void 0);\n _defineProperty(this, \"integerFormatOptions\", void 0);\n _defineProperty(this, \"truncateNumbersWithPound\", void 0);\n _defineProperty(this, \"showEmptyStrings\", void 0);\n _defineProperty(this, \"showNullStrings\", void 0);\n _defineProperty(this, \"loadingScrimStartTime\", void 0);\n _defineProperty(this, \"loadingScrimFinishTime\", void 0);\n _defineProperty(this, \"animationFrame\", void 0);\n _defineProperty(this, \"loadingTimer\", void 0);\n _defineProperty(this, \"tableSaver\", void 0);\n _defineProperty(this, \"crossColumnRef\", void 0);\n _defineProperty(this, \"isAnimating\", void 0);\n _defineProperty(this, \"filterInputRef\", void 0);\n _defineProperty(this, \"gotoRowRef\", void 0);\n _defineProperty(this, \"isCopying\", void 0);\n _defineProperty(this, \"toggleFilterBarAction\", void 0);\n _defineProperty(this, \"toggleSearchBarAction\", void 0);\n _defineProperty(this, \"toggleGotoRowAction\", void 0);\n _defineProperty(this, \"discardAction\", void 0);\n _defineProperty(this, \"commitAction\", void 0);\n _defineProperty(this, \"contextActions\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"keyHandlers\", void 0);\n _defineProperty(this, \"mouseHandlers\", void 0);\n _defineProperty(this, \"getAdvancedMenuOpenedHandler\", memoize(column => this.handleAdvancedMenuOpened.bind(this, column), {\n max: 100\n }));\n _defineProperty(this, \"getCachedAdvancedFilterMenuActions\", memoize((model, column, advancedFilterOptions, sortDirection, formatter) => /*#__PURE__*/_jsx(AdvancedFilterCreator, {\n model: model,\n column: column,\n onFilterChange: this.handleAdvancedFilterChange,\n onSortChange: this.handleAdvancedFilterSortChange,\n onDone: this.handleAdvancedFilterDone,\n options: advancedFilterOptions,\n sortDirection: sortDirection,\n formatter: formatter,\n tableUtils: this.tableUtils\n }), {\n max: 50\n }));\n _defineProperty(this, \"getCachedOptionItems\", memoize((isChartBuilderAvailable, isCustomColumnsAvailable, isFormatColumnsAvailable, isRollupAvailable, isTotalsAvailable, isSelectDistinctAvailable, isExportAvailable, toggleFilterBarAction, toggleSearchBarAction, toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, canToggleSearch, showGotoRow, hasAdvancedSettings) => {\n var optionItems = [];\n if (isChartBuilderAvailable) {\n optionItems.push({\n type: OptionType.CHART_BUILDER,\n title: 'Chart Builder',\n icon: dhGraphLineUp\n });\n }\n optionItems.push({\n type: OptionType.VISIBILITY_ORDERING_BUILDER,\n title: 'Organize Columns',\n icon: dhEye\n });\n if (isFormatColumnsAvailable) {\n optionItems.push({\n type: OptionType.CONDITIONAL_FORMATTING,\n title: 'Conditional Formatting',\n icon: vsEdit\n });\n }\n if (isCustomColumnsAvailable) {\n optionItems.push({\n type: OptionType.CUSTOM_COLUMN_BUILDER,\n title: 'Custom Columns',\n icon: vsSplitHorizontal\n });\n }\n if (isRollupAvailable) {\n optionItems.push({\n type: OptionType.ROLLUP_ROWS,\n title: 'Rollup Rows',\n icon: dhTriangleDownSquare\n });\n }\n if (isTotalsAvailable) {\n optionItems.push({\n type: OptionType.AGGREGATIONS,\n title: 'Aggregate Columns',\n icon: vsSymbolOperator\n });\n }\n if (isSelectDistinctAvailable) {\n optionItems.push({\n type: OptionType.SELECT_DISTINCT,\n title: 'Select Distinct Values',\n icon: vsRuby\n });\n }\n if (isExportAvailable && canDownloadCsv) {\n optionItems.push({\n type: OptionType.TABLE_EXPORTER,\n title: 'Download CSV',\n icon: vsCloudDownload\n });\n }\n if (hasAdvancedSettings) {\n optionItems.push({\n type: OptionType.ADVANCED_SETTINGS,\n title: 'Advanced Settings',\n icon: vsTools\n });\n }\n optionItems.push({\n type: OptionType.QUICK_FILTERS,\n title: 'Quick Filters',\n subtitle: toggleFilterBarAction.shortcut.getDisplayText(),\n icon: vsFilter,\n isOn: isFilterBarShown,\n onChange: toggleFilterBarAction.action\n });\n if (canToggleSearch) {\n optionItems.push({\n type: OptionType.SEARCH_BAR,\n title: 'Search Bar',\n subtitle: toggleSearchBarAction.shortcut.getDisplayText(),\n icon: vsSearch,\n isOn: showSearchBar,\n onChange: toggleSearchBarAction.action\n });\n }\n optionItems.push({\n type: OptionType.GOTO,\n title: 'Go to',\n subtitle: toggleGotoRowAction.shortcut.getDisplayText(),\n icon: vsReply,\n isOn: showGotoRow,\n onChange: toggleGotoRowAction.action\n });\n return Object.freeze(optionItems);\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedHiddenColumns\", memoize((metricCalculator, userColumnWidths) => IrisGridUtils.getHiddenColumns(new Map([...metricCalculator.initialColumnWidths, ...userColumnWidths])), {\n max: 1\n }));\n _defineProperty(this, \"getAggregationMap\", memoize((columns, aggregations) => {\n var aggregationMap = {};\n aggregations.forEach(_ref2 => {\n var {\n operation,\n selected,\n invert\n } = _ref2;\n aggregationMap[operation] = AggregationUtils.getOperationColumnNames(columns, operation, selected, invert);\n });\n return aggregationMap;\n }));\n _defineProperty(this, \"getOperationMap\", memoize((columns, aggregations) => {\n var operationMap = {};\n aggregations.filter(a => !AggregationUtils.isRollupOperation(a.operation)).forEach(_ref3 => {\n var {\n operation,\n selected,\n invert\n } = _ref3;\n AggregationUtils.getOperationColumnNames(columns, operation, selected, invert).forEach(name => {\n var _operationMap$name;\n var newOperations = [...((_operationMap$name = operationMap[name]) !== null && _operationMap$name !== void 0 ? _operationMap$name : []), operation];\n operationMap[name] = Object.freeze(newOperations);\n });\n });\n return operationMap;\n }));\n _defineProperty(this, \"getOperationOrder\", memoize(aggregations => aggregations.map(a => a.operation).filter(o => !AggregationUtils.isRollupOperation(o))));\n _defineProperty(this, \"getCachedFormatColumns\", memoize((dh, columns, rules) => getFormatColumns(dh, columns, rules)));\n _defineProperty(this, \"getCachedPreviewFormatColumns\", memoize((dh, columns, rulesParam, preview, editIndex) => {\n log.debug('getCachedPreviewFormatColumns', rulesParam, preview, editIndex);\n if (preview !== undefined && editIndex !== undefined) {\n var rules = [...rulesParam];\n rules[editIndex] = preview;\n return this.getCachedFormatColumns(dh, columns, rules);\n }\n return this.getCachedFormatColumns(dh, columns, rulesParam);\n }));\n _defineProperty(this, \"getModelRollupConfig\", memoize((originalColumns, config, aggregationSettings) => IrisGridUtils.getModelRollupConfig(originalColumns, config, aggregationSettings)));\n _defineProperty(this, \"getModelTotalsConfig\", memoize((columns, config, aggregationSettings) => {\n var _config$columns$lengt, _config$columns;\n if (((_config$columns$lengt = config === null || config === void 0 ? void 0 : (_config$columns = config.columns) === null || _config$columns === void 0 ? void 0 : _config$columns.length) !== null && _config$columns$lengt !== void 0 ? _config$columns$lengt : 0) > 0) {\n // If we've got rollups, then aggregations are applied as part of that...\n return null;\n }\n\n // Filter out aggregations without any columns actually selected\n var aggregations = aggregationSettings.aggregations.filter(agg => agg.selected.length > 0 || agg.invert);\n if (aggregations.length === 0) {\n // We don't actually have any aggregations set, don't bother\n return null;\n }\n var operationMap = this.getOperationMap(columns, aggregations);\n var operationOrder = this.getOperationOrder(aggregations);\n return {\n operationMap,\n operationOrder,\n showOnTop: aggregationSettings.showOnTop,\n defaultOperation: AggregationOperation.SKIP\n };\n }));\n _defineProperty(this, \"getCachedStateOverride\", memoize((hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverseType, rollupConfig, isMenuShown) => ({\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverseType,\n rollupConfig,\n isMenuShown\n }), {\n max: 1\n }));\n _defineProperty(this, \"getCachedFilter\", memoize((customFilters, quickFilters, advancedFilters, searchFilter) => [...(customFilters !== null && customFilters !== void 0 ? customFilters : []), ...IrisGridUtils.getFiltersFromFilterMap(quickFilters), ...IrisGridUtils.getFiltersFromFilterMap(advancedFilters), ...(searchFilter !== undefined ? [searchFilter] : [])], {\n max: 1\n }));\n _defineProperty(this, \"getCachedTheme\", memoize((contextTheme, theme, isEditable, floatingRowCount) => {\n var _theme$rowFooterWidth;\n // If a theme is available via context, use that as the base theme.\n // If iris-grid is standalone without a context, initialize a default theme.\n var defaultTheme = contextTheme !== null && contextTheme !== void 0 ? contextTheme : createDefaultIrisGridTheme();\n\n // We only show the row footers when we have floating rows for aggregations\n var rowFooterWidth = floatingRowCount > 0 ? (_theme$rowFooterWidth = theme === null || theme === void 0 ? void 0 : theme.rowFooterWidth) !== null && _theme$rowFooterWidth !== void 0 ? _theme$rowFooterWidth : defaultTheme.rowFooterWidth : 0;\n return _objectSpread(_objectSpread(_objectSpread({}, defaultTheme), theme), {}, {\n autoSelectRow: !isEditable,\n rowFooterWidth\n });\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedKeyHandlers\", memoize(keyHandlers => [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)));\n _defineProperty(this, \"getCachedMouseHandlers\", memoize(mouseHandlers => [...mouseHandlers, ...this.mouseHandlers]));\n _defineProperty(this, \"getCachedRenderer\", memoize(rendererProp => rendererProp !== null && rendererProp !== void 0 ? rendererProp : new IrisGridRenderer(), {\n max: 1\n }));\n _defineProperty(this, \"getAlwaysFetchColumns\", memoize((alwaysFetchColumns, columns, movedColumns, floatingLeftColumnCount, floatingRightColumnCount, draggingRange) => {\n var floatingColumns = [];\n for (var i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(i, movedColumns)].name);\n }\n for (var _i = 0; _i < floatingRightColumnCount; _i += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(columns.length - 1 - _i, movedColumns)].name);\n }\n if (draggingRange) {\n for (var _i2 = draggingRange[0]; _i2 <= draggingRange[1]; _i2 += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(_i2, movedColumns)].name);\n }\n }\n var columnSet = new Set([...alwaysFetchColumns, ...floatingColumns]);\n return Object.freeze([...columnSet]);\n }));\n _defineProperty(this, \"updateSearchFilter\", debounce((searchValue, selectedSearchColumns, columns, invertSearchColumns) => {\n var {\n model\n } = this.props;\n var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, selectedSearchColumns, columns, invertSearchColumns);\n this.setState({\n searchFilter\n });\n }, SET_FILTER_DEBOUNCE));\n _defineProperty(this, \"showViewportLoading\", throttle(() => {\n var {\n model\n } = this.props;\n var {\n loadingSpinnerShown\n } = this.state;\n if (model.isViewportPending && !loadingSpinnerShown) {\n // We only want to show the viewport loading if the viewport is still loading\n // and we're not already showing a loader for something else\n this.startLoading('Waiting for viewport...', {\n loadingCancelShown: false,\n loadingBlocksGrid: false\n });\n }\n }, VIEWPORT_LOADING_DELAY, {\n leading: false,\n trailing: true\n }));\n _defineProperty(this, \"handleConditionalFormatEditorUpdate\", debounce(conditionalFormatPreview => {\n this.setState({\n conditionalFormatPreview\n });\n }, SET_CONDITIONAL_FORMAT_DEBOUNCE));\n _defineProperty(this, \"handleDownloadProgressUpdate\", throttle((tableDownloadProgress, tableDownloadEstimatedTime) => {\n var {\n tableDownloadStatus\n } = this.state;\n if (tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING) {\n this.setState({\n tableDownloadProgress,\n tableDownloadEstimatedTime\n });\n }\n }, UPDATE_DOWNLOAD_THROTTLE));\n _defineProperty(this, \"getOverflowButtonTooltip\", memoize(overflowButtonTooltipProps => {\n if (overflowButtonTooltipProps == null) {\n return null;\n }\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, overflowButtonTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'left',\n modifiers: {\n flip: {\n behavior: ['left', 'right']\n }\n }\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: \"View full contents\"\n }, Date.now())\n });\n }));\n _defineProperty(this, \"getExpandCellTooltip\", memoize(expandCellTooltipProps => {\n if (expandCellTooltipProps == null) {\n return null;\n }\n var {\n expandTooltipDisplayValue\n } = this.state;\n var {\n model\n } = this.props;\n var isExpandAllAvailable = isExpandableGridModel(model) && model.isExpandAllAvailable;\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, expandCellTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'bottom-start'\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: /*#__PURE__*/_jsxs(\"div\", {\n style: {\n textAlign: 'left'\n },\n children: [\"Click to \", expandTooltipDisplayValue, \" row\", isExpandAllAvailable && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"br\", {}), ContextActionUtils.isMacPlatform() ? '⌘' : 'Ctrl+', \"Click to expand row and all children\"]\n })]\n })\n }, Date.now())\n });\n }));\n _defineProperty(this, \"getLinkHoverTooltip\", memoize(linkHoverTooltipProps => {\n if (linkHoverTooltipProps == null) {\n return null;\n }\n var {\n linkHoverDisplayValue\n } = this.state;\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, linkHoverTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'bottom'\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"link-hover-tooltip\",\n children: [linkHoverDisplayValue, \" - Click once to follow.\", /*#__PURE__*/_jsx(\"br\", {}), \"Click and hold to select this cell.\"]\n })\n })\n });\n }));\n _defineProperty(this, \"handleGotoValueChanged\", input => {\n this.setState({\n gotoValue: input,\n gotoValueManuallyChanged: true\n });\n this.debouncedSeekRow(input);\n });\n _defineProperty(this, \"debouncedSeekRow\", debounce(input => {\n this.seekRow(input);\n }, SEEK_ROW_DEBOUNCE));\n this.handleAdvancedFilterChange = this.handleAdvancedFilterChange.bind(this);\n this.handleAdvancedFilterSortChange = this.handleAdvancedFilterSortChange.bind(this);\n this.handleAdvancedFilterDone = this.handleAdvancedFilterDone.bind(this);\n this.handleAdvancedMenuOpened = this.handleAdvancedMenuOpened.bind(this);\n this.handleGotoRowOpened = this.handleGotoRowOpened.bind(this);\n this.handleGotoRowClosed = this.handleGotoRowClosed.bind(this);\n this.handleAdvancedMenuClosed = this.handleAdvancedMenuClosed.bind(this);\n this.handleAggregationChange = this.handleAggregationChange.bind(this);\n this.handleAggregationsChange = this.handleAggregationsChange.bind(this);\n this.handleAggregationEdit = this.handleAggregationEdit.bind(this);\n this.handleAnimationLoop = this.handleAnimationLoop.bind(this);\n this.handleAnimationStart = this.handleAnimationStart.bind(this);\n this.handleAnimationEnd = this.handleAnimationEnd.bind(this);\n this.handleChartChange = this.handleChartChange.bind(this);\n this.handleChartCreate = this.handleChartCreate.bind(this);\n this.handleGridError = this.handleGridError.bind(this);\n this.handleFilterBarChange = this.handleFilterBarChange.bind(this);\n this.handleFilterBarDone = this.handleFilterBarDone.bind(this);\n this.handleFilterBarTab = this.handleFilterBarTab.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleMenu = this.handleMenu.bind(this);\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleMenuSelect = this.handleMenuSelect.bind(this);\n this.handleMenuBack = this.handleMenuBack.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleSelectionChanged = this.handleSelectionChanged.bind(this);\n this.handleMovedColumnsChanged = this.handleMovedColumnsChanged.bind(this);\n this.handleHeaderGroupsChanged = this.handleHeaderGroupsChanged.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleTooltipRef = this.handleTooltipRef.bind(this);\n this.handleViewChanged = this.handleViewChanged.bind(this);\n this.handleFormatSelection = this.handleFormatSelection.bind(this);\n this.handleConditionalFormatCreate = this.handleConditionalFormatCreate.bind(this);\n this.handleConditionalFormatEdit = this.handleConditionalFormatEdit.bind(this);\n this.handleConditionalFormatsChange = this.handleConditionalFormatsChange.bind(this);\n this.handleConditionalFormatEditorSave = this.handleConditionalFormatEditorSave.bind(this);\n this.handleConditionalFormatEditorCancel = this.handleConditionalFormatEditorCancel.bind(this);\n this.handleUpdateCustomColumns = this.handleUpdateCustomColumns.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(this);\n this.handleSelectDistinctChanged = this.handleSelectDistinctChanged.bind(this);\n this.handlePendingDataUpdated = this.handlePendingDataUpdated.bind(this);\n this.handleViewportUpdated = this.handleViewportUpdated.bind(this);\n this.handlePendingCommitClicked = this.handlePendingCommitClicked.bind(this);\n this.handlePendingDiscardClicked = this.handlePendingDiscardClicked.bind(this);\n this.handleGotoRowSelectedRowNumberSubmit = this.handleGotoRowSelectedRowNumberSubmit.bind(this);\n this.focusRowInGrid = this.focusRowInGrid.bind(this);\n this.handleDownloadTable = this.handleDownloadTable.bind(this);\n this.handleDownloadTableStart = this.handleDownloadTableStart.bind(this);\n this.handleCancelDownloadTable = this.handleCancelDownloadTable.bind(this);\n this.handleDownloadCanceled = this.handleDownloadCanceled.bind(this);\n this.handleDownloadCompleted = this.handleDownloadCompleted.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handleColumnVisibilityChanged = this.handleColumnVisibilityChanged.bind(this);\n this.handleColumnVisibilityReset = this.handleColumnVisibilityReset.bind(this);\n this.handleCrossColumnSearch = this.handleCrossColumnSearch.bind(this);\n this.handleRollupChange = this.handleRollupChange.bind(this);\n this.handleOverflowClose = this.handleOverflowClose.bind(this);\n this.getColumnBoundingRect = this.getColumnBoundingRect.bind(this);\n this.handleGotoRowSelectedRowNumberChanged = this.handleGotoRowSelectedRowNumberChanged.bind(this);\n this.handleGotoValueSelectedColumnNameChanged = this.handleGotoValueSelectedColumnNameChanged.bind(this);\n this.handleGotoValueSelectedFilterChanged = this.handleGotoValueSelectedFilterChanged.bind(this);\n this.handleGotoValueChanged = this.handleGotoValueChanged.bind(this);\n this.handleGotoValueSubmitted = this.handleGotoValueSubmitted.bind(this);\n this.handleViewportUpdated = this.handleViewportUpdated.bind(this);\n this.makeQuickFilter = this.makeQuickFilter.bind(this);\n this.grid = null;\n this.lastLoadedConfig = null;\n this.pending = new Pending();\n this.globalColumnFormats = EMPTY_ARRAY;\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.truncateNumbersWithPound = false;\n this.showEmptyStrings = true;\n this.showNullStrings = true;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n this.tableSaver = null;\n this.crossColumnRef = /*#__PURE__*/React.createRef();\n this.isAnimating = false;\n this.filterInputRef = /*#__PURE__*/React.createRef();\n this.gotoRowRef = /*#__PURE__*/React.createRef();\n this.isCopying = false;\n this.toggleFilterBarAction = {\n action: () => this.toggleFilterBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER\n };\n this.toggleSearchBarAction = {\n action: () => this.toggleSearchBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_SEARCH\n };\n this.toggleGotoRowAction = {\n action: () => this.toggleGotoRow(),\n shortcut: SHORTCUTS.TABLE.GOTO_ROW\n };\n this.discardAction = {\n action: () => {\n var {\n model\n } = this.props;\n if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0) {\n this.discardPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.DISCARD\n };\n this.commitAction = {\n action: () => {\n var {\n model\n } = this.props;\n if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0 && model.pendingDataErrors.size === 0) {\n this.commitPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.COMMIT\n };\n this.contextActions = [this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, this.discardAction, this.commitAction];\n var {\n aggregationSettings: _aggregationSettings,\n conditionalFormats,\n customColumnFormatMap,\n isFilterBarShown: _isFilterBarShown,\n isSelectingPartition,\n partitions,\n partitionConfig,\n model: _model,\n movedColumns: movedColumnsProp,\n movedRows: movedRowsProp,\n rollupConfig: _rollupConfig,\n userColumnWidths: _userColumnWidths,\n userRowHeights,\n showSearchBar: _showSearchBar,\n searchValue: _searchValue,\n selectedSearchColumns: _selectedSearchColumns,\n invertSearchColumns: _invertSearchColumns,\n advancedFilters: _advancedFilters,\n quickFilters: _quickFilters,\n selectDistinctColumns,\n pendingDataMap,\n canCopy,\n frozenColumns,\n columnHeaderGroups\n } = props;\n var {\n dh: _dh\n } = _model;\n var _keyHandlers = [new CopyCellKeyHandler(this), new ReverseKeyHandler(this), new ClearFilterKeyHandler(this)];\n var _mouseHandlers = [new IrisGridCellOverflowMouseHandler(this), new IrisGridRowTreeMouseHandler(this), new IrisGridTokenMouseHandler(this), new IrisGridColumnSelectMouseHandler(this), new IrisGridColumnTooltipMouseHandler(this), new IrisGridSortMouseHandler(this), new IrisGridFilterMouseHandler(this), new IrisGridContextMenuHandler(this, _dh), new IrisGridDataSelectMouseHandler(this), new PendingMouseHandler(this)];\n if (canCopy) {\n _keyHandlers.push(new CopyKeyHandler(this));\n _mouseHandlers.push(new IrisGridCopyCellMouseHandler(this));\n }\n var _movedColumns = movedColumnsProp.length > 0 ? movedColumnsProp : _model.initialMovedColumns;\n var movedRows = movedRowsProp.length > 0 ? movedRowsProp : _model.initialMovedRows;\n var _metricCalculator = new IrisGridMetricCalculator({\n userColumnWidths: new Map(_userColumnWidths),\n userRowHeights: new Map(userRowHeights),\n movedColumns: _movedColumns,\n initialColumnWidths: new Map(_model === null || _model === void 0 ? void 0 : (_model$layoutHints = _model.layoutHints) === null || _model$layoutHints === void 0 ? void 0 : (_model$layoutHints$hi = _model$layoutHints.hiddenColumns) === null || _model$layoutHints$hi === void 0 ? void 0 : _model$layoutHints$hi.map(name => [_model.getColumnIndexByName(name), 0]))\n });\n var searchColumns = _selectedSearchColumns !== null && _selectedSearchColumns !== void 0 ? _selectedSearchColumns : [];\n var _searchFilter = CrossColumnSearch.createSearchFilter(_dh, _searchValue, searchColumns, _model.columns, _invertSearchColumns);\n this.tableUtils = new TableUtils(_dh);\n this.mouseHandlers = _mouseHandlers;\n this.keyHandlers = _keyHandlers;\n this.state = {\n isFilterBarShown: _isFilterBarShown,\n isSelectingPartition,\n focusedFilterBarColumn: null,\n metricCalculator: _metricCalculator,\n metrics: undefined,\n partitionConfig: partitionConfig !== null && partitionConfig !== void 0 ? partitionConfig : partitions && partitions.length ? {\n partitions,\n mode: 'partition'\n } : undefined,\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: _quickFilters ? new Map(_quickFilters) : new Map(),\n advancedFilters: new Map(_advancedFilters),\n shownAdvancedFilter: null,\n hoverAdvancedFilter: null,\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: [],\n selectDistinctColumns,\n // selected range in table\n selectedRanges: [],\n // Current ongoing copy operation\n copyOperation: null,\n // The filter that is currently being applied. Reset after update is received\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n loadingCancelShown: false,\n loadingBlocksGrid: false,\n movedColumns: _movedColumns,\n movedRows,\n shownColumnTooltip: null,\n formatter: new Formatter(_dh),\n isMenuShown: false,\n customColumnFormatMap: new Map(customColumnFormatMap),\n conditionalFormats,\n conditionalFormatEditIndex: null,\n conditionalFormatPreview: undefined,\n // Column user is hovering over for selection\n hoverSelectColumn: null,\n isTableDownloading: false,\n isReady: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: 0,\n showSearchBar: _showSearchBar,\n searchFilter: _searchFilter,\n searchValue: _searchValue,\n selectedSearchColumns: searchColumns,\n invertSearchColumns: _invertSearchColumns,\n rollupConfig: _rollupConfig,\n rollupSelectedColumns: [],\n aggregationSettings: _aggregationSettings,\n selectedAggregation: null,\n openOptions: [],\n pendingRowCount: 0,\n pendingDataMap: pendingDataMap !== null && pendingDataMap !== void 0 ? pendingDataMap : new Map(),\n pendingDataErrors: new Map(),\n pendingSavePromise: null,\n pendingSaveError: null,\n toastMessage: null,\n frozenColumns,\n showOverflowModal: false,\n overflowText: '',\n overflowButtonTooltipProps: null,\n expandCellTooltipProps: null,\n expandTooltipDisplayValue: 'expand',\n linkHoverTooltipProps: null,\n linkHoverDisplayValue: '',\n isGotoShown: false,\n gotoRow: '',\n gotoRowError: '',\n gotoValueError: '',\n gotoValueSelectedColumnName: (_model$columns$0$name = (_model$columns$ = _model.columns[0]) === null || _model$columns$ === void 0 ? void 0 : _model$columns$.name) !== null && _model$columns$0$name !== void 0 ? _model$columns$0$name : '',\n gotoValueSelectedFilter: FilterType.eqIgnoreCase,\n gotoValue: '',\n gotoValueManuallyChanged: false,\n columnHeaderGroups: columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : _model.initialColumnHeaderGroups\n };\n }\n componentDidMount() {\n var {\n model\n } = this.props;\n this.initState();\n this.startListening(model);\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n inputFilters,\n isSelectingColumn,\n settings,\n model,\n customFilters,\n sorts\n } = this.props;\n if (model !== prevProps.model) {\n this.stopListening(prevProps.model);\n this.startListening(model);\n }\n var changedInputFilters = inputFilters !== prevProps.inputFilters ? inputFilters.filter(inputFilter => !prevProps.inputFilters.includes(inputFilter)) : [];\n if (changedInputFilters.length > 0) {\n var _advancedSettings$get;\n var {\n advancedSettings\n } = this.props;\n var replaceExistingFilters = (_advancedSettings$get = advancedSettings.get(AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get !== void 0 ? _advancedSettings$get : false;\n if (replaceExistingFilters) {\n this.clearGridInputField();\n this.clearCrossColumSearch();\n }\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.applyInputFilters(changedInputFilters, replaceExistingFilters);\n }\n if (isSelectingColumn !== prevProps.isSelectingColumn) {\n this.resetColumnSelection();\n }\n if (settings !== prevProps.settings) {\n this.updateFormatterSettings(settings);\n }\n if (customFilters !== prevProps.customFilters) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n }\n if (sorts !== prevProps.sorts) {\n this.updateSorts(sorts);\n }\n var {\n loadingScrimStartTime,\n loadingScrimFinishTime\n } = this;\n if (loadingScrimStartTime != null && loadingScrimFinishTime != null) {\n window.requestAnimationFrame(() => {\n var now = Date.now();\n var currentTime = now - loadingScrimStartTime;\n var totalTime = loadingScrimFinishTime - loadingScrimStartTime;\n var loadingScrimProgress = Math.min(currentTime / totalTime, 1);\n if (loadingScrimFinishTime < now) {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n }\n this.setState(state => {\n if (state.loadingScrimProgress == null) {\n log.debug2('Ignoring scrim update because loading cancelled.');\n return null;\n }\n return {\n loadingScrimProgress\n };\n });\n });\n }\n var {\n openOptions\n } = this.state;\n if (openOptions !== prevState.openOptions) {\n var isAggEditType = option => option.type === OptionType.AGGREGATION_EDIT;\n if (!openOptions.some(isAggEditType) && prevState.openOptions.some(isAggEditType)) {\n this.removeEmptyAggregations();\n }\n }\n this.sendStateChange();\n }\n componentWillUnmount() {\n var {\n model\n } = this.props;\n this.stopListening(model);\n this.pending.cancel();\n this.updateSearchFilter.cancel();\n if (this.loadingTimer) {\n clearTimeout(this.loadingTimer);\n }\n this.handleDownloadProgressUpdate.cancel();\n if (this.animationFrame !== undefined) {\n cancelAnimationFrame(this.animationFrame);\n }\n this.showViewportLoading.cancel();\n }\n\n // When the loading scrim started/when it should extend to the end of the screen.\n\n get gridWrapper() {\n var _this$grid$canvasWrap, _this$grid;\n return (_this$grid$canvasWrap = (_this$grid = this.grid) === null || _this$grid === void 0 ? void 0 : _this$grid.canvasWrapper.current) !== null && _this$grid$canvasWrap !== void 0 ? _this$grid$canvasWrap : null;\n }\n\n /**\n * Builds formatColumns array based on the provided formatting rules with optional preview\n * @param columns Array of columns\n * @param rulesParam Array of formatting rules\n * @param preview Optional temporary formatting rule for previewing live changes\n * @param editIndex Index in the rulesParam array to replace with the preview, null if preview not applicable\n * @returns Format columns array\n */\n\n getKeyHandlers() {\n var {\n keyHandlers\n } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n get renderer() {\n var {\n renderer\n } = this.props;\n return this.getCachedRenderer(renderer);\n }\n getMouseHandlers() {\n var {\n mouseHandlers\n } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n getValueForCell(columnIndex, rowIndex) {\n var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n model\n } = this.props;\n var {\n dh\n } = model;\n var modelColumn = this.getModelColumn(columnIndex);\n var modelRow = this.getModelRow(rowIndex);\n if (rawValue && modelColumn != null && modelRow != null) {\n var _value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isDateType(model.columns[modelColumn].type)) {\n // The returned value is just a long value, we should return the value formatted as a full date string\n var {\n formatter\n } = model;\n return dh.i18n.DateTimeFormat.format(UNFORMATTED_DATE_PATTERN, _value, dh.i18n.TimeZone.getTimeZone(formatter.timeZone));\n }\n return _value;\n }\n if (rawValue) {\n return null;\n }\n if (modelColumn != null && modelRow != null) {\n return model.textForCell(modelColumn, modelRow);\n }\n return '';\n }\n getModelColumn(columnIndex) {\n var {\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n modelColumns\n } = metrics;\n if (modelColumns == null) {\n return null;\n }\n return columnIndex != null ? modelColumns.get(columnIndex) : null;\n }\n getModelRow(rowIndex) {\n var {\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n modelRows\n } = metrics;\n if (modelRows == null) {\n return null;\n }\n return rowIndex != null ? modelRows.get(rowIndex) : null;\n }\n getTheme() {\n var _ref4;\n var {\n model,\n theme\n } = this.props;\n return this.getCachedTheme(this.context, theme, (_ref4 = isEditableGridModel(model) && model.isEditable) !== null && _ref4 !== void 0 ? _ref4 : false, model.floatingTopRowCount + model.floatingBottomRowCount);\n }\n getVisibleColumn(modelIndex) {\n var {\n movedColumns\n } = this.state;\n return GridUtils.getVisibleIndex(modelIndex, movedColumns);\n }\n makeQuickFilter(column, text, timeZone) {\n try {\n return this.tableUtils.makeQuickFilter(column, text, timeZone);\n } catch (err) {\n log.error('Error creating quick filter', err);\n }\n return null;\n }\n\n /**\n * Applies the provided input filters as quick filters,\n * and clears any existing quickFilters or advancedFilters on that column\n * @param inputFilters Array of input filters to apply\n * @param replaceExisting If true, new filters will replace the existing ones, instead of merging\n */\n applyInputFilters(inputFilters) {\n var replaceExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n model\n } = this.props;\n var {\n advancedFilters,\n quickFilters\n } = this.state;\n var newAdvancedFilters = replaceExisting ? new Map() : new Map(advancedFilters);\n var newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);\n var isChanged = replaceExisting && advancedFilters.size > 0;\n inputFilters.forEach(_ref5 => {\n var {\n name,\n type,\n value\n } = _ref5;\n var modelIndex = model.columns.findIndex(_ref6 => {\n var {\n name: columnName,\n type: columnType\n } = _ref6;\n return columnName === name && columnType === type;\n });\n if (modelIndex >= 0) {\n isChanged = newAdvancedFilters.delete(modelIndex) || isChanged;\n isChanged = this.applyQuickFilter(modelIndex, value, newQuickFilters) || isChanged;\n } else {\n log.error('Unable to find column for inputFilter', name, type, value);\n }\n });\n if (isChanged) {\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n }\n\n /**\n * Applies a quick filter\n * @param modelIndex The index in the model of the column to set\n * @param value The string value to set to the quick filter\n * @param quickFilters The quick filters map\n * @returns True if the filters have changed because this quick filter was applied\n */\n applyQuickFilter(modelIndex, value, quickFilters) {\n var {\n model\n } = this.props;\n var {\n formatter\n } = model;\n var column = model.columns[modelIndex];\n if (value != null && \"\".concat(value).trim().length > 0) {\n var quickFilter = quickFilters.get(modelIndex);\n if (quickFilter != null) {\n var {\n text\n } = quickFilter;\n if (text === value) {\n log.debug2('Ignoring change to existing filter');\n return false;\n }\n }\n quickFilters.set(modelIndex, {\n text: value,\n filter: this.makeQuickFilter(column, value, formatter.timeZone)\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n setAdvancedFilterMap(advancedFilters) {\n this.setState({\n advancedFilters\n });\n }\n setAdvancedFilter(modelIndex, filter, options) {\n log.debug('Setting advanced filter', modelIndex, filter);\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref7 => {\n var {\n advancedFilters\n } = _ref7;\n var newAdvancedFilters = new Map(advancedFilters);\n if (filter == null) {\n newAdvancedFilters.delete(modelIndex);\n } else {\n newAdvancedFilters.set(modelIndex, {\n filter,\n options\n });\n }\n return {\n advancedFilters: newAdvancedFilters\n };\n });\n }\n\n /**\n * Sets a quick filter against the provided column\n * @param modelIndex The index in the model for the column this filter is applied to\n * @param filter A filter to apply to the column, or null if there was an error\n * @param text The original text the filter was created with\n */\n setQuickFilter(modelIndex, filter, text) {\n log.debug('Setting quick filter', modelIndex, filter, text);\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref8 => {\n var {\n quickFilters\n } = _ref8;\n var newQuickFilters = new Map(quickFilters);\n newQuickFilters.set(modelIndex, {\n filter,\n text\n });\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n\n /**\n * Set grid filters based on the filter map\n * @param filterMap Filter map\n */\n setFilterMap(filterMap) {\n var _advancedSettings$get2;\n log.debug('setFilterMap', filterMap);\n var {\n advancedSettings\n } = this.props;\n var clearFiltersOnLinkerFilterUpdate = (_advancedSettings$get2 = advancedSettings.get(AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get2 !== void 0 ? _advancedSettings$get2 : false;\n if (clearFiltersOnLinkerFilterUpdate) {\n this.clearAllFilters();\n }\n var {\n model\n } = this.props;\n filterMap.forEach((_ref9, columnName) => {\n var {\n columnType,\n filterList\n } = _ref9;\n var column = model.columns.find(c => c.name === columnName && c.type === columnType);\n if (column == null) {\n return;\n }\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var combinedText = IrisGridUtils.combineFiltersFromList(columnType, filterList);\n if (combinedText.length === 0) {\n this.removeQuickFilter(columnIndex);\n } else {\n var {\n formatter\n } = model;\n this.setQuickFilter(columnIndex, this.makeQuickFilter(column, combinedText, formatter.timeZone), \"\".concat(combinedText));\n }\n });\n }\n removeColumnFilter(modelRange) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n var clearRange = Array.isArray(modelRange) ? modelRange : [modelRange, modelRange];\n this.setState(_ref10 => {\n var {\n advancedFilters,\n quickFilters\n } = _ref10;\n var newAdvancedFilters = advancedFilters ? new Map(advancedFilters) : new Map();\n var newQuickFilters = quickFilters ? new Map(quickFilters) : new Map();\n newAdvancedFilters.forEach((_, column) => {\n if (column >= clearRange[0] && column <= clearRange[1]) {\n newAdvancedFilters.delete(column);\n }\n });\n newQuickFilters.forEach((_, column) => {\n if (column >= clearRange[0] && column <= clearRange[1]) {\n newQuickFilters.delete(column);\n }\n });\n return {\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n };\n });\n }\n removeQuickFilter(modelColumn) {\n this.startLoading('Clearing Filter...', {\n resetRanges: true\n });\n this.setState(_ref11 => {\n var {\n quickFilters\n } = _ref11;\n var newQuickFilters = new Map(quickFilters);\n newQuickFilters.delete(modelColumn);\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n clearAllFilters() {\n log.debug('Clearing all filters');\n var {\n advancedFilters,\n quickFilters,\n searchFilter\n } = this.state;\n if (quickFilters.size === 0 && advancedFilters.size === 0 && searchFilter === null) {\n return;\n }\n\n // if there is an active quick filter input field, reset it as well\n this.clearGridInputField();\n this.startLoading('Clearing Filters...', {\n resetRanges: true\n });\n this.setState({\n quickFilters: new Map(),\n advancedFilters: new Map(),\n searchValue: '',\n searchFilter: undefined\n });\n }\n clearCrossColumSearch() {\n log.debug('Clearing cross-column search');\n this.setState({\n searchValue: '',\n searchFilter: undefined\n });\n }\n clearGridInputField() {\n if (this.filterInputRef.current != null) {\n this.filterInputRef.current.setValue('');\n }\n }\n\n /**\n * Rebuilds all the current filters. Necessary if something like the time zone has changed.\n */\n rebuildFilters() {\n log.debug('Rebuilding filters');\n var {\n model\n } = this.props;\n var {\n advancedFilters,\n quickFilters\n } = this.state;\n var {\n columns,\n formatter\n } = model;\n var newAdvancedFilters = new Map();\n var newQuickFilters = new Map();\n advancedFilters.forEach((value, key) => {\n var {\n options\n } = value;\n var column = columns[key];\n var filter = this.tableUtils.makeAdvancedFilter(column, options, formatter.timeZone);\n newAdvancedFilters.set(key, {\n options,\n filter\n });\n });\n quickFilters.forEach((value, key) => {\n var {\n text\n } = value;\n var column = columns[key];\n newQuickFilters.set(key, {\n text,\n filter: this.makeQuickFilter(column, text, formatter.timeZone)\n });\n });\n this.startLoading('Rebuilding filters...', {\n resetRanges: true\n });\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n setFilters(_ref12) {\n var {\n quickFilters,\n advancedFilters\n } = _ref12;\n this.setState({\n quickFilters,\n advancedFilters\n });\n }\n updateFormatterSettings(settings) {\n var _settings$defaultDeci, _settings$defaultInte, _settings$truncateNum, _settings$showEmptySt, _settings$showNullStr;\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var globalColumnFormats = FormatterUtils.getColumnFormats(settings);\n var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);\n var defaultDecimalFormatOptions = (_settings$defaultDeci = settings === null || settings === void 0 ? void 0 : settings.defaultDecimalFormatOptions) !== null && _settings$defaultDeci !== void 0 ? _settings$defaultDeci : {};\n var defaultIntegerFormatOptions = (_settings$defaultInte = settings === null || settings === void 0 ? void 0 : settings.defaultIntegerFormatOptions) !== null && _settings$defaultInte !== void 0 ? _settings$defaultInte : {};\n var truncateNumbersWithPound = (_settings$truncateNum = settings === null || settings === void 0 ? void 0 : settings.truncateNumbersWithPound) !== null && _settings$truncateNum !== void 0 ? _settings$truncateNum : false;\n var showEmptyStrings = (_settings$showEmptySt = settings === null || settings === void 0 ? void 0 : settings.showEmptyStrings) !== null && _settings$showEmptySt !== void 0 ? _settings$showEmptySt : true;\n var showNullStrings = (_settings$showNullStr = settings === null || settings === void 0 ? void 0 : settings.showNullStrings) !== null && _settings$showNullStr !== void 0 ? _settings$showNullStr : true;\n var isColumnFormatChanged = !deepEqual(this.globalColumnFormats, globalColumnFormats);\n var isDateFormattingChanged = !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions);\n var isDecimalFormattingChanged = !deepEqual(this.decimalFormatOptions, settings === null || settings === void 0 ? void 0 : settings.defaultDecimalFormatOptions);\n var isIntegerFormattingChanged = !deepEqual(this.integerFormatOptions, defaultIntegerFormatOptions);\n var isTruncateNumbersChanged = this.truncateNumbersWithPound !== truncateNumbersWithPound;\n var isShowEmptyStringsChanged = this.showEmptyStrings !== showEmptyStrings;\n var isShowNullStringsChanged = this.showNullStrings !== showNullStrings;\n if (isColumnFormatChanged || isDateFormattingChanged || isDecimalFormattingChanged || isIntegerFormattingChanged || isTruncateNumbersChanged || isShowEmptyStringsChanged || isShowNullStringsChanged) {\n this.globalColumnFormats = globalColumnFormats;\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.showEmptyStrings = showEmptyStrings;\n this.showNullStrings = showNullStrings;\n this.updateFormatter({}, forceUpdate);\n if (isDateFormattingChanged && forceUpdate) {\n this.rebuildFilters();\n }\n }\n }\n updateFormatter(updatedFormats) {\n var _this$globalColumnFor;\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var {\n customColumnFormatMap\n } = this.state;\n var {\n model\n } = this.props;\n var update = _objectSpread({\n customColumnFormatMap\n }, updatedFormats);\n var mergedColumnFormats = [...((_this$globalColumnFor = this.globalColumnFormats) !== null && _this$globalColumnFor !== void 0 ? _this$globalColumnFor : []), ...update.customColumnFormatMap.values()];\n var formatter = new Formatter(model.dh, mergedColumnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions, this.truncateNumbersWithPound, this.showEmptyStrings, this.showNullStrings);\n log.debug('updateFormatter', this.globalColumnFormats, mergedColumnFormats);\n this.setState(_objectSpread(_objectSpread({}, update), {}, {\n formatter\n }), () => {\n if (forceUpdate && this.grid) {\n this.grid.forceUpdate();\n }\n });\n }\n initFormatter() {\n var {\n settings\n } = this.props;\n this.updateFormatterSettings(settings);\n }\n initState() {\n var {\n model\n } = this.props;\n try {\n if (isPartitionedGridModel(model) && model.isPartitionRequired) {\n this.loadPartitionsTable(model);\n } else {\n this.loadTableState();\n }\n } catch (error) {\n this.handleTableLoadError(error);\n }\n }\n loadTableState() {\n var {\n applyInputFiltersOnInit,\n inputFilters,\n sorts,\n model,\n reverseType,\n customColumns,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns\n } = this.props;\n var searchColumns = selectedSearchColumns !== null && selectedSearchColumns !== void 0 ? selectedSearchColumns : [];\n var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, searchColumns, model.columns, invertSearchColumns);\n if (applyInputFiltersOnInit) {\n // There may be more than one input filter on the same column with value === '' applied last\n // We don't want to skip it here, so only excluding the ones that were never applied (null)\n var inputFiltersWithValues = inputFilters.filter(inputFilter => inputFilter.value != null);\n this.applyInputFilters(inputFiltersWithValues);\n }\n this.setState({\n sorts,\n reverseType,\n customColumns,\n isReady: true,\n searchFilter\n });\n this.initFormatter();\n }\n loadPartitionsTable(model) {\n var _this = this;\n return _asyncToGenerator(function* () {\n try {\n var partitionConfig = yield _this.getInitialPartitionConfig(model);\n _this.setState({\n isSelectingPartition: true,\n partitionConfig\n }, _this.loadTableState);\n } catch (error) {\n if (!PromiseUtils.isCanceled(error)) {\n _this.handleTableLoadError(error);\n }\n }\n })();\n }\n\n /**\n * Gets the initial partition config for the currently set model.\n * Sorts the key table and gets the first key.\n * If the table is ticking, it will wait for the first tick.\n */\n getInitialPartitionConfig(model) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var {\n partitionConfig\n } = _this2.state;\n if (partitionConfig !== undefined) {\n // User already has a partition selected, just use that\n return partitionConfig;\n }\n var keyTable = yield _this2.pending.add(model.partitionKeysTable(), resolved => resolved.close());\n var {\n dh\n } = model;\n var sorts = keyTable.columns.map(column => column.sort().desc());\n keyTable.applySort(sorts);\n keyTable.setViewport(0, 0);\n return new Promise((resolve, reject) => {\n // We want to wait for the first UPDATED event instead of just getting viewport data here\n // It's possible that the key table does not have any rows of data yet, so just wait until it does have one\n keyTable.addEventListener(dh.Table.EVENT_UPDATED, event => {\n try {\n var {\n detail: _data\n } = event;\n if (_data.rows.length === 0) {\n // Table is empty, wait for the next updated event\n return;\n }\n var row = _data.rows[0];\n // Core JSAPI returns undefined for null table values, IrisGridPartitionSelector expects null\n // https://github.com/deephaven/deephaven-core/issues/5400\n var values = keyTable.columns.map(column => {\n var _row$get;\n return (_row$get = row.get(column)) !== null && _row$get !== void 0 ? _row$get : null;\n });\n var newPartition = {\n partitions: values,\n mode: 'partition'\n };\n keyTable.close();\n resolve(newPartition);\n } catch (e) {\n keyTable.close();\n reject(e);\n }\n });\n });\n })();\n }\n copyCell(columnIndex, rowIndex) {\n var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n canCopy\n } = this.props;\n if (canCopy) {\n var _value2 = String(this.getValueForCell(columnIndex, rowIndex, rawValue));\n copyToClipboard(_value2).catch(e => log.error('Unable to copy cell', e));\n } else {\n log.error('Attempted to copyCell for user without copy permission.');\n }\n }\n copyColumnHeader(columnIndex) {\n var columnDepth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (columnIndex === null) {\n return;\n }\n var {\n canCopy\n } = this.props;\n var {\n movedColumns\n } = this.state;\n if (canCopy) {\n var copyOperation = {\n columnIndex,\n columnDepth,\n movedColumns\n };\n this.setState({\n copyOperation\n });\n } else {\n log.error('Attempted copyColumnHeader for user without copy permission.');\n }\n }\n\n /**\n * Copy the provided ranges to the clipboard\n * @paramranges The ranges to copy\n * @param includeHeaders Include the headers or not\n * @param formatValues Whether to format values or not\n * @param error Error message if one occurred\n */\n copyRanges(ranges) {\n var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var formatValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var error = arguments.length > 3 ? arguments[3] : undefined;\n var {\n model,\n canCopy\n } = this.props;\n var {\n metricCalculator,\n movedColumns\n } = this.state;\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n if (canCopy) {\n var copyOperation = {\n ranges: GridRange.boundedRanges(ranges, model.columnCount, model.rowCount),\n includeHeaders,\n formatValues,\n movedColumns,\n userColumnWidths,\n error\n };\n this.setState({\n copyOperation\n });\n } else {\n log.error('Attempted copyRanges for user without copy permission.');\n }\n }\n startLoading(loadingText) {\n var {\n resetRanges = false,\n loadingCancelShown = true,\n loadingBlocksGrid = true\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.setState({\n loadingText,\n loadingCancelShown,\n loadingBlocksGrid\n });\n var theme = this.getTheme();\n if (resetRanges && this.grid) {\n this.grid.clearSelectedRanges();\n this.grid.setViewState({\n top: 0\n }, true);\n }\n if (this.loadingScrimStartTime == null) {\n var _this$gridWrapper$get, _this$gridWrapper;\n var {\n minScrimTransitionTime,\n maxScrimTransitionTime\n } = theme;\n assertNotNull(minScrimTransitionTime);\n assertNotNull(maxScrimTransitionTime);\n var height = (_this$gridWrapper$get = (_this$gridWrapper = this.gridWrapper) === null || _this$gridWrapper === void 0 ? void 0 : _this$gridWrapper.getBoundingClientRect().height) !== null && _this$gridWrapper$get !== void 0 ? _this$gridWrapper$get : 0;\n var scrimTransitionTime = Math.max(minScrimTransitionTime, Math.min(height / 2, maxScrimTransitionTime));\n this.loadingScrimStartTime = Date.now();\n this.loadingScrimFinishTime = this.loadingScrimStartTime + scrimTransitionTime;\n this.setState({\n loadingScrimProgress: 0\n });\n this.loadingTimer = setTimeout(() => {\n this.setState({\n loadingSpinnerShown: true\n });\n }, IrisGrid.loadingSpinnerDelay);\n }\n }\n stopLoading() {\n this.showViewportLoading.cancel();\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n this.setState({\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n loadingCancelShown: false\n });\n if (this.loadingTimer != null) {\n clearTimeout(this.loadingTimer);\n this.loadingTimer = undefined;\n }\n }\n\n /**\n * Rolls back the table state to the last known safe state, or if that's not available then clears all sorts/filters/custom columns.\n */\n rollback() {\n if (this.lastLoadedConfig) {\n log.debug('loading last loading config', this.lastLoadedConfig);\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = this.lastLoadedConfig;\n this.lastLoadedConfig = null;\n this.setState({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n });\n } else {\n log.debug('remove all sorts, filters, and custom columns');\n this.setState({\n advancedFilters: new Map(),\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n customColumns: [],\n quickFilters: new Map(),\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n rollupConfig: undefined,\n selectDistinctColumns: [],\n sorts: []\n });\n }\n }\n\n /**\n * Check if we can rollback the current state to a safe state.\n * @returns true if there's a previously known safe state or if some of the current state isn't empty.\n */\n canRollback() {\n return this.lastLoadedConfig != null || !isEmptyConfig(this.state);\n }\n startListening(model) {\n model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.addEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);\n model.addEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);\n model.addEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);\n model.addEventListener(IrisGridModel.EVENT.VIEWPORT_UPDATED, this.handleViewportUpdated);\n }\n stopListening(model) {\n model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.removeEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);\n model.removeEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);\n model.removeEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);\n model.removeEventListener(IrisGridModel.EVENT.VIEWPORT_UPDATED, this.handleViewportUpdated);\n }\n focus() {\n var _this$grid2;\n (_this$grid2 = this.grid) === null || _this$grid2 === void 0 ? void 0 : _this$grid2.focus();\n }\n focusFilterBar(column) {\n var {\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n var {\n columnCount\n } = model;\n var modelColumn = GridUtils.getModelIndex(column, movedColumns);\n if (column == null || column < 0 || columnCount <= column || !model.isFilterable(modelColumn)) {\n this.setState({\n focusedFilterBarColumn: null\n });\n return;\n }\n var {\n metricCalculator,\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n left,\n rightVisible,\n lastLeft\n } = metrics;\n if (column < left) {\n var _this$grid3;\n (_this$grid3 = this.grid) === null || _this$grid3 === void 0 ? void 0 : _this$grid3.setViewState({\n left: column\n }, true);\n } else if (rightVisible < column) {\n var _this$grid4, _this$grid5;\n var metricState = (_this$grid4 = this.grid) === null || _this$grid4 === void 0 ? void 0 : _this$grid4.getMetricState();\n assertNotNull(metricState);\n var newLeft = metricCalculator.getLastLeft(metricState, column, metricCalculator.getVisibleWidth(metricState));\n (_this$grid5 = this.grid) === null || _this$grid5 === void 0 ? void 0 : _this$grid5.setViewState({\n left: Math.min(newLeft, lastLeft),\n leftOffset: 0\n }, true);\n }\n this.lastFocusedFilterBarColumn = column;\n this.setState({\n focusedFilterBarColumn: column,\n isFilterBarShown: true\n });\n }\n hideColumnByVisibleIndex(columnVisibleIndex) {\n var _this$grid6;\n var {\n metricCalculator,\n movedColumns\n } = this.state;\n metricCalculator.setColumnWidth(GridUtils.getModelIndex(columnVisibleIndex, movedColumns), 0);\n (_this$grid6 = this.grid) === null || _this$grid6 === void 0 ? void 0 : _this$grid6.forceUpdate();\n }\n freezeColumnByColumnName(columnName) {\n var {\n frozenColumns,\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n log.debug2('freezing column', columnName);\n var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);\n allFrozenColumns.add(columnName);\n var modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n var newMovedColumns = GridUtils.moveItem(visibleIndex, allFrozenColumns.size - 1, movedColumns);\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns\n });\n }\n unFreezeColumnByColumnName(columnName) {\n var {\n frozenColumns,\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n log.debug2('unfreezing column', columnName);\n var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);\n allFrozenColumns.delete(columnName);\n var modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n // Move to after remaining frozen columns and front columns\n var newMovedColumns = GridUtils.moveItem(visibleIndex, allFrozenColumns.size + model.frontColumns.length, movedColumns);\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns\n });\n }\n handleColumnVisibilityChanged(modelIndexes, isVisible) {\n var _this$grid7;\n var {\n metricCalculator,\n metrics\n } = this.state;\n assertNotNull(metrics);\n if (isVisible) {\n modelIndexes.forEach(modelIndex => {\n var defaultWidth = metricCalculator.initialColumnWidths.get(modelIndex);\n var calculatedWidth = getOrThrow(metrics.calculatedColumnWidths, modelIndex);\n if (defaultWidth !== calculatedWidth) {\n metricCalculator.setColumnWidth(modelIndex, calculatedWidth);\n } else {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n (_this$grid7 = this.grid) === null || _this$grid7 === void 0 ? void 0 : _this$grid7.forceUpdate();\n }\n handleColumnVisibilityReset() {\n var _model$layoutHints$fr, _model$layoutHints2;\n var {\n metricCalculator,\n metrics\n } = this.state;\n var {\n model\n } = this.props;\n assertNotNull(metrics);\n for (var i = 0; i < metrics.columnCount; i += 1) {\n metricCalculator.resetColumnWidth(i);\n }\n this.handleMovedColumnsChanged(model.initialMovedColumns);\n this.handleHeaderGroupsChanged(model.initialColumnHeaderGroups);\n this.setState({\n frozenColumns: (_model$layoutHints$fr = (_model$layoutHints2 = model.layoutHints) === null || _model$layoutHints2 === void 0 ? void 0 : _model$layoutHints2.frozenColumns) !== null && _model$layoutHints$fr !== void 0 ? _model$layoutHints$fr : []\n });\n }\n handleCrossColumnSearch(searchValue, selectedSearchColumns, invertSearchColumns) {\n var {\n model\n } = this.props;\n this.startLoading('Searching...');\n this.updateSearchFilter(searchValue, selectedSearchColumns, model.columns, invertSearchColumns);\n this.setState({\n searchValue,\n selectedSearchColumns,\n invertSearchColumns\n });\n }\n handleAnimationLoop() {\n var _this$grid8;\n (_this$grid8 = this.grid) === null || _this$grid8 === void 0 ? void 0 : _this$grid8.updateCanvas();\n if (this.isAnimating) {\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n }\n handleAnimationStart() {\n log.debug2('handleAnimationStart');\n this.isAnimating = true;\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n handleAnimationEnd() {\n log.debug2('handleAnimationEnd');\n this.isAnimating = false;\n }\n handlePartitionChange(partitionConfig) {\n this.startLoading('Partitioning...');\n this.setState({\n partitionConfig\n });\n }\n handleTableLoadError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n var {\n onError\n } = this.props;\n onError(error);\n }\n handleViewportUpdated() {\n var {\n model\n } = this.props;\n var {\n loadingText,\n loadingSpinnerShown\n } = this.state;\n var loadingMessage = 'Waiting for viewport...';\n\n // pending and no timer already exists\n if (model.isViewportPending && !loadingSpinnerShown) {\n this.showViewportLoading();\n } else if (loadingText === loadingMessage && !model.isViewportPending) {\n // extra conditions because timeout might get cleared by update\n this.stopLoading();\n }\n }\n showAllColumns() {\n var _this$grid9;\n var {\n metricCalculator\n } = this.state;\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n var entries = [...userColumnWidths.entries()];\n for (var i = 0; i < entries.length; i += 1) {\n var [modelIndex, columnWidth] = entries[i];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n (_this$grid9 = this.grid) === null || _this$grid9 === void 0 ? void 0 : _this$grid9.forceUpdate();\n }\n toggleSort(columnIndex, addToExisting) {\n log.info('Toggling sort for column', columnIndex);\n var {\n model\n } = this.props;\n var modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n if (model.isColumnSortable(columnIndex)) {\n var {\n sorts: currentSorts\n } = this.state;\n var sorts = TableUtils.toggleSortForColumn(currentSorts, model.columns, modelColumn, addToExisting);\n this.updateSorts(sorts);\n } else {\n log.debug('Column type was not sortable', model.columns[columnIndex]);\n }\n }\n updateSorts(sorts) {\n var _this$grid10;\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid10 = this.grid) === null || _this$grid10 === void 0 ? void 0 : _this$grid10.forceUpdate();\n }\n sortColumn(modelColumn) {\n var _this$grid11;\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : TableUtils.sortDirection.none;\n var isAbs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n assertNotNull(modelColumn);\n var {\n model\n } = this.props;\n var sorts = TableUtils.sortColumn(model.sort, model.columns, modelColumn, direction, isAbs, addToExisting);\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid11 = this.grid) === null || _this$grid11 === void 0 ? void 0 : _this$grid11.forceUpdate();\n }\n reverse(reverseType) {\n var _this$grid12;\n this.startLoading('Reversing...');\n this.setState({\n reverseType\n });\n (_this$grid12 = this.grid) === null || _this$grid12 === void 0 ? void 0 : _this$grid12.forceUpdate();\n }\n isReversible() {\n var {\n model\n } = this.props;\n return model.isReversible;\n }\n toggleFilterBar() {\n var focusIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.lastFocusedFilterBarColumn;\n var {\n isFilterBarShown\n } = this.state;\n isFilterBarShown = !isFilterBarShown;\n this.setState({\n isFilterBarShown\n });\n if (isFilterBarShown) {\n if (focusIndex != null) {\n this.focusFilterBar(focusIndex);\n } else {\n var columnIndex = 0;\n var {\n model: _model2\n } = this.props;\n var {\n columnCount\n } = _model2;\n for (var i = 0; i < columnCount; i += 1) {\n var modelColumn = this.getModelColumn(i);\n if (modelColumn != null) {\n var _column = _model2.columns[modelColumn];\n if (_column != null && TableUtils.isTextType(_column.type)) {\n columnIndex = i;\n break;\n }\n }\n }\n this.focusFilterBar(columnIndex);\n }\n } else {\n var _this$grid13;\n (_this$grid13 = this.grid) === null || _this$grid13 === void 0 ? void 0 : _this$grid13.focus();\n }\n }\n isTableSearchAvailable() {\n var _model$layoutHints3, _dh$SearchDisplayMode, _dh$SearchDisplayMode2;\n var {\n model,\n canToggleSearch\n } = this.props;\n var {\n dh\n } = model;\n var searchDisplayMode = model === null || model === void 0 ? void 0 : (_model$layoutHints3 = model.layoutHints) === null || _model$layoutHints3 === void 0 ? void 0 : _model$layoutHints3.searchDisplayMode;\n if (searchDisplayMode === ((_dh$SearchDisplayMode = dh.SearchDisplayMode) === null || _dh$SearchDisplayMode === void 0 ? void 0 : _dh$SearchDisplayMode.SEARCH_DISPLAY_HIDE)) {\n return false;\n }\n if (searchDisplayMode === ((_dh$SearchDisplayMode2 = dh.SearchDisplayMode) === null || _dh$SearchDisplayMode2 === void 0 ? void 0 : _dh$SearchDisplayMode2.SEARCH_DISPLAY_SHOW)) {\n return true;\n }\n return canToggleSearch;\n }\n toggleSearchBar() {\n var {\n showSearchBar\n } = this.state;\n if (!this.isTableSearchAvailable()) {\n return;\n }\n var update = !showSearchBar;\n this.setState({\n showSearchBar: update\n }, () => {\n var _this$crossColumnRef;\n if (update && (_this$crossColumnRef = this.crossColumnRef) !== null && _this$crossColumnRef !== void 0 && _this$crossColumnRef.current) {\n var _this$crossColumnRef2;\n (_this$crossColumnRef2 = this.crossColumnRef) === null || _this$crossColumnRef2 === void 0 ? void 0 : _this$crossColumnRef2.current.focus();\n } else {\n var _this$grid14;\n (_this$grid14 = this.grid) === null || _this$grid14 === void 0 ? void 0 : _this$grid14.focus();\n }\n });\n }\n toggleGotoRow() {\n var _this$grid15, _this$grid16;\n var row = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var {\n isGotoShown\n } = this.state;\n if (row || value) {\n var _this$gotoRowRef$curr;\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoShown: true,\n gotoValue: value,\n gotoValueSelectedColumnName: columnName,\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n this.focusRowInGrid(row);\n (_this$gotoRowRef$curr = this.gotoRowRef.current) === null || _this$gotoRowRef$curr === void 0 ? void 0 : _this$gotoRowRef$curr.focus();\n return;\n }\n var cursorRow = (_this$grid15 = this.grid) === null || _this$grid15 === void 0 ? void 0 : _this$grid15.state.cursorRow;\n var cursorColumn = (_this$grid16 = this.grid) === null || _this$grid16 === void 0 ? void 0 : _this$grid16.state.cursorColumn;\n if (cursorRow == null || cursorColumn == null) {\n // if a cell is not selected / grid is not rendered\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: '',\n gotoValue: '',\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n return;\n }\n // if a row is selected\n var {\n model\n } = this.props;\n var {\n name,\n type\n } = model.columns[cursorColumn];\n var cellValue = model.valueForCell(cursorColumn, cursorRow);\n var text = IrisGridUtils.convertValueToText(cellValue, type);\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: \"\".concat(cursorRow + 1),\n gotoValue: text,\n gotoValueSelectedColumnName: name,\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n }\n commitPending() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n var _document, _document$activeEleme;\n var {\n model\n } = _this3.props;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n var {\n pendingSavePromise\n } = _this3.state;\n if (pendingSavePromise != null) {\n throw new Error('Save already in progress');\n }\n var containsGridCellInputField = (_document = document) === null || _document === void 0 ? void 0 : (_document$activeEleme = _document.activeElement) === null || _document$activeEleme === void 0 ? void 0 : _document$activeEleme.classList.contains('grid-cell-input-field');\n if (containsGridCellInputField != null && containsGridCellInputField) {\n var _this3$grid;\n if (document.activeElement != null && document.activeElement.classList.contains('error')) {\n throw new ValidationError('Current input is invalid');\n }\n\n // Focus the grid again to commit any pending input changes\n (_this3$grid = _this3.grid) === null || _this3$grid === void 0 ? void 0 : _this3$grid.focus();\n }\n var newPendingSavePromise = _this3.pending.add(model.commitPending()).then(() => {\n _this3.setState({\n pendingSaveError: null,\n pendingSavePromise: null\n });\n }).catch(err => {\n if (!PromiseUtils.isCanceled(err)) {\n _this3.setState({\n pendingSaveError: err,\n pendingSavePromise: null\n });\n }\n });\n _this3.setState({\n pendingSavePromise: newPendingSavePromise\n });\n return newPendingSavePromise;\n })();\n }\n discardPending() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var {\n pendingSavePromise\n } = _this4.state;\n if (pendingSavePromise != null) {\n throw new Error('Cannot cancel a save in progress');\n }\n _this4.setState({\n pendingSavePromise: null,\n pendingSaveError: null,\n pendingDataMap: new Map(),\n pendingDataErrors: new Map()\n });\n })();\n }\n\n /**\n * Select the passed in column and notify listener\n * @param column The column in this table to link\n */\n selectColumn(column) {\n var {\n onColumnSelected\n } = this.props;\n onColumnSelected(column);\n }\n\n /**\n * Get the row data map for a given row and notifies the listener\n */\n selectData(columnIndex, rowIndex) {\n var dataMap = this.getRowDataMap(rowIndex);\n var {\n onDataSelected\n } = this.props;\n onDataSelected(rowIndex, dataMap);\n }\n\n /**\n * Get the data map for the given row\n * @param rowIndex Row to get the data map for\n * @returns Data map for the row\n */\n getRowDataMap(rowIndex) {\n var _this5 = this;\n var {\n model\n } = this.props;\n var {\n columns,\n groupedColumns\n } = model;\n var dataMap = {};\n var _loop = function _loop() {\n var column = columns[i];\n var {\n name,\n type\n } = column;\n var value = model.valueForCell(i, rowIndex);\n var text = model.textForCell(i, rowIndex);\n var visibleIndex = _this5.getVisibleColumn(i);\n var isExpandable = isExpandableGridModel(model) && model.isRowExpandable(rowIndex);\n var isGrouped = groupedColumns.find(c => c.name === name) != null;\n dataMap[name] = {\n value,\n text,\n type,\n isGrouped,\n isExpandable,\n visibleIndex\n };\n };\n for (var i = 0; i < columns.length; i += 1) {\n _loop();\n }\n return dataMap;\n }\n handleAdvancedFilterChange(column, filter, options) {\n var {\n model\n } = this.props;\n var index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n this.setAdvancedFilter(index, filter, options);\n }\n handleAdvancedFilterSortChange(column, direction) {\n var _this$grid17;\n var addToExisting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n model\n } = this.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var columnName = model.columns[columnIndex].name;\n var oldSort = TableUtils.getSortForColumn(model.sort, columnName);\n var newSort = null;\n if (oldSort == null || oldSort.direction !== direction) {\n if (direction === TableUtils.sortDirection.descending) {\n newSort = column.sort().desc();\n } else {\n newSort = column.sort().asc();\n }\n }\n var sorts = TableUtils.setSortForColumn(model.sort, columnName, newSort, addToExisting);\n log.info('Setting table sorts', sorts);\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid17 = this.grid) === null || _this$grid17 === void 0 ? void 0 : _this$grid17.forceUpdate();\n }\n handleAdvancedFilterDone() {\n var _this$grid18;\n (_this$grid18 = this.grid) === null || _this$grid18 === void 0 ? void 0 : _this$grid18.focus();\n }\n handleAdvancedMenuOpened(column) {\n this.setState({\n shownAdvancedFilter: column\n });\n }\n handleGotoRowOpened() {\n this.setState({\n isGotoShown: true,\n gotoValueManuallyChanged: false\n });\n }\n handleGotoRowClosed() {\n this.setState({\n isGotoShown: false,\n gotoValueManuallyChanged: false\n });\n }\n handleAdvancedMenuClosed(columnIndex) {\n var _this$filterInputRef;\n var {\n focusedFilterBarColumn,\n isFilterBarShown\n } = this.state;\n if (isFilterBarShown && focusedFilterBarColumn === columnIndex && ((_this$filterInputRef = this.filterInputRef) === null || _this$filterInputRef === void 0 ? void 0 : _this$filterInputRef.current) !== null) {\n var _this$filterInputRef2;\n (_this$filterInputRef2 = this.filterInputRef) === null || _this$filterInputRef2 === void 0 ? void 0 : _this$filterInputRef2.current.focus();\n this.setState({\n shownAdvancedFilter: null\n });\n } else {\n this.setState({\n focusedFilterBarColumn: null,\n shownAdvancedFilter: null\n });\n }\n }\n handleCancel() {\n this.rollback();\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleChartChange() {\n // TODO: IDS-4242 Update Chart Preview\n }\n handleChartCreate(settings) {\n var {\n model,\n onCreateChart\n } = this.props;\n onCreateChart(settings, model);\n }\n handleGridError(error) {\n log.warn('Grid Error', error);\n this.setState({\n toastMessage: /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: \"\".concat(error)\n })\n });\n }\n handleFilterBarChange(value) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref13 => {\n var {\n focusedFilterBarColumn,\n quickFilters\n } = _ref13;\n var newQuickFilters = new Map(quickFilters);\n if (focusedFilterBarColumn != null) {\n var modelIndex = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelIndex);\n this.applyQuickFilter(modelIndex, value, newQuickFilters);\n }\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n handleFilterBarDone() {\n var setGridFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var defocusInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (setGridFocus) {\n var _this$grid19;\n (_this$grid19 = this.grid) === null || _this$grid19 === void 0 ? void 0 : _this$grid19.focus();\n }\n if (defocusInput) {\n this.setState({\n focusedFilterBarColumn: null\n });\n }\n }\n handleFilterBarTab(backward) {\n var {\n focusedFilterBarColumn\n } = this.state;\n assertNotNull(focusedFilterBarColumn);\n if (backward) {\n this.focusFilterBar(focusedFilterBarColumn - 1);\n } else {\n this.focusFilterBar(focusedFilterBarColumn + 1);\n }\n }\n handleFormatSelection(modelIndex, selectedFormat) {\n var {\n model\n } = this.props;\n var column = model.columns[modelIndex];\n var {\n customColumnFormatMap: prevCustomColumnFormatMap\n } = this.state;\n var customColumnFormatMap = new Map(prevCustomColumnFormatMap);\n if (selectedFormat != null) {\n var normalizedType = TableUtils.getNormalizedType(column.type);\n assertNotNull(normalizedType);\n var columnFormattingRule = Formatter.makeColumnFormattingRule(normalizedType, column.name, selectedFormat);\n customColumnFormatMap.set(column.name, columnFormattingRule);\n } else {\n customColumnFormatMap.delete(column.name);\n }\n this.updateFormatter({\n customColumnFormatMap\n });\n }\n handleMenu(e) {\n e.stopPropagation();\n this.setState({\n isMenuShown: true\n });\n }\n handleMenuClose() {\n this.setState({\n isMenuShown: false,\n openOptions: []\n });\n }\n handleMenuBack() {\n this.setState(_ref14 => {\n var {\n openOptions\n } = _ref14;\n var newOptions = [...openOptions];\n newOptions.pop();\n return {\n openOptions: newOptions\n };\n });\n }\n handleMenuSelect(option) {\n this.setState(_ref15 => {\n var {\n openOptions\n } = _ref15;\n return {\n openOptions: [...openOptions, option]\n };\n });\n }\n handleRequestFailed(event) {\n var {\n detail: error\n } = event;\n log.error('request failed:', error);\n this.stopLoading();\n var {\n partitionConfig\n } = this.state;\n if (isMissingPartitionError(error) && partitionConfig != null) {\n // We'll try loading the initial partition again\n this.startLoading('Reloading partition...', {\n resetRanges: true\n });\n this.setState({\n partitionConfig: undefined\n }, () => {\n this.initState();\n });\n } else if (this.canRollback()) {\n this.startLoading('Rolling back changes...', {\n resetRanges: true\n });\n this.rollback();\n } else {\n log.error('Table failed and unable to rollback');\n var {\n onError\n } = this.props;\n onError(new Error(\"Error displaying table: \".concat(error)));\n }\n }\n handleUpdate() {\n var _this$grid20;\n log.debug2('Received model update');\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = this.state;\n var config = {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverseType,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n };\n if (!isEmptyConfig(config)) {\n this.lastLoadedConfig = config;\n } else {\n this.lastLoadedConfig = null;\n }\n (_this$grid20 = this.grid) === null || _this$grid20 === void 0 ? void 0 : _this$grid20.forceUpdate();\n this.stopLoading();\n }\n handleViewChanged(metrics) {\n var _this$grid$state, _this$grid21;\n var {\n model\n } = this.props;\n var {\n selectionEndRow = 0\n } = (_this$grid$state = (_this$grid21 = this.grid) === null || _this$grid21 === void 0 ? void 0 : _this$grid21.state) !== null && _this$grid$state !== void 0 ? _this$grid$state : {};\n var pendingRowCount = 0;\n if (isEditableGridModel(model) && model.isEditable) {\n assertNotNull(metrics);\n var {\n bottomViewport\n } = metrics;\n\n // We have an editable table that we can add new rows to\n // Display empty rows beneath the table rows that user can fill in\n var bottomNonFloating = model.rowCount - model.floatingBottomRowCount;\n if (selectionEndRow === bottomNonFloating - 1) {\n // Selection is in the last row, add another blank row\n pendingRowCount = model.pendingRowCount + 1;\n } else if (selectionEndRow === bottomNonFloating - 2) {\n // We may have just added a row based on selection moving, so just leave it as is\n pendingRowCount = model.pendingRowCount;\n } else {\n // Otherwise fill up the viewport with empty cells\n pendingRowCount = Math.max(0, bottomViewport - (model.rowCount - model.pendingRowCount) - model.floatingTopRowCount - model.floatingBottomRowCount - 1);\n }\n }\n this.setState({\n metrics,\n pendingRowCount\n });\n }\n handleSelectionChanged(selectedRanges) {\n var _this$grid22;\n assertNotNull(selectedRanges);\n var {\n onSelectionChanged\n } = this.props;\n var {\n copyOperation\n } = this.state;\n this.setState({\n selectedRanges\n });\n if (copyOperation != null) {\n this.setState({\n copyOperation: null\n });\n }\n if (((_this$grid22 = this.grid) === null || _this$grid22 === void 0 ? void 0 : _this$grid22.state.cursorRow) != null) {\n this.setState({\n gotoRow: \"\".concat(this.grid.state.cursorRow + 1)\n });\n }\n onSelectionChanged(selectedRanges);\n }\n handleMovedColumnsChanged(movedColumns, onChangeApplied) {\n this.setState({\n movedColumns\n }, onChangeApplied);\n }\n handleHeaderGroupsChanged(columnHeaderGroups) {\n var {\n model\n } = this.props;\n this.setState({\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(model, columnHeaderGroups).groups\n }, () => {\n var _this$grid23;\n return (_this$grid23 = this.grid) === null || _this$grid23 === void 0 ? void 0 : _this$grid23.forceUpdate();\n });\n }\n handleTooltipRef(tooltip) {\n // Need to start the timer right away, since we're creating the tooltip when we want the timer to start\n if (tooltip != null) {\n tooltip.startTimer();\n }\n this.tooltip = tooltip;\n }\n handleConditionalFormatsChange(conditionalFormats) {\n log.debug('Updated conditional formats', conditionalFormats);\n this.setState({\n conditionalFormats\n });\n }\n handleConditionalFormatCreate() {\n log.debug('Create new conditional format');\n var {\n openOptions,\n conditionalFormats\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: \"Create Formatting Rule\"\n }],\n conditionalFormatEditIndex: conditionalFormats.length,\n // Start with a blank rule\n conditionalFormatPreview: undefined\n });\n }\n handleConditionalFormatEdit(index) {\n log.debug('Edit conditional format', index);\n var {\n openOptions,\n conditionalFormats\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: \"Edit Formatting Rule\"\n }],\n conditionalFormatEditIndex: index,\n // Clone rule to preview temporary changes\n conditionalFormatPreview: _objectSpread({}, conditionalFormats[index])\n });\n }\n\n // Apply live changes\n\n handleConditionalFormatEditorSave(config) {\n log.debug('Save conditional format changes', config);\n this.setState(state => {\n if (state.conditionalFormatEditIndex === null) {\n log.debug('Invalid format index');\n return null;\n }\n var conditionalFormats = [...state.conditionalFormats];\n conditionalFormats[state.conditionalFormatEditIndex] = config;\n return {\n conditionalFormats\n };\n }, () => {\n this.handleMenuBack();\n });\n }\n handleConditionalFormatEditorCancel() {\n this.handleMenuBack();\n // Not resetting conditionalFormatPreview here\n // to prevent editor fields change during the menu transition\n this.setState({\n conditionalFormatEditIndex: null\n });\n }\n handleUpdateCustomColumns(customColumns) {\n log.info(\"handleUpdateCustomColumns:\", customColumns);\n var {\n model\n } = this.props;\n var {\n movedColumns,\n sorts,\n quickFilters,\n advancedFilters,\n selectDistinctColumns\n } = this.state;\n var {\n columns\n } = model;\n var oldCustomColumns = model.customColumns.map(customColumn => \"\".concat(customColumn));\n var removedColumnNames = IrisGridUtils.getRemovedCustomColumnNames(oldCustomColumns, customColumns);\n if (removedColumnNames.length > 0) {\n var newSorts = IrisGridUtils.removeSortsInColumns(sorts, removedColumnNames);\n var newQuickFilters = IrisGridUtils.removeFiltersInColumns(columns, quickFilters, removedColumnNames);\n var newAdvancedFilters = IrisGridUtils.removeFiltersInColumns(columns, advancedFilters, removedColumnNames);\n var newMovedColumns = IrisGridUtils.removeColumnFromMovedColumns(columns, movedColumns, removedColumnNames);\n var newSelectDistinctColumns = IrisGridUtils.removeColumnsFromSelectDistinctColumns(selectDistinctColumns, removedColumnNames);\n if (newSorts.length !== sorts.length) {\n log.debug('removing sorts from removed custom columns...');\n this.setState({\n sorts: newSorts\n });\n }\n if (newQuickFilters.size !== quickFilters.size || newAdvancedFilters.size !== advancedFilters.size) {\n log.debug(\"removing filters from removed custom columns...\");\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n if (!deepEqual(movedColumns, newMovedColumns)) {\n log.debug(\"change moved columns for removed custom columns\", newMovedColumns);\n this.setState({\n movedColumns: newMovedColumns\n });\n }\n if (!deepEqual(selectDistinctColumns, newSelectDistinctColumns)) {\n log.debug(\"change selectDistinct columns for removed custom columns\", newMovedColumns);\n this.setState({\n selectDistinctColumns: newSelectDistinctColumns\n });\n }\n }\n this.setState({\n customColumns\n });\n if (customColumns.length > 0) {\n // If there are no custom columns, the change handler never fires\n // This causes the loader to stay until canceled by the user\n this.startLoading('Applying custom columns...');\n }\n }\n handleCustomColumnsChanged() {\n log.debug('custom columns changed');\n var {\n isReady\n } = this.state;\n if (isReady) {\n var _this$grid24;\n this.stopLoading();\n (_this$grid24 = this.grid) === null || _this$grid24 === void 0 ? void 0 : _this$grid24.forceUpdate();\n } else {\n this.loadTableState();\n }\n }\n handlePendingCommitClicked() {\n return this.commitPending();\n }\n handlePendingDiscardClicked() {\n return this.discardPending();\n }\n handlePendingDataUpdated() {\n var _this$grid25;\n log.debug('pending data updated');\n var {\n model\n } = this.props;\n var {\n pendingDataMap,\n pendingDataErrors\n } = model;\n this.setState({\n pendingDataMap,\n pendingDataErrors,\n pendingSaveError: null\n });\n (_this$grid25 = this.grid) === null || _this$grid25 === void 0 ? void 0 : _this$grid25.forceUpdate();\n }\n\n /**\n * User added, removed, or changed the order of aggregations, or position\n * @param aggregationSettings The new aggregation settings\n */\n handleAggregationsChange(aggregationSettings) {\n log.debug('handleAggregationsChange', aggregationSettings);\n this.startLoading(\"Aggregating \".concat(aggregationSettings.aggregations.map(a => a.operation).join(', '), \"...\"));\n this.setState({\n aggregationSettings\n });\n }\n\n /**\n * A specific aggregation has been modified\n * @param aggregation The new aggregation\n */\n handleAggregationChange(aggregation) {\n log.debug('handleAggregationChange', aggregation);\n this.startLoading(\"Aggregating \".concat(aggregation.operation, \"...\"));\n this.setState(_ref16 => {\n var {\n aggregationSettings\n } = _ref16;\n return {\n selectedAggregation: aggregation,\n aggregationSettings: _objectSpread(_objectSpread({}, aggregationSettings), {}, {\n aggregations: aggregationSettings.aggregations.map(a => a.operation === aggregation.operation ? aggregation : a)\n })\n };\n });\n }\n\n /**\n * An aggregations has been selected for editing\n * @param aggregation The aggregation to edit\n */\n handleAggregationEdit(aggregation) {\n log.debug('handleAggregationEdit', aggregation);\n var {\n openOptions\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.AGGREGATION_EDIT,\n title: \"Edit Columns to \".concat(aggregation.operation)\n }],\n selectedAggregation: aggregation\n });\n }\n handleRollupChange(rollupConfig) {\n var _rollupConfig$columns, _rollupConfig$columns2;\n log.info('Rollup change', rollupConfig);\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n this.startLoading(\"Grouping by columns \".concat((_rollupConfig$columns = rollupConfig === null || rollupConfig === void 0 ? void 0 : (_rollupConfig$columns2 = rollupConfig.columns) === null || _rollupConfig$columns2 === void 0 ? void 0 : _rollupConfig$columns2.join(', ')) !== null && _rollupConfig$columns !== void 0 ? _rollupConfig$columns : '', \"...\"));\n\n // Have to clear select distinct since rollup uses the original columns, not the current ones.\n // IrisGridProxyModel has a check to prevent model update\n // when selectDistinctModel is cleared and the rollupConfig is set on the model.\n this.setState({\n rollupConfig,\n movedColumns: [],\n frozenColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n selectDistinctColumns: []\n });\n }\n handleSelectDistinctChanged(columnNames) {\n log.debug('SelectDistinct change', columnNames);\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n this.startLoading(\"Selecting distinct values in \".concat(columnNames.length > 0 ? columnNames.join(', ') : '', \"...\"));\n this.setState({\n selectDistinctColumns: columnNames,\n movedColumns: [],\n sorts: [],\n reverseType: TableUtils.REVERSE_TYPE.NONE\n });\n }\n handleDownloadTableStart() {\n var {\n canDownloadCsv\n } = this.props;\n if (canDownloadCsv) {\n this.setState({\n isTableDownloading: true,\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.INITIATING\n });\n } else {\n log.error('Attempted to handleDownloadTableStart for user without download CSV permission.');\n }\n }\n handleDownloadTable(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues) {\n var {\n canDownloadCsv\n } = this.props;\n if (canDownloadCsv) {\n log.info('start table downloading', fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);\n this.setState(() => {\n if (this.tableSaver) {\n this.tableSaver.startDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);\n }\n return {\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n };\n });\n } else {\n log.error('Attempted to handleDownloadTable for user without download CSV permission.');\n }\n }\n\n /**\n * Aggregation editing has completed. Need to filter out any aggregations that have no columns selected\n */\n removeEmptyAggregations() {\n log.debug('removeEmptyAggregations');\n this.setState(_ref17 => {\n var {\n aggregationSettings\n } = _ref17;\n var {\n aggregations\n } = aggregationSettings;\n var newAggregations = aggregations.filter(a => a.selected.length > 0 || a.invert);\n if (newAggregations.length !== aggregations.length) {\n return {\n selectedAggregation: null,\n aggregationSettings: _objectSpread(_objectSpread({}, aggregationSettings), {}, {\n aggregations: newAggregations\n })\n };\n }\n return {\n selectedAggregation: null,\n aggregationSettings\n };\n });\n }\n seekRow(inputString) {\n var _arguments = arguments,\n _this6 = this;\n return _asyncToGenerator(function* () {\n var _this6$grid;\n var isBackwards = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n var {\n gotoValueSelectedColumnName: selectedColumnName,\n gotoValueSelectedFilter\n } = _this6.state;\n var {\n model\n } = _this6.props;\n var {\n dh\n } = model;\n if (!model.isSeekRowAvailable) {\n return;\n }\n if (inputString === '') {\n return;\n }\n var selectedColumn = IrisGridUtils.getColumnByName(model.columns, selectedColumnName);\n if (selectedColumn === undefined) {\n return;\n }\n var searchFromRow = (_this6$grid = _this6.grid) === null || _this6$grid === void 0 ? void 0 : _this6$grid.state.cursorRow;\n if (searchFromRow == null) {\n searchFromRow = 0;\n }\n var isContains = gotoValueSelectedFilter === FilterType.contains || gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n var isIgnoreCase = gotoValueSelectedFilter === FilterType.eqIgnoreCase || gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n try {\n var _this6$grid2;\n var {\n formatter\n } = model;\n var columnDataType = TableUtils.getNormalizedType(selectedColumn.type);\n var rowIndex;\n switch (columnDataType) {\n case TableUtils.dataType.CHAR:\n case TableUtils.dataType.STRING:\n {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, inputString, isIgnoreCase, isContains, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n break;\n }\n case TableUtils.dataType.DATETIME:\n {\n var [startDate] = DateUtils.parseDateRange(dh, inputString, formatter.timeZone);\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.DATETIME, startDate, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n break;\n }\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT:\n {\n if (!TableUtils.isBigDecimalType(selectedColumn.type) && !TableUtils.isBigIntegerType(selectedColumn.type)) {\n var inputValue = parseInt(inputString, 10);\n if (inputString === '-Infinity') {\n inputValue = Number.NEGATIVE_INFINITY;\n } else if (inputString === 'Infinity') {\n inputValue = Number.POSITIVE_INFINITY;\n }\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.NUMBER, inputValue, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n } else {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, inputString, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n }\n break;\n }\n default:\n {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, _this6.tableUtils.makeValue(selectedColumn.type, inputString, formatter.timeZone), undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n }\n }\n (_this6$grid2 = _this6.grid) === null || _this6$grid2 === void 0 ? void 0 : _this6$grid2.setFocusRow(rowIndex);\n _this6.setState({\n gotoValueError: ''\n });\n } catch (e) {\n _this6.setState({\n gotoValueError: 'invalid input'\n });\n }\n })();\n }\n handleCancelDownloadTable() {\n var _this$tableSaver;\n (_this$tableSaver = this.tableSaver) === null || _this$tableSaver === void 0 ? void 0 : _this$tableSaver.cancelDownload();\n this.setState({\n isTableDownloading: false\n });\n }\n handleDownloadCompleted() {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 100,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.FINISHED\n });\n }\n handleDownloadCanceled() {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 0,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.CANCELED\n });\n }\n\n /**\n * Delete the specified ranges from the table.\n * @param ranges The ranges to delete\n */\n deleteRanges(ranges) {\n var {\n model\n } = this.props;\n if (!isDeletableGridModel(model) || !model.isDeletable) {\n throw new Error('Model does not support deleting ranges');\n }\n this.pending.add(model.delete(ranges)).catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to delete ranges', ranges, e);\n }\n });\n }\n resetColumnSelection() {\n if (this.grid == null) {\n return;\n }\n var {\n isSelectingColumn\n } = this.props;\n if (isSelectingColumn) {\n var {\n columnAllowedCursor\n } = this.props;\n this.grid.setState({\n cursor: columnAllowedCursor\n });\n } else {\n this.grid.setState({\n cursor: null\n });\n this.setState({\n hoverSelectColumn: null\n });\n }\n }\n resetGridViewState() {\n var forceUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n if (!this.grid) {\n return;\n }\n this.grid.clearSelectedRanges();\n this.grid.setViewState({\n left: 0,\n top: 0,\n topOffset: 0,\n leftOffset: 0\n }, forceUpdate);\n }\n sendStateChange() {\n if (!this.grid) {\n return;\n }\n var {\n state: irisGridState\n } = this;\n var {\n state: gridState\n } = this.grid;\n var {\n onStateChange\n } = this.props;\n onStateChange(irisGridState, gridState);\n }\n handleOverflowClose() {\n this.setState({\n showOverflowModal: false\n });\n }\n getColumnBoundingRect() {\n var _this$gridWrapper2;\n var {\n metrics,\n shownColumnTooltip\n } = this.state;\n assertNotNull(metrics);\n assertNotNull(shownColumnTooltip);\n var gridRect = (_this$gridWrapper2 = this.gridWrapper) === null || _this$gridWrapper2 === void 0 ? void 0 : _this$gridWrapper2.getBoundingClientRect();\n var popperMargin = 20;\n assertNotNull(gridRect);\n var {\n columnHeaderHeight,\n allColumnXs,\n allColumnWidths,\n width,\n columnHeaderMaxDepth\n } = metrics;\n var columnX = allColumnXs.get(shownColumnTooltip);\n var columnWidth = allColumnWidths.get(shownColumnTooltip);\n assertNotNull(columnX);\n assertNotNull(columnWidth);\n var left = gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin);\n return {\n top: gridRect.top + (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin),\n bottom: gridRect.top + columnHeaderMaxDepth * columnHeaderHeight,\n right: gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin) + 1,\n width: 1,\n height: columnHeaderHeight,\n x: left,\n y: gridRect.top,\n toJSON: () => {\n throw new Error('not implemented');\n }\n };\n }\n handleGotoRowSelectedRowNumberSubmit() {\n var {\n gotoRow: rowNumber\n } = this.state;\n this.focusRowInGrid(rowNumber);\n }\n focusRowInGrid(rowNumber) {\n var {\n model\n } = this.props;\n var {\n rowCount\n } = model;\n this.setState({\n gotoRow: rowNumber\n });\n if (rowNumber === '') {\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n return;\n }\n var rowInt = parseInt(rowNumber, 10);\n if (rowInt > rowCount || rowInt < -rowCount) {\n this.setState({\n gotoRowError: 'Invalid row index'\n });\n } else if (rowInt === 0) {\n var _this$grid26;\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n (_this$grid26 = this.grid) === null || _this$grid26 === void 0 ? void 0 : _this$grid26.setFocusRow(0);\n } else if (rowInt < 0) {\n var _this$grid27;\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n (_this$grid27 = this.grid) === null || _this$grid27 === void 0 ? void 0 : _this$grid27.setFocusRow(rowInt + rowCount);\n } else {\n var _this$grid28;\n (_this$grid28 = this.grid) === null || _this$grid28 === void 0 ? void 0 : _this$grid28.setFocusRow(rowInt - 1);\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n }\n }\n handleGotoRowSelectedRowNumberChanged(event) {\n var rowNumber = event.target.value;\n this.focusRowInGrid(rowNumber);\n }\n getColumnTooltip(visibleIndex, metrics, model) {\n var {\n columnHeaderHeight,\n columnHeaderMaxDepth,\n allColumnXs,\n allColumnWidths,\n width\n } = metrics;\n var columnX = allColumnXs.get(visibleIndex);\n var columnWidth = allColumnWidths.get(visibleIndex);\n if (columnX == null || columnWidth == null) {\n return null;\n }\n\n /**\n * Create a wrapper dom element, the size of the column header.\n * The wrapper acts as tooltip parent, the tooltip component\n * will trigger hide on mouseleave of wrapper or tooltip.\n * The wrapper should be bound to within the grid dimensions,\n * so popper only remains triggered while mouse is inside the panel.\n */\n var boundedLeft = Math.max(0, columnX);\n var boundedWidth = columnWidth;\n if (columnX + columnWidth > width) {\n // column is extending past right edge\n boundedWidth = width - columnX;\n } else if (columnX < 0) {\n // column is extending past left edge\n boundedWidth = columnWidth - Math.abs(columnX);\n }\n var wrapperStyle = {\n position: 'absolute',\n top: (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: boundedLeft,\n width: boundedWidth,\n height: columnHeaderHeight,\n pointerEvents: 'none'\n };\n\n /**\n * Because the popper parent wrapper center is no longer the same as\n * the column label center, we create a popper virtual ref, to handle\n * positioning and keep the popper centered on the label. Creates a\n * 1px x headerHeight virtual object, placed centered on the column\n * label, clamped to 0 + margin to width - margin. We add a margin,\n * otherwise the arrow wants to escape the boundary.\n */\n var virtualReference = {\n clientWidth: 1,\n clientHeight: columnHeaderHeight,\n getBoundingClientRect: this.getColumnBoundingRect\n };\n var popperOptions = {\n placement: 'bottom',\n modifiers: {\n flip: {\n behavior: ['bottom', 'top']\n }\n }\n };\n var modelColumn = this.getModelColumn(visibleIndex);\n if (modelColumn == null) return null;\n var column = model.columns[modelColumn];\n if (column == null) return null;\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n timeout: 400,\n interactive: true,\n options: popperOptions,\n ref: this.handleTooltipRef,\n referenceObject: virtualReference,\n onExited: () => {\n this.setState({\n shownColumnTooltip: null\n });\n },\n children: /*#__PURE__*/_jsx(ColumnStatistics, {\n model: model,\n column: column,\n onStatistics: () => {\n var _this$tooltip;\n (_this$tooltip = this.tooltip) === null || _this$tooltip === void 0 ? void 0 : _this$tooltip.update();\n }\n })\n }, column.name)\n });\n }\n handleGotoValueSelectedColumnNameChanged(columnName) {\n var _this$grid29;\n var {\n model\n } = this.props;\n var cursorRow = (_this$grid29 = this.grid) === null || _this$grid29 === void 0 ? void 0 : _this$grid29.state.cursorRow;\n var {\n gotoValueSelectedColumnName: prevColumnName,\n gotoValueManuallyChanged\n } = this.state;\n if (cursorRow != null) {\n var _index = model.getColumnIndexByName(columnName);\n var _column2 = IrisGridUtils.getColumnByName(model.columns, columnName);\n var prevColumn = IrisGridUtils.getColumnByName(model.columns, prevColumnName);\n if (_index == null || _column2 == null) {\n return;\n }\n var _value3 = model.valueForCell(_index, cursorRow);\n var text = IrisGridUtils.convertValueToText(_value3, _column2.type);\n\n // do NOT update value if user manually changed value AND column type remains the same\n if (gotoValueManuallyChanged && _column2.type === (prevColumn === null || prevColumn === void 0 ? void 0 : prevColumn.type)) {\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: ''\n });\n } else {\n // do update, and set goToValueManuallyChanged to false because value was automatically changed\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValue: text,\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n }\n }\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: ''\n });\n }\n handleGotoValueSelectedFilterChanged(value) {\n this.setState({\n gotoValueSelectedFilter: value,\n gotoValueError: ''\n });\n }\n handleGotoValueSubmitted(isBackwards) {\n var {\n gotoValue\n } = this.state;\n this.seekRow(gotoValue, isBackwards);\n }\n render() {\n var _rollupConfig$columns3,\n _rollupConfig$columns4,\n _this7 = this,\n _this$grid31,\n _this$grid31$state$dr,\n _openOptions;\n var {\n children,\n customFilters,\n getDownloadWorker,\n isSelectingColumn,\n isStuckToBottom,\n isStuckToRight,\n model,\n name,\n onlyFetchVisibleColumns,\n alwaysFetchColumns,\n advancedSettings,\n onAdvancedSettingsChange,\n canDownloadCsv,\n onCreateChart\n } = this.props;\n var {\n metricCalculator,\n metrics,\n isFilterBarShown,\n isSelectingPartition,\n isMenuShown,\n isReady,\n copyOperation,\n focusedFilterBarColumn,\n loadingText,\n loadingScrimProgress,\n loadingSpinnerShown,\n loadingCancelShown,\n loadingBlocksGrid,\n shownColumnTooltip,\n hoverAdvancedFilter,\n shownAdvancedFilter,\n hoverSelectColumn,\n quickFilters,\n advancedFilters,\n searchFilter,\n selectDistinctColumns,\n movedColumns,\n movedRows,\n formatter,\n conditionalFormats,\n conditionalFormatPreview,\n conditionalFormatEditIndex,\n sorts,\n reverseType,\n customColumns,\n selectedRanges,\n isTableDownloading,\n tableDownloadStatus,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n aggregationSettings,\n selectedAggregation,\n rollupConfig,\n openOptions,\n pendingSavePromise,\n pendingSaveError,\n pendingRowCount,\n pendingDataErrors,\n pendingDataMap,\n toastMessage,\n frozenColumns,\n columnHeaderGroups,\n showOverflowModal,\n overflowText,\n overflowButtonTooltipProps,\n expandCellTooltipProps,\n linkHoverTooltipProps,\n isGotoShown,\n gotoRow,\n gotoRowError,\n gotoValueError,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueSelectedFilter,\n partitionConfig\n } = this.state;\n if (!isReady) {\n return null;\n }\n var theme = this.getTheme();\n var filter = this.getCachedFilter(customFilters, quickFilters, advancedFilters, searchFilter);\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n var stateOverride = this.getCachedStateOverride(hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverseType, rollupConfig, isMenuShown);\n var top = metrics ? metrics.top : 0;\n var bottom = metrics ? metrics.bottomViewport : 0;\n var left = null;\n var right = null;\n if (onlyFetchVisibleColumns) {\n left = metrics ? metrics.left : 0;\n right = metrics ? metrics.right : 0;\n }\n var isVisible = metrics != null && metrics.width > 0 && metrics.height > 0;\n var isRollup = ((_rollupConfig$columns3 = rollupConfig === null || rollupConfig === void 0 ? void 0 : (_rollupConfig$columns4 = rollupConfig.columns) === null || _rollupConfig$columns4 === void 0 ? void 0 : _rollupConfig$columns4.length) !== null && _rollupConfig$columns3 !== void 0 ? _rollupConfig$columns3 : 0) > 0;\n var focusField = null;\n var debounceMs = metrics ? Math.min(Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)), IrisGrid.maxDebounce) : IrisGrid.maxDebounce;\n if (isFilterBarShown && focusedFilterBarColumn != null && metrics != null) {\n var {\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n width\n } = metrics;\n var columnX = allColumnXs.get(focusedFilterBarColumn);\n var columnWidth = allColumnWidths.get(focusedFilterBarColumn);\n if (columnX != null && columnWidth != null) {\n var _theme$filterBarHeigh, _theme$filterBarHeigh2, _this$grid30;\n var x = gridX + columnX;\n var y = gridY - ((_theme$filterBarHeigh = theme.filterBarHeight) !== null && _theme$filterBarHeigh !== void 0 ? _theme$filterBarHeigh : 0);\n var fieldWidth = columnWidth + 1; // cover right border\n var fieldHeight = ((_theme$filterBarHeigh2 = theme.filterBarHeight) !== null && _theme$filterBarHeigh2 !== void 0 ? _theme$filterBarHeigh2 : 0) - 1; // remove bottom border\n var style = {\n top: y,\n left: x,\n minWidth: Math.min(fieldWidth, width - x),\n // Don't cause overflow\n height: fieldHeight\n };\n var _value4 = '';\n var isValid = true;\n var modelColumn = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelColumn);\n var quickFilter = quickFilters.get(modelColumn);\n var advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter != null) {\n _value4 = quickFilter.text;\n isValid = quickFilter.filter != null;\n }\n var isBarFiltered = quickFilters.size !== 0 || advancedFilters.size !== 0;\n focusField = /*#__PURE__*/_jsx(FilterInputField, {\n ref: this.filterInputRef,\n style: style,\n className: classNames({\n error: !isValid,\n active: _value4 !== '' || advancedFilter != null,\n 'iris-grid-has-filter': isBarFiltered\n }),\n isAdvancedFilterSet: advancedFilter != null,\n onAdvancedFiltersTriggered: () => {\n this.setState({\n shownAdvancedFilter: focusedFilterBarColumn\n });\n },\n onChange: this.handleFilterBarChange,\n onDone: this.handleFilterBarDone,\n onTab: this.handleFilterBarTab,\n onContextMenu: (_this$grid30 = this.grid) === null || _this$grid30 === void 0 ? void 0 : _this$grid30.handleContextMenu,\n debounceMs: debounceMs,\n value: _value4\n }, focusedFilterBarColumn);\n }\n }\n var loadingElement = null;\n if (loadingText != null) {\n var loadingStatus = /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-loading-status\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: classNames('iris-grid-loading-status-bar', {\n show: loadingSpinnerShown\n }),\n children: loadingText\n }), /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n onClick: this.handleCancel,\n className: classNames('iris-grid-btn-cancel', {\n show: loadingCancelShown\n }),\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsClose,\n transform: \"down-1\"\n }), \"Cancel\"]\n })]\n });\n var _gridY = metrics ? metrics.gridY : 0;\n loadingElement = /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-loading\",\n style: loadingBlocksGrid ? {\n top: _gridY\n } : {},\n children: loadingStatus\n });\n }\n var columnTooltip = null;\n if (shownColumnTooltip != null && metrics) {\n var _this$tooltip2;\n columnTooltip = this.getColumnTooltip(shownColumnTooltip, metrics, model);\n // #510 We may need to update the position of the tooltip if it's already opened and columns are resized\n (_this$tooltip2 = this.tooltip) === null || _this$tooltip2 === void 0 ? void 0 : _this$tooltip2.update();\n }\n var filterBar = [];\n if (metrics && isFilterBarShown) {\n var {\n gridX: _gridX,\n gridY: _gridY2,\n visibleColumns,\n allColumnXs: _allColumnXs,\n allColumnWidths: _allColumnWidths\n } = metrics;\n var {\n filterBarHeight\n } = theme;\n var _loop2 = function _loop2() {\n var columnIndex = visibleColumns[i];\n var columnX = _allColumnXs.get(columnIndex);\n var columnWidth = _allColumnWidths.get(columnIndex);\n var modelColumn = _this7.getModelColumn(columnIndex);\n if (modelColumn != null) {\n var isFilterable = model.isFilterable(modelColumn);\n if (isFilterable && columnX != null && columnWidth != null && columnWidth > 0) {\n var _x = _gridX + columnX + columnWidth - 24;\n var _y = _gridY2 - (filterBarHeight !== null && filterBarHeight !== void 0 ? filterBarHeight : 0) + 2; // 2 acts as top margin for the button\n var _style = {\n position: 'absolute',\n top: _y,\n left: _x\n };\n var _advancedFilter = advancedFilters.get(modelColumn);\n var isFilterSet = _advancedFilter != null;\n var isFilterVisible = columnIndex === hoverAdvancedFilter || columnIndex === focusedFilterBarColumn || isFilterSet;\n var element = /*#__PURE__*/_jsx(\"div\", {\n className: classNames('advanced-filter-button-container', {\n hidden: !isFilterVisible\n }),\n style: _style,\n children: isFilterVisible && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isFilterSet\n }),\n onClick: () => {\n _this7.setState({\n shownAdvancedFilter: columnIndex\n });\n },\n onContextMenu: event => {\n var _this7$grid;\n (_this7$grid = _this7.grid) === null || _this7$grid === void 0 ? void 0 : _this7$grid.handleContextMenu(event);\n },\n onMouseEnter: () => {\n _this7.setState({\n hoverAdvancedFilter: columnIndex\n });\n },\n onMouseLeave: () => {\n _this7.setState({\n hoverAdvancedFilter: null\n });\n },\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhFilterFilled,\n className: \"filter-solid\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsFilter,\n className: \"filter-light\"\n })]\n })\n })\n }, columnIndex);\n filterBar.push(element);\n }\n }\n };\n for (var i = 0; i < visibleColumns.length; i += 1) {\n _loop2();\n }\n }\n var advancedFilterMenus = [];\n if (metrics) {\n var {\n gridX: _gridX2,\n visibleColumns: _visibleColumns,\n allColumnXs: _allColumnXs2,\n allColumnWidths: _allColumnWidths2,\n columnHeaderHeight\n } = metrics;\n var _loop3 = function _loop3() {\n var columnIndex = _visibleColumns[_i3];\n var columnX = _allColumnXs2.get(columnIndex);\n var columnWidth = _allColumnWidths2.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n var xColumnHeader = _gridX2 + columnX;\n var xFilterBar = _gridX2 + columnX + columnWidth - 20;\n var _style2 = isFilterBarShown ? {\n position: 'absolute',\n top: columnHeaderHeight,\n left: xFilterBar,\n width: 20,\n height: theme.filterBarHeight\n } : {\n position: 'absolute',\n top: 0,\n left: xColumnHeader,\n width: columnWidth,\n height: columnHeaderHeight\n };\n var _modelColumn = _this7.getModelColumn(columnIndex);\n if (_modelColumn != null) {\n var _column3 = model.columns[_modelColumn];\n if (_column3 == null) {\n // Grid metrics is likely out of sync with model\n log.warn(\"Column does not exist at index \".concat(_modelColumn, \" for column array of length \").concat(model.columns.length));\n // eslint-disable-next-line no-continue\n return \"continue\";\n }\n var _advancedFilter2 = advancedFilters.get(_modelColumn);\n var {\n options: advancedFilterOptions\n } = _advancedFilter2 || {};\n var sort = TableUtils.getSortForColumn(model.sort, _column3.name);\n var sortDirection = sort ? sort.direction : null;\n if (!isSortDirection(sortDirection)) {\n throw new Error(\"Invalid sort direction: \".concat(sortDirection));\n }\n var element = /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-menu-container\",\n style: _style2,\n children: /*#__PURE__*/_jsx(Popper, {\n className: \"advanced-filter-menu-popper\",\n onEntered: _this7.getAdvancedMenuOpenedHandler(columnIndex),\n onExited: () => {\n _this7.handleAdvancedMenuClosed(columnIndex);\n },\n isShown: shownAdvancedFilter === columnIndex,\n interactive: true,\n closeOnBlur: true,\n options: {\n positionFixed: true\n },\n children: _this7.getCachedAdvancedFilterMenuActions(model, _column3, advancedFilterOptions, sortDirection, formatter)\n })\n }, columnIndex);\n advancedFilterMenus.push(element);\n }\n }\n };\n for (var _i3 = 0; _i3 < _visibleColumns.length; _i3 += 1) {\n var _ret = _loop3();\n if (_ret === \"continue\") continue;\n }\n }\n var optionItems = this.getCachedOptionItems(onCreateChart !== undefined && model.isChartBuilderAvailable, model.isCustomColumnsAvailable, model.isFormatColumnsAvailable, model.isRollupAvailable, model.isTotalsAvailable || isRollup, model.isSelectDistinctAvailable, model.isExportAvailable, this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, this.isTableSearchAvailable(), isGotoShown, advancedSettings.size > 0);\n var hiddenColumns = this.getCachedHiddenColumns(metricCalculator, userColumnWidths);\n var openOptionsStack = openOptions.map(option => {\n switch (option.type) {\n case OptionType.CHART_BUILDER:\n return /*#__PURE__*/_jsx(ChartBuilder, {\n model: model,\n onChange: this.handleChartChange,\n onSubmit: this.handleChartCreate\n }, OptionType.CHART_BUILDER);\n case OptionType.VISIBILITY_ORDERING_BUILDER:\n return /*#__PURE__*/_jsx(VisibilityOrderingBuilder, {\n model: model,\n movedColumns: movedColumns,\n hiddenColumns: hiddenColumns,\n columnHeaderGroups: columnHeaderGroups,\n onColumnVisibilityChanged: this.handleColumnVisibilityChanged,\n onReset: this.handleColumnVisibilityReset,\n onMovedColumnsChanged: this.handleMovedColumnsChanged,\n onColumnHeaderGroupChanged: this.handleHeaderGroupsChanged\n }, OptionType.VISIBILITY_ORDERING_BUILDER);\n case OptionType.CONDITIONAL_FORMATTING:\n return /*#__PURE__*/_jsx(ConditionalFormattingMenu, {\n rules: conditionalFormats,\n onChange: this.handleConditionalFormatsChange,\n onCreate: this.handleConditionalFormatCreate,\n onSelect: this.handleConditionalFormatEdit\n });\n case OptionType.CONDITIONAL_FORMATTING_EDIT:\n assertNotNull(model.columns);\n assertNotNull(this.handleConditionalFormatEditorUpdate);\n return /*#__PURE__*/_jsx(ConditionalFormatEditor, {\n dh: model.dh,\n columns: model.columns,\n rule: conditionalFormatPreview,\n onUpdate: this.handleConditionalFormatEditorUpdate,\n onSave: this.handleConditionalFormatEditorSave,\n onCancel: this.handleConditionalFormatEditorCancel\n });\n case OptionType.CUSTOM_COLUMN_BUILDER:\n return /*#__PURE__*/_jsx(CustomColumnBuilder, {\n model: model,\n customColumns: customColumns,\n onSave: this.handleUpdateCustomColumns,\n onCancel: this.handleMenuBack\n }, OptionType.CUSTOM_COLUMN_BUILDER);\n case OptionType.ROLLUP_ROWS:\n return /*#__PURE__*/_jsx(RollupRows, {\n model: model,\n onChange: this.handleRollupChange,\n config: rollupConfig\n }, OptionType.ROLLUP_ROWS);\n case OptionType.AGGREGATIONS:\n return /*#__PURE__*/_jsx(Aggregations, {\n settings: aggregationSettings,\n isRollup: isRollup,\n onChange: this.handleAggregationsChange,\n onEdit: this.handleAggregationEdit\n });\n case OptionType.AGGREGATION_EDIT:\n return selectedAggregation && /*#__PURE__*/_jsx(AggregationEdit, {\n aggregation: selectedAggregation,\n columns: model.originalColumns,\n onChange: this.handleAggregationChange\n });\n case OptionType.TABLE_EXPORTER:\n return /*#__PURE__*/_jsx(TableCsvExporter, {\n model: model,\n name: name,\n userColumnWidths: userColumnWidths,\n movedColumns: movedColumns,\n isDownloading: isTableDownloading,\n tableDownloadStatus: tableDownloadStatus,\n tableDownloadProgress: tableDownloadProgress,\n tableDownloadEstimatedTime: tableDownloadEstimatedTime !== null && tableDownloadEstimatedTime !== void 0 ? tableDownloadEstimatedTime : undefined,\n onDownload: this.handleDownloadTable,\n onDownloadStart: this.handleDownloadTableStart,\n onCancel: this.handleCancelDownloadTable,\n selectedRanges: selectedRanges\n }, OptionType.TABLE_EXPORTER);\n case OptionType.SELECT_DISTINCT:\n return /*#__PURE__*/_jsx(SelectDistinctBuilder, {\n model: model,\n selectDistinctColumns: selectDistinctColumns,\n onChange: this.handleSelectDistinctChanged\n });\n case OptionType.ADVANCED_SETTINGS:\n return /*#__PURE__*/_jsx(AdvancedSettingsMenu, {\n items: advancedSettings,\n onChange: onAdvancedSettingsChange\n });\n default:\n throw Error(\"Unexpected option type \".concat(option.type));\n }\n });\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid\",\n role: \"presentation\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-column\",\n children: [children != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-bar\",\n children: children\n }), /*#__PURE__*/_jsx(CSSTransition, {\n in: isSelectingPartition,\n timeout: ThemeExport.transitionSlowMs,\n classNames: \"iris-grid-bar-horizontal\",\n onEnter: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExit: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-partition-selector-wrapper iris-grid-bar iris-grid-bar-primary\",\n children: isPartitionedGridModel(model) && model.isPartitionRequired && partitionConfig && /*#__PURE__*/_jsx(IrisGridPartitionSelector, {\n model: model,\n partitionConfig: partitionConfig,\n onChange: this.handlePartitionChange\n })\n })\n }), /*#__PURE__*/_jsx(CSSTransition, {\n in: showSearchBar,\n timeout: ThemeExport.transitionSlowMs,\n classNames: \"iris-grid-bar-horizontal\",\n onEnter: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExit: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-bar\",\n children: /*#__PURE__*/_jsx(CrossColumnSearch, {\n value: searchValue,\n selectedColumns: selectedSearchColumns,\n invertSelection: invertSearchColumns,\n onChange: this.handleCrossColumnSearch,\n columns: model.columns,\n ref: this.crossColumnRef\n })\n })\n }), /*#__PURE__*/_jsxs(Grid, {\n ref: grid => {\n this.grid = grid;\n },\n isStickyBottom: !isEditableGridModel(model) || !model.isEditable,\n isStuckToBottom: isStuckToBottom,\n isStuckToRight: isStuckToRight,\n metricCalculator: metricCalculator,\n model: model,\n keyHandlers: this.getKeyHandlers(),\n mouseHandlers: this.getMouseHandlers(),\n movedColumns: movedColumns,\n movedRows: movedRows,\n onError: this.handleGridError,\n onViewChanged: this.handleViewChanged,\n onSelectionChanged: this.handleSelectionChanged,\n onMovedColumnsChanged: this.handleMovedColumnsChanged,\n renderer: this.renderer,\n stateOverride: stateOverride,\n theme: theme,\n children: [/*#__PURE__*/_jsx(IrisGridCellOverflowModal, {\n isOpen: showOverflowModal,\n text: overflowText,\n onClose: this.handleOverflowClose\n }), isVisible && /*#__PURE__*/_jsx(IrisGridModelUpdater, {\n model: model,\n modelColumns: model.columns,\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n filter: filter,\n formatter: formatter,\n sorts: sorts,\n reverseType: reverseType,\n movedColumns: movedColumns,\n customColumns: customColumns,\n hiddenColumns: hiddenColumns,\n alwaysFetchColumns: this.getAlwaysFetchColumns(alwaysFetchColumns, model.columns, movedColumns, model.floatingLeftColumnCount, model.floatingRightColumnCount, (_this$grid31 = this.grid) === null || _this$grid31 === void 0 ? void 0 : (_this$grid31$state$dr = _this$grid31.state.draggingColumn) === null || _this$grid31$state$dr === void 0 ? void 0 : _this$grid31$state$dr.range),\n formatColumns: this.getCachedPreviewFormatColumns(model.dh, model.columns, conditionalFormats, conditionalFormatPreview,\n // Disable the preview format when we press Back on the format edit page\n ((_openOptions = openOptions[openOptions.length - 1]) === null || _openOptions === void 0 ? void 0 : _openOptions.type) === OptionType.CONDITIONAL_FORMATTING_EDIT ? conditionalFormatEditIndex !== null && conditionalFormatEditIndex !== void 0 ? conditionalFormatEditIndex : undefined : undefined),\n rollupConfig: this.getModelRollupConfig(model.originalColumns, rollupConfig, aggregationSettings),\n totalsConfig: this.getModelTotalsConfig(model.columns, rollupConfig, aggregationSettings),\n selectDistinctColumns: selectDistinctColumns,\n pendingRowCount: pendingRowCount,\n pendingDataMap: pendingDataMap,\n frozenColumns: frozenColumns,\n columnHeaderGroups: columnHeaderGroups,\n partitionConfig: partitionConfig\n }), !isMenuShown && /*#__PURE__*/_jsx(\"div\", {\n className: \"grid-settings-button\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n \"data-testid\": \"btn-iris-grid-settings-button-\".concat(name),\n onClick: this.handleMenu,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsMenu,\n transform: \"up-1\"\n }),\n tooltip: \"Table Options\"\n })\n }), focusField, loadingElement, filterBar, columnTooltip, advancedFilterMenus, overflowButtonTooltipProps && this.getOverflowButtonTooltip(overflowButtonTooltipProps), expandCellTooltipProps && this.getExpandCellTooltip(expandCellTooltipProps), linkHoverTooltipProps && this.getLinkHoverTooltip(linkHoverTooltipProps)]\n }), /*#__PURE__*/_jsx(GotoRow, {\n ref: this.gotoRowRef,\n model: model,\n isShown: isGotoShown,\n gotoRow: gotoRow,\n gotoRowError: gotoRowError,\n gotoValueError: gotoValueError,\n onGotoRowSubmit: this.handleGotoRowSelectedRowNumberSubmit,\n onGotoRowNumberChanged: this.handleGotoRowSelectedRowNumberChanged,\n onClose: this.handleGotoRowClosed,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: () => {\n this.handleAnimationStart();\n this.focus();\n },\n onExited: this.handleAnimationEnd,\n gotoValueSelectedColumnName: gotoValueSelectedColumnName,\n gotoValue: gotoValue,\n gotoValueFilter: gotoValueSelectedFilter,\n onGotoValueSelectedColumnNameChanged: this.handleGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged: this.handleGotoValueSelectedFilterChanged,\n onGotoValueChanged: this.handleGotoValueChanged,\n onGotoValueSubmit: this.handleGotoValueSubmitted\n }), /*#__PURE__*/_jsx(PendingDataBottomBar, {\n error: pendingSaveError,\n isSaving: pendingSavePromise != null,\n saveTooltip: \"Commit (\".concat(this.commitAction.shortcut.getDisplayText(), \")\"),\n discardTooltip: \"Discard (\".concat(this.discardAction.shortcut.getDisplayText(), \")\"),\n pendingDataErrors: pendingDataErrors,\n pendingDataMap: pendingDataMap,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n onSave: this.handlePendingCommitClicked,\n onDiscard: this.handlePendingDiscardClicked\n }), /*#__PURE__*/_jsx(ToastBottomBar, {\n children: toastMessage\n }), /*#__PURE__*/_jsx(IrisGridCopyHandler, {\n model: model,\n copyOperation: copyOperation !== null && copyOperation !== void 0 ? copyOperation : undefined,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd\n }), /*#__PURE__*/_jsx(TableSaver, {\n dh: model.dh,\n ref: tableSaver => {\n this.tableSaver = tableSaver;\n },\n getDownloadWorker: getDownloadWorker,\n onDownloadCompleted: this.handleDownloadCompleted,\n onDownloadCanceled: this.handleDownloadCanceled,\n onDownloadProgressUpdate: this.handleDownloadProgressUpdate,\n isDownloading: tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING,\n formatter: formatter\n })]\n }), /*#__PURE__*/_jsx(SlideTransition, {\n in: isMenuShown,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"table-sidebar\",\n children: /*#__PURE__*/_jsxs(Stack, {\n children: [/*#__PURE__*/_jsx(Page, {\n title: \"Table Options\",\n onClose: this.handleMenuClose,\n children: /*#__PURE__*/_jsx(Menu, {\n onSelect: i => this.handleMenuSelect(optionItems[i]),\n items: optionItems\n })\n }), openOptionsStack.map((option, i) => /*#__PURE__*/_jsx(Page, {\n title: openOptions[i].title,\n onBack: this.handleMenuBack,\n onClose: this.handleMenuClose,\n children: option\n }, openOptions[i].type))]\n })\n })\n }), /*#__PURE__*/_jsx(ContextActions, {\n actions: this.contextActions\n })]\n });\n }\n}\n_defineProperty(IrisGrid, \"contextType\", IrisGridThemeContext);\n_defineProperty(IrisGrid, \"minDebounce\", 150);\n_defineProperty(IrisGrid, \"maxDebounce\", 500);\n_defineProperty(IrisGrid, \"loadingSpinnerDelay\", 800);\n_defineProperty(IrisGrid, \"defaultProps\", {\n children: null,\n advancedFilters: EMPTY_MAP,\n advancedSettings: EMPTY_MAP,\n alwaysFetchColumns: EMPTY_ARRAY,\n conditionalFormats: EMPTY_ARRAY,\n customColumnFormatMap: EMPTY_MAP,\n isFilterBarShown: false,\n applyInputFiltersOnInit: false,\n movedColumns: EMPTY_ARRAY,\n movedRows: EMPTY_ARRAY,\n inputFilters: EMPTY_ARRAY,\n customFilters: EMPTY_ARRAY,\n onCreateChart: undefined,\n onColumnSelected: () => undefined,\n onDataSelected: () => undefined,\n onError: () => undefined,\n onStateChange: () => undefined,\n onAdvancedSettingsChange: () => undefined,\n partitions: undefined,\n partitionConfig: undefined,\n quickFilters: EMPTY_MAP,\n selectDistinctColumns: EMPTY_ARRAY,\n sorts: EMPTY_ARRAY,\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n customColumns: EMPTY_ARRAY,\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n rollupConfig: undefined,\n userColumnWidths: EMPTY_MAP,\n userRowHeights: EMPTY_MAP,\n onSelectionChanged: () => undefined,\n isSelectingColumn: false,\n isSelectingPartition: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n columnSelectionValidator: null,\n columnAllowedCursor: null,\n columnNotAllowedCursor: null,\n copyCursor: 'copy',\n name: 'table',\n onlyFetchVisibleColumns: true,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: null,\n invertSearchColumns: true,\n onContextMenu: () => EMPTY_ARRAY,\n pendingDataMap: EMPTY_MAP,\n getDownloadWorker: DownloadServiceWorkerUtils.getServiceWorker,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n truncateNumbersWithPound: false,\n showEmptyStrings: true,\n showNullStrings: true,\n formatter: EMPTY_ARRAY,\n decimalFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string\n }),\n integerFormatOptions: PropTypes.shape({\n defaultFormatString: PropTypes.string\n })\n },\n canCopy: true,\n canDownloadCsv: true,\n frozenColumns: null,\n theme: null,\n canToggleSearch: true,\n mouseHandlers: EMPTY_ARRAY,\n keyHandlers: EMPTY_ARRAY\n});\nexport default IrisGrid;\n//# sourceMappingURL=IrisGrid.js.map"],"names":["_defineProperty","obj","key","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","log","Log","AdvancedFilterCreatorFilterItem","PureComponent","columnType","filterType","TableUtils","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","getLabelForBooleanFilter","e","props","memoizeOne","column","operation","timeZone","tableUtils","_value","filterTypes","selectedType","_this$typeDropdown","prevProps","eventTargetValue","onChange","event","onDelete","formatter","showValueInput","typeOptionElements","isValid","i","_type","label","element","_jsx","_jsxs","Select","typeDropdown","classNames","Button","vsTrash","AdvancedFilterCreatorFilterItem$1","AdvancedFilterCreatorSelectValueList","values","v","selectedValues","dh","table","filters","invertSelection","itemIndex","selectedIndex","isSelected","offset","items","visibleItemIndex","top","bottom","data","r","row","displayValue","itemCount","item","isLoading","viewportSize","topRow","bottomRow","SelectValueList","list","FadeTransition","LoadingSpinner","AdvancedFilterCreatorSelectValueList$1","AdvancedFilterCreatorSelectValue","prevState","searchTable","searchText","count","formattedCount","formattedTableSize","prefix","searchTablePromise","error","filter","showSearch","columnName","displayedValuesText","placeholderText","AdvancedFilterCreatorSelectValue$1","AdvancedFilterCreator","nanoid","_options$filterItems$","_options$filterItems","memoize","React","model","options","filterOperators","filterItems","_ref","columnIndex","assertNotNull","isSortable","index","valuesTable","_valuesTable$columns$","sort","PromiseUtils","_this$focusTrapContai","_this$focusTrapContai2","_this$focusTrapContai3","_this$focusTrapContai4","inputs","FilterOperator","operator","assertFilterOperatorValue","filterIndex","addToExisting","ContextActionUtils","onDone","filterItem","direction","onSortChange","onFilterChange","_ref2","operators","_this","sortDirection","valuesTableError","isValuesTableAvailable","isBoolean","isDateType","filterItemElements","_loop","filterOperator","isAndFilter","operatorElement","showAddFilterItem","addFilterItem","FontAwesomeIcon","dhNewCircleLargeFilled","dhSortAmountDown","_Fragment","AdvancedFilterCreator$1","makeTernaryFormatRule","config","prevRule","styleDBString","getStyleDBString","conditionDBString","getConditionDBString","makeRowFormatColumn","rule","makeColumnFormatColumn","col","FormatterType","NumberCondition","StringCondition","DateCondition","BooleanCondition","CharCondition","FormatStyleType","getLabelForStyleType","option","getBackgroundForStyleConfig","type","customConfig","getColorForStyleConfig","color","bg","getNumberConditionText","start","end","getTextForNumberCondition","getStringConditionText","getTextForStringCondition","getDateConditionText","getTextForDateCondition","getBooleanConditionText","getTextForBooleanCondition","getCharConditionText","getTextForCharCondition","getLabelForNumberCondition","condition","getLabelForStringCondition","getLabelForDateCondition","getLabelForBooleanCondition","getLabelForCharCondition","getDefaultConditionForType","getDefaultValueForType","getConditionConfig","getDefaultConditionConfigForType","getDefaultStyleConfig","getShortLabelForStringCondition","getShortLabelForDateCondition","getShortLabelForBooleanCondition","getShortLabelForCharCondition","getShortLabelForNumberCondition","getShortLabelForConditionType","getFormatColumns","columns","rules","result","rowFormatConfig","columnFormatConfigMap","_ref3","formatterType","name","prevFormatColumn","formatColumn","isDateConditionValid","dateTimeString","rest","tzCode","DateUtils","isSupportedColumn","_ref4","IrisGridBottomBar","animation","children","className","isShown","onClick","onEntering","onEntered","onExiting","onExited","CSSTransition","ThemeExport","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","pendingDataErrors","pendingDataMap","_onExited","isSuccessShown","setIsSuccessShown","useState","wasSuccessShown","setWasSuccessShown","successTimeout","useRef","prevIsSaving","usePrevious","errorMessage","useMemo","useEffect","pendingRowCount","commitIcon","vsPass","vsWarning","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","_asyncToGenerator","fn","self","args","err","isCopyRangesOperation","copyOperation","isCopyHeaderOperation","IrisGridCopyHandler","Component","copyState","rowCount","buttonState","ranges","GridRange","text","_this2","copyToClipboard","_this3","columnDepth","movedColumns","modelIndex","GridUtils","copyText","includeHeaders","userColumnWidths","_movedColumns","formatValues","hiddenColumns","IrisGridUtils","modelRanges","subtractRanges","formatValue","CanceledPromiseError","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","IrisGridCopyHandler$1","FilterInputField","debounceMs","debounce","_this$inputField","_this$inputField2","initialValue","isChanged","setGridFocus","defocusInput","_this$inputField3","relatedTarget","backward","onTab","onContextMenu","style","isAdvancedFilterSet","onAdvancedFiltersTriggered","inputField","dhFilterFilled","vsFilter","FilterInputField$1","CopyCellKeyHandler","KeyHandler","irisGrid","grid","mouseX","mouseY","gridPoint","CopyCellKeyHandler$1","CopyKeyHandler","selectedRanges","CopyKeyHandler$1","ReverseKeyHandler","IrisGridShortcuts","reverseType","ReverseKeyHandler$1","ClearFilterKeyHandler","ClearFilterKeyHandler$1","IrisGridCellOverflowMouseHandler","GridMouseHandler","point","x","y","renderer","state","metrics","context","theme","rendererState","left","width","height","_this$getButtonPositi","overflowButtonTooltipProps","newProps","deepEqual","IrisGridCellOverflowMouseHandler$1","IrisGridColumnSelectMouseHandler","isSelectingColumn","tableColumn","columnSelectionValidator","modelColumn","columnAllowedCursor","columnNotAllowedCursor","IrisGridColumnSelectMouseHandler$1","IrisGridColumnTooltipMouseHandler","tooltip","popper","columnHeaderDepth","shownColumnTooltip","newTooltip","IrisGridColumnTooltipMouseHandler$1","CustomFormatAction","forwardedProps","closeMenu","parentContextMenu","DOMUtils","formatString","placeholder","title","description","iconElement","Tooltip","focusInput","CustomFormatAction$1","FormatContextMenuUtils","selectedFormat","TableColumnFormatter","format","group","_format$formatString","FormatContextMenuUtils$1","DateTimeFormatContextMenu","currentTime","formatItems","presetFormatOptions","DateTimeColumnFormatter","defaultOption","DateTimeFormatContextMenu$1","DecimalFormatContextMenu","onCustomFormatChange","DecimalColumnFormatter","defaultFormatOption","isCustomSelected","customFormat","customFormatOption","newCustomFormat","DecimalFormatContextMenu$1","IntegerFormatContextMenu","IntegerColumnFormatter","IntegerFormatContextMenu$1","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","source","DEBOUNCE_UPDATE_FORMAT","CONTEXT_MENU_DATE_FORMAT","MAX_MULTISELECT_ROWS","IrisGridContextMenuHandler","columnFilter","newColumnFilter","filterText","newFilterText","command","cellValue","len","GridRenderer","visibleIndex","actions","quickFilters","advancedFilters","searchFilter","filterIconColor","filterBarActiveColor","contextMenuSortIconColor","contextMenuReverseIconColor","modelSort","columnSort","hasReverse","isColumnHidden","columnWidth","isColumnFreezable","isExpandableGridModel","isColumnFrozen","isColumnSortable","vsRemove","SHORTCUTS","_model$textForColumnH","_this$numberFormatAct","rowIndex","canCopy","modelRow","sourceCell","sourceColumn","sourceRow","expandingColumn","cellText","gotoRow","getSelectedRanges","settings","lastRow","lastRowSize","assertNotNaN","_lastRow$endRow","assertNotEmpty","snapshot","snapshotValues","filterMenu","ContextActions","dateFilterFormatter","previewFilterFormatter","filterValue","isFilterBarShown","columnHeaderHeight","gridY","columnHeaderMaxDepth","valueText","clearFilterRange","GLOBAL_SHORTCUTS","isEditableGridModel","isDeletableGridModel","formatOptions","vsCheck","_loop2","quickFilter","filterValues","valueDescription","newQuickFilter","toFilterText","_TableUtils$escapeQui","TextUtils","prev","curr","valueDesc","acc","maxValue","a","b","minValue","maxFilterValue","minFilterValue","maxValueText","minValueText","maxDateText","minDateText","maxPreviewText","minPreviewText","valueFilter","sortActions","additionalSortActions","isAbs","IrisGridContextMenuHandler$1","IrisGridCopyCellMouseHandler","_grid","IrisGridCopyCellMouseHandler$1","IrisGridDataSelectMouseHandler","IrisGridDataSelectMouseHandler$1","IrisGridFilterMouseHandler","hoverAdvancedFilter","newHoverAdvancedFilter","IrisGridFilterMouseHandler$1","IrisGridRowTreeMouseHandler","GridRowTreeMouseHandler","depth","expandCellTooltipProps","isRowExpanded","IrisGridRowTreeMouseHandler$1","IrisGridSortMouseHandler","IrisGridSortMouseHandler$1","PendingMouseHandler","wheelEvent","rowHeight","deltaY","PendingMouseHandler$1","IrisGridTokenMouseHandler","modelRows","modelColumns","getOrThrow","renderType","cellRenderer","isTokenBoxCellRenderer","right","renderState","tokensInCell","isLinkToken","translatedTokenBox","_left","_right","_top","_bottom","isUserHoveringLink","linkHoverTooltipProps","href","IrisGridTokenMouseHandler$1","ToastBottomBar","setIsShown","timeout","prevChildren","startTimer","useCallback","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","sorts","customColumns","alwaysFetchColumns","rollupConfig","totalsConfig","selectDistinctColumns","EMPTY_ARRAY","EMPTY_MAP","frozenColumns","formatColumns","columnHeaderGroups","partitionConfig","sortsForModel","isPartitionedGridModel","IrisGridModelUpdater$1","STATS_LABEL_OVERRIDES","ColumnStatistics","_STATS_LABEL_OVERRIDE","w","numRows","stats","onStatistics","statistics","_column$displayName","loading","showGenerateStatistics","statisticElements","formattedValue","statisticElement","rowCountLabel","formattedRowCount","CopyButton","dhSortSlash","dhFreeze","vsLock","dhRefresh","ColumnStatistics$1","CrossColumnSearch","searchValue","selectedColumns","filterColumns","_this$searchField$cur","c","update","isConfigureColumnsShown","hasAllColumnsSelected","hasNoColumnsSelected","icon","dhSquareFilled","dhGearFilled","dhCheckSquare","vsCircleLargeFilled","dhWarningCircleFilled","dhRemoveSquareFilled","SearchInput","Popper","Checkbox","CrossColumnSearch$1","IrisGridPartitionSelector","memoizee","Pending","keysTable","keyTable","t","partitionTables","_","_x","_x2","partitionFilters","prevConfig","newPartitionConfig","selectedValue","newPartitions","tCopy","partition","partitionColumn","newConfig","_data$rows$0$get","mode","partitions","previousFilter","previousPartition","previousColumn","partitionFilter","partitionSelectors","Picker","vsChevronRight","vsKey","vsMerge","IrisGridPartitionSelector$1","SelectDistinctBuilder","filteredInputs","val","prevInputs","inputIndex","_ref5","disableAddButton","SelectDistinctBuilder$1","AdvancedSettingsMenu","_onChange","Menu","isOn","AdvancedSettingsType","DEFAULT_CALLBACK","getRuleValue","getRuleTitle","ConditionalFormattingMenu","onCreate","onSelect","handleRuleClick","handleDeleteClick","updatedRules","handleDragHandlerClick","handleDragEnd","DragUtils","sourceIndex","destinationIndex","sourceInput","DragDropContext","Droppable","provided","Draggable","vsGripper","numberConditionOptions","stringConditions","dateConditions","booleanConditions","charConditions","isNumberConditionValid","startValue","endValue","getNumberInputs","selectedCondition","handleValueChange","handleStartValueChange","handleEndValueChange","conditionValue","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","ConditionEditor","selectedColumnType","prevColumnType","setPrevColumnType","setCondition","setValue","setStartValue","setEndValue","conditions","handleConditionChange","conditionInputs","DEFAULT_BACKGROUND","DEFAULT_COLOR_LIGHT","DEFAULT_COLOR_DARK","DEFAULT_DROPDOWN_WIDTH","StyleEditor","_config$customConfig$","_config$customConfig","styleType","setStyleType","background","setBackground","setShown","dropdownWidth","setDropdownWidth","csContainer","handleBackgroundChange","handleMenuClosed","handleToggleClick","updateDropdownWidth","styleOptions","ColorUtils","renderOptions","optionArray","renderMenuElement","DropdownMenu","makeDefaultConfig","ColumnFormatEditor","_columns$find","selectedColumn","setColumn","conditionConfig","setConditionConfig","conditionValid","setConditionValid","selectedStyle","setStyle","handleColumnChange","newColumn","updatedConditionConfig","handleStyleChange","updatedStyleConfig","columnNames","ComboBox","RowFormatEditor","getFormatterTypeIcon","FormatColumnWhereIcon","FormatRowWhereIcon","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","_defaultRule$type","originalColumns","onUpdate","onCancel","defaultRule","selectedFormatter","setFormatter","setRule","setIsValid","handleCancel","handleSave","handleFormatterChange","handleRuleChange","ruleConfig","isRuleValid","updatedRule","IrisGridCellOverflowModal","_editorRef$current$ge","_editorRef$current2","isOpen","onClose","isOpened","setIsOpened","setHeight","showLineNumbers","setShowLineNumbers","isFormatted","setIsFormatted","canFormat","setCanFormat","editorRef","toggleLineNumbers","formatAsJSON","_editorRef$current","autoSetLineNumbers","_editor$getModel$getL","_editor$getModel","editor","handleToggle","onEditorInitialized","contentHeight","Modal","ModalHeader","vsListOrdered","vsJson","ModalBody","Editor","isIrisGridProxyModel","DEFAULT_FORMAT_STRING","GotoRow","forwardRef","ref","gotoRowError","gotoValueError","onGotoRowSubmit","_onEntered","onGotoRowNumberChanged","gotoValueSelectedColumnName","gotoValue","gotoValueFilter","onGotoValueSelectedColumnNameChanged","onGotoValueSelectedFilterChanged","onGotoValueChanged","onGotoValueSubmit","gotoRowInputRef","gotoValueInputRef","isGotoRowActive","setIsGotoRowActive","gotoRowInputId","handleGotoValueNumberKeyDown","onGotoValueInputChanged","handleGotoValueKeySubmit","normalizedType","useImperativeHandle","_gotoRowInputRef$curr","selectInput","_gotoRowInputRef$curr2","_gotoValueInputRef$cu","renderValueInput","DateTimeInput","FilterType","vsClose","vsArrowUp","vsArrowDown","GotoRow$1","VIEWPORT_LOADING_DELAY","UPDATE_DOWNLOAD_THROTTLE","SET_FILTER_DEBOUNCE","SEEK_ROW_DEBOUNCE","SET_CONDITIONAL_FORMAT_DEBOUNCE","DEFAULT_AGGREGATION_SETTINGS","UNFORMATTED_DATE_PATTERN","isEmptyConfig","aggregationSettings","IrisGrid","_model$layoutHints","_model$layoutHints$hi","_model$columns$0$name","_model$columns$","advancedFilterOptions","isChartBuilderAvailable","isCustomColumnsAvailable","isFormatColumnsAvailable","isRollupAvailable","isTotalsAvailable","isSelectDistinctAvailable","isExportAvailable","toggleFilterBarAction","toggleSearchBarAction","toggleGotoRowAction","showSearchBar","canDownloadCsv","canToggleSearch","showGotoRow","hasAdvancedSettings","optionItems","OptionType","dhGraphLineUp","dhEye","vsEdit","vsSplitHorizontal","dhTriangleDownSquare","vsSymbolOperator","vsRuby","vsCloudDownload","vsTools","vsSearch","vsReply","metricCalculator","aggregations","aggregationMap","selected","invert","AggregationUtils","operationMap","_operationMap$name","newOperations","o","rulesParam","preview","editIndex","_config$columns$lengt","_config$columns","agg","operationOrder","AggregationOperation","hoverSelectColumn","loadingScrimProgress","isMenuShown","customFilters","contextTheme","isEditable","floatingRowCount","_theme$rowFooterWidth","defaultTheme","createDefaultIrisGridTheme","rowFooterWidth","keyHandlers","mouseHandlers","rendererProp","IrisGridRenderer","floatingLeftColumnCount","floatingRightColumnCount","draggingRange","floatingColumns","_i","_i2","columnSet","selectedSearchColumns","invertSearchColumns","throttle","loadingSpinnerShown","conditionalFormatPreview","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","TableCsvExporter","wrapperStyle","popperOptions","expandTooltipDisplayValue","isExpandAllAvailable","linkHoverDisplayValue","_aggregationSettings","conditionalFormats","customColumnFormatMap","_isFilterBarShown","isSelectingPartition","_model","movedColumnsProp","movedRowsProp","_rollupConfig","_userColumnWidths","userRowHeights","_showSearchBar","_searchValue","_selectedSearchColumns","_invertSearchColumns","_advancedFilters","_quickFilters","_dh","_keyHandlers","_mouseHandlers","movedRows","_metricCalculator","IrisGridMetricCalculator","searchColumns","_searchFilter","Formatter","inputFilters","changedInputFilters","inputFilter","_advancedSettings$get","advancedSettings","replaceExistingFilters","loadingScrimStartTime","loadingScrimFinishTime","now","totalTime","openOptions","isAggEditType","_this$grid$canvasWrap","_this$grid","rawValue","replaceExisting","newAdvancedFilters","newQuickFilters","_ref6","_ref7","_ref8","filterMap","_advancedSettings$get2","clearFiltersOnLinkerFilterUpdate","_ref9","filterList","combinedText","modelRange","clearRange","_ref10","_ref11","_ref12","_settings$defaultDeci","_settings$defaultInte","_settings$truncateNum","_settings$showEmptySt","_settings$showNullStr","forceUpdate","globalColumnFormats","FormatterUtils","dateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","isColumnFormatChanged","isDateFormattingChanged","isDecimalFormattingChanged","isIntegerFormattingChanged","isTruncateNumbersChanged","isShowEmptyStringsChanged","isShowNullStringsChanged","updatedFormats","_this$globalColumnFor","mergedColumnFormats","applyInputFiltersOnInit","inputFiltersWithValues","resolved","_data","_row$get","newPartition","_value2","loadingText","resetRanges","loadingCancelShown","loadingBlocksGrid","_this$gridWrapper$get","_this$gridWrapper","minScrimTransitionTime","maxScrimTransitionTime","scrimTransitionTime","IrisGridModel","_this$grid2","columnCount","rightVisible","lastLeft","_this$grid3","_this$grid4","_this$grid5","metricState","newLeft","columnVisibleIndex","_this$grid6","allFrozenColumns","newMovedColumns","modelIndexes","isVisible","_this$grid7","defaultWidth","calculatedWidth","_model$layoutHints$fr","_model$layoutHints2","_this$grid8","onError","loadingMessage","_this$grid9","entries","currentSorts","_this$grid10","_this$grid11","_this$grid12","focusIndex","_model2","_column","_this$grid13","_model$layoutHints3","_dh$SearchDisplayMode","_dh$SearchDisplayMode2","searchDisplayMode","_this$crossColumnRef","_this$crossColumnRef2","_this$grid14","_this$grid15","_this$grid16","isGotoShown","_this$gotoRowRef$curr","cursorRow","cursorColumn","_document","_document$activeEleme","pendingSavePromise","containsGridCellInputField","_this3$grid","ValidationError","newPendingSavePromise","_this4","onColumnSelected","dataMap","onDataSelected","_this5","groupedColumns","isExpandable","isGrouped","_this$grid17","oldSort","newSort","_this$grid18","_this$filterInputRef","focusedFilterBarColumn","_this$filterInputRef2","onCreateChart","_ref13","_this$grid19","prevCustomColumnFormatMap","columnFormattingRule","_ref14","newOptions","_ref15","isMissingPartitionError","_this$grid20","_this$grid$state","_this$grid21","selectionEndRow","bottomViewport","bottomNonFloating","_this$grid22","onSelectionChanged","onChangeApplied","_this$grid23","oldCustomColumns","customColumn","removedColumnNames","newSorts","newSelectDistinctColumns","isReady","_this$grid24","_this$grid25","aggregation","_ref16","_rollupConfig$columns","_rollupConfig$columns2","fileName","frozenTable","tableSubscription","snapshotRanges","includeColumnHeaders","useUnformattedValues","_ref17","newAggregations","inputString","_arguments","_this6","_this6$grid","isBackwards","selectedColumnName","gotoValueSelectedFilter","searchFromRow","isContains","isIgnoreCase","_this6$grid2","columnDataType","startDate","inputValue","_this$tableSaver","irisGridState","gridState","onStateChange","_this$gridWrapper2","gridRect","popperMargin","allColumnXs","allColumnWidths","columnX","clamp","rowNumber","rowInt","_this$grid26","_this$grid27","_this$grid28","boundedLeft","boundedWidth","virtualReference","_this$tooltip","_this$grid29","prevColumnName","gotoValueManuallyChanged","_index","_column2","prevColumn","_value3","_rollupConfig$columns3","_rollupConfig$columns4","_this7","_this$grid31","_this$grid31$state$dr","_openOptions","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","shownAdvancedFilter","conditionalFormatEditIndex","isTableDownloading","selectedAggregation","pendingSaveError","toastMessage","showOverflowModal","overflowText","stateOverride","isRollup","focusField","gridX","_theme$filterBarHeigh","_theme$filterBarHeigh2","_this$grid30","fieldWidth","fieldHeight","_value4","advancedFilter","isBarFiltered","loadingElement","loadingStatus","_gridY","columnTooltip","_this$tooltip2","filterBar","_gridX","_gridY2","visibleColumns","_allColumnXs","_allColumnWidths","filterBarHeight","isFilterable","_y","_style","_advancedFilter","isFilterSet","isFilterVisible","_this7$grid","advancedFilterMenus","_gridX2","_visibleColumns","_allColumnXs2","_allColumnWidths2","_loop3","_i3","xColumnHeader","xFilterBar","_style2","_modelColumn","_column3","_advancedFilter2","isSortDirection","_ret","openOptionsStack","ChartBuilder","VisibilityOrderingBuilder","CustomColumnBuilder","RollupRows","Aggregations","AggregationEdit","Grid","vsMenu","TableSaver","tableSaver","SlideTransition","Stack","Page","IrisGridThemeContext","DownloadServiceWorkerUtils","PropTypes"],"mappings":"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"}