Project

General

Profile

Development #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 4 months ago. Updated 28 days ago.

Status:
Solution proposée
Priority:
Normal
Target version:
-
Start date:
08 Mar 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

History

#1

Updated by Pierre Cros 4 months ago

  • Project changed from Chrono to Combo
#2

Updated by Corentin Séchet 4 months ago

  • Assignee set to Corentin Séchet
#3

Updated by Corentin Séchet 4 months ago

  • Assignee deleted (Corentin Séchet)
#4

Updated by Valentin Deniaud 3 months ago

  • Tags set to statistiques
#5

Updated by Valentin Deniaud 2 months 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 about 2 months ago

  • Assignee set to Valentin Deniaud
#7

Updated by Valentin Deniaud about 2 months ago

Patch assez court au final, moitié de JS.

#8

Updated by Frédéric Péters about 2 months 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 about 1 month 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 about 1 month 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)

Also available in: Atom PDF