@deephaven/iris-grid 0.38.1-beta.5 → 0.38.1

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 (177) hide show
  1. package/README.md +2 -4
  2. package/dist/AdvancedFilterCreator.d.ts +2 -3
  3. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  4. package/dist/AdvancedFilterCreator.js +4 -8
  5. package/dist/AdvancedFilterCreator.js.map +1 -1
  6. package/dist/AdvancedFilterCreatorFilterItem.d.ts +3 -4
  7. package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
  8. package/dist/AdvancedFilterCreatorFilterItem.js +4 -5
  9. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  10. package/dist/AdvancedFilterCreatorSelectValue.d.ts +2 -4
  11. package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
  12. package/dist/AdvancedFilterCreatorSelectValue.js +3 -11
  13. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  14. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +1 -3
  15. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  16. package/dist/AdvancedFilterCreatorSelectValueList.js +5 -7
  17. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  18. package/dist/ColumnStatistics.d.ts +1 -1
  19. package/dist/ColumnStatistics.d.ts.map +1 -1
  20. package/dist/ColumnStatistics.js.map +1 -1
  21. package/dist/CommonTypes.d.ts +1 -1
  22. package/dist/CommonTypes.d.ts.map +1 -1
  23. package/dist/CommonTypes.js.map +1 -1
  24. package/dist/CrossColumnSearch.d.ts +2 -2
  25. package/dist/CrossColumnSearch.d.ts.map +1 -1
  26. package/dist/CrossColumnSearch.js +2 -1
  27. package/dist/CrossColumnSearch.js.map +1 -1
  28. package/dist/GotoRow.d.ts +1 -3
  29. package/dist/GotoRow.d.ts.map +1 -1
  30. package/dist/GotoRow.js +0 -1
  31. package/dist/GotoRow.js.map +1 -1
  32. package/dist/IrisGrid.css +0 -3
  33. package/dist/IrisGrid.css.map +1 -1
  34. package/dist/IrisGrid.d.ts +6 -8
  35. package/dist/IrisGrid.d.ts.map +1 -1
  36. package/dist/IrisGrid.js +33 -46
  37. package/dist/IrisGrid.js.map +1 -1
  38. package/dist/IrisGridCopyHandler.js.map +1 -1
  39. package/dist/IrisGridMetricCalculator.d.ts +1 -1
  40. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  41. package/dist/IrisGridMetricCalculator.js.map +1 -1
  42. package/dist/IrisGridModel.d.ts +1 -1
  43. package/dist/IrisGridModel.d.ts.map +1 -1
  44. package/dist/IrisGridModel.js.map +1 -1
  45. package/dist/IrisGridModelFactory.d.ts +2 -2
  46. package/dist/IrisGridModelFactory.d.ts.map +1 -1
  47. package/dist/IrisGridModelFactory.js +3 -3
  48. package/dist/IrisGridModelFactory.js.map +1 -1
  49. package/dist/IrisGridModelUpdater.d.ts +2 -3
  50. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  51. package/dist/IrisGridModelUpdater.js +2 -2
  52. package/dist/IrisGridModelUpdater.js.map +1 -1
  53. package/dist/IrisGridPartitionSelector.d.ts +1 -2
  54. package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
  55. package/dist/IrisGridPartitionSelector.js +0 -2
  56. package/dist/IrisGridPartitionSelector.js.map +1 -1
  57. package/dist/IrisGridProxyModel.d.ts +2 -3
  58. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  59. package/dist/IrisGridProxyModel.js +9 -11
  60. package/dist/IrisGridProxyModel.js.map +1 -1
  61. package/dist/IrisGridRenderer.d.ts +27 -19
  62. package/dist/IrisGridRenderer.d.ts.map +1 -1
  63. package/dist/IrisGridRenderer.js +205 -64
  64. package/dist/IrisGridRenderer.js.map +1 -1
  65. package/dist/IrisGridTableModel.d.ts +2 -2
  66. package/dist/IrisGridTableModel.d.ts.map +1 -1
  67. package/dist/IrisGridTableModel.js +6 -6
  68. package/dist/IrisGridTableModel.js.map +1 -1
  69. package/dist/IrisGridTableModelTemplate.d.ts +3 -8
  70. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  71. package/dist/IrisGridTableModelTemplate.js +15 -36
  72. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  73. package/dist/IrisGridTestUtils.d.ts +3 -2
  74. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  75. package/dist/IrisGridTestUtils.js +6 -5
  76. package/dist/IrisGridTestUtils.js.map +1 -1
  77. package/dist/IrisGridTheme.d.ts.map +1 -1
  78. package/dist/IrisGridTheme.js +1 -4
  79. package/dist/IrisGridTheme.js.map +1 -1
  80. package/dist/IrisGridTheme.module.css +0 -3
  81. package/dist/IrisGridTheme.module.css.map +1 -1
  82. package/dist/IrisGridTreeTableModel.d.ts +1 -1
  83. package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
  84. package/dist/IrisGridTreeTableModel.js.map +1 -1
  85. package/dist/IrisGridUtils.d.ts +85 -88
  86. package/dist/IrisGridUtils.d.ts.map +1 -1
  87. package/dist/IrisGridUtils.js +558 -569
  88. package/dist/IrisGridUtils.js.map +1 -1
  89. package/dist/PartitionSelectorSearch.d.ts +1 -2
  90. package/dist/PartitionSelectorSearch.d.ts.map +1 -1
  91. package/dist/PartitionSelectorSearch.js +1 -3
  92. package/dist/PartitionSelectorSearch.js.map +1 -1
  93. package/dist/TableViewportUpdater.d.ts +1 -1
  94. package/dist/TableViewportUpdater.d.ts.map +1 -1
  95. package/dist/TableViewportUpdater.js.map +1 -1
  96. package/dist/TreeTableViewportUpdater.d.ts +1 -2
  97. package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
  98. package/dist/TreeTableViewportUpdater.js +1 -1
  99. package/dist/TreeTableViewportUpdater.js.map +1 -1
  100. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  101. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +9 -10
  102. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  103. package/dist/mousehandlers/IrisGridContextMenuHandler.js +28 -41
  104. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  105. package/dist/mousehandlers/IrisGridTokenMouseHandler.d.ts.map +1 -1
  106. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +3 -18
  107. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
  108. package/dist/sidebar/ChartBuilder.d.ts +11 -12
  109. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  110. package/dist/sidebar/ChartBuilder.js +81 -98
  111. package/dist/sidebar/ChartBuilder.js.map +1 -1
  112. package/dist/sidebar/RollupRows.d.ts +1 -1
  113. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  114. package/dist/sidebar/RollupRows.js.map +1 -1
  115. package/dist/sidebar/SelectDistinctBuilder.d.ts +1 -1
  116. package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
  117. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  118. package/dist/sidebar/TableCsvExporter.d.ts +2 -3
  119. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  120. package/dist/sidebar/TableCsvExporter.js +3 -3
  121. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  122. package/dist/sidebar/TableSaver.d.ts +1 -2
  123. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  124. package/dist/sidebar/TableSaver.js +1 -4
  125. package/dist/sidebar/TableSaver.js.map +1 -1
  126. package/dist/sidebar/aggregations/AggregationEdit.d.ts +1 -1
  127. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  128. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  129. package/dist/sidebar/aggregations/AggregationUtils.d.ts +1 -1
  130. package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
  131. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  132. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +0 -2
  133. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  134. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +0 -2
  135. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  136. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +0 -2
  137. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  138. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -3
  139. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  140. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  141. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +0 -2
  142. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  143. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts +2 -2
  144. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts.map +1 -1
  145. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +1 -1
  146. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  147. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +3 -3
  148. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  149. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +3 -3
  150. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  151. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +0 -2
  152. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  153. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +0 -2
  154. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  155. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +1 -1
  156. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
  157. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  158. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +1 -1
  159. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
  160. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  161. package/package.json +15 -16
  162. package/dist/IrisGridCellRendererUtils.d.ts +0 -7
  163. package/dist/IrisGridCellRendererUtils.d.ts.map +0 -1
  164. package/dist/IrisGridCellRendererUtils.js +0 -20
  165. package/dist/IrisGridCellRendererUtils.js.map +0 -1
  166. package/dist/IrisGridDataBarCellRenderer.d.ts +0 -7
  167. package/dist/IrisGridDataBarCellRenderer.d.ts.map +0 -1
  168. package/dist/IrisGridDataBarCellRenderer.js +0 -10
  169. package/dist/IrisGridDataBarCellRenderer.js.map +0 -1
  170. package/dist/IrisGridIcons.d.ts +0 -4
  171. package/dist/IrisGridIcons.d.ts.map +0 -1
  172. package/dist/IrisGridIcons.js +0 -25
  173. package/dist/IrisGridIcons.js.map +0 -1
  174. package/dist/IrisGridTextCellRenderer.d.ts +0 -20
  175. package/dist/IrisGridTextCellRenderer.d.ts.map +0 -1
  176. package/dist/IrisGridTextCellRenderer.js +0 -139
  177. package/dist/IrisGridTextCellRenderer.js.map +0 -1
