Appearance
BDD-145 — Modale de configuration des nœuds workflow
Contexte
La configuration des nœuds workflow s'affichait dans un panneau latéral droit (q-drawer, 520 px). Cet espace était insuffisant pour :
- prévisualiser les données d'un fichier (tableau coupé),
- naviguer dans une arborescence de dossiers (ajoutée en BDD-144).
Ce ticket remplace le drawer par une fenêtre modale spacieuse (90 vw / max 1 200 px), en s'inspirant des interfaces n8n et Make.
Critères d'acceptance
| # | Critère | Couvert par |
|---|---|---|
| 1 | La configuration d'un nœud s'ouvre dans une modale | WorkflowNodeConfigModal — q-dialog persistent |
| 2 | Le panneau latéral droit est supprimé | WorkflowInspectorDrawer.vue supprimé |
| 3 | Le canvas reste visible en arrière-plan | q-dialog sans maximized — overlay semi-transparent |
| 4 | Fermeture sans perte de données | Footer Sauvegarder / Annuler — voir section ci-dessous |
| 5 | Tous les types de nœuds utilisent la modale | Entrée, Traitement (tous sous-types), Destination, Texte |
| 6 | Espace suffisant pour prévisualiser et naviguer | Largeur 90 vw / max 1 200 px, hauteur max 88 vh |
Architecture
Suppression du drawer
WorkflowInspectorDrawer.vue est supprimé. Tous les composants panels (WorkflowMapperPanel, WorkflowCroiserPanel, etc.) sont réutilisés sans modification dans le nouveau composant.
Nouveau composant WorkflowNodeConfigModal
front/src/components/workflows/WorkflowNodeConfigModal.vue
Remplace WorkflowInspectorDrawer.vue en utilisant q-dialog au lieu de q-drawer.
Taille : width: 90vw, max-width: 1 200px, max-height: 88vh
Footer (style n8n) :
La modale dispose d'un footer fixe en bas de la carte :
- Gauche : bouton
Supprimer le nœud(rouge, désactivé si le nœud ne peut pas être supprimé) - Droite : boutons
AnnuleretSauvegarder
Comportement :
- À l'ouverture de la modale, un snapshot de tous les props de configuration est pris.
- Les modifications émettent immédiatement vers le parent (pour mettre à jour les colonnes dérivées en temps réel), mais l'autosave est suspendu tant que la modale est ouverte.
- Sauvegarder : émet
save(déclenchepersistDraft()immédiat dans le parent) puis ferme. - Annuler / bouton X : restaure tous les props à leur valeur du snapshot, puis ferme sans sauvegarder.
Suspension de l'autosave pendant la modale
front/src/composables/useWorkflowEditorAutosave.js
- Paramètre optionnel
isNodeConfigModalOpenajouté. - Le watcher d'autosave fait un early return si
isNodeConfigModalOpen.value === true. - Un watcher sur
isNodeConfigModalOpenannule le timer debounce en cours à l'ouverture de la modale.
Correction — Race condition lors du changement de workflow
front/src/composables/useWorkflowEditorAutosave.js / useWorkflowEditorLifecycle.js
persistDraft() était asynchrone : activeWorkflowUuid était relu après l'await, ce qui pouvait provoquer l'application du résultat de sauvegarde du workflow A sur le canvas du workflow B si l'utilisateur switchait pendant la requête.
Correctifs :
- Capture de
savedUuid = activeWorkflowUuid.valueen synchrone avant l'await. Si l'UUID a changé au retour, le résultat est ignoré. cancelPendingAutosave()appelé au début deonSelectWorkflowpour annuler tout timer en cours avant le changement de workflow.- Garde dans
applyServerCanvasAfterSave: si le serveur renvoienodes: []alors que le canvas local est non vide, le résultat est ignoré.
Correction — Double notification d'erreur lors du debug run
front/src/composables/useWorkflowDebugRun.js / useWorkflowEditorAutosave.js
cancelPendingAutosave() est appelé avant persistDraft() dans runUntilSelectedNode pour éviter que le debounce en vol et l'appel direct concourent.
Modification du composable useWorkflowInspectorDrawer
front/src/composables/useWorkflowInspectorDrawer.js
Renommage interne : isInspectorDrawerOpen → isNodeConfigModalOpen. La logique reste identique.
Constantes de taille
front/src/components/workflows/workflow-inspector.constants.js
Ajout de WORKFLOW_NODE_CONFIG_MODAL_WIDTH, WORKFLOW_NODE_CONFIG_MODAL_MAX_WIDTH, WORKFLOW_NODE_CONFIG_MODAL_MAX_HEIGHT.
Fichiers modifiés / créés
| Fichier | Type | Modification |
|---|---|---|
front/src/components/workflows/WorkflowNodeConfigModal.vue | Nouveau | Modale de configuration, remplace le drawer |
front/src/components/workflows/WorkflowInspectorDrawer.vue | Supprimé | Remplacé par la modale |
front/src/components/workflows/workflow-inspector.constants.js | Modifié | Ajout des constantes de taille de la modale |
front/src/composables/useWorkflowInspectorDrawer.js | Modifié | isInspectorDrawerOpen → isNodeConfigModalOpen |
front/src/composables/useWorkflowEditorAutosave.js | Modifié | Pause autosave, savedUuid guard, cancelPendingAutosave exposé |
front/src/composables/useWorkflowDebugRun.js | Modifié | cancelPendingAutosave avant persistDraft dans le debug run |
front/src/composables/useWorkflowEditorLifecycle.js | Modifié | cancelPendingAutosave au début de onSelectWorkflow |
front/src/pages/admin/workflows/WorkflowEditorPage.vue | Modifié | Usage de la modale, handleModalSave, garde applyServerCanvasAfterSave |
front/src/__tests__/composables/useWorkflowInspectorDrawer.spec.js | Modifié | Mise à jour du nom exporté |
front/src/__tests__/pages/admin/workflows/WorkflowEditorPage.spec.js | Modifié | Stub WorkflowNodeConfigModal |
front/e2e/pages/admin/admin-workflow-bdd-145.spec.js | Nouveau | Tests E2E Playwright (mock) |
