@deephaven/iris-grid 1.18.1-iris-grid-16.0 → 1.18.2

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 (29) hide show
  1. package/dist/IrisGrid.d.ts +15 -17
  2. package/dist/IrisGrid.d.ts.map +1 -1
  3. package/dist/IrisGrid.js +16 -1
  4. package/dist/IrisGrid.js.map +1 -1
  5. package/dist/IrisGridCacheUtils.d.ts.map +1 -1
  6. package/dist/IrisGridCacheUtils.js +1 -1
  7. package/dist/IrisGridCacheUtils.js.map +1 -1
  8. package/dist/IrisGridMetricCalculator.d.ts +28 -1
  9. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  10. package/dist/IrisGridMetricCalculator.js +43 -3
  11. package/dist/IrisGridMetricCalculator.js.map +1 -1
  12. package/dist/IrisGridUtils.d.ts +11 -3
  13. package/dist/IrisGridUtils.d.ts.map +1 -1
  14. package/dist/IrisGridUtils.js +36 -24
  15. package/dist/IrisGridUtils.js.map +1 -1
  16. package/dist/LazyIrisGrid.d.ts +1 -0
  17. package/dist/LazyIrisGrid.d.ts.map +1 -1
  18. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  19. package/dist/sidebar/conditional-formatting/ConditionEditor.js +40 -20
  20. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  21. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts +1 -1
  22. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts.map +1 -1
  23. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +2 -2
  24. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  25. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +2 -2
  26. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  27. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +22 -19
  28. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  29. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCacheUtils.d.ts","sourceRoot":"","sources":["../src/IrisGridCacheUtils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAsB,EACpB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,iBAAiB,CAAC;AA0EzB;;;;GAIG;AACH,iBAAS,+BAA+B,IAAI,CAC1C,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,iBAAiB,KACzB,mBAAmB,CAOvB;AAED;;;;GAIG;AACH,iBAAS,mCAAmC,IAAI,CAC9C,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,qBAAqB,KACjC,uBAAuB,CAU3B;AAED;;;;;GAKG;AACH,iBAAS,uCAAuC,IAAI,CAClD,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,qBAAqB,EACpC,SAAS,EAAE,iBAAiB,KACzB,uBAAuB,GAAG,mBAAmB,CAqBjD;AAED,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC"}
