@deephaven/iris-grid 1.22.1 → 1.22.2-alpha-pivot-builder.0730ba6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/README.md +296 -1
  2. package/dist/AdvancedFilterCreator.js +65 -102
  3. package/dist/AdvancedFilterCreator.js.map +1 -1
  4. package/dist/AdvancedFilterCreatorFilterItem.js +22 -37
  5. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  6. package/dist/AdvancedFilterCreatorSelectValue.js +37 -63
  7. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  8. package/dist/AdvancedFilterCreatorSelectValueList.js +29 -59
  9. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  10. package/dist/ColumnHeaderGroup.js +6 -8
  11. package/dist/ColumnHeaderGroup.js.map +1 -1
  12. package/dist/ColumnStatistics.js +22 -28
  13. package/dist/ColumnStatistics.js.map +1 -1
  14. package/dist/CommonTypes.d.ts +84 -2
  15. package/dist/CommonTypes.d.ts.map +1 -1
  16. package/dist/CommonTypes.js.map +1 -1
  17. package/dist/CrossColumnSearch.js +20 -29
  18. package/dist/CrossColumnSearch.js.map +1 -1
  19. package/dist/FilterInputField.css +3 -0
  20. package/dist/FilterInputField.css.map +1 -1
  21. package/dist/FilterInputField.js +19 -46
  22. package/dist/FilterInputField.js.map +1 -1
  23. package/dist/GotoRow.js +32 -29
  24. package/dist/GotoRow.js.map +1 -1
  25. package/dist/IrisGrid.css +3 -0
  26. package/dist/IrisGrid.css.map +1 -1
  27. package/dist/IrisGrid.d.ts +99 -4
  28. package/dist/IrisGrid.d.ts.map +1 -1
  29. package/dist/IrisGrid.js +732 -860
  30. package/dist/IrisGrid.js.map +1 -1
  31. package/dist/IrisGridBottomBar.js +10 -11
  32. package/dist/IrisGridBottomBar.js.map +1 -1
  33. package/dist/IrisGridCacheUtils.js +28 -8
  34. package/dist/IrisGridCacheUtils.js.map +1 -1
  35. package/dist/IrisGridCellOverflowModal.js +30 -13
  36. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  37. package/dist/IrisGridCellRendererUtils.js +6 -12
  38. package/dist/IrisGridCellRendererUtils.js.map +1 -1
  39. package/dist/IrisGridCopyHandler.js +28 -47
  40. package/dist/IrisGridCopyHandler.js.map +1 -1
  41. package/dist/IrisGridMetricCalculator.js +28 -51
  42. package/dist/IrisGridMetricCalculator.js.map +1 -1
  43. package/dist/IrisGridModel.d.ts +36 -1
  44. package/dist/IrisGridModel.d.ts.map +1 -1
  45. package/dist/IrisGridModel.js +42 -1
  46. package/dist/IrisGridModel.js.map +1 -1
  47. package/dist/IrisGridModelUpdater.js +32 -30
  48. package/dist/IrisGridModelUpdater.js.map +1 -1
  49. package/dist/IrisGridModelWidgetProps.d.ts +26 -0
  50. package/dist/IrisGridModelWidgetProps.d.ts.map +1 -0
  51. package/dist/IrisGridModelWidgetProps.js +2 -0
  52. package/dist/IrisGridModelWidgetProps.js.map +1 -0
  53. package/dist/IrisGridPartitionSelector.js +28 -62
  54. package/dist/IrisGridPartitionSelector.js.map +1 -1
  55. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  56. package/dist/IrisGridProxyModel.js +41 -14
  57. package/dist/IrisGridProxyModel.js.map +1 -1
  58. package/dist/IrisGridRenderer.js +162 -264
  59. package/dist/IrisGridRenderer.js.map +1 -1
  60. package/dist/IrisGridTableModel.js +23 -16
  61. package/dist/IrisGridTableModel.js.map +1 -1
  62. package/dist/IrisGridTableModelTemplate.js +49 -73
  63. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  64. package/dist/IrisGridTestUtils.js +19 -19
  65. package/dist/IrisGridTestUtils.js.map +1 -1
  66. package/dist/IrisGridTextCellRenderer.d.ts.map +1 -1
  67. package/dist/IrisGridTextCellRenderer.js +36 -53
  68. package/dist/IrisGridTextCellRenderer.js.map +1 -1
  69. package/dist/IrisGridTheme.js +9 -1
  70. package/dist/IrisGridTheme.js.map +1 -1
  71. package/dist/IrisGridThemeProvider.js +5 -7
  72. package/dist/IrisGridThemeProvider.js.map +1 -1
  73. package/dist/IrisGridTreeTableModel.js +5 -9
  74. package/dist/IrisGridTreeTableModel.js.map +1 -1
  75. package/dist/IrisGridUtils.d.ts +25 -2
  76. package/dist/IrisGridUtils.d.ts.map +1 -1
  77. package/dist/IrisGridUtils.js +297 -294
  78. package/dist/IrisGridUtils.js.map +1 -1
  79. package/dist/LazyIrisGrid.d.ts +1 -1
  80. package/dist/NoPastePermissionModal.js +3 -5
  81. package/dist/NoPastePermissionModal.js.map +1 -1
  82. package/dist/PendingDataBottomBar.js +27 -16
  83. package/dist/PendingDataBottomBar.js.map +1 -1
  84. package/dist/ToastBottomBar.js +16 -8
  85. package/dist/ToastBottomBar.js.map +1 -1
  86. package/dist/format-context-menus/CustomFormatAction.js +11 -24
  87. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  88. package/dist/index.d.ts +1 -0
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +1 -0
  91. package/dist/index.js.map +1 -1
  92. package/dist/key-handlers/CopyCellKeyHandler.js +3 -4
  93. package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
  94. package/dist/key-handlers/CopyKeyHandler.js +1 -3
  95. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  96. package/dist/key-handlers/ReverseKeyHandler.js +1 -3
  97. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  98. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +35 -59
  99. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  100. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +13 -29
  101. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  102. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +8 -17
  103. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  104. package/dist/mousehandlers/IrisGridContextMenuHandler.js +96 -199
  105. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  106. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -4
  107. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  108. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +16 -30
  109. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  110. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js +5 -13
  111. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
  112. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +20 -36
  113. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
  114. package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -5
  115. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  116. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +9 -18
  117. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
  118. package/dist/mousehandlers/PendingMouseHandler.js +10 -18
  119. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  120. package/dist/sidebar/AdvancedSettingsMenu.js +12 -5
  121. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  122. package/dist/sidebar/ChartBuilder.js +45 -102
  123. package/dist/sidebar/ChartBuilder.js.map +1 -1
  124. package/dist/sidebar/CustomColumnBuilder.js +35 -77
  125. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  126. package/dist/sidebar/CustomColumnInput.js +9 -11
  127. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  128. package/dist/sidebar/InputEditor.js +17 -24
  129. package/dist/sidebar/InputEditor.js.map +1 -1
  130. package/dist/sidebar/IrisGridTableOptionsWidgetProps.d.ts +22 -0
  131. package/dist/sidebar/IrisGridTableOptionsWidgetProps.d.ts.map +1 -0
  132. package/dist/sidebar/IrisGridTableOptionsWidgetProps.js +2 -0
  133. package/dist/sidebar/IrisGridTableOptionsWidgetProps.js.map +1 -0
  134. package/dist/sidebar/OptionType.d.ts +8 -0
  135. package/dist/sidebar/OptionType.d.ts.map +1 -1
  136. package/dist/sidebar/OptionType.js +7 -0
  137. package/dist/sidebar/OptionType.js.map +1 -1
  138. package/dist/sidebar/PluginTableOptionsErrorBoundary.d.ts +25 -0
  139. package/dist/sidebar/PluginTableOptionsErrorBoundary.d.ts.map +1 -0
  140. package/dist/sidebar/PluginTableOptionsErrorBoundary.js +49 -0
  141. package/dist/sidebar/PluginTableOptionsErrorBoundary.js.map +1 -0
  142. package/dist/sidebar/RollupRows.js +72 -113
  143. package/dist/sidebar/RollupRows.js.map +1 -1
  144. package/dist/sidebar/SelectDistinctBuilder.js +16 -33
  145. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  146. package/dist/sidebar/TableCsvExporter.js +50 -74
  147. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  148. package/dist/sidebar/TableSaver.js +18 -42
  149. package/dist/sidebar/TableSaver.js.map +1 -1
  150. package/dist/sidebar/aggregations/AggregationEdit.js +25 -18
  151. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  152. package/dist/sidebar/aggregations/AggregationUtils.js +1 -3
  153. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  154. package/dist/sidebar/aggregations/Aggregations.js +45 -34
  155. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  156. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +35 -24
  157. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  158. package/dist/sidebar/conditional-formatting/ConditionEditor.js +38 -21
  159. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  160. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +27 -11
  161. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  162. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +9 -11
  163. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  164. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +48 -57
  165. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  166. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +35 -24
  167. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  168. package/dist/sidebar/conditional-formatting/StyleEditor.js +26 -11
  169. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  170. package/dist/sidebar/index.d.ts +3 -2
  171. package/dist/sidebar/index.d.ts.map +1 -1
  172. package/dist/sidebar/index.js.map +1 -1
  173. package/dist/sidebar/visibility-ordering-builder/SearchItem.js +5 -7
  174. package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
  175. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css +3 -0
  176. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css.map +1 -1
  177. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +24 -18
  178. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
  179. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +166 -256
  180. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  181. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +4 -11
  182. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
  183. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +28 -14
  184. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
  185. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +16 -19
  186. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  187. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +1 -3
  188. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
  189. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +19 -29
  190. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  191. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +39 -52
  192. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
  193. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +18 -23
  194. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  195. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +19 -15
  196. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  197. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +16 -30
  198. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
  199. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +30 -39
  200. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  201. package/package.json +16 -16
package/dist/IrisGrid.js CHANGED
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
2
8
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
9
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -42,6 +48,7 @@ import IrisGridModel from "./IrisGridModel.js";
42
48
  import { isPartitionedGridModel } from "./PartitionedGridModel.js";
43
49
  import IrisGridPartitionSelector from "./IrisGridPartitionSelector.js";
44
50
  import SelectDistinctBuilder from "./sidebar/SelectDistinctBuilder.js";
51
+ import PluginTableOptionsErrorBoundary from "./sidebar/PluginTableOptionsErrorBoundary.js";
45
52
  import AdvancedSettingsType from "./sidebar/AdvancedSettingsType.js";
46
53
  import AdvancedSettingsMenu from "./sidebar/AdvancedSettingsMenu.js";
47
54
  import SHORTCUTS from "./IrisGridShortcuts.js";
@@ -49,7 +56,6 @@ import ConditionalFormattingMenu from "./sidebar/conditional-formatting/Conditio
49
56
  import ConditionalFormatEditor from "./sidebar/conditional-formatting/ConditionalFormatEditor.js";
50
57
  import IrisGridCellOverflowModal from "./IrisGridCellOverflowModal.js";
51
58
  import GotoRow from "./GotoRow.js";
52
- import AggregationOperation from "./sidebar/aggregations/AggregationOperation.js";
53
59
  import { IrisGridThemeContext } from "./IrisGridThemeProvider.js";
54
60
  import { isMissingPartitionError } from "./MissingPartitionError.js";
55
61
  import { NoPastePermissionModal } from "./NoPastePermissionModal.js";
@@ -67,19 +73,28 @@ var DEFAULT_AGGREGATION_SETTINGS = Object.freeze({
67
73
  });
68
74
  var UNFORMATTED_DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z";
69
75
  function isEmptyConfig(_ref) {
70
- var {
71
- advancedFilters,
72
- aggregationSettings,
73
- customColumns,
74
- quickFilters,
75
- reverse,
76
- rollupConfig,
77
- searchFilter,
78
- selectDistinctColumns,
79
- sorts
80
- } = _ref;
76
+ var advancedFilters = _ref.advancedFilters,
77
+ aggregationSettings = _ref.aggregationSettings,
78
+ customColumns = _ref.customColumns,
79
+ quickFilters = _ref.quickFilters,
80
+ reverse = _ref.reverse,
81
+ rollupConfig = _ref.rollupConfig,
82
+ searchFilter = _ref.searchFilter,
83
+ selectDistinctColumns = _ref.selectDistinctColumns,
84
+ sorts = _ref.sorts;
81
85
  return advancedFilters.size === 0 && aggregationSettings.aggregations.length === 0 && customColumns.length === 0 && quickFilters.size === 0 && !reverse && rollupConfig == null && searchFilter == null && selectDistinctColumns.length === 0 && sorts.length === 0;
82
86
  }
