mirror of https://github.com/artf/grapesjs.git
committed by
GitHub
2 changed files with 2 additions and 54 deletions
@ -1,53 +0,0 @@ |
|||||
import { ConditionStatement } from './ConditionStatement'; |
|
||||
import { Expression, LogicGroup } from './DataCondition'; |
|
||||
import { LogicalGroupStatement } from './LogicalGroupStatement'; |
|
||||
import { Operator } from './operators'; |
|
||||
import { GenericOperation, GenericOperator } from './operators/GenericOperator'; |
|
||||
import { LogicalOperator } from './operators/LogicalOperator'; |
|
||||
import { NumberOperation, NumberOperator } from './operators/NumberOperator'; |
|
||||
import { StringOperation, StringOperator } from './operators/StringOperations'; |
|
||||
|
|
||||
export function evaluateCondition(condition: any): boolean { |
|
||||
if (typeof condition === 'boolean') { |
|
||||
return condition; |
|
||||
} |
|
||||
|
|
||||
if (isLogicGroup(condition)) { |
|
||||
const { logicalOperator, statements } = condition; |
|
||||
const op = new LogicalOperator(logicalOperator); |
|
||||
const logicalGroup = new LogicalGroupStatement(op, statements); |
|
||||
return logicalGroup.evaluate(); |
|
||||
} |
|
||||
|
|
||||
if (isCondition(condition)) { |
|
||||
const { left, operator, right } = condition; |
|
||||
const op = operatorFactory(left, operator); |
|
||||
const statement = new ConditionStatement(left, op, right); |
|
||||
return statement.evaluate(); |
|
||||
} |
|
||||
|
|
||||
throw new Error('Invalid condition type.'); |
|
||||
} |
|
||||
|
|
||||
function operatorFactory(left: any, operator: string): Operator { |
|
||||
if (isOperatorInEnum(operator, GenericOperation)) { |
|
||||
return new GenericOperator(operator as GenericOperation); |
|
||||
} else if (typeof left === 'number') { |
|
||||
return new NumberOperator(operator as NumberOperation); |
|
||||
} else if (typeof left === 'string') { |
|
||||
return new StringOperator(operator as StringOperation); |
|
||||
} |
|
||||
throw new Error(`Unsupported data type: ${typeof left}`); |
|
||||
} |
|
||||
|
|
||||
function isOperatorInEnum(operator: string, enumObject: any): boolean { |
|
||||
return Object.values(enumObject).includes(operator); |
|
||||
} |
|
||||
|
|
||||
function isLogicGroup(condition: any): condition is LogicGroup { |
|
||||
return condition && typeof condition.logicalOperator !== 'undefined' && Array.isArray(condition.statements); |
|
||||
} |
|
||||
|
|
||||
function isCondition(condition: any): condition is Expression { |
|
||||
return condition && typeof condition.left !== 'undefined' && typeof condition.operator === 'string'; |
|
||||
} |
|
||||
Loading…
Reference in new issue