Skip to content

Commit

Permalink
refactor(useZoomPanHelper): add getTransform, getZoom, rename transfo…
Browse files Browse the repository at this point in the history
…rm to getTransform closes #1746
  • Loading branch information
moklick committed Dec 7, 2021
1 parent 731918d commit b5bba7d
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 8 deletions.
29 changes: 22 additions & 7 deletions src/hooks/useZoomPanHelper.ts
Expand Up @@ -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) => {},
Expand All @@ -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();
Expand Down Expand Up @@ -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);
Expand Down
4 changes: 3 additions & 1 deletion src/types/general.ts
Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions src/types/nodes.ts
Expand Up @@ -104,6 +104,8 @@ export type NodeDimensionUpdate = {
};

export type NodeInternalsItem = Node & {
width: number;
height: number;
positionAbsolute: XYPosition;
z: number;
handleBounds?: NodeHandleBounds;
Expand Down

0 comments on commit b5bba7d

Please sign in to comment.