UNPKG

@vendasta/store

Version:

Components and data for Store

250 lines 20 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, EventEmitter, Input, Output, ChangeDetectorRef } from '@angular/core'; import { isNullOrUndefined } from 'util'; import { BillingService, buildBilledProductFromProductPricingAndAddon } from '@vendasta/core/billing'; var VaAddonListComponent = /** @class */ (function () { function VaAddonListComponent(billingService, cdr) { this.billingService = billingService; this.cdr = cdr; this.showPricing = true; this._hasVerifiedContract = null; this._canAccessContractPricing = null; this.addonSelected = new EventEmitter(); this.billedProductsMap = new Map(); this.billedProductLoaded = new Map(); this.subscriptions = []; } Object.defineProperty(VaAddonListComponent.prototype, "addons", { set: /** * @param {?} addons * @return {?} */ function (addons) { this._addons = addons; this.populateBilledProduct(); }, enumerable: true, configurable: true }); Object.defineProperty(VaAddonListComponent.prototype, "hasVerifiedContract", { set: /** * @param {?} value * @return {?} */ function (value) { this._hasVerifiedContract = value; this.populateBilledProduct(); }, enumerable: true, configurable: true }); Object.defineProperty(VaAddonListComponent.prototype, "canAccessContractPricing", { set: /** * @param {?} value * @return {?} */ function (value) { this._canAccessContractPricing = value; this.populateBilledProduct(); }, enumerable: true, configurable: true }); /** * @return {?} */ VaAddonListComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.populateBilledProduct(); }; /** * @return {?} */ VaAddonListComponent.prototype.populateBilledProduct = /** * @return {?} */ function () { var _this = this; if (this.displayContractPricing()) { /** @type {?} */ var billingIDs = this._addons.map(function (a) { _this.billedProductsMap.set(a.addonId, null); _this.billedProductLoaded.set(a.addonId, false); return a.billingId; }); this.subscriptions.push(this.billingService.getMultiProductPricing(this.partnerID, billingIDs).subscribe(function (pricing) { _this._addons.forEach(function (addon) { /** @type {?} */ var addonPricing = pricing[addon.billingId]; if (!addonPricing) { return; } /** @type {?} */ var billedProduct = buildBilledProductFromProductPricingAndAddon(addon, addonPricing); _this.billedProductsMap.set(addon.addonId, billedProduct); _this.billedProductLoaded.set(addon.addonId, true); }); _this.cdr.detectChanges(); })); } }; /** * @param {?} addonId * @return {?} */ VaAddonListComponent.prototype.onClick = /** * @param {?} addonId * @return {?} */ function (addonId) { this.addonSelected.emit(addonId); }; /** * @param {?} object * @return {?} */ VaAddonListComponent.prototype.instanceOfPricing = /** * @param {?} object * @return {?} */ function (object) { if (typeof object === 'number') { return false; } return object.currency !== undefined && object.prices !== undefined; }; /** * @param {?} addon * @return {?} */ VaAddonListComponent.prototype.getDisplayPricing = /** * @param {?} addon * @return {?} */ function (addon) { /** @type {?} */ var price = addon.price; if (price && this.instanceOfPricing(price)) { return price; } return { currency: addon.currency, prices: [ { price: addon.price, frequency: addon.billingFrequency ? addon.billingFrequency : 'Monthly' } ] }; }; /** * @return {?} */ VaAddonListComponent.prototype.noData = /** * @return {?} */ function () { return isNullOrUndefined(this._hasVerifiedContract) || isNullOrUndefined(this._canAccessContractPricing); }; /** * @return {?} */ VaAddonListComponent.prototype.displayContractPricing = /** * @return {?} */ function () { return this._canAccessContractPricing && this._hasVerifiedContract; }; /** * @param {?} addon * @return {?} */ VaAddonListComponent.prototype.isBilledProductLoaded = /** * @param {?} addon * @return {?} */ function (addon) { if (this.noData()) { return false; } if (this.displayContractPricing()) { /** @type {?} */ var value = this.billedProductLoaded.get(addon.addonId); return value ? value : false; } return true; }; /** * @return {?} */ VaAddonListComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.subscriptions.forEach(function (subscription) { return subscription.unsubscribe(); }); }; VaAddonListComponent.decorators = [ { type: Component, args: [{ selector: 'va-addon-list', template: "<mat-list *ngIf=\"_addons\" class=\"addon-list\">\n <mat-divider></mat-divider>\n <ng-container *ngFor=\"let addon of _addons\">\n <mat-list-item (click)=\"onClick(addon.addonId)\">\n <div class=\"addon-icon-title\">\n <img *ngIf=\"addon.icon;else noIcon\" class=\"addon-icon\" [src]=\"addon.icon\" mat-list-avatar/>\n <ng-template #noIcon>\n <mat-icon class=\"addon-default-icon\" mat-list-icon>add_circle</mat-icon>\n </ng-template>\n <div class=\"addon-title-tagline\">\n <p class=\"addon-title\" matLine>{{ addon.title }} </p>\n <p class=\"addon-tagline\" matLine>{{ addon.tagline }}</p>\n </div>\n </div>\n <div *ngIf=\"showPricing\" class=\"price-section\">\n <va-pricing\n [pricing]=\"getDisplayPricing(addon)\"\n [highlightPrice]=\"false\"\n [hasVerifiedContract]=\"_hasVerifiedContract\"\n [billedProduct]=\"billedProductsMap.get(addon.addonId)\"\n [loaded]=\"isBilledProductLoaded(addon)\">\n </va-pricing>\n </div>\n </mat-list-item>\n <mat-divider></mat-divider>\n </ng-container>\n</mat-list>\n", styles: [":host{display:block}h2+:host{margin:-8px 0}:host ::ng-deep .mat-list-item.mat-2-line{height:auto!important}:host ::ng-deep .mat-list .mat-list-item .mat-list-item-content{padding:8px;align-items:flex-start;flex-direction:column}@media screen and (min-width:800px){:host ::ng-deep .mat-list .mat-list-item .mat-list-item-content{flex-direction:row}}.addon-list{position:relative}.addon-default-icon{margin:0 5px;color:#4caf50}.addon-icon{width:32px;height:32px}.addon-icon-title{flex-grow:1;display:flex;width:100%}@media screen and (min-width:800px){.addon-icon-title{width:auto}}.addon-title-tagline{padding:0 16px 10px 8px;flex-grow:1}.addon-title-tagline .addon-title{color:#212121;font-size:16px;line-height:1.2;margin:6px 0;white-space:normal}.addon-title-tagline .addon-tagline{color:#616161;font-size:14px;margin:0;white-space:normal}.price-section{min-width:10em;margin-top:6px;flex-shrink:0}mat-list-item:hover{background-color:#fafafa!important;cursor:pointer!important}"] }] } ]; /** @nocollapse */ VaAddonListComponent.ctorParameters = function () { return [ { type: BillingService }, { type: ChangeDetectorRef } ]; }; VaAddonListComponent.propDecorators = { addons: [{ type: Input, args: ['addons',] }], showPricing: [{ type: Input }], partnerID: [{ type: Input }], hasVerifiedContract: [{ type: Input, args: ['hasVerifiedContract',] }], canAccessContractPricing: [{ type: Input, args: ['canAccessContractPricing',] }], addonSelected: [{ type: Output }] }; return VaAddonListComponent; }()); export { VaAddonListComponent }; if (false) { /** @type {?} */ VaAddonListComponent.prototype._addons; /** @type {?} */ VaAddonListComponent.prototype.showPricing; /** @type {?} */ VaAddonListComponent.prototype.partnerID; /** @type {?} */ VaAddonListComponent.prototype._hasVerifiedContract; /** @type {?} */ VaAddonListComponent.prototype._canAccessContractPricing; /** @type {?} */ VaAddonListComponent.prototype.addonSelected; /** @type {?} */ VaAddonListComponent.prototype.billedProductsMap; /** * @type {?} * @private */ VaAddonListComponent.prototype.billedProductLoaded; /** * @type {?} * @private */ VaAddonListComponent.prototype.subscriptions; /** * @type {?} * @private */ VaAddonListComponent.prototype.billingService; /** * @type {?} * @private */ VaAddonListComponent.prototype.cdr; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkb24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdmVuZGFzdGEvc3RvcmUvIiwic291cmNlcyI6WyJsaWIvYWRkb24tbGlzdC9hZGRvbi1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJN0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQWlCLDRDQUE0QyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFckg7SUFrQ0UsOEJBQW9CLGNBQThCLEVBQVUsR0FBc0I7UUFBOUQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUF0QnpFLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRzVCLHlCQUFvQixHQUFZLElBQUksQ0FBQztRQU1yQyw4QkFBeUIsR0FBWSxJQUFJLENBQUM7UUFPaEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXJELHNCQUFpQixHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2xELHdCQUFtQixHQUF5QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3RELGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztJQUUwQyxDQUFDO0lBM0J0RixzQkFDSSx3Q0FBTTs7Ozs7UUFEVixVQUNXLE1BQWU7WUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQzs7O09BQUE7SUFLRCxzQkFDSSxxREFBbUI7Ozs7O1FBRHZCLFVBQ3dCLEtBQWM7WUFDcEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMscUJBQXFCLEVB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LDZDQUFxRDs7SUFFckQsaURBQTBEOzs7OztJQUMxRCxtREFBOEQ7Ozs7O0lBQzlELDZDQUEyQzs7Ozs7SUFFL0IsOENBQXNDOzs7OztJQUFFLG1DQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFkZG9uIH0gZnJvbSAnQHZlbmRhc3RhL2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJpY2luZyB9IGZyb20gJy4uL3ByaWNpbmcvcHJpY2luZyc7XG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgQmlsbGluZ1NlcnZpY2UsIEJpbGxlZFByb2R1Y3QsIGJ1aWxkQmlsbGVkUHJvZHVjdEZyb21Qcm9kdWN0UHJpY2luZ0FuZEFkZG9uIH0gZnJvbSAnQHZlbmRhc3RhL2NvcmUvYmlsbGluZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhLWFkZG9uLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkb24tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FkZG9uLWxpc3QuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBWYUFkZG9uTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgX2FkZG9uczogQWRkb25bXTtcbiAgQElucHV0KCdhZGRvbnMnKVxuICBzZXQgYWRkb25zKGFkZG9uczogQWRkb25bXSkge1xuICAgIHRoaXMuX2FkZG9ucyA9IGFkZG9ucztcbiAgICB0aGlzLnBvcHVsYXRlQmlsbGVkUHJvZHVjdCgpO1xuICB9XG4gIEBJbnB1dCgpIHNob3dQcmljaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgcGFydG5lcklEOiBzdHJpbmc7XG5cbiAgX2hhc1ZlcmlmaWVkQ29udHJhY3Q6IGJvb2xlYW4gPSBudWxsO1xuICBASW5wdXQoJ2hhc1ZlcmlmaWVkQ29udHJhY3QnKVxuICBzZXQgaGFzVmVyaWZpZWRDb250cmFjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hhc1ZlcmlmaWVkQ29udHJhY3QgPSB2YWx1ZTtcbiAgICB0aGlzLnBvcHVsYXRlQmlsbGVkUHJvZHVjdCgpO1xuICB9XG4gIF9jYW5BY2Nlc3NDb250cmFjdFByaWNpbmc6IGJvb2xlYW4gPSBudWxsO1xuICBASW5wdXQoJ2NhbkFjY2Vzc0NvbnRyYWN0UHJpY2luZycpXG4gIHNldCBjYW5BY2Nlc3NDb250cmFjdFByaWNpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jYW5BY2Nlc3NDb250cmFjdFByaWNpbmcgPSB2YWx1ZTtcbiAgICB0aGlzLnBvcHVsYXRlQmlsbGVkUHJvZHVjdCgpO1xuICB9XG5cbiAgQE91dHB1dCgpIGFkZG9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFN0cmluZz4oKTtcblxuICBiaWxsZWRQcm9kdWN0c01hcDogTWFwPHN0cmluZywgQmlsbGVkUHJvZHVjdD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgYmlsbGVkUHJvZHVjdExvYWRlZDogTWFwPHN0cmluZywgYm9vbGVhbj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJpbGxpbmdTZXJ2aWNlOiBCaWxsaW5nU2VydmljZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucG9wdWxhdGVCaWxsZWRQcm9kdWN0KCk7XG4gIH1cblxuICBwb3B1bGF0ZUJpbGxlZFByb2R1Y3QoKSB7XG4gICAgaWYgKHRoaXMuZGlzcGxheUNvbnRyYWN0UHJpY2luZygpKSB7XG4gICAgICBjb25zdCBiaWxsaW5nSURzID0gdGhpcy5fYWRkb25zLm1hcChhID0+IHtcbiAgICAgICAgdGhpcy5iaWxsZWRQcm9kdWN0c01hcC5zZXQoYS5hZGRvbklkLCBudWxsKTtcbiAgICAgICAgdGhpcy5iaWxsZWRQcm9kdWN0TG9hZGVkLnNldChhLmFkZG9uSWQsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGEuYmlsbGluZ0lkO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgdGhpcy5iaWxsaW5nU2VydmljZS5nZXRNdWx0aVByb2R1Y3RQcmljaW5nKHRoaXMucGFydG5lcklELCBiaWxsaW5nSURzKS5zdWJzY3JpYmUocHJpY2luZyA9PiB7XG4gICAgICAgICAgdGhpcy5fYWRkb25zLmZvckVhY2goYWRkb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRkb25QcmljaW5nID0gcHJpY2luZ1thZGRvbi5iaWxsaW5nSWRdO1xuICAgICAgICAgICAgaWYgKCFhZGRvblByaWNpbmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmlsbGVkUHJvZHVjdCA9IGJ1aWxkQmlsbGVkUHJvZHVjdEZyb21Qcm9kdWN0UHJpY2luZ0FuZEFkZG9uKGFkZG9uLCBhZGRvblByaWNpbmcpO1xuICAgICAgICAgICAgdGhpcy5iaWxsZWRQcm9kdWN0c01hcC5zZXQoYWRkb24uYWRkb25JZCwgYmlsbGVkUHJvZHVjdCk7XG4gICAgICAgICAgICB0aGlzLmJpbGxlZFByb2R1Y3RMb2FkZWQuc2V0KGFkZG9uLmFkZG9uSWQsIHRydWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBvbkNsaWNrKGFkZG9uSWQ6IFN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYWRkb25TZWxlY3RlZC5lbWl0KGFkZG9uSWQpO1xuICB9XG5cbiAgcHVibGljIGluc3RhbmNlT2ZQcmljaW5nKG9iamVjdDogYW55KSB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3QuY3VycmVuY3kgIT09IHVuZGVmaW5lZCAmJiBvYmplY3QucHJpY2VzICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXREaXNwbGF5UHJpY2luZyhhZGRvbjogQWRkb24pOiBQcmljaW5nIHtcbiAgICBjb25zdCBwcmljZTogYW55ID0gYWRkb24ucHJpY2U7XG4gICAgaWYgKHByaWNlICYmIHRoaXMuaW5zdGFuY2VPZlByaWNpbmcocHJpY2UpKSB7XG4gICAgICByZXR1cm4gcHJpY2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW5jeTogYWRkb24uY3VycmVuY3ksXG4gICAgICBwcmljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByaWNlOiBhZGRvbi5wcmljZSxcbiAgICAgICAgICBmcmVxdWVuY3k6IGFkZG9uLmJpbGxpbmdGcmVxdWVuY3kgPyBhZGRvbi5iaWxsaW5nRnJlcXVlbmN5IDogJ01vbnRobHknXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgbm9EYXRhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc051bGxPclVuZGVmaW5lZCh0aGlzLl9oYXNWZXJpZmllZENvbnRyYWN0KSB8fCBpc051bGxPclVuZGVmaW5lZCh0aGlzLl9jYW5BY2Nlc3NDb250cmFjdFByaWNpbmcpO1xuICB9XG5cbiAgZGlzcGxheUNvbnRyYWN0UHJpY2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2FuQWNjZXNzQ29udHJhY3RQcmljaW5nICYmIHRoaXMuX2hhc1ZlcmlmaWVkQ29udHJhY3Q7XG4gIH1cblxuICBpc0JpbGxlZFByb2R1Y3RMb2FkZWQoYWRkb246IEFkZG9uKTogYm9vbGVhbiB7XG5cbiAgICBpZiAodGhpcy5ub0RhdGEoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNwbGF5Q29udHJhY3RQcmljaW5nKCkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5iaWxsZWRQcm9kdWN0TG9hZGVkLmdldChhZGRvbi5hZGRvbklkKTtcbiAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlIDogZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgfVxufVxuIl19