Skip to content

Commit 47f45fc

Browse files
Fixed advanced filtering count issue (#15295)
1 parent 8a0cacd commit 47f45fc

File tree

3 files changed

+97
-11
lines changed

3 files changed

+97
-11
lines changed

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

Lines changed: 64 additions & 3 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 } 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
}));
@@ -3157,6 +3159,65 @@ describe('IgxGrid - Advanced Filtering #grid - ', () => {
31573159

31583160
});
31593161

3162+
describe('Advanced filtering with toolbar', () => {
3163+
let fix: ComponentFixture<IgxGridAdvancedFilteringWithToolbarComponent>;
3164+
let grid: IgxGridComponent;
3165+
3166+
beforeEach(fakeAsync(() => {
3167+
fix = TestBed.createComponent(IgxGridAdvancedFilteringWithToolbarComponent);
3168+
grid = fix.componentInstance.grid;
3169+
fix.detectChanges();
3170+
}));
3171+
3172+
it('Should update toolbar when advancedFilteringExpressionsTreeChange emits a new value', fakeAsync(() => {
3173+
// Set initial filtering expressions tree
3174+
const tree = new FilteringExpressionsTree(FilteringLogic.And);
3175+
tree.filteringOperands.push({
3176+
fieldName: 'ProductName',
3177+
condition: IgxStringFilteringOperand.instance().condition('contains'),
3178+
searchVal: 'angular',
3179+
ignoreCase: true
3180+
});
3181+
3182+
// Apply the initial filtering tree
3183+
grid.advancedFilteringExpressionsTree = tree;
3184+
fix.detectChanges();
3185+
3186+
// Create a new filtering tree with more filters
3187+
const updatedTree = new FilteringExpressionsTree(FilteringLogic.And);
3188+
updatedTree.filteringOperands.push({
3189+
fieldName: 'Downloads',
3190+
condition: IgxStringFilteringOperand.instance().condition('equals'),
3191+
searchVal: 10,
3192+
ignoreCase: true
3193+
});
3194+
updatedTree.filteringOperands.push({
3195+
fieldName: 'ProductName',
3196+
condition: IgxStringFilteringOperand.instance().condition('contains'),
3197+
searchVal: 'angular',
3198+
ignoreCase: true
3199+
});
3200+
updatedTree.filteringOperands.push({
3201+
fieldName: 'Category',
3202+
condition: IgxStringFilteringOperand.instance().condition('equals'),
3203+
searchVal: 'electronics',
3204+
ignoreCase: false
3205+
});
3206+
3207+
// Update the filtering expressions tree
3208+
grid.advancedFilteringExpressionsTree = updatedTree;
3209+
fix.detectChanges();
3210+
3211+
// Verify the correct number of filters
3212+
const toolbarDebugElement = fix.debugElement.query(By.directive(IgxGridToolbarAdvancedFilteringComponent));
3213+
const toolbarComponent = toolbarDebugElement.componentInstance as IgxGridToolbarAdvancedFilteringComponent;
3214+
const numberOfFilters = (toolbarComponent as any).numberOfColumns;
3215+
3216+
expect(grid.advancedFilteringExpressionsTree.filteringOperands.length).toEqual(3);
3217+
expect(numberOfFilters).toEqual(3);
3218+
}));
3219+
})
3220+
31603221
describe('Localization - ', () => {
31613222
it('Should correctly change resource strings for Advanced Filtering dialog.', fakeAsync(() => {
31623223
const fix = TestBed.createComponent(IgxGridAdvancedFilteringComponent);

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

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { AfterViewInit, Component, Inject, Input } from '@angular/core';
1+
import { 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';
@@ -33,7 +33,7 @@ import { IFilteringExpression } from '../../data-operations/filtering-expression
3333
standalone: true,
3434
imports: [IgxButtonDirective, IgxRippleDirective, IgxIconComponent, NgIf]
3535
})
36-
export class IgxGridToolbarAdvancedFilteringComponent implements AfterViewInit {
36+
export class IgxGridToolbarAdvancedFilteringComponent implements OnInit {
3737
protected numberOfColumns: number;
3838
/**
3939
* Returns the grid containing this component.
@@ -46,17 +46,18 @@ export class IgxGridToolbarAdvancedFilteringComponent implements AfterViewInit {
4646
@Input()
4747
public overlaySettings: OverlaySettings;
4848

49-
constructor( @Inject(IgxToolbarToken) private toolbar: IgxToolbarToken) {
50-
this.grid?.advancedFilteringExpressionsTreeChange.subscribe(filteringTree => {
51-
this.numberOfColumns = this.extractUniqueFieldNamesFromFilterTree(filteringTree).length;
52-
});
53-
}
49+
constructor( @Inject(IgxToolbarToken) private toolbar: IgxToolbarToken) { }
5450

5551
/**
5652
* @hidden
5753
*/
58-
public ngAfterViewInit(): void {
54+
public ngOnInit(): void {
55+
// Initial value
5956
this.numberOfColumns = this.grid?.advancedFilteringExpressionsTree ? this.extractUniqueFieldNamesFromFilterTree(this.grid?.advancedFilteringExpressionsTree).length : 0;
57+
// Subscribing for future updates
58+
this.grid?.advancedFilteringExpressionsTreeChange.subscribe(filteringTree => {
59+
this.numberOfColumns = this.extractUniqueFieldNamesFromFilterTree(filteringTree).length;
60+
});
6061
}
6162

6263
protected extractUniqueFieldNamesFromFilterTree(filteringTree?: IFilteringExpressionsTree) : string[] {

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1186,6 +1186,30 @@ export class IgxGridAdvancedFilteringComponent extends BasicGridComponent {
11861186
}
11871187
}
11881188

1189+
@Component({
1190+
template: `<igx-grid [data]="data" height="500px" [allowAdvancedFiltering]="false">
1191+
<igx-grid-toolbar >
1192+
<igx-grid-toolbar-actions>
1193+
<igx-grid-toolbar-advanced-filtering>Really advanced filtering</igx-grid-toolbar-advanced-filtering>
1194+
</igx-grid-toolbar-actions>
1195+
</igx-grid-toolbar>
1196+
<igx-column width="100px" [field]="'ID'" [header]="'HeaderID'" [hasSummary]="true"></igx-column>
1197+
<igx-column width="100px" [field]="'ProductName'" dataType="string"></igx-column>
1198+
<igx-column width="100px" [field]="'Downloads'" dataType="number" [hasSummary]="true"></igx-column>
1199+
<igx-column width="100px" [field]="'Released'" dataType="boolean"></igx-column>
1200+
<igx-column width="100px" [field]="'ReleaseDate'" dataType="date" headerClasses="header-release-date"></igx-column>
1201+
<igx-column width="100px" [field]="'AnotherField'" [header]="'Another Field'" dataType="string" [filters]="customFilter">
1202+
<igx-column width="100px" [field]="'ReleaseTime'" dataType="time"></igx-column>
1203+
</igx-column>
1204+
</igx-grid>`,
1205+
standalone: true,
1206+
imports: [IgxGridComponent, IgxColumnComponent, IgxGridToolbarComponent, IgxGridToolbarActionsComponent, IgxGridToolbarAdvancedFilteringComponent]
1207+
})
1208+
export class IgxGridAdvancedFilteringWithToolbarComponent extends BasicGridComponent {
1209+
public customFilter = CustomFilter.instance();
1210+
public override data = SampleTestData.excelFilteringData();
1211+
}
1212+
11891213
@Component({
11901214
template: `<igx-grid [data]="data" height="500px" [allowAdvancedFiltering]="true">
11911215
<igx-grid-toolbar></igx-grid-toolbar>

0 commit comments

Comments
 (0)