@deephaven/iris-grid 0.46.1-beta.0 → 0.46.1-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/AdvancedFilterCreator.js +122 -102
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +47 -38
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +52 -40
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +35 -28
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnStatistics.js +74 -54
  10. package/dist/ColumnStatistics.js.map +1 -1
  11. package/dist/CrossColumnSearch.js +113 -90
  12. package/dist/CrossColumnSearch.js.map +1 -1
  13. package/dist/FilterInputField.js +42 -35
  14. package/dist/FilterInputField.js.map +1 -1
  15. package/dist/GotoRow.js +226 -193
  16. package/dist/GotoRow.js.map +1 -1
  17. package/dist/IrisGrid.js +371 -344
  18. package/dist/IrisGrid.js.map +1 -1
  19. package/dist/IrisGridBottomBar.js +11 -8
  20. package/dist/IrisGridBottomBar.js.map +1 -1
  21. package/dist/IrisGridCellOverflowModal.js +56 -50
  22. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  23. package/dist/IrisGridCopyHandler.js +34 -24
  24. package/dist/IrisGridCopyHandler.js.map +1 -1
  25. package/dist/IrisGridPartitionSelector.js +59 -46
  26. package/dist/IrisGridPartitionSelector.js.map +1 -1
  27. package/dist/PartitionSelectorSearch.js +43 -36
  28. package/dist/PartitionSelectorSearch.js.map +1 -1
  29. package/dist/PendingDataBottomBar.js +34 -22
  30. package/dist/PendingDataBottomBar.js.map +1 -1
  31. package/dist/ToastBottomBar.js +5 -3
  32. package/dist/ToastBottomBar.js.map +1 -1
  33. package/dist/format-context-menus/CustomFormatAction.js +34 -25
  34. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  35. package/dist/format-context-menus/FormatContextMenuUtils.js +2 -1
  36. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  37. package/dist/mousehandlers/IrisGridContextMenuHandler.js +50 -36
  38. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  39. package/dist/sidebar/AdvancedSettingsMenu.js +2 -1
  40. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  41. package/dist/sidebar/ChartBuilder.js +134 -107
  42. package/dist/sidebar/ChartBuilder.js.map +1 -1
  43. package/dist/sidebar/CustomColumnBuilder.js +70 -48
  44. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  45. package/dist/sidebar/CustomColumnInput.js +66 -53
  46. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  47. package/dist/sidebar/InputEditor.js +15 -11
  48. package/dist/sidebar/InputEditor.js.map +1 -1
  49. package/dist/sidebar/RollupRows.js +130 -103
  50. package/dist/sidebar/RollupRows.js.map +1 -1
  51. package/dist/sidebar/SelectDistinctBuilder.js +49 -39
  52. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  53. package/dist/sidebar/TableCsvExporter.js +178 -128
  54. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  55. package/dist/sidebar/aggregations/AggregationEdit.js +67 -57
  56. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  57. package/dist/sidebar/aggregations/Aggregations.js +86 -63
  58. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  59. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +30 -22
  60. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  61. package/dist/sidebar/conditional-formatting/ConditionEditor.js +52 -47
  62. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  63. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +52 -42
  64. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  65. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +90 -67
  66. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  67. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +30 -22
  68. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  69. package/dist/sidebar/conditional-formatting/StyleEditor.js +70 -58
  70. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  71. package/dist/sidebar/icons/BarIcon.js +21 -12
  72. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  73. package/dist/sidebar/icons/FormatColumnWhereIcon.js +38 -30
  74. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  75. package/dist/sidebar/icons/FormatRowWhereIcon.js +32 -24
  76. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  77. package/dist/sidebar/icons/HistogramIcon.js +21 -12
  78. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  79. package/dist/sidebar/icons/LineIcon.js +24 -15
  80. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  81. package/dist/sidebar/icons/PieIcon.js +21 -12
  82. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  83. package/dist/sidebar/icons/ScatterIcon.js +71 -62
  84. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  85. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +129 -121
  86. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  87. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +121 -87
  88. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
  89. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +40 -26
  90. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  91. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +17 -14
  92. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  93. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +34 -28
  94. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
  95. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +2 -2
  96. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  97. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +8 -7
  98. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  99. package/package.json +15 -15
@@ -7,6 +7,9 @@ import { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';
7
7
  import { dhGearFilled, dhCheckSquare, dhSquareFilled, dhRemoveSquareFilled, dhWarningCircleFilled, vsCircleLargeFilled } from '@deephaven/icons';
8
8
  import { TableUtils } from '@deephaven/jsapi-utils';
9
9
  import "./CrossColumnSearch.css";
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ import { Fragment as _Fragment } from "react/jsx-runtime";
12
+ import { jsxs as _jsxs } from "react/jsx-runtime";
10
13
  class CrossColumnSearch extends PureComponent {
11
14
  static createSearchFilter(dh, searchValue, selectedColumns, columns, invertSelection) {
12
15
  var filterColumns = invertSelection ? columns.filter(column => !selectedColumns.includes(column.name)).map(column => column.name) : selectedColumns;
@@ -98,101 +101,121 @@ class CrossColumnSearch extends PureComponent {
98
101
  var icon;
99
102
  if (hasAllColumnsSelected) {
100
103
  // icon if all columns selected for search
101
- icon = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
102
- icon: dhSquareFilled,
103
- mask: dhGearFilled,
104
- transform: "shrink-2 down-5 right-7"
105
- }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
106
- icon: dhCheckSquare,
107
- className: "text-primary",
108
- transform: "shrink-4 down-5 right-7"
109
- }));
104
+ icon = /*#__PURE__*/_jsxs(_Fragment, {
105
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
106
+ icon: dhSquareFilled,
107
+ mask: dhGearFilled,
108
+ transform: "shrink-2 down-5 right-7"
109
+ }), /*#__PURE__*/_jsx(FontAwesomeIcon, {
110
+ icon: dhCheckSquare,
111
+ className: "text-primary",
112
+ transform: "shrink-4 down-5 right-7"
113
+ })]
114
+ });
110
115
  } else if (hasNoColumnsSelected) {
111
116
  // icon error, no columns selected for searching
112
- icon = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
113
- icon: vsCircleLargeFilled,
114
- mask: dhGearFilled,
115
- transform: "shrink-1 down-5 right-7"
116
- }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
117
- icon: dhWarningCircleFilled,
118
- className: "text-danger",
119
- transform: "shrink-4 down-5 right-7"
120
- }));
117
+ icon = /*#__PURE__*/_jsxs(_Fragment, {
118
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
119
+ icon: vsCircleLargeFilled,
120
+ mask: dhGearFilled,
121
+ transform: "shrink-1 down-5 right-7"
122
+ }), /*#__PURE__*/_jsx(FontAwesomeIcon, {
123
+ icon: dhWarningCircleFilled,
124
+ className: "text-danger",
125
+ transform: "shrink-4 down-5 right-7"
126
+ })]
127
+ });
121
128
  } else {
122
129
  // icon if some columns selected, but not all
123
- icon = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
124
- icon: dhSquareFilled,
125
- mask: dhGearFilled,
126
- transform: "shrink-2 down-5 right-7"
127
- }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
128
- icon: dhRemoveSquareFilled,
129
- className: "text-primary",
130
- transform: "shrink-4 down-5 right-7"
131
- }));
130
+ icon = /*#__PURE__*/_jsxs(_Fragment, {
131
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
132
+ icon: dhSquareFilled,
133
+ mask: dhGearFilled,
134
+ transform: "shrink-2 down-5 right-7"
135
+ }), /*#__PURE__*/_jsx(FontAwesomeIcon, {
136
+ icon: dhRemoveSquareFilled,
137
+ className: "text-primary",
138
+ transform: "shrink-4 down-5 right-7"
139
+ })]
140
+ });
132
141
  }
