fix(react): viewport shifting on node focus
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@xyflow/react': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fix viewport shifting on node focus
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { ForwardedRef, type CSSProperties } from 'react';
|
import { ForwardedRef, useCallback, type CSSProperties } from 'react';
|
||||||
import cc from 'classcat';
|
import cc from 'classcat';
|
||||||
import { ConnectionLineType, PanOnScrollMode, SelectionMode, infiniteExtent, isMacOs } from '@xyflow/system';
|
import { ConnectionLineType, PanOnScrollMode, SelectionMode, infiniteExtent, isMacOs } from '@xyflow/system';
|
||||||
|
|
||||||
@@ -144,6 +144,7 @@ function ReactFlow<NodeType extends Node = Node, EdgeType extends Edge = Edge>(
|
|||||||
height,
|
height,
|
||||||
colorMode = 'light',
|
colorMode = 'light',
|
||||||
debug,
|
debug,
|
||||||
|
onScroll,
|
||||||
...rest
|
...rest
|
||||||
}: ReactFlowProps<NodeType, EdgeType>,
|
}: ReactFlowProps<NodeType, EdgeType>,
|
||||||
ref: ForwardedRef<HTMLDivElement>
|
ref: ForwardedRef<HTMLDivElement>
|
||||||
@@ -151,10 +152,20 @@ function ReactFlow<NodeType extends Node = Node, EdgeType extends Edge = Edge>(
|
|||||||
const rfId = id || '1';
|
const rfId = id || '1';
|
||||||
const colorModeClassName = useColorModeClass(colorMode);
|
const colorModeClassName = useColorModeClass(colorMode);
|
||||||
|
|
||||||
|
// Undo scroll events, preventing viewport from shifting when nodes outside of it are focused
|
||||||
|
const wrapperOnScroll = useCallback(
|
||||||
|
(e: React.UIEvent<HTMLDivElement>) => {
|
||||||
|
e.currentTarget.scrollTo({ top: 0, left: 0, behavior: 'instant' });
|
||||||
|
onScroll?.(e);
|
||||||
|
},
|
||||||
|
[onScroll]
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
data-testid="rf__wrapper"
|
data-testid="rf__wrapper"
|
||||||
{...rest}
|
{...rest}
|
||||||
|
onScroll={wrapperOnScroll}
|
||||||
style={{ ...style, ...wrapperStyle }}
|
style={{ ...style, ...wrapperStyle }}
|
||||||
ref={ref}
|
ref={ref}
|
||||||
className={cc(['react-flow', className, colorModeClassName])}
|
className={cc(['react-flow', className, colorModeClassName])}
|
||||||
|
|||||||
Reference in New Issue
Block a user