@automattic/wpcom-checkout
Version:
Functions and components used by WordPress.com checkout.
139 lines (115 loc) • 3.61 kB
text/typescript
import {
isAddOn,
isPlan,
isDomainTransfer,
isDomainProduct,
isDotComPlan,
isGoogleWorkspace,
isGSuiteOrExtraLicenseProductSlug,
isTitanMail,
isP2Plus,
isJetpackProductSlug,
isMonthlyProduct,
isYearly,
isBiennially,
isTriennially,
isJetpackAISlug,
isJetpackStatsPaidTieredProductSlug,
isAkismetPro5h,
} from '@automattic/calypso-products';
import { formatNumber } from '@automattic/number-formatters';
import { translate } from 'i18n-calypso';
import { isWpComProductRenewal as isRenewal } from './is-wpcom-product-renewal';
import type { ResponseCartProduct } from '@automattic/shopping-cart';
export function DefaultLineItemSublabel( { product }: { product: ResponseCartProduct } ) {
const isRenewalItem = isRenewal( product );
const { meta, product_name: productName, product_slug: productSlug } = product;
if ( isDotComPlan( product ) ) {
if ( isRenewalItem ) {
return translate( 'Plan Renewal' );
}
}
if ( isPlan( product ) || isJetpackProductSlug( productSlug ) ) {
if ( isP2Plus( product ) ) {
return translate( 'Monthly subscription' );
}
return isRenewalItem ? translate( 'Plan Renewal' ) : translate( 'Plan Subscription' );
}
if ( isGoogleWorkspace( product ) || isGSuiteOrExtraLicenseProductSlug( productSlug ) ) {
if ( isRenewalItem ) {
return translate( 'Mailboxes and Productivity Tools Renewal' );
}
return translate( 'Mailboxes and Productivity Tools' );
}
if ( isTitanMail( product ) ) {
if ( isRenewalItem ) {
return translate( 'Mailboxes Renewal' );
}
return translate( 'Mailboxes' );
}
if ( meta && ( isDomainProduct( product ) || isDomainTransfer( product ) ) ) {
if ( ! isRenewalItem ) {
return productName || '';
}
if ( productName ) {
return translate( '%(productName)s Renewal', { args: { productName } } );
}
}
if ( isAddOn( product ) && ! isRenewalItem ) {
return translate( 'Add-On' );
}
if ( isRenewalItem ) {
return translate( 'Renewal' );
}
if ( isMonthlyProduct( product ) ) {
return translate( 'Billed monthly' );
}
if ( isYearly( product ) ) {
return translate( 'Billed annually' );
}
if ( isBiennially( product ) ) {
return translate( 'Billed every two years' );
}
if ( isTriennially( product ) ) {
return translate( 'Billed every three years' );
}
return null;
}
export function getLabel( product: ResponseCartProduct ): string {
if ( product.meta && ( isDomainProduct( product ) || isDomainTransfer( product ) ) ) {
return product.meta;
}
// In theory, it'll fallback to 0, but just in case.
const quantity = product.quantity || product.current_quantity || 0;
if ( isJetpackAISlug( product.product_slug ) && quantity > 1 ) {
return translate( '%(productName)s (%(quantity)d requests per month)', {
args: {
productName: product.product_name,
quantity: quantity,
},
textOnly: true,
} );
}
if ( isJetpackStatsPaidTieredProductSlug( product.product_slug ) && product.quantity ) {
return translate( '%(productName)s - %(quantity)s views per month', {
args: {
productName: product.product_name,
quantity: formatNumber( product.quantity, { decimals: 0 } ),
},
textOnly: true,
} );
}
if ( isAkismetPro5h( product ) ) {
if ( quantity > 1 ) {
/* translators: %s is the product name "Akismet Pro", %d is a number of requests/month */
return translate( '%(productName)s (%(requests)d requests/month)', {
args: {
productName: product.product_name.replace( /\s*\(.*$/, '' ).trim(),
requests: 500 * quantity,
},
textOnly: true,
} );
}
}
return product.product_name || '';
}