Skip to content

Commit 0b9be32

Browse files
authored
Merge pull request #5303 from IgniteUI/mkirova/fix-5039-master
fix(igxGrid): Make sure getSelectedData returns correct selected cell…
2 parents 29e5e85 + 988968a commit 0b9be32

File tree

2 files changed

+58
-9
lines changed

2 files changed

+58
-9
lines changed

projects/igniteui-angular/src/lib/grids/grid-base.component.ts

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4788,28 +4788,26 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements
47884788
}
47894789

47904790
extractDataFromSelection(source: any[]): any[] {
4791-
let column: IgxColumnComponent;
4791+
let columnsArray: IgxColumnComponent[];
47924792
let record = {};
47934793
const selectedData = [];
47944794

47954795
const selectionMap = Array.from(this.selectionService.selection)
47964796
.filter((tuple) => tuple[0] < source.length);
47974797

4798-
const visibleColumns = this.visibleColumns
4799-
.filter(col => !col.columnGroup)
4800-
.sort((a, b) => a.visibleIndex - b.visibleIndex);
4801-
48024798

48034799
for (const [row, set] of selectionMap) {
48044800
if (!source[row]) {
48054801
continue;
48064802
}
48074803
const temp = Array.from(set);
48084804
for (const each of temp) {
4809-
column = visibleColumns[each];
4810-
if (column) {
4811-
record[column.field] = source[row][column.field];
4812-
}
4805+
columnsArray = this.getSelectableColumnsAt(each);
4806+
columnsArray.forEach((col) => {
4807+
if (col) {
4808+
record[col.field] = source[row][col.field];
4809+
}
4810+
});
48134811
}
48144812
if (Object.keys(record).length) {
48154813
selectedData.push(record);
@@ -4819,6 +4817,21 @@ export abstract class IgxGridBaseComponent extends DisplayDensityBase implements
48194817
return selectedData;
48204818
}
48214819

4820+
protected getSelectableColumnsAt(index) {
4821+
if (this.hasColumnLayouts) {
4822+
const visibleLayoutColumns = this.visibleColumns
4823+
.filter(col => col.columnLayout)
4824+
.sort((a, b) => a.visibleIndex - b.visibleIndex);
4825+
const colLayout = visibleLayoutColumns[index];
4826+
return colLayout ? colLayout.children.toArray() : [];
4827+
} else {
4828+
const visibleColumns = this.visibleColumns
4829+
.filter(col => !col.columnGroup)
4830+
.sort((a, b) => a.visibleIndex - b.visibleIndex);
4831+
return [ visibleColumns[index] ];
4832+
}
4833+
}
4834+
48224835
getSelectedData() {
48234836
const source = this.verticalScrollContainer.igxForOf;
48244837

projects/igniteui-angular/src/lib/grids/grid/grid.multi-row-layout.integration.spec.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,6 +1110,42 @@ describe('IgxGrid - multi-row-layout Integration - ', () => {
11101110
expect(groupRowBlocks[0].nativeElement.style.gridTemplateColumns).toEqual('200px 200px 650px 50px 100px 200px');
11111111
});
11121112
});
1113+
1114+
describe('Selection ', () => {
1115+
beforeEach(async(() => {
1116+
fixture = TestBed.createComponent(ColumnLayoutGroupingTestComponent);
1117+
fixture.detectChanges();
1118+
grid = fixture.componentInstance.grid;
1119+
colGroups = fixture.componentInstance.colGroups;
1120+
}));
1121+
1122+
it('should return correct selected data via getSelectedData API.', () => {
1123+
const selectedData1 = [{
1124+
ID: 'ALFKI',
1125+
CompanyName: 'Alfreds Futterkiste',
1126+
ContactName: 'Maria Anders',
1127+
ContactTitle: 'Sales Representative'
1128+
}];
1129+
const selectedData2 = [{
1130+
PostalCode: '05021',
1131+
City: 'México D.F.',
1132+
Country: 'Mexico',
1133+
Address: 'Avda. de la Constitución 2222'
1134+
}];
1135+
let cell = grid.getCellByColumn(0, 'CompanyName');
1136+
UIInteractions.clickElement(cell);
1137+
fixture.detectChanges();
1138+
1139+
expect(grid.getSelectedData()).toEqual(selectedData1);
1140+
1141+
cell = grid.getCellByColumn(1, 'City');
1142+
UIInteractions.clickElement(cell);
1143+
fixture.detectChanges();
1144+
1145+
expect(grid.getSelectedData()).toEqual(selectedData2);
1146+
});
1147+
});
1148+
11131149
});
11141150

11151151
@Component({

0 commit comments

Comments
 (0)