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

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 (150) hide show
  1. package/README.md +4 -2
  2. package/dist/AdvancedFilterCreator.d.ts +3 -2
  3. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  4. package/dist/AdvancedFilterCreator.js +8 -4
  5. package/dist/AdvancedFilterCreator.js.map +1 -1
  6. package/dist/AdvancedFilterCreatorFilterItem.d.ts +4 -3
  7. package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
  8. package/dist/AdvancedFilterCreatorFilterItem.js +5 -4
  9. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  10. package/dist/AdvancedFilterCreatorSelectValue.d.ts +4 -2
  11. package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
  12. package/dist/AdvancedFilterCreatorSelectValue.js +11 -3
  13. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  14. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +3 -1
  15. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  16. package/dist/AdvancedFilterCreatorSelectValueList.js +7 -5
  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 +1 -2
  27. package/dist/CrossColumnSearch.js.map +1 -1
  28. package/dist/GotoRow.d.ts +3 -1
  29. package/dist/GotoRow.d.ts.map +1 -1
  30. package/dist/GotoRow.js +1 -0
  31. package/dist/GotoRow.js.map +1 -1
  32. package/dist/IrisGrid.d.ts +8 -6
  33. package/dist/IrisGrid.d.ts.map +1 -1
  34. package/dist/IrisGrid.js +45 -25
  35. package/dist/IrisGrid.js.map +1 -1
  36. package/dist/IrisGridCopyHandler.js.map +1 -1
  37. package/dist/IrisGridMetricCalculator.d.ts +1 -1
  38. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  39. package/dist/IrisGridMetricCalculator.js.map +1 -1
  40. package/dist/IrisGridModel.d.ts +1 -1
  41. package/dist/IrisGridModel.d.ts.map +1 -1
  42. package/dist/IrisGridModel.js.map +1 -1
  43. package/dist/IrisGridModelFactory.d.ts +2 -2
  44. package/dist/IrisGridModelFactory.d.ts.map +1 -1
  45. package/dist/IrisGridModelFactory.js +3 -3
  46. package/dist/IrisGridModelFactory.js.map +1 -1
  47. package/dist/IrisGridModelUpdater.d.ts +3 -2
  48. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  49. package/dist/IrisGridModelUpdater.js +2 -2
  50. package/dist/IrisGridModelUpdater.js.map +1 -1
  51. package/dist/IrisGridPartitionSelector.d.ts +2 -1
  52. package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
  53. package/dist/IrisGridPartitionSelector.js +2 -0
  54. package/dist/IrisGridPartitionSelector.js.map +1 -1
  55. package/dist/IrisGridProxyModel.d.ts +3 -2
  56. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  57. package/dist/IrisGridProxyModel.js +11 -9
  58. package/dist/IrisGridProxyModel.js.map +1 -1
  59. package/dist/IrisGridRenderer.d.ts +1 -1
  60. package/dist/IrisGridRenderer.d.ts.map +1 -1
  61. package/dist/IrisGridRenderer.js.map +1 -1
  62. package/dist/IrisGridTableModel.d.ts +2 -2
  63. package/dist/IrisGridTableModel.d.ts.map +1 -1
  64. package/dist/IrisGridTableModel.js +6 -6
  65. package/dist/IrisGridTableModel.js.map +1 -1
  66. package/dist/IrisGridTableModelTemplate.d.ts +8 -3
  67. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  68. package/dist/IrisGridTableModelTemplate.js +25 -13
  69. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  70. package/dist/IrisGridTestUtils.d.ts +2 -3
  71. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  72. package/dist/IrisGridTestUtils.js +5 -6
  73. package/dist/IrisGridTestUtils.js.map +1 -1
  74. package/dist/IrisGridTreeTableModel.d.ts +1 -1
  75. package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
  76. package/dist/IrisGridTreeTableModel.js.map +1 -1
  77. package/dist/IrisGridUtils.d.ts +88 -85
  78. package/dist/IrisGridUtils.d.ts.map +1 -1
  79. package/dist/IrisGridUtils.js +567 -556
  80. package/dist/IrisGridUtils.js.map +1 -1
  81. package/dist/PartitionSelectorSearch.d.ts +2 -1
  82. package/dist/PartitionSelectorSearch.d.ts.map +1 -1
  83. package/dist/PartitionSelectorSearch.js +3 -1
  84. package/dist/PartitionSelectorSearch.js.map +1 -1
  85. package/dist/TableViewportUpdater.d.ts +1 -1
  86. package/dist/TableViewportUpdater.d.ts.map +1 -1
  87. package/dist/TableViewportUpdater.js.map +1 -1
  88. package/dist/TreeTableViewportUpdater.d.ts +2 -1
  89. package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
  90. package/dist/TreeTableViewportUpdater.js +1 -1
  91. package/dist/TreeTableViewportUpdater.js.map +1 -1
  92. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  93. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +10 -9
  94. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  95. package/dist/mousehandlers/IrisGridContextMenuHandler.js +41 -28
  96. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  97. package/dist/sidebar/ChartBuilder.d.ts +12 -11
  98. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  99. package/dist/sidebar/ChartBuilder.js +98 -81
  100. package/dist/sidebar/ChartBuilder.js.map +1 -1
  101. package/dist/sidebar/RollupRows.d.ts +1 -1
  102. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  103. package/dist/sidebar/RollupRows.js.map +1 -1
  104. package/dist/sidebar/SelectDistinctBuilder.d.ts +1 -1
  105. package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
  106. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  107. package/dist/sidebar/TableCsvExporter.d.ts +3 -2
  108. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  109. package/dist/sidebar/TableCsvExporter.js +3 -3
  110. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  111. package/dist/sidebar/TableSaver.d.ts +2 -1
  112. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  113. package/dist/sidebar/TableSaver.js +4 -1
  114. package/dist/sidebar/TableSaver.js.map +1 -1
  115. package/dist/sidebar/aggregations/AggregationEdit.d.ts +1 -1
  116. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  117. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  118. package/dist/sidebar/aggregations/AggregationUtils.d.ts +1 -1
  119. package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
  120. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  121. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +2 -0
  122. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  123. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +2 -0
  124. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  125. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +2 -0
  126. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  127. package/dist/sidebar/conditional-formatting/ConditionEditor.js +3 -2
  128. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  129. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  130. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -0
  131. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  132. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts +2 -2
  133. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts.map +1 -1
  134. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +1 -1
  135. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  136. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +3 -3
  137. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  138. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +3 -3
  139. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  140. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +2 -0
  141. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  142. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +2 -0
  143. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  144. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +1 -1
  145. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
  146. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  147. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +1 -1
  148. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
  149. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  150. package/package.json +16 -15
