94 lines
2.7 KiB
TypeScript
94 lines
2.7 KiB
TypeScript
import React from "react";
|
|
import { StatusBar } from "expo-status-bar";
|
|
import { ActivityIndicator, View } from "react-native";
|
|
import { NavigationContainer } from "@react-navigation/native";
|
|
import { createNativeStackNavigator } from "@react-navigation/native-stack";
|
|
|
|
import { AuthProvider, useAuth } from "./src/auth/AuthContext";
|
|
import { CartProvider } from "./src/context/CartContext";
|
|
import { NotificationProvider } from "./src/context/NotificationContext";
|
|
import { ThemeProvider, useTheme } from "./src/context/ThemeContext";
|
|
|
|
import HomeScreen from "./src/screens/HomeScreen";
|
|
import ClientLoginScreen from "./src/screens/auth/ClientLoginScreen";
|
|
import ClientNavigator from "./src/navigation/ClientNavigator";
|
|
import type { RootStackParamList } from "./src/navigation/types";
|
|
|
|
const Stack = createNativeStackNavigator<RootStackParamList>();
|
|
|
|
function AuthStack() {
|
|
const { colors } = useTheme();
|
|
return (
|
|
<Stack.Navigator
|
|
initialRouteName="home"
|
|
screenOptions={{
|
|
headerStyle: { backgroundColor: colors.bgSecondary },
|
|
headerTintColor: colors.textWhite,
|
|
}}
|
|
>
|
|
<Stack.Screen
|
|
name="home"
|
|
component={HomeScreen}
|
|
options={{ title: "Accueil" }}
|
|
/>
|
|
<Stack.Screen
|
|
name="login"
|
|
component={ClientLoginScreen}
|
|
options={{ title: "Connexion" }}
|
|
/>
|
|
</Stack.Navigator>
|
|
);
|
|
}
|
|
|
|
function RootNavigator() {
|
|
const { isAuthenticated, isLoading, role } = useAuth();
|
|
const { colors, isDark } = useTheme();
|
|
|
|
if (isLoading) {
|
|
return (
|
|
<View
|
|
style={{
|
|
flex: 1,
|
|
justifyContent: "center",
|
|
alignItems: "center",
|
|
backgroundColor: colors.bgPrimary,
|
|
}}
|
|
>
|
|
<ActivityIndicator size="large" color={colors.accent} />
|
|
</View>
|
|
);
|
|
}
|
|
|
|
if (isAuthenticated && role === "client") {
|
|
return (
|
|
<CartProvider>
|
|
<NotificationProvider>
|
|
<ClientNavigator />
|
|
</NotificationProvider>
|
|
</CartProvider>
|
|
);
|
|
}
|
|
|
|
return <AuthStack />;
|
|
}
|
|
|
|
function AppContent() {
|
|
const { isDark } = useTheme();
|
|
return (
|
|
<NavigationContainer>
|
|
<RootNavigator />
|
|
<StatusBar style={isDark ? "light" : "dark"} />
|
|
</NavigationContainer>
|
|
);
|
|
}
|
|
|
|
export default function App() {
|
|
return (
|
|
<ThemeProvider>
|
|
<AuthProvider>
|
|
<AppContent />
|
|
</AuthProvider>
|
|
</ThemeProvider>
|
|
);
|
|
}
|