Project

General

Profile

Développement #62533

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

Added by Pierre Cros almost 3 years ago. Updated over 2 years ago.

Status:
Fermé
Priority:
Normal
Target version:
-
Start date:
08 March 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No
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.


Files

Associated revisions

Revision 7f7d75c5 (diff)
Added by Valentin Deniaud over 2 years ago

dataviz: factorize querystring building code (#62533)

Revision b5132df5 (diff)
Added by Valentin Deniaud over 2 years ago

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

History

#1

Updated by Pierre Cros almost 3 years ago

  • Project changed from Chrono to Combo
#2

Updated by Corentin Séchet almost 3 years ago

  • Assignee set to Corentin Séchet
#3

Updated by Corentin Séchet almost 3 years ago

  • Assignee deleted (Corentin Séchet)
#4

Updated by Valentin Deniaud almost 3 years ago

  • Tags set to statistiques
#5

Updated by Valentin Deniaud almost 3 years ago

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

Updated by Valentin Deniaud almost 3 years ago

  • Assignee set to Valentin Deniaud
#7

Updated by Valentin Deniaud almost 3 years ago

Patch assez court au final, moitié de JS.

#8

Updated by Frédéric Péters almost 3 years ago

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

Updated by Valentin Deniaud over 2 years ago

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

Updated by Frédéric Péters over 2 years ago

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

Updated by Frédéric Péters over 2 years ago

  • Status changed from Solution proposée to 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

Updated by Valentin Deniaud over 2 years ago

  • Status changed from Solution validée to 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

Updated by Transition automatique over 2 years ago

  • Status changed from Résolu (à déployer) to Solution déployée
#17

Updated by Transition automatique over 2 years ago

Automatic expiration

Also available in: Atom PDF