import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import { useInView } from 'react-intersection-observer' import { CreditCodeRedemption } from './CreditCodeRedemption' import { CreditTopUp } from './CreditTopUp' import { ScaffoldSection, ScaffoldSectionContent, ScaffoldSectionDetail, } from '@/components/layouts/Scaffold' import AlertError from '@/components/ui/AlertError' import { FormPanel } from '@/components/ui/Forms/FormPanel' import { FormSection, FormSectionContent } from '@/components/ui/Forms/FormSection' import NoPermission from '@/components/ui/NoPermission' import { useOrgBalanceQuery } from '@/data/subscriptions/org-balance-query' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' const CreditBalance = () => { const { slug } = useParams() const { isSuccess: isPermissionsLoaded, can: canReadSubscriptions } = useAsyncCheckPermissions( PermissionAction.BILLING_READ, 'stripe.subscriptions' ) const { ref, inView } = useInView({ triggerOnce: true }) // Endpoint is expensive, so we only load it if it's in view const { data: balanceData, error: balanceError, isPending: isBalanceLoading, isError: isBalanceError, isSuccess: isBalanceSuccess, } = useOrgBalanceQuery({ orgSlug: slug }, { enabled: canReadSubscriptions && inView }) const combinedCreditBalanceCents = balanceData?.total_balance_cents ?? 0 const combinedCreditBalance = combinedCreditBalanceCents / 100 const hasCredits = combinedCreditBalanceCents > 0 const hasDebt = combinedCreditBalanceCents < 0 const balance = Math.abs(combinedCreditBalance).toFixed(2) return (

Credit Balance

Credits will be applied to future invoices, before charging your payment method. This balance includes purchased credits and any prorated credits from plan changes.

If your credits run out, your default payment method will be charged.

{isPermissionsLoaded && !canReadSubscriptions ? ( ) : ( ) } > {isBalanceError && ( )} {isBalanceSuccess && (
Balance
{hasDebt &&

-

}

$

{balance}

{hasCredits &&

/credits

}
)}
)}
) } export default CreditBalance