Initial commit: WalletTracker app with Firebase integration
- Setup Expo project with TypeScript - Implement authentication (Login/Signup/Logout) - Create Dashboard, Transactions, Subscriptions, and Analysis screens - Add Firebase services (Auth, Firestore, Storage) - Implement real-time synchronization - Add charts and analytics - Create reusable components (Button, InputText, TransactionCard, SubscriptionCard) - Configure React Navigation with bottom tabs - Add Firestore security rules - Create comprehensive documentation (README, FIREBASE_SETUP, TESTING)
This commit is contained in:
117
src/navigation/AppNavigator.tsx
Normal file
117
src/navigation/AppNavigator.tsx
Normal file
@@ -0,0 +1,117 @@
|
||||
import React from 'react';
|
||||
import { NavigationContainer } from '@react-navigation/native';
|
||||
import { createStackNavigator } from '@react-navigation/stack';
|
||||
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
|
||||
import { ActivityIndicator, View, StyleSheet } from 'react-native';
|
||||
|
||||
import { useAuth } from '../hooks/useAuth';
|
||||
import { LoginScreen } from '../screens/LoginScreen';
|
||||
import { SignupScreen } from '../screens/SignupScreen';
|
||||
import { DashboardScreen } from '../screens/DashboardScreen';
|
||||
import { TransactionScreen } from '../screens/TransactionScreen';
|
||||
import { SubscriptionScreen } from '../screens/SubscriptionScreen';
|
||||
import { AnalysisScreen } from '../screens/AnalysisScreen';
|
||||
|
||||
import { RootStackParamList, MainTabParamList } from '../types';
|
||||
|
||||
const Stack = createStackNavigator<RootStackParamList>();
|
||||
const Tab = createBottomTabNavigator<MainTabParamList>();
|
||||
|
||||
const MainTabs = () => {
|
||||
return (
|
||||
<Tab.Navigator
|
||||
screenOptions={{
|
||||
headerShown: false,
|
||||
tabBarActiveTintColor: '#4A90E2',
|
||||
tabBarInactiveTintColor: '#999',
|
||||
tabBarStyle: {
|
||||
backgroundColor: '#FFF',
|
||||
borderTopWidth: 1,
|
||||
borderTopColor: '#E0E0E0',
|
||||
paddingBottom: 8,
|
||||
paddingTop: 8,
|
||||
height: 60
|
||||
},
|
||||
tabBarLabelStyle: {
|
||||
fontSize: 12,
|
||||
fontWeight: '600'
|
||||
}
|
||||
}}
|
||||
>
|
||||
<Tab.Screen
|
||||
name="Dashboard"
|
||||
component={DashboardScreen}
|
||||
options={{
|
||||
tabBarLabel: 'Tableau de bord',
|
||||
tabBarIcon: ({ color }) => <TabIcon icon="📊" color={color} />
|
||||
}}
|
||||
/>
|
||||
<Tab.Screen
|
||||
name="Transactions"
|
||||
component={TransactionScreen}
|
||||
options={{
|
||||
tabBarLabel: 'Transactions',
|
||||
tabBarIcon: ({ color }) => <TabIcon icon="💸" color={color} />
|
||||
}}
|
||||
/>
|
||||
<Tab.Screen
|
||||
name="Subscriptions"
|
||||
component={SubscriptionScreen}
|
||||
options={{
|
||||
tabBarLabel: 'Abonnements',
|
||||
tabBarIcon: ({ color }) => <TabIcon icon="📱" color={color} />
|
||||
}}
|
||||
/>
|
||||
<Tab.Screen
|
||||
name="Analysis"
|
||||
component={AnalysisScreen}
|
||||
options={{
|
||||
tabBarLabel: 'Analyses',
|
||||
tabBarIcon: ({ color }) => <TabIcon icon="📈" color={color} />
|
||||
}}
|
||||
/>
|
||||
</Tab.Navigator>
|
||||
);
|
||||
};
|
||||
|
||||
const TabIcon = ({ icon, color }: { icon: string; color: string }) => (
|
||||
<View style={{ opacity: color === '#4A90E2' ? 1 : 0.5 }}>
|
||||
<View>{icon}</View>
|
||||
</View>
|
||||
);
|
||||
|
||||
export const AppNavigator = () => {
|
||||
const { user, initializing } = useAuth();
|
||||
|
||||
if (initializing) {
|
||||
return (
|
||||
<View style={styles.loadingContainer}>
|
||||
<ActivityIndicator size="large" color="#4A90E2" />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<NavigationContainer>
|
||||
<Stack.Navigator screenOptions={{ headerShown: false }}>
|
||||
{user ? (
|
||||
<Stack.Screen name="Main" component={MainTabs} />
|
||||
) : (
|
||||
<>
|
||||
<Stack.Screen name="Login" component={LoginScreen} />
|
||||
<Stack.Screen name="Signup" component={SignupScreen} />
|
||||
</>
|
||||
)}
|
||||
</Stack.Navigator>
|
||||
</NavigationContainer>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
loadingContainer: {
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
backgroundColor: '#F8F9FA'
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user