2
0

feat(engine): 🚸 Always evaluate Set variable

This commit is contained in:
Baptiste Arnaud
2022-03-02 18:58:10 +01:00
parent 7045c02a15
commit a5a1fef597
3 changed files with 8 additions and 23 deletions

View File

@ -11,7 +11,7 @@ import {
} from 'models'
import { isDefined, isNotDefined } from 'utils'
import { sanitizeUrl } from './utils'
import { isMathFormula, evaluateExpression, parseVariables } from './variable'
import { evaluateExpression, parseVariables } from './variable'
type EdgeId = string
@ -38,9 +38,9 @@ const executeSetVariable = (
if (!step.options?.variableId || !step.options.expressionToEvaluate)
return step.outgoingEdgeId
const expression = step.options.expressionToEvaluate
const evaluatedExpression = isMathFormula(expression)
? evaluateExpression(parseVariables(variables)(expression))
: expression
const evaluatedExpression = evaluateExpression(
parseVariables(variables)(expression)
)
updateVariableValue(step.options.variableId, evaluatedExpression)
return step.outgoingEdgeId
}

View File

@ -20,30 +20,15 @@ export const parseVariables =
})
}
export const isMathFormula = (str?: string) =>
['*', '/', '+', '-'].some((val) => str && str.includes(val))
export const evaluateExpression = (str: string) => {
const result = replaceCommasWithDots(str)
try {
const evaluatedNumber = safeEval(result) as number
if (countDecimals(evaluatedNumber) > 2) {
return evaluatedNumber.toFixed(2)
}
return evaluatedNumber.toString()
const evaluatedResult = safeEval(str)
return evaluatedResult.toString()
} catch (err) {
return result
return str
}
}
const replaceCommasWithDots = (str: string) =>
str.replace(new RegExp(/(\d+)(,)(\d+)/, 'g'), '$1.$3')
const countDecimals = (value: number) => {
if (value % 1 != 0) return value.toString().split('.')[1].length
return 0
}
export const parseVariablesInObject = (
object: { [key: string]: string | number },
variables: Variable[]