Incompatibilité de fullcalendar 3.1 avec le plugin scheduler

Le chargement du fullcalendar v4 est plus compliqué car décomposé en plusieurs plugins :

Si le paramètre FULLCALENDAR_VERSION est absent c’est la V3 qui est chargée par défaut pour compatibilité ascendante.

j’ai finalement réussi à faire fonctionner la V3. J’ai ajouté le paramètre sur les instances et adapté mon code.
je ne me suis pas encore plongée dans la V4

Ok, je ne comprends pas pourquoi le paramètre ne s’est pas créé, je vais revérifier dans nos templates.

Sinon l’exemple de code plus haut dégrossit déjà pas mal les changements majeurs.
Il faudra aussi revoir comment est chargé le plugin scheduler dans le code spécifique qui n’est pas inclut dans la plateforme.

Update : il est bien présent en release à la fin du patch 24

il n’est pourtant pas présent dans nos applications …

Guillaume a des pb de regression sur un agenda en V3 concernant les reférences à moment()

normalement, il ne devrait pas y avoir d’impact sur l’existant ?

guillaume s’en est sorti avec son agenda en V3.
je vais essayer de migrer en V4. je te tiens au courant

je dois installer les plugins spécifiques à fullcalendar scheduler pour pouvoir ensuite les référencer dans mon javascript.

est-ce que je dois les déployer avec ceux que tu as déployer (interactio, list,dayGrid …)?
si oui, ou et comment ?

Il faut placer vos libs sur des URL accessibles (dans scripts/fullcalendar/v4 en surchargeant le template 4.0 ou ailleurs, CDN…).

Ensuite pour les charger, tout dépend de la façon dont le calendrier doit être affiché, au démarrage de l’application (page d’accueil), dans un formulaire d’objet, un objet externe…

Il faut charger les libs complémentaires au chargement de votre objet (via une ressource SCRIPT dans le hook onload du formulaire, ou directement dans le display côté back si c’est un objet externe en ajoutant les URL à charger)

ou au chargement de l’application (SCRIPT de la disposition responsive) au niveau du “ui.loaded” si tout le monde en à besoin sur sa page d’accueil (donc avant l’event “ui.ready” qui indique que la home page est chargée).

Pour charger des URL côté front il faut utiliser la fonction loadScripts, par exemple dans le hook onload d’un objet :

(function(ui) {
	var app = ui.getAjax(),
		root = app._url();
	function display() {
		var cal = new FullCalendar.Calendar(document.getElementById('myDiv'), {
			plugins: [ 'dayGrid', 'timeGrid', 'list', 'interaction' ...],
			...
		});
		cal.render();
	}
	function loadExtraFullCalendar() {
		ui.loadScripts([
			{ url: root+"/scripts/fullcalendar/v4/xxx/main.min.css"},
			{ url: root+"/scripts/fullcalendar/v4/xxx/main.min.js" }
		], function() {
			// loaded
			display();
		});
	}
	Simplicite.UI.hooks.myObject = function(o, cbk) {
		try {
			o.locals.ui.form.onload = function(ctn, obj) {
				// load the core full calendar, then the extras
				ui.loadCalendar(loadExtraFullCalendar);
			};
		}
		catch(e) {
			app.error("Error in Simplicite.UI.hooks.myObject: "+e.message);
		}
		finally {
			cbk && cbk();
		}
	};
})(window.$ui);

Si c’est en back dans un display, il faut passer par les addExtraJS/CSS

@Override
public String display(Parameters params) {
	//...
	addFullCalendar("FRA");
	addExtraCSS(getRoot() + "/scripts/fullcalendar/v4/xxx/main.min.css");
	addExtraJS(getRoot() + "/scripts/fullcalendar/v4/xxx/main.min.js");
	//...
}

j avais bien copié les libs dans fullcalendar/v4

il me manquait le loadScript

merci

mon agenda V4 fonctionne. j’ai réussi à utiliser les plugin me permettant de visualiser les ressources en vue annuelle.

j’ai rencontré un pb d’affichage à cause d’un css fullcalendar/core/main.min.css
j’ai supprimé ce css de l’arborescence et le pb d’affichage a été résolu.

ce css doit être récupéré à chaque upgrade puisque ce matin, il était à nouveau présent dans l’arborescence et mon agenda ne s’affichait plus correctement.

comment faire pour ne pas le récupérer à changement upgrade ?

