import { ExclamationTriangleIcon } from '@radix-ui/react-icons'; import { resolveProductPlan } from '@kit/billing-gateway'; import { BillingPortalCard, CurrentLifetimeOrderCard, CurrentSubscriptionCard, } from '@kit/billing-gateway/components'; import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert'; import { AppBreadcrumbs } from '@kit/ui/app-breadcrumbs'; import { If } from '@kit/ui/if'; import { PageBody } from '@kit/ui/page'; import { Trans } from '@kit/ui/trans'; import { cn } from '@kit/ui/utils'; import billingConfig from '~/config/billing.config'; import { createI18nServerInstance } from '~/lib/i18n/i18n.server'; import { withI18n } from '~/lib/i18n/with-i18n'; // local imports import { TeamAccountLayoutPageHeader } from '../_components/team-account-layout-page-header'; import { loadTeamAccountBillingPage } from '../_lib/server/team-account-billing-page.loader'; import { loadTeamWorkspace } from '../_lib/server/team-account-workspace.loader'; import { TeamAccountCheckoutForm } from './_components/team-account-checkout-form'; import { createBillingPortalSession } from './_lib/server/server-actions'; interface TeamAccountBillingPageProps { params: Promise<{ account: string }>; } export const generateMetadata = async () => { const i18n = await createI18nServerInstance(); const title = i18n.t('teams:billing.pageTitle'); return { title, }; }; async function TeamAccountBillingPage({ params }: TeamAccountBillingPageProps) { const account = (await params).account; const workspace = await loadTeamWorkspace(account); const accountId = workspace.account.id; const [subscription, order, customerId] = await loadTeamAccountBillingPage(accountId); const variantId = subscription?.items[0]?.variant_id; const orderVariantId = order?.items[0]?.variant_id; const subscriptionProductPlan = variantId ? await resolveProductPlan(billingConfig, variantId, subscription.currency) : undefined; const orderProductPlan = orderVariantId ? await resolveProductPlan(billingConfig, orderVariantId, order.currency) : undefined; const hasBillingData = subscription || order; const canManageBilling = workspace.account.permissions.includes('billing.manage'); const shouldShowBillingPortal = canManageBilling && customerId; return ( <> } description={} />
} > {(subscription) => { return ( ); }} {(order) => { return ( ); }} {shouldShowBillingPortal ? ( ) : null}
); } export default withI18n(TeamAccountBillingPage); function CannotManageBillingAlert() { return ( ); } function BillingPortalForm({ accountId, account, }: { accountId: string; account: string; }) { return (
); }