diff --git a/mon-entreprise/source/components/TargetSelection.tsx b/mon-entreprise/source/components/TargetSelection.tsx index c2682e7c5..845894566 100644 --- a/mon-entreprise/source/components/TargetSelection.tsx +++ b/mon-entreprise/source/components/TargetSelection.tsx @@ -30,6 +30,7 @@ import { DottedName } from 'modele-social' import { targetUnitSelector } from 'Selectors/simulationSelectors' import CurrencyInput from './CurrencyInput/CurrencyInput' import './TargetSelection.css' +import { Names } from 'modele-social/dist/names' export default function TargetSelection({ showPeriodSwitch = true }) { const objectifs = useSelector( @@ -297,14 +298,15 @@ function TitreRestaurant() { function AidesGlimpse() { const targetUnit = useSelector(targetUnitSelector) const { language } = useTranslation().i18n - const dottedName = 'contrat salarié . aides employeur' + const dottedName = 'contrat salarié . aides employeur' as Names const engine = useEngine() - const aides = UNSAFE_evaluateRule(engine, dottedName, { + const evaluation = engine.evaluate({ + valeur: dottedName, unité: targetUnit, arrondi: 'oui', }) - - if (!aides?.nodeValue) return null + const aides = engine.getRule(dottedName) + if (!evaluation?.nodeValue) return null // Dans le cas où il n'y a qu'une seule aide à l'embauche qui s'applique, nous // faisons un lien direct vers cette aide, plutôt qu'un lien vers la liste qui @@ -312,10 +314,9 @@ function AidesGlimpse() { const aideLink = reduceAST( (acc, node) => { if (node.nodeKind === 'somme') { - const aidesNotNul = (node.explanation as EvaluatedNode[]).filter( - ({ nodeValue }) => nodeValue !== false - ) - console.log('aidesNotNul', aidesNotNul, node.explanation) + const aidesNotNul = node.explanation + .map((n) => engine.evaluate(n)) + .filter(({ nodeValue }) => nodeValue !== false) if (aidesNotNul.length === 1) { return (aidesNotNul[0] as ASTNode & { nodeKind: 'reference' }) .dottedName as DottedName @@ -324,8 +325,8 @@ function AidesGlimpse() { } } }, - aides.dottedName, - engine.evaluate(engine.getRules()[dottedName]) + dottedName, + aides ) return ( @@ -333,9 +334,11 @@ function AidesGlimpse() { en incluant{' '} - {formatValue(aides, { displayedUnit: '€', language })} + + {formatValue(evaluation, { displayedUnit: '€', language })} + {' '} - d'aides {emoji(aides.icônes ?? '')} + d'aides {emoji(aides.rawNode.icônes ?? '')} diff --git a/mon-entreprise/source/site/pages/Simulateurs/ChômagePartiel.tsx b/mon-entreprise/source/site/pages/Simulateurs/ChômagePartiel.tsx index fe6b88f9b..f13849117 100644 --- a/mon-entreprise/source/site/pages/Simulateurs/ChômagePartiel.tsx +++ b/mon-entreprise/source/site/pages/Simulateurs/ChômagePartiel.tsx @@ -73,30 +73,11 @@ function ExplanationSection() { } = useTranslation() const engine = useEngine() - const net = UNSAFE_evaluateRule( - engine, - 'contrat salarié . rémunération . net' - ) - const netHabituel = UNSAFE_evaluateRule( - engine, - 'chômage partiel . revenu net habituel' - ) - const totalEntreprise = UNSAFE_evaluateRule( - engine, - 'contrat salarié . prix du travail' - ) - const totalEntrepriseHabituel = UNSAFE_evaluateRule( - engine, - 'chômage partiel . coût employeur habituel' - ) - if ( - typeof net?.nodeValue !== 'number' || - typeof netHabituel?.nodeValue !== 'number' || - typeof totalEntreprise?.nodeValue !== 'number' || - typeof totalEntrepriseHabituel?.nodeValue !== 'number' - ) { - return null - } + const net = 'contrat salarié . rémunération . net' + const netHabituel = 'chômage partiel . revenu net habituel' + const totalEntreprise = 'contrat salarié . prix du travail' + const totalEntrepriseHabituel = 'chômage partiel . coût employeur habituel' + return (
Soit{' '} {formatValue( - (net.nodeValue / netHabituel.nodeValue) * 100, - { displayedUnit: '%', precision: 0 } + engine.evaluate({ + valeur: `${net} / ${netHabituel}`, + unité: '%', + arrondi: 'oui', + }) )} {' '} du revenu net @@ -135,22 +119,20 @@ function ExplanationSection() { }, ], [ - totalEntreprise, - totalEntrepriseHabituel, + { dottedName: totalEntreprise }, + { dottedName: totalEntrepriseHabituel }, { - ...totalEntreprise, + dottedName: totalEntreprise, additionalText: language === 'fr' && ( Soit{' '} {formatValue( - (totalEntreprise.nodeValue / - totalEntrepriseHabituel.nodeValue) * - 100, - { - displayedUnit: '%', - precision: 0, - } + engine.evaluate({ + valeur: `${totalEntreprise} / ${totalEntrepriseHabituel}`, + unité: '%', + arrondi: 'oui', + }) )} {' '} du coût habituel @@ -170,11 +152,10 @@ type ComparaisonTableProps = { rows: [Array, ...Array] } -type Line = Array< - EvaluatedRule & { - additionalText?: React.ReactNode - } -> +type Line = Array<{ + dottedName: DottedName + additionalText?: React.ReactNode +}> function ComparaisonTable({ rows: [head, ...body] }: ComparaisonTableProps) { const columns = head.filter((x) => x !== '') @@ -248,11 +229,12 @@ function ComparaisonTable({ rows: [head, ...body] }: ComparaisonTableProps) { ) } -function ValueWithLink(rule: EvaluatedRule) { +function ValueWithLink({ dottedName }: { dottedName: DottedName }) { const { language } = useTranslation().i18n + const engine = useEngine() return ( - - {formatValue(rule, { + + {formatValue(engine.evaluate(dottedName), { language, displayedUnit: '€', precision: 0, @@ -261,7 +243,8 @@ function ValueWithLink(rule: EvaluatedRule) { ) } -function RowLabel(target: EvaluatedRule) { +function RowLabel({ dottedName }: { dottedName: DottedName }) { + const target = useEngine().getRule(dottedName) return ( <> {' '} @@ -272,7 +255,7 @@ function RowLabel(target: EvaluatedRule) { > {target.title}
-

{target.résumé}

+

{target.rawNode.résumé}

) }