Skip to content

Commit ccdc0bf

Browse files
committed
fix column spanning jump on scroll
1 parent 886bae5 commit ccdc0bf

File tree

1 file changed

+24
-10
lines changed

1 file changed

+24
-10
lines changed

packages/x-data-grid/src/hooks/features/columns/gridColumnsUtils.ts

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -431,16 +431,30 @@ export function getFirstNonSpannedColumnToRender({
431431
visibleRows: GridRowEntry[];
432432
}) {
433433
let firstNonSpannedColumnToRender = firstColumnToRender;
434-
for (let i = firstRowToRender; i < lastRowToRender; i += 1) {
435-
const row = visibleRows[i];
436-
if (row) {
437-
const rowId = visibleRows[i].id;
438-
const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(
439-
rowId,
440-
firstColumnToRender,
441-
);
442-
if (cellColSpanInfo && cellColSpanInfo.spannedByColSpan) {
443-
firstNonSpannedColumnToRender = cellColSpanInfo.leftVisibleCellIndex;
434+
let foundStableColumn = false;
435+
436+
// Keep checking columns until we find one that's not spanned in any visible row
437+
while (!foundStableColumn && firstNonSpannedColumnToRender >= 0) {
438+
foundStableColumn = true;
439+
440+
for (let i = firstRowToRender; i < lastRowToRender; i += 1) {
441+
const row = visibleRows[i];
442+
if (row) {
443+
const rowId = visibleRows[i].id;
444+
const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(
445+
rowId,
446+
firstNonSpannedColumnToRender,
447+
);
448+
449+
if (
450+
cellColSpanInfo &&
451+
cellColSpanInfo.spannedByColSpan &&
452+
cellColSpanInfo.leftVisibleCellIndex < firstNonSpannedColumnToRender
453+
) {
454+
firstNonSpannedColumnToRender = cellColSpanInfo.leftVisibleCellIndex;
455+
foundStableColumn = false;
456+
break; // Check the new column index against the visible rows, because it might be spanned
457+
}
444458
}
445459
}
446460
}

0 commit comments

Comments
 (0)