Development #62533
Cellule Filtre : faire en sorte que les champs cochés statistiques s'affichent comme filtres quand on sélectionne un formulaire donné
0%
Description
Actuellement il faut passer par la configuration de la cellule pour pouvoir jouer avec ça.
Pour avoir une page unique permettant de remplacer avantageusement toutes les pages statiques w.c.s. pour chaque formulaire, il faut que ces filtres apparaissent "en front" quand on sélectionne un formulaire.
Fichiers
Révisions associées
dataviz: reload chart filters cell to reflect subfilters (#62533)
Historique
Mis à jour par Valentin Deniaud il y a presque 2 ans
J'ai regardé un peu ce ticket, as expected c'est pas évident.
Le fonctionnement normal des sous-filtres c'est :- sélection d'un formulaire
- wcs renvoie les données + les sous filtres liés au formulaire
- on enregistre ces sous filtres
- on les affiche sur le formulaire backoffice de la cellule
- sélection d'un formulaire sur la cellule filtre
- le clic sur rafraîchir déclenche le rechargement de toutes les cellules, normal
- chaque cellule récupère les données (normal) + les sous filtres qu'elle met en cache (parce qu'on ne peut pas juste faire un save() comme dans le scénario backoffice)
- cette mise en cache nécessite un ID unique généré au chargement de la page
- la cellule filtre détecte que ça y est tout le monde s'est rafraîchi, puis se rafraîchi elle-même en allant lire le cache des sous filtres de chaque cellule et en en déduisant les sous filtres à afficher
Mis à jour par Valentin Deniaud il y a presque 2 ans
- Fichier 0001-dataviz-reload-chart-filters-cell-to-reflect-subfilt.patch 0001-dataviz-reload-chart-filters-cell-to-reflect-subfilt.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Patch assez court au final, moitié de JS.
Mis à jour par Frédéric Péters il y a presque 2 ans
Côté style JS, } else if(url.includes('?')) {
je serais assez pour l'esapce après le if. (il y en a deux autres).
dataviz-uuid
, pas formellement un uuid, pour éviter la confusion peut-être appeler ça différemment ?
Mis à jour par Valentin Deniaud il y a presque 2 ans
- Fichier 0001-dataviz-reload-chart-filters-cell-to-reflect-subfilt.patch 0001-dataviz-reload-chart-filters-cell-to-reflect-subfilt.patch ajouté
Frédéric Péters a écrit :
Côté style JS,
} else if(url.includes('?')) {
je serais assez pour l'esapce après le if. (il y en a deux autres).
Done
dataviz-uuid
, pas formellement un uuid, pour éviter la confusion peut-être appeler ça différemment ?
Renommé en filters-cell-id comme dans le python.
Aussi j'ai augmenté la durée du cache à 300 secondes, ça devrait limiter les chances qu'on perde les sous-filtres en cours de manipulation (si jamais ça arrive ça reste pas très grave, il faut juste cliquer une fois de plus sur le bouton).
Mis à jour par Frédéric Péters il y a presque 2 ans
combo/public/static/js/combo.public.js
} else if (url.includes('?')) { qs = '&';
C'est bizarre, window.location.search c'est la querystring (et son point d'interrogation), donc si ça existe c'est le if au-dessus, et si elle n'existe pas (et on tape un & derrière) et sinon c'est le else dessous (et on part d'une chaine avec juste "?").
Ce qu'on se trouve ici avoir c'est un data-ajax-cell-url qui contiendrait un point d'interrogation, ce qui arrive via
new_url = chart_cell.data('ajax-cell-url') + '?filters_cell_id=' + $('body').data('filters-cell-id') + '&' + $(this).serialize()
(un espace en trop devant le premier +).
mais ça vient donc mal se combiner en présence d'un window.location.search, où on va se trouver avec ...?filters_cell_id=XXX&plop=plop + le '?la-query-string&'.
Il me semble qu'avec l'introduction de la possibilité de query string dans data-ajax-cell-url il faut gérer un cas supplémentaire, dans mon faux js :
if (window.location.search and '?' dans l'url) { qs = '&' + window.location.search[1:] + '&'; } else if (window.location.search and not '?' dans l'url) { qs = window.location.search + '&'; } elif ('?' dans l'url) qs = '&'; } else { qs = '?'; }
(par exemple)
Mis à jour par Valentin Deniaud il y a presque 2 ans
- Fichier 0001-dataviz-reload-chart-filters-cell-to-reflect-subfilt.patch 0001-dataviz-reload-chart-filters-cell-to-reflect-subfilt.patch ajouté
Yep, revoilà avec une condition en plus
Mis à jour par Valentin Deniaud il y a presque 2 ans
- Fichier 0001-dataviz-factorize-querystring-building-code-62533.patch 0001-dataviz-factorize-querystring-building-code-62533.patch ajouté
- Fichier 0002-dataviz-reload-chart-filters-cell-to-reflect-subfilt.patch 0002-dataviz-reload-chart-filters-cell-to-reflect-subfilt.patch ajouté
Hop j'en profite que pas encore validé pour ajouter un 0001 qui factorise du code, ça réduit un peu la taille de 0002.
Mis à jour par Frédéric Péters il y a presque 2 ans
- Statut changé de Solution proposée à Solution validée
+ if($('#chart-filters'))
Sur le style on n'a pas de règles mais quand même je préfère avec un espace derrière le if.
Mis à jour par Valentin Deniaud il y a presque 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 7219f8983a582dc29d1f7d08142c037550b0479d Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Wed Apr 27 18:03:08 2022 +0200 dataviz: reload chart filters cell to reflect subfilters (#62533) commit c8d3bb903f6643d13551764b2d74e9331fcda8e9 Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Thu Jun 2 14:37:50 2022 +0200 dataviz: factorize querystring building code (#62533)
Mis à jour par Transition automatique il y a presque 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
dataviz: factorize querystring building code (#62533)