mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-22 07:44:11 +00:00
feat: pass target tier to billing portal for subscription updates (#7692)
## Summary Pass target tier to billing portal API for deep linking to Stripe's subscription update confirmation screen when user has an active subscription. ## Changes - **What**: When a user with an active subscription clicks a tier in PricingTable, pass the target tier (including billing cycle) to `accessBillingPortal` which sends it as `target_tier` in the request body. This enables the backend to create a Stripe billing portal deep link directly to the subscription update confirmation screen. - **Dependencies**: Requires comfy-api PR for `POST /customers/billing` `target_tier` support ## Review Focus - PricingTable now differentiates between new subscriptions (checkout flow) and existing subscriptions (billing portal with deep link) - Type derivation uses `Parameters<typeof authStore.accessBillingPortal>[0]` to avoid duplicating the tier union (matches codebase pattern) - Registry types manually updated to include `target_tier` field (will be regenerated when API is deployed) ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7692-feat-pass-target-tier-to-billing-portal-for-subscription-updates-2d06d73d365081b38fe4c81e95dce58c) by [Unito](https://www.unito.io) --------- Co-authored-by: Christian Byrne <cbyrne@comfy.org> Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
@@ -333,7 +333,7 @@ const { n } = useI18n()
|
||||
const { getAuthHeader } = useFirebaseAuthStore()
|
||||
const { isActiveSubscription, subscriptionTier, isYearlySubscription } =
|
||||
useSubscription()
|
||||
const { reportError } = useFirebaseAuthActions()
|
||||
const { accessBillingPortal, reportError } = useFirebaseAuthActions()
|
||||
const { wrapWithErrorHandlingAsync } = useErrorHandling()
|
||||
|
||||
const isLoading = ref(false)
|
||||
@@ -443,9 +443,15 @@ const handleSubscribe = wrapWithErrorHandlingAsync(
|
||||
loadingTier.value = tierKey
|
||||
|
||||
try {
|
||||
const response = await initiateCheckout(tierKey)
|
||||
if (response.checkout_url) {
|
||||
window.open(response.checkout_url, '_blank')
|
||||
if (isActiveSubscription.value) {
|
||||
// Pass the target tier to create a deep link to subscription update confirmation
|
||||
const checkoutTier = getCheckoutTier(tierKey, currentBillingCycle.value)
|
||||
await accessBillingPortal(checkoutTier)
|
||||
} else {
|
||||
const response = await initiateCheckout(tierKey)
|
||||
if (response.checkout_url) {
|
||||
window.open(response.checkout_url, '_blank')
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
isLoading.value = false
|
||||
|
||||
Reference in New Issue
Block a user