From 2f44fcaf7060349ffb3b8bbe5e6a3a92ac37d412 Mon Sep 17 00:00:00 2001 From: Ivan Kitanov Date: Thu, 11 Jun 2026 12:43:49 +0300 Subject: [PATCH 1/2] fix(grid): preserve refs and return new array to reflect changes --- projects/igniteui-angular/grids/core/src/api.service.ts | 8 ++++---- projects/igniteui-angular/grids/core/src/common/pipes.ts | 5 ++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/projects/igniteui-angular/grids/core/src/api.service.ts b/projects/igniteui-angular/grids/core/src/api.service.ts index 5d918de1a50..88822826eb4 100644 --- a/projects/igniteui-angular/grids/core/src/api.service.ts +++ b/projects/igniteui-angular/grids/core/src/api.service.ts @@ -320,8 +320,8 @@ export class GridBaseAPIService implements GridServiceType { const transaction: Transaction = { id: rowId, type: TransactionType.ADD, newValue: rowData }; grid.transactions.add(transaction); } else { - grid.data.push(rowData); - grid.data = cloneArray(grid.data); + (grid.data as any[]).push(rowData); + grid.summaryService.clearSummaryCache(); } grid.validation.markAsTouched(rowId); grid.validation.update(rowId, rowData); @@ -336,8 +336,8 @@ export class GridBaseAPIService implements GridServiceType { const transaction: Transaction = { id: rowID, type: TransactionType.DELETE, newValue: null }; grid.transactions.add(transaction, grid.data[index]); } else { - grid.data.splice(index, 1); - grid.data = cloneArray(grid.data); + (grid.data as any[]).splice(index, 1); + grid.summaryService.clearSummaryCache(); } } else { const state: State = grid.transactions.getState(rowID); diff --git a/projects/igniteui-angular/grids/core/src/common/pipes.ts b/projects/igniteui-angular/grids/core/src/common/pipes.ts index 9a7d14242fa..3c6640c2ecb 100644 --- a/projects/igniteui-angular/grids/core/src/common/pipes.ts +++ b/projects/igniteui-angular/grids/core/src/common/pipes.ts @@ -248,7 +248,10 @@ export class IgxGridTransactionPipe implements PipeTransform { this.grid.dataCloneStrategy); return result; } - return collection; + // Return a shallow copy so downstream pipes and igxGridForOf always + // receive a new array reference when pipeTrigger changes, regardless + // of whether the source array was mutated in place. + return collection.slice(); } } From d60f68666dea0edc3992d710e68f6570e62cd4d1 Mon Sep 17 00:00:00 2001 From: IvanKitanov17 Date: Thu, 11 Jun 2026 15:18:00 +0300 Subject: [PATCH 2/2] chore(grid): addressing comments --- projects/igniteui-angular/grids/core/src/api.service.ts | 4 ++-- projects/igniteui-angular/grids/core/src/common/pipes.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/igniteui-angular/grids/core/src/api.service.ts b/projects/igniteui-angular/grids/core/src/api.service.ts index 88822826eb4..b1ed4e2b39a 100644 --- a/projects/igniteui-angular/grids/core/src/api.service.ts +++ b/projects/igniteui-angular/grids/core/src/api.service.ts @@ -320,7 +320,7 @@ export class GridBaseAPIService implements GridServiceType { const transaction: Transaction = { id: rowId, type: TransactionType.ADD, newValue: rowData }; grid.transactions.add(transaction); } else { - (grid.data as any[]).push(rowData); + (grid.data ?? (grid.data = [])).push(rowData); grid.summaryService.clearSummaryCache(); } grid.validation.markAsTouched(rowId); @@ -336,7 +336,7 @@ export class GridBaseAPIService implements GridServiceType { const transaction: Transaction = { id: rowID, type: TransactionType.DELETE, newValue: null }; grid.transactions.add(transaction, grid.data[index]); } else { - (grid.data as any[]).splice(index, 1); + (grid.data ?? (grid.data = [])).splice(index, 1); grid.summaryService.clearSummaryCache(); } } else { diff --git a/projects/igniteui-angular/grids/core/src/common/pipes.ts b/projects/igniteui-angular/grids/core/src/common/pipes.ts index 3c6640c2ecb..734a0d3be7d 100644 --- a/projects/igniteui-angular/grids/core/src/common/pipes.ts +++ b/projects/igniteui-angular/grids/core/src/common/pipes.ts @@ -251,7 +251,7 @@ export class IgxGridTransactionPipe implements PipeTransform { // Return a shallow copy so downstream pipes and igxGridForOf always // receive a new array reference when pipeTrigger changes, regardless // of whether the source array was mutated in place. - return collection.slice(); + return cloneArray(collection); } }