Skip to content

Commit a53f6f3

Browse files
committed
perf(*): change how esf generates the unique list in tree grid (use flat data instead of the hierarchical)
1 parent b8f4b59 commit a53f6f3

File tree

3 files changed

+22
-11
lines changed

3 files changed

+22
-11
lines changed

projects/igniteui-angular/src/lib/data-operations/data-util.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { IPagingState, PagingError } from './paging-state.interface';
55
import { IGroupByKey } from './groupby-expand-state.interface';
66
import { IGroupByRecord } from './groupby-record.interface';
77
import { IGroupingState } from './groupby-state.interface';
8-
import { mergeObjects } from '../core/utils';
8+
import { cloneArray, mergeObjects } from '../core/utils';
99
import { Transaction, TransactionType, HierarchicalTransaction } from '../services/transaction/transaction';
1010
import { getHierarchy, isHierarchyMatch } from './operations';
1111
import { ColumnType, GridType } from '../grids/common/grid.interface';
@@ -21,6 +21,8 @@ import {
2121
import { DefaultDataCloneStrategy, IDataCloneStrategy } from '../data-operations/data-clone-strategy';
2222
import { IGroupingExpression } from './grouping-expression.interface';
2323
import { DefaultMergeStrategy, IGridMergeStrategy } from './merge-strategy';
24+
import { IFilteringExpressionsTree } from './filtering-expressions-tree';
25+
import { FilteringStrategy, FilterUtil } from './filtering-strategy';
2426

2527
/**
2628
* @hidden
@@ -278,6 +280,15 @@ export class DataUtil {
278280
return value;
279281
}
280282

283+
public static filterDataByExpressions(data: any[], expressionsTree: IFilteringExpressionsTree, grid: GridType): any {
284+
if (expressionsTree.filteringOperands.length) {
285+
const state = { expressionsTree, strategy: FilteringStrategy.instance() };
286+
data = FilterUtil.filter(cloneArray(data), state, grid);
287+
}
288+
289+
return data;
290+
}
291+
281292
private static findParentFromPath(data: any[], primaryKey: any, childDataKey: any, path: any[]): any {
282293
let collection: any[] = data;
283294
let result: any;

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,13 @@ export abstract class BaseFilteringStrategy implements IFilteringStrategy {
133133
public getFilterItems(column: ColumnType, tree: IFilteringExpressionsTree): Promise<IgxFilterItem[]> {
134134
const applyFormatter = column.formatter && this.shouldFormatFilterValues(column);
135135

136-
const data = column.grid.gridAPI.filterDataByExpressions(tree);
136+
const data = this.getFilteredData(column, tree);
137137

138138
const pathParts = columnFieldPath(column.field)
139139
const seenFormattedFilterItems = new Map<any, IgxFilterItem>()
140140

141141
for (let i = 0; i < data.length; ++i) {
142-
const record = this.getRecord(data[i]);
142+
const record = data[i]
143143
const rawValue = resolveNestedPath(record, pathParts);
144144
const formattedValue = applyFormatter ? column.formatter(rawValue, record) : rawValue;
145145
const { key, finalValue } = this.getFilterItemKeyValue(formattedValue, column);
@@ -158,6 +158,10 @@ export abstract class BaseFilteringStrategy implements IFilteringStrategy {
158158
return Promise.resolve(filterItems);
159159
}
160160

161+
protected getFilteredData(column: ColumnType, tree: IFilteringExpressionsTree) {
162+
return column.grid.gridAPI.filterDataByExpressions(tree);
163+
}
164+
161165
protected getFilterItemLabel(column: ColumnType, value: any, applyFormatter: boolean, data: any) {
162166
if (column.formatter) {
163167
if (applyFormatter) {
@@ -214,10 +218,6 @@ export abstract class BaseFilteringStrategy implements IFilteringStrategy {
214218
return { key, finalValue };
215219
}
216220

217-
protected getRecord(item: any) {
218-
return item;
219-
}
220-
221221
protected shouldFormatFilterValues(_column: ColumnType): boolean {
222222
return false;
223223
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ export class TreeGridFilteringStrategy extends BaseFilteringStrategy {
8989
return Promise.resolve(items);
9090
}
9191

92+
protected override getFilteredData(column: ColumnType, tree: IFilteringExpressionsTree) {
93+
return DataUtil.filterDataByExpressions(column.grid.flatData, tree, column.grid);
94+
}
95+
9296
private getHierarchicalFilterItems(records: ITreeGridRecord[], column: ColumnType, parent?: IgxFilterItem): IgxFilterItem[] {
9397
const pathParts = columnFieldPath(column.field);
9498
return records?.map(record => {
@@ -109,10 +113,6 @@ export class TreeGridFilteringStrategy extends BaseFilteringStrategy {
109113
return filterItem;
110114
});
111115
}
112-
113-
protected override getRecord(item: any) {
114-
return item.data;
115-
}
116116
}
117117

118118
export class TreeGridFormattedValuesFilteringStrategy extends TreeGridFilteringStrategy {

0 commit comments

Comments
 (0)