/** * App Entry Point * ERP Transportistas * Sprint S8 - TASK-007 * * Main application component with navigation setup. */ import React, { useEffect, useState } from 'react'; import { StatusBar, View, ActivityIndicator, StyleSheet } from 'react-native'; import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import { Ionicons } from '@expo/vector-icons'; import { useAuthStore } from './src/store'; import { offlineStorage } from './src/services'; import { LoginScreen, ViajeActualScreen, ChecklistScreen, PODScreen, } from './src/screens'; import type { RootStackParamList, MainTabParamList } from './src/types'; const Stack = createNativeStackNavigator(); const Tab = createBottomTabNavigator(); // Placeholder screens for tabs function HistorialScreen(): JSX.Element { return ; } function PerfilScreen(): JSX.Element { return ; } function MainTabs(): JSX.Element { return ( ({ tabBarIcon: ({ focused, color, size }) => { let iconName: keyof typeof Ionicons.glyphMap = 'car'; if (route.name === 'ViajeActual') { iconName = focused ? 'car' : 'car-outline'; } else if (route.name === 'Historial') { iconName = focused ? 'time' : 'time-outline'; } else if (route.name === 'Perfil') { iconName = focused ? 'person' : 'person-outline'; } return ; }, tabBarActiveTintColor: '#2563eb', tabBarInactiveTintColor: '#64748b', headerShown: false, })} > ); } export default function App(): JSX.Element { const { isAuthenticated, isLoading, restoreSession } = useAuthStore(); const [isInitializing, setIsInitializing] = useState(true); useEffect(() => { initializeApp(); }, []); const initializeApp = async (): Promise => { try { // Initialize offline storage await offlineStorage.initialize(); // Try to restore session await restoreSession(); } catch (error) { console.error('Error initializing app:', error); } finally { setIsInitializing(false); } }; if (isInitializing || isLoading) { return ( ); } return ( {isAuthenticated ? ( <> ) : ( )} ); } const styles = StyleSheet.create({ loadingContainer: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#ffffff', }, placeholder: { flex: 1, backgroundColor: '#f1f5f9', }, });