import { formatDate } from 'date-fns'; import { BadgeCheck } from 'lucide-react'; import { BillingConfig, getProductPlanPairByVariantId } from '@kit/billing'; import { Tables } from '@kit/supabase/database'; import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@kit/ui/card'; import { If } from '@kit/ui/if'; import { Trans } from '@kit/ui/trans'; import { CurrentPlanAlert } from './current-plan-alert'; import { CurrentPlanBadge } from './current-plan-badge'; import { LineItemDetails } from './line-item-details'; type Subscription = Tables<{ schema: 'medreport' }, 'subscriptions'>; type LineItem = Tables<{ schema: 'medreport' }, 'subscription_items'>; interface Props { subscription: Subscription & { items: LineItem[]; }; config: BillingConfig; } export function CurrentSubscriptionCard({ subscription, config, }: React.PropsWithChildren) { const lineItems = subscription.items; const firstLineItem = lineItems[0]; if (!firstLineItem) { throw new Error('No line items found in subscription'); } const { product, plan } = getProductPlanPairByVariantId( config, firstLineItem.variant_id, ); if (!product || !plan) { throw new Error( 'Product or plan not found. Did you forget to add it to the billing config?', ); } const productLineItems = plan.lineItems; return (

{/* Only show the alert if the subscription requires action (e.g. trial ending soon, subscription canceled, etc.) */}
{subscription.trial_ends_at ? formatDate(subscription.trial_ends_at, 'P') : ''}
: {formatDate(subscription.period_ends_at ?? '', 'P')}
); }