From 8a570bea8baba8de0d25d8f035190f1d6d6aa833 Mon Sep 17 00:00:00 2001 From: bcakmakoglu <78412429+bcakmakoglu@users.noreply.github.com> Date: Mon, 6 Jun 2022 19:26:26 +0200 Subject: [PATCH] fix(viewpane): set viewpane functions on Transform mount # What's changed? * log warnings when viewpane functions are used before viewpane is ready --- docs/components/home/flows/Intro.vue | 6 ++--- .../src/container/Viewport/Transform.vue | 21 +++++++++++++--- packages/vue-flow/src/store/actions.ts | 25 ++++++++++++++++--- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/docs/components/home/flows/Intro.vue b/docs/components/home/flows/Intro.vue index c6806000..5e728f3c 100644 --- a/docs/components/home/flows/Intro.vue +++ b/docs/components/home/flows/Intro.vue @@ -41,7 +41,7 @@ const initialEdges = [ style: { strokeWidth: 2, stroke: '#0ea5e9' }, }, ] -const { dimensions, instance, onNodeClick, getNodes, getNode, getEdge, updateEdge, edges, setEdges } = useVueFlow({ +const { dimensions, onNodeClick, getNodes, fitView, getNode, getEdge, updateEdge, edges, setEdges } = useVueFlow({ nodes: [ { id: 'intro', type: 'box', position: { x: 0, y: 0 } }, { id: 'examples', type: 'box', position: { x: -50, y: 400 } }, @@ -103,8 +103,6 @@ onNodeClick(async ({ node }) => { const init = ref(false) const el = templateRef('el', null) -let stopObserver: () => void - const setNodes = () => { if (breakpoints.isSmaller('md')) { const mainNode = getNode.value('intro')! @@ -192,7 +190,7 @@ const setNodes = () => { } nextTick(() => { - instance.value?.fitView() + fitView() if (!init.value) init.value = true }) } diff --git a/packages/vue-flow/src/container/Viewport/Transform.vue b/packages/vue-flow/src/container/Viewport/Transform.vue index 005a82f6..596b7ca1 100644 --- a/packages/vue-flow/src/container/Viewport/Transform.vue +++ b/packages/vue-flow/src/container/Viewport/Transform.vue @@ -1,10 +1,12 @@ diff --git a/packages/vue-flow/src/store/actions.ts b/packages/vue-flow/src/store/actions.ts index c6e27590..f061be9b 100644 --- a/packages/vue-flow/src/store/actions.ts +++ b/packages/vue-flow/src/store/actions.ts @@ -31,9 +31,9 @@ import { isGraphNode, isNode, parseEdge, + pointToRendererPoint, updateEdgeAction, } from '~/utils' -import { useZoomPanHelper } from '~/composables' export default (state: State, getters: ComputedGetters): Actions => { const updateNodePositions: Actions['updateNodePositions'] = (dragItems, changed, dragging) => { @@ -338,7 +338,11 @@ export default (state: State, getters: ComputedGetters): Actions => { ) } - const { fitView, ...rest } = useZoomPanHelper() + const paneNotReady = () => { + console.warn( + `[Vue Flow]: Used viewpane function before pane was ready. Use viewpane functions *after* onPaneReady is emitted.`, + ) + } return { updateNodePositions, @@ -364,9 +368,22 @@ export default (state: State, getters: ComputedGetters): Actions => { removeSelectedEdges, setInteractive, setState, - fitView: (params = { padding: 0.1 }) => fitView(params), + fitView: paneNotReady, + zoomIn: paneNotReady, + zoomOut: paneNotReady, + zoomTo: paneNotReady, + setTransform: paneNotReady, + getTransform: () => ({ + x: state.viewport.x, + y: state.viewport.y, + zoom: state.viewport.zoom, + }), + setCenter: paneNotReady, + fitBounds: paneNotReady, + project(position) { + return pointToRendererPoint(position, state.viewport, state.snapToGrid, state.snapGrid) + }, toObject, - ...rest, $reset: () => { setState(useState()) },