Skip to content

Commit 04307c0

Browse files
authored
feat: APP-222 web3 confirmation email (#2590)
1 parent 5d5d78d commit 04307c0

File tree

15 files changed

+252
-91
lines changed

15 files changed

+252
-91
lines changed

web-marketplace/src/components/organisms/LoginFlow/hooks/useEmailConfirmationData.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useEffect, useState } from 'react';
22
import { useLingui } from '@lingui/react';
33
import { useQuery, useQueryClient } from '@tanstack/react-query';
4-
import { useSetAtom } from 'jotai';
4+
import { useAtom, useSetAtom } from 'jotai';
55
import { postData } from 'utils/fetch/postData';
66

77
import { apiUri } from 'lib/apiUri';
@@ -18,7 +18,6 @@ import { onPostData } from 'components/organisms/LoginButton/hooks/onLoginPostDa
1818
import { useTimer } from 'components/organisms/LoginButton/hooks/useTimer';
1919
import { getEmailModalError } from 'components/organisms/LoginButton/utils/getEmailModalError';
2020
import { EmailFormSchemaType } from 'components/organisms/LoginModal/LoginModal.schema';
21-
import { CONNECTED_EMAIL_ERROR } from 'components/organisms/UserAccountSettings/UserAccountSettings.constants';
2221

