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 })), +);