54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import "@/global.css";
|
|
import { NativeAuthProvider } from "@code/auth/native";
|
|
import { useConvexAuth } from "convex/react";
|
|
import { Stack } from "expo-router";
|
|
import { HeroUINativeProvider, Spinner } from "heroui-native";
|
|
import { View } from "react-native";
|
|
import { GestureHandlerRootView } from "react-native-gesture-handler";
|
|
import { KeyboardProvider } from "react-native-keyboard-controller";
|
|
|
|
import { AppThemeProvider } from "@/contexts/app-theme-context";
|
|
|
|
function RootNavigator() {
|
|
const { isAuthenticated, isLoading } = useConvexAuth();
|
|
|
|
if (isLoading) {
|
|
return (
|
|
<View className="flex-1 items-center justify-center bg-background">
|
|
<Spinner size="lg" />
|
|
</View>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<Stack screenOptions={{ headerShown: false }}>
|
|
<Stack.Protected guard={!isAuthenticated}>
|
|
<Stack.Screen name="(auth)" />
|
|
</Stack.Protected>
|
|
<Stack.Protected guard={isAuthenticated}>
|
|
<Stack.Screen name="(drawer)" />
|
|
<Stack.Screen
|
|
name="modal"
|
|
options={{ headerShown: true, presentation: "modal", title: "Modal" }}
|
|
/>
|
|
</Stack.Protected>
|
|
</Stack>
|
|
);
|
|
}
|
|
|
|
export default function Layout() {
|
|
return (
|
|
<NativeAuthProvider>
|
|
<GestureHandlerRootView style={{ flex: 1 }}>
|
|
<KeyboardProvider>
|
|
<AppThemeProvider>
|
|
<HeroUINativeProvider>
|
|
<RootNavigator />
|
|
</HeroUINativeProvider>
|
|
</AppThemeProvider>
|
|
</KeyboardProvider>
|
|
</GestureHandlerRootView>
|
|
</NativeAuthProvider>
|
|
);
|
|
}
|