diff --git a/assets/share-experience.png b/assets/share-experience.png deleted file mode 100644 index 3b9e991..0000000 Binary files a/assets/share-experience.png and /dev/null differ diff --git a/functions/src/project.js b/functions/src/project.js index 4e740e3..f30ec58 100644 --- a/functions/src/project.js +++ b/functions/src/project.js @@ -37,5 +37,5 @@ exports.onProjectUpdate = onDocumentWritten( } catch (e) { console.log(e); } - }, + } ); diff --git a/src/screens/CreatePassword.js b/src/screens/CreatePassword.js index 2417f1a..a049b8b 100644 --- a/src/screens/CreatePassword.js +++ b/src/screens/CreatePassword.js @@ -1,27 +1,59 @@ -import { View, Text, Pressable } from "react-native"; -import React, { useState } from "react"; +import { useRoute } from "@react-navigation/native"; +import React, { useMemo, useState } from "react"; +import { Text, View } from "react-native"; import { useGlobal } from "reactn"; -import Page from "../layouts/Page"; import { background } from "../assets"; +import GradientButton from "../components/GradientButton"; +import { Input } from "../components/Input"; import ItemContainer from "../components/ItemContainer/ItemContainer"; +import firebase, { usersRef } from "../config/firebase"; +import Page from "../layouts/Page"; +import { Routes } from "../navigation"; +import { navigate } from "../navigation/NavigationService"; import { Palette } from "../styles"; import { FONT_FAMILY } from "../styles/Fonts"; -import { Input } from "../components/Input"; -import GradientButton from "../components/GradientButton"; -import { navigate } from "../navigation/NavigationService"; -import { useRoute } from "@react-navigation/native"; -import firebase, { usersRef } from "../config/firebase"; -import { Routes } from "../navigation"; const CreatePassword = () => { const route = useRoute(); const email = route?.params?.email || ""; const [password, setPassword] = useState(""); + const [passwordError, setPasswordError] = useState(""); const [loading, setLoading] = useState(false); const [, setTooltip] = useGlobal("_tooltip"); + const passwordRegex = useMemo( + () => /^(?=.*[a-z])(?=.*[A-Z])(?=.*[^A-Za-z0-9]).{8,}$/, + [] + ); + + const handlePasswordChange = (text) => { + setPassword(text); + if (!text) { + setPasswordError(""); + return; + } + + if (!passwordRegex.test(text)) { + setPasswordError( + "Ton mot de passe doit contenir 8 caractères, une majuscule, une minuscule et un caractère spécial." + ); + } else { + setPasswordError(""); + } + }; + + const isPasswordValid = passwordRegex.test(password); + const onCreateAccount = async () => { try { + if (!isPasswordValid) { + setTooltip({ + text: "Ton mot de passe doit contenir 8 caractères, une majuscule, une minuscule et un caractère spécial.", + type: "error", + }); + return; + } + setLoading(true); const cred = await firebase .auth() @@ -34,7 +66,7 @@ const CreatePassword = () => { createdAt: firebase.firestore.FieldValue.serverTimestamp(), updatedAt: firebase.firestore.FieldValue.serverTimestamp(), }, - { merge: true }, + { merge: true } ); setTooltip({ text: "Compte créé, continuons", type: "success" }); navigate(Routes.CreatePseudo); @@ -82,8 +114,19 @@ const CreatePassword = () => { isBlur type="password" value={password} - setValue={setPassword} + setValue={handlePasswordChange} /> + {passwordError ? ( + + {passwordError} + + ) : null} { alignSelf: "center", }} onPress={onCreateAccount} - disabled={loading || !email || !password} + disabled={loading || !email || !isPasswordValid} /> diff --git a/src/screens/HitParade/HitParade.js b/src/screens/HitParade/HitParade.js index 80fa551..1fc10e4 100644 --- a/src/screens/HitParade/HitParade.js +++ b/src/screens/HitParade/HitParade.js @@ -72,7 +72,7 @@ const HitParade = () => { navigate(Routes.MusicDetails, { projectId: item.id })} /> @@ -92,7 +92,7 @@ const HitParade = () => { navigate(Routes.Playbacks, { projectId: item.id })} />