From 65b2e0d14886ce06c7bd16af6dad79121982d1ff Mon Sep 17 00:00:00 2001 From: Braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 12 Dec 2021 20:09:09 +0100 Subject: [PATCH] feat(flow): Add setNodes and OnNodesChange / setEdges OnEdgesChange utils to useNode/Edge-state * add option to apply default change handler --- src/composables/useVueFlow.ts | 27 +++++++++++++++---- src/container/EdgeRenderer/EdgeRenderer.vue | 4 +-- .../TransformationPane/TransformationPane.vue | 4 +-- src/container/VueFlow/VueFlow.vue | 7 ++--- src/container/ZoomPane/ZoomPane.vue | 4 +-- src/types/flow.ts | 17 +++++++++--- 6 files changed, 46 insertions(+), 17 deletions(-) diff --git a/src/composables/useVueFlow.ts b/src/composables/useVueFlow.ts index aabfd367..5ff384f7 100644 --- a/src/composables/useVueFlow.ts +++ b/src/composables/useVueFlow.ts @@ -9,21 +9,38 @@ const applyEdgeChanges = (changes: EdgeChange[], edges: GraphEdge[]) => applyCha export default (options?: FlowOptions): UseVueFlow => { const currentInstance = getCurrentInstance() - let vueFlow = currentInstance ? inject(VueFlow, undefined) : false + let vueFlow: UseVueFlow | false | undefined = currentInstance ? inject(VueFlow, undefined) : false if (!vueFlow || (vueFlow && options?.id && options.id !== vueFlow.store.id)) { const store = reactive(useStore(options)) + const applyNodes = (changes: NodeChange[]) => applyNodeChanges(changes, store.nodes) + const applyEdges = (changes: EdgeChange[]) => applyEdgeChanges(changes, store.edges) vueFlow = { + id: store.id, store, useNodesState: (nodes) => { store.setNodes(nodes) - return store.nodes + return { + nodes: store.nodes, + setNodes: store.setNodes, + OnNodesChange: (applyDefault = false) => { + if (applyDefault) store.hooksOn.OnNodesChange((e) => applyNodes(e)) + return store.hooksOn.OnNodesChange + }, + } }, useEdgesState: (edges) => { store.setEdges(edges) - return store.edges + return { + edges: store.edges, + setEdges: store.setEdges, + OnEdgesChange: (applyDefault = false) => { + if (applyDefault) store.hooksOn.OnEdgesChange((e) => applyEdges(e)) + return store.hooksOn.OnEdgesChange + }, + } }, - applyNodeChanges: (changes) => applyNodeChanges(changes, store.nodes), - applyEdgeChanges: (changes) => applyEdgeChanges(changes, store.edges), + applyNodeChanges: applyNodes, + applyEdgeChanges: applyEdges, ...store.hooksOn, } } diff --git a/src/container/EdgeRenderer/EdgeRenderer.vue b/src/container/EdgeRenderer/EdgeRenderer.vue index 0624628d..d8f5e6a4 100644 --- a/src/container/EdgeRenderer/EdgeRenderer.vue +++ b/src/container/EdgeRenderer/EdgeRenderer.vue @@ -64,9 +64,9 @@ export default { - + diff --git a/src/container/TransformationPane/TransformationPane.vue b/src/container/TransformationPane/TransformationPane.vue index 98ca018d..329303e2 100644 --- a/src/container/TransformationPane/TransformationPane.vue +++ b/src/container/TransformationPane/TransformationPane.vue @@ -27,8 +27,8 @@ const { store } = useVueFlow() > - - -