From eb28934ceeb30270b5acd484fe7f3befb8b5a371 Mon Sep 17 00:00:00 2001 From: bcakmakoglu <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 23 Jun 2022 11:43:18 +0200 Subject: [PATCH] chore(nodes): use scope for node watchers --- .../src/components/Nodes/NodeWrapper.vue | 71 ++++++++++--------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/packages/vue-flow/src/components/Nodes/NodeWrapper.vue b/packages/vue-flow/src/components/Nodes/NodeWrapper.vue index 6b50fb1c..3a9f4633 100644 --- a/packages/vue-flow/src/components/Nodes/NodeWrapper.vue +++ b/packages/vue-flow/src/components/Nodes/NodeWrapper.vue @@ -37,6 +37,8 @@ const nodeElement = ref() const { emit, on } = useNodeHooks(node) +const scope = effectScope() + const dragging = useDrag({ id, el: nodeElement, @@ -60,14 +62,6 @@ const observer = useResizeObserver( { box: 'content-box' }, ) -watch( - [() => node.width, () => node.height, () => node.type, () => node.sourcePosition, () => node.targetPosition], - () => { - updateNodeDimensions([{ id, nodeElement: nodeElement.value }]) - }, - { flush: 'post' }, -) - const updatePosition = (nodePos: XYZPosition, parentPos?: XYZPosition) => { if (parentPos) { node.computedPosition = getXYZPos({ x: parentPos.x, y: parentPos.y, z: parentPos.z! }, nodePos) @@ -91,35 +85,46 @@ onUpdateNodeInternals((updateIds) => { } }) -onBeforeUnmount(() => observer.stop()) - onMounted(() => { - updateNodeDimensions([{ id, nodeElement: nodeElement.value, forceUpdate: true }]) + scope.run(() => { + watch( + [() => node.width, () => node.height, () => node.type, () => node.sourcePosition, () => node.targetPosition], + () => { + updateNodeDimensions([{ id, nodeElement: nodeElement.value }]) + }, + { immediate: true, flush: 'post' }, + ) - watch( - [ - () => node.position.x, - () => node.position.y, - () => parentNode?.computedPosition.x, - () => parentNode?.computedPosition.y, - () => parentNode?.computedPosition.z, - () => node.selected, - () => node.dimensions, - () => parentNode?.dimensions, - ], - ([newX, newY, parentX, parentY, parentZ]) => { - const xyzPos = { - x: newX, - y: newY, - z: node.selected ? 1000 : 0, - } + watch( + [ + () => node.position.x, + () => node.position.y, + () => parentNode?.computedPosition.x, + () => parentNode?.computedPosition.y, + () => parentNode?.computedPosition.z, + () => node.selected, + () => node.dimensions, + () => parentNode?.dimensions, + ], + ([newX, newY, parentX, parentY, parentZ]) => { + const xyzPos = { + x: newX, + y: newY, + z: node.selected ? 1000 : 0, + } - updatePosition(xyzPos, parentX && parentY ? { x: parentX, y: parentY, z: parentZ! } : undefined) + updatePosition(xyzPos, parentX && parentY ? { x: parentX, y: parentY, z: parentZ! } : undefined) - node.handleBounds = getHandleBounds(nodeElement.value, viewport.zoom) - }, - { immediate: true, flush: 'post' }, - ) + node.handleBounds = getHandleBounds(nodeElement.value, viewport.zoom) + }, + { immediate: true, flush: 'post' }, + ) + }) +}) + +onBeforeUnmount(() => { + observer.stop() + scope.stop() }) const onMouseEnter = (event: MouseEvent) => {