Skip to content

Commit 1df4b8a

Browse files
committed
refactor(clerk-js): Simplify plans action localization logic
1 parent 51ccfc6 commit 1df4b8a

File tree

2 files changed

+48
-17
lines changed

2 files changed

+48
-17
lines changed

packages/clerk-js/src/ui/components/PricingTable/PricingTableDefault.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,17 @@ function Card(props: CardProps) {
121121
const hasFeatures = plan.features.length > 0;
122122
const isPlanActive = subscription?.status === 'active';
123123
const showStatusRow = !!subscription;
124-
const isEligibleForSwitchToAnnual = plan.annualMonthlyAmount > 0 && planPeriod === 'annual';
124+
const isEligibleForSwitch = planPeriod !== subscription?.planPeriod && !plan.isDefault;
125+
const isEligibleForSwitchToAnnual = isEligibleForSwitch && plan.annualMonthlyAmount > 0 && planPeriod === 'annual';
126+
const isEligibleForSwitchToMonthly = isEligibleForSwitch && planPeriod === 'month';
125127

126128
const shouldShowFooter =
127129
!subscription ||
128130
subscription?.status === 'upcoming' ||
129131
subscription?.canceledAt ||
130-
(planPeriod !== subscription?.planPeriod && !plan.isDefault && isEligibleForSwitchToAnnual);
132+
isEligibleForSwitchToAnnual ||
133+
isEligibleForSwitchToMonthly;
134+
131135
const shouldShowFooterNotice =
132136
subscription?.status === 'upcoming' && (planPeriod === subscription.planPeriod || plan.isDefault);
133137

packages/clerk-js/src/ui/contexts/components/Plans.tsx

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -217,27 +217,54 @@ export const usePlansContext = () => {
217217

218218
const isEligibleForSwitchToAnnual = (plan?.annualMonthlyAmount ?? 0) > 0;
219219

220+
const getLocalizationKey = () => {
221+
// Handle subscription cases
222+
if (subscription) {
223+
if (selectedPlanPeriod !== subscription.planPeriod && subscription.canceledAt) {
224+
if (selectedPlanPeriod === 'month') {
225+
return localizationKeys('commerce.switchToMonthly');
226+
}
227+
228+
if (isEligibleForSwitchToAnnual) {
229+
return localizationKeys('commerce.switchToAnnual');
230+
}
231+
}
232+
233+
if (subscription.canceledAt) {
234+
return localizationKeys('commerce.reSubscribe');
235+
}
236+
237+
if (selectedPlanPeriod !== subscription.planPeriod) {
238+
if (selectedPlanPeriod === 'month') {
239+
return localizationKeys('commerce.switchToMonthly');
240+
}
241+
242+
if (isEligibleForSwitchToAnnual) {
243+
return localizationKeys('commerce.switchToAnnual');
244+
}
245+
246+
return localizationKeys('commerce.manageSubscription');
247+
}
248+
249+
return localizationKeys('commerce.manageSubscription');
250+
}
251+
252+
// Handle non-subscription cases
253+
const hasNonDefaultSubscriptions =
254+
ctx.subscriptions.filter(subscription => !subscription.plan.isDefault).length > 0;
255+
return hasNonDefaultSubscriptions
256+
? localizationKeys('commerce.switchPlan')
257+
: localizationKeys('commerce.subscribe');
258+
};
259+
220260
return {
221-
localizationKey: subscription
222-
? subscription.canceledAt
223-
? localizationKeys('commerce.reSubscribe')
224-
: selectedPlanPeriod !== subscription.planPeriod
225-
? selectedPlanPeriod === 'month'
226-
? localizationKeys('commerce.switchToMonthly')
227-
: isEligibleForSwitchToAnnual
228-
? localizationKeys('commerce.switchToAnnual')
229-
: localizationKeys('commerce.manageSubscription')
230-
: localizationKeys('commerce.manageSubscription')
231-
: // If there are no active or grace period subscriptions, show the get started button
232-
ctx.subscriptions.filter(subscription => !subscription.plan.isDefault).length > 0
233-
? localizationKeys('commerce.switchPlan')
234-
: localizationKeys('commerce.subscribe'),
261+
localizationKey: getLocalizationKey(),
235262
variant: isCompact ? 'bordered' : 'solid',
236263
colorScheme: isCompact ? 'secondary' : 'primary',
237264
isDisabled: !canManageBilling,
238265
};
239266
},
240-
[activeOrUpcomingSubscription],
267+
[activeOrUpcomingSubscription, canManageBilling, ctx.subscriptions],
241268
);
242269

243270
const captionForSubscription = useCallback((subscription: CommerceSubscriptionResource) => {

0 commit comments

Comments
 (0)