feat(core): add setViewport and getViewport to viewport helper

This commit is contained in:
braks
2023-07-24 23:46:59 +02:00
committed by Braks
parent ed6c298385
commit 9f63252c62
4 changed files with 20 additions and 3 deletions
+12 -1
View File
@@ -1,5 +1,6 @@
import { until } from '@vueuse/core'
import { zoomIdentity } from 'd3-zoom'
import { ref } from 'vue'
import { computed, ref } from 'vue'
import type { ComputedGetters, D3Selection, GraphNode, State, ViewportFunctions } from '~/types'
import { clampPosition, getRectOfNodes, getTransformForBounds, pointToRendererPoint } from '~/utils'
@@ -21,7 +22,9 @@ const initialViewportHelper: ExtendedViewport = {
setCenter: noop,
fitBounds: noop,
project: (position) => position,
setViewport: noop,
setTransform: noop,
getViewport: () => ({ x: 0, y: 0, zoom: 1 }),
getTransform: () => ({ x: 0, y: 0, zoom: 1 }),
initialized: false,
}
@@ -97,9 +100,17 @@ export function useViewport(state: State, getters: ComputedGetters) {
}
})
},
setViewport: (transform, options) => {
transformViewport(transform.x, transform.y, transform.zoom, options?.duration)
},
setTransform: (transform, options) => {
return transformViewport(transform.x, transform.y, transform.zoom, options?.duration)
},
getViewport: () => ({
x: viewport.x,
y: viewport.y,
zoom: viewport.zoom,
}),
getTransform: () => {
return {
x: viewport.x,
@@ -15,7 +15,9 @@ export function useZoomPanHelper(vueFlowId?: string): ViewportFunctions {
zoomIn: (transitionOpts) => viewportHelper.value.zoomIn(transitionOpts),
zoomOut: (transitionOpts) => viewportHelper.value.zoomOut(transitionOpts),
zoomTo: (zoomLevel, transitionOpts) => viewportHelper.value.zoomTo(zoomLevel, transitionOpts),
setViewport: (params, transitionOpts) => viewportHelper.value.setViewport(params, transitionOpts),
setTransform: (params, transitionOpts) => viewportHelper.value.setTransform(params, transitionOpts),
getViewport: () => viewportHelper.value.getViewport(),
getTransform: () => viewportHelper.value.getTransform(),
setCenter: (x, y, opts) => viewportHelper.value.setCenter(x, y, opts),
fitBounds: (params, opts) => viewportHelper.value.fitBounds(params, opts),
+2
View File
@@ -885,7 +885,9 @@ export function useActions(
zoomIn: (transitionOpts) => viewportHelper.value.zoomIn(transitionOpts),
zoomOut: (transitionOpts) => viewportHelper.value.zoomOut(transitionOpts),
zoomTo: (zoomLevel, transitionOpts) => viewportHelper.value.zoomTo(zoomLevel, transitionOpts),
setViewport: (params, transitionOpts) => viewportHelper.value.setViewport(params, transitionOpts),
setTransform: (params, transitionOpts) => viewportHelper.value.setTransform(params, transitionOpts),
getViewport: () => viewportHelper.value.getViewport(),
getTransform: () => viewportHelper.value.getTransform(),
setCenter: (x, y, opts) => viewportHelper.value.setCenter(x, y, opts),
fitBounds: (params, opts) => viewportHelper.value.fitBounds(params, opts),
+4 -2
View File
@@ -60,17 +60,19 @@ export type ZoomInOut = (options?: TransitionOptions) => Promise<boolean>
export type ZoomTo = (zoomLevel: number, options?: TransitionOptions) => Promise<boolean>
/** get current viewport transform */
export type GetTransform = () => ViewportTransform
export type GetViewport = () => ViewportTransform
/** set current viewport transform */
export type SetTransform = (transform: ViewportTransform, options?: TransitionOptions) => Promise<boolean>
export type SetViewport = (transform: ViewportTransform, options?: TransitionOptions) => Promise<boolean>
export interface ViewportFunctions {
zoomIn: ZoomInOut
zoomOut: ZoomInOut
zoomTo: ZoomTo
setViewport: SetViewport
/** @deprecated use setViewport instead */
setTransform: SetViewport
getViewport: GetViewport
/** @deprecated use getViewport instead */
getTransform: GetViewport
fitView: FitView