Development #59052
mise à jour dynamique du préremplissage d'un champ liste à choix multiple avec une carddef en datasource
0%
Description
Avoir un champ items sur une datasource de type carddef, avec un prefill dynamique (exemple {{ form_var_fiche_live_var_multiple }}
), où form_var_fiche
est un select de fiche existante
La sélection d'une fiche A ou B devrait mettre à jour la sélection du champ items
(suite de #57877, cas d'usage possible depuis #56159)
Files
Related issues
History
Updated by Lauréline Guérin about 1 year ago
- Related to Development #56159: permettre de préremplir un champ "liste à choix multiple" avec un gabarit added
Updated by Lauréline Guérin 7 months ago
- File 0001-fields-fix-live-prefill-for-items-with-carddef-datas.patch 0001-fields-fix-live-prefill-for-items-with-carddef-datas.patch added
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
Fonctionne en mode checkbox ou autocomplete.
J'ai testé (sur un formdef) les prefill suivants:{{ form_var_fiche_live_var_multiple }}
{% for item in form_var_fiche_live_var_block %}{{ item.list }},{% endfor %}
où form_var_fiche
est un item avec source de données de type fiche, qui contient:
- multiple
: champ items avec source de données de type fiche
- block
: champ bloc de champs, avec dans le blockdef un champ list
avec source de données de type fiche
mode autocomplete: ça marche presque tout seul, il faut juste ajouter un trigger sur le bon event pour select2
mode checkbox: pour faire le mapping id/bonne checkbox, j'ai ajouté un attribut data-value
sur chaque checkbox
Petit historique:
Dans #57877 j'avais fait un truc pour renvoyer l'id de l'option (au lieu de la display value), parce que c'était plus simple à gérer en JS après pour trouver la bonne option/radio à sélectionner, et dit "j'ai pas trouvé plus malin pour retrouver la raw value depuis la display value, que de parcourir les options du champ"
Correction dans #66695 pour éviter de tout parcourir dans certains cas (opti)
Là, dans le cas checkbox multiple, je dois ajouter un attribut sur chaque checkbox pour être en mesure de trouver les bonnes checkbox via leur id, puisque le live renvoie des ids;
Est-ce que ça ne serait pas plus malin de renvoyer les display values (dans le cas item et items), et adapter le JS ? Ca éviterait de parcourir les options pour récupérer les ids.
Est-ce que j'oublie un cas spécifique dans lequel ça ne marcherait pas ? Genre lorsque la liste des valeurs possibles dépend d'autres champs du formulaire ?
Note: si en prefill pour le cas bloc de champs, je mets {% for item in form_var_fiche_live_var_block %}{{ item.list.id }},{% endfor %}
pour récupérer la liste des ids, le prefill ne fonctionne pas (puisqu'on s'attend à manipuler les display_values). Est-ce qu'on veut que ça fonctionne ?
Autre chose, get_prefill_value
renvoie une string; dans le cas d'un champ items, on a la liste des valeurs séparées par des virgules. Là je fais un bête split. Si on a une virgule dans une des display_value, c'est raté.
Je vais voir pour gérer ce cas, mais je voudrais des retours sur le reste d'abord.
Updated by Benjamin Dauvergne 7 months ago
J'ai l'impression que tu arrives à la même conclusion que moi dans le commentaire #53763-7, le rendu des checkboxes est loin d'être idéal, je proposais justement de le simplifier pour avoir un name
unique et les id comme value
, plutôt que name="{{ option.name }}" value="yes"
.