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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/dist/AdvancedFilterCreator.js +65 -102
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +22 -37
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +37 -63
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +29 -59
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnHeaderGroup.js +6 -8
  10. package/dist/ColumnHeaderGroup.js.map +1 -1
  11. package/dist/ColumnStatistics.js +22 -28
  12. package/dist/ColumnStatistics.js.map +1 -1
  13. package/dist/CrossColumnSearch.js +20 -29
  14. package/dist/CrossColumnSearch.js.map +1 -1
  15. package/dist/FilterInputField.js +19 -46
  16. package/dist/FilterInputField.js.map +1 -1
  17. package/dist/GotoRow.js +32 -29
  18. package/dist/GotoRow.js.map +1 -1
  19. package/dist/IrisGrid.js +490 -822
  20. package/dist/IrisGrid.js.map +1 -1
  21. package/dist/IrisGridBottomBar.js +10 -11
  22. package/dist/IrisGridBottomBar.js.map +1 -1
  23. package/dist/IrisGridCacheUtils.js +28 -8
  24. package/dist/IrisGridCacheUtils.js.map +1 -1
  25. package/dist/IrisGridCellOverflowModal.js +30 -13
  26. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  27. package/dist/IrisGridCellRendererUtils.js +6 -12
  28. package/dist/IrisGridCellRendererUtils.js.map +1 -1
  29. package/dist/IrisGridCopyHandler.js +28 -47
  30. package/dist/IrisGridCopyHandler.js.map +1 -1
  31. package/dist/IrisGridMetricCalculator.js +28 -51
  32. package/dist/IrisGridMetricCalculator.js.map +1 -1
  33. package/dist/IrisGridModelUpdater.js +32 -30
  34. package/dist/IrisGridModelUpdater.js.map +1 -1
  35. package/dist/IrisGridPartitionSelector.js +28 -62
  36. package/dist/IrisGridPartitionSelector.js.map +1 -1
  37. package/dist/IrisGridProxyModel.js +7 -12
  38. package/dist/IrisGridProxyModel.js.map +1 -1
  39. package/dist/IrisGridRenderer.js +162 -264
  40. package/dist/IrisGridRenderer.js.map +1 -1
  41. package/dist/IrisGridTableModel.js +23 -16
  42. package/dist/IrisGridTableModel.js.map +1 -1
  43. package/dist/IrisGridTableModelTemplate.js +49 -73
  44. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  45. package/dist/IrisGridTestUtils.js +19 -19
  46. package/dist/IrisGridTestUtils.js.map +1 -1
  47. package/dist/IrisGridTextCellRenderer.js +35 -52
  48. package/dist/IrisGridTextCellRenderer.js.map +1 -1
  49. package/dist/IrisGridTheme.js +9 -1
  50. package/dist/IrisGridTheme.js.map +1 -1
  51. package/dist/IrisGridThemeProvider.js +5 -7
  52. package/dist/IrisGridThemeProvider.js.map +1 -1
  53. package/dist/IrisGridTreeTableModel.js +5 -9
  54. package/dist/IrisGridTreeTableModel.js.map +1 -1
  55. package/dist/IrisGridUtils.js +246 -300
  56. package/dist/IrisGridUtils.js.map +1 -1
  57. package/dist/NoPastePermissionModal.js +3 -5
  58. package/dist/NoPastePermissionModal.js.map +1 -1
  59. package/dist/PendingDataBottomBar.js +27 -16
  60. package/dist/PendingDataBottomBar.js.map +1 -1
  61. package/dist/ToastBottomBar.js +16 -8
  62. package/dist/ToastBottomBar.js.map +1 -1
  63. package/dist/format-context-menus/CustomFormatAction.js +11 -24
  64. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  65. package/dist/key-handlers/CopyCellKeyHandler.js +3 -4
  66. package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
  67. package/dist/key-handlers/CopyKeyHandler.js +1 -3
  68. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  69. package/dist/key-handlers/ReverseKeyHandler.js +1 -3
  70. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  71. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +35 -59
  72. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  73. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +13 -29
  74. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  75. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +8 -17
  76. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  77. package/dist/mousehandlers/IrisGridContextMenuHandler.js +96 -199
  78. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  79. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -4
  80. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  81. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +16 -30
  82. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  83. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js +5 -13
  84. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
  85. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +20 -36
  86. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
  87. package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -5
  88. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  89. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +9 -18
  90. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
  91. package/dist/mousehandlers/PendingMouseHandler.js +10 -18
  92. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  93. package/dist/sidebar/AdvancedSettingsMenu.js +12 -5
  94. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  95. package/dist/sidebar/ChartBuilder.js +45 -102
  96. package/dist/sidebar/ChartBuilder.js.map +1 -1
  97. package/dist/sidebar/CustomColumnBuilder.js +35 -77
  98. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  99. package/dist/sidebar/CustomColumnInput.js +9 -11
  100. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  101. package/dist/sidebar/InputEditor.js +17 -24
  102. package/dist/sidebar/InputEditor.js.map +1 -1
  103. package/dist/sidebar/PluginTableOptionsErrorBoundary.js +6 -11
  104. package/dist/sidebar/PluginTableOptionsErrorBoundary.js.map +1 -1
  105. package/dist/sidebar/RollupRows.js +72 -113
  106. package/dist/sidebar/RollupRows.js.map +1 -1
  107. package/dist/sidebar/SelectDistinctBuilder.js +16 -33
  108. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  109. package/dist/sidebar/TableCsvExporter.js +50 -74
  110. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  111. package/dist/sidebar/TableSaver.js +18 -42
  112. package/dist/sidebar/TableSaver.js.map +1 -1
  113. package/dist/sidebar/aggregations/AggregationEdit.js +25 -18
  114. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  115. package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
  116. package/dist/sidebar/aggregations/AggregationUtils.js +3 -4
  117. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  118. package/dist/sidebar/aggregations/Aggregations.js +45 -34
  119. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  120. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +35 -24
  121. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  122. package/dist/sidebar/conditional-formatting/ConditionEditor.js +38 -21
  123. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  124. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +27 -11
  125. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  126. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +9 -11
  127. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  128. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +48 -57
  129. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  130. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +35 -24
  131. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  132. package/dist/sidebar/conditional-formatting/StyleEditor.js +26 -11
  133. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  134. package/dist/sidebar/visibility-ordering-builder/SearchItem.js +5 -7
  135. package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
  136. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +24 -18
  137. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
  138. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +166 -256
  139. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  140. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +4 -11
  141. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
  142. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +28 -14
  143. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
  144. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +16 -19
  145. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  146. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +1 -3
  147. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
  148. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +19 -29
  149. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  150. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +39 -52
  151. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
  152. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +18 -23
  153. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  154. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +19 -15
  155. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  156. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +16 -30
  157. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
  158. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +30 -39
  159. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  160. package/package.json +16 -16
