src/
├── data/
│ ├── index.ts # Export centralisé
│ ├── voyages.ts # Données voyages & hébergements
│ ├── user.ts # Données utilisateur
│ ├── home.ts # Données page d'accueil
│ └── README.md # Documentation
└── types/
└── index.ts # Types TypeScript
- ✅
Voyage- Trajets/voyages disponibles - ✅
Hebergement- Hébergements disponibles - ✅
UserInfo- Informations utilisateur - ✅
MenuItem- Éléments de menu du profil - ✅
Stat- Statistiques de la page d'accueil - ✅
Activity- Activités récentes
voyages[]- 14 trajets (Bus, Voiture, Train, Avion, Bateau)hebergements[]- 8 hébergements (Hôtels, Auberges)transportTypes[]- Types de transport pour filtragehebergementTypes[]- Types d'hébergement pour filtrage
userInfo- Profil utilisateur completmenuItems[]- 8 éléments de menu des paramètres
stats[]- 3 statistiques (Gains, Courses, Note)generateActivities(count)- Générateur d'activitésweatherInfo- Données météo
- Suppression des données codées en dur (lignes 16-52)
- Import depuis
/src/data - Code réduit de ~50 lignes
Avant:
const voyages = [
{ id: 1, type: 'Bus', from: 'Libreville', ... },
// 13 autres entrées...
];
const hebergements = [...];
const transportTypes = [...];
const hebergementTypes = [...];Après:
import { voyages, hebergements, transportTypes, hebergementTypes } from '../../../data';- Suppression de
userInfoetmenuItemslocaux - Import depuis
/src/data - Code réduit de ~50 lignes
Avant:
const userInfo = { name: '...', email: '...', ... };
const menuItems = [ ... 8 items ... ];Après:
import { userInfo, menuItems } from '../../../data';- Suppression des données statistiques codées en dur
- Utilisation de
stats.map()pour affichage dynamique - Utilisation de
weatherInfopour la météo - Utilisation de
generateActivities()pour les activités - Code plus maintenable et dynamique
Avant:
// 3 blocs de code dupliqués pour les stats
<View>...</View>
<View>...</View>
<View>...</View>
// Données météo codées en dur
<Text>32°C</Text>
<Text>Libreville, Gabon</Text>
// Activités générées avec [...Array(10)]Après:
import { stats, generateActivities, weatherInfo } from '../../../data';
{stats.map((stat) => (
<View key={stat.id}>...</View>
))}
<Text>{weatherInfo.temperature}</Text>
<Text>{weatherInfo.location}</Text>
{activities.map((activity) => (...))}Fichiers corrigés:
voyages.tsx(ligne 3, 9)index.tsx(ligne 11, 30)profil.tsx(ligne 2, 9)profile-edit.tsx(ligne 12, 18)voyage-detail.tsx(ligne 3, 9)
Raison: Utiliser le hook useRouter() garantit que le contexte de navigation est disponible au moment de l'utilisation.
/src/app/(protected)/_layout.tsx
- Suppression des déclarations de routes redondantes (
course,delivery,message,conversation) - Expo Router détecte automatiquement ces dossiers
/src/app/_layout.tsx
- Suppression de la route
modalinexistante
Fichier: voyages.tsx (lignes 17-23)
Problème: Le filtre des hébergements utilisait selectedType qui pouvait contenir des valeurs de transport ("Bus", "Train", etc.)
Solution:
const filteredHebergements = hebergements
.filter((h) => {
// Ne filtrer par type que si on est sur l'onglet hébergement
if (selectedTab !== 'hebergement') return true;
return selectedType === 'All' || h.type === selectedType;
})
.filter((h) => !searchLocation || h.location.toLowerCase().includes(searchLocation.toLowerCase()));- voyages.tsx: ~50 lignes supprimées
- profil.tsx: ~50 lignes supprimées
- index.tsx: Code plus maintenable et dynamique
- 5 nouveaux fichiers (types + data)
- 2 fichiers de documentation (README.md)
✅ Maintenabilité : Données centralisées faciles à modifier ✅ Réutilisabilité : Données accessibles depuis n'importe quel composant ✅ Type Safety : TypeScript garantit la cohérence ✅ Testabilité : Données mockées facilement ✅ Lisibilité : Composants plus simples et focalisés sur la présentation ✅ Scalabilité : Facile d'ajouter de nouvelles données
// Import tout depuis le fichier centralisé
import { voyages, userInfo, stats } from '@/data';
import { Voyage, UserInfo } from '@/types';- Créer le type dans
/src/types/index.ts - Créer le fichier de données dans
/src/data/ - Exporter depuis
/src/data/index.ts - Importer dans vos composants
- Tous les chemins d'import utilisent le chemin relatif
../../../data - La structure est prête pour l'ajout de path aliases (
@/data,@/types) - Documentation complète dans
/src/data/README.md
- Ajouter des path aliases dans
tsconfig.jsonpour simplifier les imports - Créer des hooks personnalisés pour la gestion des données (ex:
useVoyages()) - Connecter à une vraie API backend
- Ajouter la persistance locale avec AsyncStorage