Rocket.Chat.ReactNative/app/AppContainer.js

86 lines
2.3 KiB
JavaScript
Raw Normal View History

2020-05-21 18:02:39 +00:00
import React from 'react';
import PropTypes from 'prop-types';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { connect } from 'react-redux';
2020-05-21 20:38:40 +00:00
import { SafeAreaProvider, initialWindowMetrics } from 'react-native-safe-area-context';
2020-05-21 18:02:39 +00:00
import Navigation from './lib/Navigation';
2020-05-26 20:42:12 +00:00
import { defaultHeader, onNavigationStateChange } from './utils/navigation';
2020-05-26 17:35:56 +00:00
import {
ROOT_LOADING, ROOT_OUTSIDE, ROOT_NEW_SERVER, ROOT_INSIDE, ROOT_SET_USERNAME, ROOT_BACKGROUND
} from './actions/app';
2020-05-21 18:02:39 +00:00
// Stacks
import AuthLoadingView from './views/AuthLoadingView';
// SetUsername Stack
import SetUsernameView from './views/SetUsernameView';
import OutsideStack from './stacks/OutsideStack';
import InsideStack from './stacks/InsideStack';
// SetUsernameStack
const SetUsername = createStackNavigator();
const SetUsernameStack = () => (
<SetUsername.Navigator screenOptions={defaultHeader}>
<SetUsername.Screen
name='SetUsernameView'
component={SetUsernameView}
/>
</SetUsername.Navigator>
);
// App
const Stack = createStackNavigator();
2020-05-26 16:37:30 +00:00
const App = React.memo(({ root }) => {
2020-05-26 17:35:56 +00:00
if (!root || root === ROOT_BACKGROUND) {
2020-05-21 18:02:39 +00:00
return null;
}
return (
2020-05-21 20:38:40 +00:00
<SafeAreaProvider initialMetrics={initialWindowMetrics}>
2020-05-26 20:42:12 +00:00
<NavigationContainer ref={Navigation.navigationRef} onNavigationStateChange={onNavigationStateChange}>
2020-05-21 20:38:40 +00:00
<Stack.Navigator screenOptions={{ headerShown: false, animationEnabled: false }}>
<>
2020-05-26 17:35:56 +00:00
{root === ROOT_LOADING ? (
2020-05-21 20:38:40 +00:00
<Stack.Screen
name='AuthLoading'
component={AuthLoadingView}
/>
) : null}
2020-05-26 17:35:56 +00:00
{root === ROOT_OUTSIDE || root === ROOT_NEW_SERVER ? (
2020-05-21 20:38:40 +00:00
<Stack.Screen
name='OutsideStack'
component={OutsideStack}
/>
) : null}
2020-05-26 17:35:56 +00:00
{root === ROOT_INSIDE ? (
2020-05-21 20:38:40 +00:00
<Stack.Screen
name='InsideStack'
component={InsideStack}
/>
) : null}
2020-05-26 17:35:56 +00:00
{root === ROOT_SET_USERNAME ? (
2020-05-21 20:38:40 +00:00
<Stack.Screen
name='SetUsernameStack'
component={SetUsernameStack}
/>
) : null}
</>
</Stack.Navigator>
</NavigationContainer>
</SafeAreaProvider>
2020-05-21 18:02:39 +00:00
);
2020-05-26 16:37:30 +00:00
});
2020-05-21 18:02:39 +00:00
const mapStateToProps = state => ({
root: state.app.root
});
App.propTypes = {
root: PropTypes.string
};
const AppContainer = connect(mapStateToProps)(App);
export default AppContainer;