Skip to content

Commit 7cef566

Browse files
authored
Merge pull request #11436 from IgniteUI/mkirova/fix-fix-11421-master
fix(igxGrid): Ensure columnInit is called for all columns when new co…
2 parents ae3c72d + a709dd0 commit 7cef566

File tree

5 files changed

+23
-6
lines changed

5 files changed

+23
-6
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6382,7 +6382,6 @@ export abstract class IgxGridBaseDirective extends DisplayDensityBase implements
63826382
let added = false;
63836383
let removed = false;
63846384
diff.forEachAddedItem((record: IterableChangeRecord<IgxColumnComponent>) => {
6385-
this.columnInit.emit(record.item);
63866385
added = true;
63876386
if (record.item.pinned) {
63886387
this._pinnedColumns.push(record.item);
@@ -6391,7 +6390,7 @@ export abstract class IgxGridBaseDirective extends DisplayDensityBase implements
63916390
}
63926391
});
63936392

6394-
this.initColumns(this.columnList);
6393+
this.initColumns(this.columnList, (col: IgxColumnComponent) => this.columnInit.emit(col));
63956394

63966395
diff.forEachRemovedItem((record: IterableChangeRecord<IgxColumnComponent | IgxColumnGroupComponent>) => {
63976396
const isColumnGroup = record.item instanceof IgxColumnGroupComponent;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -918,7 +918,7 @@ describe('IgxGrid - multi-column headers #grid', () => {
918918
spyOn(grid.columnInit, 'emit').and.callThrough();
919919
componentInstance.mchCount.push({});
920920
fixture.detectChanges();
921-
const colsCount = 2; // 1 col group and 1 col
921+
const colsCount = grid.unpinnedColumns.length; // all
922922
expect(grid.columnInit.emit).toHaveBeenCalledTimes(colsCount);
923923
});
924924
});

