@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
package/dist/GotoRow.js CHANGED
@@ -8,6 +8,9 @@ import classNames from 'classnames';
8
8
  import "./GotoRow.css";
9
9
  import shortid from 'shortid';
10
10
  import IrisGridBottomBar from "./IrisGridBottomBar.js";
11
+ import { jsx as _jsx } from "react/jsx-runtime";
12
+ import { jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { Fragment as _Fragment } from "react/jsx-runtime";
11
14
  function isIrisGridProxyModel(model) {
12
15
  return model.model !== undefined;
13
16
  }
@@ -86,113 +89,122 @@ function GotoRow(_ref) {
86
89
  switch (normalizedType) {
87
90
  case TableUtils.dataType.DECIMAL:
88
91
  case TableUtils.dataType.INT:
89
- return /*#__PURE__*/React.createElement("div", {
90
- className: "goto-row-input"
91
- }, /*#__PURE__*/React.createElement("input", {
92
- ref: gotoValueInputRef,
93
- className: classNames('form-control', {
94
- 'is-invalid': gotoValueError !== ''
95
- }),
96
- onKeyDown: handleGotoValueNumberKeyDown,
97
- placeholder: "value",
98
- onChange: e => {
99
- var value = e.target.value.toLowerCase();
100
- // regex tests for
101
- if (/^-?[0-9]*\.?[0-9]*$/.test(e.target.value)) {
102
- onGotoValueInputChanged(e.target.value);
103
- } else if (value === '-i' || value === '-infinity') {
104
- onGotoValueInputChanged("".concat(Number.NEGATIVE_INFINITY));
105
- } else if (value === 'i' || value === 'infinity') {
106
- onGotoValueInputChanged("".concat(Number.POSITIVE_INFINITY));
107
- }
108
- },
109
- value: gotoValue,
110
- "aria-label": "Value Input"
111
- }));
92
+ return /*#__PURE__*/_jsx("div", {
93
+ className: "goto-row-input",
94
+ children: /*#__PURE__*/_jsx("input", {
95
+ ref: gotoValueInputRef,
96
+ className: classNames('form-control', {
97
+ 'is-invalid': gotoValueError !== ''
98
+ }),
99
+ onKeyDown: handleGotoValueNumberKeyDown,
100
+ placeholder: "value",
101
+ onChange: e => {
102
+ var value = e.target.value.toLowerCase();
103
+ // regex tests for
104
+ if (/^-?[0-9]*\.?[0-9]*$/.test(e.target.value)) {
105
+ onGotoValueInputChanged(e.target.value);
106
+ } else if (value === '-i' || value === '-infinity') {
107
+ onGotoValueInputChanged("".concat(Number.NEGATIVE_INFINITY));
108
+ } else if (value === 'i' || value === 'infinity') {
109
+ onGotoValueInputChanged("".concat(Number.POSITIVE_INFINITY));
110
+ }
111
+ },
112
+ value: gotoValue,
113
+ "aria-label": "Value Input"
114
+ })
115
+ });
112
116
  case TableUtils.dataType.DATETIME:
113
- return /*#__PURE__*/React.createElement("div", {
114
- className: "goto-value-date-time-input"
115
- }, /*#__PURE__*/React.createElement(DateTimeInput, {
116
- ref: gotoValueInputRef,
117
- className: classNames('form-control', 'goto-value-date-time-input', {
118
- 'is-invalid': gotoValueError !== ''
119
- }),
120
- defaultValue: gotoValue,
121
- onChange: onGotoValueInputChanged,
122
- onSubmit: handleGotoValueKeySubmit,
123
- "aria-label": "Value Input"
124
- }));
117
+ return /*#__PURE__*/_jsx("div", {
118
+ className: "goto-value-date-time-input",
119
+ children: /*#__PURE__*/_jsx(DateTimeInput, {
120
+ ref: gotoValueInputRef,
121
+ className: classNames('form-control', 'goto-value-date-time-input', {
122
+ 'is-invalid': gotoValueError !== ''
123
+ }),
124
+ defaultValue: gotoValue,
125
+ onChange: onGotoValueInputChanged,
126
+ onSubmit: handleGotoValueKeySubmit,
127
+ "aria-label": "Value Input"
128
+ })
129
+ });
125
130
  case TableUtils.dataType.STRING:
126
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
127
- className: "goto-row-input"
128
- }, /*#__PURE__*/React.createElement("select", {
129
- className: "custom-select",
130
- onChange: event => {
131
- onGotoValueSelectedFilterChanged(event.target.value);
132
- },
133
- value: gotoValueFilter,
134
- "aria-label": "filter-type-select"
135
- }, /*#__PURE__*/React.createElement("option", {
136
- key: FilterType.eqIgnoreCase,
137
- value: FilterType.eqIgnoreCase
138
- }, "Equals (case-insensitive)"), /*#__PURE__*/React.createElement("option", {
139
- key: FilterType.containsIgnoreCase,
140
- value: FilterType.containsIgnoreCase
141
- }, "Contains (case-insensitive)"), /*#__PURE__*/React.createElement("option", {
142
- key: FilterType.eq,
143
- value: FilterType.eq
144
- }, "Equals"), /*#__PURE__*/React.createElement("option", {
145
- key: FilterType.contains,
146
- value: FilterType.contains
147
- }, "Contains"))), /*#__PURE__*/React.createElement("div", {
148
- className: "goto-row-input"
149
- }, /*#__PURE__*/React.createElement("input", {
150
- ref: gotoValueInputRef,
151
- className: classNames('form-control', {
152
- 'is-invalid': gotoValueError !== ''
153
- }),
154
- onKeyDown: handleGotoValueKeySubmit,
155
- placeholder: "value",
156
- onChange: e => onGotoValueInputChanged(e.target.value),
157
- value: gotoValue,
158
- "aria-label": "Value Input"
159
- })));
131
+ return /*#__PURE__*/_jsxs(_Fragment, {
132
+ children: [/*#__PURE__*/_jsx("div", {
133
+ className: "goto-row-input",
134
+ children: /*#__PURE__*/_jsxs("select", {
135
+ className: "custom-select",
136
+ onChange: event => {
137
+ onGotoValueSelectedFilterChanged(event.target.value);
138
+ },
139
+ value: gotoValueFilter,
140
+ "aria-label": "filter-type-select",
141
+ children: [/*#__PURE__*/_jsx("option", {
142
+ value: FilterType.eqIgnoreCase,
143
+ children: "Equals (case-insensitive)"
144
+ }, FilterType.eqIgnoreCase), /*#__PURE__*/_jsx("option", {
145
+ value: FilterType.containsIgnoreCase,
146
+ children: "Contains (case-insensitive)"
147
+ }, FilterType.containsIgnoreCase), /*#__PURE__*/_jsx("option", {
148
+ value: FilterType.eq,
149
+ children: "Equals"
150
+ }, FilterType.eq), /*#__PURE__*/_jsx("option", {
151
+ value: FilterType.contains,
152
+ children: "Contains"
153
+ }, FilterType.contains)]
154
+ })
155
+ }), /*#__PURE__*/_jsx("div", {
156
+ className: "goto-row-input",
157
+ children: /*#__PURE__*/_jsx("input", {
158
+ ref: gotoValueInputRef,
159
+ className: classNames('form-control', {
160
+ 'is-invalid': gotoValueError !== ''
161
+ }),
162
+ onKeyDown: handleGotoValueKeySubmit,
163
+ placeholder: "value",
164
+ onChange: e => onGotoValueInputChanged(e.target.value),
165
+ value: gotoValue,
166
+ "aria-label": "Value Input"
167
+ })
168
+ })]
169
+ });
160
170
  case TableUtils.dataType.BOOLEAN:
