refactor(wrapNode): simplify mouse handler
This commit is contained in:
@@ -11,7 +11,6 @@ const selector = (s: ReactFlowState) => ({
|
||||
addSelectedNodes: s.addSelectedNodes,
|
||||
setNodesSelectionActive: s.setNodesSelectionActive,
|
||||
updateNodePosition: s.updateNodePosition,
|
||||
updateNodeDimensions: s.updateNodeDimensions,
|
||||
unselectNodesAndEdges: s.unselectNodesAndEdges,
|
||||
});
|
||||
|
||||
@@ -53,75 +52,58 @@ export default (NodeComponent: ComponentType<NodeProps>) => {
|
||||
noPanClassName,
|
||||
noDragClassName,
|
||||
}: WrapNodeProps) => {
|
||||
const {
|
||||
addSelectedNodes,
|
||||
unselectNodesAndEdges,
|
||||
setNodesSelectionActive,
|
||||
updateNodePosition,
|
||||
// updateNodeDimensions,
|
||||
} = useStore(selector, shallow);
|
||||
const { addSelectedNodes, unselectNodesAndEdges, setNodesSelectionActive, updateNodePosition } = useStore(
|
||||
selector,
|
||||
shallow
|
||||
);
|
||||
const nodeElement = useRef<HTMLDivElement>(null);
|
||||
|
||||
const node = useMemo(() => ({ id, type, position: { x: xPos, y: yPos }, data }), [id, type, xPos, yPos, data]);
|
||||
const grid = useMemo(() => (snapToGrid ? snapGrid : [1, 1])! as [number, number], [snapToGrid, snapGrid]);
|
||||
|
||||
const hasPointerEvents = isSelectable || isDraggable || onClick || onMouseEnter || onMouseMove || onMouseLeave;
|
||||
const nodeStyle: CSSProperties = useMemo(
|
||||
() => ({
|
||||
zIndex,
|
||||
transform: `translate(${xPos}px,${yPos}px)`,
|
||||
pointerEvents:
|
||||
isSelectable || isDraggable || onClick || onMouseEnter || onMouseMove || onMouseLeave ? 'all' : 'none',
|
||||
pointerEvents: hasPointerEvents ? 'all' : 'none',
|
||||
// prevents jumping of nodes on start
|
||||
opacity: isInitialized ? 1 : 0,
|
||||
...style,
|
||||
}),
|
||||
[
|
||||
xPos,
|
||||
yPos,
|
||||
isSelectable,
|
||||
isDraggable,
|
||||
onClick,
|
||||
isInitialized,
|
||||
style,
|
||||
onMouseEnter,
|
||||
onMouseMove,
|
||||
onMouseLeave,
|
||||
isParent,
|
||||
zIndex,
|
||||
]
|
||||
[zIndex, xPos, yPos, hasPointerEvents, isInitialized, style]
|
||||
);
|
||||
|
||||
const onMouseEnterHandler = useMemo(() => {
|
||||
if (!onMouseEnter || dragging) {
|
||||
return;
|
||||
}
|
||||
const node = useMemo(() => ({ id, type, position: { x: xPos, y: yPos }, data }), [id, type, xPos, yPos, data]);
|
||||
const grid = useMemo(() => (snapToGrid ? snapGrid : [1, 1])! as [number, number], [snapToGrid, snapGrid]);
|
||||
|
||||
return (event: MouseEvent) => onMouseEnter(event, node);
|
||||
}, [onMouseEnter, dragging, node]);
|
||||
const onMouseEnterHandler = useCallback(
|
||||
(event: MouseEvent) => {
|
||||
if (onMouseEnter && !dragging) {
|
||||
onMouseEnter(event, node);
|
||||
}
|
||||
},
|
||||
[onMouseEnter, dragging, node]
|
||||
);
|
||||
|
||||
const onMouseMoveHandler = useMemo(() => {
|
||||
if (!onMouseMove || dragging) {
|
||||
return;
|
||||
}
|
||||
const onMouseMoveHandler = useCallback(
|
||||
(event: MouseEvent) => {
|
||||
if (onMouseMove && !dragging) {
|
||||
onMouseMove(event, node);
|
||||
}
|
||||
},
|
||||
[onMouseMove, dragging, node]
|
||||
);
|
||||
|
||||
return (event: MouseEvent) => onMouseMove(event, node);
|
||||
}, [onMouseMove, dragging, node]);
|
||||
const onMouseLeaveHandler = useCallback(
|
||||
(event: MouseEvent) => {
|
||||
if (onMouseLeave && !dragging) {
|
||||
onMouseLeave?.(event, node);
|
||||
}
|
||||
},
|
||||
[onMouseLeave, dragging, node]
|
||||
);
|
||||
|
||||
const onMouseLeaveHandler = useMemo(() => {
|
||||
if (!onMouseLeave || dragging) {
|
||||
return;
|
||||
}
|
||||
|
||||
return (event: MouseEvent) => onMouseLeave(event, node);
|
||||
}, [onMouseLeave, dragging, node]);
|
||||
|
||||
const onContextMenuHandler = useMemo(() => {
|
||||
if (!onContextMenu) {
|
||||
return;
|
||||
}
|
||||
|
||||
return (event: MouseEvent) => onContextMenu(event, node);
|
||||
}, [onContextMenu, node]);
|
||||
const onContextMenuHandler = useCallback(
|
||||
(event: MouseEvent) => onContextMenu?.(event, node),
|
||||
[onContextMenu, node]
|
||||
);
|
||||
|
||||
const onSelectNodeHandler = useCallback(
|
||||
(event: MouseEvent) => {
|
||||
|
||||
Reference in New Issue
Block a user