Skip to content

Commit 85501d1

Browse files
MKirovaMKirova
authored andcommitted
Apply and manage dimension filters.
1 parent eb9b6a2 commit 85501d1

File tree

5 files changed

+50
-7
lines changed

5 files changed

+50
-7
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,7 @@ export class IgxFilteringService implements OnDestroy {
555555
return true;
556556
}
557557

558-
private filter_internal(fieldName: string, term, conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,
558+
protected filter_internal(fieldName: string, term, conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,
559559
ignoreCase: boolean) {
560560
const grid = this.grid;
561561
const filteringTree = grid.filteringExpressionsTree;
@@ -578,7 +578,7 @@ export class IgxFilteringService implements OnDestroy {
578578
* If createNewTree is true, filteringState will not be modified (because it directly affects the grid.filteringExpressionsTree),
579579
* but a new object is created and returned.
580580
*/
581-
private prepare_filtering_expression(
581+
protected prepare_filtering_expression(
582582
filteringState: IFilteringExpressionsTree,
583583
fieldName: string,
584584
searchVal,
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Injectable } from '@angular/core';
2+
import { IFilteringOperation } from '../../data-operations/filtering-condition';
3+
import { FilteringLogic } from '../../data-operations/filtering-expression.interface';
4+
import { FilteringExpressionsTree, IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';
5+
import { IgxFilteringService } from '../filtering/grid-filtering.service';
6+
import { IgxPivotGridComponent } from './pivot-grid.component';
7+
import { PivotUtil } from './pivot-util';
8+
9+
@Injectable()
10+
export class IgxPivotFilteringService extends IgxFilteringService {
11+
protected filter_internal(fieldName: string, term, conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,
12+
ignoreCase: boolean) {
13+
super.filter_internal(fieldName, term, conditionOrExpressionsTree, ignoreCase);
14+
const grid = this.grid;
15+
const config = (grid as IgxPivotGridComponent).pivotConfiguration;
16+
const allDimensions = PivotUtil.flatten(config.rows.concat(config.columns).concat(config.filters).filter(x => x !== null));
17+
const enabledDimensions = allDimensions.filter(x => x && x.enabled);
18+
const dim = enabledDimensions.find(x => x.fieldName === fieldName || x.member === fieldName);
19+
const filteringTree = dim.filters || new FilteringExpressionsTree(FilteringLogic.And);
20+
const fieldFilterIndex = filteringTree.findIndex(fieldName);
21+
if (fieldFilterIndex > -1) {
22+
filteringTree.filteringOperands.splice(fieldFilterIndex, 1);
23+
}
24+
25+
this.prepare_filtering_expression(filteringTree, fieldName, term, conditionOrExpressionsTree, ignoreCase, fieldFilterIndex);
26+
dim.filters = filteringTree;
27+
grid.filteringPipeTrigger++;
28+
}
29+
30+
}

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
[igxColumnMovingDrop]="headerContainer" [attr.droppable]="true" id="left"
3131
class="igx-grid__scroll-on-drag-pinned" [style.left.px]="pinnedWidth"></span>
3232
<ng-template igxGridFor let-rowData [igxGridForOf]="data
33-
| gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true
33+
| pivotGridFilter:pivotConfiguration:filterStrategy:advancedFilteringExpressionsTree:filteringPipeTrigger:pipeTrigger
3434
| pivotGridRow:pivotConfiguration:expansionStates:pipeTrigger
3535
| pivotGridRowExpansion:pivotConfiguration:expansionStates:pipeTrigger
3636
| pivotGridColumn:pivotConfiguration:expansionStates:pipeTrigger"

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import { DOCUMENT } from '@angular/common';
4343
import { DisplayDensityToken, IDisplayDensityOptions } from '../../core/displayDensity';
4444
import { PlatformUtil } from '../../core/utils';
4545
import { IgxGridTransaction } from '../hierarchical-grid/public_api';
46+
import { IgxPivotFilteringService } from './pivot-filtering.service';
4647

4748
let NEXT_ID = 0;
4849
const MINIMUM_COLUMN_WIDTH = 200;
@@ -57,7 +58,7 @@ const MINIMUM_COLUMN_WIDTH = 200;
5758
IgxGridSelectionService,
5859
GridBaseAPIService,
5960
{ provide: IgxGridBaseDirective, useExisting: forwardRef(() => IgxPivotGridComponent) },
60-
IgxFilteringService,
61+
{ provide: IgxFilteringService, useClass: IgxPivotFilteringService },
6162
IgxPivotGridNavigationService,
6263
IgxForOfSyncService,
6364
IgxForOfScrollSyncService

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,16 +91,28 @@ export class IgxPivotColumnPipe implements PipeTransform {
9191
/**
9292
* @hidden
9393
*/
94-
@Pipe({
94+
@Pipe({
9595
name: 'pivotGridFilter',
9696
pure: true
9797
})
9898
export class IgxPivotGridFilterPipe implements PipeTransform {
9999

100100
public transform(collection: any[],
101-
expressionsTree: FilteringExpressionsTree,
101+
config: IPivotConfiguration,
102102
filterStrategy: IFilteringStrategy,
103-
advancedExpressionsTree: IFilteringExpressionsTree): any[] {
103+
advancedExpressionsTree: IFilteringExpressionsTree,
104+
_filterPipeTrigger: boolean,
105+
_pipeTrigger: boolean): any[] {
106+
const allDimensions = config.rows.concat(config.columns).concat(config.filters).filter(x => x !== null);
107+
const enabledDimensions = allDimensions.filter(x => x && x.enabled);
108+
109+
const expressionsTree = new FilteringExpressionsTree(FilteringLogic.And);
110+
// add expression trees from all filters
111+
PivotUtil.flatten(enabledDimensions).forEach(x => {
112+
if (x.filters) {
113+
expressionsTree.filteringOperands.push(x.filters);
114+
}
115+
});
104116
const state = {
105117
expressionsTree,
106118
strategy: filterStrategy,

0 commit comments

Comments
 (0)