Est-il possible de replier par défaut un group by à l’ouverture d’'une liste ?
La solution que vous aviez précédemment proposé en mars dernier fonctionnait (Replier un group by par défaut), mais depuis la dernière MAJ du socle, ça ne fonctionne plus.
Contenu du script :
(function(ui) {
if (!ui) return;
var app = ui.getAjax();
Simplicite.UI.hooks.testContactCut = function(o, cbk) {
try {
var p = o.locals.ui;
p.list.preload = function(ctn, obj, p) {
$('.group-by-title').click();
}
p.list.onload = function(ctn, obj) {
$('.group-by-title').click();
};
}
catch(e) {
app.error("Error in Simplicite.UI.hooks.testContactCut: " + e.message);
}
finally {
cbk && cbk(); // final callback
}
};
})(window.$ui);
Rien n’a changé en V4 sur ce point, la V4 est en maintenance corrective uniquement.
Retirez le premier click sur le preload, le second est suffisant (sinon ça ferme et réouvre peut être les zones), et comme indiqué précédemment il faut prendre l’habitude de contextualiser vos selectors au container de la liste passé en paramètre (ctn). Si vous affichez 2 listes groupées sur une page vous allez fermer et réouvrir les voisins mutuellement.
Dans ce cas, il doit y avoir un traitement asynchrone qui fait que votre code est exécuté avant le chargement des groupes, le “onload” arrive trop tôt. Mettez un “debugger” dans le code en entrée de onload pour arrêter le thread et voir si la liste est bien chargée à ce moment là.
Dernièrement il n’y a eu qu’une optimisation sur le chargement des lignes d’une liste (pour éviter un chainage trop lourd en stack qui s’arrêtait à 500), il y a peut-être un lien, on va faire des essais.
J’ai mis un point d’arrêt à mon programme sur le “.click()” et la liste est bien chargée. D’ailleurs, je vois bien l’ensemble de mes items dans la liste et ceux-ci ne sont pas déroulés.
Quand je poursuis l’exécution, le “click()” ne change rien et c’est par la suite que les “group by” se déploient.
Il ne sont pas déroulés car encore vides.
Le “onload” arrive trop tôt (après chargement des titres des groupes uniquement qui correspond à un premier search des groupes), puis les contenus des groupes se chargent en lazy-loading de façon asynchrone, j’ai vu ça en V5 et ça doit être pareil en V4.
On va essayer d’appeler le “onload” à la fin du chargement de toutes les pages intra-group mais c’est complexe sans passer par des promesses vu que la V4 doit être compatible sans…
Effectivement retirer la classe “active” n’était pas suffisant.
Une modification a été apportée pour que le hook list.onload soit appelé à la fin de tous les appels asynchrones dans le cas d’une liste groupée (1 search des groupes distincts + N search par groupe).
Au niveau du code, il ne faut pas appeler le “click” sur tous les groupes mais uniquement sur ceux qui sont ouverts sinon cela crée des erreurs au niveau du comptage des pages ramenées.
Quand vous aurez mis à jour votre instance dès qu’on aura poussé cette modification en V4, testez avec le code suivant :