import React from 'react'; import { NavigationContainer } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import { connect } from 'react-redux'; import { SetUsernameStackParamList, StackParamList } from './navigationTypes'; import Navigation from './lib/Navigation'; import { defaultHeader, getActiveRouteName, navigationTheme } from './utils/navigation'; import { ROOT_INSIDE, ROOT_LOADING, ROOT_OUTSIDE, 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 }: { root: string; isMasterDetail: boolean }) => { 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 ? : null} {root === ROOT_INSIDE && isMasterDetail ? ( ) : null} {root === ROOT_INSIDE && !isMasterDetail ? : null} {root === ROOT_SET_USERNAME ? : null} ); }); const mapStateToProps = (state: any) => ({ root: state.app.root, isMasterDetail: state.app.isMasterDetail }); const AppContainer = connect(mapStateToProps)(App); export default AppContainer;