refactor(store): remove nodes/edges field
* nodes/edges are accessed via getter - that retains reactivity on elements Signed-off-by: Braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
+29
-31
@@ -1,6 +1,6 @@
|
|||||||
import microDiff from 'microdiff'
|
import microDiff from 'microdiff'
|
||||||
import { setActivePinia, createPinia, defineStore, StoreDefinition, acceptHMRUpdate } from 'pinia'
|
import { setActivePinia, createPinia, defineStore, StoreDefinition, acceptHMRUpdate } from 'pinia'
|
||||||
import { FlowState, FlowActions, Elements, FlowGetters, GraphNode, NextElements, GraphEdge, FlowElements } from '~/types'
|
import { FlowState, FlowActions, Elements, FlowGetters, GraphNode, NextElements, GraphEdge } from '~/types'
|
||||||
import {
|
import {
|
||||||
clampPosition,
|
clampPosition,
|
||||||
getConnectedEdges,
|
getConnectedEdges,
|
||||||
@@ -13,6 +13,7 @@ import {
|
|||||||
isGraphNode,
|
isGraphNode,
|
||||||
getSourceTargetNodes,
|
getSourceTargetNodes,
|
||||||
isEdge,
|
isEdge,
|
||||||
|
isGraphEdge,
|
||||||
} from '~/utils'
|
} from '~/utils'
|
||||||
import parseElementsWorker from '~/workers/parseElements'
|
import parseElementsWorker from '~/workers/parseElements'
|
||||||
|
|
||||||
@@ -58,26 +59,31 @@ export default (id: string, preloadedState: FlowState) => {
|
|||||||
)
|
)
|
||||||
: nodes
|
: nodes
|
||||||
|
|
||||||
return n.filter((node) => !node.isHidden)
|
return n.filter((node) => !node.isHidden) ?? []
|
||||||
},
|
},
|
||||||
getEdges(): GraphEdge[] {
|
getEdges(): GraphEdge[] {
|
||||||
const edges = this.elements.filter(isEdge)
|
const edges = this.elements.filter(isEdge)
|
||||||
return edges
|
return (
|
||||||
.filter((edge) => !edge.isHidden)
|
edges
|
||||||
.map((edge) => {
|
.filter((edge) => !edge.isHidden)
|
||||||
const { sourceNode, targetNode } = getSourceTargetNodes(edge, this.getNodes)
|
.map((edge) => {
|
||||||
if (!sourceNode) console.warn(`couldn't create edge for source id: ${edge.source}; edge id: ${edge.id}`)
|
if (!isGraphEdge(edge)) {
|
||||||
if (!targetNode) console.warn(`couldn't create edge for target id: ${edge.target}; edge id: ${edge.id}`)
|
const { sourceNode, targetNode } = getSourceTargetNodes(edge, this.getNodes)
|
||||||
|
if (!sourceNode) console.warn(`couldn't create edge for source id: ${edge.source}; edge id: ${edge.id}`)
|
||||||
|
if (!targetNode) console.warn(`couldn't create edge for target id: ${edge.target}; edge id: ${edge.id}`)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...edge,
|
...edge,
|
||||||
sourceTargetNodes: {
|
sourceTargetNodes: {
|
||||||
sourceNode,
|
sourceNode,
|
||||||
targetNode,
|
targetNode,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
.filter(({ sourceTargetNodes: { sourceNode, targetNode } }) => !!(sourceNode && targetNode))
|
return edge
|
||||||
|
})
|
||||||
|
.filter(({ sourceTargetNodes: { sourceNode, targetNode } }) => !!(sourceNode && targetNode)) ?? []
|
||||||
|
)
|
||||||
},
|
},
|
||||||
getSelectedNodes(): GraphNode[] {
|
getSelectedNodes(): GraphNode[] {
|
||||||
return this.selectedElements?.filter(isGraphNode) ?? []
|
return this.selectedElements?.filter(isGraphNode) ?? []
|
||||||
@@ -90,13 +96,13 @@ export default (id: string, preloadedState: FlowState) => {
|
|||||||
nextNodes: [],
|
nextNodes: [],
|
||||||
}
|
}
|
||||||
if (!this.worker || import.meta.env.SSR || typeof window === 'undefined') {
|
if (!this.worker || import.meta.env.SSR || typeof window === 'undefined') {
|
||||||
next = await parseElements(elements, this.nodes, this.edges, this.nodeExtent)
|
next = await parseElements(elements, this.getNodes, this.getEdges, this.nodeExtent)
|
||||||
} else if (this.worker) {
|
} else if (this.worker) {
|
||||||
const { workerFn, workerTerminate } = parseElementsWorker()
|
const { workerFn, workerTerminate } = parseElementsWorker()
|
||||||
const res = await workerFn(
|
const res = await workerFn(
|
||||||
deepUnref(elements),
|
deepUnref(elements),
|
||||||
deepUnref(this.nodes),
|
deepUnref(this.getNodes),
|
||||||
deepUnref(this.edges),
|
deepUnref(this.getEdges),
|
||||||
deepUnref(this.nodeExtent),
|
deepUnref(this.nodeExtent),
|
||||||
).catch((err) => {
|
).catch((err) => {
|
||||||
console.error(err)
|
console.error(err)
|
||||||
@@ -105,9 +111,9 @@ export default (id: string, preloadedState: FlowState) => {
|
|||||||
if (res) {
|
if (res) {
|
||||||
workerTerminate('SUCCESS')
|
workerTerminate('SUCCESS')
|
||||||
next = res
|
next = res
|
||||||
} else next = await parseElements(elements, this.nodes, this.edges, this.nodeExtent)
|
} else next = await parseElements(elements, this.getNodes, this.getEdges, this.nodeExtent)
|
||||||
} else {
|
} else {
|
||||||
next = await parseElements(elements, this.nodes, this.edges, this.nodeExtent)
|
next = await parseElements(elements, this.getNodes, this.getEdges, this.nodeExtent)
|
||||||
}
|
}
|
||||||
this.elements = [...next.nextNodes, ...next.nextEdges]
|
this.elements = [...next.nextNodes, ...next.nextEdges]
|
||||||
},
|
},
|
||||||
@@ -177,12 +183,6 @@ export default (id: string, preloadedState: FlowState) => {
|
|||||||
},
|
},
|
||||||
setNodeExtent(nodeExtent) {
|
setNodeExtent(nodeExtent) {
|
||||||
this.nodeExtent = nodeExtent
|
this.nodeExtent = nodeExtent
|
||||||
this.nodes = this.nodes.map((node) => {
|
|
||||||
return {
|
|
||||||
...node,
|
|
||||||
position: node.position ? clampPosition(node.position, nodeExtent) : { x: 0, y: 0 },
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
resetSelectedElements() {
|
resetSelectedElements() {
|
||||||
this.selectedElements = undefined
|
this.selectedElements = undefined
|
||||||
@@ -204,10 +204,8 @@ export default (id: string, preloadedState: FlowState) => {
|
|||||||
this.elementsSelectable = isInteractive
|
this.elementsSelectable = isInteractive
|
||||||
},
|
},
|
||||||
async addElements(elements: Elements) {
|
async addElements(elements: Elements) {
|
||||||
const { nextNodes, nextEdges } = await parseElements(elements, this.nodes, this.edges, this.nodeExtent)
|
const { nextNodes, nextEdges } = await parseElements(elements, this.getNodes, this.getEdges, this.nodeExtent)
|
||||||
this.elements = [...this.elements, ...nextNodes, ...nextEdges]
|
this.elements = [...this.elements, ...nextNodes, ...nextEdges]
|
||||||
this.nodes = [...this.nodes, ...nextNodes]
|
|
||||||
this.edges = [...this.edges, ...nextEdges]
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -31,8 +31,6 @@ export interface FlowState extends FlowOptions {
|
|||||||
instance?: FlowInstance
|
instance?: FlowInstance
|
||||||
|
|
||||||
elements: FlowElements
|
elements: FlowElements
|
||||||
nodes: GraphNode[]
|
|
||||||
edges: Edge[]
|
|
||||||
|
|
||||||
d3Zoom?: D3Zoom
|
d3Zoom?: D3Zoom
|
||||||
d3Selection?: D3Selection
|
d3Selection?: D3Selection
|
||||||
|
|||||||
+2
-4
@@ -7,9 +7,9 @@ import {
|
|||||||
NodeExtent,
|
NodeExtent,
|
||||||
GraphNode,
|
GraphNode,
|
||||||
PanOnScrollMode,
|
PanOnScrollMode,
|
||||||
GraphEdge,
|
|
||||||
DefaultNodeTypes,
|
DefaultNodeTypes,
|
||||||
DefaultEdgeTypes,
|
DefaultEdgeTypes,
|
||||||
|
Edge,
|
||||||
} from '~/types'
|
} from '~/types'
|
||||||
import { DefaultNode, InputNode, OutputNode, BezierEdge, SmoothStepEdge, StepEdge, StraightEdge } from '~/components'
|
import { DefaultNode, InputNode, OutputNode, BezierEdge, SmoothStepEdge, StepEdge, StraightEdge } from '~/components'
|
||||||
import { createHooks } from '~/composables'
|
import { createHooks } from '~/composables'
|
||||||
@@ -34,8 +34,6 @@ export const initialState = (): FlowState => ({
|
|||||||
},
|
},
|
||||||
transform: [0, 0, 1],
|
transform: [0, 0, 1],
|
||||||
elements: [],
|
elements: [],
|
||||||
nodes: [],
|
|
||||||
edges: [],
|
|
||||||
selectedElements: undefined,
|
selectedElements: undefined,
|
||||||
selectedNodesBbox: { x: 0, y: 0, width: 0, height: 0 },
|
selectedNodesBbox: { x: 0, y: 0, width: 0, height: 0 },
|
||||||
|
|
||||||
@@ -99,7 +97,7 @@ export const initialState = (): FlowState => ({
|
|||||||
vueFlowVersion: typeof __VUE_FLOW_VERSION__ !== 'undefined' ? __VUE_FLOW_VERSION__ : '-',
|
vueFlowVersion: typeof __VUE_FLOW_VERSION__ !== 'undefined' ? __VUE_FLOW_VERSION__ : '-',
|
||||||
})
|
})
|
||||||
|
|
||||||
export const parseElements = async (elements: Elements, nodes: GraphNode[], edges: GraphEdge[], nodeExtent: NodeExtent) =>
|
export const parseElements = async (elements: Elements, nodes: GraphNode[], edges: Edge[], nodeExtent: NodeExtent) =>
|
||||||
new Promise<NextElements>((resolve) => {
|
new Promise<NextElements>((resolve) => {
|
||||||
const { nextEdges, nextNodes }: NextElements = {
|
const { nextEdges, nextNodes }: NextElements = {
|
||||||
nextNodes: [],
|
nextNodes: [],
|
||||||
|
|||||||
Reference in New Issue
Block a user