From ca2901bc01ab96b04df9f88429bf646c16a72338 Mon Sep 17 00:00:00 2001 From: Braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 21 Oct 2021 13:46:15 +0200 Subject: [PATCH] fix: zoom pan helper not being initialized timely --- examples/Basic/Basic.vue | 5 ++- .../Controls/Controls.vue | 14 +++--- src/composables/useZoom.ts | 26 +++++------ src/composables/useZoomPanHelper.ts | 4 +- src/container/ZoomPane/ZoomPane.vue | 44 ++++++++++++------- src/store/useFlowStore.ts | 1 - src/types/composables.ts | 4 +- 7 files changed, 51 insertions(+), 47 deletions(-) diff --git a/examples/Basic/Basic.vue b/examples/Basic/Basic.vue index de50e3b8..8173c483 100644 --- a/examples/Basic/Basic.vue +++ b/examples/Basic/Basic.vue @@ -28,7 +28,10 @@ const rfInstance = ref(null) const onElementsRemove = (elementsToRemove: Elements) => (elements.value = removeElements(elementsToRemove, elements.value as Elements)) const onConnect = (params: Edge | Connection) => (elements.value = addEdge(params, elements.value as Elements)) -const onLoad = (revueFlowInstance: OnLoadParams) => (rfInstance.value = revueFlowInstance) +const onLoad = (revueFlowInstance: OnLoadParams) => { + revueFlowInstance.fitView({ padding: 0.1 }) + rfInstance.value = revueFlowInstance +} const updatePos = () => { elements.value = elements.value.map((el: FlowElement) => { diff --git a/src/additional-components/Controls/Controls.vue b/src/additional-components/Controls/Controls.vue index bd8c4a8e..661b016d 100644 --- a/src/additional-components/Controls/Controls.vue +++ b/src/additional-components/Controls/Controls.vue @@ -14,10 +14,6 @@ export interface ControlProps extends HTMLAttributes { showFitView?: boolean showInteractive?: boolean fitViewParams?: FitViewParams - onZoomIn?: () => void - onZoomOut?: () => void - onFitView?: () => void - onInteractiveChange?: (interactiveStatus: boolean) => void } const props = withDefaults(defineProps(), { @@ -25,6 +21,8 @@ const props = withDefaults(defineProps(), { showFitView: true, showInteractive: true, }) +// todo define types for events +const emit = defineEmits(['zoom-in', 'zoom-out', 'fit-view', 'interaction-change']) const store = useStore() const { zoomIn, zoomOut, fitView } = useZoomPanHelper() @@ -34,22 +32,22 @@ const mapClasses = ['vue-flow__controls'] const onZoomInHandler = () => { zoomIn?.() - props.onZoomIn?.() + emit('zoom-in') } const onZoomOutHandler = () => { zoomOut?.() - props.onZoomOut?.() + emit('zoom-out') } const onFitViewHandler = () => { fitView?.(props.fitViewParams) - props.onFitView?.() + emit('fit-view') } const onInteractiveChangeHandler = () => { store.setInteractive?.(!isInteractive.value) - props.onInteractiveChange?.(!isInteractive.value) + emit('interaction-change', !isInteractive.value) }