diff --git a/CHANGELOG.md b/CHANGELOG.md index fcec5bb04c2..e19b2003b58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,6 +69,13 @@ All notable changes for each version of this project will be documented in this - The dialog header no longer throws a missing locale data error for a `locale` without registered Angular locale data when `provideIgniteIntl()` is used. - The `aria-valuemin` and `aria-valuemax` of the selected seconds item no longer depend on the milliseconds of the value. +## 22.2.4 + +### Bug Fixes + +- `IgxGridComponent`, `IgxTreeGridComponent`, `IgxHierarchicalGridComponent` + - Excel-style filtering now preselects custom conditions in the filter dialog when no filter value has been entered yet. + ## 22.2.3 ### Bug Fixes diff --git a/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-custom-dialog.component.ts b/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-custom-dialog.component.ts index f584936a458..48a0f0373bf 100644 --- a/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-custom-dialog.component.ts +++ b/projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-custom-dialog.component.ts @@ -190,6 +190,11 @@ export class IgxExcelStyleCustomDialogComponent { } private createCondition(conditionName: string) { + const condition = this.column.filters?.condition(conditionName); + if (condition) { + return condition; + } + switch (this.column.dataType) { case GridColumnDataType.Boolean: return IgxBooleanFilteringOperand.instance().condition(conditionName); diff --git a/projects/igniteui-angular/grids/grid/src/grid-excel-style-filtering.spec.ts b/projects/igniteui-angular/grids/grid/src/grid-excel-style-filtering.spec.ts index 3401189068f..802ce30833a 100644 --- a/projects/igniteui-angular/grids/grid/src/grid-excel-style-filtering.spec.ts +++ b/projects/igniteui-angular/grids/grid/src/grid-excel-style-filtering.spec.ts @@ -5,6 +5,7 @@ import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxExcelStyleSearchComponent, GridSelectionMode, FilterMode } from 'igniteui-angular/grids/core'; import { IgxGridComponent } from './grid.component'; +import { IgxExcelStyleCustomDialogComponent } from '../../core/src/filtering/excel-style/excel-style-custom-dialog.component'; import { UIInteractions, frames, nextFrame, wait } from '../../../test-utils/ui-interactions.spec'; import { GridFunctions } from '../../../test-utils/grid-functions.spec'; import { SCROLL_FRAMES, verifyFilteringExpression } from '../../../test-utils/grid-filtering-functions.spec'; @@ -539,6 +540,57 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { expect(GridFunctions.getExcelFilteringDDInput(fix, 1).value).toEqual('Less Than'); }); + it('Should preselect custom string condition when opening the custom filter dialog.', async () => { + await GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'AnotherField'); + + GridFunctions.clickExcelFilterCascadeButton(fix); + await fix.whenStable(); + fix.detectChanges(); + + GridFunctions.clickOperatorFromCascadeMenu(fix, 0); + await fix.whenStable(); + + expect(GridFunctions.getExcelFilteringDDInput(fix, 0).value).toEqual('custom'); + expect(GridFunctions.getExcelFilteringInput(fix, 0).value).toEqual(''); + }); + + it('Should preselect custom number condition when opening the custom filter dialog.', async () => { + grid.getColumnByName('Downloads').filters = fix.componentInstance.customFilter; + fix.detectChanges(); + + await GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'Downloads'); + + GridFunctions.clickExcelFilterCascadeButton(fix); + await fix.whenStable(); + fix.detectChanges(); + + GridFunctions.clickOperatorFromCascadeMenu(fix, 0); + await fix.whenStable(); + + expect(GridFunctions.getExcelFilteringDDInput(fix, 0).value).toEqual('custom'); + expect(GridFunctions.getExcelFilteringInput(fix, 0).value).toEqual(''); + }); + + it('Should use the default condition when it is not defined in the column filters.', async () => { + await GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'AnotherField'); + + GridFunctions.clickExcelFilterCascadeButton(fix); + await fix.whenStable(); + fix.detectChanges(); + + GridFunctions.clickOperatorFromCascadeMenu(fix, 0); + await fix.whenStable(); + + const dialog = fix.debugElement.query(By.directive(IgxExcelStyleCustomDialogComponent)) + .componentInstance as IgxExcelStyleCustomDialogComponent; + dialog.selectedOperator = 'contains'; + dialog.onCustomDialogOpening(); + + const expression = dialog.expressionsList[0].expression; + expect(expression.condition).toBe(IgxStringFilteringOperand.instance().condition('contains')); + expect(expression.conditionName).toEqual('contains'); + }); + it('Should display friendly conditions\' names in custom filter dialog.', async () => { await GridFunctions.clickExcelFilterIconFromCode(fix, grid, 'ProductName');