From 7e5fad7b70481f27688e035215a10a97d3e97db1 Mon Sep 17 00:00:00 2001 From: Sergei Baranovski <120570511+sergei-deriv@users.noreply.github.com> Date: Mon, 26 Feb 2024 12:40:00 +0300 Subject: [PATCH] [TRAH] Sergei / TRAH - 2832 / Password setting modal (#13703) * feat: create useClientCountry hook * feat: intermediate result * feat: done with citizenship modal * feat: move changes back for AppContent * fix: sonarcloud issue * feat: implement review comments * feat: implement review comments #2 * feat: create PasswordSettingModal component * chore: delete unused import * feat: add custom style * feat: set text by center --- .../PasswordSettingModal.tsx | 42 +++++++++++++++++++ .../Signup/PasswordSettingModal/index.ts | 1 + .../Signup/SignupScreens/SignupScreens.tsx | 7 +--- .../Signup/SignupWrapper/SignupWrapper.tsx | 17 ++++---- .../src/utils/validations/validations.ts | 7 ++++ 5 files changed, 60 insertions(+), 14 deletions(-) create mode 100644 packages/tradershub/src/flows/Signup/PasswordSettingModal/PasswordSettingModal.tsx create mode 100644 packages/tradershub/src/flows/Signup/PasswordSettingModal/index.ts diff --git a/packages/tradershub/src/flows/Signup/PasswordSettingModal/PasswordSettingModal.tsx b/packages/tradershub/src/flows/Signup/PasswordSettingModal/PasswordSettingModal.tsx new file mode 100644 index 000000000000..95af1f6f8e96 --- /dev/null +++ b/packages/tradershub/src/flows/Signup/PasswordSettingModal/PasswordSettingModal.tsx @@ -0,0 +1,42 @@ +import React, { ChangeEvent } from 'react'; +import { useFormikContext } from 'formik'; +import { validPassword } from '@/utils'; +import { Button, PasswordInput, Text } from '@deriv-com/ui'; +import { TSignupFormValues } from '../SignupWrapper/SignupWrapper'; + +const PasswordSettingModal = () => { + const { values, setFieldValue } = useFormikContext(); + + const onPasswordChange = (e: ChangeEvent) => { + setFieldValue('password', e.target.value); + }; + + return ( +
+
+ + Keep your account secure with a password + + + + Strong passwords contain at least 8 characters. combine uppercase and lowercase letters, numbers, + and symbols. + + +
+
+ ); +}; + +export default PasswordSettingModal; diff --git a/packages/tradershub/src/flows/Signup/PasswordSettingModal/index.ts b/packages/tradershub/src/flows/Signup/PasswordSettingModal/index.ts new file mode 100644 index 000000000000..d0b42c0649a0 --- /dev/null +++ b/packages/tradershub/src/flows/Signup/PasswordSettingModal/index.ts @@ -0,0 +1 @@ +export { default as PasswordSettingModal } from './PasswordSettingModal'; diff --git a/packages/tradershub/src/flows/Signup/SignupScreens/SignupScreens.tsx b/packages/tradershub/src/flows/Signup/SignupScreens/SignupScreens.tsx index 7a98044f7d8c..f28bfd1a7c0c 100644 --- a/packages/tradershub/src/flows/Signup/SignupScreens/SignupScreens.tsx +++ b/packages/tradershub/src/flows/Signup/SignupScreens/SignupScreens.tsx @@ -1,5 +1,6 @@ import React, { Dispatch } from 'react'; import { CitizenshipModal } from '../CitizenshipModal'; +import { PasswordSettingModal } from '../PasswordSettingModal'; type TSignupScreens = { setStep: Dispatch>; @@ -11,11 +12,7 @@ const SignupScreens = ({ step, setStep }: TSignupScreens) => { case 1: return setStep(prev => prev + 1)} />; case 2: - return ( -
- Screen 2 -
- ); + return ; default: return null; } diff --git a/packages/tradershub/src/flows/Signup/SignupWrapper/SignupWrapper.tsx b/packages/tradershub/src/flows/Signup/SignupWrapper/SignupWrapper.tsx index e1d979d0247a..3b62d6c8a51d 100644 --- a/packages/tradershub/src/flows/Signup/SignupWrapper/SignupWrapper.tsx +++ b/packages/tradershub/src/flows/Signup/SignupWrapper/SignupWrapper.tsx @@ -1,7 +1,8 @@ -import React, { useEffect, useState } from 'react'; +import React, { useState } from 'react'; import { Form, Formik } from 'formik'; import ReactModal from 'react-modal'; import { CUSTOM_STYLES } from '@/helpers'; +import { signup } from '@/utils'; import { SignupScreens } from '../SignupScreens'; export type TSignupFormValues = { @@ -11,8 +12,7 @@ export type TSignupFormValues = { }; const SignupWrapper = () => { - // setIsOpen will be added later when flow is completed - const [isOpen] = useState(false); + const [isOpen, setIsOpen] = useState(false); const [step, setStep] = useState(1); const initialValues = { @@ -22,16 +22,15 @@ const SignupWrapper = () => { }; const handleSubmit = () => { - // will be added later + // logic will be added later + setIsOpen(false); }; - useEffect(() => { - ReactModal.setAppElement('#v2_modal_root'); - }, []); + const customStyles = { ...CUSTOM_STYLES, content: { ...CUSTOM_STYLES.content, overflow: 'unset' } }; return ( - - + +
diff --git a/packages/tradershub/src/utils/validations/validations.ts b/packages/tradershub/src/utils/validations/validations.ts index 06fa96c94eac..4d70676c0691 100644 --- a/packages/tradershub/src/utils/validations/validations.ts +++ b/packages/tradershub/src/utils/validations/validations.ts @@ -1,4 +1,5 @@ import * as Yup from 'yup'; +import { passwordRegex } from '@/constants'; export const personalDetails = Yup.object().shape({ accountOpeningReason: Yup.string().required('Account opening reason is required.'), @@ -53,3 +54,9 @@ export const termsOfUse = Yup.object().shape({ pepConfirmation: Yup.boolean().oneOf([true], 'You must confirm that you are not a PEP.'), termsAndCondition: Yup.boolean().oneOf([true], 'You must agree to the terms and conditions.'), }); + +export const signup = Yup.object().shape({ + citizenship: Yup.string(), + country: Yup.string(), + password: Yup.string().matches(passwordRegex.isPasswordValid), +});