Merge pull request #5012 from xyflow/refactor/screentoflow

chore(screenToflowPosition): use correct defaults add snapGrid
This commit is contained in:
Moritz Klack
2025-02-12 13:30:00 +01:00
committed by GitHub
2 changed files with 14 additions and 4 deletions

View File

@@ -0,0 +1,5 @@
---
'@xyflow/react': patch
---
Add snapGrid option to screenToFlowPosition and set snapToGrid to false

View File

@@ -7,6 +7,7 @@ import {
type XYPosition,
rendererPointToPoint,
getDimensions,
SnapGrid,
} from '@xyflow/system';
import { useStoreApi } from '../hooks/useStore';
@@ -119,21 +120,25 @@ const useViewportHelper = (): ViewportHelperFunctions => {
return Promise.resolve(true);
},
screenToFlowPosition: (clientPosition: XYPosition, options: { snapToGrid: boolean } = { snapToGrid: true }) => {
const { transform, snapGrid, domNode } = store.getState();
screenToFlowPosition: (
clientPosition: XYPosition,
options: { snapToGrid?: boolean; snapGrid?: SnapGrid } = {}
) => {
const { transform, snapGrid, snapToGrid, domNode } = store.getState();
if (!domNode) {
return clientPosition;
}
const { x: domX, y: domY } = domNode.getBoundingClientRect();
const correctedPosition = {
x: clientPosition.x - domX,
y: clientPosition.y - domY,
};
const _snapGrid = options.snapGrid ?? snapGrid;
const _snapToGrid = options.snapToGrid ?? snapToGrid;
return pointToRendererPoint(correctedPosition, transform, options.snapToGrid, snapGrid);
return pointToRendererPoint(correctedPosition, transform, _snapToGrid, _snapGrid);
},
flowToScreenPosition: (flowPosition: XYPosition) => {
const { transform, domNode } = store.getState();