fix(no-drag): handle noDragClassName correctly closes #2172
This commit is contained in:
@@ -5,13 +5,7 @@ import { select } from 'd3-selection';
|
|||||||
import { useStoreApi } from '../../store';
|
import { useStoreApi } from '../../store';
|
||||||
import { pointToRendererPoint } from '../../utils/graph';
|
import { pointToRendererPoint } from '../../utils/graph';
|
||||||
import { NodeDragItem, NodeDragHandler, XYPosition } from '../../types';
|
import { NodeDragItem, NodeDragHandler, XYPosition } from '../../types';
|
||||||
import {
|
import { getDragItems, getEventHandlerParams, getParentNodePosition, hasSelector, updatePosition } from './utils';
|
||||||
getDragItems,
|
|
||||||
getEventHandlerParams,
|
|
||||||
getParentNodePosition,
|
|
||||||
selectorExistsTargetToNode,
|
|
||||||
updatePosition,
|
|
||||||
} from './utils';
|
|
||||||
import { handleNodeClick } from '../../components/Nodes/utils';
|
import { handleNodeClick } from '../../components/Nodes/utils';
|
||||||
|
|
||||||
export type UseDragEvent = D3DragEvent<HTMLDivElement, null, SubjectPosition>;
|
export type UseDragEvent = D3DragEvent<HTMLDivElement, null, SubjectPosition>;
|
||||||
@@ -136,11 +130,13 @@ function useDrag({
|
|||||||
})
|
})
|
||||||
.filter((event: MouseEvent) => {
|
.filter((event: MouseEvent) => {
|
||||||
const target = event.target as HTMLDivElement;
|
const target = event.target as HTMLDivElement;
|
||||||
const filter =
|
const isDraggable =
|
||||||
!event.ctrlKey && !event.button && (!noDragClassName || !target.classList?.contains?.(noDragClassName));
|
!event.ctrlKey &&
|
||||||
return handleSelector
|
!event.button &&
|
||||||
? selectorExistsTargetToNode(target as HTMLDivElement, handleSelector, nodeRef) && filter
|
(!noDragClassName || !hasSelector(target, `.${noDragClassName}`, nodeRef)) &&
|
||||||
: filter;
|
(!handleSelector || hasSelector(target, handleSelector, nodeRef));
|
||||||
|
|
||||||
|
return isDraggable;
|
||||||
});
|
});
|
||||||
|
|
||||||
selection.call(dragHandler);
|
selection.call(dragHandler);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export function getParentNodePosition(nodeInternals: NodeInternals, nodeId?: str
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function selectorExistsTargetToNode(target: Element, selector: string, nodeRef: RefObject<Element>): boolean {
|
export function hasSelector(target: Element, selector: string, nodeRef: RefObject<Element>): boolean {
|
||||||
let current = target;
|
let current = target;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|||||||
Reference in New Issue
Block a user