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