1- import { Fragment , useState } from 'react' ;
2- import { Text } from '@deriv/components' ;
1+ import { Fragment , useEffect , useState } from 'react' ;
2+
33import { useVerifyEmail } from '@deriv/api' ;
4+ import { Button , Modal , Text } from '@deriv/components' ;
45import { toTitleCase } from '@deriv/shared' ;
56import { observer , useStore } from '@deriv/stores' ;
67import { Localize , useTranslations } from '@deriv-com/translations' ;
8+
79import SentEmailModal from '../../../Components/sent-email-modal' ;
810import UnlinkAccountModal from '../../../Components/unlink-account-modal' ;
11+
912import EmailPasswordSection from './email-password-section' ;
1013
1114type TVerifyEmailPayload = Parameters < ReturnType < typeof useVerifyEmail > [ 'mutate' ] > [ 0 ] ;
@@ -20,19 +23,29 @@ const DerivEmail = observer(() => {
2023 common : { is_from_derivgo } ,
2124 client : { social_identity_provider, is_social_signup, email } ,
2225 } = useStore ( ) ;
23- const { mutate } = useVerifyEmail ( ) ;
26+
27+ const { mutate, isError, error, isSuccess } = useVerifyEmail ( ) ;
2428 const { localize } = useTranslations ( ) ;
2529 const [ is_unlink_account_modal_open , setIsUnlinkAccountModalOpen ] = useState ( false ) ;
2630 const [ is_send_email_modal_open , setIsSendEmailModalOpen ] = useState ( false ) ;
31+ const [ is_error_modal_open , setIsErrorModalOpen ] = useState ( false ) ;
2732
2833 const payload : TVerifyEmailPayload = { verify_email : email , type : 'request_email' } ;
2934
35+ useEffect ( ( ) => {
36+ if ( isError ) {
37+ setIsErrorModalOpen ( true ) ;
38+ setIsSendEmailModalOpen ( false ) ;
39+ } else if ( isSuccess ) {
40+ setIsSendEmailModalOpen ( true ) ;
41+ }
42+ } , [ isError , isSuccess ] ) ;
43+
3044 const onClickChangeEmail = ( ) => {
3145 if ( is_social_signup ) {
3246 setIsUnlinkAccountModalOpen ( true ) ;
3347 } else {
3448 mutate ( payload ) ;
35- setIsSendEmailModalOpen ( true ) ;
3649 }
3750 } ;
3851
@@ -42,6 +55,15 @@ const DerivEmail = observer(() => {
4255 setIsSendEmailModalOpen ( true ) ;
4356 } ;
4457
58+ const onClose = ( ) => {
59+ setIsErrorModalOpen ( false ) ;
60+ } ;
61+
62+ type VerifyEmailError = {
63+ code ?: string ;
64+ message ?: string ;
65+ } ;
66+
4567 return (
4668 < Fragment >
4769 < div className = 'account__passwords-wrapper' >
@@ -74,6 +96,31 @@ const DerivEmail = observer(() => {
7496 is_modal_when_mobile = { true }
7597 />
7698 </ div >
99+ { is_error_modal_open && error && (
100+ < Modal
101+ is_open = { is_error_modal_open }
102+ has_close_icon
103+ should_header_stick_body
104+ title = { localize ( 'Email change currently unavailable' ) }
105+ toggleModal = { onClose }
106+ width = '440px'
107+ height = '200px'
108+ >
109+ < div className = 'account__email-unhandled-error' >
110+ < Text className = 'account__email-unhandled-error-error_text' as = 'p' size = 'xs' >
111+ { ( error as VerifyEmailError ) ?. code === 'EmailChangeFailP2PActive' ? (
112+ < Localize i18n_default_text = 'Complete P2P orders and deactivate ads to proceed.' />
113+ ) : (
114+ < Localize i18n_default_text = { ( error as VerifyEmailError ) ?. message || '' } />
115+ ) }
116+ </ Text >
117+
118+ < Button onClick = { onClose } has_effect primary large >
119+ < Localize i18n_default_text = 'OK' />
120+ </ Button >
121+ </ div >
122+ </ Modal >
123+ ) }
77124 </ Fragment >
78125 ) ;
79126} ) ;
0 commit comments