Viktoriia hai 2 días
pai
achega
639d109f6b

+ 9 - 1
src/contexts/RegionContext.tsx

@@ -176,7 +176,14 @@ export const RegionProvider = ({ children }: { children: React.ReactNode }) => {
   );
 
   const handleUpdateSlowList = useCallback(
-    (id: number, v?: boolean, s11?: boolean, s31?: boolean, s101?: boolean) => {
+    (
+      id: number,
+      v?: boolean,
+      s11?: boolean,
+      s31?: boolean,
+      s101?: boolean,
+      onDone?: () => void
+    ) => {
       const updatedSlowData: any = {
         token,
         id
@@ -221,6 +228,7 @@ export const RegionProvider = ({ children }: { children: React.ReactNode }) => {
                   return item;
                 });
                 updatedSlow && setSlow(updatedSlow);
+                onDone?.();
               }
             }
           );

+ 38 - 22
src/screens/InAppScreens/TravelsScreen/Components/CountryItem/index.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useState } from 'react';
 import { View, Text, Image, TouchableOpacity } from 'react-native';
 
 import { SlowData } from '../../utils/types';
@@ -22,12 +22,20 @@ const CountryItem = React.memo(
     navigation
   }: {
     item: SlowData;
-    updateSlow: (id: number, v: boolean, s11: boolean, s31: boolean, s101: boolean) => void;
+    updateSlow: (
+      id: number,
+      v: boolean,
+      s11: boolean,
+      s31: boolean,
+      s101: boolean,
+      onDone?: () => void
+    ) => void;
     openEditModal: (item: SlowData) => void;
     token: string;
     setUserData: (data: any) => void;
     navigation: any;
   }) => {
+    const [isUpdating, setIsUpdating] = useState(false);
     const renderDurationIcon = (condition: 0 | 1) =>
       condition && token ? <CheckSvg fill={Colors.DARK_BLUE} /> : <CheckRegularSvg />;
 
@@ -127,26 +135,34 @@ const CountryItem = React.memo(
               ) : null}
 
               <TouchableOpacity
-                style={item.visited ? styles.visitedButton : styles.markVisitedButton}
-                onPress={() =>
-                  item.visited && item.visited_regions > 1
-                    ? navigation.navigate(NAVIGATION_PAGES.EDIT_COUNTRY_DATA, {
-                        countryId: item.country_id,
-                        countryName: item.country,
-                        countryFlag: item.flag,
-                        slow11: item.slow11,
-                        slow31: item.slow31,
-                        slow101: item.slow101,
-                        isSlowList: true
-                      })
-                    : updateSlow(
-                        item.country_id,
-                        item.visited === 1 ? false : true,
-                        Boolean(item.slow11),
-                        Boolean(item.slow31),
-                        Boolean(item.slow101)
-                      )
-                }
+                style={[
+                  item.visited ? styles.visitedButton : styles.markVisitedButton,
+                  isUpdating && { opacity: 0.7 }
+                ]}
+                disabled={isUpdating}
+                onPress={async () => {
+                  if (item.visited && item.visited_regions > 1) {
+                    navigation.navigate(NAVIGATION_PAGES.EDIT_COUNTRY_DATA, {
+                      countryId: item.country_id,
+                      countryName: item.country,
+                      countryFlag: item.flag,
+                      slow11: item.slow11,
+                      slow31: item.slow31,
+                      slow101: item.slow101,
+                      isSlowList: true
+                    });
+                  } else {
+                    setIsUpdating(true);
+                    await updateSlow(
+                      item.country_id,
+                      item.visited === 1 ? false : true,
+                      Boolean(item.slow11),
+                      Boolean(item.slow31),
+                      Boolean(item.slow101),
+                      () => setIsUpdating(false)
+                    );
+                  }
+                }}
               >
                 {item.visited && item.visited_regions <= 1 ? (
                   <View style={styles.visitedContainer}>