89 lines
2.1 KiB
TypeScript
89 lines
2.1 KiB
TypeScript
import React, { useState, useEffect } from 'react';
|
|
import { StatusBar } from 'expo-status-bar';
|
|
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
import { StyleSheet, View, Text, ActivityIndicator } from 'react-native';
|
|
import { AppNavigator } from './src/navigation/AppNavigator';
|
|
|
|
export default function App() {
|
|
const [error, setError] = useState<string | null>(null);
|
|
const [loading, setLoading] = useState(true);
|
|
|
|
useEffect(() => {
|
|
// Simuler un chargement pour détecter les erreurs
|
|
const timer = setTimeout(() => {
|
|
setLoading(false);
|
|
}, 1000);
|
|
|
|
return () => clearTimeout(timer);
|
|
}, []);
|
|
|
|
if (loading) {
|
|
return (
|
|
<View style={styles.loadingContainer}>
|
|
<ActivityIndicator size="large" color="#4A90E2" />
|
|
<Text style={styles.loadingText}>Chargement de WalletTracker...</Text>
|
|
</View>
|
|
);
|
|
}
|
|
|
|
if (error) {
|
|
return (
|
|
<View style={styles.errorContainer}>
|
|
<Text style={styles.errorTitle}>❌ Erreur</Text>
|
|
<Text style={styles.errorText}>{error}</Text>
|
|
</View>
|
|
);
|
|
}
|
|
|
|
try {
|
|
return (
|
|
<GestureHandlerRootView style={styles.container}>
|
|
<AppNavigator />
|
|
<StatusBar style="auto" />
|
|
</GestureHandlerRootView>
|
|
);
|
|
} catch (err: any) {
|
|
return (
|
|
<View style={styles.errorContainer}>
|
|
<Text style={styles.errorTitle}>❌ Erreur de chargement</Text>
|
|
<Text style={styles.errorText}>{err.message || 'Erreur inconnue'}</Text>
|
|
</View>
|
|
);
|
|
}
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
container: {
|
|
flex: 1
|
|
},
|
|
loadingContainer: {
|
|
flex: 1,
|
|
justifyContent: 'center',
|
|
alignItems: 'center',
|
|
backgroundColor: '#F8F9FA'
|
|
},
|
|
loadingText: {
|
|
marginTop: 16,
|
|
fontSize: 16,
|
|
color: '#666'
|
|
},
|
|
errorContainer: {
|
|
flex: 1,
|
|
justifyContent: 'center',
|
|
alignItems: 'center',
|
|
backgroundColor: '#FFF',
|
|
padding: 24
|
|
},
|
|
errorTitle: {
|
|
fontSize: 24,
|
|
fontWeight: 'bold',
|
|
color: '#FF6B6B',
|
|
marginBottom: 16
|
|
},
|
|
errorText: {
|
|
fontSize: 14,
|
|
color: '#666',
|
|
textAlign: 'center'
|
|
}
|
|
});
|