-
Notifications
You must be signed in to change notification settings - Fork 454
Expand file tree
/
Copy pathSignUpEmailCodeCard.tsx
More file actions
57 lines (50 loc) · 2 KB
/
SignUpEmailCodeCard.tsx
File metadata and controls
57 lines (50 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import { useCardState } from '@/ui/elements/contexts';
import { handleError } from '@/ui/utils/errorHandler';
import { useCoreSignUp } from '../../contexts';
import { Flow, localizationKeys } from '../../customizables';
import { useFetch } from '../../hooks';
import { SignUpVerificationCodeForm } from './SignUpVerificationCodeForm';
export const SignUpEmailCodeCard = () => {
const signUp = useCoreSignUp();
const card = useCardState();
const emailVerificationStatus = signUp.verifications.emailAddress.status;
const hasPendingEmailCodeVerification =
emailVerificationStatus === 'unverified' && signUp.verifications.emailAddress.strategy === 'email_code';
const shouldAvoidPrepare = !signUp.status || emailVerificationStatus === 'verified';
const shouldAvoidInitialPrepare = shouldAvoidPrepare || hasPendingEmailCodeVerification;
const prepare = () => {
if (shouldAvoidPrepare) {
return;
}
return signUp
.prepareEmailAddressVerification({ strategy: 'email_code' })
.catch(err => handleError(err, [], card.setError));
};
// TODO: Introduce a useMutation to handle mutating requests
useFetch(
shouldAvoidInitialPrepare ? undefined : () => signUp.prepareEmailAddressVerification({ strategy: 'email_code' }),
{
name: 'prepare',
strategy: 'email_code',
number: signUp.emailAddress,
},
{
staleTime: 100,
onError: err => handleError(err, [], card.setError),
},
);
const attempt = (code: string) => signUp.attemptEmailAddressVerification({ code });
return (
<Flow.Part part='emailCode'>
<SignUpVerificationCodeForm
cardTitle={localizationKeys('signUp.emailCode.title')}
cardSubtitle={localizationKeys('signUp.emailCode.subtitle')}
inputLabel={localizationKeys('signUp.emailCode.formSubtitle')}
resendButton={localizationKeys('signUp.emailCode.resendButton')}
prepare={prepare}
attempt={attempt}
safeIdentifier={signUp.emailAddress}
/>
</Flow.Part>
);
};