1import { LinkingOptions, NavigationContainer } from '@react-navigation/native';
2import { createStackNavigator } from '@react-navigation/stack';
3import * as Linking from 'expo-linking';
4import * as React from 'react';
5import { Text } from 'react-native';
6import { GestureHandlerRootView } from 'react-native-gesture-handler';
7
8import MainNavigators from './MainNavigators';
9import MainTabNavigator from './MainTabNavigator';
10import RedirectScreen from '../screens/RedirectScreen';
11import SearchScreen from '../screens/SearchScreen';
12
13const Switch = createStackNavigator();
14
15export const linking: LinkingOptions<object> = {
16  prefixes: [Linking.createURL('/')],
17  config: {
18    screens: {
19      main: {
20        initialRouteName: 'apis',
21        screens: {
22          apis: MainNavigators.apis.linking,
23          components: MainNavigators.components.linking,
24        },
25      },
26      search: {
27        screens: {
28          search: 'search',
29        },
30      },
31    },
32  },
33};
34
35export default function RootNavigation() {
36  return (
37    <GestureHandlerRootView style={{ flex: 1 }}>
38      <NavigationContainer linking={linking} fallback={<Text>Loading…</Text>}>
39        <Switch.Navigator screenOptions={{ presentation: 'modal', headerShown: false }}>
40          <Switch.Screen name="main" component={MainTabNavigator} />
41          <Switch.Screen name="redirect" component={RedirectScreen} />
42          <Switch.Screen
43            name="searchNavigator"
44            component={SearchScreen}
45            options={{ cardStyle: { backgroundColor: 'transparent' } }}
46          />
47        </Switch.Navigator>
48      </NavigationContainer>
49    </GestureHandlerRootView>
50  );
51}
52