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 ? ( ) : 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