fix(selection): dont render selection when another node gets selected
This commit is contained in:
@@ -51,6 +51,7 @@ export default (NodeComponent: ComponentType<NodeComponentProps>) => {
|
|||||||
const updateNodeDimensions = useStoreActions((actions) => actions.updateNodeDimensions);
|
const updateNodeDimensions = useStoreActions((actions) => actions.updateNodeDimensions);
|
||||||
const setSelectedElements = useStoreActions((actions) => actions.setSelectedElements);
|
const setSelectedElements = useStoreActions((actions) => actions.setSelectedElements);
|
||||||
const updateNodePos = useStoreActions((actions) => actions.updateNodePos);
|
const updateNodePos = useStoreActions((actions) => actions.updateNodePos);
|
||||||
|
const unsetNodesSelection = useStoreActions((actions) => actions.unsetNodesSelection);
|
||||||
|
|
||||||
const nodeElement = useRef<HTMLDivElement>(null);
|
const nodeElement = useRef<HTMLDivElement>(null);
|
||||||
const [offset, setOffset] = useState({ x: 0, y: 0 });
|
const [offset, setOffset] = useState({ x: 0, y: 0 });
|
||||||
@@ -104,6 +105,7 @@ export default (NodeComponent: ComponentType<NodeComponentProps>) => {
|
|||||||
(event: MouseEvent) => {
|
(event: MouseEvent) => {
|
||||||
if (!isDraggable) {
|
if (!isDraggable) {
|
||||||
if (isSelectable) {
|
if (isSelectable) {
|
||||||
|
unsetNodesSelection();
|
||||||
setSelectedElements({ id: node.id, type: node.type } as Node);
|
setSelectedElements({ id: node.id, type: node.type } as Node);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,6 +134,7 @@ export default (NodeComponent: ComponentType<NodeComponentProps>) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (selectNodesOnDrag && isSelectable) {
|
if (selectNodesOnDrag && isSelectable) {
|
||||||
|
unsetNodesSelection();
|
||||||
setSelectedElements({ id: node.id, type: node.type } as Node);
|
setSelectedElements({ id: node.id, type: node.type } as Node);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export default ({
|
|||||||
}: NodesSelectionProps) => {
|
}: NodesSelectionProps) => {
|
||||||
const [tX, tY, tScale] = useStoreState((state) => state.transform);
|
const [tX, tY, tScale] = useStoreState((state) => state.transform);
|
||||||
const selectedNodesBbox = useStoreState((state) => state.selectedNodesBbox);
|
const selectedNodesBbox = useStoreState((state) => state.selectedNodesBbox);
|
||||||
|
const selectionActive = useStoreState((state) => state.selectionActive);
|
||||||
const selectedElements = useStoreState((state) => state.selectedElements);
|
const selectedElements = useStoreState((state) => state.selectedElements);
|
||||||
const snapToGrid = useStoreState((state) => state.snapToGrid);
|
const snapToGrid = useStoreState((state) => state.snapToGrid);
|
||||||
const snapGrid = useStoreState((state) => state.snapGrid);
|
const snapGrid = useStoreState((state) => state.snapGrid);
|
||||||
@@ -34,10 +35,6 @@ export default ({
|
|||||||
|
|
||||||
const grid = (snapToGrid ? snapGrid : [1, 1])! as [number, number];
|
const grid = (snapToGrid ? snapGrid : [1, 1])! as [number, number];
|
||||||
|
|
||||||
if (!selectedElements) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const selectedNodes = useMemo(
|
const selectedNodes = useMemo(
|
||||||
() =>
|
() =>
|
||||||
selectedElements
|
selectedElements
|
||||||
@@ -109,6 +106,10 @@ export default ({
|
|||||||
[selectedNodesBbox]
|
[selectedNodesBbox]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (!selectedElements || selectionActive) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="react-flow__nodesselection" style={style}>
|
<div className="react-flow__nodesselection" style={style}>
|
||||||
<ReactDraggable
|
<ReactDraggable
|
||||||
|
|||||||
+2
-2
@@ -312,9 +312,9 @@ export const storeModel: StoreModel = {
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
unsetUserSelection: action((state) => {
|
unsetUserSelection: action((state) => {
|
||||||
const selectedNodes = getNodesInside(state.nodes, state.userSelectionRect, state.transform);
|
const selectedNodes = state.selectedElements?.filter(isNode);
|
||||||
|
|
||||||
if (!selectedNodes.length) {
|
if (!selectedNodes) {
|
||||||
state.selectionActive = false;
|
state.selectionActive = false;
|
||||||
state.userSelectionRect = { ...state.userSelectionRect, draw: false };
|
state.userSelectionRect = { ...state.userSelectionRect, draw: false };
|
||||||
state.nodesSelectionActive = false;
|
state.nodesSelectionActive = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user