diff --git a/app/index.tsx b/app/index.tsx index 6e68ea0..e413290 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -9,7 +9,7 @@ const OpeningScreen = () => { return ( - + Bienvenue chez Brix Café diff --git a/app/screens/auth/OpeningScreen.tsx b/app/screens/auth/OpeningScreen.tsx deleted file mode 100644 index e69de29..0000000 diff --git a/app/screens/auth/SignIn-Screen.tsx b/app/screens/auth/SignIn-Screen.tsx index e110129..7a6a33a 100644 --- a/app/screens/auth/SignIn-Screen.tsx +++ b/app/screens/auth/SignIn-Screen.tsx @@ -1,6 +1,6 @@ import { useState } from "react"; import {View,Text,TextInput,Pressable,StyleSheet,Image,Alert,TouchableOpacity,} from "react-native"; -import { Eye, EyeOff,ArrowLeft } from "lucide-react-native"; +import { Eye, EyeOff,ArrowLeft,Check } from "lucide-react-native"; import { router } from "expo-router"; import { signIn } from "../../../firebase/auth"; // Assure-toi que le chemin est correct import { Link } from "expo-router"; @@ -62,13 +62,12 @@ const SignInScreen = () => { keyboardShouldPersistTaps="handled" // Ensures that taps on the inputs won't dismiss the keyboard > - setStep(1)} - > - - - + router.back()} + > + + Se connecter @@ -131,18 +130,22 @@ const SignInScreen = () => { - setForm({ ...form, rememberMe: !form.rememberMe })} + setForm({ ...form, rememberMe: !form.rememberMe })} + > + - - Rester Connecté - + {form.rememberMe && } + + + Rester Connecté + + Mot de passe oublié? diff --git a/app/screens/auth/SignUpScreen.tsx b/app/screens/auth/SignUpScreen.tsx index fe8e9df..6a6122f 100644 --- a/app/screens/auth/SignUpScreen.tsx +++ b/app/screens/auth/SignUpScreen.tsx @@ -1,13 +1,48 @@ import React, { useState } from 'react'; -import {View,Text,TextInput,TouchableOpacity,ScrollView,StyleSheet,SafeAreaView,Image,Pressable,} from 'react-native'; +import {View,Text,TextInput,TouchableOpacity,ScrollView,StyleSheet,SafeAreaView,Image,Pressable,Modal} from 'react-native'; import { StatusBar } from 'expo-status-bar'; -import { ArrowLeft, Eye, EyeOff, MapPin } from 'lucide-react-native'; +import { ArrowLeft, Eye, EyeOff, MapPin,Check } from 'lucide-react-native'; import { doc, setDoc } from 'firebase/firestore'; import { db } from '../../../firebase/config'; import { signUp } from '../../../firebase/auth'; import { Alert } from 'react-native'; import { router } from "expo-router"; +const cities = [ + 'Ariana', 'Ben Arous', 'Bizerte', 'Béja', 'El Kef', 'Ettadhamen', 'Gabes', + 'Gafsa', 'Jendouba', 'Kairouan', 'Kasserine', 'Kebili', 'Mahdia', 'Medenine', + 'Monastir', 'Nabeul', 'Sfax', 'Siliana', 'Sidi Bouzid', 'Sousse', 'Tataouine', + 'Tozeur', 'Tunis', 'Zaghouan' +]; + +const delegationsByGouvernorat: Record = { + Ariana: ['Ariana Medina', 'Ettadhamen', 'Kalaat El Andalous', 'Mnihla', 'Raoued', 'Sidi Thabet', 'Soukra'], + Béja: ['Amdoun', 'Beja North', 'Beja South', 'Goubellat', 'Mejez El Bab', 'Nefza', 'Teboursouk', 'Testour', 'Thibar'], + 'Ben Arous': ['Ben Arous', 'Boumhel', 'El Mourouj', 'Ezzahra', 'Fouchana', 'Hammam Chott', 'Hammam Lif', 'M\'Hamdia', 'Medina Jedida', 'Mégrine', 'Mornag', 'Rades'], + Bizerte: ['Bizerte Nord', 'Bizerte Sud', 'Joumine', 'El Alia', 'Ghar El Melh', 'Mateur', 'Menzel Bourguiba', 'Menzel Jemil', 'Ras Jebel', 'Sejnane', 'Tinja', 'Utique', 'Zarzouna','Manzel Abderrahmen','El Alia','Ghezala'], + Gabès: ['Gabès', 'El Hamma', 'Matmata', 'Mareth', 'Nouvelle Matmata', 'Chouchet'], + Gafsa: ['Gafsa', 'El Guettar', 'Mdhila', 'Redeyef', 'Metlaoui', 'Sidi Aich', 'Belkhir', 'Om Larayes'], + Jendouba: ['Jendouba', 'Ain Draham', 'Fernana', 'Ghardimaou', 'Tabarka', 'Balta Bou Aouane', 'Oued Meliz'], + Kairouan: ['Kairouan', 'Bou Hajla', 'Chebika', 'El Alaa', 'El Fahs', 'Haffouz', 'Nasrallah', 'Oueslatia', 'Sbiba', 'Sidi Alouane', 'Soliman', 'Thala'], + Kasserine: ['Kasserine', 'Foussana', 'Hassi El Ferid', 'Haidra', 'Sbeitla', 'Thala', 'Tounine', 'Sidi Bouali'], + Kébili: ['Kébili', 'Douz', 'Souk Lahad', 'El Faouar', 'Chbika'], + Kef: ['Kef', 'Dahmani', 'El Ksour', 'Kalaa Khasba', 'Nebeur', 'Sers', 'Tajerouine', 'Zouila'], + Mahdia: ['Mahdia', 'Bou Merdes', 'Chorbane', 'El Jem', 'Ksour Essef', 'Melloulèche', 'Rejiche', 'Sahline', 'Sidi Alouane'], + Manouba: ['Manouba', 'Borj El Amri', 'El Battan', 'Jedaida', 'Mornaguia', 'Tebourba'], + Medenine: ['Medenine', 'Ben Guerdane', 'Beni Khedache', 'Djerba', 'Zarzis', 'Ajim', 'Houmt Souk'], + Monastir: ['Monastir', 'Bekalta', 'Ksibet El Mediouni', 'Ksar Hellal', 'Menzel Harb', 'Sahline', 'Sayada', 'Téboulba'], + Nabeul: ['Nabeul', 'Hammamet', 'Kelibia', 'Korba', 'Menzel Temime', 'Takelsa', 'Soliman', 'Dar Chaâbane El Fehri', 'Bou Argoub'], + Sfax: ['Sfax', 'El Amra', 'El Hencha', 'El Ouardia', 'Kerkennah', 'Menzel Chaker', 'Skhira', 'Thyna'], + 'Sidi Bouzid': ['Sidi Bouzid', 'Bir El Hafey', 'Menzel Bouzelfa', 'Meknassy', 'Regueb', 'Sidi Ali Ben Aoun', 'Sbiba'], + Siliana: ['Siliana', 'Bou Arada', 'Gaafour', 'Kesra', 'Makthar', 'Rouhia', 'Sidi Bou Rouis'], + Sousse: ['Sousse', 'Akouda', 'Enfidha', 'Hergla', 'Kalaa Sghira', 'Khezama', 'Msaken', 'Sidi Bou Ali', 'Sidi El Hani'], + Tataouine: ['Tataouine', 'Beni Khedache', 'Dhehiba', 'Ghomrassen', 'Ksar Ouled Soltane', 'Remada'], + Tozeur: ['Tozeur', 'Nefta', 'Degache', 'Chbika'], + Tunis: ['Tunis', 'Carthage', 'Le Bardo', 'La Goulette', 'La Marsa', 'Medina', 'El Omrane', 'El Menzah', 'Ettadhamen', 'El Kabaria', 'El Kram', 'Ezzahra', 'Fouchana', 'Hammam Chott', 'Hammam Linf', 'Mornag', 'Raoued', 'Sidi Thabet', 'Soukra','Boumhel', 'El Mourouj', 'Fouchana', 'Hammam Chott', 'Hammam Lif', 'M\'Hamdia', 'Medina Jedida', 'Mégrine'], + Zaghouan: ['Bir Mcherga', 'El Fahs', 'Nadhour', 'Saouaf', 'Zriba', 'Zaghouan'] +}; + + export default function App() { @@ -30,6 +65,19 @@ export default function App() { fiscalId: '', acceptTerms: false, }); + const [showCityPicker, setShowCityPicker] = useState(false); + const [showDelegationPicker, setShowDelegationPicker] = useState(false); + + const handleCitySelect = (city: string) => { + setFormData(prev => ({ ...prev, city, delegation: '' })); + setShowCityPicker(false); + }; + + const handleDelegationSelect = (delegation: string) => { + setFormData(prev => ({ ...prev, delegation })); + setShowDelegationPicker(false); + }; + const handleInputChange = (name: string, value: string | boolean) => { setFormData(prev => ({ @@ -38,6 +86,19 @@ export default function App() { })); }; + const formatPhoneNumber = (phone: string) => { + const cleaned = phone.replace(/\D/g, "").slice(0, 8); // Garde que les chiffres (max 8) + const part1 = cleaned.slice(0, 2); + const part2 = cleaned.slice(2, 5); + const part3 = cleaned.slice(5, 8); + return [part1, part2, part3].filter(Boolean).join(" "); + }; + + const handlePhoneChange = (value: string) => { + const cleaned = value.replace(/\D/g, "").slice(0, 8); // que les chiffres, max 8 + setFormData({ ...formData, phone: cleaned }); + }; + const handleNext = () => { setStep(2); }; @@ -104,21 +165,30 @@ export default function App() { - Numéro de téléphone - handleInputChange('phone', value)} + Numéro de téléphone + + + +216 + handlePhoneChange(value)} + maxLength={11} + /> + Mot de passe handleInputChange('password', value)} @@ -137,6 +207,7 @@ export default function App() { handleInputChange('confirmPassword', value)} @@ -190,9 +261,7 @@ export default function App() { { - // Add city picker logic here - }} + onPress={() => setShowCityPicker(true)} > {formData.city || 'Sélectionner une ville'} @@ -201,15 +270,62 @@ export default function App() { + setShowCityPicker(false)} + > + + + Sélectionner une Ville + + {cities.map((city, index) => ( + handleCitySelect(city)}> + {city} + + ))} + + setShowCityPicker(false)} + > + Fermer + + + + + + setShowDelegationPicker(false)} + > + + + Sélectionner une Délégation + + {availableDelegations.map((del, index) => ( + handleDelegationSelect(del)}> + {del} + + ))} + + setShowDelegationPicker(false)} > + Fermer + + + + + Délégation { - // Add delegation picker logic here - }} + onPress={() => setShowDelegationPicker(true)} > {formData.delegation || 'Sélectionner une délégation'} @@ -233,17 +349,23 @@ export default function App() { handleInputChange('acceptTerms', !formData.acceptTerms)} - /> + > + {formData.acceptTerms && } + + J'accepte les conditions générales et la politique de confidentialité. + Valider ); + const availableDelegations = delegationsByGouvernorat[formData.city] || []; + return ( @@ -354,7 +476,7 @@ const styles = StyleSheet.create({ }, selectText: { fontSize: 16, - color: '#9ca3af', + color: '#000', }, checkboxContainer: { flexDirection: 'row', @@ -365,14 +487,14 @@ const styles = StyleSheet.create({ width: 20, height: 20, borderWidth: 2, - borderColor: '#d1d5db', + borderColor: "#B17741", borderRadius: 4, marginRight: 8, marginTop: 2, }, checkboxChecked: { - backgroundColor: '#22C55E', - borderColor: '#22C55E', + backgroundColor: '#B17741', + borderColor: "#B17741", }, checkboxLabel: { flex: 1, @@ -404,4 +526,61 @@ const styles = StyleSheet.create({ fontSize: 14, color: '#B77729', }, + modalOverlay: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: 'rgba(0, 0, 0, 0.5)', + }, + modalContainer: { + backgroundColor: 'white', + padding: 20, + borderRadius: 10, + width: '90%', + height: '80%' + }, + modalTitle: { + fontSize: 18, + fontWeight: '600', + marginBottom: 12, + }, + cityItem: { + fontSize: 16, + paddingVertical: 8, + paddingHorizontal: 10, + borderBottomWidth: 1, + borderBottomColor: '#d1d5db', + }, + closeButton: { + backgroundColor: '#B77729', + borderRadius: 8, + padding: 10, + alignItems: 'center', + marginTop: 12, + }, + phoneContainer: { + flexDirection: 'row', + alignItems: 'center', + borderRadius: 8, + padding: 3, + borderWidth: 1, + borderColor: '#ddd', + }, + flag: { + width: 18, + height: 12, + borderRadius: 2, + marginRight: 8, + marginLeft: 8, + }, + prefix: { + fontSize: 16, + color: '#B77729', + marginRight: 5, + }, + phoneNum:{ + color: '#000', + fontSize: 16, + width: '100%', + } }); \ No newline at end of file diff --git a/assets/images/Flag_Tunisia.png b/assets/images/Flag_Tunisia.png new file mode 100644 index 0000000..530d8a6 Binary files /dev/null and b/assets/images/Flag_Tunisia.png differ