2322
import {
2423
DEFAULT_RESEND_ERROR,
@@ -27,6 +26,8 @@ import {
2726
RESEND_SUCCES,
2827
RESEND_TIMER,
2928
} from '../../LoginButton/LoginButton.constants';
29+
import { CONNECTED_EMAIL_ERROR } from 'components/organisms/RegistryLayout/RegistryLayout.constants';
30+
import { connectedEmailErrorModalAtom } from 'lib/atoms/modals.atoms';
3031

3132
type EmailConfirmationDataParams = {
3233
emailConfirmationText?: string;
@@ -40,8 +41,9 @@ export const useEmailConfirmationData = ({
4041
const { _ } = useLingui();
4142
const reactQueryClient = useQueryClient();
4243
const [isConfirmationModalOpen, setIsConfirmationModalOpen] = useState(false);
43-
const [isConnectedEmailErrorModalOpen, setIsConnectedEmailErrorModalOpen] =
44-
useState(false);
44+
const setConnectedEmailErrorModalAtom = useSetAtom(
45+
connectedEmailErrorModalAtom,
46+
);
4547
const [emailModalErrorCode, setEmailModalErrorCode] = useState('');
4648
const [email, setEmail] = useState('');
4749
const { privActiveAccount, activeAccount } = useAuth();
@@ -58,8 +60,7 @@ export const useEmailConfirmationData = ({
5860
const { track } = useTracker();
5961

6062
const onConfirmationModalClose = () => setIsConfirmationModalOpen(false);
61-
const onConnectedEmailErrorModalClose = () =>
62-
setIsConnectedEmailErrorModalOpen(false);
63+
6364
const onResendPasscode = async () => {
6465
if (token && resendTimeLeft === null) {
6566
startTimer();
@@ -156,7 +157,10 @@ export const useEmailConfirmationData = ({
156157
});
157158
if (response.error) {
158159
if (response.error === CONNECTED_EMAIL_ERROR) {
159-
setIsConnectedEmailErrorModalOpen(true);
160+
setConnectedEmailErrorModalAtom(atom => {
161+
atom.open = true;
162+
atom.email = email;
163+
});
160164
}
161165
}
162166
} catch (e) {
@@ -176,8 +180,6 @@ export const useEmailConfirmationData = ({
176180
onResendPasscode,
177181
setIsConfirmationModalOpen,
178182
onEmailSubmit,
179-
isConnectedEmailErrorModalOpen,
180-
onConnectedEmailErrorModalClose,
181183
retryCsrfRequest,
182184
};
183185
};

web-marketplace/src/components/organisms/UserAccountSettings/UserAccountSettings.ConnectedEmailErrorModal.tsx renamed to web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.ConnectedEmailErrorModal.tsx

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,37 @@
1+
import { useCallback } from 'react';
12
import { useLingui } from '@lingui/react';
3+
import { useAtom } from 'jotai';
24

35
import { RegenModalProps } from 'web-components/src/components/modal';
46
import { SadBeeModal } from 'web-components/src/components/modal/SadBeeModal/SadBeeModal';
57
import { Body, Title } from 'web-components/src/components/typography';
68

9+
import { connectedEmailErrorModalAtom } from 'lib/atoms/modals.atoms';
10+
711
import {
812
CONNECTED_EMAIL_ERROR_DESCRIPTION_END,
913
CONNECTED_EMAIL_ERROR_DESCRIPTION_START,
1014
CONNECTED_EMAIL_ERROR_TITLE,
11-
} from './UserAccountSettings.constants';
15+
} from './RegistryLayout.constants';
1216

13-
interface Props extends RegenModalProps {
17+
export interface ConnectedEmailErrorModalProps extends RegenModalProps {
1418
email: string;
1519
}
1620

17-
export const ConnectedEmailErrorModal = ({ open, onClose, email }: Props) => {
21+
export const RegistryLayoutConnectedEmailErrorModal = () => {
1822
const { _ } = useLingui();
23+
const [connectedEmailErrorModal, setConnectedEmailErrorModalAtom] = useAtom(
24+
connectedEmailErrorModalAtom,
25+
);
26+
const { open, onClose, email } = connectedEmailErrorModal;
27+
28+
const onCloseModal = useCallback(() => {
29+
setConnectedEmailErrorModalAtom(atom => void (atom.open = false));
30+
if (onClose) onClose();
31+
}, [setConnectedEmailErrorModalAtom, onClose]);
1932

2033
return (
21-
<SadBeeModal open={open} onClose={onClose}>
34+
<SadBeeModal open={open ?? false} onClose={onCloseModal}>
2235
<Title variant="h4" align="center" sx={{ my: 5 }}>
2336
{_(CONNECTED_EMAIL_ERROR_TITLE)}
2437
</Title>

web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.constants.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,9 @@ export const TERRAOS_POWERED_BY = msg`Powered by`;
2727
export const TERRAOS_COPYRIGHT = msg`© 2024 Terrasos SAS | All rights reserved`;
2828
export const TERRASOS_COMPANY_DESCRIPTION = msg`We are a company specialized in structuring and operating environmental investments.`;
2929
export const TERRASOS_LOGO_ALT = msg`Terrasos Logo`;
30+
31+
export const CONNECTED_EMAIL_ERROR = 'email.already_connected';
32+
export const CONNECTED_EMAIL_ERROR_TITLE = msg`Sorry, this email is already connected to another account`;
33+
export const CONNECTED_EMAIL_ERROR_DESCRIPTION_START = msg`You entered: `;
34+
export const CONNECTED_EMAIL_ERROR_DESCRIPTION_END = msg`. Please use a different email address.`;
35+
export const EMAIL_ADDED = msg`Log in email successfully added`;

web-marketplace/src/components/organisms/RegistryLayout/RegistryLayout.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { RegistryLayoutTxBuySuccessfulModal } from './RegistryLayout.TxBuySucces
2424
import { RegistryLayoutTxErrorModal } from './RegistryLayout.TxErrorModal';
2525
import { RegistryLayoutTxSuccessfulModal } from './RegistryLayout.TxSuccessfulModal';
2626
import { RegistryLayoutWarningBannerModal } from './RegistryLayout.WarningBanner';
27+
import { RegistryLayoutConnectedEmailErrorModal } from './RegistryLayout.ConnectedEmailErrorModal';
2728

2829
const RegistryLayout: React.FC = () => {
2930
return (
@@ -51,6 +52,7 @@ const RegistryLayout: React.FC = () => {
5152
<RegistryLayoutTxBuySuccessfulModal />
5253
<RegistryLayoutWarningBannerModal />
5354
<RegistryLayoutChooseHowToPurchaseModal />
55+
<RegistryLayoutConnectedEmailErrorModal />
5456
</>
5557
);
5658
};
Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
11
import { msg } from '@lingui/macro';
22

3-
export const CONNECTED_EMAIL_ERROR =
4-
'Sorry, this email is already connected to another account';
5-
export const CONNECTED_EMAIL_ERROR_TITLE = msg`Sorry, this email is already connected to another account`;
6-
export const CONNECTED_EMAIL_ERROR_DESCRIPTION_START = msg`You entered: `;
7-
export const CONNECTED_EMAIL_ERROR_DESCRIPTION_END = msg`. Please use a different email address.`;
83
export const EMAIL_ADDED = msg`Log in email successfully added`;

web-marketplace/src/components/organisms/UserAccountSettings/UserAccountSettings.stories.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,6 @@ const args = {
4949
action('email submit')({ email, callback });
5050
return Promise.resolve();
5151
},
52-
isConnectedEmailErrorModalOpen: false,
53-
onConnectedEmailErrorModalClose: action(
54-
'close connected email error modal',
55-
),
5652
},
5753
};
5854

web-marketplace/src/components/organisms/UserAccountSettings/UserAccountSettings.tsx

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import {
2525
import { getResendCodeButtonLink } from '../LoginButton/utils/getResendCodeButtonLink';
2626
import { getResendCodeLabel } from '../LoginButton/utils/getResendCodeLabel';
2727
import { emailFormSchema } from '../LoginModal/LoginModal.schema';
28-
import { ConnectedEmailErrorModal } from './UserAccountSettings.ConnectedEmailErrorModal';
2928
import { ConnectField } from './UserAccountSettings.ConnectField';
3029
import { UserAccountSettingsProps } from './UserAccountSettings.types';
3130

@@ -52,8 +51,6 @@ export const UserAccountSettings = ({
5251
onMailCodeChange,
5352
onResendPasscode,
5453
onEmailSubmit,
55-
isConnectedEmailErrorModalOpen,
56-
onConnectedEmailErrorModalClose,
5754
} = emailConfirmationData;
5855

5956
const form = useZodForm({
@@ -116,11 +113,6 @@ export const UserAccountSettings = ({
116113
error={emailModalError}
117114
onCodeChange={onMailCodeChange}
118115
/>
119-
<ConnectedEmailErrorModal
120-
open={isConnectedEmailErrorModalOpen}
121-
onClose={onConnectedEmailErrorModalClose}
122-
email={email}
123-
/>
124116
<div className="flex flex-col gap-30">
125117
<div className="flex flex-col gap-10">
126118
<Subtitle size="lg">

web-marketplace/src/components/organisms/UserAccountSettings/UserAccountSettings.types.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ export interface UserAccountSettingsProps {
4242
| 'onMailCodeChange'
4343
| 'onResendPasscode'
4444
| 'onEmailSubmit'
45-
| 'isConnectedEmailErrorModalOpen'
46-
| 'onConnectedEmailErrorModalClose'
4745
>;
4846
}
4947

web-marketplace/src/lib/atoms/modals.atoms.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { TxSuccessfulModalProps } from 'web-components/src/components/modal/TxSu
88

99
import { AccountSwitchModalProps } from 'components/organisms/AccountSwitchModal/AccountSwitchModal';
1010
import { ChooseHowToPurchaseModalProps } from 'components/organisms/ChooseHowToPurchaseModal/ChooseHowToPurchaseModal';
11+
import { ConnectedEmailErrorModalProps } from 'components/organisms/RegistryLayout/RegistryLayout.ConnectedEmailErrorModal';
1112

1213
export const errorModalAtom = atomWithImmer({
1314
title: '',
@@ -62,3 +63,11 @@ export const chooseHowToPurchaseModalAtom = atomWithImmer({
6263
open: false,
6364
projectId: '',
6465
} as Partial<ChooseHowToPurchaseModalProps>);
66+
67+
type ConnectedEmailErrorModal = RegenModalProps & {
68+
email: string;
69+
};
70+
export const connectedEmailErrorModalAtom = atomWithImmer({
71+
open: false,
72+
email: '',
73+
} as Partial<ConnectedEmailErrorModal>);

0 commit comments

Comments
 (0)