Skip to content

Commit 6b2855c

Browse files
authored
Merge branch 'master' into some-lint-fixes
2 parents 1cf885f + a44d874 commit 6b2855c

File tree

6 files changed

+165
-116
lines changed

6 files changed

+165
-116
lines changed

projects/igniteui-angular/src/lib/grids/api.service.ts

Lines changed: 1 addition & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@ import { Injectable } from '@angular/core';
22
import { Subject } from 'rxjs';
33
import { cloneArray, isEqual, reverseMapper, mergeObjects } from '../core/utils';
44
import { DataUtil, DataType } from '../data-operations/data-util';
5-
import { IFilteringExpression } from '../data-operations/filtering-expression.interface';
65
import { ISortingExpression, SortingDirection } from '../data-operations/sorting-expression.interface';
76
import { IgxGridCellComponent } from './cell.component';
87
import { IgxGridBaseDirective } from './grid-base.directive';
98
import { IgxRowDirective } from './row.directive';
10-
import { IFilteringOperation } from '../data-operations/filtering-condition';
11-
import { IFilteringExpressionsTree, FilteringExpressionsTree } from '../data-operations/filtering-expressions-tree';
9+
import { IFilteringExpressionsTree } from '../data-operations/filtering-expressions-tree';
1210
import { Transaction, TransactionType, State } from '../services/transaction/transaction';
1311
import { IgxCell, IgxGridCRUDService, IgxRow } from './common/crud.service';
1412
import { GridType } from './common/grid.interface';
@@ -285,61 +283,6 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
285283
this.grid.sortingExpressions = sortingState;
286284
}
287285

288-
public filter(fieldName: string, term, conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,
289-
ignoreCase: boolean) {
290-
const grid = this.grid;
291-
const filteringTree = grid.filteringExpressionsTree;
292-
this.crudService.endEdit(false);
293-
294-
if (grid.paging) {
295-
grid.page = 0;
296-
}
297-
298-
const fieldFilterIndex = filteringTree.findIndex(fieldName);
299-
if (fieldFilterIndex > -1) {
300-
filteringTree.filteringOperands.splice(fieldFilterIndex, 1);
301-
}
302-
303-
this.prepare_filtering_expression(filteringTree, fieldName, term, conditionOrExpressionsTree, ignoreCase, fieldFilterIndex);
304-
grid.filteringExpressionsTree = filteringTree;
305-
}
306-
307-
public filter_global(term, condition, ignoreCase) {
308-
if (!condition) {
309-
return;
310-
}
311-
312-
const grid = this.grid;
313-
const filteringTree = grid.filteringExpressionsTree;
314-
this.crudService.endEdit(false);
315-
if (grid.paging) {
316-
grid.page = 0;
317-
}
318-
319-
filteringTree.filteringOperands = [];
320-
for (const column of grid.columns) {
321-
this.prepare_filtering_expression(filteringTree, column.field, term,
322-
condition, ignoreCase || column.filteringIgnoreCase);
323-
}
324-
325-
grid.filteringExpressionsTree = filteringTree;
326-
}
327-
328-
public clear_filter(fieldName: string) {
329-
const grid = this.grid;
330-
this.crudService.endEdit(false);
331-
const filteringState = grid.filteringExpressionsTree;
332-
const index = filteringState.findIndex(fieldName);
333-
334-
if (index > -1) {
335-
filteringState.filteringOperands.splice(index, 1);
336-
} else if (!fieldName) {
337-
filteringState.filteringOperands = [];
338-
}
339-
340-
grid.filteringExpressionsTree = filteringState;
341-
}
342-
343286
public clear_sort(fieldName: string) {
344287
const sortingState = this.grid.sortingExpressions;
345288
const index = sortingState.findIndex((expr) => expr.fieldName === fieldName);
@@ -514,48 +457,6 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
514457
return this.grid.expansionStates.get(rowID) !== expanded;
515458
}
516459

