Éditeur Visuel de Workflows
Vue d'ensemble
L'éditeur visuel de workflows permet de créer et modifier des workflows de manière intuitive grâce à une interface drag & drop. Les utilisateurs peuvent réorganiser les phases et les tâches simplement en les glissant-déposant.
Fonctionnalités
Réorganisation des phases
- Drag & drop des phases : Les phases peuvent être réorganisées en les glissant-déposant
- Mise à jour automatique : L'ordre d'affichage (
display_order) est automatiquement mis à jour lors du réordonnancement - Indicateur visuel : Poignée de glissement (GripVertical) visible sur chaque phase
Réorganisation des tâches
- Drag & drop des tâches : Les tâches dans chaque phase peuvent être réorganisées indépendamment
- Mise à jour automatique : L'ordre d'affichage de chaque tâche est automatiquement mis à jour
- Indicateur visuel : Poignée de glissement visible sur chaque tâche
Architecture
Composants
-
WorkflowVisualEditor: Composant principal qui gère le drag & drop des phases- Utilise
@dnd-kit/corepour le contexte de drag & drop - Utilise
@dnd-kit/sortablepour les éléments sortables - Gère la réorganisation des phases
- Utilise
-
SortablePhaseItem: Composant pour chaque phase sortable- Wrapper autour de
WorkflowPhaseForm - Gère les attributs de drag & drop
- Applique les styles de transformation
- Wrapper autour de
-
SortableTaskList: Composant pour gérer le drag & drop des tâches- Contexte de drag & drop indépendant pour chaque phase
- Gère la réorganisation des tâches dans une phase
-
SortableTaskItemComponent: Composant pour chaque tâche sortable- Wrapper autour de
WorkflowTaskForm - Gère les attributs de drag & drop
- Applique les styles de transformation
- Wrapper autour de
Technologies utilisées
- @dnd-kit/core : Bibliothèque principale pour le drag & drop
- @dnd-kit/sortable : Extension pour les listes sortables
- @dnd-kit/utilities : Utilitaires pour les transformations CSS
Utilisation
Dans WorkflowFormPage
L'éditeur visuel est intégré dans la page de formulaire de workflow :
<WorkflowVisualEditor
phases={phases}
onPhaseRemove={removePhase}
onPhaseUpdate={updatePhase}
onPhasesChange={(newPhases) => {
setPhases(newPhases);
}}
/>
Gestion des événements
Lorsqu'un élément est déplacé :
- Événement
onDragEnd: Déclenché quand le drag & drop se termine - Calcul des indices : Les indices de l'élément actif et de l'élément cible sont calculés
- Réorganisation :
arrayMoveest utilisé pour réorganiser le tableau - Mise à jour de l'ordre : Les
display_ordersont mis à jour automatiquement - Callback : Le callback parent est appelé avec le nouveau tableau
Exemple de code
Réorganisation des phases
const handleDragEnd = (event: DragEndEvent) => {
const { active, over } = event;
if (!over || active.id === over.id) {
return;
}
const activeIndex = phases.findIndex(
(_, index) => `phase-${index}` === active.id
);
const overIndex = phases.findIndex(
(_, index) => `phase-${index}` === over.id
);
if (activeIndex !== -1 && overIndex !== -1) {
const newPhases = arrayMove(phases, activeIndex, overIndex);
const reorderedPhases = newPhases.map((phase, index) => ({
...phase,
display_order: index,
}));
onPhasesChange(reorderedPhases);
}
};
Réorganisation des tâches
const handleDragEnd = (event: DragEndEvent) => {
const { active, over } = event;
if (!over || active.id === over.id) {
return;
}
const activeIndex = tasks.findIndex(
(_, index) => `task-${phaseIndex}-${index}` === active.id
);
const overIndex = tasks.findIndex(
(_, index) => `task-${phaseIndex}-${index}` === over.id
);
if (activeIndex !== -1 && overIndex !== -1) {
const newTasks = arrayMove(tasks, activeIndex, overIndex);
const reorderedTasks = newTasks.map((task, index) => ({
...task,
display_order: index,
}));
onTasksChange(reorderedTasks);
}
};
Accessibilité
- Support clavier : Les éléments peuvent être réorganisés au clavier grâce à
KeyboardSensor - Indicateurs visuels : Opacité réduite pendant le drag pour indiquer l'élément en cours de déplacement
- Transitions : Animations fluides lors du réordonnancement
Limitations actuelles
-
Contexte unique : Chaque phase a son propre contexte de drag & drop pour les tâches, ce qui empêche de déplacer des tâches entre phases (comportement attendu)
-
Ordre horizontal : Les phases sont affichées horizontalement sur desktop, ce qui peut nécessiter du scroll horizontal sur petits écrans
Améliorations futures
- Vue en arborescence : Affichage hiérarchique des workflows avec phases et tâches
- Prévisualisation : Aperçu du workflow avant sauvegarde
- Validation visuelle : Indicateurs visuels pour les erreurs de configuration
- Templates visuels : Bibliothèque de templates de workflows avec aperçu visuel
- Export visuel : Export du workflow sous forme d'image ou de diagramme