@@ -1,14 +1,13 @@
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; }
3
5
  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; }
4
6
  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; }
5
7
  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; }
6
8
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
7
9
  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';
12
11
  import { DateUtils, TableUtils } from '@deephaven/jsapi-utils';
13
12
  import Log from '@deephaven/log';
14
13
  import { assertNotNull, EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';
@@ -117,152 +116,6 @@ class IrisGridUtils {
117
116
  };
118
117
  }
119
118
 
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
-
266
119
  /**
267
120
  * Export the IrisGridPanel state.
268
121
  * @param model The table model the state is being dehydrated with
@@ -314,8 +167,8 @@ class IrisGridUtils {
314
167
  * @returns The dehydrated quick filters
315
168
  */
316
169
  static dehydrateQuickFilters(quickFilters) {
317
- return [...quickFilters].map(_ref12 => {
318
- var [columnIndex, quickFilter] = _ref12;
170
+ return [...quickFilters].map(_ref6 => {
171
+ var [columnIndex, quickFilter] = _ref6;
319
172
  var {
320
173
  text
321
174
  } = quickFilter;
@@ -324,380 +177,100 @@ class IrisGridUtils {
324
177
  }];
325
178
  });
326
179
  }
180
+ static dehydrateLong(value) {
181
+ return value != null ? "".concat(value) : null;
182
+ }
327
183
 
328
184
  /**
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
185
+ * Export the sorts from the provided table sorts to JSON stringifiable object
186
+ * @param sorts The table sorts
187
+ * @returns The dehydrated sorts
334
188
  */
335
- static hydrateQuickFilters(columns, savedQuickFilters, timeZone) {
336
- var importedFilters = savedQuickFilters.map(_ref13 => {
337
- var [columnIndex, quickFilter] = _ref13;
189
+ static dehydrateSort(sorts) {
190
+ return sorts.map(sort => {
338
191
  var {
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
- }];
192
+ column,
193
+ isAbs,
194
+ direction
195
+ } = sort;
196
+ return {
197
+ column: column.name,
198
+ isAbs,
199
+ direction
200
+ };
354
201
  });
355
- return new Map(importedFilters);
356
202
  }
357
203
 
358
204
  /**
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
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 }
363
208
  */
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
- }];
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
+ });
373
247
  });
374
248
  }
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
+ }
375
261
 
376
262
  /**
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
263
+ * Get array of hidden column indexes
264
+ * @param userColumnWidths Map of user column widths
265
+ * @returns Array of hidden column indexes
382
266
  */
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
- }];
402
- });
403
- return new Map(importedFilters);
404
- }
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;
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;
701
274
  });
702
275
  }
