feat(useZoomPanHelper) add setCenter func
This commit is contained in:
+2
-1
@@ -6,4 +6,5 @@ cypress/videos
|
|||||||
cypress/screenshots
|
cypress/screenshots
|
||||||
dist
|
dist
|
||||||
.env
|
.env
|
||||||
stats.html
|
stats.html
|
||||||
|
.eslintcache
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useStoreState, useStoreActions } from 'react-flow-renderer';
|
import { useStoreState, useStoreActions } from 'react-flow-renderer';
|
||||||
|
|
||||||
export default () => {
|
const Sidebar = () => {
|
||||||
const nodes = useStoreState((store) => store.nodes);
|
const nodes = useStoreState((store) => store.nodes);
|
||||||
const transform = useStoreState((store) => store.transform);
|
const transform = useStoreState((store) => store.transform);
|
||||||
const setSelectedElements = useStoreActions((actions) => actions.setSelectedElements);
|
const setSelectedElements = useStoreActions((actions) => actions.setSelectedElements);
|
||||||
@@ -32,3 +32,5 @@ export default () => {
|
|||||||
</aside>
|
</aside>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export default Sidebar;
|
||||||
|
|||||||
@@ -53,4 +53,4 @@ const Controls = memo(({ rfInstance, setElements }) => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
export default Controls;
|
export default Controls;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ const initialZoomPanHelper: ZoomPanHelperFunctions = {
|
|||||||
zoomTo: (_: number) => {},
|
zoomTo: (_: number) => {},
|
||||||
transform: (_: FlowTransform) => {},
|
transform: (_: FlowTransform) => {},
|
||||||
fitView: (_: FitViewParams = { padding: 0.1 }) => {},
|
fitView: (_: FitViewParams = { padding: 0.1 }) => {},
|
||||||
|
setCenter: (_: number, __: number) => {},
|
||||||
initialized: false,
|
initialized: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -51,6 +52,16 @@ const usePanZoomHelper = (): ZoomPanHelperFunctions => {
|
|||||||
|
|
||||||
d3Zoom.transform(d3Selection, transform);
|
d3Zoom.transform(d3Selection, transform);
|
||||||
},
|
},
|
||||||
|
setCenter: (x: number, y: number, zoom?: number) => {
|
||||||
|
const { width, height, maxZoom } = store.getState();
|
||||||
|
|
||||||
|
const nextZoom = typeof zoom !== 'undefined' ? zoom : maxZoom;
|
||||||
|
const centerX = width / 2 - x * nextZoom;
|
||||||
|
const centerY = height / 2 - y * nextZoom;
|
||||||
|
const transform = zoomIdentity.translate(centerX, centerY).scale(nextZoom);
|
||||||
|
|
||||||
|
d3Zoom.transform(d3Selection, transform);
|
||||||
|
},
|
||||||
initialized: true,
|
initialized: true,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -354,6 +354,7 @@ export interface ZoomPanHelperFunctions {
|
|||||||
zoomTo: (zoomLevel: number) => void;
|
zoomTo: (zoomLevel: number) => void;
|
||||||
transform: (transform: FlowTransform) => void;
|
transform: (transform: FlowTransform) => void;
|
||||||
fitView: (params?: FitViewParams) => void;
|
fitView: (params?: FitViewParams) => void;
|
||||||
|
setCenter: (x: number, y: number, zoom?: number) => void;
|
||||||
initialized: boolean;
|
initialized: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user