@@ -97,64 +97,61 @@ export function isRect(obj: any): obj is Rect {
97
97
return isNumeric ( obj . width ) && isNumeric ( obj . height ) && isNumeric ( obj . x ) && isNumeric ( obj . y )
98
98
}
99
99
100
- export function parseNode ( node : Node , defaults : Partial < GraphNode > = { } ) : GraphNode {
101
- let initialState = defaults
102
-
103
- if ( ! isGraphNode ( node ) ) {
104
- initialState = {
105
- type : node . type ?? defaults . type ?? 'default' ,
106
- dimensions : markRaw ( {
107
- width : 0 ,
108
- height : 0 ,
109
- } ) ,
110
- handleBounds : {
111
- source : [ ] ,
112
- target : [ ] ,
113
- } ,
114
- computedPosition : markRaw ( {
115
- z : 0 ,
116
- ...node . position ,
117
- } ) ,
118
- draggable : undefined ,
119
- selectable : undefined ,
120
- connectable : undefined ,
121
- focusable : undefined ,
122
- selected : false ,
123
- dragging : false ,
124
- resizing : false ,
125
- initialized : false ,
126
- ...defaults ,
127
- data : isDef ( node . data ) ? node . data : { } ,
128
- events : markRaw ( isDef ( node . events ) ? node . events : { } ) ,
129
- }
130
- }
131
-
132
- return Object . assign ( { } , initialState , node , { id : node . id . toString ( ) } ) as GraphNode
133
- }
134
-
135
- export function parseEdge ( edge : Edge , defaults : Partial < GraphEdge > = { } ) : GraphEdge {
136
- const events = isDef ( edge . events ) ? edge . events : defaults . events && isDef ( defaults . events ) ? defaults . events : { }
137
- const data = isDef ( edge . data ) ? edge . data : defaults . data && isDef ( defaults . data ) ? defaults . data : { }
138
-
139
- defaults = ! isGraphEdge ( edge )
140
- ? ( {
141
- ...defaults ,
142
- sourceHandle : ( edge . sourceHandle ? edge . sourceHandle . toString ( ) : undefined ) || defaults . sourceHandle ,
143
- targetHandle : ( edge . targetHandle ? edge . targetHandle . toString ( ) : undefined ) || defaults . targetHandle ,
144
- type : edge . type ?? defaults . type ?? 'default' ,
145
- source : edge . source . toString ( ) || defaults . source ,
146
- target : edge . target . toString ( ) || defaults . target ,
147
- updatable : edge . updatable ?? defaults . updatable ,
148
- selectable : edge . selectable ?? defaults . selectable ,
149
- focusable : edge . focusable ?? defaults . focusable ,
150
- data,
151
- events : markRaw ( events ) ,
152
- label : ( edge . label && typeof edge . label !== 'string' ? markRaw ( edge . label ) : edge . label ) || defaults . label ,
153
- interactionWidth : edge . interactionWidth || defaults . interactionWidth ,
154
- } as GraphEdge )
155
- : defaults
156
-
157
- return Object . assign ( { } , defaults , edge , { id : edge . id . toString ( ) } ) as GraphEdge
100
+ export function parseNode ( node : Node , existingNode ?: GraphNode , parentNode ?: string ) : GraphNode {
101
+ const initialState = {
102
+ id : node . id . toString ( ) ,
103
+ type : node . type ?? 'default' ,
104
+ dimensions : markRaw ( {
105
+ width : 0 ,
106
+ height : 0 ,
107
+ } ) ,
108
+ handleBounds : {
109
+ source : [ ] ,
110
+ target : [ ] ,
111
+ } ,
112
+ computedPosition : markRaw ( {
113
+ z : 0 ,
114
+ ...node . position ,
115
+ } ) ,
116
+ draggable : undefined ,
117
+ selectable : undefined ,
118
+ connectable : undefined ,
119
+ focusable : undefined ,
120
+ selected : false ,
121
+ dragging : false ,
122
+ resizing : false ,
123
+ initialized : false ,
124
+ isParent : false ,
125
+ position : {
126
+ x : 0 ,
127
+ y : 0 ,
128
+ } ,
129
+ data : isDef ( node . data ) ? node . data : { } ,
130
+ events : markRaw ( isDef ( node . events ) ? node . events : { } ) ,
131
+ } as GraphNode
132
+
133
+ return Object . assign ( existingNode ?? initialState , node , { id : node . id . toString ( ) , parentNode } ) as GraphNode
134
+ }
135
+
136
+ export function parseEdge ( edge : Edge , existingEdge ?: GraphEdge , defaultEdgeOptions ?: DefaultEdgeOptions ) : GraphEdge {
137
+ const initialState = {
138
+ id : edge . id . toString ( ) ,
139
+ type : edge . type ?? existingEdge ?. type ?? 'default' ,
140
+ source : edge . source . toString ( ) ,
141
+ target : edge . target . toString ( ) ,
142
+ sourceHandle : edge . sourceHandle ?. toString ( ) ,
143
+ targetHandle : edge . targetHandle ?. toString ( ) ,
144
+ updatable : edge . updatable ?? defaultEdgeOptions ?. updatable ,
145
+ selectable : edge . selectable ?? defaultEdgeOptions ?. selectable ,
146
+ focusable : edge . focusable ?? defaultEdgeOptions ?. focusable ,
147
+ data : isDef ( edge . data ) ? edge . data : { } ,
148
+ events : markRaw ( isDef ( edge . events ) ? edge . events : { } ) ,
149
+ label : edge . label ?? '' ,
150
+ interactionWidth : edge . interactionWidth ?? defaultEdgeOptions ?. interactionWidth ,
151
+ ...( defaultEdgeOptions ?? { } ) ,
152
+ } as GraphEdge
153
+
154
+ return Object . assign ( existingEdge ?? initialState , edge , { id : edge . id . toString ( ) } ) as GraphEdge
158
155
}
159
156
160
157
function getConnectedElements < T extends Node = Node > (
@@ -254,7 +251,7 @@ export function addEdge(edgeParams: Edge | Connection, elements: Elements, defau
254
251
} as Edge
255
252
}
256
253
257
- edge = parseEdge ( edge , defaults )
254
+ edge = parseEdge ( edge , undefined , defaults )
258
255
259
256
if ( connectionExists ( edge , elements ) ) {
260
257
return elements
0 commit comments