Skip to content

Commit e57aa2c

Browse files
LauraBeatrisjacekradko
authored andcommitted
fix(clerk-js): Navigate to tasks on sso-callback route (#6324)
1 parent 0bf15ce commit e57aa2c

File tree

4 files changed

+48
-5
lines changed

4 files changed

+48
-5
lines changed

.changeset/thirty-experts-knock.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+
Navigate to tasks on `sso-callback` route

integration/tests/session-tasks-sign-up.test.ts

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasks] })(
1111

1212
let fakeUser: FakeUser;
1313

14-
test.beforeAll(() => {
14+
test.beforeEach(() => {
1515
const u = createTestUtils({ app });
1616
fakeUser = u.services.users.createFakeUser({
1717
fictionalEmail: true,
@@ -27,6 +27,12 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasks] })(
2727
await app.teardown();
2828
});
2929

30+
test.afterEach(async ({ page, context }) => {
31+
const u = createTestUtils({ app, page, context });
32+
await u.page.signOut();
33+
await u.page.context().clearCookies();
34+
});
35+
3036
test('navigate to task on after sign-up', async ({ page, context }) => {
3137
// Performs sign-up
3238
const u = createTestUtils({ app, page, context });
@@ -51,5 +57,31 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasks] })(
5157
// Navigates to after sign-up
5258
await u.page.waitForAppUrl('/');
5359
});
60+
61+
test('with sso, navigate to task on after sign-up', async ({ page, context }) => {
62+
const u = createTestUtils({ app, page, context });
63+
64+
await u.po.signUp.goTo();
65+
await u.page.getByRole('button', { name: 'E2E OAuth Provider' }).click();
66+
67+
await u.po.signIn.waitForMounted();
68+
await u.po.signIn.getGoToSignUp().click();
69+
70+
await u.po.signUp.waitForMounted();
71+
await u.po.signUp.setEmailAddress(fakeUser.email);
72+
await u.po.signUp.continue();
73+
await u.po.signUp.enterTestOtpCode();
74+
75+
// Resolves task
76+
await u.po.signIn.waitForMounted();
77+
const fakeOrganization = Object.assign(u.services.organizations.createFakeOrganization(), {
78+
slug: u.services.organizations.createFakeOrganization().slug + '-with-sign-in-sso',
79+
});
80+
await u.po.sessionTask.resolveForceOrganizationSelectionTask(fakeOrganization);
81+
await u.po.expect.toHaveResolvedTask();
82+
83+
// Navigates to after sign-up
84+
await u.page.waitForAppUrl('/');
85+
});
5486
},
5587
);

packages/clerk-js/bundlewatch.config.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
22
"files": [
3-
{ "path": "./dist/clerk.js", "maxSize": "616.27KB" },
3+
{ "path": "./dist/clerk.js", "maxSize": "618KB" },
44
{ "path": "./dist/clerk.browser.js", "maxSize": "72.2KB" },
55
{ "path": "./dist/clerk.legacy.browser.js", "maxSize": "115.08KB" },
66
{ "path": "./dist/clerk.headless*.js", "maxSize": "55KB" },
7-
{ "path": "./dist/ui-common*.js", "maxSize": "111.57KB" },
8-
{ "path": "./dist/ui-common*.legacy.*.js", "maxSize": "115.38KB" },
7+
{ "path": "./dist/ui-common*.js", "maxSize": "113KB" },
8+
{ "path": "./dist/ui-common*.legacy.*.js", "maxSize": "118KB" },
99
{ "path": "./dist/vendors*.js", "maxSize": "40.2KB" },
1010
{ "path": "./dist/coinbase*.js", "maxSize": "38KB" },
1111
{ "path": "./dist/stripe-vendors*.js", "maxSize": "1KB" },

packages/clerk-js/src/ui/common/SSOCallback.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,19 @@ export const SSOCallback = withCardStateProvider<HandleOAuthCallbackParams | Han
1919
});
2020

2121
export const SSOCallbackCard = (props: HandleOAuthCallbackParams | HandleSamlCallbackParams) => {
22-
const { handleRedirectCallback, __internal_setActiveInProgress } = useClerk();
22+
const { handleRedirectCallback, __internal_setActiveInProgress, __internal_navigateToTaskIfAvailable, session } =
23+
useClerk();
2324
const { navigate } = useRouter();
2425
const card = useCardState();
2526

2627
React.useEffect(() => {
2728
let timeoutId: ReturnType<typeof setTimeout>;
2829
if (__internal_setActiveInProgress !== true) {
30+
if (session?.currentTask) {
31+
void __internal_navigateToTaskIfAvailable();
32+
return;
33+
}
34+
2935
const intent = new URLSearchParams(window.location.search).get('intent');
3036
const reloadResource = intent === 'signIn' || intent === 'signUp' ? intent : undefined;
3137
handleRedirectCallback({ ...props, reloadResource }, navigate).catch(e => {

0 commit comments

Comments
 (0)