dataviz: automatically refresh cells on filter change (#72465) #21

Merged
vdeniaud merged 1 commits from wip/72465-dataviz-tenter-le-rafraichisseme into main 2023-01-16 09:37:23 +01:00
Owner

Je cache le bouton submit côté cellule filtre mais pas côté formulaire de configuration d'une cellule car sinon ça casse le display: flex des boutons dupliquer/supprimer, on pourrait voir pour faire mieux dans un autre ticket.

Je cache le bouton submit côté cellule filtre mais pas côté formulaire de configuration d'une cellule car sinon ça casse le `display: flex` des boutons dupliquer/supprimer, on pourrait voir pour faire mieux dans un autre ticket.
tjund requested changes 2023-01-04 17:42:44 +01:00
@ -65,0 +65,4 @@
$('select, input', 'form#chart-filters').change(function() {
if(loaded_cell_count == 0) {
$('form#chart-filters button.submit-button').click();
Owner

Je pense que c'est mieux d'utiliser l'event submit sur le form plutôt que de simuler un click sur le bouton :

$('form#chart-filters').submit();

Je pense que c'est mieux d'utiliser l'event submit sur le form plutôt que de simuler un click sur le bouton : `$('form#chart-filters').submit();`
Owner

je pense qu'il est même possible de récupérer le form d'un champs sans faire intervenir de dom :

this.form.submit()

je pense qu'il est même possible de récupérer le form d'un champs sans faire intervenir de dom : `this.form.submit()`
Author
Owner

Changé en faveur de submit(), par contre this.form.submit() (ou this.submit()) ne fonctionne pas, car ça soumet le formulaire alors qu'on ne veut pas vraiment (il y a un e.preventDefault() dans le handler).

Changé en faveur de submit(), par contre this.form.submit() (ou this.submit()) ne fonctionne pas, car ça soumet le formulaire alors qu'on ne veut pas vraiment (il y a un e.preventDefault() dans le handler).
tjund reviewed 2023-01-04 17:46:58 +01:00
@ -63,2 +63,4 @@
chart_cell.data('ajax-cell-url', new_url);
});
$('select, input', 'form#chart-filters').change(function() {
Owner

Pourquoi ne pas simplement ?

$('form#chart-filters').change(function()

Pourquoi ne pas simplement ? `$('form#chart-filters').change(function()`
Author
Owner

Par mimétisme avec ce qui est fait côté BO, effectivement j'ai enlevé et ça fonctionne.

(côté BO ça crée une boucle infinie, pas 100% sûr à cause de quoi)

Par mimétisme avec ce qui est fait côté BO, effectivement j'ai enlevé et ça fonctionne. (côté BO ça crée une boucle infinie, pas 100% sûr à cause de quoi)
Owner

(côté BO ça crée une boucle infinie, pas 100% sûr à cause de quoi)

Je n'arrive pas à reproduire, c'est du côté de combo sur la cellule graph ?

> (côté BO ça crée une boucle infinie, pas 100% sûr à cause de quoi) Je n'arrive pas à reproduire, c'est du côté de combo sur la cellule graph ?
Author
Owner

C'est côté paramétrage de la cellule, sélectionner n'importe quelle donnée qui ne soit pas bijoe (genre « Démarches : Nombre de demandes »).

C'est côté paramétrage de la cellule, sélectionner n'importe quelle donnée qui ne soit pas bijoe (genre « Démarches : Nombre de demandes »).
Owner

Je cache le bouton submit côté cellule

Pourquoi le cacher ? surtout via html/css. Si JS disfonctionne, il doit rester accessible.
Ensuite, il pourrait servir de feedback visuel pour indiquer à l'usager que le submit est parti.

(Mais je continue à parler d'un truc que je n'ai pas encore tester, je reviens)

> Je cache le bouton submit côté cellule Pourquoi le cacher ? surtout via html/css. Si JS disfonctionne, il doit rester accessible. Ensuite, il pourrait servir de feedback visuel pour indiquer à l'usager que le submit est parti. (Mais je continue à parler d'un truc que je n'ai pas encore tester, je reviens)
vdeniaud force-pushed wip/72465-dataviz-tenter-le-rafraichisseme from 0d3bc6f758 to db9cb5d1c8 2023-01-05 10:20:52 +01:00 Compare
Author
Owner

Pourquoi le cacher ? surtout via html/css.

C'est Stéphane qui me faisait remarquer que côté BO le rafraîchissement auto en laissant le bouton « Enregistrer » était ambigu, l'utilisateur n'est pas sûr que la cellule soit enregistrée à chaque rafraîchissement (alors qu'elle l'est). Enlever le bouton est un moyen simple de lever cette ambiguïté, mais tu préférerais sûrement un texte explicite à côté du bouton « Modifications enregistrées. » ?

En tout cas cet argument ne s'applique pas vraiment au bouton « Rafraîchir », je le remets ?

Si JS disfonctionne, il doit rester accessible.

J'y ai pensé mais si le JS dysfonctionne le bouton rafraîchir ne fonctionnera pas non plus (ou alors on parle d'un dysfonctionnement juste du rafraîchissement auto ?).

> Pourquoi le cacher ? surtout via html/css. C'est Stéphane qui me faisait remarquer que côté BO le rafraîchissement auto en laissant le bouton « Enregistrer » était ambigu, l'utilisateur n'est pas sûr que la cellule soit enregistrée à chaque rafraîchissement (alors qu'elle l'est). Enlever le bouton est un moyen simple de lever cette ambiguïté, mais tu préférerais sûrement un texte explicite à côté du bouton « Modifications enregistrées. » ? En tout cas cet argument ne s'applique pas vraiment au bouton « Rafraîchir », je le remets ? > Si JS disfonctionne, il doit rester accessible. J'y ai pensé mais si le JS dysfonctionne le bouton rafraîchir ne fonctionnera pas non plus (ou alors on parle d'un dysfonctionnement juste du rafraîchissement auto ?).
Owner

Enlever le bouton est un moyen simple de lever cette ambiguïté ?

ah bon, quel élement visuel indque à l'usager que le rafraichessement est effectif, que la requête a aboutie ?.
Si dans son champ de vision un graph est mis à jour, ok, mais ce n'est pas certain.
Une erreur peut aussi très bien se passer côté serveur, et rien n'indique alors que la requête a échouée.

mais tu préférerais sûrement un texte explicite à côté du bouton « Modifications enregistrées »

Oui, un truc à réfréchir dans ce sens. Le bouton pourrait prendre un statut à l'envoie d'une requête et un autre statut provisoire au succès ou à l'échec.

Pour cela il faudrait eventuellement se pencher du côté de combo:refresh-graphs, pourquoi pas retourner un event combo:refresh-graphs-success et combo:refresh-graph-error et essayer d'être explicite à l'usager.
Mais comme on refresh plusieurs graphs, bref, pas forcement simple et pas forcement pour ce ticket.

En tout cas, masquer le bouton n'est pas suffisant en soit.

> Enlever le bouton est un moyen simple de lever cette ambiguïté ? ah bon, quel élement visuel indque à l'usager que le rafraichessement est effectif, que la requête a aboutie ?. Si dans son champ de vision un graph est mis à jour, ok, mais ce n'est pas certain. Une erreur peut aussi très bien se passer côté serveur, et rien n'indique alors que la requête a échouée. > mais tu préférerais sûrement un texte explicite à côté du bouton « Modifications enregistrées » Oui, un truc à réfréchir dans ce sens. Le bouton pourrait prendre un statut à l'envoie d'une requête et un autre statut provisoire au succès ou à l'échec. Pour cela il faudrait eventuellement se pencher du côté de combo:refresh-graphs, pourquoi pas retourner un event combo:refresh-graphs-success et combo:refresh-graph-error et essayer d'être explicite à l'usager. Mais comme on refresh plusieurs graphs, bref, pas forcement simple et pas forcement pour ce ticket. En tout cas, masquer le bouton n'est pas suffisant en soit.
vdeniaud force-pushed wip/72465-dataviz-tenter-le-rafraichisseme from db9cb5d1c8 to 9bf2e8bf05 2023-01-05 11:19:27 +01:00 Compare
Author
Owner

OK merci pour les éléments de réflexion, j'ai retiré le masquage du bouton (et pour la suite, comme j'avais écrit en description, « autre ticket »).

OK merci pour les éléments de réflexion, j'ai retiré le masquage du bouton (et pour la suite, comme j'avais écrit en description, « autre ticket »).
tjund reviewed 2023-01-05 12:03:15 +01:00
@ -63,2 +63,4 @@
chart_cell.data('ajax-cell-url', new_url);
});
$('form#chart-filters').change(function() {
Owner

$('form#chart-filters') utilisé 3x.
Pour des questions de performance, ne pas parser 3x le dom. Parser 1x et stocker dans 1 `const form = $('#chart-filters');

`$('form#chart-filters')` utilisé 3x. Pour des questions de performance, ne pas parser 3x le dom. Parser 1x et stocker dans 1 `const form = $('#chart-filters');
Author
Owner

Modif appliquée

Modif appliquée
vdeniaud force-pushed wip/72465-dataviz-tenter-le-rafraichisseme from 9bf2e8bf05 to d2e6c02335 2023-01-05 12:12:11 +01:00 Compare
Owner

(côté BO ça crée une boucle infinie, pas 100% sûr à cause de quoi)

Bon, j'ai creusé la question.
Un vrai sac de noeud cause des events change qui se lancent de partout

​Je vais tenter une explication.

​1. Au chargement de la cell, un change se lance sur le select time-range (chartngcell_from.html l.16)
2. Tu ajoutes une fonction button.click (l.35) sur l'event change de tous les champs du tab general après 1. (c'est important le après, c'est ce qui fait que ça marche et ne pas boucler, tu déplaces cette function avant 1. et ça boucle). Il ne prend donc pas en compte le change de 1. (Alors que ma proposition de poser le change sur le form, si)
3. À la modification d'un champ, JS click sur le bouton qui va lancer une fonction définie dans combo.manager.js l.261 qui va envoyer le form via ajax et en cas de succès remplacer TOUT l'html des tabs de la cellule, y compris le JS de chartngcell_form.html (l.281).
4. Le JS nouvellement injecté va être joué et on repart à 1. en relançant un change sur time-range puis 2.

Donc ça marche, ton code est ok, et ma proposition est ko.
Mais j'ai comme un sentiment que tout cela est fragile.

> (côté BO ça crée une boucle infinie, pas 100% sûr à cause de quoi) Bon, j'ai creusé la question. Un vrai sac de noeud cause des events change qui se lancent de partout ​Je vais tenter une explication. ​1. Au chargement de la cell, un change se lance sur le select time-range (chartngcell_from.html l.16) 2. Tu ajoutes une fonction button.click (l.35) sur l'event change de tous les champs du tab general après 1. (c'est important le après, c'est ce qui fait que ça marche et ne pas boucler, tu déplaces cette function avant 1. et ça boucle). Il ne prend donc pas en compte le change de 1. (Alors que ma proposition de poser le change sur le form, si) 3. À la modification d'un champ, JS click sur le bouton qui va lancer une fonction définie dans combo.manager.js l.261 qui va envoyer le form via ajax et en cas de succès remplacer TOUT l'html des tabs de la cellule, y compris le JS de chartngcell_form.html (l.281). 4. Le JS nouvellement injecté va être joué et on repart à 1. en relançant un change sur time-range puis 2. Donc ça marche, ton code est ok, et ma proposition est ko. Mais j'ai comme un sentiment que tout cela est fragile.
tjund approved these changes 2023-01-09 18:15:49 +01:00
vdeniaud merged commit 5f23c06485 into main 2023-01-16 09:37:23 +01:00
vdeniaud deleted branch wip/72465-dataviz-tenter-le-rafraichisseme 2023-01-16 09:37:23 +01:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: entrouvert/combo#21
No description provided.