From 50b406d3c075b896a15deff5edef3805dca34630 Mon Sep 17 00:00:00 2001 From: Wojciech Lewicki Date: Fri, 17 May 2024 16:20:35 +0200 Subject: [PATCH] fix: add patch for reload on markdown --- ...-live-markdown+0.1.70+001+fixRefresh.patch | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 patches/@expensify+react-native-live-markdown+0.1.70+001+fixRefresh.patch diff --git a/patches/@expensify+react-native-live-markdown+0.1.70+001+fixRefresh.patch b/patches/@expensify+react-native-live-markdown+0.1.70+001+fixRefresh.patch new file mode 100644 index 0000000000000..2f425e28cab5e --- /dev/null +++ b/patches/@expensify+react-native-live-markdown+0.1.70+001+fixRefresh.patch @@ -0,0 +1,74 @@ +diff --git a/node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.mm b/node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.mm +index fa6eb39..24bbcb8 100644 +--- a/node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.mm ++++ b/node_modules/@expensify/react-native-live-markdown/ios/RCTLiveMarkdownModule.mm +@@ -14,24 +14,54 @@ + @implementation RCTLiveMarkdownModule { + BOOL installed_; + std::shared_ptr commitHook_; ++ __weak RCTSurfacePresenter *surfacePresenter_; + } + + RCT_EXPORT_MODULE(@"LiveMarkdownModule") + + - (NSNumber *)install { +- if (!installed_) { +- installed_ = YES; +- +- RCTBridge *bridge = self.bridge; +- RCTSurfacePresenter *surfacePresenter = bridge.surfacePresenter; +- RCTScheduler *scheduler = [surfacePresenter scheduler]; ++ if (!installed_ && surfacePresenter_ != nil) { ++ RCTScheduler *scheduler = [surfacePresenter_ scheduler]; + + commitHook_ = +- std::make_shared(scheduler.uiManager); ++ std::make_shared(scheduler.uiManager); ++ installed_ = YES; + } + return @1; + } + ++- (void)handleJavaScriptDidLoadNotification:(NSNotification *)notification ++{ ++ surfacePresenter_ = self.bridge.surfacePresenter; ++ [self install]; ++} ++ ++- (void)setBridge:(RCTBridge *)bridge ++{ ++ [super setBridge:bridge]; ++ ++ [[NSNotificationCenter defaultCenter] addObserver:self ++ selector:@selector(handleJavaScriptDidLoadNotification:) ++ name:RCTJavaScriptDidLoadNotification ++ object:nil]; ++ ++ // only within the first loading `self.bridge.surfacePresenter` exists ++ // during the reload `self.bridge.surfacePresenter` is null ++ if (self.bridge.surfacePresenter) { ++ surfacePresenter_ = self.bridge.surfacePresenter; ++ } ++} ++ ++/* ++ * Taken from RCTNativeAnimatedTurboModule: ++ * This selector is invoked via BridgelessTurboModuleSetup. ++ */ ++- (void)setSurfacePresenter:(id)surfacePresenter ++{ ++ surfacePresenter_ = surfacePresenter; ++} ++ ++ + - (std::shared_ptr)getTurboModule: + (const facebook::react::ObjCTurboModule::InitParams &)params { + return std::make_shared( +@@ -40,6 +70,7 @@ - (NSNumber *)install { + + - (void)invalidate { + MarkdownShadowFamilyRegistry::reset(); ++ [[NSNotificationCenter defaultCenter] removeObserver:self]; + [super invalidate]; + } +