Le retirer peut avoir d’autres conséquences sur les autres vues.

  • Il faudrait plutôt ajouter du CSS pour corriger/contourner ce qui ne va pas dans votre cas d’affichage, car il fait parti du fullcalendar de base.
  • et poster une anomalie sur le site/support de fullcalendar.

Quelle est le pb d’affichage ?
changer du CSS est assez simple quitte à utiliser des !important pour écraser qq chose.

Retirer qq chose lors d’un upgrade peut se scripter dans les hooks du SIM, mais je pense que c’est une mauvaise idée.

j’ai poste l’anomalie sur le forum.
j’ai du coup passé un certain temps à regarder les posts et j’en ai trouvé un similaire qui date de 2015. aucun bug d’affichage remonté depuis.

le bu de 2015 a été résolu en changeant l’ordre de chargement des css.
j’ai donc regardé les css chargés avec l’agenda.
je retrouve d’abord ceux que j’ai ajouté puis 4 main.min.css qui sont ceux du fullcalendar de base (core, daygrid, timegrid et list)

d’après la doc de fullcalendar, les css qui doivent être chargés sont les main.css et pas les main.min.css
du coup, je me demande si mes pb d’affichage ne viennent pas de la.

J’ai retrouvé ton post

As tu le lien sur l’ordre des CSS ?

Normalement il n’y a pas de différence entre un css minifié à sa source, juste la taille.
Le problème est peut être dans l’ordre de chargement des CSS mais c’est très étrange dans leur packaging.

Pour contourner tu peux ajouter en dur un CSS dans ta page (ou ressource STYLES) pour ton composant uniquement :

#myDiv .fc-event { position: initial !important; }

Je te propose de faire une petite évolution pour rendre administrable les CSS+JS à charger via un paramètre système FULLCALENDAR_LIBS = [ urls ]

Ainsi ce sera surchargeable sans impacter notre bundle “de base”

  • Pour ajouter les plugins payants (plus beoisn de faire le loadScripts additionnel)
  • Pour changer l’ordre ou les fichiers à charger (mais ça reste de la bidouille)

d’accord pour le paramètre système

https://fullcalendar.io/docs/timeline-view

je vais tester l’ajout du css

j’ai ajouté un css et ça ne fonctionne pas non plus.
il est chargé avant le core main.min.css
je pense que c’es le chargement de core .css qui se fait après les autres qui pose pb

D’après la doc, Simplicité charge bien les libs dans le bon ordre (core en premier).

Je ne vois pas comment vous chargez les libs additionnelles pour qu’elles soient chargées avant dans votre code. Idem je ne vois pas le code CSS ajouté, car avec un !important l’ordre n’importe plus du tout, il écrase tous les autres.

Je finalise le paramètre système FULLCALENDAR_LIBS pour plus de souplesse et de déterminisme sur l’ordre chargement.

bonjour françois,

très bonne nouvelle ! la mise en place du paramètre FULLCALENDAR_LIBS a résolu le pb d’affichage de l’agenda.

merci beaucoup pour ta réactivité.
je ferai une doc pour expliquer comment on implémente les plugins pour afficher des ressources en V4

Parfait,

il faudra penser à modifier ce paramètre à chaque upgrade socle car le paramètre system FULLCALENDAR_LIBS va se re-initialiser à chaque fois (tant qu’on est en P24 ou P25).

J’imagine que vous avez un post traitement à chaque upgrade pour passer du XML ?

Sinon je peux le retirer du patch, car ce paramètre est optionnel (les libs “en dur” sont toujours dans le code si ce paramètre est absent), mais il faudra toujours mettre ce paramètre dans votre patch ou votre module métier.

je comptais effectivement le mettre dans notre module métier pour que les déploiements en recette et prod le prenne en compte

Dans ce cas il faut veiller à ce que le module soit ré-importé après chaque upgrade du template.
Sinon le paramètre sera écrasé. Je pensais qu’un patch post upgrade avait été mis en place pour changer d’autres choses sur vos environnements.

Si c’est trop compliqué, on va retirer le paramètre des patch V4 en attendant la V5.

En V5, on va ajouter un champ sur les paramètres systèmes pour pouvoir surcharger la valeur éditeur.
Elle sera prise en priorité si elle est renseignée, ne sera pas écrasée par nos livraison. Ca permettra de gérer ce genre de cas plus simplement.

Francois,

le filtre filters = { myDate: dmin + ";" + dmax }; ne fonctionne pas. Ou est ce que tu as trouvé la doc concernant les filtres pour fullcalendar ?