Skip to content

Commit 50536ca

Browse files
committed
fix(Pivot): Filtering strategy does not work for complex objects in Pivot
1 parent e76211d commit 50536ca

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

projects/igniteui-angular/src/lib/data-operations/filtering-strategy.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { FilteringLogic, IFilteringExpression } from './filtering-expression.int
22
import { FilteringExpressionsTree, IFilteringExpressionsTree } from './filtering-expressions-tree';
33
import { resolveNestedPath, parseDate } from '../core/utils';
44
import { GridType } from '../grids/common/grid.interface';
5+
import { IgxPivotGridComponent } from '../grids/pivot-grid/pivot-grid.component';
6+
import { PivotUtil } from '../grids/pivot-grid/pivot-util';
57

68
const DateType = 'date';
79
const DateTimeType = 'dateTime';
@@ -139,3 +141,23 @@ export class FormattedValuesFilteringStrategy extends FilteringStrategy {
139141
return value;
140142
}
141143
}
144+
145+
export class PivotFilteringStrategy extends FilteringStrategy {
146+
147+
constructor() {
148+
super();
149+
}
150+
151+
protected getFieldValue(rec: any, fieldName: string, isDate: boolean = false, isTime: boolean = false, grid?: GridType): any {
152+
let value = resolveNestedPath(rec, fieldName);
153+
if (value && !(value instanceof Object)) {
154+
value = value && (isDate || isTime) ? parseDate(value) : value;
155+
return value;
156+
}
157+
const config = (grid as IgxPivotGridComponent).pivotConfiguration;
158+
const allDimensions = config.rows.concat(config.columns).concat(config.filters).filter(x => x !== null && x !== undefined);
159+
const flattenedDims = PivotUtil.flatten(allDimensions, 0);
160+
const dimension = flattenedDims.find(x => x.memberName === fieldName);
161+
return dimension.memberFunction ? dimension.memberFunction(rec) : value;
162+
}
163+
}

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-filtering.service.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Injectable } from '@angular/core';
22
import { IFilteringOperation } from '../../data-operations/filtering-condition';
33
import { FilteringLogic } from '../../data-operations/filtering-expression.interface';
44
import { FilteringExpressionsTree, IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';
5+
import { PivotFilteringStrategy } from '../../data-operations/filtering-strategy';
56
import { IgxFilteringService } from '../filtering/grid-filtering.service';
67
import { IgxPivotGridComponent } from './pivot-grid.component';
78
import { PivotUtil } from './pivot-util';
@@ -42,6 +43,7 @@ export class IgxPivotFilteringService extends IgxFilteringService {
4243
this.prepare_filtering_expression(filteringTree, fieldName, term, conditionOrExpressionsTree, ignoreCase, fieldFilterIndex);
4344
dim.filter = filteringTree;
4445
grid.filteringPipeTrigger++;
46+
grid.filterStrategy = new PivotFilteringStrategy();
4547
if (allDimensions.indexOf(dim) !== -1) {
4648
// update columns
4749
(grid as any).setupColumns();

0 commit comments

Comments
 (0)