Skip to content

Commit 4fc69a9

Browse files
Otixagedinakovadamyanpetev
authored
Depricated find and findIndex from IFilteringExpressionsTree, added FilteringUtil (#14815)
* chore(query-builder): Depricated find and findIndex, added ExpressionsTreeUtil to public API --------- Co-authored-by: Galina Edinakova <[email protected]> Co-authored-by: Damyan Petev <[email protected]>
1 parent 7774f3d commit 4fc69a9

File tree

7 files changed

+84
-46
lines changed

7 files changed

+84
-46
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
All notable changes for each version of this project will be documented in this file.
44

55
## 18.2.0
6+
### General
7+
- `IFilteringExpressionsTree`, `FilteringExpressionsTree`
8+
- **Deprecation** The `find` and `findIndex` methods have been deprecated and will be removed in a future version. A `ExpressionsTreeUtil` class has been added which provides the same functionality.
69
### New Features
710
- `IgxSimpleCombo`
811
- Introduced ability for Simple Combo to automatically select and retain valid input on "Tab" press enhancing user experience by streamlining data entry and reducing the need for manual selection improving form navigation.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { IFilteringExpression } from './filtering-expression.interface';
2+
import { IFilteringExpressionsTree } from './filtering-expressions-tree';
3+
4+
export class ExpressionsTreeUtil {
5+
/**
6+
* Returns the filtering expression for a column with the provided tree and fieldName.
7+
* ```typescript
8+
* let filteringExpression = ExpressionsTreeUtil.find(gridExpressionTree, 'Column Field');
9+
* ```
10+
*/
11+
public static find(tree: IFilteringExpressionsTree, fieldName: string): IFilteringExpressionsTree | IFilteringExpression {
12+
const index = this.findIndex(tree, fieldName);
13+
14+
if (index > -1) {
15+
return tree.filteringOperands[index];
16+
}
17+
18+
return null;
19+
}
20+
21+
/**
22+
* Returns the index of the filtering expression for a column with the provided tree and fieldName.
23+
* ```typescript
24+
* let filteringExpressionIndex = ExpressionsTreeUtil.findIndex(gridExpressionTree, 'Column Field');
25+
* ```
26+
*/
27+
public static findIndex(tree: IFilteringExpressionsTree, fieldName: string): number {
28+
for (let i = 0; i < tree.filteringOperands.length; i++) {
29+
const expr = tree.filteringOperands[i];
30+
if ((expr as IFilteringExpressionsTree).operator !== undefined) {
31+
if (this.isFilteringExpressionsTreeForColumn(expr as IFilteringExpressionsTree, fieldName)) {
32+
return i;
33+
}
34+
} else if ((expr as IFilteringExpression).fieldName === fieldName) {
35+
return i;
36+
}
37+
}
38+
39+
return -1;
40+
}
41+
42+
protected static isFilteringExpressionsTreeForColumn(expressionsTree: IFilteringExpressionsTree, fieldName: string): boolean {
43+
if (expressionsTree.fieldName === fieldName) {
44+
return true;
45+
}
46+
47+
for (const expr of expressionsTree.filteringOperands) {
48+
if ((expr as IFilteringExpressionsTree).operator !== undefined) {
49+
return this.isFilteringExpressionsTreeForColumn(expr as IFilteringExpressionsTree, fieldName);
50+
} else if ((expr as IFilteringExpression).fieldName === fieldName) {
51+
return true;
52+
}
53+
}
54+
return false;
55+
}
56+
}

projects/igniteui-angular/src/lib/data-operations/filtering-expressions-tree.ts

Lines changed: 12 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { FilteringLogic, IFilteringExpression } from './filtering-expression.interface';
22
import { IBaseEventArgs } from '../core/utils';
3+
import { ExpressionsTreeUtil } from './expressions-tree-util';
34

45
/* mustCoerceToInt */
56
export enum FilteringExpressionsTreeType {
@@ -19,7 +20,14 @@ export declare interface IFilteringExpressionsTree extends IBaseEventArgs, IExpr
1920
/* alternateName: treeType */
2021
type?: FilteringExpressionsTreeType;
2122

23+
/**
24+
* @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.find` instead.
25+
*/
2226
find(fieldName: string): IFilteringExpressionsTree | IFilteringExpression;
27+
28+
/**
29+
* @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.findIndex` instead.
30+
*/
2331
findIndex(fieldName: string): number;
2432
}
2533

@@ -111,15 +119,10 @@ export class FilteringExpressionsTree implements IFilteringExpressionsTree {
111119
* ```
112120
*
113121
* @memberof FilteringExpressionsTree
122+
* @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.find` instead.
114123
*/
115124
public find(fieldName: string): IFilteringExpressionsTree | IFilteringExpression {
116-
const index = this.findIndex(fieldName);
117-
118-
if (index > -1) {
119-
return this.filteringOperands[index];
120-
}
121-
122-
return null;
125+
return ExpressionsTreeUtil.find(this, fieldName);
123126
}
124127

125128
/**
@@ -129,37 +132,9 @@ export class FilteringExpressionsTree implements IFilteringExpressionsTree {
129132
* ```
130133
*
131134
* @memberof FilteringExpressionsTree
135+
* @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.findIndex` instead.
132136
*/
133137
public findIndex(fieldName: string): number {
134-
let expr;
135-
for (let i = 0; i < this.filteringOperands.length; i++) {
136-
expr = this.filteringOperands[i];
137-
if (expr instanceof FilteringExpressionsTree) {
138-
if (this.isFilteringExpressionsTreeForColumn(expr, fieldName)) {
139-
return i;
140-
}
141-
} else {
142-
if ((expr as IFilteringExpression).fieldName === fieldName) {
143-
return i;
144-
}
145-
}
146-
}
147-
148-
return -1;
149-
}
150-
151-
protected isFilteringExpressionsTreeForColumn(expressionsTree: IFilteringExpressionsTree, fieldName: string): boolean {
152-
if (expressionsTree.fieldName === fieldName) {
153-
return true;
154-
}
155-
156-
for (const expr of expressionsTree.filteringOperands) {
157-
if ((expr instanceof FilteringExpressionsTree)) {
158-
return this.isFilteringExpressionsTreeForColumn(expr, fieldName);
159-
} else if ((expr as IFilteringExpression).fieldName === fieldName) {
160-
return true;
161-
}
162-
}
163-
return false;
138+
return ExpressionsTreeUtil.findIndex(this, fieldName);
164139
}
165140
}

projects/igniteui-angular/src/lib/grids/columns/column.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import { isConstructor, PlatformUtil } from '../../core/utils';
5656
import { IgxGridCell } from '../grid-public-cell';
5757
import { NG_VALIDATORS, Validator } from '@angular/forms';
5858
import { Size } from '../common/enums';
59+
import { ExpressionsTreeUtil } from '../../data-operations/expressions-tree-util';
5960

6061
const DEFAULT_DATE_FORMAT = 'mediumDate';
6162
const DEFAULT_TIME_FORMAT = 'mediumTime';
@@ -1672,7 +1673,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy
16721673
* @memberof IgxColumnComponent
16731674
*/
16741675
public get filteringExpressionsTree(): FilteringExpressionsTree {
1675-
return this.grid.filteringExpressionsTree.find(this.field) as FilteringExpressionsTree;
1676+
return ExpressionsTreeUtil.find(this.grid.filteringExpressionsTree, this.field) as FilteringExpressionsTree;
16761677
}
16771678

16781679
/* alternateName: parentColumn */

projects/igniteui-angular/src/lib/grids/filtering/grid-filtering.service.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { ColumnType, GridType } from '../common/grid.interface';
2020
import { formatDate } from '../../core/utils';
2121
import { ExcelStylePositionStrategy } from './excel-style/excel-style-position-strategy';
2222
import { fadeIn } from 'igniteui-angular/animations';
23+
import { ExpressionsTreeUtil } from '../../data-operations/expressions-tree-util';
2324

2425
/**
2526
* @hidden
@@ -172,17 +173,17 @@ export class IgxFilteringService implements OnDestroy {
172173
const filteringIgnoreCase = ignoreCase || (col ? col.filteringIgnoreCase : false);
173174

174175
const filteringTree = grid.filteringExpressionsTree;
175-
const columnFilteringExpressionsTree = filteringTree.find(field) as IFilteringExpressionsTree;
176+
const columnFilteringExpressionsTree = ExpressionsTreeUtil.find(filteringTree, field) as IFilteringExpressionsTree;
176177
conditionOrExpressionTree = conditionOrExpressionTree ?? columnFilteringExpressionsTree;
177-
const fieldFilterIndex = filteringTree.findIndex(field);
178+
const fieldFilterIndex = ExpressionsTreeUtil.findIndex(filteringTree, field);
178179

179180
const newFilteringTree: FilteringExpressionsTree =
180181
this.prepare_filtering_expression(filteringTree, field, value, conditionOrExpressionTree,
181182
filteringIgnoreCase, fieldFilterIndex, true);
182183

183184
const eventArgs: IFilteringEventArgs = {
184185
owner: grid,
185-
filteringExpressions: newFilteringTree.find(field) as FilteringExpressionsTree, cancel: false
186+
filteringExpressions: ExpressionsTreeUtil.find(newFilteringTree, field) as FilteringExpressionsTree, cancel: false
186187
};
187188
this.grid.filtering.emit(eventArgs);
188189

@@ -193,7 +194,7 @@ export class IgxFilteringService implements OnDestroy {
193194
if (conditionOrExpressionTree) {
194195
this.filter_internal(field, value, conditionOrExpressionTree, filteringIgnoreCase);
195196
} else {
196-
const expressionsTreeForColumn = this.grid.filteringExpressionsTree.find(field);
197+
const expressionsTreeForColumn = ExpressionsTreeUtil.find(this.grid.filteringExpressionsTree, field);
197198
if (!expressionsTreeForColumn) {
198199
throw new Error('Invalid condition or Expression Tree!');
199200
} else if (expressionsTreeForColumn instanceof FilteringExpressionsTree) {
@@ -203,7 +204,7 @@ export class IgxFilteringService implements OnDestroy {
203204
this.filter_internal(field, value, expressionForColumn.condition, filteringIgnoreCase);
204205
}
205206
}
206-
const doneEventArgs = this.grid.filteringExpressionsTree.find(field) as FilteringExpressionsTree;
207+
const doneEventArgs = ExpressionsTreeUtil.find(this.grid.filteringExpressionsTree, field) as FilteringExpressionsTree;
207208
// Wait for the change detection to update filtered data through the pipes and then emit the event.
208209
requestAnimationFrame(() => this.grid.filteringDone.emit(doneEventArgs));
209210
}
@@ -273,7 +274,7 @@ export class IgxFilteringService implements OnDestroy {
273274
const grid = this.grid;
274275
grid.crudService.endEdit(false);
275276
const filteringState = grid.filteringExpressionsTree;
276-
const index = filteringState.findIndex(fieldName);
277+
const index = ExpressionsTreeUtil.findIndex(filteringState, fieldName);
277278

278279
if (index > -1) {
279280
filteringState.filteringOperands.splice(index, 1);
@@ -512,7 +513,7 @@ export class IgxFilteringService implements OnDestroy {
512513
this.grid.crudService.endEdit(false);
513514
this.grid.page = 0;
514515

515-
const fieldFilterIndex = filteringTree.findIndex(fieldName);
516+
const fieldFilterIndex = ExpressionsTreeUtil.findIndex(filteringTree, fieldName);
516517
this.prepare_filtering_expression(filteringTree, fieldName, term, conditionOrExpressionsTree, ignoreCase, fieldFilterIndex);
517518
this.grid.filteringExpressionsTree = filteringTree;
518519
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { SortingDirection } from '../../data-operations/sorting-strategy';
2121
import { SortingIndexPipe } from './pipes';
2222
import { NgTemplateOutlet, NgIf, NgClass } from '@angular/common';
2323
import { IgxIconComponent } from '../../icon/icon.component';
24+
import { ExpressionsTreeUtil } from '../../data-operations/expressions-tree-util';
2425

2526
/**
2627
* @hidden
@@ -280,7 +281,7 @@ export class IgxGridHeaderComponent implements DoCheck, OnDestroy {
280281
if(!this.grid.advancedFilteringExpressionsTree) {
281282
return false;
282283
}
283-
return !!this.grid.advancedFilteringExpressionsTree.find(this.column.field);
284+
return !!ExpressionsTreeUtil.find(this.grid.advancedFilteringExpressionsTree, this.column.field);
284285
}
285286

286287
private triggerSort() {

projects/igniteui-angular/src/public_api.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export * from './lib/data-operations/filtering-expressions-tree';
4545
export * from './lib/data-operations/filtering-condition';
4646
export * from './lib/data-operations/filtering-state.interface';
4747
export * from './lib/data-operations/filtering-strategy';
48+
export * from './lib/data-operations/expressions-tree-util';
4849
export * from './lib/data-operations/groupby-expand-state.interface';
4950
export * from './lib/data-operations/groupby-record.interface';
5051
export * from './lib/data-operations/groupby-state.interface';

0 commit comments

Comments
 (0)