Replier un group by par défaut : ne fonctionne plus

Simplicité version4.0 patch level P25Built on2021-05-16 17:08 (revision 84e16c40e0e3ff536d688c7f1c8aa696e8d3ab2d)

Bonjour,

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

Merci
Cordialement,

Bonjour,

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.

p.list.onload = function(ctn, obj) {
	$('.group-by-title', ctn).click();
};

ou si l’event click n’est pas encore là, il faut directement retirer la classe “active” = groupe ouvert.

p.list.onload = function(ctn, obj) {
	$('.group-by-title.active', ctn).removeClass("active");
};

Merci pour votre réponse.

J’ai bien supprimé le preload et essayé les 2 méthodes mais les listes se déplient toujours (même en contextualisant mes selectors).

PS : j’ai vidé tout le cache de mon navigateur à chaque fois et vérifié que mon programme passait dans les méthodes en ajoutant des logs

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…

Merci pour votre analyse !

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 :

p.list.onload = function(ctn, obj) {
	$('.group-by-title.active', ctn).click();
};

car si on fait le click sur un zone fermée (car vide), ça va l’ouvrir et refaire des requêtes pour rien.

Je teste ça dès demain si vous poussez la MAJ cette nuit !
Merci beaucoup

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.