@deephaven/code-studio 1.22.2-alpha-pivot-builder.0 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/build/assets/{AppRoot-BzNjugdN.js → AppRoot-DbQCWZTt.js} +7 -7
  2. package/build/assets/{AppRoot-BzNjugdN.js.map → AppRoot-DbQCWZTt.js.map} +1 -1
  3. package/build/assets/{Chart-B0hsuf2K.js → Chart-DcAu2C8r.js} +2 -2
  4. package/build/assets/{Chart-B0hsuf2K.js.map → Chart-DcAu2C8r.js.map} +1 -1
  5. package/build/assets/{ControlType-RF9tnBjv.js → ControlType-Befg12ds.js} +19 -19
  6. package/build/assets/ControlType-Befg12ds.js.map +1 -0
  7. package/build/assets/{FormatterUtils-De1ep0Fi.js → FormatterUtils-MUBvtVZH.js} +2 -2
  8. package/build/assets/{FormatterUtils-De1ep0Fi.js.map → FormatterUtils-MUBvtVZH.js.map} +1 -1
  9. package/build/assets/{Grid-CdZ2x-DW.js → Grid-NISpLPEC.js} +2 -2
  10. package/build/assets/{Grid-CdZ2x-DW.js.map → Grid-NISpLPEC.js.map} +1 -1
  11. package/build/assets/{GridTokenMouseHandler-CF6sl-8Q.js → GridTokenMouseHandler-DYoFGIB4.js} +2 -2
  12. package/build/assets/{GridTokenMouseHandler-CF6sl-8Q.js.map → GridTokenMouseHandler-DYoFGIB4.js.map} +1 -1
  13. package/build/assets/{IrisGrid-txjFvl3W.css → IrisGrid-4aw2vW5N.css} +1 -1
  14. package/build/assets/IrisGrid-DNjLcT3l.js +15 -0
  15. package/build/assets/IrisGrid-DNjLcT3l.js.map +1 -0
  16. package/build/assets/{IrisGridModel-CqhJH6G0.js → IrisGridModel-DR8-Pxhc.js} +5 -5
  17. package/build/assets/IrisGridModel-DR8-Pxhc.js.map +1 -0
  18. package/build/assets/{IrisGridShortcuts-BHO8C2sg.js → IrisGridShortcuts-CvKofD7x.js} +2 -2
  19. package/build/assets/{IrisGridShortcuts-BHO8C2sg.js.map → IrisGridShortcuts-CvKofD7x.js.map} +1 -1
  20. package/build/assets/{IrisGridThemeProvider-xjgxYUOh.js → IrisGridThemeProvider-5LSst4dQ.js} +2 -2
  21. package/build/assets/IrisGridThemeProvider-5LSst4dQ.js.map +1 -0
  22. package/build/assets/{IrisGridThemeProvider-CBOV8q-p.css → IrisGridThemeProvider-BheYBAWy.css} +1 -1
  23. package/build/assets/{LocalWorkspaceStorage-Bbc6kAsZ.js → LocalWorkspaceStorage-BnIfiumx.js} +6 -6
  24. package/build/assets/LocalWorkspaceStorage-BnIfiumx.js.map +1 -0
  25. package/build/assets/{MarkdownEditor-BvFoKxjZ.js → MarkdownEditor-CE0PRr71.js} +2 -2
  26. package/build/assets/{MarkdownEditor-BvFoKxjZ.js.map → MarkdownEditor-CE0PRr71.js.map} +1 -1
  27. package/build/assets/{MarkdownNotebook-fgs2RrxF.js → MarkdownNotebook-_mAIkamc.js} +2 -2
  28. package/build/assets/{MarkdownNotebook-fgs2RrxF.js.map → MarkdownNotebook-_mAIkamc.js.map} +1 -1
  29. package/build/assets/{MissingPartitionError-EswE0n38.js → MissingPartitionError-COQPMoCk.js} +2 -2
  30. package/build/assets/{MissingPartitionError-EswE0n38.js.map → MissingPartitionError-COQPMoCk.js.map} +1 -1
  31. package/build/assets/{MockChartModel-BoOskcVW.js → MockChartModel-B1CLYsnL.js} +2 -2
  32. package/build/assets/{MockChartModel-BoOskcVW.js.map → MockChartModel-B1CLYsnL.js.map} +1 -1
  33. package/build/assets/{StyleGuideRoot-BzThAiXJ.js → StyleGuideRoot-dA2xCRM4.js} +7 -7
  34. package/build/assets/StyleGuideRoot-dA2xCRM4.js.map +1 -0
  35. package/build/assets/{index-D_FMOtd2.js → index-CNYwQhEi.js} +3 -3
  36. package/build/assets/{index-D_FMOtd2.js.map → index-CNYwQhEi.js.map} +1 -1
  37. package/build/assets/{index-D-j3HMMZ.js → index-CeeM9lsZ.js} +18 -18
  38. package/build/assets/index-CeeM9lsZ.js.map +1 -0
  39. package/build/assets/index-CjKdwP8V.js +25 -0
  40. package/build/assets/index-CjKdwP8V.js.map +1 -0
  41. package/build/index.html +2 -2
  42. package/package.json +31 -31
  43. package/build/assets/ControlType-RF9tnBjv.js.map +0 -1
  44. package/build/assets/IrisGrid-Cn6l58Ry.js +0 -15
  45. package/build/assets/IrisGrid-Cn6l58Ry.js.map +0 -1
  46. package/build/assets/IrisGridModel-CqhJH6G0.js.map +0 -1
  47. package/build/assets/IrisGridThemeProvider-xjgxYUOh.js.map +0 -1
  48. package/build/assets/LocalWorkspaceStorage-Bbc6kAsZ.js.map +0 -1
  49. package/build/assets/StyleGuideRoot-BzThAiXJ.js.map +0 -1
  50. package/build/assets/index-B1JEXjop.js +0 -25
  51. package/build/assets/index-B1JEXjop.js.map +0 -1
  52. package/build/assets/index-D-j3HMMZ.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IrisGrid-DNjLcT3l.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/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/PluginTableOptionsErrorBoundary.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/NoPastePermissionModal.js","../../../iris-grid/dist/IrisGrid.js"],"sourcesContent":["function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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, 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 _props$value = props.value,\n _value = _props$value === void 0 ? '' : _props$value,\n filterTypes = props.filterTypes,\n _props$selectedType = props.selectedType,\n selectedType = _props$selectedType === void 0 ? filterTypes[0] : _props$selectedType;\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 || _this$typeDropdown.focus();\n }\n componentDidUpdate(prevProps) {\n var _this$props = this.props,\n value = _this$props.value,\n selectedType = _this$props.selectedType;\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 onChange = this.props.onChange;\n var value = this.state.value;\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 value = event.target.value;\n this.setState({\n value\n });\n var onChange = this.props.onChange;\n var selectedType = this.state.selectedType;\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 onDelete = this.props.onDelete;\n onDelete();\n }\n render() {\n var _this$props2 = this.props,\n column = _this$props2.column,\n filterTypes = _this$props2.filterTypes,\n formatter = _this$props2.formatter,\n tableUtils = _this$props2.tableUtils;\n var _this$state = this.state,\n selectedType = _this$state.selectedType,\n value = _this$state.value;\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(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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, 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 _this$props = this.props,\n selectedValues = _this$props.selectedValues,\n dh = _this$props.dh;\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 table = this.props.table;\n if (table) this.startListening(table);\n }\n componentDidUpdate(prevProps) {\n var _this$props2 = this.props,\n filters = _this$props2.filters,\n invertSelection = _this$props2.invertSelection,\n selectedValues = _this$props2.selectedValues,\n table = _this$props2.table;\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 || table.applyFilter(filters);\n this.resetViewport();\n }\n }\n componentWillUnmount() {\n var table = this.props.table;\n if (table) this.stopListening(table);\n }\n handleSelect(itemIndex, value) {\n var invertSelection = this.props.invertSelection;\n var selectedValues = this.state.selectedValues;\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 offset = this.state.offset;\n var items = this.state.items;\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 onChange = this.props.onChange;\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 _this$props3 = this.props,\n table = _this$props3.table,\n formatter = _this$props3.formatter;\n if (!table) return;\n var data = event.detail;\n var offset = data.offset;\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 invertSelection = this.props.invertSelection;\n var selectedValues = this.state.selectedValues;\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 items = this.state.items;\n items = [...items];\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n var value = item.value;\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 table = this.props.table;\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 _this$state = this.state,\n offset = _this$state.offset,\n isLoading = _this$state.isLoading,\n items = _this$state.items,\n itemCount = _this$state.itemCount;\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(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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, 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 dh = props.dh,\n invertSelection = props.invertSelection,\n selectedValues = props.selectedValues;\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 _this$props = this.props,\n invertSelection = _this$props.invertSelection,\n selectedValues = _this$props.selectedValues,\n table = _this$props.table;\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 _this$state = this.state,\n searchTable = _this$state.table,\n searchText = _this$state.searchText;\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 table = this.state.table;\n if (table != null) {\n table.close();\n }\n this.searchTablePromise = undefined;\n this.stopUpdateFilterTimer();\n }\n getColumnName() {\n var table = this.props.table;\n if (table != null) {\n return table.columns[0].name;\n }\n return '';\n }\n getDisplayedValuesCount() {\n var _this$state2 = this.state,\n invertSelection = _this$state2.invertSelection,\n selectedValues = _this$state2.selectedValues,\n table = _this$state2.table;\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 table = this.state.table;\n var formatter = this.props.formatter;\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 table = this.props.table;\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 onChange = this.props.onChange;\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 onChange = this.props.onChange;\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 _this$state3 = this.state,\n table = _this$state3.table,\n searchText = _this$state3.searchText;\n var timeZone = this.props.timeZone;\n var tableUtils = this.tableUtils;\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 _this$state4 = this.state,\n error = _this$state4.error,\n filters = _this$state4.filters,\n invertSelection = _this$state4.invertSelection,\n selectedValues = _this$state4.selectedValues,\n searchText = _this$state4.searchText,\n table = _this$state4.table;\n var _this$props2 = this.props,\n dh = _this$props2.dh,\n formatter = _this$props2.formatter,\n showSearch = _this$props2.showSearch;\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(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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, vsScreenFull, vsScreenNormal } 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, jsxs as _jsxs, 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 model = props.model,\n column = props.column,\n options = props.options;\n var filterOperators = options.filterOperators,\n invertSelection = options.invertSelection,\n selectedValues = options.selectedValues;\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 selectedType = _ref.selectedType,\n value = _ref.value;\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 _this$props = this.props,\n model = _this$props.model,\n column = _this$props.column;\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;\n ((_this$focusTrapContai = this.focusTrapContainer) === null || _this$focusTrapContai === void 0 || (_this$focusTrapContai = _this$focusTrapContai.current) === null || _this$focusTrapContai === void 0 ? void 0 : _this$focusTrapContai.querySelector('button,select,input,textarea')).focus();\n }\n handleFocusTrapStart() {\n var _this$focusTrapContai2;\n var inputs = (_this$focusTrapContai2 = this.focusTrapContainer) === null || _this$focusTrapContai2 === void 0 || (_this$focusTrapContai2 = _this$focusTrapContai2.current) === null || _this$focusTrapContai2 === void 0 ? void 0 : _this$focusTrapContai2.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 _this$state = this.state,\n filterItems = _this$state.filterItems,\n filterOperators = _this$state.filterOperators;\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 _this$state2 = this.state,\n filterItems = _this$state2.filterItems,\n filterOperators = _this$state2.filterOperators;\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 filterOperators = this.state.filterOperators;\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 filterItems = this.state.filterItems;\n filterItems = [...filterItems];\n var key = filterItems[filterIndex].key;\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 _this$state3 = this.state,\n filterItems = _this$state3.filterItems,\n filterOperators = _this$state3.filterOperators;\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 onDone = this.props.onDone;\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 filterItems = this.state.filterItems;\n if (filterItems.length === 0) {\n return false;\n }\n var filterItem = filterItems[filterItems.length - 1];\n var selectedType = filterItem.selectedType,\n value = filterItem.value;\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 _this$props2 = this.props,\n column = _this$props2.column,\n onSortChange = _this$props2.onSortChange;\n var isSortable = this.state.isSortable;\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 _this$state4 = this.state,\n filterItems = _this$state4.filterItems,\n filterOperators = _this$state4.filterOperators,\n invertSelection = _this$state4.invertSelection,\n selectedValues = _this$state4.selectedValues;\n var _this$props3 = this.props,\n column = _this$props3.column,\n onFilterChange = _this$props3.onFilterChange,\n model = _this$props3.model,\n tableUtils = _this$props3.tableUtils;\n var formatter = model.formatter;\n var items = filterItems.filter(_ref2 => {\n var selectedType = _ref2.selectedType,\n value = _ref2.value;\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 _this$props4 = this.props,\n column = _this$props4.column,\n model = _this$props4.model,\n sortDirection = _this$props4.sortDirection,\n formatter = _this$props4.formatter,\n tableUtils = _this$props4.tableUtils,\n isMaximized = _this$props4.isMaximized,\n onToggleMaximize = _this$props4.onToggleMaximize;\n var _this$state5 = this.state,\n filterItems = _this$state5.filterItems,\n filterOperators = _this$state5.filterOperators,\n invertSelection = _this$state5.invertSelection,\n selectedValues = _this$state5.selectedValues,\n valuesTable = _this$state5.valuesTable,\n valuesTableError = _this$state5.valuesTableError,\n isSortable = _this$state5.isSortable;\n var dh = model.dh,\n isValuesTableAvailable = model.isValuesTableAvailable;\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 key = filterItem.key,\n selectedType = filterItem.selectedType,\n value = filterItem.value;\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 }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('sort-operator', {\n active: isMaximized\n }),\n onClick: onToggleMaximize,\n icon: isMaximized ? vsScreenNormal : vsScreenFull,\n tooltip: isMaximized ? 'Restore dialog size' : 'Maximize dialog'\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 advanced-filter-values-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(dh, config, prevRule) {\n var styleDBString = getStyleDBString(config);\n if (styleDBString === undefined) {\n return undefined;\n }\n var conditionDBString = getConditionDBString(dh, 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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _toArray(r) { return _arrayWithHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport 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 = /*#__PURE__*/function (FormatterType) {\n FormatterType[\"CONDITIONAL\"] = \"conditional\";\n FormatterType[\"ROWS\"] = \"rows\";\n return FormatterType;\n}({});\nexport var NumberCondition = /*#__PURE__*/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 return NumberCondition;\n}({});\nexport var StringCondition = /*#__PURE__*/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 return StringCondition;\n}({});\nexport var DateCondition = /*#__PURE__*/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 return DateCondition;\n}({});\nexport var BooleanCondition = /*#__PURE__*/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 return BooleanCondition;\n}({});\nexport var CharCondition = /*#__PURE__*/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 return CharCondition;\n}({});\nexport var FormatStyleType = /*#__PURE__*/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 return FormatStyleType;\n}({});\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 type = config.type,\n customConfig = config.customConfig;\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 type = config.type,\n customConfig = config.customConfig;\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 column = config.column,\n value = config.value,\n start = config.start,\n end = config.end;\n return getTextForNumberCondition(column.name, config.condition, value, start, end);\n}\nfunction getStringConditionText(config) {\n var column = config.column,\n value = config.value;\n return getTextForStringCondition(column.name, config.condition, value);\n}\nfunction getDateConditionText(dh, config) {\n var column = config.column,\n value = config.value;\n return getTextForDateCondition(dh, column.name, config.condition, value);\n}\nfunction getBooleanConditionText(config) {\n var column = config.column;\n return getTextForBooleanCondition(column.name, config.condition);\n}\nfunction getCharConditionText(config) {\n var column = config.column,\n value = config.value;\n return getTextForCharCondition(column.name, config.condition, value);\n}\nexport function getConditionDBString(dh, config) {\n var column = config.column;\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(dh, 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 condition = config.condition,\n value = config.value,\n start = config.start,\n end = config.end;\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(dh, columnName, condition, value) {\n var formattedValue = value;\n if (typeof value === 'string') {\n // The date time formatting may return a timezone that is not supported by the backend (e.g. 'EDT' instead of 'ET')\n // so we need to parse the date time string and reformat it with a supported timezone ID.\n // Note that we know this will be valid because the input value has already been validated with isDateConditionValid.\n var _value$split = value.split(' '),\n _value$split2 = _toArray(_value$split),\n dateTimeString = _value$split2[0],\n rest = _value$split2.slice(1);\n var tzCode = rest.join(' ');\n var tz = dh.i18n.TimeZone.getTimeZone(tzCode);\n formattedValue = \"\".concat(dateTimeString, \" \").concat(tz.id);\n }\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return \"\".concat(columnName, \" == '\").concat(formattedValue, \"'\");\n case DateCondition.IS_NOT_EXACTLY:\n return \"\".concat(columnName, \" != '\").concat(formattedValue, \"'\");\n case DateCondition.IS_BEFORE:\n return \"\".concat(columnName, \" < '\").concat(formattedValue, \"'\");\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return \"\".concat(columnName, \" <= '\").concat(formattedValue, \"'\");\n case DateCondition.IS_AFTER:\n return \"\".concat(columnName, \" > '\").concat(formattedValue, \"'\");\n case DateCondition.IS_AFTER_OR_EQUAL:\n return \"\".concat(columnName, \" >= '\").concat(formattedValue, \"'\");\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 _ref5;\n var config = _ref.config,\n formatterType = _ref.type;\n var column = config.column;\n // Check both name and type because the type can change\n var col = columns.find(_ref2 => {\n var name = _ref2.name,\n type = _ref2.type;\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 _ref3 = (_ref5 = formatterType === FormatterType.CONDITIONAL ? columnFormatConfigMap.get(col.name) : rowFormatConfig) !== null && _ref5 !== void 0 ? _ref5 : ['null', undefined],\n _ref4 = _slicedToArray(_ref3, 2),\n prevRule = _ref4[0],\n prevFormatColumn = _ref4[1];\n var rule = makeTernaryFormatRule(dh, 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 _split = (value !== null && value !== void 0 ? value : '').split(' '),\n _split2 = _toArray(_split),\n dateTimeString = _split2[0],\n rest = _split2.slice(1);\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(_ref6) {\n var type = _ref6.type;\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, { useRef } 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 _ref$animation = _ref.animation,\n animation = _ref$animation === void 0 ? 'iris-grid-bottom-bar-slide-up' : _ref$animation,\n children = _ref.children,\n className = _ref.className,\n isShown = _ref.isShown,\n onClick = _ref.onClick,\n onEntering = _ref.onEntering,\n onEntered = _ref.onEntered,\n onExiting = _ref.onExiting,\n onExited = _ref.onExited;\n var nodeRef = useRef(null);\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 nodeRef: nodeRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: nodeRef,\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport 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, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar HIDE_TIMEOUT = 3000;\nvar MAX_NUMBER_ROWS_SHOWN = 5;\nexport function PendingDataBottomBar(_ref) {\n var _ref$isSaving = _ref.isSaving,\n isSaving = _ref$isSaving === void 0 ? false : _ref$isSaving,\n onSave = _ref.onSave,\n onDiscard = _ref.onDiscard,\n discardTooltip = _ref.discardTooltip,\n saveTooltip = _ref.saveTooltip,\n error = _ref.error,\n pendingDataErrors = _ref.pendingDataErrors,\n pendingDataMap = _ref.pendingDataMap,\n onEntering = _ref.onEntering,\n onEntered = _ref.onEntered,\n onExiting = _ref.onExiting,\n _onExited = _ref.onExited;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isSuccessShown = _useState2[0],\n setIsSuccessShown = _useState2[1];\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n wasSuccessShown = _useState4[0],\n setWasSuccessShown = _useState4[1];\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(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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, 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 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 copyOperation = this.props.copyOperation;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n componentDidUpdate(prevProps) {\n var copyOperation = this.props.copyOperation;\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 copyOperation = this.props.copyOperation;\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 error = copyOperation.error;\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 ranges = copyOperation.ranges;\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 copyState = this.state.copyState;\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 _this3$props = _this3.props,\n model = _this3$props.model,\n copyOperation = _this3$props.copyOperation;\n if (isCopyHeaderOperation(copyOperation)) {\n var columnIndex = copyOperation.columnIndex,\n columnDepth = copyOperation.columnDepth,\n movedColumns = copyOperation.movedColumns;\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 ranges = copyOperation.ranges,\n includeHeaders = copyOperation.includeHeaders,\n userColumnWidths = copyOperation.userColumnWidths,\n _movedColumns = copyOperation.movedColumns,\n formatValues = copyOperation.formatValues;\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 _this$props = this.props,\n onEntering = _this$props.onEntering,\n onEntered = _this$props.onEntered,\n onExiting = _this$props.onExiting,\n onExited = _this$props.onExited;\n var _this$state = this.state,\n buttonState = _this$state.buttonState,\n copyState = _this$state.copyState,\n isShown = _this$state.isShown,\n rowCount = _this$state.rowCount,\n error = _this$state.error;\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/**\n * Different states for the current copy operation\n */\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(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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, 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 debounceMs = props.debounceMs;\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 value = props.value;\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 || _this$inputField.focus();\n }\n componentDidUpdate(prevProps) {\n var debounceMs = this.props.debounceMs;\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 || _this$inputField2.focus();\n }\n handleChange(event) {\n var value = event.target.value;\n this.setState({\n value,\n isChanged: true\n });\n this.debouncedSendUpdate(value);\n }\n handleCancel() {\n this.debouncedSendUpdate.cancel();\n var initialValue = this.initialValue;\n var isChanged = this.state.isChanged;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n var onDone = this.props.onDone;\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 onDone = this.props.onDone;\n onDone(setGridFocus, defocusInput);\n }\n handleFocus() {\n var _this$inputField3;\n (_this$inputField3 = this.inputField) === null || _this$inputField3 === void 0 || _this$inputField3.select();\n }\n handleBlur(event) {\n var relatedTarget = event.relatedTarget;\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 onTab = this.props.onTab;\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 onContextMenu = this.props.onContextMenu;\n onContextMenu(event);\n }\n sendUpdate(value) {\n var onChange = this.props.onChange;\n onChange(value);\n }\n render() {\n var _this$props = this.props,\n className = _this$props.className,\n style = _this$props.style,\n showAdvancedFilterButton = _this$props.showAdvancedFilterButton,\n isAdvancedFilterSet = _this$props.isAdvancedFilterSet,\n onAdvancedFiltersTriggered = _this$props.onAdvancedFiltersTriggered;\n var value = this.state.value;\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 }), showAdvancedFilterButton && /*#__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 showAdvancedFilterButton: false,\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(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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 _grid$state = grid.state,\n mouseX = _grid$state.mouseX,\n mouseY = _grid$state.mouseY;\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(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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 selectedRanges = this.irisGrid.state.selectedRanges;\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(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { KeyHandler } from '@deephaven/grid';\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 reverse = this.irisGrid.state.reverse;\n this.irisGrid.reverse(!reverse);\n return true;\n }\n return false;\n }\n}\nexport default ReverseKeyHandler;\n//# sourceMappingURL=ReverseKeyHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport 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 _ref$children = _ref.children,\n children = _ref$children === void 0 ? null : _ref$children,\n onEntering = _ref.onEntering,\n onEntered = _ref.onEntered,\n onExiting = _ref.onExiting,\n onExited = _ref.onExited;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isShown = _useState2[0],\n setIsShown = _useState2[1];\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 { useEffect, useMemo } from 'react';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport { useOnChange } from '@deephaven/react-hooks';\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport { isPartitionedGridModel } from \"./PartitionedGridModel.js\";\nimport { isIrisGridTreeTableModel } from \"./IrisGridTreeTableModel.js\";\nvar COLUMN_BUFFER_PAGES = 1;\n/**\n * React component to keep IrisGridModel in sync\n */\nfunction IrisGridModelUpdater(_ref) {\n var model = _ref.model,\n top = _ref.top,\n bottom = _ref.bottom,\n left = _ref.left,\n right = _ref.right,\n filter = _ref.filter,\n formatter = _ref.formatter,\n columnAlignmentMap = _ref.columnAlignmentMap,\n _ref$reverse = _ref.reverse,\n reverse = _ref$reverse === void 0 ? false : _ref$reverse,\n sorts = _ref.sorts,\n customColumns = _ref.customColumns,\n movedColumns = _ref.movedColumns,\n hiddenColumns = _ref.hiddenColumns,\n alwaysFetchColumns = _ref.alwaysFetchColumns,\n _ref$rollupConfig = _ref.rollupConfig,\n rollupConfig = _ref$rollupConfig === void 0 ? null : _ref$rollupConfig,\n _ref$totalsConfig = _ref.totalsConfig,\n totalsConfig = _ref$totalsConfig === void 0 ? null : _ref$totalsConfig,\n _ref$selectDistinctCo = _ref.selectDistinctColumns,\n selectDistinctColumns = _ref$selectDistinctCo === void 0 ? EMPTY_ARRAY : _ref$selectDistinctCo,\n _ref$pendingRowCount = _ref.pendingRowCount,\n pendingRowCount = _ref$pendingRowCount === void 0 ? 0 : _ref$pendingRowCount,\n _ref$pendingDataMap = _ref.pendingDataMap,\n pendingDataMap = _ref$pendingDataMap === void 0 ? EMPTY_MAP : _ref$pendingDataMap,\n frozenColumns = _ref.frozenColumns,\n formatColumns = _ref.formatColumns,\n columnHeaderGroups = _ref.columnHeaderGroups,\n partitionConfig = _ref.partitionConfig,\n showExtraGroupColumn = _ref.showExtraGroupColumn;\n var isTotalsAvailable = model.isTotalsAvailable,\n isRollupAvailable = model.isRollupAvailable;\n // Check for showExtraGroupColumn before memoizing columns, since updating it will change the columns\n useOnChange(() => {\n if (isIrisGridTreeTableModel(model) && showExtraGroupColumn != null) {\n model.showExtraGroupColumn = showExtraGroupColumn;\n }\n }, [model, showExtraGroupColumn]);\n var columns = useMemo(() => IrisGridUtils.getModelViewportColumns(model.columns, left, right, movedColumns, hiddenColumns, alwaysFetchColumns, COLUMN_BUFFER_PAGES), [model.columns, left, right, movedColumns, hiddenColumns, alwaysFetchColumns]);\n useOnChange(function updateFilter() {\n model.filter = filter;\n }, [model, filter]);\n useOnChange(function updateSorts() {\n var sortsForModel = [...sorts];\n if (reverse) {\n sortsForModel.push(model.dh.Table.reverse());\n }\n model.sort = sortsForModel;\n }, [model, sorts, reverse]);\n useOnChange(function updateFormatter() {\n model.formatter = formatter;\n }, [model, formatter]);\n useOnChange(function updateColumnAlignmentMap() {\n model.columnAlignmentMap = columnAlignmentMap;\n }, [model, columnAlignmentMap]);\n useOnChange(function updateCustomColumns() {\n if (model.isCustomColumnsAvailable) {\n model.customColumns = customColumns;\n }\n }, [model, customColumns]);\n useOnChange(function updateFormatColumns() {\n if (model.isFormatColumnsAvailable) {\n model.formatColumns = formatColumns;\n }\n }, [model, formatColumns]);\n useOnChange(function updateViewport() {\n model.setViewport(top, bottom, columns);\n }, [model, top, bottom, columns]);\n useOnChange(function updateRollupCOnfig() {\n if (isRollupAvailable) {\n model.rollupConfig = rollupConfig;\n }\n }, [model, isRollupAvailable, rollupConfig]);\n useOnChange(function updateSelectDistinctColumns() {\n if (model.isSelectDistinctAvailable) {\n model.selectDistinctColumns = selectDistinctColumns;\n }\n }, [model, selectDistinctColumns]);\n useOnChange(function updateTotalsConfig() {\n if (isTotalsAvailable) {\n model.totalsConfig = totalsConfig;\n }\n }, [model, isTotalsAvailable, totalsConfig]);\n useOnChange(function updateColumnHeaderGroups() {\n model.columnHeaderGroups = columnHeaderGroups;\n }, [model, columnHeaderGroups]);\n useOnChange(function updatePartitionConfig() {\n if (partitionConfig && isPartitionedGridModel(model)) {\n model.partitionConfig = partitionConfig;\n }\n }, [model, partitionConfig]);\n // These setters are wrapped in useEffect instead of useOnChange because they emit an event\n // that potentially causes side effects, violating the rule that render should be a pure function.\n useEffect(function updateFrozenColumns() {\n if (frozenColumns) {\n model.updateFrozenColumns(frozenColumns);\n }\n }, [model, frozenColumns]);\n useEffect(function updatePendingRowCount() {\n model.pendingRowCount = pendingRowCount;\n }, [model, pendingRowCount]);\n useEffect(function updatePendingDataMap() {\n model.pendingDataMap = pendingDataMap;\n }, [model, pendingDataMap]);\n return null;\n}\nIrisGridModelUpdater.displayName = 'IrisGridModelUpdater';\nexport default IrisGridModelUpdater;\n//# sourceMappingURL=IrisGridModelUpdater.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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 { isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport \"./ColumnStatistics.css\";\nimport { jsx as _jsx, jsxs as _jsxs, 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 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 _this$props = this.props,\n column = _this$props.column,\n model = _this$props.model;\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 _this$props2 = this.props,\n column = _this$props2.column,\n model = _this$props2.model;\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 _this$props3 = this.props,\n model = _this$props3.model,\n onStatistics = _this$props3.onStatistics;\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 _this$props4 = this.props,\n column = _this$props4.column,\n model = _this$props4.model;\n var _this$state = this.state,\n error = _this$state.error,\n loading = _this$state.loading,\n statistics = _this$state.statistics,\n numRows = _this$state.numRows;\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 _statistics$i = statistics[i],\n operation = _statistics$i.operation,\n className = _statistics$i.className,\n value = _statistics$i.value,\n type = _statistics$i.type;\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 tooltip: \"Copy column name\",\n copy: column.name,\n isQuiet: true\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 }), columnIndex != null && isEditableGridModel(model) && model.isEditable && !model.keyColumnSet.has(column.name) && !model.valueColumnSet.has(column.name) && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-status\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsLock,\n className: \"mr-1\"\n }), \"Not editable\"]\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/** Automatically generate the statistics when the row count is below this threshold */\n_defineProperty(ColumnStatistics, \"AUTO_GENERATE_LIMIT\", 100000);\nexport default ColumnStatistics;\n//# sourceMappingURL=ColumnStatistics.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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, Fragment as _Fragment, 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 || _this$searchField$cur.focus();\n }\n handleSearchValueChange(event) {\n var _this$props = this.props,\n onChange = _this$props.onChange,\n selectedColumns = _this$props.selectedColumns,\n invertSelection = _this$props.invertSelection;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n sendColumnChange(selectedColumns, invertSelection) {\n var _this$props2 = this.props,\n onChange = _this$props2.onChange,\n value = _this$props2.value;\n onChange(value, selectedColumns, invertSelection);\n }\n setInvertSelection(invertSelection) {\n var _this$props3 = this.props,\n onChange = _this$props3.onChange,\n value = _this$props3.value;\n onChange(value, [], invertSelection);\n }\n toggleColumn(name) {\n var _this$props4 = this.props,\n selectedColumns = _this$props4.selectedColumns,\n invertSelection = _this$props4.invertSelection;\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 columns = this.props.columns;\n this.sendColumnChange(columns.filter(c => TableUtils.isNumberType(c.type)).map(column => column.name), false);\n }\n render() {\n var _this$props5 = this.props,\n value = _this$props5.value,\n selectedColumns = _this$props5.selectedColumns,\n invertSelection = _this$props5.invertSelection,\n columns = _this$props5.columns;\n var isConfigureColumnsShown = this.state.isConfigureColumnsShown;\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(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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, 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 max: 100\n }));\n _defineProperty(this, \"getCachedFormatValueCallback\", memoizee(index => value => this.getDisplayValue(index, value), {\n max: 100\n }));\n this.handlePartitionTableClick = this.handlePartitionTableClick.bind(this);\n this.handleMergeClick = this.handleMergeClick.bind(this);\n this.handlePartitionSelect = this.handlePartitionSelect.bind(this);\n var model = props.model;\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 baseTable: null,\n keysTable: null,\n partitionTables: null\n };\n }\n componentDidMount() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var model = _this.props.model;\n try {\n var keysTable = yield _this.pending.add(model.partitionKeysTable().then(keyTable => keyTable), t => t.close());\n var baseTable = yield _this.pending.add(model.partitionBaseTable(), t => t.close());\n _this.setState({\n keysTable,\n baseTable,\n isLoading: false\n }, _this.updatePartitionOptions);\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 prevConfig = prevProps.partitionConfig;\n var partitionConfig = this.props.partitionConfig;\n if (prevConfig !== partitionConfig) {\n this.updatePartitionOptions();\n }\n }\n componentWillUnmount() {\n this.pending.cancel();\n var _this$state = this.state,\n keysTable = _this$state.keysTable,\n baseTable = _this$state.baseTable,\n partitionTables = _this$state.partitionTables;\n baseTable === null || baseTable === void 0 || baseTable.close();\n keysTable === null || keysTable === void 0 || keysTable.close();\n partitionTables === null || partitionTables === void 0 || partitionTables.forEach(table => table.close());\n }\n handlePartitionTableClick() {\n log.debug2('handlePartitionTableClick');\n var partitionConfig = this.props.partitionConfig;\n assertNotNull(partitionConfig);\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 partitionConfig = this.props.partitionConfig;\n assertNotNull(partitionConfig);\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 prevConfig = _this2.props.partitionConfig;\n assertNotNull(prevConfig);\n log.debug('handlePartitionSelect', index, selectedValue, prevConfig);\n var newPartitions = [...prevConfig.partitions];\n newPartitions[index] = selectedValue;\n var baseTable = _this2.state.baseTable;\n var keysTable = _this2.state.keysTable;\n assertNotNull(baseTable);\n assertNotNull(keysTable);\n try {\n _this2.setState({\n isLoading: true\n });\n var t = yield _this2.pending.add(baseTable.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: keysTable.columns.map(column => data.rows[0].get(column)),\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 onChange = this.props.onChange;\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 model = this.props.model;\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 options on the partition dropdown tables\n */\n updatePartitionOptions() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n var model = _this3.props.model;\n var prevConfig = _this3.props.partitionConfig;\n if (prevConfig == null) {\n return;\n }\n var keysTable = _this3.state.keysTable;\n assertNotNull(keysTable);\n var partitionFilters = [...prevConfig.partitions].map((partition, i) => {\n var partitionColumn = keysTable.columns[i];\n return _this3.tableUtils.makeNullableEqFilter(partitionColumn, partition);\n });\n var partitionTables = yield Promise.all(model.partitionColumns.map(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (_, i) {\n keysTable.applyFilter(partitionFilters.slice(0, i));\n return keysTable.selectDistinct(model.partitionColumns.slice(0, i + 1));\n });\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }()));\n _this3.setState({\n partitionTables\n });\n })();\n }\n getPartitionFilters(partitionTables) {\n var _this$props = this.props,\n model = _this$props.model,\n partitionConfig = _this$props.partitionConfig;\n assertNotNull(partitionConfig);\n var partitions = partitionConfig.partitions;\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 _this$props2 = this.props,\n model = _this$props2.model,\n partitionConfig = _this$props2.partitionConfig;\n var _this$state2 = this.state,\n isLoading = _this$state2.isLoading,\n partitionTables = _this$state2.partitionTables;\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 selectedKey: (partitionConfig === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) === 'partition' ? partitionConfig.partitions[index] : null,\n placeholder: \"Select a key\",\n labelColumn: partitionTables[index].columns[index].name,\n onChange: this.getCachedChangeCallback(index),\n isDisabled: isLoading || partitionConfig == null\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__*/_jsxs(\"div\", {\n className: \"partition-button-group\",\n children: [/*#__PURE__*/_jsx(Button, {\n onClick: this.handlePartitionTableClick,\n kind: \"inline\",\n tooltip: model.isPartitionAwareSourceTable ? 'View keys as table' : 'View underlying partition table',\n icon: vsKey,\n active: (partitionConfig === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) === 'keys',\n disabled: isLoading || partitionConfig == null,\n children: \"Partitions\"\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 === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) === 'merged',\n disabled: isLoading || partitionConfig == null,\n children: model.isPartitionAwareSourceTable ? 'Coalesce' : 'Merge'\n })]\n }), partitionSelectors]\n });\n }\n}\nexport default IrisGridPartitionSelector;\n//# sourceMappingURL=IrisGridPartitionSelector.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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, 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 _this$props = this.props,\n model = _this$props.model,\n selectDistinctColumns = _this$props.selectDistinctColumns;\n this.state = {\n inputs: selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns\n };\n }\n componentDidUpdate(prevProps, prevState) {\n var inputs = this.state.inputs;\n var onChange = this.props.onChange;\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 prevInputs = _ref.inputs;\n return {\n inputs: [...prevInputs, '']\n };\n });\n }\n handleDeleteColumn(index) {\n this.setState(_ref2 => {\n var inputs = _ref2.inputs;\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 prevInputs = _ref3.inputs;\n var inputs = [...prevInputs];\n inputs[index] = value;\n return {\n inputs\n };\n });\n }\n renderInputs() {\n var _this$state = this.state,\n columns = _this$state.columns,\n inputs = _this$state.inputs;\n return inputs.map((value, index) => {\n var options = columns.filter(_ref4 => {\n var name = _ref4.name;\n return name === value || !inputs.includes(name);\n }).map(_ref5 => {\n var name = _ref5.name;\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 _this$state2 = this.state,\n columns = _this$state2.columns,\n inputs = _this$state2.inputs;\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 Log from '@deephaven/log';\nimport { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('PluginTableOptionsErrorBoundary');\n/**\n * Tiny error boundary scoped to a single plugin-supplied sidebar page.\n * If the plugin's `configPage` throws during render, we log the error\n * once and render a minimal fallback (\"<name> failed to render:\" + the\n * thrown message) rather than tearing down the entire `IrisGrid`\n * subtree or leaving a blank panel. Used only by the page-switch\n * `default` case in `IrisGrid.tsx`.\n */\nexport default class PluginTableOptionsErrorBoundary extends React.Component {\n static getDerivedStateFromError(error) {\n return {\n error\n };\n }\n constructor(props) {\n super(props);\n this.state = {\n error: null\n };\n }\n componentDidCatch(error, info) {\n var itemType = this.props.itemType;\n log.error(\"Plugin sidebar page \\\"\".concat(itemType, \"\\\" threw during render; suppressing.\"), error, info);\n }\n render() {\n var error = this.state.error;\n var _this$props = this.props,\n children = _this$props.children,\n itemType = _this$props.itemType;\n if (error == null) {\n return children;\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"plugin-sidebar-error\",\n role: \"alert\",\n \"data-testid\": \"plugin-sidebar-error\",\n children: [/*#__PURE__*/_jsxs(\"p\", {\n children: [itemType, \" failed to render:\"]\n }), /*#__PURE__*/_jsx(\"p\", {\n children: error.message\n })]\n });\n }\n}\n//# sourceMappingURL=PluginTableOptionsErrorBoundary.js.map","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport 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 items = _ref.items,\n _ref$onChange = _ref.onChange,\n _onChange = _ref$onChange === void 0 ? () => undefined : _ref$onChange;\n return /*#__PURE__*/_jsx(Menu, {\n items: Array.from(items.entries()).map(_ref2 => {\n var _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n isOn = _ref3[1];\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(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { useCallback } from 'react';\nimport { DragDropContext, Draggable, Droppable } from '@hello-pangea/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, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionalFormattingMenu');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction getRuleValue(config) {\n var type = config.column.type;\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 _props$rules = props.rules,\n rules = _props$rules === void 0 ? [] : _props$rules,\n _props$onChange = props.onChange,\n onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange,\n _props$onCreate = props.onCreate,\n onCreate = _props$onCreate === void 0 ? DEFAULT_CALLBACK : _props$onCreate,\n _props$onSelect = props.onSelect,\n onSelect = _props$onSelect === void 0 ? DEFAULT_CALLBACK : _props$onSelect;\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport classNames from 'classnames';\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, 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, isInvalid, 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: classNames('form-control', {\n 'is-invalid': isInvalid\n }),\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: classNames('form-control', 'd-flex', 'mr-2', {\n 'is-invalid': isInvalid\n }),\n placeholder: \"Start value\",\n value: startValue !== null && startValue !== void 0 ? startValue : '',\n onChange: handleStartValueChange\n }), /*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: classNames('form-control', 'd-flex', {\n 'is-invalid': isInvalid\n }),\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, isInvalid, 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: classNames('form-control', {\n 'is-invalid': isInvalid\n }),\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction getDateInputs(selectedCondition, handleValueChange, isInvalid, 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: classNames('form-control', {\n 'is-invalid': isInvalid\n }),\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, isInvalid, 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: classNames('form-control', {\n 'is-invalid': isInvalid\n }),\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 column = props.column,\n config = props.config,\n dh = props.dh,\n _props$onChange = props.onChange,\n onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;\n var selectedColumnType = column.type;\n var _useState = useState(selectedColumnType),\n _useState2 = _slicedToArray(_useState, 2),\n prevColumnType = _useState2[0],\n setPrevColumnType = _useState2[1];\n var _useState3 = useState(config.condition),\n _useState4 = _slicedToArray(_useState3, 2),\n selectedCondition = _useState4[0],\n setCondition = _useState4[1];\n var _useState5 = useState(config.value),\n _useState6 = _slicedToArray(_useState5, 2),\n conditionValue = _useState6[0],\n setValue = _useState6[1];\n var _useState7 = useState(config.start),\n _useState8 = _slicedToArray(_useState7, 2),\n startValue = _useState8[0],\n setStartValue = _useState8[1];\n var _useState9 = useState(config.end),\n _useState0 = _slicedToArray(_useState9, 2),\n endValue = _useState0[0],\n setEndValue = _useState0[1];\n var _useState1 = useState(true),\n _useState10 = _slicedToArray(_useState1, 2),\n isValid = _useState10[0],\n setIsValid = _useState10[1];\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 value = e.target.value;\n log.debug('handleValueChange', value);\n setValue(value);\n }, []);\n var handleStartValueChange = useCallback(e => {\n var value = e.target.value;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n }, []);\n var handleEndValueChange = useCallback(e => {\n var value = e.target.value;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n }, []);\n useEffect(function changeCondition() {\n var isConditionValid = true;\n if (selectedCondition === undefined) {\n log.debug('Unable to create formatting rule. Condition is not selected.');\n isConditionValid = 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 isConditionValid = 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 isConditionValid = false;\n }\n setIsValid(isConditionValid);\n onChange({\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue\n }, isConditionValid);\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\n // Show invalid state only when there's a non-empty value that fails validation\n var hasInvalidValue = !isValid && conditionValue !== undefined && conditionValue !== '';\n if (TableUtils.isNumberType(selectedColumnType)) {\n // For IS_BETWEEN, show invalid on each field only if that field has a value\n var showInvalid = selectedCondition === NumberCondition.IS_BETWEEN ? !isValid && (startValue !== undefined && startValue !== '' || endValue !== undefined && endValue !== '') : hasInvalidValue;\n return getNumberInputs(selectedCondition, handleValueChange, handleStartValueChange, handleEndValueChange, showInvalid, conditionValue, startValue, endValue);\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(selectedCondition, handleValueChange, hasInvalidValue, conditionValue);\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(selectedCondition, handleValueChange, hasInvalidValue, conditionValue);\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(selectedCondition, handleValueChange, hasInvalidValue, conditionValue);\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [selectedColumnType, selectedCondition, conditionValue, startValue, endValue, isValid, 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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport 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, 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 config = props.config,\n _props$onChange = props.onChange,\n onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;\n var _useState = useState(config.type),\n _useState2 = _slicedToArray(_useState, 2),\n styleType = _useState2[0],\n setStyleType = _useState2[1];\n var _useState3 = 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 _useState4 = _slicedToArray(_useState3, 2),\n background = _useState4[0],\n setBackground = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isShown = _useState6[0],\n setShown = _useState6[1];\n var _useState7 = useState(DEFAULT_DROPDOWN_WIDTH),\n _useState8 = _slicedToArray(_useState7, 2),\n dropdownWidth = _useState8[0],\n setDropdownWidth = _useState8[1];\n var csContainer = useRef(null);\n var handleBackgroundChange = useCallback(e => {\n var value = e.target.value;\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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('ColumnFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction makeDefaultConfig(columns) {\n var _columns$ = columns[0],\n type = _columns$.type,\n name = _columns$.name;\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 columns = props.columns,\n _props$config = props.config,\n config = _props$config === void 0 ? makeDefaultConfig(columns) : _props$config,\n dh = props.dh,\n _props$onChange = props.onChange,\n onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;\n var _useState = 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 _useState2 = _slicedToArray(_useState, 2),\n selectedColumn = _useState2[0],\n setColumn = _useState2[1];\n var _useState3 = useState(getConditionConfig(config)),\n _useState4 = _slicedToArray(_useState3, 2),\n conditionConfig = _useState4[0],\n setConditionConfig = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n conditionValid = _useState6[0],\n setConditionValid = _useState6[1];\n var _useState7 = useState(config.style),\n _useState8 = _slicedToArray(_useState7, 2),\n selectedStyle = _useState8[0],\n setStyle = _useState8[1];\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var name = _ref.name;\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 type = selectedColumn.type,\n name = selectedColumn.name;\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 name = _ref2.name;\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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\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, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('RowFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction makeDefaultConfig(columns) {\n var _columns$ = columns[0],\n type = _columns$.type,\n name = _columns$.name;\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 columns = props.columns,\n _props$config = props.config,\n config = _props$config === void 0 ? makeDefaultConfig(columns) : _props$config,\n dh = props.dh,\n _props$onChange = props.onChange,\n onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;\n var _useState = 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 _useState2 = _slicedToArray(_useState, 2),\n selectedColumn = _useState2[0],\n setColumn = _useState2[1];\n var _useState3 = useState(getConditionConfig(config)),\n _useState4 = _slicedToArray(_useState3, 2),\n conditionConfig = _useState4[0],\n setConditionConfig = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n conditionValid = _useState6[0],\n setConditionValid = _useState6[1];\n var _useState7 = useState(config.style),\n _useState8 = _slicedToArray(_useState7, 2),\n selectedStyle = _useState8[0],\n setStyle = _useState8[1];\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var name = _ref.name;\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 type = selectedColumn.type,\n name = selectedColumn.name;\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 name = _ref2.name;\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport 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, 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 originalColumns = props.columns,\n dh = props.dh,\n _props$onSave = props.onSave,\n onSave = _props$onSave === void 0 ? DEFAULT_CALLBACK : _props$onSave,\n _props$onUpdate = props.onUpdate,\n onUpdate = _props$onUpdate === void 0 ? DEFAULT_CALLBACK : _props$onUpdate,\n _props$onCancel = props.onCancel,\n onCancel = _props$onCancel === void 0 ? DEFAULT_CALLBACK : _props$onCancel,\n defaultRule = props.rule;\n var columns = originalColumns.filter(isSupportedColumn);\n var _useState = useState((_defaultRule$type = defaultRule === null || defaultRule === void 0 ? void 0 : defaultRule.type) !== null && _defaultRule$type !== void 0 ? _defaultRule$type : formatterTypes[0]),\n _useState2 = _slicedToArray(_useState, 2),\n selectedFormatter = _useState2[0],\n setFormatter = _useState2[1];\n var _useState3 = useState(defaultRule),\n _useState4 = _slicedToArray(_useState3, 2),\n rule = _useState4[0],\n setRule = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isValid = _useState6[0],\n setIsValid = _useState6[1];\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport React, { useEffect, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Editor } from '@deephaven/console';\nimport { CopyButton, Icon, Modal, ModalBody, ModalHeader, ToggleButton, Tooltip } from '@deephaven/components';\nimport { vsJson, vsListOrdered } from '@deephaven/icons';\nimport \"./IrisGridCellOverflowModal.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function IrisGridCellOverflowModal(_ref) {\n var _editorRef$current$ge, _editorRef$current2;\n var text = _ref.text,\n isOpen = _ref.isOpen,\n onClose = _ref.onClose;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isOpened = _useState2[0],\n setIsOpened = _useState2[1];\n var _useState3 = useState(0),\n _useState4 = _slicedToArray(_useState3, 2),\n height = _useState4[0],\n setHeight = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n showLineNumbers = _useState6[0],\n setShowLineNumbers = _useState6[1];\n var _useState7 = useState(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isFormatted = _useState8[0],\n setIsFormatted = _useState8[1];\n var _useState9 = useState(false),\n _useState0 = _slicedToArray(_useState9, 2),\n canFormat = _useState0[0],\n setCanFormat = _useState0[1];\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 var _document$activeEleme;\n editorRef.current = editor;\n setHeight(editor.getContentHeight());\n editor.onDidContentSizeChange(_ref2 => {\n var contentHeight = _ref2.contentHeight;\n return setHeight(contentHeight);\n });\n autoSetLineNumbers();\n (_document$activeEleme = document.activeElement) === null || _document$activeEleme === void 0 || _document$activeEleme.blur();\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 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__*/_jsxs(ToggleButton, {\n isSelected: showLineNumbers,\n \"aria-label\": \"Toggle line numbers\",\n onChange: toggleLineNumbers,\n children: [/*#__PURE__*/_jsx(Icon, {\n UNSAFE_className: \"action-button-icon-with-tooltip\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsListOrdered\n })\n }), /*#__PURE__*/_jsx(Tooltip, {\n children: \"Toggle line numbers\"\n })]\n }), canFormat && /*#__PURE__*/_jsxs(ToggleButton, {\n isSelected: isFormatted,\n \"aria-label\": \"Format as JSON\",\n onChange: formatAsJSON,\n children: [/*#__PURE__*/_jsx(Icon, {\n UNSAFE_className: \"action-button-icon-with-tooltip\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsJson\n })\n }), /*#__PURE__*/_jsx(Tooltip, {\n children: \"Format as JSON\"\n })]\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport { 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 { isIrisGridTableModelTemplate } from \"./IrisGridTableModelTemplate.js\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar DEFAULT_FORMAT_STRING = '###,##0';\nvar GotoRow = /*#__PURE__*/forwardRef((_ref, ref) => {\n var gotoRow = _ref.gotoRow,\n gotoRowError = _ref.gotoRowError,\n gotoValueError = _ref.gotoValueError,\n onGotoRowSubmit = _ref.onGotoRowSubmit,\n isShown = _ref.isShown,\n onEntering = _ref.onEntering,\n _onEntered = _ref.onEntered,\n onExiting = _ref.onExiting,\n onExited = _ref.onExited,\n model = _ref.model,\n onGotoRowNumberChanged = _ref.onGotoRowNumberChanged,\n onClose = _ref.onClose,\n gotoValueSelectedColumnName = _ref.gotoValueSelectedColumnName,\n gotoValue = _ref.gotoValue,\n gotoValueFilter = _ref.gotoValueFilter,\n onGotoValueSelectedColumnNameChanged = _ref.onGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged = _ref.onGotoValueSelectedFilterChanged,\n onGotoValueChanged = _ref.onGotoValueChanged,\n onGotoValueSubmit = _ref.onGotoValueSubmit;\n var gotoRowInputRef = useRef(null);\n var gotoValueInputRef = useRef(null);\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isGotoRowActive = _useState2[0],\n setIsGotoRowActive = _useState2[1];\n var columns = [];\n if (isIrisGridTableModelTemplate(model)) {\n columns = model.table.columns;\n }\n var dh = model.dh,\n rowCount = model.rowCount;\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 || _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 || _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 || _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","import { Button, GLOBAL_SHORTCUTS, Modal, ModalBody, ModalFooter, ModalHeader } from '@deephaven/components';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function NoPastePermissionModal(_ref) {\n var isOpen = _ref.isOpen,\n onClose = _ref.onClose,\n errorMessage = _ref.errorMessage;\n var pasteShortcutText = GLOBAL_SHORTCUTS.PASTE.getDisplayText();\n return /*#__PURE__*/_jsxs(Modal, {\n isOpen: isOpen,\n toggle: onClose,\n centered: true,\n children: [/*#__PURE__*/_jsx(ModalHeader, {\n closeButton: false,\n children: \"No Paste Permission\"\n }), /*#__PURE__*/_jsxs(ModalBody, {\n children: [/*#__PURE__*/_jsx(\"p\", {\n children: errorMessage\n }), /*#__PURE__*/_jsxs(\"p\", {\n children: [\"You can still use \", pasteShortcutText, \" to paste.\"]\n })]\n }), /*#__PURE__*/_jsx(ModalFooter, {\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: onClose,\n children: \"Dismiss\"\n })\n })]\n });\n}\n//# sourceMappingURL=NoPastePermissionModal.js.map","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component } from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\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, isExpandableColumnGridModel } 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, IrisGridPartitionedTableMouseHandler, 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 PluginTableOptionsErrorBoundary from \"./sidebar/PluginTableOptionsErrorBoundary.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 { IrisGridThemeContext } from \"./IrisGridThemeProvider.js\";\nimport { isMissingPartitionError } from \"./MissingPartitionError.js\";\nimport { NoPastePermissionModal } from \"./NoPastePermissionModal.js\";\nimport { isColumnHeaderGroup } from \"./ColumnHeaderGroup.js\";\nimport { jsx as _jsx, Fragment as _Fragment, 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 advancedFilters = _ref.advancedFilters,\n aggregationSettings = _ref.aggregationSettings,\n customColumns = _ref.customColumns,\n quickFilters = _ref.quickFilters,\n reverse = _ref.reverse,\n rollupConfig = _ref.rollupConfig,\n searchFilter = _ref.searchFilter,\n selectDistinctColumns = _ref.selectDistinctColumns,\n sorts = _ref.sorts;\n return advancedFilters.size === 0 && aggregationSettings.aggregations.length === 0 && customColumns.length === 0 && quickFilters.size === 0 && !reverse && rollupConfig == null && searchFilter == null && selectDistinctColumns.length === 0 && sorts.length === 0;\n}\n\n/**\n * The subset of `IrisGridProps` that overrides how the grid presents its\n * model: theme, canvas renderer, extra mouse handlers, and the metric\n * calculator factory. Hosts that render `<IrisGrid>` on behalf of a plugin\n * (e.g. `GridWidgetPlugin`) accept this as a single passthrough bag so they\n * don't need to know each view concern by name, and plugins build it from\n * their own hooks. Kept as a `Pick` (not `Partial<IrisGridProps>`) so it can\n * never clobber structural props like `model` or `ref`.\n */\n\nclass IrisGrid extends Component {\n constructor(props) {\n var _model$layoutHints, _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, \"showExtraGroupColumn\", void 0);\n // When the loading scrim started/when it should extend to the end of the screen.\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 /**\n * The metric calculator factory most recently used to instantiate the\n * calculator currently stored in state. Used by `maybeRebuildMetricCalculator`\n * (called from `componentDidUpdate` when the `getMetricCalculator` prop\n * changes) to detect when a different factory is supplied and rebuild.\n */\n _defineProperty(this, \"lastMetricCalculatorFactory\", void 0);\n _defineProperty(this, \"slideTransitionRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"bottomTransitionRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"getAdvancedMenuOpenedHandler\", memoize(column => this.handleAdvancedMenuOpened.bind(this, column), {\n max: 100\n }));\n _defineProperty(this, \"getAdvancedMenuToggleMaximizeHandler\", memoize(column => this.handleAdvancedFilterToggleMaximize.bind(this, column), {\n max: 100\n }));\n _defineProperty(this, \"getCachedAdvancedFilterMenuActions\", memoize((model, column, advancedFilterOptions, sortDirection, formatter, isMaximized, onToggleMaximize) => /*#__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 isMaximized: isMaximized,\n onToggleMaximize: onToggleMaximize\n }), {\n max: 50\n }));\n _defineProperty(this, \"getCachedOptionItems\", memoize((isChartBuilderAvailable, isCustomColumnsAvailable, isFormatColumnsAvailable, isOrganizeColumnsAvailable, 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 order: 100\n });\n }\n if (isOrganizeColumnsAvailable) {\n optionItems.push({\n type: OptionType.VISIBILITY_ORDERING_BUILDER,\n title: 'Organize Columns',\n icon: dhEye,\n order: 200\n });\n }\n if (isFormatColumnsAvailable) {\n optionItems.push({\n type: OptionType.CONDITIONAL_FORMATTING,\n title: 'Conditional Formatting',\n icon: vsEdit,\n order: 300\n });\n }\n if (isCustomColumnsAvailable) {\n optionItems.push({\n type: OptionType.CUSTOM_COLUMN_BUILDER,\n title: 'Custom Columns',\n icon: vsSplitHorizontal,\n order: 400\n });\n }\n if (isRollupAvailable) {\n optionItems.push({\n type: OptionType.ROLLUP_ROWS,\n title: 'Rollup Rows',\n icon: dhTriangleDownSquare,\n order: 500\n });\n }\n if (isTotalsAvailable) {\n optionItems.push({\n type: OptionType.AGGREGATIONS,\n title: 'Aggregate Columns',\n icon: vsSymbolOperator,\n order: 600\n });\n }\n if (isSelectDistinctAvailable) {\n optionItems.push({\n type: OptionType.SELECT_DISTINCT,\n title: 'Select Distinct Values',\n icon: vsRuby,\n order: 700\n });\n }\n if (isExportAvailable && canDownloadCsv) {\n optionItems.push({\n type: OptionType.TABLE_EXPORTER,\n title: 'Download CSV',\n icon: vsCloudDownload,\n order: 800\n });\n }\n if (hasAdvancedSettings) {\n optionItems.push({\n type: OptionType.ADVANCED_SETTINGS,\n title: 'Advanced Settings',\n icon: vsTools,\n order: 900\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 order: 1000\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 order: 1100\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 order: 1200\n });\n return Object.freeze(optionItems);\n }, {\n max: 1\n }));\n /**\n * Apply the `transformTableOptions` transform (if any) to the\n * default option list.\n * Catches exceptions so a buggy plugin can't break the grid, and collapses\n * duplicate `type` entries (last writer wins) before sorting by `order`.\n */\n _defineProperty(this, \"getCachedTransformedOptionItems\", memoize((items, transformTableOptions) => {\n if (transformTableOptions == null) {\n return items;\n }\n var transformedItems;\n try {\n transformedItems = transformTableOptions(items);\n } catch (err) {\n log.error('transformTableOptions threw an error; falling back to defaults.', err);\n return items;\n }\n // Collapse duplicate `type` entries before sorting. A duplicate `type`\n // would otherwise collide on the `<Menu>` / `<Page>` React key and cause\n // incorrect page reuse. Per the documented composition rule (see the\n // package README), the last writer wins: a later entry — e.g. from a\n // downstream middleware — overrides an earlier one with the same type.\n // `Map.set` keeps the most recent value while preserving the original\n // insertion slot, so an override stays in place unless it changes\n // `order`.\n var byType = new Map();\n transformedItems.forEach(item => {\n byType.set(String(item.type), item);\n });\n // Stably sort by ascending `order`. Items without an `order` sink to\n // the end of the menu (default `Infinity`), while items with an `order`\n // are positioned by their weight. Decorate-sort-undecorate guarantees\n // stability regardless of the engine's sort implementation.\n var sortedItems = [...byType.values()].map((item, index) => ({\n item,\n index\n })).sort((a, b) => {\n var _a$item$order, _b$item$order;\n return ((_a$item$order = a.item.order) !== null && _a$item$order !== void 0 ? _a$item$order : Infinity) - ((_b$item$order = b.item.order) !== null && _b$item$order !== void 0 ? _b$item$order : Infinity) || a.index - b.index;\n }).map(_ref2 => {\n var item = _ref2.item;\n return item;\n });\n return Object.freeze(sortedItems);\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, \"getCachedHiddenColumnNames\", memoize((hiddenColumns, columns) => Object.freeze(hiddenColumns.map(idx => {\n var _columns$idx;\n return (_columns$idx = columns[idx]) === null || _columns$idx === void 0 ? void 0 : _columns$idx.name;\n }).filter(n => n != null)), {\n max: 1\n }));\n _defineProperty(this, \"getCachedViewState\", memoize(hiddenColumns => Object.freeze({\n hiddenColumns\n }), {\n max: 1\n }));\n _defineProperty(this, \"getAggregationMap\", memoize((columns, aggregations) => {\n var aggregationMap = {};\n aggregations.forEach(_ref3 => {\n var operation = _ref3.operation,\n selected = _ref3.selected,\n invert = _ref3.invert;\n aggregationMap[operation] = AggregationUtils.getOperationColumnNames(columns, operation, selected, invert);\n });\n return aggregationMap;\n }, {\n max: 1\n }));\n _defineProperty(this, \"getOperationMap\", memoize((columns, aggregations) => IrisGridUtils.getOperationMap(columns, aggregations), {\n max: 1\n }));\n _defineProperty(this, \"getOperationOrder\", memoize(aggregations => IrisGridUtils.getOperationOrder(aggregations), {\n max: 1\n }));\n _defineProperty(this, \"getCachedFormatColumns\", memoize((dh, columns, rules) => getFormatColumns(dh, columns, rules), {\n max: 1000\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 _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 max: 1\n }));\n _defineProperty(this, \"getModelRollupConfig\", memoize((originalColumns, config, aggregationSettings) => IrisGridUtils.getModelRollupConfig(originalColumns, config, aggregationSettings), {\n max: 1\n }));\n _defineProperty(this, \"getModelTotalsConfig\", memoize((columns, config, aggregationSettings) => IrisGridUtils.getModelTotalsConfig(columns, config, aggregationSettings), {\n max: 1\n }));\n _defineProperty(this, \"getCachedStateOverride\", memoize((model, theme, hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, rollupConfig, isMenuShown) => ({\n model,\n theme,\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverse,\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, density) => {\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, use the default theme.\n var baseTheme = 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 : baseTheme.rowFooterWidth : 0;\n var metricCalculator = this.state.metricCalculator;\n if (metricCalculator != null) {\n metricCalculator.resetCalculatedColumnWidths();\n metricCalculator.resetCalculatedRowHeights();\n }\n var densityTheme = {};\n if (density === 'compact') {\n densityTheme = baseTheme.density.compact;\n } else if (density === 'spacious') {\n densityTheme = baseTheme.density.spacious;\n }\n return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, baseTheme), densityTheme), 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 max: 1\n }));\n _defineProperty(this, \"getCachedMouseHandlers\", memoize(mouseHandlersProp => [...mouseHandlersProp, ...this.mouseHandlers].map(handler => typeof handler === 'function' ? handler(this) : handler), {\n max: 1\n }));\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 max: 1\n }));\n _defineProperty(this, \"updateSearchFilter\", debounce((searchValue, selectedSearchColumns, columns, invertSearchColumns) => {\n var model = this.props.model;\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 model = this.props.model;\n var loadingSpinnerShown = this.state.loadingSpinnerShown;\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 // Apply live changes\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 tableDownloadStatus = this.state.tableDownloadStatus;\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 max: 1\n }));\n _defineProperty(this, \"getExpandCellTooltip\", memoize(expandCellTooltipProps => {\n if (expandCellTooltipProps == null) {\n return null;\n }\n var expandTooltipDisplayValue = this.state.expandTooltipDisplayValue;\n var model = this.props.model;\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 max: 1\n }));\n _defineProperty(this, \"getHoverTooltip\", memoize(hoverTooltipProps => {\n if (hoverTooltipProps == null) {\n return null;\n }\n var hoverDisplayValue = this.state.hoverDisplayValue;\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, hoverTooltipProps), {}, {\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__*/_jsx(\"div\", {\n className: \"link-hover-tooltip\",\n children: hoverDisplayValue\n })\n })\n });\n }, {\n max: 1\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.handleAdvancedFilterToggleMaximize = this.handleAdvancedFilterToggleMaximize.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.handlePending = this.handlePending.bind(this);\n this.handlePendingCleared = this.handlePendingCleared.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.handleTableChanged = this.handleTableChanged.bind(this);\n this.handleSchemaChanged = this.handleSchemaChanged.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.handleColumnAlignmentChange = this.handleColumnAlignmentChange.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.handleCloseNoPastePermissionModal = this.handleCloseNoPastePermissionModal.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.setFilterMap = this.setFilterMap.bind(this);\n this.handleFrozenColumnsChanged = this.handleFrozenColumnsChanged.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 this.showExtraGroupColumn = 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 model = this.props.model;\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 model = this.props.model;\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 _aggregationSettings = props.aggregationSettings,\n conditionalFormats = props.conditionalFormats,\n customColumnFormatMap = props.customColumnFormatMap,\n columnAlignmentMap = props.columnAlignmentMap,\n _isFilterBarShown = props.isFilterBarShown,\n isSelectingPartition = props.isSelectingPartition,\n partitions = props.partitions,\n partitionConfig = props.partitionConfig,\n _model = props.model,\n movedColumnsProp = props.movedColumns,\n movedRowsProp = props.movedRows,\n _rollupConfig = props.rollupConfig,\n _userColumnWidths = props.userColumnWidths,\n userColumnWidthsByName = props.userColumnWidthsByName,\n userRowHeights = props.userRowHeights,\n _showSearchBar = props.showSearchBar,\n _searchValue = props.searchValue,\n _selectedSearchColumns = props.selectedSearchColumns,\n _invertSearchColumns = props.invertSearchColumns,\n _advancedFilters = props.advancedFilters,\n _quickFilters = props.quickFilters,\n selectDistinctColumns = props.selectDistinctColumns,\n pendingDataMap = props.pendingDataMap,\n canCopy = props.canCopy,\n frozenColumns = props.frozenColumns,\n columnHeaderGroups = props.columnHeaderGroups,\n getMetricCalculator = props.getMetricCalculator;\n var _dh = _model.dh;\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), new IrisGridPartitionedTableMouseHandler(this), ...(canCopy ? [new IrisGridCopyCellMouseHandler(this)] : [])];\n if (canCopy) {\n _keyHandlers.push(new CopyKeyHandler(this));\n }\n var _movedColumns = movedColumnsProp.length > 0 ? movedColumnsProp : _model.initialMovedColumns;\n var movedRows = movedRowsProp.length > 0 ? movedRowsProp : _model.initialMovedRows;\n var _metricCalculator = getMetricCalculator({\n userColumnWidths: new Map(_userColumnWidths),\n userColumnWidthsByName: userColumnWidthsByName != null ? new Map(userColumnWidthsByName) : undefined,\n userRowHeights: new Map(userRowHeights),\n movedColumns: _movedColumns,\n initialColumnWidths: new Map(_model === null || _model === void 0 || (_model$layoutHints = _model.layoutHints) === null || _model$layoutHints === void 0 || (_model$layoutHints = _model$layoutHints.hiddenColumns) === null || _model$layoutHints === void 0 ? void 0 : _model$layoutHints.map(name => [_model.getColumnIndexByName(name), 0]))\n });\n // Remember the factory we used so `maybeRebuildMetricCalculator` (called\n // from `componentDidUpdate` when the `getMetricCalculator` prop changes)\n // can detect a model-driven swap, e.g. pivot-builder's proxy swapping its\n // inner model.\n this.lastMetricCalculatorFactory = getMetricCalculator;\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 maximizedAdvancedFilter: null,\n hoverAdvancedFilter: null,\n sorts: [],\n reverse: false,\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 columnAlignmentMap: new Map(columnAlignmentMap),\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:\n // Pin aggregations to the top if the grid is editable, so that the bottom is reserved for pending rows\n isEditableGridModel(_model) && _model.isEditable ? _objectSpread(_objectSpread({}, _aggregationSettings), {}, {\n showOnTop: true\n }) : _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 showNoPastePermissionModal: false,\n noPastePermissionError: '',\n overflowText: '',\n overflowButtonTooltipProps: null,\n expandCellTooltipProps: null,\n expandTooltipDisplayValue: 'expand',\n hoverTooltipProps: null,\n hoverDisplayValue: '',\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 model = this.props.model;\n this.initState();\n this.startListening(model);\n }\n componentDidUpdate(prevProps, prevState) {\n var _this$props = this.props,\n inputFilters = _this$props.inputFilters,\n isSelectingColumn = _this$props.isSelectingColumn,\n settings = _this$props.settings,\n model = _this$props.model,\n customFilters = _this$props.customFilters,\n sorts = _this$props.sorts,\n getMetricCalculator = _this$props.getMetricCalculator;\n if (model !== prevProps.model) {\n this.stopListening(prevProps.model);\n this.startListening(model);\n }\n\n // The renderer and mouse handlers flow through memoized getters in\n // render(), so a `renderer` / `mouseHandlers` prop change naturally\n // propagates on the next render. The metric calculator, however, lives in\n // component state, so mirror that path when the `getMetricCalculator` prop\n // changes (e.g. the pivot-builder middleware swapping the pivot factory in\n // or out) so the calculator stays in sync. Moved columns are not touched\n // here — a model swap resets them via `handleSchemaChanged`.\n if (getMetricCalculator !== prevProps.getMetricCalculator) {\n this.maybeRebuildMetricCalculator();\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 advancedSettings = this.props.advancedSettings;\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 var isChanged = this.applyInputFilters(changedInputFilters, replaceExistingFilters);\n if (isChanged) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n }\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 loadingScrimStartTime = this.loadingScrimStartTime,\n loadingScrimFinishTime = this.loadingScrimFinishTime;\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 openOptions = this.state.openOptions;\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 model = this.props.model;\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 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 getKeyHandlers() {\n var keyHandlers = this.props.keyHandlers;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n getMetricState() {\n var _this$grid2;\n var gridMetricState = (_this$grid2 = this.grid) === null || _this$grid2 === void 0 ? void 0 : _this$grid2.getMetricState();\n if (gridMetricState == null) {\n return undefined;\n }\n var _this$state = this.state,\n advancedFilters = _this$state.advancedFilters,\n hoverSelectColumn = _this$state.hoverSelectColumn,\n isFilterBarShown = _this$state.isFilterBarShown,\n isMenuShown = _this$state.isMenuShown,\n loadingScrimProgress = _this$state.loadingScrimProgress,\n quickFilters = _this$state.quickFilters,\n sorts = _this$state.sorts,\n reverse = _this$state.reverse,\n rollupConfig = _this$state.rollupConfig;\n var _this$props2 = this.props,\n model = _this$props2.model,\n isSelectingColumn = _this$props2.isSelectingColumn;\n return _objectSpread(_objectSpread({}, gridMetricState), this.getCachedStateOverride(model, this.getTheme(), hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, rollupConfig, isMenuShown));\n }\n get renderer() {\n var renderer = this.props.renderer;\n return this.getCachedRenderer(renderer);\n }\n getMouseHandlers() {\n var mouseHandlers = this.props.mouseHandlers;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n getValueForCell(columnIndex, rowIndex) {\n var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var model = this.props.model;\n var dh = model.dh;\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 formatter = model.formatter;\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\n /**\n * Get the model column index for the provided visible index\n * @param columnIndex Visible column index\n * @returns Model column index, or null if not found\n */\n getModelColumn(columnIndex) {\n var metrics = this.state.metrics;\n assertNotNull(metrics);\n var modelColumns = metrics.modelColumns;\n if (modelColumns == null) {\n return null;\n }\n if (columnIndex != null && columnIndex < 0) {\n // ColumnBy sources aren't movable, so just return the index directly\n return columnIndex;\n }\n return columnIndex != null ? modelColumns.get(columnIndex) : null;\n }\n getModelRow(rowIndex) {\n var metrics = this.state.metrics;\n assertNotNull(metrics);\n var modelRows = metrics.modelRows;\n if (modelRows == null) {\n return null;\n }\n return rowIndex != null ? modelRows.get(rowIndex) : null;\n }\n getTheme() {\n var _ref4;\n var _this$props3 = this.props,\n model = _this$props3.model,\n theme = _this$props3.theme,\n density = _this$props3.density;\n var _this$context = this.context,\n contextTheme = _this$context.theme,\n contextDensity = _this$context.density;\n return this.getCachedTheme(contextTheme, theme, (_ref4 = isEditableGridModel(model) && model.isEditable) !== null && _ref4 !== void 0 ? _ref4 : false, model.floatingTopRowCount + model.floatingBottomRowCount, density !== null && density !== void 0 ? density : contextDensity);\n }\n getVisibleColumn(modelIndex) {\n var movedColumns = this.state.movedColumns;\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 * @returns True if any filters were changed as a result of this operation\n */\n applyInputFilters(inputFilters) {\n var replaceExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var model = this.props.model;\n var _this$state2 = this.state,\n advancedFilters = _this$state2.advancedFilters,\n quickFilters = _this$state2.quickFilters;\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 name = _ref5.name,\n type = _ref5.type,\n value = _ref5.value;\n var modelIndex = model.columns.findIndex(_ref6 => {\n var columnName = _ref6.name,\n columnType = _ref6.type;\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 return isChanged;\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 model = this.props.model;\n var formatter = model.formatter;\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 text = quickFilter.text;\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 advancedFilters = _ref7.advancedFilters;\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 quickFilters = _ref8.quickFilters;\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 advancedSettings = this.props.advancedSettings;\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 model = this.props.model;\n filterMap.forEach((_ref9, columnName) => {\n var columnType = _ref9.columnType,\n filterList = _ref9.filterList;\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 formatter = model.formatter;\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(_ref0 => {\n var advancedFilters = _ref0.advancedFilters,\n quickFilters = _ref0.quickFilters;\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(_ref1 => {\n var quickFilters = _ref1.quickFilters;\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 _this$state3 = this.state,\n advancedFilters = _this$state3.advancedFilters,\n quickFilters = _this$state3.quickFilters,\n searchFilter = _this$state3.searchFilter;\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 clearAllAggregations() {\n log.debug('Clearing all aggregations');\n this.setState({\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS\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 var model = this.props.model;\n var _this$state4 = this.state,\n advancedFilters = _this$state4.advancedFilters,\n quickFilters = _this$state4.quickFilters;\n if (advancedFilters.size === 0 && quickFilters.size === 0) {\n log.debug('No filters to rebuild');\n return;\n }\n var columns = model.columns,\n formatter = model.formatter;\n log.debug('Rebuilding filters');\n var newAdvancedFilters = new Map();\n var newQuickFilters = new Map();\n advancedFilters.forEach((value, key) => {\n var options = value.options;\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 text = value.text;\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(_ref10) {\n var quickFilters = _ref10.quickFilters,\n advancedFilters = _ref10.advancedFilters;\n this.setState({\n quickFilters,\n advancedFilters\n });\n }\n updateFormatterSettings(settings) {\n var _settings$defaultDeci, _settings$defaultInte, _settings$truncateNum, _settings$showEmptySt, _settings$showNullStr, _settings$showExtraGr;\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 showExtraGroupColumn = (_settings$showExtraGr = settings === null || settings === void 0 ? void 0 : settings.showExtraGroupColumn) !== null && _settings$showExtraGr !== void 0 ? _settings$showExtraGr : 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 var isShowExtraGroupColumnChanged = this.showExtraGroupColumn !== showExtraGroupColumn;\n if (isColumnFormatChanged || isDateFormattingChanged || isDecimalFormattingChanged || isIntegerFormattingChanged || isTruncateNumbersChanged || isShowEmptyStringsChanged || isShowNullStringsChanged || isShowExtraGroupColumnChanged) {\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.showExtraGroupColumn = showExtraGroupColumn;\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 customColumnFormatMap = this.state.customColumnFormatMap;\n var model = this.props.model;\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 settings = this.props.settings;\n this.updateFormatterSettings(settings);\n }\n initState() {\n var model = this.props.model;\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 _this$props4 = this.props,\n applyInputFiltersOnInit = _this$props4.applyInputFiltersOnInit,\n inputFilters = _this$props4.inputFilters,\n sorts = _this$props4.sorts,\n model = _this$props4.model,\n reverse = _this$props4.reverse,\n reverseType = _this$props4.reverseType,\n customColumns = _this$props4.customColumns,\n searchValue = _this$props4.searchValue,\n selectedSearchColumns = _this$props4.selectedSearchColumns,\n invertSearchColumns = _this$props4.invertSearchColumns;\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 reverse: reverse || reverseType === TableUtils.REVERSE_TYPE.POST_SORT,\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 = _this.state.partitionConfig;\n if (!partitionConfig) {\n _this.startLoading('Loading partitions...', {\n loadingCancelShown: false,\n resetRanges: true\n });\n _this.initializePartitionConfig(model);\n }\n _this.setState({\n isSelectingPartition: true\n }, _this.loadTableState);\n } catch (error) {\n if (!PromiseUtils.isCanceled(error)) {\n _this.handleTableLoadError(error);\n }\n }\n })();\n }\n\n /**\n * Initialize the partition config to the default partition.\n */\n initializePartitionConfig(model) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var keyTable = yield _this2.pending.add(model.partitionKeysTable(), resolved => resolved.close());\n var dh = model.dh;\n var sorts = keyTable.columns.map(column => column.sort().desc());\n keyTable.applySort(sorts);\n keyTable.setViewport(0, 0);\n\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 data = event.detail;\n if (data.rows.length === 0) {\n // We received an update and the table is still empty. Stop showing the loading spinner so we know\n _this2.stopLoading();\n return;\n }\n var row = data.rows[0];\n var values = keyTable.columns.map(column => row.get(column));\n var newPartition = {\n partitions: values,\n mode: model.isPartitionAwareSourceTable ? 'partition' : 'keys'\n };\n keyTable.close();\n _this2.setState({\n loadingSpinnerShown: false,\n partitionConfig: newPartition\n });\n } catch (e) {\n keyTable.close();\n log.error('Error getting initial partition config', e);\n }\n });\n })();\n }\n\n /**\n * Selects a partition key from the table based on the provided row index.\n *\n * @param rowIndex The index of the row from which the partition will be selected.\n * @returns A promise that resolves when the partition key has been successfully selected.\n */\n selectPartitionKeyFromTable(rowIndex) {\n var model = this.props.model;\n assertNotNull(rowIndex);\n if (isPartitionedGridModel(model)) {\n var data = this.getRowDataMap(rowIndex);\n var partitionColumnSet = new Set(model.partitionColumns.map(column => column.name));\n var values = Object.entries(data).filter(_ref11 => {\n var _ref12 = _slicedToArray(_ref11, 2),\n key = _ref12[0],\n _ = _ref12[1];\n return partitionColumnSet.has(key);\n }).map(_ref13 => {\n var _ref14 = _slicedToArray(_ref13, 2),\n key = _ref14[0],\n columnData = _ref14[1];\n return columnData.value;\n });\n var newPartition = {\n partitions: values,\n mode: 'partition'\n };\n this.setState({\n isSelectingPartition: true,\n partitionConfig: newPartition\n });\n }\n }\n copyCell(columnIndex, rowIndex) {\n var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var canCopy = this.props.canCopy;\n if (canCopy) {\n var value = String(this.getValueForCell(columnIndex, rowIndex, rawValue));\n copyToClipboard(value).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 canCopy = this.props.canCopy;\n var movedColumns = this.state.movedColumns;\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 _this$props5 = this.props,\n model = _this$props5.model,\n canCopy = _this$props5.canCopy;\n var _this$state5 = this.state,\n metricCalculator = _this$state5.metricCalculator,\n movedColumns = _this$state5.movedColumns;\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 _ref15 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref15$resetRanges = _ref15.resetRanges,\n resetRanges = _ref15$resetRanges === void 0 ? false : _ref15$resetRanges,\n _ref15$loadingCancelS = _ref15.loadingCancelShown,\n loadingCancelShown = _ref15$loadingCancelS === void 0 ? true : _ref15$loadingCancelS,\n _ref15$loadingBlocksG = _ref15.loadingBlocksGrid,\n loadingBlocksGrid = _ref15$loadingBlocksG === void 0 ? true : _ref15$loadingBlocksG;\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 minScrimTransitionTime = theme.minScrimTransitionTime,\n maxScrimTransitionTime = theme.maxScrimTransitionTime;\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 _this$lastLoadedConfi = this.lastLoadedConfig,\n advancedFilters = _this$lastLoadedConfi.advancedFilters,\n aggregationSettings = _this$lastLoadedConfi.aggregationSettings,\n customColumns = _this$lastLoadedConfi.customColumns,\n quickFilters = _this$lastLoadedConfi.quickFilters,\n reverse = _this$lastLoadedConfi.reverse,\n rollupConfig = _this$lastLoadedConfi.rollupConfig,\n searchFilter = _this$lastLoadedConfi.searchFilter,\n selectDistinctColumns = _this$lastLoadedConfi.selectDistinctColumns,\n sorts = _this$lastLoadedConfi.sorts;\n this.lastLoadedConfig = null;\n this.setState({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\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 reverse: false,\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.PENDING, this.handlePending);\n model.addEventListener(IrisGridModel.EVENT.PENDING_CLEARED, this.handlePendingCleared);\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 model.addEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);\n model.addEventListener(IrisGridModel.EVENT.SCHEMA_CHANGED, this.handleSchemaChanged);\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.PENDING, this.handlePending);\n model.removeEventListener(IrisGridModel.EVENT.PENDING_CLEARED, this.handlePendingCleared);\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 model.removeEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);\n model.removeEventListener(IrisGridModel.EVENT.SCHEMA_CHANGED, this.handleSchemaChanged);\n }\n focus() {\n var _this$grid3;\n (_this$grid3 = this.grid) === null || _this$grid3 === void 0 || _this$grid3.focus();\n }\n focusFilterBar(column) {\n var movedColumns = this.state.movedColumns;\n var model = this.props.model;\n var columnCount = model.columnCount;\n var modelColumn = GridUtils.getModelIndex(column, movedColumns);\n if (column == null || columnCount <= column || !model.isFilterable(modelColumn)) {\n this.setState({\n focusedFilterBarColumn: null\n });\n return;\n }\n var _this$state6 = this.state,\n metricCalculator = _this$state6.metricCalculator,\n metrics = _this$state6.metrics;\n assertNotNull(metrics);\n var metricState = this.getMetricState();\n assertNotNull(metricState);\n var scrollColumn = metricCalculator.getScrollLeftForColumn(column, metricState, metrics);\n if (scrollColumn != null) {\n var _this$grid4;\n (_this$grid4 = this.grid) === null || _this$grid4 === void 0 || _this$grid4.setViewState({\n left: scrollColumn,\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$grid5;\n var _this$state7 = this.state,\n metricCalculator = _this$state7.metricCalculator,\n movedColumns = _this$state7.movedColumns;\n metricCalculator.setColumnWidth(GridUtils.getModelIndex(columnVisibleIndex, movedColumns), 0);\n (_this$grid5 = this.grid) === null || _this$grid5 === void 0 || _this$grid5.forceUpdate();\n }\n freezeColumnByColumnName(columnName) {\n var _this$state8 = this.state,\n frozenColumns = _this$state8.frozenColumns,\n movedColumns = _this$state8.movedColumns;\n var model = this.props.model;\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 _this$state9 = this.state,\n frozenColumns = _this$state9.frozenColumns,\n movedColumns = _this$state9.movedColumns;\n var model = this.props.model;\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\n /**\n * Updates the entire list of frozen columns.\n * Used by VisibilityOrderingBuilder.\n * @param frozenColumns The new list of frozen columns\n */\n handleFrozenColumnsChanged(frozenColumns) {\n this.setState({\n frozenColumns\n });\n }\n toggleExpandColumn(modelIndex, expandDescendants) {\n log.debug2('Toggle expand column', modelIndex);\n var model = this.props.model;\n if (isExpandableColumnGridModel(model) && model.hasExpandableColumns) {\n model.setColumnExpanded(modelIndex, !model.isColumnExpanded(modelIndex), expandDescendants);\n }\n }\n expandAllColumns() {\n log.debug2('Expand all columns');\n var model = this.props.model;\n if (isExpandableColumnGridModel(model) && model.isExpandAllColumnsAvailable) {\n model.expandAllColumns();\n }\n }\n collapseAllColumns() {\n log.debug2('Collapse all columns');\n var model = this.props.model;\n if (isExpandableColumnGridModel(model) && model.isExpandAllColumnsAvailable) {\n model.collapseAllColumns();\n }\n }\n handleColumnVisibilityChanged(modelIndexes, isVisible) {\n var _this$grid6;\n var _this$state0 = this.state,\n metricCalculator = _this$state0.metricCalculator,\n metrics = _this$state0.metrics;\n assertNotNull(metrics);\n if (isVisible) {\n modelIndexes.forEach(modelIndex => {\n var defaultWidth = metricCalculator.initialColumnWidths.get(modelIndex);\n var calculatedWidth = metrics.calculatedColumnWidths.get(modelIndex);\n\n // If we haven't scrolled to the column, the calculated width will be undefined.\n // This means the function was triggered by the visibility ordering menu,\n // so just reset the column width to default.\n if (defaultWidth !== calculatedWidth && calculatedWidth != null) {\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$grid6 = this.grid) === null || _this$grid6 === void 0 || _this$grid6.forceUpdate();\n }\n handleColumnVisibilityReset() {\n var _model$layoutHints$fr, _model$layoutHints2;\n var metricCalculator = this.state.metricCalculator;\n var model = this.props.model;\n metricCalculator.resetAllColumnWidths();\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 : EMPTY_ARRAY\n });\n }\n handleCrossColumnSearch(searchValue, selectedSearchColumns, invertSearchColumns) {\n var model = this.props.model;\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$grid7;\n (_this$grid7 = this.grid) === null || _this$grid7 === void 0 || _this$grid7.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 var prevConfig = this.state.partitionConfig;\n if (prevConfig !== partitionConfig) {\n this.setState({\n partitionConfig\n });\n }\n }\n handleTableLoadError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n var onError = this.props.onError;\n onError(error);\n }\n handleViewportUpdated() {\n var model = this.props.model;\n var _this$state1 = this.state,\n loadingText = _this$state1.loadingText,\n loadingSpinnerShown = _this$state1.loadingSpinnerShown;\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$grid8;\n var metricCalculator = this.state.metricCalculator;\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n var entries = [...userColumnWidths.entries()];\n for (var i = 0; i < entries.length; i += 1) {\n var _entries$i = _slicedToArray(entries[i], 2),\n modelIndex = _entries$i[0],\n columnWidth = _entries$i[1];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n (_this$grid8 = this.grid) === null || _this$grid8 === void 0 || _this$grid8.forceUpdate();\n }\n\n /**\n * Updates grid metrics after model columns have changed\n * to keep Grid and IrisGrid metrics in sync since metrics are stored in both places.\n */\n updateMetrics() {\n var _this$grid9;\n this.setState({\n metrics: (_this$grid9 = this.grid) === null || _this$grid9 === void 0 ? void 0 : _this$grid9.updateMetrics()\n });\n }\n toggleSort(columnIndex, addToExisting) {\n log.info('Toggling sort for column', columnIndex);\n var model = this.props.model;\n var modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n if (model.isColumnSortable(columnIndex)) {\n var currentSorts = this.state.sorts;\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$grid0;\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid0 = this.grid) === null || _this$grid0 === void 0 || _this$grid0.forceUpdate();\n }\n sortColumn(modelColumn) {\n var _this$grid1;\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 model = this.props.model;\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$grid1 = this.grid) === null || _this$grid1 === void 0 || _this$grid1.forceUpdate();\n }\n reverse(reverse) {\n var _this$grid10;\n this.startLoading('Reversing...');\n this.setState({\n reverse\n });\n (_this$grid10 = this.grid) === null || _this$grid10 === void 0 || _this$grid10.forceUpdate();\n }\n isReversible() {\n var model = this.props.model;\n return model.isReversible;\n }\n toggleFilterBar() {\n var focusIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.lastFocusedFilterBarColumn;\n var isFilterBarShown = this.state.isFilterBarShown;\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 model = this.props.model;\n var columnCount = model.columnCount;\n for (var i = 0; i < columnCount; i += 1) {\n var modelColumn = this.getModelColumn(i);\n if (modelColumn != null) {\n var column = model.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$grid11;\n (_this$grid11 = this.grid) === null || _this$grid11 === void 0 || _this$grid11.focus();\n }\n }\n isTableSearchAvailable() {\n var _model$layoutHints3, _dh$SearchDisplayMode, _dh$SearchDisplayMode2;\n var _this$props6 = this.props,\n model = _this$props6.model,\n canToggleSearch = _this$props6.canToggleSearch;\n var dh = model.dh;\n var searchDisplayMode = model === null || model === 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 showSearchBar = this.state.showSearchBar;\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 || _this$crossColumnRef2.current.focus();\n } else {\n var _this$grid12;\n (_this$grid12 = this.grid) === null || _this$grid12 === void 0 || _this$grid12.focus();\n }\n });\n }\n toggleGotoRow() {\n var _this$grid13, _this$grid14;\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 isGotoShown = this.state.isGotoShown;\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 || _this$gotoRowRef$curr.focus();\n return;\n }\n var cursorRow = (_this$grid13 = this.grid) === null || _this$grid13 === void 0 ? void 0 : _this$grid13.state.cursorRow;\n var cursorColumn = (_this$grid14 = this.grid) === null || _this$grid14 === void 0 ? void 0 : _this$grid14.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 model = this.props.model;\n var name = model.columns[cursorColumn].name;\n\n // Use raw value (same as Copy Cell Unformatted) to preserve full precision and timezone\n var text = String(this.getValueForCell(cursorColumn, cursorRow, true));\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;\n var model = _this3.props.model;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n var pendingSavePromise = _this3.state.pendingSavePromise;\n if (pendingSavePromise != null) {\n throw new Error('Save already in progress');\n }\n var containsGridCellInputField = (_document = document) === null || _document === void 0 || (_document = _document.activeElement) === null || _document === void 0 ? void 0 : _document.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 || _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 pendingSavePromise = _this4.state.pendingSavePromise;\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 onColumnSelected = this.props.onColumnSelected;\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 onDataSelected = this.props.onDataSelected;\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 model = this.props.model;\n var columns = model.columns,\n groupedColumns = model.groupedColumns;\n var dataMap = {};\n var _loop = function _loop() {\n var column = columns[i];\n var name = column.name,\n type = column.type;\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 model = this.props.model;\n var index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n this.setAdvancedFilter(index, filter, options);\n }\n handleAdvancedFilterSortChange(column, direction) {\n var _this$grid15;\n var addToExisting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var model = this.props.model;\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$grid15 = this.grid) === null || _this$grid15 === void 0 || _this$grid15.forceUpdate();\n }\n handleAdvancedFilterDone() {\n var _this$grid16;\n (_this$grid16 = this.grid) === null || _this$grid16 === void 0 || _this$grid16.focus();\n }\n handleAdvancedFilterToggleMaximize(column) {\n this.setState(_ref16 => {\n var maximizedAdvancedFilter = _ref16.maximizedAdvancedFilter;\n return {\n maximizedAdvancedFilter: maximizedAdvancedFilter === column ? null : column\n };\n });\n }\n handleAdvancedMenuOpened(column) {\n this.setState({\n shownAdvancedFilter: column,\n maximizedAdvancedFilter: null\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 _this$state10 = this.state,\n focusedFilterBarColumn = _this$state10.focusedFilterBarColumn,\n isFilterBarShown = _this$state10.isFilterBarShown;\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 || _this$filterInputRef2.current.focus();\n this.setState({\n shownAdvancedFilter: null,\n maximizedAdvancedFilter: null\n });\n } else {\n this.setState({\n focusedFilterBarColumn: null,\n shownAdvancedFilter: null,\n maximizedAdvancedFilter: 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 _this$props7 = this.props,\n model = _this$props7.model,\n onCreateChart = _this$props7.onCreateChart;\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(_ref17 => {\n var focusedFilterBarColumn = _ref17.focusedFilterBarColumn,\n quickFilters = _ref17.quickFilters;\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$grid17;\n (_this$grid17 = this.grid) === null || _this$grid17 === void 0 || _this$grid17.focus();\n }\n if (defocusInput) {\n this.setState({\n focusedFilterBarColumn: null\n });\n }\n }\n handleFilterBarTab(backward) {\n var focusedFilterBarColumn = this.state.focusedFilterBarColumn;\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 model = this.props.model;\n var column = model.columns[modelIndex];\n var prevCustomColumnFormatMap = this.state.customColumnFormatMap;\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 handleColumnAlignmentChange(modelIndex, alignment) {\n var model = this.props.model;\n var column = model.columns[modelIndex];\n this.setState(_ref18 => {\n var _ref18$columnAlignmen = _ref18.columnAlignmentMap,\n columnAlignmentMap = _ref18$columnAlignmen === void 0 ? EMPTY_MAP : _ref18$columnAlignmen;\n var newColumnAlignmentMap = new Map(columnAlignmentMap);\n if (alignment != null) {\n newColumnAlignmentMap.set(column.name, alignment);\n } else {\n newColumnAlignmentMap.delete(column.name);\n }\n return {\n columnAlignmentMap: newColumnAlignmentMap\n };\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(_ref19 => {\n var openOptions = _ref19.openOptions;\n var newOptions = [...openOptions];\n newOptions.pop();\n return {\n openOptions: newOptions\n };\n });\n }\n handleMenuSelect(option) {\n this.setState(_ref20 => {\n var openOptions = _ref20.openOptions;\n return {\n openOptions: [...openOptions, option]\n };\n });\n }\n handleRequestFailed(event) {\n var _ref21 = event,\n error = _ref21.detail;\n log.error('request failed:', error);\n this.stopLoading();\n var partitionConfig = this.state.partitionConfig;\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 onError = this.props.onError;\n onError(new Error(\"Error displaying table: \".concat(error)));\n }\n }\n\n /**\n * Raise the loading scrim in response to a model-driven `PENDING` event. The\n * model is the start signal, mirroring how `UPDATED`/`COLUMNS_CHANGED` are\n * already the model-driven stop signal. Idempotent: the first message within\n * a commit wins (the `loadingScrimStartTime == null` guard collapses multiple\n * pending operations into a single scrim).\n */\n handlePending(event) {\n var _ref22 = event,\n detail = _ref22.detail;\n var _ref23 = detail !== null && detail !== void 0 ? detail : {},\n text = _ref23.text,\n options = _ref23.options;\n if (this.loadingScrimStartTime == null) {\n this.startLoading(text !== null && text !== void 0 ? text : 'Loading...', _objectSpread({\n loadingCancelShown: false\n }, options));\n }\n }\n\n /**\n * Clear the loading scrim in response to a model-driven `PENDING_CLEARED`\n * event. Only needed for operations that do not naturally end in\n * `UPDATED`/`COLUMNS_CHANGED`/`REQUEST_FAILED`.\n *\n * The current contract assumes a single outstanding model-driven operation:\n * `handlePending` collapses concurrent `PENDING` events into one scrim, so\n * this clears unconditionally. That is consistent with the existing scrim,\n * which any model stop signal already clears regardless of what else is in\n * flight. Ref-counting overlapping operations is intentionally deferred to\n * the planned migration that routes the built-in `startLoading` calls\n * through `PENDING`/`PENDING_CLEARED`; only once every raise/clear goes\n * through this pair can a depth counter stay balanced (a counter added now\n * would desync against the direct `startLoading` callers).\n */\n handlePendingCleared() {\n this.stopLoading();\n }\n handleUpdate() {\n var _this$grid18;\n log.debug2('Received model update');\n var _this$state11 = this.state,\n advancedFilters = _this$state11.advancedFilters,\n aggregationSettings = _this$state11.aggregationSettings,\n customColumns = _this$state11.customColumns,\n quickFilters = _this$state11.quickFilters,\n reverse = _this$state11.reverse,\n rollupConfig = _this$state11.rollupConfig,\n searchFilter = _this$state11.searchFilter,\n selectDistinctColumns = _this$state11.selectDistinctColumns,\n sorts = _this$state11.sorts;\n var config = {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\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$grid18 = this.grid) === null || _this$grid18 === void 0 || _this$grid18.forceUpdate();\n this.stopLoading();\n }\n handleTableChanged() {\n var model = this.props.model;\n // For partitioned tables, we want to rebuild filters on table change to ensure filters are applied to the new partition\n var partitionConfig = this.state.partitionConfig;\n if (isPartitionedGridModel(model) && (partitionConfig === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) !== 'keys') {\n this.rebuildFilters();\n }\n }\n\n /**\n * Handle an inner-model swap on a proxy model (`SCHEMA_CHANGED`). The previous\n * model's `movedColumns` reference indices that may not exist in the new\n * model (e.g. a pivot exposes a different column set), so reset them to the\n * new model's initial order. The metric calculator is rebuilt separately when\n * the `getMetricCalculator` prop changes (see `componentDidUpdate`); a calc\n * whose seed `movedColumns` are now stale self-heals because `getMetrics`\n * reconciles against the grid's current `movedColumns` at draw time.\n */\n handleSchemaChanged() {\n var model = this.props.model;\n this.setState({\n movedColumns: model.initialMovedColumns\n });\n }\n handleViewChanged(metrics) {\n var _this$grid$state, _this$grid19;\n var model = this.props.model;\n var _ref24 = (_this$grid$state = (_this$grid19 = this.grid) === null || _this$grid19 === void 0 ? void 0 : _this$grid19.state) !== null && _this$grid$state !== void 0 ? _this$grid$state : {},\n _ref24$selectionEndRo = _ref24.selectionEndRow,\n selectionEndRow = _ref24$selectionEndRo === void 0 ? 0 : _ref24$selectionEndRo;\n var pendingRowCount = 0;\n if (isEditableGridModel(model) && model.isEditable) {\n assertNotNull(metrics);\n var bottomViewport = metrics.bottomViewport;\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 assertNotNull(selectedRanges);\n var onSelectionChanged = this.props.onSelectionChanged;\n var copyOperation = this.state.copyOperation;\n this.setState({\n selectedRanges\n });\n if (copyOperation != null) {\n this.setState({\n copyOperation: null\n });\n }\n\n // We get 2 identical ranges here,\n // but consolidating in `Grid#moveSelection` causes\n // deselection to break, so just consolidate here.\n // This will only update the goto row input for row index\n if (GridRange.rowCount(GridRange.consolidate(selectedRanges)) === 1 && selectedRanges[0].startRow != null) {\n this.setState({\n gotoRow: \"\".concat(selectedRanges[0].startRow + 1)\n });\n }\n onSelectionChanged(selectedRanges);\n }\n handleMovedColumnsChanged(movedColumns, onChangeApplied) {\n this.setState({\n movedColumns\n }, onChangeApplied);\n }\n handleHeaderGroupsChanged(columnHeaderGroups) {\n var model = this.props.model;\n var prevColumnHeaderGroups = this.state.columnHeaderGroups;\n if (prevColumnHeaderGroups === columnHeaderGroups) {\n return;\n }\n this.setState({\n // undo/redo will pass already parsed groups\n // Parsing them again causes a loop with undo/redo that makes it unusable\n columnHeaderGroups: columnHeaderGroups.every(group => isColumnHeaderGroup(group) && group.isValid()) ? columnHeaderGroups : IrisGridUtils.parseColumnHeaderGroups(model, columnHeaderGroups).groups\n }, () => {\n var _this$grid20;\n return (_this$grid20 = this.grid) === null || _this$grid20 === void 0 ? void 0 : _this$grid20.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 _this$state12 = this.state,\n openOptions = _this$state12.openOptions,\n conditionalFormats = _this$state12.conditionalFormats;\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 _this$state13 = this.state,\n openOptions = _this$state13.openOptions,\n conditionalFormats = _this$state13.conditionalFormats;\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 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 model = this.props.model;\n var _this$state14 = this.state,\n movedColumns = _this$state14.movedColumns,\n sorts = _this$state14.sorts,\n quickFilters = _this$state14.quickFilters,\n advancedFilters = _this$state14.advancedFilters,\n selectDistinctColumns = _this$state14.selectDistinctColumns;\n var columns = model.columns;\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('Model columns changed');\n var isReady = this.state.isReady;\n if (isReady) {\n this.updateMetrics();\n\n // Make sure stopLoading() is called after the updateMetrics call,\n // otherwise IrisGridModelUpdater queues an extra setViewport based on old metrics.\n this.stopLoading();\n } else {\n this.loadTableState();\n }\n }\n\n /**\n * Rebuild the metric calculator when the `getMetricCalculator` prop swaps for\n * a different factory (e.g. entering or leaving a pivot, where the\n * pivot-builder middleware flips the prop). The renderer and mouse handlers\n * are recomputed via their memoized getters on the next render and do not\n * need explicit handling here.\n *\n * User column-widths / row-heights from the previous calculator are not\n * carried over: a factory swap means the column set has effectively changed,\n * so the stored sizes wouldn't map to anything meaningful.\n *\n * Moved columns are NOT reset here — that is owned by `handleSchemaChanged`\n * (the `SCHEMA_CHANGED` event) so that a plain prop swap against the same\n * model preserves the user's layout. The new calculator is seeded with the\n * current moved columns; `getMetrics` reconciles against the grid's live\n * `movedColumns` at draw time, so a later reset stays consistent.\n */\n maybeRebuildMetricCalculator() {\n var _model$layoutHints4;\n var getMetricCalculator = this.props.getMetricCalculator;\n if (getMetricCalculator === this.lastMetricCalculatorFactory) return;\n var model = this.props.model;\n var movedColumns = this.state.movedColumns;\n var next = getMetricCalculator({\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n movedColumns,\n initialColumnWidths: new Map(model === null || model === void 0 || (_model$layoutHints4 = model.layoutHints) === null || _model$layoutHints4 === void 0 || (_model$layoutHints4 = _model$layoutHints4.hiddenColumns) === null || _model$layoutHints4 === void 0 ? void 0 : _model$layoutHints4.map(name => [model.getColumnIndexByName(name), 0]))\n });\n this.lastMetricCalculatorFactory = getMetricCalculator;\n log.debug('Swapping metric calculator', next);\n // Also push the new calculator onto the Grid synchronously so any\n // immediately-following read of `Grid.metricCalculator` (before React has\n // committed the setState below) uses the new instance against the new\n // model rather than invoking the old calculator and potentially throwing.\n if (this.grid != null) {\n this.grid.metricCalculator = next;\n }\n this.setState({\n metricCalculator: next\n });\n }\n handlePendingCommitClicked() {\n return this.commitPending();\n }\n handlePendingDiscardClicked() {\n return this.discardPending();\n }\n handlePendingDataUpdated() {\n var _this$grid21;\n log.debug('pending data updated');\n var model = this.props.model;\n var pendingDataMap = model.pendingDataMap,\n pendingDataErrors = model.pendingDataErrors;\n this.setState({\n pendingDataMap,\n pendingDataErrors,\n pendingSaveError: null\n });\n (_this$grid21 = this.grid) === null || _this$grid21 === void 0 || _this$grid21.forceUpdate();\n }\n handleResizeColumn(modelIndex) {\n var _this$grid22;\n var _this$state15 = this.state,\n metrics = _this$state15.metrics,\n metricCalculator = _this$state15.metricCalculator;\n if (!metrics) throw new Error('Metrics not set');\n var contentWidth = getOrThrow(metrics.contentColumnWidths, modelIndex);\n var userWidths = metricCalculator.getUserColumnWidths();\n if (userWidths.has(modelIndex)) {\n metricCalculator.resetColumnWidth(modelIndex);\n metricCalculator.setCalculatedColumnWidth(modelIndex, contentWidth);\n } else {\n metricCalculator.setColumnWidth(modelIndex, contentWidth);\n }\n (_this$grid22 = this.grid) === null || _this$grid22 === void 0 || _this$grid22.forceUpdate();\n }\n handleResizeAllColumns() {\n var _this$grid23;\n var _this$state16 = this.state,\n metrics = _this$state16.metrics,\n metricCalculator = _this$state16.metricCalculator;\n if (!metrics) throw new Error('Metrics not set');\n var allColumns = [...metrics.allColumnWidths.entries()];\n var visibleColumns = allColumns.filter(_ref25 => {\n var _ref26 = _slicedToArray(_ref25, 2),\n _ = _ref26[0],\n width = _ref26[1];\n return width !== 0;\n }).map(_ref27 => {\n var _ref28 = _slicedToArray(_ref27, 1),\n modelIndex = _ref28[0];\n return modelIndex;\n });\n var contentWidths = metrics.contentColumnWidths;\n var userWidths = metricCalculator.getUserColumnWidths();\n var manualColumns = visibleColumns.filter(modelIndex => userWidths.has(modelIndex));\n if (visibleColumns.length === manualColumns.length) {\n // All columns are manually sized, flip all to auto resize\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var modelIndex = visibleColumns[i];\n var contentWidth = getOrThrow(contentWidths, modelIndex);\n metricCalculator.resetColumnWidth(modelIndex);\n metricCalculator.setCalculatedColumnWidth(modelIndex, contentWidth);\n }\n } else {\n // Flip all to manual sized\n for (var _i3 = 0; _i3 < visibleColumns.length; _i3 += 1) {\n var _modelIndex = visibleColumns[_i3];\n var _contentWidth = getOrThrow(contentWidths, _modelIndex);\n metricCalculator.setColumnWidth(_modelIndex, _contentWidth);\n }\n }\n (_this$grid23 = this.grid) === null || _this$grid23 === void 0 || _this$grid23.forceUpdate();\n }\n\n /**\n * User added, removed, or changed the order of aggregations, or position\n * @param aggregationSettings The new aggregation settings\n * @param added The aggregations that were added\n * @param removed The aggregations that were removed\n */\n handleAggregationsChange(aggregationSettings) {\n var _rollupConfig$columns, _rollupConfig$columns2;\n var added = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var removed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n log.debug('handleAggregationsChange', aggregationSettings, added, removed);\n var rollupConfig = this.state.rollupConfig;\n var isRollup = ((_rollupConfig$columns = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns2 = rollupConfig.columns) === null || _rollupConfig$columns2 === void 0 ? void 0 : _rollupConfig$columns2.length) !== null && _rollupConfig$columns !== void 0 ? _rollupConfig$columns : 0) > 0;\n // Do not start loading if this is rollup and added / removed aggregations are prohibited for rollups\n var changes = [...added, ...removed];\n var shouldStartLoading = !(isRollup && changes.length > 0 && changes.every(op => AggregationUtils.isRollupProhibited(op)));\n if (shouldStartLoading) {\n this.startLoading(\"Aggregating \".concat(aggregationSettings.aggregations.map(a => a.operation).join(', '), \"...\"));\n }\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 var _rollupConfig$columns3, _rollupConfig$columns4;\n log.debug('handleAggregationChange', aggregation);\n var rollupConfig = this.state.rollupConfig;\n var isRollup = ((_rollupConfig$columns3 = rollupConfig === null || rollupConfig === 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 // Do not start loading if this is rollup and the aggregation is prohibited for rollups\n var shouldStartLoading = !(isRollup && AggregationUtils.isRollupProhibited(aggregation.operation));\n if (shouldStartLoading) {\n this.startLoading(\"Aggregating \".concat(aggregation.operation, \"...\"));\n }\n this.setState(_ref29 => {\n var aggregationSettings = _ref29.aggregationSettings;\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 openOptions = this.state.openOptions;\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$columns5, _rollupConfig$columns6;\n log.info('Rollup change', rollupConfig);\n\n // Un-hide hidden group-by columns.\n if ((rollupConfig === null || rollupConfig === void 0 ? void 0 : rollupConfig.columns) != null && rollupConfig.columns.length > 0) {\n var metricCalculator = this.state.metricCalculator;\n var userColumnWidthsByName = metricCalculator.getUserColumnWidthsByName();\n rollupConfig.columns.forEach(name => {\n if (userColumnWidthsByName.get(name) === 0) {\n metricCalculator.resetColumnWidthByName(name);\n }\n });\n }\n this.resetGridViewState();\n this.clearAllFilters();\n this.startLoading(\"Grouping by columns \".concat((_rollupConfig$columns5 = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns6 = rollupConfig.columns) === null || _rollupConfig$columns6 === void 0 ? void 0 : _rollupConfig$columns6.join(', ')) !== null && _rollupConfig$columns5 !== void 0 ? _rollupConfig$columns5 : '', \"...\"));\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: EMPTY_ARRAY,\n frozenColumns: EMPTY_ARRAY,\n sorts: EMPTY_ARRAY,\n reverse: false,\n selectDistinctColumns: EMPTY_ARRAY\n });\n }\n handleSelectDistinctChanged(columnNames) {\n log.debug('SelectDistinct change', columnNames);\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n this.clearAllAggregations();\n this.startLoading(\"Selecting distinct values in \".concat(columnNames.length > 0 ? columnNames.join(', ') : '', \"...\"));\n this.setState({\n selectDistinctColumns: columnNames,\n movedColumns: [],\n sorts: [],\n reverse: false\n });\n }\n handleDownloadTableStart() {\n var canDownloadCsv = this.props.canDownloadCsv;\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 canDownloadCsv = this.props.canDownloadCsv;\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(_ref30 => {\n var aggregationSettings = _ref30.aggregationSettings;\n var aggregations = aggregationSettings.aggregations;\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 _this6$state = _this6.state,\n selectedColumnName = _this6$state.gotoValueSelectedColumnName,\n gotoValueSelectedFilter = _this6$state.gotoValueSelectedFilter;\n var model = _this6.props.model;\n var dh = model.dh;\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 formatter = model.formatter;\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 _DateUtils$parseDateR = DateUtils.parseDateRange(dh, inputString, formatter.timeZone),\n _DateUtils$parseDateR2 = _slicedToArray(_DateUtils$parseDateR, 1),\n startDate = _DateUtils$parseDateR2[0];\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 || _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 || _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 model = this.props.model;\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 isSelectingColumn = this.props.isSelectingColumn;\n if (isSelectingColumn) {\n var columnAllowedCursor = this.props.columnAllowedCursor;\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 irisGridState = this.state;\n var gridState = this.grid.state;\n var onStateChange = this.props.onStateChange;\n onStateChange(irisGridState, gridState);\n }\n handleOverflowClose() {\n var _this$grid24;\n this.setState({\n showOverflowModal: false\n });\n (_this$grid24 = this.grid) === null || _this$grid24 === void 0 || _this$grid24.focus(); // Focus on the grid after closing the overflow modal\n }\n handleOpenNoPastePermissionModal(errorMessage) {\n this.setState({\n showNoPastePermissionModal: true,\n noPastePermissionError: errorMessage\n });\n }\n handleCloseNoPastePermissionModal() {\n this.setState({\n showNoPastePermissionModal: false\n });\n }\n getColumnBoundingRect() {\n var _this$gridWrapper2;\n var _this$state17 = this.state,\n metrics = _this$state17.metrics,\n shownColumnTooltip = _this$state17.shownColumnTooltip;\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 columnHeaderHeight = metrics.columnHeaderHeight,\n allColumnXs = metrics.allColumnXs,\n allColumnWidths = metrics.allColumnWidths,\n width = metrics.width,\n columnHeaderMaxDepth = metrics.columnHeaderMaxDepth;\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 rowNumber = this.state.gotoRow;\n this.focusRowInGrid(rowNumber);\n }\n focusRowInGrid(rowNumber) {\n var model = this.props.model;\n var rowCount = model.rowCount;\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$grid25;\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n (_this$grid25 = this.grid) === null || _this$grid25 === void 0 || _this$grid25.setFocusRow(0);\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 || _this$grid26.setFocusRow(rowInt + rowCount);\n } else {\n var _this$grid27;\n (_this$grid27 = this.grid) === null || _this$grid27 === void 0 || _this$grid27.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 columnHeaderHeight = metrics.columnHeaderHeight,\n columnHeaderMaxDepth = metrics.columnHeaderMaxDepth,\n allColumnXs = metrics.allColumnXs,\n allColumnWidths = metrics.allColumnWidths,\n width = metrics.width;\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 || _this$tooltip.update();\n }\n })\n }, column.name)\n });\n }\n handleGotoValueSelectedColumnNameChanged(columnName) {\n var _this$grid28;\n var model = this.props.model;\n var cursorRow = (_this$grid28 = this.grid) === null || _this$grid28 === void 0 ? void 0 : _this$grid28.state.cursorRow;\n var _this$state18 = this.state,\n prevColumnName = _this$state18.gotoValueSelectedColumnName,\n gotoValueManuallyChanged = _this$state18.gotoValueManuallyChanged;\n if (cursorRow != null) {\n var index = model.getColumnIndexByName(columnName);\n var column = IrisGridUtils.getColumnByName(model.columns, columnName);\n var prevColumn = IrisGridUtils.getColumnByName(model.columns, prevColumnName);\n if (index == null || column == null) {\n return;\n }\n var value = model.valueForCell(index, cursorRow);\n var text = IrisGridUtils.convertValueToText(value, column.type);\n\n // do NOT update value if user manually changed value AND column type remains the same\n if (gotoValueManuallyChanged && column.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 gotoValue = this.state.gotoValue;\n this.seekRow(gotoValue, isBackwards);\n }\n\n /**\n * Render the input field for the focused filter\n * @param metrics Grid metrics\n * @param metricCalculator Metric calculator\n * @param focusedFilterBarColumn Column index for the focused filter\n * @param quickFilters Quick filters map\n * @param advancedFilters Advanced filters map\n * @returns The filter input field element or null if not applicable\n */\n getFilterBarInput(metrics, metricCalculator, focusedFilterBarColumn, quickFilters, advancedFilters) {\n var _this$grid29;\n if (metrics == null || focusedFilterBarColumn == null) {\n return null;\n }\n var metricState = this.getMetricState();\n if (metricState == null) {\n return null;\n }\n var filterBoxCoordinates = metricCalculator.getFilterInputCoordinates(focusedFilterBarColumn, metricState, metrics);\n if (filterBoxCoordinates == null) {\n return null;\n }\n var debounceMs = Math.min(Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)), IrisGrid.maxDebounce);\n var x = filterBoxCoordinates.x,\n y = filterBoxCoordinates.y,\n fieldWidth = filterBoxCoordinates.width,\n fieldHeight = filterBoxCoordinates.height;\n var width = metrics.width;\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 value = '';\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 value = quickFilter.text;\n isValid = quickFilter.filter != null;\n }\n var isBarFiltered = quickFilters.size !== 0 || advancedFilters.size !== 0;\n var showAdvancedFilterButton = metricCalculator.getAdvancedFilterButtonCoordinates(focusedFilterBarColumn, metricState, metrics) != null;\n return /*#__PURE__*/_jsx(FilterInputField, {\n ref: this.filterInputRef,\n style: style,\n className: classNames({\n error: !isValid,\n active: value !== '' || advancedFilter != null,\n 'iris-grid-has-filter': isBarFiltered\n }),\n showAdvancedFilterButton: showAdvancedFilterButton,\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$grid29 = this.grid) === null || _this$grid29 === void 0 ? void 0 : _this$grid29.handleContextMenu,\n debounceMs: debounceMs,\n value: value\n }, focusedFilterBarColumn);\n }\n render() {\n var _rollupConfig$columns7,\n _rollupConfig$columns8,\n _this7 = this,\n _this$grid30,\n _openOptions;\n var _this$props8 = this.props,\n children = _this$props8.children,\n customFilters = _this$props8.customFilters,\n getDownloadWorker = _this$props8.getDownloadWorker,\n isSelectingColumn = _this$props8.isSelectingColumn,\n isStuckToBottom = _this$props8.isStuckToBottom,\n isStuckToRight = _this$props8.isStuckToRight,\n model = _this$props8.model,\n name = _this$props8.name,\n onlyFetchVisibleColumns = _this$props8.onlyFetchVisibleColumns,\n alwaysFetchColumns = _this$props8.alwaysFetchColumns,\n advancedSettings = _this$props8.advancedSettings,\n onAdvancedSettingsChange = _this$props8.onAdvancedSettingsChange,\n canDownloadCsv = _this$props8.canDownloadCsv,\n onCreateChart = _this$props8.onCreateChart,\n transformTableOptions = _this$props8.transformTableOptions;\n var _this$state19 = this.state,\n metricCalculator = _this$state19.metricCalculator,\n metrics = _this$state19.metrics,\n isFilterBarShown = _this$state19.isFilterBarShown,\n isSelectingPartition = _this$state19.isSelectingPartition,\n isMenuShown = _this$state19.isMenuShown,\n isReady = _this$state19.isReady,\n copyOperation = _this$state19.copyOperation,\n focusedFilterBarColumn = _this$state19.focusedFilterBarColumn,\n loadingText = _this$state19.loadingText,\n loadingScrimProgress = _this$state19.loadingScrimProgress,\n loadingSpinnerShown = _this$state19.loadingSpinnerShown,\n loadingCancelShown = _this$state19.loadingCancelShown,\n loadingBlocksGrid = _this$state19.loadingBlocksGrid,\n shownColumnTooltip = _this$state19.shownColumnTooltip,\n hoverAdvancedFilter = _this$state19.hoverAdvancedFilter,\n shownAdvancedFilter = _this$state19.shownAdvancedFilter,\n maximizedAdvancedFilter = _this$state19.maximizedAdvancedFilter,\n hoverSelectColumn = _this$state19.hoverSelectColumn,\n quickFilters = _this$state19.quickFilters,\n advancedFilters = _this$state19.advancedFilters,\n searchFilter = _this$state19.searchFilter,\n selectDistinctColumns = _this$state19.selectDistinctColumns,\n movedColumns = _this$state19.movedColumns,\n movedRows = _this$state19.movedRows,\n formatter = _this$state19.formatter,\n conditionalFormats = _this$state19.conditionalFormats,\n conditionalFormatPreview = _this$state19.conditionalFormatPreview,\n conditionalFormatEditIndex = _this$state19.conditionalFormatEditIndex,\n columnAlignmentMap = _this$state19.columnAlignmentMap,\n sorts = _this$state19.sorts,\n reverse = _this$state19.reverse,\n customColumns = _this$state19.customColumns,\n selectedRanges = _this$state19.selectedRanges,\n isTableDownloading = _this$state19.isTableDownloading,\n tableDownloadStatus = _this$state19.tableDownloadStatus,\n tableDownloadProgress = _this$state19.tableDownloadProgress,\n tableDownloadEstimatedTime = _this$state19.tableDownloadEstimatedTime,\n showSearchBar = _this$state19.showSearchBar,\n searchValue = _this$state19.searchValue,\n selectedSearchColumns = _this$state19.selectedSearchColumns,\n invertSearchColumns = _this$state19.invertSearchColumns,\n aggregationSettings = _this$state19.aggregationSettings,\n selectedAggregation = _this$state19.selectedAggregation,\n rollupConfig = _this$state19.rollupConfig,\n openOptions = _this$state19.openOptions,\n pendingSavePromise = _this$state19.pendingSavePromise,\n pendingSaveError = _this$state19.pendingSaveError,\n pendingRowCount = _this$state19.pendingRowCount,\n pendingDataErrors = _this$state19.pendingDataErrors,\n pendingDataMap = _this$state19.pendingDataMap,\n toastMessage = _this$state19.toastMessage,\n frozenColumns = _this$state19.frozenColumns,\n columnHeaderGroups = _this$state19.columnHeaderGroups,\n showOverflowModal = _this$state19.showOverflowModal,\n showNoPastePermissionModal = _this$state19.showNoPastePermissionModal,\n noPastePermissionError = _this$state19.noPastePermissionError,\n overflowText = _this$state19.overflowText,\n overflowButtonTooltipProps = _this$state19.overflowButtonTooltipProps,\n expandCellTooltipProps = _this$state19.expandCellTooltipProps,\n hoverTooltipProps = _this$state19.hoverTooltipProps,\n isGotoShown = _this$state19.isGotoShown,\n gotoRow = _this$state19.gotoRow,\n gotoRowError = _this$state19.gotoRowError,\n gotoValueError = _this$state19.gotoValueError,\n gotoValueSelectedColumnName = _this$state19.gotoValueSelectedColumnName,\n gotoValue = _this$state19.gotoValue,\n gotoValueSelectedFilter = _this$state19.gotoValueSelectedFilter,\n partitionConfig = _this$state19.partitionConfig;\n if (!isReady) {\n return null;\n }\n var theme = this.getTheme();\n var singleColumnHeaderHeight = theme.columnHeaderHeight;\n var filter = this.getCachedFilter(customFilters, quickFilters, advancedFilters, searchFilter);\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n var stateOverride = this.getCachedStateOverride(model, theme, hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, 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$columns7 = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns8 = rollupConfig.columns) === null || _rollupConfig$columns8 === void 0 ? void 0 : _rollupConfig$columns8.length) !== null && _rollupConfig$columns7 !== void 0 ? _rollupConfig$columns7 : 0) > 0;\n var focusField = isFilterBarShown ? this.getFilterBarInput(metrics, metricCalculator, focusedFilterBarColumn, quickFilters, advancedFilters) : null;\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 || _this$tooltip2.update();\n }\n var filterBar = [];\n if (metrics && isFilterBarShown) {\n var metricState = this.getMetricState();\n\n // Advanced Filter buttons\n var visibleColumns = metrics.visibleColumns;\n var _loop2 = function _loop2() {\n var columnIndex = visibleColumns[i];\n var modelColumn = _this7.getModelColumn(columnIndex);\n if (modelColumn != null) {\n var isFilterable = model.isFilterable(modelColumn);\n var buttonCoordinates = isFilterable && metricState ? metricCalculator.getAdvancedFilterButtonCoordinates(columnIndex, metricState, metrics) : null;\n if (buttonCoordinates != null) {\n var x = buttonCoordinates.x,\n y = buttonCoordinates.y;\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 maximizedAdvancedFilter: null\n });\n },\n onContextMenu: event => {\n var _this7$grid;\n (_this7$grid = _this7.grid) === null || _this7$grid === 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 gridX = metrics.gridX,\n _visibleColumns = metrics.visibleColumns,\n allColumnXs = metrics.allColumnXs,\n allColumnWidths = metrics.allColumnWidths,\n columnHeaderHeight = metrics.columnHeaderHeight;\n var _loop3 = function _loop3() {\n var columnIndex = _visibleColumns[_i4];\n var columnX = allColumnXs.get(columnIndex);\n var columnWidth = allColumnWidths.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n var xColumnHeader = gridX + columnX;\n var xFilterBar = gridX + columnX + columnWidth - 20;\n var style = 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 column = model.columns[modelColumn];\n if (column == 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 1; // continue\n }\n var advancedFilter = advancedFilters.get(modelColumn);\n var _ref31 = advancedFilter || {},\n advancedFilterOptions = _ref31.options;\n var sort = TableUtils.getSortForColumn(model.sort, column.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: style,\n children: /*#__PURE__*/_jsx(Popper, {\n className: \"advanced-filter-menu-popper\",\n isMaximized: shownAdvancedFilter === columnIndex && maximizedAdvancedFilter === columnIndex,\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, column, advancedFilterOptions, sortDirection, formatter, shownAdvancedFilter === columnIndex && maximizedAdvancedFilter === columnIndex, _this7.getAdvancedMenuToggleMaximizeHandler(columnIndex))\n })\n }, columnIndex);\n advancedFilterMenus.push(element);\n }\n }\n };\n for (var _i4 = 0; _i4 < _visibleColumns.length; _i4 += 1) {\n if (_loop3()) continue;\n }\n }\n var defaultOptionItems = this.getCachedOptionItems(onCreateChart !== undefined && model.isChartBuilderAvailable, model.isCustomColumnsAvailable, model.isFormatColumnsAvailable, model.isOrganizeColumnsAvailable, 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 optionItems = this.getCachedTransformedOptionItems(defaultOptionItems, transformTableOptions);\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 onFrozenColumnsChanged: this.handleFrozenColumnsChanged\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 availablePlacements: isEditableGridModel(model) && model.isEditable ? ['top'] : ['top', 'bottom'],\n onChange: this.handleAggregationsChange,\n onEdit: this.handleAggregationEdit,\n dh: model.dh\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 {\n // Plugin-contributed items render their own page via\n // `configPage`. The page is isolated inside an error\n // boundary so a throwing plugin doesn't tear down the\n // entire grid subtree. Built-in items that hit the default\n // case indicate a programmer error (unhandled enum case).\n var PluginPage = option.configPage;\n if (PluginPage == null) {\n throw Error(\"Unexpected option type \".concat(option.type));\n }\n return /*#__PURE__*/_jsx(PluginTableOptionsErrorBoundary, {\n itemType: String(option.type),\n children: /*#__PURE__*/_jsx(PluginPage, {\n model: model,\n viewState: this.getCachedViewState(this.getCachedHiddenColumnNames(hiddenColumns, model.columns)),\n onBack: this.handleMenuBack\n })\n }, String(option.type));\n }\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 nodeRef: this.slideTransitionRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: this.slideTransitionRef,\n className: \"iris-grid-partition-selector-wrapper iris-grid-bar iris-grid-bar-primary\",\n children: isPartitionedGridModel(model) && model.isPartitionRequired && /*#__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 nodeRef: this.bottomTransitionRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: this.bottomTransitionRef,\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 top: top,\n bottom: bottom,\n left: left,\n right: right,\n filter: filter,\n formatter: formatter,\n columnAlignmentMap: columnAlignmentMap,\n sorts: sorts,\n reverse: reverse,\n movedColumns: movedColumns,\n customColumns: customColumns,\n hiddenColumns: hiddenColumns,\n alwaysFetchColumns: this.getAlwaysFetchColumns(alwaysFetchColumns, model.columns, movedColumns, model.floatingLeftColumnCount, model.floatingRightColumnCount, (_this$grid30 = this.grid) === null || _this$grid30 === void 0 || (_this$grid30 = _this$grid30.state.draggingColumn) === null || _this$grid30 === void 0 ? void 0 : _this$grid30.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 showExtraGroupColumn: this.showExtraGroupColumn\n }), !isMenuShown && /*#__PURE__*/_jsx(\"div\", {\n className: \"grid-settings-button\",\n style: {\n height: \"\".concat(singleColumnHeaderHeight, \"px\"),\n width: \"\".concat(singleColumnHeaderHeight, \"px\")\n },\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), hoverTooltipProps && this.getHoverTooltip(hoverTooltipProps)]\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__*/_jsx(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 }, \"table-options\"), ...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 }), /*#__PURE__*/_jsx(NoPastePermissionModal, {\n isOpen: showNoPastePermissionModal,\n onClose: this.handleCloseNoPastePermissionModal,\n errorMessage: noPastePermissionError\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 advancedFilters: EMPTY_MAP,\n advancedSettings: EMPTY_MAP,\n alwaysFetchColumns: EMPTY_ARRAY,\n conditionalFormats: EMPTY_ARRAY,\n customColumnFormatMap: EMPTY_MAP,\n columnAlignmentMap: 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 reverse: false,\n customColumns: EMPTY_ARRAY,\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n rollupConfig: undefined,\n userColumnWidths: EMPTY_MAP,\n userColumnWidthsByName: undefined,\n userRowHeights: EMPTY_MAP,\n onSelectionChanged: () => undefined,\n isSelectingColumn: false,\n isSelectingPartition: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n columnAllowedCursor: 'linker',\n columnNotAllowedCursor: 'linker-not-allowed',\n copyCursor: 'copy',\n name: 'table',\n onlyFetchVisibleColumns: true,\n showSearchBar: false,\n searchValue: '',\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 showExtraGroupColumn: true,\n formatter: EMPTY_ARRAY\n },\n canCopy: true,\n canDownloadCsv: true,\n frozenColumns: undefined,\n // Do not set a default density prop since we need to know if it overrides the global density setting\n density: undefined,\n canToggleSearch: true,\n mouseHandlers: EMPTY_ARRAY,\n keyHandlers: EMPTY_ARRAY,\n getMetricCalculator: function getMetricCalculator() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return new IrisGridMetricCalculator(...args);\n }\n});\nexport default IrisGrid;\n//# sourceMappingURL=IrisGrid.js.map"],"names":["_defineProperty","e","r","_toPropertyKey","t","i","_toPrimitive","log","Log","AdvancedFilterCreatorFilterItem","PureComponent","columnType","filterType","TableUtils","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","getLabelForBooleanFilter","props","memoizeOne","column","operation","value","timeZone","tableUtils","_props$value","_value","filterTypes","_props$selectedType","selectedType","_this$typeDropdown","prevProps","_this$props","eventTargetValue","onChange","event","onDelete","_this$props2","formatter","_this$state","showValueInput","typeOptionElements","isValid","type","label","element","_jsx","_jsxs","Select","typeDropdown","classNames","Button","vsTrash","AdvancedFilterCreatorSelectValueList","values","v","selectedValues","dh","table","filters","invertSelection","itemIndex","selectedIndex","isSelected","offset","items","visibleItemIndex","top","bottom","_this$props3","data","row","displayValue","itemCount","item","isLoading","viewportSize","topRow","bottomRow","SelectValueList","list","FadeTransition","LoadingSpinner","AdvancedFilterCreatorSelectValue","prevState","searchTable","searchText","_this$state2","count","formattedCount","formattedTableSize","prefix","searchTablePromise","_this$state3","error","filter","_this$state4","showSearch","columnName","displayedValuesText","placeholderText","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","inputs","FilterOperator","operator","assertFilterOperatorValue","filterIndex","key","addToExisting","ContextActionUtils","onDone","filterItem","direction","onSortChange","onFilterChange","_ref2","operators","_this","_this$props4","sortDirection","isMaximized","onToggleMaximize","_this$state5","valuesTableError","isValuesTableAvailable","isBoolean","isDateType","filterItemElements","_loop","filterOperator","isAndFilter","operatorElement","showAddFilterItem","addFilterItem","FontAwesomeIcon","dhNewCircleLargeFilled","dhSortAmountDown","vsScreenNormal","vsScreenFull","_Fragment","makeTernaryFormatRule","config","prevRule","styleDBString","getStyleDBString","conditionDBString","getConditionDBString","makeRowFormatColumn","rule","makeColumnFormatColumn","col","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","l","n","u","a","f","o","_toArray","_iterableToArray","_arrayLikeToArray","FormatterType","NumberCondition","StringCondition","DateCondition","BooleanCondition","CharCondition","FormatStyleType","getLabelForStyleType","option","getBackgroundForStyleConfig","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","formattedValue","_value$split","_value$split2","dateTimeString","rest","tzCode","tz","getShortLabelForConditionType","getFormatColumns","columns","rules","result","rowFormatConfig","columnFormatConfigMap","_ref5","formatterType","name","_ref3","_ref4","prevFormatColumn","formatColumn","isDateConditionValid","_split","_split2","DateUtils","isSupportedColumn","_ref6","IrisGridBottomBar","_ref$animation","animation","children","className","isShown","onClick","onEntering","onEntered","onExiting","onExited","nodeRef","useRef","CSSTransition","ThemeExport","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","_ref$isSaving","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","pendingDataErrors","pendingDataMap","_onExited","_useState","useState","_useState2","isSuccessShown","setIsSuccessShown","_useState3","_useState4","wasSuccessShown","setWasSuccessShown","successTimeout","prevIsSaving","usePrevious","errorMessage","useMemo","useEffect","pendingRowCount","commitIcon","vsPass","vsWarning","asyncGeneratorStep","c","_asyncToGenerator","_next","_throw","isCopyRangesOperation","copyOperation","isCopyHeaderOperation","IrisGridCopyHandler","Component","copyState","rowCount","buttonState","ranges","GridRange","text","_this2","copyToClipboard","_this3","_this3$props","columnDepth","movedColumns","modelIndex","GridUtils","copyText","includeHeaders","userColumnWidths","_movedColumns","formatValues","hiddenColumns","IrisGridUtils","modelRanges","subtractRanges","formatValue","CanceledPromiseError","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","FilterInputField","debounceMs","debounce","_this$inputField","_this$inputField2","initialValue","isChanged","setGridFocus","defocusInput","_this$inputField3","relatedTarget","backward","onTab","onContextMenu","style","showAdvancedFilterButton","isAdvancedFilterSet","onAdvancedFiltersTriggered","inputField","dhFilterFilled","vsFilter","CopyCellKeyHandler","KeyHandler","irisGrid","grid","_grid$state","mouseX","mouseY","gridPoint","CopyKeyHandler","selectedRanges","ReverseKeyHandler","IrisGridShortcuts","reverse","ClearFilterKeyHandler","ToastBottomBar","_ref$children","setIsShown","timeout","prevChildren","startTimer","useCallback","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","left","right","columnAlignmentMap","_ref$reverse","sorts","customColumns","alwaysFetchColumns","_ref$rollupConfig","rollupConfig","_ref$totalsConfig","totalsConfig","_ref$selectDistinctCo","selectDistinctColumns","EMPTY_ARRAY","_ref$pendingRowCount","_ref$pendingDataMap","EMPTY_MAP","frozenColumns","formatColumns","columnHeaderGroups","partitionConfig","showExtraGroupColumn","isTotalsAvailable","isRollupAvailable","useOnChange","isIrisGridTreeTableModel","sortsForModel","isPartitionedGridModel","STATS_LABEL_OVERRIDES","ColumnStatistics","_STATS_LABEL_OVERRIDE","w","numRows","stats","onStatistics","statistics","_column$displayName","loading","showGenerateStatistics","statisticElements","description","_statistics$i","statisticElement","rowCountLabel","isExpandableGridModel","formattedRowCount","CopyButton","dhSortSlash","dhFreeze","vsLock","isEditableGridModel","dhRefresh","CrossColumnSearch","searchValue","selectedColumns","filterColumns","filterValue","searchFilter","_this$searchField$cur","update","_this$props5","isConfigureColumnsShown","hasAllColumnsSelected","hasNoColumnsSelected","icon","dhSquareFilled","dhGearFilled","dhCheckSquare","vsCircleLargeFilled","dhWarningCircleFilled","dhRemoveSquareFilled","SearchInput","Tooltip","Popper","Checkbox","ownKeys","_objectSpread","IrisGridPartitionSelector","memoizee","Pending","keysTable","keyTable","baseTable","prevConfig","partitionTables","newPartitionConfig","selectedValue","newPartitions","tCopy","partitionFilters","partition","partitionColumn","newConfig","_","_x","_x2","partitions","previousFilter","previousPartition","previousColumn","partitionFilter","partitionSelectors","Picker","vsChevronRight","vsKey","vsMerge","SelectDistinctBuilder","filteredInputs","val","deepEqual","prevInputs","input","inputIndex","disableAddButton","PluginTableOptionsErrorBoundary","info","itemType","AdvancedSettingsMenu","_ref$onChange","_onChange","Menu","isOn","AdvancedSettingsType","DEFAULT_CALLBACK","getRuleValue","getRuleTitle","ConditionalFormattingMenu","_props$rules","_props$onChange","_props$onCreate","onCreate","_props$onSelect","onSelect","handleRuleClick","handleDeleteClick","updatedRules","handleDragHandlerClick","handleDragEnd","DragUtils","sourceIndex","destinationIndex","sourceInput","DragDropContext","Droppable","provided","snapshot","Draggable","vsGripper","numberConditionOptions","stringConditions","dateConditions","booleanConditions","charConditions","isNumberConditionValid","startValue","endValue","getNumberInputs","selectedCondition","handleValueChange","handleStartValueChange","handleEndValueChange","isInvalid","conditionValue","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","ConditionEditor","selectedColumnType","prevColumnType","setPrevColumnType","setCondition","_useState5","_useState6","setValue","_useState7","_useState8","setStartValue","_useState9","_useState0","setEndValue","_useState1","_useState10","setIsValid","conditions","handleConditionChange","isConditionValid","conditionInputs","hasInvalidValue","showInvalid","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","vsCheck","renderMenuElement","DropdownMenu","makeDefaultConfig","_columns$","ColumnFormatEditor","_columns$find","_props$config","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","_props$onSave","_props$onUpdate","onUpdate","_props$onCancel","onCancel","defaultRule","selectedFormatter","setFormatter","setRule","handleCancel","handleSave","handleFormatterChange","handleRuleChange","ruleConfig","isRuleValid","updatedRule","IrisGridCellOverflowModal","_editorRef$current$ge","_editorRef$current2","isOpen","onClose","isOpened","setIsOpened","height","setHeight","showLineNumbers","setShowLineNumbers","isFormatted","setIsFormatted","canFormat","setCanFormat","editorRef","toggleLineNumbers","formatAsJSON","_editorRef$current","autoSetLineNumbers","_editor$getModel$getL","_editor$getModel","editor","handleToggle","onEditorInitialized","_document$activeEleme","contentHeight","Modal","ModalHeader","ToggleButton","Icon","vsListOrdered","vsJson","ModalBody","Editor","DEFAULT_FORMAT_STRING","GotoRow","forwardRef","ref","gotoRow","gotoRowError","gotoValueError","onGotoRowSubmit","_onEntered","onGotoRowNumberChanged","gotoValueSelectedColumnName","gotoValue","gotoValueFilter","onGotoValueSelectedColumnNameChanged","onGotoValueSelectedFilterChanged","onGotoValueChanged","onGotoValueSubmit","gotoRowInputRef","gotoValueInputRef","isGotoRowActive","setIsGotoRowActive","isIrisGridTableModelTemplate","gotoRowInputId","handleGotoValueNumberKeyDown","onGotoValueInputChanged","handleGotoValueKeySubmit","normalizedType","useImperativeHandle","_gotoRowInputRef$curr","selectInput","_gotoRowInputRef$curr2","_gotoValueInputRef$cu","renderValueInput","DateTimeInput","FilterType","vsClose","vsArrowUp","vsArrowDown","NoPastePermissionModal","pasteShortcutText","GLOBAL_SHORTCUTS","ModalFooter","VIEWPORT_LOADING_DELAY","UPDATE_DOWNLOAD_THROTTLE","SET_FILTER_DEBOUNCE","SEEK_ROW_DEBOUNCE","SET_CONDITIONAL_FORMAT_DEBOUNCE","DEFAULT_AGGREGATION_SETTINGS","UNFORMATTED_DATE_PATTERN","isEmptyConfig","advancedFilters","aggregationSettings","quickFilters","IrisGrid","_model$layoutHints","_model$columns$0$name","_model$columns$","advancedFilterOptions","isChartBuilderAvailable","isCustomColumnsAvailable","isFormatColumnsAvailable","isOrganizeColumnsAvailable","isSelectDistinctAvailable","isExportAvailable","toggleFilterBarAction","toggleSearchBarAction","toggleGotoRowAction","isFilterBarShown","showSearchBar","canDownloadCsv","canToggleSearch","showGotoRow","hasAdvancedSettings","optionItems","OptionType","dhGraphLineUp","dhEye","vsEdit","vsSplitHorizontal","dhTriangleDownSquare","vsSymbolOperator","vsRuby","vsCloudDownload","vsTools","vsSearch","vsReply","transformTableOptions","transformedItems","err","byType","sortedItems","b","_a$item$order","_b$item$order","metricCalculator","idx","_columns$idx","aggregations","aggregationMap","selected","invert","AggregationUtils","rulesParam","preview","editIndex","theme","hoverSelectColumn","isSelectingColumn","loadingScrimProgress","isMenuShown","customFilters","contextTheme","isEditable","floatingRowCount","density","_theme$rowFooterWidth","baseTheme","createDefaultIrisGridTheme","rowFooterWidth","densityTheme","keyHandlers","mouseHandlersProp","handler","rendererProp","IrisGridRenderer","floatingLeftColumnCount","floatingRightColumnCount","draggingRange","floatingColumns","_i","_i2","columnSet","selectedSearchColumns","invertSearchColumns","throttle","loadingSpinnerShown","conditionalFormatPreview","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","TableCsvExporter","overflowButtonTooltipProps","wrapperStyle","popperOptions","expandCellTooltipProps","expandTooltipDisplayValue","isExpandAllAvailable","hoverTooltipProps","hoverDisplayValue","SHORTCUTS","_aggregationSettings","conditionalFormats","customColumnFormatMap","_isFilterBarShown","isSelectingPartition","_model","movedColumnsProp","movedRowsProp","_rollupConfig","_userColumnWidths","userColumnWidthsByName","userRowHeights","_showSearchBar","_searchValue","_selectedSearchColumns","_invertSearchColumns","_advancedFilters","_quickFilters","canCopy","getMetricCalculator","_dh","_keyHandlers","mouseHandlers","IrisGridCellOverflowMouseHandler","IrisGridRowTreeMouseHandler","IrisGridTokenMouseHandler","IrisGridColumnSelectMouseHandler","IrisGridColumnTooltipMouseHandler","IrisGridSortMouseHandler","IrisGridFilterMouseHandler","IrisGridContextMenuHandler","IrisGridDataSelectMouseHandler","PendingMouseHandler","IrisGridPartitionedTableMouseHandler","IrisGridCopyCellMouseHandler","movedRows","_metricCalculator","searchColumns","_searchFilter","Formatter","inputFilters","settings","changedInputFilters","inputFilter","_advancedSettings$get","advancedSettings","replaceExistingFilters","loadingScrimStartTime","loadingScrimFinishTime","now","currentTime","totalTime","state","openOptions","isAggEditType","_this$grid$canvasWrap","_this$grid","_this$grid2","gridMetricState","renderer","rowIndex","rawValue","modelColumn","modelRow","metrics","modelColumns","modelRows","_this$context","contextDensity","replaceExisting","newAdvancedFilters","newQuickFilters","quickFilter","_ref7","_ref8","filterMap","_advancedSettings$get2","clearFiltersOnLinkerFilterUpdate","_ref9","filterList","combinedText","modelRange","clearRange","_ref0","_ref1","_ref10","_settings$defaultDeci","_settings$defaultInte","_settings$truncateNum","_settings$showEmptySt","_settings$showNullStr","_settings$showExtraGr","forceUpdate","globalColumnFormats","FormatterUtils","dateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","isColumnFormatChanged","isDateFormattingChanged","isDecimalFormattingChanged","isIntegerFormattingChanged","isTruncateNumbersChanged","isShowEmptyStringsChanged","isShowNullStringsChanged","isShowExtraGroupColumnChanged","updatedFormats","_this$globalColumnFor","mergedColumnFormats","applyInputFiltersOnInit","reverseType","inputFiltersWithValues","resolved","newPartition","partitionColumnSet","_ref11","_ref12","_ref13","_ref14","columnData","loadingText","_ref15","_ref15$resetRanges","resetRanges","_ref15$loadingCancelS","loadingCancelShown","_ref15$loadingBlocksG","loadingBlocksGrid","_this$gridWrapper$get","_this$gridWrapper","minScrimTransitionTime","maxScrimTransitionTime","scrimTransitionTime","_this$lastLoadedConfi","IrisGridModel","_this$grid3","columnCount","_this$state6","metricState","scrollColumn","_this$grid4","columnVisibleIndex","_this$grid5","_this$state7","_this$state8","allFrozenColumns","visibleIndex","newMovedColumns","_this$state9","expandDescendants","isExpandableColumnGridModel","modelIndexes","isVisible","_this$grid6","_this$state0","defaultWidth","calculatedWidth","_model$layoutHints$fr","_model$layoutHints2","_this$grid7","onError","_this$state1","loadingMessage","_this$grid8","entries","_entries$i","columnWidth","_this$grid9","currentSorts","_this$grid0","_this$grid1","isAbs","_this$grid10","focusIndex","_this$grid11","_model$layoutHints3","_dh$SearchDisplayMode","_dh$SearchDisplayMode2","_this$props6","searchDisplayMode","_this$crossColumnRef","_this$crossColumnRef2","_this$grid12","_this$grid13","_this$grid14","isGotoShown","_this$gotoRowRef$curr","cursorRow","cursorColumn","_document","pendingSavePromise","containsGridCellInputField","_this3$grid","ValidationError","newPendingSavePromise","_this4","onColumnSelected","dataMap","onDataSelected","_this5","groupedColumns","isExpandable","isGrouped","_this$grid15","oldSort","newSort","_this$grid16","_ref16","maximizedAdvancedFilter","_this$filterInputRef","_this$state10","focusedFilterBarColumn","_this$filterInputRef2","_this$props7","onCreateChart","_ref17","_this$grid17","selectedFormat","prevCustomColumnFormatMap","columnFormattingRule","alignment","_ref18","_ref18$columnAlignmen","newColumnAlignmentMap","_ref19","newOptions","_ref20","_ref21","isMissingPartitionError","_ref22","detail","_ref23","_this$grid18","_this$state11","_this$grid$state","_this$grid19","_ref24","_ref24$selectionEndRo","selectionEndRow","bottomViewport","bottomNonFloating","onSelectionChanged","onChangeApplied","prevColumnHeaderGroups","group","isColumnHeaderGroup","_this$grid20","tooltip","_this$state12","_this$state13","_this$state14","oldCustomColumns","customColumn","removedColumnNames","newSorts","newSelectDistinctColumns","isReady","_model$layoutHints4","next","_this$grid21","_this$grid22","_this$state15","contentWidth","getOrThrow","userWidths","_this$grid23","_this$state16","allColumns","visibleColumns","_ref25","_ref26","width","_ref27","_ref28","contentWidths","manualColumns","_i3","_modelIndex","_contentWidth","_rollupConfig$columns","_rollupConfig$columns2","added","removed","isRollup","changes","shouldStartLoading","op","aggregation","_rollupConfig$columns3","_rollupConfig$columns4","_ref29","_rollupConfig$columns5","_rollupConfig$columns6","fileName","frozenTable","tableSubscription","snapshotRanges","includeColumnHeaders","useUnformattedValues","_ref30","newAggregations","inputString","_arguments","_this6","_this6$grid","isBackwards","_this6$state","selectedColumnName","gotoValueSelectedFilter","searchFromRow","isContains","isIgnoreCase","_this6$grid2","columnDataType","_DateUtils$parseDateR","_DateUtils$parseDateR2","startDate","inputValue","_this$tableSaver","isDeletableGridModel","columnAllowedCursor","irisGridState","gridState","onStateChange","_this$grid24","_this$gridWrapper2","_this$state17","shownColumnTooltip","gridRect","popperMargin","columnHeaderHeight","allColumnXs","allColumnWidths","columnHeaderMaxDepth","columnX","clamp","rowNumber","rowInt","_this$grid25","_this$grid26","_this$grid27","boundedLeft","boundedWidth","virtualReference","_this$tooltip","_this$grid28","_this$state18","prevColumnName","gotoValueManuallyChanged","prevColumn","_this$grid29","filterBoxCoordinates","x","y","fieldWidth","fieldHeight","advancedFilter","isBarFiltered","_rollupConfig$columns7","_rollupConfig$columns8","_this7","_this$grid30","_openOptions","_this$props8","getDownloadWorker","isStuckToBottom","isStuckToRight","onlyFetchVisibleColumns","onAdvancedSettingsChange","_this$state19","hoverAdvancedFilter","shownAdvancedFilter","conditionalFormatEditIndex","isTableDownloading","selectedAggregation","pendingSaveError","toastMessage","showOverflowModal","showNoPastePermissionModal","noPastePermissionError","overflowText","singleColumnHeaderHeight","stateOverride","focusField","loadingElement","loadingStatus","gridY","columnTooltip","_this$tooltip2","filterBar","_loop2","isFilterable","buttonCoordinates","isFilterSet","isFilterVisible","_this7$grid","advancedFilterMenus","gridX","_visibleColumns","_loop3","_i4","xColumnHeader","xFilterBar","_ref31","isSortDirection","defaultOptionItems","openOptionsStack","ChartBuilder","VisibilityOrderingBuilder","CustomColumnBuilder","RollupRows","Aggregations","AggregationEdit","PluginPage","Grid","vsMenu","TableSaver","tableSaver","SlideTransition","Stack","Page","ContextActions","IrisGridThemeContext","DownloadServiceWorkerUtils","_len","args","_key","IrisGridMetricCalculator"],"mappings":"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"}