diff --git a/.changeset/sad-teeth-argue.md b/.changeset/sad-teeth-argue.md new file mode 100644 index 00000000000..2239be50aa7 --- /dev/null +++ b/.changeset/sad-teeth-argue.md @@ -0,0 +1,7 @@ +--- +'@clerk/localizations': patch +'@clerk/clerk-js': patch +'@clerk/types': patch +--- + +Allow switching from an existing monthly subscription to an annual subscription for the same plan diff --git a/packages/clerk-js/src/ui/components/Plans/PlanDetails.tsx b/packages/clerk-js/src/ui/components/Plans/PlanDetails.tsx index 0570238c163..8c0f2e74b74 100644 --- a/packages/clerk-js/src/ui/components/Plans/PlanDetails.tsx +++ b/packages/clerk-js/src/ui/components/Plans/PlanDetails.tsx @@ -15,6 +15,7 @@ import { Badge, Box, Button, + Col, descriptors, Flex, Heading, @@ -90,12 +91,16 @@ const PlanDetailsInternal = ({ }); }; - const openCheckout = () => { + type OpenCheckoutProps = { + planPeriod?: __experimental_CommerceSubscriptionPlanPeriod; + }; + + const openCheckout = (props?: OpenCheckoutProps) => { handleClose(); // if the plan doesn't support annual, use monthly - let _planPeriod = planPeriod; - if (planPeriod === 'annual' && plan.annualMonthlyAmount === 0) { + let _planPeriod = props?.planPeriod || planPeriod; + if (_planPeriod === 'annual' && plan.annualMonthlyAmount === 0) { _planPeriod = 'month'; } @@ -211,24 +216,36 @@ const PlanDetailsInternal = ({ block textVariant='buttonLarge' {...buttonPropsForPlan({ plan })} - onClick={openCheckout} + onClick={() => openCheckout()} /> ) : ( -