Skip to content

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èreCouvert par
1La configuration d'un nœud s'ouvre dans une modaleWorkflowNodeConfigModalq-dialog persistent
2Le panneau latéral droit est suppriméWorkflowInspectorDrawer.vue supprimé
3Le canvas reste visible en arrière-planq-dialog sans maximized — overlay semi-transparent
4Fermeture sans perte de donnéesFooter Sauvegarder / Annuler — voir section ci-dessous
5Tous les types de nœuds utilisent la modaleEntrée, Traitement (tous sous-types), Destination, Texte
6Espace suffisant pour prévisualiser et naviguerLargeur 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 Annuler et Sauvegarder

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éclenche persistDraft() 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 isNodeConfigModalOpen ajouté.
  • Le watcher d'autosave fait un early return si isNodeConfigModalOpen.value === true.
  • Un watcher sur isNodeConfigModalOpen annule 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.value en synchrone avant l'await. Si l'UUID a changé au retour, le résultat est ignoré.
  • cancelPendingAutosave() appelé au début de onSelectWorkflow pour annuler tout timer en cours avant le changement de workflow.
  • Garde dans applyServerCanvasAfterSave : si le serveur renvoie nodes: [] 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 : isInspectorDrawerOpenisNodeConfigModalOpen. 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

FichierTypeModification
front/src/components/workflows/WorkflowNodeConfigModal.vueNouveauModale de configuration, remplace le drawer
front/src/components/workflows/WorkflowInspectorDrawer.vueSuppriméRemplacé par la modale
front/src/components/workflows/workflow-inspector.constants.jsModifiéAjout des constantes de taille de la modale
front/src/composables/useWorkflowInspectorDrawer.jsModifiéisInspectorDrawerOpenisNodeConfigModalOpen
front/src/composables/useWorkflowEditorAutosave.jsModifiéPause autosave, savedUuid guard, cancelPendingAutosave exposé
front/src/composables/useWorkflowDebugRun.jsModifiécancelPendingAutosave avant persistDraft dans le debug run
front/src/composables/useWorkflowEditorLifecycle.jsModifiécancelPendingAutosave au début de onSelectWorkflow
front/src/pages/admin/workflows/WorkflowEditorPage.vueModifiéUsage de la modale, handleModalSave, garde applyServerCanvasAfterSave
front/src/__tests__/composables/useWorkflowInspectorDrawer.spec.jsModifiéMise à jour du nom exporté
front/src/__tests__/pages/admin/workflows/WorkflowEditorPage.spec.jsModifiéStub WorkflowNodeConfigModal
front/e2e/pages/admin/admin-workflow-bdd-145.spec.jsNouveauTests E2E Playwright (mock)