Browse Source

Add react-navigation 4 example

Janic Duplessis 4 years ago
parent
commit
1eae2f5599

+ 10
- 0
babel.config.js View File

@@ -1,3 +1,13 @@
1 1
 module.exports = {
2 2
   presets: ['module:metro-react-native-babel-preset'],
3
+  plugins: [
4
+    [
5
+      'module-resolver',
6
+      {
7
+        alias: {
8
+          'react-native-safe-area-context': './src',
9
+        },
10
+      },
11
+    ],
12
+  ],
3 13
 };

+ 5
- 0
example/android/app/build.gradle View File

@@ -206,6 +206,11 @@ dependencies {
206 206
       implementation jscFlavor
207 207
     }
208 208
 
209
+    implementation project(":react-native-community-async-storage")
210
+    implementation project(":react-native-gesture-handler")
211
+    implementation project(":react-native-reanimated")
212
+    implementation project(":react-native-screens")
213
+
209 214
     implementation project(":react-native-safe-area-context")
210 215
 }
211 216
 

+ 13
- 0
example/android/app/src/main/java/com/safeareaviewexample/MainActivity.java View File

@@ -5,6 +5,9 @@ import android.view.View;
5 5
 import android.view.WindowManager;
6 6
 
7 7
 import com.facebook.react.ReactActivity;
8
+import com.facebook.react.ReactActivityDelegate;
9
+import com.facebook.react.ReactRootView;
10
+import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
8 11
 
