浏览代码

fixed map performance issue after leaving outdoor map

cdmoss 2 年之前
父节点
当前提交
7901778cff

+ 154 - 84
package-lock.json

@@ -15,9 +15,10 @@
         "@react-native-community/checkbox": "^0.5.8",
         "@react-native-community/slider": "4.1.10",
         "@react-native-picker/picker": "^2.3.0",
-        "@react-navigation/bottom-tabs": "^5.11.11",
-        "@react-navigation/native": "^5.9.8",
-        "@react-navigation/stack": "^5.14.5",
+        "@react-navigation/bottom-tabs": "^6.2.0",
+        "@react-navigation/native": "^6.0.8",
+        "@react-navigation/native-stack": "^6.5.0",
+        "@react-navigation/stack": "^6.1.1",
         "@turf/turf": "^6.5.0",
         "@types/react-native-dotenv": "^0.2.0",
         "axios": "^0.21.1",
@@ -6000,59 +6001,88 @@
       "integrity": "sha512-0jbp4RxjYopTsIdLl+/Fy2TiwVYHy4mgeu07DG4b/LyM0OS/+lPP5c9sbnt/AMlnF6qz2JRZpPpGw1eMNS6A4w=="
     },
     "node_modules/@react-navigation/bottom-tabs": {
-      "version": "5.11.15",
-      "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-5.11.15.tgz",
-      "integrity": "sha512-TBY419W6aN/HZg98xbVp5Bx1HEF5sXuHR5f55W6KMI4k2AvxlwelKD1wbfvEcX2iuQT0YUiiXsACRFUSECYhkw==",
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.2.0.tgz",
+      "integrity": "sha512-MNwXbybjapRFZJtO+fNu5YuTYQGzzYAUIF4IsY2+ZBXoCRpzuDq8gXV7ChKDJaaTeX39IoDUng3qGXbvtVcivA==",
       "dependencies": {
+        "@react-navigation/elements": "^1.3.1",
         "color": "^3.1.3",
-        "react-native-iphone-x-helper": "^1.3.0"
+        "warn-once": "^0.1.0"
       },
       "peerDependencies": {
-        "@react-navigation/native": "^5.0.5",
+        "@react-navigation/native": "^6.0.0",
+        "react": "*",
+        "react-native": "*",
+        "react-native-safe-area-context": ">= 3.0.0",
+        "react-native-screens": ">= 3.0.0"
+      }
+    },
+    "node_modules/@react-navigation/bottom-tabs/node_modules/@react-navigation/elements": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.1.tgz",
+      "integrity": "sha512-jIDRJaG8YPIinl4hZXJu/W3TnhDe8hLYmGSEdL1mxZ1aoNMiApCBYkgTy11oq0EfK/koZd3DPSkJNbzBAQmPJw==",
+      "peerDependencies": {
+        "@react-navigation/native": "^6.0.0",
         "react": "*",
         "react-native": "*",
-        "react-native-safe-area-context": ">= 0.6.0",
-        "react-native-screens": ">= 2.0.0-alpha.0 || >= 2.0.0-beta.0 || >= 2.0.0"
+        "react-native-safe-area-context": ">= 3.0.0"
       }
     },
-    "node_modules/@react-navigation/core": {
-      "version": "5.16.1",
-      "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.16.1.tgz",
-      "integrity": "sha512-3AToC7vPNeSNcHFLd1h71L6u34hfXoRAS1CxF9Fc4uC8uOrVqcNvphpeFbE0O9Bw6Zpl0BnMFl7E5gaL3KGzNA==",
+    "node_modules/@react-navigation/native": {
+      "version": "6.0.8",
+      "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.0.8.tgz",
+      "integrity": "sha512-6022M3+Btok3xJC/49B88er3SRrlDAZ4FdmGndhEVvBcGSHWmscU2qKCwFd0RY6A0AGCVmdIlXudrfdcdRAkpQ==",
       "dependencies": {
-        "@react-navigation/routers": "^5.7.4",
+        "@react-navigation/core": "^6.1.1",
         "escape-string-regexp": "^4.0.0",
-        "nanoid": "^3.1.15",
-        "query-string": "^6.13.6",
-        "react-is": "^16.13.0"
+        "fast-deep-equal": "^3.1.3",
+        "nanoid": "^3.1.23"
       },
       "peerDependencies": {
-        "react": "*"
+        "react": "*",
+        "react-native": "*"
       }
     },
-    "node_modules/@react-navigation/core/node_modules/escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "engines": {
-        "node": ">=10"
+    "node_modules/@react-navigation/native-stack": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.5.0.tgz",
+      "integrity": "sha512-X2sV+AKkqEl7k0ltjN4lMBfx+FsynrnUWkCTGiROyMRo4yWElK1jY3XSTsj5Cpso2/MUHdf9v/AOw0EgU58FsA==",
+      "dependencies": {
+        "@react-navigation/elements": "^1.3.1",
+        "warn-once": "^0.1.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "peerDependencies": {
+        "@react-navigation/native": "^6.0.0",
+        "react": "*",
+        "react-native": "*",
+        "react-native-safe-area-context": ">= 3.0.0",
+        "react-native-screens": ">= 3.0.0"
       }
     },
