diff --git a/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts b/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts index a70f431b0f5..79c847b1814 100644 --- a/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts +++ b/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts @@ -4937,7 +4937,8 @@ export abstract class IgxGridBaseDirective extends DisplayDensityBase implements * ``` */ public get hasSummarizedColumns(): boolean { - return this.summaryService.hasSummarizedColumns; + const summarizedColumns = this.columnList.filter(col => col.hasSummary && !col.hidden); + return summarizedColumns.length > 0; } /** diff --git a/projects/igniteui-angular/src/lib/grids/state.directive.spec.ts b/projects/igniteui-angular/src/lib/grids/state.directive.spec.ts index fea7377506f..2537b3cc30c 100644 --- a/projects/igniteui-angular/src/lib/grids/state.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/state.directive.spec.ts @@ -443,7 +443,7 @@ describe('IgxGridState - input properties #grid', () => { expect(grid.pinnedRows[0].key).toBe(1); expect(grid.pinnedRows[1].key).toBe(3); }); - + it('setState should correctly restore grid moving state from string', () => { const fix = TestBed.createComponent(IgxGridStateComponent); fix.detectChanges(); @@ -460,7 +460,7 @@ describe('IgxGridState - input properties #grid', () => { expect(grid.moving).toBeFalsy(); gridState = state.getState(true, 'moving'); expect(gridState).toBe(movingState); - + }); it('setState should correctly restore grid moving state from object', () => { @@ -470,7 +470,7 @@ describe('IgxGridState - input properties #grid', () => { const state = fix.componentInstance.state; const movingState = '{"moving":false}'; const initialState = '{"moving":true}'; - const movingStateObject = JSON.parse(movingState); + const movingStateObject = JSON.parse(movingState); let gridState = state.getState(true, 'moving'); expect(gridState).toBe(initialState); @@ -590,6 +590,31 @@ describe('IgxGridState - input properties #grid', () => { gridState = state.getState(true, 'expansion'); expect(gridState).toBe(expansionState); }); + + // fit('createExpressionsTreeFromObject should return null when columns are still not resolved', () => { + // const fix = TestBed.createComponent(IgxGridStateComponent); + // fix.detectChanges(); + // fix.componentInstance.ngOnInit(); + // fix.detectChanges(); + // const grid = fix.componentInstance.grid; + // // grid.columnList = new QueryList(); + // const state = fix.componentInstance.state; + // // eslint-disable-next-line max-len + // + // const advFilteringState = '{"advancedFiltering":{"filteringOperands":[{"fieldName":"InStock","condition":{"name":"true","isUnary":true,"iconName":"is-true"},"searchVal":null,"ignoreCase":true},{"fieldName":"ProductID","condition":{"name":"greaterThan","isUnary":false,"iconName":"greater-than"},"searchVal":"3","ignoreCase":true}],"operator":0,"type":1}}'; + // const initialState = '{"advancedFiltering":{}}'; + // const advFilteringStateObject = JSON.parse(advFilteringState); + // + // let gridState = state.getState(true, 'advancedFiltering'); + // expect(gridState).toBe(initialState); + // + // state.setState(advFilteringStateObject); + // gridState = state.getState(false, 'advancedFiltering') as IGridState; + // + // let areColumnsResolved = grid.columnList.length > 0 || !!gridState.columns + // + // expect(areColumnsResolved).toBe(false); + // }); }); class HelperFunctions { diff --git a/projects/igniteui-angular/src/lib/grids/state.directive.ts b/projects/igniteui-angular/src/lib/grids/state.directive.ts index 6f227bc3d64..8f4eb3a0ffb 100644 --- a/projects/igniteui-angular/src/lib/grids/state.directive.ts +++ b/projects/igniteui-angular/src/lib/grids/state.directive.ts @@ -551,8 +551,10 @@ export class IgxGridStateDirective { let dataType: string; if (this.currGrid.columnList.length > 0) { dataType = this.currGrid.columnList.find(c => c.field === expr.fieldName).dataType; - } else { + } else if (this.state.columns) { dataType = this.state.columns.find(c => c.field === expr.fieldName).dataType; + } else { + return null; } // when ESF, values are stored in Set. // First those values are converted to an array before returning string in the stringifyCallback