From 94dac23583dc6b693475769c196c4b51954e74f1 Mon Sep 17 00:00:00 2001 From: Kevin Gozali Date: Tue, 6 Feb 2018 21:31:57 -0800 Subject: [PATCH] Added ReactFabric shim Summary: A simple shim just like ReactNative.js Plus a fork of renderApplication that exclusively will call ReactFabric. Reviewed By: mdvacca Differential Revision: D6919080 fbshipit-source-id: 5807105a6c45dd99584eb92a5570c6076e2d56b9 --- Libraries/ReactNative/renderFabricSurface.js | 62 ++++++++++++++++++++ Libraries/Renderer/shims/ReactFabric.js | 23 ++++++++ 2 files changed, 85 insertions(+) create mode 100644 Libraries/ReactNative/renderFabricSurface.js create mode 100644 Libraries/Renderer/shims/ReactFabric.js diff --git a/Libraries/ReactNative/renderFabricSurface.js b/Libraries/ReactNative/renderFabricSurface.js new file mode 100644 index 00000000000000..268e588e4f2907 --- /dev/null +++ b/Libraries/ReactNative/renderFabricSurface.js @@ -0,0 +1,62 @@ +/** + * 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. + * + * @providesModule renderFabricSurface + * @format + * @flow + */ + +'use strict'; + +const AppContainer = require('AppContainer'); +const React = require('React'); +const ReactFabric = require('ReactFabric'); + +const invariant = require('fbjs/lib/invariant'); + +// require BackHandler so it sets the default handler that exits the app if no listeners respond +require('BackHandler'); + +// Note: this is a fork of renderApplication.js to simply invoke ReactFabric. +function renderFabricSurface( + RootComponent: React.ComponentType, + initialProps: Props, + rootTag: any, + WrapperComponent?: ?React.ComponentType<*>, +) { + invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag); + + let renderable = ( + + + + ); + + // If the root component is async, the user probably wants the initial render + // to be async also. To do this, wrap AppContainer with an async marker. + // For more info see https://fb.me/is-component-async + if ( + RootComponent.prototype != null && + RootComponent.prototype.unstable_isAsyncReactComponent === true + ) { + // $FlowFixMe This is not yet part of the official public API + class AppContainerAsyncWrapper extends React.unstable_AsyncComponent { + render() { + return this.props.children; + } + } + + renderable = ( + {renderable} + ); + } + + ReactFabric.render(renderable, rootTag); +} + +module.exports = renderFabricSurface; diff --git a/Libraries/Renderer/shims/ReactFabric.js b/Libraries/Renderer/shims/ReactFabric.js new file mode 100644 index 00000000000000..4a396c224cd4ff --- /dev/null +++ b/Libraries/Renderer/shims/ReactFabric.js @@ -0,0 +1,23 @@ +/** + * 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. + * + * @providesModule ReactFabric + * @flow + */ +'use strict'; + +// TODO @sema: Adjust types +import type {ReactNativeType} from 'ReactNativeTypes'; + +let ReactFabric; + +if (__DEV__) { + ReactFabric = require('ReactFabric-dev'); +} else { + ReactFabric = require('ReactFabric-prod'); +} + +module.exports = (ReactFabric: ReactNativeType);