projects/igniteui-angular/src/lib/grids/state.directive.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,8 @@ describe('IgxGridState - input properties #grid', () => {
344344
const fix = TestBed.createComponent(IgxGridStateComponent);
345345
fix.detectChanges();
346346
const state = fix.componentInstance.state;
347+
const grid = fix.componentInstance.grid;
348+
spyOn(grid.columnInit, 'emit').and.callThrough();
347349
/* eslint-disable max-len */
348350
const columnsState = '{"columns":[{"pinned":true,"sortable":true,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"testCss","headerGroupClasses":"","maxWidth":"300px","groupable":false,"movable":false,"hidden":false,"dataType":"number","hasSummary":false,"field":"ProductID","width":"150px","header":"Product ID","resizable":true,"searchable":false,"selectable":false,"parent":null,"columnGroup":false,"disableHiding":false},{"pinned":true,"sortable":true,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","maxWidth":"300px","groupable":true,"movable":false,"hidden":false,"dataType":"string","hasSummary":false,"field":"ProductName","width":"200px","header":"Prodyct Name","resizable":true,"searchable":true,"selectable":true,"parent":null,"columnGroup":false,"disableHiding":false},{"pinned":false,"sortable":false,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","maxWidth":"300px","groupable":false,"movable":false,"hidden":false,"dataType":"boolean","hasSummary":true,"field":"InStock","width":"140px","header":"In Stock","resizable":true,"searchable":true,"selectable":true,"parent":null,"columnGroup":false,"disableHiding":false},{"pinned":false,"sortable":true,"filterable":false,"editable":true,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","maxWidth":"300px","groupable":true,"movable":false,"hidden":false,"dataType":"date","hasSummary":false,"field":"OrderDate","width":"110px","header":"Date ordered","resizable":false,"searchable":true,"selectable":true,"parent":null,"columnGroup":false,"disableHiding":false}]}';
349351
const initialState = '{"columns":[{"pinned":true,"sortable":true,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"testCss","headerGroupClasses":"","maxWidth":"300px","groupable":false,"movable":false,"hidden":false,"dataType":"number","hasSummary":false,"field":"ProductID","width":"150px","header":"Product ID","resizable":true,"searchable":false,"parent":null,"columnGroup":false,"disableHiding":false},{"pinned":false,"sortable":true,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","maxWidth":"300px","groupable":true,"movable":false,"hidden":false,"dataType":"string","hasSummary":false,"field":"ProductName","width":"150px","header":"Prodyct Name","resizable":true,"searchable":true,"selectable":false,"parent":null,"columnGroup":false,"disableHiding":false},{"pinned":false,"sortable":false,"filterable":true,"editable":true,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","maxWidth":"300px","groupable":false,"movable":false,"hidden":false,"dataType":"boolean","hasSummary":true,"field":"InStock","width":"140px","header":"In Stock","resizable":true,"searchable":true,"parent":null,"columnGroup":false,"disableHiding":false},{"pinned":false,"sortable":true,"filterable":false,"editable":true,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","maxWidth":"300px","groupable":true,"movable":false,"hidden":false,"dataType":"date","hasSummary":false,"field":"OrderDate","width":"110px","header":"Date ordered","resizable":false,"searchable":true,"parent":null,"columnGroup":false,"disableHiding":false}]}';
@@ -358,6 +360,7 @@ describe('IgxGridState - input properties #grid', () => {
358360
HelperFunctions.verifyColumns(columnsStateObject.columns, gridState);
359361
gridState = state.getState(true, 'columns');
360362
expect(gridState).toBe(columnsState);
363+
expect(grid.columnInit.emit).toHaveBeenCalledTimes(columnsStateObject.columns.length);
361364
});
362365

363366
it('setState should correctly restore grid paging state from string', () => {

src/app/grid-state/grid-state.component.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
width="1200px" height="550px" [autoGenerate]="false" [data]="localData" primaryKey="EmployeeID"
1515
[rowEditable]="false" [allowFiltering]="true" [allowAdvancedFiltering]="true"
1616
[filterMode]="'excelStyleFilter'" displayDensity="cosy" cellSelection="multiple"
17-
rowSelection="multiple">
17+
rowSelection="multiple" (columnInit)="onColumnInit($event)">
1818
<igx-grid-toolbar [displayDensity]="grid.displayDensity">
1919
<igx-grid-toolbar-actions>
2020
<igx-grid-toolbar-pinning></igx-grid-toolbar-pinning>
@@ -240,3 +240,7 @@
240240
</div>
241241
</div>
242242
</ng-template>
243+
244+
<ng-template igxCell #activeTemplate let-column let-cell="cell">
245+
Hi I'm {{ cell.value }}
246+
</ng-template>

src/app/grid-state/grid-state.component.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { Component, OnInit, ViewChild, QueryList, ViewChildren } from '@angular/core';
1+
import { Component, OnInit, ViewChild, QueryList, ViewChildren, TemplateRef } from '@angular/core';
22
import { FilteringExpressionsTree, FilteringLogic,
33
IgxNumberSummaryOperand, IgxSummaryResult, IGridState, IgxGridStateDirective,
44
IgxExpansionPanelComponent, IgxGridBaseDirective,
5-
IGridStateOptions, GridFeatures, GridColumnDataType } from 'igniteui-angular';
5+
IGridStateOptions, GridFeatures, GridColumnDataType, IgxColumnComponent } from 'igniteui-angular';
66
import { take } from 'rxjs/operators';
77
import { Router } from '@angular/router';
88
import { TREEGRID_FLAT_DATA, EMPLOYEE_DATA, employeesData } from './data';
@@ -205,6 +205,17 @@ export class GridSaveStateComponent implements OnInit {
205205
window.localStorage.removeItem(key);
206206
}
207207

208+
@ViewChild('activeTemplate', { static: true })
209+
public activeTemplate: TemplateRef<any>;
210+
211+
public onColumnInit(column: IgxColumnComponent) {
212+
const key = `${this.gridId}-state`;
213+
const state = window.localStorage.getItem(key);
214+
if (state) {
215+
column.bodyTemplate = this.activeTemplate;
216+
}
217+
}
218+
208219
public reloadPage() {
209220
window.location.reload();
210221
}

0 commit comments

Comments
 (0)