diff --git a/examples/react/src/examples/UseOnSelectionChange/index.tsx b/examples/react/src/examples/UseOnSelectionChange/index.tsx index fdbe124a..460ee9c3 100644 --- a/examples/react/src/examples/UseOnSelectionChange/index.tsx +++ b/examples/react/src/examples/UseOnSelectionChange/index.tsx @@ -10,6 +10,7 @@ import { useEdgesState, useOnSelectionChange, OnSelectionChangeParams, + Panel, } from '@xyflow/react'; const initialNodes: Node[] = [ @@ -51,6 +52,12 @@ const Flow = () => { const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes); const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); const onConnect = useCallback((params: Edge | Connection) => setEdges((els) => addEdge(params, els)), [setEdges]); + const [elementsSelectable, setElementsSelectable] = useState(true); + const [secondLoggerActive, setSecondLoggerActive] = useState(true); + + const toggleSecondLogger = () => { + setSecondLoggerActive(!secondLoggerActive); + }; return ( { onNodesChange={onNodesChange} onEdgesChange={onEdgesChange} onConnect={onConnect} - /> - ); -}; + elementsSelectable={elementsSelectable} + > + + + + -const WrappedFlow = () => { - const [secondLoggerActive, setSecondLoggerActive] = useState(true); - - const toggleSecondLogger = () => { - setSecondLoggerActive(!secondLoggerActive); - }; - - return ( - - {secondLoggerActive && } -
- -
-
+
); }; -export default WrappedFlow; +export default Flow; diff --git a/packages/react/src/components/SelectionListener/index.tsx b/packages/react/src/components/SelectionListener/index.tsx index 04c46416..89ed2c26 100644 --- a/packages/react/src/components/SelectionListener/index.tsx +++ b/packages/react/src/components/SelectionListener/index.tsx @@ -19,13 +19,13 @@ const selector = (s: ReactFlowState) => { const selectedEdges = []; for (const [, node] of s.nodeLookup) { - if (node.selected && (s.elementsSelectable || node.selectable)) { + if (node.selected) { selectedNodes.push(node.internals.userNode); } } for (const [, edge] of s.edgeLookup) { - if (edge.selected && (s.elementsSelectable || edge.selectable)) { + if (edge.selected) { selectedEdges.push(edge); } } diff --git a/packages/react/src/store/index.ts b/packages/react/src/store/index.ts index 7682dc90..e2fedee3 100644 --- a/packages/react/src/store/index.ts +++ b/packages/react/src/store/index.ts @@ -297,7 +297,11 @@ const createStore = ({ get().panZoom?.setClickDistance(clickDistance); }, resetSelectedElements: () => { - const { edges, nodes, triggerNodeChanges, triggerEdgeChanges } = get(); + const { edges, nodes, triggerNodeChanges, triggerEdgeChanges, elementsSelectable } = get(); + + if (!elementsSelectable) { + return; + } const nodeChanges = nodes.reduce( (res, node) => (node.selected ? [...res, createSelectionChange(node.id, false)] : res),