UNPKG

igniteui-angular-sovn

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

161 lines (140 loc) 4.96 kB
import { FilteringLogic, IFilteringExpression } from './filtering-expression.interface'; import { IBaseEventArgs } from '../core/utils'; export enum FilteringExpressionsTreeType { Regular, Advanced } export declare interface IExpressionTree { filteringOperands: (IExpressionTree | IFilteringExpression)[]; operator: FilteringLogic; fieldName?: string; } export declare interface IFilteringExpressionsTree extends IBaseEventArgs, IExpressionTree { filteringOperands: (IFilteringExpressionsTree | IFilteringExpression)[]; type?: FilteringExpressionsTreeType; find(fieldName: string): IFilteringExpressionsTree | IFilteringExpression; findIndex(fieldName: string): number; } export class FilteringExpressionsTree implements IFilteringExpressionsTree { /** * Sets/gets the filtering operands. * ```typescript * const gridExpressionsTree = new FilteringExpressionsTree(FilteringLogic.And); * const expression = [ * { * condition: IgxStringFilteringOperand.instance().condition('contains'), * fieldName: 'Column Field', * searchVal: 'Value', * ignoreCase: false * }]; * gridExpressionsTree.filteringOperands.push(expression); * this.grid.filteringExpressionsTree = gridExpressionsTree; * ``` * ```typescript * let filteringOperands = gridExpressionsTree.filteringOperands; * ``` * * @memberof FilteringExpressionsTree */ public filteringOperands: (IFilteringExpressionsTree | IFilteringExpression)[] = []; /** * Sets/gets the operator. * ```typescript * gridExpressionsTree.operator = FilteringLogic.And; * ``` * ```typescript * let operator = gridExpressionsTree.operator; * ``` * * @memberof FilteringExpressionsTree */ public operator: FilteringLogic; /** * Sets/gets the field name of the column where the filtering expression is placed. * ```typescript * gridExpressionTree.fieldName = 'Column Field'; * ``` * ```typescript * let columnField = expressionTree.fieldName; * ``` * * @memberof FilteringExpressionsTree */ public fieldName?: string; /** * Sets/gets the type of the filtering expressions tree. * ```typescript * gridExpressionTree.type = FilteringExpressionsTree.Advanced; * ``` * ```typescript * let type = expressionTree.type; * ``` * * @memberof FilteringExpressionsTree */ public type?: FilteringExpressionsTreeType; constructor(operator: FilteringLogic, fieldName?: string) { this.operator = operator; this.fieldName = fieldName; } /** * Checks if filtering expressions tree is empty. * * @param expressionTree filtering expressions tree. */ public static empty(expressionTree: IFilteringExpressionsTree): boolean { return !expressionTree || !expressionTree.filteringOperands || !expressionTree.filteringOperands.length; } /** * Returns the filtering expression for a column with the provided fieldName. * ```typescript * let filteringExpression = gridExpressionTree.find('Column Field'); * ``` * * @memberof FilteringExpressionsTree */ public find(fieldName: string): IFilteringExpressionsTree | IFilteringExpression { const index = this.findIndex(fieldName); if (index > -1) { return this.filteringOperands[index]; } return null; } /** * Returns the index of the filtering expression for a column with the provided fieldName. * ```typescript * let filteringExpressionIndex = gridExpressionTree.findIndex('Column Field'); * ``` * * @memberof FilteringExpressionsTree */ public findIndex(fieldName: string): number { let expr; for (let i = 0; i < this.filteringOperands.length; i++) { expr = this.filteringOperands[i]; if (expr instanceof FilteringExpressionsTree) { if (this.isFilteringExpressionsTreeForColumn(expr, fieldName)) { return i; } } else { if ((expr as IFilteringExpression).fieldName === fieldName) { return i; } } } return -1; } protected isFilteringExpressionsTreeForColumn(expressionsTree: IFilteringExpressionsTree, fieldName: string): boolean { if (expressionsTree.fieldName === fieldName) { return true; } for (const expr of expressionsTree.filteringOperands) { if ((expr instanceof FilteringExpressionsTree)) { return this.isFilteringExpressionsTreeForColumn(expr, fieldName); } else { return (expr as IFilteringExpression).fieldName === fieldName; } } return false; } }