Merge pull request #2096 from furkankly/refactor/d3-drag-handle-selector

Implemented handleSelector functionality
This commit is contained in:
Moritz Klack
2022-05-12 00:05:23 +02:00
committed by GitHub
3 changed files with 19 additions and 39 deletions
+1 -1
View File
@@ -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 })
); );
}); });
+14 -35
View File
@@ -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(() => {
+4 -3
View File
@@ -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