From b4ce4277af6e14dc2bdfa20c874e95348fcbae8f Mon Sep 17 00:00:00 2001 From: Kevin Gozali Date: Mon, 5 Mar 2018 18:29:39 -0800 Subject: [PATCH] iOS: branch out Fabric handling into a separate RCTSurface-compatible class. Reviewed By: mmmulani Differential Revision: D7158824 fbshipit-source-id: 80eb61835181fa3f522b788e2861470cba88890a --- React/Base/RCTRootContentView.h | 10 +----- React/Base/RCTRootContentView.m | 25 +++------------ React/Base/RCTRootView.h | 25 +-------------- React/Base/RCTRootView.m | 23 ++----------- React/Base/Surface/RCTSurface.h | 22 ++++++++----- React/Base/Surface/RCTSurface.mm | 32 ++++++++----------- .../RCTSurfaceHostingProxyRootView.h | 14 +------- .../RCTSurfaceHostingProxyRootView.mm | 26 ++------------- .../RCTSurfaceHostingView.h | 10 +++--- .../RCTSurfaceHostingView.mm | 20 +++++------- React/Fabric/Surface/RCTFabricSurface.h | 16 ++++++++++ React/Fabric/Surface/RCTFabricSurface.mm | 22 +++++++++++++ .../RCTFabricSurfaceHostingProxyRootView.h | 16 ++++++++++ .../RCTFabricSurfaceHostingProxyRootView.mm | 19 +++++++++++ .../Surface/RCTFabricSurfaceHostingView.h | 16 ++++++++++ .../Surface/RCTFabricSurfaceHostingView.mm | 25 +++++++++++++++ 16 files changed, 165 insertions(+), 156 deletions(-) create mode 100644 React/Fabric/Surface/RCTFabricSurface.h create mode 100644 React/Fabric/Surface/RCTFabricSurface.mm create mode 100644 React/Fabric/Surface/RCTFabricSurfaceHostingProxyRootView.h create mode 100644 React/Fabric/Surface/RCTFabricSurfaceHostingProxyRootView.mm create mode 100644 React/Fabric/Surface/RCTFabricSurfaceHostingView.h create mode 100644 React/Fabric/Surface/RCTFabricSurfaceHostingView.mm diff --git a/React/Base/RCTRootContentView.h b/React/Base/RCTRootContentView.h index bd14cfb2005..28a0646cfed 100644 --- a/React/Base/RCTRootContentView.h +++ b/React/Base/RCTRootContentView.h @@ -24,17 +24,9 @@ @property (nonatomic, assign) BOOL passThroughTouches; @property (nonatomic, assign) RCTRootViewSizeFlexibility sizeFlexibility; -@property (nonatomic, assign) BOOL fabric; - - (instancetype)initWithFrame:(CGRect)frame bridge:(RCTBridge *)bridge reactTag:(NSNumber *)reactTag - sizeFlexiblity:(RCTRootViewSizeFlexibility)sizeFlexibility - fabric:(BOOL)fabric NS_DESIGNATED_INITIALIZER; - -- (instancetype)initWithFrame:(CGRect)frame - bridge:(RCTBridge *)bridge - reactTag:(NSNumber *)reactTag - sizeFlexiblity:(RCTRootViewSizeFlexibility)sizeFlexibility; + sizeFlexiblity:(RCTRootViewSizeFlexibility)sizeFlexibility NS_DESIGNATED_INITIALIZER; @end diff --git a/React/Base/RCTRootContentView.m b/React/Base/RCTRootContentView.m index 7782d06f02c..67b1f8b7002 100644 --- a/React/Base/RCTRootContentView.m +++ b/React/Base/RCTRootContentView.m @@ -21,10 +21,8 @@ bridge:(RCTBridge *)bridge reactTag:(NSNumber *)reactTag sizeFlexiblity:(RCTRootViewSizeFlexibility)sizeFlexibility - fabric:(BOOL)fabric { if ((self = [super initWithFrame:frame])) { - _fabric = fabric; _bridge = bridge; self.reactTag = reactTag; _sizeFlexibility = sizeFlexibility; @@ -35,14 +33,6 @@ return self; } -- (instancetype)initWithFrame:(CGRect)frame - bridge:(RCTBridge *)bridge - reactTag:(NSNumber *)reactTag - sizeFlexiblity:(RCTRootViewSizeFlexibility)sizeFlexibility -{ - return [self initWithFrame:frame bridge:bridge reactTag:reactTag sizeFlexiblity:sizeFlexibility fabric:NO]; -} - RCT_NOT_IMPLEMENTED(-(instancetype)initWithFrame:(CGRect)frame) RCT_NOT_IMPLEMENTED(-(instancetype)initWithCoder:(nonnull NSCoder *)aDecoder) @@ -109,17 +99,10 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithCoder:(nonnull NSCoder *)aDecoder) self.userInteractionEnabled = NO; [(RCTRootView *)self.superview contentViewInvalidated]; - if (_fabric) { - [_bridge enqueueJSCall:@"ReactFabric" - method:@"unmountComponentAtNodeAndRemoveContainer" - args:@[self.reactTag] - completion:NULL]; - } else { - [_bridge enqueueJSCall:@"AppRegistry" - method:@"unmountApplicationComponentAtRootTag" - args:@[self.reactTag] - completion:NULL]; - } + [_bridge enqueueJSCall:@"AppRegistry" + method:@"unmountApplicationComponentAtRootTag" + args:@[self.reactTag] + completion:NULL]; } } diff --git a/React/Base/RCTRootView.h b/React/Base/RCTRootView.h index 41c21f672fd..daab13efbe8 100644 --- a/React/Base/RCTRootView.h +++ b/React/Base/RCTRootView.h @@ -44,16 +44,7 @@ extern NSString *const RCTContentDidAppearNotification; */ - (instancetype)initWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - fabric:(BOOL)fabric NS_DESIGNATED_INITIALIZER; - -/** - * - Convenience initializer - - * Initialize without using FabricUIManager. - */ -- (instancetype)initWithBridge:(RCTBridge *)bridge - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties; + initialProperties:(NSDictionary *)initialProperties NS_DESIGNATED_INITIALIZER; /** * - Convenience initializer - @@ -67,15 +58,6 @@ extern NSString *const RCTContentDidAppearNotification; initialProperties:(NSDictionary *)initialProperties launchOptions:(NSDictionary *)launchOptions; -/** - * - Convenience initializer - - */ -- (instancetype)initWithBundleURL:(NSURL *)bundleURL - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - launchOptions:(NSDictionary *)launchOptions - fabric:(BOOL)fabric; - /** * The name of the JavaScript module to execute within the @@ -165,11 +147,6 @@ extern NSString *const RCTContentDidAppearNotification; @property (nonatomic, assign) NSTimeInterval loadingViewFadeDelay; @property (nonatomic, assign) NSTimeInterval loadingViewFadeDuration; -/** - * Indicates whether this view is managed by FabricUIManager or the traditional UIManager. - */ -@property (nonatomic, assign) BOOL fabric; - @end @interface RCTRootView (Deprecated) diff --git a/React/Base/RCTRootView.m b/React/Base/RCTRootView.m index 8fabbd6e847..204dd5871be 100644 --- a/React/Base/RCTRootView.m +++ b/React/Base/RCTRootView.m @@ -52,7 +52,6 @@ NSString *const RCTContentDidAppearNotification = @"RCTContentDidAppearNotificat - (instancetype)initWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties - fabric:(BOOL)fabric { RCTAssertMainQueue(); RCTAssert(bridge, @"A bridge instance is required to create an RCTRootView"); @@ -66,7 +65,6 @@ NSString *const RCTContentDidAppearNotification = @"RCTContentDidAppearNotificat if (self = [super initWithFrame:CGRectZero]) { self.backgroundColor = [UIColor whiteColor]; - _fabric = fabric; _bridge = bridge; _moduleName = moduleName; _appProperties = [initialProperties copy]; @@ -108,32 +106,16 @@ NSString *const RCTContentDidAppearNotification = @"RCTContentDidAppearNotificat return self; } -- (instancetype)initWithBridge:(RCTBridge *)bridge - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties -{ - return [self initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties fabric:NO]; -} - - (instancetype)initWithBundleURL:(NSURL *)bundleURL moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties launchOptions:(NSDictionary *)launchOptions - fabric:(BOOL)fabric { RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:bundleURL moduleProvider:nil launchOptions:launchOptions]; - return [self initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties fabric:fabric]; -} - -- (instancetype)initWithBundleURL:(NSURL *)bundleURL - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - launchOptions:(NSDictionary *)launchOptions -{ - return [self initWithBundleURL:bundleURL moduleName:moduleName initialProperties:initialProperties launchOptions:launchOptions fabric:NO]; + return [self initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties]; } RCT_NOT_IMPLEMENTED(- (instancetype)initWithFrame:(CGRect)frame) @@ -289,8 +271,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:(NSCoder *)aDecoder) _contentView = [[RCTRootContentView alloc] initWithFrame:self.bounds bridge:bridge reactTag:self.reactTag - sizeFlexiblity:_sizeFlexibility - fabric:self.fabric]; + sizeFlexiblity:_sizeFlexibility]; [self runApplication:bridge]; _contentView.passThroughTouches = _passThroughTouches; diff --git a/React/Base/Surface/RCTSurface.h b/React/Base/Surface/RCTSurface.h index 01d4896f9e3..5c3566725e4 100644 --- a/React/Base/Surface/RCTSurface.h +++ b/React/Base/Surface/RCTSurface.h @@ -42,16 +42,9 @@ NS_ASSUME_NONNULL_BEGIN @property (atomic, copy, readwrite) NSDictionary *properties; -@property (nonatomic, assign, readonly) BOOL fabric; - - (instancetype)initWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - fabric:(BOOL)fabric NS_DESIGNATED_INITIALIZER; - -- (instancetype)initWithBridge:(RCTBridge *)bridge - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties; + initialProperties:(NSDictionary *)initialProperties NS_DESIGNATED_INITIALIZER; #pragma mark - Dealing with UIView representation, the Main thread only access @@ -122,6 +115,19 @@ NS_ASSUME_NONNULL_BEGIN */ - (BOOL)synchronouslyWaitForStage:(RCTSurfaceStage)stage timeout:(NSTimeInterval)timeout; +#pragma mark - Mounting/Unmounting of React components + +/** + * Mount the React component specified by the given moduleName. This is typically + * calling runApplication.js from the native side. + */ +- (void)mountReactComponentWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName params:(NSDictionary *)params; + +/** + * Unmount the React component specified by the given rootViewTag, called from native. + */ +- (void)unmountReactComponentWithBridge:(RCTBridge *)bridge rootViewTag:(NSNumber *)rootViewTag; + @end NS_ASSUME_NONNULL_END diff --git a/React/Base/Surface/RCTSurface.mm b/React/Base/Surface/RCTSurface.mm index eac4985e04c..2817cf29aa6 100644 --- a/React/Base/Surface/RCTSurface.mm +++ b/React/Base/Surface/RCTSurface.mm @@ -61,12 +61,10 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties - fabric:(BOOL)fabric { RCTAssert(bridge.valid, @"Valid bridge is required to instanciate `RCTSurface`."); if (self = [super init]) { - _fabric = fabric; _bridge = bridge; _batchedBridge = [_bridge batchedBridge] ?: _bridge; _moduleName = moduleName; @@ -105,13 +103,6 @@ return self; } -- (instancetype)initWithBridge:(RCTBridge *)bridge - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties -{ - return [self initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties fabric:NO]; -} - - (void)dealloc { [self _stop]; @@ -310,21 +301,14 @@ RCTLogInfo(@"Running surface %@ (%@)", _moduleName, applicationParameters); - [batchedBridge enqueueJSCall:@"AppRegistry" - method:@"runApplication" - args:@[_moduleName, applicationParameters] - completion:NULL]; + [self mountReactComponentWithBridge:batchedBridge moduleName:_moduleName params:applicationParameters]; [self _setStage:RCTSurfaceStageSurfaceDidRun]; } - (void)_stop { - RCTBridge *batchedBridge = self._batchedBridge; - [batchedBridge enqueueJSCall:@"AppRegistry" - method:@"unmountApplicationComponentAtRootTag" - args:@[self->_rootViewTag] - completion:NULL]; + [self unmountReactComponentWithBridge:self._batchedBridge rootViewTag:self->_rootViewTag]; } - (void)_registerRootView @@ -571,4 +555,16 @@ } } +#pragma mark - Mounting/Unmounting of React components + +- (void)mountReactComponentWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName params:(NSDictionary *)params +{ + [bridge enqueueJSCall:@"AppRegistry" method:@"runApplication" args:@[moduleName, params] completion:NULL]; +} + +- (void)unmountReactComponentWithBridge:(RCTBridge *)bridge rootViewTag:(NSNumber *)rootViewTag +{ + [bridge enqueueJSCall:@"AppRegistry" method:@"unmountApplicationComponentAtRootTag" args:@[rootViewTag] completion:NULL]; +} + @end diff --git a/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.h b/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.h index b761cc33bde..6e07b1ac0a8 100644 --- a/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.h +++ b/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.h @@ -35,28 +35,16 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, assign) BOOL passThroughTouches; @property (nonatomic, assign) NSTimeInterval loadingViewFadeDelay; @property (nonatomic, assign) NSTimeInterval loadingViewFadeDuration; -@property (nonatomic, assign) BOOL fabric; - (instancetype)initWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - fabric:(BOOL)fabric NS_DESIGNATED_INITIALIZER; - -- (instancetype)initWithBridge:(RCTBridge *)bridge - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties; + initialProperties:(NSDictionary *)initialProperties NS_DESIGNATED_INITIALIZER; - (instancetype)initWithBundleURL:(NSURL *)bundleURL moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties launchOptions:(NSDictionary *)launchOptions; -- (instancetype)initWithBundleURL:(NSURL *)bundleURL - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - launchOptions:(NSDictionary *)launchOptions - fabric:(BOOL)fabric; - - (void)cancelTouches; @end diff --git a/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm b/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm index 114b1f3981b..4fc100f6b6c 100644 --- a/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +++ b/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm @@ -51,7 +51,6 @@ static RCTRootViewSizeFlexibility convertToRootViewSizeFlexibility(RCTSurfaceSiz - (instancetype)initWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties - fabric:(BOOL)fabric { RCTAssertMainQueue(); RCTAssert(bridge, @"A bridge instance is required to create an RCTSurfaceHostingProxyRootView"); @@ -62,7 +61,7 @@ static RCTRootViewSizeFlexibility convertToRootViewSizeFlexibility(RCTSurfaceSiz [bridge.performanceLogger markStartForTag:RCTPLTTI]; } - if (self = [super initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties fabric:fabric]) { + if (self = [super initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties]) { self.backgroundColor = [UIColor whiteColor]; } @@ -71,32 +70,16 @@ static RCTRootViewSizeFlexibility convertToRootViewSizeFlexibility(RCTSurfaceSiz return self; } -- (instancetype)initWithBridge:(RCTBridge *)bridge - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties -{ - return [self initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties fabric:NO]; -} - - (instancetype)initWithBundleURL:(NSURL *)bundleURL moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties launchOptions:(NSDictionary *)launchOptions - fabric:(BOOL)fabric { RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:bundleURL moduleProvider:nil launchOptions:launchOptions]; - return [self initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties fabric:fabric]; -} - -- (instancetype)initWithBundleURL:(NSURL *)bundleURL - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - launchOptions:(NSDictionary *)launchOptions -{ - return [self initWithBundleURL:bundleURL moduleName:moduleName initialProperties:initialProperties launchOptions:launchOptions fabric:NO]; + return [self initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties]; } RCT_NOT_IMPLEMENTED(- (instancetype)initWithFrame:(CGRect)frame) @@ -114,11 +97,6 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:(NSCoder *)aDecoder) return super.surface.bridge; } -- (BOOL)fabric -{ - return super.surface.fabric; -} - - (UIView *)contentView { return self; diff --git a/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.h b/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.h index 6f6ffe50f59..4434df84e00 100644 --- a/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.h +++ b/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.h @@ -43,13 +43,11 @@ NS_ASSUME_NONNULL_BEGIN initialProperties:(NSDictionary *)initialProperties; /** - * Convenience initializer. - * To control toggle Fabric for the Surface. + * Create an instance of RCTSurface to be hosted. */ -- (instancetype)initWithBridge:(RCTBridge *)bridge - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties - fabric:(BOOL)fabric; +- (RCTSurface *)createSurfaceWithBridge:(RCTBridge *)bridge + moduleName:(NSString *)moduleName + initialProperties:(NSDictionary *)initialProperties; /** * Surface object which is currently using to power the view. diff --git a/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.mm b/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.mm index de4f5ec9733..3c3ab2bf7fa 100644 --- a/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.mm +++ b/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.mm @@ -33,23 +33,12 @@ RCT_NOT_IMPLEMENTED(- (nullable instancetype)initWithCoder:(NSCoder *)coder) - (instancetype)initWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties - fabric:(BOOL)fabric { - RCTSurface *surface = [[RCTSurface alloc] initWithBridge:bridge - moduleName:moduleName - initialProperties:initialProperties - fabric:fabric]; + RCTSurface *surface = [self createSurfaceWithBridge:bridge moduleName:moduleName initialProperties:initialProperties]; return [self initWithSurface:surface]; } -- (instancetype)initWithBridge:(RCTBridge *)bridge - moduleName:(NSString *)moduleName - initialProperties:(NSDictionary *)initialProperties -{ - return [self initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties fabric:NO]; -} - - (instancetype)initWithSurface:(RCTSurface *)surface { if (self = [super initWithFrame:CGRectZero]) { @@ -67,6 +56,13 @@ RCT_NOT_IMPLEMENTED(- (nullable instancetype)initWithCoder:(NSCoder *)coder) return self; } +- (RCTSurface *)createSurfaceWithBridge:(RCTBridge *)bridge + moduleName:(NSString *)moduleName + initialProperties:(NSDictionary *)initialProperties +{ + return [[RCTSurface alloc] initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties]; +} + - (void)setFrame:(CGRect)frame { [super setFrame:frame]; diff --git a/React/Fabric/Surface/RCTFabricSurface.h b/React/Fabric/Surface/RCTFabricSurface.h new file mode 100644 index 00000000000..1672a9a86ac --- /dev/null +++ b/React/Fabric/Surface/RCTFabricSurface.h @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import + +/** + * Fabric-compatible RCTSurface implementation. + * It may not continue extending from RCTSurface in the future. + */ +@interface RCTFabricSurface : RCTSurface + +@end diff --git a/React/Fabric/Surface/RCTFabricSurface.mm b/React/Fabric/Surface/RCTFabricSurface.mm new file mode 100644 index 00000000000..bcdaac13129 --- /dev/null +++ b/React/Fabric/Surface/RCTFabricSurface.mm @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "RCTFabricSurface.h" + +#import + +@implementation RCTFabricSurface + +- (void)unmountReactComponentWithBridge:(RCTBridge *)bridge rootViewTag:(NSNumber *)rootViewTag +{ + [bridge enqueueJSCall:@"ReactFabric" + method:@"unmountComponentAtNodeAndRemoveContainer" + args:@[rootViewTag] + completion:NULL]; +} + +@end diff --git a/React/Fabric/Surface/RCTFabricSurfaceHostingProxyRootView.h b/React/Fabric/Surface/RCTFabricSurfaceHostingProxyRootView.h new file mode 100644 index 00000000000..3214426e77d --- /dev/null +++ b/React/Fabric/Surface/RCTFabricSurfaceHostingProxyRootView.h @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import + +/** + * Fabric-compatible RCTSurfaceHostingProxyRootView implementation. + */ +@interface RCTFabricSurfaceHostingProxyRootView : RCTSurfaceHostingProxyRootView + +@end + diff --git a/React/Fabric/Surface/RCTFabricSurfaceHostingProxyRootView.mm b/React/Fabric/Surface/RCTFabricSurfaceHostingProxyRootView.mm new file mode 100644 index 00000000000..159a63c865e --- /dev/null +++ b/React/Fabric/Surface/RCTFabricSurfaceHostingProxyRootView.mm @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "RCTFabricSurfaceHostingProxyRootView.h" + +#import "RCTFabricSurface.h" + +@implementation RCTFabricSurfaceHostingProxyRootView + +- (RCTSurface *)createSurfaceWithBridge:(RCTBridge *)bridge moduleName:(NSString *)moduleName initialProperties:(NSDictionary *)initialProperties +{ + return [[RCTFabricSurface alloc] initWithBridge:bridge moduleName:moduleName initialProperties:initialProperties]; +} + +@end diff --git a/React/Fabric/Surface/RCTFabricSurfaceHostingView.h b/React/Fabric/Surface/RCTFabricSurfaceHostingView.h new file mode 100644 index 00000000000..c50fa51acee --- /dev/null +++ b/React/Fabric/Surface/RCTFabricSurfaceHostingView.h @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import + +/** + * Fabric-compatible RCTSurfaceHostingView implementation. + */ +@interface RCTFabricSurfaceHostingView : RCTSurfaceHostingView + +@end + diff --git a/React/Fabric/Surface/RCTFabricSurfaceHostingView.mm b/React/Fabric/Surface/RCTFabricSurfaceHostingView.mm new file mode 100644 index 00000000000..395d40afb68 --- /dev/null +++ b/React/Fabric/Surface/RCTFabricSurfaceHostingView.mm @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "RCTFabricSurfaceHostingView.h" + +#import "RCTFabricSurface.h" + +@implementation RCTFabricSurfaceHostingView + +- (instancetype)initWithBridge:(RCTBridge *)bridge + moduleName:(NSString *)moduleName + initialProperties:(NSDictionary *)initialProperties +{ + RCTFabricSurface *surface = [[RCTFabricSurface alloc] initWithBridge:bridge + moduleName:moduleName + initialProperties:initialProperties]; + return [self initWithSurface:surface]; +} + +@end +