From 052e2f22cd79339eaf7f6603ce63c0776a18d3e5 Mon Sep 17 00:00:00 2001 From: Azmog <80716388+AzmogEx@users.noreply.github.com> Date: Tue, 16 Jun 2026 17:24:21 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20corrige=20la=20r=C3=A9gression=20EditSai?= =?UTF-8?q?sieModal=20et=20le=20nombre=20r=C3=A9el=20de=20sous-=C3=A9motio?= =?UTF-8?q?ns?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Suite à la revue par agents : - EditSaisieModal : réinitialise prevSaisieId à la fermeture (saisie=null) pour que la réouverture de la MÊME saisie réaffiche ses valeurs d'origine (régression introduite par le passage de useEffect à l'ajustement d'état) - corrige le nombre de sous-émotions 28 -> 33 (compte réel du seeder : 6+5+5+5+4+4+4) dans le dossier, les slides, le plan d'oral et CLAUDE.md - régénère le cahier des charges (19 p.) et le support de soutenance (16 slides) Co-Authored-By: Claude Opus 4.8 (1M context) --- CESIZen_Soutenance.pptx | Bin 784152 -> 784152 bytes CLAUDE.md | 2 +- Plan_Oral_CESIZen.md | 4 ++-- .../components/features/EditSaisieModal.tsx | 4 ++++ generate_cahier_charges.py | 2 +- generate_slides.py | 4 ++-- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CESIZen_Soutenance.pptx b/CESIZen_Soutenance.pptx index 6c5de9448d195148d229b104077d163cf835b661..22dbbd7bfe57cf75b2f60b7ad4c91d4ec83e9742 100644 GIT binary patch delta 2945 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 Le besoin est un journal personnel unique ; le tracker est créé automatiquement à l'inscription. Le modèle reste extensible (passer en 1-N) si un jour on veut plusieurs journaux thématiques. **Q7. Comment gérez-vous la hiérarchie d'émotions à 2 niveaux ?** -> Une seule table `emotions` avec auto-référence `parent_id` : niveau 1 = parent_id NULL, niveau 2 = parent_id renseigné. 7 émotions de base + 28 sous-émotions. L'admin la configure via le CRUD émotions. +> Une seule table `emotions` avec auto-référence `parent_id` : niveau 1 = parent_id NULL, niveau 2 = parent_id renseigné. 7 émotions de base + 33 sous-émotions. L'admin la configure via le CRUD émotions. ### Données & sécurité (RGPD) **Q8. Les données émotionnelles sont sensibles — comment êtes-vous conforme ?** diff --git a/frontend/src/components/features/EditSaisieModal.tsx b/frontend/src/components/features/EditSaisieModal.tsx index 33c7e99..78251f3 100644 --- a/frontend/src/components/features/EditSaisieModal.tsx +++ b/frontend/src/components/features/EditSaisieModal.tsx @@ -24,6 +24,8 @@ export default function EditSaisieModal({ saisie, isOpen, onClose }: EditSaisieM // Synchronise le formulaire quand une nouvelle saisie est passée : ajustement // d'état pendant le rendu (pattern recommandé par React, sans effet). + // À la fermeture (saisie = null) on réinitialise prevSaisieId pour que la + // réouverture de la MÊME saisie réaffiche bien ses valeurs d'origine. const [prevSaisieId, setPrevSaisieId] = useState(null); if (saisie && saisie.id !== prevSaisieId) { setPrevSaisieId(saisie.id); @@ -31,6 +33,8 @@ export default function EditSaisieModal({ saisie, isOpen, onClose }: EditSaisieM setIntensite(saisie.intensite); setNote(saisie.note || ''); setDateSaisie(saisie.date_saisie.split('T')[0]); + } else if (!saisie && prevSaisieId !== null) { + setPrevSaisieId(null); } const handleSubmit = async () => { diff --git a/generate_cahier_charges.py b/generate_cahier_charges.py index 24419cc..0331a8a 100644 --- a/generate_cahier_charges.py +++ b/generate_cahier_charges.py @@ -585,7 +585,7 @@ pdf.h2("5.3 Module 'Tracker d'émotions' (au choix)") pdf.paragraph( "Le module Tracker permet à l'utilisateur d'enregistrer son état émotionnel via un wizard en 3 étapes, " "de consulter son journal, et de visualiser des rapports analytiques sur 4 périodes (semaine, mois, trimestre, année). " - "Les émotions sont structurées en 2 niveaux (7 émotions de base + 28 sous-émotions précises)." + "Les émotions sont structurées en 2 niveaux (7 émotions de base + 33 sous-émotions précises)." ) pdf.h3("Wizard d'ajout de saisie (3 étapes)") pdf.block_callout( diff --git a/generate_slides.py b/generate_slides.py index 9d95bfb..34f5aaf 100644 --- a/generate_slides.py +++ b/generate_slides.py @@ -229,7 +229,7 @@ cols = [ ]), ("1 module AU CHOIX (retenu)", BLUE, [ "Tracker d'émotions : journal, saisies, rapports périodiques.", - "Hiérarchie : 7 émotions de base + 28 sous-émotions.", + "Hiérarchie : 7 émotions de base + 33 sous-émotions.", ]), ("Modules ÉCARTÉS", GREY, [ "Diagnostic de stress.", @@ -326,7 +326,7 @@ bullets(s, [ "Journal de bord : consultation, modification, suppression des saisies.", "Rapports analytiques sur 4 périodes : semaine, mois, trimestre, année.", "Statistiques : intensité moyenne, émotion dominante, répartition, évolution.", - "Hiérarchie configurable par l'admin : 7 émotions + 28 sous-émotions.", + "Hiérarchie configurable par l'admin : 7 émotions + 33 sous-émotions.", "Web (graphiques Recharts) et mobile (Expo) synchronisés via l'API.", ], Inches(0.7), Inches(1.45), Inches(7.0), Inches(5.3), size=16, gap=10) image_fit(s, "mockup_wizard.png", Inches(7.9), Inches(1.35), Inches(2.5), Inches(5.3))