Merge pull request #2096 from furkankly/refactor/d3-drag-handle-selector
Implemented handleSelector functionality
This commit is contained in:
@@ -33,6 +33,6 @@ Cypress.Commands.add('drag', (selector, { x, y }) => {
|
|||||||
.trigger('mousedown', { which: 1, view: window })
|
.trigger('mousedown', { which: 1, view: window })
|
||||||
.trigger('mousemove', { clientX: x, clientY: y, force: true })
|
.trigger('mousemove', { clientX: x, clientY: y, force: true })
|
||||||
.wait(50)
|
.wait(50)
|
||||||
.trigger('mouseup', { view: window, force: tru })
|
.trigger('mouseup', { view: window, force: true })
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -58,8 +58,7 @@ export default (NodeComponent: ComponentType<NodeProps>) => {
|
|||||||
noPanClassName,
|
noPanClassName,
|
||||||
noDragClassName,
|
noDragClassName,
|
||||||
}: WrapNodeProps) => {
|
}: WrapNodeProps) => {
|
||||||
const draggingRef = useRef<boolean>(false);
|
const [dragging, setDragging] = useState(false);
|
||||||
const [dragging, setDragging] = useState<boolean>(false);
|
|
||||||
const store = useStoreApi();
|
const store = useStoreApi();
|
||||||
const { addSelectedNodes, unselectNodesAndEdges, updateNodePosition, updateNodeDimensions } = useStore(
|
const { addSelectedNodes, unselectNodesAndEdges, updateNodePosition, updateNodeDimensions } = useStore(
|
||||||
selector,
|
selector,
|
||||||
@@ -88,22 +87,20 @@ export default (NodeComponent: ComponentType<NodeProps>) => {
|
|||||||
|
|
||||||
const onSelectNodeHandler = useCallback(
|
const onSelectNodeHandler = useCallback(
|
||||||
(event: MouseEvent) => {
|
(event: MouseEvent) => {
|
||||||
if (!isDraggable) {
|
if (isSelectable) {
|
||||||
if (isSelectable) {
|
store.setState({ nodesSelectionActive: false });
|
||||||
store.setState({ nodesSelectionActive: false });
|
|
||||||
|
|
||||||
if (!selected) {
|
if (!selected) {
|
||||||
addSelectedNodes([id]);
|
addSelectedNodes([id]);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (onClick) {
|
|
||||||
const node = store.getState().nodeInternals.get(id)!;
|
|
||||||
onClick(event, { ...node });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (onClick) {
|
||||||
|
const node = store.getState().nodeInternals.get(id)!;
|
||||||
|
onClick(event, { ...node });
|
||||||
|
}
|
||||||
},
|
},
|
||||||
[isSelectable, selected, isDraggable, onClick, id]
|
[isSelectable, selected, onClick, id]
|
||||||
);
|
);
|
||||||
|
|
||||||
const onDragStart = useCallback(
|
const onDragStart = useCallback(
|
||||||
@@ -136,7 +133,6 @@ export default (NodeComponent: ComponentType<NodeProps>) => {
|
|||||||
(event: UseDragEvent, dragPos: UseDragData) => {
|
(event: UseDragEvent, dragPos: UseDragData) => {
|
||||||
updateNodePosition({ id, diff: { x: dragPos.dx, y: dragPos.dy } });
|
updateNodePosition({ id, diff: { x: dragPos.dx, y: dragPos.dy } });
|
||||||
setDragging(true);
|
setDragging(true);
|
||||||
draggingRef.current = true;
|
|
||||||
|
|
||||||
if (onNodeDrag) {
|
if (onNodeDrag) {
|
||||||
const node = store.getState().nodeInternals.get(id)!;
|
const node = store.getState().nodeInternals.get(id)!;
|
||||||
@@ -158,31 +154,14 @@ export default (NodeComponent: ComponentType<NodeProps>) => {
|
|||||||
|
|
||||||
const onDragStop = useCallback(
|
const onDragStop = useCallback(
|
||||||
(event: UseDragEvent) => {
|
(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);
|
setDragging(false);
|
||||||
|
if (onNodeDragStop) {
|
||||||
if (onNodeDragStop && node) {
|
const node = store.getState().nodeInternals.get(id)!;
|
||||||
onNodeDragStop(event.sourceEvent as MouseEvent, { ...node });
|
onNodeDragStop(event.sourceEvent as MouseEvent, { ...node });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[id, onNodeDragStop, onClick]
|
[id, onNodeDragStop]
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -110,11 +110,12 @@ function useDrag({
|
|||||||
dx: pos.x,
|
dx: pos.x,
|
||||||
dy: pos.y,
|
dy: pos.y,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
event.on('end', (event) => {
|
||||||
|
onStop(event);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.on('end', (event) => {
|
|
||||||
onStop(event);
|
|
||||||
})
|
|
||||||
.filter((event: any) => {
|
.filter((event: any) => {
|
||||||
const filter = !event.ctrlKey && !event.button && !event.target.className.includes(noDragClassName);
|
const filter = !event.ctrlKey && !event.button && !event.target.className.includes(noDragClassName);
|
||||||
return handleSelector
|
return handleSelector
|
||||||
|
|||||||
Reference in New Issue
Block a user