Skip to content

Commit c9ca8e2

Browse files
authored
Merge branch '9.1.x' into mkirova/fix-8104
2 parents a2ccd6f + 7655ceb commit c9ca8e2

File tree

4 files changed

+31
-9
lines changed

4 files changed

+31
-9
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { IgxGridBaseDirective } from '../grid-base.directive';
55
import icons from './svgIcons';
66
import { IFilteringExpression, FilteringLogic } from '../../data-operations/filtering-expression.interface';
77
import { Subject } from 'rxjs';
8-
import { takeUntil, filter } from 'rxjs/operators';
8+
import { takeUntil, first } from 'rxjs/operators';
99
import { IForOfState } from '../../directives/for-of/for_of.directive';
1010
import { IgxColumnComponent } from '../columns/column.component';
1111
import { IFilteringOperation } from '../../data-operations/filtering-condition';
@@ -70,6 +70,7 @@ export class IgxFilteringService implements OnDestroy {
7070

7171
public toggleFilterDropdown(element, column, classRef) {
7272
if (!this._componentOverlayId || (this.column && this.column.field !== column.field)) {
73+
this.initFilteringSettings();
7374
this.column = column;
7475
const filterIcon = this.column.filteringExpressionsTree ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';
7576
const filterIconTarget = element.querySelector('.' + filterIcon);
@@ -95,7 +96,7 @@ export class IgxFilteringService implements OnDestroy {
9596
scrollStrategy: new AbsoluteScrollStrategy()
9697
};
9798
this._overlayService.onOpening.pipe(
98-
filter((overlay) => overlay.id === this._componentOverlayId),
99+
first((overlay) => overlay.id === this._componentOverlayId),
99100
takeUntil(this.destroy$)).subscribe((eventArgs) => {
100101
const instance = eventArgs.componentRef.instance as any;
101102
if (instance) {
@@ -105,7 +106,7 @@ export class IgxFilteringService implements OnDestroy {
105106
});
106107

107108
this._overlayService.onClosed.pipe(
108-
filter(overlay => overlay.id === this._componentOverlayId),
109+
first(overlay => overlay.id === this._componentOverlayId),
109110
takeUntil(this.destroy$)).subscribe(() => {
110111
this._componentOverlayId = null;
111112
this.grid.navigation.activeNode = this.lastActiveNode;

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4444,6 +4444,30 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => {
44444444
loadingIndicator = GridFunctions.getExcelFilteringLoadingIndicator(fix);
44454445
expect(loadingIndicator).toBeNull('esf loading indicator is visible');
44464446
}));
4447+
4448+
it('Done callback should be executed only once per column', fakeAsync(() => {
4449+
const compInstance = fix.componentInstance as IgxGridFilteringESFLoadOnDemandComponent;
4450+
// Open excel style custom filtering dialog and wait a bit.
4451+
GridFunctions.clickExcelFilterIcon(fix, 'ProductName');
4452+
tick(1000);
4453+
fix.detectChanges();
4454+
4455+
// Verify items in search have loaded and that the loading indicator is not visible.
4456+
expect(compInstance.doneCallbackCounter).toBe(1, 'Incorrect done callback execution count');
4457+
let listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix);
4458+
expect(listItems.length).toBe(6, 'incorrect rendered list items count');
4459+
let loadingIndicator = GridFunctions.getExcelFilteringLoadingIndicator(fix);
4460+
expect(loadingIndicator).toBeNull('esf loading indicator is visible');
4461+
4462+
GridFunctions.clickExcelFilterIcon(fix, 'Downloads');
4463+
tick(1000);
4464+
fix.detectChanges();
4465+
expect(compInstance.doneCallbackCounter).toBe(2, 'Incorrect done callback execution count');
4466+
listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix);
4467+
expect(listItems.length).toBe(8, 'incorrect rendered list items count');
4468+
loadingIndicator = GridFunctions.getExcelFilteringLoadingIndicator(fix);
4469+
expect(loadingIndicator).toBeNull('esf loading indicator is visible');
4470+
}));
44474471
});
44484472

44494473
describe(null, () => {

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
HostListener,
99
Input,
1010
NgZone,
11-
OnInit,
1211
OnDestroy
1312
} from '@angular/core';
1413
import { DataType } from '../../data-operations/data-util';
@@ -31,7 +30,7 @@ import { IgxGridExcelStyleFilteringComponent } from '../filtering/excel-style/gr
3130
selector: 'igx-grid-header',
3231
templateUrl: './grid-header.component.html'
3332
})
34-
export class IgxGridHeaderComponent implements DoCheck, OnInit, OnDestroy {
33+
export class IgxGridHeaderComponent implements DoCheck, OnDestroy {
3534

3635
private _destroy$ = new Subject<boolean>();
3736

@@ -143,10 +142,6 @@ export class IgxGridHeaderComponent implements DoCheck, OnInit, OnDestroy {
143142
public zone: NgZone
144143
) { }
145144

146-
public ngOnInit() {
147-
this.grid.filteringService.initFilteringSettings();
148-
}
149-
150145
public ngDoCheck() {
151146
this.getSortDirection();
152147
this.cdr.markForCheck();

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,6 +1106,7 @@ export class CustomFilteringStrategyComponent extends BasicGridComponent {
11061106
export class IgxGridFilteringESFLoadOnDemandComponent extends BasicGridComponent {
11071107
private _filteringStrategy = new FilteringStrategy();
11081108
public data = SampleTestData.excelFilteringData();
1109+
public doneCallbackCounter = 0;
11091110

11101111
public columnValuesStrategy = (column: IgxColumnComponent,
11111112
columnExprTree: IFilteringExpressionsTree,
@@ -1114,6 +1115,7 @@ export class IgxGridFilteringESFLoadOnDemandComponent extends BasicGridComponent
11141115
const filteredData = this._filteringStrategy.filter(this.data, columnExprTree);
11151116
const columnValues = filteredData.map(record => record[column.field]);
11161117
done(columnValues);
1118+
this.doneCallbackCounter++;
11171119
}, 1000);
11181120
}
11191121
}

0 commit comments

Comments
 (0)