fix: node not updating handlebounds when handle pos changes
* watch source & target pos and update node dimensions on next tick
This commit is contained in:
@@ -3,7 +3,18 @@ import dagre from 'dagre'
|
||||
import initialElements from './initial-elements'
|
||||
import './layouting.css'
|
||||
|
||||
import Flow, { Controls, addEdge, Connection, Edge, Elements, isNode, NodeExtent, Position, removeElements } from '~/index'
|
||||
import Flow, {
|
||||
Controls,
|
||||
addEdge,
|
||||
ConnectionMode,
|
||||
Connection,
|
||||
Edge,
|
||||
Elements,
|
||||
isNode,
|
||||
NodeExtent,
|
||||
Position,
|
||||
removeElements,
|
||||
} from '~/index'
|
||||
|
||||
const dagreGraph = new dagre.graphlib.Graph()
|
||||
dagreGraph.setDefaultEdgeLabel(() => ({}))
|
||||
@@ -42,6 +53,7 @@ const onLayout = (direction: string) => {
|
||||
|
||||
return el
|
||||
})
|
||||
console.log(elements.value)
|
||||
}
|
||||
</script>
|
||||
<template>
|
||||
@@ -49,9 +61,10 @@ const onLayout = (direction: string) => {
|
||||
<Flow
|
||||
:elements="elements"
|
||||
:node-extent="nodeExtent"
|
||||
:connection-mode="ConnectionMode.Loose"
|
||||
@connect="onConnect"
|
||||
@clements-remove="onElementsRemove"
|
||||
@load="() => onLayout('LR')"
|
||||
@load="() => onLayout('TB')"
|
||||
>
|
||||
<Controls />
|
||||
</Flow>
|
||||
|
||||
@@ -21,20 +21,6 @@ hooks.connect.on((connection) => {
|
||||
hooks.edgeUpdate.trigger({ edge: props.edge, connection })
|
||||
})
|
||||
|
||||
const nodes = computed(() => {
|
||||
const n = getSourceTargetNodes(props.edge, store.nodes)
|
||||
|
||||
if (!n.sourceNode) {
|
||||
console.warn(`couldn't create edge for source id: ${props.edge.source}; edge id: ${props.edge.id}`)
|
||||
}
|
||||
|
||||
if (!n.targetNode) {
|
||||
console.warn(`couldn't create edge for target id: ${props.edge.target}; edge id: ${props.edge.id}`)
|
||||
}
|
||||
|
||||
return n
|
||||
})
|
||||
|
||||
const onEdgeClick = (event: MouseEvent) => {
|
||||
if (store.elementsSelectable) {
|
||||
store.unsetNodesSelection()
|
||||
@@ -92,6 +78,20 @@ const isVisible = ({ sourceX, sourceY, targetX, targetY }: ReturnType<typeof get
|
||||
: true
|
||||
}
|
||||
|
||||
const nodes = computed(() => {
|
||||
const n = getSourceTargetNodes(props.edge, store.nodes)
|
||||
|
||||
if (!n.sourceNode) {
|
||||
console.warn(`couldn't create edge for source id: ${props.edge.source}; edge id: ${props.edge.id}`)
|
||||
}
|
||||
|
||||
if (!n.targetNode) {
|
||||
console.warn(`couldn't create edge for target id: ${props.edge.target}; edge id: ${props.edge.id}`)
|
||||
}
|
||||
|
||||
return n
|
||||
})
|
||||
|
||||
// when connection type is loose we can define all handles as sources
|
||||
const targetNodeHandles = computed(() =>
|
||||
store.connectionMode === ConnectionMode.Strict
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<script lang="ts" setup>
|
||||
import { DraggableEventListener } from '@braks/revue-draggable'
|
||||
import { watchPostEffect } from 'vue'
|
||||
import { Node, NodeType, SnapGrid } from '~/types'
|
||||
import { NodeIdContextKey } from '~/context'
|
||||
import { useHooks, useStore } from '~/composables'
|
||||
@@ -45,11 +44,8 @@ const onSelectNodeHandler = (event: MouseEvent) => {
|
||||
if (selectable) {
|
||||
store.unsetNodesSelection()
|
||||
|
||||
if (!props.selected) {
|
||||
store.addSelectedElements([n])
|
||||
}
|
||||
if (!props.selected) store.addSelectedElements([n])
|
||||
}
|
||||
|
||||
hooks.nodeClick.trigger({ event, node: n })
|
||||
}
|
||||
}
|
||||
@@ -61,9 +57,7 @@ const onDragStart: DraggableEventListener = ({ event }) => {
|
||||
if (props.selectNodesOnDrag && selectable) {
|
||||
store.unsetNodesSelection()
|
||||
|
||||
if (!props.selected) {
|
||||
store.addSelectedElements([n])
|
||||
}
|
||||
if (!props.selected) store.addSelectedElements([n])
|
||||
} else if (!props.selectNodesOnDrag && !props.selected && selectable) {
|
||||
store.unsetNodesSelection()
|
||||
store.addSelectedElements([])
|
||||
@@ -134,6 +128,18 @@ watch(
|
||||
})
|
||||
},
|
||||
)
|
||||
watch(
|
||||
() => props.node.sourcePosition && props.node.targetPosition,
|
||||
() => {
|
||||
nextTick(() => {
|
||||
store.updateNodeDimensions({
|
||||
id: props.node.id,
|
||||
nodeElement: nodeElement.value,
|
||||
forceUpdate: true,
|
||||
})
|
||||
})
|
||||
},
|
||||
)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
@@ -129,7 +129,7 @@ const init = (opts: typeof props) => {
|
||||
onBeforeUnmount(() => store?.$dispose())
|
||||
|
||||
watch(props, (val) => init(val))
|
||||
onMounted(() => init(props))
|
||||
init(props)
|
||||
|
||||
const nodeTypes = createNodeTypes({ ...defaultNodeTypes, ...props.nodeTypes })
|
||||
const edgeTypes = createEdgeTypes({ ...defaultEdgeTypes, ...props.edgeTypes })
|
||||
|
||||
Reference in New Issue
Block a user