🐛 Réintroduction de l'info 'cette question sert cet objectif'
parent
ae6af2b1f1
commit
729576b946
|
@ -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)}
|
||||
|
|
|
@ -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],
|
||||
}
|
||||
)
|
||||
})
|
||||
|
|
|
@ -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]}),
|
||||
|
|
|
@ -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({
|
||||
|
|
Loading…
Reference in New Issue