Skip to content

Commit beb0443

Browse files
committed
Navigate to tasks from sign up context
1 parent 45a338c commit beb0443

File tree

6 files changed

+30
-16
lines changed

6 files changed

+30
-16
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ function SignUpContinueInternal() {
3838
unsafeMetadata,
3939
initialValues = {},
4040
isCombinedFlow: _isCombinedFlow,
41+
onPendingSession,
4142
} = useSignUpContext();
4243
const signUp = useCoreSignUp();
4344
const isWithinSignInContext = !!React.useContext(SignInContext);
@@ -178,7 +179,8 @@ function SignUpContinueInternal() {
178179
signUp: res,
179180
verifyEmailPath: './verify-email-address',
180181
verifyPhonePath: './verify-phone-number',
181-
handleComplete: () => clerk.setActive({ session: res.createdSessionId, redirectUrl: afterSignUpUrl }),
182+
handleComplete: () =>
183+
clerk.setActive({ session: res.createdSessionId, redirectUrl: afterSignUpUrl, onPendingSession }),
182184
navigate,
183185
oidcPrompt: ctx.oidcPrompt,
184186
}),

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export const SignUpEmailLinkCard = () => {
1717
const { t } = useLocalizations();
1818
const signUp = useCoreSignUp();
1919
const signUpContext = useSignUpContext();
20-
const { afterSignUpUrl } = signUpContext;
20+
const { afterSignUpUrl, onPendingSession } = signUpContext;
2121
const card = useCardState();
2222
const { navigate } = useRouter();
2323
const { setActive } = useClerk();
@@ -56,7 +56,8 @@ export const SignUpEmailLinkCard = () => {
5656
continuePath: '../continue',
5757
verifyEmailPath: '../verify-email-address',
5858
verifyPhonePath: '../verify-phone-number',
59-
handleComplete: () => setActive({ session: su.createdSessionId, redirectUrl: afterSignUpUrl }),
59+
handleComplete: () =>
60+
setActive({ session: su.createdSessionId, redirectUrl: afterSignUpUrl, onPendingSession }),
6061
navigate,
6162
});
6263
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function SignUpStartInternal(): JSX.Element {
4343
const { setActive } = useClerk();
4444
const ctx = useSignUpContext();
4545
const isWithinSignInContext = !!React.useContext(SignInContext);
46-
const { afterSignUpUrl, signInUrl, unsafeMetadata } = ctx;
46+
const { afterSignUpUrl, signInUrl, unsafeMetadata, onPendingSession } = ctx;
4747
const isCombinedFlow = !!(ctx.isCombinedFlow && !!isWithinSignInContext);
4848
const [activeCommIdentifierType, setActiveCommIdentifierType] = React.useState<ActiveIdentifier>(() =>
4949
getInitialActiveIdentifier(attributes, userSettings.signUp.progressive, {
@@ -166,7 +166,7 @@ function SignUpStartInternal(): JSX.Element {
166166
handleComplete: () => {
167167
removeClerkQueryParam('__clerk_ticket');
168168
removeClerkQueryParam('__clerk_invitation_token');
169-
return setActive({ session: signUp.createdSessionId, redirectUrl: afterSignUpUrl });
169+
return setActive({ session: signUp.createdSessionId, redirectUrl: afterSignUpUrl, onPendingSession });
170170
},
171171
navigate,
172172
oidcPrompt,
@@ -334,7 +334,8 @@ function SignUpStartInternal(): JSX.Element {
334334
signUp: res,
335335
verifyEmailPath: 'verify-email-address',
336336
verifyPhonePath: 'verify-phone-number',
337-
handleComplete: () => setActive({ session: res.createdSessionId, redirectUrl: afterSignUpUrl }),
337+
handleComplete: () =>
338+
setActive({ session: res.createdSessionId, redirectUrl: afterSignUpUrl, onPendingSession }),
338339
navigate,
339340
redirectUrl,
340341
redirectUrlComplete,

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type SignInFactorOneCodeFormProps = {
2424
};
2525

2626
export const SignUpVerificationCodeForm = (props: SignInFactorOneCodeFormProps) => {
27-
const { afterSignUpUrl } = useSignUpContext();
27+
const { afterSignUpUrl, onPendingSession } = useSignUpContext();
2828
const { setActive } = useClerk();
2929
const { navigate } = useRouter();
3030

@@ -43,7 +43,8 @@ export const SignUpVerificationCodeForm = (props: SignInFactorOneCodeFormProps)
4343
verifyEmailPath: '../verify-email-address',
4444
verifyPhonePath: '../verify-phone-number',
4545
continuePath: '../continue',
46-
handleComplete: () => setActive({ session: res.createdSessionId, redirectUrl: afterSignUpUrl }),
46+
handleComplete: () =>
47+
setActive({ session: res.createdSessionId, redirectUrl: afterSignUpUrl, onPendingSession }),
4748
navigate,
4849
});
4950
})

packages/clerk-js/src/ui/contexts/components/SignIn.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ import { isAbsoluteUrl } from '@clerk/shared/url';
33
import type { OnPendingSessionFn } from '@clerk/types';
44
import { createContext, useContext, useMemo } from 'react';
55

6-
import { navigateToTask } from '@/core/sessionTasks';
7-
86
import { SIGN_IN_INITIAL_VALUE_KEYS } from '../../../core/constants';
97
import { buildURL } from '../../../utils';
108
import { RedirectUrls } from '../../../utils/redirectUrls';
@@ -120,13 +118,11 @@ export const useSignInContext = (): SignInContextType => {
120118
const signUpContinueUrl = buildURL({ base: signUpUrl, hashPath: '/continue' }, { stringify: true });
121119

122120
const onPendingSession: OnPendingSessionFn = async ({ session }) => {
123-
switch (session.currentTask?.key) {
121+
const currentTaskKey = session.currentTask.key;
122+
123+
switch (currentTaskKey) {
124124
case 'choose-organization': {
125-
// TODO - preserve redirect_url
126-
await navigateToTask(session, {
127-
navigate,
128-
baseUrl: signInUrl,
129-
});
125+
await navigate(`../tasks/${currentTaskKey}`);
130126
}
131127
}
132128
};

packages/clerk-js/src/ui/contexts/components/SignUp.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useClerk } from '@clerk/shared/react';
22
import { isAbsoluteUrl } from '@clerk/shared/url';
3+
import type { OnPendingSessionFn } from '@clerk/types';
34
import { createContext, useContext, useMemo } from 'react';
45

56
import { SIGN_UP_INITIAL_VALUE_KEYS } from '../../../core/constants';
@@ -25,6 +26,7 @@ export type SignUpContextType = Omit<SignUpCtx, 'fallbackRedirectUrl' | 'forceRe
2526
isCombinedFlow: boolean;
2627
emailLinkRedirectUrl: string;
2728
ssoCallbackUrl: string;
29+
onPendingSession: OnPendingSessionFn;
2830
};
2931

3032
export const SignUpContext = createContext<SignUpCtx | null>(null);
@@ -110,6 +112,16 @@ export const useSignUpContext = (): SignUpContextType => {
110112
// TODO: Avoid building this url again to remove duplicate code. Get it from window.Clerk instead.
111113
const secondFactorUrl = buildURL({ base: signInUrl, hashPath: '/factor-two' }, { stringify: true });
112114

115+
const onPendingSession: OnPendingSessionFn = async ({ session }) => {
116+
const currentTaskKey = session.currentTask.key;
117+
118+
switch (currentTaskKey) {
119+
case 'choose-organization': {
120+
await navigate(`../tasks/${currentTaskKey}`);
121+
}
122+
}
123+
};
124+
113125
return {
114126
...ctx,
115127
oauthFlow: ctx.oauthFlow || 'auto',
@@ -127,5 +139,6 @@ export const useSignUpContext = (): SignUpContextType => {
127139
initialValues: { ...ctx.initialValues, ...initialValuesFromQueryParams },
128140
authQueryString,
129141
isCombinedFlow,
142+
onPendingSession,
130143
};
131144
};

0 commit comments

Comments
 (0)