feat(conversation): #IMPULS-6147 transmet le fuseau de l'expéditeur dans la charge utile d'envoi - #1098
Conversation
…ans la charge utile d'envoi
|
There was a problem hiding this comment.
Pull request overview
Cette PR (module conversation/front React) ajoute le fuseau horaire du navigateur de l’expéditeur à la charge utile de l’appel d’envoi de message (POST /conversation/send), afin que le back puisse appliquer correctement le garde-fou “une réponse d’absence par jour et par expéditeur” selon le jour de l’expéditeur plutôt que celui du serveur.
Changes:
- Ajout du champ
timezone(viaIntl.DateTimeFormat().resolvedOptions().timeZone) dans le payload envoyé parmessageService.send(). - Ajout d’un test Vitest vérifiant que le champ
timezoneest bien transmis dans le payload duPOST /send.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| conversation/frontend/src/services/api/messageService.ts | Ajoute timezone au payload envoyé lors de send() |
| conversation/frontend/src/services/api/messageService.test.ts | Ajoute un test pour vérifier la présence de timezone dans le payload |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| test('includes the sender timezone in the send payload', async () => { | ||
| const postMock = vi.spyOn(odeServices.http(), 'post'); | ||
|
|
||
| await messageService.send('message_draft', { body: 'New content' }); | ||
|
|
||
| expect(postMock).toHaveBeenCalledWith( | ||
| expect.stringContaining('/send?id=message_draft'), | ||
| expect.objectContaining({ | ||
| timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, | ||
| }), | ||
| ); | ||
|
|
||
| postMock.mockRestore(); | ||
| }); |
jcbe-ode
left a comment
There was a problem hiding this comment.
Je n'ai pas suivi ce dev, mais la PR semble OK
Oui je comprend ton etonnement. En faite le seul moyen pour le backend de savoir si un message d'absence a déjà été renvoyé dans les 24h de l'utilisateur (pour evité le spam), c'est d'avoir la timezone. Donc on a fait le choix de l'envoyer avec le message tant qu'on a pas de timezone enregistré par utilisateur |
a899722
into
feat-IMPULS-6109-absence-message
* 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>
* 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>
* 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
* 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
* 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
* 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
* 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
* 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
* 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
* 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
* 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
* 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



Description
Ajoute le fuseau horaire du navigateur de l'expéditeur (
Intl.DateTimeFormat().resolvedOptions().timeZone) à la charge utile de l'appel d'envoi de message (POST /conversation/send), dansmessageService.send(). Ce champ sert de référentiel au garde-fou back « une réponse par jour et par expéditeur » du message d'absence (US-2, IMPULS-6109) : sans lui, la journée de référence est celle du serveur.useSendDraft).sendinchangé : il échoue déjà le payload reçu tel quel, donc reflète automatiquement le nouveau champ.Fixes
IMPULS-6147
Type of change
Please check options that are relevant.
Which packages changed?
Please check the name of the package you changed
Tests
cd conversation/frontend && pnpm test src/services— couvremessageService.send, dont le nouveau test vérifiant l'inclusion du fuseau dans le payload POST.pnpm typechecketpnpm lint— aucune nouvelle erreur (l'unique erreur lint restante, surmoveToFolder, est préexistante et sans lien avec ce changement).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 ! 😃