diff --git a/.changeset/sour-meals-see.md b/.changeset/sour-meals-see.md new file mode 100644 index 00000000000..01d419e101b --- /dev/null +++ b/.changeset/sour-meals-see.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-js': patch +--- + +Improve multi-session navigation to tasks diff --git a/packages/clerk-js/src/ui/components/SignIn/SignInAccountSwitcher.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInAccountSwitcher.tsx index 369f5a6a382..355cf79c9b0 100644 --- a/packages/clerk-js/src/ui/components/SignIn/SignInAccountSwitcher.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInAccountSwitcher.tsx @@ -5,7 +5,7 @@ import { Header } from '@/ui/elements/Header'; import { PreviewButton } from '@/ui/elements/PreviewButton'; import { UserPreview } from '@/ui/elements/UserPreview'; -import { withRedirectToAfterSignIn, withRedirectToSignInTask } from '../../common'; +import { withRedirectToAfterSignIn } from '../../common'; import { useEnvironment, useSignInContext, useSignOutContext } from '../../contexts'; import { Col, descriptors, Flow, localizationKeys } from '../../customizables'; import { Add, SwitchArrowRight } from '../../icons'; @@ -15,10 +15,11 @@ import { useMultisessionActions } from '../UserButton/useMultisessionActions'; const SignInAccountSwitcherInternal = () => { const card = useCardState(); const { userProfileUrl } = useEnvironment().displayConfig; - const { afterSignInUrl, path: signInPath, signInUrl } = useSignInContext(); + const { afterSignInUrl, path: signInPath, signInUrl, taskUrl } = useSignInContext(); const { navigateAfterSignOut } = useSignOutContext(); const { handleSignOutAllClicked, handleSessionClicked, signedInSessions, handleAddAccountClicked } = useMultisessionActions({ + taskUrl, navigateAfterSignOut, afterSwitchSessionUrl: afterSignInUrl, userProfileUrl, @@ -125,6 +126,4 @@ const SignInAccountSwitcherInternal = () => { ); }; -export const SignInAccountSwitcher = withRedirectToSignInTask( - withRedirectToAfterSignIn(withCardStateProvider(SignInAccountSwitcherInternal)), -); +export const SignInAccountSwitcher = withRedirectToAfterSignIn(withCardStateProvider(SignInAccountSwitcherInternal)); diff --git a/packages/clerk-js/src/ui/components/UserButton/useMultisessionActions.tsx b/packages/clerk-js/src/ui/components/UserButton/useMultisessionActions.tsx index c192b2e0684..dd3d37e9c1f 100644 --- a/packages/clerk-js/src/ui/components/UserButton/useMultisessionActions.tsx +++ b/packages/clerk-js/src/ui/components/UserButton/useMultisessionActions.tsx @@ -18,6 +18,7 @@ type UseMultisessionActionsParams = { afterSwitchSessionUrl?: string; userProfileUrl?: string; signInUrl?: string; + taskUrl?: string | null; } & Pick; export const useMultisessionActions = (opts: UseMultisessionActionsParams) => { @@ -81,6 +82,11 @@ export const useMultisessionActions = (opts: UseMultisessionActionsParams) => { return; } + if (opts.taskUrl) { + await navigate(opts.taskUrl); + return; + } + await navigateIfTaskExists(session, { baseUrl: opts.signInUrl ?? displayConfig.signInUrl, navigate,