refactor(core): replace computed arg with getter fn
Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
@@ -60,16 +60,16 @@ const NodeWrapper = defineComponent({
|
|||||||
const dragging = useDrag({
|
const dragging = useDrag({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
el: nodeElement,
|
el: nodeElement,
|
||||||
disabled: computed(() => !props.draggable),
|
disabled: () => !props.draggable,
|
||||||
selectable: computed(() => props.selectable),
|
selectable: () => props.selectable,
|
||||||
onStart(event, node, nodes) {
|
onStart(args) {
|
||||||
emit.dragStart({ event, node, nodes, intersections: getIntersectingNodes(node) })
|
emit.dragStart({ ...args, intersections: getIntersectingNodes(node) })
|
||||||
},
|
},
|
||||||
onDrag(event, node, nodes) {
|
onDrag(args) {
|
||||||
emit.drag({ event, node, nodes, intersections: getIntersectingNodes(node) })
|
emit.drag({ ...args, intersections: getIntersectingNodes(node) })
|
||||||
},
|
},
|
||||||
onStop(event, node, nodes) {
|
onStop(args) {
|
||||||
emit.dragStop({ event, node, nodes, intersections: getIntersectingNodes(node) })
|
emit.dragStop({ ...args, intersections: getIntersectingNodes(node) })
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +1,26 @@
|
|||||||
import type { D3DragEvent, DragBehavior, SubjectPosition } from 'd3-drag'
|
import type { D3DragEvent, DragBehavior, SubjectPosition } from 'd3-drag'
|
||||||
import { drag } from 'd3-drag'
|
import { drag } from 'd3-drag'
|
||||||
import { select } from 'd3-selection'
|
import { select } from 'd3-selection'
|
||||||
import type { ComputedRef, Ref } from 'vue'
|
import type { Ref } from 'vue'
|
||||||
import type { NodeDragEvent, NodeDragItem, XYPosition } from '~/types'
|
import type { NodeDragEvent, NodeDragItem, XYPosition } from '~/types'
|
||||||
|
import type { MaybeRefOrGetter } from '~/types/utils'
|
||||||
|
|
||||||
export type UseDragEvent = D3DragEvent<HTMLDivElement, null, SubjectPosition>
|
export type UseDragEvent = D3DragEvent<HTMLDivElement, null, SubjectPosition>
|
||||||
|
|
||||||
interface UseDragParams {
|
interface UseDragParams {
|
||||||
onStart: (event: NodeDragEvent['event'], currentNode: NodeDragEvent['node'], nodes: NodeDragEvent['nodes']) => void
|
onStart: (args: Omit<NodeDragEvent, 'intersections'>) => void
|
||||||
onDrag: (event: NodeDragEvent['event'], currentNode: NodeDragEvent['node'], nodes: NodeDragEvent['nodes']) => void
|
onDrag: (event: Omit<NodeDragEvent, 'intersections'>) => void
|
||||||
onStop: (event: NodeDragEvent['event'], currentNode: NodeDragEvent['node'], nodes: NodeDragEvent['nodes']) => void
|
onStop: (event: Omit<NodeDragEvent, 'intersections'>) => void
|
||||||
el: Ref<Element | undefined>
|
el: Ref<Element | undefined>
|
||||||
disabled?: ComputedRef<boolean>
|
disabled?: MaybeRefOrGetter<boolean>
|
||||||
selectable?: ComputedRef<boolean>
|
selectable?: MaybeRefOrGetter<boolean>
|
||||||
id?: string
|
id?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
function useDrag(params: UseDragParams) {
|
function useDrag(params: UseDragParams) {
|
||||||
const scope = effectScope()
|
const scope = effectScope()
|
||||||
|
|
||||||
tryOnScopeDispose(() => scope.stop())
|
tryOnScopeDispose(scope.stop)
|
||||||
|
|
||||||
return scope.run(() => {
|
return scope.run(() => {
|
||||||
const {
|
const {
|
||||||
@@ -43,7 +44,7 @@ function useDrag(params: UseDragParams) {
|
|||||||
emits,
|
emits,
|
||||||
} = $(useVueFlow())
|
} = $(useVueFlow())
|
||||||
|
|
||||||
const { onStart, onDrag, onStop, el, disabled, id, selectable } = $(params)
|
const { onStart, onDrag, onStop, el, disabled, id, selectable } = params
|
||||||
|
|
||||||
const dragging = ref(false)
|
const dragging = ref(false)
|
||||||
|
|
||||||
@@ -64,9 +65,9 @@ function useDrag(params: UseDragParams) {
|
|||||||
|
|
||||||
const getPointerPosition = useGetPointerPosition()
|
const getPointerPosition = useGetPointerPosition()
|
||||||
|
|
||||||
watch([() => disabled, () => el], () => {
|
watch([() => resolveUnref(disabled), el], ([isDisabled, nodeEl]) => {
|
||||||
if (el) {
|
if (nodeEl) {
|
||||||
const selection = select(el)
|
const selection = select(nodeEl)
|
||||||
|
|
||||||
const updateNodes = ({ x, y }: XYPosition) => {
|
const updateNodes = ({ x, y }: XYPosition) => {
|
||||||
lastPos = { x, y }
|
lastPos = { x, y }
|
||||||
@@ -110,7 +111,7 @@ function useDrag(params: UseDragParams) {
|
|||||||
findNode,
|
findNode,
|
||||||
})
|
})
|
||||||
|
|
||||||
onDrag(dragEvent, currentNode, nodes)
|
onDrag({ event: dragEvent, node: currentNode, nodes })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,7 +132,7 @@ function useDrag(params: UseDragParams) {
|
|||||||
autoPanId = requestAnimationFrame(autoPan)
|
autoPanId = requestAnimationFrame(autoPan)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disabled) {
|
if (isDisabled) {
|
||||||
selection.on('.drag', null)
|
selection.on('.drag', null)
|
||||||
} else {
|
} else {
|
||||||
dragHandler = drag()
|
dragHandler = drag()
|
||||||
@@ -143,7 +144,7 @@ function useDrag(params: UseDragParams) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node && selectable && selectNodesOnDrag) {
|
if (node && resolveUnref(selectable) && selectNodesOnDrag) {
|
||||||
handleNodeClick(
|
handleNodeClick(
|
||||||
node,
|
node,
|
||||||
multiSelectionActive,
|
multiSelectionActive,
|
||||||
@@ -151,7 +152,7 @@ function useDrag(params: UseDragParams) {
|
|||||||
removeSelectedElements,
|
removeSelectedElements,
|
||||||
$$(nodesSelectionActive),
|
$$(nodesSelectionActive),
|
||||||
false,
|
false,
|
||||||
el as HTMLDivElement,
|
nodeEl as HTMLDivElement,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,7 +167,7 @@ function useDrag(params: UseDragParams) {
|
|||||||
findNode,
|
findNode,
|
||||||
})
|
})
|
||||||
|
|
||||||
onStart(event.sourceEvent, currentNode, nodes)
|
onStart({ event: event.sourceEvent, node: currentNode, nodes })
|
||||||
}
|
}
|
||||||
|
|
||||||
containerBounds = vueFlowRef?.getBoundingClientRect() || null
|
containerBounds = vueFlowRef?.getBoundingClientRect() || null
|
||||||
@@ -202,7 +203,7 @@ function useDrag(params: UseDragParams) {
|
|||||||
findNode,
|
findNode,
|
||||||
})
|
})
|
||||||
|
|
||||||
onStop(event.sourceEvent as MouseEvent, currentNode, nodes)
|
onStop({ event: event.sourceEvent, node: currentNode, nodes })
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.filter((event: D3DragEvent<HTMLDivElement, null, SubjectPosition>['sourceEvent']) => {
|
.filter((event: D3DragEvent<HTMLDivElement, null, SubjectPosition>['sourceEvent']) => {
|
||||||
@@ -210,8 +211,8 @@ function useDrag(params: UseDragParams) {
|
|||||||
return (
|
return (
|
||||||
!event.button &&
|
!event.button &&
|
||||||
(!noDragClassName ||
|
(!noDragClassName ||
|
||||||
(!hasSelector(target, `.${noDragClassName}`, el) &&
|
(!hasSelector(target, `.${noDragClassName}`, nodeEl) &&
|
||||||
(!node?.dragHandle || hasSelector(target, node.dragHandle, el))))
|
(!node?.dragHandle || hasSelector(target, node.dragHandle, nodeEl))))
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -183,4 +183,5 @@ export interface FlowProps {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Todo: Remove in next major version
|
||||||
export type FlowOptions = FlowProps
|
export type FlowOptions = FlowProps
|
||||||
|
|||||||
Reference in New Issue
Block a user