Skip to content

Commit 0514236

Browse files
committed
refactor(*): Do not re-initialize the esf on filteringExpressions change
1 parent 2b70011 commit 0514236

File tree

5 files changed

+56
-37
lines changed

5 files changed

+56
-37
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export abstract class BaseFilteringComponent {
2323
public abstract columnChange: EventEmitter<any>;
2424
public abstract sortingChanged: EventEmitter<undefined>;
2525
public abstract listDataLoaded: EventEmitter<undefined>;
26+
public abstract filterCleared: EventEmitter<undefined>;
2627

2728
constructor(
2829
protected cdr: ChangeDetectorRef,

projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-clear-filters.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export class IgxExcelStyleClearFiltersComponent {
3434
*/
3535
public clearFilter() {
3636
this.esf.grid.filteringService.clearFilter(this.esf.column.field);
37+
this.esf.filterCleared.emit();
3738
this.selectAllFilterItems();
3839
}
3940

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

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,12 @@ export class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent
128128
@Output()
129129
public listDataLoaded = new EventEmitter();
130130

131+
/**
132+
* @hidden @internal
133+
*/
134+
@Output()
135+
public filterCleared = new EventEmitter();
136+
131137
@ViewChild('mainDropdown', { read: ElementRef })
132138
public mainDropdown: ElementRef<HTMLElement>;
133139

@@ -434,7 +440,11 @@ export class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent
434440

435441
this.subscriptions.add(this.grid.columnVisibilityChanged.subscribe(() => this.detectChanges()));
436442
this.subscriptions.add(this.grid.sortingExpressionsChange.subscribe(() => this.sortingChanged.emit()));
437-
this.subscriptions.add(this.grid.filteringExpressionsTreeChange.subscribe(() => this.init()));
443+
this.subscriptions.add(this.grid.filteringExpressionsTreeChange.subscribe(() => {
444+
this.expressionsList = new Array<ExpressionUI>();
445+
generateExpressionsList(this.column.filteringExpressionsTree, this.grid.filteringLogic, this.expressionsList);
446+
this.cdr.detectChanges();
447+
}));
438448
this.subscriptions.add(this.grid.columnMovingEnd.subscribe(() => this.cdr.markForCheck()));
439449
}
440450
}
@@ -528,12 +538,6 @@ export class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent
528538
private renderValues() {
529539
this.filterValues = this.generateFilterValues();
530540
this.generateListData();
531-
this.expressionsList.forEach(expr => {
532-
if (this.column.dataType === GridColumnDataType.String && this.column.filteringIgnoreCase
533-
&& expr.expression.searchVal && expr.expression.searchVal instanceof Set) {
534-
this.modifyExpression(expr);
535-
}
536-
});
537541
}
538542

539543
private generateFilterValues() {
@@ -564,16 +568,6 @@ export class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent
564568
return filterValues;
565569
}
566570

567-
private modifyExpression(expr: ExpressionUI) {
568-
const lowerCaseFilterValues = new Set(Array.from(expr.expression.searchVal).map((value: string) => value.toLowerCase()));
569-
570-
this.grid.data.forEach(item => {
571-
if (typeof item[this.column.field] === "string" && lowerCaseFilterValues.has(item[this.column.field]?.toLowerCase())) {
572-
expr.expression.searchVal.add(item[this.column.field]);
573-
}
574-
});
575-
}
576-
577571
private generateListData() {
578572
this.listData = new Array<FilterListItem>();
579573
const shouldUpdateSelection = this.areExpressionsSelectable();

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

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export class IgxExcelStyleSearchComponent implements AfterViewInit, OnDestroy {
7676
@ViewChild('input', { read: IgxInputDirective, static: true })
7777
public searchInput: IgxInputDirective;
7878

79-
@ViewChild('cancelButton', {read: IgxButtonDirective, static: true })
79+
@ViewChild('cancelButton', { read: IgxButtonDirective, static: true })
8080
protected cancelButton: IgxButtonDirective;
8181

8282
/**
@@ -251,6 +251,10 @@ export class IgxExcelStyleSearchComponent implements AfterViewInit, OnDestroy {
251251
this.searchInput.nativeElement.focus();
252252
});
253253
});
254+
255+
esf.filterCleared.pipe(takeUntil(this.destroy$)).subscribe(() => {
256+
this.clearInput();
257+
});
254258
}
255259

256260
public ngAfterViewInit() {
@@ -396,7 +400,7 @@ export class IgxExcelStyleSearchComponent implements AfterViewInit, OnDestroy {
396400
return `${this.id}-item-${index}`;
397401
}
398402

399-
protected setActiveDescendant() : void {
403+
protected setActiveDescendant(): void {
400404
this.activeDescendant = this.focusedItem?.id || '';
401405
}
402406

@@ -585,20 +589,38 @@ export class IgxExcelStyleSearchComponent implements AfterViewInit, OnDestroy {
585589
blanksItem = selectedItems[blanksItemIndex];
586590
selectedItems.splice(blanksItemIndex, 1);
587591
}
592+
let searchVal;
593+
switch (this.esf.column.dataType) {
594+
case GridColumnDataType.Date:
595+
searchVal = new Set(selectedItems.map(d => d.value.toDateString()));
596+
break;
597+
case GridColumnDataType.DateTime:
598+
searchVal = new Set(selectedItems.map(d => d.value.toISOString()));
599+
break;
600+
case GridColumnDataType.Time:
601+
searchVal = new Set(selectedItems.map(e => e.value.toLocaleTimeString()));
602+
break;
603+
case GridColumnDataType.String:
604+
if (this.esf.column.filteringIgnoreCase) {
605+
const selectedValues = new Set(selectedItems.map(item => item.value.toLowerCase()));
606+
searchVal = new Set();
607+
608+
this.esf.grid.data.forEach(item => {
609+
if (typeof item[this.esf.column.field] === "string" && selectedValues.has(item[this.esf.column.field]?.toLowerCase())) {
610+
searchVal.add(item[this.esf.column.field]);
611+
}
612+
});
613+
break;
614+
}
615+
default:
616+
searchVal = new Set(selectedItems.map(e => e.value))
617+
}
588618
filterTree.filteringOperands.push({
589619
condition: this.createCondition('in'),
590620
conditionName: 'in',
591621
fieldName: this.esf.column.field,
592622
ignoreCase: this.esf.column.filteringIgnoreCase,
593-
searchVal: new Set(
594-
this.esf.column.dataType === GridColumnDataType.Date ?
595-
selectedItems.map(d => d.value.toDateString()) :
596-
this.esf.column.dataType === GridColumnDataType.DateTime ?
597-
selectedItems.map(d => d.value.toISOString()) :
598-
this.esf.column.dataType === GridColumnDataType.Time ?
599-
selectedItems.map(e => e.value.toLocaleTimeString()) :
600-
selectedItems.map(e => e.value)
601-
)
623+
searchVal
602624
});
603625

604626
if (blanksItem) {
@@ -628,12 +650,12 @@ export class IgxExcelStyleSearchComponent implements AfterViewInit, OnDestroy {
628650
if (event) {
629651
const key = event.key.toLowerCase();
630652
const navKeys = ['space', 'spacebar', ' ',
631-
'arrowup', 'up', 'arrowdown', 'down', 'home', 'end'];
632-
if (navKeys.indexOf(key) === -1) { // If key has appropriate function in DD
633-
return;
634-
}
635-
event.preventDefault();
636-
event.stopPropagation();
653+
'arrowup', 'up', 'arrowdown', 'down', 'home', 'end'];
654+
if (navKeys.indexOf(key) === -1) { // If key has appropriate function in DD
655+
return;
656+
}
657+
event.preventDefault();
658+
event.stopPropagation();
637659
switch (key) {
638660
case 'arrowup':
639661
case 'up':
@@ -827,9 +849,9 @@ export class IgxExcelStyleSearchComponent implements AfterViewInit, OnDestroy {
827849
const direction = index > (this.focusedItem ? this.focusedItem.index : -1) ? Navigate.Down : Navigate.Up;
828850
const scrollRequired = this.isIndexOutOfBounds(index, direction);
829851
this.focusedItem = {
830-
id: this.getItemId(index),
831-
index: index,
832-
checked: this.virtDir.igxForOf[index].isSelected
852+
id: this.getItemId(index),
853+
index: index,
854+
checked: this.virtDir.igxForOf[index].isSelected
833855
};
834856
if (scrollRequired) {
835857
this.virtDir.scrollTo(index);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2220,6 +2220,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective implements OnIni
22202220
ref.instance.resizable = this.rowDimensionResizing;
22212221
ref.instance.sortable = dim.sortable === undefined ? true : dim.sortable;
22222222
ref.instance.width = this.rowDimensionWidth(dim);
2223+
ref.instance.filteringIgnoreCase = false;
22232224
ref.changeDetectorRef.detectChanges();
22242225
columns.push(ref.instance);
22252226
});

0 commit comments

Comments
 (0)