Skip to content

Commit d0ab308

Browse files
documentation compléments relatifs aux variables dynamiques des formulaires (#439)
--------- Co-authored-by: Amandine <amandine.sahl@gmail.com>
1 parent f94f107 commit d0ab308

1 file changed

Lines changed: 95 additions & 47 deletions

File tree

docs/sous_module.md

Lines changed: 95 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ title: 'Création d''un sous-module'
1414
- [Définir une nouvelle variable](#définir-une-nouvelle-variable)
1515
- [Redéfinir une variable existante](#redéfinir-une-variable-existante)
1616
- [`datalists`](#datalists)
17-
- [Les paramètres dynamiques](#les-paramètres-dynamiques)
18-
- [La variable `change`](#la-variable-change)
17+
- [Les paramètres dynamiques](#les-paramètres-dynamiques)
18+
- [Exemples champs des formulaires](#exemples-champs-des-formulaires)
19+
- [Exemples variable `change`](#exemples-variable-change)
1920
- [Nomenclature](#nomenclature)
2021
- [Configuration de la carte](#configuration-de-la-carte)
2122
- [Exports](#exports)
@@ -494,35 +495,35 @@ Par exemple :
494495
},
495496
```
496497

497-
### Les paramètres dynamiques
498-
499-
Il est possible de définir des paramètre qui peuvent dépendre de
500-
plusieurs variables. La valeur de ce paramètre est alors une chaîne de
501-
caractère qui définit une fonction, qui utilise les variables suivantes
502-
503-
**Ce cas n'est pris en compte que pour les composants spécifiques, ou
504-
pour les composants redéfinis dans `specific`**
505-
506-
* `value` : les valeurs du formulaire
507-
* `attribut_name` : du composant concerné
508-
* `meta` : un dictionnaire de données additionelles, et fourni au
509-
composant dynamicFormGenerator, il peut contenir des données sur
510-
* la nomenclature (pour avoir les valeurs des nomenclature à
511-
partir des id, ici un dictionnaire avec `id_nomenclature` comme
512-
clés.
513-
* `bChainInput` si on enchaine les relevés
514-
* etc.. à redéfinir selon les besoins
515-
516-
La chaine de caractère qui décrit la fonction doit être de la forme
498+
## Les paramètres dynamiques
499+
500+
Il est possible de définir des fonctions javascript (sous forme de chaine de caractères) qui peuvent modifier les comportements et valeurs du formulaire.
501+
502+
**Ce cas n'est pris en compte que pour les composants spécifiques, ou pour les composants redéfinis dans `specific`**
503+
504+
Il est possible de définir des fonctions à deux niveaux:
505+
* au niveau de chaque champ du formulaire
506+
* au niveau global au formulaire (via la fonction change)
507+
508+
Les variables accessibles en fonction des différents contextes sont les suivantes :
509+
* `value` : la valeur du formulaire. Dans le contexte d'un champ specific
510+
* `attribut_name` : du composant concerné. Dans le contexte d'un champ specific
511+
* `objForm` : Formulaire. Dans le contexte de la fonction change
512+
* `meta` : Dictionnaire de données additionnelles, contient les données suivantes. Dans tout les contextes
513+
* `nomenclatures`: liste des nomenclatures utilisées. Dictionnaire avec `id_nomenclature` comme clé.
514+
* `dataset` : liste des jdds disponibles pour l'utilisateur et le module
515+
* `id_role` : identifiant de l'utilisateur courant
516+
* `bChainInput`: si on enchaîne les relevés
517+
* `parents`: Objets parents. Permet de récupérer les valeurs définies dans le parents.
518+
519+
520+
La chaîne de caractère qui décrit la fonction doit être de la forme
517521
suivante :
518522

519523
```json
520524
"hidden": "({value, attribut_name, }) => { return value.id == 't' }"
521525
```
522-
523-
Le format JSON ne permet pas les sauts de ligne dans les chaines de
524-
caractère, et pour avoir plus de lisibilité, quand la fonction est plus
525-
complexe, on peut aussi utiliser un tableau de chaine de caractères :
526+
Le format JSON ne permet pas les sauts de ligne dans les chaînes de caractère, et pour avoir plus de lisibilité, quand la fonction est plus complexe, on peut aussi utiliser un tableau de chaîne de caractères :
526527

527528
```json
528529
"hidden": [
@@ -531,16 +532,11 @@ complexe, on peut aussi utiliser un tableau de chaine de caractères :
531532
"}"
532533
]
533534
```
535+
534536

535-
Le lignes seront collées entre elles avec l'ajout de saut de lignes
536-
(caractère [n]{.title-ref}).
537-
538-
Il faut être certain de sa fonction.
537+
### Exemples champs des formulaires
539538

540-
Exemples :
541-
542-
* Afficher le composant `test2` et le rendre obligatoire seulement si
543-
`test1` a pour valeur `t` :
539+
* Afficher le composant `test2` et le rendre obligatoire seulement si `test1` a pour valeur `t` :
544540

545541
```json
546542
"specific": {
@@ -557,8 +553,7 @@ Exemples :
557553
}
558554
```
559555

560-
* Ajouter un champs pour renseigner la profondeur d'une grotte si le
561-
type de site est une grotte
556+
* Ajouter un champ pour renseigner la profondeur d'une grotte si le type de site est une grotte (cd_nomenclature '1')
562557

563558
Dans le fichier `site.json`
564559

@@ -575,15 +570,13 @@ Dans le fichier `site.json`
575570
}
576571
```
577572

578-
**Le paramêtre ``value`` ne peut pas être dynamique, pour changer la
579-
valeur des variables en fonction d'autres variables, on peut définir
580-
``change`` dans la config. Voir ci dessous**
573+
**Le paramêtre ``value`` ne peut pas être dynamique, pour changer la valeur des variables en fonction d'autres variables, on peut définir ``change`` dans la config. Voir ci dessous**
581574

582-
### La variable `change`
575+
### Exemples variable `change`
583576

584-
On peut y définir une fonction qui sera appelée chaque fois que le
585-
formulaire change.
577+
On peut y définir une fonction qui sera appelée chaque fois que le formulaire change.
586578

579+
**Exemple utilisation de objForm**
587580
Un exemple (`module.json` du module test) :
588581

589582
```json
@@ -617,14 +610,69 @@ Un exemple (`module.json` du module test) :
617610
}
618611
```
619612

620-
Ici on donne à la variable `test3` la valeur `<test>_<test2>`.
613+
Ici on donne à la variable `test3` la valeur `<test>_<test2>`. Le test `!objForm.controls.test3.dirty` permet de ne modifier la variable que si l'utilisateur ne l'a pas modifié manuellement.
614+
621615

622-
C'est valable tant que le `test3` n'a pas été modifé à la main (i. e.
623-
`objForm.controls.test3.dirty` n'est pas vrai).
616+
**Exemple valeur par défaut en fonction des valeurs du formulaire parent**
617+
Il est possible avec meta de récupérer les données du niveau supérieur. Voici un exemple sur la réutilisation de valeurs au niveau du site pour pré-remplir les champs au niveau de la visite:
624618

625-
On peut donc modifer par la suite la valeur de test3 à la main.
619+
Fichier de configuration du niveau site:
626620

627-
Comme précemment on peut aussi avoir accès à meta.
621+
```json
622+
{
623+
...
624+
"specific": {
625+
...
626+
"occ_sol": {
627+
"attribut_label": "OS",
628+
"type_widget": "select",
629+
"values": [...],
630+
"required": true,
631+
"hidden": false
632+
},
633+
"gestion":{
634+
"attribut_label": "Gestion",
635+
"type_widget": "select",
636+
"values": [...],
637+
"required": true,
638+
"hidden": false
639+
}
640+
}
641+
```
642+
643+
Fichier de configuration du niveau visite:
644+
645+
```json
646+
{
647+
...
648+
"specific": {
649+
...
650+
"occ_sol": {
651+
"attribut_label": "Occupation du sol à grande échelle",
652+
"type_widget": "select",
653+
"values": [...],
654+
"required": true,
655+
"hidden": false
656+
},
657+
"gestion":{
658+
"attribut_label": "Gestion",
659+
"type_widget": "select",
660+
"values": [...],
661+
"required": false,
662+
"hidden": false
663+
}
664+
},
665+
"change": [
666+
"({objForm, meta}) => {",
667+
"const occ_sol = (meta.parents.site.properties.occ_sol);",
668+
"const gestion = (meta.parents.site.properties.gestion);",
669+
"(objForm.value.occ_sol == (null || undefined) && meta.parents.site.properties.occ_sol != (null || undefined) ? objForm.patchValue({occ_sol}) : '');",
670+
"(objForm.value.gestion == (null || undefined) ? objForm.patchValue({gestion}) : '');",
671+
"}",
672+
""
673+
]
674+
}
675+
```
628676

629677
# Nomenclature
630678

0 commit comments

Comments
 (0)