Project

General

Profile

Development #59052

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

Added by Lauréline Guérin about 1 year ago. Updated 7 months ago.

Status:
En cours
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
26 November 2021
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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

Related to w.c.s. - Development #56159: permettre de préremplir un champ "liste à choix multiple" avec un gabaritFermé13 August 202122 October 2021

Actions

History

#1

Updated by Lauréline Guérin about 1 year ago

  • Description updated (diff)
#2

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

Updated by Lauréline Guérin 7 months ago

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

Updated by Lauréline Guérin 7 months ago

  • Status changed from Solution proposée to En cours
#6

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

Also available in: Atom PDF