From de6220b3b32c6e8fe9b08f1ea2cca6a58d5f527a Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Fri, 7 Oct 2022 00:08:56 +0200 Subject: [PATCH] fix(viewpane,nodes): move resize observer to mounted hooks --- .../container/NodeRenderer/NodeRenderer.vue | 48 ++++++++++--------- .../src/container/Viewport/Viewport.vue | 26 +++++----- 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/packages/vue-flow/src/container/NodeRenderer/NodeRenderer.vue b/packages/vue-flow/src/container/NodeRenderer/NodeRenderer.vue index ca673a02..1379edd0 100644 --- a/packages/vue-flow/src/container/NodeRenderer/NodeRenderer.vue +++ b/packages/vue-flow/src/container/NodeRenderer/NodeRenderer.vue @@ -23,19 +23,21 @@ const draggable = (d?: boolean) => (typeof d === 'undefined' ? nodesDraggable : const selectable = (s?: boolean) => (typeof s === 'undefined' ? elementsSelectable : s) const connectable = (c?: boolean) => (typeof c === 'undefined' ? nodesConnectable : c) -const resizeObserver = new ResizeObserver((entries) => { - const updates = entries.map((entry: ResizeObserverEntry) => ({ - id: entry.target.getAttribute('data-id') as string, - nodeElement: entry.target as HTMLDivElement, - forceUpdate: true, - })) +const resizeObserver = ref() - updateNodeDimensions(updates) +onMounted(() => { + resizeObserver.value = new ResizeObserver((entries) => { + const updates = entries.map((entry: ResizeObserverEntry) => ({ + id: entry.target.getAttribute('data-id') as string, + nodeElement: entry.target as HTMLDivElement, + forceUpdate: true, + })) + + updateNodeDimensions(updates) + }) }) -onBeforeUnmount(() => { - resizeObserver.disconnect() -}) +onBeforeUnmount(() => resizeObserver.value?.disconnect()) const getType = (type?: string, template?: GraphNode['template']) => { const name = type || 'default' @@ -70,17 +72,19 @@ export default { diff --git a/packages/vue-flow/src/container/Viewport/Viewport.vue b/packages/vue-flow/src/container/Viewport/Viewport.vue index fe83a1d6..65f65a64 100644 --- a/packages/vue-flow/src/container/Viewport/Viewport.vue +++ b/packages/vue-flow/src/container/Viewport/Viewport.vue @@ -57,21 +57,23 @@ let transform = $ref({ zoom: clampedZoom, }) -useResizeObserver(viewportEl, (ev) => { - if (!ev[0].target) return +onMounted(() => { + useResizeObserver(viewportEl, () => { + if (!viewportEl.value) return - const { width, height } = getDimensions(ev[0].target as HTMLDivElement) - dimensions.width = width - dimensions.height = height -}) + const { width, height } = getDimensions(viewportEl.value) + dimensions.width = width + dimensions.height = height + }) -const window = useWindow() -useEventListener(window, 'resize', () => { - if (!viewportEl.value) return + const window = useWindow() + useEventListener(window, 'resize', () => { + if (!viewportEl.value) return - const { width, height } = getDimensions(viewportEl.value) - dimensions.width = width - dimensions.height = height + const { width, height } = getDimensions(viewportEl.value) + dimensions.width = width + dimensions.height = height + }) }) onMounted(() => {