fix(wrapNode): repair onClick

This commit is contained in:
moklick
2022-05-10 15:35:40 +02:00
parent 5737d133d4
commit fa582daa7a
2 changed files with 28 additions and 10 deletions
+25 -6
View File
@@ -58,6 +58,8 @@ export default (NodeComponent: ComponentType<NodeProps>) => {
noPanClassName,
noDragClassName,
}: WrapNodeProps) => {
const draggingRef = useRef<boolean>(false);
const [dragging, setDragging] = useState<boolean>(false);
const store = useStoreApi();
const { addSelectedNodes, unselectNodesAndEdges, updateNodePosition, updateNodeDimensions } = useStore(
selector,
@@ -130,13 +132,12 @@ export default (NodeComponent: ComponentType<NodeProps>) => {
[id, selected, selectNodesOnDrag, isSelectable, onNodeDragStart]
);
// As one of the props passed to a custom node
const [dragging, setDragging] = useState(false);
const onDrag = useCallback(
(event: UseDragEvent, dragPos: UseDragData) => {
updateNodePosition({ id, diff: { x: dragPos.dx, y: dragPos.dy } });
setDragging(true);
draggingRef.current = true;
if (onNodeDrag) {
const node = store.getState().nodeInternals.get(id)!;
onNodeDrag(event.sourceEvent as MouseEvent, {
@@ -157,13 +158,31 @@ export default (NodeComponent: ComponentType<NodeProps>) => {
const onDragStop = useCallback(
(event: UseDragEvent) => {
let node;
if (onClick || onNodeDragStop) {
node = store.getState().nodeInternals.get(id)!;
}
if (!draggingRef.current) {
if (isSelectable && !selectNodesOnDrag && !selected) {
addSelectedNodes([id]);
}
if (onClick && node) {
onClick(event.sourceEvent as MouseEvent, { ...node });
}
return;
}
draggingRef.current = false;
setDragging(false);
if (onNodeDragStop) {
const node = store.getState().nodeInternals.get(id)!;
if (onNodeDragStop && node) {
onNodeDragStop(event.sourceEvent as MouseEvent, { ...node });
}
},
[id, onNodeDragStop]
[id, onNodeDragStop, onClick]
);
useEffect(() => {
+3 -4
View File
@@ -110,12 +110,11 @@ function useDrag({
dx: pos.x,
dy: pos.y,
});
event.on('end', (event) => {
onStop(event);
});
}
})
.on('end', (event) => {
onStop(event);
})
.filter((event: any) => {
const filter = !event.ctrlKey && !event.button && !event.target.className.includes(noDragClassName);
return handleSelector