@vendasta/store
Version:
Components and data for Store
182 lines • 18.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input } from '@angular/core';
import { formatDisplayPrice, formatBillingFrequency } from '@vendasta/core/shared';
export class VaPricingComponent {
constructor() {
this.pricing = null;
this.wrapFrequency = false;
this.isAddon = false;
this.hasVerifiedContract = false;
this.highlightPrice = true;
this.loaded = true;
}
/**
* @return {?}
*/
get isFree() {
/** @type {?} */
const isFreeHelper = (prices) => {
return prices
? prices.some(p => p.price === 0 || p.price === undefined)
: false;
};
if (this.hasVerifiedContract && this.billedProduct) {
return this.billedProduct.pricingTiers.length === 1 ? isFreeHelper(this.billedProduct.pricingTiers) : false;
}
return this.pricing && isFreeHelper(this.pricing.prices) ? true : false;
}
/**
* @return {?}
*/
get shouldContactSales() {
/** @type {?} */
const nestedPricesIsContactSales = (prices) => {
return prices && prices.length > 0
? prices.some(p => p.price === null || p.price < 0)
: true;
};
if (this.hasVerifiedContract && this.billedProduct) {
return nestedPricesIsContactSales(this.billedProduct.pricingTiers) ? true : false;
}
if (!this.pricing) {
return true;
}
return nestedPricesIsContactSales(this.pricing.prices);
}
/**
* @param {?} billedProduct
* @return {?}
*/
isFlatPrice(billedProduct) {
return billedProduct.pricingTiers.length === 1;
}
/**
* @param {?} tier
* @return {?}
*/
buildPricingTierString(tier) {
/** @type {?} */
let max = String(tier.rangeMax);
if (tier.rangeMax === -1) {
max = '∞';
if (tier.rangeMin === 0 || tier.rangeMin === 1) {
return '';
}
}
return String(tier.rangeMin) + ' to ' + max;
}
/**
* @param {?} tier
* @param {?=} frequency
* @return {?}
*/
buildPricingTierForProduct(tier, frequency) {
/** @type {?} */
const pricingTier = this.buildPricingTierString(tier);
/** @type {?} */
const formattedFrequency = formatBillingFrequency(frequency);
return pricingTier ? pricingTier + ' accounts ' + formattedFrequency : formattedFrequency;
}
/**
* @param {?} tier
* @return {?}
*/
buildPricingTierForAddon(tier) {
/** @type {?} */
const pricingRange = this.buildPricingTierString(tier);
return pricingRange ? pricingRange : '';
}
/**
* @param {?} price
* @param {?} currency
* @param {?=} excludeFrequency
* @return {?}
*/
buildPriceStringForPricing(price, currency, excludeFrequency) {
return formatDisplayPrice(price.price, currency, (/** @type {?} */ ((excludeFrequency ? '' : price.frequency))), true, true, true, price.isStartingPrice);
}
/**
* @param {?} tier
* @param {?=} frequency
* @param {?=} isStartingPrice
* @return {?}
*/
buildPriceStringForTier(tier, frequency, isStartingPrice) {
return formatDisplayPrice(tier.price, this.billedProduct.currency, (/** @type {?} */ (frequency)), undefined, undefined, undefined, isStartingPrice);
}
/**
* @param {?=} frequency
* @return {?}
*/
buildFrequencyString(frequency) {
return formatBillingFrequency(frequency);
}
/**
* @return {?}
*/
buildCommitmentMessage() {
/** @type {?} */
const frequency = this.billedProduct ? this.billedProduct.billingFrequency.toString().toLowerCase() :
this.pricing && this.pricing.prices.length > 0 ? this.pricing.prices[0].frequency.toLowerCase() : '';
/** @type {?} */
let frequencyString = '';
if (frequency === 'yearly') {
frequencyString = 'year';
}
else if (frequency === 'monthly') {
frequencyString = 'month';
}
if (!frequencyString || this.isFree || this.shouldContactSales) {
return '';
}
if (this.billedProduct && this.billedProduct.commitment) {
/** @type {?} */
const initial = this.billedProduct.commitment.initial;
/** @type {?} */
const recurring = this.billedProduct.commitment.recurring;
if (this.highlightPrice) {
return `*${initial} ${frequencyString} minimum, renews for ${recurring} ${frequencyString} periods`;
}
else {
return `${initial} ${frequencyString} commitment`;
}
}
return '';
}
}
VaPricingComponent.decorators = [
{ type: Component, args: [{
selector: 'va-pricing',
template: "<ng-container *ngIf=\"highlightPrice\">\n <highlight-pricing [pricing]=\"pricing\"\n [billedProduct]=\"billedProduct\"\n [highlightPrice]=\"highlightPrice\"\n [isAddon]=\"isAddon\"\n [hasVerifiedContract]=\"hasVerifiedContract\"\n [wrapFrequency]=\"wrapFrequency\"\n [loaded]=\"loaded\">\n </highlight-pricing>\n</ng-container>\n<ng-container *ngIf=\"!highlightPrice\">\n <table-pricing [pricing]=\"pricing\"\n [highlightPrice]=\"highlightPrice\"\n [billedProduct]=\"billedProduct\"\n [hasVerifiedContract]=\"hasVerifiedContract\"\n [loaded]=\"loaded\">\n </table-pricing>\n</ng-container>\n",
styles: [""]
}] }
];
VaPricingComponent.propDecorators = {
pricing: [{ type: Input }],
billedProduct: [{ type: Input }],
wrapFrequency: [{ type: Input }],
isAddon: [{ type: Input }],
hasVerifiedContract: [{ type: Input }],
highlightPrice: [{ type: Input }],
loaded: [{ type: Input }]
};
if (false) {
/** @type {?} */
VaPricingComponent.prototype.pricing;
/** @type {?} */
VaPricingComponent.prototype.billedProduct;
/** @type {?} */
VaPricingComponent.prototype.wrapFrequency;
/** @type {?} */
VaPricingComponent.prototype.isAddon;
/** @type {?} */
VaPricingComponent.prototype.hasVerifiedContract;
/** @type {?} */
VaPricingComponent.prototype.highlightPrice;
/** @type {?} */
VaPricingComponent.prototype.loaded;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2luZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdmVuZGFzdGEvc3RvcmUvIiwic291cmNlcyI6WyJsaWIvcHJpY2luZy9wcmljaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUErQixrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUWhILE1BQU0sT0FBTyxrQkFBa0I7SUFML0I7UUFNYSxZQUFPLEdBQVksSUFBSSxDQUFDO1FBRXhCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFdBQU0sR0FBRyxJQUFJLENBQUM7SUEyRzNCLENBQUM7Ozs7SUF6R0csSUFBSSxNQUFNOztjQUNBLFlBQVksR0FBRyxDQUFDLE1BQTJCLEVBQVcsRUFBRTtZQUMxRCxPQUFPLE1BQU07Z0JBQ1QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztnQkFDMUQsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNoRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDL0c7UUFDRCxPQUFPLElBQUksQ0FB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LEVBQUU7Z0JBQ3ZCLE9BQU8sSUFBSSxPQUFPLElBQUksZUFBZSx3QkFBd0IsU0FBUyxJQUFJLGVBQWUsVUFBVSxDQUFBO2FBQ3BHO2lCQUFNO2dCQUNMLE9BQU8sR0FBRyxPQUFPLElBQUksZUFBZSxhQUFhLENBQUM7YUFDbkQ7U0FDRjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7O1lBdEhKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsdXhCQUF1Qzs7YUFFMUM7OztzQkFFSSxLQUFLOzRCQUNMLEtBQUs7NEJBQ0wsS0FBSztzQkFDTCxLQUFLO2tDQUNMLEtBQUs7NkJBQ0wsS0FBSztxQkFDTCxLQUFLOzs7O0lBTk4scUNBQWlDOztJQUNqQywyQ0FBc0M7O0lBQ3RDLDJDQUErQjs7SUFDL0IscUNBQXlCOztJQUN6QixpREFBcUM7O0lBQ3JDLDRDQUErQjs7SUFDL0Isb0NBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmlsbGVkUHJvZHVjdCwgUHJpY2luZ1RpZXIgfSBmcm9tICdAdmVuZGFzdGEvY29yZS9iaWxsaW5nJztcbmltcG9ydCB7IE1hcmtldHBsYWNlQmlsbGluZ0ZyZXF1ZW5jeSwgZm9ybWF0RGlzcGxheVByaWNlLCBmb3JtYXRCaWxsaW5nRnJlcXVlbmN5IH0gZnJvbSAnQHZlbmRhc3RhL2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IFByaWNpbmcsIFByaWNlIH0gZnJvbSAnLi9wcmljaW5nJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd2YS1wcmljaW5nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJpY2luZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcHJpY2luZy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFZhUHJpY2luZ0NvbXBvbmVudCB7XG4gICAgQElucHV0KCkgcHJpY2luZzogUHJpY2luZyA9IG51bGw7XG4gICAgQElucHV0KCkgYmlsbGVkUHJvZHVjdDogQmlsbGVkUHJvZHVjdDtcbiAgICBASW5wdXQoKSB3cmFwRnJlcXVlbmN5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgaXNBZGRvbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhhc1ZlcmlmaWVkQ29udHJhY3QgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBoaWdobGlnaHRQcmljZSA9IHRydWU7XG4gICAgQElucHV0KCkgbG9hZGVkID0gdHJ1ZTtcblxuICAgIGdldCBpc0ZyZWUoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGlzRnJlZUhlbHBlciA9IChwcmljZXM6IHsgcHJpY2U6IG51bWJlciB9W10pOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwcmljZXNcbiAgICAgICAgICAgICAgICA/IHByaWNlcy5zb21lKHAgPT4gcC5wcmljZSA9PT0gMCB8fCBwLnByaWNlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5oYXNWZXJpZmllZENvbnRyYWN0ICYmIHRoaXMuYmlsbGVkUHJvZHVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmlsbGVkUHJvZHVjdC5wcmljaW5nVGllcnMubGVuZ3RoID09PSAxID8gaXNGcmVlSGVscGVyKHRoaXMuYmlsbGVkUHJvZHVjdC5wcmljaW5nVGllcnMpIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucHJpY2luZyAmJiBpc0ZyZWVIZWxwZXIodGhpcy5wcmljaW5nLnByaWNlcykgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IHNob3VsZENvbnRhY3RTYWxlcygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbmVzdGVkUHJpY2VzSXNDb250YWN0U2FsZXMgPSAocHJpY2VzOiB7IHByaWNlOiBudW1iZXIgfVtdKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcHJpY2VzICYmIHByaWNlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBwcmljZXMuc29tZShwID0+IHAucHJpY2UgPT09IG51bGwgfHwgcC5wcmljZSA8IDApXG4gICAgICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmhhc1ZlcmlmaWVkQ29udHJhY3QgJiYgdGhpcy5iaWxsZWRQcm9kdWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmVzdGVkUHJpY2VzSXNDb250YWN0U2FsZXModGhpcy5iaWxsZWRQcm9kdWN0LnByaWNpbmdUaWVycykgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnByaWNpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXN0ZWRQcmljZXNJc0NvbnRhY3RTYWxlcyh0aGlzLnByaWNpbmcucHJpY2VzKTtcbiAgICB9XG5cbiAgICBpc0ZsYXRQcmljZShiaWxsZWRQcm9kdWN0OiBCaWxsZWRQcm9kdWN0KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBiaWxsZWRQcm9kdWN0LnByaWNpbmdUaWVycy5sZW5ndGggPT09IDE7XG4gICAgfVxuXG4gICAgYnVpbGRQcmljaW5nVGllclN0cmluZyh0aWVyOiBQcmljaW5nVGllcik6IHN0cmluZyB7XG4gICAgICAgIGxldCBtYXggPSBTdHJpbmcodGllci5yYW5nZU1heCk7XG4gICAgICAgIGlmICh0aWVyLnJhbmdlTWF4ID09PSAtMSkge1xuICAgICAgICAgICAgbWF4ID0gJ+KInic7XG4gICAgICAgICAgICBpZiAodGllci5yYW5nZU1pbiA9PT0gMCB8fCB0aWVyLnJhbmdlTWluID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmcodGllci5yYW5nZU1pbikgKyAnIHRvICcgKyBtYXg7XG4gICAgfVxuXG4gICAgYnVpbGRQcmljaW5nVGllckZvclByb2R1Y3QodGllcjogUHJpY2luZ1RpZXIsIGZyZXF1ZW5jeT86IHN0cmluZykge1xuICAgICAgICBjb25zdCBwcmljaW5nVGllciA9IHRoaXMuYnVpbGRQcmljaW5nVGllclN0cmluZyh0aWVyKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRnJlcXVlbmN5ID0gZm9ybWF0QmlsbGluZ0ZyZXF1ZW5jeShmcmVxdWVuY3kpO1xuICAgICAgICByZXR1cm4gcHJpY2luZ1RpZXIgPyBwcmljaW5nVGllciArICcgYWNjb3VudHMgJyArIGZvcm1hdHRlZEZyZXF1ZW5jeSA6IGZvcm1hdHRlZEZyZXF1ZW5jeTtcbiAgICB9XG5cbiAgICBidWlsZFByaWNpbmdUaWVyRm9yQWRkb24odGllcjogUHJpY2luZ1RpZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBwcmljaW5nUmFuZ2UgPSB0aGlzLmJ1aWxkUHJpY2luZ1RpZXJTdHJpbmcodGllcik7XG4gICAgICAgIHJldHVybiBwcmljaW5nUmFuZ2UgPyBwcmljaW5nUmFuZ2UgOiAnJztcbiAgICB9XG5cbiAgICBidWlsZFByaWNlU3RyaW5nRm9yUHJpY2luZyhwcmljZTogUHJpY2UsIGN1cnJlbmN5OiBzdHJpbmcsIGV4Y2x1ZGVGcmVxdWVuY3k/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdERpc3BsYXlQcmljZShcbiAgICAgICAgICBwcmljZS5wcmljZSxcbiAgICAgICAgICBjdXJyZW5jeSxcbiAgICAgICAgICAoZXhjbHVkZUZyZXF1ZW5jeSA/ICcnIDogcHJpY2UuZnJlcXVlbmN5KSBhcyBhbnksXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgcHJpY2UuaXNTdGFydGluZ1ByaWNlLFxuICAgICAgICApXG4gICAgfVxuXG4gICAgYnVpbGRQcmljZVN0cmluZ0ZvclRpZXIodGllcjogUHJpY2luZ1RpZXIsIGZyZXF1ZW5jeT86IE1hcmtldHBsYWNlQmlsbGluZ0ZyZXF1ZW5jeSwgaXNTdGFydGluZ1ByaWNlPzogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gZm9ybWF0RGlzcGxheVByaWNlKFxuICAgICAgICAgIHRpZXIucHJpY2UsXG4gICAgICAgICAgdGhpcy5iaWxsZWRQcm9kdWN0LmN1cnJlbmN5LFxuICAgICAgICAgIGZyZXF1ZW5jeSBhcyBhbnksXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgaXNTdGFydGluZ1ByaWNlKTtcbiAgICB9XG5cbiAgICBidWlsZEZyZXF1ZW5jeVN0cmluZyhmcmVxdWVuY3k/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZm9ybWF0QmlsbGluZ0ZyZXF1ZW5jeShmcmVxdWVuY3kpO1xuICAgIH1cblxuICAgIGJ1aWxkQ29tbWl0bWVudE1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICAgIGNvbnN0IGZyZXF1ZW5jeSA9IHRoaXMuYmlsbGVkUHJvZHVjdCA/IHRoaXMuYmlsbGVkUHJvZHVjdC5iaWxsaW5nRnJlcXVlbmN5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA6XG4gICAgICAgIHRoaXMucHJpY2luZyAmJiB0aGlzLnByaWNpbmcucHJpY2VzLmxlbmd0aCA+IDAgPyB0aGlzLnByaWNpbmcucHJpY2VzWzBdLmZyZXF1ZW5jeS50b0xvd2VyQ2FzZSgpIDogJyc7XG4gICAgICBsZXQgZnJlcXVlbmN5U3RyaW5nID0gJyc7XG4gICAgICBpZiAoZnJlcXVlbmN5ID09PSAneWVhcmx5Jykge1xuICAgICAgICBmcmVxdWVuY3lTdHJpbmcgPSAneWVhcic7XG4gICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA9PT0gJ21vbnRobHknKSB7XG4gICAgICAgIGZyZXF1ZW5jeVN0cmluZyA9ICdtb250aCc7XG4gICAgICB9XG4gICAgICBpZiAoIWZyZXF1ZW5jeVN0cmluZyB8fCB0aGlzLmlzRnJlZSB8fCB0aGlzLnNob3VsZENvbnRhY3RTYWxlcykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5iaWxsZWRQcm9kdWN0ICYmIHRoaXMuYmlsbGVkUHJvZHVjdC5jb21taXRtZW50KSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWwgPSB0aGlzLmJpbGxlZFByb2R1Y3QuY29tbWl0bWVudC5pbml0aWFsO1xuICAgICAgICBjb25zdCByZWN1cnJpbmcgPSB0aGlzLmJpbGxlZFByb2R1Y3QuY29tbWl0bWVudC5yZWN1cnJpbmc7XG4gICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodFByaWNlKSB7XG4gICAgICAgICAgcmV0dXJuIGAqJHtpbml0aWFsfSAke2ZyZXF1ZW5jeVN0cmluZ30gbWluaW11bSwgcmVuZXdzIGZvciAke3JlY3VycmluZ30gJHtmcmVxdWVuY3lTdHJpbmd9IHBlcmlvZHNgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGAke2luaXRpYWx9ICR7ZnJlcXVlbmN5U3RyaW5nfSBjb21taXRtZW50YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbn1cbiJdfQ==