@@ -1,13 +1,14 @@
1
1
  var _excluded = ["selectedValues"],
2
2
  _excluded2 = ["selectedValues"];
3
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
4
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
5
3
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
4
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
5
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
6
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
9
7
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
8
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
9
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
10
10
  import { GridUtils } from '@deephaven/grid';
11
+ import dh from '@deephaven/jsapi-shim';
11
12
  import { DateUtils, TableUtils } from '@deephaven/jsapi-utils';
12
13
  import Log from '@deephaven/log';
13
14
  import { assertNotNull, EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';
@@ -116,6 +117,152 @@ class IrisGridUtils {
116
117
  };
117
118
  }
118
119
 
120
+ /**
121
+ * Exports the state from IrisGrid to a JSON stringifiable object
122
+ * @param model The table model to export the state for
123
+ * @param irisGridState The current state of the IrisGrid
124
+ */
125
+ static dehydrateIrisGridState(model, irisGridState) {
126
+ var {
127
+ aggregationSettings = {
128
+ aggregations: EMPTY_ARRAY,
129
+ showOnTop: false
130
+ },
131
+ advancedFilters,
132
+ customColumnFormatMap,
133
+ isFilterBarShown,
134
+ metrics,
135
+ quickFilters,
136
+ customColumns,
137
+ conditionalFormats = EMPTY_ARRAY,
138
+ reverseType,
139
+ rollupConfig = undefined,
140
+ showSearchBar,
141
+ searchValue,
142
+ selectDistinctColumns = EMPTY_ARRAY,
143
+ selectedSearchColumns,
144
+ sorts,
145
+ invertSearchColumns,
146
+ pendingDataMap = EMPTY_MAP,
147
+ frozenColumns,
148
+ columnHeaderGroups
149
+ } = irisGridState;
150
+ assertNotNull(metrics);
151
+ var {
152
+ userColumnWidths,
153
+ userRowHeights
154
+ } = metrics;
155
+ var {
156
+ columns
157
+ } = model;
158
+ return {
159
+ advancedFilters: IrisGridUtils.dehydrateAdvancedFilters(columns, advancedFilters),
160
+ aggregationSettings,
161
+ customColumnFormatMap: [...customColumnFormatMap],
162
+ isFilterBarShown,
163
+ quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),
164
+ sorts: IrisGridUtils.dehydrateSort(sorts),
165
+ userColumnWidths: [...userColumnWidths].filter(_ref6 => {
166
+ var [columnIndex] = _ref6;
167
+ return columnIndex != null && columnIndex >= 0 && columnIndex < columns.length;
168
+ }).map(_ref7 => {
169
+ var [columnIndex, width] = _ref7;
170
+ return [columns[columnIndex].name, width];
171
+ }),
172
+ userRowHeights: [...userRowHeights],
173
+ customColumns: [...customColumns],
174
+ conditionalFormats: [...conditionalFormats],
175
+ reverseType,
176
+ rollupConfig,
177
+ showSearchBar,
178
+ searchValue,
179
+ selectDistinctColumns: [...selectDistinctColumns],
180
+ selectedSearchColumns,
181
+ invertSearchColumns,
182
+ pendingDataMap: IrisGridUtils.dehydratePendingDataMap(columns, pendingDataMap),
183
+ frozenColumns,
184
+ columnHeaderGroups: columnHeaderGroups === null || columnHeaderGroups === void 0 ? void 0 : columnHeaderGroups.map(item => ({
185
+ name: item.name,
186
+ children: item.children,
187
+ color: item.color
188
+ }))
189
+ };
190
+ }
191
+
192
+ /**
193
+ * Import a state for IrisGrid that was exported with {{@link dehydrateIrisGridState}}
194
+ * @param model The table model to import the state with
195
+ * @param irisGridState The saved IrisGrid state
196
+ */
197
+ static hydrateIrisGridState(model, irisGridState) {
198
+ var _ref11, _model$layoutHints;
199
+ var {
200
+ advancedFilters,
201
+ aggregationSettings = {
202
+ aggregations: [],
203
+ showOnTop: false
204
+ },
205
+ customColumnFormatMap,
206
+ isFilterBarShown,
207
+ quickFilters,
208
+ sorts,
209
+ customColumns,
210
+ conditionalFormats,
211
+ userColumnWidths,
212
+ userRowHeights,
213
+ reverseType,
214
+ rollupConfig = undefined,
215
+ showSearchBar,
216
+ searchValue,
217
+ selectDistinctColumns,
218
+ selectedSearchColumns,
219
+ invertSearchColumns = true,
220
+ pendingDataMap = [],
221
+ frozenColumns,
222
+ columnHeaderGroups
223
+ } = irisGridState;
224
+ var {
225
+ columns,
226
+ formatter
227
+ } = model;
228
+ return {
229
+ advancedFilters: IrisGridUtils.hydrateAdvancedFilters(columns, advancedFilters, formatter.timeZone),
230
+ aggregationSettings,
231
+ customColumnFormatMap: new Map(customColumnFormatMap),
232
+ isFilterBarShown,
233
+ quickFilters: IrisGridUtils.hydrateQuickFilters(columns, quickFilters, formatter.timeZone),
234
+ sorts: IrisGridUtils.hydrateSort(columns, sorts),
235
+ userColumnWidths: new Map(userColumnWidths.map(_ref8 => {
236
+ var [column, width] = _ref8;
237
+ if (typeof column === 'string' || column instanceof String) {
238
+ return [columns.findIndex(_ref9 => {
239
+ var {
240
+ name
241
+ } = _ref9;
242
+ return name === column;
243
+ }), width];
244
+ }
245
+ return [column, width];
246
+ }).filter(_ref10 => {
247
+ var [column] = _ref10;
248
+ return column != null && column >= 0 && column < columns.length;
249
+ })),
250
+ customColumns,
251
+ conditionalFormats,
252
+ userRowHeights: new Map(userRowHeights),
253
+ reverseType,
254
+ rollupConfig,
255
+ showSearchBar,
256
+ searchValue,
257
+ selectDistinctColumns,
258
+ selectedSearchColumns,
259
+ invertSearchColumns,
260
+ pendingDataMap: IrisGridUtils.hydratePendingDataMap(columns, pendingDataMap),
261
+ frozenColumns,
262
+ columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(model, (_ref11 = columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : (_model$layoutHints = model.layoutHints) === null || _model$layoutHints === void 0 ? void 0 : _model$layoutHints.columnGroups) !== null && _ref11 !== void 0 ? _ref11 : []).groups
263
+ };
264
+ }
265
+
119
266
  /**
120
267
  * Export the IrisGridPanel state.
121
268
  * @param model The table model the state is being dehydrated with
@@ -167,8 +314,8 @@ class IrisGridUtils {
167
314
  * @returns The dehydrated quick filters
168
315
  */
