@@ -5,6 +5,7 @@ import { useQueryClient } from '@tanstack/react-query'
55import { useParams , useRouter } from 'next/navigation'
66import { Chip } from '@/components/emcn'
77import { Credit } from '@/components/emcn/icons'
8+ import { ON_DEMAND_UNLIMITED } from '@/lib/billing/constants'
89import { formatCredits } from '@/lib/billing/credits/conversion'
910import { isBillingEnabled } from '@/app/workspace/[workspaceId]/settings/navigation'
1011import { prefetchUpgradeBillingData , useSubscriptionData } from '@/hooks/queries/subscription'
@@ -34,15 +35,25 @@ function CreditsChipInner() {
3435
3536 if ( isLoading || ! data ?. data ) return null
3637
38+ const { usageLimit, currentUsage, creditBalance } = data . data
39+
40+ // Credits remaining = unused plan allowance plus any purchased credit balance.
41+ // Uncapped plans (limit at/above the on-demand threshold) render as ∞ via
42+ // `formatCredits`, so short-circuit instead of subtracting usage from it.
43+ const remainingCredits =
44+ usageLimit >= ON_DEMAND_UNLIMITED
45+ ? ON_DEMAND_UNLIMITED
46+ : Math . max ( 0 , usageLimit + creditBalance - currentUsage )
47+
3748 return (
3849 < Chip
39- aria-label = 'Upgrade plan'
50+ aria-label = 'Credits remaining — upgrade plan'
4051 onClick = { ( ) => router . push ( upgradeHref ) }
4152 onMouseEnter = { prefetchUpgrade }
4253 onFocus = { prefetchUpgrade }
4354 leftIcon = { Credit }
4455 >
45- { formatCredits ( data . data . creditBalance ) }
56+ { formatCredits ( remainingCredits ) }
4657 </ Chip >
4758 )
4859}
0 commit comments