@deephaven/iris-grid 0.85.43 → 0.85.45

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.
@@ -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;AAyEzB;;;;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;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"}
@@ -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', '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 '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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"}
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 '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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"}
@@ -14,11 +14,24 @@ export interface IrisGridMetricState extends GridMetricState {
14
14
  sorts: readonly SortDescriptor[];
15
15
  reverse: boolean;
16
16
  }
17
+ type GridMetricCalculatorOptions = NonNullable<ConstructorParameters<typeof GridMetricCalculator>[0]>;
18
+ export type IrisGridMetricCalculatorOptions = GridMetricCalculatorOptions & {
19
+ /**
20
+ * Map of user-set column widths keyed by column name. This is the source
21
+ * of truth for hidden/manually-sized columns across model swaps (e.g.
22
+ * applying or removing a rollup), where the model's column indices
23
+ * change but names are stable. Entries for columns absent from the
24
+ * current model are preserved and re-projected onto the by-index map
25
+ * whenever the model swaps.
26
+ */
27
+ userColumnWidthsByName?: Map<ColumnName, number>;
28
+ };
17
29
  export declare class IrisGridMetricCalculator extends GridMetricCalculator {
18
- userColumnWidthsByName: Map<ColumnName, number>;
30
+ private userColumnWidthsByName;
19
31
  private cachedModelColumnNames;
20
32
  private cachedHeaderGroupNames;
21
33
  private cachedPaddingMaps;
34
+ constructor(options?: IrisGridMetricCalculatorOptions);
22
35
  static getModelColumnRoot(model: IrisGridModel, modelColumn: ModelIndex): ColumnHeaderGroup | undefined;
23
36
  /**
24
37
  * Builds a TreeNode from the model header groups and columns for padding calculation
@@ -71,6 +84,13 @@ export declare class IrisGridMetricCalculator extends GridMetricCalculator {
71
84
  * @param column The index of the column to reset
72
85
  */
73
86
  resetColumnWidth(column: number): void;
87
+ /**
88
+ * Resets the user width for a column by its name. Works regardless of
89
+ * whether the column is currently present in the model, so it is safe to
90
+ * call when the model is about to be swapped (e.g. when applying a rollup).
91
+ * @param name The name of the column to reset
92
+ */
93
+ resetColumnWidthByName(name: ColumnName): void;
74
94
  /**
75
95
  * Resets all user column widths
76
96
  */
@@ -80,6 +100,13 @@ export declare class IrisGridMetricCalculator extends GridMetricCalculator {
80
100
  * @returns A map of user column widths
81
101
  */
82
102
  getUserColumnWidths(): ModelSizeMap;
103
+ /**
104
+ * Gets the user column widths keyed by column name. This is the source
105
+ * of truth for hidden/manually-sized columns across model swaps and
106
+ * persistence boundaries.
107
+ * @returns A map of user column widths keyed by column name
108
+ */
109
+ getUserColumnWidthsByName(): ReadonlyMap<ColumnName, number>;
83
110
  getCalculatedColumnWidths(): ModelSizeMap;
84
111
  /**
85
112
  * 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":"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"}
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); }
@@ -7,17 +10,27 @@ import { GridMetricCalculator, trimMap, isExpandableColumnGridModel } from '@dee
7
10
  import { assertNotNull } from '@deephaven/utils';
8
11
  import { rebalanceTree } from "./TreeRebalanceUtil.js";
9
12
  export class IrisGridMetricCalculator extends GridMetricCalculator {
13
+ // Column widths by name to keep track of columns going in and out of viewport.
14
+
15
+ // Cached model column names to detect when the column width map update is necessary
16
+
17
+ // Cached padding maps for column header groups
18
+
10
19
  constructor() {
11
- super(...arguments);
12
- _defineProperty(this, "userColumnWidthsByName", new Map());
20
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
21
+ var {
22
+ userColumnWidthsByName
23
+ } = options,
24
+ rest = _objectWithoutProperties(options, _excluded);
25
+ super(rest);
26
+ _defineProperty(this, "userColumnWidthsByName", void 0);
13
27
  _defineProperty(this, "cachedModelColumnNames", void 0);
14
28
  _defineProperty(this, "cachedHeaderGroupNames", void 0);
15
29
  _defineProperty(this, "cachedPaddingMaps", new Map());
16
30
  _defineProperty(this, "getCachedCurrentModelColumnNames", memoizeOne(columns => columns.map(col => col.name)));
17
31
  _defineProperty(this, "getCachedCurrentHeaderGroupNames", memoizeOne(columnHeaderGroups => columnHeaderGroups.map(group => group.name)));
18
- } // Column widths by name to keep track of columns going in and out of viewport
19
- // Cached model column names to detect when the column width map update is necessary
20
- // Cached padding maps for column header groups
32
+ this.userColumnWidthsByName = userColumnWidthsByName !== null && userColumnWidthsByName !== void 0 ? userColumnWidthsByName : new Map();
33
+ }
21
34
  static getModelColumnRoot(model, modelColumn) {
22
35
  var depth = 0;
23
36
  var current = model.getColumnHeaderParentGroup(modelColumn, depth);
@@ -137,11 +150,16 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
137
150
  // Comparing model.columns references wouldn't work here because
138
151
  // the reference can change in the model without the actual column definitions changing
139
152
  var modelColumnNames = this.getCachedCurrentModelColumnNames(model.columns);
153
+ var isFirstCall = this.cachedModelColumnNames == null;
140
154
  if (this.cachedModelColumnNames != null && this.cachedModelColumnNames !== modelColumnNames && !deepEqual(modelColumnNames, this.cachedModelColumnNames)) {
141
155
  // Preserve column widths when possible to minimize visual shifts in the grid layout
142
156
  this.updateCalculatedColumnWidths(model);
143
157
  this.updateUserColumnWidths(model);
144
158
  this.cachedPaddingMaps.clear();
159
+ } else if (isFirstCall && this.userColumnWidthsByName.size > 0) {
160
+ // On the first call, project the seeded by-name widths into the
161
+ // by-index map for the current model.
162
+ this.updateUserColumnWidths(model);
145
163
  }
146
164
  this.cachedModelColumnNames = modelColumnNames;
147
165
  var headerGroupNames = this.getCachedCurrentHeaderGroupNames(model.columnHeaderGroups);
@@ -222,6 +240,22 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
222
240
  }
223
241
  }
224
242
 
243
+ /**
244
+ * Resets the user width for a column by its name. Works regardless of
245
+ * whether the column is currently present in the model, so it is safe to
246
+ * call when the model is about to be swapped (e.g. when applying a rollup).
247
+ * @param name The name of the column to reset
248
+ */
249
+ resetColumnWidthByName(name) {
250
+ this.userColumnWidthsByName.delete(name);
251
+ if (this.cachedModelColumnNames != null) {
252
+ var index = this.cachedModelColumnNames.indexOf(name);
253
+ if (index >= 0) {
254
+ super.resetColumnWidth(index);
255
+ }
256
+ }
257
+ }
258
+
225
259
  /**
226
260
  * Resets all user column widths
227
261
  */
@@ -238,6 +272,16 @@ export class IrisGridMetricCalculator extends GridMetricCalculator {
238
272
  // This might return stale data if getMetrics hasn't been called
239
273
  return this.userColumnWidths;
240
274
  }
275
+
276
+ /**
277
+ * Gets the user column widths keyed by column name. This is the source
278
+ * of truth for hidden/manually-sized columns across model swaps and
279
+ * persistence boundaries.
280
+ * @returns A map of user column widths keyed by column name
281
+ */
282
+ getUserColumnWidthsByName() {
283
+ return this.userColumnWidthsByName;
284
+ }
241
285
  getCalculatedColumnWidths() {
242
286
  return this.calculatedColumnWidths;
243
287
  }
@@ -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","headerGroupNames","getCachedCurrentHeaderGroupNames","cachedHeaderGroupNames","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 GridMetrics,\n ModelIndex,\n ModelSizeMap,\n trimMap,\n isExpandableColumnGridModel,\n type VisibleIndex,\n} from '@deephaven/grid';\nimport type { GridMetricState } from '@deephaven/grid';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { SortDescriptor } from '@deephaven/jsapi-utils';\nimport { assertNotNull } from '@deephaven/utils';\nimport type IrisGridModel from './IrisGridModel';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport {\n ColumnName,\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n} from './CommonTypes';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\nimport { rebalanceTree, type TreeNode } from './TreeRebalanceUtil';\n\nexport interface IrisGridMetricState extends GridMetricState {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n isFilterBarShown: boolean;\n advancedFilters: ReadonlyAdvancedFilterMap;\n quickFilters: ReadonlyQuickFilterMap;\n sorts: readonly SortDescriptor[];\n reverse: boolean;\n}\n\nexport class IrisGridMetricCalculator extends GridMetricCalculator {\n // Column widths by name to keep track of columns going in and out of viewport\n 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 const headerGroupNames = this.getCachedCurrentHeaderGroupNames(\n model.columnHeaderGroups\n );\n if (\n this.cachedHeaderGroupNames != null &&\n this.cachedHeaderGroupNames !== headerGroupNames &&\n !deepEqual(headerGroupNames, this.cachedHeaderGroupNames)\n ) {\n this.resetCalculatedColumnWidths();\n }\n this.cachedHeaderGroupNames = headerGroupNames;\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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"}
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","headerGroupNames","getCachedCurrentHeaderGroupNames","cachedHeaderGroupNames","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 GridMetrics,\n ModelIndex,\n ModelSizeMap,\n trimMap,\n isExpandableColumnGridModel,\n type VisibleIndex,\n} from '@deephaven/grid';\nimport type { GridMetricState } from '@deephaven/grid';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { SortDescriptor } from '@deephaven/jsapi-utils';\nimport { assertNotNull } from '@deephaven/utils';\nimport type IrisGridModel from './IrisGridModel';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport {\n ColumnName,\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n} from './CommonTypes';\nimport type ColumnHeaderGroup from './ColumnHeaderGroup';\nimport { rebalanceTree, type TreeNode } from './TreeRebalanceUtil';\n\nexport interface IrisGridMetricState extends GridMetricState {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n isFilterBarShown: boolean;\n advancedFilters: ReadonlyAdvancedFilterMap;\n quickFilters: ReadonlyQuickFilterMap;\n sorts: readonly SortDescriptor[];\n reverse: boolean;\n}\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 const headerGroupNames = this.getCachedCurrentHeaderGroupNames(\n model.columnHeaderGroups\n );\n if (\n this.cachedHeaderGroupNames != null &&\n this.cachedHeaderGroupNames !== headerGroupNames &&\n !deepEqual(headerGroupNames, this.cachedHeaderGroupNames)\n ) {\n this.resetCalculatedColumnWidths();\n }\n this.cachedHeaderGroupNames = headerGroupNames;\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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"}
@@ -11,7 +11,13 @@ import type AdvancedSettingsType from './sidebar/AdvancedSettingsType';
11
11
  import ColumnHeaderGroup, { ColumnHeaderGroupConfig } from './ColumnHeaderGroup';
12
12
  import { PartitionConfig } from './PartitionedGridModel';
13
13
  import { type IrisGridThemeType } from './IrisGridTheme';
14
- export type HydratedIrisGridState = Pick<IrisGridState, 'advancedFilters' | 'aggregationSettings' | 'customColumnFormatMap' | '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' | 'isFilterBarShown' | 'quickFilters' | 'customColumns' | 'reverse' | 'rollupConfig' | 'showSearchBar' | 'searchValue' | 'selectDistinctColumns' | 'selectedSearchColumns' | 'sorts' | 'invertSearchColumns' | 'pendingDataMap' | 'frozenColumns' | 'conditionalFormats' | 'columnHeaderGroups' | 'partitionConfig' | 'metrics'> & {
15
+ /**
16
+ * The metric calculator instance, used to access the by-name user column
17
+ * widths map (the source of truth across model swaps).
18
+ */
19
+ metricCalculator?: IrisGridState['metricCalculator'];
20
+ };
15
21
  export type DehydratedPendingDataMap<T> = [number, {
16
22
  data: [string, T][];
17
23
  }][];
@@ -291,8 +297,9 @@ declare class IrisGridUtils {
291
297
  * @param model The table model to import the state with
292
298
  * @param irisGridState The saved IrisGrid state
293
299
  */
294
- hydrateIrisGridState(model: IrisGridModel, irisGridState: DehydratedIrisGridState): Omit<HydratedIrisGridState, 'metrics'> & {
300
+ hydrateIrisGridState(model: IrisGridModel, irisGridState: DehydratedIrisGridState): Omit<HydratedIrisGridState, 'metrics' | 'metricCalculator'> & {
295
301
  userColumnWidths: ModelSizeMap;
302
+ userColumnWidthsByName: Map<ColumnName, number>;
296
303
  userRowHeights: ModelSizeMap;
297
304
  };
298
305
  /**
@@ -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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"}
@@ -858,6 +858,7 @@ class IrisGridUtils {
858
858
  advancedFilters,
859
859
  customColumnFormatMap,
860
860
  isFilterBarShown,
861
+ metricCalculator,
861
862
  metrics: {
862
863
  userColumnWidths,
863
864
  userRowHeights
@@ -886,6 +887,19 @@ class IrisGridUtils {
886
887
  } = model;
887
888
  var partitionColumns = isPartitionedGridModelProvider(model) ? model.partitionColumns : [];
888
889
 
890
+ // Prefer the by-name map from the metric calculator: it preserves entries
891
+ // for columns absent from the current model (e.g. while a rollup is
892
+ // active), so reload-then-save round-trips don't drop them.
893
+ // Fall back to projecting the by-index map from `metrics` against the
894
+ // current model for callers that didn't pass a metric calculator.
895
+ var dehydratedUserColumnWidths = metricCalculator != null ? [...metricCalculator.getUserColumnWidthsByName()] : [...userColumnWidths].filter(_ref20 => {
896
+ var [columnIndex] = _ref20;
897
+ return columnIndex != null && columnIndex >= 0 && columnIndex < columns.length;
898
+ }).map(_ref21 => {
899
+ var [columnIndex, width] = _ref21;
900
+ return [columns[columnIndex].name, width];
901
+ });
902
+
889
903
  // Return value will be serialized, should not contain undefined
890
904
  return {
891
905
  advancedFilters: this.dehydrateAdvancedFilters(columns, advancedFilters),
@@ -894,13 +908,7 @@ class IrisGridUtils {
894
908
  isFilterBarShown,
895
909
  quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),
896
910
  sorts: IrisGridUtils.dehydrateSort(sorts),
897
- userColumnWidths: [...userColumnWidths].filter(_ref20 => {
898
- var [columnIndex] = _ref20;
899
- return columnIndex != null && columnIndex >= 0 && columnIndex < columns.length;
900
- }).map(_ref21 => {
901
- var [columnIndex, width] = _ref21;
902
- return [columns[columnIndex].name, width];
903
- }),
911
+ userColumnWidths: dehydratedUserColumnWidths,
904
912
  userRowHeights: [...userRowHeights],
905
913
  customColumns: [...customColumns],
906
914
  conditionalFormats: [...conditionalFormats],
@@ -964,6 +972,20 @@ class IrisGridUtils {
964
972
  formatter
965
973
  } = model;
966
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(_ref22 => {
982
+ var _columns;
983
+ var [column, width] = _ref22;
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
+ });
967
989
  return {
968
990
  advancedFilters: this.hydrateAdvancedFilters(columns, advancedFilters, formatter.timeZone),
969
991
  aggregationSettings,
@@ -971,17 +993,10 @@ class IrisGridUtils {
971
993
  isFilterBarShown,
972
994
  quickFilters: this.hydrateQuickFilters(columns, quickFilters, formatter.timeZone),
973
995
  sorts: this.hydrateSort(columns, sorts, true),
974
- userColumnWidths: new Map(userColumnWidths.map(_ref22 => {
975
- var [column, width] = _ref22;
976
- if (typeof column === 'string' || column instanceof String) {
977
- return [columns.findIndex(_ref23 => {
978
- var {
979
- name
980
- } = _ref23;
981
- return name === column;
982
- }), width];
983
- }
984
- return [column, width];
996
+ userColumnWidthsByName,
997
+ userColumnWidths: new Map([...userColumnWidthsByName].map(_ref23 => {
998
+ var [name, width] = _ref23;
999
+ return [columns.findIndex(c => c.name === name), width];
985
1000
  }).filter(_ref24 => {
986
1001
  var [column] = _ref24;
987
1002
  return column != null && column >= 0 && column < columns.length;