133
- return /*#__PURE__*/React.createElement("div", {
134
- className: "cross-column-container"
135
- }, /*#__PURE__*/React.createElement(SearchInput, {
136
- className: "cross-column-search",
137
- placeholder: "Search Data...",
138
- value: value,
139
- onChange: this.handleSearchValueChange,
140
- ref: this.searchField
141
- }), /*#__PURE__*/React.createElement("button", {
142
- type: "button",
143
- className: "btn btn-link btn-link-icon px-2",
144
- onClick: () => {
145
- if (isConfigureColumnsShown) {
146
- this.setState({
147
- isConfigureColumnsShown: false
148
- });
149
- } else {
150
- this.setState({
151
- isConfigureColumnsShown: true
152
- });
153
- }
154
- }
155
- }, /*#__PURE__*/React.createElement("div", {
156
- className: "fa-layers"
157
- }, icon), /*#__PURE__*/React.createElement(Tooltip, null, "Configure Columns"), /*#__PURE__*/React.createElement(Popper, {
158
- isShown: isConfigureColumnsShown,
159
- className: "cross-column-popper",
160
- onExited: () => {
161
- this.setState({
162
- isConfigureColumnsShown: false
163
- });
164
- },
165
- closeOnBlur: true,
166
- interactive: true
167
- }, /*#__PURE__*/React.createElement("div", {
168
- className: "cross-column-popup"
169
- }, "Searched Columns", /*#__PURE__*/React.createElement("div", {
170
- className: "cross-column-scroll"
171
- }, columns.map(column => /*#__PURE__*/React.createElement(React.Fragment, {
172
- key: column.name
173
- }, /*#__PURE__*/React.createElement(Checkbox, {
174
- className: "cross-column-checkbox",
175
- checked: invertSelection ? !selectedColumns.includes(column.name) : selectedColumns.includes(column.name),
176
- onChange: () => this.toggleColumn(column.name)
177
- }, column.name), column.type.substring(column.type.lastIndexOf('.') + 1)))), /*#__PURE__*/React.createElement("div", {
178
- className: "cross-column-button-bar"
179
- }, /*#__PURE__*/React.createElement("button", {
180
- type: "button",
181
- className: "btn btn-link",
182
- onClick: this.selectAll
183
- }, "Select All"), /*#__PURE__*/React.createElement("button", {
184
- type: "button",
185
- className: "btn btn-link",
186
- onClick: this.clear
187
- }, "Clear"), /*#__PURE__*/React.createElement("button", {
188
- type: "button",
189
- className: "btn btn-link",
190
- onClick: this.selectNumbers
191
- }, "Numbers Only")), hasNoColumnsSelected && /*#__PURE__*/React.createElement("p", {
192
- className: "text-danger"
193
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
194
- icon: dhWarningCircleFilled
195
- }), " Select at least one column to search.")))));
142
+ return /*#__PURE__*/_jsxs("div", {
143
+ className: "cross-column-container",
144
+ children: [/*#__PURE__*/_jsx(SearchInput, {
145
+ className: "cross-column-search",
146
+ placeholder: "Search Data...",
147
+ value: value,
148
+ onChange: this.handleSearchValueChange,
149
+ ref: this.searchField
150
+ }), /*#__PURE__*/_jsxs("button", {
151
+ type: "button",
152
+ className: "btn btn-link btn-link-icon px-2",
153
+ onClick: () => {
154
+ if (isConfigureColumnsShown) {
155
+ this.setState({
156
+ isConfigureColumnsShown: false
157
+ });
158
+ } else {
159
+ this.setState({
160
+ isConfigureColumnsShown: true
161
+ });
162
+ }
163
+ },
164
+ children: [/*#__PURE__*/_jsx("div", {
165
+ className: "fa-layers",
166
+ children: icon
167
+ }), /*#__PURE__*/_jsx(Tooltip, {
168
+ children: "Configure Columns"
169
+ }), /*#__PURE__*/_jsx(Popper, {
170
+ isShown: isConfigureColumnsShown,
171
+ className: "cross-column-popper",
172
+ onExited: () => {
173
+ this.setState({
174
+ isConfigureColumnsShown: false
175
+ });
176
+ },
177
+ closeOnBlur: true,
178
+ interactive: true,
179
+ children: /*#__PURE__*/_jsxs("div", {
180
+ className: "cross-column-popup",
181
+ children: ["Searched Columns", /*#__PURE__*/_jsx("div", {
182
+ className: "cross-column-scroll",
183
+ children: columns.map(column => /*#__PURE__*/_jsxs(React.Fragment, {
184
+ children: [/*#__PURE__*/_jsx(Checkbox, {
185
+ className: "cross-column-checkbox",
186
+ checked: invertSelection ? !selectedColumns.includes(column.name) : selectedColumns.includes(column.name),
187
+ onChange: () => this.toggleColumn(column.name),
188
+ children: column.name
189
+ }), column.type.substring(column.type.lastIndexOf('.') + 1)]
190
+ }, column.name))
191
+ }), /*#__PURE__*/_jsxs("div", {
192
+ className: "cross-column-button-bar",
193
+ children: [/*#__PURE__*/_jsx("button", {
194
+ type: "button",
195
+ className: "btn btn-link",
196
+ onClick: this.selectAll,
197
+ children: "Select All"
198
+ }), /*#__PURE__*/_jsx("button", {
199
+ type: "button",
200
+ className: "btn btn-link",
201
+ onClick: this.clear,
202
+ children: "Clear"
203
+ }), /*#__PURE__*/_jsx("button", {
204
+ type: "button",
205
+ className: "btn btn-link",
206
+ onClick: this.selectNumbers,
207
+ children: "Numbers Only"
208
+ })]
209
+ }), hasNoColumnsSelected && /*#__PURE__*/_jsxs("p", {
210
+ className: "text-danger",
211
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
212
+ icon: dhWarningCircleFilled
213
+ }), " Select at least one column to search."]
214
+ })]
215
+ })
216
+ })]
217
+ })]
218
+ });
196
219
  }
