Avoid crashing in Fabric/Paper interop without bridge [1/n]

Summary:
Fabric/Paper interop expects bridge to be contained in `contextContainer`, and crashes if it's not there.

This diff avoids a crash, and instead fails silently. Future diffs in stack will enable `RCTComponentData` and `RCTLegacyViewManagerInteropCoordinator` to function without the bridge.

Changelog: [Internal]

Reviewed By: fkgozali

Differential Revision: D27374809

fbshipit-source-id: 2c9e03a1eaf5bcaa57887b203221111015cf4de5
This commit is contained in:
Peter Argany 2021-03-31 16:37:02 -07:00 коммит произвёл Facebook GitHub Bot
Родитель a038179b9b
Коммит 3f8d5083f7
1 изменённых файлов: 7 добавлений и 2 удалений

Просмотреть файл

@ -59,8 +59,13 @@ static std::shared_ptr<void> const constructCoordinator(
auto moduleName = moduleNameFromComponentName(componentName);
Class module = NSClassFromString(RCTNSStringFromString(moduleName));
assert(module);
RCTBridge *bridge = (RCTBridge *)unwrapManagedObjectWeakly(contextContainer->at<std::shared_ptr<void>>("Bridge"));
RCTComponentData *componentData = [[RCTComponentData alloc] initWithManagerClass:module bridge:bridge];
auto optionalBridge = contextContainer->find<std::shared_ptr<void>>("Bridge");
RCTBridge *bridge;
if (optionalBridge) {
bridge = unwrapManagedObjectWeakly(optionalBridge.value());
}
RCTComponentData *componentData = [[RCTComponentData alloc] initWithManagerClass:module
bridge:bridge];
return wrapManagedObject([[RCTLegacyViewManagerInteropCoordinator alloc] initWithComponentData:componentData
bridge:bridge]);
}