1
+ {"version":3,"file":"IrisGridCacheUtils.d.ts","sourceRoot":"","sources":["../src/IrisGridCacheUtils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAsB,EACpB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,iBAAiB,CAAC;AA2EzB;;;;GAIG;AACH,iBAAS,+BAA+B,IAAI,CAC1C,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,iBAAiB,KACzB,mBAAmB,CAOvB;AAED;;;;GAIG;AACH,iBAAS,mCAAmC,IAAI,CAC9C,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,qBAAqB,KACjC,uBAAuB,CAU3B;AAED;;;;;GAKG;AACH,iBAAS,uCAAuC,IAAI,CAClD,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,qBAAqB,EACpC,SAAS,EAAE,iBAAiB,KACzB,uBAAuB,GAAG,mBAAmB,CAqBjD;AAED,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC"}
@@ -29,7 +29,7 @@ function areGridStatesEqual(gridStateA, gridStateB) {
29
29
  function areIrisGridStatesEqual(irisGridStateA, irisGridStateB) {
30
30
  // Top level keys we want to check for referential equality
31
31
  var compareStateKeys = ['advancedFilters', 'aggregationSettings', 'customColumnFormatMap', 'columnAlignmentMap', 'isFilterBarShown', 'quickFilters', 'customColumns', 'reverse', 'rollupConfig', 'showSearchBar', 'searchValue', 'selectDistinctColumns', 'selectedSearchColumns', 'sorts', 'invertSearchColumns', 'pendingDataMap', 'frozenColumns', 'conditionalFormats', 'columnHeaderGroups', 'partitionConfig'];
32
- return irisGridStateA === irisGridStateB || irisGridStateA.metrics != null && irisGridStateB.metrics != null && irisGridStateA.metrics.userColumnWidths === irisGridStateB.metrics.userColumnWidths && irisGridStateA.metrics.userRowHeights === irisGridStateB.metrics.userRowHeights && compareStateKeys.every(key => irisGridStateA[key] === irisGridStateB[key]);
32
+ return irisGridStateA === irisGridStateB || irisGridStateA.metrics != null && irisGridStateB.metrics != null && irisGridStateA.metricCalculator === irisGridStateB.metricCalculator && irisGridStateA.metrics.userColumnWidths === irisGridStateB.metrics.userColumnWidths && irisGridStateA.metrics.userRowHeights === irisGridStateB.metrics.userRowHeights && compareStateKeys.every(key => irisGridStateA[key] === irisGridStateB[key]);
33
33
  }
34
34
 
35
35
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCacheUtils.js","names":["memoizeOne","IrisGridUtils","areGridStatesEqual","gridStateA","gridStateB","compareKeys","every","key","areIrisGridStatesEqual","irisGridStateA","irisGridStateB","compareStateKeys","metrics","userColumnWidths","userRowHeights","makeMemoizedGridStateDehydrator","model","gridState","dehydrateGridState","_ref","_ref2","modelA","modelB","makeMemoizedIrisGridStateDehydrator","irisGridState","irisGridUtils","dh","dehydrateIrisGridState","_ref3","_ref4","makeMemoizedCombinedGridStateDehydrator","_objectSpread","_ref5","_ref6","IrisGridCacheUtils"],"sources":["../src/IrisGridCacheUtils.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nimport { type GridState } from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport type IrisGridModel from './IrisGridModel';\nimport IrisGridUtils, {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n type HydratedGridState,\n type HydratedIrisGridState,\n} from './IrisGridUtils';\n\n/**\n * Checks if 2 grid states are equivalent.\n * Checks values and does not require referential equality of the entire state, just the values we care about.\n * @param gridStateA First grid state\n * @param gridStateB Second grid state\n * @returns True if the states are equivalent\n */\nfunction areGridStatesEqual(\n gridStateA: HydratedGridState,\n gridStateB: HydratedGridState\n): boolean {\n const compareKeys = [\n 'isStuckToBottom',\n 'isStuckToRight',\n 'movedColumns',\n 'movedRows',\n ] satisfies Array<keyof GridState>;\n return (\n gridStateA === gridStateB ||\n compareKeys.every(key => gridStateA[key] === gridStateB[key])\n );\n}\n\n/**\n * Checks if 2 iris grid states are equivalent.\n * Checks values and does not require referential equality of the entire state, just the values we care about.\n * @param irisGridStateA First iris grid state\n * @param irisGridStateB Second iris grid state\n * @returns True if the states are equivalent\n */\nfunction areIrisGridStatesEqual(\n irisGridStateA: HydratedIrisGridState,\n irisGridStateB: HydratedIrisGridState\n): boolean {\n // Top level keys we want to check for referential equality\n const compareStateKeys = [\n 'advancedFilters',\n 'aggregationSettings',\n 'customColumnFormatMap',\n 'columnAlignmentMap',\n 'isFilterBarShown',\n 'quickFilters',\n 'customColumns',\n 'reverse',\n 'rollupConfig',\n 'showSearchBar',\n 'searchValue',\n 'selectDistinctColumns',\n 'selectedSearchColumns',\n 'sorts',\n 'invertSearchColumns',\n 'pendingDataMap',\n 'frozenColumns',\n 'conditionalFormats',\n 'columnHeaderGroups',\n 'partitionConfig',\n ] satisfies Array<keyof HydratedIrisGridState>;\n\n return (\n irisGridStateA === irisGridStateB ||\n (irisGridStateA.metrics != null &&\n irisGridStateB.metrics != null &&\n irisGridStateA.metrics.userColumnWidths ===\n irisGridStateB.metrics.userColumnWidths &&\n irisGridStateA.metrics.userRowHeights ===\n irisGridStateB.metrics.userRowHeights &&\n compareStateKeys.every(\n key => irisGridStateA[key] === irisGridStateB[key]\n ))\n );\n}\n\n/**\n * Creates a dehydrator function for grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedGridStateDehydrator(): (\n model: IrisGridModel,\n gridState: HydratedGridState\n) => DehydratedGridState {\n return memoizeOne(\n (model: IrisGridModel, gridState: HydratedGridState) =>\n IrisGridUtils.dehydrateGridState(model, gridState),\n ([modelA, gridStateA], [modelB, gridStateB]) =>\n modelA === modelB && areGridStatesEqual(gridStateA, gridStateB)\n );\n}\n\n/**\n * Creates a dehydrator function for iris grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedIrisGridStateDehydrator(): (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState\n) => DehydratedIrisGridState {\n return memoizeOne(\n (model: IrisGridModel, irisGridState: HydratedIrisGridState) => {\n const irisGridUtils = new IrisGridUtils(model.dh);\n return irisGridUtils.dehydrateIrisGridState(model, irisGridState);\n },\n ([modelA, irisGridStateA], [modelB, irisGridStateB]) =>\n modelA === modelB &&\n areIrisGridStatesEqual(irisGridStateA, irisGridStateB)\n );\n}\n\n/**\n * Creates a dehydrator function for grid and iris grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * Combines the dehydrated grid and iris grid states into a single object.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedCombinedGridStateDehydrator(): (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState,\n gridState: HydratedGridState\n) => DehydratedIrisGridState & DehydratedGridState {\n return memoizeOne(\n (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState,\n gridState: HydratedGridState\n ): DehydratedIrisGridState & DehydratedGridState => {\n const irisGridUtils = new IrisGridUtils(model.dh);\n return {\n ...irisGridUtils.dehydrateIrisGridState(model, irisGridState),\n ...IrisGridUtils.dehydrateGridState(model, gridState),\n };\n },\n (\n [modelA, irisGridStateA, gridStateA],\n [modelB, irisGridStateB, gridStateB]\n ) =>\n modelA === modelB &&\n areIrisGridStatesEqual(irisGridStateA, irisGridStateB) &&\n areGridStatesEqual(gridStateA, gridStateB)\n );\n}\n\nexport const IrisGridCacheUtils = {\n makeMemoizedGridStateDehydrator,\n makeMemoizedIrisGridStateDehydrator,\n makeMemoizedCombinedGridStateDehydrator,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"IrisGridCacheUtils.js","names":["memoizeOne","IrisGridUtils","areGridStatesEqual","gridStateA","gridStateB","compareKeys","every","key","areIrisGridStatesEqual","irisGridStateA","irisGridStateB","compareStateKeys","metrics","metricCalculator","userColumnWidths","userRowHeights","makeMemoizedGridStateDehydrator","model","gridState","dehydrateGridState","_ref","_ref2","modelA","modelB","makeMemoizedIrisGridStateDehydrator","irisGridState","irisGridUtils","dh","dehydrateIrisGridState","_ref3","_ref4","makeMemoizedCombinedGridStateDehydrator","_objectSpread","_ref5","_ref6","IrisGridCacheUtils"],"sources":["../src/IrisGridCacheUtils.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nimport { type GridState } from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport type IrisGridModel from './IrisGridModel';\nimport IrisGridUtils, {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n type HydratedGridState,\n type HydratedIrisGridState,\n} from './IrisGridUtils';\n\n/**\n * Checks if 2 grid states are equivalent.\n * Checks values and does not require referential equality of the entire state, just the values we care about.\n * @param gridStateA First grid state\n * @param gridStateB Second grid state\n * @returns True if the states are equivalent\n */\nfunction areGridStatesEqual(\n gridStateA: HydratedGridState,\n gridStateB: HydratedGridState\n): boolean {\n const compareKeys = [\n 'isStuckToBottom',\n 'isStuckToRight',\n 'movedColumns',\n 'movedRows',\n ] satisfies Array<keyof GridState>;\n return (\n gridStateA === gridStateB ||\n compareKeys.every(key => gridStateA[key] === gridStateB[key])\n );\n}\n\n/**\n * Checks if 2 iris grid states are equivalent.\n * Checks values and does not require referential equality of the entire state, just the values we care about.\n * @param irisGridStateA First iris grid state\n * @param irisGridStateB Second iris grid state\n * @returns True if the states are equivalent\n */\nfunction areIrisGridStatesEqual(\n irisGridStateA: HydratedIrisGridState,\n irisGridStateB: HydratedIrisGridState\n): boolean {\n // Top level keys we want to check for referential equality\n const compareStateKeys = [\n 'advancedFilters',\n 'aggregationSettings',\n 'customColumnFormatMap',\n 'columnAlignmentMap',\n 'isFilterBarShown',\n 'quickFilters',\n 'customColumns',\n 'reverse',\n 'rollupConfig',\n 'showSearchBar',\n 'searchValue',\n 'selectDistinctColumns',\n 'selectedSearchColumns',\n 'sorts',\n 'invertSearchColumns',\n 'pendingDataMap',\n 'frozenColumns',\n 'conditionalFormats',\n 'columnHeaderGroups',\n 'partitionConfig',\n ] satisfies Array<keyof HydratedIrisGridState>;\n\n return (\n irisGridStateA === irisGridStateB ||\n (irisGridStateA.metrics != null &&\n irisGridStateB.metrics != null &&\n irisGridStateA.metricCalculator === irisGridStateB.metricCalculator &&\n irisGridStateA.metrics.userColumnWidths ===\n irisGridStateB.metrics.userColumnWidths &&\n irisGridStateA.metrics.userRowHeights ===\n irisGridStateB.metrics.userRowHeights &&\n compareStateKeys.every(\n key => irisGridStateA[key] === irisGridStateB[key]\n ))\n );\n}\n\n/**\n * Creates a dehydrator function for grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedGridStateDehydrator(): (\n model: IrisGridModel,\n gridState: HydratedGridState\n) => DehydratedGridState {\n return memoizeOne(\n (model: IrisGridModel, gridState: HydratedGridState) =>\n IrisGridUtils.dehydrateGridState(model, gridState),\n ([modelA, gridStateA], [modelB, gridStateB]) =>\n modelA === modelB && areGridStatesEqual(gridStateA, gridStateB)\n );\n}\n\n/**\n * Creates a dehydrator function for iris grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedIrisGridStateDehydrator(): (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState\n) => DehydratedIrisGridState {\n return memoizeOne(\n (model: IrisGridModel, irisGridState: HydratedIrisGridState) => {\n const irisGridUtils = new IrisGridUtils(model.dh);\n return irisGridUtils.dehydrateIrisGridState(model, irisGridState);\n },\n ([modelA, irisGridStateA], [modelB, irisGridStateB]) =>\n modelA === modelB &&\n areIrisGridStatesEqual(irisGridStateA, irisGridStateB)\n );\n}\n\n/**\n * Creates a dehydrator function for grid and iris grid state that is memoized on the last call.\n * Only tracks 1 state at a time. If the model and input states are equal, returns the same dehydrated state object reference.\n * Combines the dehydrated grid and iris grid states into a single object.\n * @returns A dehydrator function memoized on the last call\n */\nfunction makeMemoizedCombinedGridStateDehydrator(): (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState,\n gridState: HydratedGridState\n) => DehydratedIrisGridState & DehydratedGridState {\n return memoizeOne(\n (\n model: IrisGridModel,\n irisGridState: HydratedIrisGridState,\n gridState: HydratedGridState\n ): DehydratedIrisGridState & DehydratedGridState => {\n const irisGridUtils = new IrisGridUtils(model.dh);\n return {\n ...irisGridUtils.dehydrateIrisGridState(model, irisGridState),\n ...IrisGridUtils.dehydrateGridState(model, gridState),\n };\n },\n (\n [modelA, irisGridStateA, gridStateA],\n [modelB, irisGridStateB, gridStateB]\n ) =>\n modelA === modelB &&\n areIrisGridStatesEqual(irisGridStateA, irisGridStateB) &&\n areGridStatesEqual(gridStateA, gridStateB)\n );\n}\n\nexport const IrisGridCacheUtils = {\n makeMemoizedGridStateDehydrator,\n makeMemoizedIrisGridStateDehydrator,\n makeMemoizedCombinedGridStateDehydrator,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,13 +1,26 @@
1
1
  import { GridMetricCalculator, type GridMetrics, type GridMetricState, type ModelIndex, type ModelSizeMap, type VisibleIndex } from '@deephaven/grid';
2
2
  import type IrisGridModel from './IrisGridModel';
3
- import { type IrisGridStateOverride } from './CommonTypes';
3
+ import { type IrisGridStateOverride, type ColumnName } from './CommonTypes';
4
4
  import type ColumnHeaderGroup from './ColumnHeaderGroup';
5
5
  export type IrisGridMetricState = GridMetricState & IrisGridStateOverride;
6
+ type GridMetricCalculatorOptions = NonNullable<ConstructorParameters<typeof GridMetricCalculator>[0]>;
7
+ export type IrisGridMetricCalculatorOptions = GridMetricCalculatorOptions & {
8
+ /**
9
+ * Map of user-set column widths keyed by column name. This is the source
10
+ * of truth for hidden/manually-sized columns across model swaps (e.g.
11
+ * applying or removing a rollup), where the model's column indices
12
+ * change but names are stable. Entries for columns absent from the
13
+ * current model are preserved and re-projected onto the by-index map
14
+ * whenever the model swaps.
15
+ */
16
+ userColumnWidthsByName?: Map<ColumnName, number>;
17
+ };
6
18
  export declare class IrisGridMetricCalculator extends GridMetricCalculator {
7
19
  private userColumnWidthsByName;
8
20
  private cachedModelColumnNames;
9
21
  private cachedHeaderGroupNames;
10
22
  private cachedPaddingMaps;
23
+ constructor(options?: IrisGridMetricCalculatorOptions);
11
24
  static getModelColumnRoot(model: IrisGridModel, modelColumn: ModelIndex): ColumnHeaderGroup | undefined;
12
25
  /**
13
26
  * Builds a TreeNode from the model header groups and columns for padding calculation
@@ -60,6 +73,13 @@ export declare class IrisGridMetricCalculator extends GridMetricCalculator {
60
73
  * @param column The index of the column to reset
61
74
  */
62
75
  resetColumnWidth(column: number): void;
76
+ /**
77
+ * Resets the user width for a column by its name. Works regardless of
78
+ * whether the column is currently present in the model, so it is safe to
79
+ * call when the model is about to be swapped (e.g. when applying a rollup).
80
+ * @param name The name of the column to reset
81
+ */
82
+ resetColumnWidthByName(name: ColumnName): void;
63
83
  /**
64
84
  * Resets all user column widths
65
85
  */
@@ -69,6 +89,13 @@ export declare class IrisGridMetricCalculator extends GridMetricCalculator {
69
89
  * @returns A map of user column widths
70
90
  */
71
91
  getUserColumnWidths(): ModelSizeMap;
92
+ /**
93
+ * Gets the user column widths keyed by column name. This is the source
94
+ * of truth for hidden/manually-sized columns across model swaps and
95
+ * persistence boundaries.
96
+ * @returns A map of user column widths keyed by column name
97
+ */
98
+ getUserColumnWidthsByName(): ReadonlyMap<ColumnName, number>;
72
99
  getCalculatedColumnWidths(): ModelSizeMap;
73
100
  /**
74
101
  * Calculate the width of the specified column's header
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/IrisGridMetricCalculator.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,YAAY,EAGjB,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,qBAAqB,EAAmB,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AAGzD,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG,qBAAqB,CAAC;AAE1E,qBAAa,wBAAyB,SAAQ,oBAAoB;IAEhE,OAAO,CAAC,sBAAsB,CAAsC;IAGpE,OAAO,CAAC,sBAAsB,CAAoC;IAElE,OAAO,CAAC,sBAAsB,CAAgC;IAG9D,OAAO,CAAC,iBAAiB,CAA+C;IAExE,MAAM,CAAC,kBAAkB,CACvB,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,UAAU,GACtB,iBAAiB,GAAG,SAAS;IAchC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAoCxB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IA6CxB,OAAO,CAAC,gCAAgC,CAEtC;IAEF,OAAO,CAAC,gCAAgC,CAGtC;IAEF,OAAO,CAAC,4BAA4B;IAmBpC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAgCrC,gCAAgC,IAAI,IAAI;IAIxC,2BAA2B,IAAI,IAAI;IAKnC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM;IA2B5C;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,mBAAmB,GAAG,WAAW;IAQnD;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAalD;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAYtC;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAK5B;;;OAGG;IACH,mBAAmB,IAAI,YAAY;IAKnC,yBAAyB,IAAI,YAAY;IAIzC;;;;;;OAMG;IACH,0BAA0B,CACxB,WAAW,EAAE,UAAU,EACvB,KAAK,EAAE,mBAAmB,EAC1B,cAAc,EAAE,MAAM,GACrB,MAAM;IA2BT,yBAAyB,CACvB,WAAW,EAAE,UAAU,EACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,mBAAmB,EAC1B,cAAc,EAAE,MAAM,GACrB,MAAM;IAgCT;;;;;;OAMG;IAEH,yBAAyB,CACvB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,WAAW,GACnB;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAgCjE;;;;;;OAMG;IACH,sBAAsB,CACpB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,WAAW,GACnB,YAAY,GAAG,IAAI;IA0BtB;;;;;;OAMG;IACH,kCAAkC,CAChC,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,WAAW,GACnB;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAkBnC;AAED,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"IrisGridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/IrisGridMetricCalculator.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
+ var _excluded = ["userColumnWidthsByName"];
2
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
3
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
1
4
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
2
5
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
6
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
@@ -8,9 +11,14 @@ import { assertNotNull } from '@deephaven/utils';
8
11
  import { rebalanceTree } from "./TreeRebalanceUtil.js";
9
12
  export class IrisGridMetricCalculator extends GridMetricCalculator {
10
13
  constructor() {
11
- super(...arguments);
12
- // Column widths by name to keep track of columns going in and out of viewport
13
- _defineProperty(this, "userColumnWidthsByName", new Map());
14
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
15
+ var {
16
+ userColumnWidthsByName
17
+ } = options,
18
+ rest = _objectWithoutProperties(options, _excluded);
19
+ super(rest);
20
+ // Column widths by name to keep track of columns going in and out of viewport.
21
+ _defineProperty(this, "userColumnWidthsByName", void 0);
14
22
  // Cached model column names to detect when the column width map update is necessary
15
23
  _defineProperty(this, "cachedModelColumnNames", void 0);
16
24
  _defineProperty(this, "cachedHeaderGroupNames", void 0);
@@ -18,6 +26,7 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
18
26
  _defineProperty(this, "cachedPaddingMaps", new Map());
19
27
  _defineProperty(this, "getCachedCurrentModelColumnNames", memoizeOne(columns => columns.map(col => col.name)));
20
28
  _defineProperty(this, "getCachedCurrentHeaderGroupNames", memoizeOne(columnHeaderGroups => columnHeaderGroups.map(group => group.name)));
29
+ this.userColumnWidthsByName = userColumnWidthsByName !== null && userColumnWidthsByName !== void 0 ? userColumnWidthsByName : new Map();
21
30
  }
22
31
  static getModelColumnRoot(model, modelColumn) {
23
32
  var depth = 0;
@@ -138,11 +147,16 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
138
147
  // Comparing model.columns references wouldn't work here because
139
148
  // the reference can change in the model without the actual column definitions changing
140
149
  var modelColumnNames = this.getCachedCurrentModelColumnNames(model.columns);
150
+ var isFirstCall = this.cachedModelColumnNames == null;
141
151
  if (this.cachedModelColumnNames != null && this.cachedModelColumnNames !== modelColumnNames && !deepEqual(modelColumnNames, this.cachedModelColumnNames)) {
142
152
  // Preserve column widths when possible to minimize visual shifts in the grid layout
143
153
  this.updateCalculatedColumnWidths(model);
144
154
  this.updateUserColumnWidths(model);
145
155
  this.cachedPaddingMaps.clear();
156
+ } else if (isFirstCall && this.userColumnWidthsByName.size > 0) {
157
+ // On the first call, project the seeded by-name widths into the
158
+ // by-index map for the current model.
159
+ this.updateUserColumnWidths(model);
146
160
  }
147
161
  this.cachedModelColumnNames = modelColumnNames;
148
162
  if (this.cachedHeaderGroupNames != null && !deepEqual(this.getCachedCurrentHeaderGroupNames(model.columnHeaderGroups), this.cachedHeaderGroupNames)) {
@@ -222,6 +236,22 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
222
236
  }
223
237
  }
224
238
 
239
+ /**
240
+ * Resets the user width for a column by its name. Works regardless of
241
+ * whether the column is currently present in the model, so it is safe to
242
+ * call when the model is about to be swapped (e.g. when applying a rollup).
243
+ * @param name The name of the column to reset
244
+ */
245
+ resetColumnWidthByName(name) {
246
+ this.userColumnWidthsByName.delete(name);
247
+ if (this.cachedModelColumnNames != null) {
248
+ var index = this.cachedModelColumnNames.indexOf(name);
249
+ if (index >= 0) {
250
+ super.resetColumnWidth(index);
251
+ }
252
+ }
253
+ }
254
+
225
255
  /**
226
256
  * Resets all user column widths
227
257
  */
@@ -238,6 +268,16 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
238
268
  // This might return stale data if getMetrics hasn't been called
239
269
  return this.userColumnWidths;
240
270
  }
271
+
272
+ /**
273
+ * Gets the user column widths keyed by column name. This is the source
274
+ * of truth for hidden/manually-sized columns across model swaps and
275
+ * persistence boundaries.
276
+ * @returns A map of user column widths keyed by column name
277
+ */
278
+ getUserColumnWidthsByName() {
279
+ return this.userColumnWidthsByName;
280
+ }
241
281
  getCalculatedColumnWidths() {
242
282
  return this.calculatedColumnWidths;
243
283
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridMetricCalculator.js","names":["deepEqual","memoizeOne","GridMetricCalculator","trimMap","isExpandableColumnGridModel","assertNotNull","rebalanceTree","IrisGridMetricCalculator","constructor","arguments","_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","userColumnWidthsByName","modelIndex","setColumnWidth","updateColumnWidthsIfNecessary","modelColumnNames","getCachedCurrentModelColumnNames","clear","cachedHeaderGroupNames","getCachedCurrentHeaderGroupNames","resetCalculatedHeaderGroupWidths","getGridY","gridY","isFilterBarShown","theme","advancedFilters","quickFilters","sorts","reverse","filterBarHeight","size","filterBarCollapsedHeight","length","reverseHeaderBarHeight","getMetrics","column","resetColumnWidth","delete","resetAllColumnWidths","getUserColumnWidths","getCalculatedColumnWidths","parent","baseHeaderWidth","headerPadding","context","headerHorizontalPadding","headerFont","calculateLowerFontWidth","calculateUpperFontWidth","padding","headerText","textForColumnHeader","isColumnExpandable","expandCollapseIconWidth","iconSize","undefined","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\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> = new Map();\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 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 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 }\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 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 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","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,4 +1,4 @@
1
- import { type GridRange, type GridState, type ModelIndex, type ModelSizeMap, type MoveOperation, type VisibleIndex } from '@deephaven/grid';
1
+ import { type GridMetrics, type GridRange, type GridState, type ModelIndex, type ModelSizeMap, type MoveOperation, type VisibleIndex } from '@deephaven/grid';
2
2
  import type { dh as DhType } from '@deephaven/jsapi-types';
3
3
  import { type ReverseType, type SortDirection, type FormattingRule, type SortDescriptor } from '@deephaven/jsapi-utils';
4
4
  import { type FilterData, type IrisGridState } from './IrisGrid';
@@ -11,7 +11,14 @@ import type AdvancedSettingsType from './sidebar/AdvancedSettingsType';
11
11
  import ColumnHeaderGroup, { type ColumnHeaderGroupConfig } from './ColumnHeaderGroup';
12
12
  import { type PartitionConfig } from './PartitionedGridModel';
13
13
  import { type IrisGridThemeType } from './IrisGridTheme';
14
- export type HydratedIrisGridState = Pick<IrisGridState, 'advancedFilters' | 'aggregationSettings' | 'customColumnFormatMap' | 'columnAlignmentMap' | 'isFilterBarShown' | 'quickFilters' | 'customColumns' | 'reverse' | 'rollupConfig' | 'showSearchBar' | 'searchValue' | 'selectDistinctColumns' | 'selectedSearchColumns' | 'sorts' | 'invertSearchColumns' | 'pendingDataMap' | 'frozenColumns' | 'conditionalFormats' | 'columnHeaderGroups' | 'partitionConfig' | 'metrics'>;
14
+ export type HydratedIrisGridState = Pick<IrisGridState, 'advancedFilters' | 'aggregationSettings' | 'customColumnFormatMap' | 'columnAlignmentMap' | 'isFilterBarShown' | 'quickFilters' | 'customColumns' | 'reverse' | 'rollupConfig' | 'showSearchBar' | 'searchValue' | 'selectDistinctColumns' | 'selectedSearchColumns' | 'sorts' | 'invertSearchColumns' | 'pendingDataMap' | 'frozenColumns' | 'conditionalFormats' | 'columnHeaderGroups' | 'partitionConfig'> & {
15
+ metrics?: Partial<GridMetrics>;
16
+ /**
17
+ * The metric calculator instance, used to access the by-name user column
18
+ * widths map (the source of truth across model swaps).
19
+ */
20
+ metricCalculator?: IrisGridState['metricCalculator'];
21
+ };
15
22
  export type DehydratedPendingDataMap<T> = [number, {
16
23
  data: [string, T][];
17
24
  }][];
@@ -293,8 +300,9 @@ declare class IrisGridUtils {
293
300
  * @param model The table model to import the state with
294
301
  * @param irisGridState The saved IrisGrid state
295
302
  */
296
- hydrateIrisGridState(model: IrisGridModel, irisGridState: DehydratedIrisGridState): Omit<HydratedIrisGridState, 'metrics'> & {
303
+ hydrateIrisGridState(model: IrisGridModel, irisGridState: DehydratedIrisGridState): Omit<HydratedIrisGridState, 'metrics' | 'metricCalculator'> & {
297
304
  userColumnWidths: ModelSizeMap;
305
+ userColumnWidthsByName: Map<ColumnName, number>;
298
306
  userRowHeights: ModelSizeMap;
299
307
  };
300
308
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridUtils.d.ts","sourceRoot":"","sources":["../src/IrisGridUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridUtils.d.ts","sourceRoot":"","sources":["../src/IrisGridUtils.ts"],"names":[],"mappings":"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"}
@@ -859,13 +859,11 @@ class IrisGridUtils {
859
859
  customColumnFormatMap,
860
860
  columnAlignmentMap = EMPTY_MAP,
861
861
  isFilterBarShown,
862
+ metricCalculator,
862
863
  metrics: {
863
- userColumnWidths,
864
- userRowHeights
865
- } = {
866
- userColumnWidths: EMPTY_MAP,
867
- userRowHeights: EMPTY_MAP
868
- },
864
+ userColumnWidths = new Map(),
865
+ userRowHeights = new Map()
866
+ } = {},
869
867
  quickFilters,
870
868
  customColumns,
871
869
  conditionalFormats = EMPTY_ARRAY,
@@ -887,6 +885,19 @@ class IrisGridUtils {
887
885
  } = model;
888
886
  var partitionColumns = isPartitionedGridModelProvider(model) ? model.partitionColumns : [];
889
887
 
888
+ // Prefer the by-name map from the metric calculator: it preserves entries
889
+ // for columns absent from the current model (e.g. while a rollup is
890
+ // active), so reload-then-save round-trips don't drop them.
891
+ // Fall back to projecting the by-index map from `metrics` against the
892
+ // current model for callers that didn't pass a metric calculator.
893
+ var dehydratedUserColumnWidths = metricCalculator != null ? [...metricCalculator.getUserColumnWidthsByName()] : [...userColumnWidths].filter(_ref18 => {
894
+ var [columnIndex] = _ref18;
895
+ return columnIndex != null && columnIndex >= 0 && columnIndex < columns.length;
896
+ }).map(_ref19 => {
897
+ var [columnIndex, width] = _ref19;
898
+ return [columns[columnIndex].name, width];
899
+ });
900
+
890
901
  // Return value will be serialized, should not contain undefined
891
902
  return {
892
903
  advancedFilters: this.dehydrateAdvancedFilters(columns, advancedFilters),
@@ -896,13 +907,7 @@ class IrisGridUtils {
896
907
  isFilterBarShown,
897
908
  quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),
898
909
  sorts: IrisGridUtils.dehydrateSort(sorts),
899
- userColumnWidths: [...userColumnWidths].filter(_ref18 => {
900
- var [columnIndex] = _ref18;
901
- return columnIndex != null && columnIndex >= 0 && columnIndex < columns.length;
902
- }).map(_ref19 => {
903
- var [columnIndex, width] = _ref19;
904
- return [columns[columnIndex].name, width];
905
- }),
910
+ userColumnWidths: dehydratedUserColumnWidths,
906
911
  userRowHeights: [...userRowHeights],
907
912
  customColumns: [...customColumns],
908
913
  conditionalFormats: [...conditionalFormats],
@@ -967,6 +972,20 @@ class IrisGridUtils {
967
972
  formatter
968
973
  } = model;
969
974
  var partitionColumns = isPartitionedGridModelProvider(model) ? model.partitionColumns : [];
975
+
976
+ // Build a name-keyed map preserving every persisted entry, including
977
+ // entries for columns absent from the current model. Then derive the
978
+ // by-index map from that for back-compat with consumers that read
979
+ // widths immediately after hydrate.
980
+ var userColumnWidthsByName = new Map();
981
+ userColumnWidths.forEach(_ref20 => {
982
+ var _columns;
983
+ var [column, width] = _ref20;
984
+ var name = typeof column === 'string' || column instanceof String ? column : (_columns = columns[column]) === null || _columns === void 0 ? void 0 : _columns.name;
985
+ if (name != null) {
986
+ userColumnWidthsByName.set(name, width);
987
+ }
988
+ });
970
989
  return {
971
990
  advancedFilters: this.hydrateAdvancedFilters(columns, advancedFilters, formatter.timeZone),
972
991
  aggregationSettings,
@@ -975,17 +994,10 @@ class IrisGridUtils {
975
994
  isFilterBarShown,
976
995
  quickFilters: this.hydrateQuickFilters(columns, quickFilters, formatter.timeZone),
977
996
  sorts: this.hydrateSort(columns, sorts, true),
978
- userColumnWidths: new Map(userColumnWidths.map(_ref20 => {
979
- var [column, width] = _ref20;
980
- if (typeof column === 'string' || column instanceof String) {
981
- return [columns.findIndex(_ref21 => {
982
- var {
983
- name
984
- } = _ref21;
985
- return name === column;
986
- }), width];
987
- }
988
- return [column, width];
997
+ userColumnWidthsByName,
998
+ userColumnWidths: new Map([...userColumnWidthsByName].map(_ref21 => {
999
+ var [name, width] = _ref21;
1000
+ return [columns.findIndex(c => c.name === name), width];
989
1001
  }).filter(_ref22 => {
990
1002
  var [column] = _ref22;
991
1003
  return column != null && column >= 0 && column < columns.length;