@@ -12,9 +12,7 @@ import { rebalanceTree } from "./TreeRebalanceUtil.js";
12
12
  export class IrisGridMetricCalculator extends GridMetricCalculator {
13
13
  constructor() {
14
14
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
15
- var {
16
- userColumnWidthsByName
17
- } = options,
15
+ var userColumnWidthsByName = options.userColumnWidthsByName,
18
16
  rest = _objectWithoutProperties(options, _excluded);
19
17
  super(rest);
20
18
  // Column widths by name to keep track of columns going in and out of viewport.
@@ -81,9 +79,7 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
81
79
  */
82
80
  getHeaderPadding(state, modelColumn, maxColumnWidth) {
83
81
  var _paddingMap$get;
84
- var {
85
- model
86
- } = state;
82
+ var model = state.model;
87
83
  var root = IrisGridMetricCalculator.getModelColumnRoot(model, modelColumn);
88
84
  if (root == null) {
89
85
  return 0;
@@ -175,14 +171,12 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
175
171
  // The state here seems to be a GridMetricState with stateOverrides passed from IrisGrid in the props,
176
172
  // not guaranteed to be IrisGridMetricState
177
173
  var gridY = super.getGridY(state);
178
- var {
179
- isFilterBarShown,
180
- theme,
181
- advancedFilters,
182
- quickFilters,
183
- sorts,
184
- reverse
185
- } = state;
174
+ var isFilterBarShown = state.isFilterBarShown,
175
+ theme = state.theme,
176
+ advancedFilters = state.advancedFilters,
177
+ quickFilters = state.quickFilters,
178
+ sorts = state.sorts,
179
+ reverse = state.reverse;
186
180
  if (isFilterBarShown) {
187
181
  gridY += theme.filterBarHeight;
188
182
  } else if (quickFilters != null && quickFilters.size > 0 || advancedFilters != null && advancedFilters.size > 0) {
@@ -200,9 +194,7 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
200
194
  * @returns The metrics for the current state
201
195
  */
202
196
  getMetrics(state) {
203
- var {
204
- model
205
- } = state;
197
+ var model = state.model;
206
198
  // Update column widths if columns in the cached model don't match the current model passed in the state
207
199
  this.updateColumnWidthsIfNecessary(model);
208
200
  return super.getMetrics(state);
@@ -290,9 +282,7 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
290
282
  * @returns The calculated width of the column header
291
283
  */
292
284
  calculateColumnHeaderWidth(modelColumn, state, maxColumnWidth) {
293
- var {
294
- model
295
- } = state;
285
+ var model = state.model;
296
286
  var parent = model.getColumnHeaderParentGroup(modelColumn, 0);
297
287
  var baseHeaderWidth = super.calculateColumnHeaderWidth(modelColumn, state, maxColumnWidth);
298
288
 
@@ -307,15 +297,11 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
307
297
  // Original width of column header group content, including title, padding, icons, etc.
308
298
  // Does not include any rebalancing adjustments
309
299
  getColumnHeaderGroupWidth(modelColumn, depth, state, maxColumnWidth) {
310
- var {
311
- model,
312
- theme,
313
- context
314
- } = state;
315
- var {
316
- headerHorizontalPadding,
317
- headerFont
318
- } = theme;
300
+ var model = state.model,
301
+ theme = state.theme,
302
+ context = state.context;
303
+ var headerHorizontalPadding = theme.headerHorizontalPadding,
304
+ headerFont = theme.headerFont;
319
305
  this.calculateLowerFontWidth(headerFont, context);
320
306
  this.calculateUpperFontWidth(headerFont, context);
321
307
  var padding = headerHorizontalPadding * 2;
@@ -342,18 +328,13 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
342
328
  if (index < 0) {
343
329
  return null;
344
330
  }
345
- var {
346
- theme
347
- } = state;
348
- var {
349
- filterBarHeight = 0
350
- } = theme;
351
- var {
352
- gridX,
353
- gridY,
354
- allColumnXs,
355
- allColumnWidths
356
- } = metrics;
331
+ var theme = state.theme;
332
+ var _theme$filterBarHeigh = theme.filterBarHeight,
333
+ filterBarHeight = _theme$filterBarHeigh === void 0 ? 0 : _theme$filterBarHeigh;
334
+ var gridX = metrics.gridX,
335
+ gridY = metrics.gridY,
336
+ allColumnXs = metrics.allColumnXs,
337
+ allColumnWidths = metrics.allColumnWidths;
357
338
  var columnX = allColumnXs.get(index);
358
339
  var columnWidth = allColumnWidths.get(index);
359
340
  if (columnX == null || columnWidth == null ||
@@ -378,11 +359,9 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
378
359
  * @returns The left column index to scroll to, or null if no scroll is needed
379
360
  */
380
361
  getScrollLeftForColumn(column, state, metrics) {
381
- var {
382
- left,
383
- rightVisible,
384
- lastLeft
385
- } = metrics;
362
+ var left = metrics.left,
363
+ rightVisible = metrics.rightVisible,
364
+ lastLeft = metrics.lastLeft;
386
365
  if (column < 0) {
387
366
  return null;
388
367
  }
@@ -412,11 +391,9 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
412
391
  if (filterBoxCoordinates == null) {
413
392
  return null;
414
393
  }
415
- var {
416
- x,
417
- y,
418
- width
419
- } = filterBoxCoordinates;
394
+ var x = filterBoxCoordinates.x,
395
+ y = filterBoxCoordinates.y,
396
+ width = filterBoxCoordinates.width;
420
397
  return {
421
398
  x: x + width - 25,
422
399
  // Right edge of filter box (24px button + 1px for border)
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridMetricCalculator.js","names":["deepEqual","memoizeOne","GridMetricCalculator","trimMap","isExpandableColumnGridModel","assertNotNull","rebalanceTree","IrisGridMetricCalculator","constructor","options","arguments","length","undefined","userColumnWidthsByName","rest","_objectWithoutProperties","_excluded","_defineProperty","Map","columns","map","col","name","columnHeaderGroups","group","getModelColumnRoot","model","modelColumn","depth","current","getColumnHeaderParentGroup","root","buildNode","getLeafValue","getGroupValue","_getLeafValue","headerGroup","columnHeaderGroupMap","get","value","children","childName","getHeaderPadding","state","maxColumnWidth","_paddingMap$get","cachedMap","cachedPaddingMaps","_cachedMap$get","groupTree","columnIndex","getColumnIndexByName","concat","calculateColumnHeaderWidth","getColumnHeaderGroupWidth","childIndexes","paddingMap","set","updateCalculatedColumnWidths","cachedModelColumnNames","calculatedColumnWidthsByName","forEach","index","prevColumnWidth","calculatedColumnWidths","resetCalculatedColumnWidths","width","updateUserColumnWidths","userColumnWidths","modelIndex","setColumnWidth","updateColumnWidthsIfNecessary","modelColumnNames","getCachedCurrentModelColumnNames","isFirstCall","clear","size","cachedHeaderGroupNames","getCachedCurrentHeaderGroupNames","resetCalculatedHeaderGroupWidths","getGridY","gridY","isFilterBarShown","theme","advancedFilters","quickFilters","sorts","reverse","filterBarHeight","filterBarCollapsedHeight","reverseHeaderBarHeight","getMetrics","column","resetColumnWidth","delete","resetColumnWidthByName","indexOf","resetAllColumnWidths","getUserColumnWidths","getUserColumnWidthsByName","getCalculatedColumnWidths","parent","baseHeaderWidth","headerPadding","context","headerHorizontalPadding","headerFont","calculateLowerFontWidth","calculateUpperFontWidth","padding","headerText","textForColumnHeader","isColumnExpandable","expandCollapseIconWidth","iconSize","calculateTextWidth","getFilterInputCoordinates","metrics","gridX","allColumnXs","allColumnWidths","columnX","columnWidth","x","y","height","getScrollLeftForColumn","left","rightVisible","lastLeft","newLeft","getLastLeft","getVisibleWidth","Math","min","getAdvancedFilterButtonCoordinates","filterBoxCoordinates"],"sources":["../src/IrisGridMetricCalculator.ts"],"sourcesContent":["import deepEqual from 'fast-deep-equal';\nimport memoizeOne from 'memoize-one';\nimport {\n GridMetricCalculator,\n type GridMetrics,\n type GridMetricState,\n type ModelIndex,\n type ModelSizeMap,\n trimMap,\n isExpandableColumnGridModel,\n type VisibleIndex,\n} from '@deephaven/grid';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport type IrisGridModel from './IrisGridModel';\nimport { type IrisGridStateOverride, type ColumnName } from './CommonTypes';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\nimport { rebalanceTree, type TreeNode } from './TreeRebalanceUtil';\n\nexport type IrisGridMetricState = GridMetricState & IrisGridStateOverride;\n\ntype GridMetricCalculatorOptions = NonNullable<\n ConstructorParameters<typeof GridMetricCalculator>[0]\n>;\n\nexport type IrisGridMetricCalculatorOptions = GridMetricCalculatorOptions & {\n /**\n * Map of user-set column widths keyed by column name. This is the source\n * of truth for hidden/manually-sized columns across model swaps (e.g.\n * applying or removing a rollup), where the model's column indices\n * change but names are stable. Entries for columns absent from the\n * current model are preserved and re-projected onto the by-index map\n * whenever the model swaps.\n */\n userColumnWidthsByName?: Map<ColumnName, number>;\n};\n\nexport class IrisGridMetricCalculator extends GridMetricCalculator {\n // Column widths by name to keep track of columns going in and out of viewport.\n private userColumnWidthsByName: Map<ColumnName, number>;\n\n // Cached model column names to detect when the column width map update is necessary\n private cachedModelColumnNames: readonly ColumnName[] | undefined;\n\n private cachedHeaderGroupNames: readonly string[] | undefined;\n\n // Cached padding maps for column header groups\n private cachedPaddingMaps: Map<string, Map<string, number>> = new Map();\n\n constructor(options: IrisGridMetricCalculatorOptions = {}) {\n const { userColumnWidthsByName, ...rest } = options;\n super(rest);\n this.userColumnWidthsByName = userColumnWidthsByName ?? new Map();\n }\n\n static getModelColumnRoot(\n model: IrisGridModel,\n modelColumn: ModelIndex\n ): ColumnHeaderGroup | undefined {\n let depth = 0;\n let current = model.getColumnHeaderParentGroup(modelColumn, depth);\n let root = current;\n\n while (current != null) {\n root = current;\n depth += 1;\n current = model.getColumnHeaderParentGroup(modelColumn, depth);\n }\n\n return root;\n }\n\n /**\n * Builds a TreeNode from the model header groups and columns for padding calculation\n * @param name The name of the root node to build the tree for\n * @param model The IrisGridModel containing columns and header groups\n * @param getLeafValue Function to get the value for leaf nodes (columns)\n * @param getGroupValue Function to get the value for group nodes (header groups)\n * @returns The TreeNode structure\n */\n private static buildNode(\n name: string,\n model: IrisGridModel,\n getLeafValue: (name: string) => number,\n getGroupValue: (name: string) => number\n ): TreeNode {\n const headerGroup = model.columnHeaderGroupMap.get(name);\n\n if (headerGroup) {\n const value = getGroupValue(name);\n\n const children = headerGroup.children.map(childName =>\n IrisGridMetricCalculator.buildNode(\n childName,\n model,\n getLeafValue,\n getGroupValue\n )\n );\n\n // Group node\n return {\n name,\n children,\n value,\n };\n }\n\n // Leaf node\n return {\n name,\n children: [],\n value: getLeafValue(name) ?? 0,\n };\n }\n\n /**\n * Gets the header padding for a specific column based on the widths of its group tree nodes.\n * We only adjust paddings on the column, because the group widths are automatically sized to fit their children.\n * @param state The current IrisGridMetricState\n * @param modelColumn The column index to get the padding for\n * @param maxColumnWidth Maximum allowed column width, applies only to leaf nodes\n * @returns The calculated header padding for the column\n */\n private getHeaderPadding(\n state: IrisGridMetricState,\n modelColumn: ModelIndex,\n maxColumnWidth: number\n ): number {\n const { model } = state;\n const root = IrisGridMetricCalculator.getModelColumnRoot(\n model,\n modelColumn\n );\n if (root == null) {\n return 0;\n }\n const cachedMap = this.cachedPaddingMaps.get(root.name);\n if (cachedMap != null) {\n return cachedMap.get(model.columns[modelColumn].name) ?? 0;\n }\n const groupTree = IrisGridMetricCalculator.buildNode(\n root.name,\n model,\n name => {\n const columnIndex = model.getColumnIndexByName(name);\n assertNotNull(columnIndex, `${name} not found in model columns`);\n return super.calculateColumnHeaderWidth(\n columnIndex,\n state,\n maxColumnWidth\n );\n },\n name => {\n const group = model.columnHeaderGroupMap.get(name);\n assertNotNull(group, `${name} not found in columnHeaderGroupMap`);\n return this.getColumnHeaderGroupWidth(\n group.childIndexes[0],\n group.depth,\n state,\n maxColumnWidth\n );\n }\n );\n const paddingMap = rebalanceTree(groupTree);\n this.cachedPaddingMaps.set(root.name, paddingMap);\n return paddingMap.get(model.columns[modelColumn].name) ?? 0;\n }\n\n private getCachedCurrentModelColumnNames = memoizeOne(\n (columns: readonly dh.Column[]) => columns.map(col => col.name)\n );\n\n private getCachedCurrentHeaderGroupNames = memoizeOne(\n (columnHeaderGroups: readonly ColumnHeaderGroup[]) =>\n columnHeaderGroups.map(group => group.name)\n );\n\n private updateCalculatedColumnWidths(model: IrisGridModel): void {\n assertNotNull(this.cachedModelColumnNames);\n const calculatedColumnWidthsByName = new Map<ColumnName, number>();\n this.cachedModelColumnNames.forEach((name, index) => {\n const prevColumnWidth = this.calculatedColumnWidths.get(index);\n if (prevColumnWidth != null) {\n calculatedColumnWidthsByName.set(name, prevColumnWidth);\n }\n });\n this.resetCalculatedColumnWidths();\n calculatedColumnWidthsByName.forEach((width, name) => {\n const index = model.getColumnIndexByName(name);\n if (index != null) {\n this.calculatedColumnWidths.set(index, width);\n }\n });\n trimMap(this.calculatedColumnWidths);\n }\n\n /**\n * Updates the user column widths based on the current model state\n * @param model The current IrisGridModel\n */\n private updateUserColumnWidths(model: IrisGridModel): void {\n this.userColumnWidths = new Map<ModelIndex, number>();\n this.userColumnWidthsByName.forEach((width, name) => {\n const modelIndex = model.getColumnIndexByName(name);\n if (modelIndex != null) {\n super.setColumnWidth(modelIndex, width);\n }\n });\n }\n\n /**\n * Updates the user and calculated column widths if the model columns have changed\n * @param model The current IrisGridModel\n */\n private updateColumnWidthsIfNecessary(model: IrisGridModel): void {\n // Comparing model.columns references wouldn't work here because\n // the reference can change in the model without the actual column definitions changing\n const modelColumnNames = this.getCachedCurrentModelColumnNames(\n model.columns\n );\n const isFirstCall = this.cachedModelColumnNames == null;\n if (\n this.cachedModelColumnNames != null &&\n this.cachedModelColumnNames !== modelColumnNames &&\n !deepEqual(modelColumnNames, this.cachedModelColumnNames)\n ) {\n // Preserve column widths when possible to minimize visual shifts in the grid layout\n this.updateCalculatedColumnWidths(model);\n this.updateUserColumnWidths(model);\n this.cachedPaddingMaps.clear();\n } else if (isFirstCall && this.userColumnWidthsByName.size > 0) {\n // On the first call, project the seeded by-name widths into the\n // by-index map for the current model.\n this.updateUserColumnWidths(model);\n }\n this.cachedModelColumnNames = modelColumnNames;\n\n if (\n this.cachedHeaderGroupNames != null &&\n !deepEqual(\n this.getCachedCurrentHeaderGroupNames(model.columnHeaderGroups),\n this.cachedHeaderGroupNames\n )\n ) {\n this.resetCalculatedColumnWidths();\n }\n this.cachedHeaderGroupNames = model.columnHeaderGroups.map(\n group => group.name\n );\n }\n\n resetCalculatedHeaderGroupWidths(): void {\n this.cachedPaddingMaps.clear();\n }\n\n resetCalculatedColumnWidths(): void {\n super.resetCalculatedColumnWidths();\n this.resetCalculatedHeaderGroupWidths();\n }\n\n getGridY(state: IrisGridMetricState): number {\n // The state here seems to be a GridMetricState with stateOverrides passed from IrisGrid in the props,\n // not guaranteed to be IrisGridMetricState\n let gridY = super.getGridY(state);\n const {\n isFilterBarShown,\n theme,\n advancedFilters,\n quickFilters,\n sorts,\n reverse,\n } = state;\n if (isFilterBarShown) {\n gridY += theme.filterBarHeight;\n } else if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n gridY += theme.filterBarCollapsedHeight;\n }\n if (reverse && sorts != null && sorts.length > 0) {\n gridY += theme.reverseHeaderBarHeight;\n }\n\n return gridY;\n }\n\n /**\n * Gets the metrics for the current state. This method has to be called before setColumnSize or resetColumnSize.\n * @param state The current IrisGridMetricState\n * @returns The metrics for the current state\n */\n getMetrics(state: IrisGridMetricState): GridMetrics {\n const { model } = state;\n // Update column widths if columns in the cached model don't match the current model passed in the state\n this.updateColumnWidthsIfNecessary(model);\n\n return super.getMetrics(state);\n }\n\n /**\n * Sets the width for a specific column by index\n * @param column The index of the column to set\n * @param size The new width for the column\n */\n setColumnWidth(column: number, size: number): void {\n super.setColumnWidth(column, size);\n assertNotNull(\n this.cachedModelColumnNames,\n 'setColumnWidth should be called after getMetrics'\n );\n const name = this.cachedModelColumnNames[column];\n if (name != null) {\n this.userColumnWidthsByName.set(name, size);\n trimMap(this.userColumnWidthsByName);\n }\n }\n\n /**\n * Resets the width for a specific column by index\n * @param column The index of the column to reset\n */\n resetColumnWidth(column: number): void {\n super.resetColumnWidth(column);\n assertNotNull(\n this.cachedModelColumnNames,\n 'resetColumnWidth should be called after getMetrics'\n );\n const name = this.cachedModelColumnNames[column];\n if (name != null) {\n this.userColumnWidthsByName.delete(name);\n }\n }\n\n /**\n * Resets the user width for a column by its name. Works regardless of\n * whether the column is currently present in the model, so it is safe to\n * call when the model is about to be swapped (e.g. when applying a rollup).\n * @param name The name of the column to reset\n */\n resetColumnWidthByName(name: ColumnName): void {\n this.userColumnWidthsByName.delete(name);\n if (this.cachedModelColumnNames != null) {\n const index = this.cachedModelColumnNames.indexOf(name);\n if (index >= 0) {\n super.resetColumnWidth(index);\n }\n }\n }\n\n /**\n * Resets all user column widths\n */\n resetAllColumnWidths(): void {\n this.userColumnWidths = new Map<ModelIndex, number>();\n this.userColumnWidthsByName = new Map<ColumnName, number>();\n }\n\n /**\n * Gets the user column widths\n * @returns A map of user column widths\n */\n getUserColumnWidths(): ModelSizeMap {\n // This might return stale data if getMetrics hasn't been called\n return this.userColumnWidths;\n }\n\n /**\n * Gets the user column widths keyed by column name. This is the source\n * of truth for hidden/manually-sized columns across model swaps and\n * persistence boundaries.\n * @returns A map of user column widths keyed by column name\n */\n getUserColumnWidthsByName(): ReadonlyMap<ColumnName, number> {\n return this.userColumnWidthsByName;\n }\n\n getCalculatedColumnWidths(): ModelSizeMap {\n return this.calculatedColumnWidths;\n }\n\n /**\n * Calculate the width of the specified column's header\n * @param modelColumn ModelIndex of the column to get the header width for\n * @param state The grid metric state\n * @param maxColumnWidth Maximum allowed column width, applies only to leaf nodes\n * @returns The calculated width of the column header\n */\n calculateColumnHeaderWidth(\n modelColumn: ModelIndex,\n state: IrisGridMetricState,\n maxColumnWidth: number\n ): number {\n const { model } = state;\n\n const parent = model.getColumnHeaderParentGroup(modelColumn, 0);\n\n const baseHeaderWidth = super.calculateColumnHeaderWidth(\n modelColumn,\n state,\n maxColumnWidth\n );\n\n // Column header with no grouping, use base implementation\n if (parent == null) {\n return baseHeaderWidth;\n }\n\n const headerPadding = this.getHeaderPadding(\n state,\n modelColumn,\n maxColumnWidth\n );\n\n return baseHeaderWidth + headerPadding;\n }\n\n // Original width of column header group content, including title, padding, icons, etc.\n // Does not include any rebalancing adjustments\n getColumnHeaderGroupWidth(\n modelColumn: ModelIndex,\n depth: number,\n state: IrisGridMetricState,\n maxColumnWidth: number\n ): number {\n const { model, theme, context } = state;\n const { headerHorizontalPadding, headerFont } = theme;\n this.calculateLowerFontWidth(headerFont, context);\n this.calculateUpperFontWidth(headerFont, context);\n\n const padding = headerHorizontalPadding * 2;\n\n const headerText = model.textForColumnHeader(modelColumn, depth);\n\n const isColumnExpandable =\n isExpandableColumnGridModel(model) &&\n model.isColumnExpandable(modelColumn);\n\n const expandCollapseIconWidth = isColumnExpandable ? theme.iconSize : 0;\n\n if (headerText !== undefined && headerText !== '') {\n return (\n this.calculateTextWidth(\n context,\n headerFont,\n headerText,\n maxColumnWidth - padding\n ) +\n padding +\n expandCollapseIconWidth\n );\n }\n\n return padding + expandCollapseIconWidth;\n }\n\n /**\n * Get metrics for positioning the filter bar input field.\n * @param index The visible index of the column to get the filter box coordinates for\n * @param state The current IrisGridMetricState\n * @param metrics The grid metrics\n * @returns Coordinates for the filter input field, or null if positioning cannot be calculated\n */\n // eslint-disable-next-line class-methods-use-this\n getFilterInputCoordinates(\n index: VisibleIndex,\n state: IrisGridMetricState,\n metrics: GridMetrics\n ): { x: number; y: number; width: number; height: number } | null {\n // Only handle standard columns (>= 0) in the base implementation\n // Plugins can override to handle special columns (e.g., negative indices)\n if (index < 0) {\n return null;\n }\n\n const { theme } = state;\n const { filterBarHeight = 0 } = theme;\n const { gridX, gridY, allColumnXs, allColumnWidths } = metrics;\n\n const columnX = allColumnXs.get(index);\n const columnWidth = allColumnWidths.get(index);\n\n if (\n columnX == null ||\n columnWidth == null ||\n // Don't show the filter box for invisible columns\n columnWidth === 0 ||\n filterBarHeight === 0\n ) {\n return null;\n }\n\n return {\n x: gridX + columnX,\n y: gridY - filterBarHeight,\n width: columnWidth + 1, // cover right border\n height: filterBarHeight - 1, // remove bottom border\n };\n }\n\n /**\n * Calculate the new left index to bring the given column into view.\n * @param column The column that should be scrolled into view\n * @param state The current IrisGridMetricState\n * @param metrics The grid metrics\n * @returns The left column index to scroll to, or null if no scroll is needed\n */\n getScrollLeftForColumn(\n column: VisibleIndex,\n state: IrisGridMetricState,\n metrics: GridMetrics\n ): VisibleIndex | null {\n const { left, rightVisible, lastLeft } = metrics;\n\n if (column < 0) {\n return null;\n }\n\n if (column < left) {\n // Column is to the left of visible area\n return column;\n }\n\n if (rightVisible < column) {\n // Column is to the right of visible area\n const newLeft = this.getLastLeft(\n state,\n column,\n this.getVisibleWidth(state)\n );\n return Math.min(newLeft, lastLeft);\n }\n\n // Column is already visible, no scroll needed\n return null;\n }\n\n /**\n * Get the coordinates for the advanced filter button positioned in the filter bar.\n * @param index The column index\n * @param state The current IrisGridMetricState\n * @param metrics The grid metrics\n * @returns Coordinates for the advanced filter button, or null if it should not be shown\n */\n getAdvancedFilterButtonCoordinates(\n index: VisibleIndex,\n state: IrisGridMetricState,\n metrics: GridMetrics\n ): { x: number; y: number } | null {\n const filterBoxCoordinates = this.getFilterInputCoordinates(\n index,\n state,\n metrics\n );\n\n if (filterBoxCoordinates == null) {\n return null;\n }\n\n const { x, y, width } = filterBoxCoordinates;\n\n return {\n x: x + width - 25, // Right edge of filter box (24px button + 1px for border)\n y: y + 2, // 2px top margin for the button\n };\n }\n}\n\nexport default IrisGridMetricCalculator;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"IrisGridMetricCalculator.js","names":["deepEqual","memoizeOne","GridMetricCalculator","trimMap","isExpandableColumnGridModel","assertNotNull","rebalanceTree","IrisGridMetricCalculator","constructor","options","arguments","length","undefined","userColumnWidthsByName","rest","_objectWithoutProperties","_excluded","_defineProperty","Map","columns","map","col","name","columnHeaderGroups","group","getModelColumnRoot","model","modelColumn","depth","current","getColumnHeaderParentGroup","root","buildNode","getLeafValue","getGroupValue","_getLeafValue","headerGroup","columnHeaderGroupMap","get","value","children","childName","getHeaderPadding","state","maxColumnWidth","_paddingMap$get","cachedMap","cachedPaddingMaps","_cachedMap$get","groupTree","columnIndex","getColumnIndexByName","concat","calculateColumnHeaderWidth","getColumnHeaderGroupWidth","childIndexes","paddingMap","set","updateCalculatedColumnWidths","cachedModelColumnNames","calculatedColumnWidthsByName","forEach","index","prevColumnWidth","calculatedColumnWidths","resetCalculatedColumnWidths","width","updateUserColumnWidths","userColumnWidths","modelIndex","setColumnWidth","updateColumnWidthsIfNecessary","modelColumnNames","getCachedCurrentModelColumnNames","isFirstCall","clear","size","cachedHeaderGroupNames","getCachedCurrentHeaderGroupNames","resetCalculatedHeaderGroupWidths","getGridY","gridY","isFilterBarShown","theme","advancedFilters","quickFilters","sorts","reverse","filterBarHeight","filterBarCollapsedHeight","reverseHeaderBarHeight","getMetrics","column","resetColumnWidth","delete","resetColumnWidthByName","indexOf","resetAllColumnWidths","getUserColumnWidths","getUserColumnWidthsByName","getCalculatedColumnWidths","parent","baseHeaderWidth","headerPadding","context","headerHorizontalPadding","headerFont","calculateLowerFontWidth","calculateUpperFontWidth","padding","headerText","textForColumnHeader","isColumnExpandable","expandCollapseIconWidth","iconSize","calculateTextWidth","getFilterInputCoordinates","metrics","_theme$filterBarHeigh","gridX","allColumnXs","allColumnWidths","columnX","columnWidth","x","y","height","getScrollLeftForColumn","left","rightVisible","lastLeft","newLeft","getLastLeft","getVisibleWidth","Math","min","getAdvancedFilterButtonCoordinates","filterBoxCoordinates"],"sources":["../src/IrisGridMetricCalculator.ts"],"sourcesContent":["import deepEqual from 'fast-deep-equal';\nimport memoizeOne from 'memoize-one';\nimport {\n GridMetricCalculator,\n type GridMetrics,\n type GridMetricState,\n type ModelIndex,\n type ModelSizeMap,\n trimMap,\n isExpandableColumnGridModel,\n type VisibleIndex,\n} from '@deephaven/grid';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport type IrisGridModel from './IrisGridModel';\nimport { type IrisGridStateOverride, type ColumnName } from './CommonTypes';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\nimport { rebalanceTree, type TreeNode } from './TreeRebalanceUtil';\n\nexport type IrisGridMetricState = GridMetricState & IrisGridStateOverride;\n\ntype GridMetricCalculatorOptions = NonNullable<\n ConstructorParameters<typeof GridMetricCalculator>[0]\n>;\n\nexport type IrisGridMetricCalculatorOptions = GridMetricCalculatorOptions & {\n /**\n * Map of user-set column widths keyed by column name. This is the source\n * of truth for hidden/manually-sized columns across model swaps (e.g.\n * applying or removing a rollup), where the model's column indices\n * change but names are stable. Entries for columns absent from the\n * current model are preserved and re-projected onto the by-index map\n * whenever the model swaps.\n */\n userColumnWidthsByName?: Map<ColumnName, number>;\n};\n\nexport class IrisGridMetricCalculator extends GridMetricCalculator {\n // Column widths by name to keep track of columns going in and out of viewport.\n private userColumnWidthsByName: Map<ColumnName, number>;\n\n // Cached model column names to detect when the column width map update is necessary\n private cachedModelColumnNames: readonly ColumnName[] | undefined;\n\n private cachedHeaderGroupNames: readonly string[] | undefined;\n\n // Cached padding maps for column header groups\n private cachedPaddingMaps: Map<string, Map<string, number>> = new Map();\n\n constructor(options: IrisGridMetricCalculatorOptions = {}) {\n const { userColumnWidthsByName, ...rest } = options;\n super(rest);\n this.userColumnWidthsByName = userColumnWidthsByName ?? new Map();\n }\n\n static getModelColumnRoot(\n model: IrisGridModel,\n modelColumn: ModelIndex\n ): ColumnHeaderGroup | undefined {\n let depth = 0;\n let current = model.getColumnHeaderParentGroup(modelColumn, depth);\n let root = current;\n\n while (current != null) {\n root = current;\n depth += 1;\n current = model.getColumnHeaderParentGroup(modelColumn, depth);\n }\n\n return root;\n }\n\n /**\n * Builds a TreeNode from the model header groups and columns for padding calculation\n * @param name The name of the root node to build the tree for\n * @param model The IrisGridModel containing columns and header groups\n * @param getLeafValue Function to get the value for leaf nodes (columns)\n * @param getGroupValue Function to get the value for group nodes (header groups)\n * @returns The TreeNode structure\n */\n private static buildNode(\n name: string,\n model: IrisGridModel,\n getLeafValue: (name: string) => number,\n getGroupValue: (name: string) => number\n ): TreeNode {\n const headerGroup = model.columnHeaderGroupMap.get(name);\n\n if (headerGroup) {\n const value = getGroupValue(name);\n\n const children = headerGroup.children.map(childName =>\n IrisGridMetricCalculator.buildNode(\n childName,\n model,\n getLeafValue,\n getGroupValue\n )\n );\n\n // Group node\n return {\n name,\n children,\n value,\n };\n }\n\n // Leaf node\n return {\n name,\n children: [],\n value: getLeafValue(name) ?? 0,\n };\n }\n\n /**\n * Gets the header padding for a specific column based on the widths of its group tree nodes.\n * We only adjust paddings on the column, because the group widths are automatically sized to fit their children.\n * @param state The current IrisGridMetricState\n * @param modelColumn The column index to get the padding for\n * @param maxColumnWidth Maximum allowed column width, applies only to leaf nodes\n * @returns The calculated header padding for the column\n */\n private getHeaderPadding(\n state: IrisGridMetricState,\n modelColumn: ModelIndex,\n maxColumnWidth: number\n ): number {\n const { model } = state;\n const root = IrisGridMetricCalculator.getModelColumnRoot(\n model,\n modelColumn\n );\n if (root == null) {\n return 0;\n }\n const cachedMap = this.cachedPaddingMaps.get(root.name);\n if (cachedMap != null) {\n return cachedMap.get(model.columns[modelColumn].name) ?? 0;\n }\n const groupTree = IrisGridMetricCalculator.buildNode(\n root.name,\n model,\n name => {\n const columnIndex = model.getColumnIndexByName(name);\n assertNotNull(columnIndex, `${name} not found in model columns`);\n return super.calculateColumnHeaderWidth(\n columnIndex,\n state,\n maxColumnWidth\n );\n },\n name => {\n const group = model.columnHeaderGroupMap.get(name);\n assertNotNull(group, `${name} not found in columnHeaderGroupMap`);\n return this.getColumnHeaderGroupWidth(\n group.childIndexes[0],\n group.depth,\n state,\n maxColumnWidth\n );\n }\n );\n const paddingMap = rebalanceTree(groupTree);\n this.cachedPaddingMaps.set(root.name, paddingMap);\n return paddingMap.get(model.columns[modelColumn].name) ?? 0;\n }\n\n private getCachedCurrentModelColumnNames = memoizeOne(\n (columns: readonly dh.Column[]) => columns.map(col => col.name)\n );\n\n private getCachedCurrentHeaderGroupNames = memoizeOne(\n (columnHeaderGroups: readonly ColumnHeaderGroup[]) =>\n columnHeaderGroups.map(group => group.name)\n );\n\n private updateCalculatedColumnWidths(model: IrisGridModel): void {\n assertNotNull(this.cachedModelColumnNames);\n const calculatedColumnWidthsByName = new Map<ColumnName, number>();\n this.cachedModelColumnNames.forEach((name, index) => {\n const prevColumnWidth = this.calculatedColumnWidths.get(index);\n if (prevColumnWidth != null) {\n calculatedColumnWidthsByName.set(name, prevColumnWidth);\n }\n });\n this.resetCalculatedColumnWidths();\n calculatedColumnWidthsByName.forEach((width, name) => {\n const index = model.getColumnIndexByName(name);\n if (index != null) {\n this.calculatedColumnWidths.set(index, width);\n }\n });\n trimMap(this.calculatedColumnWidths);\n }\n\n /**\n * Updates the user column widths based on the current model state\n * @param model The current IrisGridModel\n */\n private updateUserColumnWidths(model: IrisGridModel): void {\n this.userColumnWidths = new Map<ModelIndex, number>();\n this.userColumnWidthsByName.forEach((width, name) => {\n const modelIndex = model.getColumnIndexByName(name);\n if (modelIndex != null) {\n super.setColumnWidth(modelIndex, width);\n }\n });\n }\n\n /**\n * Updates the user and calculated column widths if the model columns have changed\n * @param model The current IrisGridModel\n */\n private updateColumnWidthsIfNecessary(model: IrisGridModel): void {\n // Comparing model.columns references wouldn't work here because\n // the reference can change in the model without the actual column definitions changing\n const modelColumnNames = this.getCachedCurrentModelColumnNames(\n model.columns\n );\n const isFirstCall = this.cachedModelColumnNames == null;\n if (\n this.cachedModelColumnNames != null &&\n this.cachedModelColumnNames !== modelColumnNames &&\n !deepEqual(modelColumnNames, this.cachedModelColumnNames)\n ) {\n // Preserve column widths when possible to minimize visual shifts in the grid layout\n this.updateCalculatedColumnWidths(model);\n this.updateUserColumnWidths(model);\n this.cachedPaddingMaps.clear();\n } else if (isFirstCall && this.userColumnWidthsByName.size > 0) {\n // On the first call, project the seeded by-name widths into the\n // by-index map for the current model.\n this.updateUserColumnWidths(model);\n }\n this.cachedModelColumnNames = modelColumnNames;\n\n if (\n this.cachedHeaderGroupNames != null &&\n !deepEqual(\n this.getCachedCurrentHeaderGroupNames(model.columnHeaderGroups),\n this.cachedHeaderGroupNames\n )\n ) {\n this.resetCalculatedColumnWidths();\n }\n this.cachedHeaderGroupNames = model.columnHeaderGroups.map(\n group => group.name\n );\n }\n\n resetCalculatedHeaderGroupWidths(): void {\n this.cachedPaddingMaps.clear();\n }\n\n resetCalculatedColumnWidths(): void {\n super.resetCalculatedColumnWidths();\n this.resetCalculatedHeaderGroupWidths();\n }\n\n getGridY(state: IrisGridMetricState): number {\n // The state here seems to be a GridMetricState with stateOverrides passed from IrisGrid in the props,\n // not guaranteed to be IrisGridMetricState\n let gridY = super.getGridY(state);\n const {\n isFilterBarShown,\n theme,\n advancedFilters,\n quickFilters,\n sorts,\n reverse,\n } = state;\n if (isFilterBarShown) {\n gridY += theme.filterBarHeight;\n } else if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n gridY += theme.filterBarCollapsedHeight;\n }\n if (reverse && sorts != null && sorts.length > 0) {\n gridY += theme.reverseHeaderBarHeight;\n }\n\n return gridY;\n }\n\n /**\n * Gets the metrics for the current state. This method has to be called before setColumnSize or resetColumnSize.\n * @param state The current IrisGridMetricState\n * @returns The metrics for the current state\n */\n getMetrics(state: IrisGridMetricState): GridMetrics {\n const { model } = state;\n // Update column widths if columns in the cached model don't match the current model passed in the state\n this.updateColumnWidthsIfNecessary(model);\n\n return super.getMetrics(state);\n }\n\n /**\n * Sets the width for a specific column by index\n * @param column The index of the column to set\n * @param size The new width for the column\n */\n setColumnWidth(column: number, size: number): void {\n super.setColumnWidth(column, size);\n assertNotNull(\n this.cachedModelColumnNames,\n 'setColumnWidth should be called after getMetrics'\n );\n const name = this.cachedModelColumnNames[column];\n if (name != null) {\n this.userColumnWidthsByName.set(name, size);\n trimMap(this.userColumnWidthsByName);\n }\n }\n\n /**\n * Resets the width for a specific column by index\n * @param column The index of the column to reset\n */\n resetColumnWidth(column: number): void {\n super.resetColumnWidth(column);\n assertNotNull(\n this.cachedModelColumnNames,\n 'resetColumnWidth should be called after getMetrics'\n );\n const name = this.cachedModelColumnNames[column];\n if (name != null) {\n this.userColumnWidthsByName.delete(name);\n }\n }\n\n /**\n * Resets the user width for a column by its name. Works regardless of\n * whether the column is currently present in the model, so it is safe to\n * call when the model is about to be swapped (e.g. when applying a rollup).\n * @param name The name of the column to reset\n */\n resetColumnWidthByName(name: ColumnName): void {\n this.userColumnWidthsByName.delete(name);\n if (this.cachedModelColumnNames != null) {\n const index = this.cachedModelColumnNames.indexOf(name);\n if (index >= 0) {\n super.resetColumnWidth(index);\n }\n }\n }\n\n /**\n * Resets all user column widths\n */\n resetAllColumnWidths(): void {\n this.userColumnWidths = new Map<ModelIndex, number>();\n this.userColumnWidthsByName = new Map<ColumnName, number>();\n }\n\n /**\n * Gets the user column widths\n * @returns A map of user column widths\n */\n getUserColumnWidths(): ModelSizeMap {\n // This might return stale data if getMetrics hasn't been called\n return this.userColumnWidths;\n }\n\n /**\n * Gets the user column widths keyed by column name. This is the source\n * of truth for hidden/manually-sized columns across model swaps and\n * persistence boundaries.\n * @returns A map of user column widths keyed by column name\n */\n getUserColumnWidthsByName(): ReadonlyMap<ColumnName, number> {\n return this.userColumnWidthsByName;\n }\n\n getCalculatedColumnWidths(): ModelSizeMap {\n return this.calculatedColumnWidths;\n }\n\n /**\n * Calculate the width of the specified column's header\n * @param modelColumn ModelIndex of the column to get the header width for\n * @param state The grid metric state\n * @param maxColumnWidth Maximum allowed column width, applies only to leaf nodes\n * @returns The calculated width of the column header\n */\n calculateColumnHeaderWidth(\n modelColumn: ModelIndex,\n state: IrisGridMetricState,\n maxColumnWidth: number\n ): number {\n const { model } = state;\n\n const parent = model.getColumnHeaderParentGroup(modelColumn, 0);\n\n const baseHeaderWidth = super.calculateColumnHeaderWidth(\n modelColumn,\n state,\n maxColumnWidth\n );\n\n // Column header with no grouping, use base implementation\n if (parent == null) {\n return baseHeaderWidth;\n }\n\n const headerPadding = this.getHeaderPadding(\n state,\n modelColumn,\n maxColumnWidth\n );\n\n return baseHeaderWidth + headerPadding;\n }\n\n // Original width of column header group content, including title, padding, icons, etc.\n // Does not include any rebalancing adjustments\n getColumnHeaderGroupWidth(\n modelColumn: ModelIndex,\n depth: number,\n state: IrisGridMetricState,\n maxColumnWidth: number\n ): number {\n const { model, theme, context } = state;\n const { headerHorizontalPadding, headerFont } = theme;\n this.calculateLowerFontWidth(headerFont, context);\n this.calculateUpperFontWidth(headerFont, context);\n\n const padding = headerHorizontalPadding * 2;\n\n const headerText = model.textForColumnHeader(modelColumn, depth);\n\n const isColumnExpandable =\n isExpandableColumnGridModel(model) &&\n model.isColumnExpandable(modelColumn);\n\n const expandCollapseIconWidth = isColumnExpandable ? theme.iconSize : 0;\n\n if (headerText !== undefined && headerText !== '') {\n return (\n this.calculateTextWidth(\n context,\n headerFont,\n headerText,\n maxColumnWidth - padding\n ) +\n padding +\n expandCollapseIconWidth\n );\n }\n\n return padding + expandCollapseIconWidth;\n }\n\n /**\n * Get metrics for positioning the filter bar input field.\n * @param index The visible index of the column to get the filter box coordinates for\n * @param state The current IrisGridMetricState\n * @param metrics The grid metrics\n * @returns Coordinates for the filter input field, or null if positioning cannot be calculated\n */\n // eslint-disable-next-line class-methods-use-this\n getFilterInputCoordinates(\n index: VisibleIndex,\n state: IrisGridMetricState,\n metrics: GridMetrics\n ): { x: number; y: number; width: number; height: number } | null {\n // Only handle standard columns (>= 0) in the base implementation\n // Plugins can override to handle special columns (e.g., negative indices)\n if (index < 0) {\n return null;\n }\n\n const { theme } = state;\n const { filterBarHeight = 0 } = theme;\n const { gridX, gridY, allColumnXs, allColumnWidths } = metrics;\n\n const columnX = allColumnXs.get(index);\n const columnWidth = allColumnWidths.get(index);\n\n if (\n columnX == null ||\n columnWidth == null ||\n // Don't show the filter box for invisible columns\n columnWidth === 0 ||\n filterBarHeight === 0\n ) {\n return null;\n }\n\n return {\n x: gridX + columnX,\n y: gridY - filterBarHeight,\n width: columnWidth + 1, // cover right border\n height: filterBarHeight - 1, // remove bottom border\n };\n }\n\n /**\n * Calculate the new left index to bring the given column into view.\n * @param column The column that should be scrolled into view\n * @param state The current IrisGridMetricState\n * @param metrics The grid metrics\n * @returns The left column index to scroll to, or null if no scroll is needed\n */\n getScrollLeftForColumn(\n column: VisibleIndex,\n state: IrisGridMetricState,\n metrics: GridMetrics\n ): VisibleIndex | null {\n const { left, rightVisible, lastLeft } = metrics;\n\n if (column < 0) {\n return null;\n }\n\n if (column < left) {\n // Column is to the left of visible area\n return column;\n }\n\n if (rightVisible < column) {\n // Column is to the right of visible area\n const newLeft = this.getLastLeft(\n state,\n column,\n this.getVisibleWidth(state)\n );\n return Math.min(newLeft, lastLeft);\n }\n\n // Column is already visible, no scroll needed\n return null;\n }\n\n /**\n * Get the coordinates for the advanced filter button positioned in the filter bar.\n * @param index The column index\n * @param state The current IrisGridMetricState\n * @param metrics The grid metrics\n * @returns Coordinates for the advanced filter button, or null if it should not be shown\n */\n getAdvancedFilterButtonCoordinates(\n index: VisibleIndex,\n state: IrisGridMetricState,\n metrics: GridMetrics\n ): { x: number; y: number } | null {\n const filterBoxCoordinates = this.getFilterInputCoordinates(\n index,\n state,\n metrics\n );\n\n if (filterBoxCoordinates == null) {\n return null;\n }\n\n const { x, y, width } = filterBoxCoordinates;\n\n return {\n x: x + width - 25, // Right edge of filter box (24px button + 1px for border)\n y: y + 2, // 2px top margin for the button\n };\n }\n}\n\nexport default IrisGridMetricCalculator;\n"],"mappings":"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","ignoreList":[]}
@@ -11,36 +11,38 @@ var COLUMN_BUFFER_PAGES = 1;
11
11
  * React component to keep IrisGridModel in sync
12
12
  */
13
13
  function IrisGridModelUpdater(_ref) {
14
- var {
15
- model,
16
- top,
17
- bottom,
18
- left,
19
- right,
20
- filter,
21
- formatter,
22
- columnAlignmentMap,
23
- reverse = false,
24
- sorts,
25
- customColumns,
26
- movedColumns,
27
- hiddenColumns,
28
- alwaysFetchColumns,
29
- rollupConfig = null,
30
- totalsConfig = null,
31
- selectDistinctColumns = EMPTY_ARRAY,
32
- pendingRowCount = 0,
33
- pendingDataMap = EMPTY_MAP,
34
- frozenColumns,
35
- formatColumns,
36
- columnHeaderGroups,
37
- partitionConfig,
38
- showExtraGroupColumn
39
- } = _ref;
40
- var {
41
- isTotalsAvailable,
42
- isRollupAvailable
43
- } = model;
14
+ var model = _ref.model,
15
+ top = _ref.top,
16
+ bottom = _ref.bottom,
17
+ left = _ref.left,
18
+ right = _ref.right,
19
+ filter = _ref.filter,
20
+ formatter = _ref.formatter,
21
+ columnAlignmentMap = _ref.columnAlignmentMap,
22
+ _ref$reverse = _ref.reverse,
23
+ reverse = _ref$reverse === void 0 ? false : _ref$reverse,
24
+ sorts = _ref.sorts,
25
+ customColumns = _ref.customColumns,
26
+ movedColumns = _ref.movedColumns,
27
+ hiddenColumns = _ref.hiddenColumns,
28
+ alwaysFetchColumns = _ref.alwaysFetchColumns,
29
+ _ref$rollupConfig = _ref.rollupConfig,
30
+ rollupConfig = _ref$rollupConfig === void 0 ? null : _ref$rollupConfig,
31
+ _ref$totalsConfig = _ref.totalsConfig,
32
+ totalsConfig = _ref$totalsConfig === void 0 ? null : _ref$totalsConfig,
33
+ _ref$selectDistinctCo = _ref.selectDistinctColumns,
34
+ selectDistinctColumns = _ref$selectDistinctCo === void 0 ? EMPTY_ARRAY : _ref$selectDistinctCo,
35
+ _ref$pendingRowCount = _ref.pendingRowCount,
36
+ pendingRowCount = _ref$pendingRowCount === void 0 ? 0 : _ref$pendingRowCount,
37
+ _ref$pendingDataMap = _ref.pendingDataMap,
38
+ pendingDataMap = _ref$pendingDataMap === void 0 ? EMPTY_MAP : _ref$pendingDataMap,
39
+ frozenColumns = _ref.frozenColumns,
40
+ formatColumns = _ref.formatColumns,
41
+ columnHeaderGroups = _ref.columnHeaderGroups,
42
+ partitionConfig = _ref.partitionConfig,
43
+ showExtraGroupColumn = _ref.showExtraGroupColumn;
44
+ var isTotalsAvailable = model.isTotalsAvailable,
45
+ isRollupAvailable = model.isRollupAvailable;
44
46
  // Check for showExtraGroupColumn before memoizing columns, since updating it will change the columns
45
47
  useOnChange(() => {
46
48
  if (isIrisGridTreeTableModel(model) && showExtraGroupColumn != null) {
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridModelUpdater.js","names":["useEffect","useMemo","EMPTY_ARRAY","EMPTY_MAP","useOnChange","IrisGridUtils","isPartitionedGridModel","isIrisGridTreeTableModel","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","_ref","model","top","bottom","left","right","filter","formatter","columnAlignmentMap","reverse","sorts","customColumns","movedColumns","hiddenColumns","alwaysFetchColumns","rollupConfig","totalsConfig","selectDistinctColumns","pendingRowCount","pendingDataMap","frozenColumns","formatColumns","columnHeaderGroups","partitionConfig","showExtraGroupColumn","isTotalsAvailable","isRollupAvailable","columns","getModelViewportColumns","updateFilter","updateSorts","sortsForModel","push","dh","Table","sort","updateFormatter","updateColumnAlignmentMap","updateCustomColumns","isCustomColumnsAvailable","updateFormatColumns","isFormatColumnsAvailable","updateViewport","setViewport","updateRollupCOnfig","updateSelectDistinctColumns","isSelectDistinctAvailable","updateTotalsConfig","updateColumnHeaderGroups","updatePartitionConfig","updateFrozenColumns","updatePendingRowCount","updatePendingDataMap","displayName"],"sources":["../src/IrisGridModelUpdater.tsx"],"sourcesContent":["/* eslint-disable react/require-default-props */\n/* eslint-disable no-param-reassign */\nimport { useEffect, useMemo } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type ModelIndex, type MoveOperation } from '@deephaven/grid';\nimport { type SortDescriptor, type Formatter } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport { useOnChange } from '@deephaven/react-hooks';\nimport IrisGridUtils from './IrisGridUtils';\nimport {\n type ColumnName,\n type UITotalsTableConfig,\n type PendingDataMap,\n} from './CommonTypes';\nimport type IrisGridModel from './IrisGridModel';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\nimport {\n type PartitionConfig,\n isPartitionedGridModel,\n} from './PartitionedGridModel';\nimport { isIrisGridTreeTableModel } from './IrisGridTreeTableModel';\n\nconst COLUMN_BUFFER_PAGES = 1;\n\ninterface IrisGridModelUpdaterProps {\n model: IrisGridModel;\n top: number;\n bottom: number;\n left: number | null;\n right: number | null;\n filter: readonly dh.FilterCondition[];\n sorts: readonly SortDescriptor[];\n reverse?: boolean;\n customColumns: readonly ColumnName[];\n movedColumns: readonly MoveOperation[];\n hiddenColumns: readonly ModelIndex[];\n frozenColumns?: readonly ColumnName[];\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n formatColumns: readonly dh.CustomColumn[];\n alwaysFetchColumns: readonly ColumnName[];\n formatter: Formatter;\n columnAlignmentMap: Map<string, CanvasTextAlign>;\n rollupConfig?: dh.RollupConfig | null;\n totalsConfig?: UITotalsTableConfig | null;\n selectDistinctColumns?: readonly ColumnName[];\n pendingRowCount?: number;\n pendingDataMap?: PendingDataMap;\n partitionConfig?: PartitionConfig;\n showExtraGroupColumn?: boolean;\n}\n\n/**\n * React component to keep IrisGridModel in sync\n */\nfunction IrisGridModelUpdater({\n model,\n top,\n bottom,\n left,\n right,\n filter,\n formatter,\n columnAlignmentMap,\n reverse = false,\n sorts,\n customColumns,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n rollupConfig = null,\n totalsConfig = null,\n selectDistinctColumns = EMPTY_ARRAY,\n pendingRowCount = 0,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n formatColumns,\n columnHeaderGroups,\n partitionConfig,\n showExtraGroupColumn,\n}: IrisGridModelUpdaterProps): JSX.Element | null {\n const { isTotalsAvailable, isRollupAvailable } = model;\n // Check for showExtraGroupColumn before memoizing columns, since updating it will change the columns\n useOnChange(() => {\n if (isIrisGridTreeTableModel(model) && showExtraGroupColumn != null) {\n model.showExtraGroupColumn = showExtraGroupColumn;\n }\n }, [model, showExtraGroupColumn]);\n\n const columns = useMemo(\n () =>\n IrisGridUtils.getModelViewportColumns(\n model.columns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n COLUMN_BUFFER_PAGES\n ),\n [\n model.columns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n ]\n );\n useOnChange(\n function updateFilter() {\n model.filter = filter;\n },\n [model, filter]\n );\n useOnChange(\n function updateSorts() {\n const sortsForModel = [...sorts];\n if (reverse) {\n sortsForModel.push(model.dh.Table.reverse());\n }\n model.sort = sortsForModel;\n },\n [model, sorts, reverse]\n );\n useOnChange(\n function updateFormatter() {\n model.formatter = formatter;\n },\n [model, formatter]\n );\n useOnChange(\n function updateColumnAlignmentMap() {\n model.columnAlignmentMap = columnAlignmentMap;\n },\n [model, columnAlignmentMap]\n );\n useOnChange(\n function updateCustomColumns() {\n if (model.isCustomColumnsAvailable) {\n model.customColumns = customColumns;\n }\n },\n [model, customColumns]\n );\n useOnChange(\n function updateFormatColumns() {\n if (model.isFormatColumnsAvailable) {\n model.formatColumns = formatColumns;\n }\n },\n [model, formatColumns]\n );\n useOnChange(\n function updateViewport() {\n model.setViewport(top, bottom, columns);\n },\n [model, top, bottom, columns]\n );\n useOnChange(\n function updateRollupCOnfig() {\n if (isRollupAvailable) {\n model.rollupConfig = rollupConfig;\n }\n },\n [model, isRollupAvailable, rollupConfig]\n );\n useOnChange(\n function updateSelectDistinctColumns() {\n if (model.isSelectDistinctAvailable) {\n model.selectDistinctColumns = selectDistinctColumns;\n }\n },\n [model, selectDistinctColumns]\n );\n useOnChange(\n function updateTotalsConfig() {\n if (isTotalsAvailable) {\n model.totalsConfig = totalsConfig;\n }\n },\n [model, isTotalsAvailable, totalsConfig]\n );\n useOnChange(\n function updateColumnHeaderGroups() {\n model.columnHeaderGroups = columnHeaderGroups;\n },\n [model, columnHeaderGroups]\n );\n useOnChange(\n function updatePartitionConfig() {\n if (partitionConfig && isPartitionedGridModel(model)) {\n model.partitionConfig = partitionConfig;\n }\n },\n [model, partitionConfig]\n );\n // These setters are wrapped in useEffect instead of useOnChange because they emit an event\n // that potentially causes side effects, violating the rule that render should be a pure function.\n useEffect(\n function updateFrozenColumns() {\n if (frozenColumns) {\n model.updateFrozenColumns(frozenColumns);\n }\n },\n [model, frozenColumns]\n );\n useEffect(\n function updatePendingRowCount() {\n model.pendingRowCount = pendingRowCount;\n },\n [model, pendingRowCount]\n );\n useEffect(\n function updatePendingDataMap() {\n model.pendingDataMap = pendingDataMap;\n },\n [model, pendingDataMap]\n );\n\n return null;\n}\n\nIrisGridModelUpdater.displayName = 'IrisGridModelUpdater';\n\nexport default IrisGridModelUpdater;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"IrisGridModelUpdater.js","names":["useEffect","useMemo","EMPTY_ARRAY","EMPTY_MAP","useOnChange","IrisGridUtils","isPartitionedGridModel","isIrisGridTreeTableModel","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","_ref","model","top","bottom","left","right","filter","formatter","columnAlignmentMap","_ref$reverse","reverse","sorts","customColumns","movedColumns","hiddenColumns","alwaysFetchColumns","_ref$rollupConfig","rollupConfig","_ref$totalsConfig","totalsConfig","_ref$selectDistinctCo","selectDistinctColumns","_ref$pendingRowCount","pendingRowCount","_ref$pendingDataMap","pendingDataMap","frozenColumns","formatColumns","columnHeaderGroups","partitionConfig","showExtraGroupColumn","isTotalsAvailable","isRollupAvailable","columns","getModelViewportColumns","updateFilter","updateSorts","sortsForModel","push","dh","Table","sort","updateFormatter","updateColumnAlignmentMap","updateCustomColumns","isCustomColumnsAvailable","updateFormatColumns","isFormatColumnsAvailable","updateViewport","setViewport","updateRollupCOnfig","updateSelectDistinctColumns","isSelectDistinctAvailable","updateTotalsConfig","updateColumnHeaderGroups","updatePartitionConfig","updateFrozenColumns","updatePendingRowCount","updatePendingDataMap","displayName"],"sources":["../src/IrisGridModelUpdater.tsx"],"sourcesContent":["/* eslint-disable react/require-default-props */\n/* eslint-disable no-param-reassign */\nimport { useEffect, useMemo } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type ModelIndex, type MoveOperation } from '@deephaven/grid';\nimport { type SortDescriptor, type Formatter } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport { useOnChange } from '@deephaven/react-hooks';\nimport IrisGridUtils from './IrisGridUtils';\nimport {\n type ColumnName,\n type UITotalsTableConfig,\n type PendingDataMap,\n} from './CommonTypes';\nimport type IrisGridModel from './IrisGridModel';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\nimport {\n type PartitionConfig,\n isPartitionedGridModel,\n} from './PartitionedGridModel';\nimport { isIrisGridTreeTableModel } from './IrisGridTreeTableModel';\n\nconst COLUMN_BUFFER_PAGES = 1;\n\ninterface IrisGridModelUpdaterProps {\n model: IrisGridModel;\n top: number;\n bottom: number;\n left: number | null;\n right: number | null;\n filter: readonly dh.FilterCondition[];\n sorts: readonly SortDescriptor[];\n reverse?: boolean;\n customColumns: readonly ColumnName[];\n movedColumns: readonly MoveOperation[];\n hiddenColumns: readonly ModelIndex[];\n frozenColumns?: readonly ColumnName[];\n columnHeaderGroups: readonly ColumnHeaderGroup[];\n formatColumns: readonly dh.CustomColumn[];\n alwaysFetchColumns: readonly ColumnName[];\n formatter: Formatter;\n columnAlignmentMap: Map<string, CanvasTextAlign>;\n rollupConfig?: dh.RollupConfig | null;\n totalsConfig?: UITotalsTableConfig | null;\n selectDistinctColumns?: readonly ColumnName[];\n pendingRowCount?: number;\n pendingDataMap?: PendingDataMap;\n partitionConfig?: PartitionConfig;\n showExtraGroupColumn?: boolean;\n}\n\n/**\n * React component to keep IrisGridModel in sync\n */\nfunction IrisGridModelUpdater({\n model,\n top,\n bottom,\n left,\n right,\n filter,\n formatter,\n columnAlignmentMap,\n reverse = false,\n sorts,\n customColumns,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n rollupConfig = null,\n totalsConfig = null,\n selectDistinctColumns = EMPTY_ARRAY,\n pendingRowCount = 0,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n formatColumns,\n columnHeaderGroups,\n partitionConfig,\n showExtraGroupColumn,\n}: IrisGridModelUpdaterProps): JSX.Element | null {\n const { isTotalsAvailable, isRollupAvailable } = model;\n // Check for showExtraGroupColumn before memoizing columns, since updating it will change the columns\n useOnChange(() => {\n if (isIrisGridTreeTableModel(model) && showExtraGroupColumn != null) {\n model.showExtraGroupColumn = showExtraGroupColumn;\n }\n }, [model, showExtraGroupColumn]);\n\n const columns = useMemo(\n () =>\n IrisGridUtils.getModelViewportColumns(\n model.columns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n COLUMN_BUFFER_PAGES\n ),\n [\n model.columns,\n left,\n right,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n ]\n );\n useOnChange(\n function updateFilter() {\n model.filter = filter;\n },\n [model, filter]\n );\n useOnChange(\n function updateSorts() {\n const sortsForModel = [...sorts];\n if (reverse) {\n sortsForModel.push(model.dh.Table.reverse());\n }\n model.sort = sortsForModel;\n },\n [model, sorts, reverse]\n );\n useOnChange(\n function updateFormatter() {\n model.formatter = formatter;\n },\n [model, formatter]\n );\n useOnChange(\n function updateColumnAlignmentMap() {\n model.columnAlignmentMap = columnAlignmentMap;\n },\n [model, columnAlignmentMap]\n );\n useOnChange(\n function updateCustomColumns() {\n if (model.isCustomColumnsAvailable) {\n model.customColumns = customColumns;\n }\n },\n [model, customColumns]\n );\n useOnChange(\n function updateFormatColumns() {\n if (model.isFormatColumnsAvailable) {\n model.formatColumns = formatColumns;\n }\n },\n [model, formatColumns]\n );\n useOnChange(\n function updateViewport() {\n model.setViewport(top, bottom, columns);\n },\n [model, top, bottom, columns]\n );\n useOnChange(\n function updateRollupCOnfig() {\n if (isRollupAvailable) {\n model.rollupConfig = rollupConfig;\n }\n },\n [model, isRollupAvailable, rollupConfig]\n );\n useOnChange(\n function updateSelectDistinctColumns() {\n if (model.isSelectDistinctAvailable) {\n model.selectDistinctColumns = selectDistinctColumns;\n }\n },\n [model, selectDistinctColumns]\n );\n useOnChange(\n function updateTotalsConfig() {\n if (isTotalsAvailable) {\n model.totalsConfig = totalsConfig;\n }\n },\n [model, isTotalsAvailable, totalsConfig]\n );\n useOnChange(\n function updateColumnHeaderGroups() {\n model.columnHeaderGroups = columnHeaderGroups;\n },\n [model, columnHeaderGroups]\n );\n useOnChange(\n function updatePartitionConfig() {\n if (partitionConfig && isPartitionedGridModel(model)) {\n model.partitionConfig = partitionConfig;\n }\n },\n [model, partitionConfig]\n );\n // These setters are wrapped in useEffect instead of useOnChange because they emit an event\n // that potentially causes side effects, violating the rule that render should be a pure function.\n useEffect(\n function updateFrozenColumns() {\n if (frozenColumns) {\n model.updateFrozenColumns(frozenColumns);\n }\n },\n [model, frozenColumns]\n );\n useEffect(\n function updatePendingRowCount() {\n model.pendingRowCount = pendingRowCount;\n },\n [model, pendingRowCount]\n );\n useEffect(\n function updatePendingDataMap() {\n model.pendingDataMap = pendingDataMap;\n },\n [model, pendingDataMap]\n );\n\n return null;\n}\n\nIrisGridModelUpdater.displayName = 'IrisGridModelUpdater';\n\nexport default IrisGridModelUpdater;\n"],"mappings":"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","ignoreList":[]}
@@ -31,9 +31,7 @@ class IrisGridPartitionSelector extends Component {
31
31
  this.handlePartitionTableClick = this.handlePartitionTableClick.bind(this);
32
32
  this.handleMergeClick = this.handleMergeClick.bind(this);
33
33
  this.handlePartitionSelect = this.handlePartitionSelect.bind(this);
34
- var {
35
- model
36
- } = props;
34
+ var model = props.model;
37
35
  this.tableUtils = new TableUtils(model.dh);
38
36
  this.pending = new Pending();
39
37
  this.state = {
@@ -47,9 +45,7 @@ class IrisGridPartitionSelector extends Component {
47
45
  componentDidMount() {
48
46
  var _this = this;
49
47
  return _asyncToGenerator(function* () {
50
- var {
51
- model
52
- } = _this.props;
48
+ var model = _this.props.model;
53
49
  try {
54
50
  var keysTable = yield _this.pending.add(model.partitionKeysTable().then(keyTable => keyTable), t => t.close());
55
51
  var baseTable = yield _this.pending.add(model.partitionBaseTable(), t => t.close());
@@ -67,32 +63,25 @@ class IrisGridPartitionSelector extends Component {
67
63
  })();
68
64
  }
69
65
  componentDidUpdate(prevProps) {
70
- var {
71
- partitionConfig: prevConfig
72
- } = prevProps;
73
- var {
74
- partitionConfig
75
- } = this.props;
66
+ var prevConfig = prevProps.partitionConfig;
67
+ var partitionConfig = this.props.partitionConfig;
76
68
  if (prevConfig !== partitionConfig) {
77
69
  this.updatePartitionOptions();
78
70
  }
79
71
  }
80
72
  componentWillUnmount() {
81
73
  this.pending.cancel();
82
- var {
83
- keysTable,
84
- baseTable,
85
- partitionTables
86
- } = this.state;
74
+ var _this$state = this.state,
75
+ keysTable = _this$state.keysTable,
76
+ baseTable = _this$state.baseTable,
77
+ partitionTables = _this$state.partitionTables;
87
78
  baseTable === null || baseTable === void 0 || baseTable.close();
88
79
  keysTable === null || keysTable === void 0 || keysTable.close();
89
80
  partitionTables === null || partitionTables === void 0 || partitionTables.forEach(table => table.close());
90
81
  }
91
82
  handlePartitionTableClick() {
92
83
  log.debug2('handlePartitionTableClick');
93
- var {
94
- partitionConfig
95
- } = this.props;
84
+ var partitionConfig = this.props.partitionConfig;
96
85
  assertNotNull(partitionConfig);
97
86
  var newPartitionConfig = _objectSpread({}, partitionConfig);
98
87
  // Toggle between Keys and Partition mode
@@ -101,9 +90,7 @@ class IrisGridPartitionSelector extends Component {
101
90
  }
102
91
  handleMergeClick() {
103
92
  log.debug2('handleMergeClick');
104
- var {
105
- partitionConfig
106
- } = this.props;
93
+ var partitionConfig = this.props.partitionConfig;
107
94
  assertNotNull(partitionConfig);
108
95
  var newPartitionConfig = _objectSpread({}, partitionConfig);
109
96
  // Toggle between Merged and Partition mode
@@ -119,19 +106,13 @@ class IrisGridPartitionSelector extends Component {
119
106
  handlePartitionSelect(index, selectedValue) {
120
107
  var _this2 = this;
121
108
  return _asyncToGenerator(function* () {
122
- var {
123
- partitionConfig: prevConfig
124
- } = _this2.props;
109
+ var prevConfig = _this2.props.partitionConfig;
125
110
  assertNotNull(prevConfig);
126
111
  log.debug('handlePartitionSelect', index, selectedValue, prevConfig);
127
112
  var newPartitions = [...prevConfig.partitions];
128
113
  newPartitions[index] = selectedValue;
129
- var {
130
- baseTable
131
- } = _this2.state;
132
- var {
133
- keysTable
134
- } = _this2.state;
114
+ var baseTable = _this2.state.baseTable;
115
+ var keysTable = _this2.state.keysTable;
135
116
  assertNotNull(baseTable);
136
117
  assertNotNull(keysTable);
137
118
  try {
@@ -170,9 +151,7 @@ class IrisGridPartitionSelector extends Component {
170
151
  }
171
152
  sendUpdate(partitionConfig) {
172
153
  log.debug2('sendUpdate', partitionConfig);
173
- var {
174
- onChange
175
- } = this.props;
154
+ var onChange = this.props.onChange;
176
155
  onChange(partitionConfig);
177
156
  }
178
157
 
@@ -182,9 +161,7 @@ class IrisGridPartitionSelector extends Component {
182
161
  * @param value The partition value to get the display value for
183
162
  */
184
163
  getDisplayValue(index, value) {
185
- var {
186
- model
187
- } = this.props;
164
+ var model = this.props.model;
188
165
  if (value === null) {
189
166
  return '(null)';
190
167
  }
@@ -204,18 +181,12 @@ class IrisGridPartitionSelector extends Component {
204
181
  updatePartitionOptions() {
205
182
  var _this3 = this;
206
183
  return _asyncToGenerator(function* () {
207
- var {
208
- model
209
- } = _this3.props;
210
- var {
211
- partitionConfig: prevConfig
212
- } = _this3.props;
184
+ var model = _this3.props.model;
185
+ var prevConfig = _this3.props.partitionConfig;
213
186
  if (prevConfig == null) {
214
187
  return;
215
188
  }
216
- var {
217
- keysTable
218
- } = _this3.state;
189
+ var keysTable = _this3.state.keysTable;
219
190
  assertNotNull(keysTable);
220
191
  var partitionFilters = [...prevConfig.partitions].map((partition, i) => {
221
192
  var partitionColumn = keysTable.columns[i];
@@ -236,14 +207,11 @@ class IrisGridPartitionSelector extends Component {
236
207
  })();
237
208
  }
238
209
  getPartitionFilters(partitionTables) {
239
- var {
240
- model,
241
- partitionConfig
242
- } = this.props;
210
+ var _this$props = this.props,
211
+ model = _this$props.model,
212
+ partitionConfig = _this$props.partitionConfig;
243
213
  assertNotNull(partitionConfig);
244
- var {
245
- partitions
246
- } = partitionConfig;
214
+ var partitions = partitionConfig.partitions;
247
215
  log.debug('getPartitionFilters', partitionConfig);
248
216
  if (partitions.length !== partitionTables.length) {
249
217
  throw new Error("Invalid partition config set. Expected ".concat(partitionTables.length, " partitions, but got ").concat(partitions.length));
@@ -266,14 +234,12 @@ class IrisGridPartitionSelector extends Component {
266
234
  return partitionFilters;
267
235
  }
268
236
  render() {
269
- var {
270
- model,
271
- partitionConfig
272
- } = this.props;
273
- var {
274
- isLoading,
275
- partitionTables
276
- } = this.state;
237
+ var _this$props2 = this.props,
238
+ model = _this$props2.model,
239
+ partitionConfig = _this$props2.partitionConfig;
240
+ var _this$state2 = this.state,
241
+ isLoading = _this$state2.isLoading,
242
+ partitionTables = _this$state2.partitionTables;
277
243
  var partitionSelectors = model.partitionColumns.map((column, index) => /*#__PURE__*/_jsxs("div", {
278
244
  className: "column-selector",
279
245
  children: [(partitionTables === null || partitionTables === void 0 ? void 0 : partitionTables[index]) && /*#__PURE__*/_jsx(Picker, {