-    "node_modules/@react-navigation/native": {
-      "version": "5.9.8",
-      "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.9.8.tgz",
-      "integrity": "sha512-DNbcDHXQPSFDLn51kkVVJjT3V7jJy2GztNYZe/2bEg29mi5QEcHHcpifjMCtyFKntAOWzKlG88UicIQ17UEghg==",
+    "node_modules/@react-navigation/native-stack/node_modules/@react-navigation/elements": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.1.tgz",
+      "integrity": "sha512-jIDRJaG8YPIinl4hZXJu/W3TnhDe8hLYmGSEdL1mxZ1aoNMiApCBYkgTy11oq0EfK/koZd3DPSkJNbzBAQmPJw==",
+      "peerDependencies": {
+        "@react-navigation/native": "^6.0.0",
+        "react": "*",
+        "react-native": "*",
+        "react-native-safe-area-context": ">= 3.0.0"
+      }
+    },
+    "node_modules/@react-navigation/native/node_modules/@react-navigation/core": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.1.1.tgz",
+      "integrity": "sha512-njysuiqztgvR1Z9Noxk2OGJfYtFGFDRyji5Vmm1jHzlql0m+q0wh1dUiyaIEtTyrhFXr/YNgdrKuiPaU9Jp8OA==",
       "dependencies": {
-        "@react-navigation/core": "^5.16.1",
+        "@react-navigation/routers": "^6.1.0",
         "escape-string-regexp": "^4.0.0",
-        "nanoid": "^3.1.15"
+        "nanoid": "^3.1.23",
+        "query-string": "^7.0.0",
+        "react-is": "^16.13.0"
       },
       "peerDependencies": {
-        "react": "*",
-        "react-native": "*"
+        "react": "*"
       }
     },
     "node_modules/@react-navigation/native/node_modules/escape-string-regexp": {
@@ -6067,29 +6097,40 @@
       }
     },
     "node_modules/@react-navigation/routers": {
-      "version": "5.7.4",
-      "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.7.4.tgz",
-      "integrity": "sha512-0N202XAqsU/FlE53Nmh6GHyMtGm7g6TeC93mrFAFJOqGRKznT0/ail+cYlU6tNcPA9AHzZu1Modw1eoDINSliQ==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.0.tgz",
+      "integrity": "sha512-8xJL+djIzpFdRW/sGlKojQ06fWgFk1c5jER9501HYJ12LF5DIJFr/tqBI2TJ6bk+y+QFu0nbNyeRC80OjRlmkA==",
       "dependencies": {
-        "nanoid": "^3.1.15"
+        "nanoid": "^3.1.23"
       }
     },
     "node_modules/@react-navigation/stack": {
-      "version": "5.14.9",
-      "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.14.9.tgz",
-      "integrity": "sha512-DuvrT9P+Tz8ezZLQYxORZqOGqO+vEufaxlW1hSLw1knLD4jNxkz8TJDXtfKwaz//9gb43UhTNccNM02vm7iPqQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.1.1.tgz",
+      "integrity": "sha512-mr7CrP3rvYapTZj/xUInJYDte2QEQPvK8qBI6kbJ6goeLqRMkcO7haK4Q5FeV1HVYCUnssAn7CA5j+OOm59syg==",
       "dependencies": {
+        "@react-navigation/elements": "^1.3.1",
         "color": "^3.1.3",
-        "react-native-iphone-x-helper": "^1.3.0"
+        "warn-once": "^0.1.0"
       },
       "peerDependencies": {
-        "@react-native-community/masked-view": ">= 0.1.0",
-        "@react-navigation/native": "^5.0.5",
+        "@react-navigation/native": "^6.0.0",
         "react": "*",
         "react-native": "*",
         "react-native-gesture-handler": ">= 1.0.0",
-        "react-native-safe-area-context": ">= 0.6.0",
-        "react-native-screens": ">= 2.0.0-alpha.0 || >= 2.0.0-beta.0 || >= 2.0.0"
+        "react-native-safe-area-context": ">= 3.0.0",
+        "react-native-screens": ">= 3.0.0"
+      }
+    },
+    "node_modules/@react-navigation/stack/node_modules/@react-navigation/elements": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.1.tgz",
+      "integrity": "sha512-jIDRJaG8YPIinl4hZXJu/W3TnhDe8hLYmGSEdL1mxZ1aoNMiApCBYkgTy11oq0EfK/koZd3DPSkJNbzBAQmPJw==",
+      "peerDependencies": {
+        "@react-navigation/native": "^6.0.0",
+        "react": "*",
+        "react-native": "*",
+        "react-native-safe-area-context": ">= 3.0.0"
       }
     },
     "node_modules/@segment/loosely-validate-event": {
@@ -24202,9 +24243,9 @@
       }
     },
     "node_modules/query-string": {
-      "version": "6.14.1",
-      "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz",
-      "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.1.tgz",
+      "integrity": "sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w==",
       "dependencies": {
         "decode-uri-component": "^0.2.0",
         "filter-obj": "^1.1.0",
@@ -35794,26 +35835,46 @@
       "integrity": "sha512-0jbp4RxjYopTsIdLl+/Fy2TiwVYHy4mgeu07DG4b/LyM0OS/+lPP5c9sbnt/AMlnF6qz2JRZpPpGw1eMNS6A4w=="
     },
     "@react-navigation/bottom-tabs": {
-      "version": "5.11.15",
-      "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-5.11.15.tgz",
-      "integrity": "sha512-TBY419W6aN/HZg98xbVp5Bx1HEF5sXuHR5f55W6KMI4k2AvxlwelKD1wbfvEcX2iuQT0YUiiXsACRFUSECYhkw==",
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.2.0.tgz",
+      "integrity": "sha512-MNwXbybjapRFZJtO+fNu5YuTYQGzzYAUIF4IsY2+ZBXoCRpzuDq8gXV7ChKDJaaTeX39IoDUng3qGXbvtVcivA==",
       "requires": {
+        "@react-navigation/elements": "^1.3.1",
         "color": "^3.1.3",
-        "react-native-iphone-x-helper": "^1.3.0"
+        "warn-once": "^0.1.0"
+      },
+      "dependencies": {
+        "@react-navigation/elements": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.1.tgz",
+          "integrity": "sha512-jIDRJaG8YPIinl4hZXJu/W3TnhDe8hLYmGSEdL1mxZ1aoNMiApCBYkgTy11oq0EfK/koZd3DPSkJNbzBAQmPJw==",
+          "requires": {}
+        }
       }
     },
