Viktoriia преди 10 месеца
родител
ревизия
3198b1cb9e

+ 2 - 1
App.tsx

@@ -1,4 +1,5 @@
 import 'react-native-gesture-handler';
+import 'expo-splash-screen';
 import { QueryClientProvider } from '@tanstack/react-query';
 import { NavigationContainer } from '@react-navigation/native';
 import { queryClient } from 'src/utils/queryClient';
@@ -54,8 +55,8 @@ const InnerApp = () => {
             routingInstrumentation.registerNavigationContainer(navigation);
           }}
         >
-          <ConnectionBanner />
           <Route />
+          <ConnectionBanner />
           <ErrorModal />
         </NavigationContainer>
       </RegionProvider>

+ 4 - 4
Route.tsx

@@ -1,5 +1,6 @@
 import React, { useEffect, useState } from 'react';
 import { useFonts } from 'expo-font';
+import { enableScreens } from 'react-native-screens';
 import * as SplashScreen from 'expo-splash-screen';
 import { Platform } from 'react-native';
 import * as Notifications from 'expo-notifications';
@@ -75,7 +76,6 @@ import {
   FixersInfoScreen
 } 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';
@@ -86,12 +86,12 @@ import { useNotification } from 'src/contexts/NotificationContext';
 
 enableScreens();
 
+SplashScreen.preventAutoHideAsync();
+
 const ScreenStack = createStackNavigator();
 const BottomTab = createBottomTabNavigator();
 const MapDrawer = createDrawerNavigator();
 
