Explorar o código

sentry fixes 2

Viktoriia hai 1 semana
pai
achega
bec19f483e

+ 11 - 1
src/components/RegionPopup/index.tsx

@@ -21,6 +21,16 @@ interface Region {
   visitors_count: number;
 }
 
+const parseRegionPhotos = (value: unknown): string | undefined => {
+  if (typeof value !== 'string' || !value.trim()) return undefined;
+  try {
+    const arr = JSON.parse(value);
+    return Array.isArray(arr) && arr.length > 0 ? arr[0] : undefined;
+  } catch {
+    return undefined;
+  }
+};
+
 interface RegionPopupProps {
   region: Region;
   userAvatars: string[];
@@ -66,7 +76,7 @@ const RegionPopup: React.FC<RegionPopupProps> = ({
   };
 
   const { regionTitle, regionSubtitle } = splitRegionName(region.name);
-  const regionImg = JSON.parse(region.region_photos)[0];
+  const regionImg = parseRegionPhotos(region.region_photos);
 
   function formatNumber(value?: number | null) {
     const number = typeof value === 'number' && !isNaN(value) ? value : 0;

+ 18 - 10
src/contexts/PushNotificationContext.tsx

@@ -13,14 +13,25 @@ import {
   unregisterBackgroundNotificationTask
 } from 'src/utils/pushNotificationTask';
 
+const safeParseParams = (value: unknown) => {
+  if (typeof value !== 'string') return {};
+  try {
+    const parsed = JSON.parse(value);
+    return parsed && typeof parsed === 'object' ? parsed : {};
+  } catch {
+    console.warn('Invalid notification params JSON', value);
+    return {};
+  }
+};
+
 const PushNotificationContext = createContext<{
   isSubscribed: boolean;
   toggleSubscription: () => Promise<void>;
   unsubscribeFromNotifications: () => Promise<void>;
 }>({
   isSubscribed: false,
-  toggleSubscription: async () => {},
-  unsubscribeFromNotifications: async () => {}
+  toggleSubscription: async () => { },
+  unsubscribeFromNotifications: async () => { }
 });
 
 export const usePushNotification = () => useContext(PushNotificationContext);
@@ -181,7 +192,7 @@ export const PushNotificationProvider = ({ children }: { children: React.ReactNo
 
       if (data?.screen && data?.parentScreen) {
         if (data?.params) {
-          const parsedParams = JSON.parse(data.params) ?? {};
+          const parsedParams = safeParseParams(data?.params);
 
           navigation.dispatch(
             CommonActions.reset({
@@ -282,11 +293,9 @@ export const PushNotificationProvider = ({ children }: { children: React.ReactNo
         let fromUser;
 
         if (Platform.OS === 'ios') {
-          const parsedData =
-            JSON.parse(
-              (notification.request.trigger as Notifications.PushNotificationTrigger)?.payload
-                ?.params as string
-            ) ?? {};
+          const parsedData = safeParseParams(
+            (notification.request.trigger as Notifications.PushNotificationTrigger)?.payload?.params
+          );
           groupToken = parsedData?.group_token;
           messageId = (notification.request.trigger as Notifications.PushNotificationTrigger)
             ?.payload?.message_id as number;
@@ -313,11 +322,10 @@ export const PushNotificationProvider = ({ children }: { children: React.ReactNo
           url = (response.notification.request.trigger as Notifications.PushNotificationTrigger)
             ?.payload?.url;
         }
-        console.log('33333', screenName, parentScreen);
 
         if (screenName && parentScreen) {
           if (params) {
-            const parsedParams = JSON.parse(params as string) ?? {};
+            const parsedParams = safeParseParams(params);
 
             navigation.dispatch(
               CommonActions.reset({

+ 4 - 1
src/screens/OfflineMapsScreen/index.tsx

@@ -62,7 +62,8 @@ export default function OfflineMapsScreen({ navigation }: { navigation: any }) {
   useEffect(() => {
     const intervalId = setInterval(() => {
       const mapsString = storage.get(OFFLINE_MAPS_KEY, StoreType.STRING) as string;
-      if (mapsString) {
+      try {
+        if (!mapsString) return;
         const parsedMaps = JSON.parse(mapsString);
         if (
           parsedMaps.some((map: any) => map.status === 'downloading') ||
@@ -70,6 +71,8 @@ export default function OfflineMapsScreen({ navigation }: { navigation: any }) {
         ) {
           setMaps(parsedMaps);
         }
+      } catch (e) {
+        console.warn('Invalid OFFLINE_MAPS_KEY JSON', e);
       }
     }, 1000);