feat(store): Enable using a parentNode / parentNodeId to add child nodes
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ConnectionMode, useVueFlow, VueFlow, MiniMap, Background, Controls } from '~/index'
|
import { ConnectionMode, useVueFlow, VueFlow, MiniMap, Background, Controls } from '~/index'
|
||||||
|
|
||||||
const { onConnect, nodes, edges, addEdges } = useVueFlow({
|
const { onConnect, nodes, edges, addEdges, addNodes } = useVueFlow({
|
||||||
fitViewOnInit: true,
|
fitViewOnInit: true,
|
||||||
connectionMode: ConnectionMode.Loose,
|
connectionMode: ConnectionMode.Loose,
|
||||||
nodes: [
|
nodes: [
|
||||||
@@ -72,6 +72,13 @@ const { onConnect, nodes, edges, addEdges } = useVueFlow({
|
|||||||
})
|
})
|
||||||
|
|
||||||
onConnect((params) => addEdges([params]))
|
onConnect((params) => addEdges([params]))
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
// dynamically add nodes to parent
|
||||||
|
addNodes([{ id: '999', type: 'input', label: 'Node 1', position: { x: 20, y: 100 }, class: 'light', extent: 'parent' }], {
|
||||||
|
parentNode: '2',
|
||||||
|
})
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<VueFlow>
|
<VueFlow>
|
||||||
|
|||||||
@@ -214,10 +214,12 @@ export default (state: State, getters: ComputedGetters): Actions => {
|
|||||||
setEdges(elements.filter(isEdge))
|
setEdges(elements.filter(isEdge))
|
||||||
}
|
}
|
||||||
|
|
||||||
const addNodes: Actions['addNodes'] = (nodes, extent) => {
|
const addNodes: Actions['addNodes'] = (nodes, options) => {
|
||||||
const parsed = nodes.flatMap((node) => {
|
const parsed = nodes.flatMap((node) => {
|
||||||
const children: GraphNode[] = []
|
const children: GraphNode[] = []
|
||||||
parseChildren(node, undefined, children, extent ?? state.nodeExtent, getters.getNode.value)
|
const parent =
|
||||||
|
options && (typeof options.parentNode === 'string' ? getters.getNode.value(options.parentNode) : options.parentNode)
|
||||||
|
parseChildren(node, parent, children, options?.extent ?? state.nodeExtent, getters.getNode.value)
|
||||||
return children
|
return children
|
||||||
})
|
})
|
||||||
state.nodes.push(...parsed)
|
state.nodes.push(...parsed)
|
||||||
|
|||||||
+1
-1
@@ -75,7 +75,7 @@ export interface Actions<N = any, E = N> {
|
|||||||
setElements: (elements: Elements<N, E>, extent?: CoordinateExtent) => void
|
setElements: (elements: Elements<N, E>, extent?: CoordinateExtent) => void
|
||||||
setNodes: (nodes: Node<N>[], extent?: CoordinateExtent) => void
|
setNodes: (nodes: Node<N>[], extent?: CoordinateExtent) => void
|
||||||
setEdges: (edges: Edge<E>[]) => void
|
setEdges: (edges: Edge<E>[]) => void
|
||||||
addNodes: <NA = N>(nodes: Node<NA>[], extent?: CoordinateExtent) => void
|
addNodes: <NA = N>(nodes: Node<NA>[], options?: { extent?: CoordinateExtent; parentNode: GraphNode | string }) => void
|
||||||
addEdges: <EA = E>(edgesOrConnections: (Edge<EA> | Connection)[]) => void
|
addEdges: <EA = E>(edgesOrConnections: (Edge<EA> | Connection)[]) => void
|
||||||
updateEdge: <EU = E>(oldEdge: GraphEdge<EU>, newConnection: Connection) => boolean
|
updateEdge: <EU = E>(oldEdge: GraphEdge<EU>, newConnection: Connection) => boolean
|
||||||
applyEdgeChanges: <ED = E>(changes: EdgeChange[]) => GraphEdge<ED>[]
|
applyEdgeChanges: <ED = E>(changes: EdgeChange[]) => GraphEdge<ED>[]
|
||||||
|
|||||||
Reference in New Issue
Block a user