Skip to content

Commit

Permalink
Add lazy requiring screens components (#115)
Browse files Browse the repository at this point in the history
* Add lazy requiring screens components

* Fix naming
  • Loading branch information
osdnk authored and kmagiera committed Jul 4, 2019
1 parent ed826d7 commit b042571
Showing 1 changed file with 37 additions and 10 deletions.
47 changes: 37 additions & 10 deletions src/screens.native.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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);
}
Expand Down Expand Up @@ -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 <View {...this.props} />;
} else {
return <NativeScreenContainer {...this.props} />;
return <ScreensNativeModules.NativeScreenContainer {...this.props} />;
}
}
}

module.exports = {
ScreenContainer,
Screen,
get NativeScreen() {
return ScreensNativeModules.NativeScreen;
},

get NativeScreenContainer() {
return ScreensNativeModules.NativeScreenContainer;
},
useScreens,
screensEnabled,
};

0 comments on commit b042571

Please sign in to comment.