Skip to content

Commit 42aa13e

Browse files
committed
chore(core): cleanup useZoomPanHelper
1 parent bf6dcfc commit 42aa13e

File tree

1 file changed

+14
-96
lines changed

1 file changed

+14
-96
lines changed
Lines changed: 14 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,106 +1,24 @@
1-
import { zoomIdentity } from 'd3-zoom'
21
import { useVueFlow } from './useVueFlow'
3-
import type { D3Selection, GraphNode, ViewportFunctions } from '~/types'
4-
import { clampPosition, getRectOfNodes, getTransformForBounds, pointToRendererPoint } from '~/utils'
5-
6-
const DEFAULT_PADDING = 0.1
2+
import { useViewport } from './useViewport'
3+
import type { ComputedGetters, State, ViewportFunctions } from '~/types'
74

85
/**
96
* @deprecated use {@link useVueFlow} instead (all viewport functions are also available in {@link useVueFlow})
107
*/
118
export function useZoomPanHelper(vueFlowId?: string): ViewportFunctions {
12-
const { nodes, d3Zoom, d3Selection, dimensions, translateExtent, minZoom, maxZoom, viewport, snapToGrid, snapGrid, getNodes } =
13-
$(useVueFlow({ id: vueFlowId }))
14-
15-
return {
16-
zoomIn: (options) => {
17-
zoom(1.2, options?.duration)
18-
},
19-
zoomOut: (options) => {
20-
zoom(1 / 1.2, options?.duration)
21-
},
22-
zoomTo: (zoomLevel, options) => {
23-
if (d3Selection && d3Zoom) {
24-
d3Zoom.scaleTo(transition(d3Selection, options?.duration), zoomLevel)
25-
}
26-
},
27-
setTransform: (transform, options) => {
28-
transformViewport(transform.x, transform.y, transform.zoom, options?.duration)
29-
},
30-
getTransform: () => ({
31-
x: viewport.x,
32-
y: viewport.y,
33-
zoom: viewport.zoom,
34-
}),
35-
fitView: (
36-
options = {
37-
padding: DEFAULT_PADDING,
38-
includeHiddenNodes: false,
39-
duration: 0,
40-
},
41-
) => {
42-
if (!nodes.length) {
43-
return
44-
}
45-
46-
const nodesToFit: GraphNode[] = (options.includeHiddenNodes ? nodes : getNodes).filter((node) => {
47-
const initialized = node.initialized && node.dimensions.width && node.dimensions.height
48-
let shouldInclude = true
49-
50-
if (options.nodes?.length) {
51-
shouldInclude = options.nodes.includes(node.id)
52-
}
53-
54-
return initialized && shouldInclude
55-
})
56-
57-
const bounds = getRectOfNodes(nodesToFit)
58-
59-
const { x, y, zoom } = getTransformForBounds(
60-
bounds,
61-
dimensions.width,
62-
dimensions.height,
63-
options.minZoom ?? minZoom,
64-
options.maxZoom ?? maxZoom,
65-
options.padding ?? DEFAULT_PADDING,
66-
options.offset,
67-
)
68-
69-
transformViewport(x, y, zoom, options?.duration)
70-
},
71-
setCenter: (x, y, options) => {
72-
const nextZoom = typeof options?.zoom !== 'undefined' ? options.zoom : maxZoom
73-
const centerX = dimensions.width / 2 - x * nextZoom
74-
const centerY = dimensions.height / 2 - y * nextZoom
9+
const state = $(useVueFlow({ id: vueFlowId }))
7510

76-
transformViewport(centerX, centerY, nextZoom, options?.duration)
77-
},
78-
fitBounds: (bounds, options = { padding: DEFAULT_PADDING }) => {
79-
const { x, y, zoom } = getTransformForBounds(bounds, dimensions.width, dimensions.height, minZoom, maxZoom, options.padding)
11+
const viewportHelper = useViewport(state as State, state as unknown as ComputedGetters)
8012

81-
transformViewport(x, y, zoom, options?.duration)
82-
},
83-
project: (position) => pointToRendererPoint(position, viewport, snapToGrid, snapGrid),
84-
}
85-
86-
function zoom(scale: number, duration?: number) {
87-
if (d3Selection && d3Zoom) {
88-
d3Zoom.scaleBy(transition(d3Selection, duration), scale)
89-
}
90-
}
91-
92-
function transformViewport(x: number, y: number, zoom: number, duration?: number) {
93-
// enforce translate extent
94-
const { x: clampedX, y: clampedY } = clampPosition({ x: -x, y: -y }, translateExtent)
95-
96-
const nextTransform = zoomIdentity.translate(-clampedX, -clampedY).scale(zoom)
97-
98-
if (d3Selection && d3Zoom) {
99-
d3Zoom.transform(transition(d3Selection, duration), nextTransform)
100-
}
13+
return {
14+
fitView: (params) => viewportHelper.value.fitView(params),
15+
zoomIn: (transitionOpts) => viewportHelper.value.zoomIn(transitionOpts),
16+
zoomOut: (transitionOpts) => viewportHelper.value.zoomOut(transitionOpts),
17+
zoomTo: (zoomLevel, transitionOpts) => viewportHelper.value.zoomTo(zoomLevel, transitionOpts),
18+
setTransform: (params, transitionOpts) => viewportHelper.value.setTransform(params, transitionOpts),
19+
getTransform: () => viewportHelper.value.getTransform(),
20+
setCenter: (x, y, opts) => viewportHelper.value.setCenter(x, y, opts),
21+
fitBounds: (params, opts) => viewportHelper.value.fitBounds(params, opts),
22+
project: (params) => viewportHelper.value.project(params),
10123
}
10224
}
103-
104-
function transition(selection: D3Selection, ms = 0) {
105-
return selection.transition().duration(ms)
106-
}

0 commit comments

Comments
 (0)