UNPKG

@vendasta/store

Version:

Components and data for Store

95 lines 15 kB
import { File } from '../files/shared/file.model'; import { Sellable } from './sellable'; import { CaseTransform } from './case-transform'; const COLOR_CODES = ['#EF5350', '#42A5F5', '#66BB6A', '#FFA726', '#AB47BC', '#FFCA28', '#EC407A', '#26C6DA', '#FF7B57']; const DEFAULT_COLOR = '#808080'; export class Product extends Sellable { constructor(data) { super(); this.addons = []; data = data || {}; this.pricing = data.pricing; this.productId = data.productId; this.partnerId = data.partnerId; this.editionId = data.editionId; this.editionName = data.editionName; this.name = data.name; this.description = data.description; this.tagline = data.tagline; this.iconUrl = data.iconUrl; this.headerImageUrl = data.headerImageUrl; this.entryUrl = data.entryUrl; this.screenshotUrls = data.screenshotUrls; this.videos = data.vidoes; this.pdfUploadUrls = data.pdfUploadUrls; this.lmiCategories = data.lmiCategories; this.keySellingPoints = data.keySellingPoints; this.faqs = data.faqs; this.needHelp = data.needHelp; this.wholesalePrice = data.wholesalePrice; this.setupFee = data.setupFee; this.usesCustomPricing = data.usesCustomPricing; this.currency = data.currency; this.billingFrequency = data.billingFrequency; this.isArchived = data.isArchived; this.isSuspended = data.isSuspended; this.addons = data.addons; this.restrictions = data.restrictions; this.billingId = data.billingId; this.trialConfiguration = data.trialConfiguration; if (data.hasOwnProperty('pdfUploadUrls')) { this.files = this.pdfUploadUrls ? this.pdfUploadUrls.map((url) => new File(url)) : null; } } static fromApi(data) { const newProduct = {}; data = data || {}; for (const key in data) { if (data.hasOwnProperty(key)) { const newKey = CaseTransform.snakeToCamelCase(key); newProduct[newKey] = data[key]; } } return new Product(newProduct); } get iconStyle() { return this.iconUrl ? `url("${this.iconUrl}") no-repeat center / 100% 100%` : null; } get iconColor() { // determine an icon color for a product with no icon by using the product name if (!this.name) { return DEFAULT_COLOR; } let nameSum = 0; for (let i = 0; i < this.name.length; i++) { nameSum += this.name[i].charCodeAt(0); } const index = nameSum % COLOR_CODES.length; return COLOR_CODES[index]; } getLmiCategoryNames() { const lmiCategories = this.lmiCategories || []; return lmiCategories.map((lmiCategory) => CaseTransform.lowerToTitleCase(lmiCategory.toLowerCase().replace(/_/g, ' '))); } } export class ProductWithParent extends Product { constructor(data) { super(data); this.parentId = data.parentId; this.parentName = data.parentName; this.parentIconUrl = data.parentIconUrl; this.multipleActivations = data.multipleActivations || false; } static fromApi(data) { const newProduct = {}; data = data || {}; for (const key in data) { if (data.hasOwnProperty(key)) { const newKey = CaseTransform.snakeToCamelCase(key); newProduct[newKey] = data[key]; } } return new ProductWithParent(newProduct); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc3RvcmUvc3JjL2xpYi9zaGFyZWQvcHJvZHVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJakQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBRXhILE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUVoQyxNQUFNLE9BQU8sT0FBUSxTQUFRLFFBQVE7SUF5Q25DLFlBQVksSUFBVTtRQUNwQixLQUFLLEVBQUUsQ0FBQztRQWpCVixXQUFNLEdBQVksRUFBRSxDQUFDO1FBa0JuQixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJ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QUFFLENBQUM7UUFDbEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25ELFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDaEM7U0FDRjtRQUNELE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBUUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWxlIH0gZnJvbSAnLi4vZmlsZXMvc2hhcmVkL2ZpbGUubW9kZWwnO1xuaW1wb3J0IHsgRmFxIH0gZnJvbSAnLi4vZmFxcy9zaGFyZWQvZmFxcy5tb2RlbCc7XG5pbXBvcnQgeyBTZWxsYWJsZSB9IGZyb20gJy4vc2VsbGFibGUnO1xuaW1wb3J0IHsgQ2FzZVRyYW5zZm9ybSB9IGZyb20gJy4vY2FzZS10cmFuc2Zvcm0nO1xuaW1wb3J0IHsgQWRkb24gfSBmcm9tICdAdmVuZGFzdGEvY29yZS9zaGFyZWQnO1xuaW1wb3J0IHsgUmVzdHJpY3Rpb25zIH0gZnJvbSAnLi4vcmVzdHJpY3Rpb25zL3NoYXJlZC9yZXN0cmljdGlvbnMubW9kZWwnO1xuXG5jb25zdCBDT0xPUl9DT0RFUyA9IFsnI0VGNTM1MCcsICcjNDJBNUY1JywgJyM2NkJCNkEnLCAnI0ZGQTcyNicsICcjQUI0N0JDJywgJyNGRkNBMjgnLCAnI0VDNDA3QScsICcjMjZDNkRBJywgJyNGRjdCNTcnXTtcblxuY29uc3QgREVGQVVMVF9DT0xPUiA9ICcjODA4MDgwJztcblxuZXhwb3J0IGNsYXNzIFByb2R1Y3QgZXh0ZW5kcyBTZWxsYWJsZSB7XG4gIHBhcnRuZXJJZDogc3RyaW5nO1xuICBwcm9kdWN0SWQ6IHN0cmluZztcbiAgZWRpdGlvbklkOiBzdHJpbmc7XG4gIGVkaXRpb25OYW1lOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdGFnbGluZTogc3RyaW5nO1xuICBpY29uVXJsOiBzdHJpbmc7XG4gIGhlYWRlckltYWdlVXJsOiBzdHJpbmc7XG4gIGVudHJ5VXJsOiBzdHJpbmc7XG4gIHNjcmVlbnNob3RVcmxzOiBzdHJpbmdbXTtcbiAgcGRmVXBsb2FkVXJsczogc3RyaW5nW107XG4gIGxtaUNhdGVnb3JpZXM6IHN0cmluZ1tdO1xuICBrZXlTZWxsaW5nUG9pbnRzOiBzdHJpbmdbXTtcbiAgZmFxczogRmFxW107XG4gIG5lZWRIZWxwOiBzdHJpbmc7XG4gIHdob2xlc2FsZVByaWNlOiBudW1iZXI7XG4gIHNldHVwRmVlOiBudW1iZXI7XG4gIHVzZXNDdXN0b21QcmljaW5nOiBib29sZWFuO1xuICBjdXJyZW5jeTogc3RyaW5nO1xuICBiaWxsaW5nRnJlcXVlbmN5OiBzdHJpbmc7XG4gIGJpbGxpbmdJZDogc3RyaW5nO1xuICBpc0FyY2hpdmVkOiBib29sZWFuO1xuICBpc1N1c3BlbmRlZDogYm9vbGVhbjtcbiAgYWRkb25zOiBBZGRvbltdID0gW107XG4gIGZpbGVzOiBGaWxlW107XG4gIHJlc3RyaWN0aW9uczogUmVzdHJpY3Rpb25zO1xuICB0cmlhbENvbmZpZ3VyYXRpb246IFRyaWFsQ29uZmlndXJhdGlvbkludGVyZmFjZTtcbiAgdmlkZW9zOiBzdHJpbmdbXTtcbiAgc3RhdGljIGZyb21BcGkoZGF0YTogYW55KTogUHJvZHVjdCB7XG4gICAgY29uc3QgbmV3UHJvZHVjdCA9IHt9O1xuICAgIGRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29uc3QgbmV3S2V5ID0gQ2FzZVRyYW5zZm9ybS5zbmFrZVRvQ2FtZWxDYXNlKGtleSk7XG4gICAgICAgIG5ld1Byb2R1Y3RbbmV3S2V5XSA9IGRhdGFba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9kdWN0KG5ld1Byb2R1Y3QpO1xuICB9XG4gIGNvbnN0cnVjdG9yKGRhdGE/OiBhbnkpIHtcbiAgICBzdXBlcigpO1xuICAgIGRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIHRoaXMucHJpY2luZyA9IGRhdGEucHJpY2luZztcbiAgICB0aGlzLnByb2R1Y3RJZCA9IGRhdGEucHJvZHVjdElkO1xuICAgIHRoaXMucGFydG5lcklkID0gZGF0YS5wYXJ0bmVySWQ7XG4gICAgdGhpcy5lZGl0aW9uSWQgPSBkYXRhLmVkaXRpb25JZDtcbiAgICB0aGlzLmVkaXRpb25OYW1lID0gZGF0YS5lZGl0aW9uTmFtZTtcbiAgICB0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb247XG4gICAgdGhpcy50YWdsaW5lID0gZGF0YS50YWdsaW5lO1xuICAgIHRoaXMuaWNvblVybCA9IGRhdGEuaWNvblVybDtcbiAgICB0aGlzLmhlYWRlckltYWdlVXJsID0gZGF0YS5oZWFkZXJJbWFnZVVybDtcbiAgICB0aGlzLmVudHJ5VXJsID0gZGF0YS5lbnRyeVVybDtcbiAgICB0aGlzLnNjcmVlbnNob3RVcmxzID0gZGF0YS5zY3JlZW5zaG90VXJscztcbiAgICB0aGlzLnZpZGVvcyA9IGRhdGEudmlkb2VzO1xuICAgIHRoaXMucGRmVXBsb2FkVXJscyA9IGRhdGEucGRmVXBsb2FkVXJscztcbiAgICB0aGlzLmxtaUNhdGVnb3JpZXMgPSBkYXRhLmxtaUNhdGVnb3JpZXM7XG4gICAgdGhpcy5rZXlTZWxsaW5nUG9pbnRzID0gZGF0YS5rZXlTZWxsaW5nUG9pbnRzO1xuICAgIHRoaXMuZmFxcyA9IGRhdGEuZmFxcztcbiAgICB0aGlzLm5lZWRIZWxwID0gZGF0YS5uZWVkSGVscDtcbiAgICB0aGlzLndob2xlc2FsZVByaWNlID0gZGF0YS53aG9sZXNhbGVQcmljZTtcbiAgICB0aGlzLnNldHVwRmVlID0gZGF0YS5zZXR1cEZlZTtcbiAgICB0aGlzLnVzZXNDdXN0b21QcmljaW5nID0gZGF0YS51c2VzQ3VzdG9tUHJpY2luZztcbiAgICB0aGlzLmN1cnJlbmN5ID0gZGF0YS5jdXJyZW5jeTtcbiAgICB0aGlzLmJpbGxpbmdGcmVxdWVuY3kgPSBkYXRhLmJpbGxpbmdGcmVxdWVuY3k7XG4gICAgdGhpcy5pc0FyY2hpdmVkID0gZGF0YS5pc0FyY2hpdmVkO1xuICAgIHRoaXMuaXNTdXNwZW5kZWQgPSBkYXRhLmlzU3VzcGVuZGVkO1xuICAgIHRoaXMuYWRkb25zID0gZGF0YS5hZGRvbnM7XG4gICAgdGhpcy5yZXN0cmljdGlvbnMgPSBkYXRhLnJlc3RyaWN0aW9ucztcbiAgICB0aGlzLmJpbGxpbmdJZCA9IGRhdGEuYmlsbGluZ0lkO1xuICAgIHRoaXMudHJpYWxDb25maWd1cmF0aW9uID0gZGF0YS50cmlhbENvbmZpZ3VyYXRpb247XG4gICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoJ3BkZlVwbG9hZFVybHMnKSkge1xuICAgICAgdGhpcy5maWxlcyA9IHRoaXMucGRmVXBsb2FkVXJscyA/IHRoaXMucGRmVXBsb2FkVXJscy5tYXAoKHVybCkgPT4gbmV3IEZpbGUodXJsKSkgOiBudWxsO1xuICAgIH1cbiAgfVxuICBnZXQgaWNvblN0eWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWNvblVybCA/IGB1cmwoXCIke3RoaXMuaWNvblVybH1cIikgbm8tcmVwZWF0IGNlbnRlciAvIDEwMCUgMTAwJWAgOiBudWxsO1xuICB9XG5cbiAgZ2V0IGljb25Db2xvcigpOiBzdHJpbmcge1xuICAgIC8vIGRldGVybWluZSBhbiBpY29uIGNvbG9yIGZvciBhIHByb2R1Y3Qgd2l0aCBubyBpY29uIGJ5IHVzaW5nIHRoZSBwcm9kdWN0IG5hbWVcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgcmV0dXJuIERFRkFVTFRfQ09MT1I7XG4gICAgfVxuXG4gICAgbGV0IG5hbWVTdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5uYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lU3VtICs9IHRoaXMubmFtZVtpXS5jaGFyQ29kZUF0KDApO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gbmFtZVN1bSAlIENPTE9SX0NPREVTLmxlbmd0aDtcbiAgICByZXR1cm4gQ09MT1JfQ09ERVNbaW5kZXhdO1xuICB9XG5cbiAgZ2V0TG1pQ2F0ZWdvcnlOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbG1pQ2F0ZWdvcmllcyA9IHRoaXMubG1pQ2F0ZWdvcmllcyB8fCBbXTtcbiAgICByZXR1cm4gbG1pQ2F0ZWdvcmllcy5tYXAoKGxtaUNhdGVnb3J5KSA9PlxuICAgICAgQ2FzZVRyYW5zZm9ybS5sb3dlclRvVGl0bGVDYXNlKGxtaUNhdGVnb3J5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCAnICcpKSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9kdWN0V2l0aFBhcmVudCBleHRlbmRzIFByb2R1Y3Qge1xuICBwYXJlbnRJZDogc3RyaW5nO1xuICBwYXJlbnROYW1lOiBzdHJpbmc7XG4gIHBhcmVudEljb25Vcmw6IHN0cmluZztcbiAgbXVsdGlwbGVBY3RpdmF0aW9uczogYm9vbGVhbjtcblxuICBzdGF0aWMgZnJvbUFwaShkYXRhOiBhbnkpOiBQcm9kdWN0V2l0aFBhcmVudCB7XG4gICAgY29uc3QgbmV3UHJvZHVjdCA9IHt9O1xuICAgIGRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29uc3QgbmV3S2V5ID0gQ2FzZVRyYW5zZm9ybS5zbmFrZVRvQ2FtZWxDYXNlKGtleSk7XG4gICAgICAgIG5ld1Byb2R1Y3RbbmV3S2V5XSA9IGRhdGFba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9kdWN0V2l0aFBhcmVudChuZXdQcm9kdWN0KTtcbiAgfVxuICBjb25zdHJ1Y3RvcihkYXRhPzogYW55KSB7XG4gICAgc3VwZXIoZGF0YSk7XG4gICAgdGhpcy5wYXJlbnRJZCA9IGRhdGEucGFyZW50SWQ7XG4gICAgdGhpcy5wYXJlbnROYW1lID0gZGF0YS5wYXJlbnROYW1lO1xuICAgIHRoaXMucGFyZW50SWNvblVybCA9IGRhdGEucGFyZW50SWNvblVybDtcbiAgICB0aGlzLm11bHRpcGxlQWN0aXZhdGlvbnMgPSBkYXRhLm11bHRpcGxlQWN0aXZhdGlvbnMgfHwgZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmlhbENvbmZpZ3VyYXRpb25JbnRlcmZhY2Uge1xuICB0cmlhbEVuYWJsZWQ6IGJvb2xlYW47XG4gIHRyaWFsRHVyYXRpb246IG51bWJlcjtcbn1cbiJdfQ==