refactor(userSelection): cleanup
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
* The user selection rectangle gets displayed when a user drags the mouse while pressing shift
|
* The user selection rectangle gets displayed when a user drags the mouse while pressing shift
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import React, { memo, useState, useRef, useCallback } from 'react';
|
import React, { memo, useState, useRef } from 'react';
|
||||||
import shallow from 'zustand/shallow';
|
import shallow from 'zustand/shallow';
|
||||||
|
|
||||||
import { useStore, useStoreApi } from '../../store';
|
import { useStore, useStoreApi } from '../../store';
|
||||||
@@ -52,16 +52,20 @@ export default memo(({ selectionKeyPressed }: UserSelectionProps) => {
|
|||||||
|
|
||||||
const renderUserSelectionPane = userSelectionActive || selectionKeyPressed;
|
const renderUserSelectionPane = userSelectionActive || selectionKeyPressed;
|
||||||
|
|
||||||
const resetUserSelection = useCallback(() => {
|
if (!elementsSelectable || !renderUserSelectionPane) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const resetUserSelection = () => {
|
||||||
setUserSelectionRect(initialRect);
|
setUserSelectionRect(initialRect);
|
||||||
|
|
||||||
store.setState({ userSelectionActive: false });
|
store.setState({ userSelectionActive: false });
|
||||||
|
|
||||||
prevSelectedNodesCount.current = 0;
|
prevSelectedNodesCount.current = 0;
|
||||||
prevSelectedEdgesCount.current = 0;
|
prevSelectedEdgesCount.current = 0;
|
||||||
}, []);
|
};
|
||||||
|
|
||||||
const onMouseDown = useCallback((event: React.MouseEvent): void => {
|
const onMouseDown = (event: React.MouseEvent): void => {
|
||||||
const reactFlowNode = (event.target as Element).closest('.react-flow')!;
|
const reactFlowNode = (event.target as Element).closest('.react-flow')!;
|
||||||
containerBounds.current = reactFlowNode.getBoundingClientRect();
|
containerBounds.current = reactFlowNode.getBoundingClientRect();
|
||||||
|
|
||||||
@@ -78,7 +82,7 @@ export default memo(({ selectionKeyPressed }: UserSelectionProps) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
store.setState({ userSelectionActive: true, nodesSelectionActive: false });
|
store.setState({ userSelectionActive: true, nodesSelectionActive: false });
|
||||||
}, []);
|
};
|
||||||
|
|
||||||
const onMouseMove = (event: React.MouseEvent): void => {
|
const onMouseMove = (event: React.MouseEvent): void => {
|
||||||
if (!selectionKeyPressed || !userSelectionRect.draw || !containerBounds.current) {
|
if (!selectionKeyPressed || !userSelectionRect.draw || !containerBounds.current) {
|
||||||
@@ -98,7 +102,7 @@ export default memo(({ selectionKeyPressed }: UserSelectionProps) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const { nodeInternals, edges, transform, onNodesChange, onEdgesChange } = store.getState();
|
const { nodeInternals, edges, transform, onNodesChange, onEdgesChange } = store.getState();
|
||||||
const nodes = Array.from(nodeInternals).map(([_, node]) => node);
|
const nodes = Array.from(nodeInternals.values());
|
||||||
const selectedNodes = getNodesInside(nodeInternals, nextUserSelectRect, transform, false, true);
|
const selectedNodes = getNodesInside(nodeInternals, nextUserSelectRect, transform, false, true);
|
||||||
const selectedEdgeIds = getConnectedEdges(selectedNodes, edges).map((e) => e.id);
|
const selectedEdgeIds = getConnectedEdges(selectedNodes, edges).map((e) => e.id);
|
||||||
const selectedNodeIds = selectedNodes.map((n) => n.id);
|
const selectedNodeIds = selectedNodes.map((n) => n.id);
|
||||||
@@ -122,21 +126,15 @@ export default memo(({ selectionKeyPressed }: UserSelectionProps) => {
|
|||||||
setUserSelectionRect(nextUserSelectRect);
|
setUserSelectionRect(nextUserSelectRect);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onMouseUp = useCallback(() => {
|
const onMouseUp = () => {
|
||||||
store.setState({ nodesSelectionActive: prevSelectedNodesCount.current > 0 });
|
store.setState({ nodesSelectionActive: prevSelectedNodesCount.current > 0 });
|
||||||
|
|
||||||
resetUserSelection();
|
resetUserSelection();
|
||||||
}, []);
|
};
|
||||||
|
|
||||||
const onMouseLeave = useCallback(() => {
|
const onMouseLeave = () => {
|
||||||
store.setState({ nodesSelectionActive: false });
|
store.setState({ nodesSelectionActive: false });
|
||||||
|
|
||||||
resetUserSelection();
|
resetUserSelection();
|
||||||
}, []);
|
};
|
||||||
|
|
||||||
if (!elementsSelectable || !renderUserSelectionPane) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
|||||||
Reference in New Issue
Block a user