Skip to content

Commit 31bced6

Browse files
authored
Merge pull request #12167 from IgniteUI/dpetev/dynamic-column-group
Fix dynamic column-group child column
2 parents 884dfbb + bdc1ab1 commit 31bced6

File tree

3 files changed

+60
-3
lines changed

3 files changed

+60
-3
lines changed

projects/igniteui-angular/src/lib/grids/columns/column-group.component.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
Output,
1111
EventEmitter
1212
} from '@angular/core';
13+
import { takeUntil } from 'rxjs/operators';
1314

1415
import { IgxColumnComponent } from './column.component';
1516
import { flatten } from '../../core/utils';
@@ -298,6 +299,15 @@ export class IgxColumnGroupComponent extends IgxColumnComponent implements After
298299
if (this.collapsible) {
299300
this.setExpandCollapseState();
300301
}
302+
303+
this.children.changes
304+
.pipe(takeUntil(this.destroy$))
305+
.subscribe((change: QueryList<IgxColumnComponent>) => {
306+
change.forEach(x => x.parent = this);
307+
if (this.collapsible) {
308+
this.setExpandCollapseState();
309+
}
310+
});
301311
}
302312

303313
/**

projects/igniteui-angular/src/lib/grids/grid/column-group.spec.ts

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const GRID_COL_GROUP_THEAD_GROUP_CLASS = 'igx-grid-thead__group';
2828

2929
/* eslint-disable max-len */
3030
describe('IgxGrid - multi-column headers #grid', () => {
31-
let fixture; let grid: IgxGridComponent; let componentInstance;
31+
let fixture: ComponentFixture<any>; let grid: IgxGridComponent; let componentInstance;
3232

3333
configureTestSuite();
3434

@@ -135,6 +135,45 @@ describe('IgxGrid - multi-column headers #grid', () => {
135135

136136
}));
137137

138+
it('Should render dynamic column group header correctly (#12165).', () => {
139+
fixture = TestBed.createComponent(BlueWhaleGridComponent) as ComponentFixture<BlueWhaleGridComponent>;
140+
(fixture as ComponentFixture<BlueWhaleGridComponent>).componentInstance.firstGroupRepeats = 1;
141+
(fixture as ComponentFixture<BlueWhaleGridComponent>).componentInstance.secondGroupRepeats = 1;
142+
fixture.detectChanges();
143+
144+
componentInstance = fixture.componentInstance;
145+
grid = componentInstance.grid;
146+
const columnWidthPx = parseInt(componentInstance.columnWidth, 10);
147+
// 2 levels of column group and 1 level of columns
148+
const gridHeadersDepth = 3;
149+
150+
let firstGroupChildrenCount = 1;
151+
152+
let firstGroup = GridFunctions.getColumnGroupHeaders(fixture)[0];
153+
testColumnGroupHeaderRendering(firstGroup, firstGroupChildrenCount * columnWidthPx,
154+
gridHeadersDepth * grid.defaultRowHeight, componentInstance.firstGroupTitle,
155+
'firstGroupColumn', firstGroupChildrenCount);
156+
157+
let allHeaders = GridFunctions.getColumnHeaders(fixture).map<IgxGridHeaderComponent>(x => x.componentInstance);
158+
let firstSixHeaders = allHeaders.slice(0, 6).map(x => x.column.field);
159+
expect(allHeaders.length).toEqual(14);
160+
expect(firstSixHeaders).toEqual(['ID', 'ID', 'ID', 'ID', 'CompanyName', 'ContactName']);
161+
162+
(componentInstance as BlueWhaleGridComponent).extraMissingColumn = true;
163+
fixture.detectChanges();
164+
165+
firstGroupChildrenCount = 2;
166+
firstGroup = GridFunctions.getColumnGroupHeaders(fixture)[0];
167+
testColumnGroupHeaderRendering(firstGroup, firstGroupChildrenCount * columnWidthPx,
168+
gridHeadersDepth * grid.defaultRowHeight, componentInstance.firstGroupTitle,
169+
'firstGroupColumn', firstGroupChildrenCount);
170+
171+
allHeaders = GridFunctions.getColumnHeaders(fixture).map<IgxGridHeaderComponent>(x => x.componentInstance);
172+
firstSixHeaders = allHeaders.slice(0, 6).map(x => x.column.field);
173+
expect(allHeaders.length).toEqual(15);
174+
expect(firstSixHeaders).toEqual(['ID', 'Missing', 'ID', 'ID', 'ID', 'CompanyName']);
175+
});
176+
138177
it('Should not render empty column group.', () => {
139178
fixture = TestBed.createComponent(ColumnGroupTestComponent);
140179
fixture.detectChanges();

projects/igniteui-angular/src/lib/test-utils/grid-mch-sample.spec.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ export class StegosaurusGridComponent implements OnInit {
464464
<igx-grid #grid [data]="data" [height]="gridHeight" [columnWidth]="columnWidth">
465465
<igx-column-group headerGroupClasses="firstGroup" [header]="firstGroupTitle">
466466
<igx-column headerClasses="firstGroupColumn" field="ID" *ngFor="let item of hunderdItems;"></igx-column>
467+
<igx-column *ngIf="extraMissingColumn" headerClasses="firstGroupColumn" [field]='"Missing"'></igx-column>
467468
</igx-column-group>
468469
<igx-column-group headerGroupClasses="secondGroup" [header]="secondGroupTitle">
469470
<igx-column-group headerGroupClasses="secondSubGroup" [header]="secondSubGroupTitle">
@@ -504,9 +505,16 @@ export class BlueWhaleGridComponent {
504505
public gridHeight = '500px';
505506
public columnWidth = '100px';
506507
public data = SampleTestData.contactInfoDataFull();
508+
public extraMissingColumn = false;
509+
public firstGroupRepeats = 100;
510+
public secondGroupRepeats = 50;
507511

508-
public hunderdItems = new Array(100);
509-
public fiftyItems = new Array(50);
512+
public get hunderdItems() {
513+
return new Array(this.firstGroupRepeats);
514+
}
515+
public get fiftyItems() {
516+
return new Array(this.secondGroupRepeats);
517+
}
510518

511519
public firstGroupTitle = '100 IDs';
512520
public secondGroupTitle = '2 col groups with 50 IDs each';

0 commit comments

Comments
 (0)