Skip to content

Commit

Permalink
fix: node not updating handlebounds when handle pos changes
Browse files Browse the repository at this point in the history
* watch source & target pos and update node dimensions on next tick
  • Loading branch information
bcakmakoglu committed Oct 22, 2021
1 parent 9532615 commit 26b3901
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 25 deletions.
17 changes: 15 additions & 2 deletions examples/Layouting/LayoutingExample.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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(() => ({}))
Expand Down Expand Up @@ -42,16 +53,18 @@ const onLayout = (direction: string) => {
return el
})
console.log(elements.value)
}
</script>
<template>
<div class="layoutflow">
<Flow
:elements="elements"
:node-extent="nodeExtent"
:connection-mode="ConnectionMode.Loose"
@connect="onConnect"
@clements-remove="onElementsRemove"
@load="() => onLayout('LR')"
@load="() => onLayout('TB')"
>
<Controls />
</Flow>
Expand Down
28 changes: 14 additions & 14 deletions src/components/Edges/Edge.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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
Expand Down
22 changes: 14 additions & 8 deletions src/components/Nodes/Node.vue
Original file line number Diff line number Diff line change
@@ -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'
Expand Down Expand Up @@ -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 })
}
}
Expand All @@ -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([])
Expand Down Expand Up @@ -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>
Expand Down
2 changes: 1 addition & 1 deletion src/container/Flow/Flow.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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 })
Expand Down

1 comment on commit 26b3901

@vercel
Copy link

@vercel vercel bot commented on 26b3901 Oct 22, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.