Skip to content

Commit edbfc9d

Browse files
committed
fix: DH-21658: Fix grid rendering hidden columns
1 parent c46fbaf commit edbfc9d

3 files changed

Lines changed: 27 additions & 20 deletions

File tree

packages/grid/src/GridMetricCalculator.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -262,11 +262,8 @@ export class GridMetricCalculator {
262262
const treePaddingY = 0; // We don't support trees on columns (at least not yet)
263263

264264
const visibleRowHeights = this.getVisibleRowHeights(state);
265-
const visibleColumnWidths = this.getVisibleColumnWidths(
266-
state,
267-
firstColumn,
268-
treePaddingX
269-
);
265+
const [visibleColumnWidths, visibleNonHiddenColumns] =
266+
this.getVisibleColumnWidths(state, firstColumn, treePaddingX);
270267

271268
// Calculate the metrics for the main grid
272269
const visibleRows = Array.from(visibleRowHeights.keys());
@@ -616,6 +613,9 @@ export class GridMetricCalculator {
616613
visibleRows,
617614
visibleColumns,
618615

616+
// Array of visible, non-hidden columns, by grid index
617+
visibleNonHiddenColumns,
618+
619619
// Map of the height/width of columns in the viewport (excluding floating columns)
620620
visibleRowHeights,
621621
visibleColumnWidths,
@@ -1060,18 +1060,19 @@ export class GridMetricCalculator {
10601060
/**
10611061
* Retrieve a map of the width of all the visible columns (non-floating)
10621062
* @param state The grid metric state
1063-
* @returns The widths of all the visible columns
1063+
* @returns The widths of all the visible columns and an array of visible, non-hidden columns
10641064
*/
10651065
getVisibleColumnWidths(
10661066
state: GridMetricState,
10671067
firstColumn: VisibleIndex = this.getFirstColumn(state),
10681068
treePaddingX: number = this.calculateTreePaddingX(state)
1069-
): SizeMap {
1069+
): [SizeMap, VisibleIndex[]] {
10701070
const { left, leftOffset, width, model } = state;
10711071

10721072
let x = 0;
10731073
let column = left;
10741074
const columnWidths = new Map();
1075+
const visibleNonHiddenColumns: VisibleIndex[] = [];
10751076
const { columnCount, floatingRightColumnCount } = model;
10761077
while (
10771078
x < width + leftOffset &&
@@ -1084,11 +1085,14 @@ export class GridMetricCalculator {
10841085
treePaddingX
10851086
);
10861087
columnWidths.set(column, columnWidth);
1088+
if (columnWidth > 0) {
1089+
visibleNonHiddenColumns.push(column);
1090+
}
10871091
x += columnWidth;
10881092
column += 1;
10891093
}
10901094

1091-
return columnWidths;
1095+
return [columnWidths, visibleNonHiddenColumns];
10921096
}
10931097

10941098
/**

packages/grid/src/GridMetrics.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ export type GridMetrics = {
133133
visibleRows: readonly VisibleIndex[];
134134
visibleColumns: readonly VisibleIndex[];
135135

136+
// Array of visible, non-hidden columns, by grid index
137+
visibleNonHiddenColumns: readonly VisibleIndex[];
138+
136139
// Map of the height/width of visible rows/columns
137140
visibleRowHeights: SizeMap;
138141
visibleColumnWidths: SizeMap;

packages/grid/src/GridRenderer.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ export class GridRenderer {
259259
floatingBottomRowCount,
260260
floatingRows,
261261
rowCount,
262-
visibleColumns,
262+
visibleNonHiddenColumns,
263263
allRowYs,
264264
allRowHeights,
265265
} = metrics;
@@ -284,7 +284,7 @@ export class GridRenderer {
284284
this.drawGridLinesForItems(
285285
context,
286286
state,
287-
visibleColumns,
287+
visibleNonHiddenColumns,
288288
floatingRows,
289289
theme.floatingGridColumnColor,
290290
theme.floatingGridRowColor
@@ -293,7 +293,7 @@ export class GridRenderer {
293293
this.drawCellBackgroundsForItems(
294294
context,
295295
state,
296-
visibleColumns,
296+
visibleNonHiddenColumns,
297297
floatingRows
298298
);
299299

@@ -323,8 +323,8 @@ export class GridRenderer {
323323
}
324324

325325
// Draw the cell content...
326-
for (let c = 0; c < visibleColumns.length; c += 1) {
327-
const column = visibleColumns[c];
326+
for (let c = 0; c < visibleNonHiddenColumns.length; c += 1) {
327+
const column = visibleNonHiddenColumns[c];
328328
for (let r = 0; r < floatingRows.length; r += 1) {
329329
const row = floatingRows[r];
330330
this.drawCellContent(context, state, column, row);
@@ -850,12 +850,12 @@ export class GridRenderer {
850850
state: GridRenderState
851851
): void {
852852
const { metrics, theme } = state;
853-
const { visibleColumns, visibleRows } = metrics;
853+
const { visibleNonHiddenColumns, visibleRows } = metrics;
854854

855855
this.drawGridLinesForItems(
856856
context,
857857
state,
858-
visibleColumns,
858+
visibleNonHiddenColumns,
859859
visibleRows,
860860
theme.gridColumnColor,
861861
theme.gridRowColor
@@ -927,11 +927,11 @@ export class GridRenderer {
927927
state: GridRenderState
928928
): void {
929929
const { metrics } = state;
930-
const { visibleColumns, visibleRows } = metrics;
930+
const { visibleNonHiddenColumns, visibleRows } = metrics;
931931
this.drawCellBackgroundsForItems(
932932
context,
933933
state,
934-
visibleColumns,
934+
visibleNonHiddenColumns,
935935
visibleRows
936936
);
937937
}
@@ -1004,10 +1004,10 @@ export class GridRenderer {
10041004
state: GridRenderState
10051005
): void {
10061006
const { metrics } = state;
1007-
const { visibleColumns } = metrics;
1007+
const { visibleNonHiddenColumns } = metrics;
10081008

1009-
for (let i = 0; i < visibleColumns.length; i += 1) {
1010-
const column = visibleColumns[i];
1009+
for (let i = 0; i < visibleNonHiddenColumns.length; i += 1) {
1010+
const column = visibleNonHiddenColumns[i];
10111011
this.drawColumnCellContents(context, state, column);
10121012
}
10131013
}

0 commit comments

Comments
 (0)