* ✨ Simplifie la lecture de l’action SET_SIMULATION - “return early”
* ✨ Make automatic translation more fail-safe
* 🎨 Fix visuals for Overlay component
* ✨ Make Banner component more versatile
* Share simulation banner
* Ajout des identifiants courts pour les objectifs
* Dé/sérialisation search params <-> situation & targetUnit, basée sur
une logique générique (typeof)
* Suppression dans l'URL des search params correspondant à des
noms de règles ou identifiant courts
* Banner de partage, avec modale ou Navigator.share si disponible.
Co-authored-by: Alexandre Hajjar <alexandre.hajjar@gmail.com>
* URL with state: remove targetUnit
* serializeEvaluation for url sharing
* serializeEvaluation for number, boolean, string
* use this serialization in url search params
* for now, no support for Objects (like localisation)
Co-authored-by: Johan Girod <dev@johangirod.com>
* 🖋️ Quelques légères modifications de nom pour les identifiants courts
Co-authored-by: Paul Chavard <github@paul.chavard.net>
Co-authored-by: Johan Girod <dev@johangirod.com>
close#552
Lorsque l'on cherche un nom de règle, on laisse la possibilité à
une règle de se référencer elle même, mais alors cette résolution
est la dernière à être envisagée.
Dans l'exemple :
```yaml
b: 5
a . b: b
```
`a . b` référence bien `b` qui vaut `5`
Et dans celui ci :
```
a: 0
a . b:
remplace:a
par: b * 5
valeur: 2
```
`a . b` remplace `a` en la multipliant par sa propre valeur (ici 2)
fix#1081, fix#1083
- Introduction de nouveaux mécanismes
- Réecriture de l'evaluation et du parsing des règles.
- Les règles peuvent apparaître dans les formules de calcul
- Introduction d'un AST en bonne et due forme
- Réecriture de buildRuleDependancies.
- Ajout d'une passe pour la désambiguation des références
- Réecriture de rendNonApplicable et de remplace
- Réimplémentation de parentDependancy
Voir #1191
Nous utilisions jusqu'à présent le code suivant pour évaluer la situation:
> mapObjIndexed(value => evaluateExpression(value), situation)
c'est à dire une évaluation ligne par ligne. Or si certaines valeurs de
la situation contiennent des références, il faut les évaluer dans le bon
ordre.
Avec cette modification, seul le parsage est fait lorsqu'on appelle
`setSituation` et l'évaluation est faite ultérieurement lorsque c'est
nécessaire avec la même logique que pour les règles.
L'implémentation a pour effet de bord de ne plus supprimer l'utilisation
de true / false dans la situation qui doivent être remplacés par "oui"
et "non".
Build a dependencies graph and detect cycles:
* Types and guards for nodes of the ParsedRules AST
* Simple visitor framework for the nodes and their `formule` sub-nodes
* Build a directed graph for dependencies using @dagrejs/graphlib
Le mécanisme "allègement" proposaient ces deux paramètres ajoutant
beaucoup de complexité pour une seule utilisation dans la base de règle
qui peut être remplacée par une formule littérale.
Closes#1119
Ce commit supprime le concept de "contrôle" au sein du moteur, en les
remplaçant par des règles publicodes classiques. Cela permet notamment
d'uniformiser les règles d'applicabilité (désactivation via espace de
nom ou "rend non applicable" par exemple) ainsi que d'accéder à la
valeur d'un contrôle donné avec le nom de la règle correspondante.
Par ailleurs renomme le concept de "contrôle" en "notifcation" dans la
partie mon-entreprise/.
Donne l'occasion d'experimenter avec la génération automatique de formulaire
en publicodes. Pas mal de question à creuser, mais quelques pistes interessantes