UNPKG

@vendasta/store

Version:

Components and data for Store

182 lines 18.4 kB
/** * @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==