@@ -46,30 +46,20 @@ module ReactView =
4646
4747 let private dispose ( disposable : IDisposable ) = disposable.Dispose()
4848
49- let rec observe < 'view > ( reactView : ReactView ): IObservable < Option < 'view >> =
50- let createObservable ( observer : IObserver < Option < 'view >>) =
51- match reactView with
52- | ReactStatefulView statefulView ->
53- let mapper ( reactView : ReactView )=
54- observe reactView
55-
56- statefulView.State
57- |> Observable.flatmap mapper
58- |> Observable.subscribeObserver observer
59- | ReactView view ->
60- Some ( view.View :?> 'view) |> observer.OnNext
61- observer.OnCompleted ()
62- Disposable.Empty
63- | ReactViewGroup view ->
64- Some ( view.View :?> 'view) |> observer.OnNext
65- observer.OnCompleted ()
66- Disposable.Empty
67- | ReactViewNone ->
68- None |> observer.OnNext
69- observer.OnCompleted ()
70- Disposable.Empty
71-
72- Observable.Create( createObservable)
49+ let rec private observe < 'view when 'view :> IDisposable > ( reactView : ReactView ): IObservable < Option < 'view >> =
50+ match reactView with
51+ | ReactStatefulView statefulView ->
52+ let mapper ( reactView : ReactView )=
53+ observe reactView
54+
55+ statefulView.State
56+ |> Observable.flatmap mapper
57+ | ReactView view ->
58+ Some ( view.View :?> 'view) |> Observable.single
59+ | ReactViewGroup view ->
60+ Some ( view.View :?> 'view) |> Observable.single
61+ | ReactViewNone ->
62+ None |> Observable.single
7363
7464 let private createViewInternal < 'view , 'props when 'view :> IDisposable >
7565 ( name : string )
@@ -119,7 +109,7 @@ module ReactView =
119109 ReactView <| createViewInternal name viewProvider setProps initialProps
120110 createReactView
121111
122- let createViewGroup < 'view , 'viewGroup , 'props when 'viewGroup :> IDisposable >
112+ let createViewGroup < 'view , 'viewGroup , 'props when 'view :> IDisposable and ' viewGroup :> IDisposable >
123113 ( onError : Exception -> unit )
124114 ( name : string )
125115 ( viewGroupProvider : unit -> 'viewGroup )
@@ -294,5 +284,5 @@ module ReactView =
294284 view
295285
296286 let dom = ReactDom.render element
297- updateWith dom ReactViewNone
287+ updateWith dom ReactViewNone |> observe
298288
0 commit comments