-    "@react-navigation/core": {
-      "version": "5.16.1",
-      "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.16.1.tgz",
-      "integrity": "sha512-3AToC7vPNeSNcHFLd1h71L6u34hfXoRAS1CxF9Fc4uC8uOrVqcNvphpeFbE0O9Bw6Zpl0BnMFl7E5gaL3KGzNA==",
+    "@react-navigation/native": {
+      "version": "6.0.8",
+      "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.0.8.tgz",
+      "integrity": "sha512-6022M3+Btok3xJC/49B88er3SRrlDAZ4FdmGndhEVvBcGSHWmscU2qKCwFd0RY6A0AGCVmdIlXudrfdcdRAkpQ==",
       "requires": {
-        "@react-navigation/routers": "^5.7.4",
+        "@react-navigation/core": "^6.1.1",
         "escape-string-regexp": "^4.0.0",
-        "nanoid": "^3.1.15",
-        "query-string": "^6.13.6",
-        "react-is": "^16.13.0"
+        "fast-deep-equal": "^3.1.3",
+        "nanoid": "^3.1.23"
       },
       "dependencies": {
+        "@react-navigation/core": {
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.1.1.tgz",
+          "integrity": "sha512-njysuiqztgvR1Z9Noxk2OGJfYtFGFDRyji5Vmm1jHzlql0m+q0wh1dUiyaIEtTyrhFXr/YNgdrKuiPaU9Jp8OA==",
+          "requires": {
+            "@react-navigation/routers": "^6.1.0",
+            "escape-string-regexp": "^4.0.0",
+            "nanoid": "^3.1.23",
+            "query-string": "^7.0.0",
+            "react-is": "^16.13.0"
+          }
+        },
         "escape-string-regexp": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -35821,38 +35882,47 @@
         }
       }
     },
