Ver Fonte

Merge branch 'filter-small-fixes' of Viktoriia/nomadmania-app into dev

Viktoriia há 11 meses atrás
pai
commit
15691554e3

+ 2 - 0
src/components/MenuDrawer/index.tsx

@@ -48,6 +48,8 @@ export const MenuDrawer = (props: any) => {
     storage.remove('token');
     storage.remove('uid');
     storage.remove('currentUserData');
+    storage.remove('visitedTilesUrl');
+    storage.remove('filterSettings');
     updateNotificationStatus();
     navigation.dispatch(
       CommonActions.reset({

+ 103 - 8
src/screens/InAppScreens/MapScreen/FilterModal/index.tsx

@@ -13,6 +13,7 @@ import { API_HOST, FASTEST_MAP_HOST } from 'src/constants';
 import CheckSvg from 'assets/icons/mark.svg';
 import { useGetListQuery } from '@api/series';
 import { RadioButton } from 'react-native-paper';
+import { storage, StoreType } from 'src/storage';
 
 const FilterModal = ({
   isFilterVisible,
@@ -59,6 +60,53 @@ const FilterModal = ({
   const [selectedSeries, setSelectedSeries] = useState<number[]>([]);
   const [seriesVisible, setSeriesVisible] = useState(true);
   const [selectedSeriesFilter, setSelectedSeriesFilter] = useState(-1);
+  const savedFilterSettings = !isPublicView
+    ? (storage.get('filterSettings', StoreType.STRING) as string)
+    : null;
+
+  useEffect(() => {
+    const loadFilterSettings = () => {
+      try {
+        if (savedFilterSettings) {
+          const filterSettings = JSON.parse(savedFilterSettings);
+          setTilesType(filterSettings.tilesType);
+          setSelectedYear(filterSettings.selectedYear);
+          setSelectedVisible(filterSettings.selectedVisible);
+          setSelectedSeries(filterSettings.seriesFilter.groups);
+          setSeriesVisible(filterSettings.seriesFilter.visible);
+          setSelectedSeriesFilter(filterSettings.seriesFilter.status);
+        }
+      } catch (error) {
+        console.error('Failed to load filter settings', error);
+      }
+    };
+
+    if (!isPublicView && isLogged) {
+      loadFilterSettings();
+    }
+  }, [savedFilterSettings]);
+
+  const saveFilterSettings = async () => {
+    if (isLogged && !isPublicView) {
+      try {
+        const filterSettings = {
+          type: tilesType.value,
+          tilesType,
+          selectedYear,
+          selectedVisible,
+          seriesFilter: {
+            visible: seriesVisible,
+            groups: selectedSeries,
+            applied: true,
+            status: selectedSeriesFilter
+          }
+        };
+        storage.set('filterSettings', JSON.stringify(filterSettings));
+      } catch (error) {
+        console.error('Failed to save filter settings', error);
+      }
+    }
+  };
 
   useEffect(() => {
     if (data) {
@@ -67,9 +115,9 @@ const FilterModal = ({
         .map((year) => ({ label: year.toString(), value: year }))
         .reverse();
       setAllYears(formattedYears);
-      formattedYears.length && setSelectedYear(formattedYears[0]);
+      formattedYears.length && !savedFilterSettings && setSelectedYear(formattedYears[0]);
     }
-  }, [data]);
+  }, [data, savedFilterSettings]);
 
   useEffect(() => {
     if (seriesList?.data) {
@@ -80,7 +128,7 @@ const FilterModal = ({
           icon: item.icon
         }))
       ]);
-      setSelectedSeries(seriesList.data.map((item) => item.id));
+      !savedFilterSettings && setSelectedSeries(seriesList.data.map((item) => item.id));
     }
   }, [seriesList]);
 
@@ -100,6 +148,7 @@ const FilterModal = ({
       } else {
         tileUrl += 'user_visited_dare/' + userId;
       }
+      !isPublicView && storage.set('visitedTilesUrl', tileUrl);
       setVisitedTiles(tileUrl);
       return;
     }
@@ -120,9 +169,15 @@ const FilterModal = ({
         tileUrl += 'user_visited_dare/' + userId;
       }
     }
+    !isPublicView && storage.set('visitedTilesUrl', tileUrl);
     setVisitedTiles(tileUrl);
   };
 
+  const handleCloseFilter = () => {
+    setIndex(0);
+    setIsFilterVisible(false);
+  };
+
   const renderScene = ({ route }: { route: any }) => {
     return route.key === 'regions' ? (
       <View style={styles.sceneContainer}>
@@ -188,9 +243,10 @@ const FilterModal = ({
           <Button
             children="Filter"
             onPress={() => {
+              saveFilterSettings();
               handleApplyFilter();
               setType(tilesType.value);
-              setIsFilterVisible(false);
+              handleCloseFilter();
             }}
           />
           <Button
@@ -201,6 +257,27 @@ const FilterModal = ({
               setSelectedVisible({ label: 'visited by', value: 0 });
               setVisitedTiles(`${FASTEST_MAP_HOST}/tiles_nm/user_visited/${userId}`);
               setType(0);
+              if (!isPublicView && isLogged) {
+                storage.set(
+                  'filterSettings',
+                  JSON.stringify({
+                    type: 0,
+                    tilesType: { label: 'NM regions', value: 0 },
+                    selectedYear: allYears[0],
+                    selectedVisible: { label: 'visited by', value: 0 },
+                    seriesFilter: {
+                      visible: seriesVisible,
+                      groups: selectedSeries,
+                      status: selectedSeriesFilter,
+                      applied: true
+                    }
+                  })
+                );
+                storage.set(
+                  'visitedTilesUrl',
+                  `${FASTEST_MAP_HOST}/tiles_nm/user_visited/${userId}`
+                );
+              }
             }}
             variant={ButtonVariants.OPACITY}
             containerStyles={styles.closeBtn}
@@ -219,7 +296,7 @@ const FilterModal = ({
               value={seriesVisible}
               style={{ transform: 'scale(0.8)' }}
             />
-            <Text style={styles.textBold}>Visible / Not visible</Text>
+            <Text style={styles.textBold}>Show series</Text>
           </View>
 
           {isLogged ? (
@@ -318,7 +395,8 @@ const FilterModal = ({
                   applied: true,
                   status: selectedSeriesFilter
                 });
-              setIsFilterVisible(false);
+              saveFilterSettings();
+              handleCloseFilter();
             }}
           />
           <Button
@@ -329,6 +407,23 @@ const FilterModal = ({
               setSeriesVisible(true);
               setSeriesFilter &&
                 setSeriesFilter({ visible: true, groups: [], applied: false, status: -1 });
+              if (!isPublicView && isLogged) {
+                storage.set(
+                  'filterSettings',
+                  JSON.stringify({
+                    type: tilesType.value,
+                    tilesType,
+                    selectedYear,
+                    selectedVisible,
+                    seriesFilter: {
+                      visible: true,
+                      groups: series?.map((item) => item.value),
+                      status: -1,
+                      applied: false
+                    }
+                  })
+                );
+              }
             }}
             variant={ButtonVariants.OPACITY}
             containerStyles={styles.closeBtn}
@@ -344,8 +439,8 @@ const FilterModal = ({
   return (
     <ReactModal
       isVisible={isFilterVisible}
-      onBackdropPress={() => setIsFilterVisible(false)}
-      onBackButtonPress={() => setIsFilterVisible(false)}
+      onBackdropPress={handleCloseFilter}
+      onBackButtonPress={handleCloseFilter}
       style={styles.modal}
       statusBarTranslucent={true}
       presentationStyle="overFullScreen"

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

@@ -60,7 +60,6 @@ import { Colors } from 'src/theme';
 import { useGetUniversalSearch } from '@api/search';
 import SearchModal from './UniversalSearch';
 import FilterModal from './FilterModal';
-import InfoIcon from 'assets/icons/info-solid.svg';
 import { NAVIGATION_PAGES } from 'src/types';
 import { useRegion } from 'src/contexts/RegionContext';
 import { useFocusEffect } from '@react-navigation/native';
@@ -138,6 +137,8 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation, route }) => {
 
   const { handleUpdateNM, handleUpdateDare, handleUpdateSlow, userData, setUserData } = useRegion();
   const userInfo = storage.get('currentUserData', StoreType.STRING) as string;
+  const savedFilterSettings = storage.get('filterSettings', StoreType.STRING) as string;
+  const savedVisitedTilesUrl = storage.get('visitedTilesUrl', StoreType.STRING) as string;
   const [userInfoData, setUserInfoData] = useState<any>(null);
 
   useFocusEffect(
@@ -175,6 +176,18 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation, route }) => {
     }
   }, [userInfo]);
 
+  useEffect(() => {
+    if (savedFilterSettings) {
+      const filterSettings = JSON.parse(savedFilterSettings);
+      setTilesType(filterSettings.tilesType);
+      setType(filterSettings.type);
+      setSeriesFilter(filterSettings.seriesFilter);
+    }
+    if (savedVisitedTilesUrl) {
+      setVisitedTiles(savedVisitedTilesUrl);
+    }
+  }, [savedFilterSettings, savedVisitedTilesUrl]);
+
   useEffect(() => {
     if (!dareData) {
       const fetchData = async () => {
@@ -847,7 +860,7 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation, route }) => {
                   />
                 ) : (
                   <AvatarWithInitials
-                    text={`${userInfoData?.first_name[0] ?? ''}${userInfoData?.last_name[0] ?? ''}`}
+                    text={`${userInfoData?.first_name ? userInfoData?.first_name[0] : ''}${userInfoData?.last_name ? userInfoData?.last_name[0] : ''}`}
                     flag={API_HOST + '/img/flags_new/' + userInfoData?.homebase_flag}
                     size={48}
                     borderColor={Colors.WHITE}

+ 2 - 0
src/screens/InAppScreens/ProfileScreen/Profile/edit-personal-info.tsx

@@ -105,6 +105,8 @@ export const EditPersonalInfo = () => {
     storage.remove('token');
     storage.remove('uid');
     storage.remove('currentUserData');
+    storage.remove('visitedTilesUrl');
+    storage.remove('filterSettings');
     updateNotificationStatus();
     navigation.dispatch(
       CommonActions.reset({