refactor(userSelection): cleanup

This commit is contained in:
moklick
2022-05-17 15:17:55 +02:00
parent ac3f830ee8
commit 4d3ff60cb1
+14 -16
View File
@@ -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