@deephaven/iris-grid 0.22.3-beta.18 → 0.22.3-beta.21

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 (199) hide show
  1. package/dist/AdvancedFilterCreator.js +7 -65
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +0 -23
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +0 -52
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +2 -42
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnHeaderGroup.js +0 -11
  10. package/dist/ColumnHeaderGroup.js.map +1 -1
  11. package/dist/ColumnStatistics.js +1 -20
  12. package/dist/ColumnStatistics.js.map +1 -1
  13. package/dist/CrossColumnSearch.js +2 -23
  14. package/dist/CrossColumnSearch.js.map +1 -1
  15. package/dist/FilterInputField.js +2 -36
  16. package/dist/FilterInputField.js.map +1 -1
  17. package/dist/GotoRow.d.ts +1 -1
  18. package/dist/GotoRow.d.ts.map +1 -1
  19. package/dist/GotoRow.js +2 -7
  20. package/dist/GotoRow.js.map +1 -1
  21. package/dist/IrisGrid.d.ts +11 -5
  22. package/dist/IrisGrid.d.ts.map +1 -1
  23. package/dist/IrisGrid.js +77 -519
  24. package/dist/IrisGrid.js.map +1 -1
  25. package/dist/IrisGridBottomBar.d.ts +1 -1
  26. package/dist/IrisGridBottomBar.d.ts.map +1 -1
  27. package/dist/IrisGridBottomBar.js +2 -2
  28. package/dist/IrisGridBottomBar.js.map +1 -1
  29. package/dist/IrisGridCellOverflowModal.js +6 -21
  30. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  31. package/dist/IrisGridCopyHandler.js +3 -50
  32. package/dist/IrisGridCopyHandler.js.map +1 -1
  33. package/dist/IrisGridMetricCalculator.js +2 -12
  34. package/dist/IrisGridMetricCalculator.js.map +1 -1
  35. package/dist/IrisGridModel.js +32 -58
  36. package/dist/IrisGridModel.js.map +1 -1
  37. package/dist/IrisGridModelFactory.js +0 -7
  38. package/dist/IrisGridModelFactory.js.map +1 -1
  39. package/dist/IrisGridModelUpdater.js +0 -4
  40. package/dist/IrisGridModelUpdater.js.map +1 -1
  41. package/dist/IrisGridPartitionSelector.js +0 -23
  42. package/dist/IrisGridPartitionSelector.js.map +1 -1
  43. package/dist/IrisGridProxyModel.js +9 -153
  44. package/dist/IrisGridProxyModel.js.map +1 -1
  45. package/dist/IrisGridRenderer.js +41 -183
  46. package/dist/IrisGridRenderer.js.map +1 -1
  47. package/dist/IrisGridShortcuts.js.map +1 -1
  48. package/dist/IrisGridTableModel.js +7 -86
  49. package/dist/IrisGridTableModel.js.map +1 -1
  50. package/dist/IrisGridTableModelTemplate.js +70 -461
  51. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  52. package/dist/IrisGridTestUtils.js +0 -23
  53. package/dist/IrisGridTestUtils.js.map +1 -1
  54. package/dist/IrisGridTheme.js.map +1 -1
  55. package/dist/IrisGridTreeTableModel.js +3 -42
  56. package/dist/IrisGridTreeTableModel.js.map +1 -1
  57. package/dist/IrisGridUtils.d.ts +8 -2
  58. package/dist/IrisGridUtils.d.ts.map +1 -1
  59. package/dist/IrisGridUtils.js +97 -195
  60. package/dist/IrisGridUtils.js.map +1 -1
  61. package/dist/MissingKeyError.js +0 -7
  62. package/dist/MissingKeyError.js.map +1 -1
  63. package/dist/PartitionSelectorSearch.js +2 -48
  64. package/dist/PartitionSelectorSearch.js.map +1 -1
  65. package/dist/PendingDataBottomBar.d.ts +1 -1
  66. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  67. package/dist/PendingDataBottomBar.js +2 -7
  68. package/dist/PendingDataBottomBar.js.map +1 -1
  69. package/dist/TableViewportUpdater.js +3 -29
  70. package/dist/TableViewportUpdater.js.map +1 -1
  71. package/dist/ToastBottomBar.d.ts +1 -1
  72. package/dist/ToastBottomBar.d.ts.map +1 -1
  73. package/dist/ToastBottomBar.js +2 -4
  74. package/dist/ToastBottomBar.js.map +1 -1
  75. package/dist/TreeTableViewportUpdater.js +0 -21
  76. package/dist/TreeTableViewportUpdater.js.map +1 -1
  77. package/dist/format-context-menus/CustomFormatAction.js +4 -25
  78. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  79. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -7
  80. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  81. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -9
  82. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  83. package/dist/format-context-menus/FormatContextMenuUtils.js +3 -9
  84. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  85. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -8
  86. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  87. package/dist/format-context-menus/index.js.map +1 -1
  88. package/dist/index.d.ts +3 -3
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +3 -3
  91. package/dist/index.js.map +1 -1
  92. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -8
  93. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  94. package/dist/key-handlers/CopyKeyHandler.js +1 -10
  95. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  96. package/dist/key-handlers/ReverseKeyHandler.js +0 -11
  97. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  98. package/dist/key-handlers/index.js.map +1 -1
  99. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -32
  100. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  101. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +4 -34
  102. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  103. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -20
  104. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  105. package/dist/mousehandlers/IrisGridContextMenuHandler.js +15 -105
  106. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  107. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -9
  108. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  109. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -17
  110. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  111. package/dist/mousehandlers/IrisGridSortMouseHandler.js +2 -15
  112. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  113. package/dist/mousehandlers/PendingMouseHandler.js +0 -6
  114. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  115. package/dist/mousehandlers/index.js.map +1 -1
  116. package/dist/sidebar/AdvancedSettings.js.map +1 -1
  117. package/dist/sidebar/AdvancedSettingsMenu.d.ts +4 -4
  118. package/dist/sidebar/AdvancedSettingsMenu.d.ts.map +1 -1
  119. package/dist/sidebar/AdvancedSettingsMenu.js +2 -6
  120. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  121. package/dist/sidebar/AdvancedSettingsType.js +0 -2
  122. package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
  123. package/dist/sidebar/ChartBuilder.js +2 -46
  124. package/dist/sidebar/ChartBuilder.js.map +1 -1
  125. package/dist/sidebar/CustomColumnBuilder.js +6 -58
  126. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  127. package/dist/sidebar/CustomColumnInput.js +4 -15
  128. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  129. package/dist/sidebar/InputEditor.js +5 -36
  130. package/dist/sidebar/InputEditor.js.map +1 -1
  131. package/dist/sidebar/OptionType.js +0 -2
  132. package/dist/sidebar/OptionType.js.map +1 -1
  133. package/dist/sidebar/RollupRows.js +9 -65
  134. package/dist/sidebar/RollupRows.js.map +1 -1
  135. package/dist/sidebar/SelectDistinctBuilder.js +0 -13
  136. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  137. package/dist/sidebar/TableCsvExporter.js +0 -52
  138. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  139. package/dist/sidebar/TableSaver.js +10 -123
  140. package/dist/sidebar/TableSaver.js.map +1 -1
  141. package/dist/sidebar/VisibilityOrderingBuilder.js +37 -116
  142. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  143. package/dist/sidebar/aggregations/AggregationEdit.d.ts +1 -1
  144. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  145. package/dist/sidebar/aggregations/AggregationEdit.js +2 -14
  146. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  147. package/dist/sidebar/aggregations/AggregationOperation.js +0 -2
  148. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
  149. package/dist/sidebar/aggregations/AggregationUtils.js +2 -5
  150. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  151. package/dist/sidebar/aggregations/Aggregations.d.ts +1 -1
  152. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  153. package/dist/sidebar/aggregations/Aggregations.js +2 -12
  154. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  155. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +1 -1
  156. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  157. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +2 -16
  158. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  159. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -1
  160. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  161. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -35
  162. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  163. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +1 -1
  164. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  165. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -12
  166. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  167. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -3
  168. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  169. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +1 -1
  170. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  171. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +16 -26
  172. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  173. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +9 -172
  174. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  175. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +1 -1
  176. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  177. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +2 -16
  178. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  179. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts +1 -1
  180. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  181. package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -12
  182. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  183. package/dist/sidebar/icons/BarIcon.js +0 -3
  184. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  185. package/dist/sidebar/icons/FormatColumnWhereIcon.js +2 -5
  186. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  187. package/dist/sidebar/icons/FormatRowWhereIcon.js +2 -5
  188. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  189. package/dist/sidebar/icons/HistogramIcon.js +0 -3
  190. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  191. package/dist/sidebar/icons/LineIcon.js +0 -3
  192. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  193. package/dist/sidebar/icons/PieIcon.js +0 -3
  194. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  195. package/dist/sidebar/icons/ScatterIcon.js +0 -3
  196. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  197. package/dist/sidebar/icons/index.js.map +1 -1
  198. package/dist/sidebar/index.js.map +1 -1
  199. package/package.json +15 -15
@@ -1,5 +1,4 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  import React, { Component } from 'react';
4
3
  import PropTypes from 'prop-types';
5
4
  import debounce from 'lodash.debounce';
@@ -10,27 +9,20 @@ import { CanceledPromiseError } from '@deephaven/utils';
10
9
  import "./PartitionSelectorSearch.css";
11
10
  var log = Log.module('PartitionSelectorSearch');
