Skip to content

Commit 0c8481f

Browse files
committed
fix(AdvancedFiltering): Fixed tests and resolved comments
1 parent 80caf54 commit 0c8481f

File tree

4 files changed

+101
-11
lines changed

4 files changed

+101
-11
lines changed

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

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ import {
1616
IgxGridExternalAdvancedFilteringComponent,
1717
IgxGridAdvancedFilteringBindingComponent,
1818
IgxGridAdvancedFilteringOverlaySettingsComponent,
19-
IgxGridAdvancedFilteringDynamicColumnsComponent
19+
IgxGridAdvancedFilteringDynamicColumnsComponent,
20+
IgxGridAdvancedFilteringWithToolbarComponent
2021
} from '../../test-utils/grid-samples.spec';
2122
import { ControlsFunction } from '../../test-utils/controls-functions.spec';
2223
import { FormattedValuesFilteringStrategy } from '../../data-operations/filtering-strategy';
2324
import { IgxHierGridExternalAdvancedFilteringComponent } from '../../test-utils/hierarchical-grid-components.spec';
2425
import { IgxHierarchicalGridComponent } from '../hierarchical-grid/public_api';
25-
import { IFilteringEventArgs } from '../public_api';
26+
import { IFilteringEventArgs, IgxGridToolbarAdvancedFilteringComponent, IgxGridToolbarComponent } from '../public_api';
2627
import { SampleTestData } from '../../test-utils/sample-test-data.spec';
2728
import { By } from '@angular/platform-browser';
2829
import { IgxDateTimeEditorDirective } from '../../directives/date-time-editor/date-time-editor.directive';
@@ -43,7 +44,8 @@ describe('IgxGrid - Advanced Filtering #grid - ', () => {
4344
IgxGridExternalAdvancedFilteringComponent,
4445
IgxGridAdvancedFilteringBindingComponent,
4546
IgxHierGridExternalAdvancedFilteringComponent,
46-
IgxGridAdvancedFilteringDynamicColumnsComponent
47+
IgxGridAdvancedFilteringDynamicColumnsComponent,
48+
IgxGridAdvancedFilteringWithToolbarComponent
4749
]
4850
});
4951
}));
@@ -1938,7 +1940,7 @@ describe('IgxGrid - Advanced Filtering #grid - ', () => {
19381940
verifyChildrenSelection(GridFunctions.getAdvancedFilteringTreeItem(fix, [1]), false);
19391941
}));
19401942