703
276
  static parseCustomColumnNames(customColumns) {
@@ -712,10 +285,10 @@ class IrisGridUtils {
712
285
  return sorts.filter(sort => !columnNames.includes(sort.column.name));
713
286
  }
714
287
  static removeFiltersInColumns(columns, filters, removedColumnNames) {
715
- var columnNames = columns.map(_ref27 => {
288
+ var columnNames = columns.map(_ref11 => {
716
289
  var {
717
290
  name
718
- } = _ref27;
291
+ } = _ref11;
719
292
  return name;
720
293
  });
721
294
  var newFilter = new Map(filters);
@@ -723,10 +296,10 @@ class IrisGridUtils {
723
296
  return newFilter;
724
297
  }
725
298
  static removeColumnFromMovedColumns(columns, movedColumns, removedColumnNames) {
726
- var columnNames = columns.map(_ref28 => {
299
+ var columnNames = columns.map(_ref12 => {
727
300
  var {
728
301
  name
729
- } = _ref28;
302
+ } = _ref12;
730
303
  return name;
731
304
  });
732
305
  var newMoves = [...movedColumns];
@@ -814,10 +387,10 @@ class IrisGridUtils {
814
387
  static getColumnsToFetch(tableColumns, viewportColumns, alwaysFetchColumnNames) {
815
388
  var columnsToFetch = [...viewportColumns];
816
389
  alwaysFetchColumnNames.forEach(columnName => {
817
- var column = tableColumns.find(_ref29 => {
390
+ var column = tableColumns.find(_ref13 => {
818
391
  var {
819
392
  name
820
- } = _ref29;
393
+ } = _ref13;
821
394
  return name === columnName;
822
395
  });
823
396
  if (column != null && !viewportColumns.includes(column)) {
@@ -842,35 +415,11 @@ class IrisGridUtils {
842
415
  }
843
416
 
844
417
  /**
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.
871
- *
872
- * @param ranges The ranges to validate
873
- * @returns True if the ranges are valid, false otherwise
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.
420
+ *
421
+ * @param ranges The ranges to validate
422
+ * @returns True if the ranges are valid, false otherwise
874
423
  */
875
424
  static isValidSnapshotRanges(ranges) {
876
425
  if (ranges == null || ranges.length === 0) {
@@ -985,12 +534,12 @@ class IrisGridUtils {
985
534
  var {
986
535
  aggregations = []
987
536
  } = aggregationSettings !== null && aggregationSettings !== void 0 ? aggregationSettings : {};
988
- var aggregationColumns = aggregations.map(_ref30 => {
537
+ var aggregationColumns = aggregations.map(_ref14 => {
989
538
  var {
990
539
  operation,
991
540
  selected,
992
541
  invert
993
- } = _ref30;
542
+ } = _ref14;
994
543
  return AggregationUtils.isRollupOperation(operation) ? [] : AggregationUtils.getOperationColumnNames(originalColumns, operation, selected, invert);
995
544
  });
996
545
  var aggregationMap = {};
@@ -1058,17 +607,17 @@ class IrisGridUtils {
1058
607
  * @param columnName The column name to retrieve
1059
608
  */
1060
609
  static getColumnByName(columns, columnName) {
1061
- var column = columns.find(_ref31 => {
610
+ var column = columns.find(_ref15 => {
1062
611
  var {
1063
612
  name
1064
- } = _ref31;
613
+ } = _ref15;
1065
614
  return name === columnName;
1066
615
  });
1067
616
  if (column == null) {
1068
- log.error('Unable to retrieve column by name', columnName, columns.map(_ref32 => {
617
+ log.error('Unable to retrieve column by name', columnName, columns.map(_ref16 => {
1069
618
  var {
1070
619
  name
1071
- } = _ref32;
620
+ } = _ref16;
1072
621
  return name;
1073
622
  }));
1074
623
  }
@@ -1082,11 +631,11 @@ class IrisGridUtils {
1082
631
  * @returns Updated filter configs with column names changed to indexes
1083
632
  */
1084
633
  static changeFilterColumnNamesToIndexes(columns, filters) {
1085
- return filters.map(_ref33 => {
634
+ return filters.map(_ref17 => {
1086
635
  var {
1087
636
  name,
1088
637
  filter
1089
- } = _ref33;
638
+ } = _ref17;
1090
639
  var index = columns.findIndex(column => column.name === name);
1091
640
  return index < 0 ? null : [index, filter];
1092
641
  }).filter(filterConfig => filterConfig != null);
@@ -1156,10 +705,10 @@ class IrisGridUtils {
1156
705
  var groupMap = new Map();
1157
706
 
1158
707
  // Remove any empty groups before parsing
1159
- var groups = groupsParam === null || groupsParam === void 0 ? void 0 : groupsParam.filter(_ref34 => {
708
+ var groups = groupsParam === null || groupsParam === void 0 ? void 0 : groupsParam.filter(_ref18 => {
1160
709
  var {
1161
710
  children
1162
- } = _ref34;
711
+ } = _ref18;
1163
712
  return children.length > 0;
1164
713
  });
1165
714
  if (groups.length === 0) {
@@ -1259,6 +808,468 @@ class IrisGridUtils {
1259
808
  }
1260
809
  return "".concat(value);
1261
810
  }
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
+ }
1262
1273
  }
1263
1274
  export default IrisGridUtils;
1264
1275
  //# sourceMappingURL=IrisGridUtils.js.map