diff --git a/projects/igniteui-angular-elements/src/analyzer/elements.config.ts b/projects/igniteui-angular-elements/src/analyzer/elements.config.ts index 67721fde02f..db336f4728c 100644 --- a/projects/igniteui-angular-elements/src/analyzer/elements.config.ts +++ b/projects/igniteui-angular-elements/src/analyzer/elements.config.ts @@ -582,6 +582,7 @@ export var registerConfig = [ methods: [ "getRowByIndex", "getRowByKey", + "getSelectedData", "getCellByColumn", "getCellByKey", "pinRow", @@ -628,7 +629,6 @@ export var registerConfig = [ "clearCellSelection", "selectRange", "getSelectedRanges", - "getSelectedData", "selectedColumns", "selectColumns", "deselectColumns", diff --git a/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts b/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts index 79525377ed6..c9d96785aec 100644 --- a/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts +++ b/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts @@ -7498,7 +7498,7 @@ export abstract class IgxGridBaseDirective implements GridType, const keysAndData = []; const activeEl = this.selectionService.activeElement; - if (this.type === 'hierarchical') { + if (this.type === 'hierarchical' && source === this.filteredSortedData) { const expansionRowIndexes = []; for (const [key, value] of this.expansionStates.entries()) { if (value) { diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts index 393432f0a96..4dd9932dd08 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts @@ -818,6 +818,22 @@ export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirecti .reduce((a, b) => a.concat(b), []); } + /** + * Returns an array of the current cell selection. + */ + public override getSelectedData(formatters = false, headers = false): any[] { + const source: any[] = []; + this.dataView.forEach((record) => { + if (this.isChildGridRecord(record)) { + source.push(null); + return; + } + const rowData = record as any; + source.push(this.isGhostRecord(rowData) || this.isRecordMerged(rowData) ? rowData.recordRef : rowData); + }); + return this.extractDataFromSelection(source, formatters, headers); + } + /** * Returns a `CellType` object that matches the conditions. * @@ -1181,7 +1197,6 @@ export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirecti super.initColumns(collection, cb); } - protected override setupColumns() { if (this.parentIsland && this.parentIsland.childColumns.length > 0 && !this.autoGenerate) { this.createColumnsList(this.parentIsland.childColumns.toArray()); diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts index 9b0937c4fcc..bb026d7b7c6 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts @@ -9,6 +9,7 @@ import { IgxHierarchicalRowComponent } from './hierarchical-row.component'; import { IgxStringFilteringOperand } from '../../data-operations/filtering-condition'; import { take } from 'rxjs/operators'; import { + IgxHierarchicalGridEmptyDataExportComponent, IgxHierarchicalGridTestBaseComponent, IgxHierarchicalGridTestCustomToolbarComponent, IgxHierarchicalGridTestInputPaginatorComponent, @@ -36,6 +37,7 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, + IgxHierarchicalGridEmptyDataExportComponent, IgxHierarchicalGridTestBaseComponent, IgxHierarchicalGridTestCustomToolbarComponent, IgxHierarchicalGridWithTransactionProviderComponent, @@ -160,6 +162,39 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { expect(fChildCell.selected).toBeFalsy(); expect(fCell.selected).toBeTruthy(); })); + + it('should not copy the previous row value from an expanded parent row', fakeAsync(() => { + const singersFixture = TestBed.createComponent(IgxHierarchicalGridEmptyDataExportComponent); + const singersData = SampleTestData.hierarchicalGridSingersFullData(); + (singersFixture.componentInstance as { data: unknown[] }).data = singersData; + singersFixture.detectChanges(); + + const grid = singersFixture.componentInstance.hGrid; + + const previousArtist = singersData[1].Artist; + const targetArtist = singersData[2].Artist; + const targetRow = grid.dataRowList.toArray() + .find(row => row.data.Artist === targetArtist) as IgxHierarchicalRowComponent | undefined; + + expect(targetRow).toBeDefined(); + targetRow!.toggle(); + tick(DEBOUNCE_TIME); + singersFixture.detectChanges(); + + grid.selectRange({ + rowStart: targetRow!.index, + rowEnd: targetRow!.index, + columnStart: 'Artist', + columnEnd: 'Artist' + }); + singersFixture.detectChanges(); + + expect(targetRow!.expanded).toBeTruthy(); + + const selectedData = grid.getSelectedData(); + expect(selectedData).toEqual([{ Artist: targetArtist }]); + expect(selectedData[0].Artist).not.toBe(previousArtist); + })); }); describe('Updating', () => {