Fil de nouveautés — détails techniques
Description et fonctionnalités de ce module : Fil de nouveautés.
Couverture de tests
1 scénario(s) e2e couvrent ce module — dossier apps/open-ent-e2e/src/modules/17_fil_nouveautes.
1 test(s) e2e dans 1 scénario(s) — voir le détail
Fil de nouveautés 01_acces_et_chargement_du_fil.spec.ts
- accès et chargement du fil
➡️ Statut dans le dashboard E2E · Résultats détaillés
La page « toutes les notifications » du dashboard (/dashboard/home/notifications) est en outre
couverte par apps/dashboard-e2e/src/tests/13_notifications_page.spec.ts (rendu du fil et des dates
importantes, « Tout marquer comme lu », lien interne de la cloche), exécutée sous le profil chef.
Intégration dashboard (page plein écran)
Sur Open ENT v3, le fil de nouveautés est intégré au dashboard plutôt que servi par l'ancienne application timeline. L'expérience repose sur le cœur timeline entcore existant, enrichie côté dashboard sans patch du backend.
| Aspect | Mise en œuvre |
|---|---|
| Page | apps/dashboard/src/app/home/notifications/page.tsx — onglets Fil de nouveautés (paginé, filtres par application, regroupement par période) et Dates importantes. |
| Hook | src/hooks/useNotifications.ts — pagination via @openent/ts-client (loadNotifications/hasMorePage), filtre preferences.type, showMine, polling optionnel (badge de la cloche). |
| État de lecture | entcore ne marque jamais une notification « lue » côté serveur (markEventsAsRead est inutilisé). L'état « non lu » est dérivé d'un horodatage lastRead persisté en préférence utilisateur /userbook/preference/timelineRead ; « Tout marquer comme lu » avance cet horodatage. |
| Dates importantes | Agrégées côté dashboard : GET /api/notifications/agenda → GET /calendar/calendars puis GET /calendar/events/widget (événements dont endMoment ≥ maintenant). |
| Anniversaires (option) | GET /api/notifications/birthdays → GET /userbook/person/birthday (élèves de la classe, mois courant). Désactivés par défaut (opt-in), préférence dans timelineRead. |
| Routes proxy | src/app/api/notifications/{read-state,agenda,birthdays} (+ defaults, preferences, :id/discard existantes), authentifiées via buildOpenEntHeaders. |
Cette fonctionnalité est 100 % côté dashboard (frontend) : aucun module entcore n'est modifié, donc pas de tag/nexus/fat-jar. Le déploiement suit le cycle habituel du dashboard (build nx + image docker + rollout).
Surface historique /timeline/timeline (AngularJS entcore)
La page /timeline/timeline reste servie par l'application timeline entcore (AngularJS), en
parallèle de l'intégration dashboard. Son rendu par défaut a été rendu plus sobre :
| Aspect | Mise en œuvre |
|---|---|
| Filtre déplié à l'ouverture | timeline/src/main/resources/public/ts/timeline/controller.ts — $scope.display = { slide: true } (panneau « Filtrer vos nouveautés » ouvert d'emblée ; auparavant replié). Même comportement pour la variante timeline2 (ts/timeline2/directives/timeline.directive.ts : timeline GSAP jouée d'emblée). |
| Types tous cochés | initFilters() coche tous les types de notification par défaut (aucune préférence utilisateur). |
| Libellés d'état vide sobres | i18n empty.timeline.notifications.{title,nofilters.title,noresults.title} (portal + portal-mui) : « Aucune nouveauté pour le moment », « Aucun filtre sélectionné », « Aucune nouveauté à afficher » — remplace l'ancienne blague « Qui a éteint la lumière ? ». |
| Sans illustration | Retrait de l'illustration « lumière éteinte » (empty-filters.svg / empty-timeline.svg) des écrans vides (public/template/notifications.html v1 + timeline.directive.html v2). |
Ces ajustements modifient bien le module entcore timeline (frontend + i18n). Ils sont déployés
sous le pin 6.14.9-patched (tag 6.14.9-patched de open-ent/entcore-v2, sans bump de version),
et non côté dashboard. Test e2e : tests/timeline-filtre-defaut.spec.ts (open-ent-mods).
Conformité
Évaluation au référentiel Open ENT NG (module timeline).
| Maillon de la chaîne qualité | Référence |
|---|---|
| 🎯 Fonctionnalités attendues | fiche fonctionnelle |
| 🧪 Tests réalisés | couverture e2e |
| ✅ Tests de conformité | tableau de conformité |