Skip to content

Commit 73fe6ff

Browse files
authored
fix(clerk-js): Prepare calls would fire only once (#6695)
1 parent 7f61361 commit 73fe6ff

File tree

6 files changed

+27
-28
lines changed

6 files changed

+27
-28
lines changed

.changeset/crazy-days-tan.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@clerk/clerk-js': patch
3+
---
4+
5+
Fixes issue where "prepare" API request would only fire once, preventing end users from receiving fresh otp codes.

packages/clerk-js/src/ui/components/SignIn/SignInFactorOneCodeForm.tsx

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -82,19 +82,11 @@ export const SignInFactorOneCodeForm = (props: SignInFactorOneCodeFormProps) =>
8282
.catch(err => handleError(err, [], card.setError));
8383
};
8484

85-
useFetch(
86-
shouldAvoidPrepare
87-
? undefined
88-
: () =>
89-
signIn
90-
?.prepareFirstFactor(props.factor)
91-
.then(() => props.onFactorPrepare())
92-
.catch(err => handleError(err, [], card.setError)),
93-
cacheKey,
94-
{
95-
staleTime: 100,
96-
},
97-
);
85+
useFetch(shouldAvoidPrepare ? undefined : () => signIn?.prepareFirstFactor(props.factor), cacheKey, {
86+
staleTime: 100,
87+
onSuccess: () => props.onFactorPrepare(),
88+
onError: err => handleError(err, [], card.setError),
89+
});
9890

9991
const action: VerificationCodeCardProps['onCodeEntryFinishedAction'] = (code, resolve, reject) => {
10092
signIn

packages/clerk-js/src/ui/components/SignIn/__tests__/SignInFactorOneCodeForm.spec.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,11 @@ describe('SignInFactorOneCodeForm', () => {
5656
name: 'signIn.prepareFirstFactor',
5757
factorKey: 'phone_code_idn_123',
5858
},
59-
{
59+
expect.objectContaining({
6060
staleTime: 100,
61-
},
61+
onSuccess: expect.any(Function),
62+
onError: expect.any(Function),
63+
}),
6264
);
6365
});
6466

@@ -91,9 +93,11 @@ describe('SignInFactorOneCodeForm', () => {
9193
name: 'signIn.prepareFirstFactor',
9294
factorKey: 'phone_code_idn_123_whatsapp',
9395
},
94-
{
96+
expect.objectContaining({
9597
staleTime: 100,
96-
},
98+
onSuccess: expect.any(Function),
99+
onError: expect.any(Function),
100+
}),
97101
);
98102
});
99103

packages/clerk-js/src/ui/components/SignUp/SignUpEmailCodeCard.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,15 @@ export const SignUpEmailCodeCard = () => {
2424

2525
// TODO: Introduce a useMutation to handle mutating requests
2626
useFetch(
27-
shouldAvoidPrepare
28-
? undefined
29-
: () =>
30-
signUp
31-
.prepareEmailAddressVerification({ strategy: 'email_code' })
32-
.catch(err => handleError(err, [], card.setError)),
27+
shouldAvoidPrepare ? undefined : () => signUp.prepareEmailAddressVerification({ strategy: 'email_code' }),
3328
{
3429
name: 'prepare',
3530
strategy: 'email_code',
3631
number: signUp.emailAddress,
3732
},
3833
{
3934
staleTime: 100,
35+
onError: err => handleError(err, [], card.setError),
4036
},
4137
);
4238

packages/clerk-js/src/ui/components/SignUp/SignUpPhoneCodeCard.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,15 @@ export const SignUpPhoneCodeCard = withCardStateProvider(() => {
3636
// because the verification is already created on the Start screen
3737
shouldAvoidPrepare || isAlternativePhoneCodeProvider
3838
? undefined
39-
: () =>
40-
signUp
41-
.preparePhoneNumberVerification({ strategy: 'phone_code', channel: undefined })
42-
.catch(err => handleError(err, [], card.setError)),
39+
: () => signUp.preparePhoneNumberVerification({ strategy: 'phone_code', channel: undefined }),
4340
{
4441
name: 'signUp.preparePhoneNumberVerification',
4542
strategy: 'phone_code',
4643
number: signUp.phoneNumber,
4744
},
4845
{
4946
staleTime: 100,
47+
onError: err => handleError(err, [], card.setError),
5048
},
5149
);
5250

packages/clerk-js/src/ui/hooks/useFetch.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ export const useFetch = <K, T>(
8888
options?: {
8989
throttleTime?: number;
9090
onSuccess?: (data: T) => void;
91+
onError?: (error: Error) => void;
9192
staleTime?: number;
9293
},
9394
resourceId?: string,
@@ -166,14 +167,17 @@ export const useFetch = <K, T>(
166167
}, waitTime);
167168
}
168169
})
169-
.catch((e: Error) => {
170+
.catch((e: Error | null) => {
170171
setCache({
171172
data: getCache()?.data ?? null,
172173
isLoading: false,
173174
isValidating: false,
174175
error: e,
175176
cachedAt: Date.now(),
176177
});
178+
if (e) {
179+
options?.onError?.(e);
180+
}
177181
});
178182
}, [serialize(params), setCache, getCache, revalidateCache]);
179183

0 commit comments

Comments
 (0)