197
220
  }
198
221
  export default CrossColumnSearch;
@@ -1 +1 @@
1
- {"version":3,"file":"CrossColumnSearch.js","names":["React","PureComponent","FontAwesomeIcon","Checkbox","Popper","SearchInput","Tooltip","dhGearFilled","dhCheckSquare","dhSquareFilled","dhRemoveSquareFilled","dhWarningCircleFilled","vsCircleLargeFilled","TableUtils","CrossColumnSearch","createSearchFilter","dh","searchValue","selectedColumns","columns","invertSelection","filterColumns","filter","column","includes","name","map","length","filterValue","FilterValue","ofString","searchFilter","FilterCondition","search","undefined","constructor","props","handleSearchValueChange","bind","toggleColumn","selectAll","clear","selectNumbers","searchField","createRef","state","isConfigureColumnsShown","focus","current","event","onChange","target","value","sendColumnChange","setInvertSelection","c","update","slice","push","isNumberType","type","render","hasAllColumnsSelected","hasNoColumnsSelected","icon","setState","substring","lastIndexOf"],"sources":["../src/CrossColumnSearch.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport {\n dhGearFilled,\n dhCheckSquare,\n dhSquareFilled,\n dhRemoveSquareFilled,\n dhWarningCircleFilled,\n vsCircleLargeFilled,\n} from '@deephaven/icons';\nimport type {\n Column,\n dh as DhType,\n FilterCondition,\n} from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './CrossColumnSearch.scss';\nimport { ColumnName } from './CommonTypes';\n\ninterface CrossColumnSearchProps {\n value: string;\n selectedColumns: readonly ColumnName[];\n invertSelection: boolean;\n onChange: (\n value: string,\n selectedColumns: readonly ColumnName[],\n invertSelection: boolean\n ) => void;\n columns: readonly Column[];\n}\n\ninterface CrossColumnSearchState {\n isConfigureColumnsShown: boolean;\n}\nclass CrossColumnSearch extends PureComponent<\n CrossColumnSearchProps,\n CrossColumnSearchState\n> {\n static createSearchFilter(\n dh: DhType,\n searchValue: string,\n selectedColumns: readonly ColumnName[],\n columns: readonly Column[],\n invertSelection: boolean\n ): FilterCondition | undefined {\n const filterColumns = invertSelection\n ? columns\n .filter(column => !selectedColumns.includes(column.name))\n .map(column => column.name)\n : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n const filterValue = dh.FilterValue.ofString(searchValue);\n const searchFilter =\n filterColumns.length === columns.length\n ? dh.FilterCondition.search(filterValue)\n : dh.FilterCondition.search(\n filterValue,\n columns\n .filter(column => filterColumns.includes(column.name))\n .map(column => column.filter())\n );\n return searchFilter;\n }\n return undefined;\n }\n\n constructor(props: CrossColumnSearchProps) {\n super(props);\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\n this.searchField = React.createRef();\n\n this.state = {\n isConfigureColumnsShown: false,\n };\n }\n\n searchField: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchField.current?.focus();\n }\n\n handleSearchValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { onChange, selectedColumns, invertSelection } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n\n sendColumnChange(\n selectedColumns: readonly ColumnName[],\n invertSelection: boolean\n ): void {\n const { onChange, value } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n\n setInvertSelection(invertSelection: boolean): void {\n const { onChange, value } = this.props;\n onChange(value, [], invertSelection);\n }\n\n toggleColumn(name: string): void {\n const { selectedColumns, invertSelection } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(\n selectedColumns.filter(c => c !== name),\n invertSelection\n );\n } else {\n const update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n\n selectAll(): void {\n this.setInvertSelection(true);\n }\n\n clear(): void {\n this.setInvertSelection(false);\n }\n\n selectNumbers(): void {\n const { columns } = this.props;\n this.sendColumnChange(\n columns\n .filter(c => TableUtils.isNumberType(c.type))\n .map(column => column.name),\n false\n );\n }\n\n render(): React.ReactElement {\n const { value, selectedColumns, invertSelection, columns } = this.props;\n const { isConfigureColumnsShown } = this.state;\n const hasAllColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === true) ||\n (selectedColumns.length === columns.length && invertSelection === false);\n const hasNoColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === false) ||\n (selectedColumns.length === columns.length && invertSelection === true);\n\n // set icon layers\n let icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhCheckSquare}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = (\n <>\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={dhGearFilled}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhWarningCircleFilled}\n className=\"text-danger\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else {\n // icon if some columns selected, but not all\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhRemoveSquareFilled}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n }\n\n return (\n <div className=\"cross-column-container\">\n <SearchInput\n className=\"cross-column-search\"\n placeholder=\"Search Data...\"\n value={value}\n onChange={this.handleSearchValueChange}\n ref={this.searchField}\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2\"\n onClick={() => {\n if (isConfigureColumnsShown) {\n this.setState({ isConfigureColumnsShown: false });\n } else {\n this.setState({ isConfigureColumnsShown: true });\n }\n }}\n >\n <div className=\"fa-layers\">{icon}</div>\n <Tooltip>Configure Columns</Tooltip>\n <Popper\n isShown={isConfigureColumnsShown}\n className=\"cross-column-popper\"\n onExited={() => {\n this.setState({ isConfigureColumnsShown: false });\n }}\n closeOnBlur\n interactive\n >\n <div className=\"cross-column-popup\">\n Searched Columns\n <div className=\"cross-column-scroll\">\n {columns.map(column => (\n <React.Fragment key={column.name}>\n <Checkbox\n className=\"cross-column-checkbox\"\n checked={\n invertSelection\n ? !selectedColumns.includes(column.name)\n : selectedColumns.includes(column.name)\n }\n onChange={() => this.toggleColumn(column.name)}\n >\n {column.name}\n </Checkbox>\n\n {column.type.substring(column.type.lastIndexOf('.') + 1)}\n </React.Fragment>\n ))}\n </div>\n <div className=\"cross-column-button-bar\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.clear}\n >\n Clear\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectNumbers}\n >\n Numbers Only\n </button>\n </div>\n {hasNoColumnsSelected && (\n <p className=\"text-danger\">\n <FontAwesomeIcon icon={dhWarningCircleFilled} /> Select at\n least one column to search.\n </p>\n )}\n </div>\n </Popper>\n </button>\n </div>\n );\n }\n}\n\nexport default CrossColumnSearch;\n"],"mappings":"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"}
1
+ {"version":3,"file":"CrossColumnSearch.js","names":["React","PureComponent","FontAwesomeIcon","Checkbox","Popper","SearchInput","Tooltip","dhGearFilled","dhCheckSquare","dhSquareFilled","dhRemoveSquareFilled","dhWarningCircleFilled","vsCircleLargeFilled","TableUtils","CrossColumnSearch","createSearchFilter","dh","searchValue","selectedColumns","columns","invertSelection","filterColumns","filter","column","includes","name","map","length","filterValue","FilterValue","ofString","searchFilter","FilterCondition","search","undefined","constructor","props","handleSearchValueChange","bind","toggleColumn","selectAll","clear","selectNumbers","searchField","createRef","state","isConfigureColumnsShown","focus","current","event","onChange","target","value","sendColumnChange","setInvertSelection","c","update","slice","push","isNumberType","type","render","hasAllColumnsSelected","hasNoColumnsSelected","icon","setState","substring","lastIndexOf"],"sources":["../src/CrossColumnSearch.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport {\n dhGearFilled,\n dhCheckSquare,\n dhSquareFilled,\n dhRemoveSquareFilled,\n dhWarningCircleFilled,\n vsCircleLargeFilled,\n} from '@deephaven/icons';\nimport type {\n Column,\n dh as DhType,\n FilterCondition,\n} from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './CrossColumnSearch.scss';\nimport { ColumnName } from './CommonTypes';\n\ninterface CrossColumnSearchProps {\n value: string;\n selectedColumns: readonly ColumnName[];\n invertSelection: boolean;\n onChange: (\n value: string,\n selectedColumns: readonly ColumnName[],\n invertSelection: boolean\n ) => void;\n columns: readonly Column[];\n}\n\ninterface CrossColumnSearchState {\n isConfigureColumnsShown: boolean;\n}\nclass CrossColumnSearch extends PureComponent<\n CrossColumnSearchProps,\n CrossColumnSearchState\n> {\n static createSearchFilter(\n dh: DhType,\n searchValue: string,\n selectedColumns: readonly ColumnName[],\n columns: readonly Column[],\n invertSelection: boolean\n ): FilterCondition | undefined {\n const filterColumns = invertSelection\n ? columns\n .filter(column => !selectedColumns.includes(column.name))\n .map(column => column.name)\n : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n const filterValue = dh.FilterValue.ofString(searchValue);\n const searchFilter =\n filterColumns.length === columns.length\n ? dh.FilterCondition.search(filterValue)\n : dh.FilterCondition.search(\n filterValue,\n columns\n .filter(column => filterColumns.includes(column.name))\n .map(column => column.filter())\n );\n return searchFilter;\n }\n return undefined;\n }\n\n constructor(props: CrossColumnSearchProps) {\n super(props);\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\n this.searchField = React.createRef();\n\n this.state = {\n isConfigureColumnsShown: false,\n };\n }\n\n searchField: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchField.current?.focus();\n }\n\n handleSearchValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { onChange, selectedColumns, invertSelection } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n\n sendColumnChange(\n selectedColumns: readonly ColumnName[],\n invertSelection: boolean\n ): void {\n const { onChange, value } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n\n setInvertSelection(invertSelection: boolean): void {\n const { onChange, value } = this.props;\n onChange(value, [], invertSelection);\n }\n\n toggleColumn(name: string): void {\n const { selectedColumns, invertSelection } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(\n selectedColumns.filter(c => c !== name),\n invertSelection\n );\n } else {\n const update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n\n selectAll(): void {\n this.setInvertSelection(true);\n }\n\n clear(): void {\n this.setInvertSelection(false);\n }\n\n selectNumbers(): void {\n const { columns } = this.props;\n this.sendColumnChange(\n columns\n .filter(c => TableUtils.isNumberType(c.type))\n .map(column => column.name),\n false\n );\n }\n\n render(): React.ReactElement {\n const { value, selectedColumns, invertSelection, columns } = this.props;\n const { isConfigureColumnsShown } = this.state;\n const hasAllColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === true) ||\n (selectedColumns.length === columns.length && invertSelection === false);\n const hasNoColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === false) ||\n (selectedColumns.length === columns.length && invertSelection === true);\n\n // set icon layers\n let icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhCheckSquare}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = (\n <>\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={dhGearFilled}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhWarningCircleFilled}\n className=\"text-danger\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else {\n // icon if some columns selected, but not all\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhRemoveSquareFilled}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n }\n\n return (\n <div className=\"cross-column-container\">\n <SearchInput\n className=\"cross-column-search\"\n placeholder=\"Search Data...\"\n value={value}\n onChange={this.handleSearchValueChange}\n ref={this.searchField}\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2\"\n onClick={() => {\n if (isConfigureColumnsShown) {\n this.setState({ isConfigureColumnsShown: false });\n } else {\n this.setState({ isConfigureColumnsShown: true });\n }\n }}\n >\n <div className=\"fa-layers\">{icon}</div>\n <Tooltip>Configure Columns</Tooltip>\n <Popper\n isShown={isConfigureColumnsShown}\n className=\"cross-column-popper\"\n onExited={() => {\n this.setState({ isConfigureColumnsShown: false });\n }}\n closeOnBlur\n interactive\n >\n <div className=\"cross-column-popup\">\n Searched Columns\n <div className=\"cross-column-scroll\">\n {columns.map(column => (\n <React.Fragment key={column.name}>\n <Checkbox\n className=\"cross-column-checkbox\"\n checked={\n invertSelection\n ? !selectedColumns.includes(column.name)\n : selectedColumns.includes(column.name)\n }\n onChange={() => this.toggleColumn(column.name)}\n >\n {column.name}\n </Checkbox>\n\n {column.type.substring(column.type.lastIndexOf('.') + 1)}\n </React.Fragment>\n ))}\n </div>\n <div className=\"cross-column-button-bar\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.clear}\n >\n Clear\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectNumbers}\n >\n Numbers Only\n </button>\n </div>\n {hasNoColumnsSelected && (\n <p className=\"text-danger\">\n <FontAwesomeIcon icon={dhWarningCircleFilled} /> Select at\n least one column to search.\n </p>\n )}\n </div>\n </Popper>\n </button>\n </div>\n );\n }\n}\n\nexport default CrossColumnSearch;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,QAAQ,EAAEC,MAAM,EAAEC,WAAW,EAAEC,OAAO,QAAQ,uBAAuB;AAC9E,SACEC,YAAY,EACZC,aAAa,EACbC,cAAc,EACdC,oBAAoB,EACpBC,qBAAqB,EACrBC,mBAAmB,QACd,kBAAkB;AAMzB,SAASC,UAAU,QAAQ,wBAAwB;AAAC;AAAA;AAAA;AAAA;AAmBpD,MAAMC,iBAAiB,SAASb,aAAa,CAG3C;EACA,OAAOc,kBAAkB,CACvBC,EAAU,EACVC,WAAmB,EACnBC,eAAsC,EACtCC,OAA0B,EAC1BC,eAAwB,EACK;IAC7B,IAAMC,aAAa,GAAGD,eAAe,GACjCD,OAAO,CACJG,MAAM,CAACC,MAAM,IAAI,CAACL,eAAe,CAACM,QAAQ,CAACD,MAAM,CAACE,IAAI,CAAC,CAAC,CACxDC,GAAG,CAACH,MAAM,IAAIA,MAAM,CAACE,IAAI,CAAC,GAC7BP,eAAe;IACnB,IAAID,WAAW,IAAII,aAAa,CAACM,MAAM,GAAG,CAAC,EAAE;MAC3C,IAAMC,WAAW,GAAGZ,EAAE,CAACa,WAAW,CAACC,QAAQ,CAACb,WAAW,CAAC;MACxD,IAAMc,YAAY,GAChBV,aAAa,CAACM,MAAM,KAAKR,OAAO,CAACQ,MAAM,GACnCX,EAAE,CAACgB,eAAe,CAACC,MAAM,CAACL,WAAW,CAAC,GACtCZ,EAAE,CAACgB,eAAe,CAACC,MAAM,CACvBL,WAAW,EACXT,OAAO,CACJG,MAAM,CAACC,MAAM,IAAIF,aAAa,CAACG,QAAQ,CAACD,MAAM,CAACE,IAAI,CAAC,CAAC,CACrDC,GAAG,CAACH,MAAM,IAAIA,MAAM,CAACD,MAAM,EAAE,CAAC,CAClC;MACP,OAAOS,YAAY;IACrB;IACA,OAAOG,SAAS;EAClB;EAEAC,WAAW,CAACC,KAA6B,EAAE;IACzC,KAAK,CAACA,KAAK,CAAC;IAAC;IACb,IAAI,CAACC,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACC,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACC,YAAY,GAAG,IAAI,CAACA,YAAY,CAACD,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACE,SAAS,GAAG,IAAI,CAACA,SAAS,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,CAACG,KAAK,GAAG,IAAI,CAACA,KAAK,CAACH,IAAI,CAAC,IAAI,CAAC;IAClC,IAAI,CAACI,aAAa,GAAG,IAAI,CAACA,aAAa,CAACJ,IAAI,CAAC,IAAI,CAAC;IAElD,IAAI,CAACK,WAAW,gBAAG3C,KAAK,CAAC4C,SAAS,EAAE;IAEpC,IAAI,CAACC,KAAK,GAAG;MACXC,uBAAuB,EAAE;IAC3B,CAAC;EACH;EAIAC,KAAK,GAAS;IAAA;IACZ,6BAAI,CAACJ,WAAW,CAACK,OAAO,0DAAxB,sBAA0BD,KAAK,EAAE;EACnC;EAEAV,uBAAuB,CAACY,KAA0C,EAAQ;IACxE,IAAM;MAAEC,QAAQ;MAAEhC,eAAe;MAAEE;IAAgB,CAAC,GAAG,IAAI,CAACgB,KAAK;IACjEc,QAAQ,CAACD,KAAK,CAACE,MAAM,CAACC,KAAK,EAAElC,eAAe,EAAEE,eAAe,CAAC;EAChE;EAEAiC,gBAAgB,CACdnC,eAAsC,EACtCE,eAAwB,EAClB;IACN,IAAM;MAAE8B,QAAQ;MAAEE;IAAM,CAAC,GAAG,IAAI,CAAChB,KAAK;IACtCc,QAAQ,CAACE,KAAK,EAAElC,eAAe,EAAEE,eAAe,CAAC;EACnD;EAEAkC,kBAAkB,CAAClC,eAAwB,EAAQ;IACjD,IAAM;MAAE8B,QAAQ;MAAEE;IAAM,CAAC,GAAG,IAAI,CAAChB,KAAK;IACtCc,QAAQ,CAACE,KAAK,EAAE,EAAE,EAAEhC,eAAe,CAAC;EACtC;EAEAmB,YAAY,CAACd,IAAY,EAAQ;IAC/B,IAAM;MAAEP,eAAe;MAAEE;IAAgB,CAAC,GAAG,IAAI,CAACgB,KAAK;IACvD,IAAIlB,eAAe,CAACM,QAAQ,CAACC,IAAI,CAAC,EAAE;MAClC,IAAI,CAAC4B,gBAAgB,CACnBnC,eAAe,CAACI,MAAM,CAACiC,CAAC,IAAIA,CAAC,KAAK9B,IAAI,CAAC,EACvCL,eAAe,CAChB;IACH,CAAC,MAAM;MACL,IAAMoC,MAAM,GAAGtC,eAAe,CAACuC,KAAK,EAAE;MACtCD,MAAM,CAACE,IAAI,CAACjC,IAAI,CAAC;MACjB,IAAI,CAAC4B,gBAAgB,CAACG,MAAM,EAAEpC,eAAe,CAAC;IAChD;EACF;EAEAoB,SAAS,GAAS;IAChB,IAAI,CAACc,kBAAkB,CAAC,IAAI,CAAC;EAC/B;EAEAb,KAAK,GAAS;IACZ,IAAI,CAACa,kBAAkB,CAAC,KAAK,CAAC;EAChC;EAEAZ,aAAa,GAAS;IACpB,IAAM;MAAEvB;IAAQ,CAAC,GAAG,IAAI,CAACiB,KAAK;IAC9B,IAAI,CAACiB,gBAAgB,CACnBlC,OAAO,CACJG,MAAM,CAACiC,CAAC,IAAI1C,UAAU,CAAC8C,YAAY,CAACJ,CAAC,CAACK,IAAI,CAAC,CAAC,CAC5ClC,GAAG,CAACH,MAAM,IAAIA,MAAM,CAACE,IAAI,CAAC,EAC7B,KAAK,CACN;EACH;EAEAoC,MAAM,GAAuB;IAC3B,IAAM;MAAET,KAAK;MAAElC,eAAe;MAAEE,eAAe;MAAED;IAAQ,CAAC,GAAG,IAAI,CAACiB,KAAK;IACvE,IAAM;MAAEU;IAAwB,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9C,IAAMiB,qBAAqB,GACxB5C,eAAe,CAACS,MAAM,KAAK,CAAC,IAAIP,eAAe,KAAK,IAAI,IACxDF,eAAe,CAACS,MAAM,KAAKR,OAAO,CAACQ,MAAM,IAAIP,eAAe,KAAK,KAAM;IAC1E,IAAM2C,oBAAoB,GACvB7C,eAAe,CAACS,MAAM,KAAK,CAAC,IAAIP,eAAe,KAAK,KAAK,IACzDF,eAAe,CAACS,MAAM,KAAKR,OAAO,CAACQ,MAAM,IAAIP,eAAe,KAAK,IAAK;;IAEzE;IACA,IAAI4C,IAAI;IACR,IAAIF,qBAAqB,EAAE;MACzB;MACAE,IAAI,gBACF;QAAA,wBACE,KAAC,eAAe;UACd,IAAI,EAAEvD,cAAe;UACrB,IAAI,EAAEF,YAAa;UACnB,SAAS,EAAC;QAAyB,EACnC,eACF,KAAC,eAAe;UACd,IAAI,EAAEC,aAAc;UACpB,SAAS,EAAC,cAAc;UACxB,SAAS,EAAC;QAAyB,EACnC;MAAA,EAEL;IACH,CAAC,MAAM,IAAIuD,oBAAoB,EAAE;MAC/B;MACAC,IAAI,gBACF;QAAA,wBACE,KAAC,eAAe;UACd,IAAI,EAAEpD,mBAAoB;UAC1B,IAAI,EAAEL,YAAa;UACnB,SAAS,EAAC;QAAyB,EACnC,eACF,KAAC,eAAe;UACd,IAAI,EAAEI,qBAAsB;UAC5B,SAAS,EAAC,aAAa;UACvB,SAAS,EAAC;QAAyB,EACnC;MAAA,EAEL;IACH,CAAC,MAAM;MACL;MACAqD,IAAI,gBACF;QAAA,wBACE,KAAC,eAAe;UACd,IAAI,EAAEvD,cAAe;UACrB,IAAI,EAAEF,YAAa;UACnB,SAAS,EAAC;QAAyB,EACnC,eACF,KAAC,eAAe;UACd,IAAI,EAAEG,oBAAqB;UAC3B,SAAS,EAAC,cAAc;UACxB,SAAS,EAAC;QAAyB,EACnC;MAAA,EAEL;IACH;IAEA,oBACE;MAAK,SAAS,EAAC,wBAAwB;MAAA,wBACrC,KAAC,WAAW;QACV,SAAS,EAAC,qBAAqB;QAC/B,WAAW,EAAC,gBAAgB;QAC5B,KAAK,EAAE0C,KAAM;QACb,QAAQ,EAAE,IAAI,CAACf,uBAAwB;QACvC,GAAG,EAAE,IAAI,CAACM;MAAY,EACtB,eACF;QACE,IAAI,EAAC,QAAQ;QACb,SAAS,EAAC,iCAAiC;QAC3C,OAAO,EAAE,MAAM;UACb,IAAIG,uBAAuB,EAAE;YAC3B,IAAI,CAACmB,QAAQ,CAAC;cAAEnB,uBAAuB,EAAE;YAAM,CAAC,CAAC;UACnD,CAAC,MAAM;YACL,IAAI,CAACmB,QAAQ,CAAC;cAAEnB,uBAAuB,EAAE;YAAK,CAAC,CAAC;UAClD;QACF,CAAE;QAAA,wBAEF;UAAK,SAAS,EAAC,WAAW;UAAA,UAAEkB;QAAI,EAAO,eACvC,KAAC,OAAO;UAAA,UAAC;QAAiB,EAAU,eACpC,KAAC,MAAM;UACL,OAAO,EAAElB,uBAAwB;UACjC,SAAS,EAAC,qBAAqB;UAC/B,QAAQ,EAAE,MAAM;YACd,IAAI,CAACmB,QAAQ,CAAC;cAAEnB,uBAAuB,EAAE;YAAM,CAAC,CAAC;UACnD,CAAE;UACF,WAAW;UACX,WAAW;UAAA,uBAEX;YAAK,SAAS,EAAC,oBAAoB;YAAA,WAAC,kBAElC;cAAK,SAAS,EAAC,qBAAqB;cAAA,UACjC3B,OAAO,CAACO,GAAG,CAACH,MAAM,iBACjB,MAAC,KAAK,CAAC,QAAQ;gBAAA,wBACb,KAAC,QAAQ;kBACP,SAAS,EAAC,uBAAuB;kBACjC,OAAO,EACLH,eAAe,GACX,CAACF,eAAe,CAACM,QAAQ,CAACD,MAAM,CAACE,IAAI,CAAC,GACtCP,eAAe,CAACM,QAAQ,CAACD,MAAM,CAACE,IAAI,CACzC;kBACD,QAAQ,EAAE,MAAM,IAAI,CAACc,YAAY,CAAChB,MAAM,CAACE,IAAI,CAAE;kBAAA,UAE9CF,MAAM,CAACE;gBAAI,EACH,EAEVF,MAAM,CAACqC,IAAI,CAACM,SAAS,CAAC3C,MAAM,CAACqC,IAAI,CAACO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;cAAA,GAbrC5C,MAAM,CAACE,IAAI,CAejC;YAAC,EACE,eACN;cAAK,SAAS,EAAC,yBAAyB;cAAA,wBACtC;gBACE,IAAI,EAAC,QAAQ;gBACb,SAAS,EAAC,cAAc;gBACxB,OAAO,EAAE,IAAI,CAACe,SAAU;gBAAA,UACzB;cAED,EAAS,eACT;gBACE,IAAI,EAAC,QAAQ;gBACb,SAAS,EAAC,cAAc;gBACxB,OAAO,EAAE,IAAI,CAACC,KAAM;gBAAA,UACrB;cAED,EAAS,eACT;gBACE,IAAI,EAAC,QAAQ;gBACb,SAAS,EAAC,cAAc;gBACxB,OAAO,EAAE,IAAI,CAACC,aAAc;gBAAA,UAC7B;cAED,EAAS;YAAA,EACL,EACLqB,oBAAoB,iBACnB;cAAG,SAAS,EAAC,aAAa;cAAA,wBACxB,KAAC,eAAe;gBAAC,IAAI,EAAEpD;cAAsB,EAAG,0CAElD;YAAA,EACD;UAAA;QACG,EACC;MAAA,EACF;IAAA,EACL;EAEV;AACF;AAEA,eAAeG,iBAAiB"}
@@ -8,6 +8,8 @@ import { vsFilter, dhFilterFilled } from '@deephaven/icons';
8
8
  import "./FilterInputField.css";
9
9
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
10
10
  import { Button } from '@deephaven/components';
11
+ import { jsx as _jsx } from "react/jsx-runtime";
12
+ import { jsxs as _jsxs } from "react/jsx-runtime";
11
13
  /**
12
14
  * An input field showing a input field and button.
13
15
  * Debounces changes.
@@ -176,44 +178,49 @@ class FilterInputField extends PureComponent {
176
178
  var {
177
179
  value
178
180
  } = this.state;
179
- return /*#__PURE__*/React.createElement("div", {
181
+ return /*#__PURE__*/_jsxs("div", {
180
182
  style: style,
181
183
  className: "iris-grid-input-autosized-wrapper",
182
184
  "data-value": value // used by css based autosizer
183
- }, /*#__PURE__*/React.createElement("input", {
184
- ref: inputField => {
185
- this.inputField = inputField;
186
- },
187
- className: classNames('iris-grid-input-field', className),
188
- type: "text",
189
- value: value,
190
- onBlur: this.handleBlur,
191
- onFocus: this.handleFocus,
192
- onChange: this.handleChange,
193
- onKeyDown: this.handleKeyDown,
194
- onContextMenu: this.handleContextMenu,
195
- autoComplete: "off",
196
- autoCorrect: "off",
197
- autoCapitalize: "off",
198
- spellCheck: "false"
199
- }), /*#__PURE__*/React.createElement("div", {
200
- className: "advanced-filter-button-container"
201
- }, /*#__PURE__*/React.createElement(Button, {
202
- kind: "ghost",
203
- className: classNames('btn-link-icon advanced-filter-button', {
204
- 'filter-set': isAdvancedFilterSet
205
- }),
206
- onClick: onAdvancedFiltersTriggered,
207
- onContextMenu: this.handleContextMenu
208
- }, /*#__PURE__*/React.createElement("div", {
209
- className: "fa-layers "
210
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
211
- icon: dhFilterFilled,
212
- className: "filter-solid"
213
- }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
214
- icon: vsFilter,
215
- className: "filter-light"
216
- })))));
185
+ ,
186
+ children: [/*#__PURE__*/_jsx("input", {
187
+ ref: inputField => {
188
+ this.inputField = inputField;
189
+ },
190
+ className: classNames('iris-grid-input-field', className),
191
+ type: "text",
192
+ value: value,
193
+ onBlur: this.handleBlur,
194
+ onFocus: this.handleFocus,
195
+ onChange: this.handleChange,
196
+ onKeyDown: this.handleKeyDown,
197
+ onContextMenu: this.handleContextMenu,
198
+ autoComplete: "off",
199
+ autoCorrect: "off",
200
+ autoCapitalize: "off",
201
+ spellCheck: "false"
202
+ }), /*#__PURE__*/_jsx("div", {
203
+ className: "advanced-filter-button-container",
204
+ children: /*#__PURE__*/_jsx(Button, {
205
+ kind: "ghost",
206
+ className: classNames('btn-link-icon advanced-filter-button', {
207
+ 'filter-set': isAdvancedFilterSet
208
+ }),
209
+ onClick: onAdvancedFiltersTriggered,
210
+ onContextMenu: this.handleContextMenu,
211
+ children: /*#__PURE__*/_jsxs("div", {
212
+ className: "fa-layers ",
213
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
214
+ icon: dhFilterFilled,
215
+ className: "filter-solid"
216
+ }), /*#__PURE__*/_jsx(FontAwesomeIcon, {
217
+ icon: vsFilter,
218
+ className: "filter-light"
219
+ })]
220
+ })
221
+ })
222
+ })]
223
+ });
217
224
  }
