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: () => {},
zoomOut: () => {},
zoomTo: (_: number) => {},
transform: (_: FlowTransform) => {},
getZoom: () => 1,
setTransform: (_: FlowTransform) => {},
getTransform: () => ({ x: 0, y: 0, zoom: 1 }),
fitView: (_: FitViewParams = { padding: DEFAULT_PADDING, includeHiddenNodes: false }) => {},
setCenter: (_: number, __: number) => {},
fitBounds: (_: Rect) => {},
@@ -39,12 +41,18 @@ const useZoomPanHelper = (): ZoomPanHelperFunctions => {
return {
zoomIn: (options) => d3Zoom.scaleBy(getTransition(d3Selection, options?.duration), 1.2),
zoomOut: (options) => d3Zoom.scaleBy(getTransition(d3Selection, options?.duration), 1 / 1.2),
zoomTo: (zoomLevel, options) =>
d3Zoom.scaleTo(getTransition(d3Selection, options?.duration), zoomLevel),
transform: (transform: FlowTransform) => {
zoomTo: (zoomLevel, options) => d3Zoom.scaleTo(getTransition(d3Selection, options?.duration), zoomLevel),
getZoom: () => {
const [, , zoom] = store.getState().transform;
return zoom;
},
setTransform: (transform, options) => {
const nextTransform = zoomIdentity.translate(transform.x, transform.y).scale(transform.zoom);
d3Zoom.transform(getTransition(d3Selection), nextTransform);
d3Zoom.transform(getTransition(d3Selection, options?.duration), nextTransform);
},
getTransform: () => {
const [x, y, zoom] = store.getState().transform;
return { x, y, zoom };
},
fitView: (options) => {
const { nodeInternals, width, height, minZoom, maxZoom } = store.getState();
@@ -81,7 +89,14 @@ const useZoomPanHelper = (): ZoomPanHelperFunctions => {
},
fitBounds: (bounds, options) => {
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);
d3Zoom.transform(getTransition(d3Selection, options?.duration), transform);
+3 -1
View File
@@ -121,7 +121,9 @@ export interface ZoomPanHelperFunctions {
zoomIn: (options?: ZoomPanHelperFunctionOptions) => void;
zoomOut: (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;
setCenter: (x: number, y: number, options?: SetCenterOptions) => void;
fitBounds: (bounds: Rect, options?: FitBoundsOptions) => void;
+2
View File
@@ -104,6 +104,8 @@ export type NodeDimensionUpdate = {
};
export type NodeInternalsItem = Node & {
width: number;
height: number;
positionAbsolute: XYPosition;
z: number;
handleBounds?: NodeHandleBounds;