169
316
  static dehydrateQuickFilters(quickFilters) {
170
- return [...quickFilters].map(_ref6 => {
171
- var [columnIndex, quickFilter] = _ref6;
317
+ return [...quickFilters].map(_ref12 => {
318
+ var [columnIndex, quickFilter] = _ref12;
172
319
  var {
173
320
  text
174
321
  } = quickFilter;
@@ -177,107 +324,387 @@ class IrisGridUtils {
177
324
  }];
178
325
  });
179
326
  }
180
- static dehydrateLong(value) {
181
- return value != null ? "".concat(value) : null;
182
- }
183
327
 
184
328
  /**
185
- * Export the sorts from the provided table sorts to JSON stringifiable object
186
- * @param sorts The table sorts
187
- * @returns The dehydrated sorts
329
+ * Import the saved quick filters to apply to the columns. Does not actually apply the filters.
330
+ * @param columns The columns the filters will be applied to
331
+ * @param savedQuickFilters Exported quick filters definitions
332
+ * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York
333
+ * @returns The quick filters to apply to the columns
188
334
  */
189
- static dehydrateSort(sorts) {
190
- return sorts.map(sort => {
335
+ static hydrateQuickFilters(columns, savedQuickFilters, timeZone) {
336
+ var importedFilters = savedQuickFilters.map(_ref13 => {
337
+ var [columnIndex, quickFilter] = _ref13;
191
338
  var {
192
- column,
193
- isAbs,
194
- direction
195
- } = sort;
196
- return {
197
- column: column.name,
198
- isAbs,
199
- direction
200
- };
339
+ text
340
+ } = quickFilter;
341
+ var filter = null;
342
+ try {
343
+ var column = IrisGridUtils.getColumn(columns, columnIndex);
344
+ if (column != null) {
345
+ filter = TableUtils.makeQuickFilter(column, text, timeZone);
346
+ }
347
+ } catch (error) {
348
+ log.error('hydrateQuickFilters error with', text, error);
349
+ }
350
+ return [columnIndex, {
351
+ text,
352
+ filter
353
+ }];
201
354
  });
355
+ return new Map(importedFilters);
202
356
  }
203
357
 
204
358
  /**
205
- * Pulls just the table settings from the panel state, eg. filters/sorts
206
- * @param panelState The dehydrated panel state
207
- * @returns A dehydrated table settings object, { partition, partitionColumn, advancedFilters, quickFilters, sorts }
359
+ * Export the advanced filters from the provided columns to JSON striginfiable object
360
+ * @param columns The columns for the filters
361
+ * @param advancedFilters The advanced filters to dehydrate
362
+ * @returns The dehydrated advanced filters
208
363
  */
209
- static extractTableSettings(panelState) {
210
- var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
211
- var {
212
- irisGridPanelState,
213
- irisGridState
214
- } = panelState;
215
- var {
216
- partitionColumn,
217
- partition
218
- } = irisGridPanelState;
219
- var {
220
- advancedFilters,
221
- quickFilters,
222
- sorts
223
- } = irisGridState;
224
- return {
225
- advancedFilters,
226
- inputFilters,
227
- partition,
228
- partitionColumn,
229
- quickFilters,
230
- sorts
231
- };
232
- }
233
- static getInputFiltersForColumns(columns) {
234
- var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
235
- return inputFilters.filter(_ref7 => {
236
- var {
237
- name,
238
- type
239
- } = _ref7;
240
- return columns.find(_ref8 => {
241
- var {
242
- name: columnName,
243
- type: columnType
244
- } = _ref8;
245
- return columnName === name && columnType === type;
246
- });
364
+ static dehydrateAdvancedFilters(columns, advancedFilters) {
365
+ return [...advancedFilters].map(_ref14 => {
366
+ var [columnIndex, advancedFilter] = _ref14;
367
+ var column = IrisGridUtils.getColumn(columns, columnIndex);
368
+ assertNotNull(column);
369
+ var options = IrisGridUtils.dehydrateAdvancedFilterOptions(column, advancedFilter.options);
370
+ return [columnIndex, {
371
+ options
372
+ }];
247
373
  });
248
374
  }
249
- static getFiltersFromFilterMap(filterMap) {
250
- var filters = [];
251
- var keys = Array.from(filterMap.keys());
252
- for (var i = 0; i < keys.length; i += 1) {
253
- var key = keys[i];
254
- var item = filterMap.get(key);
255
- if ((item === null || item === void 0 ? void 0 : item.filter) != null) {
256
- filters.push(item.filter);
257
- }
258
- }
259
- return filters;
260
- }
261
375
 
262
376
  /**
263
- * Get array of hidden column indexes
264
- * @param userColumnWidths Map of user column widths
265
- * @returns Array of hidden column indexes
377
+ * Import the saved advanced filters to apply to the columns. Does not actually apply the filters.
378
+ * @param columns The columns the filters will be applied to
379
+ * @param savedAdvancedFilters Exported advanced filters definitions
380
+ * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York
381
+ * @returns The advanced filters to apply to the columns
266
382
  */
267
- static getHiddenColumns(userColumnWidths) {
268
- return [...userColumnWidths.entries()].filter(_ref9 => {
269
- var [, value] = _ref9;
270
- return value === 0;
271
- }).map(_ref10 => {
272
- var [key] = _ref10;
273
- return key;
383
+ static hydrateAdvancedFilters(columns, savedAdvancedFilters, timeZone) {
384
+ var importedFilters = savedAdvancedFilters.map(_ref15 => {
385
+ var [columnIndex, advancedFilter] = _ref15;
386
+ var column = IrisGridUtils.getColumn(columns, columnIndex);
387
+ assertNotNull(column);
388
+ var options = IrisGridUtils.hydrateAdvancedFilterOptions(column, advancedFilter.options);
389
+ var filter = null;
390
+ try {
391
+ var columnRetrieved = IrisGridUtils.getColumn(columns, columnIndex);
392
+ if (columnRetrieved != null) {
393
+ filter = TableUtils.makeAdvancedFilter(column, options, timeZone);
394
+ }
395
+ } catch (error) {
396
+ log.error('hydrateAdvancedFilters error with', options, error);
397
+ }
398
+ return [columnIndex, {
399
+ options,
400
+ filter
401
+ }];
274
402
  });
403
+ return new Map(importedFilters);
275
404
  }
276
- static parseCustomColumnNames(customColumns) {
277
- return customColumns.map(customColumn => customColumn.split('=')[0]);
278
- }
279
- static getRemovedCustomColumnNames(oldCustomColumns, customColumns) {
280
- var oldCustomColumnsNames = IrisGridUtils.parseCustomColumnNames(oldCustomColumns);
405
+ static dehydrateAdvancedFilterOptions(column, options) {
406
+ var {
407
+ selectedValues
408
+ } = options,
409
+ otherOptions = _objectWithoutProperties(options, _excluded);
410
+ return _objectSpread({
411
+ selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => IrisGridUtils.dehydrateValue(value, column === null || column === void 0 ? void 0 : column.type))
412
+ }, otherOptions);
413
+ }
414
+ static hydrateAdvancedFilterOptions(column, options) {
415
+ var {
416
+ selectedValues
417
+ } = options,
418
+ otherOptions = _objectWithoutProperties(options, _excluded2);
419
+ return _objectSpread({
420
+ selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => IrisGridUtils.hydrateValue(value, column === null || column === void 0 ? void 0 : column.type))
421
+ }, otherOptions);
422
+ }
423
+ static dehydratePendingDataMap(columns, pendingDataMap) {
424
+ return [...pendingDataMap].map(_ref16 => {
425
+ var [rowIndex, {
426
+ data
427
+ }] = _ref16;
428
+ return [rowIndex, {
429
+ data: [...data].map(_ref17 => {
430
+ var [c, value] = _ref17;
431
+ return [columns[c].name, IrisGridUtils.dehydrateValue(value, columns[c].type)];
432
+ })
433
+ }];
434
+ });
435
+ }
436
+ static hydratePendingDataMap(columns, pendingDataMap) {
437
+ var columnMap = new Map();
438
+ var getColumnIndex = columnName => {
439
+ if (!columnMap.has(columnName)) {
440
+ columnMap.set(columnName, columns.findIndex(_ref18 => {
441
+ var {
442
+ name
443
+ } = _ref18;
444
+ return name === columnName;
445
+ }));
446
+ }
447
+ return columnMap.get(columnName);
448
+ };
449
+ return new Map(pendingDataMap.map(_ref19 => {
450
+ var [rowIndex, {
451
+ data
452
+ }] = _ref19;
453
+ return [rowIndex, {
454
+ data: new Map(data.map(_ref20 => {
455
+ var _getColumnIndex;
456
+ var [columnName, value] = _ref20;
457
+ var index = getColumnIndex(columnName);
458
+ assertNotNull(index);
459
+ return [(_getColumnIndex = getColumnIndex(columnName)) !== null && _getColumnIndex !== void 0 ? _getColumnIndex : null, IrisGridUtils.hydrateValue(value, columns[index].type)];
460
+ }))
461
+ }];
462
+ }));
463
+ }
464
+
465
+ /**
466
+ * Dehydrates/serializes a value for storage.
467
+ * @param value The value to dehydrate
468
+ * @param columnType The column type
469
+ */
470
+ static dehydrateValue(value, columnType) {
471
+ if (TableUtils.isDateType(columnType)) {
472
+ return IrisGridUtils.dehydrateDateTime(value);
473
+ }
474
+ if (TableUtils.isLongType(columnType)) {
475
+ return IrisGridUtils.dehydrateLong(value);
476
+ }
477
+ return value;
478
+ }
479
+
480
+ /**
481
+ * Hydrate a value from it's serialized state
482
+ * @param value The dehydrated value that needs to be hydrated
483
+ * @param columnType The type of column
484
+ */
485
+ static hydrateValue(value, columnType) {
486
+ if (TableUtils.isDateType(columnType)) {
487
+ return IrisGridUtils.hydrateDateTime(value);
488
+ }
489
+ if (TableUtils.isLongType(columnType)) {
490
+ return IrisGridUtils.hydrateLong(value);
491
+ }
492
+ return value;
493
+ }
494
+ static dehydrateDateTime(value) {
495
+ return value != null ? dh.i18n.DateTimeFormat.format(DateUtils.FULL_DATE_FORMAT, value) : null;
496
+ }
497
+ static hydrateDateTime(value) {
498
+ return value != null ? dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, value) : null;
499
+ }
500
+ static dehydrateLong(value) {
501
+ return value != null ? "".concat(value) : null;
502
+ }
503
+ static hydrateLong(value) {
504
+ return value != null ? dh.LongWrapper.ofString(value) : null;
505
+ }
506
+
507
+ /**
508
+ * Export the sorts from the provided table sorts to JSON stringifiable object
509
+ * @param sorts The table sorts
510
+ * @returns The dehydrated sorts
511
+ */
512
+ static dehydrateSort(sorts) {
513
+ return sorts.map(sort => {
514
+ var {
515
+ column,
516
+ isAbs,
517
+ direction
518
+ } = sort;
519
+ return {
520
+ column: column.name,
521
+ isAbs,
522
+ direction
523
+ };
524
+ });
525
+ }
526
+
527
+ /**
528
+ * Import the saved sorts to apply to the table. Does not actually apply the sort.
529
+ * @param columns The columns the sorts will be applied to
530
+ * @param sorts Exported sort definitions
531
+ * @returns The sorts to apply to the table
532
+ */
533
+ static hydrateSort(columns, sorts) {
534
+ return sorts.map(sort => {
535
+ var {
536
+ column: columnIndexOrName,
537
+ isAbs,
538
+ direction
539
+ } = sort;
540
+ if (direction === TableUtils.sortDirection.reverse) {
541
+ return dh.Table.reverse();
542
+ }
543
+ var column = typeof columnIndexOrName === 'string' ? IrisGridUtils.getColumnByName(columns, columnIndexOrName) : IrisGridUtils.getColumn(columns, columnIndexOrName);
544
+ if (column != null) {
545
+ var columnSort = column.sort();
546
+ if (isAbs) {
547
+ columnSort = columnSort.abs();
548
+ }
549
+ if (direction === TableUtils.sortDirection.descending) {
550
+ columnSort = columnSort.desc();
551
+ } else {
552
+ columnSort = columnSort.asc();
553
+ }
554
+ return columnSort;
555
+ }
556
+ return null;
557
+ })
558
+ // If we can't find the column any more, it's null, filter it out
559
+ // If the item is a reverse sort item, filter it out - it will get applied with the `reverseType` property
560
+ // This should only happen when loading a legacy dashboard
561
+ .filter(item => item != null && item.direction !== TableUtils.sortDirection.reverse);
562
+ }
563
+
564
+ /**
565
+ * Pulls just the table settings from the panel state, eg. filters/sorts
566
+ * @param panelState The dehydrated panel state
567
+ * @returns A dehydrated table settings object, { partition, partitionColumn, advancedFilters, quickFilters, sorts }
568
+ */
569
+ static extractTableSettings(panelState) {
570
+ var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
571
+ var {
572
+ irisGridPanelState,
573
+ irisGridState
574
+ } = panelState;
575
+ var {
576
+ partitionColumn,
577
+ partition
578
+ } = irisGridPanelState;
579
+ var {
580
+ advancedFilters,
581
+ quickFilters,
582
+ sorts
583
+ } = irisGridState;
584
+ return {
585
+ advancedFilters,
586
+ inputFilters,
587
+ partition,
588
+ partitionColumn,
589
+ quickFilters,
590
+ sorts
591
+ };
592
+ }
593
+
594
+ /**
595
+ * Applies the passed in table settings directly to the provided table
596
+ * @param table The table to apply the settings to
597
+ * @param tableSettings Dehydrated table settings extracted with `extractTableSettings`
598
+ * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York
599
+ */
600
+ static applyTableSettings(table, tableSettings, timeZone) {
601
+ var {
602
+ columns
603
+ } = table;
604
+ var quickFilters = [];
605
+ if (tableSettings.quickFilters) {
606
+ quickFilters = IrisGridUtils.getFiltersFromFilterMap(IrisGridUtils.hydrateQuickFilters(columns, tableSettings.quickFilters, timeZone));
607
+ }
608
+ var advancedFilters = [];
609
+ if (tableSettings.advancedFilters) {
610
+ advancedFilters = IrisGridUtils.getFiltersFromFilterMap(IrisGridUtils.hydrateAdvancedFilters(columns, tableSettings.advancedFilters, timeZone));
611
+ }
612
+ var inputFilters = IrisGridUtils.getFiltersFromInputFilters(columns, tableSettings.inputFilters, timeZone);
613
+ var sorts = [];
614
+ if (tableSettings.sorts) {
615
+ sorts = IrisGridUtils.hydrateSort(columns, tableSettings.sorts);
616
+ }
617
+ var filters = [...quickFilters, ...advancedFilters];
618
+ var {
619
+ partition,
620
+ partitionColumn: partitionColumnName
621
+ } = tableSettings;
622
+ if (partition != null && partitionColumnName != null) {
623
+ var partitionColumn = IrisGridUtils.getColumnByName(columns, partitionColumnName);
624
+ if (partitionColumn) {
625
+ var partitionFilter = partitionColumn.filter().eq(dh.FilterValue.ofString(partition));
626
+ filters = [partitionFilter, ...filters];
627
+ }
628
+ }
629
+ filters = [...inputFilters, ...filters];
630
+ table.applyFilter(filters);
631
+ table.applySort(sorts);
632
+ }
633
+ static getInputFiltersForColumns(columns) {
634
+ var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
635
+ return inputFilters.filter(_ref21 => {
636
+ var {
637
+ name,
638
+ type
639
+ } = _ref21;
640
+ return columns.find(_ref22 => {
641
+ var {
642
+ name: columnName,
643
+ type: columnType
644
+ } = _ref22;
645
+ return columnName === name && columnType === type;
646
+ });
647
+ });
648
+ }
649
+ static getFiltersFromInputFilters(columns) {
650
+ var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
651
+ var timeZone = arguments.length > 2 ? arguments[2] : undefined;
652
+ return inputFilters.map(_ref23 => {
653
+ var {
654
+ name,
655
+ type,
656
+ value
657
+ } = _ref23;
658
+ var column = columns.find(_ref24 => {
659
+ var {
660
+ name: columnName,
661
+ type: columnType
662
+ } = _ref24;
663
+ return columnName === name && columnType === type;
664
+ });
665
+ if (column) {
666
+ try {
667
+ return TableUtils.makeQuickFilter(column, value, timeZone);
668
+ } catch (e) {
669
+ // It may be unable to create it because user hasn't completed their input
670
+ log.debug('Unable to create input filter', e);
671
+ }
672
+ }
673
+ return null;
674
+ }).filter(filter => filter != null);
675
+ }
676
+ static getFiltersFromFilterMap(filterMap) {
677
+ var filters = [];
678
+ var keys = Array.from(filterMap.keys());
679
+ for (var i = 0; i < keys.length; i += 1) {
680
+ var key = keys[i];
681
+ var item = filterMap.get(key);
682
+ if ((item === null || item === void 0 ? void 0 : item.filter) != null) {
683
+ filters.push(item.filter);
684
+ }
685
+ }
686
+ return filters;
687
+ }
688
+
689
+ /**
690
+ * Get array of hidden column indexes
691
+ * @param userColumnWidths Map of user column widths
692
+ * @returns Array of hidden column indexes
693
+ */
694
+ static getHiddenColumns(userColumnWidths) {
695
+ return [...userColumnWidths.entries()].filter(_ref25 => {
696
+ var [, value] = _ref25;
697
+ return value === 0;
698
+ }).map(_ref26 => {
699
+ var [key] = _ref26;
700
+ return key;
701
+ });
702
+ }
703
+ static parseCustomColumnNames(customColumns) {
704
+ return customColumns.map(customColumn => customColumn.split('=')[0]);
705
+ }
706
+ static getRemovedCustomColumnNames(oldCustomColumns, customColumns) {
707
+ var oldCustomColumnsNames = IrisGridUtils.parseCustomColumnNames(oldCustomColumns);
281
708
  var customColumnNames = IrisGridUtils.parseCustomColumnNames(customColumns);
282
709
  return oldCustomColumnsNames.filter(oldCustomColumnName => !customColumnNames.includes(oldCustomColumnName));
283
710
  }
@@ -285,10 +712,10 @@ class IrisGridUtils {
285
712
  return sorts.filter(sort => !columnNames.includes(sort.column.name));
286
713
  }
287
714
  static removeFiltersInColumns(columns, filters, removedColumnNames) {
288
- var columnNames = columns.map(_ref11 => {
715
+ var columnNames = columns.map(_ref27 => {
289
716
  var {
290
717
  name
291
- } = _ref11;
718
+ } = _ref27;
292
719
  return name;
293
720
  });
294
721
  var newFilter = new Map(filters);
@@ -296,10 +723,10 @@ class IrisGridUtils {
296
723
  return newFilter;
297
724
  }
298
725
  static removeColumnFromMovedColumns(columns, movedColumns, removedColumnNames) {
299
- var columnNames = columns.map(_ref12 => {
726
+ var columnNames = columns.map(_ref28 => {
300
727
  var {
301
728
  name
302
- } = _ref12;
729
+ } = _ref28;
303
730
  return name;
304
731
  });
305
732
  var newMoves = [...movedColumns];
@@ -387,10 +814,10 @@ class IrisGridUtils {
387
814
  static getColumnsToFetch(tableColumns, viewportColumns, alwaysFetchColumnNames) {
388
815
  var columnsToFetch = [...viewportColumns];
389
816
  alwaysFetchColumnNames.forEach(columnName => {
390
- var column = tableColumns.find(_ref13 => {
817
+ var column = tableColumns.find(_ref29 => {
391
818
  var {
392
819
  name
393
- } = _ref13;
820
+ } = _ref29;
394
821
  return name === columnName;
395
822
  });
396
823
  if (column != null && !viewportColumns.includes(column)) {
@@ -415,8 +842,32 @@ class IrisGridUtils {
415
842
  }
416
843
 
417
844
  /**
418
- * Validate whether the ranges passed in are valid to take a snapshot from.
419
- * Multiple selections are valid if all of the selected rows have the same columns selected.
845
+ * Get the dh.RangeSet representation of the provided ranges.
846
+ * Ranges are sorted prior to creating the RangeSet. Only the rows are taken into account,
847
+ * RangeSet does not have an option for columns.
848
+ * @param ranges The ranges to get the range set for
849
+ * @returns The rangeset for the provided ranges
850
+ */
851
+ static rangeSetFromRanges(ranges) {
852
+ var rangeSets = ranges.slice().sort((a, b) => {
853
+ assertNotNull(a.startRow);
854
+ assertNotNull(b.startRow);
855
+ return a.startRow - b.startRow;
856
+ }).map(range => {
857
+ var {
858
+ startRow,
859
+ endRow
860
+ } = range;
861
+ assertNotNull(startRow);
862
+ assertNotNull(endRow);
863
+ return dh.RangeSet.ofRange(startRow, endRow);
864
+ });
865
+ return dh.RangeSet.ofRanges(rangeSets);
866
+ }
867
+
868
+ /**
869
+ * Validate whether the ranges passed in are valid to take a snapshot from.
870
+ * Multiple selections are valid if all of the selected rows have the same columns selected.
420
871
  *
421
872
  * @param ranges The ranges to validate
422
873
  * @returns True if the ranges are valid, false otherwise
@@ -534,12 +985,12 @@ class IrisGridUtils {
534
985
  var {
535
986
  aggregations = []
536
987
  } = aggregationSettings !== null && aggregationSettings !== void 0 ? aggregationSettings : {};
537
- var aggregationColumns = aggregations.map(_ref14 => {
988
+ var aggregationColumns = aggregations.map(_ref30 => {
538
989
  var {
539
990
  operation,
540
991
  selected,
541
992
  invert
542
- } = _ref14;
993
+ } = _ref30;
543
994
  return AggregationUtils.isRollupOperation(operation) ? [] : AggregationUtils.getOperationColumnNames(originalColumns, operation, selected, invert);
544
995
  });
545
996
  var aggregationMap = {};
@@ -607,17 +1058,17 @@ class IrisGridUtils {
607
1058
  * @param columnName The column name to retrieve
608
1059
  */
609
1060
  static getColumnByName(columns, columnName) {
610
- var column = columns.find(_ref15 => {
1061
+ var column = columns.find(_ref31 => {
611
1062
  var {
612
1063
  name
613
- } = _ref15;
1064
+ } = _ref31;
614
1065
  return name === columnName;
615
1066
  });
616
1067
  if (column == null) {
617
- log.error('Unable to retrieve column by name', columnName, columns.map(_ref16 => {
1068
+ log.error('Unable to retrieve column by name', columnName, columns.map(_ref32 => {
618
1069
  var {
619
1070
  name
620
- } = _ref16;
1071
+ } = _ref32;
621
1072
  return name;
622
1073
  }));
623
1074
  }
@@ -631,11 +1082,11 @@ class IrisGridUtils {
631
1082
  * @returns Updated filter configs with column names changed to indexes
632
1083
  */
633
1084
  static changeFilterColumnNamesToIndexes(columns, filters) {
634
- return filters.map(_ref17 => {
1085
+ return filters.map(_ref33 => {
635
1086
  var {
636
1087
  name,
637
1088
  filter
638
- } = _ref17;
1089
+ } = _ref33;
639
1090
  var index = columns.findIndex(column => column.name === name);
640
1091
  return index < 0 ? null : [index, filter];
641
1092
  }).filter(filterConfig => filterConfig != null);
@@ -705,10 +1156,10 @@ class IrisGridUtils {
705
1156
  var groupMap = new Map();
706
1157
 
707
1158
  // Remove any empty groups before parsing
708
- var groups = groupsParam === null || groupsParam === void 0 ? void 0 : groupsParam.filter(_ref18 => {
1159
+ var groups = groupsParam === null || groupsParam === void 0 ? void 0 : groupsParam.filter(_ref34 => {
709
1160
  var {
710
1161
  children
711
- } = _ref18;
1162
+ } = _ref34;
712
1163
  return children.length > 0;
713
1164
  });
714
1165
  if (groups.length === 0) {
@@ -808,468 +1259,6 @@ class IrisGridUtils {
808
1259
  }
809
1260
  return "".concat(value);
810
1261
  }
811
- constructor(dh) {
812
- _defineProperty(this, "dh", void 0);
813
- _defineProperty(this, "tableUtils", void 0);
814
- this.dh = dh;
815
- this.tableUtils = new TableUtils(dh);
816
- }
817
-
818
- /**
819
- * Exports the state from IrisGrid to a JSON stringifiable object
820
- * @param model The table model to export the state for
821
- * @param irisGridState The current state of the IrisGrid
822
- */
823
- dehydrateIrisGridState(model, irisGridState) {
824
- var {
825
- aggregationSettings = {
826
- aggregations: EMPTY_ARRAY,
827
- showOnTop: false
828
- },
829
- advancedFilters,
830
- customColumnFormatMap,
831
- isFilterBarShown,
832
- metrics,
833
- quickFilters,
834
- customColumns,
835
- conditionalFormats = EMPTY_ARRAY,
836
- reverseType,
837
- rollupConfig = undefined,
838
- showSearchBar,
839
- searchValue,
840
- selectDistinctColumns = EMPTY_ARRAY,
841
- selectedSearchColumns,
842
- sorts,
843
- invertSearchColumns,
844
- pendingDataMap = EMPTY_MAP,
845
- frozenColumns,
846
- columnHeaderGroups
847
- } = irisGridState;
848
- assertNotNull(metrics);
849
- var {
850
- userColumnWidths,
851
- userRowHeights
852
- } = metrics;
853
- var {
854
- columns
855
- } = model;
856
- return {
857
- advancedFilters: this.dehydrateAdvancedFilters(columns, advancedFilters),
858
- aggregationSettings,
859
- customColumnFormatMap: [...customColumnFormatMap],
860
- isFilterBarShown,
861
- quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),
862
- sorts: IrisGridUtils.dehydrateSort(sorts),
863
- userColumnWidths: [...userColumnWidths].filter(_ref19 => {
864
- var [columnIndex] = _ref19;
865
- return columnIndex != null && columnIndex >= 0 && columnIndex < columns.length;
866
- }).map(_ref20 => {
867
- var [columnIndex, width] = _ref20;
868
- return [columns[columnIndex].name, width];
869
- }),
870
- userRowHeights: [...userRowHeights],
871
- customColumns: [...customColumns],
872
- conditionalFormats: [...conditionalFormats],
873
- reverseType,
874
- rollupConfig,
875
- showSearchBar,
876
- searchValue,
877
- selectDistinctColumns: [...selectDistinctColumns],
878
- selectedSearchColumns,
879
- invertSearchColumns,
880
- pendingDataMap: this.dehydratePendingDataMap(columns, pendingDataMap),
881
- frozenColumns,
882
- columnHeaderGroups: columnHeaderGroups === null || columnHeaderGroups === void 0 ? void 0 : columnHeaderGroups.map(item => ({
883
- name: item.name,
884
- children: item.children,
885
- color: item.color
886
- }))
887
- };
888
- }
889
-
890
- /**
891
- * Import a state for IrisGrid that was exported with {{@link dehydrateIrisGridState}}
892
- * @param model The table model to import the state with
893
- * @param irisGridState The saved IrisGrid state
894
- */
895
- hydrateIrisGridState(model, irisGridState) {
896
- var _ref24, _model$layoutHints;
897
- var {
898
- advancedFilters,
899
- aggregationSettings = {
900
- aggregations: [],
901
- showOnTop: false
902
- },
903
- customColumnFormatMap,
904
- isFilterBarShown,
905
- quickFilters,
906
- sorts,
907
- customColumns,
908
- conditionalFormats,
909
- userColumnWidths,
910
- userRowHeights,
911
- reverseType,
912
- rollupConfig = undefined,
913
- showSearchBar,
914
- searchValue,
915
- selectDistinctColumns,
916
- selectedSearchColumns,
917
- invertSearchColumns = true,
918
- pendingDataMap = [],
919
- frozenColumns,
920
- columnHeaderGroups
921
- } = irisGridState;
922
- var {
923
- columns,
924
- formatter
925
- } = model;
926
- return {
927
- advancedFilters: this.hydrateAdvancedFilters(columns, advancedFilters, formatter.timeZone),
928
- aggregationSettings,
929
- customColumnFormatMap: new Map(customColumnFormatMap),
930
- isFilterBarShown,
931
- quickFilters: this.hydrateQuickFilters(columns, quickFilters, formatter.timeZone),
932
- sorts: this.hydrateSort(columns, sorts),
933
- userColumnWidths: new Map(userColumnWidths.map(_ref21 => {
934
- var [column, width] = _ref21;
935
- if (typeof column === 'string' || column instanceof String) {
936
- return [columns.findIndex(_ref22 => {
937
- var {
938
- name
939
- } = _ref22;
940
- return name === column;
941
- }), width];
942
- }
943
- return [column, width];
944
- }).filter(_ref23 => {
945
- var [column] = _ref23;
946
- return column != null && column >= 0 && column < columns.length;
947
- })),
948
- customColumns,
949
- conditionalFormats,
950
- userRowHeights: new Map(userRowHeights),
951
- reverseType,
952
- rollupConfig,
953
- showSearchBar,
954
- searchValue,
955
- selectDistinctColumns,
956
- selectedSearchColumns,
957
- invertSearchColumns,
958
- pendingDataMap: this.hydratePendingDataMap(columns, pendingDataMap),
959
- frozenColumns,
960
- columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(model, (_ref24 = columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : (_model$layoutHints = model.layoutHints) === null || _model$layoutHints === void 0 ? void 0 : _model$layoutHints.columnGroups) !== null && _ref24 !== void 0 ? _ref24 : []).groups
961
- };
962
- }
963
-
964
- /**
965
- * Import the saved quick filters to apply to the columns. Does not actually apply the filters.
966
- * @param columns The columns the filters will be applied to
967
- * @param savedQuickFilters Exported quick filters definitions
968
- * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York
969
- * @returns The quick filters to apply to the columns
970
- */
971
- hydrateQuickFilters(columns, savedQuickFilters, timeZone) {
972
- var importedFilters = savedQuickFilters.map(_ref25 => {
973
- var [columnIndex, quickFilter] = _ref25;
974
- var {
975
- text
976
- } = quickFilter;
977
- var filter = null;
978
- try {
979
- var column = IrisGridUtils.getColumn(columns, columnIndex);
980
- if (column != null) {
981
- filter = this.tableUtils.makeQuickFilter(column, text, timeZone);
982
- }
983
- } catch (error) {
984
- log.error('hydrateQuickFilters error with', text, error);
985
- }
986
- return [columnIndex, {
987
- text,
988
- filter
989
- }];
990
- });
991
- return new Map(importedFilters);
992
- }
993
-
994
- /**
995
- * Export the advanced filters from the provided columns to JSON striginfiable object
996
- * @param columns The columns for the filters
997
- * @param advancedFilters The advanced filters to dehydrate
998
- * @returns The dehydrated advanced filters
999
- */
1000
- dehydrateAdvancedFilters(columns, advancedFilters) {
1001
- return [...advancedFilters].map(_ref26 => {
1002
- var [columnIndex, advancedFilter] = _ref26;
1003
- var column = IrisGridUtils.getColumn(columns, columnIndex);
1004
- assertNotNull(column);
1005
- var options = this.dehydrateAdvancedFilterOptions(column, advancedFilter.options);
1006
- return [columnIndex, {
1007
- options
1008
- }];
1009
- });
1010
- }
1011
-
1012
- /**
1013
- * Import the saved advanced filters to apply to the columns. Does not actually apply the filters.
1014
- * @param columns The columns the filters will be applied to
1015
- * @param savedAdvancedFilters Exported advanced filters definitions
1016
- * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York
1017
- * @returns The advanced filters to apply to the columns
1018
- */
1019
- hydrateAdvancedFilters(columns, savedAdvancedFilters, timeZone) {
1020
- var importedFilters = savedAdvancedFilters.map(_ref27 => {
1021
- var [columnIndex, advancedFilter] = _ref27;
1022
- var column = IrisGridUtils.getColumn(columns, columnIndex);
1023
- assertNotNull(column);
1024
- var options = this.hydrateAdvancedFilterOptions(column, advancedFilter.options);
1025
- var filter = null;
1026
- try {
1027
- var columnRetrieved = IrisGridUtils.getColumn(columns, columnIndex);
1028
- if (columnRetrieved != null) {
1029
- filter = this.tableUtils.makeAdvancedFilter(column, options, timeZone);
1030
- }
1031
- } catch (error) {
1032
- log.error('hydrateAdvancedFilters error with', options, error);
1033
- }
1034
- return [columnIndex, {
1035
- options,
1036
- filter
1037
- }];
1038
- });
1039
- return new Map(importedFilters);
1040
- }
1041
- dehydrateAdvancedFilterOptions(column, options) {
1042
- var {
1043
- selectedValues
1044
- } = options,
1045
- otherOptions = _objectWithoutProperties(options, _excluded);
1046
- return _objectSpread({
1047
- selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => this.dehydrateValue(value, column === null || column === void 0 ? void 0 : column.type))
1048
- }, otherOptions);
1049
- }
1050
- hydrateAdvancedFilterOptions(column, options) {
1051
- var {
1052
- selectedValues
1053
- } = options,
1054
- otherOptions = _objectWithoutProperties(options, _excluded2);
1055
- return _objectSpread({
1056
- selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => this.hydrateValue(value, column === null || column === void 0 ? void 0 : column.type))
1057
- }, otherOptions);
1058
- }
1059
- dehydratePendingDataMap(columns, pendingDataMap) {
1060
- return [...pendingDataMap].map(_ref28 => {
1061
- var [rowIndex, {
1062
- data
1063
- }] = _ref28;
1064
- return [rowIndex, {
1065
- data: [...data].map(_ref29 => {
1066
- var [c, value] = _ref29;
1067
- return [columns[c].name, this.dehydrateValue(value, columns[c].type)];
1068
- })
1069
- }];
1070
- });
1071
- }
1072
- hydratePendingDataMap(columns, pendingDataMap) {
1073
- var columnMap = new Map();
1074
- var getColumnIndex = columnName => {
1075
- if (!columnMap.has(columnName)) {
1076
- columnMap.set(columnName, columns.findIndex(_ref30 => {
1077
- var {
1078
- name
1079
- } = _ref30;
1080
- return name === columnName;
1081
- }));
1082
- }
1083
- return columnMap.get(columnName);
1084
- };
1085
- return new Map(pendingDataMap.map(_ref31 => {
1086
- var [rowIndex, {
1087
- data
1088
- }] = _ref31;
1089
- return [rowIndex, {
1090
- data: new Map(data.map(_ref32 => {
1091
- var _getColumnIndex;
1092
- var [columnName, value] = _ref32;
1093
- var index = getColumnIndex(columnName);
1094
- assertNotNull(index);
1095
- return [(_getColumnIndex = getColumnIndex(columnName)) !== null && _getColumnIndex !== void 0 ? _getColumnIndex : null, this.hydrateValue(value, columns[index].type)];
1096
- }))
1097
- }];
1098
- }));
1099
- }
1100
-
1101
- /**
1102
- * Dehydrates/serializes a value for storage.
1103
- * @param value The value to dehydrate
1104
- * @param columnType The column type
1105
- */
1106
- dehydrateValue(value, columnType) {
1107
- if (TableUtils.isDateType(columnType)) {
1108
- return this.dehydrateDateTime(value);
1109
- }
1110
- if (TableUtils.isLongType(columnType)) {
1111
- return IrisGridUtils.dehydrateLong(value);
1112
- }
1113
- return value;
1114
- }
1115
-
1116
- /**
1117
- * Hydrate a value from it's serialized state
1118
- * @param value The dehydrated value that needs to be hydrated
1119
- * @param columnType The type of column
1120
- */
1121
- hydrateValue(value, columnType) {
1122
- if (TableUtils.isDateType(columnType)) {
1123
- return this.hydrateDateTime(value);
1124
- }
1125
- if (TableUtils.isLongType(columnType)) {
1126
- return this.hydrateLong(value);
1127
- }
1128
- return value;
1129
- }
1130
- dehydrateDateTime(value) {
1131
- return value != null ? this.dh.i18n.DateTimeFormat.format(DateUtils.FULL_DATE_FORMAT, value) : null;
1132
- }
1133
- hydrateDateTime(value) {
1134
- return value != null ? this.dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, value) : null;
1135
- }
1136
- hydrateLong(value) {
1137
- return value != null ? this.dh.LongWrapper.ofString(value) : null;
1138
- }
1139
-
1140
- /**
1141
- * Import the saved sorts to apply to the table. Does not actually apply the sort.
1142
- * @param columns The columns the sorts will be applied to
1143
- * @param sorts Exported sort definitions
1144
- * @returns The sorts to apply to the table
1145
- */
1146
- hydrateSort(columns, sorts) {
1147
- var {
1148
- dh
1149
- } = this;
1150
- return sorts.map(sort => {
1151
- var {
1152
- column: columnIndexOrName,
1153
- isAbs,
1154
- direction
1155
- } = sort;
1156
- if (direction === TableUtils.sortDirection.reverse) {
1157
- return dh.Table.reverse();
1158
- }
1159
- var column = typeof columnIndexOrName === 'string' ? IrisGridUtils.getColumnByName(columns, columnIndexOrName) : IrisGridUtils.getColumn(columns, columnIndexOrName);
1160
- if (column != null) {
1161
- var columnSort = column.sort();
1162
- if (isAbs) {
1163
- columnSort = columnSort.abs();
1164
- }
1165
- if (direction === TableUtils.sortDirection.descending) {
1166
- columnSort = columnSort.desc();
1167
- } else {
1168
- columnSort = columnSort.asc();
1169
- }
1170
- return columnSort;
1171
- }
1172
- return null;
1173
- })
1174
- // If we can't find the column any more, it's null, filter it out
1175
- // If the item is a reverse sort item, filter it out - it will get applied with the `reverseType` property
1176
- // This should only happen when loading a legacy dashboard
1177
- .filter(item => item != null && item.direction !== TableUtils.sortDirection.reverse);
1178
- }
1179
-
1180
- /**
1181
- * Applies the passed in table settings directly to the provided table
1182
- * @param table The table to apply the settings to
1183
- * @param tableSettings Dehydrated table settings extracted with `extractTableSettings`
1184
- * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York
1185
- */
1186
- applyTableSettings(table, tableSettings, timeZone) {
1187
- var {
1188
- columns
1189
- } = table;
1190
- var quickFilters = [];
1191
- if (tableSettings.quickFilters) {
1192
- quickFilters = IrisGridUtils.getFiltersFromFilterMap(this.hydrateQuickFilters(columns, tableSettings.quickFilters, timeZone));
1193
- }
1194
- var advancedFilters = [];
1195
- if (tableSettings.advancedFilters) {
1196
- advancedFilters = IrisGridUtils.getFiltersFromFilterMap(this.hydrateAdvancedFilters(columns, tableSettings.advancedFilters, timeZone));
1197
- }
1198
- var inputFilters = this.getFiltersFromInputFilters(columns, tableSettings.inputFilters, timeZone);
1199
- var sorts = [];
1200
- if (tableSettings.sorts) {
1201
- sorts = this.hydrateSort(columns, tableSettings.sorts);
1202
- }
1203
- var filters = [...quickFilters, ...advancedFilters];
1204
- var {
1205
- partition,
1206
- partitionColumn: partitionColumnName
1207
- } = tableSettings;
1208
- if (partition != null && partitionColumnName != null) {
1209
- var partitionColumn = IrisGridUtils.getColumnByName(columns, partitionColumnName);
1210
- if (partitionColumn) {
1211
- var partitionFilter = partitionColumn.filter().eq(dh.FilterValue.ofString(partition));
1212
- filters = [partitionFilter, ...filters];
1213
- }
1214
- }
1215
- filters = [...inputFilters, ...filters];
1216
- table.applyFilter(filters);
1217
- table.applySort(sorts);
1218
- }
1219
- getFiltersFromInputFilters(columns) {
1220
- var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1221
- var timeZone = arguments.length > 2 ? arguments[2] : undefined;
1222
- return inputFilters.map(_ref33 => {
1223
- var {
1224
- name,
1225
- type,
1226
- value
1227
- } = _ref33;
1228
- var column = columns.find(_ref34 => {
1229
- var {
1230
- name: columnName,
1231
- type: columnType
1232
- } = _ref34;
1233
- return columnName === name && columnType === type;
1234
- });
1235
- if (column) {
1236
- try {
1237
- return this.tableUtils.makeQuickFilter(column, value, timeZone);
1238
- } catch (e) {
1239
- // It may be unable to create it because user hasn't completed their input
1240
- log.debug('Unable to create input filter', e);
1241
- }
1242
- }
1243
- return null;
1244
- }).filter(filter => filter != null);
1245
- }
1246
-
1247
- /**
1248
- * Get the dh.RangeSet representation of the provided ranges.
1249
- * Ranges are sorted prior to creating the RangeSet. Only the rows are taken into account,
1250
- * RangeSet does not have an option for columns.
1251
- * @param ranges The ranges to get the range set for
1252
- * @returns The rangeset for the provided ranges
1253
- */
1254
- rangeSetFromRanges(ranges) {
1255
- var {
1256
- dh
1257
- } = this;
1258
- var rangeSets = ranges.slice().sort((a, b) => {
1259
- assertNotNull(a.startRow);
1260
- assertNotNull(b.startRow);
1261
- return a.startRow - b.startRow;
1262
- }).map(range => {
1263
- var {
1264
- startRow,
1265
- endRow
1266
- } = range;
1267
- assertNotNull(startRow);
1268
- assertNotNull(endRow);
1269
- return dh.RangeSet.ofRange(startRow, endRow);
1270
- });
1271
- return dh.RangeSet.ofRanges(rangeSets);
1272
- }
1273
1262
  }
1274
1263
  export default IrisGridUtils;
1275
1264
  //# sourceMappingURL=IrisGridUtils.js.map