Skip to content

Commit

Permalink
iOS: branch out Fabric handling into a separate RCTSurface-compatible…
Browse files Browse the repository at this point in the history
… class.

Reviewed By: mmmulani

Differential Revision: D7158824

fbshipit-source-id: 80eb61835181fa3f522b788e2861470cba88890a
  • Loading branch information
fkgozali authored and facebook-github-bot committed Mar 6, 2018
1 parent 9366ce4 commit b4ce427
Show file tree
Hide file tree
Showing 16 changed files with 165 additions and 156 deletions.
10 changes: 1 addition & 9 deletions React/Base/RCTRootContentView.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
25 changes: 4 additions & 21 deletions React/Base/RCTRootContentView.m
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,8 @@ - (instancetype)initWithFrame:(CGRect)frame
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;
Expand All @@ -35,14 +33,6 @@ - (instancetype)initWithFrame:(CGRect)frame
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)

Expand Down Expand Up @@ -109,17 +99,10 @@ - (void)invalidate
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];
}
}

Expand Down
25 changes: 1 addition & 24 deletions React/Base/RCTRootView.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 -
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand Down
23 changes: 2 additions & 21 deletions React/Base/RCTRootView.m
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ @implementation RCTRootView
- (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");
Expand All @@ -66,7 +65,6 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
if (self = [super initWithFrame:CGRectZero]) {
self.backgroundColor = [UIColor whiteColor];

_fabric = fabric;
_bridge = bridge;
_moduleName = moduleName;
_appProperties = [initialProperties copy];
Expand Down Expand Up @@ -108,32 +106,16 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
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)
Expand Down Expand Up @@ -289,8 +271,7 @@ - (void)bundleFinishedLoading:(RCTBridge *)bridge
_contentView = [[RCTRootContentView alloc] initWithFrame:self.bounds
bridge:bridge
reactTag:self.reactTag
sizeFlexiblity:_sizeFlexibility
fabric:self.fabric];
sizeFlexiblity:_sizeFlexibility];
[self runApplication:bridge];

_contentView.passThroughTouches = _passThroughTouches;
Expand Down
22 changes: 14 additions & 8 deletions React/Base/Surface/RCTSurface.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
32 changes: 14 additions & 18 deletions React/Base/Surface/RCTSurface.mm
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,10 @@ @implementation RCTSurface {
- (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;
Expand Down Expand Up @@ -105,13 +103,6 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
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];
Expand Down Expand Up @@ -310,21 +301,14 @@ - (void)_run

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
Expand Down Expand Up @@ -571,4 +555,16 @@ - (void)uiManagerDidPerformMounting:(RCTUIManager *)manager
}
}

#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
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ @implementation RCTSurfaceHostingProxyRootView
- (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");
Expand All @@ -62,7 +61,7 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
[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];
}

Expand All @@ -71,32 +70,16 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
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)
Expand All @@ -114,11 +97,6 @@ - (RCTBridge *)bridge
return super.surface.bridge;
}

- (BOOL)fabric
{
return super.surface.fabric;
}

- (UIView *)contentView
{
return self;
Expand Down
10 changes: 4 additions & 6 deletions React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Loading

0 comments on commit b4ce427

Please sign in to comment.