-SplashScreen.preventAutoHideAsync();
-
 const Route = () => {
   const [token, setToken] = useState<string | null>(
     storage.get('token', StoreType.STRING) as string
@@ -191,7 +191,7 @@ const Route = () => {
     }
   };
 
-  if (!fontsLoaded) {
+  if (!fontsLoaded || !dbLoaded) {
     return null;
   }
 

+ 2 - 1
app.config.ts

@@ -40,7 +40,8 @@ export default ({ config }: ConfigContext): ExpoConfig => ({
   },
   splash: {
     image: './assets/loading-screen.png',
-    resizeMode: 'cover'
+    resizeMode: 'cover',
+    backgroundColor: '#ffffff'
   },
   notification: {
     icon: './assets/notification-icon.png'

+ 0 - 1
package.json

@@ -13,7 +13,6 @@
   },
   "dependencies": {
     "@react-native-community/datetimepicker": "7.2.0",
-    "@react-native-community/masked-view": "^0.1.11",
     "@react-native-community/netinfo": "9.3.10",
     "@react-navigation/bottom-tabs": "^6.5.11",
     "@react-navigation/drawer": "^6.6.15",

+ 4 - 4
src/database/index.ts

@@ -71,25 +71,25 @@ const updateMasterRanking = async () => {
   const token = storage.get('token', StoreType.STRING) as string || '';
   const dataLimitedRanking = await fetchLimitedRanking();
 
-  if (dataLimitedRanking && dataLimitedRanking.data) {
+  if (dataLimitedRanking && dataLimitedRanking?.data) {
     storage.set('masterRanking', JSON.stringify(dataLimitedRanking.data));
   }
 
   const dataLpi = await fetchLpi();
 
-  if (dataLpi && dataLpi.data) {
+  if (dataLpi && dataLpi?.data) {
     storage.set('lpiRanking', JSON.stringify(dataLpi.data));
   }
 
   const dataInHistory = await fetchInHistory();
 
-  if (dataInHistory && dataInHistory.data) {
+  if (dataInHistory && dataInHistory?.data) {
     storage.set('inHistoryRanking', JSON.stringify(dataInHistory.data));
   }
 
   const dataInMemoriam = await fetchInMemoriam();
 
-  if (dataInMemoriam && dataInMemoriam.data) {
+  if (dataInMemoriam && dataInMemoriam?.data) {
     storage.set('inMemoriamRanking', JSON.stringify(dataInMemoriam.data));
   }
 

+ 16 - 14
src/database/seriesRankingService/index.ts

@@ -11,20 +11,22 @@ function saveData<T>(key: string, data: T) {
 
 export async function saveSeriesRankingData() {
   const response = await seriesApi.getSeriesGroupsRanking();
-  const groups = response.data.data;
-  saveData('groups', groups);
+  if (response && response.data) {
+    const groups = response.data.data;
+    saveData('groups', groups);
 
-  await Promise.all(
-    groups.map(async (group) => {
-      const response = await seriesApi.getSeriesRanking(group.id, 0, 50);
-      saveData(`${group.id}`, response.data.data);
+    await Promise.all(
+      groups.map(async (group) => {
+        const res = await seriesApi.getSeriesRanking(group.id, 0, 50);
+        saveData(`${group.id}`, res.data.data);
 
-      if (group.series) {
-        group.series.map(async (series) => {
-          const subseries = await seriesApi.getSeriesRanking(series.id, 0, 50);
-          saveData(`${series.id}`, subseries.data.data);
-        });
-      }
-    })
-  );
+        if (group.series) {
+          group.series.map(async (series) => {
+            const subseries = await seriesApi.getSeriesRanking(series.id, 0, 50);
+            saveData(`${series.id}`, subseries.data.data);
+          });
+        }
+      })
+    );
+  }
 }

+ 12 - 8
src/database/triumphsService/index.ts

@@ -11,13 +11,17 @@ function saveData<T>(key: string, data: T) {
 
 export async function saveTriumphsData() {
   const response = await triumphsApi.getDates();
-  const last30Dates = response.data.dates.slice(-30);
-  saveData('dates', last30Dates);
+  if (response && response.data) {
+    const last30Dates = response.data.dates.slice(-30);
+    saveData('dates', last30Dates);
 
-  await Promise.all(
-    last30Dates.map(async (date) => {
-      const response = await triumphsApi.getData(date);
-      saveData(`data_${date}`, response.data.triumphs);
-    })
-  );
+    await Promise.all(
+      last30Dates.map(async (date) => {
+        const res = await triumphsApi.getData(date);
+        if (res && res.data) {
+          saveData(`data_${date}`, res.data.triumphs);
+        }
+      })
+    );
+  }
 }

+ 2 - 2
src/screens/InAppScreens/MapScreen/ClusterItem/index.tsx

@@ -6,8 +6,8 @@ const ClusterItem = ({ cluster }: { cluster: any }) => {
   return (
     <Marker
       coordinate={{
-        latitude: cluster.geometry.coordinates[1],
-        longitude: cluster.geometry.coordinates[0]
+        latitude: cluster.geometry.coordinates[1] ?? 0,
+        longitude: cluster.geometry.coordinates[0] ?? 0
       }}
     >
       <View style={styles.clusterContainer}>

+ 1 - 1
src/screens/InAppScreens/MapScreen/MarkerItem/index.tsx

@@ -19,7 +19,7 @@ const MarkerItem = ({
 }: {
   marker: ItemSeries;
   iconUrl: string;
-  coordinate?: any;
+  coordinate: { latitude: number; longitude: number };
   seriesName: string;
   toggleSeries: (item: any) => void;
   token: string;

+ 25 - 15
src/screens/InAppScreens/MapScreen/index.tsx

@@ -313,7 +313,9 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation, route }) => {
         return;
       }
 
-      let currentLocation = await Location.getCurrentPositionAsync({});
+      let currentLocation = await Location.getCurrentPositionAsync({
+        accuracy: Location.Accuracy.Low
+      });
       setLocation(currentLocation.coords);
     })();
   }, []);
@@ -394,15 +396,17 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation, route }) => {
     });
     setLocation(currentLocation.coords);
 
-    mapRef.current?.animateToRegion(
-      {
-        latitude: currentLocation.coords.latitude,
-        longitude: currentLocation.coords.longitude,
-        latitudeDelta: 5,
-        longitudeDelta: 5
-      },
-      800
-    );
+    currentLocation.coords?.latitude &&
+      currentLocation.coords?.longitude &&
+      mapRef.current?.animateToRegion(
+        {
+          latitude: currentLocation.coords.latitude,
+          longitude: currentLocation.coords.longitude,
+          latitudeDelta: 5,
+          longitudeDelta: 5
+        },
+        800
+      );
 
     handleClosePopup();
   };
@@ -426,7 +430,11 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation, route }) => {
   const handleMapPress = async (event: {
     nativeEvent: { coordinate: { latitude: any; longitude: any }; action?: string };
   }) => {
-    if (event.nativeEvent?.action === 'marker-press') return;
+    if (
+      event.nativeEvent?.action === 'marker-press' ||
+      event.nativeEvent?.action === 'callout-inside-press'
+    )
+      return;
 
     cancelTokenRef.current = true;
     const { latitude, longitude } = event.nativeEvent.coordinate;
@@ -436,10 +444,10 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation, route }) => {
     let tableName = 'places';
     let foundRegion: any;
 
-    type !== 1 && (foundRegion = findRegionInDataset(dareData, point));
+    type !== 1 && (foundRegion = dareData ? findRegionInDataset(dareData, point) : null);
 
     if (type === 1) {
-      foundRegion = findRegionInDataset(regions, point);
+      foundRegion = regions ? findRegionInDataset(regions, point) : null;
       db = getFirstDatabase();
       tableName = 'regions';
 
@@ -486,7 +494,7 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation, route }) => {
     }
 
     if (!foundRegion) {
-      foundRegion = findRegionInDataset(regions, point);
+      foundRegion = regions ? findRegionInDataset(regions, point) : null;
       db = getFirstDatabase();
       tableName = 'regions';
     }
@@ -605,7 +613,9 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation, route }) => {
     }
 
     const dataset = type === 'regions' ? regions : dareData;
-    const foundRegion = dataset.features.find((region: any) => region.properties.id === id);
+    const foundRegion = dataset
+      ? dataset.features.find((region: any) => region.properties.id === id)
+      : null;
 
     if (foundRegion) {
       setSelectedRegion({

+ 1 - 1
src/screens/InAppScreens/TravelsScreen/AddRegionsScreen/index.tsx

@@ -136,7 +136,7 @@ const AddRegionsScreen = ({ route }: { route: any }) => {
       const { latitude, longitude } = event.nativeEvent.coordinate;
       const point = turf.point([longitude, latitude]);
 
-      let foundRegion = findRegionInDataset(regionsGeojson, point);
+      let foundRegion = regionsGeojson ? findRegionInDataset(regionsGeojson, point) : null;
 
       if (foundRegion) {
         const id = foundRegion.properties?.id;

+ 2 - 2
src/utils/request.ts

@@ -34,9 +34,9 @@ export const setupInterceptors = ({ showError }: { showError: (message: string)
         error.isTimeout = true;
         showBanner('Slow internet connection!');
 
-        return Promise.reject(error);
+        return;
       } else if (error.message === 'Network Error') {
-        return Promise.reject(error);
+        return;
       }
 
       showError(error.message);