|
@@ -1,7 +1,7 @@
|
|
|
import React, { useEffect, useState } from 'react';
|
|
|
import { useFonts } from 'expo-font';
|
|
|
import * as SplashScreen from 'expo-splash-screen';
|
|
|
-import { Platform } from 'react-native';
|
|
|
+import { AppState, Platform } from 'react-native';
|
|
|
import * as Notifications from 'expo-notifications';
|
|
|
|
|
|
import { createStackNavigator, TransitionPresets } from '@react-navigation/stack';
|
|
@@ -48,7 +48,7 @@ import CountriesScreen from 'src/screens/InAppScreens/TravelsScreen/CountriesScr
|
|
|
import RegionsScreen from 'src/screens/InAppScreens/TravelsScreen/RegionsScreen';
|
|
|
import DareScreen from 'src/screens/InAppScreens/TravelsScreen/DareScreen';
|
|
|
|
|
|
-import { NAVIGATION_PAGES } from './src/types';
|
|
|
+import { API, NAVIGATION_PAGES } from './src/types';
|
|
|
import { storage, StoreType } from './src/storage';
|
|
|
import { openDatabases } from './src/db';
|
|
|
|
|
@@ -56,7 +56,7 @@ 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 { API_URL, setFastestMapHost } from 'src/constants';
|
|
|
import { determineFastestServer } from 'src/utils/determineServer';
|
|
|
import {
|
|
|
InfoScreen,
|
|
@@ -77,6 +77,8 @@ import SuggestSeriesScreen from 'src/screens/InAppScreens/TravelsScreen/SuggestS
|
|
|
import MyFriendsScreen from 'src/screens/InAppScreens/ProfileScreen/MyFriendsScreen';
|
|
|
import CountryViewScreen from 'src/screens/InAppScreens/MapScreen/CountryViewScreen';
|
|
|
import { userApi } from '@api/user';
|
|
|
+import axios from 'axios';
|
|
|
+import { useNotification } from 'src/contexts/NotificationContext';
|
|
|
|
|
|
enableScreens();
|
|
|
|
|
@@ -87,7 +89,9 @@ const MapDrawer = createDrawerNavigator();
|
|
|
SplashScreen.preventAutoHideAsync();
|
|
|
|
|
|
const Route = () => {
|
|
|
- const token = storage.get('token', StoreType.STRING) as string;
|
|
|
+ const [token, setToken] = useState<string | null>(
|
|
|
+ storage.get('token', StoreType.STRING) as string
|
|
|
+ );
|
|
|
|
|
|
const [fontsLoaded] = useFonts({
|
|
|
'redhat-900': require('./assets/fonts/RedHatDisplay-Black-900.ttf'),
|
|
@@ -99,28 +103,69 @@ const Route = () => {
|
|
|
});
|
|
|
const [dbLoaded, setDbLoaded] = useState(false);
|
|
|
const uid = storage.get('uid', StoreType.STRING);
|
|
|
- const hasUserInfo = storage.get('currentUserData', StoreType.STRING);
|
|
|
+ const [appState, setAppState] = useState<string>(AppState.currentState);
|
|
|
+ const { updateNotificationStatus } = useNotification();
|
|
|
|
|
|
useEffect(() => {
|
|
|
- const fetchAndSaveUserInfo = async () => {
|
|
|
- if (uid && token) {
|
|
|
- const profileData = await userApi.getProfileInfoData(token, +uid);
|
|
|
- const userInfo = {
|
|
|
- avatar: profileData?.data?.data?.user_data.avatar ?? '',
|
|
|
- first_name: profileData?.data?.data?.user_data.first_name,
|
|
|
- last_name: profileData?.data?.data?.user_data.last_name,
|
|
|
- homebase_flag: profileData?.data?.data?.user_data.flag1
|
|
|
- };
|
|
|
- storage.set('currentUserData', JSON.stringify(userInfo));
|
|
|
+ const handleAppStateChange = async (nextAppState: string) => {
|
|
|
+ if (appState.match(/inactive|background/) && nextAppState === 'active') {
|
|
|
+ console.log('Додаток було згорнуто і знову відкрито');
|
|
|
+ await checkNmToken();
|
|
|
}
|
|
|
+ setAppState(nextAppState);
|
|
|
+ };
|
|
|
+
|
|
|
+ const subscription = AppState.addEventListener('change', handleAppStateChange);
|
|
|
+
|
|
|
+ return () => {
|
|
|
+ subscription.remove();
|
|
|
};
|
|
|
+ }, [appState]);
|
|
|
+
|
|
|
+ const checkNmToken = async () => {
|
|
|
+ if (token && uid) {
|
|
|
+ try {
|
|
|
+ const response = await axios.postForm(API_URL + '/' + API.CHECK_TOKEN, {
|
|
|
+ token,
|
|
|
+ user_id: +uid
|
|
|
+ });
|
|
|
+
|
|
|
+ if (response.data.result !== 'OK') {
|
|
|
+ handleLogout();
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Error checking token:', error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
- fetchAndSaveUserInfo();
|
|
|
- }, [hasUserInfo]);
|
|
|
+ const handleLogout = () => {
|
|
|
+ setToken(null);
|
|
|
+ storage.remove('token');
|
|
|
+ storage.remove('uid');
|
|
|
+ storage.remove('currentUserData');
|
|
|
+ storage.remove('visitedTilesUrl');
|
|
|
+ storage.remove('filterSettings');
|
|
|
+ updateNotificationStatus();
|
|
|
+ };
|
|
|
+
|
|
|
+ const fetchAndSaveUserInfo = async () => {
|
|
|
+ if (uid && token) {
|
|
|
+ const profileData = await userApi.getProfileInfoData(token, +uid);
|
|
|
+ const userInfo = {
|
|
|
+ avatar: profileData?.data?.data?.user_data.avatar ?? '',
|
|
|
+ first_name: profileData?.data?.data?.user_data.first_name,
|
|
|
+ last_name: profileData?.data?.data?.user_data.last_name,
|
|
|
+ homebase_flag: profileData?.data?.data?.user_data.flag1
|
|
|
+ };
|
|
|
+ storage.set('currentUserData', JSON.stringify(userInfo));
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
useEffect(() => {
|
|
|
const prepareApp = async () => {
|
|
|
// checkTokenAndUpdate();
|
|
|
+ await checkNmToken();
|
|
|
await findFastestServer();
|
|
|
await openDatabases();
|
|
|
setDbLoaded(true);
|
|
@@ -142,6 +187,7 @@ const Route = () => {
|
|
|
const hideSplashScreen = async () => {
|
|
|
if (fontsLoaded && dbLoaded) {
|
|
|
await SplashScreen.hideAsync();
|
|
|
+ await fetchAndSaveUserInfo();
|
|
|
await setupDatabaseAndSync();
|
|
|
}
|
|
|
};
|