Skip to content

Commit 58c382e

Browse files
committed
Merge branch 'master' into filtering-15500
2 parents 821dfe6 + d887757 commit 58c382e

File tree

5 files changed

+101
-13
lines changed

5 files changed

+101
-13
lines changed

projects/igniteui-angular/src/lib/carousel/carousel.component.spec.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, ViewChild, TemplateRef } from '@angular/core';
1+
import { Component, ViewChild, TemplateRef, ChangeDetectionStrategy } from '@angular/core';
22
import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing';
33
import { By } from '@angular/platform-browser';
44
import {
@@ -1143,7 +1143,8 @@ class CarouselTestComponent {
11431143
<igx-slide><h3>Slide4</h3></igx-slide>
11441144
</igx-carousel>
11451145
`,
1146-
imports: [IgxCarouselComponent, IgxSlideComponent]
1146+
imports: [IgxCarouselComponent, IgxSlideComponent],
1147+
changeDetection: ChangeDetectionStrategy.OnPush
11471148
})
11481149
class CarouselAnimationsComponent {
11491150
@ViewChild('carousel', { static: true }) public carousel: IgxCarouselComponent;

projects/igniteui-angular/src/lib/carousel/carousel.component.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1048,6 +1048,7 @@ export class IgxCarouselComponent extends IgxCarouselComponentBase implements On
10481048
}
10491049
this.slideChanged.emit({ carousel: this, slide });
10501050
this.restartInterval();
1051+
this.cdr.markForCheck();
10511052
}
10521053
}
10531054

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

+64-3
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ import {
1616
IgxGridExternalAdvancedFilteringComponent,
1717
IgxGridAdvancedFilteringBindingComponent,
1818
IgxGridAdvancedFilteringDynamicColumnsComponent,
19-
IgxGridAdvancedFilteringSerializedTreeComponent
19+
IgxGridAdvancedFilteringSerializedTreeComponent,
20+
IgxGridAdvancedFilteringWithToolbarComponent
2021
} from '../../test-utils/grid-samples.spec';
2122
import { FormattedValuesFilteringStrategy } from '../../data-operations/filtering-strategy';
2223
import { IgxHierGridExternalAdvancedFilteringComponent } from '../../test-utils/hierarchical-grid-components.spec';
2324
import { IgxHierarchicalGridComponent } from '../hierarchical-grid/public_api';
24-
import { IFilteringEventArgs } from '../public_api';
25+
import { IFilteringEventArgs, IgxGridToolbarAdvancedFilteringComponent } from '../public_api';
2526
import { SampleTestData } from '../../test-utils/sample-test-data.spec';
2627
import { QueryBuilderFunctions } from '../../query-builder/query-builder-functions.spec';
2728
import { By } from '@angular/platform-browser';
@@ -38,7 +39,8 @@ describe('IgxGrid - Advanced Filtering #grid - ', () => {
3839
IgxGridExternalAdvancedFilteringComponent,
3940
IgxGridAdvancedFilteringBindingComponent,
4041
IgxHierGridExternalAdvancedFilteringComponent,
41-
IgxGridAdvancedFilteringDynamicColumnsComponent
42+
IgxGridAdvancedFilteringDynamicColumnsComponent,
43+
IgxGridAdvancedFilteringWithToolbarComponent
4244
]
4345
});
4446
}));
@@ -1195,6 +1197,65 @@ describe('IgxGrid - Advanced Filtering #grid - ', () => {
11951197
}));
11961198
});
11971199

1200+
describe('Advanced filtering with toolbar', () => {
1201+
let fix: ComponentFixture<IgxGridAdvancedFilteringWithToolbarComponent>;
1202+
let grid: IgxGridComponent;
1203+
1204+
beforeEach(fakeAsync(() => {
1205+
fix = TestBed.createComponent(IgxGridAdvancedFilteringWithToolbarComponent);
1206+
grid = fix.componentInstance.grid;
1207+
fix.detectChanges();
1208+
}));
1209+
1210+
it('Should update toolbar when advancedFilteringExpressionsTreeChange emits a new value', fakeAsync(() => {
1211+
// Set initial filtering expressions tree
1212+
const tree = new FilteringExpressionsTree(FilteringLogic.And);
1213+
tree.filteringOperands.push({
1214+
fieldName: 'ProductName',
1215+
condition: IgxStringFilteringOperand.instance().condition('contains'),
1216+
searchVal: 'angular',
1217+
ignoreCase: true
1218+
});
1219+
1220+
// Apply the initial filtering tree
1221+
grid.advancedFilteringExpressionsTree = tree;
1222+
fix.detectChanges();
1223+
1224+
// Create a new filtering tree with more filters
1225+
const updatedTree = new FilteringExpressionsTree(FilteringLogic.And);
1226+
updatedTree.filteringOperands.push({
1227+
fieldName: 'Downloads',
1228+
condition: IgxStringFilteringOperand.instance().condition('equals'),
1229+
searchVal: 10,
1230+
ignoreCase: true
1231+
});
1232+
updatedTree.filteringOperands.push({
1233+
fieldName: 'ProductName',
1234+
condition: IgxStringFilteringOperand.instance().condition('contains'),
1235+
searchVal: 'angular',
1236+
ignoreCase: true
1237+
});
1238+
updatedTree.filteringOperands.push({
1239+
fieldName: 'Category',
1240+
condition: IgxStringFilteringOperand.instance().condition('equals'),
1241+
searchVal: 'electronics',
1242+
ignoreCase: false
1243+
});
1244+
1245+
// Update the filtering expressions tree
1246+
grid.advancedFilteringExpressionsTree = updatedTree;
1247+
fix.detectChanges();
1248+
1249+
// Verify the correct number of filters
1250+
const toolbarDebugElement = fix.debugElement.query(By.directive(IgxGridToolbarAdvancedFilteringComponent));
1251+
const toolbarComponent = toolbarDebugElement.componentInstance as IgxGridToolbarAdvancedFilteringComponent;
1252+
const numberOfFilters = (toolbarComponent as any).numberOfColumns;
1253+
1254+
expect(grid.advancedFilteringExpressionsTree.filteringOperands.length).toEqual(3);
1255+
expect(numberOfFilters).toEqual(3);
1256+
}));
1257+
})
1258+
11981259
describe('Localization - ', () => {
11991260
it('Should correctly change resource strings for Advanced Filtering dialog.', fakeAsync(() => {
12001261
const fix = TestBed.createComponent(IgxGridAdvancedFilteringComponent);

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

+10-8
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';
@@ -31,7 +31,7 @@ import { isTree } from '../../data-operations/expressions-tree-util';
3131
templateUrl: './grid-toolbar-advanced-filtering.component.html',
3232
imports: [IgxButtonDirective, IgxRippleDirective, IgxIconComponent]
3333
})
34-
export class IgxGridToolbarAdvancedFilteringComponent implements AfterViewInit {
34+
export class IgxGridToolbarAdvancedFilteringComponent implements OnInit {
3535
protected numberOfColumns: number;
3636
/**
3737
* Returns the grid containing this component.
@@ -44,17 +44,19 @@ export class IgxGridToolbarAdvancedFilteringComponent implements AfterViewInit {
4444
@Input()
4545
public overlaySettings: OverlaySettings;
4646

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

5349
/**
5450
* @hidden
5551
*/
56-
public ngAfterViewInit(): void {
52+
public ngOnInit(): void {
53+
// Initial value
5754
this.numberOfColumns = this.grid?.advancedFilteringExpressionsTree ? this.extractUniqueFieldNamesFromFilterTree(this.grid?.advancedFilteringExpressionsTree).length : 0;
55+
56+
// Subscribing for future updates
57+
this.grid?.advancedFilteringExpressionsTreeChange.subscribe(filteringTree => {
58+
this.numberOfColumns = this.extractUniqueFieldNamesFromFilterTree(filteringTree).length;
59+
});
5860
}
5961

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

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

+23
Original file line numberDiff line numberDiff line change
@@ -1121,6 +1121,29 @@ export class IgxGridAdvancedFilteringComponent extends BasicGridComponent {
11211121
}
11221122
}
11231123

1124+
@Component({
1125+
template: `<igx-grid [data]="data" height="500px" [allowAdvancedFiltering]="false">
1126+
<igx-grid-toolbar >
1127+
<igx-grid-toolbar-actions>
1128+
<igx-grid-toolbar-advanced-filtering>Really advanced filtering</igx-grid-toolbar-advanced-filtering>
1129+
</igx-grid-toolbar-actions>
1130+
</igx-grid-toolbar>
1131+
<igx-column width="100px" [field]="'ID'" [header]="'HeaderID'" [hasSummary]="true"></igx-column>
1132+
<igx-column width="100px" [field]="'ProductName'" dataType="string"></igx-column>
1133+
<igx-column width="100px" [field]="'Downloads'" dataType="number" [hasSummary]="true"></igx-column>
1134+
<igx-column width="100px" [field]="'Released'" dataType="boolean"></igx-column>
1135+
<igx-column width="100px" [field]="'ReleaseDate'" dataType="date" headerClasses="header-release-date"></igx-column>
1136+
<igx-column width="100px" [field]="'AnotherField'" [header]="'Another Field'" dataType="string" [filters]="customFilter">
1137+
<igx-column width="100px" [field]="'ReleaseTime'" dataType="time"></igx-column>
1138+
</igx-column>
1139+
</igx-grid>`,
1140+
imports: [IgxGridComponent, IgxColumnComponent, IgxGridToolbarComponent, IgxGridToolbarActionsComponent, IgxGridToolbarAdvancedFilteringComponent]
1141+
})
1142+
export class IgxGridAdvancedFilteringWithToolbarComponent extends BasicGridComponent {
1143+
public customFilter = CustomFilter.instance();
1144+
public override data = SampleTestData.excelFilteringData();
1145+
}
1146+
11241147
@Component({
11251148
template: `<igx-grid [data]="data" height="500px" [allowAdvancedFiltering]="true">
11261149
<igx-grid-toolbar></igx-grid-toolbar>

0 commit comments

Comments
 (0)