-    "@react-navigation/native": {
-      "version": "5.9.8",
-      "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.9.8.tgz",
-      "integrity": "sha512-DNbcDHXQPSFDLn51kkVVJjT3V7jJy2GztNYZe/2bEg29mi5QEcHHcpifjMCtyFKntAOWzKlG88UicIQ17UEghg==",
+    "@react-navigation/native-stack": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.5.0.tgz",
+      "integrity": "sha512-X2sV+AKkqEl7k0ltjN4lMBfx+FsynrnUWkCTGiROyMRo4yWElK1jY3XSTsj5Cpso2/MUHdf9v/AOw0EgU58FsA==",
       "requires": {
-        "@react-navigation/core": "^5.16.1",
-        "escape-string-regexp": "^4.0.0",
-        "nanoid": "^3.1.15"
+        "@react-navigation/elements": "^1.3.1",
+        "warn-once": "^0.1.0"
       },
       "dependencies": {
-        "escape-string-regexp": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-          "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+        "@react-navigation/elements": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.1.tgz",
+          "integrity": "sha512-jIDRJaG8YPIinl4hZXJu/W3TnhDe8hLYmGSEdL1mxZ1aoNMiApCBYkgTy11oq0EfK/koZd3DPSkJNbzBAQmPJw==",
+          "requires": {}
         }
       }
     },
     "@react-navigation/routers": {
-      "version": "5.7.4",
-      "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.7.4.tgz",
-      "integrity": "sha512-0N202XAqsU/FlE53Nmh6GHyMtGm7g6TeC93mrFAFJOqGRKznT0/ail+cYlU6tNcPA9AHzZu1Modw1eoDINSliQ==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.0.tgz",
+      "integrity": "sha512-8xJL+djIzpFdRW/sGlKojQ06fWgFk1c5jER9501HYJ12LF5DIJFr/tqBI2TJ6bk+y+QFu0nbNyeRC80OjRlmkA==",
       "requires": {
-        "nanoid": "^3.1.15"
+        "nanoid": "^3.1.23"
       }
     },
     "@react-navigation/stack": {
-      "version": "5.14.9",
-      "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.14.9.tgz",
-      "integrity": "sha512-DuvrT9P+Tz8ezZLQYxORZqOGqO+vEufaxlW1hSLw1knLD4jNxkz8TJDXtfKwaz//9gb43UhTNccNM02vm7iPqQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.1.1.tgz",
+      "integrity": "sha512-mr7CrP3rvYapTZj/xUInJYDte2QEQPvK8qBI6kbJ6goeLqRMkcO7haK4Q5FeV1HVYCUnssAn7CA5j+OOm59syg==",
       "requires": {
+        "@react-navigation/elements": "^1.3.1",
         "color": "^3.1.3",
-        "react-native-iphone-x-helper": "^1.3.0"
+        "warn-once": "^0.1.0"
+      },
+      "dependencies": {
+        "@react-navigation/elements": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.1.tgz",
+          "integrity": "sha512-jIDRJaG8YPIinl4hZXJu/W3TnhDe8hLYmGSEdL1mxZ1aoNMiApCBYkgTy11oq0EfK/koZd3DPSkJNbzBAQmPJw==",
+          "requires": {}
+        }
       }
     },
     "@segment/loosely-validate-event": {
@@ -50305,9 +50375,9 @@
       "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA=="
     },
     "query-string": {
-      "version": "6.14.1",
-      "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz",
-      "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.1.tgz",
+      "integrity": "sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w==",
       "requires": {
         "decode-uri-component": "^0.2.0",
         "filter-obj": "^1.1.0",

+ 4 - 3
package.json

@@ -33,9 +33,10 @@
     "@react-native-community/checkbox": "^0.5.8",
     "@react-native-community/slider": "4.1.10",
     "@react-native-picker/picker": "^2.3.0",
-    "@react-navigation/bottom-tabs": "^5.11.11",
-    "@react-navigation/native": "^5.9.8",
-    "@react-navigation/stack": "^5.14.5",
+    "@react-navigation/bottom-tabs": "^6.2.0",
+    "@react-navigation/native": "^6.0.8",
+    "@react-navigation/native-stack": "^6.5.0",
+    "@react-navigation/stack": "^6.1.1",
     "@turf/turf": "^6.5.0",
     "@types/react-native-dotenv": "^0.2.0",
     "axios": "^0.21.1",

+ 22 - 21
src/components/Atlas.tsx

@@ -20,7 +20,7 @@ import { QueryClient, QueryClientProvider } from 'react-query';
 import { Splash } from '../components/Splash';
 import { colors, SECURESTORE_ACCESSTOKEN, SECURESTORE_REFRESHTOKEN } from '../utils/GlobalUtils';
 import { useAuth } from '../hooks/useAuth';
-import AuthorizedNavigator, { navigationRef } from '../navigation/AuthorizedNavigator';
+import AuthorizedNavigator from '../navigation/AuthorizedNavigator';
 import UnauthorizedNavigator from '../navigation/UnauthorizedNavigator';
 import { authStore } from '../libs/auth/AuthStore';
 import { API_URL } from '../utils/RequestUtils';
@@ -52,27 +52,28 @@ const Atlas : React.FC = () => {
   });
 
     useEffect(() => {
-      const timer = setInterval(async () => {
-        const update = await Updates.checkForUpdateAsync()
-        if (update.isAvailable && !updateDismissed.current) {
-          updateDismissed.current = true
-          setTimeout(() => {
-            Alert.alert('Update Available', 'An update is available. Would you like to update now?', [
-              {"text": "Yes", "onPress": async () => {
-                await Updates.fetchUpdateAsync()
-                await Updates.reloadAsync()
-              }},
-              {"text": "No", "onPress": () => {
-                Alert.alert('Update Available', 'Update dismissed, you can always revisit it in settings', [
-                  {"text": "OK"}
-                ])
-              }}
-            ])
-          }, 1000);
-        }
+      if (!__DEV__) {
+        const timer = setInterval(async () => {
+          const update = await Updates.checkForUpdateAsync()
+          if (update.isAvailable && !updateDismissed.current) {
+            updateDismissed.current = true
+            setTimeout(() => {
+              Alert.alert('Update Available', 'An update is available. Would you like to update now?', [
+                {"text": "Yes", "onPress": async () => {
+                  await Updates.fetchUpdateAsync()
+                  await Updates.reloadAsync()
+                }},
+                {"text": "No", "onPress": () => {
+                  Alert.alert('Update Available', 'Update dismissed, you can always revisit it in settings', [
+                    {"text": "OK"}
+                  ])
+                }}
+              ])
+            }, 1000);
+          }
       }, 5000)
       return () => clearInterval(timer)
-    }, [])
+    }}, [])
 
   /**
    * Checks if there is an access token available in {@link AuthStore}, then checks if that access token is valid by calling the API. 
@@ -188,7 +189,7 @@ const Atlas : React.FC = () => {
     <MenuProvider>
         <SafeAreaView style={{height: '100%', backgroundColor: colors.red}}>
         <StatusBar barStyle='light-content' backgroundColor={colors.red}/>
-        <NavigationContainer ref={navigationRef}>  
+        <NavigationContainer>  
           {checkingToken ? <Splash/> :
           <QueryClientProvider client={queryClient}>
             {authStore.accessToken ? <AuthorizedNavigator  /> : <UnauthorizedNavigator /> } 

+ 20 - 6
src/components/Map/MainMapComponent/OutdoorMap.tsx

@@ -6,14 +6,14 @@
  */
 
 import { FontAwesome } from "@expo/vector-icons";
-import { RouteProp } from "@react-navigation/native";
+import { RouteProp, useNavigationState } from "@react-navigation/native";
 import { booleanPointInPolygon, circle } from '@turf/turf';
 import * as Notifications from 'expo-notifications';
 import { observer } from "mobx-react";
-import React, { MutableRefObject, useEffect, useState } from "react";
+import React, { MutableRefObject, useEffect, useRef, useState } from "react";
 import { Alert, AppState, Image, Keyboard, Platform, TouchableOpacity, TouchableWithoutFeedback, View } from "react-native";
-import { ScrollView } from "react-native-gesture-handler";
-import MapView, { LatLng, Marker, Polygon } from "react-native-maps";
+import { ScrollView, State } from "react-native-gesture-handler";
+import MapView, { LatLng, Marker, Polygon, Region } from "react-native-maps";
 import { Chip } from "react-native-paper";
 import { PERMISSIONS } from "react-native-permissions";
 import Spokestack from 'react-native-spokestack';
@@ -71,8 +71,12 @@ interface OutdoorMapProps {
 }
 
 const OutdoorMap: React.FC<OutdoorMapProps> = (props) => {
+    const currentRegion = useRef<Region>()
+
     const mapState = useOutdoorMapState()
 
+    const navIndex = useNavigationState(state => state.index)
+
     /**
      * If the ReactNavigation route prop changes, check if it contains incoming selected landmarks, display them if there are. This will be triggered by incoming notifcations 
      * (See the AuthorizedNavigator page for the useEffect that will trigger this)
@@ -86,6 +90,12 @@ const OutdoorMap: React.FC<OutdoorMapProps> = (props) => {
         }
     }, [props.route])
 
+    useEffect(() => {
+        mapState.setRefreshKey(Math.floor(Math.random() * 100))
+        console.log(currentRegion.current)
+        mapState.mapRef.current.animateToRegion(currentRegion.current)
+    }, [navIndex])
+
     /**
      * Toggle the lm details panel when a new selected landmark is detected (triggered by pressing on a map marker, or from the list of nearby landmarks)
      */
@@ -216,10 +226,12 @@ const OutdoorMap: React.FC<OutdoorMapProps> = (props) => {
      * Gets initial region that map should zoom into from current user location
      */
     const getInitialRegion = () => {
-        if (mapState.userLocation) {
+        if (mapState.userLocation && !currentRegion.current) {
             return {latitude: mapState.userLocation.latitude, longitude: mapState.userLocation.longitude, latitudeDelta: 0.01, longitudeDelta: 0.01}
         }
-        return undefined
+        else {
+            return currentRegion.current
+        }
     }
 
     /**
@@ -273,6 +285,7 @@ const OutdoorMap: React.FC<OutdoorMapProps> = (props) => {
             <>
             {/*Main map component*/}
             <MapView 
+                key={mapState.refreshKey}
                 toolbarEnabled={false}
                 onPress={() => Keyboard.dismiss()}
                 testID="mapView"
@@ -282,6 +295,7 @@ const OutdoorMap: React.FC<OutdoorMapProps> = (props) => {
                 onLongPress={(e) => props.promptAddLandmark(e.nativeEvent.coordinate.longitude, e.nativeEvent.coordinate.latitude)} 
                 showsUserLocation={mapState.locationPermitted} 
                 onUserLocationChange={e => updateLocation(e.nativeEvent.coordinate)}
+                onRegionChange={region => currentRegion.current = region}
                 followsUserLocation={mapState.followUser}
                 showsMyLocationButton={false}>
             <Polygon // polygon for cameron library

+ 5 - 0
src/components/Map/MainMapComponent/useMapState.ts

@@ -68,6 +68,10 @@ export const useMapState = () => {
 }
 
 export const useOutdoorMapState = () => {
+    /**
+     * Used to force refreshes
+     */
+     const [refreshKey, setRefreshKey] = useState<number>(Math.floor(Math.random() * 100));
     /**
      * Holds the visibility state of the {@link AddLandmark} modal.
      */
@@ -111,6 +115,7 @@ export const useOutdoorMapState = () => {
     const mapRef = useRef<MapView>();
 
     return {
+        refreshKey, setRefreshKey,
         nearbyLmPanelVisible, toggleNearbyLmPanel,
         followUser, toggleFollowUser,
         userLocation, setUserLocation,

+ 14 - 19
src/navigation/AuthorizedNavigator.tsx

@@ -6,7 +6,7 @@
  */
 
 import { FontAwesome } from '@expo/vector-icons';
-import { BottomTabBarOptions, BottomTabNavigationProp, createBottomTabNavigator } from "@react-navigation/bottom-tabs";
+import { BottomTabNavigationOptions, BottomTabNavigationProp, createBottomTabNavigator } from "@react-navigation/bottom-tabs";
 import { observer } from "mobx-react";
 import React, { useEffect } from "react";
 import { AppState, Platform, SafeAreaView, View, Text, Alert } from 'react-native';
@@ -20,7 +20,7 @@ import { getItemAsync } from 'expo-secure-store';
 import Constants from 'expo-constants';
 import * as Notifications from 'expo-notifications'
 import { useAuth } from '../hooks/useAuth';
-import { NavigationContainerRef, RouteProp } from '@react-navigation/native';
+import { NavigationContainerRef, RouteProp, useNavigation } from '@react-navigation/native';
 import { QueryClient, useQuery } from 'react-query';
 import { useProfile } from '../hooks/useProfile';
 import { NotifType } from '../types';
@@ -37,15 +37,15 @@ Notifications.setNotificationHandler({
 
 const MainTabs = createBottomTabNavigator();
 
-const tabBarOptions: BottomTabBarOptions = {
+const tabBarOptions: BottomTabNavigationOptions = {
     //keyboardHidesTabBar: true,
-    activeTintColor: 'white',
-    activeBackgroundColor: '#e35555',
-    inactiveTintColor: "lightgray",
+    tabBarActiveTintColor: 'white',
+    tabBarActiveBackgroundColor: '#e35555',
+    tabBarInactiveTintColor: "lightgray",
     
-    style: {backgroundColor: colors.red, height: 60, justifyContent: 'center'},
-    labelStyle: {marginBottom: 7},
-    iconStyle: {marginBottom: 7}
+    tabBarStyle: {backgroundColor: colors.red, height: 60, justifyContent: 'center'},
+    tabBarLabelStyle: {marginBottom: 7},
+    tabBarIconStyle: {marginBottom: 7}
 } 
 
 /**
@@ -59,13 +59,6 @@ const tabBarOptions: BottomTabBarOptions = {
 }
 
 export type AuthTabsNavigationProp = BottomTabNavigationProp<AuthTabsParamList>
-
-export const navigationRef = React.createRef<NavigationContainerRef>()
-
-export const navigate = (name: string, params?) => {
-    navigationRef.current.navigate(name, params)
-}
-
 /**
  * The root navigator for all authorized screens ({@link Map}, {@link Profile}). It uses a [React Navigation Bottom Tabs Navigator]{@link https://reactnavigation.org/docs/bottom-tab-navigator/} the main navigation mechanism.
  * @category Navigation
@@ -78,6 +71,8 @@ const AuthorizedNavigator: React.FC = () => {
 
     const { profile, toggleTipsAsync } = useProfile(authStore.userId)
 
+    const navigation = useNavigation()
+
     /**
      * If the user has their preferences configured to show tips, show them on page load. Recheck every time show_tips changes
      */
@@ -102,9 +97,9 @@ const AuthorizedNavigator: React.FC = () => {
         await markNotificationAsRead(notifData.notif_id)
         await refetchNotifications()
         if (notifData?.notif_type as NotifType == 'landmark-like' || notifData?.notif_type as NotifType == 'near-landmark')
-            navigate('Map', {selectedLandmark: notifData.landmark_id})
+            navigation.navigate('Map' as never, {selectedLandmark: notifData.landmark_id} as never)
         if (notifData?.notif_type as NotifType == 'near-landmarks')
-            navigate('Map', {selectedLandmarks: notifData.landmarks})
+            navigation.navigate('Map' as never, {selectedLandmarks: notifData.landmarks} as never)
     }
 
     const registerForPushNotificationsAsync = async () => {
@@ -224,7 +219,7 @@ const AuthorizedNavigator: React.FC = () => {
             <MainTabs.Navigator 
                 sceneContainerStyle={{flex:1}}     
                 initialRouteName="Map"
-                tabBarOptions={tabBarOptions}>
+                screenOptions={tabBarOptions}>
                 <MainTabs.Screen name="Map" component={MapNavigator} options={{tabBarIcon: ({color, focused}) => (<FontAwesome name={focused ? 'map' : 'map-o'} size={getIconSize(focused)} color={color} style={{position: 'absolute', top: 10}}/>)}}/>
                 <MainTabs.Screen name="Feed" options={{tabBarIcon: ({color, focused}) => (
                     <View style={{position: 'absolute', top: 10}}>

+ 17 - 33
src/navigation/MapNavigator.tsx

@@ -1,29 +1,25 @@
+import { FontAwesome } from "@expo/vector-icons"
+import { useNavigation, useNavigationState, useRoute } from "@react-navigation/native"
 import { createStackNavigator, StackNavigationProp } from "@react-navigation/stack"
+import { createNativeStackNavigator } from "@react-navigation/native-stack"
+import { observer } from "mobx-react"
 import React, { useEffect, useState } from "react"
-import { AppState, Platform, ScrollView, View, Image, Dimensions, } from "react-native"
-import OutdoorMap, { AuthTabsMapRouteProp } from "../components/Map/MainMapComponent/OutdoorMap"
+import { Dimensions, Image, ScrollView, View } from "react-native"
+import { Chip } from "react-native-paper"
+import { IconButton } from "../components/Buttons"
 import IndoorMap from "../components/Map/MainMapComponent/IndoorMap"
-import { AuthTabsNavigationProp, AuthTabsParamList } from "./AuthorizedNavigator"
-import { RouteProp, useNavigation, useRoute, useNavigationState } from "@react-navigation/native"
+import mapStyles from "../components/Map/MainMapComponent/Map.styles"
+import OutdoorMap, { AuthTabsMapRouteProp } from "../components/Map/MainMapComponent/OutdoorMap"
+import { useMapState } from "../components/Map/MainMapComponent/useMapState"
 import AddLandmarkPanel from "../components/Map/Panels/AddLandmarkPanel"
-import LandmarkDetails from "../components/Map/Panels/LandmarkDetailsPanel/LandmarkDetails"
 import { FilterPanel } from "../components/Map/Panels/FilterPanel/FilterPanel"
-import NearbyLandmarksPanel from "../components/Map/Panels/NearbyLandmarksPanel"
-import { useMapState } from "../components/Map/MainMapComponent/useMapState"
+import LandmarkDetails from "../components/Map/Panels/LandmarkDetailsPanel/LandmarkDetails"
 import { Landmark, useLandmarks } from "../hooks/useLandmarks"
-import { checkVoicePermissions, colors, getMapPermissions, lmTypes } from "../utils/GlobalUtils"
-import { PERMISSIONS } from "react-native-permissions"
 import { authStore } from "../libs/auth/AuthStore"
-import { observer } from "mobx-react"
-import { LatLng } from "react-native-maps"
-import Spokestack from 'react-native-spokestack';
-import { IconButton } from "../components/Buttons"
-import { Chip } from "react-native-paper"
-import { FontAwesome } from "@expo/vector-icons"
-import mapStyles from "../components/Map/MainMapComponent/Map.styles"
-import { BottomTabBarOptions } from "@react-navigation/bottom-tabs"
+import { colors, lmTypes } from "../utils/GlobalUtils"
+import { AuthTabsNavigationProp } from "./AuthorizedNavigator"
 
-const MapStackNavigator = createStackNavigator()
+const MapStackNavigator = createNativeStackNavigator()
 
 export type MapStackParamList = {
     Outdoor: { selectedLandmark: string, selectedLandmarks: string[] },
@@ -37,17 +33,6 @@ interface MapNavigatorProps {
     route: AuthTabsMapRouteProp
 }
 
-const tabBarOptions: BottomTabBarOptions = {
-    //keyboardHidesTabBar: true,
-    activeTintColor: 'white',
-    activeBackgroundColor: '#e35555',
-    inactiveTintColor: "lightgray",
-
-    style: { backgroundColor: colors.red, height: 60, justifyContent: 'center' },
-    labelStyle: { marginBottom: 7 },
-    iconStyle: { marginBottom: 7 }
-}
-
 
 const MapNavigator: React.FC<MapNavigatorProps> = ({ route }) => {
     const mapState = useMapState()
@@ -65,9 +50,6 @@ const MapNavigator: React.FC<MapNavigatorProps> = ({ route }) => {
     useEffect(() => {
         const currentRouteIndex = navigationState?.routes[0]?.state?.index
         const currentRouteName = navigationState?.routes[0]?.state?.routeNames[currentRouteIndex]
-        console.log("apples")
-        console.log(currentRouteName)
-        console.log("bananas")
         setCurrentRoute(currentRouteName)
     }, [navigationState])
 
@@ -155,7 +137,9 @@ const MapNavigator: React.FC<MapNavigatorProps> = ({ route }) => {
                             setSelectedLandmarkId={mapState.setSelectedLandmarkId} />}
                 </MapStackNavigator.Screen>
 
-                <MapStackNavigator.Screen name="Indoor" >
+                <MapStackNavigator.Screen name="Indoor" listeners={{
+                    
+                }} >
                     {({ navigation }) =>
                         <IndoorMap
                             navigation={navigation}

+ 1 - 1
src/utils/RequestUtils.ts

@@ -27,7 +27,7 @@ import Config from 'react-native-config'
 //export const API_URL = 'http://192.168.3.81:8000'
 // export const API_URL = 'https://staging.clicknpush.ca'
 
-export const API_URL = 'http://192.168.0.22:8000'
+export const API_URL = 'http://192.168.3.162:8000'
 
 // export const API_URL = Config.API_URL
 

+ 54 - 58
yarn.lock

@@ -2428,48 +2428,64 @@
   "resolved" "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-1.0.0.tgz"
   "version" "1.0.0"
 
-"@react-navigation/bottom-tabs@^5.11.11":
-  "integrity" "sha512-TBY419W6aN/HZg98xbVp5Bx1HEF5sXuHR5f55W6KMI4k2AvxlwelKD1wbfvEcX2iuQT0YUiiXsACRFUSECYhkw=="
-  "resolved" "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-5.11.15.tgz"
-  "version" "5.11.15"
+"@react-navigation/bottom-tabs@^6.2.0":
+  "integrity" "sha512-MNwXbybjapRFZJtO+fNu5YuTYQGzzYAUIF4IsY2+ZBXoCRpzuDq8gXV7ChKDJaaTeX39IoDUng3qGXbvtVcivA=="
+  "resolved" "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.2.0.tgz"
+  "version" "6.2.0"
   dependencies:
+    "@react-navigation/elements" "^1.3.1"
     "color" "^3.1.3"
-    "react-native-iphone-x-helper" "^1.3.0"
+    "warn-once" "^0.1.0"
 
-"@react-navigation/core@^5.16.1":
-  "integrity" "sha512-3AToC7vPNeSNcHFLd1h71L6u34hfXoRAS1CxF9Fc4uC8uOrVqcNvphpeFbE0O9Bw6Zpl0BnMFl7E5gaL3KGzNA=="
-  "resolved" "https://registry.npmjs.org/@react-navigation/core/-/core-5.16.1.tgz"
-  "version" "5.16.1"
+"@react-navigation/core@^6.1.1":
+  "integrity" "sha512-njysuiqztgvR1Z9Noxk2OGJfYtFGFDRyji5Vmm1jHzlql0m+q0wh1dUiyaIEtTyrhFXr/YNgdrKuiPaU9Jp8OA=="
+  "resolved" "https://registry.npmjs.org/@react-navigation/core/-/core-6.1.1.tgz"
+  "version" "6.1.1"
   dependencies:
-    "@react-navigation/routers" "^5.7.4"
+    "@react-navigation/routers" "^6.1.0"
     "escape-string-regexp" "^4.0.0"
-    "nanoid" "^3.1.15"
-    "query-string" "^6.13.6"
+    "nanoid" "^3.1.23"
+    "query-string" "^7.0.0"
     "react-is" "^16.13.0"
 
-"@react-navigation/native@^5.0.5", "@react-navigation/native@^5.9.8":
-  "integrity" "sha512-DNbcDHXQPSFDLn51kkVVJjT3V7jJy2GztNYZe/2bEg29mi5QEcHHcpifjMCtyFKntAOWzKlG88UicIQ17UEghg=="
-  "resolved" "https://registry.npmjs.org/@react-navigation/native/-/native-5.9.8.tgz"
-  "version" "5.9.8"
+"@react-navigation/elements@^1.3.1":
+  "integrity" "sha512-jIDRJaG8YPIinl4hZXJu/W3TnhDe8hLYmGSEdL1mxZ1aoNMiApCBYkgTy11oq0EfK/koZd3DPSkJNbzBAQmPJw=="
+  "resolved" "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.1.tgz"
+  "version" "1.3.1"
+
+"@react-navigation/native-stack@^6.5.0":
+  "integrity" "sha512-X2sV+AKkqEl7k0ltjN4lMBfx+FsynrnUWkCTGiROyMRo4yWElK1jY3XSTsj5Cpso2/MUHdf9v/AOw0EgU58FsA=="
+  "resolved" "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.5.0.tgz"
+  "version" "6.5.0"
+  dependencies:
+    "@react-navigation/elements" "^1.3.1"
+    "warn-once" "^0.1.0"
+
+"@react-navigation/native@^6.0.0", "@react-navigation/native@^6.0.8":
+  "integrity" "sha512-6022M3+Btok3xJC/49B88er3SRrlDAZ4FdmGndhEVvBcGSHWmscU2qKCwFd0RY6A0AGCVmdIlXudrfdcdRAkpQ=="
+  "resolved" "https://registry.npmjs.org/@react-navigation/native/-/native-6.0.8.tgz"
+  "version" "6.0.8"
   dependencies:
-    "@react-navigation/core" "^5.16.1"
+    "@react-navigation/core" "^6.1.1"
     "escape-string-regexp" "^4.0.0"
-    "nanoid" "^3.1.15"
+    "fast-deep-equal" "^3.1.3"
+    "nanoid" "^3.1.23"
 
-"@react-navigation/routers@^5.7.4":
-  "integrity" "sha512-0N202XAqsU/FlE53Nmh6GHyMtGm7g6TeC93mrFAFJOqGRKznT0/ail+cYlU6tNcPA9AHzZu1Modw1eoDINSliQ=="
-  "resolved" "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.7.4.tgz"
-  "version" "5.7.4"
+"@react-navigation/routers@^6.1.0":
+  "integrity" "sha512-8xJL+djIzpFdRW/sGlKojQ06fWgFk1c5jER9501HYJ12LF5DIJFr/tqBI2TJ6bk+y+QFu0nbNyeRC80OjRlmkA=="
+  "resolved" "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.0.tgz"
+  "version" "6.1.0"
   dependencies:
-    "nanoid" "^3.1.15"
+    "nanoid" "^3.1.23"
 
-"@react-navigation/stack@^5.14.5":
-  "integrity" "sha512-DuvrT9P+Tz8ezZLQYxORZqOGqO+vEufaxlW1hSLw1knLD4jNxkz8TJDXtfKwaz//9gb43UhTNccNM02vm7iPqQ=="
-  "resolved" "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.14.9.tgz"
-  "version" "5.14.9"
+"@react-navigation/stack@^6.1.1":
+  "integrity" "sha512-mr7CrP3rvYapTZj/xUInJYDte2QEQPvK8qBI6kbJ6goeLqRMkcO7haK4Q5FeV1HVYCUnssAn7CA5j+OOm59syg=="
+  "resolved" "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.1.1.tgz"
+  "version" "6.1.1"
   dependencies:
+    "@react-navigation/elements" "^1.3.1"
     "color" "^3.1.3"
-    "react-native-iphone-x-helper" "^1.3.0"
+    "warn-once" "^0.1.0"
 
 "@segment/loosely-validate-event@^2.0.0":
   "integrity" "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw=="
@@ -4861,13 +4877,6 @@
   "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
   "version" "2.2.0"
 
-"bindings@^1.5.0":
-  "integrity" "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="
-  "resolved" "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz"
-  "version" "1.5.0"
-  dependencies:
-    "file-uri-to-path" "1.0.0"
-
 "bl@^4.0.3", "bl@^4.1.0":
   "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="
   "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz"
@@ -7800,7 +7809,7 @@
   "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz"
   "version" "1.1.0"
 
-"fast-deep-equal@^3.1.1":
+"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3":
   "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
   "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
   "version" "3.1.3"
@@ -8323,19 +8332,6 @@
   "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
   "version" "1.0.0"
 
-"fsevents@^1.2.7":
-  "integrity" "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw=="
-  "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz"
-  "version" "1.2.13"
-  dependencies:
-    "bindings" "^1.5.0"
-    "nan" "^2.12.1"
-
-"fsevents@^2.1.2", "fsevents@~2.3.2":
-  "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="
-  "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
-  "version" "2.3.2"
-
 "function-bind@^1.1.1":
   "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
   "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
@@ -11527,7 +11523,7 @@
     "object-assign" "^4.0.1"
     "thenify-all" "^1.0.0"
 
-"nan@^2.12.1", "nan@^2.14.2":
+"nan@^2.14.2":
   "integrity" "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ=="
   "resolved" "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz"
   "version" "2.15.0"
@@ -11544,7 +11540,7 @@
   "resolved" "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz"
   "version" "0.2.1"
 
-"nanoid@^3.1.15", "nanoid@^3.1.23":
+"nanoid@^3.1.23":
   "integrity" "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q=="
   "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz"
   "version" "3.1.25"
@@ -13655,10 +13651,10 @@
     "object-assign" "^4.1.0"
     "strict-uri-encode" "^1.0.0"
 
-"query-string@^6.13.6":
-  "integrity" "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw=="
-  "resolved" "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz"
-  "version" "6.14.1"
+"query-string@^7.0.0":
+  "integrity" "sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w=="
+  "resolved" "https://registry.npmjs.org/query-string/-/query-string-7.1.1.tgz"
+  "version" "7.1.1"
   dependencies:
     "decode-uri-component" "^0.2.0"
     "filter-obj" "^1.1.0"
@@ -13930,7 +13926,7 @@
   dependencies:
     "fast-base64-decode" "^1.0.0"
 
-"react-native-iphone-x-helper@^1.3.0", "react-native-iphone-x-helper@^1.3.1":
+"react-native-iphone-x-helper@^1.3.1":
   "integrity" "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg=="
   "resolved" "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz"
   "version" "1.3.1"
@@ -13998,12 +13994,12 @@
     "mockdate" "^3.0.2"
     "string-hash-64" "^1.0.3"
 
-"react-native-safe-area-context@>= 0.6.0", "react-native-safe-area-context@3.3.2":
+"react-native-safe-area-context@>= 3.0.0", "react-native-safe-area-context@3.3.2":
   "integrity" "sha512-yOwiiPJ1rk+/nfK13eafbpW6sKW0jOnsRem2C1LPJjM3tfTof6hlvV5eWHATye3XOpu2cJ7N+HdkUvUDGwFD2Q=="
   "resolved" "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.3.2.tgz"
   "version" "3.3.2"
 
-"react-native-screens@>= 2.0.0-alpha.0 || >= 2.0.0-beta.0 || >= 2.0.0", "react-native-screens@~3.8.0":
+"react-native-screens@>= 3.0.0", "react-native-screens@~3.8.0":
   "integrity" "sha512-lHrnB/elAoMJKv8O12U6BLgeup4lB6ZKJHEOVuG/D72nv/OE9wUusbou6YCB5tp3YbaSpHflPnkFmHA/vCejpw=="
   "resolved" "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.8.0.tgz"
   "version" "3.8.0"