161
- return /*#__PURE__*/React.createElement("div", {
162
- className: "goto-row-input"
163
- }, /*#__PURE__*/React.createElement("select", {
164
- className: "custom-select",
165
- onChange: event => {
166
- onGotoValueInputChanged(event.target.value);
167
- },
168
- value: gotoValue,
169
- "aria-label": "Value Input"
170
- }, /*#__PURE__*/React.createElement("option", {
171
- "aria-label": "null value",
172
- key: "null",
173
- value: ""
174
- }), /*#__PURE__*/React.createElement("option", {
175
- key: "true",
176
- value: "true"
177
- }, "true"), /*#__PURE__*/React.createElement("option", {
178
- key: "false",
179
- value: "false"
180
- }, "false")));
171
+ return /*#__PURE__*/_jsx("div", {
172
+ className: "goto-row-input",
173
+ children: /*#__PURE__*/_jsxs("select", {
174
+ className: "custom-select",
175
+ onChange: event => {
176
+ onGotoValueInputChanged(event.target.value);
177
+ },
178
+ value: gotoValue,
179
+ "aria-label": "Value Input",
180
+ children: [/*#__PURE__*/_jsx("option", {
181
+ "aria-label": "null value",
182
+ value: ""
183
+ }, "null"), /*#__PURE__*/_jsx("option", {
184
+ value: "true",
185
+ children: "true"
186
+ }, "true"), /*#__PURE__*/_jsx("option", {
187
+ value: "false",
188
+ children: "false"
189
+ }, "false")]
190
+ })
191
+ });
181
192
  default:
182
- return /*#__PURE__*/React.createElement("div", {
183
- className: "goto-row-input"
184
- }, /*#__PURE__*/React.createElement("input", {
185
- ref: gotoValueInputRef,
186
- className: "form-control",
187
- onKeyDown: handleGotoValueKeySubmit,
188
- placeholder: "value",
189
- onChange: e => onGotoValueInputChanged(e.target.value),
190
- value: gotoValue,
191
- "aria-label": "Value Input"
192
- }));
193
+ return /*#__PURE__*/_jsx("div", {
194
+ className: "goto-row-input",
195
+ children: /*#__PURE__*/_jsx("input", {
196
+ ref: gotoValueInputRef,
197
+ className: "form-control",
198
+ onKeyDown: handleGotoValueKeySubmit,
199
+ placeholder: "value",
200
+ onChange: e => onGotoValueInputChanged(e.target.value),
201
+ value: gotoValue,
202
+ "aria-label": "Value Input"
203
+ })
204
+ });
193
205
  }
194
206
  };
195
- return /*#__PURE__*/React.createElement(IrisGridBottomBar, {
207
+ return /*#__PURE__*/_jsx(IrisGridBottomBar, {
196
208
  isShown: isShown,
197
209
  className: classNames('goto-row'),
198
210
  onEntering: onEntering,
@@ -201,98 +213,119 @@ function GotoRow(_ref) {
201
213
  selectInput();
202
214
  },
203
215
  onExiting: onExiting,
204
- onExited: onExited
205
- }, /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
206
- className: "goto-row-row"
207
- }, /*#__PURE__*/React.createElement("div", {
208
- className: classNames('goto-row-wrapper', {
209
- 'is-inactive': !isGotoRowActive
210
- }),
211
- onClick: () => setIsGotoRowActive(true),
212
- onFocus: () => setIsGotoRowActive(true),
213
- role: "group"
214
- }, /*#__PURE__*/React.createElement("label", {
215
- className: "goto-row-text",
216
- htmlFor: gotoRowInputId
217
- }, "Go to row"), /*#__PURE__*/React.createElement("div", {
218
- className: "goto-row-input"
219
- }, /*#__PURE__*/React.createElement("input", {
220
- ref: gotoRowInputRef,
221
- "data-testid": "goto-row-input",
222
- type: "number",
223
- onKeyDown: e => {
224
- if (e.key === 'Enter') {
225
- e.stopPropagation();
226
- e.preventDefault();
227
- onGotoRowSubmit();
228
- }
229
- },
230
- className: classNames('form-control', {
231
- 'is-invalid': gotoRowError !== ''
232
- }),
233
- placeholder: "Row number",
234
- onChange: event => {
235
- onGotoRowNumberChanged(event);
236
- },
237
- value: gotoRow,
238
- id: gotoRowInputId
239
- })), /*#__PURE__*/React.createElement("div", {
240
- className: "goto-row-text"
241
- }, "of ", dh.i18n.NumberFormat.format(DEFAULT_FORMAT_STRING, rowCount)), gotoRowError && /*#__PURE__*/React.createElement("div", {
242
- className: "text-danger"
243
- }, gotoRowError)), /*#__PURE__*/React.createElement("div", {
244
- className: "goto-row-close"
245
- }, /*#__PURE__*/React.createElement(Button, {
246
- kind: "ghost",
247
- onClick: onClose
248
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
249
- icon: vsClose,
250
- style: {
251
- marginRight: '0'
252
- }
253
- })))), model.isSeekRowAvailable && /*#__PURE__*/React.createElement("div", {
254
- className: "goto-row-row"
255
- }, /*#__PURE__*/React.createElement("div", {
256
- className: classNames('goto-row-wrapper', {
257
- 'is-inactive': isGotoRowActive
258
- }),
259
- onClick: () => setIsGotoRowActive(false),
260
- onFocus: () => setIsGotoRowActive(false),
261
- role: "group"
262
- }, /*#__PURE__*/React.createElement("div", {
263
- className: "goto-row-text"
264
- }, "Go to value"), /*#__PURE__*/React.createElement("div", {
265
- className: "goto-row-input"
266
- }, /*#__PURE__*/React.createElement("select", {
267
- className: "custom-select",
268
- onChange: event => {
269
- var columnName = event.target.value;
270
- onGotoValueSelectedColumnNameChanged(columnName);
271
- },
272
- value: gotoValueSelectedColumnName,
273
- "aria-label": "column-name-select"
274
- }, columns.map(column => /*#__PURE__*/React.createElement("option", {
275
- key: column.name,
276
- value: column.name
277
- }, column.name)))), renderValueInput(), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
278
- kind: "ghost",
279
- disabled: gotoValue === '',
280
- onClick: () => {
281
- onGotoValueSubmit(true);
282
- }
283
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
284
- icon: vsArrowUp
285
- })), /*#__PURE__*/React.createElement(Button, {
286
- kind: "ghost",
287
- disabled: gotoValue === '',
288
- onClick: () => {
289
- onGotoValueSubmit(false);
290
- }
291
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
292
- icon: vsArrowDown
293
- }))), gotoValueError && /*#__PURE__*/React.createElement("div", {
294
- className: "text-danger"
295
- }, gotoValueError)))));
216
+ onExited: onExited,
217
+ children: /*#__PURE__*/_jsxs(_Fragment, {
218
+ children: [/*#__PURE__*/_jsxs("div", {
219
+ className: "goto-row-row",
220
+ children: [/*#__PURE__*/_jsxs("div", {
221
+ className: classNames('goto-row-wrapper', {
222
+ 'is-inactive': !isGotoRowActive
223
+ }),
224
+ onClick: () => setIsGotoRowActive(true),
225
+ onFocus: () => setIsGotoRowActive(true),
226
+ role: "group",
227
+ children: [/*#__PURE__*/_jsx("label", {
228
+ className: "goto-row-text",
229
+ htmlFor: gotoRowInputId,
230
+ children: "Go to row"
231
+ }), /*#__PURE__*/_jsx("div", {
232
+ className: "goto-row-input",
233
+ children: /*#__PURE__*/_jsx("input", {
234
+ ref: gotoRowInputRef,
235
+ "data-testid": "goto-row-input",
236
+ type: "number",
237
+ onKeyDown: e => {
238
+ if (e.key === 'Enter') {
239
+ e.stopPropagation();
240
+ e.preventDefault();
241
+ onGotoRowSubmit();
242
+ }
243
+ },
244
+ className: classNames('form-control', {
245
+ 'is-invalid': gotoRowError !== ''
246
+ }),
247
+ placeholder: "Row number",
248
+ onChange: event => {
249
+ onGotoRowNumberChanged(event);
250
+ },
251
+ value: gotoRow,
252
+ id: gotoRowInputId
253
+ })
254
+ }), /*#__PURE__*/_jsxs("div", {
255
+ className: "goto-row-text",
256
+ children: ["of ", dh.i18n.NumberFormat.format(DEFAULT_FORMAT_STRING, rowCount)]
257
+ }), gotoRowError && /*#__PURE__*/_jsx("div", {
258
+ className: "text-danger",
259
+ children: gotoRowError
260
+ })]
261
+ }), /*#__PURE__*/_jsx("div", {
262
+ className: "goto-row-close",
263
+ children: /*#__PURE__*/_jsx(Button, {
264
+ kind: "ghost",
265
+ onClick: onClose,
266
+ children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
267
+ icon: vsClose,
268
+ style: {
269
+ marginRight: '0'
270
+ }
271
+ })
272
+ })
273
+ })]
274
+ }), model.isSeekRowAvailable && /*#__PURE__*/_jsx("div", {
275
+ className: "goto-row-row",
276
+ children: /*#__PURE__*/_jsxs("div", {
277
+ className: classNames('goto-row-wrapper', {
278
+ 'is-inactive': isGotoRowActive
279
+ }),
280
+ onClick: () => setIsGotoRowActive(false),
281
+ onFocus: () => setIsGotoRowActive(false),
282
+ role: "group",
283
+ children: [/*#__PURE__*/_jsx("div", {
284
+ className: "goto-row-text",
285
+ children: "Go to value"
286
+ }), /*#__PURE__*/_jsx("div", {
287
+ className: "goto-row-input",
288
+ children: /*#__PURE__*/_jsx("select", {
289
+ className: "custom-select",
290
+ onChange: event => {
291
+ var columnName = event.target.value;
292
+ onGotoValueSelectedColumnNameChanged(columnName);
293
+ },
294
+ value: gotoValueSelectedColumnName,
295
+ "aria-label": "column-name-select",
296
+ children: columns.map(column => /*#__PURE__*/_jsx("option", {
297
+ value: column.name,
298
+ children: column.name
299
+ }, column.name))
300
+ })
301
+ }), renderValueInput(), /*#__PURE__*/_jsxs("div", {
302
+ children: [/*#__PURE__*/_jsx(Button, {
303
+ kind: "ghost",
304
+ disabled: gotoValue === '',
305
+ onClick: () => {
306
+ onGotoValueSubmit(true);
307
+ },
308
+ children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
309
+ icon: vsArrowUp
310
+ })
311
+ }), /*#__PURE__*/_jsx(Button, {
312
+ kind: "ghost",
313
+ disabled: gotoValue === '',
314
+ onClick: () => {
315
+ onGotoValueSubmit(false);
316
+ },
317
+ children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
318
+ icon: vsArrowDown
319
+ })
320
+ })]
321
+ }), gotoValueError && /*#__PURE__*/_jsx("div", {
322
+ className: "text-danger",
323
+ children: gotoValueError
324
+ })]
325
+ })
326
+ })]
327
+ })
328
+ });
296
329
  }
