Projet

Général

Profil

Development #62533

Cellule Filtre : faire en sorte que les champs cochés statistiques s'affichent comme filtres quand on sélectionne un formulaire donné

Ajouté par Pierre Cros il y a environ 2 ans. Mis à jour il y a presque 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
08 mars 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non
Tags:

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

Révision 7f7d75c5 (diff)
Ajouté par Valentin Deniaud il y a presque 2 ans

dataviz: factorize querystring building code (#62533)

Révision b5132df5 (diff)
Ajouté par Valentin Deniaud il y a presque 2 ans

dataviz: reload chart filters cell to reflect subfilters (#62533)

Historique

#1

Mis à jour par Pierre Cros il y a environ 2 ans

  • Projet changé de Chrono à Combo
#2

Mis à jour par Corentin Séchet il y a environ 2 ans

  • Assigné à mis à Corentin Séchet
#3

Mis à jour par Corentin Séchet il y a environ 2 ans

  • Assigné à Corentin Séchet supprimé
#4

Mis à jour par Valentin Deniaud il y a environ 2 ans

  • Tags mis à statistiques
#5

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
Pour que ce mécanisme fonctionne avec la cellule filtre je ne vois pas plus simple que :
  • 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
#6

Mis à jour par Valentin Deniaud il y a presque 2 ans

  • Assigné à mis à Valentin Deniaud
#7

Mis à jour par Valentin Deniaud il y a presque 2 ans

Patch assez court au final, moitié de JS.

#8

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 ?

#9

Mis à jour par Valentin Deniaud il y a presque 2 ans

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

#10

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)

#13

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.

#15

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)
#16

Mis à jour par Transition automatique il y a presque 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#17

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF