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)
Fichiers
Demandes liées
Historique
Mis à jour par Lauréline Guérin il y a plus de 2 ans
- Lié à Development #56159: permettre de préremplir un champ "liste à choix multiple" avec un gabarit ajouté
Mis à jour par Lauréline Guérin il y a presque 2 ans
- Fichier 0001-fields-fix-live-prefill-for-items-with-carddef-datas.patch 0001-fields-fix-live-prefill-for-items-with-carddef-datas.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
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.
Mis à jour par Lauréline Guérin il y a presque 2 ans
- Statut changé de Solution proposée à En cours
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
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"
.