From cf81c3f5daca758f812e8865a41c795867ee37ed Mon Sep 17 00:00:00 2001 From: Sergey Yarkov Date: Mon, 6 Sep 2021 22:44:16 +0300 Subject: [PATCH] feat: confirm email container --- .../UserAccountInfo/UserAccountInfo.tsx | 4 +- .../ConfirmEmailContainer.tsx | 60 +++++++++++++++++++ .../containers/ConfirmEmailContainer/index.ts | 3 + .../UpdateEmailContainer.tsx | 2 +- .../UpdateEmailForm/UpdateEmailForm.tsx | 5 +- .../UpdatePasswordContainer.tsx | 2 +- src/pages/profile/index.tsx | 14 +++-- src/types/index.d.ts | 14 ++++- 8 files changed, 92 insertions(+), 12 deletions(-) create mode 100644 src/pages/profile/containers/ConfirmEmailContainer/ConfirmEmailContainer.tsx create mode 100644 src/pages/profile/containers/ConfirmEmailContainer/index.ts diff --git a/src/pages/profile/components/UserAccountInfo/UserAccountInfo.tsx b/src/pages/profile/components/UserAccountInfo/UserAccountInfo.tsx index 3e3b962..5044f8c 100644 --- a/src/pages/profile/components/UserAccountInfo/UserAccountInfo.tsx +++ b/src/pages/profile/components/UserAccountInfo/UserAccountInfo.tsx @@ -45,7 +45,7 @@ const UserAccountInfo: React.FC = ({ user }) => { {user.email} - + @@ -56,7 +56,7 @@ const UserAccountInfo: React.FC = ({ user }) => { ********** - + diff --git a/src/pages/profile/containers/ConfirmEmailContainer/ConfirmEmailContainer.tsx b/src/pages/profile/containers/ConfirmEmailContainer/ConfirmEmailContainer.tsx new file mode 100644 index 0000000..2f9a78a --- /dev/null +++ b/src/pages/profile/containers/ConfirmEmailContainer/ConfirmEmailContainer.tsx @@ -0,0 +1,60 @@ +import React from 'react'; +import { PinInput, PinInputField } from '@chakra-ui/react'; +import { Button } from '@chakra-ui/button'; +import { Box, Flex, Heading, HStack, Text } from '@chakra-ui/layout'; + +const ConfirmEmailContainer: React.FC<{ newEmail: string }> = ({ newEmail }) => { + return ( + + Confirmation + + + Enter the 4-digit code we send to {newEmail} + + + + + + + + + + + + + + + + + + Expires in 1:59 + + {/* */} + + + + + ); +}; + +export default ConfirmEmailContainer; diff --git a/src/pages/profile/containers/ConfirmEmailContainer/index.ts b/src/pages/profile/containers/ConfirmEmailContainer/index.ts new file mode 100644 index 0000000..27871cd --- /dev/null +++ b/src/pages/profile/containers/ConfirmEmailContainer/index.ts @@ -0,0 +1,3 @@ +import ConfirmEmailContainer from './ConfirmEmailContainer'; + +export default ConfirmEmailContainer; diff --git a/src/pages/profile/containers/UpdateEmailContainer/UpdateEmailContainer.tsx b/src/pages/profile/containers/UpdateEmailContainer/UpdateEmailContainer.tsx index 3bb60f9..a0dddda 100644 --- a/src/pages/profile/containers/UpdateEmailContainer/UpdateEmailContainer.tsx +++ b/src/pages/profile/containers/UpdateEmailContainer/UpdateEmailContainer.tsx @@ -15,7 +15,7 @@ const UpdateEmailContainer: React.FC = () => { aria-label='Back' borderRadius='full' icon={} - onClick={() => setStatusPageView('default')} + onClick={() => setStatusPageView({ status: 'default' })} mr='5' /> Edit email address diff --git a/src/pages/profile/containers/UpdateEmailContainer/UpdateEmailForm/UpdateEmailForm.tsx b/src/pages/profile/containers/UpdateEmailContainer/UpdateEmailForm/UpdateEmailForm.tsx index 37d2bdd..2aaaf13 100644 --- a/src/pages/profile/containers/UpdateEmailContainer/UpdateEmailForm/UpdateEmailForm.tsx +++ b/src/pages/profile/containers/UpdateEmailContainer/UpdateEmailForm/UpdateEmailForm.tsx @@ -3,8 +3,9 @@ import { FormControl, FormHelperText, FormLabel } from '@chakra-ui/form-control' import { Input } from '@chakra-ui/input'; import { Box, Stack } from '@chakra-ui/layout'; import { yupResolver } from '@hookform/resolvers/yup'; +import { ProfilePageViewContext } from 'contexts'; import { useRootStore } from 'hooks/useRootStore'; -import React from 'react'; +import React, { useContext } from 'react'; import { SubmitHandler, useForm } from 'react-hook-form'; import UpdateEmailSchema from './UpdateEmailForm.validator'; @@ -16,6 +17,7 @@ type UpdateEmailInputType = { * Update email using form */ const UpdateEmailForm: React.FC = () => { + const { setStatusPageView } = useContext(ProfilePageViewContext); const { userStore: { me }, } = useRootStore(); @@ -29,6 +31,7 @@ const UpdateEmailForm: React.FC = () => { const onSubmit: SubmitHandler = async data => { console.log(data); + setStatusPageView({ status: 'confirm-email', data: { confirmEmailData: { newEmail: data.email } } }); }; return ( diff --git a/src/pages/profile/containers/UpdatePasswordContainer/UpdatePasswordContainer.tsx b/src/pages/profile/containers/UpdatePasswordContainer/UpdatePasswordContainer.tsx index 3b934e3..32f3c66 100644 --- a/src/pages/profile/containers/UpdatePasswordContainer/UpdatePasswordContainer.tsx +++ b/src/pages/profile/containers/UpdatePasswordContainer/UpdatePasswordContainer.tsx @@ -14,7 +14,7 @@ const UpdatePasswordContainer: React.FC = () => { aria-label='Back' borderRadius='full' icon={} - onClick={() => setStatusPageView('default')} + onClick={() => setStatusPageView({ status: 'default' })} mr='5' /> Update password diff --git a/src/pages/profile/index.tsx b/src/pages/profile/index.tsx index ad8c668..40b46d6 100644 --- a/src/pages/profile/index.tsx +++ b/src/pages/profile/index.tsx @@ -24,12 +24,13 @@ import UserAccountInfo from './components/UserAccountInfo'; import UpdateUserContactsForm from './components/UpdateUserContactsForm'; import UpdatePasswordContainer from './containers/UpdatePasswordContainer'; import UpdateEmailContainer from './containers/UpdateEmailContainer'; +import ConfirmEmailContainer from './containers/ConfirmEmailContainer'; /** * Profile page */ const ProfilePage: React.FC = () => { - const [statusPageView, setStatusPageView] = useState('default'); + const [statusPageView, setStatusPageView] = useState({ status: 'default' }); const { colorMode } = useColorMode(); const { userStore, authStore } = useRootStore(); const history = useHistory(); @@ -45,8 +46,8 @@ const ProfilePage: React.FC = () => { } return ( - - {statusPageView === 'default' && ( + + {statusPageView.status === 'default' && ( My account = () => { )} - {statusPageView === 'update-password' && } - {statusPageView === 'update-email' && } + {statusPageView.status === 'update-password' && } + {statusPageView.status === 'update-email' && } + {statusPageView.status === 'confirm-email' && statusPageView.data?.confirmEmailData && ( + + )} ); }; diff --git a/src/types/index.d.ts b/src/types/index.d.ts index f3986ba..9a7881d 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -7,8 +7,18 @@ export type LinkType = { icon: IconType; }; -export type ProfilePageStatusType = 'update-password' | 'update-email' | 'default'; +export type ProfilePageStatusType = { + status: 'update-password' | 'update-email' | 'confirm-email' | 'default'; + data?: { + /** + * The field that is set when trying to change the mail address through form + */ + confirmEmailData?: { + newEmail: string; + }; + }; +}; export type ProfilePageViewStatusContextType = { - statusPageView: ProfilePageStatusType; + statusPageView: ProfilePageStatusType['status']; setStatusPageView: React.Dispatch>; };