Skip to content

Commit d6c90cf

Browse files
cipolleschifacebook-github-bot
authored andcommitted
Make sure to pass the BridgeProxy to view managers in the interop layer (#45329)
Summary: Pull Request resolved: #45329 Thanks to [#45232](#45232) we found a bug in the interop layer, where we were not passing the BridgeProxy in bridgeless mode to the view managers. This Change should fix that issue. ## Changelog: [iOS][Fixed] - Make sure to pass the RCTBridgeProxy to ViewManagers Reviewed By: dmytrorykun Differential Revision: D59468292 fbshipit-source-id: 00666be21385a735878eb567c4b8a0986c609c5f
1 parent 6b7076e commit d6c90cf

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

packages/react-native/React/Views/RCTComponentData.m

+11-3
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,20 @@ - (instancetype)initWithManagerClass:(Class)managerClass
6161
return self;
6262
}
6363

64+
- (BOOL)isBridgeMode
65+
{
66+
// If we are in bridge mode, the bridge is RCTBridge
67+
// If we are bridgeless, the bridge is RCTBridgeProxy
68+
return [_bridge isKindOfClass:[RCTBridge class]];
69+
}
70+
6471
- (RCTViewManager *)manager
6572
{
66-
if (!_manager && _bridge) {
73+
if (!_manager && [self isBridgeMode]) {
6774
_manager = [_bridge moduleForClass:_managerClass];
6875
} else if (!_manager && !_bridgelessViewManager) {
6976
_bridgelessViewManager = [_managerClass new];
77+
_bridgelessViewManager.bridge = _bridge;
7078
[[NSNotificationCenter defaultCenter] postNotificationName:RCTDidInitializeModuleNotification
7179
object:nil
7280
userInfo:@{@"module" : _bridgelessViewManager}];
@@ -265,8 +273,8 @@ - (RCTPropBlock)createPropBlock:(NSString *)name isShadowView:(BOOL)isShadowView
265273
type == NSSelectorFromString(@"RCTDirectEventBlock:") ||
266274
type == NSSelectorFromString(@"RCTCapturingEventBlock:")) {
267275
// Special case for event handlers
268-
setterBlock =
269-
createEventSetter(name, setter, self.eventInterceptor, _bridge ? _bridge.eventDispatcher : _eventDispatcher);
276+
setterBlock = createEventSetter(
277+
name, setter, self.eventInterceptor, [self isBridgeMode] ? _bridge.eventDispatcher : _eventDispatcher);
270278
} else {
271279
// Ordinary property handlers
272280
NSMethodSignature *typeSignature = [[RCTConvert class] methodSignatureForSelector:type];

packages/react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm

+4-3
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,10 @@ static Class getViewManagerClass(const std::string &componentName, RCTBridge *br
125125
bridgeModuleDecorator = unwrapManagedObject(optionalModuleDecorator.value());
126126
}
127127

128-
RCTComponentData *componentData = [[RCTComponentData alloc] initWithManagerClass:viewManagerClass
129-
bridge:bridge
130-
eventDispatcher:eventDispatcher];
128+
RCTComponentData *componentData =
129+
[[RCTComponentData alloc] initWithManagerClass:viewManagerClass
130+
bridge:bridge != nil ? bridge : (RCTBridge *)bridgeProxy
131+
eventDispatcher:eventDispatcher];
131132
return wrapManagedObject([[RCTLegacyViewManagerInteropCoordinator alloc]
132133
initWithComponentData:componentData
133134
bridge:bridge

0 commit comments

Comments
 (0)