import React, { useEffect, useState } from 'react'; import { useFonts } from 'expo-font'; import * as SplashScreen from 'expo-splash-screen'; import { Platform } from 'react-native'; import * as Notifications from 'expo-notifications'; import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import { createDrawerNavigator } from '@react-navigation/drawer'; import WelcomeScreen from './src/screens/WelcomeScreen'; import LoginScreen from './src/screens/LoginScreen'; import ResetPasswordScreen from './src/screens/ResetPasswordScreen'; import ResetPasswordDeepScreen from './src/screens/ResetPasswordDeepScreen'; import JoinUsScreen from './src/screens/RegisterScreen/JoinUs'; import EditAccount from './src/screens/RegisterScreen/EditAccount'; import MapScreen from './src/screens/InAppScreens/MapScreen'; import TravelsScreen from './src/screens/InAppScreens/TravelsScreen'; import ProfileScreen from './src/screens/InAppScreens/ProfileScreen'; import TravellersScreen from './src/screens/InAppScreens/TravellersScreen'; import { EditPersonalInfo } from './src/screens/InAppScreens/ProfileScreen/Profile/edit-personal-info'; import Settings from './src/screens/InAppScreens/ProfileScreen/Settings/'; import MasterRankingScreen from './src/screens/InAppScreens/TravellersScreen/MasterRankingScreen'; import LPIRanking from './src/screens/InAppScreens/TravellersScreen/LPIRankingScreen'; import InMemoriamScreen from './src/screens/InAppScreens/TravellersScreen/InMemoriamScreen'; import InHistoryScreen from './src/screens/InAppScreens/TravellersScreen/InHistoryScreen'; import UNMastersScreen from './src/screens/InAppScreens/TravellersScreen/UNMasters'; import StatisticsScreen from './src/screens/InAppScreens/TravellersScreen/StatisticsScreen'; import StatisticsListScreen from './src/screens/InAppScreens/TravellersScreen/StatisticsListScreen'; import TriumphsScreen from 'src/screens/InAppScreens/TravellersScreen/TriumphsScreen'; import SeriesRankingScreen from 'src/screens/InAppScreens/TravellersScreen/SeriesRankingScreen'; import SeriesRankingListScreen from 'src/screens/InAppScreens/TravellersScreen/SeriesRankingListScreen'; import UsersMapScreen from 'src/screens/InAppScreens/ProfileScreen/UsersMap'; import SeriesScreen from 'src/screens/InAppScreens/TravelsScreen/Series'; import { SeriesItemScreen } from 'src/screens/InAppScreens/TravelsScreen/SeriesItemScreen'; import EarthScreen from 'src/screens/InAppScreens/TravelsScreen/EarthScreen'; import PhotosScreen from 'src/screens/InAppScreens/TravelsScreen/PhotosScreen'; import MorePhotosScreen from 'src/screens/InAppScreens/TravelsScreen/MorePhotosScreen'; import AddPhotoScreen from 'src/screens/InAppScreens/TravelsScreen/AddPhotoScreen'; import TripsScreen from 'src/screens/InAppScreens/TravelsScreen/TripsScreen'; import AddNewTripScreen from 'src/screens/InAppScreens/TravelsScreen/AddNewTripScreen'; import AddRegionsScreen from 'src/screens/InAppScreens/TravelsScreen/AddRegionsScreen'; import CountriesScreen from 'src/screens/InAppScreens/TravelsScreen/CountriesScreen'; import RegionsScreen from 'src/screens/InAppScreens/TravelsScreen/RegionsScreen'; import DareScreen from 'src/screens/InAppScreens/TravelsScreen/DareScreen'; import { NAVIGATION_PAGES } from './src/types'; import { storage, StoreType } from './src/storage'; import { openDatabases } from './src/db'; import TabBarButton from './src/components/TabBarButton'; import { ParamListBase, RouteProp } from '@react-navigation/native'; import setupDatabaseAndSync from 'src/database'; import { MenuDrawer } from 'src/components'; import { setFastestMapHost } from 'src/constants'; import { determineFastestServer } from 'src/utils/determineServer'; import { InfoScreen, PlanInfoScreen, JoinInfoScreen, DiscoverInfoScreen, FirstStepsInfoScreen, CountriesInfoScreen, RegionsInfoScreen, EarthInfoScreen, DareInfoScreen, TripsInfoScreen } from 'src/screens/InfoScreens'; import RegionViewScreen from 'src/screens/InAppScreens/MapScreen/RegionViewScreen'; import { enableScreens } from 'react-native-screens'; import UsersListScreen from 'src/screens/InAppScreens/MapScreen/UsersListScreen'; import SuggestSeriesScreen from 'src/screens/InAppScreens/TravelsScreen/SuggestSeriesScreen'; import MyFriendsScreen from 'src/screens/InAppScreens/ProfileScreen/MyFriendsScreen'; enableScreens(); const ScreenStack = createStackNavigator(); const BottomTab = createBottomTabNavigator(); SplashScreen.preventAutoHideAsync(); const Route = () => { const token = storage.get('token', StoreType.STRING); const [fontsLoaded] = useFonts({ 'redhat-900': require('./assets/fonts/RedHatDisplay-Black-900.ttf'), 'redhat-700': require('./assets/fonts/RedHatDisplay-Bold-700.ttf'), 'redhat-600': require('./assets/fonts/RedHatDisplay-SemiBold-600.ttf'), 'montserrat-700': require('./assets/fonts/Montserrat-Bold.ttf'), 'montserrat-600': require('./assets/fonts/Montserrat-SemiBold.ttf'), 'montserrat-400': require('./assets/fonts/Montserrat-Regular.ttf') }); const [dbLoaded, setDbLoaded] = useState(false); useEffect(() => { const prepareApp = async () => { // checkTokenAndUpdate(); await findFastestServer(); await openDatabases(); setDbLoaded(true); }; const findFastestServer = async () => { try { const fastest = await determineFastestServer(); setFastestMapHost(fastest); } catch (error) { console.error('Error finding fastest server:', error); } }; prepareApp(); }, []); useEffect(() => { const hideSplashScreen = async () => { if (fontsLoaded && dbLoaded) { await SplashScreen.hideAsync(); await setupDatabaseAndSync(); } }; hideSplashScreen(); }, [fontsLoaded, dbLoaded]); const checkTokenAndUpdate = async () => { const storedToken = storage.get('deviceToken', StoreType.STRING); const currentToken = await Notifications.getDevicePushTokenAsync(); if (storedToken && currentToken?.data !== storedToken) { storage.set('deviceToken', currentToken.data); } }; if (!fontsLoaded) { return null; } const screenOptions = ({ route }: { route: RouteProp; navigation: any; }) => ({ headerShown: false, tabBarButton: (props: any) => ( ), tabBarStyle: { ...Platform.select({ android: { height: 58 } }) }, cardStyle: { backgroundColor: 'white' }, unmountOnBlur: true, gestureEnabled: Platform.OS === 'ios' ? true : false, lazy: true }); const regionViewScreenOptions = { ...screenOptions, ...(Platform.OS === 'ios' ? TransitionPresets.ModalSlideFromBottomIOS : {}), contentStyle: { flex: 1 } }; const MapDrawer = createDrawerNavigator(); function MapDrawerNavigator() { return ( }> ); } return ( {() => ( {() => ( )} {() => ( )} {() => ( )} {() => ( )} )} ); }; export default Route;