297
330
  export default GotoRow;
298
331
  //# sourceMappingURL=GotoRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GotoRow.js","names":["FontAwesomeIcon","vsClose","vsArrowUp","vsArrowDown","React","useEffect","useMemo","useRef","useState","Type","FilterType","Button","DateTimeInput","TableUtils","classNames","shortid","IrisGridBottomBar","isIrisGridProxyModel","model","undefined","DEFAULT_FORMAT_STRING","GotoRow","gotoRow","gotoRowError","gotoValueError","onGotoRowSubmit","isShown","onEntering","onEntered","onExiting","onExited","onGotoRowNumberChanged","onClose","gotoValueSelectedColumnName","gotoValue","gotoValueFilter","onGotoValueSelectedColumnNameChanged","onGotoValueSelectedFilterChanged","onGotoValueChanged","onGotoValueSubmit","gotoRowInputRef","gotoValueInputRef","isGotoRowActive","setIsGotoRowActive","columns","table","dh","rowCount","gotoRowInputId","handleGotoValueNumberKeyDown","e","key","stopPropagation","preventDefault","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","onGotoValueInputChanged","handleGotoValueKeySubmit","shiftKey","index","getColumnIndexByName","selectedColumn","columnType","type","normalizedType","getNormalizedType","value","selectInput","document","activeElement","current","select","renderValueInput","dataType","DECIMAL","INT","target","toLowerCase","test","DATETIME","STRING","event","eqIgnoreCase","containsIgnoreCase","eq","contains","BOOLEAN","i18n","NumberFormat","format","marginRight","isSeekRowAvailable","columnName","map","column","name"],"sources":["../src/GotoRow.tsx"],"sourcesContent":["import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose, vsArrowUp, vsArrowDown } from '@deephaven/icons';\nimport React, {\n ChangeEvent,\n KeyboardEvent,\n ReactElement,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { Column } from '@deephaven/jsapi-types';\nimport {\n Type as FilterType,\n TypeValue as FilterTypeValue,\n} from '@deephaven/filters';\nimport { Button, DateTimeInput } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport classNames from 'classnames';\nimport './GotoRow.scss';\nimport shortid from 'shortid';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridProxyModel from './IrisGridProxyModel';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport { ColumnName } from './CommonTypes';\n\nfunction isIrisGridProxyModel(\n model: IrisGridModel\n): model is IrisGridProxyModel {\n return (model as IrisGridProxyModel).model !== undefined;\n}\n\nconst DEFAULT_FORMAT_STRING = '###,##0';\n\ninterface GotoRowProps {\n gotoRow: string;\n gotoRowError: string;\n gotoValueError: string;\n onGotoRowSubmit: () => void;\n model: IrisGridModel;\n onGotoRowNumberChanged: (event: ChangeEvent<HTMLInputElement>) => void;\n onClose: () => void;\n isShown: boolean;\n onEntering: () => void;\n onEntered: () => void;\n onExiting: () => void;\n onExited: () => void;\n\n gotoValueSelectedColumnName: ColumnName;\n gotoValue: string;\n gotoValueFilter: FilterTypeValue;\n onGotoValueSelectedColumnNameChanged: (columnName: ColumnName) => void;\n onGotoValueSelectedFilterChanged: (filter: FilterTypeValue) => void;\n onGotoValueChanged: (input: string) => void;\n onGotoValueSubmit: (isBackward?: boolean) => void;\n}\n\nfunction GotoRow({\n gotoRow,\n gotoRowError,\n gotoValueError,\n onGotoRowSubmit,\n isShown,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n model,\n onGotoRowNumberChanged,\n onClose,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueFilter,\n onGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged,\n onGotoValueChanged,\n onGotoValueSubmit,\n}: GotoRowProps): ReactElement {\n const gotoRowInputRef = useRef<HTMLInputElement>(null);\n const gotoValueInputRef = useRef<HTMLInputElement>(null);\n\n const [isGotoRowActive, setIsGotoRowActive] = useState(false);\n let columns: Column[] = [];\n\n if (isIrisGridProxyModel(model) && model.table !== undefined) {\n ({ columns } = model.table);\n }\n\n const { dh, rowCount } = model;\n\n const gotoRowInputId = useMemo(() => `goto-row-input-${shortid()}`, []);\n\n const handleGotoValueNumberKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit();\n } else if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n (gotoValue === `${Number.POSITIVE_INFINITY}` ||\n gotoValue === `${Number.NEGATIVE_INFINITY}`)\n ) {\n onGotoValueInputChanged('');\n }\n };\n\n const handleGotoValueKeySubmit = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit(e.shiftKey);\n }\n };\n\n const index = model.getColumnIndexByName(gotoValueSelectedColumnName);\n\n const selectedColumn = columns[index ?? 0];\n\n const columnType = selectedColumn?.type;\n\n const normalizedType = TableUtils.getNormalizedType(columnType);\n const onGotoValueInputChanged = (value?: string) => {\n onGotoValueChanged(value ?? '');\n };\n const selectInput = () => {\n // when row changes without focus (i.e. via context menu), re-select input\n if (isGotoRowActive && document.activeElement !== gotoRowInputRef.current) {\n gotoRowInputRef.current?.select();\n } else if (\n !isGotoRowActive &&\n document.activeElement !== gotoValueInputRef.current\n ) {\n gotoValueInputRef.current?.select();\n }\n };\n useEffect(selectInput, [isGotoRowActive, gotoRow, gotoValue]);\n\n const renderValueInput = () => {\n switch (normalizedType) {\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT:\n return (\n <div className=\"goto-row-input\">\n <input\n ref={gotoValueInputRef}\n className={classNames('form-control', {\n 'is-invalid': gotoValueError !== '',\n })}\n onKeyDown={handleGotoValueNumberKeyDown}\n placeholder=\"value\"\n onChange={e => {\n const 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(`${Number.NEGATIVE_INFINITY}`);\n } else if (value === 'i' || value === 'infinity') {\n onGotoValueInputChanged(`${Number.POSITIVE_INFINITY}`);\n }\n }}\n value={gotoValue}\n aria-label=\"Value Input\"\n />\n </div>\n );\n case TableUtils.dataType.DATETIME:\n return (\n <div className=\"goto-value-date-time-input\">\n <DateTimeInput\n ref={gotoValueInputRef}\n className={classNames(\n 'form-control',\n 'goto-value-date-time-input',\n {\n 'is-invalid': gotoValueError !== '',\n }\n )}\n defaultValue={gotoValue}\n onChange={onGotoValueInputChanged}\n onSubmit={handleGotoValueKeySubmit}\n aria-label=\"Value Input\"\n />\n </div>\n );\n case TableUtils.dataType.STRING:\n return (\n <>\n <div className=\"goto-row-input\">\n <select\n className=\"custom-select\"\n onChange={event => {\n onGotoValueSelectedFilterChanged(\n event.target.value as FilterTypeValue\n );\n }}\n value={gotoValueFilter}\n aria-label=\"filter-type-select\"\n >\n <option\n key={FilterType.eqIgnoreCase}\n value={FilterType.eqIgnoreCase}\n >\n Equals (case-insensitive)\n </option>\n <option\n key={FilterType.containsIgnoreCase}\n value={FilterType.containsIgnoreCase}\n >\n Contains (case-insensitive)\n </option>\n <option key={FilterType.eq} value={FilterType.eq}>\n Equals\n </option>\n <option key={FilterType.contains} value={FilterType.contains}>\n Contains\n </option>\n </select>\n </div>\n <div className=\"goto-row-input\">\n <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 </div>\n </>\n );\n case TableUtils.dataType.BOOLEAN:\n return (\n <div className=\"goto-row-input\">\n <select\n className=\"custom-select\"\n onChange={event => {\n onGotoValueInputChanged(event.target.value);\n }}\n value={gotoValue}\n aria-label=\"Value Input\"\n >\n <option aria-label=\"null value\" key=\"null\" value=\"\" />\n <option key=\"true\" value=\"true\">\n true\n </option>\n <option key=\"false\" value=\"false\">\n false\n </option>\n </select>\n </div>\n );\n default:\n return (\n <div className=\"goto-row-input\">\n <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 </div>\n );\n }\n };\n return (\n <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 >\n <>\n <div className=\"goto-row-row\">\n <div\n className={classNames('goto-row-wrapper', {\n 'is-inactive': !isGotoRowActive,\n })}\n onClick={() => setIsGotoRowActive(true)}\n onFocus={() => setIsGotoRowActive(true)}\n role=\"group\"\n >\n <label className=\"goto-row-text\" htmlFor={gotoRowInputId}>\n Go to row\n </label>\n <div className=\"goto-row-input\">\n <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 </div>\n <div className=\"goto-row-text\">\n of {dh.i18n.NumberFormat.format(DEFAULT_FORMAT_STRING, rowCount)}\n </div>\n {gotoRowError && <div className=\"text-danger\">{gotoRowError}</div>}\n </div>\n <div className=\"goto-row-close\">\n <Button kind=\"ghost\" onClick={onClose}>\n <FontAwesomeIcon icon={vsClose} style={{ marginRight: '0' }} />\n </Button>\n </div>\n </div>\n {model.isSeekRowAvailable && (\n <div className=\"goto-row-row\">\n <div\n className={classNames('goto-row-wrapper', {\n 'is-inactive': isGotoRowActive,\n })}\n onClick={() => setIsGotoRowActive(false)}\n onFocus={() => setIsGotoRowActive(false)}\n role=\"group\"\n >\n <div className=\"goto-row-text\">Go to value</div>\n <div className=\"goto-row-input\">\n <select\n className=\"custom-select\"\n onChange={event => {\n const columnName = event.target.value;\n onGotoValueSelectedColumnNameChanged(columnName);\n }}\n value={gotoValueSelectedColumnName}\n aria-label=\"column-name-select\"\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n\n {renderValueInput()}\n\n <div>\n <Button\n kind=\"ghost\"\n disabled={gotoValue === ''}\n onClick={() => {\n onGotoValueSubmit(true);\n }}\n >\n <FontAwesomeIcon icon={vsArrowUp} />\n </Button>\n <Button\n kind=\"ghost\"\n disabled={gotoValue === ''}\n onClick={() => {\n onGotoValueSubmit(false);\n }}\n >\n <FontAwesomeIcon icon={vsArrowDown} />\n </Button>\n </div>\n {gotoValueError && (\n <div className=\"text-danger\">{gotoValueError}</div>\n )}\n </div>\n </div>\n )}\n </>\n </IrisGridBottomBar>\n );\n}\n\nexport default GotoRow;\n"],"mappings":"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"}
