diff --git a/projects/igniteui-angular/src/lib/data-operations/merge-strategy.ts b/projects/igniteui-angular/src/lib/data-operations/merge-strategy.ts index a7a4f8c1059..ead74931b45 100644 --- a/projects/igniteui-angular/src/lib/data-operations/merge-strategy.ts +++ b/projects/igniteui-angular/src/lib/data-operations/merge-strategy.ts @@ -75,7 +75,7 @@ export class DefaultMergeStrategy implements IGridMergeStrategy { index++; continue; } - const recToUpdateData = recData ?? { recordRef: grid.isGhostRecord(rec) ? rec.recordRef : rec, cellMergeMeta: new Map(), ghostRecord: rec.ghostRecord }; + const recToUpdateData = recData ?? { recordRef: grid.isGhostRecord(rec) ? rec.recordRef : rec, cellMergeMeta: new Map(), ghostRecord: rec.ghostRecord, index: index }; recToUpdateData.cellMergeMeta.set(field, { rowSpan: 1, childRecords: [] }); if (prev && comparer.call(this, prev.recordRef, recToUpdateData.recordRef, field, isDate, isTime) && prev.ghostRecord === recToUpdateData.ghostRecord) { const root = prev.cellMergeMeta.get(field)?.root ?? prev; diff --git a/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.ts b/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.ts index de6c031eede..62d70acb164 100644 --- a/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.ts +++ b/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.ts @@ -271,8 +271,11 @@ export class IgxForOfDirective extends IgxForOfToken | null = null; protected _trackByFn: TrackByFunction; protected individualSizeCache: number[] = []; + /** + * @hidden + */ /** Internal track for scroll top that is being virtualized */ - protected _virtScrollPosition = 0; + public _virtScrollPosition = 0; /** If the next onScroll event is triggered due to internal setting of scrollTop */ protected _bScrollInternal = false; // End properties related to virtual height handling @@ -867,7 +870,7 @@ export class IgxForOfDirective extends IgxForOfToken extends IgxForOfToken 0) { const startIndex = this.verticalScrollContainer.state.startIndex; - const prevDataView = this.verticalScrollContainer.igxForOf?.slice(0, startIndex); const data = []; - for (let index = 0; index < startIndex; index++) { - const rec = prevDataView[index]; - if (rec.cellMergeMeta && - // index + maxRowSpan is within view - startIndex < (index + Math.max(...rec.cellMergeMeta.values().toArray().map(x => x.rowSpan)))) { - const visibleIndex = this.isRowPinningToTop ? index + this.pinnedRecordsCount : index; - data.push({ record: rec, index: visibleIndex, dataIndex: index }); - } + const rec = this.verticalScrollContainer.igxForOf[startIndex]; + if (rec && rec.cellMergeMeta) { + this.columnsToMerge.forEach((col) => { + const root = rec.cellMergeMeta?.get(col.field)?.root; + if (root) { + data.push({ record: root, index: root.index, dataIndex: root.index }); + } + }) + } this._mergedDataInView = data; this.notifyChanges(); diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.component.html b/projects/igniteui-angular/src/lib/grids/grid/grid.component.html index 2c588d04f72..9e96d118d99 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.component.html +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.component.html @@ -54,7 +54,7 @@ [IgxScrollInertiaDirection]="this.verticalScrollContainer.dc.instance.scrollDirection"> @for (rowData of mergedDataInView; track rowData.record;) { } @@ -117,13 +117,13 @@ diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts index b6c2091ff0b..52eda88c7ac 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts @@ -131,7 +131,7 @@ export class IgxGridUnmergeActivePipe implements PipeTransform { } let result = cloneArray(collection) as any; uniqueRoots.forEach(x => { - const index = result.indexOf(x); + const index = x.index; const colKeys = [...x.cellMergeMeta.keys()]; const cols = colsToMerge.filter(col => colKeys.indexOf(col.field) !== -1); let res = []; diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.html b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.html index dd46674993c..e7683ef7c9b 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.html +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.html @@ -37,7 +37,7 @@ [IgxScrollInertiaDirection]="this.verticalScrollContainer.dc.instance.scrollDirection"> @for (rowData of mergedDataInView; track rowData.record;) { } @@ -91,14 +91,14 @@ diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.html b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.html index 3f435bdb30e..bc331c85ae6 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.html +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.html @@ -37,7 +37,7 @@ [IgxScrollInertiaDirection]="this.verticalScrollContainer.dc.instance.scrollDirection"> @for (rowData of mergedDataInView; track rowData.record;) { } @@ -97,13 +97,13 @@