517-
/** Modifies the filteringState object to contain the newly added fitering conditions/expressions.
518-
* If createNewTree is true, filteringState will not be modified (because it directly affects the grid.filteringExpressionsTree),
519-
* but a new object is created and returned.
520-
*/
521-
public prepare_filtering_expression(
522-
filteringState: IFilteringExpressionsTree,
523-
fieldName: string,
524-
searchVal,
525-
conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,
526-
ignoreCase: boolean,
527-
insertAtIndex = -1,
528-
createNewTree = false): FilteringExpressionsTree {
529-
530-
const oldExpressionsTreeIndex = filteringState.findIndex(fieldName);
531-
const expressionsTree = conditionOrExpressionsTree instanceof FilteringExpressionsTree ?
532-
conditionOrExpressionsTree as IFilteringExpressionsTree : null;
533-
const condition = conditionOrExpressionsTree instanceof FilteringExpressionsTree ?
534-
null : conditionOrExpressionsTree as IFilteringOperation;
535-
const newExpression: IFilteringExpression = { fieldName, searchVal, condition, ignoreCase };
536-
537-
const newExpressionsTree: FilteringExpressionsTree = createNewTree ?
538-
new FilteringExpressionsTree(filteringState.operator, filteringState.fieldName) : filteringState as FilteringExpressionsTree;
539-
540-
if (oldExpressionsTreeIndex === -1) {
541-
// no expressions tree found for this field
542-
if (expressionsTree) {
543-
if (insertAtIndex > -1) {
544-
newExpressionsTree.filteringOperands.splice(insertAtIndex, 0, expressionsTree);
545-
} else {
546-
newExpressionsTree.filteringOperands.push(expressionsTree);
547-
}
548-
} else if (condition) {
549-
// create expressions tree for this field and add the new expression to it
550-
const newExprTree: FilteringExpressionsTree = new FilteringExpressionsTree(filteringState.operator, fieldName);
551-
newExprTree.filteringOperands.push(newExpression);
552-
newExpressionsTree.filteringOperands.push(newExprTree);
553-
}
554-
}
555-
556-
return newExpressionsTree;
557-
}
558-
559460
public prepare_sorting_expression(stateCollections: Array<Array<any>>, expression: ISortingExpression) {
560461
if (expression.dir === SortingDirection.None) {
561462
stateCollections.forEach(state => {

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

Lines changed: 107 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ import { takeUntil, first } from 'rxjs/operators';
77
import { IForOfState } from '../../directives/for-of/for_of.directive';
88
import { IgxColumnComponent } from '../columns/column.component';
99
import { IFilteringOperation } from '../../data-operations/filtering-condition';
10-
import { GridBaseAPIService } from '../api.service';
1110
import { IColumnResizeEventArgs, IFilteringEventArgs } from '../common/events';
12-
import { GridType } from '../common/grid.interface';
1311
import { OverlaySettings, PositionSettings, VerticalAlignment } from '../../services/overlay/utilities';
1412
import { IgxOverlayService } from '../../services/overlay/overlay';
1513
import { useAnimation } from '@angular/animations';
@@ -55,8 +53,7 @@ export class IgxFilteringService implements OnDestroy {
5553
private column;
5654
private lastActiveNode;
5755

58-
constructor(private gridAPI: GridBaseAPIService<IgxGridBaseDirective & GridType>, private _moduleRef: NgModuleRef<any>,
59-
private iconService: IgxIconService, private _overlayService: IgxOverlayService) {}
56+
constructor(private _moduleRef: NgModuleRef<any>, private iconService: IgxIconService, private _overlayService: IgxOverlayService) {}
6057

6158
public ngOnDestroy(): void {
6259
this.destroy$.next(true);
@@ -203,7 +200,7 @@ export class IgxFilteringService implements OnDestroy {
203200

204201
const grid = this.grid;
205202

206-
const col = this.gridAPI.get_column_by_name(field);
203+
const col = grid.getColumnByName(field);
207204
const filteringIgnoreCase = ignoreCase || (col ? col.filteringIgnoreCase : false);
208205

209206
const filteringTree = grid.filteringExpressionsTree;
@@ -214,7 +211,7 @@ export class IgxFilteringService implements OnDestroy {
214211
filteringTree.filteringOperands.splice(fieldFilterIndex, 1);
215212
}
216213
const newFilteringTree: FilteringExpressionsTree =
217-
this.gridAPI.prepare_filtering_expression(filteringTree, field, value, conditionOrExpressionTree,
214+
this.prepare_filtering_expression(filteringTree, field, value, conditionOrExpressionTree,
218215
filteringIgnoreCase, fieldFilterIndex, true);
219216

220217
const eventArgs: IFilteringEventArgs = { owner: grid,
@@ -226,29 +223,50 @@ export class IgxFilteringService implements OnDestroy {
226223
}
227224

228225
if (conditionOrExpressionTree) {
229-
this.gridAPI.filter(field, value, conditionOrExpressionTree, filteringIgnoreCase);
226+
this.filter_internal(field, value, conditionOrExpressionTree, filteringIgnoreCase);
230227
} else {
231228
const expressionsTreeForColumn = this.grid.filteringExpressionsTree.find(field);
232229
if (!expressionsTreeForColumn) {
233230
throw new Error('Invalid condition or Expression Tree!');
234231
} else if (expressionsTreeForColumn instanceof FilteringExpressionsTree) {
235-
this.gridAPI.filter(field, value, expressionsTreeForColumn, filteringIgnoreCase );
232+
this.filter_internal(field, value, expressionsTreeForColumn, filteringIgnoreCase );
236233
} else {
237234
const expressionForColumn = expressionsTreeForColumn as IFilteringExpression;
238-
this.gridAPI.filter(field, value, expressionForColumn.condition, filteringIgnoreCase );
235+
this.filter_internal(field, value, expressionForColumn.condition, filteringIgnoreCase );
239236
}
240237
}
241238
const doneEventArgs = this.grid.filteringExpressionsTree.find(field) as FilteringExpressionsTree;
242239
// Wait for the change detection to update filtered data through the pipes and then emit the event.
243240
requestAnimationFrame(() => this.grid.onFilteringDone.emit(doneEventArgs));
244241
}
245242

243+
public filter_global(term, condition, ignoreCase) {
244+
if (!condition) {
245+
return;
246+
}
247+
248+
const grid = this.grid;
249+
const filteringTree = grid.filteringExpressionsTree;
250+
grid.crudService.endEdit(false);
251+
if (grid.paging) {
252+
grid.page = 0;
253+
}
254+
255+
filteringTree.filteringOperands = [];
256+
for (const column of grid.columns) {
257+
this.prepare_filtering_expression(filteringTree, column.field, term,
258+
condition, ignoreCase || column.filteringIgnoreCase);
259+
}
260+
261+
grid.filteringExpressionsTree = filteringTree;
262+
}
263+
246264
/**
247265
* Clears the filter of a given column if name is provided. Otherwise clears the filters of all columns.
248266
*/
249267
public clearFilter(field: string): void {
250268
if (field) {
251-
const column = this.gridAPI.get_column_by_name(field);
269+
const column = this.grid.getColumnByName(field);
252270
if (!column) {
253271
return;
254272
}
@@ -266,7 +284,7 @@ export class IgxFilteringService implements OnDestroy {
266284
}
267285

268286
this.isFiltering = true;
269-
this.gridAPI.clear_filter(field);
287+
this.clear_filter(field);
270288

271289
// Wait for the change detection to update filtered data through the pipes and then emit the event.
272290
requestAnimationFrame(() => this.grid.onFilteringDone.emit(null));
@@ -284,6 +302,21 @@ export class IgxFilteringService implements OnDestroy {
284302
this.isFiltering = false;
285303
}
286304

305+
public clear_filter(fieldName: string) {
306+
const grid = this.grid;
307+
grid.crudService.endEdit(false);
308+
const filteringState = grid.filteringExpressionsTree;
309+
const index = filteringState.findIndex(fieldName);
310+
311+
if (index > -1) {
312+
filteringState.filteringOperands.splice(index, 1);
313+
} else if (!fieldName) {
314+
filteringState.filteringOperands = [];
315+
}
316+
317+
grid.filteringExpressionsTree = filteringState;
318+
}
319+
287320
/**
288321
* Filters all the `IgxColumnComponent` in the `IgxGridComponent` with the same condition.
289322
*/
@@ -297,7 +330,7 @@ export class IgxFilteringService implements OnDestroy {
297330
const newFilteringTree = new FilteringExpressionsTree(filteringTree.operator, filteringTree.fieldName);
298331

299332
for (const column of grid.columns) {
300-
this.gridAPI.prepare_filtering_expression(newFilteringTree, column.field, value, condition,
333+
this.prepare_filtering_expression(newFilteringTree, column.field, value, condition,
301334
ignoreCase || column.filteringIgnoreCase);
302335
}
303336

@@ -516,6 +549,68 @@ export class IgxFilteringService implements OnDestroy {
516549
return true;
517550
}
518551

552+
private filter_internal(fieldName: string, term, conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,
553+
ignoreCase: boolean) {
554+
const grid = this.grid;
555+
const filteringTree = grid.filteringExpressionsTree;
556+
this.grid.crudService.endEdit(false);
557+
558+
if (grid.paging) {
559+
grid.page = 0;
560+
}
561+
562+
const fieldFilterIndex = filteringTree.findIndex(fieldName);
563+
if (fieldFilterIndex > -1) {
564+
filteringTree.filteringOperands.splice(fieldFilterIndex, 1);
565+
}
566+
567+
this.prepare_filtering_expression(filteringTree, fieldName, term, conditionOrExpressionsTree, ignoreCase, fieldFilterIndex);
568+
grid.filteringExpressionsTree = filteringTree;
569+
}
570+
571+
/** Modifies the filteringState object to contain the newly added fitering conditions/expressions.
572+
* If createNewTree is true, filteringState will not be modified (because it directly affects the grid.filteringExpressionsTree),
573+
* but a new object is created and returned.
574+
*/
575+
private prepare_filtering_expression(
576+
filteringState: IFilteringExpressionsTree,
577+
fieldName: string,
578+
searchVal,
579+
conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,
580+
ignoreCase: boolean,
581+
insertAtIndex = -1,
582+
createNewTree = false): FilteringExpressionsTree {
583+
584+
const oldExpressionsTreeIndex = filteringState.findIndex(fieldName);
585+
const expressionsTree = conditionOrExpressionsTree instanceof FilteringExpressionsTree ?
586+
conditionOrExpressionsTree as IFilteringExpressionsTree : null;
587+
const condition = conditionOrExpressionsTree instanceof FilteringExpressionsTree ?
588+
null : conditionOrExpressionsTree as IFilteringOperation;
589+
const newExpression: IFilteringExpression = { fieldName, searchVal, condition, ignoreCase };
590+
591+
const newExpressionsTree: FilteringExpressionsTree = createNewTree ?
592+
new FilteringExpressionsTree(filteringState.operator, filteringState.fieldName) : filteringState as FilteringExpressionsTree;
593+
594+
if (oldExpressionsTreeIndex === -1) {
595+
// no expressions tree found for this field
596+
if (expressionsTree) {
597+
if (insertAtIndex > -1) {
598+
newExpressionsTree.filteringOperands.splice(insertAtIndex, 0, expressionsTree);
599+
} else {
600+
newExpressionsTree.filteringOperands.push(expressionsTree);
601+
}
602+
} else if (condition) {
603+
// create expressions tree for this field and add the new expression to it
604+
const newExprTree: FilteringExpressionsTree = new FilteringExpressionsTree(filteringState.operator, fieldName);
605+
newExprTree.filteringOperands.push(newExpression);
606+
newExpressionsTree.filteringOperands.push(newExprTree);
607+
}
608+
}
609+
610+
return newExpressionsTree;
611+
}
612+
613+
519614
private isFilteringTreeComplex(expressions: IFilteringExpressionsTree | IFilteringExpression): boolean {
520615
if (!expressions) {
521616
return false;

projects/igniteui-angular/src/lib/grids/grid-base.directive.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6276,7 +6276,7 @@ export abstract class IgxGridBaseDirective extends DisplayDensityBase implements
62766276
this.gridAPI.clear_groupby(record.item.field);
62776277

62786278
// Clear Filtering
6279-
this.gridAPI.clear_filter(record.item.field);
6279+
this.filteringService.clear_filter(record.item.field);
62806280

62816281
// Close filter row
62826282
if (this.filteringService.isFilterRowVisible

projects/igniteui-angular/src/lib/grids/grid/grid-cell-editing.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1118,7 +1118,7 @@ describe('IgxGrid - Cell Editing #grid', () => {
11181118

11191119
grid.filter('fullName', 'Al', IgxStringFilteringOperand.instance().condition('equals'));
11201120
fixture.detectChanges();
1121-
cell.gridAPI.clear_filter('fullName');
1121+
grid.clearFilter('fullName');
11221122
fixture.detectChanges();
11231123

11241124
cell = grid.getCellByColumn(0, 'fullName');

0 commit comments

Comments
 (0)