154 lines
No EOL
4.3 KiB
TypeScript
154 lines
No EOL
4.3 KiB
TypeScript
import React from 'react';
|
|
import { NavigationContainer } from '@react-navigation/native';
|
|
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
|
|
import { createStackNavigator } from '@react-navigation/stack';
|
|
import { Provider } from 'react-redux';
|
|
import { store } from './src/store/store';
|
|
import { StatusBar } from 'expo-status-bar';
|
|
import { Ionicons } from '@expo/vector-icons';
|
|
|
|
// Screens
|
|
import DashboardScreen from './src/screens/DashboardScreen';
|
|
import FeaturesScreen from './src/screens/FeaturesScreen';
|
|
import AnalyticsScreen from './src/screens/AnalyticsScreen';
|
|
import MediaScreen from './src/screens/MediaScreen';
|
|
import ChatScreen from './src/screens/ChatScreen';
|
|
import SettingsScreen from './src/screens/SettingsScreen';
|
|
import LoginScreen from './src/screens/auth/LoginScreen';
|
|
import RegisterScreen from './src/screens/auth/RegisterScreen';
|
|
|
|
// Navigation types
|
|
type RootStackParamList = {
|
|
Auth: undefined;
|
|
Main: undefined;
|
|
};
|
|
|
|
type AuthStackParamList = {
|
|
Login: undefined;
|
|
Register: undefined;
|
|
};
|
|
|
|
type MainTabParamList = {
|
|
Dashboard: undefined;
|
|
Features: undefined;
|
|
Analytics: undefined;
|
|
Media: undefined;
|
|
Chat: undefined;
|
|
Settings: undefined;
|
|
};
|
|
|
|
const Stack = createStackNavigator<RootStackParamList>();
|
|
const AuthStack = createStackNavigator<AuthStackParamList>();
|
|
const Tab = createBottomTabNavigator<MainTabParamList>();
|
|
|
|
// Auth Navigator
|
|
const AuthNavigator = () => (
|
|
<AuthStack.Navigator screenOptions={{ headerShown: false }}>
|
|
<AuthStack.Screen name="Login" component={LoginScreen} />
|
|
<AuthStack.Screen name="Register" component={RegisterScreen} />
|
|
</AuthStack.Navigator>
|
|
);
|
|
|
|
// Main Tab Navigator
|
|
const MainTabNavigator = () => (
|
|
<Tab.Navigator
|
|
screenOptions={({ route }) => ({
|
|
tabBarIcon: ({ focused, color, size }) => {
|
|
let iconName: keyof typeof Ionicons.glyphMap;
|
|
|
|
switch (route.name) {
|
|
case 'Dashboard':
|
|
iconName = focused ? 'home' : 'home-outline';
|
|
break;
|
|
case 'Features':
|
|
iconName = focused ? 'apps' : 'apps-outline';
|
|
break;
|
|
case 'Analytics':
|
|
iconName = focused ? 'analytics' : 'analytics-outline';
|
|
break;
|
|
case 'Media':
|
|
iconName = focused ? 'musical-notes' : 'musical-notes-outline';
|
|
break;
|
|
case 'Chat':
|
|
iconName = focused ? 'chatbubbles' : 'chatbubbles-outline';
|
|
break;
|
|
case 'Settings':
|
|
iconName = focused ? 'settings' : 'settings-outline';
|
|
break;
|
|
default:
|
|
iconName = 'help-outline';
|
|
}
|
|
|
|
return <Ionicons name={iconName} size={size} color={color} />;
|
|
},
|
|
tabBarActiveTintColor: '#3B82F6',
|
|
tabBarInactiveTintColor: '#6B7280',
|
|
tabBarStyle: {
|
|
backgroundColor: '#1F2937',
|
|
borderTopColor: '#374151',
|
|
},
|
|
headerStyle: {
|
|
backgroundColor: '#1F2937',
|
|
},
|
|
headerTintColor: '#FFFFFF',
|
|
})}
|
|
>
|
|
<Tab.Screen
|
|
name="Dashboard"
|
|
component={DashboardScreen}
|
|
options={{ title: 'Tableau de bord' }}
|
|
/>
|
|
<Tab.Screen
|
|
name="Features"
|
|
component={FeaturesScreen}
|
|
options={{ title: 'Fonctionnalités' }}
|
|
/>
|
|
<Tab.Screen
|
|
name="Analytics"
|
|
component={AnalyticsScreen}
|
|
options={{ title: 'Analytics' }}
|
|
/>
|
|
<Tab.Screen
|
|
name="Media"
|
|
component={MediaScreen}
|
|
options={{ title: 'Média' }}
|
|
/>
|
|
<Tab.Screen
|
|
name="Chat"
|
|
component={ChatScreen}
|
|
options={{ title: 'Chat' }}
|
|
/>
|
|
<Tab.Screen
|
|
name="Settings"
|
|
component={SettingsScreen}
|
|
options={{ title: 'Paramètres' }}
|
|
/>
|
|
</Tab.Navigator>
|
|
);
|
|
|
|
// Root Navigator
|
|
const RootNavigator = () => {
|
|
// TODO: Check authentication state
|
|
const isAuthenticated = false; // This should come from auth state
|
|
|
|
return (
|
|
<Stack.Navigator screenOptions={{ headerShown: false }}>
|
|
{isAuthenticated ? (
|
|
<Stack.Screen name="Main" component={MainTabNavigator} />
|
|
) : (
|
|
<Stack.Screen name="Auth" component={AuthNavigator} />
|
|
)}
|
|
</Stack.Navigator>
|
|
);
|
|
};
|
|
|
|
export default function App() {
|
|
return (
|
|
<Provider store={store}>
|
|
<NavigationContainer>
|
|
<StatusBar style="light" />
|
|
<RootNavigator />
|
|
</NavigationContainer>
|
|
</Provider>
|
|
);
|
|
}
|