@@ -36,14 +36,19 @@ extension WorkflowNode {
36
36
37
37
private let session : WorkflowSession
38
38
39
- private let observer : WorkflowObserver ?
39
+ /// Reference to the context object for the entity hosting the corresponding node.
40
+ private let hostContext : HostContext
41
+
42
+ private var observer : WorkflowObserver ? {
43
+ hostContext. observer
44
+ }
40
45
41
46
init (
42
47
session: WorkflowSession ,
43
- observer : WorkflowObserver ? = nil
48
+ hostContext : HostContext
44
49
) {
45
50
self . session = session
46
- self . observer = observer
51
+ self . hostContext = hostContext
47
52
}
48
53
49
54
/// Performs an update pass using the given closure.
@@ -60,8 +65,8 @@ extension WorkflowNode {
60
65
previousSinks: previousSinks,
61
66
originalChildWorkflows: childWorkflows,
62
67
originalSideEffectLifetimes: sideEffectLifetimes,
63
- session : session ,
64
- observer : observer
68
+ hostContext : hostContext ,
69
+ session : session
65
70
)
66
71
67
72
let wrapped = RenderContext . make ( implementation: context)
@@ -148,18 +153,21 @@ extension WorkflowNode.SubtreeManager {
148
153
private let originalSideEffectLifetimes : [ AnyHashable : SideEffectLifetime ]
149
154
private( set) var usedSideEffectLifetimes : [ AnyHashable : SideEffectLifetime ]
150
155
156
+ private let hostContext : HostContext
151
157
private let session : WorkflowSession
152
- private let observer : WorkflowObserver ?
158
+
159
+ private var observer : WorkflowObserver ? {
160
+ hostContext. observer
161
+ }
153
162
154
163
init (
155
164
previousSinks: [ ObjectIdentifier : AnyReusableSink ] ,
156
165
originalChildWorkflows: [ ChildKey : AnyChildWorkflow ] ,
157
166
originalSideEffectLifetimes: [ AnyHashable : SideEffectLifetime ] ,
158
- session : WorkflowSession ,
159
- observer : WorkflowObserver ?
167
+ hostContext : HostContext ,
168
+ session : WorkflowSession
160
169
) {
161
170
self . eventPipes = [ ]
162
-
163
171
self . sinkStore = SinkStore ( previousSinks: previousSinks)
164
172
165
173
self . originalChildWorkflows = originalChildWorkflows
@@ -168,8 +176,8 @@ extension WorkflowNode.SubtreeManager {
168
176
self . originalSideEffectLifetimes = originalSideEffectLifetimes
169
177
self . usedSideEffectLifetimes = [ : ]
170
178
179
+ self . hostContext = hostContext
171
180
self . session = session
172
- self . observer = observer
173
181
}
174
182
175
183
func render< Child, Action> (
@@ -194,7 +202,7 @@ extension WorkflowNode.SubtreeManager {
194
202
let eventPipe = EventPipe ( )
195
203
eventPipes. append ( eventPipe)
196
204
197
- /// See if we can
205
+ /// See if we can reuse an existing child node for the given key.
198
206
if let existing = originalChildWorkflows [ childKey] {
199
207
/// Cast the untyped child into a specific typed child. Because our children are keyed by their workflow
200
208
/// type, this should never fail.
@@ -217,8 +225,8 @@ extension WorkflowNode.SubtreeManager {
217
225
outputMap: { outputMap ( $0) } ,
218
226
eventPipe: eventPipe,
219
227
key: key,
220
- parentSession : session ,
221
- observer : observer
228
+ hostContext : hostContext ,
229
+ parentSession : session
222
230
)
223
231
}
224
232
@@ -453,15 +461,15 @@ extension WorkflowNode.SubtreeManager {
453
461
outputMap: @escaping ( W . Output ) -> any WorkflowAction < WorkflowType > ,
454
462
eventPipe: EventPipe ,
455
463
key: String ,
456
- parentSession : WorkflowSession ? ,
457
- observer : WorkflowObserver ?
464
+ hostContext : HostContext ,
465
+ parentSession : WorkflowSession ?
458
466
) {
459
467
self . outputMap = outputMap
460
468
self . node = WorkflowNode < W > (
461
469
workflow: workflow,
462
470
key: key,
463
- parentSession : parentSession ,
464
- observer : observer
471
+ hostContext : hostContext ,
472
+ parentSession : parentSession
465
473
)
466
474
467
475
super. init ( eventPipe: eventPipe)
0 commit comments