refactor(core): replace computed arg with getter fn

Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
braks
2023-04-11 20:28:02 +02:00
committed by Braks
parent 2a5af98182
commit f19e210442
3 changed files with 29 additions and 27 deletions
@@ -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) })
}, },
}) })
+20 -19
View File
@@ -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))))
) )
}) })
+1
View File
@@ -183,4 +183,5 @@ export interface FlowProps {
} }
} }
// Todo: Remove in next major version
export type FlowOptions = FlowProps export type FlowOptions = FlowProps