feat(store, flow)!: Add useNode/useEdge-state helpers
* for two way binding use the helpers
This commit is contained in:
@@ -106,6 +106,14 @@ export default (options?: FlowOptions): UseVueFlow => {
|
|||||||
const store = useStore(options)
|
const store = useStore(options)
|
||||||
return {
|
return {
|
||||||
store,
|
store,
|
||||||
|
useNodesState: (nodes) => {
|
||||||
|
store.setNodes(nodes)
|
||||||
|
return store.nodes
|
||||||
|
},
|
||||||
|
useEdgesState: (edges) => {
|
||||||
|
store.setEdges(edges)
|
||||||
|
return store.edges
|
||||||
|
},
|
||||||
applyNodeChanges: (changes) => applyNodeChanges(changes, store.nodes),
|
applyNodeChanges: (changes) => applyNodeChanges(changes, store.nodes),
|
||||||
applyEdgeChanges: (changes) => applyEdgeChanges(changes, store.edges),
|
applyEdgeChanges: (changes) => applyEdgeChanges(changes, store.edges),
|
||||||
...store.hooksOn,
|
...store.hooksOn,
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ const props = withDefaults(defineProps<FlowProps>(), {
|
|||||||
panOnScroll: false,
|
panOnScroll: false,
|
||||||
paneMoveable: true,
|
paneMoveable: true,
|
||||||
})
|
})
|
||||||
const emit = defineEmits([...Object.keys(createHooks()), 'update:nodes', 'update:edges', 'update:elements', 'update:modelValue'])
|
const emit = defineEmits([...Object.keys(createHooks())])
|
||||||
const store = initFlow(emit, props.id)
|
const store = initFlow(emit, props.id)
|
||||||
nextTick(() => store.setState(props))
|
nextTick(() => store.setState(props))
|
||||||
watch(
|
watch(
|
||||||
|
|||||||
@@ -8,9 +8,8 @@ import {
|
|||||||
Node,
|
Node,
|
||||||
NodeChange,
|
NodeChange,
|
||||||
NodeDimensionChange,
|
NodeDimensionChange,
|
||||||
XYPosition,
|
|
||||||
} from '~/types'
|
} from '~/types'
|
||||||
import { clampPosition, isEdge, isGraphEdge, isGraphNode, isNode, isParentSelected, parseEdge, parseNode } from '~/utils'
|
import { isEdge, isGraphEdge, isGraphNode, isNode, isParentSelected, parseEdge, parseNode } from '~/utils'
|
||||||
import { createPositionChange, createSelectionChange, getSelectionChanges } from '~/composables/useVueFlow'
|
import { createPositionChange, createSelectionChange, getSelectionChanges } from '~/composables/useVueFlow'
|
||||||
|
|
||||||
const getParent = (root: Node[], id: string): GraphNode | undefined => {
|
const getParent = (root: Node[], id: string): GraphNode | undefined => {
|
||||||
|
|||||||
@@ -121,6 +121,8 @@ export type FlowOptions<N = any, E = N> = FlowProps<N, E>
|
|||||||
|
|
||||||
export type UseVueFlow = {
|
export type UseVueFlow = {
|
||||||
store: FlowStore
|
store: FlowStore
|
||||||
|
useNodesState: (nodes: Node[]) => GraphNode[]
|
||||||
|
useEdgesState: (edges: Edge[]) => GraphEdge[]
|
||||||
applyNodeChanges: (changes: NodeChange[]) => void
|
applyNodeChanges: (changes: NodeChange[]) => void
|
||||||
applyEdgeChanges: (changes: EdgeChange[]) => void
|
applyEdgeChanges: (changes: EdgeChange[]) => void
|
||||||
} & FlowHooksOn
|
} & FlowHooksOn
|
||||||
|
|||||||
+9
-8
@@ -281,18 +281,19 @@ export const getConnectedEdges = (nodes: GraphNode[], edges: GraphEdge[]) => {
|
|||||||
return edges.filter((edge) => nodeIds.includes(edge.source) || nodeIds.includes(edge.target))
|
return edges.filter((edge) => nodeIds.includes(edge.source) || nodeIds.includes(edge.target))
|
||||||
}
|
}
|
||||||
|
|
||||||
export const onLoadGetNodes = (currentStore: FlowStore) => (): GraphNode[] => currentStore.nodes
|
export const onLoadGetNodes = (store: FlowStore) => (): GraphNode[] => store.nodes
|
||||||
export const onLoadGetEdges = (currentStore: FlowStore) => (): GraphEdge[] => currentStore.edges
|
export const onLoadGetEdges = (store: FlowStore) => (): GraphEdge[] => store.edges
|
||||||
export const onLoadGetElements = (currentStore: FlowStore) => (): FlowElements => [...currentStore.nodes, ...currentStore.edges]
|
export const onLoadGetElements = (store: FlowStore) => (): FlowElements => [...store.nodes, ...store.edges]
|
||||||
|
|
||||||
export const onLoadToObject = (currentStore: FlowState) => (): FlowExportObject => {
|
export const onLoadToObject = (store: FlowState) => (): FlowExportObject => {
|
||||||
// we have to stringify/parse so objects containing refs (like nodes and edges) can potentially be saved in a storage
|
// we have to stringify/parse so objects containing refs (like nodes and edges) can potentially be saved in a storage
|
||||||
return JSON.parse(
|
return JSON.parse(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
elements: currentStore.elements,
|
nodes: store.nodes,
|
||||||
position: [currentStore.transform[0], currentStore.transform[1]],
|
edges: store.edges,
|
||||||
zoom: currentStore.transform[2],
|
position: [store.transform[0], store.transform[1]],
|
||||||
}),
|
zoom: store.transform[2],
|
||||||
|
} as FlowExportObject),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user