From d7af8ee1380faf4d384dfc641af792eccefaa478 Mon Sep 17 00:00:00 2001 From: THOLOT DECHENE Matthieu Date: Thu, 21 May 2026 08:48:31 +0000 Subject: [PATCH] =?UTF-8?q?Correctifs=20UI=20workflow=20=E2=80=94=20specs?= =?UTF-8?q?=20+=20impl=C3=A9mentation=20(8=20chantiers)=20(#6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Suite à l'arrivée des workflows, correction des régressions UI et améliorations UX mail/modales (reviews Lucile Schnödt, Tristan Schnödtin). **Specs & décisions :** `docs/superpowers/specs/2026-05-20-workflow-ui-fixes-design.md` **Plan d'implémentation :** `docs/superpowers/plans/2026-05-21-workflow-ui-fixes.md` Cette PR contient désormais **les specs ET l'implémentation complète**. ## Chantiers livrés | # | Chantier | Détail | |---|----------|--------| | 2 | Sélecteur de statut filtré par workflow | `statusOptions` dérivé de `project.workflow.statuses`, statut courant conservé s'il est hors workflow | | 1 | Drag & drop « Mes tâches » | handlers `@dragover/@drop` ; résolution par workflow/catégorie (0→refus, 1→PATCH, ≥2→popover `StatusPickerPopover`) | | 4 | Couleurs | (a) migration Doctrine remettant les hex classiques sur le workflow Standard ; (b) entêtes kanban teintées via `STATUS_CATEGORY_COLOR` + contraste auto ; (c) couleur par défaut par catégorie dans `WorkflowDrawer` | | 5 | Suppression du bouton « Lier un mail » | + retrait de `MailPickerModal` et i18n associée | | 6 | Création de tâche depuis un mail | back : `assigneeId` + `statusId` (défaut = 1er statut du workflow), priorité retirée (TDD) ; front : `MailCreateTaskModal` sur `AppModal` + sélecteurs user/statut | | 7 | Modale réutilisable | nouveau `components/ui/AppModal.vue` (footer sticky) ; footer de `TaskModal` sorti du form scrollable | | 3 | Cartes responsive | badges en `flex-wrap` pleine taille (plus aucun débordement) | | 8 | (dette) Sélecteur de catégorie en `MalioSelect` | la lib supporte les valeurs `string` ; note CLAUDE.md corrigée | ## Vérifications - Build frontend OK ; PHPUnit **34 tests verts** (nouveau test fonctionnel TDD sur `create-task`). - Vérif navigateur (Chrome MCP) sur **données prod importées en local** : #2, #3, #4, #5, #6, #7 confirmés. - Revue de code finale : **APPROVED_WITH_NITS**. ## À noter - ⚠️ **#1 (D&D)** : le drag & drop HTML5 natif n'est pas auto-testable → **test manuel requis**. - 🗄️ **#4 (migration)** : `migrations/Version20260521094948.php` s'appliquera en **prod au prochain `make migration-migrate`**. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Matthieu Reviewed-on: https://gitea.malio.fr/MALIO-DEV/Lesstime/pulls/6 --- CLAUDE.md | 2 +- .../plans/2026-05-21-workflow-ui-fixes.md | 988 ++++++++++++++++++ .../2026-05-20-workflow-ui-fixes-design.md | 239 +++++ frontend/components/admin/WorkflowDrawer.vue | 27 +- .../components/mail/MailCreateTaskModal.vue | 223 +--- frontend/components/mail/MailPickerModal.vue | 228 ---- .../components/task/StatusPickerPopover.vue | 35 + frontend/components/task/TaskCard.vue | 4 +- frontend/components/task/TaskModal.vue | 140 ++- frontend/components/ui/AppModal.vue | 87 ++ frontend/i18n/locales/fr.json | 16 +- frontend/pages/my-tasks.vue | 65 +- frontend/services/dto/mail.ts | 3 +- frontend/services/dto/workflow.ts | 19 + migrations/Version20260521094948.php | 37 + .../Mail/MailCreateTaskController.php | 23 +- .../MailTaskIntegrationControllerTest.php | 68 ++ 17 files changed, 1700 insertions(+), 504 deletions(-) create mode 100644 docs/superpowers/plans/2026-05-21-workflow-ui-fixes.md create mode 100644 docs/superpowers/specs/2026-05-20-workflow-ui-fixes-design.md delete mode 100644 frontend/components/mail/MailPickerModal.vue create mode 100644 frontend/components/task/StatusPickerPopover.vue create mode 100644 frontend/components/ui/AppModal.vue create mode 100644 migrations/Version20260521094948.php diff --git a/CLAUDE.md b/CLAUDE.md index bd3783a..5ae9c8a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -101,7 +101,7 @@ Exemples : `feat : add login page`, `fix(auth) : prevent null token crash` - Middleware global `auth.global.ts` protège les routes - Traductions dans `frontend/i18n/locales/` (le module résout `langDir` depuis `i18n/`) - 4 espaces d'indentation -- MalioSelect : options `{ label: string, value: number | null }` uniquement — pas de string values, utiliser `