import { useRoute } from "@react-navigation/native"; import React, { useMemo, useState } from "react"; import { Text, View } from "react-native"; import { useGlobal } from "reactn"; import { background } from "../assets"; import GradientButton from "../components/GradientButton"; import { Input } from "../components/Input"; import ItemContainer from "../components/ItemContainer/ItemContainer"; import { handleFirebaseError } from "../actions/signupActions"; import firebase, { usersRef } from "../config/firebase"; import Page from "../layouts/Page"; import { isWeb } from "../hooks/useLayoutType"; import { Routes } from "../navigation"; import { navigate } from "../navigation/NavigationService"; import { Palette } from "../styles"; import { FONT_FAMILY } from "../styles/Fonts"; const CreatePassword = () => { const route = useRoute(); const email = route?.params?.email || ""; const firstName = route?.params?.firstName || ""; const lastName = route?.params?.lastName || ""; const city = route?.params?.city || ""; const country = route?.params?.country || null; const preferredLanguage = route?.params?.preferredLanguage || null; const [password, setPassword] = useState(""); const [passwordError, setPasswordError] = useState(""); const [loading, setLoading] = useState(false); const [, setTooltip] = useGlobal("_tooltip"); const passwordRegex = useMemo(() => /^.{6,}$/, []); const handlePasswordChange = (text) => { setPassword(text); if (!text) { setPasswordError(""); return; } if (!passwordRegex.test(text)) { setPasswordError( "Ton mot de passe doit contenir au moins 6 caractères." ); } else { setPasswordError(""); } }; const isPasswordValid = passwordRegex.test(password); const onCreateAccount = async () => { try { if (!isPasswordValid) { setTooltip({ text: "Ton mot de passe doit contenir au moins 6 caractères.", type: "error", }); return; } setLoading(true); const cred = await firebase .auth() .createUserWithEmailAndPassword(email.trim(), password); const uid = cred?.user?.uid || firebase.auth().currentUser?.uid; if (!uid) throw new Error("Création de compte échouée"); const trimmedFirstName = typeof firstName === "string" ? firstName.trim() : ""; const trimmedLastName = typeof lastName === "string" ? lastName.trim() : ""; const trimmedCity = typeof city === "string" ? city.trim() : ""; await usersRef.doc(uid).set( { email: email.trim(), emailNotifications: true, ...(trimmedFirstName ? { firstName: trimmedFirstName } : {}), ...(trimmedLastName ? { lastName: trimmedLastName } : {}), ...(trimmedCity ? { city: trimmedCity } : {}), ...(preferredLanguage ? { preferredLanguage } : {}), ...(country?.code ? { countryCode: country.code } : {}), ...(country?.name ? { countryName: country.name } : {}), createdAt: firebase.firestore.FieldValue.serverTimestamp(), updatedAt: firebase.firestore.FieldValue.serverTimestamp(), }, { merge: true } ); setTooltip({ text: "Compte créé, continuons", type: "success" }); navigate(Routes.BottomTab); } catch (e) { console.log("Register error", e?.message); const message = e?.code && e.code.startsWith("auth/") ? handleFirebaseError(e.code) : e?.message || "Création impossible"; setTooltip({ text: message, type: "error" }); } finally { setLoading(false); } }; return ( Choisis un mot de passe{"\n"}sécurisé Utilise au moins 6 caractères pour sécuriser ton compte. {passwordError ? ( {passwordError} ) : null} ); }; export default CreatePassword;