import { HeaderBackButton } from '@react-navigation/elements' import { CardStyleInterpolators, createStackNavigator, StackNavigationOptions, TransitionSpecs, } from '@react-navigation/stack' import * as React from 'react' import { Platform } from 'react-native' import { connect } from 'react-redux' import { screens as appScreens, selectors as appSelectors } from '../../modules/App' import { RootState } from '../redux/store' import BackArrowAndroid from './assets/BackArrowAndroid.svg' import BackArrowIOS from './assets/BackArrowIOS.svg' interface Props { appIsLoading?: boolean appIsLoaded?: boolean } const BackArrow = Platform.OS === 'ios' ? : export const headerLeftBackButton = (navigation: any) => ( BackArrow} labelVisible={false} onPress={navigation.goBack} /> ) const stackNavigationOptions: StackNavigationOptions = { headerBackImage: () => BackArrow, headerBackTitleVisible: false, headerMode: 'screen', title: '', detachPreviousScreen: false, headerTitleAllowFontScaling: false, headerTitleAlign: 'center', headerStyle: { backgroundColor: 'black', shadowOpacity: 0, borderBottomWidth: 0, elevation: 0, }, headerTintColor: 'white', headerTitleStyle: { fontWeight: 'bold', }, cardStyleInterpolator: CardStyleInterpolators.forHorizontalIOS, transitionSpec: { open: TransitionSpecs.TransitionIOSSpec, close: TransitionSpecs.TransitionIOSSpec, }, } const Stack = createStackNavigator() const getScreens = (): JSX.Element => { return ( <> ) } const RootStack: React.FunctionComponent = () => { const screens = getScreens() // you could supply props to getScreens and return screens conditionally return {screens} } const mapStateToProps = (state: RootState) => ({ appIsLoading: appSelectors.selectIsAppLoading(state), appIsLoaded: appSelectors.selectIsAppLoaded(state), }) export default connect(mapStateToProps, null)(RootStack)