218
225
  }
219
226
  _defineProperty(FilterInputField, "defaultProps", {
@@ -1 +1 @@
1
- {"version":3,"file":"FilterInputField.js","names":["React","PureComponent","classNames","debounce","vsFilter","dhFilterFilled","FontAwesomeIcon","Button","FilterInputField","constructor","props","debounceMs","debouncedSendUpdate","sendUpdate","bind","handleCancel","handleChange","handleCommit","handleFocus","handleBlur","handleKeyDown","handleContextMenu","inputField","value","initialValue","state","isChanged","componentDidMount","focus","componentDidUpdate","prevProps","flush","componentWillUnmount","cancel","setValue","setState","event","target","onDone","setGridFocus","defocusInput","select","relatedTarget","classList","contains","handleTab","backward","onTab","key","stopPropagation","preventDefault","shiftKey","onContextMenu","onChange","render","className","style","isAdvancedFilterSet","onAdvancedFiltersTriggered","undefined"],"sources":["../src/FilterInputField.tsx"],"sourcesContent":["import React, { ChangeEvent, PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport './FilterInputField.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { DebouncedFunc } from 'lodash';\nimport { Button } from '@deephaven/components';\n\ninterface FilterInputFieldProps {\n className: string;\n style: React.CSSProperties;\n value: string;\n isAdvancedFilterSet: boolean;\n onAdvancedFiltersTriggered: React.MouseEventHandler<HTMLButtonElement>;\n onChange: (value: string) => void;\n onDone: (setGridFocus?: boolean, defocusInput?: boolean) => void;\n onTab: (backward: boolean) => void;\n onContextMenu: React.MouseEventHandler<HTMLInputElement | HTMLButtonElement>;\n debounceMs: number;\n}\ninterface FilterInputFieldState {\n isChanged: boolean;\n value: string;\n}\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent<\n FilterInputFieldProps,\n FilterInputFieldState\n> {\n static defaultProps = {\n style: {},\n className: '',\n value: '',\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: (): void => undefined,\n onChange: (): void => undefined,\n onDone: (): void => undefined,\n onTab: (): void => undefined,\n onContextMenu: (): void => undefined,\n debounceMs: 150,\n };\n\n constructor(props: FilterInputFieldProps) {\n super(props);\n\n const { debounceMs } = props;\n\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\n this.inputField = null;\n\n const { value } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value,\n };\n }\n\n componentDidMount(): void {\n this.inputField?.focus();\n }\n\n componentDidUpdate(prevProps: FilterInputFieldProps): void {\n const { debounceMs } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(\n this.sendUpdate.bind(this),\n debounceMs\n );\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSendUpdate.cancel();\n }\n\n inputField: HTMLInputElement | null;\n\n initialValue: string;\n\n debouncedSendUpdate: DebouncedFunc<(value: string) => void>;\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: string): void {\n this.initialValue = value;\n this.setState({ value });\n }\n\n focus(): void {\n this.inputField?.focus();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value, isChanged: true });\n\n this.debouncedSendUpdate(value);\n }\n\n handleCancel(): void {\n this.debouncedSendUpdate.cancel();\n const { initialValue } = this;\n const { isChanged } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n\n const { onDone } = this.props;\n onDone();\n }\n\n handleCommit(setGridFocus = true, defocusInput = true): void {\n this.debouncedSendUpdate.flush();\n\n const { onDone } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n\n handleFocus(): void {\n this.inputField?.select();\n }\n\n handleBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { relatedTarget } = event;\n // handleCommit results in a call that steals focus\n if (\n relatedTarget != null &&\n relatedTarget.classList.contains('context-menu-container')\n ) {\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 (\n relatedTarget != null &&\n relatedTarget.classList.contains('advanced-filter-button')\n ) {\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\n handleTab(backward = false): void {\n this.debouncedSendUpdate.flush();\n\n const { onTab } = this.props;\n onTab(backward);\n }\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\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\n handleContextMenu(\n event: React.MouseEvent<HTMLInputElement | HTMLButtonElement>\n ): void {\n const { onContextMenu } = this.props;\n onContextMenu(event);\n }\n\n sendUpdate(value: string): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n render(): ReactElement {\n const {\n className,\n style,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered,\n } = this.props;\n const { value } = this.state;\n return (\n <div\n style={style}\n className=\"iris-grid-input-autosized-wrapper\"\n data-value={value} // used by css based autosizer\n >\n <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 />\n <div className=\"advanced-filter-button-container\">\n <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 >\n <div className=\"fa-layers \">\n <FontAwesomeIcon icon={dhFilterFilled} className=\"filter-solid\" />\n <FontAwesomeIcon icon={vsFilter} className=\"filter-light\" />\n </div>\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default FilterInputField;\n"],"mappings":"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"}
1
+ {"version":3,"file":"FilterInputField.js","names":["React","PureComponent","classNames","debounce","vsFilter","dhFilterFilled","FontAwesomeIcon","Button","FilterInputField","constructor","props","debounceMs","debouncedSendUpdate","sendUpdate","bind","handleCancel","handleChange","handleCommit","handleFocus","handleBlur","handleKeyDown","handleContextMenu","inputField","value","initialValue","state","isChanged","componentDidMount","focus","componentDidUpdate","prevProps","flush","componentWillUnmount","cancel","setValue","setState","event","target","onDone","setGridFocus","defocusInput","select","relatedTarget","classList","contains","handleTab","backward","onTab","key","stopPropagation","preventDefault","shiftKey","onContextMenu","onChange","render","className","style","isAdvancedFilterSet","onAdvancedFiltersTriggered","undefined"],"sources":["../src/FilterInputField.tsx"],"sourcesContent":["import React, { ChangeEvent, PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport './FilterInputField.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { DebouncedFunc } from 'lodash';\nimport { Button } from '@deephaven/components';\n\ninterface FilterInputFieldProps {\n className: string;\n style: React.CSSProperties;\n value: string;\n isAdvancedFilterSet: boolean;\n onAdvancedFiltersTriggered: React.MouseEventHandler<HTMLButtonElement>;\n onChange: (value: string) => void;\n onDone: (setGridFocus?: boolean, defocusInput?: boolean) => void;\n onTab: (backward: boolean) => void;\n onContextMenu: React.MouseEventHandler<HTMLInputElement | HTMLButtonElement>;\n debounceMs: number;\n}\ninterface FilterInputFieldState {\n isChanged: boolean;\n value: string;\n}\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent<\n FilterInputFieldProps,\n FilterInputFieldState\n> {\n static defaultProps = {\n style: {},\n className: '',\n value: '',\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: (): void => undefined,\n onChange: (): void => undefined,\n onDone: (): void => undefined,\n onTab: (): void => undefined,\n onContextMenu: (): void => undefined,\n debounceMs: 150,\n };\n\n constructor(props: FilterInputFieldProps) {\n super(props);\n\n const { debounceMs } = props;\n\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\n this.inputField = null;\n\n const { value } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value,\n };\n }\n\n componentDidMount(): void {\n this.inputField?.focus();\n }\n\n componentDidUpdate(prevProps: FilterInputFieldProps): void {\n const { debounceMs } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(\n this.sendUpdate.bind(this),\n debounceMs\n );\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSendUpdate.cancel();\n }\n\n inputField: HTMLInputElement | null;\n\n initialValue: string;\n\n debouncedSendUpdate: DebouncedFunc<(value: string) => void>;\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: string): void {\n this.initialValue = value;\n this.setState({ value });\n }\n\n focus(): void {\n this.inputField?.focus();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value, isChanged: true });\n\n this.debouncedSendUpdate(value);\n }\n\n handleCancel(): void {\n this.debouncedSendUpdate.cancel();\n const { initialValue } = this;\n const { isChanged } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n\n const { onDone } = this.props;\n onDone();\n }\n\n handleCommit(setGridFocus = true, defocusInput = true): void {\n this.debouncedSendUpdate.flush();\n\n const { onDone } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n\n handleFocus(): void {\n this.inputField?.select();\n }\n\n handleBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { relatedTarget } = event;\n // handleCommit results in a call that steals focus\n if (\n relatedTarget != null &&\n relatedTarget.classList.contains('context-menu-container')\n ) {\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 (\n relatedTarget != null &&\n relatedTarget.classList.contains('advanced-filter-button')\n ) {\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\n handleTab(backward = false): void {\n this.debouncedSendUpdate.flush();\n\n const { onTab } = this.props;\n onTab(backward);\n }\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\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\n handleContextMenu(\n event: React.MouseEvent<HTMLInputElement | HTMLButtonElement>\n ): void {\n const { onContextMenu } = this.props;\n onContextMenu(event);\n }\n\n sendUpdate(value: string): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n render(): ReactElement {\n const {\n className,\n style,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered,\n } = this.props;\n const { value } = this.state;\n return (\n <div\n style={style}\n className=\"iris-grid-input-autosized-wrapper\"\n data-value={value} // used by css based autosizer\n >\n <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 />\n <div className=\"advanced-filter-button-container\">\n <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 >\n <div className=\"fa-layers \">\n <FontAwesomeIcon icon={dhFilterFilled} className=\"filter-solid\" />\n <FontAwesomeIcon icon={vsFilter} className=\"filter-light\" />\n </div>\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default FilterInputField;\n"],"mappings":"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"}