87
+
88
+ /**
89
+ * The subset of `IrisGridProps` that overrides how the grid presents its
90
+ * model: theme, canvas renderer, extra mouse handlers, and the metric
91
+ * calculator factory. Hosts that render `<IrisGrid>` on behalf of a plugin
92
+ * (e.g. `GridWidgetPlugin`) accept this as a single passthrough bag so they
93
+ * don't need to know each view concern by name, and plugins build it from
94
+ * their own hooks. Kept as a `Pick` (not `Partial<IrisGridProps>`) so it can
95
+ * never clobber structural props like `model` or `ref`.
96
+ */
97
+
83
98
  class IrisGrid extends Component {
84
99
  constructor(props) {
85
100
  var _model$layoutHints, _model$columns$0$name, _model$columns$;
@@ -117,6 +132,13 @@ class IrisGrid extends Component {
117
132
  _defineProperty(this, "tableUtils", void 0);
118
133
  _defineProperty(this, "keyHandlers", void 0);
119
134
  _defineProperty(this, "mouseHandlers", void 0);
135
+ /**
136
+ * The metric calculator factory most recently used to instantiate the
137
+ * calculator currently stored in state. Used by `maybeRebuildMetricCalculator`
138
+ * (called from `componentDidUpdate` when the `getMetricCalculator` prop
139
+ * changes) to detect when a different factory is supplied and rebuild.
140
+ */
141
+ _defineProperty(this, "lastMetricCalculatorFactory", void 0);
120
142
  _defineProperty(this, "slideTransitionRef", /*#__PURE__*/React.createRef());
121
143
  _defineProperty(this, "bottomTransitionRef", /*#__PURE__*/React.createRef());
122
144
  _defineProperty(this, "getAdvancedMenuOpenedHandler", memoize(column => this.handleAdvancedMenuOpened.bind(this, column), {
@@ -146,63 +168,72 @@ class IrisGrid extends Component {
146
168
  optionItems.push({
147
169
  type: OptionType.CHART_BUILDER,
148
170
  title: 'Chart Builder',
149
- icon: dhGraphLineUp
171
+ icon: dhGraphLineUp,
172
+ order: 100
150
173
  });
151
174
  }
152
175
  if (isOrganizeColumnsAvailable) {
153
176
  optionItems.push({
154
177
  type: OptionType.VISIBILITY_ORDERING_BUILDER,
155
178
  title: 'Organize Columns',
156
- icon: dhEye
179
+ icon: dhEye,
180
+ order: 200
157
181
  });
158
182
  }
159
183
  if (isFormatColumnsAvailable) {
160
184
  optionItems.push({
161
185
  type: OptionType.CONDITIONAL_FORMATTING,
162
186
  title: 'Conditional Formatting',
163
- icon: vsEdit
187
+ icon: vsEdit,
188
+ order: 300
164
189
  });
165
190
  }
166
191
  if (isCustomColumnsAvailable) {
167
192
  optionItems.push({
168
193
  type: OptionType.CUSTOM_COLUMN_BUILDER,
169
194
  title: 'Custom Columns',
170
- icon: vsSplitHorizontal
195
+ icon: vsSplitHorizontal,
196
+ order: 400
171
197
  });
172
198
  }
173
199
  if (isRollupAvailable) {
174
200
  optionItems.push({
175
201
  type: OptionType.ROLLUP_ROWS,
176
202
  title: 'Rollup Rows',
177
- icon: dhTriangleDownSquare
203
+ icon: dhTriangleDownSquare,
204
+ order: 500
178
205
  });
179
206
  }
180
207
  if (isTotalsAvailable) {
181
208
  optionItems.push({
182
209
  type: OptionType.AGGREGATIONS,
183
210
  title: 'Aggregate Columns',
184
- icon: vsSymbolOperator
211
+ icon: vsSymbolOperator,
212
+ order: 600
185
213
  });
186
214
  }
187
215
  if (isSelectDistinctAvailable) {
188
216
  optionItems.push({
189
217
  type: OptionType.SELECT_DISTINCT,
190
218
  title: 'Select Distinct Values',
191
- icon: vsRuby
219
+ icon: vsRuby,
220
+ order: 700
192
221
  });
193
222
  }
194
223
  if (isExportAvailable && canDownloadCsv) {
195
224
  optionItems.push({
196
225
  type: OptionType.TABLE_EXPORTER,
197
226
  title: 'Download CSV',
198
- icon: vsCloudDownload
227
+ icon: vsCloudDownload,
228
+ order: 800
199
229
  });
200
230
  }
201
231
  if (hasAdvancedSettings) {
202
232
  optionItems.push({
203
233
  type: OptionType.ADVANCED_SETTINGS,
204
234
  title: 'Advanced Settings',
205
- icon: vsTools
235
+ icon: vsTools,
236
+ order: 900
206
237
  });
207
238
  }
208
239
  optionItems.push({
@@ -211,7 +242,8 @@ class IrisGrid extends Component {
211
242
  subtitle: toggleFilterBarAction.shortcut.getDisplayText(),
212
243
  icon: vsFilter,
213
244
  isOn: isFilterBarShown,
214
- onChange: toggleFilterBarAction.action
245
+ onChange: toggleFilterBarAction.action,
246
+ order: 1000
215
247
  });
216
248
  if (canToggleSearch) {
217
249
  optionItems.push({
@@ -220,7 +252,8 @@ class IrisGrid extends Component {
220
252
  subtitle: toggleSearchBarAction.shortcut.getDisplayText(),
221
253
  icon: vsSearch,
222
254
  isOn: showSearchBar,
223
- onChange: toggleSearchBarAction.action
255
+ onChange: toggleSearchBarAction.action,
256
+ order: 1100
224
257
  });
225
258
  }
226
259
  optionItems.push({
@@ -229,48 +262,90 @@ class IrisGrid extends Component {
229
262
  subtitle: toggleGotoRowAction.shortcut.getDisplayText(),
230
263
  icon: vsReply,
231
264
  isOn: showGotoRow,
232
- onChange: toggleGotoRowAction.action
265
+ onChange: toggleGotoRowAction.action,
266
+ order: 1200
233
267
  });
234
268
  return Object.freeze(optionItems);
235
269
  }, {
236
270
  max: 1
237
271
  }));
272
+ /**
273
+ * Apply the `transformTableOptions` transform (if any) to the
274
+ * default option list.
275
+ * Catches exceptions so a buggy plugin can't break the grid, and collapses
276
+ * duplicate `type` entries (last writer wins) before sorting by `order`.
277
+ */
278
+ _defineProperty(this, "getCachedTransformedOptionItems", memoize((items, transformTableOptions) => {
279
+ if (transformTableOptions == null) {
280
+ return items;
281
+ }
282
+ var transformedItems;
283
+ try {
284
+ transformedItems = transformTableOptions(items);
285
+ } catch (err) {
286
+ log.error('transformTableOptions threw an error; falling back to defaults.', err);
287
+ return items;
288
+ }
289
+ // Collapse duplicate `type` entries before sorting. A duplicate `type`
290
+ // would otherwise collide on the `<Menu>` / `<Page>` React key and cause
291
+ // incorrect page reuse. Per the documented composition rule (see the
292
+ // package README), the last writer wins: a later entry — e.g. from a
293
+ // downstream middleware — overrides an earlier one with the same type.
294
+ // `Map.set` keeps the most recent value while preserving the original
295
+ // insertion slot, so an override stays in place unless it changes
296
+ // `order`.
297
+ var byType = new Map();
298
+ transformedItems.forEach(item => {
299
+ byType.set(String(item.type), item);
300
+ });
301
+ // Stably sort by ascending `order`. Items without an `order` sink to
302
+ // the end of the menu (default `Infinity`), while items with an `order`
303
+ // are positioned by their weight. Decorate-sort-undecorate guarantees
304
+ // stability regardless of the engine's sort implementation.
305
+ var sortedItems = [...byType.values()].map((item, index) => ({
306
+ item,
307
+ index
308
+ })).sort((a, b) => {
309
+ var _a$item$order, _b$item$order;
310
+ return ((_a$item$order = a.item.order) !== null && _a$item$order !== void 0 ? _a$item$order : Infinity) - ((_b$item$order = b.item.order) !== null && _b$item$order !== void 0 ? _b$item$order : Infinity) || a.index - b.index;
311
+ }).map(_ref2 => {
312
+ var item = _ref2.item;
313
+ return item;
314
+ });
315
+ return Object.freeze(sortedItems);
316
+ }, {
317
+ max: 1
318
+ }));
238
319
  _defineProperty(this, "getCachedHiddenColumns", memoize((metricCalculator, userColumnWidths) => IrisGridUtils.getHiddenColumns(new Map([...metricCalculator.initialColumnWidths, ...userColumnWidths])), {
239
320
  max: 1
240
321
  }));
322
+ _defineProperty(this, "getCachedHiddenColumnNames", memoize((hiddenColumns, columns) => Object.freeze(hiddenColumns.map(idx => {
323
+ var _columns$idx;
324
+ return (_columns$idx = columns[idx]) === null || _columns$idx === void 0 ? void 0 : _columns$idx.name;
325
+ }).filter(n => n != null)), {
326
+ max: 1
327
+ }));
328
+ _defineProperty(this, "getCachedViewState", memoize(hiddenColumns => Object.freeze({
329
+ hiddenColumns
330
+ }), {
331
+ max: 1
332
+ }));
241
333
  _defineProperty(this, "getAggregationMap", memoize((columns, aggregations) => {
242
334
  var aggregationMap = {};
243
- aggregations.forEach(_ref2 => {
244
- var {
245
- operation,
246
- selected,
247
- invert
248
- } = _ref2;
335
+ aggregations.forEach(_ref3 => {
336
+ var operation = _ref3.operation,
337
+ selected = _ref3.selected,
338
+ invert = _ref3.invert;
249
339
  aggregationMap[operation] = AggregationUtils.getOperationColumnNames(columns, operation, selected, invert);
250
340
  });
251
341
  return aggregationMap;
252
342
  }, {
253
343
  max: 1
254
344
  }));
255
- _defineProperty(this, "getOperationMap", memoize((columns, aggregations) => {
256
- var operationMap = {};
257
- aggregations.filter(a => !AggregationUtils.isRollupOperation(a.operation)).forEach(_ref3 => {
258
- var {
259
- operation,
260
- selected,
261
- invert
262
- } = _ref3;
263
- AggregationUtils.getOperationColumnNames(columns, operation, selected, invert).forEach(name => {
264
- var _operationMap$name;
265
- var newOperations = [...((_operationMap$name = operationMap[name]) !== null && _operationMap$name !== void 0 ? _operationMap$name : []), operation];
266
- operationMap[name] = Object.freeze(newOperations);
267
- });
268
- });
269
- return operationMap;
270
- }, {
345
+ _defineProperty(this, "getOperationMap", memoize((columns, aggregations) => IrisGridUtils.getOperationMap(columns, aggregations), {
271
346
  max: 1
272
347
  }));
273
- _defineProperty(this, "getOperationOrder", memoize(aggregations => aggregations.map(a => a.operation).filter(o => !AggregationUtils.isRollupOperation(o)), {
348
+ _defineProperty(this, "getOperationOrder", memoize(aggregations => IrisGridUtils.getOperationOrder(aggregations), {
274
349
  max: 1
275
350
  }));
276
351
  _defineProperty(this, "getCachedFormatColumns", memoize((dh, columns, rules) => getFormatColumns(dh, columns, rules), {
@@ -298,28 +373,7 @@ class IrisGrid extends Component {
298
373
  _defineProperty(this, "getModelRollupConfig", memoize((originalColumns, config, aggregationSettings) => IrisGridUtils.getModelRollupConfig(originalColumns, config, aggregationSettings), {
299
374
  max: 1
300
375
  }));
301
- _defineProperty(this, "getModelTotalsConfig", memoize((columns, config, aggregationSettings) => {
302
- var _config$columns$lengt, _config$columns;
303
- if (((_config$columns$lengt = config === null || config === void 0 || (_config$columns = config.columns) === null || _config$columns === void 0 ? void 0 : _config$columns.length) !== null && _config$columns$lengt !== void 0 ? _config$columns$lengt : 0) > 0) {
304
- // If we've got rollups, then aggregations are applied as part of that...
305
- return null;
306
- }
307
-
308
- // Filter out aggregations without any columns actually selected
309
- var aggregations = aggregationSettings.aggregations.filter(agg => agg.selected.length > 0 || agg.invert);
310
- if (aggregations.length === 0) {
311
- // We don't actually have any aggregations set, don't bother
312
- return null;
313
- }
314
- var operationMap = this.getOperationMap(columns, aggregations);
315
- var operationOrder = this.getOperationOrder(aggregations);
316
- return {
317
- operationMap,
318
- operationOrder,
319
- showOnTop: aggregationSettings.showOnTop,
320
- defaultOperation: AggregationOperation.SKIP
321
- };
322
- }, {
376
+ _defineProperty(this, "getModelTotalsConfig", memoize((columns, config, aggregationSettings) => IrisGridUtils.getModelTotalsConfig(columns, config, aggregationSettings), {
323
377
  max: 1
324
378
  }));
325
379
  _defineProperty(this, "getCachedStateOverride", memoize((model, theme, hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, rollupConfig, isMenuShown) => ({
@@ -349,9 +403,7 @@ class IrisGrid extends Component {
349
403
 
350
404
  // We only show the row footers when we have floating rows for aggregations
351
405
  var rowFooterWidth = floatingRowCount > 0 ? (_theme$rowFooterWidth = theme === null || theme === void 0 ? void 0 : theme.rowFooterWidth) !== null && _theme$rowFooterWidth !== void 0 ? _theme$rowFooterWidth : baseTheme.rowFooterWidth : 0;
352
- var {
353
- metricCalculator
354
- } = this.state;
406
+ var metricCalculator = this.state.metricCalculator;
355
407
  if (metricCalculator != null) {
356
408
  metricCalculator.resetCalculatedColumnWidths();
357
409
  metricCalculator.resetCalculatedRowHeights();
@@ -372,7 +424,7 @@ class IrisGrid extends Component {
372
424
  _defineProperty(this, "getCachedKeyHandlers", memoize(keyHandlers => [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order), {
373
425
  max: 1
374
426
  }));
375
- _defineProperty(this, "getCachedMouseHandlers", memoize(mouseHandlers => [...mouseHandlers, ...this.mouseHandlers].map(handler => typeof handler === 'function' ? handler(this) : handler), {
427
+ _defineProperty(this, "getCachedMouseHandlers", memoize(mouseHandlersProp => [...mouseHandlersProp, ...this.mouseHandlers].map(handler => typeof handler === 'function' ? handler(this) : handler), {
376
428
  max: 1
377
429
  }));
378
430
  _defineProperty(this, "getCachedRenderer", memoize(rendererProp => rendererProp !== null && rendererProp !== void 0 ? rendererProp : new IrisGridRenderer(), {
@@ -397,21 +449,15 @@ class IrisGrid extends Component {
397
449
  max: 1
398
450
  }));
399
451
  _defineProperty(this, "updateSearchFilter", debounce((searchValue, selectedSearchColumns, columns, invertSearchColumns) => {
400
- var {
401
- model
402
- } = this.props;
452
+ var model = this.props.model;
403
453
  var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, selectedSearchColumns, columns, invertSearchColumns);
404
454
  this.setState({
405
455
  searchFilter
406
456
  });
407
457
  }, SET_FILTER_DEBOUNCE));
408
458
  _defineProperty(this, "showViewportLoading", throttle(() => {
409
- var {
410
- model
411
- } = this.props;
412
- var {
413
- loadingSpinnerShown
414
- } = this.state;
459
+ var model = this.props.model;
460
+ var loadingSpinnerShown = this.state.loadingSpinnerShown;
415
461
  if (model.isViewportPending && !loadingSpinnerShown) {
416
462
  // We only want to show the viewport loading if the viewport is still loading
417
463
  // and we're not already showing a loader for something else
@@ -431,9 +477,7 @@ class IrisGrid extends Component {
431
477
  });
432
478
  }, SET_CONDITIONAL_FORMAT_DEBOUNCE));
433
479
  _defineProperty(this, "handleDownloadProgressUpdate", throttle((tableDownloadProgress, tableDownloadEstimatedTime) => {
434
- var {
435
- tableDownloadStatus
436
- } = this.state;
480
+ var tableDownloadStatus = this.state.tableDownloadStatus;
437
481
  if (tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING) {
438
482
  this.setState({
439
483
  tableDownloadProgress,
@@ -473,12 +517,8 @@ class IrisGrid extends Component {
473
517
  if (expandCellTooltipProps == null) {
474
518
  return null;
475
519
  }
476
- var {
477
- expandTooltipDisplayValue
478
- } = this.state;
479
- var {
480
- model
481
- } = this.props;
520
+ var expandTooltipDisplayValue = this.state.expandTooltipDisplayValue;
521
+ var model = this.props.model;
482
522
  var isExpandAllAvailable = isExpandableGridModel(model) && model.isExpandAllAvailable;
483
523
  var wrapperStyle = _objectSpread(_objectSpread({
484
524
  position: 'absolute'
@@ -510,9 +550,7 @@ class IrisGrid extends Component {
510
550
  if (hoverTooltipProps == null) {
511
551
  return null;
512
552
  }
513
- var {
514
- hoverDisplayValue
515
- } = this.state;
553
+ var hoverDisplayValue = this.state.hoverDisplayValue;
516
554
  var wrapperStyle = _objectSpread(_objectSpread({
517
555
  position: 'absolute'
518
556
  }, hoverTooltipProps), {}, {
@@ -571,11 +609,14 @@ class IrisGrid extends Component {
571
609
  this.handleMenuSelect = this.handleMenuSelect.bind(this);
572
610
  this.handleMenuBack = this.handleMenuBack.bind(this);
573
611
  this.handleRequestFailed = this.handleRequestFailed.bind(this);
612
+ this.handlePending = this.handlePending.bind(this);
613
+ this.handlePendingCleared = this.handlePendingCleared.bind(this);
574
614
  this.handleSelectionChanged = this.handleSelectionChanged.bind(this);
575
615
  this.handleMovedColumnsChanged = this.handleMovedColumnsChanged.bind(this);
576
616
  this.handleHeaderGroupsChanged = this.handleHeaderGroupsChanged.bind(this);
577
617
  this.handleUpdate = this.handleUpdate.bind(this);
578
618
  this.handleTableChanged = this.handleTableChanged.bind(this);
619
+ this.handleSchemaChanged = this.handleSchemaChanged.bind(this);
579
620
  this.handleTooltipRef = this.handleTooltipRef.bind(this);
580
621
  this.handleViewChanged = this.handleViewChanged.bind(this);
581
622
  this.handleFormatSelection = this.handleFormatSelection.bind(this);
@@ -648,9 +689,7 @@ class IrisGrid extends Component {
648
689
  };
649
690
  this.discardAction = {
650
691
  action: () => {
651
- var {
652
- model
653
- } = this.props;
692
+ var model = this.props.model;
654
693
  if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0) {
655
694
  this.discardPending().catch(log.error);
656
695
  }
@@ -659,9 +698,7 @@ class IrisGrid extends Component {
659
698
  };
660
699
  this.commitAction = {
661
700
  action: () => {
662
- var {
663
- model
664
- } = this.props;
701
+ var model = this.props.model;
665
702
  if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0 && model.pendingDataErrors.size === 0) {
666
703
  this.commitPending().catch(log.error);
667
704
  }
@@ -669,40 +706,36 @@ class IrisGrid extends Component {
669
706
  shortcut: SHORTCUTS.INPUT_TABLE.COMMIT
670
707
  };
671
708
  this.contextActions = [this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, this.discardAction, this.commitAction];
672
- var {
673
- aggregationSettings: _aggregationSettings,
674
- conditionalFormats,
675
- customColumnFormatMap,
676
- columnAlignmentMap,
677
- isFilterBarShown: _isFilterBarShown,
678
- isSelectingPartition,
679
- partitions,
680
- partitionConfig,
681
- model: _model,
682
- movedColumns: movedColumnsProp,
683
- movedRows: movedRowsProp,
684
- rollupConfig: _rollupConfig,
685
- userColumnWidths: _userColumnWidths,
686
- userColumnWidthsByName,
687
- userRowHeights,
688
- showSearchBar: _showSearchBar,
689
- searchValue: _searchValue,
690
- selectedSearchColumns: _selectedSearchColumns,
691
- invertSearchColumns: _invertSearchColumns,
692
- advancedFilters: _advancedFilters,
693
- quickFilters: _quickFilters,
694
- selectDistinctColumns,
695
- pendingDataMap,
696
- canCopy,
697
- frozenColumns,
698
- columnHeaderGroups,
699
- getMetricCalculator
700
- } = props;
701
- var {
702
- dh: _dh
703
- } = _model;
709
+ var _aggregationSettings = props.aggregationSettings,
710
+ conditionalFormats = props.conditionalFormats,
711
+ customColumnFormatMap = props.customColumnFormatMap,
712
+ columnAlignmentMap = props.columnAlignmentMap,
713
+ _isFilterBarShown = props.isFilterBarShown,
714
+ isSelectingPartition = props.isSelectingPartition,
715
+ partitions = props.partitions,
716
+ partitionConfig = props.partitionConfig,
717
+ _model = props.model,
718
+ movedColumnsProp = props.movedColumns,
719
+ movedRowsProp = props.movedRows,
720
+ _rollupConfig = props.rollupConfig,
721
+ _userColumnWidths = props.userColumnWidths,
722
+ userColumnWidthsByName = props.userColumnWidthsByName,
723
+ userRowHeights = props.userRowHeights,
724
+ _showSearchBar = props.showSearchBar,
725
+ _searchValue = props.searchValue,
726
+ _selectedSearchColumns = props.selectedSearchColumns,
727
+ _invertSearchColumns = props.invertSearchColumns,
728
+ _advancedFilters = props.advancedFilters,
729
+ _quickFilters = props.quickFilters,
730
+ selectDistinctColumns = props.selectDistinctColumns,
731
+ pendingDataMap = props.pendingDataMap,
732
+ canCopy = props.canCopy,
733
+ frozenColumns = props.frozenColumns,
734
+ columnHeaderGroups = props.columnHeaderGroups,
735
+ getMetricCalculator = props.getMetricCalculator;
736
+ var _dh = _model.dh;
704
737
  var _keyHandlers = [new CopyCellKeyHandler(this), new ReverseKeyHandler(this), new ClearFilterKeyHandler(this)];
705
- var _mouseHandlers = [new IrisGridCellOverflowMouseHandler(this), new IrisGridRowTreeMouseHandler(this), new IrisGridTokenMouseHandler(this), new IrisGridColumnSelectMouseHandler(this), new IrisGridColumnTooltipMouseHandler(this), new IrisGridSortMouseHandler(this), new IrisGridFilterMouseHandler(this), new IrisGridContextMenuHandler(this, _dh), new IrisGridDataSelectMouseHandler(this), new PendingMouseHandler(this), new IrisGridPartitionedTableMouseHandler(this), ...(canCopy ? [new IrisGridCopyCellMouseHandler(this)] : [])];
738
+ var mouseHandlers = [new IrisGridCellOverflowMouseHandler(this), new IrisGridRowTreeMouseHandler(this), new IrisGridTokenMouseHandler(this), new IrisGridColumnSelectMouseHandler(this), new IrisGridColumnTooltipMouseHandler(this), new IrisGridSortMouseHandler(this), new IrisGridFilterMouseHandler(this), new IrisGridContextMenuHandler(this, _dh), new IrisGridDataSelectMouseHandler(this), new PendingMouseHandler(this), new IrisGridPartitionedTableMouseHandler(this), ...(canCopy ? [new IrisGridCopyCellMouseHandler(this)] : [])];
706
739
  if (canCopy) {
707
740
  _keyHandlers.push(new CopyKeyHandler(this));
708
741
  }
@@ -715,10 +748,15 @@ class IrisGrid extends Component {
715
748
  movedColumns: _movedColumns,
716
749
  initialColumnWidths: new Map(_model === null || _model === void 0 || (_model$layoutHints = _model.layoutHints) === null || _model$layoutHints === void 0 || (_model$layoutHints = _model$layoutHints.hiddenColumns) === null || _model$layoutHints === void 0 ? void 0 : _model$layoutHints.map(name => [_model.getColumnIndexByName(name), 0]))
717
750
  });
751
+ // Remember the factory we used so `maybeRebuildMetricCalculator` (called
752
+ // from `componentDidUpdate` when the `getMetricCalculator` prop changes)
753
+ // can detect a model-driven swap, e.g. pivot-builder's proxy swapping its
754
+ // inner model.
755
+ this.lastMetricCalculatorFactory = getMetricCalculator;
718
756
  var searchColumns = _selectedSearchColumns !== null && _selectedSearchColumns !== void 0 ? _selectedSearchColumns : [];
719
757
  var _searchFilter = CrossColumnSearch.createSearchFilter(_dh, _searchValue, searchColumns, _model.columns, _invertSearchColumns);
720
758
  this.tableUtils = new TableUtils(_dh);
721
- this.mouseHandlers = _mouseHandlers;
759
+ this.mouseHandlers = mouseHandlers;
722
760
  this.keyHandlers = _keyHandlers;
723
761
  this.state = {
724
762
  isFilterBarShown: _isFilterBarShown,
@@ -810,31 +848,38 @@ class IrisGrid extends Component {
810
848
  };
811
849
  }
812
850
  componentDidMount() {
813
- var {
814
- model
815
- } = this.props;
851
+ var model = this.props.model;
816
852
  this.initState();
817
853
  this.startListening(model);
818
854
  }
819
855
  componentDidUpdate(prevProps, prevState) {
820
- var {
821
- inputFilters,
822
- isSelectingColumn,
823
- settings,
824
- model,
825
- customFilters,
826
- sorts
827
- } = this.props;
856
+ var _this$props = this.props,
857
+ inputFilters = _this$props.inputFilters,
858
+ isSelectingColumn = _this$props.isSelectingColumn,
859
+ settings = _this$props.settings,
860
+ model = _this$props.model,
861
+ customFilters = _this$props.customFilters,
862
+ sorts = _this$props.sorts,
863
+ getMetricCalculator = _this$props.getMetricCalculator;
828
864
  if (model !== prevProps.model) {
829
865
  this.stopListening(prevProps.model);
830
866
  this.startListening(model);
831
867
  }
868
+
869
+ // The renderer and mouse handlers flow through memoized getters in
870
+ // render(), so a `renderer` / `mouseHandlers` prop change naturally
871
+ // propagates on the next render. The metric calculator, however, lives in
872
+ // component state, so mirror that path when the `getMetricCalculator` prop
873
+ // changes (e.g. the pivot-builder middleware swapping the pivot factory in
874
+ // or out) so the calculator stays in sync. Moved columns are not touched
875
+ // here — a model swap resets them via `handleSchemaChanged`.
876
+ if (getMetricCalculator !== prevProps.getMetricCalculator) {
877
+ this.maybeRebuildMetricCalculator();
878
+ }
832
879
  var changedInputFilters = inputFilters !== prevProps.inputFilters ? inputFilters.filter(inputFilter => !prevProps.inputFilters.includes(inputFilter)) : [];
833
880
  if (changedInputFilters.length > 0) {
834
881
  var _advancedSettings$get;
835
- var {
836
- advancedSettings
837
- } = this.props;
882
+ var advancedSettings = this.props.advancedSettings;
838
883
  var replaceExistingFilters = (_advancedSettings$get = advancedSettings.get(AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get !== void 0 ? _advancedSettings$get : false;
839
884
  if (replaceExistingFilters) {
840
885
  this.clearGridInputField();
@@ -861,10 +906,8 @@ class IrisGrid extends Component {
861
906
  if (sorts !== prevProps.sorts) {
862
907
  this.updateSorts(sorts);
863
908
  }
864
- var {
865
- loadingScrimStartTime,
866
- loadingScrimFinishTime
867
- } = this;
909
+ var loadingScrimStartTime = this.loadingScrimStartTime,
910
+ loadingScrimFinishTime = this.loadingScrimFinishTime;
868
911
  if (loadingScrimStartTime != null && loadingScrimFinishTime != null) {
869
912
  window.requestAnimationFrame(() => {
870
913
  var now = Date.now();
@@ -886,9 +929,7 @@ class IrisGrid extends Component {
886
929
  });
887
930
  });
888
931
  }
889
- var {
890
- openOptions
891
- } = this.state;
932
+ var openOptions = this.state.openOptions;
892
933
  if (openOptions !== prevState.openOptions) {
893
934
  var isAggEditType = option => option.type === OptionType.AGGREGATION_EDIT;
894
935
  if (!openOptions.some(isAggEditType) && prevState.openOptions.some(isAggEditType)) {
@@ -898,9 +939,7 @@ class IrisGrid extends Component {
898
939
  this.sendStateChange();
899
940
  }
900
941
  componentWillUnmount() {
901
- var {
902
- model
903
- } = this.props;
942
+ var model = this.props.model;
904
943
  this.stopListening(model);
905
944
  this.pending.cancel();
906
945
  this.updateSearchFilter.cancel();
@@ -918,9 +957,7 @@ class IrisGrid extends Component {
918
957
  return (_this$grid$canvasWrap = (_this$grid = this.grid) === null || _this$grid === void 0 ? void 0 : _this$grid.canvasWrapper.current) !== null && _this$grid$canvasWrap !== void 0 ? _this$grid$canvasWrap : null;
919
958
  }
920
959
  getKeyHandlers() {
921
- var {
922
- keyHandlers
923
- } = this.props;
960
+ var keyHandlers = this.props.keyHandlers;
924
961
  return this.getCachedKeyHandlers(keyHandlers);
925
962
  }
926
963
  getMetricState() {
@@ -929,52 +966,40 @@ class IrisGrid extends Component {
929
966
  if (gridMetricState == null) {
930
967
  return undefined;
931
968
  }
932
- var {
933
- advancedFilters,
934
- hoverSelectColumn,
935
- isFilterBarShown,
936
- isMenuShown,
937
- loadingScrimProgress,
938
- quickFilters,
939
- sorts,
940
- reverse,
941
- rollupConfig
942
- } = this.state;
943
- var {
944
- model,
945
- isSelectingColumn
946
- } = this.props;
969
+ var _this$state = this.state,
970
+ advancedFilters = _this$state.advancedFilters,
971
+ hoverSelectColumn = _this$state.hoverSelectColumn,
972
+ isFilterBarShown = _this$state.isFilterBarShown,
973
+ isMenuShown = _this$state.isMenuShown,
974
+ loadingScrimProgress = _this$state.loadingScrimProgress,
975
+ quickFilters = _this$state.quickFilters,
976
+ sorts = _this$state.sorts,
977
+ reverse = _this$state.reverse,
978
+ rollupConfig = _this$state.rollupConfig;
979
+ var _this$props2 = this.props,
980
+ model = _this$props2.model,
981
+ isSelectingColumn = _this$props2.isSelectingColumn;
947
982
  return _objectSpread(_objectSpread({}, gridMetricState), this.getCachedStateOverride(model, this.getTheme(), hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, rollupConfig, isMenuShown));
948
983
  }
949
984
  get renderer() {
950
- var {
951
- renderer
952
- } = this.props;
985
+ var renderer = this.props.renderer;
953
986
  return this.getCachedRenderer(renderer);
954
987
  }
955
988
  getMouseHandlers() {
956
- var {
957
- mouseHandlers
958
- } = this.props;
989
+ var mouseHandlers = this.props.mouseHandlers;
959
990
  return this.getCachedMouseHandlers(mouseHandlers);
960
991
  }
961
992
  getValueForCell(columnIndex, rowIndex) {
962
993
  var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
963
- var {
964
- model
965
- } = this.props;
966
- var {
967
- dh
968
- } = model;
994
+ var model = this.props.model;
995
+ var dh = model.dh;
969
996
  var modelColumn = this.getModelColumn(columnIndex);
970
997
  var modelRow = this.getModelRow(rowIndex);
971
998
  if (rawValue && modelColumn != null && modelRow != null) {
972
999
  var value = model.valueForCell(modelColumn, modelRow);
973
1000
  if (TableUtils.isDateType(model.columns[modelColumn].type)) {
974
1001
  // The returned value is just a long value, we should return the value formatted as a full date string
975
- var {
976
- formatter
977
- } = model;
1002
+ var formatter = model.formatter;
978
1003
  return dh.i18n.DateTimeFormat.format(UNFORMATTED_DATE_PATTERN, value, dh.i18n.TimeZone.getTimeZone(formatter.timeZone));
979
1004
  }
980
1005
  return value;
@@ -994,13 +1019,9 @@ class IrisGrid extends Component {
994
1019
  * @returns Model column index, or null if not found
995
1020
  */
996
1021
  getModelColumn(columnIndex) {
997
- var {
998
- metrics
999
- } = this.state;
1022
+ var metrics = this.state.metrics;
1000
1023
  assertNotNull(metrics);
1001
- var {
1002
- modelColumns
1003
- } = metrics;
1024
+ var modelColumns = metrics.modelColumns;
1004
1025
  if (modelColumns == null) {
1005
1026
  return null;
1006
1027
  }
@@ -1011,13 +1032,9 @@ class IrisGrid extends Component {
1011
1032
  return columnIndex != null ? modelColumns.get(columnIndex) : null;
1012
1033
  }
1013
1034
  getModelRow(rowIndex) {
1014
- var {
1015
- metrics
1016
- } = this.state;
1035
+ var metrics = this.state.metrics;
1017
1036
  assertNotNull(metrics);
1018
- var {
1019
- modelRows
1020
- } = metrics;
1037
+ var modelRows = metrics.modelRows;
1021
1038
  if (modelRows == null) {
1022
1039
  return null;
1023
1040
  }
@@ -1025,21 +1042,17 @@ class IrisGrid extends Component {
1025
1042
  }
1026
1043
  getTheme() {
1027
1044
  var _ref4;
1028
- var {
1029
- model,
1030
- theme,
1031
- density
1032
- } = this.props;
1033
- var {
1034
- theme: contextTheme,
1035
- density: contextDensity
1036
- } = this.context;
1045
+ var _this$props3 = this.props,
1046
+ model = _this$props3.model,
1047
+ theme = _this$props3.theme,
1048
+ density = _this$props3.density;
1049
+ var _this$context = this.context,
1050
+ contextTheme = _this$context.theme,
1051
+ contextDensity = _this$context.density;
1037
1052
  return this.getCachedTheme(contextTheme, theme, (_ref4 = isEditableGridModel(model) && model.isEditable) !== null && _ref4 !== void 0 ? _ref4 : false, model.floatingTopRowCount + model.floatingBottomRowCount, density !== null && density !== void 0 ? density : contextDensity);
1038
1053
  }
1039
1054
  getVisibleColumn(modelIndex) {
1040
- var {
1041
- movedColumns
1042
- } = this.state;
1055
+ var movedColumns = this.state.movedColumns;
1043
1056
  return GridUtils.getVisibleIndex(modelIndex, movedColumns);
1044
1057
  }
1045
1058
  makeQuickFilter(column, text, timeZone) {
@@ -1060,27 +1073,20 @@ class IrisGrid extends Component {
1060
1073
  */
1061
1074
  applyInputFilters(inputFilters) {
1062
1075
  var replaceExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1063
- var {
1064
- model
1065
- } = this.props;
1066
- var {
1067
- advancedFilters,
1068
- quickFilters
1069
- } = this.state;
1076
+ var model = this.props.model;
1077
+ var _this$state2 = this.state,
1078
+ advancedFilters = _this$state2.advancedFilters,
1079
+ quickFilters = _this$state2.quickFilters;
1070
1080
  var newAdvancedFilters = replaceExisting ? new Map() : new Map(advancedFilters);
1071
1081
  var newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);
1072
1082
  var isChanged = replaceExisting && advancedFilters.size > 0;
1073
1083
  inputFilters.forEach(_ref5 => {
1074
- var {
1075
- name,
1076
- type,
1077
- value
1078
- } = _ref5;
1084
+ var name = _ref5.name,
1085
+ type = _ref5.type,
1086
+ value = _ref5.value;
1079
1087
  var modelIndex = model.columns.findIndex(_ref6 => {
1080
- var {
1081
- name: columnName,
1082
- type: columnType
1083
- } = _ref6;
1088
+ var columnName = _ref6.name,
1089
+ columnType = _ref6.type;
1084
1090
  return columnName === name && columnType === type;
1085
1091
  });
1086
1092
  if (modelIndex >= 0) {
@@ -1107,19 +1113,13 @@ class IrisGrid extends Component {
1107
1113
  * @returns True if the filters have changed because this quick filter was applied
1108
1114
  */
1109
1115
  applyQuickFilter(modelIndex, value, quickFilters) {
1110
- var {
1111
- model
1112
- } = this.props;
1113
- var {
1114
- formatter
1115
- } = model;
1116
+ var model = this.props.model;
1117
+ var formatter = model.formatter;
1116
1118
  var column = model.columns[modelIndex];
1117
1119
  if (value != null && "".concat(value).trim().length > 0) {
1118
1120
  var quickFilter = quickFilters.get(modelIndex);
1119
1121
  if (quickFilter != null) {
1120
- var {
1121
- text
1122
- } = quickFilter;
1122
+ var text = quickFilter.text;
1123
1123
  if (text === value) {
1124
1124
  log.debug2('Ignoring change to existing filter');
1125
1125
  return false;
@@ -1144,9 +1144,7 @@ class IrisGrid extends Component {
1144
1144
  resetRanges: true
1145
1145
  });
1146
1146
  this.setState(_ref7 => {
1147
- var {
1148
- advancedFilters
1149
- } = _ref7;
1147
+ var advancedFilters = _ref7.advancedFilters;
1150
1148
  var newAdvancedFilters = new Map(advancedFilters);
1151
1149
  if (filter == null) {
1152
1150
  newAdvancedFilters.delete(modelIndex);
@@ -1174,9 +1172,7 @@ class IrisGrid extends Component {
1174
1172
  resetRanges: true
1175
1173
  });
1176
1174
  this.setState(_ref8 => {
1177
- var {
1178
- quickFilters
1179
- } = _ref8;
1175
+ var quickFilters = _ref8.quickFilters;
1180
1176
  var newQuickFilters = new Map(quickFilters);
1181
1177
  newQuickFilters.set(modelIndex, {
1182
1178
  filter,
@@ -1195,21 +1191,15 @@ class IrisGrid extends Component {
1195
1191
  setFilterMap(filterMap) {
1196
1192
  var _advancedSettings$get2;
1197
1193
  log.debug('setFilterMap', filterMap);
1198
- var {
1199
- advancedSettings
1200
- } = this.props;
1194
+ var advancedSettings = this.props.advancedSettings;
1201
1195
  var clearFiltersOnLinkerFilterUpdate = (_advancedSettings$get2 = advancedSettings.get(AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get2 !== void 0 ? _advancedSettings$get2 : false;
1202
1196
  if (clearFiltersOnLinkerFilterUpdate) {
1203
1197
  this.clearAllFilters();
1204
1198
  }
1205
- var {
1206
- model
1207
- } = this.props;
1199
+ var model = this.props.model;
1208
1200
  filterMap.forEach((_ref9, columnName) => {
1209
- var {
1210
- columnType,
1211
- filterList
1212
- } = _ref9;
1201
+ var columnType = _ref9.columnType,
1202
+ filterList = _ref9.filterList;
1213
1203
  var column = model.columns.find(c => c.name === columnName && c.type === columnType);
1214
1204
  if (column == null) {
1215
1205
  return;
@@ -1220,9 +1210,7 @@ class IrisGrid extends Component {
1220
1210
  if (combinedText.length === 0) {
1221
1211
  this.removeQuickFilter(columnIndex);
1222
1212
  } else {
1223
- var {
1224
- formatter
1225
- } = model;
1213
+ var formatter = model.formatter;
1226
1214
  this.setQuickFilter(columnIndex, this.makeQuickFilter(column, combinedText, formatter.timeZone), "".concat(combinedText));
1227
1215
  }
1228
1216
  });
@@ -1233,10 +1221,8 @@ class IrisGrid extends Component {
1233
1221
  });
1234
1222
  var clearRange = Array.isArray(modelRange) ? modelRange : [modelRange, modelRange];
1235
1223
  this.setState(_ref0 => {
1236
- var {
1237
- advancedFilters,
1238
- quickFilters
1239
- } = _ref0;
1224
+ var advancedFilters = _ref0.advancedFilters,
1225
+ quickFilters = _ref0.quickFilters;
1240
1226
  var newAdvancedFilters = advancedFilters ? new Map(advancedFilters) : new Map();
1241
1227
  var newQuickFilters = quickFilters ? new Map(quickFilters) : new Map();
1242
1228
  newAdvancedFilters.forEach((_, column) => {
@@ -1260,9 +1246,7 @@ class IrisGrid extends Component {
1260
1246
  resetRanges: true
1261
1247
  });
1262
1248
  this.setState(_ref1 => {
1263
- var {
1264
- quickFilters
1265
- } = _ref1;
1249
+ var quickFilters = _ref1.quickFilters;
1266
1250
  var newQuickFilters = new Map(quickFilters);
1267
1251
  newQuickFilters.delete(modelColumn);
1268
1252
  return {
@@ -1272,11 +1256,10 @@ class IrisGrid extends Component {
1272
1256
  }
1273
1257
  clearAllFilters() {
1274
1258
  log.debug('Clearing all filters');
1275
- var {
1276
- advancedFilters,
1277
- quickFilters,
1278
- searchFilter
1279
- } = this.state;
1259
+ var _this$state3 = this.state,
1260
+ advancedFilters = _this$state3.advancedFilters,
1261
+ quickFilters = _this$state3.quickFilters,
1262
+ searchFilter = _this$state3.searchFilter;
1280
1263
  if (quickFilters.size === 0 && advancedFilters.size === 0 && searchFilter === null) {
1281
1264
  return;
1282
1265
  }
@@ -1316,28 +1299,21 @@ class IrisGrid extends Component {
1316
1299
  * Rebuilds all the current filters. Necessary if something like the time zone has changed.
1317
1300
  */
1318
1301
  rebuildFilters() {
1319
- var {
1320
- model
1321
- } = this.props;
1322
- var {
1323
- advancedFilters,
1324
- quickFilters
1325
- } = this.state;
1302
+ var model = this.props.model;
1303
+ var _this$state4 = this.state,
1304
+ advancedFilters = _this$state4.advancedFilters,
1305
+ quickFilters = _this$state4.quickFilters;
1326
1306
  if (advancedFilters.size === 0 && quickFilters.size === 0) {
1327
1307
  log.debug('No filters to rebuild');
1328
1308
  return;
1329
1309
  }
1330
- var {
1331
- columns,
1332
- formatter
1333
- } = model;
1310
+ var columns = model.columns,
1311
+ formatter = model.formatter;
1334
1312
  log.debug('Rebuilding filters');
1335
1313
  var newAdvancedFilters = new Map();
1336
1314
  var newQuickFilters = new Map();
1337
1315
  advancedFilters.forEach((value, key) => {
1338
- var {
1339
- options
1340
- } = value;
1316
+ var options = value.options;
1341
1317
  var column = columns[key];
1342
1318
  var filter = this.tableUtils.makeAdvancedFilter(column, options, formatter.timeZone);
1343
1319
  newAdvancedFilters.set(key, {
@@ -1346,9 +1322,7 @@ class IrisGrid extends Component {
1346
1322
  });
1347
1323
  });
1348
1324
  quickFilters.forEach((value, key) => {
1349
- var {
1350
- text
1351
- } = value;
1325
+ var text = value.text;
1352
1326
  var column = columns[key];
1353
1327
  newQuickFilters.set(key, {
1354
1328
  text,
@@ -1364,10 +1338,8 @@ class IrisGrid extends Component {
1364
1338
  });
1365
1339
  }
1366
1340
  setFilters(_ref10) {
1367
- var {
1368
- quickFilters,
1369
- advancedFilters
1370
- } = _ref10;
1341
+ var quickFilters = _ref10.quickFilters,
1342
+ advancedFilters = _ref10.advancedFilters;
1371
1343
  this.setState({
1372
1344
  quickFilters,
1373
1345
  advancedFilters
@@ -1410,12 +1382,8 @@ class IrisGrid extends Component {
1410
1382
  updateFormatter(updatedFormats) {
1411
1383
  var _this$globalColumnFor;
1412
1384
  var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
1413
- var {
1414
- customColumnFormatMap
1415
- } = this.state;
1416
- var {
1417
- model
1418
- } = this.props;
1385
+ var customColumnFormatMap = this.state.customColumnFormatMap;
1386
+ var model = this.props.model;
1419
1387
  var update = _objectSpread({
1420
1388
  customColumnFormatMap
1421
1389
  }, updatedFormats);
@@ -1431,15 +1399,11 @@ class IrisGrid extends Component {
1431
1399
  });
1432
1400
  }
1433
1401
  initFormatter() {
1434
- var {
1435
- settings
1436
- } = this.props;
1402
+ var settings = this.props.settings;
1437
1403
  this.updateFormatterSettings(settings);
1438
1404
  }
1439
1405
  initState() {
1440
- var {
1441
- model
1442
- } = this.props;
1406
+ var model = this.props.model;
1443
1407
  try {
1444
1408
  if (isPartitionedGridModel(model) && model.isPartitionRequired) {
1445
1409
  this.loadPartitionsTable(model);
@@ -1451,18 +1415,17 @@ class IrisGrid extends Component {
1451
1415
  }
1452
1416
  }
1453
1417
  loadTableState() {
1454
- var {
1455
- applyInputFiltersOnInit,
1456
- inputFilters,
1457
- sorts,
1458
- model,
1459
- reverse,
1460
- reverseType,
1461
- customColumns,
1462
- searchValue,
1463
- selectedSearchColumns,
1464
- invertSearchColumns
1465
- } = this.props;
1418
+ var _this$props4 = this.props,
1419
+ applyInputFiltersOnInit = _this$props4.applyInputFiltersOnInit,
1420
+ inputFilters = _this$props4.inputFilters,
1421
+ sorts = _this$props4.sorts,
1422
+ model = _this$props4.model,
1423
+ reverse = _this$props4.reverse,
1424
+ reverseType = _this$props4.reverseType,
1425
+ customColumns = _this$props4.customColumns,
1426
+ searchValue = _this$props4.searchValue,
1427
+ selectedSearchColumns = _this$props4.selectedSearchColumns,
1428
+ invertSearchColumns = _this$props4.invertSearchColumns;
1466
1429
  var searchColumns = selectedSearchColumns !== null && selectedSearchColumns !== void 0 ? selectedSearchColumns : [];
1467
1430
  var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, searchColumns, model.columns, invertSearchColumns);
1468
1431
  if (applyInputFiltersOnInit) {
@@ -1484,9 +1447,7 @@ class IrisGrid extends Component {
1484
1447
  var _this = this;
1485
1448
  return _asyncToGenerator(function* () {
1486
1449
  try {
1487
- var {
1488
- partitionConfig
1489
- } = _this.state;
1450
+ var partitionConfig = _this.state.partitionConfig;
1490
1451
  if (!partitionConfig) {
1491
1452
  _this.startLoading('Loading partitions...', {
1492
1453
  loadingCancelShown: false,
@@ -1512,9 +1473,7 @@ class IrisGrid extends Component {
1512
1473
  var _this2 = this;
1513
1474
  return _asyncToGenerator(function* () {
1514
1475
  var keyTable = yield _this2.pending.add(model.partitionKeysTable(), resolved => resolved.close());
1515
- var {
1516
- dh
1517
- } = model;
1476
+ var dh = model.dh;
1518
1477
  var sorts = keyTable.columns.map(column => column.sort().desc());
1519
1478
  keyTable.applySort(sorts);
1520
1479
  keyTable.setViewport(0, 0);
@@ -1523,9 +1482,7 @@ class IrisGrid extends Component {
1523
1482
  // It's possible that the key table does not have any rows of data yet, so just wait until it does have one
1524
1483
  keyTable.addEventListener(dh.Table.EVENT_UPDATED, event => {
1525
1484
  try {
1526
- var {
1527
- detail: data
1528
- } = event;
1485
+ var data = event.detail;
1529
1486
  if (data.rows.length === 0) {
1530
1487
  // We received an update and the table is still empty. Stop showing the loading spinner so we know
1531
1488
  _this2.stopLoading();
@@ -1557,18 +1514,20 @@ class IrisGrid extends Component {
1557
1514
  * @returns A promise that resolves when the partition key has been successfully selected.
1558
1515
  */
1559
1516
  selectPartitionKeyFromTable(rowIndex) {
1560
- var {
1561
- model
1562
- } = this.props;
1517
+ var model = this.props.model;
1563
1518
  assertNotNull(rowIndex);
1564
1519
  if (isPartitionedGridModel(model)) {
1565
1520
  var data = this.getRowDataMap(rowIndex);
1566
1521
  var partitionColumnSet = new Set(model.partitionColumns.map(column => column.name));
1567
1522
  var values = Object.entries(data).filter(_ref11 => {
1568
- var [key, _] = _ref11;
1523
+ var _ref12 = _slicedToArray(_ref11, 2),
1524
+ key = _ref12[0],
1525
+ _ = _ref12[1];
1569
1526
  return partitionColumnSet.has(key);
1570
- }).map(_ref12 => {
1571
- var [key, columnData] = _ref12;
1527
+ }).map(_ref13 => {
1528
+ var _ref14 = _slicedToArray(_ref13, 2),
1529
+ key = _ref14[0],
1530
+ columnData = _ref14[1];
1572
1531
  return columnData.value;
1573
1532
  });
1574
1533
  var newPartition = {
@@ -1583,9 +1542,7 @@ class IrisGrid extends Component {
1583
1542
  }
1584
1543
  copyCell(columnIndex, rowIndex) {
1585
1544
  var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1586
- var {
1587
- canCopy
1588
- } = this.props;
1545
+ var canCopy = this.props.canCopy;
1589
1546
  if (canCopy) {
1590
1547
  var value = String(this.getValueForCell(columnIndex, rowIndex, rawValue));
1591
1548
  copyToClipboard(value).catch(e => log.error('Unable to copy cell', e));
@@ -1598,12 +1555,8 @@ class IrisGrid extends Component {
1598
1555
  if (columnIndex === null) {
1599
1556
  return;
1600
1557
  }
1601
- var {
1602
- canCopy
1603
- } = this.props;
1604
- var {
1605
- movedColumns
1606
- } = this.state;
1558
+ var canCopy = this.props.canCopy;
1559
+ var movedColumns = this.state.movedColumns;
1607
1560
  if (canCopy) {
1608
1561
  var copyOperation = {
1609
1562
  columnIndex,
@@ -1629,14 +1582,12 @@ class IrisGrid extends Component {
1629
1582
  var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1630
1583
  var formatValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
1631
1584
  var error = arguments.length > 3 ? arguments[3] : undefined;
1632
- var {
1633
- model,
1634
- canCopy
1635
- } = this.props;
1636
- var {
1637
- metricCalculator,
1638
- movedColumns
1639
- } = this.state;
1585
+ var _this$props5 = this.props,
1586
+ model = _this$props5.model,
1587
+ canCopy = _this$props5.canCopy;
1588
+ var _this$state5 = this.state,
1589
+ metricCalculator = _this$state5.metricCalculator,
1590
+ movedColumns = _this$state5.movedColumns;
1640
1591
  var userColumnWidths = metricCalculator.getUserColumnWidths();
1641
1592
  if (canCopy) {
1642
1593
  var copyOperation = {
@@ -1655,11 +1606,13 @@ class IrisGrid extends Component {
1655
1606
  }
1656
1607
  }
1657
1608
  startLoading(loadingText) {
1658
- var {
1659
- resetRanges = false,
1660
- loadingCancelShown = true,
1661
- loadingBlocksGrid = true
1662
- } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1609
+ var _ref15 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1610
+ _ref15$resetRanges = _ref15.resetRanges,
1611
+ resetRanges = _ref15$resetRanges === void 0 ? false : _ref15$resetRanges,
1612
+ _ref15$loadingCancelS = _ref15.loadingCancelShown,
1613
+ loadingCancelShown = _ref15$loadingCancelS === void 0 ? true : _ref15$loadingCancelS,
1614
+ _ref15$loadingBlocksG = _ref15.loadingBlocksGrid,
1615
+ loadingBlocksGrid = _ref15$loadingBlocksG === void 0 ? true : _ref15$loadingBlocksG;
1663
1616
  this.setState({
1664
1617
  loadingText,
1665
1618
  loadingCancelShown,
@@ -1674,10 +1627,8 @@ class IrisGrid extends Component {
1674
1627
  }
1675
1628
  if (this.loadingScrimStartTime == null) {
1676
1629
  var _this$gridWrapper$get, _this$gridWrapper;
1677
- var {
1678
- minScrimTransitionTime,
1679
- maxScrimTransitionTime
1680
- } = theme;
1630
+ var minScrimTransitionTime = theme.minScrimTransitionTime,
1631
+ maxScrimTransitionTime = theme.maxScrimTransitionTime;
1681
1632
  assertNotNull(minScrimTransitionTime);
1682
1633
  assertNotNull(maxScrimTransitionTime);
1683
1634
  var height = (_this$gridWrapper$get = (_this$gridWrapper = this.gridWrapper) === null || _this$gridWrapper === void 0 ? void 0 : _this$gridWrapper.getBoundingClientRect().height) !== null && _this$gridWrapper$get !== void 0 ? _this$gridWrapper$get : 0;
@@ -1716,17 +1667,16 @@ class IrisGrid extends Component {
1716
1667
  rollback() {
1717
1668
  if (this.lastLoadedConfig) {
1718
1669
  log.debug('loading last loading config', this.lastLoadedConfig);
1719
- var {
1720
- advancedFilters,
1721
- aggregationSettings,
1722
- customColumns,
1723
- quickFilters,
1724
- reverse,
1725
- rollupConfig,
1726
- searchFilter,
1727
- selectDistinctColumns,
1728
- sorts
1729
- } = this.lastLoadedConfig;
1670
+ var _this$lastLoadedConfi = this.lastLoadedConfig,
1671
+ advancedFilters = _this$lastLoadedConfi.advancedFilters,
1672
+ aggregationSettings = _this$lastLoadedConfi.aggregationSettings,
1673
+ customColumns = _this$lastLoadedConfi.customColumns,
1674
+ quickFilters = _this$lastLoadedConfi.quickFilters,
1675
+ reverse = _this$lastLoadedConfi.reverse,
1676
+ rollupConfig = _this$lastLoadedConfi.rollupConfig,
1677
+ searchFilter = _this$lastLoadedConfi.searchFilter,
1678
+ selectDistinctColumns = _this$lastLoadedConfi.selectDistinctColumns,
1679
+ sorts = _this$lastLoadedConfi.sorts;
1730
1680
  this.lastLoadedConfig = null;
1731
1681
  this.setState({
1732
1682
  advancedFilters,
@@ -1764,33 +1714,33 @@ class IrisGrid extends Component {
1764
1714
  startListening(model) {
1765
1715
  model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);
1766
1716
  model.addEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);
1717
+ model.addEventListener(IrisGridModel.EVENT.PENDING, this.handlePending);
1718
+ model.addEventListener(IrisGridModel.EVENT.PENDING_CLEARED, this.handlePendingCleared);
1767
1719
  model.addEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);
1768
1720
  model.addEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);
1769
1721
  model.addEventListener(IrisGridModel.EVENT.VIEWPORT_UPDATED, this.handleViewportUpdated);
1770
1722
  model.addEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);
1723
+ model.addEventListener(IrisGridModel.EVENT.SCHEMA_CHANGED, this.handleSchemaChanged);
1771
1724
  }
1772
1725
  stopListening(model) {
1773
1726
  model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);
1774
1727
  model.removeEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);
1728
+ model.removeEventListener(IrisGridModel.EVENT.PENDING, this.handlePending);
1729
+ model.removeEventListener(IrisGridModel.EVENT.PENDING_CLEARED, this.handlePendingCleared);
1775
1730
  model.removeEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);
1776
1731
  model.removeEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);
1777
1732
  model.removeEventListener(IrisGridModel.EVENT.VIEWPORT_UPDATED, this.handleViewportUpdated);
1778
1733
  model.removeEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);
1734
+ model.removeEventListener(IrisGridModel.EVENT.SCHEMA_CHANGED, this.handleSchemaChanged);
1779
1735
  }
1780
1736
  focus() {
1781
1737
  var _this$grid3;
1782
1738
  (_this$grid3 = this.grid) === null || _this$grid3 === void 0 || _this$grid3.focus();
1783
1739
  }
1784
1740
  focusFilterBar(column) {
1785
- var {
1786
- movedColumns
1787
- } = this.state;
1788
- var {
1789
- model
1790
- } = this.props;
1791
- var {
1792
- columnCount
1793
- } = model;
1741
+ var movedColumns = this.state.movedColumns;
1742
+ var model = this.props.model;
1743
+ var columnCount = model.columnCount;
1794
1744
  var modelColumn = GridUtils.getModelIndex(column, movedColumns);
1795
1745
  if (column == null || columnCount <= column || !model.isFilterable(modelColumn)) {
1796
1746
  this.setState({
@@ -1798,10 +1748,9 @@ class IrisGrid extends Component {
1798
1748
  });
1799
1749
  return;
1800
1750
  }
1801
- var {
1802
- metricCalculator,
1803
- metrics
1804
- } = this.state;
1751
+ var _this$state6 = this.state,
1752
+ metricCalculator = _this$state6.metricCalculator,
1753
+ metrics = _this$state6.metrics;
1805
1754
  assertNotNull(metrics);
1806
1755
  var metricState = this.getMetricState();
1807
1756
  assertNotNull(metricState);
@@ -1821,21 +1770,17 @@ class IrisGrid extends Component {
1821
1770
  }
1822
1771
  hideColumnByVisibleIndex(columnVisibleIndex) {
1823
1772
  var _this$grid5;
1824
- var {
1825
- metricCalculator,
1826
- movedColumns
1827
- } = this.state;
1773
+ var _this$state7 = this.state,
1774
+ metricCalculator = _this$state7.metricCalculator,
1775
+ movedColumns = _this$state7.movedColumns;
1828
1776
  metricCalculator.setColumnWidth(GridUtils.getModelIndex(columnVisibleIndex, movedColumns), 0);
1829
1777
  (_this$grid5 = this.grid) === null || _this$grid5 === void 0 || _this$grid5.forceUpdate();
1830
1778
  }
1831
1779
  freezeColumnByColumnName(columnName) {
1832
- var {
1833
- frozenColumns,
1834
- movedColumns
1835
- } = this.state;
1836
- var {
1837
- model
1838
- } = this.props;
1780
+ var _this$state8 = this.state,
1781
+ frozenColumns = _this$state8.frozenColumns,
1782
+ movedColumns = _this$state8.movedColumns;
1783
+ var model = this.props.model;
1839
1784
  log.debug2('freezing column', columnName);
1840
1785
  var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);
1841
1786
  allFrozenColumns.add(columnName);
@@ -1849,13 +1794,10 @@ class IrisGrid extends Component {
1849
1794
  });
1850
1795
  }
1851
1796
  unFreezeColumnByColumnName(columnName) {
1852
- var {
1853
- frozenColumns,
1854
- movedColumns
1855
- } = this.state;
1856
- var {
1857
- model
1858
- } = this.props;
1797
+ var _this$state9 = this.state,
1798
+ frozenColumns = _this$state9.frozenColumns,
1799
+ movedColumns = _this$state9.movedColumns;
1800
+ var model = this.props.model;
1859
1801
  log.debug2('unfreezing column', columnName);
1860
1802
  var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);
1861
1803
  allFrozenColumns.delete(columnName);
@@ -1883,37 +1825,30 @@ class IrisGrid extends Component {
1883
1825
  }
1884
1826
  toggleExpandColumn(modelIndex, expandDescendants) {
1885
1827
  log.debug2('Toggle expand column', modelIndex);
1886
- var {
1887
- model
1888
- } = this.props;
1828
+ var model = this.props.model;
1889
1829
  if (isExpandableColumnGridModel(model) && model.hasExpandableColumns) {
1890
1830
  model.setColumnExpanded(modelIndex, !model.isColumnExpanded(modelIndex), expandDescendants);
1891
1831
  }
1892
1832
  }
1893
1833
  expandAllColumns() {
1894
1834
  log.debug2('Expand all columns');
1895
- var {
1896
- model
1897
- } = this.props;
1835
+ var model = this.props.model;
1898
1836
  if (isExpandableColumnGridModel(model) && model.isExpandAllColumnsAvailable) {
1899
1837
  model.expandAllColumns();
1900
1838
  }
1901
1839
  }
1902
1840
  collapseAllColumns() {
1903
1841
  log.debug2('Collapse all columns');
1904
- var {
1905
- model
1906
- } = this.props;
1842
+ var model = this.props.model;
1907
1843
  if (isExpandableColumnGridModel(model) && model.isExpandAllColumnsAvailable) {
1908
1844
  model.collapseAllColumns();
1909
1845
  }
1910
1846
  }
1911
1847
  handleColumnVisibilityChanged(modelIndexes, isVisible) {
1912
1848
  var _this$grid6;
1913
- var {
1914
- metricCalculator,
1915
- metrics
1916
- } = this.state;
1849
+ var _this$state0 = this.state,
1850
+ metricCalculator = _this$state0.metricCalculator,
1851
+ metrics = _this$state0.metrics;
1917
1852
  assertNotNull(metrics);
1918
1853
  if (isVisible) {
1919
1854
  modelIndexes.forEach(modelIndex => {
@@ -1938,12 +1873,8 @@ class IrisGrid extends Component {
1938
1873
  }
1939
1874
  handleColumnVisibilityReset() {
1940
1875
  var _model$layoutHints$fr, _model$layoutHints2;
1941
- var {
1942
- metricCalculator
1943
- } = this.state;
1944
- var {
1945
- model
1946
- } = this.props;
1876
+ var metricCalculator = this.state.metricCalculator;
1877
+ var model = this.props.model;
1947
1878
  metricCalculator.resetAllColumnWidths();
1948
1879
  this.handleMovedColumnsChanged(model.initialMovedColumns);
1949
1880
  this.handleHeaderGroupsChanged(model.initialColumnHeaderGroups);
@@ -1952,9 +1883,7 @@ class IrisGrid extends Component {
1952
1883
  });
1953
1884
  }
1954
1885
  handleCrossColumnSearch(searchValue, selectedSearchColumns, invertSearchColumns) {
1955
- var {
1956
- model
1957
- } = this.props;
1886
+ var model = this.props.model;
1958
1887
  this.startLoading('Searching...');
1959
1888
  this.updateSearchFilter(searchValue, selectedSearchColumns, model.columns, invertSearchColumns);
1960
1889
  this.setState({
@@ -1981,9 +1910,7 @@ class IrisGrid extends Component {
1981
1910
  }
1982
1911
  handlePartitionChange(partitionConfig) {
1983
1912
  this.startLoading('Partitioning...');
1984
- var {
1985
- partitionConfig: prevConfig
1986
- } = this.state;
1913
+ var prevConfig = this.state.partitionConfig;
1987
1914
  if (prevConfig !== partitionConfig) {
1988
1915
  this.setState({
1989
1916
  partitionConfig
@@ -1995,19 +1922,14 @@ class IrisGrid extends Component {
1995
1922
  return;
1996
1923
  }
1997
1924
  log.error(error);
1998
- var {
1999
- onError
2000
- } = this.props;
1925
+ var onError = this.props.onError;
2001
1926
  onError(error);
2002
1927
  }
2003
1928
  handleViewportUpdated() {
2004
- var {
2005
- model
2006
- } = this.props;
2007
- var {
2008
- loadingText,
2009
- loadingSpinnerShown
2010
- } = this.state;
1929
+ var model = this.props.model;
1930
+ var _this$state1 = this.state,
1931
+ loadingText = _this$state1.loadingText,
1932
+ loadingSpinnerShown = _this$state1.loadingSpinnerShown;
2011
1933
  var loadingMessage = 'Waiting for viewport...';
2012
1934
 
2013
1935
  // pending and no timer already exists
@@ -2020,13 +1942,13 @@ class IrisGrid extends Component {
2020
1942
  }
2021
1943
  showAllColumns() {
2022
1944
  var _this$grid8;
2023
- var {
2024
- metricCalculator
2025
- } = this.state;
1945
+ var metricCalculator = this.state.metricCalculator;
2026
1946
  var userColumnWidths = metricCalculator.getUserColumnWidths();
2027
1947
  var entries = [...userColumnWidths.entries()];
2028
1948
  for (var i = 0; i < entries.length; i += 1) {
2029
- var [modelIndex, columnWidth] = entries[i];
1949
+ var _entries$i = _slicedToArray(entries[i], 2),
1950
+ modelIndex = _entries$i[0],
1951
+ columnWidth = _entries$i[1];
2030
1952
  if (columnWidth === 0) {
2031
1953
  metricCalculator.resetColumnWidth(modelIndex);
2032
1954
  }
@@ -2046,15 +1968,11 @@ class IrisGrid extends Component {
2046
1968
  }
2047
1969
  toggleSort(columnIndex, addToExisting) {
2048
1970
  log.info('Toggling sort for column', columnIndex);
2049
- var {
2050
- model
2051
- } = this.props;
1971
+ var model = this.props.model;
2052
1972
  var modelColumn = this.getModelColumn(columnIndex);
2053
1973
  assertNotNull(modelColumn);
2054
1974
  if (model.isColumnSortable(columnIndex)) {
2055
- var {
2056
- sorts: currentSorts
2057
- } = this.state;
1975
+ var currentSorts = this.state.sorts;
2058
1976
  var sorts = TableUtils.toggleSortForColumn(currentSorts, model.columns, modelColumn, addToExisting);
2059
1977
  this.updateSorts(sorts);
2060
1978
  } else {
@@ -2075,9 +1993,7 @@ class IrisGrid extends Component {
2075
1993
  var isAbs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
2076
1994
  var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
2077
1995
  assertNotNull(modelColumn);
2078
- var {
2079
- model
2080
- } = this.props;
1996
+ var model = this.props.model;
2081
1997
  var sorts = TableUtils.sortColumn(model.sort, model.columns, modelColumn, direction, isAbs, addToExisting);
2082
1998
  this.startLoading('Sorting...');
2083
1999
  this.setState({
@@ -2094,16 +2010,12 @@ class IrisGrid extends Component {
2094
2010
  (_this$grid10 = this.grid) === null || _this$grid10 === void 0 || _this$grid10.forceUpdate();
2095
2011
  }
2096
2012
  isReversible() {
2097
- var {
2098
- model
2099
- } = this.props;
2013
+ var model = this.props.model;
2100
2014
  return model.isReversible;
2101
2015
  }
2102
2016
  toggleFilterBar() {
2103
2017
  var focusIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.lastFocusedFilterBarColumn;
2104
- var {
2105
- isFilterBarShown
2106
- } = this.state;
2018
+ var isFilterBarShown = this.state.isFilterBarShown;
2107
2019
  isFilterBarShown = !isFilterBarShown;
2108
2020
  this.setState({
2109
2021
  isFilterBarShown
@@ -2113,12 +2025,8 @@ class IrisGrid extends Component {
2113
2025
  this.focusFilterBar(focusIndex);
2114
2026
  } else {
2115
2027
  var columnIndex = 0;
2116
- var {
2117
- model
2118
- } = this.props;
2119
- var {
2120
- columnCount
2121
- } = model;
2028
+ var model = this.props.model;
2029
+ var columnCount = model.columnCount;
2122
2030
  for (var i = 0; i < columnCount; i += 1) {
2123
2031
  var modelColumn = this.getModelColumn(i);
2124
2032
  if (modelColumn != null) {
@@ -2138,13 +2046,10 @@ class IrisGrid extends Component {
2138
2046
  }
2139
2047
  isTableSearchAvailable() {
2140
2048
  var _model$layoutHints3, _dh$SearchDisplayMode, _dh$SearchDisplayMode2;
2141
- var {
2142
- model,
2143
- canToggleSearch
2144
- } = this.props;
2145
- var {
2146
- dh
2147
- } = model;
2049
+ var _this$props6 = this.props,
2050
+ model = _this$props6.model,
2051
+ canToggleSearch = _this$props6.canToggleSearch;
2052
+ var dh = model.dh;
2148
2053
  var searchDisplayMode = model === null || model === void 0 || (_model$layoutHints3 = model.layoutHints) === null || _model$layoutHints3 === void 0 ? void 0 : _model$layoutHints3.searchDisplayMode;
2149
2054
  if (searchDisplayMode === ((_dh$SearchDisplayMode = dh.SearchDisplayMode) === null || _dh$SearchDisplayMode === void 0 ? void 0 : _dh$SearchDisplayMode.SEARCH_DISPLAY_HIDE)) {
2150
2055
  return false;
@@ -2155,9 +2060,7 @@ class IrisGrid extends Component {
2155
2060
  return canToggleSearch;
2156
2061
  }
2157
2062
  toggleSearchBar() {
2158
- var {
2159
- showSearchBar
2160
- } = this.state;
2063
+ var showSearchBar = this.state.showSearchBar;
2161
2064
  if (!this.isTableSearchAvailable()) {
2162
2065
  return;
2163
2066
  }
@@ -2180,9 +2083,7 @@ class IrisGrid extends Component {
2180
2083
  var row = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
2181
2084
  var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
2182
2085
  var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
2183
- var {
2184
- isGotoShown
2185
- } = this.state;
2086
+ var isGotoShown = this.state.isGotoShown;
2186
2087
  if (row || value) {
2187
2088
  var _this$gotoRowRef$curr;
2188
2089
  // if invoked with a row, keep open instead of toggle
@@ -2213,12 +2114,8 @@ class IrisGrid extends Component {
2213
2114
  return;
2214
2115
  }
2215
2116
  // if a row is selected
2216
- var {
2217
- model
2218
- } = this.props;
2219
- var {
2220
- name
2221
- } = model.columns[cursorColumn];
2117
+ var model = this.props.model;
2118
+ var name = model.columns[cursorColumn].name;
2222
2119
 
2223
2120
  // Use raw value (same as Copy Cell Unformatted) to preserve full precision and timezone
2224
2121
  var text = String(this.getValueForCell(cursorColumn, cursorRow, true));
@@ -2236,15 +2133,11 @@ class IrisGrid extends Component {
2236
2133
  var _this3 = this;
2237
2134
  return _asyncToGenerator(function* () {
2238
2135
  var _document;
2239
- var {
2240
- model
2241
- } = _this3.props;
2136
+ var model = _this3.props.model;
2242
2137
  if (!isEditableGridModel(model) || !model.isEditable) {
2243
2138
  throw new Error('Cannot save, table is not editable');
2244
2139
  }
2245
- var {
2246
- pendingSavePromise
2247
- } = _this3.state;
2140
+ var pendingSavePromise = _this3.state.pendingSavePromise;
2248
2141
  if (pendingSavePromise != null) {
2249
2142
  throw new Error('Save already in progress');
2250
2143
  }
@@ -2280,9 +2173,7 @@ class IrisGrid extends Component {
2280
2173
  discardPending() {
2281
2174
  var _this4 = this;
2282
2175
  return _asyncToGenerator(function* () {
2283
- var {
2284
- pendingSavePromise
2285
- } = _this4.state;
2176
+ var pendingSavePromise = _this4.state.pendingSavePromise;
2286
2177
  if (pendingSavePromise != null) {
2287
2178
  throw new Error('Cannot cancel a save in progress');
2288
2179
  }
@@ -2300,9 +2191,7 @@ class IrisGrid extends Component {
2300
2191
  * @param column The column in this table to link
2301
2192
  */
2302
2193
  selectColumn(column) {
2303
- var {
2304
- onColumnSelected
2305
- } = this.props;
2194
+ var onColumnSelected = this.props.onColumnSelected;
2306
2195
  onColumnSelected(column);
2307
2196
  }
2308
2197
 
@@ -2311,9 +2200,7 @@ class IrisGrid extends Component {
2311
2200
  */
2312
2201
  selectData(columnIndex, rowIndex) {
2313
2202
  var dataMap = this.getRowDataMap(rowIndex);
2314
- var {
2315
- onDataSelected
2316
- } = this.props;
2203
+ var onDataSelected = this.props.onDataSelected;
2317
2204
  onDataSelected(rowIndex, dataMap);
2318
2205
  }
2319
2206
 
@@ -2324,20 +2211,14 @@ class IrisGrid extends Component {
2324
2211
  */
2325
2212
  getRowDataMap(rowIndex) {
2326
2213
  var _this5 = this;
2327
- var {
2328
- model
2329
- } = this.props;
2330
- var {
2331
- columns,
2332
- groupedColumns
2333
- } = model;
2214
+ var model = this.props.model;
2215
+ var columns = model.columns,
2216
+ groupedColumns = model.groupedColumns;
2334
2217
  var dataMap = {};
2335
2218
  var _loop = function _loop() {
2336
2219
  var column = columns[i];
2337
- var {
2338
- name,
2339
- type
2340
- } = column;
2220
+ var name = column.name,
2221
+ type = column.type;
2341
2222
  var value = model.valueForCell(i, rowIndex);
2342
2223
  var text = model.textForCell(i, rowIndex);
2343
2224
  var visibleIndex = _this5.getVisibleColumn(i);
@@ -2358,9 +2239,7 @@ class IrisGrid extends Component {
2358
2239
  return dataMap;
2359
2240
  }
2360
2241
  handleAdvancedFilterChange(column, filter, options) {
2361
- var {
2362
- model
2363
- } = this.props;
2242
+ var model = this.props.model;
2364
2243
  var index = model.getColumnIndexByName(column.name);
2365
2244
  assertNotNull(index);
2366
2245
  this.setAdvancedFilter(index, filter, options);
@@ -2368,9 +2247,7 @@ class IrisGrid extends Component {
2368
2247
  handleAdvancedFilterSortChange(column, direction) {
2369
2248
  var _this$grid15;
2370
2249
  var addToExisting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
2371
- var {
2372
- model
2373
- } = this.props;
2250
+ var model = this.props.model;
2374
2251
  var columnIndex = model.getColumnIndexByName(column.name);
2375
2252
  assertNotNull(columnIndex);
2376
2253
  var columnName = model.columns[columnIndex].name;
@@ -2396,10 +2273,8 @@ class IrisGrid extends Component {
2396
2273
  (_this$grid16 = this.grid) === null || _this$grid16 === void 0 || _this$grid16.focus();
2397
2274
  }
2398
2275
  handleAdvancedFilterToggleMaximize(column) {
2399
- this.setState(_ref13 => {
2400
- var {
2401
- maximizedAdvancedFilter
2402
- } = _ref13;
2276
+ this.setState(_ref16 => {
2277
+ var maximizedAdvancedFilter = _ref16.maximizedAdvancedFilter;
2403
2278
  return {
2404
2279
  maximizedAdvancedFilter: maximizedAdvancedFilter === column ? null : column
2405
2280
  };
@@ -2425,10 +2300,9 @@ class IrisGrid extends Component {
2425
2300
  }
2426
2301
  handleAdvancedMenuClosed(columnIndex) {
2427
2302
  var _this$filterInputRef;
2428
- var {
2429
- focusedFilterBarColumn,
2430
- isFilterBarShown
2431
- } = this.state;
2303
+ var _this$state10 = this.state,
2304
+ focusedFilterBarColumn = _this$state10.focusedFilterBarColumn,
2305
+ isFilterBarShown = _this$state10.isFilterBarShown;
2432
2306
  if (isFilterBarShown && focusedFilterBarColumn === columnIndex && ((_this$filterInputRef = this.filterInputRef) === null || _this$filterInputRef === void 0 ? void 0 : _this$filterInputRef.current) !== null) {
2433
2307
  var _this$filterInputRef2;
2434
2308
  (_this$filterInputRef2 = this.filterInputRef) === null || _this$filterInputRef2 === void 0 || _this$filterInputRef2.current.focus();
@@ -2453,10 +2327,9 @@ class IrisGrid extends Component {
2453
2327
  // TODO: IDS-4242 Update Chart Preview
2454
2328
  }
2455
2329
  handleChartCreate(settings) {
2456
- var {
2457
- model,
2458
- onCreateChart
2459
- } = this.props;
2330
+ var _this$props7 = this.props,
2331
+ model = _this$props7.model,
2332
+ onCreateChart = _this$props7.onCreateChart;
2460
2333
  onCreateChart(settings, model);
2461
2334
  }
2462
2335
  handleGridError(error) {
@@ -2472,11 +2345,9 @@ class IrisGrid extends Component {
2472
2345
  this.startLoading('Filtering...', {
2473
2346
  resetRanges: true
2474
2347
  });
2475
- this.setState(_ref14 => {
2476
- var {
2477
- focusedFilterBarColumn,
2478
- quickFilters
2479
- } = _ref14;
2348
+ this.setState(_ref17 => {
2349
+ var focusedFilterBarColumn = _ref17.focusedFilterBarColumn,
2350
+ quickFilters = _ref17.quickFilters;
2480
2351
  var newQuickFilters = new Map(quickFilters);
2481
2352
  if (focusedFilterBarColumn != null) {
2482
2353
  var modelIndex = this.getModelColumn(focusedFilterBarColumn);
@@ -2502,9 +2373,7 @@ class IrisGrid extends Component {
2502
2373
  }
2503
2374
  }
2504
2375
  handleFilterBarTab(backward) {
2505
- var {
2506
- focusedFilterBarColumn
2507
- } = this.state;
2376
+ var focusedFilterBarColumn = this.state.focusedFilterBarColumn;
2508
2377
  assertNotNull(focusedFilterBarColumn);
2509
2378
  if (backward) {
2510
2379
  this.focusFilterBar(focusedFilterBarColumn - 1);
@@ -2513,13 +2382,9 @@ class IrisGrid extends Component {
2513
2382
  }
2514
2383
  }
2515
2384
  handleFormatSelection(modelIndex, selectedFormat) {
2516
- var {
2517
- model
2518
- } = this.props;
2385
+ var model = this.props.model;
2519
2386
  var column = model.columns[modelIndex];
2520
- var {
2521
- customColumnFormatMap: prevCustomColumnFormatMap
2522
- } = this.state;
2387
+ var prevCustomColumnFormatMap = this.state.customColumnFormatMap;
2523
2388
  var customColumnFormatMap = new Map(prevCustomColumnFormatMap);
2524
2389
  if (selectedFormat != null) {
2525
2390
  var normalizedType = TableUtils.getNormalizedType(column.type);
@@ -2534,14 +2399,11 @@ class IrisGrid extends Component {
2534
2399
  });
2535
2400
  }
2536
2401
  handleColumnAlignmentChange(modelIndex, alignment) {
2537
- var {
2538
- model
2539
- } = this.props;
2402
+ var model = this.props.model;
2540
2403
  var column = model.columns[modelIndex];
2541
- this.setState(_ref15 => {
2542
- var {
2543
- columnAlignmentMap = EMPTY_MAP
2544
- } = _ref15;
2404
+ this.setState(_ref18 => {
2405
+ var _ref18$columnAlignmen = _ref18.columnAlignmentMap,
2406
+ columnAlignmentMap = _ref18$columnAlignmen === void 0 ? EMPTY_MAP : _ref18$columnAlignmen;
2545
2407
  var newColumnAlignmentMap = new Map(columnAlignmentMap);
2546
2408
  if (alignment != null) {
2547
2409
  newColumnAlignmentMap.set(column.name, alignment);
@@ -2566,10 +2428,8 @@ class IrisGrid extends Component {
2566
2428
  });
2567
2429
  }
2568
2430
  handleMenuBack() {
2569
- this.setState(_ref16 => {
2570
- var {
2571
- openOptions
2572
- } = _ref16;
2431
+ this.setState(_ref19 => {
2432
+ var openOptions = _ref19.openOptions;
2573
2433
  var newOptions = [...openOptions];
2574
2434
  newOptions.pop();
2575
2435
  return {
@@ -2578,24 +2438,19 @@ class IrisGrid extends Component {
2578
2438
  });
2579
2439
  }
2580
2440
  handleMenuSelect(option) {
2581
- this.setState(_ref17 => {
2582
- var {
2583
- openOptions
2584
- } = _ref17;
2441
+ this.setState(_ref20 => {
2442
+ var openOptions = _ref20.openOptions;
2585
2443
  return {
2586
2444
  openOptions: [...openOptions, option]
2587
2445
  };
2588
2446
  });
2589
2447
  }
2590
2448
  handleRequestFailed(event) {
2591
- var {
2592
- detail: error
2593
- } = event;
2449
+ var _ref21 = event,
2450
+ error = _ref21.detail;
2594
2451
  log.error('request failed:', error);
2595
2452
  this.stopLoading();
2596
- var {
2597
- partitionConfig
2598
- } = this.state;
2453
+ var partitionConfig = this.state.partitionConfig;
2599
2454
  if (isMissingPartitionError(error) && partitionConfig != null) {
2600
2455
  // We'll try loading the initial partition again
2601
2456
  this.startLoading('Reloading partition...', {
@@ -2613,26 +2468,62 @@ class IrisGrid extends Component {
2613
2468
  this.rollback();
2614
2469
  } else {
2615
2470
  log.error('Table failed and unable to rollback');
2616
- var {
2617
- onError
2618
- } = this.props;
2471
+ var onError = this.props.onError;
2619
2472
  onError(new Error("Error displaying table: ".concat(error)));
2620
2473
  }
2621
2474
  }
2475
+
2476
+ /**
2477
+ * Raise the loading scrim in response to a model-driven `PENDING` event. The
2478
+ * model is the start signal, mirroring how `UPDATED`/`COLUMNS_CHANGED` are
2479
+ * already the model-driven stop signal. Idempotent: the first message within
2480
+ * a commit wins (the `loadingScrimStartTime == null` guard collapses multiple
2481
+ * pending operations into a single scrim).
2482
+ */
2483
+ handlePending(event) {
2484
+ var _ref22 = event,
2485
+ detail = _ref22.detail;
2486
+ var _ref23 = detail !== null && detail !== void 0 ? detail : {},
2487
+ text = _ref23.text,
2488
+ options = _ref23.options;
2489
+ if (this.loadingScrimStartTime == null) {
2490
+ this.startLoading(text !== null && text !== void 0 ? text : 'Loading...', _objectSpread({
2491
+ loadingCancelShown: false
2492
+ }, options));
2493
+ }
2494
+ }
2495
+
2496
+ /**
2497
+ * Clear the loading scrim in response to a model-driven `PENDING_CLEARED`
2498
+ * event. Only needed for operations that do not naturally end in
2499
+ * `UPDATED`/`COLUMNS_CHANGED`/`REQUEST_FAILED`.
2500
+ *
2501
+ * The current contract assumes a single outstanding model-driven operation:
2502
+ * `handlePending` collapses concurrent `PENDING` events into one scrim, so
2503
+ * this clears unconditionally. That is consistent with the existing scrim,
2504
+ * which any model stop signal already clears regardless of what else is in
2505
+ * flight. Ref-counting overlapping operations is intentionally deferred to
2506
+ * the planned migration that routes the built-in `startLoading` calls
2507
+ * through `PENDING`/`PENDING_CLEARED`; only once every raise/clear goes
2508
+ * through this pair can a depth counter stay balanced (a counter added now
2509
+ * would desync against the direct `startLoading` callers).
2510
+ */
2511
+ handlePendingCleared() {
2512
+ this.stopLoading();
2513
+ }
2622
2514
  handleUpdate() {
2623
2515
  var _this$grid18;
2624
2516
  log.debug2('Received model update');
2625
- var {
2626
- advancedFilters,
2627
- aggregationSettings,
2628
- customColumns,
2629
- quickFilters,
2630
- reverse,
2631
- rollupConfig,
2632
- searchFilter,
2633
- selectDistinctColumns,
2634
- sorts
2635
- } = this.state;
2517
+ var _this$state11 = this.state,
2518
+ advancedFilters = _this$state11.advancedFilters,
2519
+ aggregationSettings = _this$state11.aggregationSettings,
2520
+ customColumns = _this$state11.customColumns,
2521
+ quickFilters = _this$state11.quickFilters,
2522
+ reverse = _this$state11.reverse,
2523
+ rollupConfig = _this$state11.rollupConfig,
2524
+ searchFilter = _this$state11.searchFilter,
2525
+ selectDistinctColumns = _this$state11.selectDistinctColumns,
2526
+ sorts = _this$state11.sorts;
2636
2527
  var config = {
2637
2528
  advancedFilters,
2638
2529
  aggregationSettings,
@@ -2653,35 +2544,39 @@ class IrisGrid extends Component {
2653
2544
  this.stopLoading();
2654
2545
  }
2655
2546
  handleTableChanged() {
2656
- var {
2657
- model
2658
- } = this.props;
2659
- // movedColumns reset triggers metricCalculator update in the Grid component
2660
- this.setState({
2661
- movedColumns: model.initialMovedColumns
2662
- });
2547
+ var model = this.props.model;
2663
2548
  // For partitioned tables, we want to rebuild filters on table change to ensure filters are applied to the new partition
2664
- var {
2665
- partitionConfig
2666
- } = this.state;
2549
+ var partitionConfig = this.state.partitionConfig;
2667
2550
  if (isPartitionedGridModel(model) && (partitionConfig === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) !== 'keys') {
2668
2551
  this.rebuildFilters();
2669
2552
  }
2670
2553
  }
2554
+
2555
+ /**
2556
+ * Handle an inner-model swap on a proxy model (`SCHEMA_CHANGED`). The previous
2557
+ * model's `movedColumns` reference indices that may not exist in the new
2558
+ * model (e.g. a pivot exposes a different column set), so reset them to the
2559
+ * new model's initial order. The metric calculator is rebuilt separately when
2560
+ * the `getMetricCalculator` prop changes (see `componentDidUpdate`); a calc
2561
+ * whose seed `movedColumns` are now stale self-heals because `getMetrics`
2562
+ * reconciles against the grid's current `movedColumns` at draw time.
2563
+ */
2564
+ handleSchemaChanged() {
2565
+ var model = this.props.model;
2566
+ this.setState({
2567
+ movedColumns: model.initialMovedColumns
2568
+ });
2569
+ }
2671
2570
  handleViewChanged(metrics) {
2672
2571
  var _this$grid$state, _this$grid19;
2673
- var {
2674
- model
2675
- } = this.props;
2676
- var {
2677
- selectionEndRow = 0
2678
- } = (_this$grid$state = (_this$grid19 = this.grid) === null || _this$grid19 === void 0 ? void 0 : _this$grid19.state) !== null && _this$grid$state !== void 0 ? _this$grid$state : {};
2572
+ var model = this.props.model;
2573
+ var _ref24 = (_this$grid$state = (_this$grid19 = this.grid) === null || _this$grid19 === void 0 ? void 0 : _this$grid19.state) !== null && _this$grid$state !== void 0 ? _this$grid$state : {},
2574
+ _ref24$selectionEndRo = _ref24.selectionEndRow,
2575
+ selectionEndRow = _ref24$selectionEndRo === void 0 ? 0 : _ref24$selectionEndRo;
2679
2576
  var pendingRowCount = 0;
2680
2577
  if (isEditableGridModel(model) && model.isEditable) {
2681
2578
  assertNotNull(metrics);
2682
- var {
2683
- bottomViewport
2684
- } = metrics;
2579
+ var bottomViewport = metrics.bottomViewport;
2685
2580
 
2686
2581
  // We have an editable table that we can add new rows to
2687
2582
  // Display empty rows beneath the table rows that user can fill in
@@ -2704,12 +2599,8 @@ class IrisGrid extends Component {
2704
2599
  }
2705
2600
  handleSelectionChanged(selectedRanges) {
2706
2601
  assertNotNull(selectedRanges);
2707
- var {
2708
- onSelectionChanged
2709
- } = this.props;
2710
- var {
2711
- copyOperation
2712
- } = this.state;
2602
+ var onSelectionChanged = this.props.onSelectionChanged;
2603
+ var copyOperation = this.state.copyOperation;
2713
2604
  this.setState({
2714
2605
  selectedRanges
2715
2606
  });
@@ -2736,12 +2627,8 @@ class IrisGrid extends Component {
2736
2627
  }, onChangeApplied);
2737
2628
  }
2738
2629
  handleHeaderGroupsChanged(columnHeaderGroups) {
2739
- var {
2740
- model
2741
- } = this.props;
2742
- var {
2743
- columnHeaderGroups: prevColumnHeaderGroups
2744
- } = this.state;
2630
+ var model = this.props.model;
2631
+ var prevColumnHeaderGroups = this.state.columnHeaderGroups;
2745
2632
  if (prevColumnHeaderGroups === columnHeaderGroups) {
2746
2633
  return;
2747
2634
  }
@@ -2769,10 +2656,9 @@ class IrisGrid extends Component {
2769
2656
  }
2770
2657
  handleConditionalFormatCreate() {
2771
2658
  log.debug('Create new conditional format');
2772
- var {
2773
- openOptions,
2774
- conditionalFormats
2775
- } = this.state;
2659
+ var _this$state12 = this.state,
2660
+ openOptions = _this$state12.openOptions,
2661
+ conditionalFormats = _this$state12.conditionalFormats;
2776
2662
  this.setState({
2777
2663
  openOptions: [...openOptions, {
2778
2664
  type: OptionType.CONDITIONAL_FORMATTING_EDIT,
@@ -2785,10 +2671,9 @@ class IrisGrid extends Component {
2785
2671
  }
2786
2672
  handleConditionalFormatEdit(index) {
2787
2673
  log.debug('Edit conditional format', index);
2788
- var {
2789
- openOptions,
2790
- conditionalFormats
2791
- } = this.state;
2674
+ var _this$state13 = this.state,
2675
+ openOptions = _this$state13.openOptions,
2676
+ conditionalFormats = _this$state13.conditionalFormats;
2792
2677
  this.setState({
2793
2678
  openOptions: [...openOptions, {
2794
2679
  type: OptionType.CONDITIONAL_FORMATTING_EDIT,
@@ -2825,19 +2710,14 @@ class IrisGrid extends Component {
2825
2710
  }
2826
2711
  handleUpdateCustomColumns(customColumns) {
2827
2712
  log.info("handleUpdateCustomColumns:", customColumns);
2828
- var {
2829
- model
2830
- } = this.props;
2831
- var {
2832
- movedColumns,
2833
- sorts,
2834
- quickFilters,
2835
- advancedFilters,
2836
- selectDistinctColumns
2837
- } = this.state;
2838
- var {
2839
- columns
2840
- } = model;
2713
+ var model = this.props.model;
2714
+ var _this$state14 = this.state,
2715
+ movedColumns = _this$state14.movedColumns,
2716
+ sorts = _this$state14.sorts,
2717
+ quickFilters = _this$state14.quickFilters,
2718
+ advancedFilters = _this$state14.advancedFilters,
2719
+ selectDistinctColumns = _this$state14.selectDistinctColumns;
2720
+ var columns = model.columns;
2841
2721
  var oldCustomColumns = model.customColumns.map(customColumn => "".concat(customColumn));
2842
2722
  var removedColumnNames = IrisGridUtils.getRemovedCustomColumnNames(oldCustomColumns, customColumns);
2843
2723
  if (removedColumnNames.length > 0) {
@@ -2883,9 +2763,7 @@ class IrisGrid extends Component {
2883
2763
  }
2884
2764
  handleCustomColumnsChanged() {
2885
2765
  log.debug('Model columns changed');
2886
- var {
2887
- isReady
2888
- } = this.state;
2766
+ var isReady = this.state.isReady;
2889
2767
  if (isReady) {
2890
2768
  this.updateMetrics();
2891
2769
 
@@ -2896,6 +2774,49 @@ class IrisGrid extends Component {
2896
2774
  this.loadTableState();
2897
2775
  }
2898
2776
  }
2777
+
2778
+ /**
2779
+ * Rebuild the metric calculator when the `getMetricCalculator` prop swaps for
2780
+ * a different factory (e.g. entering or leaving a pivot, where the
2781
+ * pivot-builder middleware flips the prop). The renderer and mouse handlers
2782
+ * are recomputed via their memoized getters on the next render and do not
2783
+ * need explicit handling here.
2784
+ *
2785
+ * User column-widths / row-heights from the previous calculator are not
2786
+ * carried over: a factory swap means the column set has effectively changed,
2787
+ * so the stored sizes wouldn't map to anything meaningful.
2788
+ *
2789
+ * Moved columns are NOT reset here — that is owned by `handleSchemaChanged`
2790
+ * (the `SCHEMA_CHANGED` event) so that a plain prop swap against the same
2791
+ * model preserves the user's layout. The new calculator is seeded with the
2792
+ * current moved columns; `getMetrics` reconciles against the grid's live
2793
+ * `movedColumns` at draw time, so a later reset stays consistent.
2794
+ */
2795
+ maybeRebuildMetricCalculator() {
2796
+ var _model$layoutHints4;
2797
+ var getMetricCalculator = this.props.getMetricCalculator;
2798
+ if (getMetricCalculator === this.lastMetricCalculatorFactory) return;
2799
+ var model = this.props.model;
2800
+ var movedColumns = this.state.movedColumns;
2801
+ var next = getMetricCalculator({
2802
+ userColumnWidths: new Map(),
2803
+ userRowHeights: new Map(),
2804
+ movedColumns,
2805
+ initialColumnWidths: new Map(model === null || model === void 0 || (_model$layoutHints4 = model.layoutHints) === null || _model$layoutHints4 === void 0 || (_model$layoutHints4 = _model$layoutHints4.hiddenColumns) === null || _model$layoutHints4 === void 0 ? void 0 : _model$layoutHints4.map(name => [model.getColumnIndexByName(name), 0]))
2806
+ });
2807
+ this.lastMetricCalculatorFactory = getMetricCalculator;
2808
+ log.debug('Swapping metric calculator', next);
2809
+ // Also push the new calculator onto the Grid synchronously so any
2810
+ // immediately-following read of `Grid.metricCalculator` (before React has
2811
+ // committed the setState below) uses the new instance against the new
2812
+ // model rather than invoking the old calculator and potentially throwing.
2813
+ if (this.grid != null) {
2814
+ this.grid.metricCalculator = next;
2815
+ }
2816
+ this.setState({
2817
+ metricCalculator: next
2818
+ });
2819
+ }
2899
2820
  handlePendingCommitClicked() {
2900
2821
  return this.commitPending();
2901
2822
  }
@@ -2905,13 +2826,9 @@ class IrisGrid extends Component {
2905
2826
  handlePendingDataUpdated() {
2906
2827
  var _this$grid21;
2907
2828
  log.debug('pending data updated');
2908
- var {
2909
- model
2910
- } = this.props;
2911
- var {
2912
- pendingDataMap,
2913
- pendingDataErrors
2914
- } = model;
2829
+ var model = this.props.model;
2830
+ var pendingDataMap = model.pendingDataMap,
2831
+ pendingDataErrors = model.pendingDataErrors;
2915
2832
  this.setState({
2916
2833
  pendingDataMap,
2917
2834
  pendingDataErrors,
@@ -2921,10 +2838,9 @@ class IrisGrid extends Component {
2921
2838
  }
2922
2839
  handleResizeColumn(modelIndex) {
2923
2840
  var _this$grid22;
2924
- var {
2925
- metrics,
2926
- metricCalculator
2927
- } = this.state;
2841
+ var _this$state15 = this.state,
2842
+ metrics = _this$state15.metrics,
2843
+ metricCalculator = _this$state15.metricCalculator;
2928
2844
  if (!metrics) throw new Error('Metrics not set');
2929
2845
  var contentWidth = getOrThrow(metrics.contentColumnWidths, modelIndex);
2930
2846
  var userWidths = metricCalculator.getUserColumnWidths();
@@ -2938,17 +2854,19 @@ class IrisGrid extends Component {
2938
2854
  }
2939
2855
  handleResizeAllColumns() {
2940
2856
  var _this$grid23;
2941
- var {
2942
- metrics,
2943
- metricCalculator
2944
- } = this.state;
2857
+ var _this$state16 = this.state,
2858
+ metrics = _this$state16.metrics,
2859
+ metricCalculator = _this$state16.metricCalculator;
2945
2860
  if (!metrics) throw new Error('Metrics not set');
2946
2861
  var allColumns = [...metrics.allColumnWidths.entries()];
2947
- var visibleColumns = allColumns.filter(_ref18 => {
2948
- var [_, width] = _ref18;
2862
+ var visibleColumns = allColumns.filter(_ref25 => {
2863
+ var _ref26 = _slicedToArray(_ref25, 2),
2864
+ _ = _ref26[0],
2865
+ width = _ref26[1];
2949
2866
  return width !== 0;
2950
- }).map(_ref19 => {
2951
- var [modelIndex] = _ref19;
2867
+ }).map(_ref27 => {
2868
+ var _ref28 = _slicedToArray(_ref27, 1),
2869
+ modelIndex = _ref28[0];
2952
2870
  return modelIndex;
2953
2871
  });
2954
2872
  var contentWidths = metrics.contentColumnWidths;
@@ -2984,9 +2902,7 @@ class IrisGrid extends Component {
2984
2902
  var added = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
2985
2903
  var removed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
2986
2904
  log.debug('handleAggregationsChange', aggregationSettings, added, removed);
2987
- var {
2988
- rollupConfig
2989
- } = this.state;
2905
+ var rollupConfig = this.state.rollupConfig;
2990
2906
  var isRollup = ((_rollupConfig$columns = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns2 = rollupConfig.columns) === null || _rollupConfig$columns2 === void 0 ? void 0 : _rollupConfig$columns2.length) !== null && _rollupConfig$columns !== void 0 ? _rollupConfig$columns : 0) > 0;
2991
2907
  // Do not start loading if this is rollup and added / removed aggregations are prohibited for rollups
2992
2908
  var changes = [...added, ...removed];
@@ -3006,19 +2922,15 @@ class IrisGrid extends Component {
3006
2922
  handleAggregationChange(aggregation) {
3007
2923
  var _rollupConfig$columns3, _rollupConfig$columns4;
3008
2924
  log.debug('handleAggregationChange', aggregation);
3009
- var {
3010
- rollupConfig
3011
- } = this.state;
2925
+ var rollupConfig = this.state.rollupConfig;
3012
2926
  var isRollup = ((_rollupConfig$columns3 = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns4 = rollupConfig.columns) === null || _rollupConfig$columns4 === void 0 ? void 0 : _rollupConfig$columns4.length) !== null && _rollupConfig$columns3 !== void 0 ? _rollupConfig$columns3 : 0) > 0;
3013
2927
  // Do not start loading if this is rollup and the aggregation is prohibited for rollups
3014
2928
  var shouldStartLoading = !(isRollup && AggregationUtils.isRollupProhibited(aggregation.operation));
3015
2929
  if (shouldStartLoading) {
3016
2930
  this.startLoading("Aggregating ".concat(aggregation.operation, "..."));
3017
2931
  }
3018
- this.setState(_ref20 => {
3019
- var {
3020
- aggregationSettings
3021
- } = _ref20;
2932
+ this.setState(_ref29 => {
2933
+ var aggregationSettings = _ref29.aggregationSettings;
3022
2934
  return {
3023
2935
  selectedAggregation: aggregation,
3024
2936
  aggregationSettings: _objectSpread(_objectSpread({}, aggregationSettings), {}, {
@@ -3034,9 +2946,7 @@ class IrisGrid extends Component {
3034
2946
  */
3035
2947
  handleAggregationEdit(aggregation) {
3036
2948
  log.debug('handleAggregationEdit', aggregation);
3037
- var {
3038
- openOptions
3039
- } = this.state;
2949
+ var openOptions = this.state.openOptions;
3040
2950
  this.setState({
3041
2951
  openOptions: [...openOptions, {
3042
2952
  type: OptionType.AGGREGATION_EDIT,
@@ -3051,9 +2961,7 @@ class IrisGrid extends Component {
3051
2961
 
3052
2962
  // Un-hide hidden group-by columns.
3053
2963
  if ((rollupConfig === null || rollupConfig === void 0 ? void 0 : rollupConfig.columns) != null && rollupConfig.columns.length > 0) {
3054
- var {
3055
- metricCalculator
3056
- } = this.state;
2964
+ var metricCalculator = this.state.metricCalculator;
3057
2965
  var userColumnWidthsByName = metricCalculator.getUserColumnWidthsByName();
3058
2966
  rollupConfig.columns.forEach(name => {
3059
2967
  if (userColumnWidthsByName.get(name) === 0) {
@@ -3092,9 +3000,7 @@ class IrisGrid extends Component {
3092
3000
  });
3093
3001
  }
3094
3002
  handleDownloadTableStart() {
3095
- var {
3096
- canDownloadCsv
3097
- } = this.props;
3003
+ var canDownloadCsv = this.props.canDownloadCsv;
3098
3004
  if (canDownloadCsv) {
3099
3005
  this.setState({
3100
3006
  isTableDownloading: true,
@@ -3107,9 +3013,7 @@ class IrisGrid extends Component {
3107
3013
  }
3108
3014
  }
3109
3015
  handleDownloadTable(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues) {
3110
- var {
3111
- canDownloadCsv
3112
- } = this.props;
3016
+ var canDownloadCsv = this.props.canDownloadCsv;
3113
3017
  if (canDownloadCsv) {
3114
3018
  log.info('start table downloading', fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);
3115
3019
  this.setState(() => {
@@ -3130,13 +3034,9 @@ class IrisGrid extends Component {
3130
3034
  */
3131
3035
  removeEmptyAggregations() {
3132
3036
  log.debug('removeEmptyAggregations');
3133
- this.setState(_ref21 => {
3134
- var {
3135
- aggregationSettings
3136
- } = _ref21;
3137
- var {
3138
- aggregations
3139
- } = aggregationSettings;
3037
+ this.setState(_ref30 => {
3038
+ var aggregationSettings = _ref30.aggregationSettings;
3039
+ var aggregations = aggregationSettings.aggregations;
3140
3040
  var newAggregations = aggregations.filter(a => a.selected.length > 0 || a.invert);
3141
3041
  if (newAggregations.length !== aggregations.length) {
3142
3042
  return {
@@ -3158,16 +3058,11 @@ class IrisGrid extends Component {
3158
3058
  return _asyncToGenerator(function* () {
3159
3059
  var _this6$grid;
3160
3060
  var isBackwards = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;
3161
- var {
3162
- gotoValueSelectedColumnName: selectedColumnName,
3163
- gotoValueSelectedFilter
3164
- } = _this6.state;
3165
- var {
3166
- model
3167
- } = _this6.props;
3168
- var {
3169
- dh
3170
- } = model;
3061
+ var _this6$state = _this6.state,
3062
+ selectedColumnName = _this6$state.gotoValueSelectedColumnName,
3063
+ gotoValueSelectedFilter = _this6$state.gotoValueSelectedFilter;
3064
+ var model = _this6.props.model;
3065
+ var dh = model.dh;
3171
3066
  if (!model.isSeekRowAvailable) {
3172
3067
  return;
3173
3068
  }
@@ -3186,9 +3081,7 @@ class IrisGrid extends Component {
3186
3081
  var isIgnoreCase = gotoValueSelectedFilter === FilterType.eqIgnoreCase || gotoValueSelectedFilter === FilterType.containsIgnoreCase;
3187
3082
  try {
3188
3083
  var _this6$grid2;
3189
- var {
3190
- formatter
3191
- } = model;
3084
+ var formatter = model.formatter;
3192
3085
  var columnDataType = TableUtils.getNormalizedType(selectedColumn.type);
3193
3086
  var rowIndex;
3194
3087
  switch (columnDataType) {
@@ -3200,7 +3093,9 @@ class IrisGrid extends Component {
3200
3093
  }
3201
3094
  case TableUtils.dataType.DATETIME:
3202
3095
  {
3203
- var [startDate] = DateUtils.parseDateRange(dh, inputString, formatter.timeZone);
3096
+ var _DateUtils$parseDateR = DateUtils.parseDateRange(dh, inputString, formatter.timeZone),
3097
+ _DateUtils$parseDateR2 = _slicedToArray(_DateUtils$parseDateR, 1),
3098
+ startDate = _DateUtils$parseDateR2[0];
3204
3099
  rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.DATETIME, startDate, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);
3205
3100
  break;
3206
3101
  }
@@ -3263,9 +3158,7 @@ class IrisGrid extends Component {
3263
3158
  * @param ranges The ranges to delete
3264
3159
  */
3265
3160
  deleteRanges(ranges) {
3266
- var {
3267
- model
3268
- } = this.props;
3161
+ var model = this.props.model;
3269
3162
  if (!isDeletableGridModel(model) || !model.isDeletable) {
3270
3163
  throw new Error('Model does not support deleting ranges');
3271
3164
  }
@@ -3279,13 +3172,9 @@ class IrisGrid extends Component {
3279
3172
  if (this.grid == null) {
3280
3173
  return;
3281
3174
  }
3282
- var {
3283
- isSelectingColumn
3284
- } = this.props;
3175
+ var isSelectingColumn = this.props.isSelectingColumn;
3285
3176
  if (isSelectingColumn) {
3286
- var {
3287
- columnAllowedCursor
3288
- } = this.props;
3177
+ var columnAllowedCursor = this.props.columnAllowedCursor;
3289
3178
  this.grid.setState({
3290
3179
  cursor: columnAllowedCursor
3291
3180
  });
@@ -3315,15 +3204,9 @@ class IrisGrid extends Component {
3315
3204
  if (!this.grid) {
3316
3205
  return;
3317
3206
  }
3318
- var {
3319
- state: irisGridState
3320
- } = this;
3321
- var {
3322
- state: gridState
3323
- } = this.grid;
3324
- var {
3325
- onStateChange
3326
- } = this.props;
3207
+ var irisGridState = this.state;
3208
+ var gridState = this.grid.state;
3209
+ var onStateChange = this.props.onStateChange;
3327
3210
  onStateChange(irisGridState, gridState);
3328
3211
  }
3329
3212
  handleOverflowClose() {
@@ -3346,22 +3229,19 @@ class IrisGrid extends Component {
3346
3229
  }
3347
3230
  getColumnBoundingRect() {
3348
3231
  var _this$gridWrapper2;
3349
- var {
3350
- metrics,
3351
- shownColumnTooltip
3352
- } = this.state;
3232
+ var _this$state17 = this.state,
3233
+ metrics = _this$state17.metrics,
3234
+ shownColumnTooltip = _this$state17.shownColumnTooltip;
3353
3235
  assertNotNull(metrics);
3354
3236
  assertNotNull(shownColumnTooltip);
3355
3237
  var gridRect = (_this$gridWrapper2 = this.gridWrapper) === null || _this$gridWrapper2 === void 0 ? void 0 : _this$gridWrapper2.getBoundingClientRect();
3356
3238
  var popperMargin = 20;
3357
3239
  assertNotNull(gridRect);
3358
- var {
3359
- columnHeaderHeight,
3360
- allColumnXs,
3361
- allColumnWidths,
3362
- width,
3363
- columnHeaderMaxDepth
3364
- } = metrics;
3240
+ var columnHeaderHeight = metrics.columnHeaderHeight,
3241
+ allColumnXs = metrics.allColumnXs,
3242
+ allColumnWidths = metrics.allColumnWidths,
3243
+ width = metrics.width,
3244
+ columnHeaderMaxDepth = metrics.columnHeaderMaxDepth;
3365
3245
  var columnX = allColumnXs.get(shownColumnTooltip);
3366
3246
  var columnWidth = allColumnWidths.get(shownColumnTooltip);
3367
3247
  assertNotNull(columnX);
@@ -3382,18 +3262,12 @@ class IrisGrid extends Component {
3382
3262
  };
3383
3263
  }
3384
3264
  handleGotoRowSelectedRowNumberSubmit() {
3385
- var {
3386
- gotoRow: rowNumber
3387
- } = this.state;
3265
+ var rowNumber = this.state.gotoRow;
3388
3266
  this.focusRowInGrid(rowNumber);
3389
3267
  }
3390
3268
  focusRowInGrid(rowNumber) {
3391
- var {
3392
- model
3393
- } = this.props;
3394
- var {
3395
- rowCount
3396
- } = model;
3269
+ var model = this.props.model;
3270
+ var rowCount = model.rowCount;
3397
3271
  this.setState({
3398
3272
  gotoRow: rowNumber
3399
3273
  });
@@ -3437,13 +3311,11 @@ class IrisGrid extends Component {
3437
3311
  this.focusRowInGrid(rowNumber);
3438
3312
  }
3439
3313
  getColumnTooltip(visibleIndex, metrics, model) {
3440
- var {
3441
- columnHeaderHeight,
3442
- columnHeaderMaxDepth,
3443
- allColumnXs,
3444
- allColumnWidths,
3445
- width
3446
- } = metrics;
3314
+ var columnHeaderHeight = metrics.columnHeaderHeight,
3315
+ columnHeaderMaxDepth = metrics.columnHeaderMaxDepth,
3316
+ allColumnXs = metrics.allColumnXs,
3317
+ allColumnWidths = metrics.allColumnWidths,
3318
+ width = metrics.width;
3447
3319
  var columnX = allColumnXs.get(visibleIndex);
3448
3320
  var columnWidth = allColumnWidths.get(visibleIndex);
3449
3321
  if (columnX == null || columnWidth == null) {
@@ -3526,14 +3398,11 @@ class IrisGrid extends Component {
3526
3398
  }
3527
3399
  handleGotoValueSelectedColumnNameChanged(columnName) {
3528
3400
  var _this$grid28;
3529
- var {
3530
- model
3531
- } = this.props;
3401
+ var model = this.props.model;
3532
3402
  var cursorRow = (_this$grid28 = this.grid) === null || _this$grid28 === void 0 ? void 0 : _this$grid28.state.cursorRow;
3533
- var {
3534
- gotoValueSelectedColumnName: prevColumnName,
3535
- gotoValueManuallyChanged
3536
- } = this.state;
3403
+ var _this$state18 = this.state,
3404
+ prevColumnName = _this$state18.gotoValueSelectedColumnName,
3405
+ gotoValueManuallyChanged = _this$state18.gotoValueManuallyChanged;
3537
3406
  if (cursorRow != null) {
3538
3407
  var index = model.getColumnIndexByName(columnName);
3539
3408
  var column = IrisGridUtils.getColumnByName(model.columns, columnName);
@@ -3572,9 +3441,7 @@ class IrisGrid extends Component {
3572
3441
  });
3573
3442
  }
3574
3443
  handleGotoValueSubmitted(isBackwards) {
3575
- var {
3576
- gotoValue
3577
- } = this.state;
3444
+ var gotoValue = this.state.gotoValue;
3578
3445
  this.seekRow(gotoValue, isBackwards);
3579
3446
  }
3580
3447
 
@@ -3601,15 +3468,11 @@ class IrisGrid extends Component {
3601
3468
  return null;
3602
3469
  }
3603
3470
  var debounceMs = Math.min(Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)), IrisGrid.maxDebounce);
3604
- var {
3605
- x,
3606
- y,
3607
- width: fieldWidth,
3608
- height: fieldHeight
3609
- } = filterBoxCoordinates;
3610
- var {
3611
- width
3612
- } = metrics;
3471
+ var x = filterBoxCoordinates.x,
3472
+ y = filterBoxCoordinates.y,
3473
+ fieldWidth = filterBoxCoordinates.width,
3474
+ fieldHeight = filterBoxCoordinates.height;
3475
+ var width = metrics.width;
3613
3476
  var style = {
3614
3477
  top: y,
3615
3478
  left: x,
@@ -3658,99 +3521,96 @@ class IrisGrid extends Component {
3658
3521
  _this7 = this,
3659
3522
  _this$grid30,
3660
3523
  _openOptions;
3661
- var {
3662
- children,
3663
- customFilters,
3664
- getDownloadWorker,
3665
- isSelectingColumn,
3666
- isStuckToBottom,
3667
- isStuckToRight,
3668
- model,
3669
- name,
3670
- onlyFetchVisibleColumns,
3671
- alwaysFetchColumns,
3672
- advancedSettings,
3673
- onAdvancedSettingsChange,
3674
- canDownloadCsv,
3675
- onCreateChart
3676
- } = this.props;
3677
- var {
3678
- metricCalculator,
3679
- metrics,
3680
- isFilterBarShown,
3681
- isSelectingPartition,
3682
- isMenuShown,
3683
- isReady,
3684
- copyOperation,
3685
- focusedFilterBarColumn,
3686
- loadingText,
3687
- loadingScrimProgress,
3688
- loadingSpinnerShown,
3689
- loadingCancelShown,
3690
- loadingBlocksGrid,
3691
- shownColumnTooltip,
3692
- hoverAdvancedFilter,
3693
- shownAdvancedFilter,
3694
- maximizedAdvancedFilter,
3695
- hoverSelectColumn,
3696
- quickFilters,
3697
- advancedFilters,
3698
- searchFilter,
3699
- selectDistinctColumns,
3700
- movedColumns,
3701
- movedRows,
3702
- formatter,
3703
- conditionalFormats,
3704
- conditionalFormatPreview,
3705
- conditionalFormatEditIndex,
3706
- columnAlignmentMap,
3707
- sorts,
3708
- reverse,
3709
- customColumns,
3710
- selectedRanges,
3711
- isTableDownloading,
3712
- tableDownloadStatus,
3713
- tableDownloadProgress,
3714
- tableDownloadEstimatedTime,
3715
- showSearchBar,
3716
- searchValue,
3717
- selectedSearchColumns,
3718
- invertSearchColumns,
3719
- aggregationSettings,
3720
- selectedAggregation,
3721
- rollupConfig,
3722
- openOptions,
3723
- pendingSavePromise,
3724
- pendingSaveError,
3725
- pendingRowCount,
3726
- pendingDataErrors,
3727
- pendingDataMap,
3728
- toastMessage,
3729
- frozenColumns,
3730
- columnHeaderGroups,
3731
- showOverflowModal,
3732
- showNoPastePermissionModal,
3733
- noPastePermissionError,
3734
- overflowText,
3735
- overflowButtonTooltipProps,
3736
- expandCellTooltipProps,
3737
- hoverTooltipProps,
3738
- isGotoShown,
3739
- gotoRow,
3740
- gotoRowError,
3741
- gotoValueError,
3742
- gotoValueSelectedColumnName,
3743
- gotoValue,
3744
- gotoValueSelectedFilter,
3745
- partitionConfig
3746
- } = this.state;
3524
+ var _this$props8 = this.props,
3525
+ children = _this$props8.children,
3526
+ customFilters = _this$props8.customFilters,
3527
+ getDownloadWorker = _this$props8.getDownloadWorker,
3528
+ isSelectingColumn = _this$props8.isSelectingColumn,
3529
+ isStuckToBottom = _this$props8.isStuckToBottom,
3530
+ isStuckToRight = _this$props8.isStuckToRight,
3531
+ model = _this$props8.model,
3532
+ name = _this$props8.name,
3533
+ onlyFetchVisibleColumns = _this$props8.onlyFetchVisibleColumns,
3534
+ alwaysFetchColumns = _this$props8.alwaysFetchColumns,
3535
+ advancedSettings = _this$props8.advancedSettings,
3536
+ onAdvancedSettingsChange = _this$props8.onAdvancedSettingsChange,
3537
+ canDownloadCsv = _this$props8.canDownloadCsv,
3538
+ onCreateChart = _this$props8.onCreateChart,
3539
+ transformTableOptions = _this$props8.transformTableOptions;
3540
+ var _this$state19 = this.state,
3541
+ metricCalculator = _this$state19.metricCalculator,
3542
+ metrics = _this$state19.metrics,
3543
+ isFilterBarShown = _this$state19.isFilterBarShown,
3544
+ isSelectingPartition = _this$state19.isSelectingPartition,
3545
+ isMenuShown = _this$state19.isMenuShown,
3546
+ isReady = _this$state19.isReady,
3547
+ copyOperation = _this$state19.copyOperation,
3548
+ focusedFilterBarColumn = _this$state19.focusedFilterBarColumn,
3549
+ loadingText = _this$state19.loadingText,
3550
+ loadingScrimProgress = _this$state19.loadingScrimProgress,
3551
+ loadingSpinnerShown = _this$state19.loadingSpinnerShown,
3552
+ loadingCancelShown = _this$state19.loadingCancelShown,
3553
+ loadingBlocksGrid = _this$state19.loadingBlocksGrid,
3554
+ shownColumnTooltip = _this$state19.shownColumnTooltip,
3555
+ hoverAdvancedFilter = _this$state19.hoverAdvancedFilter,
3556
+ shownAdvancedFilter = _this$state19.shownAdvancedFilter,
3557
+ maximizedAdvancedFilter = _this$state19.maximizedAdvancedFilter,
3558
+ hoverSelectColumn = _this$state19.hoverSelectColumn,
3559
+ quickFilters = _this$state19.quickFilters,
3560
+ advancedFilters = _this$state19.advancedFilters,
3561
+ searchFilter = _this$state19.searchFilter,
3562
+ selectDistinctColumns = _this$state19.selectDistinctColumns,
3563
+ movedColumns = _this$state19.movedColumns,
3564
+ movedRows = _this$state19.movedRows,
3565
+ formatter = _this$state19.formatter,
3566
+ conditionalFormats = _this$state19.conditionalFormats,
3567
+ conditionalFormatPreview = _this$state19.conditionalFormatPreview,
3568
+ conditionalFormatEditIndex = _this$state19.conditionalFormatEditIndex,
3569
+ columnAlignmentMap = _this$state19.columnAlignmentMap,
3570
+ sorts = _this$state19.sorts,
3571
+ reverse = _this$state19.reverse,
3572
+ customColumns = _this$state19.customColumns,
3573
+ selectedRanges = _this$state19.selectedRanges,
3574
+ isTableDownloading = _this$state19.isTableDownloading,
3575
+ tableDownloadStatus = _this$state19.tableDownloadStatus,
3576
+ tableDownloadProgress = _this$state19.tableDownloadProgress,
3577
+ tableDownloadEstimatedTime = _this$state19.tableDownloadEstimatedTime,
3578
+ showSearchBar = _this$state19.showSearchBar,
3579
+ searchValue = _this$state19.searchValue,
3580
+ selectedSearchColumns = _this$state19.selectedSearchColumns,
3581
+ invertSearchColumns = _this$state19.invertSearchColumns,
3582
+ aggregationSettings = _this$state19.aggregationSettings,
3583
+ selectedAggregation = _this$state19.selectedAggregation,
3584
+ rollupConfig = _this$state19.rollupConfig,
3585
+ openOptions = _this$state19.openOptions,
3586
+ pendingSavePromise = _this$state19.pendingSavePromise,
3587
+ pendingSaveError = _this$state19.pendingSaveError,
3588
+ pendingRowCount = _this$state19.pendingRowCount,
3589
+ pendingDataErrors = _this$state19.pendingDataErrors,
3590
+ pendingDataMap = _this$state19.pendingDataMap,
3591
+ toastMessage = _this$state19.toastMessage,
3592
+ frozenColumns = _this$state19.frozenColumns,
3593
+ columnHeaderGroups = _this$state19.columnHeaderGroups,
3594
+ showOverflowModal = _this$state19.showOverflowModal,
3595
+ showNoPastePermissionModal = _this$state19.showNoPastePermissionModal,
3596
+ noPastePermissionError = _this$state19.noPastePermissionError,
3597
+ overflowText = _this$state19.overflowText,
3598
+ overflowButtonTooltipProps = _this$state19.overflowButtonTooltipProps,
3599
+ expandCellTooltipProps = _this$state19.expandCellTooltipProps,
3600
+ hoverTooltipProps = _this$state19.hoverTooltipProps,
3601
+ isGotoShown = _this$state19.isGotoShown,
3602
+ gotoRow = _this$state19.gotoRow,
3603
+ gotoRowError = _this$state19.gotoRowError,
3604
+ gotoValueError = _this$state19.gotoValueError,
3605
+ gotoValueSelectedColumnName = _this$state19.gotoValueSelectedColumnName,
3606
+ gotoValue = _this$state19.gotoValue,
3607
+ gotoValueSelectedFilter = _this$state19.gotoValueSelectedFilter,
3608
+ partitionConfig = _this$state19.partitionConfig;
3747
3609
  if (!isReady) {
3748
3610
  return null;
3749
3611
  }
3750
3612
  var theme = this.getTheme();
3751
- var {
3752
- columnHeaderHeight: singleColumnHeaderHeight
3753
- } = theme;
3613
+ var singleColumnHeaderHeight = theme.columnHeaderHeight;
3754
3614
  var filter = this.getCachedFilter(customFilters, quickFilters, advancedFilters, searchFilter);
3755
3615
  var userColumnWidths = metricCalculator.getUserColumnWidths();
3756
3616
  var stateOverride = this.getCachedStateOverride(model, theme, hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, rollupConfig, isMenuShown);
@@ -3807,9 +3667,7 @@ class IrisGrid extends Component {
3807
3667
  var metricState = this.getMetricState();
3808
3668
 
3809
3669
  // Advanced Filter buttons
3810
- var {
3811
- visibleColumns
3812
- } = metrics;
3670
+ var visibleColumns = metrics.visibleColumns;
3813
3671
  var _loop2 = function _loop2() {
3814
3672
  var columnIndex = visibleColumns[i];
3815
3673
  var modelColumn = _this7.getModelColumn(columnIndex);
@@ -3817,10 +3675,8 @@ class IrisGrid extends Component {
3817
3675
  var isFilterable = model.isFilterable(modelColumn);
3818
3676
  var buttonCoordinates = isFilterable && metricState ? metricCalculator.getAdvancedFilterButtonCoordinates(columnIndex, metricState, metrics) : null;
3819
3677
  if (buttonCoordinates != null) {
3820
- var {
3821
- x,
3822
- y
3823
- } = buttonCoordinates;
3678
+ var x = buttonCoordinates.x,
3679
+ y = buttonCoordinates.y;
3824
3680
  var style = {
3825
3681
  position: 'absolute',
3826
3682
  top: y,
@@ -3881,13 +3737,11 @@ class IrisGrid extends Component {
3881
3737
  }
3882
3738
  var advancedFilterMenus = [];
3883
3739
  if (metrics) {
3884
- var {
3885
- gridX,
3886
- visibleColumns: _visibleColumns,
3887
- allColumnXs,
3888
- allColumnWidths,
3889
- columnHeaderHeight
3890
- } = metrics;
3740
+ var gridX = metrics.gridX,
3741
+ _visibleColumns = metrics.visibleColumns,
3742
+ allColumnXs = metrics.allColumnXs,
3743
+ allColumnWidths = metrics.allColumnWidths,
3744
+ columnHeaderHeight = metrics.columnHeaderHeight;
3891
3745
  var _loop3 = function _loop3() {
3892
3746
  var columnIndex = _visibleColumns[_i4];
3893
3747
  var columnX = allColumnXs.get(columnIndex);
@@ -3918,9 +3772,8 @@ class IrisGrid extends Component {
3918
3772
  return 1; // continue
3919
3773
  }
3920
3774
  var advancedFilter = advancedFilters.get(modelColumn);
3921
- var {
3922
- options: advancedFilterOptions
3923
- } = advancedFilter || {};
3775
+ var _ref31 = advancedFilter || {},
3776
+ advancedFilterOptions = _ref31.options;
3924
3777
  var sort = TableUtils.getSortForColumn(model.sort, column.name);
3925
3778
  var sortDirection = sort ? sort.direction : null;
3926
3779
  if (!isSortDirection(sortDirection)) {
@@ -3953,7 +3806,8 @@ class IrisGrid extends Component {
3953
3806
  if (_loop3()) continue;
3954
3807
  }
3955
3808
  }
3956
- var optionItems = this.getCachedOptionItems(onCreateChart !== undefined && model.isChartBuilderAvailable, model.isCustomColumnsAvailable, model.isFormatColumnsAvailable, model.isOrganizeColumnsAvailable, model.isRollupAvailable, model.isTotalsAvailable || isRollup, model.isSelectDistinctAvailable, model.isExportAvailable, this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, this.isTableSearchAvailable(), isGotoShown, advancedSettings.size > 0);
3809
+ var defaultOptionItems = this.getCachedOptionItems(onCreateChart !== undefined && model.isChartBuilderAvailable, model.isCustomColumnsAvailable, model.isFormatColumnsAvailable, model.isOrganizeColumnsAvailable, model.isRollupAvailable, model.isTotalsAvailable || isRollup, model.isSelectDistinctAvailable, model.isExportAvailable, this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, this.isTableSearchAvailable(), isGotoShown, advancedSettings.size > 0);
3810
+ var optionItems = this.getCachedTransformedOptionItems(defaultOptionItems, transformTableOptions);
3957
3811
  var hiddenColumns = this.getCachedHiddenColumns(metricCalculator, userColumnWidths);
3958
3812
  var openOptionsStack = openOptions.map(option => {
3959
3813
  switch (option.type) {
@@ -4048,7 +3902,25 @@ class IrisGrid extends Component {
4048
3902
  onChange: onAdvancedSettingsChange
4049
3903
  });
4050
3904
  default:
4051
- throw Error("Unexpected option type ".concat(option.type));
3905
+ {
3906
+ // Plugin-contributed items render their own page via
3907
+ // `configPage`. The page is isolated inside an error
3908
+ // boundary so a throwing plugin doesn't tear down the
3909
+ // entire grid subtree. Built-in items that hit the default
3910
+ // case indicate a programmer error (unhandled enum case).
3911
+ var PluginPage = option.configPage;
3912
+ if (PluginPage == null) {
3913
+ throw Error("Unexpected option type ".concat(option.type));
3914
+ }
3915
+ return /*#__PURE__*/_jsx(PluginTableOptionsErrorBoundary, {
3916
+ itemType: String(option.type),
3917
+ children: /*#__PURE__*/_jsx(PluginPage, {
3918
+ model: model,
3919
+ viewState: this.getCachedViewState(this.getCachedHiddenColumnNames(hiddenColumns, model.columns)),
3920
+ onBack: this.handleMenuBack
3921
+ })
3922
+ }, String(option.type));
3923
+ }
4052
3924
  }
4053
3925
  });
4054
3926
  return /*#__PURE__*/_jsxs("div", {