瀏覽代碼

update visit via the "save" btn

Viktoriia 2 月之前
父節點
當前提交
0cd0daf51a
共有 1 個文件被更改,包括 129 次插入60 次删除
  1. 129 60
      src/screens/InAppScreens/TravelsScreen/EditNmDataScreen/index.tsx

+ 129 - 60
src/screens/InAppScreens/TravelsScreen/EditNmDataScreen/index.tsx

@@ -422,7 +422,9 @@ const EditNmDataScreen = ({ navigation, route }: { navigation: any; route: any }
   );
 
   const validateVisits = useCallback((): boolean => {
-    const newVisits = visits.filter((visit: Visit) => !visit.isExisting);
+    const newVisits = visits.filter(
+      (visit: Visit) => !visit.isExisting || (visit.isEditing && visit.isExisting)
+    );
 
     for (const visit of newVisits) {
       // if (!isDateValid(visit.startDate) || !isDateValid(visit.endDate) || !visit.quality) {
@@ -445,75 +447,142 @@ const EditNmDataScreen = ({ navigation, route }: { navigation: any; route: any }
     setIsLoading(true);
     try {
       const newVisits = visits.filter((visit: Visit) => !visit.isExisting);
+      const editedVisits = visits.filter((visit: Visit) => visit.isEditing && visit.isExisting);
 
-      if (newVisits.length === 0) {
-        // Alert.alert('No new visits to save.');
+      if (newVisits.length === 0 && editedVisits.length === 0) {
         return;
       }
 
-      newVisits.forEach(async (v) => {
-        await addVisit(
-          {
-            token,
-            region: id,
-            quality: v.quality.id,
-            year_from: v.startDate?.year || null,
-            month_from: v.startDate?.month || null,
-            day_from: v.startDate?.day || null,
-            year_to: v.endDate?.year || null,
-            month_to: v.endDate?.month || null,
-            day_to: v.endDate?.day || null,
-            // completed: 1,
-            hidden: 0
-          },
-          {
-            onSuccess: async (data) => {
-              await getRegion(
-                { token, id },
-                {
-                  onSuccess: (res) => {
-                    if (isFromRegionsList && res.region) {
-                      const updatedNM = nmRegions.map((item: NmRegion) => {
-                        if (item.id === id) {
-                          return {
-                            ...item,
-                            year: res.region?.first_visited_in_year,
-                            last: res.region?.last_visited_in_year,
-                            quality: res.region?.best_visit_quality,
-                            visits: res.region?.no_of_visits
-                          };
-                        }
-                        return item;
-                      });
+      if (editedVisits.length) {
+        editedVisits.forEach(async (v) => {
+          await updateVisitAsync(
+            {
+              token,
+              region: id,
+              id: v.id,
+              quality: v.quality.id,
+              year_from: v.startDate?.year || null,
+              month_from: v.startDate?.month || null,
+              day_from: v.startDate?.day || null,
+              year_to: v.endDate?.year || null,
+              month_to: v.endDate?.month || null,
+              day_to: v.endDate?.day || null,
+              hidden: 0
+            },
+            {
+              onSuccess: async (data) => {
+                await getRegion(
+                  { token, id },
+                  {
+                    onSuccess: (res) => {
+                      if (isFromRegionsList && res.region) {
+                        const updatedNM = nmRegions.map((item: NmRegion) => {
+                          if (item.id === id) {
+                            return {
+                              ...item,
+                              year: res.region?.first_visited_in_year,
+                              last: res.region?.last_visited_in_year,
+                              quality: res.region?.best_visit_quality,
+                              visits: res.region?.no_of_visits
+                            };
+                          }
+                          return item;
+                        });
+
+                        setNmRegions(updatedNM);
+                        return;
+                      }
 
-                      setNmRegions(updatedNM);
-                      return;
+                      if (res.region) {
+                        const updatedNM = {
+                          ...userData,
+                          first_visit_year: res.region.first_visited_in_year,
+                          last_visit_year: res.region.last_visited_in_year,
+                          best_visit_quality: res.region.best_visit_quality,
+                          no_of_visits: res.region.no_of_visits,
+                          visited: true
+                        };
+                        setUserData(updatedNM);
+                      }
+                    },
+                    onError: (err) => {
+                      console.log('err', err);
                     }
+                  }
+                );
+              },
+              onError: (error) => {
+                console.log('updateVisitAsync error', error);
+              }
+            }
+          );
+        });
+      }
 
-                    if (res.region) {
-                      const updatedNM = {
-                        ...userData,
-                        first_visit_year: res.region.first_visited_in_year,
-                        last_visit_year: res.region.last_visited_in_year,
-                        best_visit_quality: res.region.best_visit_quality,
-                        no_of_visits: res.region.no_of_visits,
-                        visited: true
-                      };
-                      setUserData(updatedNM);
+      if (newVisits.length) {
+        newVisits.forEach(async (v) => {
+          await addVisit(
+            {
+              token,
+              region: id,
+              quality: v.quality.id,
+              year_from: v.startDate?.year || null,
+              month_from: v.startDate?.month || null,
+              day_from: v.startDate?.day || null,
+              year_to: v.endDate?.year || null,
+              month_to: v.endDate?.month || null,
+              day_to: v.endDate?.day || null,
+              hidden: 0
+            },
+            {
+              onSuccess: async (data) => {
+                await getRegion(
+                  { token, id },
+                  {
+                    onSuccess: (res) => {
+                      if (isFromRegionsList && res.region) {
+                        const updatedNM = nmRegions.map((item: NmRegion) => {
+                          if (item.id === id) {
+                            return {
+                              ...item,
+                              year: res.region?.first_visited_in_year,
+                              last: res.region?.last_visited_in_year,
+                              quality: res.region?.best_visit_quality,
+                              visits: res.region?.no_of_visits
+                            };
+                          }
+                          return item;
+                        });
+
+                        setNmRegions(updatedNM);
+                        return;
+                      }
+
+                      if (res.region) {
+                        const updatedNM = {
+                          ...userData,
+                          first_visit_year: res.region.first_visited_in_year,
+                          last_visit_year: res.region.last_visited_in_year,
+                          best_visit_quality: res.region.best_visit_quality,
+                          no_of_visits: res.region.no_of_visits,
+                          visited: true
+                        };
+                        setUserData(updatedNM);
+                      }
+                    },
+                    onError: (err) => {
+                      console.log('err', err);
                     }
-                  },
-                  onError: (err) => {
-                    console.log('err', err);
                   }
-                }
-              );
-            },
-            onError: (error) => {
-              console.log('addVisit error', error);
+                );
+              },
+              onError: (error) => {
+                console.log('addVisit error', error);
+              }
             }
-          }
-        );
-      });
+          );
+        });
+      }
 
       Alert.alert('Success', 'Visits saved successfully!', [
         { text: 'OK', onPress: () => navigation.goBack() }