14
14
@implementation RCTLiveMarkdownModule {
15
15
BOOL installed_;
16
16
std::shared_ptr<livemarkdown::MarkdownCommitHook> commitHook_;
17
+ __weak RCTSurfacePresenter *surfacePresenter_;
17
18
}
18
19
19
20
RCT_EXPORT_MODULE (@" LiveMarkdownModule" )
20
21
21
22
- (NSNumber *)install {
22
- if (!installed_) {
23
- installed_ = YES ;
24
-
25
- RCTBridge *bridge = self.bridge ;
26
- RCTSurfacePresenter *surfacePresenter = bridge.surfacePresenter ;
27
- RCTScheduler *scheduler = [surfacePresenter scheduler ];
23
+ if (!installed_ && surfacePresenter_ != nil ) {
24
+ RCTScheduler *scheduler = [surfacePresenter_ scheduler ];
28
25
29
26
commitHook_ =
30
- std::make_shared<livemarkdown::MarkdownCommitHook>(scheduler.uiManager );
27
+ std::make_shared<livemarkdown::MarkdownCommitHook>(scheduler.uiManager );
28
+ installed_ = YES ;
31
29
}
32
30
return @1 ;
33
31
}
34
32
33
+ - (void )handleJavaScriptDidLoadNotification : (NSNotification *)notification
34
+ {
35
+ surfacePresenter_ = self.bridge .surfacePresenter ;
36
+ [self install ];
37
+ }
38
+
39
+ - (void )setBridge : (RCTBridge *)bridge
40
+ {
41
+ [super setBridge: bridge];
42
+
43
+ [[NSNotificationCenter defaultCenter ] addObserver: self
44
+ selector: @selector (handleJavaScriptDidLoadNotification: )
45
+ name: RCTJavaScriptDidLoadNotification
46
+ object: nil ];
47
+
48
+ // only within the first loading `self.bridge.surfacePresenter` exists
49
+ // during the reload `self.bridge.surfacePresenter` is null
50
+ if (self.bridge .surfacePresenter ) {
51
+ surfacePresenter_ = self.bridge .surfacePresenter ;
52
+ }
53
+ }
54
+
55
+ /*
56
+ * Taken from RCTNativeAnimatedTurboModule:
57
+ * This selector is invoked via BridgelessTurboModuleSetup.
58
+ */
59
+ - (void )setSurfacePresenter : (id <RCTSurfacePresenterStub>)surfacePresenter
60
+ {
61
+ surfacePresenter_ = surfacePresenter;
62
+ }
63
+
64
+
35
65
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule :
36
66
(const facebook::react::ObjCTurboModule::InitParams &)params {
37
67
return std::make_shared<facebook::react::NativeLiveMarkdownModuleSpecJSI>(
@@ -40,6 +70,7 @@ - (NSNumber *)install {
40
70
41
71
- (void )invalidate {
42
72
MarkdownShadowFamilyRegistry::reset ();
73
+ [[NSNotificationCenter defaultCenter ] removeObserver: self ];
43
74
[super invalidate ];
44
75
}
45
76
0 commit comments