🐛 Réintroduction de l'info 'cette question sert cet objectif'

pull/6/head
mama 2017-04-28 14:33:22 +02:00
parent ae6af2b1f1
commit 729576b946
4 changed files with 45 additions and 43 deletions

View File

@ -79,8 +79,8 @@ export var FormDecorator = formType => RenderField =>
return (
<div
className={classNames({step: unfolded}, formType)}
onMouseOver={() => pointOutObjectives(objectives)}
onMouseOut={() => pointOutObjectives([])}>
onMouseEnter={() => pointOutObjectives(objectives)}
onMouseLeave={() => pointOutObjectives([])}>
{this.state.helpVisible && this.renderHelpBox(helpText)}
<div style={{visibility: this.state.helpVisible ? 'hidden' : 'visible'}}>
{this.renderHeader(unfolded, valueType, human, helpText, wideQuestion, subquestion)}

View File

@ -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],
}
)
})

View File

@ -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]}),

View File

@ -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({