@blocklet/payment-react
Version:
Reusable react components for payment kit v2
31 lines (25 loc) • 1.06 kB
text/typescript
import type { TCheckoutSessionExpanded, TLineItemExpanded } from '@blocklet/payment-types';
import type { CheckoutScenario } from '../types';
export function detectScenario(
session: TCheckoutSessionExpanded | null | undefined,
items: TLineItemExpanded[]
): CheckoutScenario {
if (!session) return 'composite';
const isSingleItem = items.length === 1;
const isPaymentMode = session.mode === 'payment';
const isSubscriptionMode = ['subscription', 'setup'].includes(session.mode || '');
// Credit: single item + payment mode + product.type=credit + metadata.credit_config
if (isSingleItem && isPaymentMode) {
const item = items[0];
const product = (item as any).price?.product;
if (product?.type === 'credit' && (item as any).price?.metadata?.credit_config) {
return 'credit-topup';
}
}
// Subscription: single item + subscription/setup + no cross-sell
if (isSingleItem && isSubscriptionMode && !items.some((i: any) => i.cross_sell)) {
return 'subscription';
}
// Default: composite
return 'composite';
}