Projet

Général

Profil

Development #59052

mise à jour dynamique du préremplissage d'un champ liste à choix multiple avec une carddef en datasource

Ajouté par Lauréline Guérin il y a plus de 2 ans. Mis à jour il y a presque 2 ans.

Statut:
En cours
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
26 novembre 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à w.c.s. - Development #56159: permettre de préremplir un champ "liste à choix multiple" avec un gabaritFermé13 août 202122 octobre 2021

Actions

Historique

#1

Mis à jour par Lauréline Guérin il y a plus de 2 ans

  • Description mis à jour (diff)
#2

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é
#4

Mis à jour par Lauréline Guérin il y a presque 2 ans

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 %}

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.

#5

Mis à jour par Lauréline Guérin il y a presque 2 ans

  • Statut changé de Solution proposée à En cours
#6

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".

Formats disponibles : Atom PDF