@automattic/calypso-products
Version:
This module contains information about the various products sold within calypso, such as product slugs, plan intervals, etc.
121 lines (114 loc) • 3.45 kB
text/typescript
import {
JETPACK_REDIRECT_CHECKOUT_TO_WPADMIN,
BEST_VALUE_PLANS,
TERM_MONTHLY,
PLAN_MONTHLY_PERIOD,
TERM_ANNUALLY,
PLAN_ANNUAL_PERIOD,
TERM_BIENNIALLY,
PLAN_BIENNIAL_PERIOD,
TERM_TRIENNIALLY,
PLAN_TRIENNIAL_PERIOD,
TERM_QUADRENNIALLY,
TERM_QUINQUENNIALLY,
TERM_SEXENNIALLY,
PLAN_DECENNIAL_PERIOD,
PLAN_NOVENNIAL_PERIOD,
PLAN_OCTENNIAL_PERIOD,
PLAN_QUADRENNIAL_PERIOD,
PLAN_QUINQUENNIAL_PERIOD,
PLAN_SEPTENNIAL_PERIOD,
PLAN_SEXENNIAL_PERIOD,
TERM_DECENNIALLY,
TERM_NOVENNIALLY,
TERM_OCTENNIALLY,
TERM_SEPTENNIALLY,
PLAN_CENTENNIAL_PERIOD,
TERM_CENTENNIALLY,
} from './constants';
import { BillingTerm } from './types';
export { getPlanSlugForTermVariant } from './get-plan-term-variant';
export { getPlanMultipleTermsVariantSlugs } from './get-plan-multiple-terms-variant-slugs';
export function isBestValue( plan: string ): boolean {
return ( BEST_VALUE_PLANS as ReadonlyArray< string > ).includes( plan );
}
/**
* Return estimated duration of given PLAN_TERM in days
* @param {string} term TERM_ constant
* @returns {number} Term duration
*/
export function getTermDuration( term: string ): number | undefined {
switch ( term ) {
case TERM_MONTHLY:
return PLAN_MONTHLY_PERIOD;
case TERM_ANNUALLY:
return PLAN_ANNUAL_PERIOD;
case TERM_BIENNIALLY:
return PLAN_BIENNIAL_PERIOD;
case TERM_TRIENNIALLY:
return PLAN_TRIENNIAL_PERIOD;
case TERM_QUADRENNIALLY:
return PLAN_QUADRENNIAL_PERIOD;
case TERM_QUINQUENNIALLY:
return PLAN_QUINQUENNIAL_PERIOD;
case TERM_SEXENNIALLY:
return PLAN_SEXENNIAL_PERIOD;
case TERM_SEPTENNIALLY:
return PLAN_SEPTENNIAL_PERIOD;
case TERM_OCTENNIALLY:
return PLAN_OCTENNIAL_PERIOD;
case TERM_NOVENNIALLY:
return PLAN_NOVENNIAL_PERIOD;
case TERM_DECENNIALLY:
return PLAN_DECENNIAL_PERIOD;
case TERM_CENTENNIALLY:
return PLAN_CENTENNIAL_PERIOD;
}
}
/**
* Gvien duration in days returnn the PLAN_TERM
* @param {number} days Term duration in days
* @returns {string} TERM_ constant
*/
export function getTermFromDuration( days: number ): BillingTerm[ 'term' ] | undefined {
switch ( days ) {
case PLAN_MONTHLY_PERIOD:
return TERM_MONTHLY;
case PLAN_ANNUAL_PERIOD:
return TERM_ANNUALLY;
case PLAN_BIENNIAL_PERIOD:
return TERM_BIENNIALLY;
case PLAN_TRIENNIAL_PERIOD:
return TERM_TRIENNIALLY;
case PLAN_QUADRENNIAL_PERIOD:
return TERM_QUADRENNIALLY;
case PLAN_QUINQUENNIAL_PERIOD:
return TERM_QUINQUENNIALLY;
case PLAN_SEXENNIAL_PERIOD:
return TERM_SEXENNIALLY;
case PLAN_SEPTENNIAL_PERIOD:
return TERM_SEPTENNIALLY;
case PLAN_OCTENNIAL_PERIOD:
return TERM_OCTENNIALLY;
case PLAN_NOVENNIAL_PERIOD:
return TERM_NOVENNIALLY;
case PLAN_DECENNIAL_PERIOD:
return TERM_DECENNIALLY;
case PLAN_CENTENNIAL_PERIOD:
return TERM_CENTENNIALLY;
}
}
export const redirectCheckoutToWpAdmin = (): boolean => !! JETPACK_REDIRECT_CHECKOUT_TO_WPADMIN;
/**
* Given an array of plan Features and an array of Product slugs, it returns which products are
* included in the plan Features.
* @param {ReadonlyArray< string >} planFeatures Array of plan Feature slugs
* @param {ReadonlyArray< string >} products Array of Product slugs
* @returns {string[]} Array of Product slugs
*/
export const planFeaturesIncludesProducts = (
planFeatures: ReadonlyArray< string >,
products: ReadonlyArray< string >
) => {
return products.some( ( product ) => planFeatures.includes( product ) );
};