diff --git a/src/actions/signupActions.js b/src/actions/signupActions.js index 9ff849b..81d8efd 100644 --- a/src/actions/signupActions.js +++ b/src/actions/signupActions.js @@ -7,7 +7,7 @@ export function checkIfEmailIsValid({ email }) { export function checkIfPasswordIsStrongEnough({ password }) { const reg = - /^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})/; + /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{6,})/; return reg.test(password); } @@ -67,7 +67,7 @@ export function handleFirebaseError(code = "") { case "auth/too-many-requests": return "Trop de tentatives. Réessaie dans quelques minutes."; case "auth/email-already-in-use": - return "Il existe déjà un compte avec cette adresse e-mail."; + return "Un compte avec cette adresse mail existe déjà."; case "auth/missing-password": return "Renseigne ton mot de passe."; case "auth/weak-password": diff --git a/src/screens/CreatePassword.js b/src/screens/CreatePassword.js index 2827956..442a3cd 100644 --- a/src/screens/CreatePassword.js +++ b/src/screens/CreatePassword.js @@ -6,7 +6,10 @@ 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 { + checkIfPasswordIsStrongEnough, + handleFirebaseError, +} from "../actions/signupActions"; import firebase, { usersRef } from "../config/firebase"; import Page from "../layouts/Page"; import { isWeb } from "../hooks/useLayoutType"; @@ -28,7 +31,7 @@ const CreatePassword = () => { const [loading, setLoading] = useState(false); const [, setTooltip] = useGlobal("_tooltip"); - const passwordRegex = useMemo(() => /^.{6,}$/, []); + const handlePasswordChange = (text) => { setPassword(text); @@ -37,20 +40,22 @@ const CreatePassword = () => { return; } - if (!passwordRegex.test(text)) { - setPasswordError("Ton mot de passe doit contenir au moins 6 caractères."); + if (!checkIfPasswordIsStrongEnough({ password: text })) { + setPasswordError( + "Le mot de passe doit contenir au moins une majuscule, une minuscule, un chiffre et avoir une longueur minimale de 6 caractères", + ); } else { setPasswordError(""); } }; - const isPasswordValid = passwordRegex.test(password); + const isPasswordValid = checkIfPasswordIsStrongEnough({ password }); const onCreateAccount = async () => { try { if (!isPasswordValid) { setTooltip({ - text: "Ton mot de passe doit contenir au moins 6 caractères.", + text: "Le mot de passe doit contenir au moins une majuscule, une minuscule, un chiffre et avoir une longueur minimale de 6 caractères", type: "error", }); return; diff --git a/src/screens/Studio/SongReady.js b/src/screens/Studio/SongReady.js index 72685b2..0e61e1c 100644 --- a/src/screens/Studio/SongReady.js +++ b/src/screens/Studio/SongReady.js @@ -24,7 +24,7 @@ import ProgressSlider from "../../components/player/ProgressSlider"; import { isWeb } from "../../hooks/useLayoutType"; import Page from "../../layouts/Page"; import { Routes } from "../../navigation"; -import { navigate } from "../../navigation/NavigationService"; +import { navigate, reset } from "../../navigation/NavigationService"; import { useUser } from "../../providers/UserDataProvider"; import { Palette, Style } from "../../styles"; import { gutters, size } from "../../styles/Style"; @@ -138,7 +138,10 @@ const SongReady = () => { }); await pauseAllPlayers(); - navigate(Routes.ChooseCoverType); + reset({ + index: 1, + routes: [{ name: Routes.BottomTab }, { name: Routes.ChooseCoverType }], + }); } catch (e) { console.log("Validate error", e?.message); } diff --git a/src/screens/cover/ValidateCover.js b/src/screens/cover/ValidateCover.js index 8327bda..bf48888 100644 --- a/src/screens/cover/ValidateCover.js +++ b/src/screens/cover/ValidateCover.js @@ -55,7 +55,12 @@ const ValidateCover = () => { const handleSelectOption = useCallback( async (option) => { - if (!option || option?.id === selectedOptionId || isSelecting) { + if ( + !option || + option?.id === selectedOptionId || + isSelecting || + selectedOptionId // Prevent re-selection + ) { return; } const existingCover = selectedProject?.cover || {}; diff --git a/src/utils/songStructure.js b/src/utils/songStructure.js index fb98d5a..491b7ce 100644 --- a/src/utils/songStructure.js +++ b/src/utils/songStructure.js @@ -352,6 +352,16 @@ export const sanitizeStructureList = (structure = [], options = {}) => { result.unshift(intro); } + const outroIndex = result.findIndex((item) => { + const meta = getSegmentMeta(item); + return meta?.exclusiveGroup === "outro"; + }); + + if (outroIndex !== -1 && outroIndex < result.length - 1) { + const [outro] = result.splice(outroIndex, 1); + result.push(outro); + } + return result; };