diff --git a/source/components/conversation/FormDecorator.js b/source/components/conversation/FormDecorator.js
index 507e28b5c..49102f753 100644
--- a/source/components/conversation/FormDecorator.js
+++ b/source/components/conversation/FormDecorator.js
@@ -79,8 +79,8 @@ export var FormDecorator = formType => RenderField =>
return (
pointOutObjectives(objectives)}
- onMouseOut={() => pointOutObjectives([])}>
+ onMouseEnter={() => pointOutObjectives(objectives)}
+ onMouseLeave={() => pointOutObjectives([])}>
{this.state.helpVisible && this.renderHelpBox(helpText)}
{this.renderHeader(unfolded, valueType, human, helpText, wideQuestion, subquestion)}
diff --git a/source/engine/generateQuestions.js b/source/engine/generateQuestions.js
index 46fa82ffb..d2fdda7c6 100644
--- a/source/engine/generateQuestions.js
+++ b/source/engine/generateQuestions.js
@@ -50,16 +50,19 @@ let buildVariantTree = relevantPaths => path => {
return rec(path)
}
-export let generateGridQuestions = R.pipe(
+export let generateGridQuestions = missingVariables => R.pipe(
R.toPairs,
R.map( ([variantRoot, relevantVariants]) =>
({
...constructStepMeta(findRuleByDottedName(variantRoot)),
component: Question,
choices: buildVariantTree(relevantVariants)(variantRoot),
- objectives: []
+ objectives: R.pipe(
+ R.chain(v => missingVariables[v]),
+ R.uniq()
+ )(relevantVariants)
})
- ),
+ )
//TODO reintroduce objectives
// {
@@ -69,7 +72,7 @@ export let generateGridQuestions = R.pipe(
// )(variant['une possibilité'])
// }
)
-export let generateSimpleQuestions = R.pipe(
+export let generateSimpleQuestions = missingVariables => R.pipe(
R.values, //TODO exploiter ici les groupes de questions de type 'record' (R.keys): elles pourraient potentiellement êtres regroupées visuellement dans le formulaire
R.unnest,
R.map(dottedName => {
@@ -95,7 +98,7 @@ export let generateSimpleQuestions = R.pipe(
],
},
{
- objectives: [] //missingVariables[dottedName],
+ objectives: missingVariables[dottedName],
}
)
})
diff --git a/source/engine/rules.js b/source/engine/rules.js
index 9d3ccadf8..1f29a20be 100644
--- a/source/engine/rules.js
+++ b/source/engine/rules.js
@@ -140,7 +140,7 @@ export let collectMissingVariables = (groupMethod='groupByMissingVariable') => a
let isVariant = R.path(['formule', 'une possibilité'])
-export let recrecrecrec =
+export let findVariantsAndRecords =
({variantGroups, recordGroups}, dottedName, childDottedName) => {
let child = findRuleByDottedName(dottedName),
parentDottedName = parentName(dottedName),
@@ -149,7 +149,7 @@ export let recrecrecrec =
let grandParentDottedName = parentName(parentDottedName),
grandParent = findRuleByDottedName(grandParentDottedName)
if (isVariant(grandParent))
- return recrecrecrec({variantGroups, recordGroups}, parentDottedName, childDottedName || dottedName)
+ return findVariantsAndRecords({variantGroups, recordGroups}, parentDottedName, childDottedName || dottedName)
else
return {
variantGroups: R.mergeWith(R.concat, variantGroups, {[parentDottedName]: [childDottedName || dottedName]}),
diff --git a/source/reducers.js b/source/reducers.js
index d5349b8d1..6325b4812 100644
--- a/source/reducers.js
+++ b/source/reducers.js
@@ -8,7 +8,7 @@ import { euro, months } from './components/conversation/formValueTypes.js'
import { STEP_ACTION, START_CONVERSATION, EXPLAIN_VARIABLE, POINT_OUT_OBJECTIVES} from './actions'
import R from 'ramda'
-import {findGroup, findRuleByDottedName, parentName, collectMissingVariables, recrecrecrec} from './engine/rules'
+import {findGroup, findRuleByDottedName, parentName, collectMissingVariables, findVariantsAndRecords} from './engine/rules'
import {generateGridQuestions, generateSimpleQuestions} from './engine/generateQuestions'
@@ -88,29 +88,25 @@ let analyse = rootVariable => R.pipe(
let missingVariables
-let buildNextSteps = R.pipe(
- /*
- COLLECTE DES VARIABLES MANQUANTES
- *********************************
- on collecte les variables manquantes : celles qui sont nécessaires pour
- remplir les objectifs de la simulation (calculer des cotisations) mais qui n'ont pas
- encore été renseignées
+/*
+ COLLECTE DES VARIABLES MANQUANTES
+ *********************************
+ on collecte les variables manquantes : celles qui sont nécessaires pour
+ remplir les objectifs de la simulation (calculer des cotisations) mais qui n'ont pas
+ encore été renseignées
- TODO perf : peut-on le faire en même temps que l'on traverse l'AST ?
- Oui sûrement, cette liste se complète en remontant l'arbre. En fait, on le fait déjà pour nodeValue,
- et quand nodeValue vaut null, c'est qu'il y a des missingVariables ! Il suffit donc de remplacer les
- null par un tableau, et d'ailleurs utiliser des fonction d'aide pour mutualiser ces tests.
+ TODO perf : peut-on le faire en même temps que l'on traverse l'AST ?
+ Oui sûrement, cette liste se complète en remontant l'arbre. En fait, on le fait déjà pour nodeValue,
+ et quand nodeValue vaut null, c'est qu'il y a des missingVariables ! Il suffit donc de remplacer les
+ null par un tableau, et d'ailleurs utiliser des fonction d'aide pour mutualiser ces tests.
+
+ missingVariables: {variable: [objectives]}
+ */
+let buildNextSteps = analysedSituation => {
+ let missingVariables = collectMissingVariables('groupByMissingVariable')(
+ R.path(['formule', 'explanation', 'explanation'])(analysedSituation)
+ )
- missingVariables: {variable: [objectives]}
- */
- R.path(['formule', 'explanation', 'explanation']),
- analysedSituation => {
- // console.log('analysedSituation', analysedSituation)
- //TODO temporary fix
- missingVariables = collectMissingVariables('groupByMissingVariable')(analysedSituation)
- return missingVariables
- },
- R.keys,
/*
Parmi les variables manquantes, certaines sont citées dans une règle de type 'une possibilité'.
**On appelle ça des groupes de type 'variante'.**
@@ -135,18 +131,21 @@ let buildNextSteps = R.pipe(
D'autres variables pourront être regroupées aussi, car elles partagent un parent, mais sans fusionner leurs questions dans l'interface. Ce sont des **groupes de type _record_ **
*/
- R.reduce(
- recrecrecrec //TODO reorganize
- , {variantGroups: {}, recordGroups: {}}
- ),
- // on va maintenant construire la liste des composants React qui afficheront les questions à l'utilisateur pour que l'on obtienne les variables manquantes
- R.evolve({
- variantGroups: generateGridQuestions,
- recordGroups: generateSimpleQuestions,
- }),
- R.values,
- R.unnest,
-)
+ return R.pipe(
+ R.keys,
+ R.reduce(
+ findVariantsAndRecords
+ , {variantGroups: {}, recordGroups: {}}
+ ),
+ // on va maintenant construire la liste des composants React qui afficheront les questions à l'utilisateur pour que l'on obtienne les variables manquantes
+ R.evolve({
+ variantGroups: generateGridQuestions(missingVariables),
+ recordGroups: generateSimpleQuestions(missingVariables),
+ }),
+ R.values,
+ R.unnest,
+ )(missingVariables)
+}
export default reduceReducers(
combineReducers({