9 12
 public class MainActivity extends ReactActivity {
10 13
 
@@ -20,6 +23,16 @@ public class MainActivity extends ReactActivity {
20 23
         return "SafeAreaViewExample";
21 24
     }
22 25
 
26
+    @Override
27
+    protected ReactActivityDelegate createReactActivityDelegate() {
28
+      return new ReactActivityDelegate(this, getMainComponentName()) {
29
+        @Override
30
+        protected ReactRootView createRootView() {
31
+          return new RNGestureHandlerEnabledRootView(MainActivity.this);
32
+        }
33
+      };
34
+    }
35
+
23 36
     @Override
24 37
     protected void onCreate(Bundle savedInstanceState) {
25 38
         super.onCreate(savedInstanceState);

+ 8
- 0
example/android/app/src/main/java/com/safeareaviewexample/MainApplication.java View File

@@ -10,6 +10,10 @@ import com.facebook.react.ReactPackage;
10 10
 import com.facebook.react.shell.MainReactPackage;
11 11
 import com.facebook.soloader.SoLoader;
12 12
 import com.th3rdwave.safeareacontext.SafeAreaContextPackage;
13
+import com.swmansion.rnscreens.RNScreensPackage;
14
+import com.swmansion.gesturehandler.react.RNGestureHandlerPackage;
15
+import com.swmansion.reanimated.ReanimatedPackage;
16
+import com.reactnativecommunity.asyncstorage.AsyncStoragePackage;
13 17
 
14 18
 import java.lang.reflect.InvocationTargetException;
15 19
 import java.util.Arrays;
@@ -27,6 +31,10 @@ public class MainApplication extends Application implements ReactApplication {
27 31
     protected List<ReactPackage> getPackages() {
28 32
       return Arrays.asList(
29 33
           new MainReactPackage(),
34
+          new RNScreensPackage(),
35
+          new RNGestureHandlerPackage(),
36
+          new ReanimatedPackage(),
37
+          new AsyncStoragePackage(),
30 38
           new SafeAreaContextPackage());
31 39
     }
32 40
 

+ 9
- 0
example/android/settings.gradle View File

@@ -3,3 +3,12 @@ include ':app'
3 3
 
4 4
 include ':react-native-safe-area-context'
5 5
 project(':react-native-safe-area-context').projectDir = new File(rootProject.projectDir, '../../android')
6
+
7
+include ':react-native-community-async-storage'
8
+project(':react-native-community-async-storage').projectDir = new File(rootProject.projectDir, '../../node_modules/@react-native-community/async-storage/android')
9
+include ':react-native-gesture-handler'
10
+project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../../node_modules/react-native-gesture-handler/android')
11
+include ':react-native-reanimated'
12
+project(':react-native-reanimated').projectDir = new File(rootProject.projectDir, '../../node_modules/react-native-reanimated/android')
13
+include ':react-native-screens'
14
+project(':react-native-screens').projectDir = new File(rootProject.projectDir, '../../node_modules/react-native-screens/android')

+ 0
- 12
example/babel.config.js View File

@@ -1,12 +0,0 @@
1
-module.exports = {
2
-  plugins: [
3
-    [
4
-      'module-resolver',
5
-      {
6
-        alias: {
7
-          'react-native-safe-area-context': './src',
8
-        },
9
-      },
10
-    ],
11
-  ],
12
-};

+ 1
- 1
example/index.expo.js View File

@@ -1,5 +1,5 @@
1 1
 import registerRootComponent from 'expo/build/launch/registerRootComponent';
2 2
 
3
-import App from './App';
3
+import App from './src/App';
4 4
 
5 5
 registerRootComponent(App);

+ 1
- 1
example/index.js View File

@@ -1,5 +1,5 @@
1 1
 import { AppRegistry } from 'react-native';
2
-import App from './App';
2
+import App from './src/App';
3 3
 import { name as appName } from './app.json';
4 4
 
5 5
 AppRegistry.registerComponent(appName, () => App);

+ 5
- 0
example/ios/Podfile View File

@@ -11,5 +11,10 @@ target "SafeAreaViewExample" do
11 11
   use_react_native!(path: $react_native_path)
12 12
 
13 13
   pod "react-native-safe-area-context", :path => $root_path
14
+  pod "RNCAsyncStorage", :path => "#{$node_modules}/@react-native-community/async-storage"
15
+  pod "RNCMaskedView", :path => "#{$node_modules}/@react-native-community/masked-view"
16
+  pod "RNGestureHandler", :path => "#{$node_modules}/react-native-gesture-handler"
17
+  pod "RNReanimated", :path => "#{$node_modules}/react-native-reanimated"
18
+  pod "RNScreens", :path => "#{$node_modules}/react-native-screens"
14 19
 end
15 20
 

+ 33
- 3
example/ios/Podfile.lock View File

@@ -185,7 +185,7 @@ PODS:
185 185
     - React-cxxreact (= 0.63.0-rc.0)
186 186
     - React-jsi (= 0.63.0-rc.0)
187 187
   - React-jsinspector (0.63.0-rc.0)
188
-  - react-native-safe-area-context (1.0.0-beta.2):
188
+  - react-native-safe-area-context (1.0.0):
189 189
     - React
190 190
   - React-RCTActionSheet (0.63.0-rc.0):
191 191
     - React-Core/RCTActionSheetHeaders (= 0.63.0-rc.0)
@@ -247,6 +247,16 @@ PODS:
247 247
     - React-Core (= 0.63.0-rc.0)
248 248
     - React-cxxreact (= 0.63.0-rc.0)
249 249
     - React-jsi (= 0.63.0-rc.0)
250
+  - RNCAsyncStorage (1.10.1):
251
+    - React
252
+  - RNCMaskedView (0.1.10):
253
+    - React
254
+  - RNGestureHandler (1.6.1):
255
+    - React
256
+  - RNReanimated (1.8.0):
257
+    - React
258
+  - RNScreens (2.7.0):
259
+    - React
250 260
   - Yoga (1.14.0)
251 261
 
252 262
 DEPENDENCIES:
@@ -278,6 +288,11 @@ DEPENDENCIES:
278 288
   - React-RCTText (from `../../node_modules/react-native/Libraries/Text`)
279 289
   - React-RCTVibration (from `../../node_modules/react-native/Libraries/Vibration`)
280 290
   - ReactCommon/turbomodule/core (from `../../node_modules/react-native/ReactCommon`)
291
+  - "RNCAsyncStorage (from `../../node_modules/@react-native-community/async-storage`)"
292
+  - "RNCMaskedView (from `../../node_modules/@react-native-community/masked-view`)"
293
+  - RNGestureHandler (from `../../node_modules/react-native-gesture-handler`)
294
+  - RNReanimated (from `../../node_modules/react-native-reanimated`)
295
+  - RNScreens (from `../../node_modules/react-native-screens`)
281 296
   - Yoga (from `../../node_modules/react-native/ReactCommon/yoga`)
282 297
 
283 298
 SPEC REPOS:
@@ -337,6 +352,16 @@ EXTERNAL SOURCES:
337 352
     :path: "../../node_modules/react-native/Libraries/Vibration"
338 353
   ReactCommon:
339 354
     :path: "../../node_modules/react-native/ReactCommon"
355
+  RNCAsyncStorage:
356
+    :path: "../../node_modules/@react-native-community/async-storage"
357
+  RNCMaskedView:
358
+    :path: "../../node_modules/@react-native-community/masked-view"
359
+  RNGestureHandler:
360
+    :path: "../../node_modules/react-native-gesture-handler"
361
+  RNReanimated:
362
+    :path: "../../node_modules/react-native-reanimated"
363
+  RNScreens:
364
+    :path: "../../node_modules/react-native-screens"
340 365
   Yoga:
341 366
     :path: "../../node_modules/react-native/ReactCommon/yoga"
342 367
 
@@ -357,7 +382,7 @@ SPEC CHECKSUMS:
357 382
   React-jsi: 87b6b899f6c81c29487d0416969c261b73f46a2d
358 383
   React-jsiexecutor: 0ca3a8a0a65f9eb9aec3273c4cf44f6d31277937
359 384
   React-jsinspector: 09b8cb3fefdf81b2889a13cc1a645e905e514ddb
360
-  react-native-safe-area-context: d480295e19c27f5bc211bf5e31d4ef4fdac2f0e2
385
+  react-native-safe-area-context: a346c75f2288147527365ce27b59ca6d38c27805
361 386
   React-RCTActionSheet: b6d2445d7317359997ed0c650421d0a0b9dd58cb
362 387
   React-RCTAnimation: 2f48bd93a4f5317cd5ab7189c6b5e469b60fb7bf
363 388
   React-RCTBlob: b8da9c90135ee183f3ad35b521313390370b5ed2
@@ -368,8 +393,13 @@ SPEC CHECKSUMS:
368 393
   React-RCTText: 32e3c891fa74b1b2544517e59ee5fbc96f672983
369 394
   React-RCTVibration: ab7fb7b10ca373d7e931b15e18b5f6d1663367ca
370 395
   ReactCommon: 14ae20c83bd846c1790e45ad95e0f0717dcd034f
396
+  RNCAsyncStorage: 39831e0dc5f547a1fb2669eb9e091d460a9be2be
397
+  RNCMaskedView: 5a8ec07677aa885546a0d98da336457e2bea557f
398
+  RNGestureHandler: 8f09cd560f8d533eb36da5a6c5a843af9f056b38
399
+  RNReanimated: 955cf4068714003d2f1a6e2bae3fb1118f359aff
400
+  RNScreens: cf198f915f8a2bf163de94ca9f5bfc8d326c3706
371 401
   Yoga: 5ffb724bde6d20a1828a1dc9a368085f404a1203
372 402
 
373
-PODFILE CHECKSUM: c6a3f4efa49838adde4e4d6ee3c894309fdef069
403
+PODFILE CHECKSUM: 90edcd974101399fc4c4cb2f6ffd1ccb481b16ff
374 404
 
375 405
 COCOAPODS: 1.9.1

+ 9
- 1
example/package.json View File

@@ -1,10 +1,18 @@
1 1
 {
2 2
   "name": "example",
3 3
   "dependencies": {
4
+    "@react-native-community/async-storage": "^1.10.1",
5
+    "@react-native-community/masked-view": "^0.1.10",
4 6
     "expo": "^37.0.8",
5 7
     "react": "^16.13.1",
6 8
     "react-dom": "^16.13.1",
7 9
     "react-native": "^0.63.0-rc.0",
8
-    "react-native-web": "^0.12.2"
10
+    "react-native-web": "^0.12.2",
11
+    "react-navigation": "^4.3.9",
12
+    "react-navigation-stack": "^2.5.0",
13
+    "react-navigation-tabs": "^2.8.13",
14
+    "react-native-gesture-handler": "^1.6.1",
15
+    "react-native-screens": "^2.7.0",
16
+    "react-native-reanimated": "^1.8.0"
9 17
   }
10 18
 }

+ 49
- 0
example/src/App.tsx View File

@@ -0,0 +1,49 @@
1
+import 'react-native-gesture-handler';
2
+import * as React from 'react';
3
+import { DevSettings } from 'react-native';
4
+import AsyncStorage from '@react-native-community/async-storage';
5
+import ReactNavigation4Example from './ReactNavigation4Example';
6
+import SimpleExample from './SimpleExample';
7
+
8
+const STORAGE_KEY = 'rnsac-current-example';
9
+
10
+export default function App() {
11
+  const [currentExample, setCurrentExample] = React.useState<string | null>(
12
+    null,
13
+  );
14
+
15
+  React.useEffect(() => {
16
+    async function loadCurrentExample() {
17
+      const example = await AsyncStorage.getItem(STORAGE_KEY);
18
+      setCurrentExample(example ?? 'simple');
19
+    }
20
+    loadCurrentExample();
21
+  }, []);
22
+
23
+  React.useEffect(() => {
24
+    async function saveCurrentExample() {
25
+      if (currentExample != null) {
26
+        await AsyncStorage.setItem(STORAGE_KEY, currentExample);
27
+      }
28
+    }
29
+    saveCurrentExample();
30
+  }, [currentExample]);
31
+
32
+  React.useEffect(() => {
33
+    DevSettings.addMenuItem('Show Simple Example', () => {
34
+      setCurrentExample('simple');
35
+    });
36
+    DevSettings.addMenuItem('Show React Navigation 4 Example', () => {
37
+      setCurrentExample('react-navigation-4');
38
+    });
39
+  }, []);
40
+
41
+  switch (currentExample) {
42
+    case 'simple':
43
+      return <SimpleExample />;
44
+    case 'react-navigation-4':
45
+      return <ReactNavigation4Example />;
46
+    default:
47
+      return null;
48
+  }
49
+}

+ 76
- 0
example/src/ReactNavigation4Example.tsx View File

@@ -0,0 +1,76 @@
1
+import * as React from 'react';
2
+import { View, Text, Button } from 'react-native';
3
+import { createAppContainer } from 'react-navigation';
4
+import { createBottomTabNavigator } from 'react-navigation-tabs';
5
+import {
6
+  createStackNavigator,
7
+  NavigationStackProp,
8
+} from 'react-navigation-stack';
9
+import { SafeAreaProvider } from 'react-native-safe-area-context';
10
+
11
+type NavigationScreenProps = {
12
+  navigation: NavigationStackProp<{}, {}>;
13
+};
14
+
15
+function HomeScreen({ navigation }: NavigationScreenProps) {
16
+  return (
17
+    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
18
+      <Text>Home Screen</Text>
19
+      <Button
20
+        title="Go to Details"
21
+        onPress={() => navigation.navigate('Details')}
22
+      />
23
+    </View>
24
+  );
25
+}
26
+
27
+function SettingsScreen({ navigation }: NavigationScreenProps) {
28
+  return (
29
+    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
30
+      <Text>Settings Screen</Text>
31
+      <Button
32
+        title="Go to Details"
33
+        onPress={() => navigation.navigate('Details')}
34
+      />
35
+    </View>
36
+  );
37
+}
38
+
39
+const TabNavigator = createBottomTabNavigator({
40
+  Home: HomeScreen,
41
+  Settings: SettingsScreen,
42
+});
43
+
44
+function DetailsScreen({ navigation }: NavigationScreenProps) {
45
+  return (
46
+    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
47
+      <Text>Details Screen</Text>
48
+      <Button
49
+        title="Go to Details... again"
50
+        onPress={() => navigation.push('Details')}
51
+      />
52
+      <Button title="Go to Home" onPress={() => navigation.navigate('Home')} />
53
+      <Button title="Go back" onPress={() => navigation.goBack()} />
54
+    </View>
55
+  );
56
+}
57
+
58
+const AppNavigator = createStackNavigator(
59
+  {
60
+    Tabs: TabNavigator,
61
+    Details: DetailsScreen,
62
+  },
63
+  {
64
+    initialRouteName: 'Tabs',
65
+  },
66
+);
67
+
68
+const AppContainer = createAppContainer(AppNavigator);
69
+
70
+export default function ReactNavigation4Example() {
71
+  return (
72
+    <SafeAreaProvider>
73
+      <AppContainer />
74
+    </SafeAreaProvider>
75
+  );
76
+}

example/App.tsx → example/src/SimpleExample.tsx View File

@@ -42,7 +42,7 @@ const Card = ({
42 42
 
43 43
 const BORDER_WIDTH = 8;
44 44
 
45
-const Screen = () => {
45
+function SimpleExampleScreen() {
46 46
   const insets = useSafeAreaInsets();
47 47
   const frame = useSafeAreaFrame();
48 48
 
@@ -79,13 +79,13 @@ const Screen = () => {
79 79
       </View>
80 80
     </>
81 81
   );
82
-};
82
+}
83 83
 
84
-export default function App() {
84
+export default function SimpleExample() {
85 85
   return (
86 86
     <View style={{ marginTop: 0, flex: 1 }}>
87 87
       <SafeAreaProvider>
88
-        <Screen />
88
+        <SimpleExampleScreen />
89 89
       </SafeAreaProvider>
90 90
     </View>
91 91
   );

+ 8
- 0
package.json View File

@@ -46,8 +46,10 @@
46 46
   },
47 47
   "dependencies": {},
48 48
   "devDependencies": {
49
+    "@react-native-community/async-storage": "^1.10.1",
49 50
     "@react-native-community/bob": "^0.10.1",
50 51
     "@react-native-community/eslint-config": "^1.1.0",
52
+    "@react-native-community/masked-view": "^0.1.10",
51 53
     "@types/jest": "^25.2.1",
52 54
     "@types/react": "^16.9.34",
53 55
     "@types/react-native": "^0.62.5",
@@ -68,6 +70,12 @@
68 70
     "react-dom": "^16.13.1",
69 71
     "react-native": "^0.63.0-rc.0",
70 72
     "react-native-web": "^0.12.2",
73
+    "react-navigation": "^4.3.9",
74
+    "react-navigation-stack": "^2.5.0",
75
+    "react-navigation-tabs": "^2.8.13",
76
+    "react-native-gesture-handler": "^1.6.1",
77
+    "react-native-screens": "^2.7.0",
78
+    "react-native-reanimated": "^1.8.0",
71 79
     "react-test-renderer": "^16.13.1",
72 80
     "typescript": "^3.8.3"
73 81
   },

+ 157
- 2
yarn.lock View File

@@ -1032,6 +1032,13 @@
1032 1032
     exec-sh "^0.3.2"
1033 1033
     minimist "^1.2.0"
1034 1034
 
1035
+"@egjs/hammerjs@^2.0.17":
1036
+  version "2.0.17"
1037
+  resolved "https://registry.yarnpkg.com/@egjs/hammerjs/-/hammerjs-2.0.17.tgz#5dc02af75a6a06e4c2db0202cae38c9263895124"
1038
+  integrity sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==
1039
+  dependencies:
1040
+    "@types/hammerjs" "^2.0.36"
1041
+
1035 1042
 "@expo/babel-preset-cli@0.2.11":
1036 1043
   version "0.2.11"
1037 1044
   resolved "https://registry.yarnpkg.com/@expo/babel-preset-cli/-/babel-preset-cli-0.2.11.tgz#d5cf88268cb3b27a4790b3a077debe5e92c831c2"
@@ -2139,6 +2146,13 @@
2139 2146
     node-gyp "^6.1.0"
2140 2147
     read-package-json-fast "^1.1.3"
2141 2148
 
2149
+"@react-native-community/async-storage@^1.10.1":
2150
+  version "1.10.1"
2151
+  resolved "https://registry.yarnpkg.com/@react-native-community/async-storage/-/async-storage-1.10.1.tgz#23902625cf146a25b2929d72558caa437c72c4a8"
2152
+  integrity sha512-9wjW4lNAKkNgeQtj4dG2graKoJoiAELvh6QDXZ55ld5J58kOfJIe6ELaGBUtIAoXPpmjsddjpXrfV6af3mN2JA==
2153
+  dependencies:
2154
+    deep-assign "^3.0.0"
2155
+
2142 2156
 "@react-native-community/bob@^0.10.1":
2143 2157
   version "0.10.1"
2144 2158
   resolved "https://registry.yarnpkg.com/@react-native-community/bob/-/bob-0.10.1.tgz#e90269fe1ce9c71fcca6e906966db301c17b712d"
@@ -2302,6 +2316,29 @@
2302 2316
   resolved "https://registry.yarnpkg.com/@react-native-community/eslint-plugin/-/eslint-plugin-1.1.0.tgz#e42b1bef12d2415411519fd528e64b593b1363dc"
2303 2317
   integrity sha512-W/J0fNYVO01tioHjvYWQ9m6RgndVtbElzYozBq1ZPrHO/iCzlqoySHl4gO/fpCl9QEFjvJfjPgtPMTMlsoq5DQ==
2304 2318
 
2319
+"@react-native-community/masked-view@^0.1.10":
2320
+  version "0.1.10"
2321
+  resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.10.tgz#5dda643e19e587793bc2034dd9bf7398ad43d401"
2322
+  integrity sha512-rk4sWFsmtOw8oyx8SD3KSvawwaK7gRBSEIy2TAwURyGt+3TizssXP1r8nx3zY+R7v2vYYHXZ+k2/GULAT/bcaQ==
2323
+
2324
+"@react-navigation/core@^3.7.6":
2325
+  version "3.7.6"
2326
+  resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-3.7.6.tgz#e0244fcdc22937825b252197f70308bbe5709c58"
2327
+  integrity sha512-loYFIn0Boy7C+vYxwcqsBVRFRO1EizZJErdutE6/3Jw6dbzz3Bnzupbw5hckZNB16GckacMwGoepZNIK51IIcg==
2328
+  dependencies:
2329
+    hoist-non-react-statics "^3.3.2"
2330
+    path-to-regexp "^1.8.0"
2331
+    query-string "^6.11.1"
2332
+    react-is "^16.13.0"
2333
+
2334
+"@react-navigation/native@^3.7.13":
2335
+  version "3.7.13"
2336
+  resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-3.7.13.tgz#5fdf879d5af40fb5bf751b6d932dd30656c9991e"
2337
+  integrity sha512-M6v1bLz0WbQmlPKF3WKBEZDGQ3CaqmzQULGs7XWtQe+f03VEbeX+kCkr/J6hw+rsgAy9Nwr4mGCPPQhF2pa7Yw==
2338
+  dependencies:
2339
+    hoist-non-react-statics "^3.3.2"
2340
+    react-native-safe-area-view "^0.14.9"
2341
+
2305 2342
 "@segment/loosely-validate-event@^2.0.0":
2306 2343
   version "2.0.0"
2307 2344
   resolved "https://registry.yarnpkg.com/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz#87dfc979e5b4e7b82c5f1d8b722dfd5d77644681"
@@ -2439,6 +2476,11 @@
2439 2476
   dependencies:
2440 2477
     "@types/node" "*"
2441 2478
 
2479
+"@types/hammerjs@^2.0.36":
2480
+  version "2.0.36"
2481
+  resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.36.tgz#17ce0a235e9ffbcdcdf5095646b374c2bf615a4c"
2482
+  integrity sha512-7TUK/k2/QGpEAv/BCwSHlYu3NXZhQ9ZwBYpzr9tjlPIL2C5BeGhH3DmVavRx3ZNyELX5TLC91JTz/cen6AAtIQ==
2483
+
2442 2484
 "@types/hapi__joi@*":
2443 2485
   version "16.0.12"
2444 2486
   resolved "https://registry.yarnpkg.com/@types/hapi__joi/-/hapi__joi-16.0.12.tgz#fb9113f17cf5764d6b3586ae9817d1606cc7c90c"
@@ -4534,7 +4576,7 @@ color-support@^1.1.3:
4534 4576
   resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
4535 4577
   integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
4536 4578
 
4537
-color@^3.0.0:
4579
+color@^3.0.0, color@^3.1.2:
4538 4580
   version "3.1.2"
4539 4581
   resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
4540 4582
   integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
@@ -7569,6 +7611,18 @@ hoek@6.x.x:
7569 7611
   resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.1.3.tgz#73b7d33952e01fe27a38b0457294b79dd8da242c"
7570 7612
   integrity sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==
7571 7613
 
7614
+hoist-non-react-statics@^2.3.1:
7615
+  version "2.5.5"
7616
+  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
7617
+  integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
7618
+
7619
+hoist-non-react-statics@^3.3.2:
7620
+  version "3.3.2"
7621
+  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
7622
+  integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
7623
+  dependencies:
7624
+    react-is "^16.7.0"
7625
+
7572 7626
 hosted-git-info@^2.1.4, hosted-git-info@^2.6.0:
7573 7627
   version "2.8.8"
7574 7628
   resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
@@ -8448,6 +8502,11 @@ is-wsl@^2.1.1:
8448 8502
   resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d"
8449 8503
   integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==
8450 8504
 
8505
+isarray@0.0.1:
8506
+  version "0.0.1"
8507
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
8508
+  integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
8509
+
8451 8510
 isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
8452 8511
   version "1.0.0"
8453 8512
   resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@@ -11394,6 +11453,13 @@ path-to-regexp@0.1.7:
11394 11453
   resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
11395 11454
   integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
11396 11455
 
11456
+path-to-regexp@^1.8.0:
11457
+  version "1.8.0"
11458
+  resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
11459
+  integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
11460
+  dependencies:
11461
+    isarray "0.0.1"
11462
+
11397 11463
 path-type@^3.0.0:
11398 11464
   version "3.0.0"
11399 11465
   resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
@@ -12168,6 +12234,15 @@ query-string@^5.0.1:
12168 12234
     object-assign "^4.1.0"
12169 12235
     strict-uri-encode "^1.0.0"
12170 12236
 
12237
+query-string@^6.11.1:
12238
+  version "6.12.1"
12239
+  resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.12.1.tgz#2ae4d272db4fba267141665374e49a1de09e8a7c"
12240
+  integrity sha512-OHj+zzfRMyj3rmo/6G8a5Ifvw3AleL/EbcHMD27YA31Q+cO5lfmQxECkImuNVjcskLcvBRVHNAB3w6udMs1eAA==
12241
+  dependencies:
12242
+    decode-uri-component "^0.2.0"
12243
+    split-on-first "^1.0.0"
12244
+    strict-uri-encode "^2.0.0"
12245
+
12171 12246
 querystring-es3@^0.2.0:
12172 12247
   version "0.2.1"
12173 12248
   resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
@@ -12298,11 +12373,55 @@ react-error-overlay@^6.0.1:
12298 12373
   resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108"
12299 12374
   integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==
12300 12375
 
12301
-react-is@^16.12.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
12376
+react-is@^16.12.0, react-is@^16.13.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
12302 12377
   version "16.13.1"
12303 12378
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
12304 12379
   integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
12305 12380
 
12381
+react-lifecycles-compat@^3.0.4:
12382
+  version "3.0.4"
12383
+  resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
12384
+  integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
12385
+
12386
+react-native-gesture-handler@^1.6.1:
12387
+  version "1.6.1"
12388
+  resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.6.1.tgz#678e2dce250ed66e93af409759be22cd6375dd17"
12389
+  integrity sha512-gQgIKhDiYf754yzhhliagLuLupvGb6ZyBdzYzr7aus3Fyi87TLOw63ers+r4kGw0h26oAWTAdHd34JnF4NeL6Q==
12390
+  dependencies:
12391
+    "@egjs/hammerjs" "^2.0.17"
12392
+    hoist-non-react-statics "^2.3.1"
12393
+    invariant "^2.2.4"
12394
+    prop-types "^15.7.2"
12395
+
12396
+react-native-iphone-x-helper@^1.2.1:
12397
+  version "1.2.1"
12398
+  resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz#645e2ffbbb49e80844bb4cbbe34a126fda1e6772"
12399
+  integrity sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ==
12400
+
12401
+react-native-reanimated@^1.8.0:
12402
+  version "1.8.0"
12403
+  resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-1.8.0.tgz#0b5719b20c1fed9aaf8afd9a12e21c9bd46ee428"
12404
+  integrity sha512-vGTt94lE5fsZmfMwERWFIsCr5LHsyllOESeNvlKryLgAg7h4cnJ5XSmVSy4L3qogdgFYCL6HEgY+s7tQmKXiiQ==
12405
+  dependencies:
12406
+    fbjs "^1.0.0"
12407
+
12408
+react-native-safe-area-view@^0.14.9:
12409
+  version "0.14.9"
12410
+  resolved "https://registry.yarnpkg.com/react-native-safe-area-view/-/react-native-safe-area-view-0.14.9.tgz#90ee8383037010d9a5055a97cf97e4c1da1f0c3d"
12411
+  integrity sha512-WII/ulhpVyL/qbYb7vydq7dJAfZRBcEhg4/UWt6F6nAKpLa3gAceMOxBxI914ppwSP/TdUsandFy6lkJQE0z4A==
12412
+  dependencies:
12413
+    hoist-non-react-statics "^2.3.1"
12414
+
12415
+react-native-screens@^2.7.0:
12416
+  version "2.7.0"
12417
+  resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-2.7.0.tgz#2d3cf3c39a665e9ca1c774264fccdb90e7944047"
12418
+  integrity sha512-n/23IBOkrTKCfuUd6tFeRkn3lB2QZ3cmvoubRscR0JU/Zl4/ZyKmwnFmUv1/Fr+2GH/H8UTX59kEKDYYg3dMgA==
12419
+
12420
+react-native-tab-view@^2.11.0:
12421
+  version "2.14.0"
12422
+  resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-2.14.0.tgz#dd801f82fdb8e92fce9688b78d13923f3a5a2b3f"
12423
+  integrity sha512-Z7XAM3NsMB96c17e9EAveunk7SUgilXWwVUTmWI1u/+p2SeOMUOB87z+//UXrcVlD1e9BPweR73q7dq7krTzTg==
12424
+
12306 12425
 react-native-view-shot@3.1.2:
12307 12426
   version "3.1.2"
12308 12427
   resolved "https://registry.yarnpkg.com/react-native-view-shot/-/react-native-view-shot-3.1.2.tgz#8c8e84c67a4bc8b603e697dbbd59dbc9b4f84825"
@@ -12357,6 +12476,32 @@ react-native@^0.63.0-rc.0:
12357 12476
     use-subscription "^1.0.0"
12358 12477
     whatwg-fetch "^3.0.0"
12359 12478
 
12479
+react-navigation-stack@^2.5.0:
12480
+  version "2.5.0"
12481
+  resolved "https://registry.yarnpkg.com/react-navigation-stack/-/react-navigation-stack-2.5.0.tgz#ed3d813220c86134473a04f7214e6673824e645d"
12482
+  integrity sha512-B+j7J8M17WbF5JhMxOnKayMO7BDajzzp/xFkOUH9TFu7solkDPGUt0XDM2joYdvsnTLye7oEDqF4X2YGnbPYJw==
12483
+  dependencies:
12484
+    color "^3.1.2"
12485
+    react-native-iphone-x-helper "^1.2.1"
12486
+
12487
+react-navigation-tabs@^2.8.13:
12488
+  version "2.8.13"
12489
+  resolved "https://registry.yarnpkg.com/react-navigation-tabs/-/react-navigation-tabs-2.8.13.tgz#a7ec2a6b298e522370f03172bf2778f422ad4d6f"
12490
+  integrity sha512-3CpGzHd/mWAv/vOvP/mYxLMKAOVOxu9uYj6i4DZB2KkGphbwrZTGckaxkGj1L9SyxNSBnB4nAz2a1I4Bdk8vTg==
12491
+  dependencies:
12492
+    hoist-non-react-statics "^3.3.2"
12493
+    react-lifecycles-compat "^3.0.4"
12494
+    react-native-safe-area-view "^0.14.9"
12495
+    react-native-tab-view "^2.11.0"
12496
+
12497
+react-navigation@^4.3.9:
12498
+  version "4.3.9"
12499
+  resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-4.3.9.tgz#3b6a7224ac2ef6388593412c33aed6eacca10cbb"
12500
+  integrity sha512-nqAHS7jL1hgFPZeYt1vU8zVuF2Ay3bVVdCYvJSFJ9UvQZOtqPr/Wen/Ya9fRc+AvTtf3+AJn97K8xIiz2HHusQ==
12501
+  dependencies:
12502
+    "@react-navigation/core" "^3.7.6"
12503
+    "@react-navigation/native" "^3.7.13"
12504
+
12360 12505
 react-refresh@^0.4.0:
12361 12506
   version "0.4.2"
12362 12507
   resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334"
@@ -13474,6 +13619,11 @@ spdy@^4.0.0:
13474 13619
     select-hose "^2.0.0"
13475 13620
     spdy-transport "^3.0.0"
13476 13621
 
13622
+split-on-first@^1.0.0:
13623
+  version "1.1.0"
13624
+  resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
13625
+  integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
13626
+
13477 13627
 split-string@^3.0.1, split-string@^3.0.2:
13478 13628
   version "3.1.0"
13479 13629
   resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
@@ -13637,6 +13787,11 @@ strict-uri-encode@^1.0.0:
13637 13787
   resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
13638 13788
   integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
13639 13789
 
13790
+strict-uri-encode@^2.0.0:
13791
+  version "2.0.0"
13792
+  resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
13793
+  integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
13794
+
13640 13795
 string-length@^3.1.0:
13641 13796
   version "3.1.0"
13642 13797
   resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837"