Skip to content

Commit

Permalink
RCTSurface: Couple helper functions for Stage
Browse files Browse the repository at this point in the history
Summary: We need this trivial funcs to unify spinner appearance logic.

Reviewed By: rsnara

Differential Revision: D6367072

fbshipit-source-id: 70e288bc1fed5911828a5f6deaa829597bf8ebff
  • Loading branch information
shergin authored and facebook-github-bot committed Dec 4, 2017
1 parent da17b23 commit e9e0cd7
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ + (instancetype)newWithBridge:(RCTBridge *)bridge
options:options];

CKComponent *component;
if (options.activityIndicatorComponentFactory == nil || state.surface.stage & RCTSurfaceStageSurfaceDidInitialLayout) {
if (options.activityIndicatorComponentFactory == nil || RCTSurfaceStageIsRunning(state.surface.stage)) {
component = surfaceHostingComponent;
} else {
component = [CKOverlayLayoutComponent newWithComponent:surfaceHostingComponent
Expand Down
2 changes: 1 addition & 1 deletion React/Base/Surface/RCTSurface.mm
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
_stage = RCTSurfaceStageSurfaceDidInitialize;

if (!bridge.loading) {
_stage = (RCTSurfaceStage)(_stage | RCTSurfaceStageBridgeDidLoad);
_stage = _stage | RCTSurfaceStageBridgeDidLoad;
}

[self _registerRootViewTag];
Expand Down
12 changes: 12 additions & 0 deletions React/Base/Surface/RCTSurfaceStage.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

#import <UIKit/UIKit.h>

#import <React/RCTDefines.h>

/**
* The stage of the Surface
*/
Expand All @@ -22,3 +24,13 @@ typedef NS_OPTIONS(NSInteger, RCTSurfaceStage) {
RCTSurfaceStageSurfaceDidInitialMounting = 1 << 6, // UIManager completed the first mounting pass
RCTSurfaceStageSurfaceDidInvalidate = 1 << 7, // Surface received `invalidate` message
};

/**
* Returns `YES` if the stage is suitable for displaying normal React Native app.
*/
RCT_EXTERN BOOL RCTSurfaceStageIsRunning(RCTSurfaceStage stage);

/**
* Returns `YES` if the stage is suitable for displaying activity indicator.
*/
RCT_EXTERN BOOL RCTSurfaceStageIsPreparing(RCTSurfaceStage stage);
22 changes: 22 additions & 0 deletions React/Base/Surface/RCTSurfaceStage.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/

#import "RCTSurfaceStage.h"

BOOL RCTSurfaceStageIsRunning(RCTSurfaceStage stage) {
return
(stage & RCTSurfaceStageSurfaceDidInitialLayout) &&
!(stage & RCTSurfaceStageSurfaceDidInvalidate);
}

BOOL RCTSurfaceStageIsPreparing(RCTSurfaceStage stage) {
return
!(stage & RCTSurfaceStageSurfaceDidInitialLayout) &&
!(stage & RCTSurfaceStageSurfaceDidInvalidate);
}

0 comments on commit e9e0cd7

Please sign in to comment.