From 1366c9ee3ad00866ef926b37a9181228f1fdbc0b Mon Sep 17 00:00:00 2001 From: Alexis Leboeuf Date: Mon, 13 Oct 2025 09:58:07 +0200 Subject: [PATCH] :construction: Adding the list view page, but has to be modified --- app/(tabs)/_layout.tsx | 8 +-- app/(tabs)/bonjourFL.tsx | 148 +++++++++++++++++++++++++++++++++++++++ app/_layout.tsx | 2 +- data/concerts.json | 45 ++++++++++++ package-lock.json | 24 ------- 5 files changed, 198 insertions(+), 29 deletions(-) create mode 100644 app/(tabs)/bonjourFL.tsx create mode 100644 data/concerts.json diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx index aeb4f8c..164afad 100644 --- a/app/(tabs)/_layout.tsx +++ b/app/(tabs)/_layout.tsx @@ -7,8 +7,8 @@ import { HapticTab } from '@/components/haptic-tab'; import { IconSymbol } from '@/components/ui/icon-symbol'; import { Colors } from '@/constants/theme'; import { useColorScheme } from '@/hooks/use-color-scheme'; -import TabTwoScreen from './explore'; -import HomeScreen from './index'; +import TabTwoScreen from './index'; +import HomeScreen from './bonjourFL'; const Tabs = createBottomTabNavigator(); @@ -23,10 +23,10 @@ export default function TabLayout() { tabBarButton: HapticTab, }}> , }} /> diff --git a/app/(tabs)/bonjourFL.tsx b/app/(tabs)/bonjourFL.tsx new file mode 100644 index 0000000..3a514e4 --- /dev/null +++ b/app/(tabs)/bonjourFL.tsx @@ -0,0 +1,148 @@ +import { useLocalSearchParams, useRouter } from 'expo-router'; +import React, { useMemo, useState } from 'react'; +import { Button, FlatList, Image, StyleSheet, Text, TextInput, View } from 'react-native'; +import rawConcerts from '../../data/concerts.json'; + +type Concert = { + group: string; + date: string; + nationality: string; + location: string; + price: number; + ticketsLeft: number; + Image: string; + favorite: boolean; +}; + +export default function BonjourScreen() { + + const router = useRouter(); + const { nom, prenom } = useLocalSearchParams(); // Recup data ecran precedent + const [search, setSearch] = useState(''); + + + const concertsData: Concert[] = Array.isArray(rawConcerts) + ? (rawConcerts as Concert[]) + : []; + + const filteredData = useMemo(() => { + if (!Array.isArray(concertsData)) return []; + const q = search.trim().toLowerCase(); + if (!q) return concertsData; + return concertsData.filter( + (item) => !!item && (item.group ?? '').toLowerCase().includes(q) + ); + }, [concertsData, search]); + + + const renderItem = ({ item, index }: { item?: Concert; index: number }) => { + if (!item) { + // optionnel : afficher un placeholder pour debug + // return Item manquant; + return null; + } + return( + + + + {item.group} + {item.date} + {item.location} + Prix : {item.price} € + Places restantes : {item.ticketsLeft} + + ); + }; + + return( + + index.toString()} + contentContainerStyle={{ paddingBottom: 40 }} + ListHeaderComponent={ + + + Bonjour {prenom} {nom} + + + {/* 🔍 Champ de recherche */} + + + } + ListEmptyComponent={ + Aucun résultat trouvé 😕 + } + /> + + +