Skip to content

Commit 2c268d7

Browse files
p-sunfacebook-github-bot
authored andcommitted
2/3 Make interop WebView component Bridgeless compatible, and make uiManager addUIBlock migration easier
Summary: Changelog: [iOS] Add `_viewRegistry_DEPRECATED addUIBlock` to replace `uiManager addUIBlock` for Fabric migration Allow people to directly replace `uiManager addUIBlock` with `_viewRegistry_DEPRECATED addUIBlock` when they migrate the method in RCTViewManagers. Currently we add an if check in the RCTViewManager, which makes migration a bit harder for OSS. ``` if (self.bridge) { [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) { work(); }]; } else { RCTExecuteOnMainQueue(work); } ``` Reviewed By: sammy-SC Differential Revision: D34532609 fbshipit-source-id: 19647fea03be8fd71d8f46dfe216275894d8165c
1 parent fc9dec9 commit 2c268d7

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

React/Base/RCTBridgeModule.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,8 @@ typedef NSURL * (^RCTBridgelessBundleURLGetter)(void);
437437

438438
typedef UIView * (^RCTBridgelessComponentViewProvider)(NSNumber *);
439439

440+
typedef void (^RCTViewRegistryUIBlock)(RCTViewRegistry *viewRegistry);
441+
440442
/**
441443
* A class that allows NativeModules to query for views, given React Tags.
442444
*/
@@ -445,6 +447,7 @@ typedef UIView * (^RCTBridgelessComponentViewProvider)(NSNumber *);
445447
- (void)setBridgelessComponentViewProvider:(RCTBridgelessComponentViewProvider)bridgelessComponentViewProvider;
446448

447449
- (UIView *)viewForReactTag:(NSNumber *)reactTag;
450+
- (void)addUIBlock:(RCTViewRegistryUIBlock)block;
448451
@end
449452

450453
typedef void (^RCTBridgelessJSModuleMethodInvoker)(

React/Base/RCTViewRegistry.m

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,28 @@ - (UIView *)viewForReactTag:(NSNumber *)reactTag
4242
return view;
4343
}
4444

45+
- (void)addUIBlock:(RCTViewRegistryUIBlock)block
46+
{
47+
if (!block) {
48+
return;
49+
}
50+
51+
__weak __typeof(self) weakSelf = self;
52+
if (_bridge) {
53+
[_bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
54+
__typeof(self) strongSelf = weakSelf;
55+
if (strongSelf) {
56+
block(strongSelf);
57+
}
58+
}];
59+
} else {
60+
RCTExecuteOnMainQueue(^{
61+
__typeof(self) strongSelf = weakSelf;
62+
if (strongSelf) {
63+
block(strongSelf);
64+
}
65+
});
66+
}
67+
}
68+
4569
@end

0 commit comments

Comments
 (0)