1
0
Fork 0
mirror of https://github.com/betagouv/mon-entreprise synced 2025-02-09 01:45:03 +00:00
mon-entreprise/source/engine/getSituationValue.js
Maxime Quandalle a1b99fdc64 Suppression des do-expression
Il s'agit d'une fonctionnalité non standard de JavaScript qui est peu
utilisée dans la base de code. Ajoute de la complexité pour les nouveaux
développeurs (configuration spécifique de l'environnement de dév) pour
trop peu de bénéfices.
2019-09-11 11:17:23 +02:00

43 lines
1.3 KiB
JavaScript

import { dropLast, isEmpty, last } from 'ramda'
import { joinName, splitName } from './rules'
let evaluateBottomUp = situationGate => startingFragments => {
let rec = (parentFragments, childFragments = []) =>
parentFragments.length == 0
? null
: (function() {
let query = joinName(parentFragments),
expectedResult = isEmpty(childFragments)
? 'oui'
: joinName(childFragments)
return situationGate(query) == null
? rec(dropLast(1)(parentFragments), [
last(parentFragments),
...childFragments
])
: situationGate(query) == expectedResult
})()
return rec(startingFragments)
}
let formatBooleanValue = { oui: true, non: false }
export let getSituationValue = (situationGate, variableName, rule) => {
// get the current situation value
// it's the user input or test input, possibly with default values
let value = situationGate(variableName)
if (rule.API) return typeof value == 'string' ? JSON.parse(value) : value
if (rule.unit != null) {
return value == undefined ? null : +value
}
// a leaf variable with an unit attribute is not boolean
if (formatBooleanValue[value] !== undefined) return formatBooleanValue[value]
if (rule.formule && rule.formule['une possibilité'])
return evaluateBottomUp(situationGate)(splitName(variableName))
return value
}