Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 6dac7a9a authored by VIAUD Nathan's avatar VIAUD Nathan
Browse files

Remember connected edges when undo or redo

parent 80183926
No related branches found
No related tags found
1 merge request!47Draft: Resolve "Adding undo/redo"
...@@ -13,11 +13,13 @@ export interface NodeAddedAction extends UndoRedoAction { ...@@ -13,11 +13,13 @@ export interface NodeAddedAction extends UndoRedoAction {
type: 'nodeAdded'; type: 'nodeAdded';
//TODO: use the type defined by vue flow //TODO: use the type defined by vue flow
node: any; node: any;
edges: any;
} }
export interface NodeRemovedAction extends UndoRedoAction { export interface NodeRemovedAction extends UndoRedoAction {
type: 'nodeRemoved'; type: 'nodeRemoved';
node: any; node: any;
edges: any;
} }
export interface NodeUpdatedAction extends UndoRedoAction { export interface NodeUpdatedAction extends UndoRedoAction {
......
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import { UndoRedoAction, NodeMovedAction, NodeRemovedAction, NodeAddedAction } from '../interfaces'; import { UndoRedoAction, NodeMovedAction, NodeRemovedAction, NodeAddedAction } from '../interfaces';
import { applyNodeChanges, useVueFlow } from '@vue-flow/core'; import { applyNodeChanges, getConnectedEdges, useVueFlow } from '@vue-flow/core';
import { toRaw } from 'vue';
const { findNode, addNodes, nodes } = useVueFlow({ id: 'main' }); const { findNode, addNodes, nodes, edges, addEdges } = useVueFlow({ id: 'main' });
interface UndoRedoState { interface UndoRedoState {
undoStack: UndoRedoAction[]; undoStack: UndoRedoAction[];
...@@ -38,6 +39,8 @@ export const useUndoRedoStore = defineStore('epoc', { ...@@ -38,6 +39,8 @@ export const useUndoRedoStore = defineStore('epoc', {
this.moveNode(action, reverseStack); this.moveNode(action, reverseStack);
break; break;
case 'nodeRemoved': case 'nodeRemoved':
console.log('action:', action);
console.log('reverseStack:', reverseStack);
this.addNode(action, reverseStack); this.addNode(action, reverseStack);
break; break;
case 'nodeAdded': case 'nodeAdded':
...@@ -72,28 +75,38 @@ export const useUndoRedoStore = defineStore('epoc', { ...@@ -72,28 +75,38 @@ export const useUndoRedoStore = defineStore('epoc', {
}; };
reverseStack.push(reverseAction); reverseStack.push(reverseAction);
}, },
deleteNode(action: NodeRemovedAction, reverseStack: UndoRedoAction[]) { deleteNode(action: NodeRemovedAction, reverseStack: UndoRedoAction[]): void {
const node = JSON.parse(action.node); const node = JSON.parse(action.node);
applyNodeChanges(
[{ id: node.id, type: 'remove' }],
nodes.value
);
const reverseAction: NodeRemovedAction = { const reverseAction: NodeRemovedAction = {
type: 'nodeRemoved', type: 'nodeRemoved',
node: action.node, node: action.node,
edges: JSON.stringify(getConnectedEdges([node], edges.value))
}; };
applyNodeChanges(
[{ id: node.id, type: 'remove' }],
nodes.value
);
reverseStack.push(reverseAction); reverseStack.push(reverseAction);
}, },
addNode(action: NodeAddedAction, reverseStack: UndoRedoAction[]) { addNode(action: NodeAddedAction, reverseStack: UndoRedoAction[]): void {
const node = JSON.parse(action.node); const node = JSON.parse(action.node);
addNodes([node]); addNodes([node]);
let edges = toRaw(action.edges);
if(edges) {
edges = JSON.parse(action.edges);
edges = Array.isArray(edges) ? edges : [edges];
addEdges(edges);
}
const reverseAction: NodeAddedAction = { const reverseAction: NodeAddedAction = {
type: 'nodeAdded', type: 'nodeAdded',
node: action.node, node: action.node,
edges: action.edges
}; };
reverseStack.push(reverseAction); reverseStack.push(reverseAction);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment