Skip to content

Commit 2bf788d

Browse files
authored
Merge branch '11.1.x' into ddincheva/percentAlignment-11.1
2 parents 0ef106b + 03ca60b commit 2bf788d

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { IgxGridBaseDirective } from './grid-base.directive';
1515
import { IgxGridComponent } from './grid/grid.component';
1616
import { IgxHierarchicalGridComponent } from './hierarchical-grid/hierarchical-grid.component';
1717
import { IPinningConfig } from './grid.common';
18+
import { delay, take } from 'rxjs/operators';
1819

1920
export interface IGridState {
2021
columns?: IColumnState[];
@@ -415,6 +416,7 @@ export class IgxGridStateDirective {
415416
if (typeof state === 'string') {
416417
state = JSON.parse(state) as IGridState;
417418
}
419+
this.state = state;
418420
this.currGrid = this.grid;
419421
this.restoreGridState(state, features);
420422
this.grid.cdr.detectChanges(); // TODO
@@ -443,7 +445,22 @@ export class IgxGridStateDirective {
443445
* The method that calls corresponding methods to restore features from the passed IGridState object.
444446
*/
445447
private restoreGridState(state: IGridState, features?: GridFeatures | GridFeatures[]) {
448+
// TODO Notify the grid that columnList.changes is triggered by the state directive
449+
// instead of piping it like below
450+
const columns = 'columns';
451+
this.grid.columnList.changes.pipe(delay(0), take(1)).subscribe(() => {
452+
this.featureKeys = this.featureKeys.filter(f => f !== columns);
453+
this.restoreFeatures(state);
454+
});
446455
this.applyFeatures(features);
456+
if (this.featureKeys.includes(columns) && this.options[columns] && state[columns]) {
457+
this.getFeature(columns).restoreFeatureState(this, state[columns]);
458+
} else {
459+
this.restoreFeatures(state);
460+
}
461+
}
462+
463+
private restoreFeatures(state: IGridState) {
447464
this.featureKeys.forEach(f => {
448465
if (this.options[f]) {
449466
const featureState = state[f];

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { TestBed, waitForAsync } from '@angular/core/testing';
1+
import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing';
22
import { Component, ViewChild } from '@angular/core';
33
import { IgxGridStateDirective, IGridState, IColumnState } from './state.directive';
44
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
@@ -169,7 +169,7 @@ describe('IgxHierarchicalGridState - input properties #hGrid', () => {
169169
HelperFunctions.verifyFilteringExpressions(filtering, gridState);
170170
});
171171

172-
it('setState should correctly restore grid filtering state from string', () => {
172+
it('setState should correctly restore grid filtering state from string', fakeAsync(() => {
173173
const state = fix.componentInstance.state;
174174

175175
const emptyFiltering = '{"filteringOperands":[],"operator":0}';
@@ -185,6 +185,8 @@ describe('IgxHierarchicalGridState - input properties #hGrid', () => {
185185
expect(gridState).toBe(initialState);
186186

187187
state.setState(JSON.stringify(filteringStateObject));
188+
tick();
189+
fix.detectChanges();
188190
gridState = state.getState(false, ['filtering', 'rowIslands']) as IGridState;
189191
HelperFunctions.verifyFilteringExpressions(grid.filteringExpressionsTree, gridState);
190192
const gridsCollection = HelperFunctions.getChildGridsCollection(grid, gridState);
@@ -193,9 +195,9 @@ describe('IgxHierarchicalGridState - input properties #hGrid', () => {
193195
});
194196
gridState = state.getState(true, ['filtering', 'rowIslands']);
195197
expect(gridState).toBe(filteringState);
196-
});
198+
}));
197199

198-
it('setState should correctly restore grid filtering state from object', () => {
200+
it('setState should correctly restore grid filtering state from object', fakeAsync(() => {
199201
const state = fix.componentInstance.state;
200202

201203
const emptyFiltering = '{"filteringOperands":[],"operator":0}';
@@ -211,6 +213,8 @@ describe('IgxHierarchicalGridState - input properties #hGrid', () => {
211213
expect(gridState).toBe(initialState);
212214

213215
state.setState(filteringStateObject);
216+
tick();
217+
fix.detectChanges();
214218
gridState = state.getState(false, ['filtering', 'rowIslands']) as IGridState;
215219
HelperFunctions.verifyFilteringExpressions(grid.filteringExpressionsTree, gridState);
216220
const gridsCollection = HelperFunctions.getChildGridsCollection(grid, gridState);
@@ -219,7 +223,7 @@ describe('IgxHierarchicalGridState - input properties #hGrid', () => {
219223
});
220224
gridState = state.getState(true, ['filtering', 'rowIslands']);
221225
expect(gridState).toBe(filteringState);
222-
});
226+
}));
223227

224228
it('setState should correctly restore grid sorting state from string', () => {
225229
const state = fix.componentInstance.state;

0 commit comments

Comments
 (0)