55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { DefaultTheme, ThemeProvider } from '@react-navigation/native';
|
|
import { Stack } from 'expo-router';
|
|
import { StatusBar } from 'expo-status-bar';
|
|
import 'react-native-reanimated';
|
|
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
import { NotesProvider } from "@/src/notes/NotesContext"
|
|
import { useColorScheme } from '@/hooks/use-color-scheme';
|
|
import { useAuthContext } from '@/hooks/use-auth-context';
|
|
import AuthProvider from '@/providers/auth-provider';
|
|
|
|
|
|
// Separate RootNavigator so we can access the AuthContext
|
|
function RootNavigator() {
|
|
const { isLoggedIn, isLoading } = useAuthContext()
|
|
|
|
if (isLoading) {
|
|
return null
|
|
}
|
|
|
|
return (
|
|
<Stack>
|
|
<Stack.Protected guard={isLoggedIn}>
|
|
<Stack.Screen name="index" options={{ headerShown: false }} />
|
|
<Stack.Screen name="newNote" options={{ headerShown: true, title: 'New Note' }} />
|
|
<Stack.Screen name="detail" options={{ headerShown: true, title: 'Note' }} />
|
|
</Stack.Protected>
|
|
<Stack.Protected guard={!isLoggedIn}>
|
|
<Stack.Screen name="login" options={{ headerShown: false }} />
|
|
<Stack.Screen name="signup" options={{ headerShown: false }} />
|
|
</Stack.Protected>
|
|
<Stack.Screen name="+not-found" />
|
|
</Stack>
|
|
)
|
|
}
|
|
|
|
export default function RootLayout() {
|
|
const colorScheme = useColorScheme()
|
|
/*TODO
|
|
Fix ThemeProvider to work with dark theme
|
|
*/
|
|
|
|
return (
|
|
<SafeAreaProvider>
|
|
<ThemeProvider value={colorScheme === 'dark' ? DefaultTheme : DefaultTheme}>
|
|
<AuthProvider>
|
|
<NotesProvider>
|
|
<RootNavigator />
|
|
</NotesProvider>
|
|
</AuthProvider>
|
|
<StatusBar style="auto" />
|
|
</ThemeProvider>
|
|
</SafeAreaProvider>
|
|
);
|
|
}
|