From 9305d27238fff0527ab55eddc0161a7e73b1293b Mon Sep 17 00:00:00 2001 From: Hristo Anastasov Date: Fri, 13 Feb 2026 16:05:30 +0200 Subject: [PATCH 1/3] test(test): assert if correct condition is recreated based on conditionName --- .../expressions-tree-util.spec.ts | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts b/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts index 528c18e79d7..bc64acb1055 100644 --- a/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts +++ b/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts @@ -1,6 +1,6 @@ import { FilteringLogic, IFilteringExpression } from './filtering-expression.interface'; import { FilteringExpressionsTree, IFilteringExpressionsTree } from './filtering-expressions-tree'; -import { recreateTree, recreateTreeFromFields } from './expressions-tree-util'; +import { recreateExpression, recreateTree, recreateTreeFromFields } from './expressions-tree-util'; import { IgxBooleanFilteringOperand, IgxDateFilteringOperand, IgxDateTimeFilteringOperand, IgxNumberFilteringOperand, IgxStringFilteringOperand, IgxTimeFilteringOperand } from './filtering-condition'; import type { EntityType, FieldType } from './grid-types'; @@ -478,3 +478,32 @@ describe('Unit testing FilteringUtil', () => { expect(nestedCondition.condition.logic(200, nestedCondition.searchVal)).toBe(true); }); }); + +fdescribe('Unit testing recreateExpression', () => { + + it('should recreate string expression with correct conditionName', () => { + const fields: FieldType[] = [ + { field: 'Name', dataType: 'string' } + ]; + + // such expression will exist if user has changed the condition OR restore grid state through the IgxGridState directive + const expression: IFilteringExpression = { + fieldName: 'Name', + conditionName: 'contains', + searchVal: 'test', + condition: { + name: 'startsWith', + iconName: 'starts_with', + isUnary: false, + } + }; + + const result = recreateExpression(expression, fields); + + expect(result.condition).toBe(IgxStringFilteringOperand.instance().condition('startsWith')); + expect(result.condition.logic).toBeDefined(); + expect(result.conditionName).toBe('startsWith'); + expect(result.searchVal).toBe('test'); + }); + +}); From ec6ae872a8144de94eecb12485d25fba0a56823f Mon Sep 17 00:00:00 2001 From: Hristo Anastasov Date: Fri, 13 Feb 2026 16:07:50 +0200 Subject: [PATCH 2/3] chore(chore): expose function to be used in tests --- .../core/src/data-operations/expressions-tree-util.spec.ts | 2 +- .../core/src/data-operations/expressions-tree-util.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts b/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts index bc64acb1055..25336f31154 100644 --- a/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts +++ b/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts @@ -479,7 +479,7 @@ describe('Unit testing FilteringUtil', () => { }); }); -fdescribe('Unit testing recreateExpression', () => { +describe('Unit testing recreateExpression', () => { it('should recreate string expression with correct conditionName', () => { const fields: FieldType[] = [ diff --git a/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.ts b/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.ts index 3f50f2de627..550bca65229 100644 --- a/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.ts +++ b/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.ts @@ -138,7 +138,7 @@ function recreateOperatorFromDataType(expression: IFilteringExpression, dataType * @param fields An array of fields to use for recreating the expression. * @returns The recreated expression. */ -function recreateExpression(expression: IFilteringExpression, fields: FieldType[]): IFilteringExpression { +export function recreateExpression(expression: IFilteringExpression, fields: FieldType[]): IFilteringExpression { const field = fields?.find(f => f.field === expression.fieldName); if (field && !expression.condition?.logic) { From 41e2c7ac79e50067b613f7172504bb6a3354e6b4 Mon Sep 17 00:00:00 2001 From: Hristo Anastasov Date: Fri, 13 Feb 2026 16:23:38 +0200 Subject: [PATCH 3/3] fix(grid): recreate condition based on condition.name --- .../src/data-operations/expressions-tree-util.spec.ts | 3 --- .../core/src/data-operations/expressions-tree-util.ts | 9 +++------ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts b/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts index 25336f31154..9ae478f6efd 100644 --- a/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts +++ b/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.spec.ts @@ -477,9 +477,6 @@ describe('Unit testing FilteringUtil', () => { expect(nestedCondition.condition.name).toBe('greaterThan'); expect(nestedCondition.condition.logic(200, nestedCondition.searchVal)).toBe(true); }); -}); - -describe('Unit testing recreateExpression', () => { it('should recreate string expression with correct conditionName', () => { const fields: FieldType[] = [ diff --git a/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.ts b/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.ts index 550bca65229..11d859c0a5a 100644 --- a/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.ts +++ b/projects/igniteui-angular/core/src/data-operations/expressions-tree-util.ts @@ -125,7 +125,7 @@ function getFilteringCondition(dataType: string, name: string): IFilteringOperat */ function recreateOperatorFromDataType(expression: IFilteringExpression, dataType: string): IFilteringOperation { if (!expression.condition?.logic) { - return getFilteringCondition(dataType, expression.conditionName || expression.condition?.name); + return getFilteringCondition(dataType, expression.condition?.name || expression.conditionName); } return expression.condition; @@ -145,7 +145,7 @@ export function recreateExpression(expression: IFilteringExpression, fields: Fie if (!field.filters) { expression.condition = recreateOperatorFromDataType(expression, field.dataType); } else { - expression.condition = field.filters.condition(expression.conditionName || expression.condition?.name); + expression.condition = field.filters.condition(expression.condition?.name || expression.conditionName); } } @@ -153,10 +153,7 @@ export function recreateExpression(expression: IFilteringExpression, fields: Fie throw Error('Wrong `conditionName`, `condition` or `field` provided! It is possible that there is a type mismatch between the condition type and field type.'); } - if (!expression.conditionName) { - expression.conditionName = expression.condition?.name; - } - + expression.conditionName = expression.condition?.name; expression.searchVal = recreateSearchValue(expression.searchVal, field?.dataType); return expression;