mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
fced0765d6
Summary: ## Problem Many of our NativeModules use the bridge to access the UIManager. They then use the UIManager to call viewForReactTag. This makes all these NativeModules Venice-incompatible. P155700869 ## Solution This diff introduces a Venice-compatible API called RCTViewRegistry that will implement viewForReactTag. When the bridge exists, RCTViewRegistry will delegate to the UIManager. When the bridge doesn't exist, it'll delegate to RCTSurfacePresenter. Fingers crossed, this should allow us move ~50 NativeModuels off the bridge. Changelog: [Internal] Reviewed By: PeteTheHeat Differential Revision: D25641391 fbshipit-source-id: 144f4f7a35af1245401ad640068852dd66bbf65d
46 lines
1022 B
Objective-C
46 lines
1022 B
Objective-C
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#import <React/RCTSurfacePresenterStub.h>
|
|
#import <React/RCTUIManager.h>
|
|
|
|
#import "RCTBridge.h"
|
|
#import "RCTBridgeModule.h"
|
|
|
|
@implementation RCTViewRegistry {
|
|
RCTBridgelessComponentViewProvider _bridgelessComponentViewProvider;
|
|
__weak RCTBridge *_bridge;
|
|
}
|
|
|
|
- (void)setBridge:(RCTBridge *)bridge
|
|
{
|
|
_bridge = bridge;
|
|
}
|
|
|
|
- (void)setBridgelessComponentViewProvider:(RCTBridgelessComponentViewProvider)bridgelessComponentViewProvider
|
|
{
|
|
_bridgelessComponentViewProvider = bridgelessComponentViewProvider;
|
|
}
|
|
|
|
- (UIView *)viewForReactTag:(NSNumber *)reactTag
|
|
{
|
|
UIView *view = nil;
|
|
|
|
RCTBridge *bridge = _bridge;
|
|
if (bridge) {
|
|
view = [bridge.uiManager viewForReactTag:reactTag];
|
|
}
|
|
|
|
if (view == nil && _bridgelessComponentViewProvider) {
|
|
view = _bridgelessComponentViewProvider(reactTag);
|
|
}
|
|
|
|
return view;
|
|
}
|
|
|
|
@end
|