Merge pull request #5455 from Sec-ant/fix/check-visibility

fix: skip resize handler updates when DOM node is not visible
This commit is contained in:
Peter Kogo
2025-09-02 11:52:31 +02:00
committed by GitHub
6 changed files with 75 additions and 40 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@xyflow/react': patch
---
Fix warning when display is set to none on the wrapper div
+5
View File
@@ -0,0 +1,5 @@
---
'@xyflow/svelte': patch
---
Fix style attribute not being propagated to wrapper
+11 -1
View File
@@ -1,4 +1,4 @@
import { MouseEvent, useCallback } from 'react'; import { MouseEvent, useCallback, useState } from 'react';
import { import {
ReactFlow, ReactFlow,
MiniMap, MiniMap,
@@ -134,8 +134,13 @@ const BasicFlow = () => {
}); });
fitView(); fitView();
}; };
const [isHidden, setIsHidden] = useState(false);
const toggleVisibility = () => {
setIsHidden(!isHidden);
};
return ( return (
<>
<ReactFlow <ReactFlow
defaultNodes={initialNodes} defaultNodes={initialNodes}
defaultEdges={initialEdges} defaultEdges={initialEdges}
@@ -148,6 +153,7 @@ const BasicFlow = () => {
onSelectionDrag={printSelectionEvent('selection drag')} onSelectionDrag={printSelectionEvent('selection drag')}
onSelectionDragStop={printSelectionEvent('selection drag stop')} onSelectionDragStop={printSelectionEvent('selection drag stop')}
className="react-flow-basic-example" className="react-flow-basic-example"
style={{ display: isHidden ? 'none' : 'block' }}
minZoom={0.2} minZoom={0.2}
maxZoom={4} maxZoom={4}
fitView fitView
@@ -175,6 +181,10 @@ const BasicFlow = () => {
<button onClick={addNode}>addNode</button> <button onClick={addNode}>addNode</button>
</Panel> </Panel>
</ReactFlow> </ReactFlow>
<button onClick={toggleVisibility} style={{ position: 'absolute', zIndex: 10, right: 10, top: 100 }}>
{isHidden ? 'Show' : 'Hide'} Flow
</button>
</>
); );
}; };
@@ -155,6 +155,8 @@
// console.log(edges.map((edge) => ({ id: edge.id, selected: edge.selected }))); // console.log(edges.map((edge) => ({ id: edge.id, selected: edge.selected })));
edges.forEach((edge) => console.log({ id: edge.id, selected: edge.selected })); edges.forEach((edge) => console.log({ id: edge.id, selected: edge.selected }));
}); });
let hidden = $state(false);
</script> </script>
<!-- oninit={() => console.log('on init')} <!-- oninit={() => console.log('on init')}
@@ -197,6 +199,7 @@
}} --> }} -->
<SvelteFlow <SvelteFlow
style="display:{hidden ? 'none' : 'block'}"
bind:nodes bind:nodes
bind:edges bind:edges
{nodeTypes} {nodeTypes}
@@ -247,7 +250,20 @@
<InitTracker /> <InitTracker />
</SvelteFlow> </SvelteFlow>
<button
class="hide"
onclick={() => {
hidden = !hidden;
}}>Hide/Unhide</button
>
<style> <style>
.hide {
position: absolute;
top: 80px;
right: 15px;
}
:root { :root {
/* --background-color: #ffffdd; */ /* --background-color: #ffffdd; */
--background-pattern-color: #5050ff; --background-pattern-color: #5050ff;
+1 -1
View File
@@ -13,7 +13,7 @@ export function useResizeHandler(domNode: MutableRefObject<HTMLDivElement | null
useEffect(() => { useEffect(() => {
const updateDimensions = () => { const updateDimensions = () => {
if (!domNode.current) { if (!domNode.current || !(domNode.current.checkVisibility?.() ?? true)) {
return false; return false;
} }
const size = getDimensions(domNode.current); const size = getDimensions(domNode.current);
@@ -80,7 +80,6 @@
autoPanOnConnect, autoPanOnConnect,
autoPanOnNodeDrag, autoPanOnNodeDrag,
colorModeSSR, colorModeSSR,
style,
defaultEdgeOptions, defaultEdgeOptions,
elevateNodesOnSelect, elevateNodesOnSelect,
elevateEdgesOnSelect, elevateEdgesOnSelect,