Skip to content

Commit 5c6db73

Browse files
Merge branch '10.1.x' into ibarakov/fix-8162-10.1.x
2 parents ee164f6 + 4fe9c3c commit 5c6db73

File tree

5 files changed

+38
-12
lines changed

5 files changed

+38
-12
lines changed

projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,14 @@ export class IgxExcelStyleConditionalFilterComponent implements OnDestroy {
5353
constructor(public esf: IgxGridExcelStyleFilteringComponent) {
5454
this.esf.columnChange.pipe(takeUntil(this.destroy$)).subscribe(() => {
5555
if (this.esf.grid) {
56-
this._subMenuOverlaySettings.outlet = (this.esf.grid as any).outlet;
56+
this._subMenuOverlaySettings.outlet = this.esf.grid.outlet;
5757
}
5858
});
59-
}
59+
60+
if (this.esf.grid) {
61+
this._subMenuOverlaySettings.outlet = this.esf.grid.outlet;
62+
}
63+
}
6064

6165
ngOnDestroy(): void {
6266
this.destroy$.next(true);
@@ -147,7 +151,7 @@ export class IgxExcelStyleConditionalFilterComponent implements OnDestroy {
147151
const exprTree = this.esf.column.filteringExpressionsTree;
148152
return exprTree && exprTree.filteringOperands && exprTree.filteringOperands.length &&
149153
!((exprTree.filteringOperands[0] as IFilteringExpression).condition &&
150-
(exprTree.filteringOperands[0] as IFilteringExpression).condition.name === 'in');
154+
(exprTree.filteringOperands[0] as IFilteringExpression).condition.name === 'in');
151155
}
152156

153157
/**

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
@@ -3,7 +3,7 @@ import { FilteringExpressionsTree, IFilteringExpressionsTree } from '../../data-
33
import { IgxGridBaseDirective } from '../grid-base.directive';
44
import { IFilteringExpression, FilteringLogic } from '../../data-operations/filtering-expression.interface';
55
import { Subject } from 'rxjs';
6-
import { takeUntil, filter } from 'rxjs/operators';
6+
import { takeUntil, filter, first } from 'rxjs/operators';
77
import { IForOfState } from '../../directives/for-of/for_of.directive';
88
import { IgxColumnComponent } from '../columns/column.component';
99
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);
@@ -102,7 +103,7 @@ export class IgxFilteringService implements OnDestroy {
102103
scrollStrategy: new AbsoluteScrollStrategy()
103104
};
104105
this._overlayService.onOpening.pipe(
105-
filter((overlay) => overlay.id === this._componentOverlayId),
106+
first((overlay) => overlay.id === this._componentOverlayId),
106107
takeUntil(this.destroy$)).subscribe((eventArgs) => {
107108
const instance = this.grid.excelStyleFilteringComponent ?
108109
this.grid.excelStyleFilteringComponent :
@@ -115,7 +116,7 @@ export class IgxFilteringService implements OnDestroy {
115116
});
116117

117118
this._overlayService.onClosed.pipe(
118-
filter(overlay => overlay.id === this._componentOverlayId),
119+
first(overlay => overlay.id === this._componentOverlayId),
119120
takeUntil(this.destroy$)).subscribe((eventArgs) => {
120121
const instance = this.grid.excelStyleFilteringComponent ?
121122
this.grid.excelStyleFilteringComponent :

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
@@ -4557,6 +4557,30 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => {
45574557
loadingIndicator = GridFunctions.getExcelFilteringLoadingIndicator(fix);
45584558
expect(loadingIndicator).toBeNull('esf loading indicator is visible');
45594559
}));
4560+
4561+
it('Done callback should be executed only once per column', fakeAsync(() => {
4562+
const compInstance = fix.componentInstance as IgxGridFilteringESFLoadOnDemandComponent;
4563+
// Open excel style custom filtering dialog and wait a bit.
4564+
GridFunctions.clickExcelFilterIcon(fix, 'ProductName');
4565+
tick(1000);
4566+
fix.detectChanges();
4567+
4568+
// Verify items in search have loaded and that the loading indicator is not visible.
4569+
expect(compInstance.doneCallbackCounter).toBe(1, 'Incorrect done callback execution count');
4570+
let listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix);
4571+
expect(listItems.length).toBe(6, 'incorrect rendered list items count');
4572+
let loadingIndicator = GridFunctions.getExcelFilteringLoadingIndicator(fix);
4573+
expect(loadingIndicator).toBeNull('esf loading indicator is visible');
4574+
4575+
GridFunctions.clickExcelFilterIcon(fix, 'Downloads');
4576+
tick(1000);
4577+
fix.detectChanges();
4578+
expect(compInstance.doneCallbackCounter).toBe(2, 'Incorrect done callback execution count');
4579+
listItems = GridFunctions.getExcelStyleSearchComponentListItems(fix);
4580+
expect(listItems.length).toBe(9, 'incorrect rendered list items count');
4581+
loadingIndicator = GridFunctions.getExcelFilteringLoadingIndicator(fix);
4582+
expect(loadingIndicator).toBeNull('esf loading indicator is visible');
4583+
}));
45604584
});
45614585

45624586
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
@@ -1105,6 +1105,7 @@ export class CustomFilteringStrategyComponent extends BasicGridComponent {
11051105
export class IgxGridFilteringESFLoadOnDemandComponent extends BasicGridComponent {
11061106
private _filteringStrategy = new FilteringStrategy();
11071107
public data = SampleTestData.excelFilteringData();
1108+
public doneCallbackCounter = 0;
11081109

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

0 commit comments

Comments
 (0)