@@ -431,16 +431,30 @@ export function getFirstNonSpannedColumnToRender({
431
431
visibleRows : GridRowEntry [ ] ;
432
432
} ) {
433
433
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
+ }
444
458
}
445
459
}
446
460
}
0 commit comments