chore(core): cleanup

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 1171e01c9c
commit 1e2a51ebb5
4 changed files with 63 additions and 53 deletions
@@ -47,7 +47,7 @@ const NodeWrapper = defineComponent({
const node = $(useVModel(props, 'node')) const node = $(useVModel(props, 'node'))
const parentNode = $computed(() => (node.parentNode ? findNode(node.parentNode) : undefined)) const parentNode = computed(() => findNode(node.parentNode))
const connectedEdges = $computed(() => getConnectedEdges([node], edges)) const connectedEdges = $computed(() => getConnectedEdges([node], edges))
@@ -73,9 +73,9 @@ const NodeWrapper = defineComponent({
}, },
}) })
const getClass = $computed(() => (node.class instanceof Function ? node.class(node) : node.class)) const getClass = computed(() => (node.class instanceof Function ? node.class(node) : node.class))
const getStyle = $computed(() => { const getStyle = computed(() => {
const styles = (node.style instanceof Function ? node.style(node) : node.style) || {} const styles = (node.style instanceof Function ? node.style(node) : node.style) || {}
const width = node.width instanceof Function ? node.width(node) : node.width const width = node.width instanceof Function ? node.width(node) : node.width
@@ -92,7 +92,7 @@ const NodeWrapper = defineComponent({
return styles return styles
}) })
const zIndex = computed(() => Number(node.zIndex ?? getStyle.zIndex ?? 0)) const zIndex = computed(() => Number(node.zIndex ?? getStyle.value.zIndex ?? 0))
onUpdateNodeInternals((updateIds) => { onUpdateNodeInternals((updateIds) => {
if (updateIds.includes(props.id)) { if (updateIds.includes(props.id)) {
@@ -121,14 +121,14 @@ const NodeWrapper = defineComponent({
[ [
() => node.position.x, () => node.position.x,
() => node.position.y, () => node.position.y,
() => parentNode?.computedPosition.x, () => parentNode.value?.computedPosition.x,
() => parentNode?.computedPosition.y, () => parentNode.value?.computedPosition.y,
() => parentNode?.computedPosition.z, () => parentNode.value?.computedPosition.z,
() => node.selected, () => node.selected,
() => node.dimensions.height, () => node.dimensions.height,
() => node.dimensions.width, () => node.dimensions.width,
() => parentNode?.dimensions.height, () => parentNode.value?.dimensions.height,
() => parentNode?.dimensions.width, () => parentNode.value?.dimensions.width,
zIndex, zIndex,
], ],
([newX, newY, parentX, parentY, parentZ]) => { ([newX, newY, parentX, parentY, parentZ]) => {
@@ -184,14 +184,14 @@ const NodeWrapper = defineComponent({
selected: node.selected, selected: node.selected,
selectable: props.selectable, selectable: props.selectable,
}, },
getClass, getClass.value,
], ],
'style': { 'style': {
zIndex: node.computedPosition.z ?? zIndex.value, zIndex: node.computedPosition.z ?? zIndex.value,
transform: `translate(${node.computedPosition.x}px,${node.computedPosition.y}px)`, transform: `translate(${node.computedPosition.x}px,${node.computedPosition.y}px)`,
pointerEvents: props.selectable || props.draggable ? 'all' : 'none', pointerEvents: props.selectable || props.draggable ? 'all' : 'none',
visibility: node.initialized ? 'visible' : 'hidden', visibility: node.initialized ? 'visible' : 'hidden',
...getStyle, ...getStyle.value,
}, },
'tabIndex': props.focusable ? 0 : undefined, 'tabIndex': props.focusable ? 0 : undefined,
'role': props.focusable ? 'button' : undefined, 'role': props.focusable ? 'button' : undefined,
@@ -239,7 +239,7 @@ const NodeWrapper = defineComponent({
nextPos.y = snapGrid[1] * Math.round(nextPos.y / snapGrid[1]) nextPos.y = snapGrid[1] * Math.round(nextPos.y / snapGrid[1])
} }
const { computedPosition, position } = calcNextPosition(node, nextPos, emits.error, nodeExtent, parentNode) const { computedPosition, position } = calcNextPosition(node, nextPos, emits.error, nodeExtent, parentNode.value)
// only overwrite positions if there are changes when clamping // only overwrite positions if there are changes when clamping
if (node.computedPosition.x !== computedPosition.x || node.computedPosition.y !== computedPosition.y) { if (node.computedPosition.x !== computedPosition.x || node.computedPosition.y !== computedPosition.y) {
+29 -27
View File
@@ -1,12 +1,12 @@
import type { MaybeRef } from '@vueuse/core'
import type { Connection, ConnectionHandle, HandleType, MouseTouchEvent, ValidConnectionFunc } from '~/types' import type { Connection, ConnectionHandle, HandleType, MouseTouchEvent, ValidConnectionFunc } from '~/types'
import type { MaybeRefOrGetter } from '~/types/utils'
interface UseHandleProps { interface UseHandleProps {
handleId: MaybeRef<string | null> handleId: MaybeRefOrGetter<string | null>
nodeId: MaybeRef<string> nodeId: MaybeRefOrGetter<string>
type: MaybeRef<HandleType> type: MaybeRefOrGetter<HandleType>
isValidConnection?: ValidConnectionFunc | null isValidConnection?: ValidConnectionFunc | null
edgeUpdaterType?: MaybeRef<HandleType> edgeUpdaterType?: MaybeRefOrGetter<HandleType>
onEdgeUpdate?: (event: MouseTouchEvent, connection: Connection) => void onEdgeUpdate?: (event: MouseTouchEvent, connection: Connection) => void
onEdgeUpdateEnd?: (event: MouseTouchEvent) => void onEdgeUpdateEnd?: (event: MouseTouchEvent) => void
} }
@@ -16,18 +16,15 @@ function alwaysValid() {
} }
export default function useHandle({ export default function useHandle({
handleId: _handleId, handleId,
nodeId: _nodeId, nodeId,
type, type,
isValidConnection, isValidConnection,
edgeUpdaterType: _edgeUpdaterType, edgeUpdaterType,
onEdgeUpdate, onEdgeUpdate,
onEdgeUpdateEnd, onEdgeUpdateEnd,
}: UseHandleProps) { }: UseHandleProps) {
const isTarget = computed(() => unref(type) === 'target') const isTarget = computed(() => resolveUnref(type) === 'target')
const nodeId = computed(() => unref(_nodeId))
const handleId = computed(() => unref(_handleId))
const edgeUpdaterType = computed(() => unref(_edgeUpdaterType))
const { const {
vueFlowRef, vueFlowRef,
@@ -60,7 +57,7 @@ export default function useHandle({
const doc = getHostForElement(event.target as HTMLElement) const doc = getHostForElement(event.target as HTMLElement)
if ((isMouseTriggered && event.button === 0) || !isMouseTriggered) { if ((isMouseTriggered && event.button === 0) || !isMouseTriggered) {
const node = findNode(nodeId.value) const node = findNode(resolveUnref(nodeId))
let isValidConnectionHandler = isValidConnection || isValidConnectionProp.value || alwaysValid let isValidConnectionHandler = isValidConnection || isValidConnectionProp.value || alwaysValid
@@ -74,7 +71,7 @@ export default function useHandle({
const { x, y } = getEventPosition(event) const { x, y } = getEventPosition(event)
const clickedHandle = doc?.elementFromPoint(x, y) const clickedHandle = doc?.elementFromPoint(x, y)
const handleType = getHandleType(edgeUpdaterType.value, clickedHandle) const handleType = getHandleType(resolveUnref(edgeUpdaterType), clickedHandle)
const containerBounds = vueFlowRef.value?.getBoundingClientRect() const containerBounds = vueFlowRef.value?.getBoundingClientRect()
if (!containerBounds || !handleType) { if (!containerBounds || !handleType) {
@@ -87,8 +84,8 @@ export default function useHandle({
const handleLookup = getHandleLookup({ const handleLookup = getHandleLookup({
nodes: getNodes.value, nodes: getNodes.value,
nodeId: nodeId.value, nodeId: resolveUnref(nodeId),
handleId: handleId.value, handleId: resolveUnref(handleId),
handleType, handleType,
}) })
@@ -106,8 +103,8 @@ export default function useHandle({
startConnection( startConnection(
{ {
nodeId: nodeId.value, nodeId: resolveUnref(nodeId),
handleId: handleId.value, handleId: resolveUnref(handleId),
type: handleType, type: handleType,
}, },
{ {
@@ -117,7 +114,7 @@ export default function useHandle({
event, event,
) )
emits.connectStart({ event, nodeId: nodeId.value, handleId: handleId.value, handleType }) emits.connectStart({ event, nodeId: resolveUnref(nodeId), handleId: resolveUnref(handleId), handleType })
function onPointerMove(event: MouseTouchEvent) { function onPointerMove(event: MouseTouchEvent) {
connectionPosition = getEventPosition(event, containerBounds) connectionPosition = getEventPosition(event, containerBounds)
@@ -137,8 +134,8 @@ export default function useHandle({
event, event,
prevClosestHandle, prevClosestHandle,
connectionMode.value, connectionMode.value,
nodeId.value, resolveUnref(nodeId),
handleId.value, resolveUnref(handleId),
isTarget.value ? 'target' : 'source', isTarget.value ? 'target' : 'source',
isValidConnectionHandler, isValidConnectionHandler,
doc, doc,
@@ -227,13 +224,18 @@ export default function useHandle({
} }
if (!connectionClickStartHandle.value) { if (!connectionClickStartHandle.value) {
emits.clickConnectStart({ event, nodeId: nodeId.value, handleId: handleId.value }) emits.clickConnectStart({ event, nodeId: resolveUnref(nodeId), handleId: resolveUnref(handleId) })
startConnection({ nodeId: nodeId.value, type: unref(type), handleId: handleId.value }, undefined, event, true) startConnection(
{ nodeId: resolveUnref(nodeId), type: resolveUnref(type), handleId: resolveUnref(handleId) },
undefined,
event,
true,
)
} else { } else {
let isValidConnectionHandler = isValidConnection || isValidConnectionProp.value || alwaysValid let isValidConnectionHandler = isValidConnection || isValidConnectionProp.value || alwaysValid
const node = findNode(nodeId.value) const node = findNode(resolveUnref(nodeId))
if (!isValidConnectionHandler && node) { if (!isValidConnectionHandler && node) {
isValidConnectionHandler = (!isTarget ? node.isValidTargetPos : node.isValidSourcePos) || alwaysValid isValidConnectionHandler = (!isTarget ? node.isValidTargetPos : node.isValidSourcePos) || alwaysValid
@@ -248,9 +250,9 @@ export default function useHandle({
const { connection, isValid } = isValidHandle( const { connection, isValid } = isValidHandle(
event, event,
{ {
nodeId: nodeId.value, nodeId: resolveUnref(nodeId),
id: handleId.value, id: resolveUnref(handleId),
type: unref(type), type: resolveUnref(type),
}, },
connectionMode.value, connectionMode.value,
connectionClickStartHandle.value.nodeId, connectionClickStartHandle.value.nodeId,
+1 -1
View File
@@ -23,7 +23,7 @@ export default function useNode<Data = ElementData, CustomEvents extends Record<
id: nodeId, id: nodeId,
nodeEl, nodeEl,
node, node,
parentNode: computed(() => (node.parentNode ? findNode(node.parentNode) : undefined)), parentNode: computed(() => findNode(node.parentNode)),
connectedEdges: computed(() => getConnectedEdges([node], edges.value)), connectedEdges: computed(() => getConnectedEdges([node], edges.value)),
} }
} }
+21 -13
View File
@@ -180,13 +180,15 @@ export function useActions(
} }
const nodeSelectionHandler = (nodes: GraphNode[], selected: boolean) => { const nodeSelectionHandler = (nodes: GraphNode[], selected: boolean) => {
const nodeIds = nodes.map((n) => n.id)
let changedNodes: NodeChange[] let changedNodes: NodeChange[]
let changedEdges: EdgeChange[] = [] let changedEdges: EdgeChange[] = []
if (state.multiSelectionActive) { if (state.multiSelectionActive) {
changedNodes = nodeIds.value.map((nodeId) => createSelectionChange(nodeId, selected)) changedNodes = nodeIds.map((nodeId) => createSelectionChange(nodeId, selected))
} else { } else {
const selectionChanges = getSelectionChanges([...state.nodes, ...state.edges], nodeIds.value) const selectionChanges = getSelectionChanges([...state.nodes, ...state.edges], nodeIds)
changedNodes = selectionChanges.changedNodes changedNodes = selectionChanges.changedNodes
changedEdges = selectionChanges.changedEdges changedEdges = selectionChanges.changedEdges
} }
@@ -201,13 +203,15 @@ export function useActions(
} }
const edgeSelectionHandler = (edges: GraphEdge[], selected: boolean) => { const edgeSelectionHandler = (edges: GraphEdge[], selected: boolean) => {
const edgeIds = edges.map((e) => e.id)
let changedNodes: NodeChange[] = [] let changedNodes: NodeChange[] = []
let changedEdges: EdgeChange[] let changedEdges: EdgeChange[]
if (state.multiSelectionActive) { if (state.multiSelectionActive) {
changedEdges = edgeIds.value.map((edgeId) => createSelectionChange(edgeId, selected)) changedEdges = edgeIds.map((edgeId) => createSelectionChange(edgeId, selected))
} else { } else {
const selectionChanges = getSelectionChanges([...state.nodes, ...state.edges], edgeIds.value) const selectionChanges = getSelectionChanges([...state.nodes, ...state.edges], edgeIds)
changedNodes = selectionChanges.changedNodes changedNodes = selectionChanges.changedNodes
changedEdges = selectionChanges.changedEdges changedEdges = selectionChanges.changedEdges
} }
@@ -222,14 +226,14 @@ export function useActions(
} }
const elementSelectionHandler = (elements: Elements, selected: boolean) => { const elementSelectionHandler = (elements: Elements, selected: boolean) => {
let { changedNodes, changedEdges } = getSelectionChanges( const nodeIds = elements.filter(isNode).map((n) => n.id)
[...state.nodes, ...state.edges], const edgeIds = elements.filter(isEdge).map((e) => e.id)
[...nodeIds.value, ...edgeIds.value],
) let { changedNodes, changedEdges } = getSelectionChanges([...state.nodes, ...state.edges], [...nodeIds, ...edgeIds])
if (state.multiSelectionActive) { if (state.multiSelectionActive) {
changedNodes = nodeIds.value.map((nodeId) => createSelectionChange(nodeId, selected)) changedNodes = nodeIds.map((nodeId) => createSelectionChange(nodeId, selected))
changedEdges = edgeIds.value.map((edgeId) => createSelectionChange(edgeId, selected)) changedEdges = edgeIds.map((edgeId) => createSelectionChange(edgeId, selected))
} }
if (changedNodes.length) { if (changedNodes.length) {
@@ -258,7 +262,9 @@ export function useActions(
return nodeSelectionHandler(nodes, false) return nodeSelectionHandler(nodes, false)
} }
const changedNodes = nodeIds.value.map((nodeId) => createSelectionChange(nodeId, false)) const nodeIds = nodes.map((n) => n.id)
const changedNodes = nodeIds.map((nodeId) => createSelectionChange(nodeId, false))
if (changedNodes.length) { if (changedNodes.length) {
state.hooks.nodesChange.trigger(changedNodes) state.hooks.nodesChange.trigger(changedNodes)
@@ -270,7 +276,9 @@ export function useActions(
return edgeSelectionHandler(edges, false) return edgeSelectionHandler(edges, false)
} }
const changedEdges = edgeIds.value.map((edgeId) => createSelectionChange(edgeId, false)) const edgeIds = edges.map((e) => e.id)
const changedEdges = edgeIds.map((edgeId) => createSelectionChange(edgeId, false))
if (changedEdges.length) { if (changedEdges.length) {
state.hooks.edgesChange.trigger(changedEdges) state.hooks.edgesChange.trigger(changedEdges)
@@ -285,7 +293,7 @@ export function useActions(
const { changedNodes, changedEdges } = elements.reduce( const { changedNodes, changedEdges } = elements.reduce(
(acc, curr) => { (acc, curr) => {
const selectionChange = createSelectionChange(curr.id, false) const selectionChange = createSelectionChange(curr.id, false)
if (isGraphNode(curr)) { if (isNode(curr)) {
acc.changedNodes.push(selectionChange) acc.changedNodes.push(selectionChange)
} else { } else {
acc.changedEdges.push(selectionChange) acc.changedEdges.push(selectionChange)