12
11
  var DEBOUNCE_UPDATE_FILTER = 150;
13
-
14
12
  class PartitionSelectorSearch extends Component {
15
13
  static handleError(error) {
16
14
  if (!(error instanceof CanceledPromiseError)) {
17
15
  log.error(error);
18
16
  }
19
17
  }
20
-
21
18
  constructor(props) {
22
19
  super(props);
23
-
24
20
  _defineProperty(this, "itemList", void 0);
25
-
26
21
  _defineProperty(this, "searchInput", void 0);
27
-
28
22
  _defineProperty(this, "timer", void 0);
29
-
30
23
  _defineProperty(this, "debounceUpdateFilter", debounce(() => {
31
24
  this.updateFilter();
32
25
  }, DEBOUNCE_UPDATE_FILTER));
33
-
34
26
  this.handleFilterChange = this.handleFilterChange.bind(this);
35
27
  this.handleInputFocus = this.handleInputFocus.bind(this);
36
28
  this.handleKeyDown = this.handleKeyDown.bind(this);
@@ -50,11 +42,9 @@ class PartitionSelectorSearch extends Component {
50
42
  isLoading: true
51
43
  };
52
44
  }
53
-
54
45
  componentDidMount() {
55
46
  this.startListening();
56
47
  }
57
-
58
48
  componentDidUpdate(prevProps, prevState) {
59
49
  var {
60
50
  isLoading,
@@ -63,32 +53,26 @@ class PartitionSelectorSearch extends Component {
63
53
  var {
64
54
  onListResized
65
55
  } = this.props;
66
-
67
56
  if (itemCount !== prevState.itemCount || isLoading !== prevState.isLoading) {
68
57
  onListResized();
69
58
  }
70
59
  }
71
-
72
60
  componentWillUnmount() {
73
61
  this.debounceUpdateFilter.cancel();
74
62
  this.stopListening();
75
63
  }
76
-
77
64
  handleKeyDown(event) {
78
65
  if (this.itemList == null) {
79
66
  return false;
80
67
  }
81
-
82
68
  var {
83
69
  items,
84
70
  itemCount
85
71
  } = this.state;
86
-
87
72
  switch (event.key) {
88
73
  case 'Enter':
89
74
  {
90
75
  var selectedValue = null;
91
-
92
76
  if (items.length > 0) {
93
77
  selectedValue = items[0].value;
94
78
  } else {
@@ -97,45 +81,37 @@ class PartitionSelectorSearch extends Component {
97
81
  } = this.state;
98
82
  selectedValue = text.trim();
99
83
  }
100
-
101
84
  if (selectedValue.length > 0) {
102
85
  var {
103
86
  onSelect
104
87
  } = this.props;
105
88
  onSelect(selectedValue);
106
89
  }
107
-
108
90
  event.stopPropagation();
109
91
  event.preventDefault();
110
92
  return true;
111
93
  }
112
-
113
94
  case 'ArrowDown':
114
95
  if (itemCount > 0) {
115
96
  this.itemList.focusItem(1);
116
97
  }
117
-
118
98
  event.stopPropagation();
119
99
  event.preventDefault();
120
100
  return true;
121
-
122
101
  default:
123
102
  return false;
124
103
  }
125
104
  }
126
-
127
105
  handleListKeydown(event) {
128
106
  switch (event.key) {
129
107
  case 'Escape':
130
108
  // Do nothing
131
109
  break;
132
-
133
110
  default:
134
111
  this.focus();
135
112
  break;
136
113
  }
137
114
  }
138
-
139
115
  handleFilterChange() {
140
116
  log.debug2('handleFilterChange');
141
117
  var {
@@ -147,13 +123,11 @@ class PartitionSelectorSearch extends Component {
147
123
  isLoading: true
148
124
  });
149
125
  }
150
-
151
126
  handleInputFocus() {
152
127
  if (this.itemList) {
153
128
  this.itemList.focusItem(0);
154
129
  }
155
130
  }
156
-
157
131
  handleSelect(itemIndex) {
158
132
  log.debug2('handleSelect', itemIndex);
159
133
  var {
@@ -164,18 +138,15 @@ class PartitionSelectorSearch extends Component {
164
138
  items
165
139
  } = this.state;
166
140
  var offsetIndex = itemIndex - offset;
167
-
168
141
  if (offsetIndex < 0 || items.length <= offsetIndex) {
169
142
  log.error('No data for item', itemIndex);
170
143
  return;
171
144
  }
172
-
173
145
  var {
174
146
  value
175
147
  } = items[offsetIndex];
176
148
  onSelect(value);
177
149
  }
178
-
179
150
  handleTableUpdate(event) {
180
151
  var data = event.detail;
181
152
  var {
@@ -187,19 +158,15 @@ class PartitionSelectorSearch extends Component {
187
158
  table
188
159
  } = this.props;
189
160
  var column = table.columns[0];
190
-
191
161
  for (var r = 0; r < data.rows.length; r += 1) {
192
162
  var row = data.rows[r];
193
-
194
163
  var _value = row.get(column);
195
-
196
164
  var displayValue = getFormattedString(_value, column.type, column.name);
197
165
  items.push({
198
166
  displayValue,
199
167
  value: _value
200
168
  });
201
169
  }
202
-
203
170
  var itemCount = table.size;
204
171
  log.debug2('handleTableUpdate', itemCount, offset, items.length);
205
172
  this.setState({
@@ -209,7 +176,6 @@ class PartitionSelectorSearch extends Component {
209
176
  isLoading: false
210
177
  });
211
178
  }
212
-
213
179
  handleTextChange(event) {
214
180
  log.debug2('handleTextChange');
215
181
  var {
@@ -220,7 +186,6 @@ class PartitionSelectorSearch extends Component {
220
186
  });
221
187
  this.debounceUpdateFilter();
222
188
  }
223
-
224
189
  handleViewportChange(topRow, bottomRow) {
225
190
  log.debug2('handleViewportChange', topRow, bottomRow);
226
191
  var delta = Math.max(1, bottomRow - topRow);
@@ -231,13 +196,11 @@ class PartitionSelectorSearch extends Component {
231
196
  } = this.props;
232
197
  table.setViewport(top, bottom);
233
198
  }
234
-
235
199
  focus() {
236
200
  if (this.searchInput) {
237
201
  this.searchInput.focus();
238
202
  }
239
203
  }
240
-
241
204
  startListening() {
242
205
  var {
243
206
  initialPageSize,
@@ -247,7 +210,6 @@ class PartitionSelectorSearch extends Component {
247
210
  table.addEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleFilterChange);
248
211
  table.setViewport(0, initialPageSize);
249
212
  }
250
-
251
213
  stopListening() {
252
214
  var {
253
215
  table
@@ -255,7 +217,6 @@ class PartitionSelectorSearch extends Component {
255
217
  table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
256
218
  table.removeEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleFilterChange);
257
219
  }
258
-
259
220
  updateFilter() {
260
221
  var {
261
222
  initialPageSize,
@@ -266,18 +227,15 @@ class PartitionSelectorSearch extends Component {
266
227
  } = this.state;
267
228
  var filterText = text.trim();
268
229
  var filters = [];
269
-
270
230
  if (filterText.length > 0) {
271
231
  var column = table.columns[0];
272
232
  var filter = column.filter().invoke('matches', dh.FilterValue.ofString("(?s)(?i).*\\Q".concat(filterText, "\\E.*")));
273
233
  filters.push(filter);
274
234
  }
275
-
276
235
  log.debug2('updateFilter', filters);
277
236
  table.applyFilter(filters);
278
237
  table.setViewport(0, initialPageSize);
279
238
  }
280
-
281
239
  render() {
282
240
  var {
283
241
  isLoading,
@@ -286,7 +244,8 @@ class PartitionSelectorSearch extends Component {
286
244
  offset,
287
245
  text
288
246
  } = this.state;
289
- var listHeight = Math.min(itemCount, PartitionSelectorSearch.MAX_VISIBLE_ITEMS) * ItemList.DEFAULT_ROW_HEIGHT + // Adjust for ListItem vertical padding - .375rem ~ 5.25px
247
+ var listHeight = Math.min(itemCount, PartitionSelectorSearch.MAX_VISIBLE_ITEMS) * ItemList.DEFAULT_ROW_HEIGHT +
248
+ // Adjust for ListItem vertical padding - .375rem ~ 5.25px
290
249
  11;
291
250
  return /*#__PURE__*/React.createElement("div", {
292
251
  className: "iris-grid-partition-selector-search"
@@ -325,17 +284,13 @@ class PartitionSelectorSearch extends Component {
325
284
  className: "iris-grid-partition-selector-loading"
326
285
  }, /*#__PURE__*/React.createElement(LoadingSpinner, null), "\xA0Loading..."));
327
286
  }
328
-
329
287
  }
330
-
331
288
  _defineProperty(PartitionSelectorSearch, "MAX_VISIBLE_ITEMS", 12);
332
-
333
289
  _defineProperty(PartitionSelectorSearch, "defaultProps", {
334
290
  initialPageSize: 100,
335
291
  onSelect: () => undefined,
336
292
  onListResized: () => undefined
337
293
  });
338
-
339
294
  _defineProperty(PartitionSelectorSearch, "propTypes", {
340
295
  getFormattedString: PropTypes.func.isRequired,
341
296
  table: PropTypes.shape({
@@ -354,6 +309,5 @@ _defineProperty(PartitionSelectorSearch, "propTypes", {
354
309
  onSelect: PropTypes.func,
355
310
  onListResized: PropTypes.func
356
311
  });
357
-
358
312
  export default PartitionSelectorSearch;
359
313
  //# sourceMappingURL=PartitionSelectorSearch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PartitionSelectorSearch.js","names":["React","Component","PropTypes","debounce","dh","ItemList","LoadingSpinner","Log","CanceledPromiseError","log","module","DEBOUNCE_UPDATE_FILTER","PartitionSelectorSearch","handleError","error","constructor","props","updateFilter","handleFilterChange","bind","handleInputFocus","handleKeyDown","handleListKeydown","handleSelect","handleTableUpdate","handleTextChange","handleViewportChange","itemList","searchInput","timer","state","offset","itemCount","items","text","isLoading","componentDidMount","startListening","componentDidUpdate","prevProps","prevState","onListResized","componentWillUnmount","debounceUpdateFilter","cancel","stopListening","event","key","selectedValue","length","value","trim","onSelect","stopPropagation","preventDefault","focusItem","focus","debug2","table","size","setState","itemIndex","offsetIndex","data","detail","getFormattedString","column","columns","r","rows","row","get","displayValue","type","name","push","target","topRow","bottomRow","delta","Math","max","top","bottom","setViewport","initialPageSize","addEventListener","Table","EVENT_UPDATED","EVENT_FILTERCHANGED","removeEventListener","filterText","filters","filter","invoke","FilterValue","ofString","applyFilter","render","listHeight","min","MAX_VISIBLE_ITEMS","DEFAULT_ROW_HEIGHT","height","undefined","func","isRequired","shape","arrayOf","string","number"],"sources":["../src/PartitionSelectorSearch.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash.debounce';\nimport dh, { Table } from '@deephaven/jsapi-shim';\nimport { ItemList, LoadingSpinner } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { CanceledPromiseError } from '@deephaven/utils';\nimport './PartitionSelectorSearch.scss';\nimport { ModelIndex } from '@deephaven/grid';\n\nconst log = Log.module('PartitionSelectorSearch');\nconst DEBOUNCE_UPDATE_FILTER = 150;\n\ninterface Item {\n value: string;\n displayValue: string;\n}\n\ninterface PartitionSelectorSearchProps<T> {\n getFormattedString: (value: T, type: string, name: string) => string;\n table: Table;\n initialPageSize: number;\n onSelect: (value: string) => void;\n onListResized: () => void;\n}\ninterface PartitionSelectorSearchState {\n offset: number;\n itemCount: number;\n items: Item[];\n text: string;\n isLoading: boolean;\n}\nclass PartitionSelectorSearch<T> extends Component<\n PartitionSelectorSearchProps<T>,\n PartitionSelectorSearchState\n> {\n static MAX_VISIBLE_ITEMS = 12;\n\n static defaultProps = {\n initialPageSize: 100,\n onSelect: (): void => undefined,\n onListResized: (): void => undefined,\n };\n\n static propTypes = {\n getFormattedString: PropTypes.func.isRequired,\n table: PropTypes.shape({\n addEventListener: PropTypes.func.isRequired,\n removeEventListener: PropTypes.func.isRequired,\n columns: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n filter: PropTypes.func.isRequired,\n })\n ),\n size: PropTypes.number.isRequired,\n applyFilter: PropTypes.func.isRequired,\n setViewport: PropTypes.func.isRequired,\n }).isRequired,\n initialPageSize: PropTypes.number,\n onSelect: PropTypes.func,\n onListResized: PropTypes.func,\n };\n\n static handleError(error: unknown): void {\n if (!(error instanceof CanceledPromiseError)) {\n log.error(error);\n }\n }\n\n constructor(props: PartitionSelectorSearchProps<T>) {\n super(props);\n\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleInputFocus = this.handleInputFocus.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleListKeydown = this.handleListKeydown.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTextChange = this.handleTextChange.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n\n this.itemList = null;\n this.searchInput = null;\n this.timer = null;\n\n this.state = {\n offset: 0,\n itemCount: 0,\n items: [],\n text: '',\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n }\n\n componentDidUpdate(\n prevProps: PartitionSelectorSearchProps<T>,\n prevState: PartitionSelectorSearchState\n ): void {\n const { isLoading, itemCount } = this.state;\n const { onListResized } = this.props;\n if (\n itemCount !== prevState.itemCount ||\n isLoading !== prevState.isLoading\n ) {\n onListResized();\n }\n }\n\n componentWillUnmount(): void {\n this.debounceUpdateFilter.cancel();\n\n this.stopListening();\n }\n\n itemList: ItemList<Item> | null;\n\n searchInput: HTMLInputElement | null;\n\n timer: null;\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): boolean {\n if (this.itemList == null) {\n return false;\n }\n\n const { items, itemCount } = this.state;\n switch (event.key) {\n case 'Enter': {\n let selectedValue = null;\n if (items.length > 0) {\n selectedValue = items[0].value;\n } else {\n const { text } = this.state;\n selectedValue = text.trim();\n }\n\n if (selectedValue.length > 0) {\n const { onSelect } = this.props;\n onSelect(selectedValue);\n }\n\n event.stopPropagation();\n event.preventDefault();\n return true;\n }\n case 'ArrowDown':\n if (itemCount > 0) {\n this.itemList.focusItem(1);\n }\n event.stopPropagation();\n event.preventDefault();\n return true;\n default:\n return false;\n }\n }\n\n handleListKeydown(event: React.KeyboardEvent<HTMLDivElement>): void {\n switch (event.key) {\n case 'Escape':\n // Do nothing\n break;\n default:\n this.focus();\n break;\n }\n }\n\n handleFilterChange(): void {\n log.debug2('handleFilterChange');\n\n const { table } = this.props;\n const itemCount = table.size;\n this.setState({ itemCount, isLoading: true });\n }\n\n handleInputFocus(): void {\n if (this.itemList) {\n this.itemList.focusItem(0);\n }\n }\n\n handleSelect(itemIndex: ModelIndex): void {\n log.debug2('handleSelect', itemIndex);\n\n const { onSelect } = this.props;\n const { offset, items } = this.state;\n const offsetIndex = itemIndex - offset;\n if (offsetIndex < 0 || items.length <= offsetIndex) {\n log.error('No data for item', itemIndex);\n return;\n }\n\n const { value } = items[offsetIndex];\n onSelect(value);\n }\n\n handleTableUpdate(event: CustomEvent): void {\n const data = event.detail;\n const { offset } = data;\n\n const items = [] as Item[];\n const { getFormattedString, table } = this.props;\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n const displayValue = getFormattedString(value, column.type, column.name);\n items.push({\n displayValue,\n value,\n });\n }\n\n const itemCount = table.size;\n log.debug2('handleTableUpdate', itemCount, offset, items.length);\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n handleTextChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('handleTextChange');\n\n const { value: text } = event.target;\n\n this.setState({ text });\n\n this.debounceUpdateFilter();\n }\n\n handleViewportChange(topRow: number, bottomRow: number): void {\n log.debug2('handleViewportChange', topRow, bottomRow);\n\n const delta = Math.max(1, bottomRow - topRow);\n const top = Math.max(0, topRow - delta);\n const bottom = bottomRow + delta;\n\n const { table } = this.props;\n table.setViewport(top, bottom);\n }\n\n debounceUpdateFilter = debounce((): void => {\n this.updateFilter();\n }, DEBOUNCE_UPDATE_FILTER);\n\n focus(): void {\n if (this.searchInput) {\n this.searchInput.focus();\n }\n }\n\n startListening(): void {\n const { initialPageSize, table } = this.props;\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n table.setViewport(0, initialPageSize);\n }\n\n stopListening(): void {\n const { table } = this.props;\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n }\n\n updateFilter(): void {\n const { initialPageSize, table } = this.props;\n const { text } = this.state;\n const filterText = text.trim();\n const filters = [];\n if (filterText.length > 0) {\n const column = table.columns[0];\n const filter = column\n .filter()\n .invoke(\n 'matches',\n dh.FilterValue.ofString(`(?s)(?i).*\\\\Q${filterText}\\\\E.*`)\n );\n filters.push(filter);\n }\n\n log.debug2('updateFilter', filters);\n\n table.applyFilter(filters);\n table.setViewport(0, initialPageSize);\n }\n\n render(): JSX.Element {\n const { isLoading, itemCount, items, offset, text } = this.state;\n const listHeight =\n Math.min(itemCount, PartitionSelectorSearch.MAX_VISIBLE_ITEMS) *\n ItemList.DEFAULT_ROW_HEIGHT +\n // Adjust for ListItem vertical padding - .375rem ~ 5.25px\n 11;\n return (\n <div className=\"iris-grid-partition-selector-search\">\n <div className=\"search-container\">\n <input\n type=\"text\"\n ref={searchInput => {\n this.searchInput = searchInput;\n }}\n value={text}\n placeholder=\"Available Partitions\"\n onChange={this.handleTextChange}\n onFocus={this.handleInputFocus}\n onKeyDown={this.handleKeyDown}\n className=\"form-control input-partition\"\n />\n </div>\n {!isLoading && itemCount > 0 && (\n <div\n className=\"iris-grid-partition-selector-search-list\"\n onKeyDown={this.handleListKeydown}\n role=\"presentation\"\n style={{ height: listHeight }}\n >\n <ItemList\n ref={itemList => {\n this.itemList = itemList;\n }}\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n />\n </div>\n )}\n {!isLoading && itemCount === 0 && (\n <div className=\"iris-grid-partition-selector-search-empty\">\n No results\n </div>\n )}\n {isLoading && (\n <div className=\"iris-grid-partition-selector-loading\">\n <LoadingSpinner />\n &nbsp;Loading...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default PartitionSelectorSearch;\n"],"mappings":"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"}
1
+ {"version":3,"file":"PartitionSelectorSearch.js","names":["React","Component","PropTypes","debounce","dh","ItemList","LoadingSpinner","Log","CanceledPromiseError","log","module","DEBOUNCE_UPDATE_FILTER","PartitionSelectorSearch","handleError","error","constructor","props","updateFilter","handleFilterChange","bind","handleInputFocus","handleKeyDown","handleListKeydown","handleSelect","handleTableUpdate","handleTextChange","handleViewportChange","itemList","searchInput","timer","state","offset","itemCount","items","text","isLoading","componentDidMount","startListening","componentDidUpdate","prevProps","prevState","onListResized","componentWillUnmount","debounceUpdateFilter","cancel","stopListening","event","key","selectedValue","length","value","trim","onSelect","stopPropagation","preventDefault","focusItem","focus","debug2","table","size","setState","itemIndex","offsetIndex","data","detail","getFormattedString","column","columns","r","rows","row","get","displayValue","type","name","push","target","topRow","bottomRow","delta","Math","max","top","bottom","setViewport","initialPageSize","addEventListener","Table","EVENT_UPDATED","EVENT_FILTERCHANGED","removeEventListener","filterText","filters","filter","invoke","FilterValue","ofString","applyFilter","render","listHeight","min","MAX_VISIBLE_ITEMS","DEFAULT_ROW_HEIGHT","height","undefined","func","isRequired","shape","arrayOf","string","number"],"sources":["../src/PartitionSelectorSearch.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash.debounce';\nimport dh, { Table } from '@deephaven/jsapi-shim';\nimport { ItemList, LoadingSpinner } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { CanceledPromiseError } from '@deephaven/utils';\nimport './PartitionSelectorSearch.scss';\nimport { ModelIndex } from '@deephaven/grid';\n\nconst log = Log.module('PartitionSelectorSearch');\nconst DEBOUNCE_UPDATE_FILTER = 150;\n\ninterface Item {\n value: string;\n displayValue: string;\n}\n\ninterface PartitionSelectorSearchProps<T> {\n getFormattedString: (value: T, type: string, name: string) => string;\n table: Table;\n initialPageSize: number;\n onSelect: (value: string) => void;\n onListResized: () => void;\n}\ninterface PartitionSelectorSearchState {\n offset: number;\n itemCount: number;\n items: Item[];\n text: string;\n isLoading: boolean;\n}\nclass PartitionSelectorSearch<T> extends Component<\n PartitionSelectorSearchProps<T>,\n PartitionSelectorSearchState\n> {\n static MAX_VISIBLE_ITEMS = 12;\n\n static defaultProps = {\n initialPageSize: 100,\n onSelect: (): void => undefined,\n onListResized: (): void => undefined,\n };\n\n static propTypes = {\n getFormattedString: PropTypes.func.isRequired,\n table: PropTypes.shape({\n addEventListener: PropTypes.func.isRequired,\n removeEventListener: PropTypes.func.isRequired,\n columns: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n filter: PropTypes.func.isRequired,\n })\n ),\n size: PropTypes.number.isRequired,\n applyFilter: PropTypes.func.isRequired,\n setViewport: PropTypes.func.isRequired,\n }).isRequired,\n initialPageSize: PropTypes.number,\n onSelect: PropTypes.func,\n onListResized: PropTypes.func,\n };\n\n static handleError(error: unknown): void {\n if (!(error instanceof CanceledPromiseError)) {\n log.error(error);\n }\n }\n\n constructor(props: PartitionSelectorSearchProps<T>) {\n super(props);\n\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleInputFocus = this.handleInputFocus.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleListKeydown = this.handleListKeydown.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTextChange = this.handleTextChange.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n\n this.itemList = null;\n this.searchInput = null;\n this.timer = null;\n\n this.state = {\n offset: 0,\n itemCount: 0,\n items: [],\n text: '',\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n }\n\n componentDidUpdate(\n prevProps: PartitionSelectorSearchProps<T>,\n prevState: PartitionSelectorSearchState\n ): void {\n const { isLoading, itemCount } = this.state;\n const { onListResized } = this.props;\n if (\n itemCount !== prevState.itemCount ||\n isLoading !== prevState.isLoading\n ) {\n onListResized();\n }\n }\n\n componentWillUnmount(): void {\n this.debounceUpdateFilter.cancel();\n\n this.stopListening();\n }\n\n itemList: ItemList<Item> | null;\n\n searchInput: HTMLInputElement | null;\n\n timer: null;\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): boolean {\n if (this.itemList == null) {\n return false;\n }\n\n const { items, itemCount } = this.state;\n switch (event.key) {\n case 'Enter': {\n let selectedValue = null;\n if (items.length > 0) {\n selectedValue = items[0].value;\n } else {\n const { text } = this.state;\n selectedValue = text.trim();\n }\n\n if (selectedValue.length > 0) {\n const { onSelect } = this.props;\n onSelect(selectedValue);\n }\n\n event.stopPropagation();\n event.preventDefault();\n return true;\n }\n case 'ArrowDown':\n if (itemCount > 0) {\n this.itemList.focusItem(1);\n }\n event.stopPropagation();\n event.preventDefault();\n return true;\n default:\n return false;\n }\n }\n\n handleListKeydown(event: React.KeyboardEvent<HTMLDivElement>): void {\n switch (event.key) {\n case 'Escape':\n // Do nothing\n break;\n default:\n this.focus();\n break;\n }\n }\n\n handleFilterChange(): void {\n log.debug2('handleFilterChange');\n\n const { table } = this.props;\n const itemCount = table.size;\n this.setState({ itemCount, isLoading: true });\n }\n\n handleInputFocus(): void {\n if (this.itemList) {\n this.itemList.focusItem(0);\n }\n }\n\n handleSelect(itemIndex: ModelIndex): void {\n log.debug2('handleSelect', itemIndex);\n\n const { onSelect } = this.props;\n const { offset, items } = this.state;\n const offsetIndex = itemIndex - offset;\n if (offsetIndex < 0 || items.length <= offsetIndex) {\n log.error('No data for item', itemIndex);\n return;\n }\n\n const { value } = items[offsetIndex];\n onSelect(value);\n }\n\n handleTableUpdate(event: CustomEvent): void {\n const data = event.detail;\n const { offset } = data;\n\n const items = [] as Item[];\n const { getFormattedString, table } = this.props;\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n const displayValue = getFormattedString(value, column.type, column.name);\n items.push({\n displayValue,\n value,\n });\n }\n\n const itemCount = table.size;\n log.debug2('handleTableUpdate', itemCount, offset, items.length);\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n handleTextChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('handleTextChange');\n\n const { value: text } = event.target;\n\n this.setState({ text });\n\n this.debounceUpdateFilter();\n }\n\n handleViewportChange(topRow: number, bottomRow: number): void {\n log.debug2('handleViewportChange', topRow, bottomRow);\n\n const delta = Math.max(1, bottomRow - topRow);\n const top = Math.max(0, topRow - delta);\n const bottom = bottomRow + delta;\n\n const { table } = this.props;\n table.setViewport(top, bottom);\n }\n\n debounceUpdateFilter = debounce((): void => {\n this.updateFilter();\n }, DEBOUNCE_UPDATE_FILTER);\n\n focus(): void {\n if (this.searchInput) {\n this.searchInput.focus();\n }\n }\n\n startListening(): void {\n const { initialPageSize, table } = this.props;\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n table.setViewport(0, initialPageSize);\n }\n\n stopListening(): void {\n const { table } = this.props;\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n }\n\n updateFilter(): void {\n const { initialPageSize, table } = this.props;\n const { text } = this.state;\n const filterText = text.trim();\n const filters = [];\n if (filterText.length > 0) {\n const column = table.columns[0];\n const filter = column\n .filter()\n .invoke(\n 'matches',\n dh.FilterValue.ofString(`(?s)(?i).*\\\\Q${filterText}\\\\E.*`)\n );\n filters.push(filter);\n }\n\n log.debug2('updateFilter', filters);\n\n table.applyFilter(filters);\n table.setViewport(0, initialPageSize);\n }\n\n render(): JSX.Element {\n const { isLoading, itemCount, items, offset, text } = this.state;\n const listHeight =\n Math.min(itemCount, PartitionSelectorSearch.MAX_VISIBLE_ITEMS) *\n ItemList.DEFAULT_ROW_HEIGHT +\n // Adjust for ListItem vertical padding - .375rem ~ 5.25px\n 11;\n return (\n <div className=\"iris-grid-partition-selector-search\">\n <div className=\"search-container\">\n <input\n type=\"text\"\n ref={searchInput => {\n this.searchInput = searchInput;\n }}\n value={text}\n placeholder=\"Available Partitions\"\n onChange={this.handleTextChange}\n onFocus={this.handleInputFocus}\n onKeyDown={this.handleKeyDown}\n className=\"form-control input-partition\"\n />\n </div>\n {!isLoading && itemCount > 0 && (\n <div\n className=\"iris-grid-partition-selector-search-list\"\n onKeyDown={this.handleListKeydown}\n role=\"presentation\"\n style={{ height: listHeight }}\n >\n <ItemList\n ref={itemList => {\n this.itemList = itemList;\n }}\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n />\n </div>\n )}\n {!isLoading && itemCount === 0 && (\n <div className=\"iris-grid-partition-selector-search-empty\">\n No results\n </div>\n )}\n {isLoading && (\n <div className=\"iris-grid-partition-selector-loading\">\n <LoadingSpinner />\n &nbsp;Loading...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default PartitionSelectorSearch;\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,EAAE,MAAiB,uBAAuB;AACjD,SAASC,QAAQ,EAAEC,cAAc,QAAQ,uBAAuB;AAChE,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,oBAAoB,QAAQ,kBAAkB;AAAC;AAIxD,IAAMC,GAAG,GAAGF,GAAG,CAACG,MAAM,CAAC,yBAAyB,CAAC;AACjD,IAAMC,sBAAsB,GAAG,GAAG;AAqBlC,MAAMC,uBAAuB,SAAYX,SAAS,CAGhD;EA8BA,OAAOY,WAAW,CAACC,KAAc,EAAQ;IACvC,IAAI,EAAEA,KAAK,YAAYN,oBAAoB,CAAC,EAAE;MAC5CC,GAAG,CAACK,KAAK,CAACA,KAAK,CAAC;IAClB;EACF;EAEAC,WAAW,CAACC,KAAsC,EAAE;IAClD,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAAA;IAAA,8CA8KQb,QAAQ,CAAC,MAAY;MAC1C,IAAI,CAACc,YAAY,EAAE;IACrB,CAAC,EAAEN,sBAAsB,CAAC;IA9KxB,IAAI,CAACO,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACD,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACE,aAAa,GAAG,IAAI,CAACA,aAAa,CAACF,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACG,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACH,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACI,YAAY,GAAG,IAAI,CAACA,YAAY,CAACJ,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACK,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACL,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACM,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACN,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACO,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACP,IAAI,CAAC,IAAI,CAAC;IAEhE,IAAI,CAACQ,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,KAAK,GAAG,IAAI;IAEjB,IAAI,CAACC,KAAK,GAAG;MACXC,MAAM,EAAE,CAAC;MACTC,SAAS,EAAE,CAAC;MACZC,KAAK,EAAE,EAAE;MACTC,IAAI,EAAE,EAAE;MACRC,SAAS,EAAE;IACb,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxB,IAAI,CAACC,cAAc,EAAE;EACvB;EAEAC,kBAAkB,CAChBC,SAA0C,EAC1CC,SAAuC,EACjC;IACN,IAAM;MAAEL,SAAS;MAAEH;IAAU,CAAC,GAAG,IAAI,CAACF,KAAK;IAC3C,IAAM;MAAEW;IAAc,CAAC,GAAG,IAAI,CAACzB,KAAK;IACpC,IACEgB,SAAS,KAAKQ,SAAS,CAACR,SAAS,IACjCG,SAAS,KAAKK,SAAS,CAACL,SAAS,EACjC;MACAM,aAAa,EAAE;IACjB;EACF;EAEAC,oBAAoB,GAAS;IAC3B,IAAI,CAACC,oBAAoB,CAACC,MAAM,EAAE;IAElC,IAAI,CAACC,aAAa,EAAE;EACtB;EAQAxB,aAAa,CAACyB,KAA4C,EAAW;IACnE,IAAI,IAAI,CAACnB,QAAQ,IAAI,IAAI,EAAE;MACzB,OAAO,KAAK;IACd;IAEA,IAAM;MAAEM,KAAK;MAAED;IAAU,CAAC,GAAG,IAAI,CAACF,KAAK;IACvC,QAAQgB,KAAK,CAACC,GAAG;MACf,KAAK,OAAO;QAAE;UACZ,IAAIC,aAAa,GAAG,IAAI;UACxB,IAAIf,KAAK,CAACgB,MAAM,GAAG,CAAC,EAAE;YACpBD,aAAa,GAAGf,KAAK,CAAC,CAAC,CAAC,CAACiB,KAAK;UAChC,CAAC,MAAM;YACL,IAAM;cAAEhB;YAAK,CAAC,GAAG,IAAI,CAACJ,KAAK;YAC3BkB,aAAa,GAAGd,IAAI,CAACiB,IAAI,EAAE;UAC7B;UAEA,IAAIH,aAAa,CAACC,MAAM,GAAG,CAAC,EAAE;YAC5B,IAAM;cAAEG;YAAS,CAAC,GAAG,IAAI,CAACpC,KAAK;YAC/BoC,QAAQ,CAACJ,aAAa,CAAC;UACzB;UAEAF,KAAK,CAACO,eAAe,EAAE;UACvBP,KAAK,CAACQ,cAAc,EAAE;UACtB,OAAO,IAAI;QACb;MACA,KAAK,WAAW;QACd,IAAItB,SAAS,GAAG,CAAC,EAAE;UACjB,IAAI,CAACL,QAAQ,CAAC4B,SAAS,CAAC,CAAC,CAAC;QAC5B;QACAT,KAAK,CAACO,eAAe,EAAE;QACvBP,KAAK,CAACQ,cAAc,EAAE;QACtB,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAAC;EAEnB;EAEAhC,iBAAiB,CAACwB,KAA0C,EAAQ;IAClE,QAAQA,KAAK,CAACC,GAAG;MACf,KAAK,QAAQ;QACX;QACA;MACF;QACE,IAAI,CAACS,KAAK,EAAE;QACZ;IAAM;EAEZ;EAEAtC,kBAAkB,GAAS;IACzBT,GAAG,CAACgD,MAAM,CAAC,oBAAoB,CAAC;IAEhC,IAAM;MAAEC;IAAM,CAAC,GAAG,IAAI,CAAC1C,KAAK;IAC5B,IAAMgB,SAAS,GAAG0B,KAAK,CAACC,IAAI;IAC5B,IAAI,CAACC,QAAQ,CAAC;MAAE5B,SAAS;MAAEG,SAAS,EAAE;IAAK,CAAC,CAAC;EAC/C;EAEAf,gBAAgB,GAAS;IACvB,IAAI,IAAI,CAACO,QAAQ,EAAE;MACjB,IAAI,CAACA,QAAQ,CAAC4B,SAAS,CAAC,CAAC,CAAC;IAC5B;EACF;EAEAhC,YAAY,CAACsC,SAAqB,EAAQ;IACxCpD,GAAG,CAACgD,MAAM,CAAC,cAAc,EAAEI,SAAS,CAAC;IAErC,IAAM;MAAET;IAAS,CAAC,GAAG,IAAI,CAACpC,KAAK;IAC/B,IAAM;MAAEe,MAAM;MAAEE;IAAM,CAAC,GAAG,IAAI,CAACH,KAAK;IACpC,IAAMgC,WAAW,GAAGD,SAAS,GAAG9B,MAAM;IACtC,IAAI+B,WAAW,GAAG,CAAC,IAAI7B,KAAK,CAACgB,MAAM,IAAIa,WAAW,EAAE;MAClDrD,GAAG,CAACK,KAAK,CAAC,kBAAkB,EAAE+C,SAAS,CAAC;MACxC;IACF;IAEA,IAAM;MAAEX;IAAM,CAAC,GAAGjB,KAAK,CAAC6B,WAAW,CAAC;IACpCV,QAAQ,CAACF,KAAK,CAAC;EACjB;EAEA1B,iBAAiB,CAACsB,KAAkB,EAAQ;IAC1C,IAAMiB,IAAI,GAAGjB,KAAK,CAACkB,MAAM;IACzB,IAAM;MAAEjC;IAAO,CAAC,GAAGgC,IAAI;IAEvB,IAAM9B,KAAK,GAAG,EAAY;IAC1B,IAAM;MAAEgC,kBAAkB;MAAEP;IAAM,CAAC,GAAG,IAAI,CAAC1C,KAAK;IAChD,IAAMkD,MAAM,GAAGR,KAAK,CAACS,OAAO,CAAC,CAAC,CAAC;IAC/B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,IAAI,CAACM,IAAI,CAACpB,MAAM,EAAEmB,CAAC,IAAI,CAAC,EAAE;MAC5C,IAAME,GAAG,GAAGP,IAAI,CAACM,IAAI,CAACD,CAAC,CAAC;MACxB,IAAMlB,MAAK,GAAGoB,GAAG,CAACC,GAAG,CAACL,MAAM,CAAC;MAC7B,IAAMM,YAAY,GAAGP,kBAAkB,CAACf,MAAK,EAAEgB,MAAM,CAACO,IAAI,EAAEP,MAAM,CAACQ,IAAI,CAAC;MACxEzC,KAAK,CAAC0C,IAAI,CAAC;QACTH,YAAY;QACZtB,KAAK,EAALA;MACF,CAAC,CAAC;IACJ;IAEA,IAAMlB,SAAS,GAAG0B,KAAK,CAACC,IAAI;IAC5BlD,GAAG,CAACgD,MAAM,CAAC,mBAAmB,EAAEzB,SAAS,EAAED,MAAM,EAAEE,KAAK,CAACgB,MAAM,CAAC;IAChE,IAAI,CAACW,QAAQ,CAAC;MAAE5B,SAAS;MAAEC,KAAK;MAAEF,MAAM;MAAEI,SAAS,EAAE;IAAM,CAAC,CAAC;EAC/D;EAEAV,gBAAgB,CAACqB,KAA0C,EAAQ;IACjErC,GAAG,CAACgD,MAAM,CAAC,kBAAkB,CAAC;IAE9B,IAAM;MAAEP,KAAK,EAAEhB;IAAK,CAAC,GAAGY,KAAK,CAAC8B,MAAM;IAEpC,IAAI,CAAChB,QAAQ,CAAC;MAAE1B;IAAK,CAAC,CAAC;IAEvB,IAAI,CAACS,oBAAoB,EAAE;EAC7B;EAEAjB,oBAAoB,CAACmD,MAAc,EAAEC,SAAiB,EAAQ;IAC5DrE,GAAG,CAACgD,MAAM,CAAC,sBAAsB,EAAEoB,MAAM,EAAEC,SAAS,CAAC;IAErD,IAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEH,SAAS,GAAGD,MAAM,CAAC;IAC7C,IAAMK,GAAG,GAAGF,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEJ,MAAM,GAAGE,KAAK,CAAC;IACvC,IAAMI,MAAM,GAAGL,SAAS,GAAGC,KAAK;IAEhC,IAAM;MAAErB;IAAM,CAAC,GAAG,IAAI,CAAC1C,KAAK;IAC5B0C,KAAK,CAAC0B,WAAW,CAACF,GAAG,EAAEC,MAAM,CAAC;EAChC;EAMA3B,KAAK,GAAS;IACZ,IAAI,IAAI,CAAC5B,WAAW,EAAE;MACpB,IAAI,CAACA,WAAW,CAAC4B,KAAK,EAAE;IAC1B;EACF;EAEAnB,cAAc,GAAS;IACrB,IAAM;MAAEgD,eAAe;MAAE3B;IAAM,CAAC,GAAG,IAAI,CAAC1C,KAAK;IAC7C0C,KAAK,CAAC4B,gBAAgB,CAAClF,EAAE,CAACmF,KAAK,CAACC,aAAa,EAAE,IAAI,CAAChE,iBAAiB,CAAC;IACtEkC,KAAK,CAAC4B,gBAAgB,CACpBlF,EAAE,CAACmF,KAAK,CAACE,mBAAmB,EAC5B,IAAI,CAACvE,kBAAkB,CACxB;IACDwC,KAAK,CAAC0B,WAAW,CAAC,CAAC,EAAEC,eAAe,CAAC;EACvC;EAEAxC,aAAa,GAAS;IACpB,IAAM;MAAEa;IAAM,CAAC,GAAG,IAAI,CAAC1C,KAAK;IAC5B0C,KAAK,CAACgC,mBAAmB,CAACtF,EAAE,CAACmF,KAAK,CAACC,aAAa,EAAE,IAAI,CAAChE,iBAAiB,CAAC;IACzEkC,KAAK,CAACgC,mBAAmB,CACvBtF,EAAE,CAACmF,KAAK,CAACE,mBAAmB,EAC5B,IAAI,CAACvE,kBAAkB,CACxB;EACH;EAEAD,YAAY,GAAS;IACnB,IAAM;MAAEoE,eAAe;MAAE3B;IAAM,CAAC,GAAG,IAAI,CAAC1C,KAAK;IAC7C,IAAM;MAAEkB;IAAK,CAAC,GAAG,IAAI,CAACJ,KAAK;IAC3B,IAAM6D,UAAU,GAAGzD,IAAI,CAACiB,IAAI,EAAE;IAC9B,IAAMyC,OAAO,GAAG,EAAE;IAClB,IAAID,UAAU,CAAC1C,MAAM,GAAG,CAAC,EAAE;MACzB,IAAMiB,MAAM,GAAGR,KAAK,CAACS,OAAO,CAAC,CAAC,CAAC;MAC/B,IAAM0B,MAAM,GAAG3B,MAAM,CAClB2B,MAAM,EAAE,CACRC,MAAM,CACL,SAAS,EACT1F,EAAE,CAAC2F,WAAW,CAACC,QAAQ,wBAAiBL,UAAU,WAAQ,CAC3D;MACHC,OAAO,CAACjB,IAAI,CAACkB,MAAM,CAAC;IACtB;IAEApF,GAAG,CAACgD,MAAM,CAAC,cAAc,EAAEmC,OAAO,CAAC;IAEnClC,KAAK,CAACuC,WAAW,CAACL,OAAO,CAAC;IAC1BlC,KAAK,CAAC0B,WAAW,CAAC,CAAC,EAAEC,eAAe,CAAC;EACvC;EAEAa,MAAM,GAAgB;IACpB,IAAM;MAAE/D,SAAS;MAAEH,SAAS;MAAEC,KAAK;MAAEF,MAAM;MAAEG;IAAK,CAAC,GAAG,IAAI,CAACJ,KAAK;IAChE,IAAMqE,UAAU,GACdnB,IAAI,CAACoB,GAAG,CAACpE,SAAS,EAAEpB,uBAAuB,CAACyF,iBAAiB,CAAC,GAC5DhG,QAAQ,CAACiG,kBAAkB;IAC7B;IACA,EAAE;IACJ,oBACE;MAAK,SAAS,EAAC;IAAqC,gBAClD;MAAK,SAAS,EAAC;IAAkB,gBAC/B;MACE,IAAI,EAAC,MAAM;MACX,GAAG,EAAE1E,WAAW,IAAI;QAClB,IAAI,CAACA,WAAW,GAAGA,WAAW;MAChC,CAAE;MACF,KAAK,EAAEM,IAAK;MACZ,WAAW,EAAC,sBAAsB;MAClC,QAAQ,EAAE,IAAI,CAACT,gBAAiB;MAChC,OAAO,EAAE,IAAI,CAACL,gBAAiB;MAC/B,SAAS,EAAE,IAAI,CAACC,aAAc;MAC9B,SAAS,EAAC;IAA8B,EACxC,CACE,EACL,CAACc,SAAS,IAAIH,SAAS,GAAG,CAAC,iBAC1B;MACE,SAAS,EAAC,0CAA0C;MACpD,SAAS,EAAE,IAAI,CAACV,iBAAkB;MAClC,IAAI,EAAC,cAAc;MACnB,KAAK,EAAE;QAAEiF,MAAM,EAAEJ;MAAW;IAAE,gBAE9B,oBAAC,QAAQ;MACP,GAAG,EAAExE,QAAQ,IAAI;QACf,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MAC1B,CAAE;MACF,SAAS,EAAEK,SAAU;MACrB,KAAK,EAAEC,KAAM;MACb,MAAM,EAAEF,MAAO;MACf,QAAQ,EAAE,IAAI,CAACR,YAAa;MAC5B,gBAAgB,EAAE,IAAI,CAACG;IAAqB,EAC5C,CAEL,EACA,CAACS,SAAS,IAAIH,SAAS,KAAK,CAAC,iBAC5B;MAAK,SAAS,EAAC;IAA2C,gBAG3D,EACAG,SAAS,iBACR;MAAK,SAAS,EAAC;IAAsC,gBACnD,oBAAC,cAAc,OAAG,mBAGrB,CACG;EAEV;AACF;AAAC,gBAjUKvB,uBAAuB,uBAIA,EAAE;AAAA,gBAJzBA,uBAAuB,kBAML;EACpByE,eAAe,EAAE,GAAG;EACpBjC,QAAQ,EAAE,MAAYoD,SAAS;EAC/B/D,aAAa,EAAE,MAAY+D;AAC7B,CAAC;AAAA,gBAVG5F,uBAAuB,eAYR;EACjBqD,kBAAkB,EAAE/D,SAAS,CAACuG,IAAI,CAACC,UAAU;EAC7ChD,KAAK,EAAExD,SAAS,CAACyG,KAAK,CAAC;IACrBrB,gBAAgB,EAAEpF,SAAS,CAACuG,IAAI,CAACC,UAAU;IAC3ChB,mBAAmB,EAAExF,SAAS,CAACuG,IAAI,CAACC,UAAU;IAC9CvC,OAAO,EAAEjE,SAAS,CAAC0G,OAAO,CACxB1G,SAAS,CAACyG,KAAK,CAAC;MACdjC,IAAI,EAAExE,SAAS,CAAC2G,MAAM,CAACH,UAAU;MACjCjC,IAAI,EAAEvE,SAAS,CAAC2G,MAAM,CAACH,UAAU;MACjCb,MAAM,EAAE3F,SAAS,CAACuG,IAAI,CAACC;IACzB,CAAC,CAAC,CACH;IACD/C,IAAI,EAAEzD,SAAS,CAAC4G,MAAM,CAACJ,UAAU;IACjCT,WAAW,EAAE/F,SAAS,CAACuG,IAAI,CAACC,UAAU;IACtCtB,WAAW,EAAElF,SAAS,CAACuG,IAAI,CAACC;EAC9B,CAAC,CAAC,CAACA,UAAU;EACbrB,eAAe,EAAEnF,SAAS,CAAC4G,MAAM;EACjC1D,QAAQ,EAAElD,SAAS,CAACuG,IAAI;EACxBhE,aAAa,EAAEvC,SAAS,CAACuG;AAC3B,CAAC;AAoSH,eAAe7F,uBAAuB"}
@@ -15,6 +15,6 @@ export declare type PendingDataBottomBarProps = {
15
15
  onExiting?: () => void;
16
16
  onExited?: () => void;
17
17
  };
18
- export declare const PendingDataBottomBar: ({ isSaving, onSave, onDiscard, discardTooltip, saveTooltip, error, pendingDataErrors, pendingDataMap, onEntering, onEntered, onExiting, onExited, }: PendingDataBottomBarProps) => JSX.Element;
18
+ export declare function PendingDataBottomBar({ isSaving, onSave, onDiscard, discardTooltip, saveTooltip, error, pendingDataErrors, pendingDataMap, onEntering, onEntered, onExiting, onExited, }: PendingDataBottomBarProps): JSX.Element;
19
19
  export default PendingDataBottomBar;
20
20
  //# sourceMappingURL=PendingDataBottomBar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PendingDataBottomBar.d.ts","sourceRoot":"","sources":["../src/PendingDataBottomBar.tsx"],"names":[],"mappings":";AAMA,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAM/C,oBAAY,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,wJAa9B,yBAAyB,KAAG,WA6G9B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"PendingDataBottomBar.d.ts","sourceRoot":"","sources":["../src/PendingDataBottomBar.tsx"],"names":[],"mappings":";AAMA,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAM/C,oBAAY,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,QAAgB,EAChB,MAAM,EACN,SAAS,EACT,cAAc,EACd,WAAW,EACX,KAAK,EACL,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,GACT,EAAE,yBAAyB,GAAG,GAAG,CAAC,OAAO,CA6GzC;AAED,eAAe,oBAAoB,CAAC"}
@@ -7,7 +7,7 @@ import IrisGridBottomBar from "./IrisGridBottomBar.js";
7
7
  import "./PendingDataBottomBar.css";
8
8
  var HIDE_TIMEOUT = 3000;
9
9
  var MAX_NUMBER_ROWS_SHOWN = 5;
10
- export var PendingDataBottomBar = _ref => {
10
+ export function PendingDataBottomBar(_ref) {
11
11
  var {
12
12
  isSaving = false,
13
13
  onSave,
@@ -30,11 +30,9 @@ export var PendingDataBottomBar = _ref => {
30
30
  if (pendingDataErrors.size === 0) {
31
31
  return error;
32
32
  }
33
-
34
33
  if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {
35
34
  return "Key can't be empty (on pending row".concat(pendingDataErrors.size > 1 ? 's' : '', " ").concat(Array.from(pendingDataErrors.keys()).join(', ').trim(), ")");
36
35
  }
37
-
38
36
  return "Key can't be empty (on ".concat(pendingDataErrors.size, " rows)");
39
37
  }, [error, pendingDataErrors]);
40
38
  useEffect(function showSuccessMessage() {
@@ -59,13 +57,11 @@ export var PendingDataBottomBar = _ref => {
59
57
  }, []);
60
58
  var pendingRowCount = pendingDataMap.size;
61
59
  var commitIcon;
62
-
63
60
  if (isSaving) {
64
61
  commitIcon = /*#__PURE__*/React.createElement(LoadingSpinner, null);
65
62
  } else if (wasSuccessShown) {
66
63
  commitIcon = vsPass;
67
64
  }
68
-
69
65
  return /*#__PURE__*/React.createElement(IrisGridBottomBar, {
70
66
  className: "pending-data-bottom-bar",
71
67
  isShown: pendingRowCount > 0 || isSuccessShown || errorMessage != null,
@@ -74,7 +70,6 @@ export var PendingDataBottomBar = _ref => {
74
70
  onExiting: onExiting,
75
71
  onExited: () => {
76
72
  setWasSuccessShown(false);
77
-
78
73
  if (_onExited) {
79
74
  _onExited();
80
75
  }
@@ -98,6 +93,6 @@ export var PendingDataBottomBar = _ref => {
98
93
  disabled: isSaving || wasSuccessShown || errorMessage != null,
99
94
  tooltip: saveTooltip
100
95
  }, isSaving && "Committing...", !isSaving && wasSuccessShown && "Success", !isSaving && !wasSuccessShown && "Commit")));
101
- };
96
+ }
102
97
  export default PendingDataBottomBar;
103
98
  //# sourceMappingURL=PendingDataBottomBar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PendingDataBottomBar.js","names":["React","useEffect","useMemo","useRef","useState","FontAwesomeIcon","vsPass","vsWarning","Button","LoadingSpinner","usePrevious","IrisGridBottomBar","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","error","pendingDataErrors","pendingDataMap","onEntering","onEntered","onExiting","onExited","isSuccessShown","setIsSuccessShown","wasSuccessShown","setWasSuccessShown","successTimeout","prevIsSaving","errorMessage","size","Array","from","keys","join","trim","showSuccessMessage","current","setTimeout","hideSuccessMessage","clearTimeout","cleanupTimeout","undefined","pendingRowCount","commitIcon"],"sources":["../src/PendingDataBottomBar.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './PendingDataBottomBar.scss';\nimport { PendingDataMap } from './CommonTypes';\n\nconst HIDE_TIMEOUT = 3000;\n\nconst MAX_NUMBER_ROWS_SHOWN = 5;\n\nexport type PendingDataBottomBarProps = {\n onSave: () => Promise<void>;\n onDiscard: () => Promise<void>;\n discardTooltip?: string;\n saveTooltip?: string;\n isSaving?: boolean;\n error?: string | null;\n pendingDataErrors: Map<number, Error[]>;\n pendingDataMap: PendingDataMap;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n};\n\nexport const PendingDataBottomBar = ({\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: PendingDataBottomBarProps): JSX.Element => {\n const [isSuccessShown, setIsSuccessShown] = useState(false);\n const [wasSuccessShown, setWasSuccessShown] = useState(false);\n const successTimeout = useRef<ReturnType<typeof setTimeout>>();\n const prevIsSaving = usePrevious(isSaving);\n const errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return `Key can't be empty (on pending row${\n pendingDataErrors.size > 1 ? 's' : ''\n } ${Array.from(pendingDataErrors.keys()).join(', ').trim()})`;\n }\n return `Key can't be empty (on ${pendingDataErrors.size} rows)`;\n }, [error, pendingDataErrors]);\n\n useEffect(\n function showSuccessMessage() {\n if (\n prevIsSaving != null &&\n prevIsSaving &&\n !isSaving &&\n errorMessage == null\n ) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n },\n [errorMessage, isSaving, prevIsSaving]\n );\n\n useEffect(\n function hideSuccessMessage() {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n },\n [pendingDataMap]\n );\n\n useEffect(function cleanupTimeout() {\n return () =>\n successTimeout.current ? clearTimeout(successTimeout.current) : undefined;\n }, []);\n\n const pendingRowCount = pendingDataMap.size;\n let commitIcon;\n if (isSaving) {\n commitIcon = <LoadingSpinner />;\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n\n return (\n <IrisGridBottomBar\n className=\"pending-data-bottom-bar\"\n isShown={pendingRowCount > 0 || isSuccessShown || errorMessage != null}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={() => {\n setWasSuccessShown(false);\n if (onExited) {\n onExited();\n }\n }}\n >\n {errorMessage != null && errorMessage !== '' && (\n <div className=\"error-message\">\n <FontAwesomeIcon icon={vsWarning} />\n <span>{`${errorMessage}`}</span>\n </div>\n )}\n {(errorMessage == null || errorMessage === '') && (\n <div className=\"status-message\">\n {pendingRowCount > 0 && (\n <span>{`${pendingRowCount} row${\n pendingRowCount > 1 ? 's' : ''\n } pending`}</span>\n )}\n </div>\n )}\n <div className=\"buttons-container\">\n {!isSaving && !wasSuccessShown && (\n <Button kind=\"secondary\" onClick={onDiscard} tooltip={discardTooltip}>\n Discard\n </Button>\n )}\n <Button\n kind={wasSuccessShown ? 'success' : 'primary'}\n onClick={onSave}\n icon={commitIcon}\n disabled={isSaving || wasSuccessShown || errorMessage != null}\n tooltip={saveTooltip}\n >\n {isSaving && `Committing...`}\n {!isSaving && wasSuccessShown && `Success`}\n {!isSaving && !wasSuccessShown && `Commit`}\n </Button>\n </div>\n </IrisGridBottomBar>\n );\n};\n\nexport default PendingDataBottomBar;\n"],"mappings":"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"}
1
+ {"version":3,"file":"PendingDataBottomBar.js","names":["React","useEffect","useMemo","useRef","useState","FontAwesomeIcon","vsPass","vsWarning","Button","LoadingSpinner","usePrevious","IrisGridBottomBar","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","error","pendingDataErrors","pendingDataMap","onEntering","onEntered","onExiting","onExited","isSuccessShown","setIsSuccessShown","wasSuccessShown","setWasSuccessShown","successTimeout","prevIsSaving","errorMessage","size","Array","from","keys","join","trim","showSuccessMessage","current","setTimeout","hideSuccessMessage","clearTimeout","cleanupTimeout","undefined","pendingRowCount","commitIcon"],"sources":["../src/PendingDataBottomBar.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './PendingDataBottomBar.scss';\nimport { PendingDataMap } from './CommonTypes';\n\nconst HIDE_TIMEOUT = 3000;\n\nconst MAX_NUMBER_ROWS_SHOWN = 5;\n\nexport type PendingDataBottomBarProps = {\n onSave: () => Promise<void>;\n onDiscard: () => Promise<void>;\n discardTooltip?: string;\n saveTooltip?: string;\n isSaving?: boolean;\n error?: string | null;\n pendingDataErrors: Map<number, Error[]>;\n pendingDataMap: PendingDataMap;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n};\n\nexport function PendingDataBottomBar({\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: PendingDataBottomBarProps): JSX.Element {\n const [isSuccessShown, setIsSuccessShown] = useState(false);\n const [wasSuccessShown, setWasSuccessShown] = useState(false);\n const successTimeout = useRef<ReturnType<typeof setTimeout>>();\n const prevIsSaving = usePrevious(isSaving);\n const errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return `Key can't be empty (on pending row${\n pendingDataErrors.size > 1 ? 's' : ''\n } ${Array.from(pendingDataErrors.keys()).join(', ').trim()})`;\n }\n return `Key can't be empty (on ${pendingDataErrors.size} rows)`;\n }, [error, pendingDataErrors]);\n\n useEffect(\n function showSuccessMessage() {\n if (\n prevIsSaving != null &&\n prevIsSaving &&\n !isSaving &&\n errorMessage == null\n ) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n },\n [errorMessage, isSaving, prevIsSaving]\n );\n\n useEffect(\n function hideSuccessMessage() {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n },\n [pendingDataMap]\n );\n\n useEffect(function cleanupTimeout() {\n return () =>\n successTimeout.current ? clearTimeout(successTimeout.current) : undefined;\n }, []);\n\n const pendingRowCount = pendingDataMap.size;\n let commitIcon;\n if (isSaving) {\n commitIcon = <LoadingSpinner />;\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n\n return (\n <IrisGridBottomBar\n className=\"pending-data-bottom-bar\"\n isShown={pendingRowCount > 0 || isSuccessShown || errorMessage != null}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={() => {\n setWasSuccessShown(false);\n if (onExited) {\n onExited();\n }\n }}\n >\n {errorMessage != null && errorMessage !== '' && (\n <div className=\"error-message\">\n <FontAwesomeIcon icon={vsWarning} />\n <span>{`${errorMessage}`}</span>\n </div>\n )}\n {(errorMessage == null || errorMessage === '') && (\n <div className=\"status-message\">\n {pendingRowCount > 0 && (\n <span>{`${pendingRowCount} row${\n pendingRowCount > 1 ? 's' : ''\n } pending`}</span>\n )}\n </div>\n )}\n <div className=\"buttons-container\">\n {!isSaving && !wasSuccessShown && (\n <Button kind=\"secondary\" onClick={onDiscard} tooltip={discardTooltip}>\n Discard\n </Button>\n )}\n <Button\n kind={wasSuccessShown ? 'success' : 'primary'}\n onClick={onSave}\n icon={commitIcon}\n disabled={isSaving || wasSuccessShown || errorMessage != null}\n tooltip={saveTooltip}\n >\n {isSaving && `Committing...`}\n {!isSaving && wasSuccessShown && `Success`}\n {!isSaving && !wasSuccessShown && `Commit`}\n </Button>\n </div>\n </IrisGridBottomBar>\n );\n}\n\nexport default PendingDataBottomBar;\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  import { PureComponent } from 'react';
4
3
  import memoize from 'memoize-one';
5
4
  import throttle from 'lodash.throttle';
@@ -7,6 +6,7 @@ import { GridUtils } from '@deephaven/grid';
7
6
  import Log from '@deephaven/log';
8
7
  var log = Log.module('TableViewportUpdater');
9
8
  var UPDATE_THROTTLE = 150;
9
+
10
10
  /**
11
11
  * Updates the viewport for an Iris table, for use in a scroll pane.
12
12
  * Automatically throttles the viewport requests and buffers above and below.
@@ -15,46 +15,38 @@ var UPDATE_THROTTLE = 150;
15
15
  class TableViewportUpdater extends PureComponent {
16
16
  constructor() {
17
17
  super(...arguments);
18
-
19
18
  _defineProperty(this, "subscription", void 0);
20
-
21
19
  _defineProperty(this, "getViewportRowRange", memoize((table, top, bottom) => {
22
20
  var viewHeight = bottom - top;
23
21
  var viewportTop = Math.max(0, top - viewHeight * TableViewportUpdater.ROW_BUFFER_PAGES);
24
22
  var viewportBottom = bottom + viewHeight * TableViewportUpdater.ROW_BUFFER_PAGES;
25
23
  return [viewportTop, viewportBottom];
26
24
  }));
27
-
28
25
  _defineProperty(this, "getViewportColumns", memoize((table, left, right, movedColumns) => {
29
26
  if (left == null || right == null) {
30
27
  return null;
31
28
  }
32
-
33
29
  var viewWidth = right - left;
34
30
  var viewportLeft = Math.max(0, left - viewWidth * TableViewportUpdater.COLUMN_BUFFER_PAGES);
35
- var viewportRight = Math.min(right + viewWidth * TableViewportUpdater.COLUMN_BUFFER_PAGES, table.columns.length - 1); // Need to get all the columns from the table model now
31
+ var viewportRight = Math.min(right + viewWidth * TableViewportUpdater.COLUMN_BUFFER_PAGES, table.columns.length - 1);
36
32
 
33
+ // Need to get all the columns from the table model now
37
34
  var columns = [];
38
-
39
35
  for (var i = viewportLeft; i <= viewportRight; i += 1) {
40
36
  var modelIndex = GridUtils.getModelIndex(i, movedColumns);
41
37
  columns.push(table.columns[modelIndex]);
42
38
  }
43
-
44
39
  return columns;
45
40
  }));
46
-
47
41
  _defineProperty(this, "updateViewport", throttle((top, bottom, left, right, viewColumns) => {
48
42
  if (bottom < top) {
49
43
  log.error('Invalid viewport', top, bottom);
50
44
  return;
51
45
  }
52
-
53
46
  if (top === 0 && bottom === 0) {
54
47
  log.debug2('Ignoring 0-0 viewport');
55
48
  return;
56
49
  }
57
-
58
50
  var {
59
51
  movedColumns,
60
52
  table
@@ -62,7 +54,6 @@ class TableViewportUpdater extends PureComponent {
62
54
  var [viewportTop, viewportBottom] = this.getViewportRowRange(table, top, bottom);
63
55
  var columns = viewColumns !== null && viewColumns !== void 0 ? viewColumns : this.getViewportColumns(table, left, right, movedColumns);
64
56
  log.debug2('Setting Viewport Top:', viewportTop, 'Bottom:', viewportBottom, 'Columns:', columns);
65
-
66
57
  if (this.subscription == null) {
67
58
  log.debug2('updateViewport creating new subscription');
68
59
  this.subscription = table.setViewport(viewportTop, viewportBottom, columns);
@@ -76,7 +67,6 @@ class TableViewportUpdater extends PureComponent {
76
67
  }
77
68
  }, UPDATE_THROTTLE));
78
69
  }
79
-
80
70
  componentDidMount() {
81
71
  var {
82
72
  top,
@@ -94,7 +84,6 @@ class TableViewportUpdater extends PureComponent {
94
84
  table.applyCustomColumns(customColumns);
95
85
  this.updateViewport(top, bottom, left, right, columns);
96
86
  }
97
-
98
87
  componentDidUpdate(prevProps) {
99
88
  var {
100
89
  top,
@@ -111,36 +100,28 @@ class TableViewportUpdater extends PureComponent {
111
100
  var isSortChanged = sorts !== prevProps.sorts;
112
101
  var isCustomColumnsChanged = customColumns !== prevProps.customColumns;
113
102
  var isTableChanged = table !== prevProps.table;
114
-
115
103
  if (isFilterChanged || isSortChanged || isCustomColumnsChanged || isTableChanged) {
116
104
  this.closeSubscription();
117
105
  }
118
-
119
106
  if (isFilterChanged || isTableChanged) {
120
107
  log.debug('update table filter', filters);
121
108
  table.applyFilter(filters);
122
109
  }
123
-
124
110
  if (isSortChanged || isTableChanged) {
125
111
  log.debug('update table sort', sorts);
126
112
  table.applySort(sorts);
127
113
  }
128
-
129
114
  if (isCustomColumnsChanged || isTableChanged) {
130
115
  log.debug('update table custom columns', customColumns);
131
116
  table.applyCustomColumns(customColumns);
132
117
  }
133
-
134
118
  this.updateViewport(top, bottom, left, right, columns);
135
119
  }
136
-
137
120
  componentWillUnmount() {
138
121
  this.closeSubscription();
139
122
  }
140
-
141
123
  closeSubscription() {
142
124
  log.debug2('closeSubscription', this.subscription);
143
-
144
125
  if (this.subscription) {
145
126
  this.subscription.close();
146
127
  this.subscription = undefined;
@@ -149,20 +130,14 @@ class TableViewportUpdater extends PureComponent {
149
130
  } = this.props;
150
131
  onSubscription();
151
132
  }
152
-
153
133
  this.updateViewport.cancel();
154
134
  }
155
-
156
135
  render() {
157
136
  return null;
158
137
  }
159
-
160
138
  }
161
-
162
139
  _defineProperty(TableViewportUpdater, "ROW_BUFFER_PAGES", 3);
163
-
164
140
  _defineProperty(TableViewportUpdater, "COLUMN_BUFFER_PAGES", 1);
165
-
166
141
  _defineProperty(TableViewportUpdater, "defaultProps", {
167
142
  top: 0,
168
143
  bottom: 0,
@@ -175,6 +150,5 @@ _defineProperty(TableViewportUpdater, "defaultProps", {
175
150
  customColumns: [],
176
151
  movedColumns: []
177
152
  });
178
-
179
153
  export default TableViewportUpdater;
180
154
  //# sourceMappingURL=TableViewportUpdater.js.map