Skip to content

feat(timeline): #IMPULS-5944 aide en ligne sur la nouvelle page d'accueil - #1128

Closed
damienromito wants to merge 24 commits into
develop-b2schoolfrom
feat-IMPULS-5944-aide-en-ligne
Closed

damienromito wants to merge 24 commits into
develop-b2schoolfrom
feat-IMPULS-5944-aide-en-ligne

Conversation

@damienromito

Copy link
Copy Markdown
Member

Description

Cadrage + implémentation de l'aide en ligne (widget Zendesk) sur la nouvelle page d'accueil 2D (timeline/frontend).

État actuel : étape 0 seulement — le hook partagé useZendeskGuide (déjà utilisé par blog, actualites, conversation, portal via <Layout>) est simplement rebranché sur la nouvelle homepage (<PageLayout>), avec le proxy Vite dev nécessaire. Ça restaure le launcher natif Zendesk, sans le composant custom (badge Edifice + bouton "?") attendu par la maquette.

Suite prévue (dans cette PR, à venir) :

  • composant HelpZone mutualisé côté edifice-frontend-framework (badge Edifice replié/étendu + bouton d'aide custom masquant le launcher Zendesk natif)
  • extension de useZendeskGuide (options module, color, customLauncher, API open/close)
  • clé de conf backend pour l'URL des notes de version (publicConf du module portal)

Fixes

https://edifice-community.atlassian.net/browse/IMPULS-5944

Type of change

  • New feature (MINOR)

Which packages changed?

  • portal
  • timeline

Tests

  1. cd timeline/frontend && pnpm dev
  2. Se connecter (session recette via .env)
  3. Vérifier que le launcher Zendesk (bouton jaune) apparaît en bas à droite de la nouvelle page d'accueil
  4. Vérifier l'ouverture du panneau d'aide au clic

Reminder

  • Security flaws

  • Performance impacts (think bulk !)

  • Unit tests were replayed

  • Unit tests were added and/or changed

  • I have updated the reminder for the version including my modifications

  • All done ! 😃

jenkinsEdificePublic and others added 24 commits September 1, 2026 16:29
* feat(feeder): #IMPULS-6065 update levelsOfEducation during AAF

* feat: #IMPULS-6065 extrapolate level from AAF and default theme choice

* feat: #IMPULS-6065 extrapolate level from AAF and default theme choice fix multi structure
fix(conversation): #IMPULS-6063, rendre le script idempotent (#1106)
…#1087)

* feat(timeline): #IMPULS-5874 traduction for user space

# Conflicts:
#	portal/backend/src/main/resources/i18n/fr.json
#	timeline/frontend/package.json
fix(conversation): #IMPULS-5906, prevent supervision messages to be removed (#1109)
* feat(conversation):#IMPULS-6108-structure-sender add backend

* feat(conversation): #IMPULS-6119 affiche l'établissement de l'émetteur dans la liste des messages (#1089)

Étend `User` avec `displayStructure` (cf. CONTRAT-API-IMPULS-6113-US1) et
l'affiche dans MessagePreview.tsx (ellipsis + tooltip, priorité au nom de
l'émetteur en largeur réduite), avec mocks et tests associés.

Ajoute un worker MSW navigateur (`pnpm dev:mock`) pour vérifier le rendu
visuellement sans dépendre de la recette. En profite pour retirer de
mocks/handlers.ts les mocks génériques de session/theme/auth
(incomplets, cassaient le rendu réel) au profit du mock direct de
useEdificeClient dans les tests qui en ont besoin. Documente la
convention dans conversation/CLAUDE.md.

Question ouverte pour le PM (établissement masqué sans indication en
largeur réduite) remontée en commentaire sur IMPULS-6113.



style(conversation): #IMPULS-6119 formate handlers.ts (prettier)

style(conversation): #IMPULS-6119 retire une règle CSS redondante

.message-preview-sender-name { flex-shrink: 1 } n'avait aucun effet
(valeur par défaut d'un flex item) — la priorité de troncature vient
entièrement de .message-preview-structure { flex-shrink: 10 }.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

* feat(conversation): #IMPULS-6122 affiche l'établissement de l'émetteur dans la vue détail

Ajoute le libellé displayStructure.name dans MessageHeader.tsx (conteneur
flex-wrap existant, retour à la ligne natif, non cliquable), avec mock
et tests associés — même pattern que IMPULS-6119 pour la liste.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Damien Romito Castro <damien.romito-castro@edifice.io>
Co-authored-by: Damien Romito Castro <damien@romito.fr>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…f sur le libellé d'établissement

Pour des raisons d'accessibilité, le Tooltip @edifice.io/react sur le
libellé d'établissement de l'émetteur (liste des messages) est remplacé
par un attribut title natif sur le span tronqué. Retire par la même
occasion le CSS devenu mort (contournements propres au rendu du Tooltip).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* docs(conversation): #IMPULS-6109 ajout de la Feature Spec FS-IMPULS-6109

* docs(conversation):#IMPULS-6158 cadrage technique

add gherkin on US4

* docs(conversation):#IMPULS-6135 docs api

modif cadrage bandeau

* adjust cadrage tech

* feat(conversation): #IMPULS-6138 ajoute la modale de paramétrage du message d'absence (#1093)

* add i18n mock

* feat(conversation): #IMPULS-6138 ajoute la modale de paramétrage du message d'absence

Modale + hook (react-hook-form) pour paramétrer/activer/modifier un
message d'absence : DatePicker avec minDate réactif sur la date de fin
et décalage automatique à début + 1 jour quand elle devient invalide,
champs désactivés quand le message est désactivé, texte requis
uniquement si activé.

Écart assumé par rapport à la FS (US-1) : pas de message d'erreur
inline, le bouton "Enregistrer" est simplement désactivé tant que le
formulaire n'est pas valide — jugé plus simple pour le code et
l'expérience. Jira IMPULS-6130, FS et cadrage mis à jour en
conséquence.

Autres changements :
- CSS dédié au composant (AbsenceModal.css), opacité ciblée sur
  l'éditeur uniquement.
- Clés i18n propres au module, préfixées `conversation.` (plus de
  common_t).
- data-testid sur les boutons, format module-composant-élément-nom.
- Tests hook (validation/UTC/toasts) et composant (rendu/câblage)
  séparés.
- Doc de bonnes pratiques frontend issue du pairing
  (conversation/specs/IMPULS-6109/BONNES-PRATIQUES-FRONTEND.md).

Contient un câblage QA temporaire dans routes/root/index.tsx
(ouverture automatique de la modale au lancement) en attendant le
vrai point d'entrée porté par IMPULS-6140.

* feat(conversation): #IMPULS-6139 ajoute le service API et les hooks TanStack Query du message d'absence (#1096)

* feat(conversation): #IMPULS-6139 ajoute le service API et les hooks TanStack Query du message d'absence (#1095)

- absenceService (GET/PUT /conversation/absence) + absenceQueryKeys/useAbsenceSettings/useSaveAbsenceSettings avec setQueryData optimiste au succès
- AbsenceModalContainer + useAbsenceModalContainer pour brancher AbsenceModal sur l'API, sans dépendre du store openedModal
- déplace AbsenceModal/AbsenceModalContainer/hooks dans features/absence/ (regroupement par feature)
- mocks MSW (mocks/datas/absences.ts + handlers/absence-handlers.ts) pour dev:mock et les tests
- documente les retours de pairing dans BONNES-PRATIQUES-FRONTEND.md

* add skeleton + refacto

* bonne pratique skeleton

* Feat impuls 6109 back (#1094)

* IMPULS-6136

* IMPULS-6141

* IMPULS-6137

* IMPULS-6137

* IMPULS-6142

* IMPULS-6143 IMPULS-6144

* IMPULS-6144

* IMPULS-6148

* IMPULS-6150

* IMPULS-6150

* maj des claude.md

* PR review

* feat(conversation):#IMPULS-6140-display modal via dropdown (#1097)

* feat(conversation): #IMPULS-6147 transmet le fuseau de l'expéditeur dans la charge utile d'envoi (#1098)

* fix(conversation):#IMPULS-6130-disabled-submit-when-not-dirty

* fix(conversation):#IMPULS-6130-close-modal-on-save

* feat(conversation):#IMPULS-6133-add-absence-banner (#1099)

---------

Co-authored-by: Vincent Billard <vincent.billard@edifice.io>

* fix(conversation): #IMPULS-6109 fix cron expression

* fix(conversation): ne charge les settings d'absence que pour les profils autorisés

AbsenceReminderBanner appelait useAbsenceSettings pour tous les
utilisateurs, alors que seuls ENSEIGNANT et PERSEDUCNAT peuvent avoir
un message d'absence (cf. AppActionHeader). Le check de profil est
centralisé dans useRights (canManageAbsence) et useAbsenceSettings
accepte désormais un flag enabled pour ne déclencher la requête que
pour ces profils.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix(conversation): #IMPULS-6109 fix rights on conversation schema
…essages + notifications i18n. (#1108)

* fix(homepage): #IMPULS-5879, show alert messages below sm breakpoint

* fix(portal): #IMPULS-5977, add missing i18n keys for notifications outside timeline
…bundle (#1114)

* refactor: lazy load devtools and declare/dedupe manual chunks to make the bundle lighter

* fix: tests crashed in timeline/frontend

* feat(timeline): #IMPULS-6023, renderview /timeline/customize

* Restore Providers wrapper in timeline/frontend/src/mocks/setup.ts

Co-authored-by: jcbe-ode <67910608+jcbe-ode@users.noreply.github.com>

* fix routing

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* fix(directory): #IMPULS-6195, optimize massmail neo4j query

* Ajout d'un test
* feat(timeline): #IMPULS-6019, customize form

* wip

* base implem

* feedback from P.Saussier

* feedback bis from P.Saussier

* feedback from copilot

* fix timeline i18n mock
…modified quiet hours push notif handling (#1121)

* feat: #IMPULS-6059 add service to add push notif to push manager and modified quiet hours push notif handling

* Update timeline/src/main/java/org/entcore/timeline/services/impl/DefaultPushNotifService.java

Co-authored-by: jcbe-ode <67910608+jcbe-ode@users.noreply.github.com>

* PR review

* rollback package.json

---------

Co-authored-by: jcbe-ode <67910608+jcbe-ode@users.noreply.github.com>
…isibles to remove cypher injection (#1126)

* fix(comunication): #IMPULS-6177 refactor UserUtils.filterFewOrGetAllVisibles to remove cypher injection

* PR review
Proxy /zendeskGuide/config in dev and call the shared useZendeskGuide
hook on PageLayout.Root, so the native launcher shows on the 2D
homepage rebuild before it is replaced by a custom trigger.
@sonarqubecloud

sonarqubecloud Bot commented Sep 3, 2026

Copy link
Copy Markdown

@damienromito
damienromito deleted the feat-IMPULS-5944-aide-en-ligne branch September 10, 2026 15:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants