import { PermissionAction, SupportCategories } from '@supabase/shared-types/out/constants' import { useFlag, useParams } from 'common' import Link from 'next/link' import { Button } from 'ui' import { Admonition } from 'ui-patterns/admonition' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' import { ProjectUpdateDisabledTooltip } from '../ProjectUpdateDisabledTooltip' import { Restriction } from '../Restriction' import { PlanUpdateSidePanel } from './PlanUpdateSidePanel' import { SupportLink } from '@/components/interfaces/Support/SupportLink' import { ScaffoldSection, ScaffoldSectionContent, ScaffoldSectionDetail, } from '@/components/layouts/Scaffold' import AlertError from '@/components/ui/AlertError' import NoPermission from '@/components/ui/NoPermission' import { useOrgSubscriptionQuery } from '@/data/subscriptions/org-subscription-query' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' import { useOrgSettingsPageStateSnapshot } from '@/state/organization-settings' const Subscription = () => { const { slug } = useParams() const snap = useOrgSettingsPageStateSnapshot() const projectUpdateDisabled = useFlag('disableProjectCreationAndUpdate') const { isSuccess: isPermissionsLoaded, can: canReadSubscriptions } = useAsyncCheckPermissions( PermissionAction.BILLING_READ, 'stripe.subscriptions' ) const { data: subscription, error, isPending: isLoading, isError, isSuccess, } = useOrgSubscriptionQuery({ orgSlug: slug }, { enabled: canReadSubscriptions }) const currentPlan = subscription?.plan const planName = currentPlan?.name ?? 'Unknown' const canChangeTier = !projectUpdateDisabled && !['enterprise', 'platform'].includes(currentPlan?.id ?? '') return ( <> Subscription Plan Each organization has it's own subscription plan, billing cycle, payment methods and usage quotas. {isPermissionsLoaded && !canReadSubscriptions ? ( ) : ( <> {isLoading && ( )} {isError && } {isSuccess && ( {currentPlan?.name ?? 'Unknown'} Plan {canChangeTier ? ( snap.setPanelKey('subscriptionPlan')} > Change subscription plan ) : projectUpdateDisabled ? ( ) : ( Contact support } /> )} {!subscription?.usage_billing_enabled && ( Projects may become unresponsive when this organization exceeds its{' '} included usage quota. To scale seamlessly,{' '} {currentPlan?.id === 'free' ? 'upgrade to a paid plan.' : 'you can disable Spend Cap under the Cost Control settings.'} )} )} > )} > ) } export default Subscription
Subscription Plan
Each organization has it's own subscription plan, billing cycle, payment methods and usage quotas.
{currentPlan?.name ?? 'Unknown'} Plan