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'; import Navigation from './lib/Navigation'; import { defaultHeader, getActiveRouteName, navigationTheme } from './utils/navigation'; import { ROOT_LOADING, ROOT_OUTSIDE, ROOT_NEW_SERVER, ROOT_INSIDE, ROOT_SET_USERNAME } from './actions/app'; // Stacks import AuthLoadingView from './views/AuthLoadingView'; // SetUsername Stack import SetUsernameView from './views/SetUsernameView'; import OutsideStack from './stacks/OutsideStack'; import InsideStack from './stacks/InsideStack'; import MasterDetailStack from './stacks/MasterDetailStack'; import { ThemeContext } from './theme'; import { setCurrentScreen } from './utils/log'; // SetUsernameStack const SetUsername = createStackNavigator(); const SetUsernameStack = () => ( ); // App const Stack = createStackNavigator(); const App = React.memo(({ root, isMasterDetail }) => { if (!root) { return null; } const { theme } = React.useContext(ThemeContext); const navTheme = navigationTheme(theme); React.useEffect(() => { const state = Navigation.navigationRef.current?.getRootState(); const currentRouteName = getActiveRouteName(state); Navigation.routeNameRef.current = currentRouteName; setCurrentScreen(currentRouteName); }, []); return ( { const previousRouteName = Navigation.routeNameRef.current; const currentRouteName = getActiveRouteName(state); if (previousRouteName !== currentRouteName) { setCurrentScreen(currentRouteName); } Navigation.routeNameRef.current = currentRouteName; }} > <> {root === ROOT_LOADING ? ( ) : null} {root === ROOT_OUTSIDE || root === ROOT_NEW_SERVER ? ( ) : null} {root === ROOT_INSIDE && isMasterDetail ? ( ) : null} {root === ROOT_INSIDE && !isMasterDetail ? ( ) : null} {root === ROOT_SET_USERNAME ? ( ) : null} ); }); const mapStateToProps = state => ({ root: state.app.root, isMasterDetail: state.app.isMasterDetail }); App.propTypes = { root: PropTypes.string, isMasterDetail: PropTypes.bool }; const AppContainer = connect(mapStateToProps)(App); export default AppContainer;