diff --git a/.changeset/puny-dancers-worry.md b/.changeset/puny-dancers-worry.md
new file mode 100644
index 00000000000..445828cd107
--- /dev/null
+++ b/.changeset/puny-dancers-worry.md
@@ -0,0 +1,5 @@
+---
+'@clerk/clerk-js': patch
+---
+
+Bug fix: Checkout drawer not opening after user selected another account from UserButton.
diff --git a/packages/clerk-js/src/ui/Components.tsx b/packages/clerk-js/src/ui/Components.tsx
index b80b7bc3595..156b0d30b09 100644
--- a/packages/clerk-js/src/ui/Components.tsx
+++ b/packages/clerk-js/src/ui/Components.tsx
@@ -26,7 +26,6 @@ import { useClerkModalStateParams } from './hooks/useClerkModalStateParams';
import type { ClerkComponentName } from './lazyModules/components';
import {
BlankCaptchaModal,
- Checkout,
CreateOrganizationModal,
ImpersonationFab,
KeylessPrompt,
@@ -34,14 +33,13 @@ import {
preloadComponent,
SignInModal,
SignUpModal,
- SubscriptionDetails,
UserProfileModal,
UserVerificationModal,
WaitlistModal,
} from './lazyModules/components';
+import { MountedCheckoutDrawer, MountedSubscriptionDetailDrawer } from './lazyModules/drawers';
import {
LazyComponentRenderer,
- LazyDrawerRenderer,
LazyImpersonationFabProvider,
LazyModalRenderer,
LazyOneTapRenderer,
@@ -543,45 +541,6 @@ const Components = (props: ComponentsProps) => {
);
- const mountedCheckoutDrawer = checkoutDrawer.props && (
- componentsControls.closeDrawer('checkout')}
- componentName={'Checkout'}
- portalId={checkoutDrawer.props.portalId}
- >
-
-
- );
-
- const mountedSubscriptionDetailDrawer = subscriptionDetailsDrawer.props && (
- componentsControls.closeDrawer('subscriptionDetails')}
- componentName={'SubscriptionDetails'}
- portalId={subscriptionDetailsDrawer.props.portalId}
- >
- {})}
- />
-
- );
-
return (
{
{createOrganizationModal && mountedCreateOrganizationModal}
{waitlistModal && mountedWaitlistModal}
{blankCaptchaModal && mountedBlankCaptchaModal}
- {mountedCheckoutDrawer}
- {mountedSubscriptionDetailDrawer}
+
+ componentsControls.closeDrawer('checkout')}
+ />
+
+ componentsControls.closeDrawer('subscriptionDetails')}
+ />
+
{state.impersonationFab && (
diff --git a/packages/clerk-js/src/ui/lazyModules/MountedCheckoutDrawer.tsx b/packages/clerk-js/src/ui/lazyModules/MountedCheckoutDrawer.tsx
new file mode 100644
index 00000000000..36900687c79
--- /dev/null
+++ b/packages/clerk-js/src/ui/lazyModules/MountedCheckoutDrawer.tsx
@@ -0,0 +1,48 @@
+import { useUser } from '@clerk/shared/react';
+import type { __experimental_CheckoutProps, Appearance } from '@clerk/types';
+
+import { Checkout } from './components';
+import { LazyDrawerRenderer } from './providers';
+
+export function MountedCheckoutDrawer({
+ appearance,
+ checkoutDrawer,
+ onOpenChange,
+}: {
+ appearance?: Appearance;
+ onOpenChange: (open: boolean) => void;
+ checkoutDrawer: {
+ open: false;
+ props: null | __experimental_CheckoutProps;
+ };
+}) {
+ const { user } = useUser();
+ if (!checkoutDrawer.props) {
+ return null;
+ }
+
+ return (
+
+ {checkoutDrawer.props && (
+
+ )}
+
+ );
+}
diff --git a/packages/clerk-js/src/ui/lazyModules/MountedSubscriptionDetailDrawer.tsx b/packages/clerk-js/src/ui/lazyModules/MountedSubscriptionDetailDrawer.tsx
new file mode 100644
index 00000000000..d6aded1e802
--- /dev/null
+++ b/packages/clerk-js/src/ui/lazyModules/MountedSubscriptionDetailDrawer.tsx
@@ -0,0 +1,45 @@
+import { useUser } from '@clerk/shared/react';
+import type { __experimental_SubscriptionDetailsProps, Appearance } from '@clerk/types';
+
+import { SubscriptionDetails } from './components';
+import { LazyDrawerRenderer } from './providers';
+
+export function MountedSubscriptionDetailDrawer({
+ appearance,
+ subscriptionDetailsDrawer,
+ onOpenChange,
+}: {
+ appearance?: Appearance;
+ onOpenChange: (open: boolean) => void;
+ subscriptionDetailsDrawer: {
+ open: false;
+ props: null | __experimental_SubscriptionDetailsProps;
+ };
+}) {
+ const { user } = useUser();
+ if (!subscriptionDetailsDrawer.props) {
+ return null;
+ }
+
+ return (
+
+ {})}
+ />
+
+ );
+}
diff --git a/packages/clerk-js/src/ui/lazyModules/drawers.tsx b/packages/clerk-js/src/ui/lazyModules/drawers.tsx
new file mode 100644
index 00000000000..5e083bf467b
--- /dev/null
+++ b/packages/clerk-js/src/ui/lazyModules/drawers.tsx
@@ -0,0 +1,8 @@
+import { lazy } from 'react';
+
+export const MountedCheckoutDrawer = lazy(() =>
+ import('./MountedCheckoutDrawer').then(module => ({ default: module.MountedCheckoutDrawer })),
+);
+export const MountedSubscriptionDetailDrawer = lazy(() =>
+ import('./MountedSubscriptionDetailDrawer').then(module => ({ default: module.MountedSubscriptionDetailDrawer })),
+);