Skip to content

Commit 1a7065e

Browse files
committed
fix(filtering): Fixed expression tree rehydrating before columns are generated
1 parent 0d2cda4 commit 1a7065e

2 files changed

Lines changed: 32 additions & 9 deletions

File tree

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

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1856,8 +1856,8 @@ export abstract class IgxGridBaseDirective implements GridType,
18561856
}
18571857

18581858
value.type = FilteringExpressionsTreeType.Regular;
1859-
if (value && this.columns) {
1860-
this._filteringExpressionsTree = recreateTreeFromFields(value, this.columns) as IFilteringExpressionsTree;
1859+
if (value && this._columns && this._columns.length > 0) {
1860+
this._filteringExpressionsTree = recreateTreeFromFields(value, this._columns) as IFilteringExpressionsTree;
18611861
} else {
18621862
this._filteringExpressionsTree = value;
18631863
}
@@ -1906,7 +1906,11 @@ export abstract class IgxGridBaseDirective implements GridType,
19061906

19071907
if (value && isTree(value)) {
19081908
value.type = FilteringExpressionsTreeType.Advanced;
1909-
this._advancedFilteringExpressionsTree = recreateTreeFromFields(value, this.columns) as IFilteringExpressionsTree;
1909+
if (this._columns && this._columns.length > 0) {
1910+
this._advancedFilteringExpressionsTree = recreateTreeFromFields(value, this._columns) as IFilteringExpressionsTree;
1911+
} else {
1912+
this._advancedFilteringExpressionsTree = value;
1913+
}
19101914
this.filteringPipeTrigger++;
19111915
} else {
19121916
this._advancedFilteringExpressionsTree = null;
@@ -6607,6 +6611,9 @@ export abstract class IgxGridBaseDirective implements GridType,
66076611
if (this._columns && this._filteringExpressionsTree) {
66086612
this._filteringExpressionsTree = recreateTreeFromFields(this._filteringExpressionsTree, this.columns) as IFilteringExpressionsTree;
66096613
}
6614+
if (this._columns && this._advancedFilteringExpressionsTree) {
6615+
this._advancedFilteringExpressionsTree = recreateTreeFromFields(this._advancedFilteringExpressionsTree, this.columns) as IFilteringExpressionsTree;
6616+
}
66106617
this.resetCaches();
66116618
}
66126619

@@ -6668,12 +6675,12 @@ export abstract class IgxGridBaseDirective implements GridType,
66686675
this.autogenerateColumns();
66696676
} else {
66706677
this._columns = this.getColumnList();
6671-
if (this._columns && this._filteringExpressionsTree) {
6672-
this._filteringExpressionsTree = recreateTreeFromFields(this._filteringExpressionsTree, this._columns) as IFilteringExpressionsTree;
6673-
}
6674-
if (this._columns && this._advancedFilteringExpressionsTree) {
6675-
this._advancedFilteringExpressionsTree = recreateTreeFromFields(this._advancedFilteringExpressionsTree, this._columns) as IFilteringExpressionsTree;
6676-
}
6678+
}
6679+
if (this._columns && this._filteringExpressionsTree) {
6680+
this._filteringExpressionsTree = recreateTreeFromFields(this._filteringExpressionsTree, this._columns) as IFilteringExpressionsTree;
6681+
}
6682+
if (this._columns && this._advancedFilteringExpressionsTree) {
6683+
this._advancedFilteringExpressionsTree = recreateTreeFromFields(this._advancedFilteringExpressionsTree, this._columns) as IFilteringExpressionsTree;
66776684
}
66786685

66796686
this.initColumns(this._columns, (col: IgxColumnComponent) => this.columnInit.emit(col));

projects/igniteui-angular/src/lib/grids/grid/grid-filtering-advanced.spec.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,6 +1389,22 @@ describe('IgxGrid - Advanced Filtering #grid - ', () => {
13891389
// Verify no filtered data
13901390
expect(grid.filteredData).toBe(null);
13911391
}));
1392+
1393+
});
1394+
1395+
describe('Expression tree serialization - ', () => {
1396+
it('should correctly filter with a deserialized expression tree.', fakeAsync(() => {
1397+
const errorSpy = spyOn(console, 'error');
1398+
let fix = TestBed.createComponent(IgxGridAdvancedFilteringSerializedTreeComponent);
1399+
fix.detectChanges();
1400+
let grid = fix.componentInstance.grid;
1401+
1402+
expect(errorSpy).not.toHaveBeenCalled();
1403+
1404+
// Verify filtered data
1405+
expect(grid.filteredData.length).toEqual(3);
1406+
expect(grid.rowList.length).toBe(3);
1407+
}));
13921408
});
13931409
});
13941410

0 commit comments

Comments
 (0)