From 0ce909bfd6978fbfd4f54299fb5509969dec1151 Mon Sep 17 00:00:00 2001 From: MonikaKirkova Date: Wed, 18 Sep 2024 19:09:48 +0300 Subject: [PATCH 1/2] fix(grid): clear selected rows correctly when a row is updated --- .../lib/grids/grid/grid-row-selection.spec.ts | 23 ++++++++++++++++++- .../lib/grids/selection/selection.service.ts | 9 +++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-row-selection.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-row-selection.spec.ts index 4e42269acdb..e2e73766d13 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-row-selection.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-row-selection.spec.ts @@ -2,7 +2,7 @@ import { TestBed, fakeAsync, tick, waitForAsync, ComponentFixture } from '@angul import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; import { wait, UIInteractions } from '../../test-utils/ui-interactions.spec'; -import { IgxStringFilteringOperand, IgxNumberFilteringOperand } from '../../data-operations/filtering-condition'; +import { IgxStringFilteringOperand, IgxNumberFilteringOperand, IgxBooleanFilteringOperand } from '../../data-operations/filtering-condition'; import { configureTestSuite } from '../../test-utils/configure-suite'; import { RowSelectionComponent, @@ -2139,6 +2139,27 @@ describe('IgxGrid - Row Selection #grid', () => { GridSelectionFunctions.verifyHeaderRowCheckboxState(fix, true, false); expect(grid.selectedRows.length).toBe(grid.data.length); }); + + it('Should deselect updated row with header checkbox when batchEditing is enbaled and filtering is applied', () => { + grid.batchEditing = true; + grid.selectRows([1]); + grid.filter('InStock', null, IgxBooleanFilteringOperand.instance().condition('true')); + fix.detectChanges(); + + const row = grid.gridAPI.get_row_by_index(0); + GridSelectionFunctions.verifyRowSelected(row); + + grid.updateRow({ ProductID: 1, ProductName: 'test', InStock: true, UnitsInStock: 1, OrderDate: new Date('2019-03-01') }, 1); + fix.detectChanges(); + + GridSelectionFunctions.clickHeaderRowCheckbox(fix); + fix.detectChanges(); + GridSelectionFunctions.verifyRowSelected(row); + + GridSelectionFunctions.clickHeaderRowCheckbox(fix); + fix.detectChanges(); + GridSelectionFunctions.verifyRowSelected(row, false); + }); }); describe('Integration with CRUD and transactions', () => { diff --git a/projects/igniteui-angular/src/lib/grids/selection/selection.service.ts b/projects/igniteui-angular/src/lib/grids/selection/selection.service.ts index 1d6e92e8280..5a656bf47e8 100644 --- a/projects/igniteui-angular/src/lib/grids/selection/selection.service.ts +++ b/projects/igniteui-angular/src/lib/grids/selection/selection.service.ts @@ -426,7 +426,14 @@ export class IgxGridSelectionService { const selectedRows = this.getSelectedRowsData(); const removedRec = this.isFilteringApplied() ? this.allData.filter(row => this.isRowSelected(this.getRecordKey(row))) : selectedRows; - const newSelection = this.isFilteringApplied() ? selectedRows.filter(x => !removedRec.includes(x)) : []; + let newSelection; + if (this.grid.primaryKey) { + newSelection = this.isFilteringApplied() ? selectedRows.filter(x => { + removedRec.findIndex(item => item[this.grid.primaryKey] === x[this.grid.primaryKey]) === -1 + }) : []; + } else { + newSelection = this.isFilteringApplied() ? selectedRows.filter(x => !removedRec.includes(x)) : []; + } this.emitRowSelectionEvent(newSelection, [], removedRec, event, selectedRows); } From 7c47d726ec6d70c875fdb52fc58c576e6feac10c Mon Sep 17 00:00:00 2001 From: MonikaKirkova Date: Thu, 19 Sep 2024 15:42:08 +0300 Subject: [PATCH 2/2] chore(*): return the correct newSelection --- .../src/lib/grids/selection/selection.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/igniteui-angular/src/lib/grids/selection/selection.service.ts b/projects/igniteui-angular/src/lib/grids/selection/selection.service.ts index 5a656bf47e8..aedfaee3f31 100644 --- a/projects/igniteui-angular/src/lib/grids/selection/selection.service.ts +++ b/projects/igniteui-angular/src/lib/grids/selection/selection.service.ts @@ -429,7 +429,7 @@ export class IgxGridSelectionService { let newSelection; if (this.grid.primaryKey) { newSelection = this.isFilteringApplied() ? selectedRows.filter(x => { - removedRec.findIndex(item => item[this.grid.primaryKey] === x[this.grid.primaryKey]) === -1 + return !removedRec.some(item => item[this.grid.primaryKey] === x[this.grid.primaryKey]); }) : []; } else { newSelection = this.isFilteringApplied() ? selectedRows.filter(x => !removedRec.includes(x)) : [];