50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
import { useFonts } from 'expo-font';
|
|
import { Slot, SplashScreen, Stack } from 'expo-router';
|
|
import { Provider } from 'react-redux';
|
|
import { useEffect } from 'react';
|
|
import 'react-native-reanimated';
|
|
import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native';
|
|
import Toast from 'react-native-toast-message';
|
|
import { AutocompleteDropdownContextProvider } from 'react-native-autocomplete-dropdown';
|
|
|
|
import { AppProvider } from '@/context/AppProvider';
|
|
import { useColorScheme } from '@/hooks/useColorScheme';
|
|
import { store } from '@/store/store';
|
|
|
|
// Prevent the splash screen from auto-hiding before asset loading is complete.
|
|
SplashScreen.preventAutoHideAsync();
|
|
|
|
export default function RootLayout() {
|
|
const colorScheme = useColorScheme();
|
|
|
|
const [ loaded ] = useFonts( {
|
|
SpaceMono: require( '../assets/fonts/SpaceMono-Regular.ttf' ),
|
|
} );
|
|
|
|
useEffect( () => {
|
|
if (loaded) {
|
|
SplashScreen.hideAsync();
|
|
}
|
|
}, [ loaded ] );
|
|
|
|
if (!loaded) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<Provider store={store}>
|
|
<AppProvider>
|
|
<AutocompleteDropdownContextProvider>
|
|
<ThemeProvider value={colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
|
|
<Stack>
|
|
<Stack.Screen name="(tabs)" options={{ headerShown: false }}/>
|
|
<Stack.Screen name="(onboarding)/start" options={{ headerShown: false }}/>
|
|
<Stack.Screen name="index" options={{ headerShown: false }}/>
|
|
</Stack>
|
|
<Toast/>
|
|
</ThemeProvider>
|
|
</AutocompleteDropdownContextProvider>
|
|
</AppProvider>
|
|
</Provider>
|
|
);
|
|
}
|