refactor(useZoomPanHelper): add getTransform, getZoom, rename transform to getTransform closes #1746

This commit is contained in:
moklick
2021-12-07 01:59:57 +01:00
parent 731918dc13
commit b5bba7dc70
3 changed files with 27 additions and 8 deletions
+22 -7
View File
@@ -13,7 +13,9 @@ const initialZoomPanHelper: ZoomPanHelperFunctions = {
zoomIn: () => {}, zoomIn: () => {},
zoomOut: () => {}, zoomOut: () => {},
zoomTo: (_: number) => {}, zoomTo: (_: number) => {},
transform: (_: FlowTransform) => {}, getZoom: () => 1,
setTransform: (_: FlowTransform) => {},
getTransform: () => ({ x: 0, y: 0, zoom: 1 }),
fitView: (_: FitViewParams = { padding: DEFAULT_PADDING, includeHiddenNodes: false }) => {}, fitView: (_: FitViewParams = { padding: DEFAULT_PADDING, includeHiddenNodes: false }) => {},
setCenter: (_: number, __: number) => {}, setCenter: (_: number, __: number) => {},
fitBounds: (_: Rect) => {}, fitBounds: (_: Rect) => {},
@@ -39,12 +41,18 @@ const useZoomPanHelper = (): ZoomPanHelperFunctions => {
return { return {
zoomIn: (options) => d3Zoom.scaleBy(getTransition(d3Selection, options?.duration), 1.2), zoomIn: (options) => d3Zoom.scaleBy(getTransition(d3Selection, options?.duration), 1.2),
zoomOut: (options) => d3Zoom.scaleBy(getTransition(d3Selection, options?.duration), 1 / 1.2), zoomOut: (options) => d3Zoom.scaleBy(getTransition(d3Selection, options?.duration), 1 / 1.2),
zoomTo: (zoomLevel, options) => zoomTo: (zoomLevel, options) => d3Zoom.scaleTo(getTransition(d3Selection, options?.duration), zoomLevel),
d3Zoom.scaleTo(getTransition(d3Selection, options?.duration), zoomLevel), getZoom: () => {
transform: (transform: FlowTransform) => { const [, , zoom] = store.getState().transform;
return zoom;
},
setTransform: (transform, options) => {
const nextTransform = zoomIdentity.translate(transform.x, transform.y).scale(transform.zoom); const nextTransform = zoomIdentity.translate(transform.x, transform.y).scale(transform.zoom);
d3Zoom.transform(getTransition(d3Selection, options?.duration), nextTransform);
d3Zoom.transform(getTransition(d3Selection), nextTransform); },
getTransform: () => {
const [x, y, zoom] = store.getState().transform;
return { x, y, zoom };
}, },
fitView: (options) => { fitView: (options) => {
const { nodeInternals, width, height, minZoom, maxZoom } = store.getState(); const { nodeInternals, width, height, minZoom, maxZoom } = store.getState();
@@ -81,7 +89,14 @@ const useZoomPanHelper = (): ZoomPanHelperFunctions => {
}, },
fitBounds: (bounds, options) => { fitBounds: (bounds, options) => {
const { width, height, minZoom, maxZoom } = store.getState(); const { width, height, minZoom, maxZoom } = store.getState();
const [x, y, zoom] = getTransformForBounds(bounds, width, height, minZoom, maxZoom, options?.padding ?? DEFAULT_PADDING); const [x, y, zoom] = getTransformForBounds(
bounds,
width,
height,
minZoom,
maxZoom,
options?.padding ?? DEFAULT_PADDING
);
const transform = zoomIdentity.translate(x, y).scale(zoom); const transform = zoomIdentity.translate(x, y).scale(zoom);
d3Zoom.transform(getTransition(d3Selection, options?.duration), transform); d3Zoom.transform(getTransition(d3Selection, options?.duration), transform);
+3 -1
View File
@@ -121,7 +121,9 @@ export interface ZoomPanHelperFunctions {
zoomIn: (options?: ZoomPanHelperFunctionOptions) => void; zoomIn: (options?: ZoomPanHelperFunctionOptions) => void;
zoomOut: (options?: ZoomPanHelperFunctionOptions) => void; zoomOut: (options?: ZoomPanHelperFunctionOptions) => void;
zoomTo: (zoomLevel: number, options?: ZoomPanHelperFunctionOptions) => void; zoomTo: (zoomLevel: number, options?: ZoomPanHelperFunctionOptions) => void;
transform: (transform: FlowTransform, options?: ZoomPanHelperFunctionOptions) => void; getZoom: () => number;
setTransform: (transform: FlowTransform, options?: ZoomPanHelperFunctionOptions) => void;
getTransform: () => FlowTransform;
fitView: FitView; fitView: FitView;
setCenter: (x: number, y: number, options?: SetCenterOptions) => void; setCenter: (x: number, y: number, options?: SetCenterOptions) => void;
fitBounds: (bounds: Rect, options?: FitBoundsOptions) => void; fitBounds: (bounds: Rect, options?: FitBoundsOptions) => void;
+2
View File
@@ -104,6 +104,8 @@ export type NodeDimensionUpdate = {
}; };
export type NodeInternalsItem = Node & { export type NodeInternalsItem = Node & {
width: number;
height: number;
positionAbsolute: XYPosition; positionAbsolute: XYPosition;
z: number; z: number;
handleBounds?: NodeHandleBounds; handleBounds?: NodeHandleBounds;