import { UserSubscription } from './models/user-subscription'; import { resolvePrintOfferName } from './helpers/offer'; export class OfferNameResolver { /** * Attempt to resolve to an offer name without specifying an Offer ID * @param subscription A UserSubscription instance * @param isTrialist Whether the user is still a trialist */ static resolveBySubscription(subscription: UserSubscription | null, isTrialist: boolean): string | undefined { if (!subscription) return undefined; if (subscription?.productName == 'FT Edit') { return subscription?.productName } if (subscription.isNewsletterOnlyProduct) { return subscription.productName; } const digitalName = subscription.isPremiumProduct ? 'Premium Digital' : 'Standard Digital'; const printName = resolvePrintOfferName(subscription); // For digital subscriptions excluding FT Edit if (subscription.isDigitalProduct && !subscription.isFTEditProduct) { let subscriptionName = isTrialist ? 'Trial: ' : ''; subscriptionName += digitalName; return subscriptionName; } const nameSegments = []; // For all other subs, calculate the full name // Digital deliberately missing here as digital subs follow a different format if (subscription.isPrintProduct) nameSegments.push(printName); if (subscription.isEpaperProduct) { if (subscription.isEpaperBundleProduct) { nameSegments.push(printName) } else { nameSegments.push('FT Digital Edition'); } } if (subscription.isFTEditProduct) nameSegments.push('FT Edit'); if (subscription.isBundleProduct) nameSegments.push(`${printName} + ${digitalName}`); if (isTrialist) nameSegments.push('Introductory Offer'); return nameSegments.join(' '); } }