From b042571315c68e970ef8e69142ddbdcae29a3e30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Osadnik?= Date: Thu, 4 Jul 2019 11:41:01 +0100 Subject: [PATCH] Add lazy requiring screens components (#115) * Add lazy requiring screens components * Fix naming --- src/screens.native.js | 47 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/src/screens.native.js b/src/screens.native.js index 47eed6f5..831c2e3a 100644 --- a/src/screens.native.js +++ b/src/screens.native.js @@ -17,7 +17,7 @@ const getViewManagerConfigCompat = name => ? UIManager.getViewManagerConfig(name) : UIManager[name]; -export function useScreens(shouldUseScreens = true) { +function useScreens(shouldUseScreens = true) { USE_SCREENS = shouldUseScreens; if (USE_SCREENS && !getViewManagerConfigCompat('RNSScreen')) { console.error( @@ -26,20 +26,33 @@ export function useScreens(shouldUseScreens = true) { } } -export function screensEnabled() { +function screensEnabled() { return USE_SCREENS; } -export const NativeScreen = requireNativeComponent('RNSScreen', null); +let NativeScreenValue; +let NativeScreenContainerValue; -const AnimatedNativeScreen = Animated.createAnimatedComponent(NativeScreen); +const ScreensNativeModules = { + get NativeScreen() { + NativeScreenValue = + NativeScreenValue || requireNativeComponent('RNSScreen', null); + return NativeScreenValue; + }, -export const NativeScreenContainer = requireNativeComponent( - 'RNSScreenContainer', - null + get NativeScreenContainer() { + NativeScreenContainerValue = + NativeScreenContainerValue || + requireNativeComponent('RNSScreenContainer', null); + return NativeScreenContainerValue; + }, +}; + +const AnimatedNativeScreen = Animated.createAnimatedComponent( + ScreensNativeModules.NativeScreen ); -export class Screen extends React.Component { +class Screen extends React.Component { setNativeProps(props) { this._ref.setNativeProps(props); } @@ -77,12 +90,26 @@ export class Screen extends React.Component { } } -export class ScreenContainer extends React.Component { +class ScreenContainer extends React.Component { render() { if (!USE_SCREENS) { return ; } else { - return ; + return ; } } } + +module.exports = { + ScreenContainer, + Screen, + get NativeScreen() { + return ScreensNativeModules.NativeScreen; + }, + + get NativeScreenContainer() { + return ScreensNativeModules.NativeScreenContainer; + }, + useScreens, + screensEnabled, +};