From e10824c0f691f100be52aef18fd77e224c7e57c0 Mon Sep 17 00:00:00 2001 From: Keiran Flanigan Date: Sat, 3 May 2025 10:38:58 -0500 Subject: [PATCH 1/2] feat(clerk-js,localizations): Add support for switching to annual plan period of existing monthly subscription --- .../src/ui/components/Plans/PlanDetails.tsx | 69 ++++++++++++------- packages/localizations/src/en-US.ts | 1 + packages/types/src/localization.ts | 1 + 3 files changed, 45 insertions(+), 26 deletions(-) diff --git a/packages/clerk-js/src/ui/components/Plans/PlanDetails.tsx b/packages/clerk-js/src/ui/components/Plans/PlanDetails.tsx index d5c95322f00..cb4a0f9d21f 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, @@ -89,12 +90,16 @@ const _PlanDetails = ({ }); }; - 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'; } @@ -210,24 +215,36 @@ const _PlanDetails = ({ block textVariant='buttonLarge' {...buttonPropsForPlan({ plan })} - onClick={openCheckout} + onClick={() => openCheckout()} /> ) : ( -