1941-
1943+
19421944
it('Should remove all empty groups when clicking `delete` on a group\'s operator line\'s context menu.', fakeAsync(() => {
19431945
// Apply advanced filter through API.
19441946
const rootTree = new FilteringExpressionsTree(FilteringLogic.And);
@@ -3178,6 +3180,65 @@ describe('IgxGrid - Advanced Filtering #grid - ', () => {
31783180

31793181
});
31803182

3183+
describe('Advanced filtering with toolbar', () => {
3184+
let fix: ComponentFixture<IgxGridAdvancedFilteringWithToolbarComponent>;
3185+
let grid: IgxGridComponent;
3186+
3187+
beforeEach(fakeAsync(() => {
3188+
fix = TestBed.createComponent(IgxGridAdvancedFilteringWithToolbarComponent);
3189+
grid = fix.componentInstance.grid;
3190+
fix.detectChanges();
3191+
}));
3192+
3193+
it('Should update toolbar when advancedFilteringExpressionsTreeChange emits a new value', fakeAsync(() => {
3194+
// Set initial filtering expressions tree
3195+
const tree = new FilteringExpressionsTree(FilteringLogic.And);
3196+
tree.filteringOperands.push({
3197+
fieldName: 'ProductName',
3198+
condition: IgxStringFilteringOperand.instance().condition('contains'),
3199+
searchVal: 'angular',
3200+
ignoreCase: true
3201+
});
3202+
3203+
// Apply the initial filtering tree
3204+
grid.advancedFilteringExpressionsTree = tree;
3205+
fix.detectChanges();
3206+
3207+
// Create a new filtering tree with more filters
3208+
const updatedTree = new FilteringExpressionsTree(FilteringLogic.And);
3209+
updatedTree.filteringOperands.push({
3210+
fieldName: 'Downloads',
3211+
condition: IgxStringFilteringOperand.instance().condition('equals'),
3212+
searchVal: 10,
3213+
ignoreCase: true
3214+
});
3215+
updatedTree.filteringOperands.push({
3216+
fieldName: 'ProductName',
3217+
condition: IgxStringFilteringOperand.instance().condition('contains'),
3218+
searchVal: 'angular',
3219+
ignoreCase: true
3220+
});
3221+
updatedTree.filteringOperands.push({
3222+
fieldName: 'Category',
3223+
condition: IgxStringFilteringOperand.instance().condition('equals'),
3224+
searchVal: 'electronics',
3225+
ignoreCase: false
3226+
});
3227+
3228+
// Update the filtering expressions tree
3229+
grid.advancedFilteringExpressionsTree = updatedTree;
3230+
fix.detectChanges();
3231+
3232+
// Verify the correct number of filters
3233+
const toolbarDebugElement = fix.debugElement.query(By.directive(IgxGridToolbarAdvancedFilteringComponent));
3234+
const toolbarComponent = toolbarDebugElement.componentInstance as IgxGridToolbarAdvancedFilteringComponent;
3235+
const numberOfFilters = (toolbarComponent as any).numberOfColumns;
3236+
3237+
expect(grid.advancedFilteringExpressionsTree.filteringOperands.length).toEqual(3);
3238+
expect(numberOfFilters).toEqual(3);
3239+
}));
3240+
})
3241+
31813242
describe('Localization - ', () => {
31823243
it('Should correctly change resource strings for Advanced Filtering dialog.', fakeAsync(() => {
31833244
const fix = TestBed.createComponent(IgxGridAdvancedFilteringComponent);

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { AfterViewInit, Component, Inject, Input } from '@angular/core';
1+
import { AfterViewInit, Component, Inject, Input, OnInit } from '@angular/core';
22
import { IgxToolbarToken } from './token';
33
import { OverlaySettings } from '../../services/overlay/utilities';
44
import { IgxIconComponent } from '../../icon/icon.component';
@@ -32,7 +32,7 @@ import { IFilteringExpression } from '../../data-operations/filtering-expression
3232
templateUrl: './grid-toolbar-advanced-filtering.component.html',
3333
imports: [IgxButtonDirective, IgxRippleDirective, IgxIconComponent, NgIf]
3434
})
35-
export class IgxGridToolbarAdvancedFilteringComponent implements AfterViewInit {
35+
export class IgxGridToolbarAdvancedFilteringComponent implements OnInit {
3636
protected numberOfColumns: number;
3737
/**
3838
* Returns the grid containing this component.
@@ -47,11 +47,11 @@ export class IgxGridToolbarAdvancedFilteringComponent implements AfterViewInit {
4747

4848
constructor( @Inject(IgxToolbarToken) private toolbar: IgxToolbarToken) { }
4949

50-
/**
51-
* @hidden
52-
*/
53-
public ngAfterViewInit(): void {
50+
public ngOnInit(): void {
51+
// Initial value
5452
this.numberOfColumns = this.grid?.advancedFilteringExpressionsTree ? this.extractUniqueFieldNamesFromFilterTree(this.grid?.advancedFilteringExpressionsTree).length : 0;
53+
54+
// Subscribing for future updates
5555
this.grid?.advancedFilteringExpressionsTreeChange.subscribe(filteringTree => {
5656
this.numberOfColumns = this.extractUniqueFieldNamesFromFilterTree(filteringTree).length;
5757
});

projects/igniteui-angular/src/lib/test-utils/grid-samples.spec.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,6 +1099,36 @@ export class IgxGridAdvancedFilteringComponent extends BasicGridComponent {
10991099
}
11001100
}
11011101

1102+
@Component({
1103+
template: `<igx-grid [data]="data" height="500px" [allowAdvancedFiltering]="false">
1104+
<igx-grid-toolbar >
1105+
<igx-grid-toolbar-actions>
1106+
<igx-grid-toolbar-advanced-filtering>Really advanced filtering</igx-grid-toolbar-advanced-filtering>
1107+
</igx-grid-toolbar-actions>
1108+
</igx-grid-toolbar>
1109+
<igx-column width="100px" [field]="'ID'" [header]="'HeaderID'" [hasSummary]="true"></igx-column>
1110+
<igx-column width="100px" [field]="'ProductName'" dataType="string"></igx-column>
1111+
<igx-column width="100px" [field]="'Downloads'" dataType="number" [hasSummary]="true"></igx-column>
1112+
<igx-column width="100px" [field]="'Released'" dataType="boolean"></igx-column>
1113+
<igx-column width="100px" [field]="'ReleaseDate'" dataType="date" headerClasses="header-release-date"></igx-column>
1114+
<igx-column width="100px" [field]="'AnotherField'" [header]="'Another Field'" dataType="string" [filters]="customFilter">
1115+
<igx-column width="100px" [field]="'ReleaseTime'" dataType="time"></igx-column>
1116+
</igx-column>
1117+
</igx-grid>`,
1118+
imports: [IgxGridComponent, IgxColumnComponent, IgxGridToolbarComponent, IgxGridToolbarActionsComponent, IgxGridToolbarAdvancedFilteringComponent]
1119+
})
1120+
export class IgxGridAdvancedFilteringWithToolbarComponent extends BasicGridComponent {
1121+
public customFilter = CustomFilter.instance();
1122+
public resizable = false;
1123+
public filterable = true;
1124+
1125+
public override data = SampleTestData.excelFilteringData();
1126+
public activateFiltering(activate: boolean) {
1127+
this.grid.allowFiltering = activate;
1128+
this.grid.cdr.markForCheck();
1129+
}
1130+
}
1131+
11021132
@Component({
11031133
template: `<igx-grid [data]="data" height="500px" [allowAdvancedFiltering]="true">
11041134
<igx-grid-toolbar></igx-grid-toolbar>

src/app/grid-filtering/grid-filtering.sample.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ <h4>Sample 1</h4>
1414
[filterMode]="'excelStyleFilter'"
1515
[allowAdvancedFiltering]="true"
1616
[rowSelection]="selectionMode"
17-
[advancedFilteringExpressionsTree]="advancedFilteringTree"
1817
[height]="'600px'"
1918
[columnSelection]="'single'">
2019
<igx-grid-toolbar >

0 commit comments

Comments
 (0)