From afe2b8c6c8728047f4b2af55b92303fc0f531c24 Mon Sep 17 00:00:00 2001 From: georgianastasov Date: Wed, 11 Jun 2025 14:23:35 +0300 Subject: [PATCH] fix(excel-style-filtering): allow negative decimal values for numeric columns --- ...el-style-default-expression.component.html | 4 +- ...xcel-style-default-expression.component.ts | 5 +- .../lib/grids/grid/grid-filtering-ui.spec.ts | 52 +++++++++++++++++++ 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-default-expression.component.html b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-default-expression.component.html index c0668f02c1d..bd551204afb 100644 --- a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-default-expression.component.html +++ b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-default-expression.component.html @@ -30,8 +30,8 @@ [placeholder]="inputValuePlaceholder" [disabled]="expressionUI.expression.condition && expressionUI.expression.condition.isUnary" autocomplete="off" - [value]="expressionUI.expression.searchVal" - (input)="onValuesInput($event)" + [(ngModel)]="expressionUI.expression.searchVal" + (blur)="updateSearchValueOnBlur($event)" /> diff --git a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-default-expression.component.ts b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-default-expression.component.ts index a110595ad04..97b60a9d39e 100644 --- a/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-default-expression.component.ts +++ b/projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-default-expression.component.ts @@ -7,6 +7,7 @@ import { ChangeDetectorRef, ViewChild } from '@angular/core'; +import { FormsModule } from '@angular/forms'; import { IgxButtonGroupComponent } from '../../../buttonGroup/buttonGroup.component'; import { GridColumnDataType, DataUtil } from '../../../data-operations/data-util'; import { IFilteringOperation } from '../../../data-operations/filtering-condition'; @@ -41,7 +42,7 @@ export interface ILogicOperatorChangedArgs extends IBaseEventArgs { @Component({ selector: 'igx-excel-style-default-expression', templateUrl: './excel-style-default-expression.component.html', - imports: [IgxSelectComponent, IgxPrefixDirective, IgxIconComponent, IgxSelectItemComponent, IgxInputGroupComponent, IgxInputDirective, IgxButtonDirective, IgxButtonGroupComponent, IgxOverlayOutletDirective, IgxIconButtonDirective] + imports: [FormsModule, IgxSelectComponent, IgxPrefixDirective, IgxIconComponent, IgxSelectItemComponent, IgxInputGroupComponent, IgxInputDirective, IgxButtonDirective, IgxButtonGroupComponent, IgxOverlayOutletDirective, IgxIconButtonDirective] }) export class IgxExcelStyleDefaultExpressionComponent implements AfterViewInit { @Input() @@ -163,7 +164,7 @@ export class IgxExcelStyleDefaultExpressionComponent implements AfterViewInit { return this.grid.resourceStrings[`igx_grid_filter_${name}`] || name; } - public onValuesInput(eventArgs) { + public updateSearchValueOnBlur(eventArgs) { this.expressionUI.expression.searchVal = DataUtil.parseValue(this.column.dataType, eventArgs.target.value); } diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts index 4a274ce9815..b82234380e0 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts @@ -3813,12 +3813,15 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { // set first expression's value GridFunctions.setInputValueESF(fix, 0, 0); + tick(100); // select second expression's operator GridFunctions.setOperatorESF(fix, 1, 1); + tick(100); // set second expression's value GridFunctions.setInputValueESF(fix, 1, 20); + tick(100); GridFunctions.clickApplyExcelStyleCustomFiltering(fix); @@ -6299,6 +6302,55 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { expect(input.value).toBe(''); }); })); + + it('should correctly filter negative decimal values in Excel Style filtering', fakeAsync(() => { + GridFunctions.clickExcelFilterIcon(fix, 'Downloads'); + tick(); + fix.detectChanges(); + + GridFunctions.clickExcelFilterCascadeButton(fix); + tick(); + fix.detectChanges(); + + GridFunctions.clickOperatorFromCascadeMenu(fix, 2); + tick(); + fix.detectChanges(); + + GridFunctions.setInputValueESF(fix, 0, '-1'); + tick(100); + fix.detectChanges(); + expect(GridFunctions.getExcelFilteringInput(fix, 0).value).toBe('-1'); + + const applyButton = GridFunctions.getApplyExcelStyleCustomFiltering(fix); + applyButton.click(); + tick(100); + fix.detectChanges(); + + expect(grid.filteredData.length).toBe(8); + + GridFunctions.clickExcelFilterIcon(fix, 'Downloads'); + tick(); + fix.detectChanges(); + + GridFunctions.clickExcelFilterCascadeButton(fix); + tick(); + fix.detectChanges(); + + GridFunctions.clickOperatorFromCascadeMenu(fix, 2); + tick(); + fix.detectChanges(); + + GridFunctions.setInputValueESF(fix, 0, '-0.1'); + tick(100); + fix.detectChanges(); + expect(GridFunctions.getExcelFilteringInput(fix, 0).value).toBe('-0.1'); + + applyButton.click(); + tick(100); + fix.detectChanges(); + + expect(grid.filteredData.length).toBe(8); + })); }); describe('Templates: ', () => {