Skip to content

Commit c0028b2

Browse files
committed
Navigate to next task if any from AIOs
1 parent 07f87f8 commit c0028b2

File tree

4 files changed

+17
-5
lines changed

4 files changed

+17
-5
lines changed

packages/clerk-js/src/ui/components/SessionTasks/index.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useClerk } from '@clerk/shared/react';
22
import { eventComponentMounted } from '@clerk/shared/telemetry';
3+
import type { SetActiveNavigate } from '@clerk/types';
34
import { useContext, useEffect, useRef } from 'react';
45

56
import { Card } from '@/ui/elements/Card';
@@ -27,7 +28,6 @@ const SessionTasksStart = () => {
2728
const currentTaskKey = clerk.session?.currentTask?.key;
2829
if (!currentTaskKey) return;
2930

30-
// TODO -> Fix navigation here
3131
void navigate(`./${INTERNAL_SESSION_TASK_ROUTE_BY_KEY[currentTaskKey]}`);
3232
}, 500);
3333
return () => clearTimeout(timeoutId);
@@ -106,8 +106,17 @@ export const SessionTasks = withCardStateProvider(() => {
106106
);
107107
}
108108

109+
const onPendingSession: SetActiveNavigate = async ({ session }) => {
110+
const currentTaskKey = session.currentTask?.key;
111+
if (!currentTaskKey) {
112+
return;
113+
}
114+
115+
return navigate(`./${currentTaskKey}`);
116+
};
117+
109118
return (
110-
<SessionTasksContext.Provider value={{ redirectUrlComplete, currentTaskContainer }}>
119+
<SessionTasksContext.Provider value={{ redirectUrlComplete, currentTaskContainer, onPendingSession }}>
111120
<SessionTasksRoutes />
112121
</SessionTasksContext.Provider>
113122
);

packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export const ChooseOrganizationScreen = withCardStateProvider(
9797

9898
const MembershipPreview = withCardStateProvider((props: { organization: OrganizationResource }) => {
9999
const card = useCardState();
100-
const { redirectUrlComplete } = useSessionTasksContext();
100+
const { redirectUrlComplete, onPendingSession } = useSessionTasksContext();
101101
const { isLoaded, setActive } = useOrganizationList();
102102

103103
if (!isLoaded) {
@@ -109,6 +109,7 @@ const MembershipPreview = withCardStateProvider((props: { organization: Organiza
109109
await setActive({
110110
organization,
111111
redirectUrl: redirectUrlComplete,
112+
navigate: onPendingSession,
112113
});
113114
});
114115
};

packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type CreateOrganizationScreenProps = {
1919

2020
export const CreateOrganizationScreen = withCardStateProvider((props: CreateOrganizationScreenProps) => {
2121
const card = useCardState();
22-
const { redirectUrlComplete } = useSessionTasksContext();
22+
const { redirectUrlComplete, onPendingSession } = useSessionTasksContext();
2323
const { createOrganization, isLoaded, setActive } = useOrganizationList({
2424
userMemberships: organizationListParams.userMemberships,
2525
});
@@ -45,7 +45,7 @@ export const CreateOrganizationScreen = withCardStateProvider((props: CreateOrga
4545
try {
4646
const organization = await createOrganization({ name: nameField.value, slug: slugField.value });
4747

48-
await setActive({ organization, redirectUrl: redirectUrlComplete });
48+
await setActive({ organization, redirectUrl: redirectUrlComplete, navigate: onPendingSession });
4949
} catch (err) {
5050
handleError(err, [nameField, slugField], card.setError);
5151
}

packages/clerk-js/src/ui/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import type {
1212
OrganizationProfileProps,
1313
OrganizationSwitcherProps,
1414
PricingTableProps,
15+
SetActiveNavigate,
1516
SignInFallbackRedirectUrl,
1617
SignInForceRedirectUrl,
1718
SignInProps,
@@ -136,6 +137,7 @@ export type CheckoutCtx = __internal_CheckoutProps & {
136137
export type SessionTasksCtx = {
137138
redirectUrlComplete: string;
138139
currentTaskContainer?: React.RefObject<HTMLDivElement> | null;
140+
onPendingSession?: SetActiveNavigate;
139141
};
140142

141143
export type TaskChooseOrganizationCtx = TaskChooseOrganizationProps & {

0 commit comments

Comments
 (0)