1
+ {"version":3,"file":"GotoRow.js","names":["FontAwesomeIcon","vsClose","vsArrowUp","vsArrowDown","React","useEffect","useMemo","useRef","useState","Type","FilterType","Button","DateTimeInput","TableUtils","classNames","shortid","IrisGridBottomBar","isIrisGridProxyModel","model","undefined","DEFAULT_FORMAT_STRING","GotoRow","gotoRow","gotoRowError","gotoValueError","onGotoRowSubmit","isShown","onEntering","onEntered","onExiting","onExited","onGotoRowNumberChanged","onClose","gotoValueSelectedColumnName","gotoValue","gotoValueFilter","onGotoValueSelectedColumnNameChanged","onGotoValueSelectedFilterChanged","onGotoValueChanged","onGotoValueSubmit","gotoRowInputRef","gotoValueInputRef","isGotoRowActive","setIsGotoRowActive","columns","table","dh","rowCount","gotoRowInputId","handleGotoValueNumberKeyDown","e","key","stopPropagation","preventDefault","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","onGotoValueInputChanged","handleGotoValueKeySubmit","shiftKey","index","getColumnIndexByName","selectedColumn","columnType","type","normalizedType","getNormalizedType","value","selectInput","document","activeElement","current","select","renderValueInput","dataType","DECIMAL","INT","target","toLowerCase","test","DATETIME","STRING","event","eqIgnoreCase","containsIgnoreCase","eq","contains","BOOLEAN","i18n","NumberFormat","format","marginRight","isSeekRowAvailable","columnName","map","column","name"],"sources":["../src/GotoRow.tsx"],"sourcesContent":["import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose, vsArrowUp, vsArrowDown } from '@deephaven/icons';\nimport React, {\n ChangeEvent,\n KeyboardEvent,\n ReactElement,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { Column } from '@deephaven/jsapi-types';\nimport {\n Type as FilterType,\n TypeValue as FilterTypeValue,\n} from '@deephaven/filters';\nimport { Button, DateTimeInput } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport classNames from 'classnames';\nimport './GotoRow.scss';\nimport shortid from 'shortid';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridProxyModel from './IrisGridProxyModel';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport { ColumnName } from './CommonTypes';\n\nfunction isIrisGridProxyModel(\n model: IrisGridModel\n): model is IrisGridProxyModel {\n return (model as IrisGridProxyModel).model !== undefined;\n}\n\nconst DEFAULT_FORMAT_STRING = '###,##0';\n\ninterface GotoRowProps {\n gotoRow: string;\n gotoRowError: string;\n gotoValueError: string;\n onGotoRowSubmit: () => void;\n model: IrisGridModel;\n onGotoRowNumberChanged: (event: ChangeEvent<HTMLInputElement>) => void;\n onClose: () => void;\n isShown: boolean;\n onEntering: () => void;\n onEntered: () => void;\n onExiting: () => void;\n onExited: () => void;\n\n gotoValueSelectedColumnName: ColumnName;\n gotoValue: string;\n gotoValueFilter: FilterTypeValue;\n onGotoValueSelectedColumnNameChanged: (columnName: ColumnName) => void;\n onGotoValueSelectedFilterChanged: (filter: FilterTypeValue) => void;\n onGotoValueChanged: (input: string) => void;\n onGotoValueSubmit: (isBackward?: boolean) => void;\n}\n\nfunction GotoRow({\n gotoRow,\n gotoRowError,\n gotoValueError,\n onGotoRowSubmit,\n isShown,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n model,\n onGotoRowNumberChanged,\n onClose,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueFilter,\n onGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged,\n onGotoValueChanged,\n onGotoValueSubmit,\n}: GotoRowProps): ReactElement {\n const gotoRowInputRef = useRef<HTMLInputElement>(null);\n const gotoValueInputRef = useRef<HTMLInputElement>(null);\n\n const [isGotoRowActive, setIsGotoRowActive] = useState(false);\n let columns: Column[] = [];\n\n if (isIrisGridProxyModel(model) && model.table !== undefined) {\n ({ columns } = model.table);\n }\n\n const { dh, rowCount } = model;\n\n const gotoRowInputId = useMemo(() => `goto-row-input-${shortid()}`, []);\n\n const handleGotoValueNumberKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit();\n } else if (\n (e.key === 'Backspace' || e.key === 'Delete') &&\n (gotoValue === `${Number.POSITIVE_INFINITY}` ||\n gotoValue === `${Number.NEGATIVE_INFINITY}`)\n ) {\n onGotoValueInputChanged('');\n }\n };\n\n const handleGotoValueKeySubmit = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit(e.shiftKey);\n }\n };\n\n const index = model.getColumnIndexByName(gotoValueSelectedColumnName);\n\n const selectedColumn = columns[index ?? 0];\n\n const columnType = selectedColumn?.type;\n\n const normalizedType = TableUtils.getNormalizedType(columnType);\n const onGotoValueInputChanged = (value?: string) => {\n onGotoValueChanged(value ?? '');\n };\n const selectInput = () => {\n // when row changes without focus (i.e. via context menu), re-select input\n if (isGotoRowActive && document.activeElement !== gotoRowInputRef.current) {\n gotoRowInputRef.current?.select();\n } else if (\n !isGotoRowActive &&\n document.activeElement !== gotoValueInputRef.current\n ) {\n gotoValueInputRef.current?.select();\n }\n };\n useEffect(selectInput, [isGotoRowActive, gotoRow, gotoValue]);\n\n const renderValueInput = () => {\n switch (normalizedType) {\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT:\n return (\n <div className=\"goto-row-input\">\n <input\n ref={gotoValueInputRef}\n className={classNames('form-control', {\n 'is-invalid': gotoValueError !== '',\n })}\n onKeyDown={handleGotoValueNumberKeyDown}\n placeholder=\"value\"\n onChange={e => {\n const 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(`${Number.NEGATIVE_INFINITY}`);\n } else if (value === 'i' || value === 'infinity') {\n onGotoValueInputChanged(`${Number.POSITIVE_INFINITY}`);\n }\n }}\n value={gotoValue}\n aria-label=\"Value Input\"\n />\n </div>\n );\n case TableUtils.dataType.DATETIME:\n return (\n <div className=\"goto-value-date-time-input\">\n <DateTimeInput\n ref={gotoValueInputRef}\n className={classNames(\n 'form-control',\n 'goto-value-date-time-input',\n {\n 'is-invalid': gotoValueError !== '',\n }\n )}\n defaultValue={gotoValue}\n onChange={onGotoValueInputChanged}\n onSubmit={handleGotoValueKeySubmit}\n aria-label=\"Value Input\"\n />\n </div>\n );\n case TableUtils.dataType.STRING:\n return (\n <>\n <div className=\"goto-row-input\">\n <select\n className=\"custom-select\"\n onChange={event => {\n onGotoValueSelectedFilterChanged(\n event.target.value as FilterTypeValue\n );\n }}\n value={gotoValueFilter}\n aria-label=\"filter-type-select\"\n >\n <option\n key={FilterType.eqIgnoreCase}\n value={FilterType.eqIgnoreCase}\n >\n Equals (case-insensitive)\n </option>\n <option\n key={FilterType.containsIgnoreCase}\n value={FilterType.containsIgnoreCase}\n >\n Contains (case-insensitive)\n </option>\n <option key={FilterType.eq} value={FilterType.eq}>\n Equals\n </option>\n <option key={FilterType.contains} value={FilterType.contains}>\n Contains\n </option>\n </select>\n </div>\n <div className=\"goto-row-input\">\n <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 </div>\n </>\n );\n case TableUtils.dataType.BOOLEAN:\n return (\n <div className=\"goto-row-input\">\n <select\n className=\"custom-select\"\n onChange={event => {\n onGotoValueInputChanged(event.target.value);\n }}\n value={gotoValue}\n aria-label=\"Value Input\"\n >\n <option aria-label=\"null value\" key=\"null\" value=\"\" />\n <option key=\"true\" value=\"true\">\n true\n </option>\n <option key=\"false\" value=\"false\">\n false\n </option>\n </select>\n </div>\n );\n default:\n return (\n <div className=\"goto-row-input\">\n <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 </div>\n );\n }\n };\n return (\n <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 >\n <>\n <div className=\"goto-row-row\">\n <div\n className={classNames('goto-row-wrapper', {\n 'is-inactive': !isGotoRowActive,\n })}\n onClick={() => setIsGotoRowActive(true)}\n onFocus={() => setIsGotoRowActive(true)}\n role=\"group\"\n >\n <label className=\"goto-row-text\" htmlFor={gotoRowInputId}>\n Go to row\n </label>\n <div className=\"goto-row-input\">\n <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 </div>\n <div className=\"goto-row-text\">\n of {dh.i18n.NumberFormat.format(DEFAULT_FORMAT_STRING, rowCount)}\n </div>\n {gotoRowError && <div className=\"text-danger\">{gotoRowError}</div>}\n </div>\n <div className=\"goto-row-close\">\n <Button kind=\"ghost\" onClick={onClose}>\n <FontAwesomeIcon icon={vsClose} style={{ marginRight: '0' }} />\n </Button>\n </div>\n </div>\n {model.isSeekRowAvailable && (\n <div className=\"goto-row-row\">\n <div\n className={classNames('goto-row-wrapper', {\n 'is-inactive': isGotoRowActive,\n })}\n onClick={() => setIsGotoRowActive(false)}\n onFocus={() => setIsGotoRowActive(false)}\n role=\"group\"\n >\n <div className=\"goto-row-text\">Go to value</div>\n <div className=\"goto-row-input\">\n <select\n className=\"custom-select\"\n onChange={event => {\n const columnName = event.target.value;\n onGotoValueSelectedColumnNameChanged(columnName);\n }}\n value={gotoValueSelectedColumnName}\n aria-label=\"column-name-select\"\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n\n {renderValueInput()}\n\n <div>\n <Button\n kind=\"ghost\"\n disabled={gotoValue === ''}\n onClick={() => {\n onGotoValueSubmit(true);\n }}\n >\n <FontAwesomeIcon icon={vsArrowUp} />\n </Button>\n <Button\n kind=\"ghost\"\n disabled={gotoValue === ''}\n onClick={() => {\n onGotoValueSubmit(false);\n }}\n >\n <FontAwesomeIcon icon={vsArrowDown} />\n </Button>\n </div>\n {gotoValueError && (\n <div className=\"text-danger\">{gotoValueError}</div>\n )}\n </div>\n </div>\n )}\n </>\n </IrisGridBottomBar>\n );\n}\n\nexport default GotoRow;\n"],"mappings":"AAAA,SAASA,eAAe,QAAQ,gCAAgC;AAChE,SAASC,OAAO,EAAEC,SAAS,EAAEC,WAAW,QAAQ,kBAAkB;AAClE,OAAOC,KAAK,IAIVC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AAEd,SACEC,IAAI,IAAIC,UAAU,QAEb,oBAAoB;AAC3B,SAASC,MAAM,EAAEC,aAAa,QAAQ,uBAAuB;AAC7D,SAASC,UAAU,QAAQ,wBAAwB;AACnD,OAAOC,UAAU,MAAM,YAAY;AAAC;AAEpC,OAAOC,OAAO,MAAM,SAAS;AAAC,OAGvBC,iBAAiB;AAAA;AAAA;AAAA;AAGxB,SAASC,oBAAoB,CAC3BC,KAAoB,EACS;EAC7B,OAAQA,KAAK,CAAwBA,KAAK,KAAKC,SAAS;AAC1D;AAEA,IAAMC,qBAAqB,GAAG,SAAS;AAyBvC,SAASC,OAAO,OAoBe;EAAA,IApBd;IACfC,OAAO;IACPC,YAAY;IACZC,cAAc;IACdC,eAAe;IACfC,OAAO;IACPC,UAAU;IACVC,SAAS,EAATA,UAAS;IACTC,SAAS;IACTC,QAAQ;IACRZ,KAAK;IACLa,sBAAsB;IACtBC,OAAO;IACPC,2BAA2B;IAC3BC,SAAS;IACTC,eAAe;IACfC,oCAAoC;IACpCC,gCAAgC;IAChCC,kBAAkB;IAClBC;EACY,CAAC;EACb,IAAMC,eAAe,GAAGjC,MAAM,CAAmB,IAAI,CAAC;EACtD,IAAMkC,iBAAiB,GAAGlC,MAAM,CAAmB,IAAI,CAAC;EAExD,IAAM,CAACmC,eAAe,EAAEC,kBAAkB,CAAC,GAAGnC,QAAQ,CAAC,KAAK,CAAC;EAC7D,IAAIoC,OAAiB,GAAG,EAAE;EAE1B,IAAI3B,oBAAoB,CAACC,KAAK,CAAC,IAAIA,KAAK,CAAC2B,KAAK,KAAK1B,SAAS,EAAE;IAC5D,CAAC;MAAEyB;IAAQ,CAAC,GAAG1B,KAAK,CAAC2B,KAAK;EAC5B;EAEA,IAAM;IAAEC,EAAE;IAAEC;EAAS,CAAC,GAAG7B,KAAK;EAE9B,IAAM8B,cAAc,GAAG1C,OAAO,CAAC,+BAAwBS,OAAO,EAAE,CAAE,EAAE,EAAE,CAAC;EAEvE,IAAMkC,4BAA4B,GAAIC,CAAkC,IAAK;IAC3E,IAAIA,CAAC,CAACC,GAAG,KAAK,OAAO,EAAE;MACrBD,CAAC,CAACE,eAAe,EAAE;MACnBF,CAAC,CAACG,cAAc,EAAE;MAClBd,iBAAiB,EAAE;IACrB,CAAC,MAAM,IACL,CAACW,CAAC,CAACC,GAAG,KAAK,WAAW,IAAID,CAAC,CAACC,GAAG,KAAK,QAAQ,MAC3CjB,SAAS,eAAQoB,MAAM,CAACC,iBAAiB,CAAE,IAC1CrB,SAAS,eAAQoB,MAAM,CAACE,iBAAiB,CAAE,CAAC,EAC9C;MACAC,uBAAuB,CAAC,EAAE,CAAC;IAC7B;EACF,CAAC;EAED,IAAMC,wBAAwB,GAAIR,CAAkC,IAAK;IACvE,IAAIA,CAAC,CAACC,GAAG,KAAK,OAAO,EAAE;MACrBD,CAAC,CAACE,eAAe,EAAE;MACnBF,CAAC,CAACG,cAAc,EAAE;MAClBd,iBAAiB,CAACW,CAAC,CAACS,QAAQ,CAAC;IAC/B;EACF,CAAC;EAED,IAAMC,KAAK,GAAG1C,KAAK,CAAC2C,oBAAoB,CAAC5B,2BAA2B,CAAC;EAErE,IAAM6B,cAAc,GAAGlB,OAAO,CAACgB,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,CAAC,CAAC;EAE1C,IAAMG,UAAU,GAAGD,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEE,IAAI;EAEvC,IAAMC,cAAc,GAAGpD,UAAU,CAACqD,iBAAiB,CAACH,UAAU,CAAC;EAC/D,IAAMN,uBAAuB,GAAIU,KAAc,IAAK;IAClD7B,kBAAkB,CAAC6B,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,CAAC;EACjC,CAAC;EACD,IAAMC,WAAW,GAAG,MAAM;IACxB;IACA,IAAI1B,eAAe,IAAI2B,QAAQ,CAACC,aAAa,KAAK9B,eAAe,CAAC+B,OAAO,EAAE;MAAA;MACzE,yBAAA/B,eAAe,CAAC+B,OAAO,0DAAvB,sBAAyBC,MAAM,EAAE;IACnC,CAAC,MAAM,IACL,CAAC9B,eAAe,IAChB2B,QAAQ,CAACC,aAAa,KAAK7B,iBAAiB,CAAC8B,OAAO,EACpD;MAAA;MACA,yBAAA9B,iBAAiB,CAAC8B,OAAO,0DAAzB,sBAA2BC,MAAM,EAAE;IACrC;EACF,CAAC;EACDnE,SAAS,CAAC+D,WAAW,EAAE,CAAC1B,eAAe,EAAEpB,OAAO,EAAEY,SAAS,CAAC,CAAC;EAE7D,IAAMuC,gBAAgB,GAAG,MAAM;IAC7B,QAAQR,cAAc;MACpB,KAAKpD,UAAU,CAAC6D,QAAQ,CAACC,OAAO;MAChC,KAAK9D,UAAU,CAAC6D,QAAQ,CAACE,GAAG;QAC1B,oBACE;UAAK,SAAS,EAAC,gBAAgB;UAAA,uBAC7B;YACE,GAAG,EAAEnC,iBAAkB;YACvB,SAAS,EAAE3B,UAAU,CAAC,cAAc,EAAE;cACpC,YAAY,EAAEU,cAAc,KAAK;YACnC,CAAC,CAAE;YACH,SAAS,EAAEyB,4BAA6B;YACxC,WAAW,EAAC,OAAO;YACnB,QAAQ,EAAEC,CAAC,IAAI;cACb,IAAMiB,KAAK,GAAGjB,CAAC,CAAC2B,MAAM,CAACV,KAAK,CAACW,WAAW,EAAE;cAC1C;cACA,IAAI,qBAAqB,CAACC,IAAI,CAAC7B,CAAC,CAAC2B,MAAM,CAACV,KAAK,CAAC,EAAE;gBAC9CV,uBAAuB,CAACP,CAAC,CAAC2B,MAAM,CAACV,KAAK,CAAC;cACzC,CAAC,MAAM,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,WAAW,EAAE;gBAClDV,uBAAuB,WAAIH,MAAM,CAACE,iBAAiB,EAAG;cACxD,CAAC,MAAM,IAAIW,KAAK,KAAK,GAAG,IAAIA,KAAK,KAAK,UAAU,EAAE;gBAChDV,uBAAuB,WAAIH,MAAM,CAACC,iBAAiB,EAAG;cACxD;YACF,CAAE;YACF,KAAK,EAAErB,SAAU;YACjB,cAAW;UAAa;QACxB,EACE;MAEV,KAAKrB,UAAU,CAAC6D,QAAQ,CAACM,QAAQ;QAC/B,oBACE;UAAK,SAAS,EAAC,4BAA4B;UAAA,uBACzC,KAAC,aAAa;YACZ,GAAG,EAAEvC,iBAAkB;YACvB,SAAS,EAAE3B,UAAU,CACnB,cAAc,EACd,4BAA4B,EAC5B;cACE,YAAY,EAAEU,cAAc,KAAK;YACnC,CAAC,CACD;YACF,YAAY,EAAEU,SAAU;YACxB,QAAQ,EAAEuB,uBAAwB;YAClC,QAAQ,EAAEC,wBAAyB;YACnC,cAAW;UAAa;QACxB,EACE;MAEV,KAAK7C,UAAU,CAAC6D,QAAQ,CAACO,MAAM;QAC7B,oBACE;UAAA,wBACE;YAAK,SAAS,EAAC,gBAAgB;YAAA,uBAC7B;cACE,SAAS,EAAC,eAAe;cACzB,QAAQ,EAAEC,KAAK,IAAI;gBACjB7C,gCAAgC,CAC9B6C,KAAK,CAACL,MAAM,CAACV,KAAK,CACnB;cACH,CAAE;cACF,KAAK,EAAEhC,eAAgB;cACvB,cAAW,oBAAoB;cAAA,wBAE/B;gBAEE,KAAK,EAAEzB,UAAU,CAACyE,YAAa;gBAAA,UAChC;cAED,GAJOzE,UAAU,CAACyE,YAAY,CAIrB,eACT;gBAEE,KAAK,EAAEzE,UAAU,CAAC0E,kBAAmB;gBAAA,UACtC;cAED,GAJO1E,UAAU,CAAC0E,kBAAkB,CAI3B,eACT;gBAA4B,KAAK,EAAE1E,UAAU,CAAC2E,EAAG;gBAAA,UAAC;cAElD,GAFa3E,UAAU,CAAC2E,EAAE,CAEjB,eACT;gBAAkC,KAAK,EAAE3E,UAAU,CAAC4E,QAAS;gBAAA,UAAC;cAE9D,GAFa5E,UAAU,CAAC4E,QAAQ,CAEvB;YAAA;UACF,EACL,eACN;YAAK,SAAS,EAAC,gBAAgB;YAAA,uBAC7B;cACE,GAAG,EAAE7C,iBAAkB;cACvB,SAAS,EAAE3B,UAAU,CAAC,cAAc,EAAE;gBACpC,YAAY,EAAEU,cAAc,KAAK;cACnC,CAAC,CAAE;cACH,SAAS,EAAEkC,wBAAyB;cACpC,WAAW,EAAC,OAAO;cACnB,QAAQ,EAAER,CAAC,IAAIO,uBAAuB,CAACP,CAAC,CAAC2B,MAAM,CAACV,KAAK,CAAE;cACvD,KAAK,EAAEjC,SAAU;cACjB,cAAW;YAAa;UACxB,EACE;QAAA,EACL;MAEP,KAAKrB,UAAU,CAAC6D,QAAQ,CAACa,OAAO;QAC9B,oBACE;UAAK,SAAS,EAAC,gBAAgB;UAAA,uBAC7B;YACE,SAAS,EAAC,eAAe;YACzB,QAAQ,EAAEL,KAAK,IAAI;cACjBzB,uBAAuB,CAACyB,KAAK,CAACL,MAAM,CAACV,KAAK,CAAC;YAC7C,CAAE;YACF,KAAK,EAAEjC,SAAU;YACjB,cAAW,aAAa;YAAA,wBAExB;cAAQ,cAAW,YAAY;cAAY,KAAK,EAAC;YAAE,GAAf,MAAM,CAAY,eACtD;cAAmB,KAAK,EAAC,MAAM;cAAA,UAAC;YAEhC,GAFY,MAAM,CAET,eACT;cAAoB,KAAK,EAAC,OAAO;cAAA,UAAC;YAElC,GAFY,OAAO,CAEV;UAAA;QACF,EACL;MAEV;QACE,oBACE;UAAK,SAAS,EAAC,gBAAgB;UAAA,uBAC7B;YACE,GAAG,EAAEO,iBAAkB;YACvB,SAAS,EAAC,cAAc;YACxB,SAAS,EAAEiB,wBAAyB;YACpC,WAAW,EAAC,OAAO;YACnB,QAAQ,EAAER,CAAC,IAAIO,uBAAuB,CAACP,CAAC,CAAC2B,MAAM,CAACV,KAAK,CAAE;YACvD,KAAK,EAAEjC,SAAU;YACjB,cAAW;UAAa;QACxB,EACE;IACN;EAER,CAAC;EACD,oBACE,KAAC,iBAAiB;IAChB,OAAO,EAAER,OAAQ;IACjB,SAAS,EAAEZ,UAAU,CAAC,UAAU,CAAE;IAClC,UAAU,EAAEa,UAAW;IACvB,SAAS,EAAE,MAAM;MACfC,UAAS,EAAE;MACXwC,WAAW,EAAE;IACf,CAAE;IACF,SAAS,EAAEvC,SAAU;IACrB,QAAQ,EAAEC,QAAS;IAAA,uBAEnB;MAAA,wBACE;QAAK,SAAS,EAAC,cAAc;QAAA,wBAC3B;UACE,SAAS,EAAEhB,UAAU,CAAC,kBAAkB,EAAE;YACxC,aAAa,EAAE,CAAC4B;UAClB,CAAC,CAAE;UACH,OAAO,EAAE,MAAMC,kBAAkB,CAAC,IAAI,CAAE;UACxC,OAAO,EAAE,MAAMA,kBAAkB,CAAC,IAAI,CAAE;UACxC,IAAI,EAAC,OAAO;UAAA,wBAEZ;YAAO,SAAS,EAAC,eAAe;YAAC,OAAO,EAAEK,cAAe;YAAA,UAAC;UAE1D,EAAQ,eACR;YAAK,SAAS,EAAC,gBAAgB;YAAA,uBAC7B;cACE,GAAG,EAAER,eAAgB;cACrB,eAAY,gBAAgB;cAC5B,IAAI,EAAC,QAAQ;cACb,SAAS,EAAEU,CAAC,IAAI;gBACd,IAAIA,CAAC,CAACC,GAAG,KAAK,OAAO,EAAE;kBACrBD,CAAC,CAACE,eAAe,EAAE;kBACnBF,CAAC,CAACG,cAAc,EAAE;kBAClB5B,eAAe,EAAE;gBACnB;cACF,CAAE;cACF,SAAS,EAAEX,UAAU,CAAC,cAAc,EAAE;gBACpC,YAAY,EAAES,YAAY,KAAK;cACjC,CAAC,CAAE;cACH,WAAW,EAAC,YAAY;cACxB,QAAQ,EAAE2D,KAAK,IAAI;gBACjBnD,sBAAsB,CAACmD,KAAK,CAAC;cAC/B,CAAE;cACF,KAAK,EAAE5D,OAAQ;cACf,EAAE,EAAE0B;YAAe;UACnB,EACE,eACN;YAAK,SAAS,EAAC,eAAe;YAAA,WAAC,KAC1B,EAACF,EAAE,CAAC0C,IAAI,CAACC,YAAY,CAACC,MAAM,CAACtE,qBAAqB,EAAE2B,QAAQ,CAAC;UAAA,EAC5D,EACLxB,YAAY,iBAAI;YAAK,SAAS,EAAC,aAAa;YAAA,UAAEA;UAAY,EAAO;QAAA,EAC9D,eACN;UAAK,SAAS,EAAC,gBAAgB;UAAA,uBAC7B,KAAC,MAAM;YAAC,IAAI,EAAC,OAAO;YAAC,OAAO,EAAES,OAAQ;YAAA,uBACpC,KAAC,eAAe;cAAC,IAAI,EAAE/B,OAAQ;cAAC,KAAK,EAAE;gBAAE0F,WAAW,EAAE;cAAI;YAAE;UAAG;QACxD,EACL;MAAA,EACF,EACLzE,KAAK,CAAC0E,kBAAkB,iBACvB;QAAK,SAAS,EAAC,cAAc;QAAA,uBAC3B;UACE,SAAS,EAAE9E,UAAU,CAAC,kBAAkB,EAAE;YACxC,aAAa,EAAE4B;UACjB,CAAC,CAAE;UACH,OAAO,EAAE,MAAMC,kBAAkB,CAAC,KAAK,CAAE;UACzC,OAAO,EAAE,MAAMA,kBAAkB,CAAC,KAAK,CAAE;UACzC,IAAI,EAAC,OAAO;UAAA,wBAEZ;YAAK,SAAS,EAAC,eAAe;YAAA,UAAC;UAAW,EAAM,eAChD;YAAK,SAAS,EAAC,gBAAgB;YAAA,uBAC7B;cACE,SAAS,EAAC,eAAe;cACzB,QAAQ,EAAEuC,KAAK,IAAI;gBACjB,IAAMW,UAAU,GAAGX,KAAK,CAACL,MAAM,CAACV,KAAK;gBACrC/B,oCAAoC,CAACyD,UAAU,CAAC;cAClD,CAAE;cACF,KAAK,EAAE5D,2BAA4B;cACnC,cAAW,oBAAoB;cAAA,UAE9BW,OAAO,CAACkD,GAAG,CAACC,MAAM,iBACjB;gBAA0B,KAAK,EAAEA,MAAM,CAACC,IAAK;gBAAA,UAC1CD,MAAM,CAACC;cAAI,GADDD,MAAM,CAACC,IAAI,CAGzB;YAAC;UACK,EACL,EAELvB,gBAAgB,EAAE,eAEnB;YAAA,wBACE,KAAC,MAAM;cACL,IAAI,EAAC,OAAO;cACZ,QAAQ,EAAEvC,SAAS,KAAK,EAAG;cAC3B,OAAO,EAAE,MAAM;gBACbK,iBAAiB,CAAC,IAAI,CAAC;cACzB,CAAE;cAAA,uBAEF,KAAC,eAAe;gBAAC,IAAI,EAAErC;cAAU;YAAG,EAC7B,eACT,KAAC,MAAM;cACL,IAAI,EAAC,OAAO;cACZ,QAAQ,EAAEgC,SAAS,KAAK,EAAG;cAC3B,OAAO,EAAE,MAAM;gBACbK,iBAAiB,CAAC,KAAK,CAAC;cAC1B,CAAE;cAAA,uBAEF,KAAC,eAAe;gBAAC,IAAI,EAAEpC;cAAY;YAAG,EAC/B;UAAA,EACL,EACLqB,cAAc,iBACb;YAAK,SAAS,EAAC,aAAa;YAAA,UAAEA;UAAc,EAC7C;QAAA;MACG,EAET;IAAA;EACA,EACe;AAExB;AAEA,eAAeH,OAAO"}