UNPKG

287 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@vendasta/store/lib/pricing/pricing.component.ts","ng://@vendasta/store/lib/pricing/highlight-pricing/highlight-pricing.component.ts","ng://@vendasta/store/lib/pricing/table-pricing/table-pricing.component.ts","ng://@vendasta/store/lib/assets/i18n/en.ts","ng://@vendasta/store/lib/assets/i18n/cs.ts","ng://@vendasta/store/lib/pricing/pricing.module.ts","ng://@vendasta/store/lib/store-card.component.ts","ng://@vendasta/store/lib/store-card.module.ts","ng://@vendasta/store/lib/store.component.ts","ng://@vendasta/store/lib/order-form/dropdown-form-section/dropdown-form-section.component.ts","ng://@vendasta/store/lib/order-form/fields/field.component.ts","ng://@vendasta/store/lib/order-form/fields/field.service.ts","ng://@vendasta/store/lib/header-container/header-container.component.ts","ng://@vendasta/store/lib/header-container/header-container.module.ts","ng://@vendasta/store/lib/order-form/order-form-section/order-form-section-data.ts","ng://@vendasta/store/lib/order-form/order-form-section/order-form-section.component.ts","ng://@vendasta/store/lib/order-form/dropdown-form-section/dropdown-form-section-data.ts","ng://@vendasta/store/lib/order-form/order-form/interface.ts","ng://@vendasta/store/lib/order-form/order-form/order-form.service.ts","ng://@vendasta/store/lib/order-form/order-form/order-form.component.ts","ng://@vendasta/store/lib/order-form/fields/field-base.ts","ng://@vendasta/store/lib/order-form/fields/field-builder/field-builder.component.ts","ng://@vendasta/store/lib/order-form/order-item-list/order-item-list.service.ts","ng://@vendasta/store/lib/order-form/order-item-list/order-item-list.component.ts","ng://@vendasta/store/lib/shared/pricing-pipes.ts","ng://@vendasta/store/lib/order-form/order-form.module.ts","ng://@vendasta/store/lib/store.service.ts","ng://@vendasta/store/lib/files/shared/file.model.ts","ng://@vendasta/store/lib/pricing/pricing.ts","ng://@vendasta/store/lib/shared/sellable.ts","ng://@vendasta/store/lib/shared/case-transform.ts","ng://@vendasta/store/lib/shared/product.ts","ng://@vendasta/store/lib/addon-details/addon-details.component.ts","ng://@vendasta/store/lib/files/files.component.ts","ng://@vendasta/store/lib/files/files.module.ts","ng://@vendasta/store/lib/faqs/faqs.component.ts","ng://@vendasta/store/lib/faqs/faqs.module.ts","ng://@vendasta/store/lib/selling-info/selling-info.component.ts","ng://@vendasta/store/lib/selling-info/selling-info.module.ts","ng://@vendasta/store/lib/restrictions/country/supported-countries.component.ts","ng://@vendasta/store/lib/restrictions/restrictions.module.ts","ng://@vendasta/store/lib/addon-details/addon.module.ts","ng://@vendasta/store/lib/stencils/details-stencil.component.ts","ng://@vendasta/store/lib/stencils/card-stencil.component.ts","ng://@vendasta/store/lib/stencils/card-list-stencil.component.ts","ng://@vendasta/store/lib/stencils/search-bar-stencil.component.ts","ng://@vendasta/store/lib/stencils/list-stencil.component.ts","ng://@vendasta/store/lib/stencils/stencils.module.ts","ng://@vendasta/store/lib/addon-list/addon-list.component.ts","ng://@vendasta/store/lib/addon-list/addon-list.module.ts","ng://@vendasta/store/lib/heimdall-client-token.ts","ng://@vendasta/store/lib/storefront/storefront.component.ts","ng://@vendasta/store/lib/store.module.ts","ng://@vendasta/store/lib/lmi-categories.ts","ng://@vendasta/store/lib/salesperson-details/salesperson-details.component.ts","ng://@vendasta/store/lib/salesperson-details/salesperson-details.module.ts","ng://@vendasta/store/lib/package-details/package.ts","ng://@vendasta/store/lib/package-details/utils.ts","ng://@vendasta/store/lib/package-details/package-details.component.ts","ng://@vendasta/store/lib/products-nav/products-nav.component.ts","ng://@vendasta/store/lib/products-nav/products-nav-v2/products-nav-v2.component.ts","ng://@vendasta/store/lib/products-nav/products-nav.module.ts","ng://@vendasta/store/lib/package-details/package-details.module.ts","ng://@vendasta/store/lib/package-details-v2/package.ts","ng://@vendasta/store/lib/package-details-v2/package-details-v2.component.ts","ng://@vendasta/store/lib/package-details-v2/package-details-v2.module.ts","ng://@vendasta/store/lib/package-dropdown/sales-package.ts","ng://@vendasta/store/lib/package-dropdown/package-dropdown-item/package-dropdown-item.component.ts","ng://@vendasta/store/lib/package-dropdown/package-dropdown.component.ts","ng://@vendasta/store/lib/package-dropdown/package-dropdown.module.ts","ng://@vendasta/store/lib/product-details/product-details.component.ts","ng://@vendasta/store/lib/product-details/product-details.module.ts","ng://@vendasta/store/lib/shared/reseller-item.ts","ng://@vendasta/store/lib/order-form/fields/field-checkbox.ts","ng://@vendasta/store/lib/order-form/fields/field-dropdown.ts","ng://@vendasta/store/lib/order-form/fields/field-fileuploadgroup.ts","ng://@vendasta/store/lib/order-form/fields/field-textarea.ts","ng://@vendasta/store/lib/order-form/fields/field-textbox.ts","ng://@vendasta/store/lib/order-form/fields/field-vbcuser.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__values","o","m","Symbol","iterator","next","value","done","__read","r","e","ar","push","error","__spread","concat","VaPricingComponent","translateService","displayPriceService","_this","pricing","wrapFrequency","isAddon","hasVerifiedContract","highlightPrice","loaded","pricing$$","BehaviorSubject","billedProduct$$","hasVerifiedContract$$","isFree$","combineLatest","pricing$","billedProduct$","hasVerifiedContract$","pipe","map","_a","_b","billedProduct","isFreeHelper","prices","some","price","undefined","pricingTiers","shouldContactSales$","nestedPricesIsContactSales","isFlatPrice$","pricingTierData$","switchMap","pricingTierObservables","pricingTier","of","isStartingPrice","buildPricingTierString","buildPricingTierForProduct","billingFrequency","buildPricingTierForAddon","buildPriceStringForTier","pricingTierString","pricingTierForProduct","pricingTierForAddon","priceStringForTier","priceStringForTierWithoutFreq","priceData$","priceObservables","buildPriceStringForPricing","currency","buildFrequencyString","frequency","priceStringForPricingWithoutFrequency","priceStringForPricingWithFrequency","frequencyString","commitmentMessage$","buildCommitmentMessage","defineProperty","asObservable","ngOnChanges","changes","currentValue","tier","max","String","rangeMax","rangeMin","stream","minRange","maxRange","formattedFrequency","pricingRange","excludeFrequency","canIncludeStartingAtPrefix","formatDisplayPrice","formatBillingFrequency","frequencyTranslations","isFree","shouldContactSales","toString","toLowerCase","YEAR","MONTH","commitment","initial","recurring","Component","args","selector","template","TranslateService","DisplayPriceService","Input","HighlightPricingComponent","tslib_1.__extends","TablePricingComponent","En","en","FRONTEND.STORE","TOTAL","CONTACT_SALES","FREE","STARTING_AT","ENABLED_UPPER","ENABLE_UPPER","MIN_TO_MAX","PRODUCT_PRICING_WITH_FREQUENCY","COMMITMENT_WITH_RENEWAL","COMMITMENT","PRICING_FREQUENCIES","REQUIRES_DESCRIPTOR","ADMINISTRATIVE_QUESTIONS","AUTO_TITLE_TEXT","SOME_FIELDS_INVALID","OPTIONAL_FIELDS_UNANSWERED","COMPLETE","REQUIRES","ENABLED_WITH_PREREQUISITE","PRICE_APPLIES_PER_UNIT","PRICE_APPLIES_TO_ALL_UNITS","PRICING","FAQS","GALLERY","FILES","GET_IT_NOW","CONTAINS_NUM_ITEMS","Cs","cs","VaPricingModule","currentLang$","defaultLang$","translations","reloadLang","setTranslation","subscribe","currentLang","use","defaultLang","setDefaultLang","NgModule","imports","CommonModule","CoreSharedModule","TranslateModule","forChild","declarations","exports","Observable","decorators","type","Optional","Inject","StoreCardComponent","imageTransformationService","purchasedClicked","EventEmitter","cardClicked","descriptionClicked","bannerClicked","getBannerColorForName","COLOR_CODES","nameSum","item","name","charCodeAt","getSrcsetHeaderUrls","imageUrl","getSrcSetForImage","ImageTransformationService","Output","StoreCardModule","VaIconModule","MatCardModule","MatButtonModule","MatIconModule","MatMenuModule","ImageTransformationModule","StoreComponent","items","searchable","itemClicked","filterTerm","filter","pkg","indexOf","DropDownFormSectionComponent","startOpen","displayAutoTitle","titleText","displayAutoDescription","descriptionText","editingHint","expandable","autoDescriptionText","iconName","subscriptions","uniqueIndex","autoTitleText","ngOnInit","fields","reduce","c","a","hidden","parentForm","controls","addControl","toFormGroup","form","key","prepopulatedData","setValue","statusChanges","change","missingFields","control","dirty","touched","valueChanges","description","fileKey","substring","updateValueAndValidity","onlySelf","emitEvent","formFields","group","forEach","field","validations","required","validator","controlType","Validators","requiredTrue","formControl","FormControl","disabled","id","FormGroup","ngOnDestroy","subscription","unsubscribe","FieldComponent","valid","pristine","showCheckboxError","errors","FieldService","createFormControl","Injectable","VaHeaderContainerComponent","showEnableAddon","prerequisiteSelected","actionSelected","primaryPricingActionSelected","pricingActionSelected","onActionSelected","emit","onPrerequisiteSelected","showPricingModel","BillingModel","Tiered","Stairstep","includes","billingModel","getPricingModelTooltips","VaHeaderContainerModule","MatChipsModule","MatTooltipModule","OrderFormSectionData","OrderFormSectionComponent","topSection","getTopSection","data","primarySection","subsections","DropDownFormSectionData","ProductOrderFormSectionData","_super","AddonDropDownFormSectionData","OrderFormService","extractRequiredCommonFieldIds","orderForm","commonFormRequiredFields","keys","k","buildCommonFieldIds","orderForms","commonFieldIdsMap","Map","camelToSnakeCaseMap","set","fieldId","commonFieldId","get","from","values","fillCommonFormSections","fieldIds","commonData","labels","options","buildCommonOrderFormFields","section","populatedData","businessSection","sectionName","commonForm","businessSectionTitle","salespersonSection","salespersonSectionTitle","contactSection","contactSectionTitle","fieldIds_1","tslib_1.__values","fieldIds_1_1","fieldLabel","getLabelForFieldId","commonFormField","TextboxField","label","textboxType","displayOnly","readOnly","bypassRequiredQuestions","startsWith","showOfficeUseQuestions","buildOrderFormSectionData","buildCustomOrderFormFields","customFields","fileUploadUrl","users","answers","fieldTypeMap","text","textbox","dropdown","DropdownField","checkbox","CheckboxField","file","FileUploadGroupField","textarea","TextareaField","vbcuser","VBCUserField","fieldClass","result","fieldConfig","forOfficeUseOnly","uploadField","uploadUrl","encodeCustomFieldId","ca","find","JSON","parse","answer","uuid","decodeCustomFieldId","replace","RegExp","mapFieldType","fieldType","FieldType","TEXT","TEXTAREA","CHECKBOX","DROPDOWN","FILE","VBCUSER","NOT_SPECIFIED","orderFieldToSalesOrderField","fieldBase","Field","prefix","suffix","regexValidator","regexErrorMessage","stringify","productOrderFormToCustomFields","orderFormData","primaryCustomField","CustomField","productId","secondaryCustomFields","subsection","customField","addonId","addonKey","AddonKey","appId","getCommonFormSections","getCustomFormSections","products","product","addonInfo","addon","addonOrderForms","addonAnswers","productID","addonOrderForm","index","addonSection","addonAnswersForThisSpecificFormIndex","customFieldsAnswers","orderFormsFound","primaryOrder","otherOrdersForSameProduct","slice","productHasOrderForm","sectionData","subtitleText","tagline","iconUrl","icon","section_1","productAnswers","firstProductAnswers","otherProductAnswers_1","_","dupeSection","answersForSpecificForm","unshift","getExtraFieldsSection","extraFields","getCustomFieldsData","customFormSections","acc","getCommonFieldsData","commonFormSections","commonFields","singleField","CommonField","productIds","addonKeys","getExtraFieldsData","extraFieldsSection","extraFieldsData","contactName","contactEmail","contactPhoneNumber","businessAccountGroupId","businessName","businessAddress","businessPhoneNumber","businessWebsite","salespersonName","salespersonEmail","salespersonPhoneNumber","OrderFormComponent","dropdownOpen$$","dropdownOpen$","OrderFormOptions","orderFormOptions","productInfo","extraFieldsAnswers","getCommonFormData","getCustomFormData","changeReadOnly","disable","enable","openDropdown","providers","FieldBase","validatorBuilder","getLabel","FieldBuilderComponent","removeField","createDropDownOption","option","useValue","createDropDownOptions","orderFormFieldsGroupArray","FormArray","createOrderFormFieldGroup","orderFormField","formFieldId","orderFormFieldGroup","descriptionControl","labelControl","idControl","requiredControl","uploadUrlControl","prefixControl","suffixControl","regexValidatorControl","regex","regexErrorMessageControl","typeControl","FORM_FIELDS","obj","allowMultiples","allowDuplicates","maxChoices","min","test","number","optionsWithLabels","optionsArray","supportedFieldTypes","initForm","getOptionsArray","getCurrentFieldInterface","formFieldTypeInterface","removeOption","removeAt","addOption","getFormValues","formFieldType","changeDetection","ChangeDetectionStrategy","OnPush","OrderItemListService","getPriceSummary","includesUndefinedPricing","currentArray","freq","cur","existingCurIndex","findIndex","summaryItem","existingFreqIndex","quantifiedPrice","quantity","quantifiedDiscount","discountAmount","OrderItemListComponent","summary","summaryItems","calculateTotalPrice","totalPrice","taxOptions","taxTotal","all","tax","percentage","buildTaxLabel","taxPercentage","Number","toFixed","PricePipe","transform","isCents","translateZero","displaySymbol","Pipe","FormatBillingFrequencyPipe","VaOrderFormModule","FormsModule","MatCheckboxModule","MatExpansionModule","MatInputModule","MatOptionModule","MatProgressSpinnerModule","MatSelectModule","ReactiveFormsModule","VaFormsModule","VaBadgeModule","MatListModule","StoreService","markFormsAsTouched","formGroup","markAsTouched","File","url","lastIndexOf","Sellable","getCapitalizeFirstLetter","inputString","charAt","toUpperCase","currencyStr_1","currencySymbol_1","getCurrencySymbol","frequencyStr","roundedPrice","trim","formattedPricingList","priceStrings","join","currencySymbol","CaseTransform","snakeToCamelCase","l","lowerToTitleCase","smallWords","match","title","search","substr","Product","addons","editionId","editionName","entryUrl","screenshotUrls","pdfUploadUrls","lmiCategories","keySellingPoints","faqs","wholesalePrice","isArchived","restrictions","billingId","files","fromApi","newProduct","getLmiCategoryNames","lmiCategory","ProductWithParent","parentId","parentName","parentIconUrl","multipleActivations","AddonDetailsComponent","showPricing","actionEnabled","getPricing","reseller","VaFilesComponent","VaFilesModule","VaFaqsComponent","openFaqs","toggleFaq","splice","isFaqOpen","faqIcon","VaFaqsModule","VaSafeHtmlModule","VaSellingInfoComponent","desc","VaSellingInfoModule","SupportedCountriesComponent","RestrictionsModule","AddonModule","VaListModule","VaImageGalleryModule","VaBreadcrumbsModule","entryComponents","DetailsStencilComponent","CardStencilComponent","CardListStencilComponent","numCards","cards","SearchBarStencilComponent","ListStencilComponent","showHeader","numRows","rowHeight","sidePadding","rows","listItemRowStyles","height","padding","StencilsModule","VaAddonListComponent","billingService","cdr","_hasVerifiedContract","_canAccessContractPricing","addonSelected","billedProductsMap","billedProductLoaded","_addons","populateBilledProduct","displayContractPricing","billingIDs","getMultiProductPricing","partnerID","addonPricing","buildBilledProductFromProductPricingAndAddon","detectChanges","onClick","instanceOfPricing","object","getDisplayPricing","noData","isNullOrUndefined","isBilledProductLoaded","BillingService","ChangeDetectorRef","VaAddonListModule","BillingModule","MatDividerModule","HeimdallServiceToken","InjectionToken","HeimdallClient","userEvents","track","category","action","dimensions","HeimdallClientModule","StorefrontComponent","filterService","useCustomCase","categorySelected","packageIdSelected","getDataForCategory","categories$$","packagesMap$$","searchTerm$$","selectedCateoryId$$","lmiCategoryCheckboxList","LMI_CATEGORIES","CheckboxFilterField","categoryId","condition","cat","Categories","lmiCategoryFilterSection","FilterSection","lmiCategoryFilter","Filters","filters$","categories","tabbedFilterField","TabbedFilterField","setFilters","searchTermSubscription","debounceTime","distinctUntilChanged","searchTerm","selectedLMIFilters$","filters","fieldValuesObservable","startWith","showLMIFilter$","selectedLMIFilters","take","filteredItems$","packages","selectedCategoryId","storeItems","size","applyFilters","onSearchTermChanged","term","onFieldValueChanged","filterField","currentStoreItemsForSelectCategory","getValue","storeItemClicked","FilterService","StoreModule","UIKitModule","LMI_CATEGORY_MAP","previous","current","LMI_CATEGORIES_BY_NAME","VaSalespersonDetailsComponent","showGetItNow","getItNow","onGetItNowSelected","salesperson","photoUrlSecure","formattedName","jobTitle","email","city","state","VaSalespersonDetailsModule","Package","newPackage","selling_price","created","createdDate","Date","updated","updatedDate","orderProductsAndAddons","combined","order","itemMap","curr","getUniqueProductAddonId","combineProductOrderWithContainedProducts","filterUniqueAndDefined","elem","pos","arr","productOrder","itemIds","thing","VaPackageDetailsComponent","showActionButton","actionLabel","standAloneProducts$$","products$","addons$","pkg$","ReplaySubject","itemSelectedEvent$","combinedItemsList$","orderedItemsList$","nonEmptyCombinedItemsList","skipWhile","shareReplay","initialSelectedItem$","mergedSelection","observableMerge","selectedItem$","lmiCategories$","getLmiCategories","productNameForSingleAddon$","getProductNameForSingleAddon","displayTagName$","getDisplayTagline","standAloneProducts","Set","Addon","productName","selectItem","emitGetItNow","VaProductsNavComponent","itemSelected","selectedIndex","pageMarker","onItemSelected","moveSlides","slides","sliderWidth","Math","round","offsetWidth","children","clientWidth","numSlides","ceil","pageWidth","move","style","left","pageNext","pagePrev","ProductsNavV2Component","selected_id","VaProductsNavModule","VaPackageDetailsModule","PackageDetails","VaPackageDetailsV2Component","pkg$$","itemSelectedEvent$$","orderedLineItems$","line_items","getParentsNameForItem","lineItem","lis","lmiMap","prev","li","lmi","lmiCats","v","lineItems","tap","parent","VaPackageDetailsV2Module","SUCCESS","WARNING","ERROR","buildSalesPackages","salesProducts","productMap","productMatch","addonsInPackage","addonsArray","coerceAddonsForAddonKeys","addon_keys","buildSalesProductFromProduct","productItem","buildSalesProducts","addonsWithNoParent","addonsMap","addonArray","parentProduct","parentIcon","createSalesAddon","buildSalesAddonsWithNoParent","totalAddons","_c","formattedPrices","packageId","solution_id","createSalesPackage","buildSalesPackageFromPackage","createSalesProduct","salesAddons","createSalesAddons","parentInfo","createSalesProductWithStatus","activationStatus","addStatusesToSalesPackages","salesPackages","statuses","salesPackage","newProducts","addStatusesToSalesProduct","newAddonsWithNoParent","addStatusesToSalesAddon","findStatus","allStatuses","status","statusList","reducedList","statusNotification","ActivationStatus","createStatusNotificationItemForPackage","convertNumberToActivationStatus","createStatusNotificationItemForPackageItem","newSalesAddons","createSalesAddonWithStatus","statusIndex","packageItemId","INDENT_ZERO","INDENT_ONE","INDENT_TWO","VaPackageDropdownItemComponent","enableDropdown","indent","ListIndent","itemToggled","toggleItem","isActivatedStatus","isWarningStatus","isErrorStatus","VaPackageDropdownComponent","singularDropdown","hidePricing","packageProductIndent","packageAddonWithoutProductIndent","packageAddonWithProductIndent","productAddonIndent","packages$$","products$$","statuses$$","addons$$","orderItemLengths$$","packageToggles","productToggles","packages$","salesPackage$","zip","salesPackages$","salesProducts$","templateData$","openAllDropdowns","x","togglePackage","indexToToggle","openedIndex","productOpenedIndex","toggleProduct","packageOpenedIndex","standAloneProductDescription","standAloneProductWithParentDescription","packageDescription","hasProducts","hasOneProduct","animations","trigger","transition","animate","VaPackageDropdownModule","VaProductDetailsComponent","canAccessContractPricing","showPricingAction","enableClicked","getAddons","getActionLabel","onAddonSelected","VaProductDetailsModule","ResellerItem","isArray","overMaxChoices","DEFAULT_NUM_FILES","Error","fileType","numFiles","getOptions","vbcUsers","sort","compareUsersByEmail","user","firstName","lastName","returnString","labelString","userId","localeCompare","ProtoPricing","fromProto","protoLineItems","protoLineItem","convertProtoLineItemToStoreLineItem","convertProtoLineItemsToStoreLineItems","ProtoCurrency"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { BilledProduct, PricingTier } from '@vendasta/core/billing';\nimport { MarketplaceBillingFrequency, DisplayPriceService } from '@vendasta/core/shared';\nimport { Pricing, Price } from './pricing';\nimport { BehaviorSubject, combineLatest, Observable, of } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { map, switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'va-pricing',\n templateUrl: './pricing.component.html',\n styleUrls: ['./pricing.component.scss']\n})\nexport class VaPricingComponent implements OnChanges {\n @Input() pricing: Pricing = null;\n @Input() billedProduct: BilledProduct;\n @Input() wrapFrequency = false;\n @Input() isAddon = false;\n @Input() hasVerifiedContract = false;\n @Input() highlightPrice = true;\n @Input() loaded = true;\n\n pricing$$ = new BehaviorSubject<Pricing>(null);\n billedProduct$$ = new BehaviorSubject<BilledProduct>(null);\n hasVerifiedContract$$ = new BehaviorSubject<boolean>(false);\n\n isFree$: Observable<boolean>;\n shouldContactSales$: Observable<boolean>;\n isFlatPrice$: Observable<boolean>;\n\n pricingTierData$: Observable<{\n isStartingPrice: boolean,\n pricingTierString: string,\n pricingTierForProduct: string,\n pricingTierForAddon: string,\n priceStringForTier: string,\n priceStringForTierWithoutFreq: string,\n }[]>;\n\n priceData$: Observable<{\n isStartingPrice: boolean,\n priceStringForPricingWithoutFrequency: string,\n priceStringForPricingWithFrequency: string,\n frequencyString: string,\n }[]>;\n\n commitmentMessage$: Observable<string>;\n\n get pricing$(): Observable<Pricing> {\n return this.pricing$$.asObservable();\n }\n\n get billedProduct$(): Observable<BilledProduct> {\n return this.billedProduct$$.asObservable();\n }\n\n get hasVerifiedContract$(): Observable<boolean> {\n return this.hasVerifiedContract$$.asObservable();\n }\n\n constructor(private translateService: TranslateService, private displayPriceService: DisplayPriceService) {\n this.isFree$ = combineLatest([this.pricing$, this.billedProduct$, this.hasVerifiedContract$]).pipe(\n map(([pricing, billedProduct, hasVerifiedContract]) => {\n const isFreeHelper = (prices: { price: number }[]): boolean => {\n return prices ? prices.some(p => p.price === 0 || p.price === undefined) : false;\n };\n\n if (hasVerifiedContract && billedProduct) {\n return billedProduct.pricingTiers.length === 1 ? isFreeHelper(billedProduct.pricingTiers) : false;\n }\n return !!pricing && isFreeHelper(pricing.prices);\n })\n );\n\n this.shouldContactSales$ = combineLatest([this.pricing$, this.billedProduct$, this.hasVerifiedContract$]).pipe(\n map(([pricing, billedProduct, hasVerifiedContract]) => {\n const nestedPricesIsContactSales = (prices: { price: number }[]) => {\n return prices && prices.length > 0 ? prices.some(p => p.price === null || p.price < 0) : true;\n };\n\n if (hasVerifiedContract && billedProduct) {\n return nestedPricesIsContactSales(billedProduct.pricingTiers);\n }\n if (!pricing) {\n return true;\n }\n return nestedPricesIsContactSales(pricing.prices);\n })\n );\n\n this.isFlatPrice$ = this.billedProduct$.pipe(map(billedProduct => billedProduct.pricingTiers.length === 1));\n this.pricingTierData$ = this.billedProduct$.pipe(\n switchMap(billedProduct => {\n const pricingTierObservables = billedProduct.pricingTiers.map(pricingTier => {\n return combineLatest(\n of(pricingTier.isStartingPrice),\n this.buildPricingTierString(pricingTier),\n this.buildPricingTierForProduct(pricingTier, billedProduct.billingFrequency),\n this.buildPricingTierForAddon(pricingTier),\n this.buildPriceStringForTier(pricingTier, billedProduct.billingFrequency, pricingTier.isStartingPrice),\n this.buildPriceStringForTier(pricingTier)\n ).pipe(\n map(([isStartingPrice, pricingTierString, pricingTierForProduct,\n pricingTierForAddon, priceStringForTier, priceStringForTierWithoutFreq]) => {\n return {\n isStartingPrice: isStartingPrice,\n pricingTierString: pricingTierString,\n pricingTierForProduct: pricingTierForProduct,\n pricingTierForAddon: pricingTierForAddon,\n priceStringForTier: priceStringForTier,\n priceStringForTierWithoutFreq: priceStringForTierWithoutFreq\n };\n })\n )\n });\n return combineLatest(...pricingTierObservables)\n })\n );\n\n this.priceData$ = this.pricing$.pipe(\n switchMap(pricing => {\n const priceObservables = pricing.prices.map(price => {\n return combineLatest(\n of(price.isStartingPrice),\n this.buildPriceStringForPricing(price, pricing.currency, true, false),\n this.buildPriceStringForPricing(price, pricing.currency, false, true),\n this.buildFrequencyString(price.frequency)\n ).pipe(\n map(([isStartingPrice, priceStringForPricingWithoutFrequency, priceStringForPricingWithFrequency, frequencyString]) => {\n return {\n isStartingPrice: isStartingPrice,\n priceStringForPricingWithoutFrequency: priceStringForPricingWithoutFrequency,\n priceStringForPricingWithFrequency: priceStringForPricingWithFrequency,\n frequencyString: frequencyString\n };\n })\n )\n });\n return combineLatest(...priceObservables);\n })\n );\n\n this.commitmentMessage$ = this.buildCommitmentMessage();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hasOwnProperty('pricing')) {\n this.pricing$$.next(changes.pricing.currentValue);\n }\n if (changes.hasOwnProperty('billedProduct')) {\n this.billedProduct$$.next(changes.billedProduct.currentValue);\n }\n if (changes.hasOwnProperty('hasVerifiedContract')) {\n this.hasVerifiedContract$$.next(changes.hasVerifiedContract.currentValue);\n }\n }\n\n buildPricingTierString(tier: PricingTier): Observable<string> {\n let max = String(tier.rangeMax);\n if (tier.rangeMax === -1) {\n max = '∞';\n if (tier.rangeMin === 0 || tier.rangeMin === 1) {\n return of('');\n }\n }\n return this.translateService.stream('FRONTEND.STORE.MIN_TO_MAX', {minRange: String(tier.rangeMin), maxRange: max});\n }\n\n buildPricingTierForProduct(tier: PricingTier, frequency?: string): Observable<string> {\n return combineLatest(this.buildPricingTierString(tier), this.buildFrequencyString(frequency)).pipe(\n switchMap(([pricingTier, formattedFrequency]) => {\n if (pricingTier) {\n return this.translateService.stream('FRONTEND.STORE.PRODUCT_PRICING_WITH_FREQUENCY', {\n pricingTier: pricingTier,\n frequency: formattedFrequency\n });\n }\n return of(formattedFrequency);\n })\n );\n }\n\n buildPricingTierForAddon(tier: PricingTier): Observable<string> {\n return this.buildPricingTierString(tier).pipe(\n map(pricingRange => pricingRange ? pricingRange : '')\n );\n }\n\n buildPriceStringForPricing(price: Price, currency: string, excludeFrequency: boolean, canIncludeStartingAtPrefix: boolean):\n Observable<string> {\n return this.displayPriceService.formatDisplayPrice(\n price.price,\n currency,\n (excludeFrequency ? '' : price.frequency) as any,\n true,\n true,\n true,\n price.isStartingPrice && canIncludeStartingAtPrefix,\n )\n }\n\n buildPriceStringForTier(tier: PricingTier, frequency?: MarketplaceBillingFrequency, isStartingPrice?: boolean): Observable<string> {\n return this.displayPriceService.formatDisplayPrice(\n tier.price,\n this.billedProduct.currency,\n frequency as any,\n undefined,\n undefined,\n undefined,\n isStartingPrice);\n }\n\n buildFrequencyString(frequency?: string): Observable<string> {\n return this.displayPriceService.formatBillingFrequency(frequency);\n }\n\n buildCommitmentMessage(): Observable<string> {\n return combineLatest([\n this.translateService.stream('FRONTEND.STORE.PRICING_FREQUENCIES'),\n this.billedProduct$,\n this.pricing$,\n this.isFree$,\n this.shouldContactSales$\n ]).pipe(\n switchMap(([frequencyTranslations, billedProduct, pricing, isFree, shouldContactSales]) => {\n const frequency = billedProduct ? billedProduct.billingFrequency.toString().toLowerCase() :\n pricing && pricing.prices.length > 0 ? pricing.prices[0].frequency.toLowerCase() : '';\n let frequencyString = '';\n if (frequency === 'yearly') {\n frequencyString = frequencyTranslations.YEAR;\n } else if (frequency === 'monthly') {\n frequencyString = frequencyTranslations.MONTH;\n }\n if (!frequencyString || isFree || shouldContactSales) {\n return of('');\n }\n if (billedProduct && billedProduct.commitment) {\n const initial = billedProduct.commitment.initial;\n const recurring = billedProduct.commitment.recurring;\n return this.translateService.stream('FRONTEND.STORE.COMMITMENT_WITH_RENEWAL', {\n initial: initial,\n frequencyString: frequencyString,\n recurring: recurring,\n });\n }\n return of('');\n })\n )\n }\n}\n","import {Component} from '@angular/core';\nimport {VaPricingComponent} from '../pricing.component';\n\n@Component({\n selector: 'highlight-pricing',\n templateUrl: './highlight-pricing.component.html',\n styleUrls: ['./highlight-pricing.component.scss'],\n})\nexport class HighlightPricingComponent extends VaPricingComponent {\n}\n","import {Component} from '@angular/core';\nimport {VaPricingComponent} from '../pricing.component';\n\n@Component({\n selector: 'table-pricing',\n templateUrl: './table-pricing.component.html',\n styleUrls: ['./table-pricing.component.scss'],\n})\nexport class TablePricingComponent extends VaPricingComponent {\n}\n","/*tslint:disable*/\nexport class En {\n static readonly en = {\n \"FRONTEND.STORE\": {\n \"TOTAL\": \"Total\",\n \"CONTACT_SALES\": \"Contact Sales\",\n \"FREE\": \"Free\",\n \"STARTING_AT\": \"Starting at\",\n \"ENABLED_UPPER\": \"ENABLED\",\n \"ENABLE_UPPER\": \"ENABLE\",\n \"MIN_TO_MAX\": \"{{minRange}} to {{maxRange}}\",\n \"PRODUCT_PRICING_WITH_FREQUENCY\": \"{{pricingTier}} accounts {{frequency}}\",\n \"COMMITMENT_WITH_RENEWAL\": \"*{{initial}} {{frequencyString}} minimum, renews for {{recurring}} {{frequencyString}} periods\",\n \"COMMITMENT\": \"${{initial}} ${{frequencyString}} commitment\",\n \"PRICING_FREQUENCIES\": {\n \"MONTH\": \"month\",\n \"YEAR\": \"year\"\n },\n \"REQUIRES_DESCRIPTOR\": \"(Requires {{requirementName}})\",\n \"ADMINISTRATIVE_QUESTIONS\": \"Administrative Questions\",\n \"AUTO_TITLE_TEXT\": {\n \"SOME_FIELDS_INVALID\": \"* Some fields are invalid and/or required but empty\",\n \"OPTIONAL_FIELDS_UNANSWERED\": \"Optional fields unanswered\",\n \"COMPLETE\": \"Complete\"\n },\n \"REQUIRES\": \"Requires\",\n \"ENABLED_WITH_PREREQUISITE\": \"Enabled with {{prerequisite}}\",\n \"PRICE_APPLIES_PER_UNIT\": \"Price applies per unit within a range\",\n \"PRICE_APPLIES_TO_ALL_UNITS\": \"Price applies to all units once range is met\",\n \"PRICING\": \"Pricing\",\n \"FAQS\": \"FAQs\",\n \"GALLERY\": \"Gallery\",\n \"FILES\": \"Files\",\n \"GET_IT_NOW\": \"Get It Now\",\n \"CONTAINS_NUM_ITEMS\": \"Contains {{itemCount}} items\"\n }\n };\n}\n","/*tslint:disable*/\nexport class Cs {\n static readonly cs = {\n \"FRONTEND.STORE\": {\n \"TOTAL\": \"Celkem\",\n \"CONTACT_SALES\": \"Kontaktovat obchodního zástupce\",\n \"FREE\": \"Zdarma\",\n \"STARTING_AT\": \"Začíná na\",\n \"ENABLED_UPPER\": \"POVOLENO\",\n \"ENABLE_UPPER\": \"POVOLIT\",\n \"MIN_TO_MAX\": \"{{minRange}} až {{maxRange}}\",\n \"PRODUCT_PRICING_WITH_FREQUENCY\": \"{{pricingTier}} účtů za {{frequency}}\",\n \"COMMITMENT_WITH_RENEWAL\": \"*{{initial}} {{frequencyString}} minimum, obnovuje se na {{recurring}} {{frequencyString}}\",\n \"COMMITMENT\": \"Závazek {{initial}} {{frequencyString}}\",\n \"PRICING_FREQUENCIES\": {\n \"MONTH\": \"měsíč\",\n \"YEAR\": \"rok\"\n },\n \"REQUIRES_DESCRIPTOR\": \"(Vyžaduje {{requirementName}})\",\n \"ADMINISTRATIVE_QUESTIONS\": \"Administrativní otázky\",\n \"AUTO_TITLE_TEXT\": {\n \"SOME_FIELDS_INVALID\": \"* Některá pole jsou neplatná a/nebo povinná, ale prázdná\",\n \"OPTIONAL_FIELDS_UNANSWERED\": \"Volitelná pole nezodpovězena\",\n \"COMPLETE\": \"Kompletní\"\n },\n \"REQUIRES\": \"Vyžaduje\",\n \"ENABLED_WITH_PREREQUISITE\": \"Povoleno s {{prerequisite}}\",\n \"PRICE_APPLIES_PER_UNIT\": \"Cena platí za jednotku v rozsahu\",\n \"PRICE_APPLIES_TO_ALL_UNITS\": \"Cena se vztahuje na všechny jednotky, jakmile je dosaženo rozsahu\",\n \"PRICING\": \"Cena\",\n \"FAQS\": \"FAQ\",\n \"GALLERY\": \"Galerie\",\n \"FILES\": \"Soubory\",\n \"GET_IT_NOW\": \"Získat hned\",\n \"CONTAINS_NUM_ITEMS\": \"Obsahuje {{itemCount}} položek\"\n }\n };\n}\n","import {Inject, NgModule, Optional} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {VaPricingComponent} from './pricing.component';\nimport {HighlightPricingComponent} from './highlight-pricing/highlight-pricing.component';\nimport {TablePricingComponent} from './table-pricing/table-pricing.component';\nimport {CoreSharedModule} from '@vendasta/core/shared';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {Observable} from 'rxjs';\nimport { En } from '../assets/i18n/en';\nimport { Cs } from '../assets/i18n/cs';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreSharedModule,\n TranslateModule.forChild()\n ],\n declarations: [VaPricingComponent, HighlightPricingComponent, TablePricingComponent],\n exports: [VaPricingComponent]\n})\nexport class VaPricingModule {\n constructor(private translateService: TranslateService,\n @Optional() @Inject('CURRENT_LANG') currentLang$: Observable<string>,\n @Optional() @Inject('DEFAULT_LANG') defaultLang$: Observable<string>) {\n if (!this.translateService.translations.hasOwnProperty('en')) {\n this.translateService.reloadLang('en');\n }\n if (!this.translateService.translations.hasOwnProperty('cs')) {\n this.translateService.reloadLang('cs');\n }\n this.translateService.setTranslation('en', En.en, true);\n this.translateService.setTranslation('cs', Cs.cs, true);\n if (currentLang$) { currentLang$.subscribe(currentLang => translateService.use(currentLang)); }\n if (defaultLang$) { defaultLang$.subscribe(defaultLang => translateService.setDefaultLang(defaultLang)); }\n }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\n\nimport {StoreItem} from './store-item';\nimport {ImageTransformationService} from '@vendasta/core/image-transformation';\n\n@Component({\n selector: 'va-store-card',\n template: `\n<mat-card class=\"hover-card\" *ngIf=\"item\" (click)=\"cardClicked.emit(item)\">\n<div class=\"hover-area\">\n <div class=\"product-banner\" (click)=\"bannerClicked.emit(item)\"\n [style.background-color]=\"item.headerImageUrl ? '': getBannerColorForName()\">\n <img class=\"img-container\" *ngIf=\"item.headerImageUrl\"\n [src]=\"item.headerImageUrl\" [srcset]=\"getSrcsetHeaderUrls(item.headerImageUrl)\">\n </div>\n\n <div class=\"description\" (click)=\"descriptionClicked.emit(item)\">\n <mat-card-header>\n <va-icon mat-card-avatar [diameter]=\"40\" [name]=\"item.name\" [iconUrl]=\"item.iconUrl\"></va-icon>\n <mat-card-title>{{item.name}}</mat-card-title>\n <mat-card-subtitle>\n <ng-container *ngIf=\"item.pricing; else formatted\">\n <va-pricing [pricing]=\"item.pricing\"\n [highlightPrice]=\"false\"></va-pricing>\n </ng-container>\n <ng-template #formatted>{{item.formattedPrice}}</ng-template>\n </mat-card-subtitle>\n </mat-card-header>\n <mat-card-content> {{ item.tagline }}\n </mat-card-content>\n </div>\n\n <button *ngIf=\"item.purchased !== undefined\"\n mat-button color=\"primary\" class=\"enabled-indicator\" (click)=\"purchasedClicked.emit(item)\" [disabled]=\"item.purchased\">\n <i *ngIf=\"!item.purchased\" class=\"material-icons\">add</i>\n <i *ngIf=\"item.purchased\" class=\"material-icons\" style=\"color: #39B74A\">check</i>\n <span>{{ (item.purchased ? 'FRONTEND.STORE.ENABLED_UPPER' : 'FRONTEND.STORE.ENABLE_UPPER') | translate }}</span>\n </button>\n </div>\n</mat-card>\n `,\n styleUrls: ['./store-card.component.scss']\n})\nexport class StoreCardComponent {\n @Input() item: StoreItem;\n @Output() purchasedClicked = new EventEmitter<StoreItem>();\n @Output() cardClicked = new EventEmitter<StoreItem>();\n @Output() descriptionClicked = new EventEmitter<StoreItem>();\n @Output() bannerClicked = new EventEmitter<StoreItem>();\n\n constructor(private imageTransformationService: ImageTransformationService) {}\n\n getBannerColorForName(): string {\n // determine an icon color for a product with no icon by using the product name\n const COLOR_CODES = [\n '#EF5350', '#42A5F5', '#66BB6A', '#FFA726', '#AB47BC', '#FFCA28', '#EC407A', '#26C6DA',\n '#FF7B57'\n ];\n let nameSum = 0;\n const defaultColor = '#808080';\n if (!this.item.name) {\n return defaultColor;\n }\n for (let i = 0; i < this.item.name.length; i++) {\n nameSum += this.item.name[i].charCodeAt(0);\n }\n const index = nameSum % COLOR_CODES.length;\n return COLOR_CODES[index];\n }\n\n getSrcsetHeaderUrls(imageUrl: string): string {\n return this.imageTransformationService.getSrcSetForImage(imageUrl, [680, 1360, 2720]);\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { Inject, NgModule, Optional } from '@angular/core';\nimport { MatButtonModule, MatCardModule, MatIconModule, MatMenuModule } from '@angular/material';\nimport { ImageTransformationModule } from '@vendasta/core/image-transformation';\nimport { VaIconModule } from '@vendasta/uikit';\nimport { VaPricingModule } from './pricing/pricing.module';\nimport { StoreCardComponent } from './store-card.component';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { En } from './assets/i18n/en';\nimport { Cs } from './assets/i18n/cs';\n\n@NgModule({\n imports: [\n CommonModule,\n VaIconModule,\n MatCardModule,\n MatButtonModule,\n MatIconModule,\n MatMenuModule,\n ImageTransformationModule,\n VaPricingModule,\n TranslateModule.forChild()\n ],\n declarations: [StoreCardComponent],\n exports: [StoreCardComponent]\n})\nexport class StoreCardModule {\n constructor(private translateService: TranslateService,\n @Optional() @Inject('CURRENT_LANG') currentLang$: Observable<string>,\n @Optional() @Inject('DEFAULT_LANG') defaultLang$: Observable<string>) {\n if (!this.translateService.translations.hasOwnProperty('en')) {\n this.translateService.reloadLang('en');\n }\n if (!this.translateService.translations.hasOwnProperty('cs')) {\n this.translateService.reloadLang('cs');\n }\n this.translateService.setTranslation('en', En.en, true);\n this.translateService.setTranslation('cs', Cs.cs, true);\n if (currentLang$) { currentLang$.subscribe(currentLang => translateService.use(currentLang)); }\n if (defaultLang$) { defaultLang$.subscribe(defaultLang => translateService.setDefaultLang(defaultLang)); }\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter} from '@angular/core';\n\nimport {StoreItem} from './store-item';\n\n@Component({\n selector: 'va-store',\n template: `\n <div class=\"toolbar\">\n <div *ngIf=\"searchable\" class=\"table-controls-row\">\n <va-search-box (update)=\"filterTerm = $event\"></va-search-box>\n </div>\n </div>\n <div class=\"row row-gutters\">\n <div *ngFor=\"let item of filteredItems\" class=\"col-flex\">\n <va-store-card [item]=\"item\" (cardClicked)=\"this.itemClicked.emit(item)\"></va-store-card>\n </div>\n </div>\n `,\n styleUrls: ['./store.component.scss']\n})\nexport class StoreComponent {\n @Input() items: StoreItem[] = [];\n @Input() searchable = true;\n @Output() itemClicked = new EventEmitter<StoreItem>();\n\n filterTerm: string;\n\n get filteredItems(): StoreItem[] {\n if (this.filterTerm) {\n return this.items.filter(pkg => pkg.name.toLowerCase().indexOf(this.filterTerm.toLowerCase()) !== -1);\n }\n return this.items;\n }\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { FieldBase } from '../fields/field-base';\nimport { combineLatest, Subscription } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'va-dropdown-form-section',\n template: `\n <mat-expansion-panel *ngIf=\"expandable || expandable == undefined\" [expanded]=\"startOpen\">\n <mat-expansion-panel-header [collapsedHeight]=\"'*'\" [expandedHeight]=\"'*'\">\n <div class=\"dropdown-form-header\">\n <mat-icon\n [ngClass]=\"{invalid: iconName=='warning', valid: iconName=='check_circle', question: iconName=='help_outline'}\">\n {{ iconName }}\n </mat-icon>\n <mat-panel-title *ngIf=\"!displayAutoTitle\">\n {{ titleText }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"displayAutoTitle\"\n [ngClass]=\"{valid: iconName=='check_circle', invalid: iconName=='warning'}\">\n <div class=\"title\"> {{ titleText }}</div>\n <div *ngIf=\"titleText && autoTitleText\"> &nbsp;</div>\n <div><ng-container><i> {{autoTitleText}} </i></ng-container></div>\n </mat-panel-title>\n <mat-panel-description *ngIf=\"displayAutoDescription\" [ngClass]=\"{invalid: iconName=='warning'}\">\n {{ autoDescriptionText }}\n </mat-panel-description>\n <mat-panel-description *ngIf=\"!displayAutoDescription\" [ngClass]=\"{invalid: iconName=='warning'}\">\n <i> {{descriptionText}} </i>\n </mat-panel-description>\n </div>\n </mat-expansion-panel-header>\n <div class=\"expansion-panel-body\">\n <va-field *ngFor=\"let field of fields\" [field]=\"field\"\n [form]=\"parentForm.controls[titleText + uniqueIndex]\"\n ></va-field>\n <p *ngIf=\"editingHint != ''\" class=\"editing-hint\"><i>{{ editingHint }}</i></p>\n </div>\n </mat-expansion-panel>\n `,\n styleUrls: ['./dropdown-form-section.component.scss']\n})\nexport class DropDownFormSectionComponent implements OnInit, OnDestroy {\n @Input() prepopulatedData: {};\n @Input() startOpen = false;\n @Input() parentForm: FormGroup;\n @Input() displayAutoTitle = false;\n @Input() titleText = '';\n @Input() displayAutoDescription = true;\n @Input() descriptionText = '';\n @Input() fields: FieldBase<any>[];\n @Input() editingHint = '';\n @Input() expandable = true;\n autoDescriptionText = '';\n iconName = 'help_outline';\n subscriptions: Subscription[] = [];\n uniqueIndex = 1;\n autoTitleText = '';\n\n constructor(private translateService: TranslateService) {}\n\n ngOnInit(): void {\n const allFieldsHidden = this.fields.reduce((p, c, i, a) => p && c.hidden, true);\n if (allFieldsHidden) {\n this.expandable = false;\n }\n while (this.parentForm.controls.hasOwnProperty(this.titleText + this.uniqueIndex)) {\n this.uniqueIndex += 1;\n }\n this.parentForm.addControl(this.titleText + this.uniqueIndex, this.toFormGroup(this.fields));\n const form = this.parentForm.controls[this.titleText + this.uniqueIndex] as FormGroup;\n\n for (const key in form.controls) {\n if (form.controls.hasOwnProperty(key)) {\n if (this.prepopulatedData != null && this.prepopulatedData.hasOwnProperty(key)) {\n form.controls[key].setValue(this.prepopulatedData[key]);\n }\n }\n }\n this.subscriptions.push(\n combineLatest([\n form.statusChanges,\n this.translateService.stream('FRONTEND.STORE.AUTO_TITLE_TEXT')\n ]).subscribe(([change, autoTitleText]) => {\n let missingFields = false;\n for (const control in form.controls) {\n if (!form.controls[control].value || (form.controls[control].value.constructor === Array && !form.controls[control].value[0])) {\n this.iconName = 'help_outline';\n missingFields = true;\n if (change === 'INVALID') {\n this.autoTitleText = autoTitleText.SOME_FIELDS_INVALID;\n if (form.controls[control].dirty || form.controls[control].touched) {\n this.iconName = 'warning';\n break;\n }\n } else {\n this.autoTitleText = autoTitleText.OPTIONAL_FIELDS_UNANSWERED;\n }\n }\n }\n if (!missingFields) {\n this.iconName = 'check_circle';\n this.autoTitleText = autoTitleText.COMPLETE;\n }\n })\n );\n\n if (this.displayAutoDescription) {\n this.subscriptions.push(\n form.valueChanges.subscribe(changes => {\n let description = '';\n for (const key in changes) {\n if (changes.hasOwnProperty(key) && changes[key] != null && changes[key].length > 0) {\n if (changes[key][0].name) {\n for (const fileKey in changes[key]) {\n if (changes[key][fileKey] != null) {\n description += changes[key][fileKey].name;\n description += ', ';\n }\n }\n } else {\n description += changes[key];\n description += ', ';\n }\n }\n }\n this.autoDescriptionText = description.substring(0, description.length - 2);\n })\n );\n }\n form.updateValueAndValidity({ onlySelf: false, emitEvent: true });\n }\n\n toFormGroup(formFields: FieldBase<any>[]): FormGroup {\n const group: any = {};\n formFields.forEach(field => {\n let validations;\n if (!field.required || field.hidden) {\n validations = field.validator;\n } else if (field.controlType === 'checkbox') {\n validations = [Validators.requiredTrue, field.validator];\n } else {\n validations = [Validators.required, field.validator];\n }\n\n const formControl = new FormControl({value: field.value, disabled: field.disabled}, validations);\n group[field.id] = formControl;\n this.subscriptions.push(formControl.valueChanges.subscribe(value => (field.value = value)));\n });\n\n return new FormGroup(group);\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(subscription => subscription.unsubscribe());\n }\n}\n","import {Input, Component} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\n\n@Component({\n selector: 'va-field',\n styleUrls: ['./field.component.scss'],\n templateUrl: './field.component.html'\n})\nexport class FieldComponent {\n @Input() field: any; // avoid checking union type in template\n @Input() form: FormGroup;\n get isValid(): boolean {\n return this.form.controls[this.field.id].valid || this.form.controls[this.field.id].pristine;\n }\n\n showCheckboxError(field): boolean {\n return this.form.controls[field].errors && this.form.controls[field].errors.required && this.form.controls[field].touched;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FieldBase } from './field-base';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\n@Injectable()\nexport class FieldService {\n createFormControl(field: FieldBase<any>): FormControl {\n if (field.required) {\n return new FormControl(field.value, Validators.required);\n } else {\n return new FormControl(field.value);\n }\n }\n\n toFormGroup(formFields: FieldBase<any>[], subscriptions: Subscription[]): FormGroup {\n const group: any = {};\n formFields.forEach(field => {\n let formControl: FormControl;\n if (field.controlType === 'checkbox') {\n formControl = new FormControl(field.value);\n } else {\n formControl = this.createFormControl(field);\n }\n group[field.id] = formControl;\n if (subscriptions) {\n subscriptions.push(formControl.valueChanges.subscribe(value => (field.value = value)));\n }\n });\n return new FormGroup(group);\n }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Pricing} from '../pricing/pricing';\nimport {BilledProduct, BillingModel} from '@vendasta/core/billing';\nimport { Observable, of } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'va-header-container',\n templateUrl: './header-container.component.html',\n styleUrls: ['./header-container.component.scss']\n})\n\nexport class VaHeaderContainerComponent {\n @Input() iconUrl: string;\n @Input() title: string;\n @Input() tagline: string;\n @Input() prerequisite: string;\n @Input() chipLabels: string[];\n @Input() pricing: Pricing;\n @Input() billedProduct: BilledProduct;\n @Input() loaded = true;\n @Input() hasVerifiedContract: boolean;\n @Input() pricingLabel: string;\n @Input() primaryPricingActionLabel: string;\n @Input() pricingActionLabel: string;\n @Input() pricingActionEnabled: boolean;\n @Input() actionEnabled: boolean;\n @Input() actionLabel: string;\n @Input() showAction: boolean;\n @Input() showPricing: boolean;\n @Input() showEnableAddon = false;\n @Input() prerequisiteLabel: string;\n @Output() prerequisiteSelected = new EventEmitter();\n @Output() actionSelected = new EventEmitter();\n @Output() primaryPricingActionSelected = new EventEmitter();\n @Output() pricingActionSelected = new EventEmitter();\n\n constructor(private translateService: TranslateService) {}\n\n onActionSelected(): void {\n this.actionSelected.emit();\n }\n\n onPrerequisiteSelected(): void {\n this.prerequisiteSelected.emit();\n }\n\n showPricingModel(billedProduct: BilledProduct): boolean {\n return billedProduct && [BillingModel.Tiered, BillingModel.Stairstep].includes(billedProduct.billingModel);\n }\n\n getPricingModelTooltips(billingModel: BillingModel): Observable<string> {\n switch (billingModel) {\n case BillingModel.Stairstep:\n return this.translateService.stream('FRONTEND.STORE.PRICE_APPLIES_PER_UNIT');\n case BillingModel.Tiered:\n return this.translateService.stream('FRONTEND.STORE.PRICE_APPLIES_TO_ALL_UNITS');\n default:\n return of('');\n }\n }\n}\n","import { Inject, NgModule, Optional } from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {VaHeaderContainerComponent} from './header-container.component';\nimport {MatChipsModule, MatIconModule, MatButtonModule, MatTooltipModule} from '@angular/material';\nimport {VaPricingModule} from '../pricing/pricing.module';\nimport {VaIconModule} from '@vendasta/uikit';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { En } from '../assets/i18n/en';\nimport { Cs } from '../assets/i18n/cs';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n VaPricingModule,\n VaIconModule,\n MatChipsModule,\n MatButtonModule,\n MatTooltipModule,\n TranslateModule.forChild()\n ],\n declarations: [VaHeaderContainerComponent],\n exports: [VaHeaderContainerComponent]\n})\nexport class VaHeaderContainerModule {\n constructor(private translateService: TranslateService,\n @Optional() @Inject('CURRENT_LANG') currentLang$: Observable<string>,\n @Optional() @Inject('DEFAULT_LANG') defaultLang$: Observable<string>) {\n if (!this.translateService.translations.hasOwnProperty('en')) {\n this.translateService.reloadLang('en');\n }\n if (!this.translateService.translations.hasOwnProperty('cs')) {\n this.translateService.reloadLang('cs');\n }\n this.translateService.setTranslation('en', En.en, true);\n this.translateService.setTranslation('cs', Cs.cs, true);\n if (currentLang$) { currentLang$.subscribe(currentLang => translateService.use(currentLang)); }\n if (defaultLang$) { defaultLang$.subscribe(defaultLang => translateService.setDefaultLang(defaultLang)); }\n }\n}\n","import {FormGroup} from '@angular/forms';\nimport {DropDownFormSectionData} from '../dropdown-form-section/dropdown-form-section-data';\nexport class OrderFormSectionData {\n parentForm: FormGroup;\n titleText: string;\n subtitleText: string;\n descriptionText: string;\n iconUrl: string;\n primarySection: DropDownFormSectionData;\n subsections: DropDownFormSectionData[];\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {DropDownFormSectionData} from '../dropdown-form-section/dropdown-form-section-data';\nimport {OrderFormSectionData} from './order-form-section-data';\n\n@Component({\n selector: 'va-order-form-section',\n templateUrl: 'order-form-section.component.html',\n styleUrls: ['./order-form-section.component.scss'],\n})\n\nexport class OrderFormSectionComponent implements OnInit {\n @Input() data: OrderFormSectionData;\n\n constructor() {}\n\n ngOnInit(): void {\n // The first section should always be expanded.\n const topSection = this.getTopSection();\n if (topSection) {\n topSection.startOpen = true;\n }\n }\n\n getTopSection(): DropDownFormSectionData {\n if (!this.data) {\n return null;\n }\n if (this.data.primarySection) {\n return this.data.primarySection;\n }\n if (this.data.subsections && this.data.subsections.length > 0) {\n return this.data.subsections[0];\n }\n return null;\n }\n}\n","import {FieldBase} from '../fields/field-base';\nimport {FormGroup} from '@angular/forms';\n\nexport class DropDownFormSectionData {\n prepopulatedData: any;\n startOpen: boolean;\n parentForm: FormGroup;\n displayAutoTitle: boolean;\n titleText: string;\n displayAutoDescription: boolean;\n descriptionText: string;\n fields: FieldBase<any>[];\n editingHint: string;\n /* tslint:disable */\n expandable? = true;\n /* tslint:enable */\n}\n","import {DropDownFormSectionData} from '../dropdown-form-section/dropdown-form-section-data';\nimport {OrderFormSectionData} from '../order-form-section/order-form-section-data';\nimport {FieldBase, FieldBaseOptions} from '../fields/field-base';\nimport {DropDownFieldOptions} from '../fields/field-dropdown';\nimport {FileUploadGroupFieldOptions} from '../fields/field-fileuploadgroup';\nimport {TextBoxFieldOptions} from '../fields/field-textbox';\nimport {VBCUserFieldOptions} from '../fields/field-vbcuser';\n\nexport interface OrderLabelsInterface {\n commonForm: {\n headerTitle: string;\n headerText: string;\n editingHint: string;\n businessSectionTitle?: string;\n salespersonSectionTitle?: string;\n contactSectionTitle?: string;\n businessName?: string;\n businessAddress?: string;\n businessPhoneNumber?: string;\n businessAccountGroupId?: string;\n businessWebsite?: string;\n salespersonName?: string;\n salespersonPhoneNumber?: string;\n salespersonEmail?: string;\n contactName?: string;\n contactPhoneNumber?: string;\n contactEmail?: string;\n };\n}\n\nexport type OrderFormFieldOptionsType = (FieldBaseOptions | DropDownFieldOptions | FileUploadGroupFieldOptions | TextBoxFieldOptions | VBCUserFieldOptions)\n\nexport interface OrderFormInterface {\n appId: string;\n addonId?: string;\n commonForm?: IncludedCommonFormFieldsInterface;\n commonFormRequiredFields?: IncludedCommonFormFieldsInterface;\n customFields?: OrderFormFieldOptionsType[];\n}\n\nexport interface IncludedCommonFormFieldsInterface {\n businessName?: boolean;\n businessAddress?: boolean;\n businessPhoneNumber?: boolean;\n businessAccountGroupId?: boolean;\n businessWebsite?: boolean;\n salespersonName?: boolean;\n salespersonPhoneNumber?: boolean;\n salespersonEmail?: boolean;\n contactName?: boolean;\n contactPhoneNumber?: boolean;\n contactEmail?: boolean;\n}\n\nexport interface CommonFormSectionInterface {\n fields: CommonFormFieldInterface[];\n sectionName?: string;\n populatedData?: CommonFormData;\n}\n\nexport interface AddonKeyInterface {\n addonId?: string;\n appId?: string;\n}\n\nexport interface CommonFormFieldInterface extends FieldBase<any> {\n productIds?: string[];\n addonKeys?: AddonKeyInterface[];\n}\n\nexport interface CommonFieldIdsInterface {\n fieldId: string;\n required: boolean;\n}\n\n// Keys are snake cased here because that is the format in which we submit this data to vendors\nexport interface CommonFormData {\n contact_email?: string;\n contact_name?: string;\n contact_phone_number?: string;\n business_account_group_id?: string;\n business_name?: string;\n business_address?: string;\n business_phone_number?: string;\n business_website?: string;\n salesperson_name?: string;\n salesperson_email?: string;\n salesperson_phone_number?: string;\n}\n\nexport class ProductOrderFormSectionData extends OrderFormSectionData {\n productId: string;\n subsections: AddonDropDownFormSectionData[];\n}\n\nexport class AddonDropDownFormSectionData extends DropDownFormSectionData {\n productId: string;\n addonId: string;\n}\n\nexport interface ProductInfoInterface {\n productId: string;\n name?: string;\n tagline?: string;\n icon?: string;\n addonInfo?: AddonInfoInterface[];\n}\n\nexport interface AddonInfoInterface {\n addonId: string;\n name?: string;\n}\n\nexport interface CustomFieldsAnswers {\n productID: string;\n addonKey?: AddonKeyInterface;\n customFieldsAnswers: CustomFieldsAnswer[];\n}\n\nexport interface CustomFieldsAnswer {\n fieldId: string;\n answer?: string;\n}\n\nexport interface OrderFormOptionsInterface {\n bypassRequiredQuestions?: boolean;\n readOnly?: boolean;\n showOfficeUseQuestions?: boolean;\n}\n","import { Injectable } from '@angular/core';\nimport { AddonKey, CommonField, CustomField, Field, FieldType } from '@vendasta/sales-orders';\nimport {\n AddonDropDownFormSectionData,\n CommonFieldIdsInterface,\n CommonFormData,\n CommonFormFieldInterface,\n CommonFormSectionInterface, CustomFieldsAnswer,\n CustomFieldsAnswers,\n OrderFormFieldOptionsType,\n OrderFormInterface,\n OrderLabelsInterface,\n ProductInfoInterface,\n ProductOrderFormSectionData\n} from './interface';\nimport {\n CheckboxField,\n DropdownField,\n FileUploadGroupField,\n FileUploadGroupFieldOptions,\n TextareaField,\n TextboxField,\n VBCUserField,\n VBCUserFieldOptions,\n FieldBase,\n User, DropDownFormSectionData, ControlType,\n} from '../..';\nimport { FormGroup } from '@angular/forms';\nimport uuid from 'uuid/v4';\nimport { OrderFormOptions } from './order-form.component';\n\n@Injectable()\nexport class OrderFormService {\n static camelToSnakeCaseMap = {\n 'contactName': 'contact_name',\n 'contactEmail': 'contact_email',\n 'contactPhoneNumber': 'contact_phone_number',\n 'businessAccountGroupId': 'business_account_group_id',\n 'businessName': 'business_name',\n 'businessAddress': 'business_address',\n 'businessPhoneNumber': 'business_phone_number',\n 'businessWebsite': 'business_website',\n 'salespersonName': 'salesperson_name',\n 'salespersonEmail': 'salesperson_email',\n 'salespersonPhoneNumber': 'salesperson_phone_number'\n };\n\n private static extractRequiredCommonFieldIds(orderForm: OrderFormInterface): string[] {\n if (!orderForm || !orderForm.commonFormRequiredFields) {\n return [];\n }\n return Object.keys(orderForm.commonFormRequiredFields).filter(k => orderForm.commonFormRequiredFields[k]);\n }\n\n private static buildCommonFieldIds(orderForms: OrderFormInterface[]): CommonFieldIdsInterface[] {\n const commonFieldIdsMap: Map<string, CommonFieldIdsInterface> = new Map<string, CommonFieldIdsInterface>();\n for (const key in OrderFormService.camelToSnakeCaseMap) {\n if (key) {\n commonFieldIdsMap.set(key,\n {\n fieldId: key,\n required: false,\n }\n )\n }\n }\n orderForms.map(orderForm => {\n const requiredCommonFieldIds = this.extractRequiredCommonFieldIds(orderForm);\n requiredCommonFieldIds.map(fieldId => {\n const commonFieldId = commonFieldIdsMap.get(fieldId);\n commonFieldId.required = true;\n commonFieldIdsMap.set(fieldId, commonFieldId);\n });\n });\n return Array.from(commonFieldIdsMap.values());\n }\n\n private static fillCommonFormSections(fieldIds: CommonFieldIdsInterface[], commonData: CommonFormData, labels: OrderLabelsInterface,\n options: OrderFormOptions):\n CommonFormSectionInterface[] {\n const commonFormSections = OrderFormService.buildCommonOrderFormFields(fieldIds, labels, options);\n return commonFormSections.map(section => ({...section, populatedData: commonData}));\n }\n\n private static buildCommonOrderFormFields(fieldIds: CommonFieldIdsInterface[], labels: OrderLabelsInterface, options: OrderFormOptions):\n CommonFormSectionInterface[] {\n const businessSection: CommonFormSectionInterface = {\n sectionName: labels.commonForm.businessSectionTitle || 'Business',\n fields: []\n };\n const salespersonSection: CommonFormSectionInterface = {\n sectionName: labels.commonForm.salespersonSectionTitle || 'Salesperson',\n fields: []\n };\n const contactSection: CommonFormSectionInterface = {\n sectionName: labels.commonForm.contactSectionTitle || 'Contact',\n fields: []\n };\n\n for (const field of fieldIds) {\n const fieldLabel = this.getLabelForFieldId(field.fieldId, labels);\n const commonFormField: CommonFormFieldInterface = new TextboxField({\n id: OrderFormService.camelToSnakeCaseMap[field.fieldId],\n label: fieldLabel,\n textboxType: 'text'\n });\n commonFormField.displayOnly = commonFormField.id === 'business_account_group_id';\n commonFormField.disabled = options.readOnly;\n if (!options.bypassRequiredQuestions) {\n commonFormField.required = field.required;\n }\n if (field.fieldId.startsWith('contact')) {\n contactSection.fields.push(commonFormField);\n }\n if (field.fieldId.startsWith('business')) {\n businessSection.fields.push(commonFormField);\n }\n if (field.fieldId.startsWith('salesperson')) {\n if (!options.showOfficeUseQuestions) {\n commonFormField.hidden = true;\n }\n salespersonSection.fields.push(commonFormField);\n }\n }\n return [businessSection, contactSection, salespersonSection].filter(section =>\n section.fields ? section.fields.length > 0 : false\n );\n }\n\n private static getLabelForFieldId(fieldId: string, labels: OrderLabelsInterface): string {\n return labels.commonForm[fieldId] || '';\n }\n\n private static buildOrderFormSectionData(parentForm: FormGroup): AddonDropDownFormSectionData {\n const section = new AddonDropDownFormSectionData();\n section.displayAutoTitle = true;\n section.descriptionText = '';\n section.displayAutoDescription = false;\n section.parentForm = parentForm;\n return section;\n }\n\n private static buildCustomOrderFormFields(customFields: OrderFormFieldOptionsType[], fileUploadUrl: string, users: User[],\n answers: CustomFieldsAnswer[], options: OrderFormOptions):\n FieldBase<any>[] {\n const fieldTypeMap = {\n text: TextboxField,\n textbox: TextboxField,\n dropdown: DropdownField,\n checkbox: CheckboxField,\n file: FileUploadGroupField,\n textarea: TextareaField,\n vbcuser: VBCUserField\n };\n return customFields\n .filter(field => {\n return fieldTypeMap[field.type];\n })\n .map(field => {\n const fieldClass = fieldTypeMap[field.type];\n const result = (function () {\n switch (fieldClass) {\n case VBCUserField:\n const fieldConfig = {\n description: field.description,\n id: field.id,\n required: field.required,\n type: field.type,\n label: field.label,\n forOfficeUseOnly: field.forOfficeUseOnly,\n hidden: field.hidden,\n users: users // TODO: Get users in this component\n } as VBCUserFieldOptions;\n return new VBCUserField(fieldConfig);\n case FileUploadGroupField:\n const uploadField = field as FileUploadGroupFieldOptions;\n uploadField.uploadUrl = fileUploadUrl;\n return new FileUploadGroupField(uploadField);\n default:\n return new fieldClass(field);\n }\n })();\n result.id = OrderFormService.encodeCustomFieldId(field.id);\n if (!options.showOfficeUseQuestions) {\n result.hidden = result.forOfficeUseOnly ? true : result.hidden;\n }\n result.required = options.bypassRequiredQuestions ? false : result.required;\n result.disabled = options.readOnly ? options.readOnly : result.disabled;\n if (answers) {\n const ca = answers.find(a => a.fieldId === field.id);\n if (ca) {\n try {\n result.value = JSON.parse(ca.answer);\n } catch (error) {\n result.value = ca.answer;\n }\n }\n }\n return result\n });\n }\n\n // Different products can have order form fields with the same fieldID, which will cause problem.\n // Please refer to https://github.com/vendasta/business-center-client/pull/1002\n // We will prefix the fieldID with uuid, and take it off before we same the order form into session storage\n private static encodeCustomFieldId(fieldId: string): string {\n const id = uuid();\n return `${id}#${fieldId}`;\n }\n\n private static decodeCustomFieldId(fieldId: string): string {\n return fieldId.replace(new RegExp('(.*#)'), '');\n }\n\n private static mapFieldType(fieldType: ControlType): FieldType {\n switch (fieldType) {\n case 'textbox':\n return FieldType.TEXT;\n case 'textarea':\n return FieldType.TEXTAREA;\n case 'checkbox':\n return FieldType.CHECKBOX;\n case 'dropdown':\n return FieldType.DROPDOWN;\n case 'file':\n return FieldType.FILE;\n case 'vbcuser':\n return FieldType.VBCUSER;\n default:\n return FieldType.NOT_SPECIFIED;\n }\n }\n\n private static orderFieldToSalesOrderField(fieldBase: FieldBase<any>): Field {\n return new Field({\n fieldId: OrderFormService.decodeCustomFieldId(fieldBase.id),\n fieldType: OrderFormService.mapFieldType(fieldBase.controlType),\n label: fieldBase.label,\n description: fieldBase.description || '',\n prefix: fieldBase.prefix || '',\n suffix: fieldBase.suffix || '',\n regexValidator: fieldBase.regexValidator || '',\n regexErrorMessage: fieldBase.regexErrorMessage || '',\n answer: fieldBase.value ? JSON.stringify(fieldBase.value) : 'null'\n });\n }\n\n private static productOrderFormToCustomFields(orderFormData: ProductOrderFormSectionData): CustomField[] {\n const primaryCustomField = new CustomField();\n primaryCustomField.productId = orderFormData.productId;\n primaryCustomField.fields = orderFormData.primarySection\n ? orderFormData.primarySection.fields.map(field => this.orderFieldToSalesOrderField(field))\n : [];\n const secondaryCustomFields = orderFormData.subsections.map(subsection => {\n const customField = new CustomField();\n if (subsection.addonId) {\n customField.addonKey = new AddonKey({\n appId: subsection.productId,\n addonId: subsection.addonId\n });\n } else {\n customField.productId = orderFormData.productId;\n }\n customField.fields = subsection.fields.map(field => this.orderFieldToSalesOrderField(field));\n return customField;\n });\n return [].concat(primaryCustomField, secondaryCustomFields);\n }\n\n public static getCommonFormSections(orderForms: OrderFormInterface[], commonData: CommonFormData, labels: OrderLabelsInterface,\n options: OrderFormOptions):\n CommonFormSectionInterface[] {\n const fieldIds = OrderFormService.buildCommonFieldIds(orderForms);\n return OrderFormService.fillCommonFormSections(fieldIds, commonData, labels, options);\n }\n\n public static getCustomFormSections(orderForms: OrderFormInterface[], products: ProductInfoInterface[], parentForm: FormGroup,\n fileUploadUrl: string, users: User[], answers: CustomFieldsAnswers[], options: OrderFormOptions)\n : ProductOrderFormSectionData[] {\n const formSections = products.map(product => {\n const subsections: AddonDropDownFormSectionData[] = [];\n (product.addonInfo || []).map(addon => {\n const addonOrderForms = orderForms.filter(o => o.addonId === addon.addonId);\n const addonAnswers: CustomFieldsAnswers[] = (answers || []).filter(a => a.addonKey &&\n a.addonKey.appId === product.productId && a.addonKey.addonId === addon.addonId && a.productID === product.productId);\n addonOrderForms.map((addonOrderForm, index) => {\n if (addonOrderForm && addonOrderForm.customFields && addonOrderForm.customFields.length > 0) {\n const addonSection = OrderFormService.buildOrderFormSectionData(parentForm);\n const addonAnswersForThisSpecificFormIndex = (addonAnswers.length > index) ? addonAnswers[index].customFieldsAnswers : [];\n const formFields = OrderFormService.buildCustomOrderFormFields(addonOrderForm.customFields, fileUploadUrl, users,\n addonAnswersForThisSpecificFormIndex, options);\n addonSection.expandable = true;\n addonSection.titleText = addon.name;\n addonSection.fields = formFields;\n addonSection.productId = product.productId;\n addonSection.addonId = addon.addonId;\n subsections.push(addonSection);\n }\n });\n });\n\n const foundOrderForms = orderForms.reduce((orderFormsFound, o) => {\n if (o.appId === product.productId && !o.addonId) {\n orderFormsFound.push(o);\n }\n return orderFormsFound;\n }, []);\n const [primaryOrder, ...otherOrdersForSameProduct] = foundOrderForms;\n\n const productHasOrderForm = primaryOrder && primaryOrder.customFields && primaryOrder.customFields.length > 0;\n if (subsections.length > 0 || productHasOrderForm) {\n const sectionData = new ProductOrderFormSectionData();\n sectionData.productId = product.productId;\n sectionData.parentForm = parentForm;\n sectionData.titleText = product.name;\n sectionData.subtitleText = product.tagline;\n sectionData.descriptionText = ''; // TODO: build the description string to show which common data this form uses\n sectionData.iconUrl = product.icon;\n\n if (productHasOrderForm) {\n const section = OrderFormService.buildOrderFormSectionData(parentForm);\n section.titleText = product.name;\n let productAnswers: CustomFieldsAnswers[] = [];\n if (answers) {\n productAnswers = answers.filter(a => !a.addonKey && a.productID === product.productId);\n }\n const [ firstProductAnswers, ...otherProductAnswers] = productAnswers;\n section.fields = OrderFormService.buildCustomOrderFormFields(primaryOrder.customFields, fileUploadUrl, users,\n firstProductAnswers ? firstProductAnswers.customFieldsAnswers : [], options);\n sectionData.primarySection = section;\n\n otherOrdersForSameProduct.forEach((_, index) => {\n /**\n * Clone the same section to avoid child component from modifying all as if these are all the top section.\n * All sections need to be re-created or else they will have the same id and send repeated data as well.\n */\n const dupeSection = { ...section };\n const answersForSpecificForm = (otherProductAnswers.length > index) ? otherProductAnswers[index].customFieldsAnswers : [];\n dupeSection.fields = OrderFormService.buildCustomOrderFormFields(primaryOrder.customFields, fileUploadUrl, users,\n answersForSpecificForm, options);\n\n subsections.unshift(dupeSection);\n });\n }\n\n sectionData.subsections = subsections;\n return sectionData;\n }\n return null;\n }).filter(s => !!s);\n return formSections;\n }\n\n public static getExtraFieldsSection(extraFields: OrderFormFieldOptionsType[], parentForm: FormGroup, fileUploadUrl: string, users: User[],\n answers: CustomFieldsAnswer[], options: OrderFormOptions): DropDownFormSectionData {\n if (!extraFields || extraFields.length < 1) {\n return null\n }\n const section = OrderFormService.buildOrderFormSectionData(parentForm);\n section.fields = OrderFormService.buildCustomOrderFormFields(extraFields, fileUploadUrl, users, answers, options);\n return section\n }\n\n public static getCustomFieldsData(customFormSections: ProductOrderFormSectionData[]): CustomField[] {\n const customFormData = customFormSections.reduce((acc, orderFormData) => {\n acc = acc.concat(OrderFormService.productOrderFormToCustomFields(orderFormData));\n return acc;\n }, []);\n return customFormData;\n }\n\n public static getCommonFieldsData(commonFormSections: CommonFormSectionInterface[]): CommonField[] {\n let commonFields: CommonField[] = [];\n if (commonFormSections) {\n commonFields = commonFormSections.reduce((acc, group) => {\n const fields = group.fields.map(singleField => {\n const field = OrderFormService.orderFieldToSalesOrderField(singleField);\n if (field.fieldId) {\n return new CommonField({\n field: field,\n productIds: singleField.productIds,\n addonKeys: singleField.addonKeys\n });\n }\n });\n return acc.concat(fields);\n }, [])\n }\n return commonFields;\n }\n\n public static getExtraFieldsData(extraFieldsSection: DropDownFormSectionData): Field[] {\n let extraFieldsData: Field[] = [];\n if (!!extraFieldsSection) {\n extraFieldsData = extraFieldsSection.fields.map(field => OrderFormService.orderFieldToSalesOrderField(field));\n }\n return extraFieldsData;\n }\n\n constructor() {\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n CommonFormData,\n CommonFormSectionInterface, CustomFieldsAnswer,\n CustomFieldsAnswers, OrderFormFieldOptionsType,\n OrderFormInterface, OrderFormOptionsInterface,\n OrderLabelsInterface,\n ProductInfoInterface,\n ProductOrderFormSectionData\n} from './interface';\nimport { OrderFormService } from './order-form.service';\nimport { DropDownFormSectionData, User } from '../..';\nimport { CommonField, CustomField, Field } from '@vendasta/sales-orders';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n styleUrls: ['order-form.component.scss'],\n templateUrl: 'order-form.component.html',\n providers: [],\n selector: 'va-order-form'\n})\nexport class OrderFormComponent implements OnInit {\n @Input() commonData: CommonFormData;\n @Input() answers: CustomFieldsAnswers[];\n @Input() parentForm: FormGroup;\n @Input() fileUploadUrl: string; // TODO: One standard fileuploadurl in this component\n @Input() orderForms: OrderFormInterface[]; // TODO: Get orderForms in this component\n @Input() productInfo: ProductInfoInterface[]; // TODO: Get productInfo in this component\n @Input() labels: OrderLabelsInterface; // TODO: Handle common field labels with translations in this component\n @Input() users: User[]; // TODO: Get users in this component\n @Input() extraFields: OrderFormFieldOptionsType[]; // TODO: Get this into the component\n @Input() extraFieldsAnswers: CustomFieldsAnswer[]; // TODO: Get this into the component\n @Input() orderFormOptions: OrderFormOptionsInterface;\n\n commonFormSections: CommonFormSectionInterface[];\n customFormSections: ProductOrderFormSectionData[];\n extraFieldsSection: DropDownFormSectionData;\n\n dropdownOpen$$ = new BehaviorSubject<boolean>(false);\n dropdownOpen$ = this.dropdownOpen$$.asObservable();\n\n ngOnInit(): void {\n const options = new OrderFormOptions(this.orderFormOptions || {});\n\n this.commonFormSections = OrderFormService.getCommonFormSections(this.orderForms, this.commonData, this.labels, options);\n this.customFormSections = OrderFormService.getCustomFormSections(this.orderForms, this.productInfo, this.parentForm,\n this.fileUploadUrl, this.users, this.answers, options);\n // TODO: Handle MyCorporation OrderForm (handled in a separate component right now)\n this.extraFieldsSection = OrderFormService.getExtraFieldsSection(this.extraFields, this.parentForm, this.fileUploadUrl,\n this.users, this.extraFieldsAnswers, options);\n\n }\n\n /**\n * returns the data from common form fields in a format that is usable by sales orders\n */\n public getCommonFormData(): CommonField[] {\n return OrderFormService.getCommonFieldsData(this.commonFormSections);\n }\n\n /**\n * returns the data from custom forms in a format that is usable by sales orders\n */\n public getCustomFormData(): CustomField[] {\n return OrderFormService.getCustomFieldsData(this.customFormSections);\n }\n\n /**\n * returns the data from extra fields in a format that is usable by sales orders\n */\n public getExtraFieldsData(): Field[] {\n return OrderFormService.getExtraFieldsData(this.extraFieldsSection);\n }\n\n /**\n * changes the read only state of the sales order form\n */\n public changeReadOnly(readOnly: boolean): void {\n this.orderFormOptions.readOnly = readOnly;\n readOnly ? this.parentForm.disable() : this.parentForm.enable();\n }\n\n public openDropdown(): void {\n this.dropdownOpen$$.next(true);\n }\n}\n\nexport class OrderFormOptions implements OrderFormOptionsInterface {\n bypassRequiredQuestions: boolean;\n readOnly: boolean;\n showOfficeUseQuestions: boolean;\n\n constructor(i: OrderFormOptionsInterface) {\n this.bypassRequiredQuestions = !!i.bypassRequiredQuestions;\n this.readOnly = !!i.readOnly;\n this.showOfficeUseQuestions = !!i.showOfficeUseQuestions;\n }\n\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport const FILES = 'file';\nexport const DROP_DOWN = 'dropdown';\nexport const CHECK_BOX = 'checkbox';\nexport const TEXT_AREA = 'textarea';\nexport const TEXT_BOX = 'textbox';\nexport const BUSINESS_USER = 'vbcuser';\n\nexport type ControlType = 'checkbox' | 'dropdown' | 'file' | 'textbox' | 'textarea' | 'vbcuser';\n\nexport interface FieldBaseOptions {\n // TODO This and marketplace-apps OrderFormFieldInterface should share a common base\n id: string;\n label: string;\n required?: boolean;\n description?: string;\n type?: string;\n prefix?: string;\n suffix?: string;\n regexValidator?: string;\n regexErrorMessage?: string;\n disabled?: boolean;\n forOfficeUseOnly?: boolean;\n hidden?: boolean;\n displayOnly?: boolean;\n}\n\nexport abstract class FieldBase<T> implements FieldBaseOptions {\n value: T;\n id: string;\n label: string;\n required: boolean;\n order: number;\n description: string;\n controlType: ControlType;\n prefix: string;\n suffix: string;\n regexValidator: string;\n regexErrorMessage: string;\n disabled: boolean;\n validator: ValidatorFn;\n forOfficeUseOnly: boolean;\n hidden: boolean;\n displayOnly: boolean;\n\n constructor(options: FieldBaseOptions) {\n this.id = options.id;\n this.label = options.label;\n this.required = !!options.required;\n this.description = options.description || null;\n options.type = options.type === 'text' ? 'textbox' : options.type;\n this.controlType = options.type as ControlType;\n this.prefix = options.prefix;\n this.suffix = options.suffix;\n this.regexValidator = options.regexValidator;\n this.regexErrorMessage = options.regexErrorMessage;\n this.disabled = options.disabled || false;\n this.validator = this.validatorBuilder();\n this.forOfficeUseOnly = !!options.forOfficeUseOnly;\n this.hidden = options.hidden;\n this.displayOnly = options.displayOnly;\n }\n\n getLabel(): string {\n let fieldLabel = this.label;\n if (this.required) {\n fieldLabel += ' *';\n }\n return fieldLabel;\n }\n\n protected validatorBuilder(): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } => {\n return null\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\nimport { OrderFormFieldInterface, OrderFormFieldOptionInterface } from '@vendasta/core/marketplace-apps';\nimport { BUSINESS_USER, CHECK_BOX, ControlType, DROP_DOWN, FILES, TEXT_AREA, TEXT_BOX } from '../field-base';\n\n@Component({\n selector: 'va-field-builder',\n templateUrl: './field-builder.component.html',\n styleUrls: ['./field-builder.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FieldBuilderComponent implements OnInit {\n @Input() orderFormFieldGroup: FormGroup;\n @Input() supportedFieldTypes: FormFieldInterface[];\n @Output() removeField: EventEmitter<string> = new EventEmitter(null);\n\n showValidators: boolean;\n showSuffixes: boolean;\n\n static createDropDownOption(option: OrderFormFieldOptionInterface, required: boolean): FormGroup {\n return new FormGroup({\n label: new FormControl(option.label || option.value, required ? [Validators.required] : []),\n value: new FormControl(option.value),\n useValue: new FormControl(!!option.value)\n });\n }\n\n static createDropDownOptions(options: OrderFormFieldOptionInterface[]): FormArray {\n if (options === null || options === undefined) {\n options = [];\n }\n const orderFormFieldsGroupArray: FormGroup[] =\n options.map(option => FieldBuilderComponent.createDropDownOption(option, false));\n return new FormArray(orderFormFieldsGroupArray);\n }\n\n static createOrderFormFieldGroup(orderFormField: OrderFormFieldInterface): FormGroup {\n const orderFormFieldGroup = new FormGroup({\n descriptionControl: new FormControl(orderFormField.description, []),\n labelControl: new FormControl(orderFormField.label, [Validators.required]),\n idControl: new FormControl(orderFormField.id, [Validators.required]),\n requiredControl: new FormControl(orderFormField.required || false, []),\n uploadUrlControl: new FormControl(orderFormField.uploadUrl, []),\n prefixControl: new FormControl(orderFormField.prefix, []),\n suffixControl: new FormControl(orderFormField.suffix, []),\n regexValidatorControl: new FormControl(orderFormField.regexValidator, regexValidator()),\n regexErrorMessageControl: new FormControl(orderFormField.regexErrorMessage, []),\n typeControl: new FormControl(getFieldInterface(orderFormField.type), [Validators.required]),\n allowMultiples: new FormControl(orderFormField.allowMultiples || false, []),\n allowDuplicates: new FormControl(orderFormField.allowDuplicates || false, []),\n maxChoices: new FormControl(orderFormField.maxChoices ? orderFormField.maxChoices : 1, [Validators.min(1), numberValidator()]),\n forOfficeUseOnly : new FormControl(orderFormField.forOfficeUseOnly || false, [])\n });\n if (orderFormField.optionsWithLabels) {\n const optionsArray = FieldBuilderComponent.createDropDownOptions(orderFormField.optionsWithLabels);\n orderFormFieldGroup.addControl('optionsFormArray', optionsArray);\n } else if (orderFormField.options) {\n const optionsArray = FieldBuilderComponent.createDropDownOptions(orderFormField.options.map(option => ({label: option})));\n orderFormFieldGroup.addControl('optionsFormArray', optionsArray);\n } else {\n orderFormFieldGroup.addControl('optionsFormArray', new FormArray([]));\n }\n\n return orderFormFieldGroup;\n }\n\n ngOnInit(): void {\n if (!this.supportedFieldTypes || this.supportedFieldTypes.length < 1) {\n this.supportedFieldTypes = FORM_FIELDS;\n }\n this.initForm();\n }\n\n initForm(): void {\n // Check to see if form has been initiated\n if (!this.orderFormFieldGroup.get('labelControl')) {\n this.orderFormFieldGroup =\n FieldBuilderComponent.createOrderFormFieldGroup({});\n }\n }\n\n getOptionsArray(): FormArray {\n return this.orderFormFieldGroup.get('optionsFormArray') as FormArray;\n }\n\n getCurrentFieldInterface(): string {\n const formFieldTypeInterface =\n (this.orderFormFieldGroup.get('typeControl').value as FormFieldInterface);\n return formFieldTypeInterface ? formFieldTypeInterface.id : null;\n }\n\n removeOption(index: number): void {\n const formArray = this.getOptionsArray();\n formArray.removeAt(index);\n }\n\n addOption(): void {\n const fieldArray = this.getOptionsArray();\n fieldArray.push(FieldBuilderComponent.createDropDownOption({label: ''}, true));\n }\n\n getFormValues(): OrderFormFieldInterface {\n const obj: OrderFormFieldInterface = {};\n obj.label = this.orderFormFieldGroup.get('labelControl').value;\n obj.id = this.orderFormFieldGroup.get('idControl').value;\n\n const formFieldType =\n (this.orderFormFieldGroup.get('typeControl').value as\n FormFieldInterface); // use the id instead of the whole object\n obj.type = formFieldType ? formFieldType.id : null;\n\n // Options will be nested under their own form control in the larger Orderformfield array\n const optionsArray = (this.orderFormFieldGroup.get('optionsFormArray') as FormArray);\n if (optionsArray && optionsArray.value) {\n obj.options = optionsArray.value.map(option => option.value || option.label);\n obj.optionsWithLabels = optionsArray.value.map(option => ({label: option.label, value: option.value}));\n }\n\n obj.description = this.orderFormFieldGroup.get('descriptionControl').value;\n obj.required = this.orderFormFieldGroup.get('requiredControl').value || false;\n obj.uploadUrl = this.orderFormFieldGroup.get('uploadUrlControl').value;\n obj.prefix = this.orderFormFieldGroup.get('prefixControl').value;\n obj.suffix = this.orderFormFieldGroup.get('suffixControl').value;\n obj.regexValidator = this.orderFormFieldGroup.get('regexValidatorControl').value;\n obj.regexErrorMessage = this.orderFormFieldGroup.get('regexErrorMessageControl').value;\n obj.allowMultiples = this.orderFormFieldGroup.get('allowMultiples').value || false;\n obj.allowDuplicates = this.orderFormFieldGroup.get('allowDuplicates').value || false;\n obj.maxChoices = this.orderFormFieldGroup.get('maxChoices').value || 1;\n obj.forOfficeUseOnly = this.orderFormFieldGroup.get('forOfficeUseOnly').value || false;\n return obj;\n }\n}\n\n// Validation to ensure supplied regex is valid\nexport function regexValidator(): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } => {\n try {\n const _ = new RegExp(control.value || '');\n } catch (e) {\n return {'regex': true};\n }\n return null;\n };\n}\n\nexport function numberValidator(): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } => {\n const isNumber = /^\\d+$/;\n if (isNumber.test(control.value)) {\n return null\n }\n return {'number': true};\n };\n}\n\nexport interface FormFieldInterface {\n id: ControlType;\n name: string;\n}\n\nexport const FORM_FIELDS: FormFieldInterface[] = [\n {id: FILES, name: 'Files'}, {id: DROP_DOWN, name: 'Drop Down'},\n {id: CHECK_BOX, name: 'Check Box'}, {id: TEXT_AREA, name: 'Text Area'},\n {id: TEXT_BOX, name: 'Text Box'}, {id: BUSINESS_USER, name: 'End User'}\n];\n\nexport function getFieldInterface(formFieldId: string): FormFieldInterface {\n return getFormFieldInterfaceFromId((formFieldId as ControlType));\n}\n\nexport function getFormFieldInterfaceFromId(id: ControlType): FormFieldInterface {\n return FORM_FIELDS.find((obj: FormFieldInterface) => obj.id === id);\n}\n","import { OrderConfirmationItem, Pricing } from './interface';\n\nexport class OrderItemListService {\n static getPriceSummary(items: OrderConfirmationItem[]): { items: Pricing[]; includesUndefinedPricing: boolean } {\n if (!items) {\n return { items: [], includesUndefinedPricing: false };\n }\n let includesUndefinedPricing = false;\n const summaryItems = items.reduce((currentArray, item) => {\n if (item.pricing.prices.length <= 0) {\n includesUndefinedPricing = true;\n return currentArray;\n }\n\n item.pricing.prices.map(price => {\n if (!price || price.price < 0) {\n includesUndefinedPricing = true;\n return;\n }\n\n const freq = price.billingFrequency;\n const cur = item.pricing.currency;\n\n const existingCurIndex = currentArray.findIndex(summaryItem => summaryItem.currency === cur);\n let pricing: Pricing = {\n currency: cur,\n prices: []\n };\n if (existingCurIndex > -1) {\n pricing = currentArray[existingCurIndex];\n }\n\n const existingFreqIndex = pricing.prices.findIndex(\n summaryItem => summaryItem.billingFrequency === freq\n );\n const quantifiedPrice = price.price !== null ? price.price * item.quantity : null;\n const quantifiedDiscount = (price.discountAmount || 0) * item.quantity;\n if (existingFreqIndex > -1) {\n pricing.prices[existingFreqIndex] = {\n price: pricing.prices[existingFreqIndex].price + quantifiedPrice,\n billingFrequency: freq,\n discountAmount:\n pricing.prices[existingFreqIndex].discountAmount + quantifiedDiscount\n };\n } else {\n pricing.prices.push({\n price: quantifiedPrice,\n billingFrequency: freq,\n discountAmount: quantifiedDiscount\n });\n }\n if (existingCurIndex > -1) {\n currentArray[existingCurIndex] = pricing;\n } else {\n currentArray.push(pricing);\n }\n });\n return currentArray;\n }, []);\n return { items: summaryItems, includesUndefinedPricing: includesUndefinedPricing };\n }\n}\n","import { Component, Input } from '@angular/core';\nimport {\n OrderConfirmationItem,\n Pricing,\n TaxOption,\n RetailPrice,\n } from './interface';\nimport { OrderItemListService } from './order-item-list.service';\n\n@Component({\n selector: 'va-order-item-list',\n templateUrl: './order-item-list.component.html',\n styleUrls: ['./order-item-list.component.scss']\n})\nexport class OrderItemListComponent {\n items: OrderConfirmationItem[];\n summaryItems: Pricing[];\n includesUndefinedPricing = false;\n\n @Input() taxOptions: TaxOption[];\n @Input() hidePricing: boolean;\n\n @Input()\n set orderItems(items: OrderConfirmationItem[]) {\n this.items = items || [];\n const summary = OrderItemListService.getPriceSummary(items);\n this.summaryItems = summary.items;\n this.includesUndefinedPricing = summary.includesUndefinedPricing;\n }\n\n public calculateTotalPrice(price: RetailPrice): number {\n if (price.price === null) {\n return null;\n }\n\n const totalPrice = price.price - price.discountAmount;\n\n if (!this.taxOptions) {\n return totalPrice;\n }\n\n const taxTotal = this.taxOptions.reduce(\n (all, tax) => all + (tax.percentage * totalPrice),\n 0\n );\n\n return totalPrice + taxTotal;\n }\n\n public buildTaxLabel(tax: TaxOption): string {\n const taxPercentage = Number(tax.percentage * 100).toFixed(2);\n\n return `${tax.label} (${taxPercentage}%)`;\n }\n\n public isFree(): boolean {\n const summaryTotal = this.summaryItems.reduce(\n (all, item) => {\n const totalPrices = item.prices.reduce((acc, price) => acc + price.price, 0);\n\n return all + totalPrices;\n }\n , 0);\n\n return summaryTotal === 0;\n }\n}\n","import { BillingFrequency, Currency, formatBillingFrequency, formatDisplayPrice } from '@vendasta/core/shared';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'price' })\nexport class PricePipe implements PipeTransform {\n transform(\n value: any,\n currency: Currency,\n billingFrequency?: BillingFrequency,\n isCents: boolean = true,\n translateZero: boolean = true,\n displaySymbol: boolean = true\n ): any {\n return formatDisplayPrice(value, currency, billingFrequency, isCents, translateZero, displaySymbol);\n }\n}\n\n@Pipe({ name: 'formatBillingFrequency' })\nexport class FormatBillingFrequencyPipe implements PipeTransform {\n transform(value: string): string {\n return formatBillingFrequency(value);\n }\n}\n","import { Inject, NgModule, Optional } from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {\n MatButtonModule, MatCheckboxModule, MatExpansionModule, MatIconModule, MatInputModule, MatOptionModule,\n MatProgressSpinnerModule, MatSelectModule, MatCardModule, MatTooltipModule\n} from '@angular/material';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\nimport { MatListModule } from '@angular/material/list'\nimport {VaFormsModule} from '@vendasta/forms';\nimport {VaIconModule, VaBadgeModule } from '@vendasta/uikit';\n\nimport {DropDownFormSectionComponent} from './dropdown-form-section/dropdown-form-section.component';\nimport {FieldComponent} from './fields/field.component';\nimport {FieldService} from './fields/field.service';\nimport {VaHeaderContainerModule} from '../header-container/header-container.module';\nimport {OrderFormSectionComponent} from './order-form-section/order-form-section.component';\nimport {OrderFormComponent} from './order-form/order-form.component';\nimport {OrderFormService} from './order-form/order-form.service';\nimport {FieldBuilderComponent} from './fields/field-builder/field-builder.component';\nimport { OrderItemListComponent } from './order-item-list/order-item-list.component';\nimport { OrderItemListService } from './order-item-list/order-item-list.service';\n\nimport { PricePipe, FormatBillingFrequencyPipe } from './../shared/pricing-pipes';\nimport { Observable } from 'rxjs';\nimport { En } from '../assets/i18n/en';\nimport { Cs } from '../assets/i18n/cs';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatExpansionModule,\n MatIconModule,\n MatInputModule,\n MatOptionModule,\n MatProgressSpinnerModule,\n MatSelectModule,\n MatCardModule,\n MatTooltipModule,\n ReactiveFormsModule,\n VaFormsModule,\n VaHeaderContainerModule,\n VaIconModule,\n VaFormsModule,\n VaBadgeModule,\n MatListModule,\n TranslateModule.forChild(),\n ],\n declarations: [\n DropDownFormSectionComponent,\n FieldComponent,\n OrderFormSectionComponent,\n OrderFormComponent,\n FieldBuilderComponent,\n OrderItemListComponent,\n PricePipe,\n FormatBillingFrequencyPipe,\n ],\n exports: [\n DropDownFormSectionComponent,\n FieldComponent,\n OrderFormSectionComponent,\n OrderFormComponent,\n FieldBuilderComponent,\n OrderItemListComponent,\n ],\n providers: [\n FieldService,\n OrderFormService,\n OrderItemListService,\n ]\n})\nexport class VaOrderFormModule {\n constructor(private translateService: TranslateService,\n @Optional() @Inject('CURRENT_LANG') currentLang$: Observable<string>,\n @Optional() @Inject('DEFAULT_LANG') defaultLang$: Observable<string>) {\n if (!this.translateService.translations.hasOwnProperty('en')) {\n this.translateService.reloadLang('en');\n }\n if (!this.translateService.translations.hasOwnProperty('cs')) {\n this.translateService.reloadLang('cs');\n }\n this.translateService.setTranslation('en', En.en, true);\n this.translateService.setTranslation('cs', Cs.cs, true);\n if (currentLang$) { currentLang$.subscribe(currentLang => translateService.use(currentLang)); }\n if (defaultLang$) { defaultLang$.subscribe(defaultLang => translateService.setDefaultLang(defaultLang)); }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {FormControl, FormGroup} from '@angular/forms';\n\n@Injectable()\nexport class StoreService {\n\n markFormsAsTouched(formGroup: FormGroup) {\n for (const key in formGroup.controls) {\n if (formGroup.controls[key] instanceof FormGroup) {\n this.markFormsAsTouched(formGroup.controls[key] as FormGroup);\n } else {\n (formGroup.controls[key] as FormControl).markAsTouched();\n (formGroup.controls[key] as FormControl).updateValueAndValidity();\n }\n }\n }\n}\n","export class File {\n\n constructor(public url: string) {\n this.url = url;\n }\n\n get name(): string {\n return this.url ? this.url.substring(this.url.lastIndexOf('/') + 1, this.url.lastIndexOf('.')) : null;\n }\n\n get icon(): string {\n const ext = this.url ? this.url.substring(this.url.lastIndexOf('.') + 1) : null;\n switch (ext) {\n case 'pdf':\n return 'icon-pdf';\n case 'ppt':\n return 'icon-ppt';\n default:\n return 'icon-docs';\n }\n }\n}\n","export interface Pricing {\n currency: string;\n prices: Price[];\n}\n\nexport interface Price {\n price: number;\n frequency: string;\n isStartingPrice?: boolean;\n}\n\nexport const CONTACT_SALES = -1;\n","import { CONTACT_SALES, Pricing } from '../pricing/pricing';\n\nexport class Sellable {\n pricing: Pricing;\n\n get isFree(): boolean {\n return this.pricing && this.pricing.prices ? this.pricing.prices.some(p => p.price === 0 || p.price === undefined) : false;\n }\n\n get shouldContactSales(): boolean {\n return this.pricing && this.pricing.prices ?\n this.pricing.prices.some(p => p.price === null || p.price === CONTACT_SALES) ||\n this.pricing.prices.length === 0 : true;\n }\n\n static getCapitalizeFirstLetter(inputString: string): string {\n return inputString ? inputString.charAt(0).toUpperCase() + inputString.slice(1) : null;\n }\n\n get formattedPricingList(): string[] {\n if (this.pricing && this.pricing.prices && this.pricing.prices.length) {\n const hasCurrencyAndIsNotUSD = this.pricing.currency && this.pricing.currency !== 'USD';\n const currencyStr = hasCurrencyAndIsNotUSD ? this.pricing.currency : '';\n const currencySymbol = Sellable.getCurrencySymbol(this.pricing.currency);\n\n return this.pricing.prices.map(price => {\n const frequencyStr = price.frequency ? '/ ' + Sellable.getCapitalizeFirstLetter(price.frequency) : '';\n const roundedPrice = ((price.price || 0) / 100.0).toFixed(2);\n const startingAtPrefix = price.isStartingPrice ? 'Starting at ' : '';\n const priceStr = `${startingAtPrefix}${currencySymbol}${roundedPrice} ${currencyStr} ${frequencyStr}`;\n return (priceStr.trim().replace(/\\s+/g, ' '));\n });\n } else {\n return ['Contact Sales'];\n }\n }\n\n get priceStrings(): string[] {\n if (this.shouldContactSales) {\n return ['Contact Sales'];\n }\n\n if (this.isFree) {\n return ['Free'];\n }\n\n return this.formattedPricingList;\n }\n\n get formattedWholesalePrice(): string {\n return this.priceStrings.join(' + ');\n }\n\n static getCurrencySymbol(currency: string): string {\n let currencySymbol = '$';\n switch (currency) {\n case 'EUR': currencySymbol = '\\u20AC'; break;\n case 'GBP': currencySymbol = '\\u00A3'; break;\n case 'CHF': currencySymbol = 'Fr'; break;\n case 'CNY': currencySymbol = '\\u00A5'; break;\n case 'JPY': currencySymbol = '\\u00A5'; break;\n case 'CZK': currencySymbol = 'K\\u010d'; break;\n case 'INR': currencySymbol = '\\u20B9'; break;\n case 'KHR': currencySymbol = '\\u17DB'; break;\n case 'KRW': currencySymbol = '\\u20A9'; break;\n case 'NOK': currencySymbol = 'kr'; break;\n case 'SEK': currencySymbol = 'kr'; break;\n case 'RUB': currencySymbol = '\\u20BD'; break;\n case 'TRY': currencySymbol = '\\u20BA'; break;\n case 'ZAR': currencySymbol = 'R'; break;\n default: currencySymbol = '$'; break;\n }\n return currencySymbol;\n }\n\n}\n","// @dynamic\nexport class CaseTransform {\n static snakeToCamelCase(value: string): string {\n return value ? value.replace(new RegExp(/_/g), ' ').replace(/\\b\\w/g, l => l.toUpperCase())\n .replace(/\\b\\w/, l => l.toLowerCase()).replace(/\\s/g, '') : value;\n }\n\n static lowerToTitleCase(value: string): string {\n // Code taken from https://github.com/gouch/to-title-case to support the proper spec.\n const smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\\.?|via)$/i;\n\n return value ? value.replace(/[A-Za-z0-9\\u00C0-\\u00FF]+[^\\s-]*/g, function (match, index, title) {\n if (index > 0 && index + match.length !== title.length &&\n match.search(smallWords) > -1 && title.charAt(index - 2) !== ':' &&\n (title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') &&\n title.charAt(index - 1).search(/[^\\s-]/) < 0) {\n return match.toLowerCase();\n }\n\n if (match.substr(1).search(/[A-Z]|\\../) > -1) {\n return match;\n }\n\n return match.charAt(0).toUpperCase() + match.substr(1);\n }) : value;\n };\n}\n","import {File} from '../files/shared/file.model';\nimport {Faq} from '../faqs/shared/faqs.model';\nimport {Sellable} from './sellable';\nimport {CaseTransform} from './case-transform';\nimport {Addon} from '@vendasta/core/shared';\nimport {Restrictions} from '../restrictions/shared/restrictions.model';\n\nconst COLOR_CODES = [\n '#EF5350', '#42A5F5', '#66BB6A', '#FFA726', '#AB47BC', '#FFCA28', '#EC407A', '#26C6DA',\n '#FF7B57'\n];\n\nconst DEFAULT_COLOR = '#808080';\n\nexport class Product extends Sellable {\n productId: string;\n editionId: string;\n editionName: string;\n name: string;\n description: string;\n tagline: string;\n iconUrl: string;\n entryUrl: string;\n screenshotUrls: string[];\n pdfUploadUrls: string[];\n lmiCategories: string[];\n keySellingPoints: string[];\n faqs: Faq[];\n wholesalePrice: number;\n currency: string;\n billingFrequency: string;\n billingId: string;\n isArchived: boolean;\n addons: Addon[] = [];\n files: File[];\n restrictions: Restrictions;\n trialConfiguration: TrialConfigurationInterface;\n\n static fromApi(data: any): Product {\n const newProduct = {};\n data = data || {};\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n const newKey = CaseTransform.snakeToCamelCase(key);\n newProduct[newKey] = data[key];\n }\n }\n return new Product(newProduct);\n }\n constructor(data?: any) {\n super();\n data = data || {};\n this.pricing = data.pricing;\n this.productId = data.productId;\n this.editionId = data.editionId;\n this.editionName = data.editionName;\n this.name = data.name;\n this.description = data.description;\n this.tagline = data.tagline;\n this.iconUrl = data.iconUrl;\n this.entryUrl = data.entryUrl;\n this.screenshotUrls = data.screenshotUrls;\n this.pdfUploadUrls = data.pdfUploadUrls;\n this.lmiCategories = data.lmiCategories;\n this.keySellingPoints = data.keySellingPoints;\n this.faqs = data.faqs;\n this.wholesalePrice = data.wholesalePrice;\n this.currency = data.currency;\n this.billingFrequency = data.billingFrequency;\n this.isArchived = data.isArchived;\n this.addons = data.addons;\n this.restrictions = data.restrictions;\n this.billingId = data.billingId;\n if (data.hasOwnProperty('pdfUploadUrls')) {\n this.files = this.pdfUploadUrls ? this.pdfUploadUrls.map(url => new File(url)) : null;\n }\n }\n get iconStyle(): string {\n return this.iconUrl ? `url(\"${this.iconUrl}\") no-repeat center / 100% 100%` : null;\n }\n\n get iconColor(): string {\n // determine an icon color for a product with no icon by using the product name\n if (!this.name) {\n return DEFAULT_COLOR;\n }\n\n let nameSum = 0;\n for (let i = 0; i < this.name.length; i++) {\n nameSum += this.name[i].charCodeAt(0);\n }\n\n const index = nameSum % COLOR_CODES.length;\n return COLOR_CODES[index];\n }\n\n getLmiCategoryNames(): string[] {\n const lmiCategories = this.lmiCategories || [];\n return lmiCategories.map(lmiCategory => CaseTransform.lowerToTitleCase(lmiCategory.toLowerCase().replace(/_/g, ' ')));\n }\n}\n\nexport class ProductWithParent extends Product {\n parentId: string;\n parentName: string;\n parentIconUrl: string;\n multipleActivations: boolean;\n\n static fromApi(data: any): ProductWithParent {\n const newProduct = {};\n data = data || {};\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n const newKey = CaseTransform.snakeToCamelCase(key);\n newProduct[newKey] = data[key];\n }\n }\n return new ProductWithParent(newProduct);\n }\n constructor(data?: any) {\n super(data);\n this.parentId = data.parentId;\n this.parentName = data.parentName;\n this.parentIconUrl = data.parentIconUrl;\n this.multipleActivations = data.multipleActivations || false;\n }\n}\n\nexport interface TrialConfigurationInterface {\n trialEnabled: boolean;\n trialDuration: number;\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Product } from '../shared/product';\nimport { Addon } from '@vendasta/core/shared';\nimport { Pricing } from '../pricing/pricing';\nimport { BilledProduct } from '@vendasta/core/billing';\n\n@Component({\n selector: 'addon-details',\n templateUrl: 'addon-details.component.html',\n styleUrls: ['./addon-details.component.scss']\n})\nexport class AddonDetailsComponent {\n @Input() product: Product;\n @Input() addon: Addon;\n @Input() reseller: true;\n @Input() billedProduct: BilledProduct;\n @Input() hasVerifiedContract = false;\n @Input() loaded = true;\n @Input() showPricing = true;\n @Input() showEnableAddon = false;\n @Input() actionEnabled = false;\n @Output() prerequisiteSelected = new EventEmitter();\n @Output() actionSelected = new EventEmitter();\n\n onPrerequisiteSelected(): void {\n this.prerequisiteSelected.emit();\n }\n onActionSelected(): void {\n this.actionSelected.emit();\n }\n\n getPricing(product: Product, addon: Addon): Pricing {\n return {\n currency: product.currency,\n prices: [\n {\n price: addon.price,\n frequency: addon.billingFrequency ? addon.billingFrequency : 'Monthly'\n }\n ]\n };\n }\n\n get pricingLabel(): string {\n return this.reseller ? 'Wholesale Pricing' : 'Pricing';\n }\n}\n","import {Component, Input} from '@angular/core';\nimport {File} from './shared/file.model';\n\n@Component({\n selector: 'va-files',\n template: `\n <div class=\"va-files file-list-container\" *ngFor=\"let file of files\">\n <mat-icon class=\"file-icon\">insert_drive_file</mat-icon>\n <a [href]=\"file.url\" target=\"_blank\">{{ file.name }}</a>\n </div>`,\n styleUrls: ['./files.component.scss']\n})\n\nexport class VaFilesComponent {\n @Input() files: File[];\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {VaFilesComponent} from './files.component';\nimport {MatIconModule} from '@angular/material';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule\n ],\n declarations: [VaFilesComponent],\n exports: [VaFilesComponent]\n})\nexport class VaFilesModule {\n}\n","import {Component, Input} from '@angular/core';\nimport {Faq} from './shared/faqs.model';\n\n@Component({\n selector: 'va-faqs',\n template: `\n <div class=\"va-faq\" *ngFor=\"let faq of faqs; let i = index;\">\n <div class=\"question\" (click)=\"toggleFaq(i)\">\n <span>{{ faq.question }}</span>\n <mat-icon>{{ faqIcon(i) }}</mat-icon>\n </div>\n <span class=\"answer\" [ngClass]=\"{'show': isFaqOpen(i) }\" [innerHtml]=\"faq.answer | vaSanitize\"></span>\n </div>`,\n styleUrls: ['./faqs.component.scss']\n})\n\nexport class VaFaqsComponent {\n @Input() faqs: Faq[];\n openFaqs: number[] = [];\n\n toggleFaq(index: number): void {\n if (this.openFaqs.indexOf(index) >= 0) {\n this.openFaqs.splice(this.openFaqs.indexOf(index), 1); // Remove\n } else {\n this.openFaqs.push(index); // Insert\n }\n }\n\n isFaqOpen(index: number): boolean {\n return this.openFaqs.indexOf(index) >= 0;\n }\n\n faqIcon(index: number): string {\n return this.isFaqOpen(index) ? 'keyboard_arrow_up' : 'keyboard_arrow_down';\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {VaFaqsComponent} from './faqs.component';\nimport {MatIconModule} from '@angular/material';\nimport {VaSafeHtmlModule} from '@vendasta/uikit';\n\n@NgModule({\n imports: [CommonModule, MatIconModule, VaSafeHtmlModule],\n declarations: [VaFaqsComponent],\n exports: [VaFaqsComponent]\n})\nexport class VaFaqsModule {}\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'va-selling-info',\n template: `\n <section *ngIf=\"description\" class=\"resize\" [innerHtml]=\"filterDescription | vaSafeHtml\"></section>\n <section *ngIf=\"keySellingPoints && keySellingPoints.length > 0\" class=\"key-selling-points\">\n <div *ngFor=\"let ksp of keySellingPoints\" class=\"key-selling-point\">\n <mat-icon>check_circle</mat-icon>\n {{ ksp }}\n </div>\n </section>\n `,\n styleUrls: ['./selling-info.component.scss']\n})\n\nexport class VaSellingInfoComponent {\n @Input() description: String;\n @Input() keySellingPoints: String[];\n\n get filterDescription() {\n const desc = this.description.replace(/max-width:\\d*[^\\\"]/i, 'max-width:100%');\n if ((desc.indexOf('\"max-width:100%\"') === -1) && (desc.indexOf('<iframe ') !== -1)) {\n const index = desc.indexOf('<iframe ') + 7;\n return desc.substr(0, index) + ' style=\"max-width:100%\"' + desc.substr(index);\n }\n return String(desc);\n }\n}\n\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {VaSellingInfoComponent} from './selling-info.component';\nimport {MatIconModule} from '@angular/material';\nimport {VaSafeHtmlModule} from '@vendasta/uikit';\n\n@NgModule({\n imports: [CommonModule, MatIconModule, VaSafeHtmlModule],\n declarations: [VaSellingInfoComponent],\n exports: [VaSellingInfoComponent]\n})\nexport class VaSellingInfoModule {}\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'supported-countries',\n template: `\n <span class=\"supported-text\"> Supported Countries: </span>\n <div class=\"flags\">\n <span *ngFor=\"let countryCode of countryCodes\" matTooltip=\"{{countryCode}}\" matTooltipPosition=\"below\"\n class=\"flag-icon flag-icon-{{countryCode.toLowerCase()}}\">\n </span>\n </div>\n `,\n styleUrls: ['./supported-countries.component.scss']\n})\n\nexport class SupportedCountriesComponent {\n @Input() countryCodes: string[];\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SupportedCountriesComponent} from './country/supported-countries.component';\nimport {MatTooltipModule} from '@angular/material';\n\n@NgModule({\n imports: [CommonModule, MatTooltipModule],\n declarations: [SupportedCountriesComponent],\n exports: [SupportedCountriesComponent]\n})\nexport class RestrictionsModule {}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {VaBreadcrumbsModule, VaIconModule, VaImageGalleryModule, VaListModule, VaSafeHtmlModule} from '@vendasta/uikit';\nimport {AddonDetailsComponent} from './addon-details.component';\nimport {VaPricingModule} from '../pricing/pricing.module';\nimport {VaFilesModule} from '../files/files.module';\nimport {VaFaqsModule} from '../faqs/faqs.module';\nimport {VaSellingInfoModule} from '../selling-info/selling-info.module';\nimport {VaHeaderContainerModule} from '../header-container/header-container.module';\nimport {RestrictionsModule} from '../restrictions/restrictions.module';\nimport { En } from '../assets/i18n/en';\nimport { Cs } from '../assets/i18n/cs';\n\n@NgModule({\n imports: [\n CommonModule,\n VaListModule,\n VaImageGalleryModule,\n VaIconModule,\n VaPricingModule,\n VaFilesModule,\n VaFaqsModule,\n VaSellingInfoModule,\n VaHeaderContainerModule,\n VaSafeHtmlModule,\n MatProgressSpinnerModule,\n VaBreadcrumbsModule,\n RestrictionsModule\n ],\n exports: [AddonDetailsComponent],\n declarations: [AddonDetailsComponent],\n providers: [],\n entryComponents: []\n})\nexport class AddonModule {\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'details-stencil',\n template: `\n <div class=\"details\">\n\n <mat-card class=\"details-header\">\n <div class=\"details-column-0\">\n <div class=\"details-column-0-1\">\n <div class=\"details-icon stencil-shimmer\"></div>\n </div>\n <div class=\"details-column-0-2\">\n <div class=\"details-title stencil-shimmer\"></div>\n <div class=\"details-title stencil-shimmer\"></div>\n </div>\n </div>\n <div class=\"details-column-1\">\n <div class=\"details-column-1-0 stencil-shimmer\"></div>\n <div class=\"details-column-1-1 stencil-shimmer\"></div>\n </div>\n </mat-card>\n\n <mat-card>\n <div class=\"details-box-large stencil-shimmer\"></div>\n </mat-card>\n\n <mat-card class=\"details-body\">\n <div class=\"details-body-column-0\" >\n <div class=\"details-icon-small stencil-shimmer\"></div>\n <div class=\"details-icon-small stencil-shimmer\"></div>\n <div class=\"details-icon-small stencil-shimmer\"></div>\n <div class=\"details-icon-small stencil-shimmer\"></div>\n <div class=\"details-icon-small stencil-shimmer\"></div>\n <div class=\"details-icon-small stencil-shimmer\"></div>\n <div class=\"details-icon-small stencil-shimmer\"></div>\n </div>\n <div class=\"details-body-column-1\">\n <div class=\"details-line stencil-shimmer\"></div>\n <div class=\"details-line stencil-shimmer\"></div>\n <div class=\"details-line stencil-shimmer\"></div>\n <div class=\"details-line stencil-shimmer\"></div>\n <div class=\"details-line stencil-shimmer\"></div>\n <div class=\"details-line stencil-shimmer\"></div>\n <div class=\"details-line stencil-shimmer\"></div>\n </div>\n <div class=\"details-body-column-2\">\n <div class=\"details-box stencil-shimmer\"></div>\n <div class=\"details-box stencil-shimmer\"></div>\n <div class=\"details-box stencil-shimmer\"></div>\n <div class=\"details-box stencil-shimmer\"></div>\n <div class=\"details-box stencil-shimmer\"></div>\n </div>\n </mat-card>\n\n </div>\n `,\n styleUrls: ['./details-stencil.component.scss']\n})\n\nexport class DetailsStencilComponent {\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'card-stencil',\n template: `\n <div class=\"card-stencil-container\">\n <mat-card class=\"card-stencil\">\n <div class=\"card-stencil-header stencil-shimmer\"></div>\n <div class=\"card-stencil-footer\">\n <div class=\"card-stencil-circle stencil-shimmer\"></div>\n <div>\n <div class=\"card-stencil-line-large stencil-shimmer\"></div>\n <div class=\"card-stencil-line-medium stencil-shimmer\"></div>\n </div>\n </div>\n </mat-card>\n </div>\n `,\n styleUrls: ['card-stencil.component.scss']\n})\n\nexport class CardStencilComponent {\n}\n","import {Component, Input, OnInit} from '@angular/core';\n\n@Component({\n selector: 'card-stencil-list',\n template: `\n <div class=\"row row-gutters\">\n <div *ngFor=\"let _ of cards\" class=\"col-flex\">\n <card-stencil></card-stencil>\n </div>\n </div>\n `,\n styles: [`\n .row {\n display: flex;\n flex-wrap: wrap;\n }\n\n .row + .row-gutters {\n margin-top: 0;\n }\n\n .row-gutters {\n margin-top: -20px;\n margin-left: -20px;\n }\n\n .row-gutters > .col-flex {\n padding-top: 20px;\n padding-left: 20px;\n }\n\n .col-flex {\n position: relative;\n max-width: 100%;\n box-sizing: border-box;\n flex: 0 0 auto;\n width: 100%;\n }\n\n @media screen and (min-width: 480px) {\n .col-flex {\n width: 50%;\n }\n }\n\n @media screen and (min-width: 1200px) {\n\n .col-flex {\n width: 33.333333%;\n }\n }\n\n `]\n})\n\nexport class CardListStencilComponent implements OnInit {\n\n @Input() numCards = 3;\n cards: number[] = [];\n\n ngOnInit() {\n for (let n = 0; n < this.numCards; n++) {\n this.cards.push(n);\n }\n }\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'search-bar-stencil',\n template: `\n <div class=\"search-bar-stencil-container\">\n <div class=\"search-bar-stencil-line stencil-shimmer\">\n <div class=\"search-bar-stencil-icon\"></div>\n </div>\n </div>\n `,\n styles: [`\n .search-bar-stencil-container {\n height: 52px;\n display: flex;\n align-content: center;\n background-color: white;\n border-radius: 2px;\n }\n .search-bar-stencil-line {\n height: 30px;\n width: 350px;\n margin: auto 10px;\n display: flex;\n justify-content: flex-end;\n }\n .search-bar-stencil-icon {\n background-color: white;\n width: 20px;\n height: 20px;\n margin: auto 5px;\n }\n `]\n})\n\nexport class SearchBarStencilComponent {\n}\n","import {Component, Input, OnInit} from '@angular/core';\n\n@Component({\n selector: 'list-stencil',\n template: `\n <mat-card class=\"list-container\">\n <div *ngIf=\"showHeader\" class=\"list-header stencil-shimmer\" style=\"\"></div>\n <div *ngFor=\"let _ of rows\">\n <div class=\"list-item-row\" [ngStyle]=\"listItemRowStyles\">\n <div class=\"stencil-shimmer\" style=\"margin: 0; padding: 0; width: 100%; height: 80%;\"></div>\n </div>\n </div>\n </mat-card>\n `,\n styles: [`\n .list-container { padding: 0; }\n .list-header { height: 40px; }\n .list-item-row { height: 50px; display: flex; justify-content: space-between; align-items: center; }\n `]\n})\n\nexport class ListStencilComponent implements OnInit {\n\n @Input() showHeader = true;\n @Input() numRows = 3;\n @Input() rowHeight = '51px'; // defaults to height of partner center business tab height (95px for marketplace)\n @Input() sidePadding = '17px'; // defaults to padding on partner center business padding (38px for marketplace)\n\n rows: number[] = []; // this is to turn the number of rows into an arbitrary list so we can loop through them\n listItemRowStyles: any;\n\n ngOnInit() {\n for (let n = 0; n < this.numRows; n++) {\n this.rows.push(n);\n }\n\n // if you think this is gross i agree\n // if you think this is gross and actually have a solution hit me up otherwise just enjoy the magic.\n // determine the height of each row for the table\n\n this.listItemRowStyles = {\n 'height': `${this.rowHeight}`,\n 'padding': `0 ${this.sidePadding}`\n }\n\n }\n}\n","import {NgModule} from '@angular/core';\nimport {\n MatCardModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatExpansionModule,\n MatCheckboxModule} from '@angular/material';\nimport {CommonModule} from '@angular/common';\n\nimport {DetailsStencilComponent} from './details-stencil.component';\nimport {CardStencilComponent} from './card-stencil.component';\nimport {CardListStencilComponent} from './card-list-stencil.component';\nimport {SearchBarStencilComponent} from './search-bar-stencil.component';\nimport {ListStencilComponent} from './list-stencil.component';\n\n@NgModule({\n imports: [CommonModule, MatCardModule, MatIconModule, MatInputModule, MatSelectModule, MatExpansionModule, MatCheckboxModule],\n declarations: [DetailsStencilComponent, CardStencilComponent, CardListStencilComponent, SearchBarStencilComponent, ListStencilComponent],\n exports: [DetailsStencilComponent, CardStencilComponent, CardListStencilComponent, SearchBarStencilComponent, ListStencilComponent]\n})\nexport class StencilsModule {}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ChangeDetectorRef } from '@angular/core';\nimport { Addon } from '@vendasta/core/shared';\nimport { Subscription } from 'rxjs';\nimport { Pricing } from '../pricing/pricing';\nimport { isNullOrUndefined } from 'util';\nimport { BillingService, BilledProduct, buildBilledProductFromProductPricingAndAddon } from '@vendasta/core/billing';\n\n@Component({\n selector: 'va-addon-list',\n templateUrl: './addon-list.component.html',\n styleUrls: ['./addon-list.component.scss']\n})\nexport class VaAddonListComponent implements OnDestroy, OnInit {\n _addons: Addon[];\n @Input('addons')\n set addons(addons: Addon[]) {\n this._addons = addons;\n this.populateBilledProduct();\n }\n @Input() showPricing = true;\n @Input() partnerID: string;\n\n _hasVerifiedContract: boolean = null;\n @Input('hasVerifiedContract')\n set hasVerifiedContract(value: boolean) {\n this._hasVerifiedContract = value;\n this.populateBilledProduct();\n }\n _canAccessContractPricing: boolean = null;\n @Input('canAccessContractPricing')\n set canAccessContractPricing(value: boolean) {\n this._canAccessContractPricing = value;\n this.populateBilledProduct();\n }\n\n @Output() addonSelected = new EventEmitter<String>();\n\n billedProductsMap: Map<string, BilledProduct> = new Map();\n private billedProductLoaded: Map<string, boolean> = new Map();\n private subscriptions: Subscription[] = [];\n\n constructor(private billingService: BillingService, private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.populateBilledProduct();\n }\n\n populateBilledProduct() {\n if (this.displayContractPricing()) {\n const billingIDs = this._addons.map(a => {\n this.billedProductsMap.set(a.addonId, null);\n this.billedProductLoaded.set(a.addonId, false);\n return a.billingId;\n });\n this.subscriptions.push(\n this.billingService.getMultiProductPricing(this.partnerID, billingIDs).subscribe(pricing => {\n this._addons.forEach(addon => {\n const addonPricing = pricing[addon.billingId];\n if (!addonPricing) {\n return;\n }\n const billedProduct = buildBilledProductFromProductPricingAndAddon(addon, addonPricing);\n this.billedProductsMap.set(addon.addonId, billedProduct);\n this.billedProductLoaded.set(addon.addonId, true);\n });\n this.cdr.detectChanges();\n })\n )\n }\n }\n\n onClick(addonId: String): void {\n this.addonSelected.emit(addonId);\n }\n\n public instanceOfPricing(object: any) {\n if (typeof object === 'number') {\n return false;\n }\n return object.currency !== undefined && object.prices !== undefined;\n }\n\n getDisplayPricing(addon: Addon): Pricing {\n const price: any = addon.price;\n if (price && this.instanceOfPricing(price)) {\n return price;\n }\n return {\n currency: addon.currency,\n prices: [\n {\n price: addon.price,\n frequency: addon.billingFrequency ? addon.billingFrequency : 'Monthly'\n }\n ]\n };\n }\n\n noData(): boolean {\n return isNullOrUndefined(this._hasVerifiedContract) || isNullOrUndefined(this._canAccessContractPricing);\n }\n\n displayContractPricing(): boolean {\n return this._canAccessContractPricing && this._hasVerifiedContract;\n }\n\n isBilledProductLoaded(addon: Addon): boolean {\n\n if (this.noData()) {\n return false;\n }\n if (this.displayContractPricing()) {\n const value = this.billedProductLoaded.get(addon.addonId);\n return value ? value : false;\n }\n return true;\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(subscription => subscription.unsubscribe());\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {VaAddonListComponent} from './addon-list.component';\nimport {MatDividerModule, MatIconModule, MatListModule} from '@angular/material';\nimport {VaPricingModule} from '../pricing/pricing.module';\nimport {BillingModule} from '@vendasta/core/billing';\n\n@NgModule({\n imports: [\n BillingModule,\n CommonModule,\n MatIconModule,\n MatListModule,\n MatDividerModule,\n VaPricingModule\n ],\n declarations: [VaAddonListComponent],\n exports: [VaAddonListComponent]\n})\nexport class VaAddonListModule {\n}\n","import { Inject, Injectable, InjectionToken, NgModule } from '@angular/core';\n\nexport interface HeimdallServiceTokenInterface {\n track(category: string, action: string, label: string, value?: number, dimensions?: {[key: string]: string}): void;\n}\n\nexport const HeimdallServiceToken: InjectionToken<HeimdallServiceTokenInterface> = new InjectionToken<\n HeimdallServiceTokenInterface\n >('HeimdallService');\n\n@Injectable()\nexport class HeimdallClient {\n constructor(@Inject(HeimdallServiceToken) private userEvents: HeimdallServiceTokenInterface) {}\n\n track(category: string, action: string, label: string, value?: number, dimensions?: {[key: string]: string}): void {\n this.userEvents.track(category, action, label, value, dimensions);\n }\n}\n\n@NgModule({\n providers: [HeimdallClient]\n})\nexport class HeimdallClientModule {}\n","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy, Inject } from '@angular/core';\nimport { BehaviorSubject, Observable, combineLatest, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, startWith, filter, take } from 'rxjs/operators';\n\nimport { Filters, FilterSection, TabbedFilterField, CheckboxFilterField, FilterService, FilterField } from '@vendasta/uikit';\nimport { StoreItem, CategoryToItemListMap } from '../store-item';\nimport { HeimdallServiceToken, HeimdallServiceTokenInterface } from '../heimdall-client-token';\nimport { LMI_CATEGORIES } from '../';\nimport { Categories } from '@vendasta/core/marketplace-packages';\nimport { TranslateService } from '@ngx-translate/core';\nimport { En } from '../assets/i18n/en';\nimport { Cs } from '../assets/i18n/cs';\n\nexport const STOREFRONT_FILTER_NAME = 'Store Filters';\n\nexport interface StorefrontCategory {\n id: string,\n name: string,\n packageIds: string[],\n}\n\n@Component({\n selector: 'va-storefront',\n templateUrl: './storefront.component.html',\n styleUrls: ['./storefront.component.scss']\n})\nexport class StorefrontComponent implements OnInit, OnDestroy {\n @Input()\n set categories(value: StorefrontCategory[]) {\n this.categories$$.next(value || []);\n }\n @Input()\n set categoryIdToStoreItemListMap(value: CategoryToItemListMap) {\n this.packagesMap$$.next(value || new Map<string, StoreItem[]>());\n }\n @Input() useCustomCase = false;\n @Output() categorySelected = new EventEmitter<StorefrontCategory>();\n @Output() packageIdSelected = new EventEmitter<string>();\n @Output() getDataForCategory = new EventEmitter<StorefrontCategory>();\n\n private categories$$: BehaviorSubject<StorefrontCategory[]> = new BehaviorSubject<StorefrontCategory[]>([]);\n private packagesMap$$: BehaviorSubject<CategoryToItemListMap> =\n new BehaviorSubject<CategoryToItemListMap>(new Map<string, StoreItem[]>());\n private searchTerm$$: BehaviorSubject<string> = new BehaviorSubject<string>('');\n private selectedCateoryId$$: BehaviorSubject<string> = new BehaviorSubject<string>('');\n private lmiCategoryFilter: Filters;\n filters$: Observable<Filters>;\n filteredItems$: Observable<StoreItem[]>;\n searchTermSubscription: Subscription;\n showLMIFilter$: Observable<boolean>;\n\n constructor(\n @Inject(HeimdallServiceToken) private userEvents: HeimdallServiceTokenInterface,\n private filterService: FilterService,\n private translateService: TranslateService\n ) {\n if (!this.translateService.translations.hasOwnProperty('en')) {\n this.translateService.reloadLang('en');\n }\n if (!this.translateService.translations.hasOwnProperty('cs')) {\n this.translateService.reloadLang('cs');\n }\n this.translateService.setTranslation('en', En.en, true);\n this.translateService.setTranslation('cs', Cs.cs, true);\n }\n\n ngOnInit(): void {\n const lmiCategoryCheckboxList = LMI_CATEGORIES.map((category) => {\n return new CheckboxFilterField({\n name: category.name,\n id: category.categoryId,\n value: false,\n condition: (item: {lmiCategories: string[]}): boolean => {\n let lmiCategories: string[] = [];\n if (item.lmiCategories) {\n lmiCategories = item.lmiCategories.map((cat) => {\n return Categories[cat].toLowerCase();\n });\n }\n return lmiCategories.indexOf(category.categoryId) > -1;\n }\n });\n });\n\n const lmiCategoryFilterSection = new FilterSection({\n title: 'LMI Category',\n type: 'or',\n fields: lmiCategoryCheckboxList\n });\n\n this.lmiCategoryFilter = new Filters(STOREFRONT_FILTER_NAME, [\n lmiCategoryFilterSection\n ]);\n\n this.filters$ = this.categories$$.pipe(\n map(categories => {\n const tabbedFilterField = new TabbedFilterField({\n name: '',\n value: null,\n id: 'categorytab',\n options: categories\n });\n\n const filters = new Filters(STOREFRONT_FILTER_NAME, [\n new FilterSection({\n title: 'Categories',\n type: 'or',\n fields: [tabbedFilterField]\n }),\n lmiCategoryFilterSection\n ]);\n\n return filters;\n })\n );\n\n this.filterService.setFilters(this.lmiCategoryFilter);\n\n this.searchTermSubscription = this.searchTerm$$.asObservable().pipe(\n debounceTime(300),\n distinctUntilChanged()).subscribe(\n searchTerm => this.userEvents.track('store', 'search-input', '', 1, {'searchTerm': searchTerm})\n );\n\n const selectedLMIFilters$ = this.filterService.filters.fieldValuesObservable.pipe(\n startWith([]),\n map(() => {\n return this.lmiCategoryFilter.fields.filter((item: CheckboxFilterField) => item.value);\n })\n );\n\n this.showLMIFilter$ = selectedLMIFilters$.pipe(\n filter(selectedLMIFilters => !!selectedLMIFilters),\n take(1),\n map(selectedLMIFilters => selectedLMIFilters.length > 0)\n );\n\n this.filteredItems$ = combineLatest(this.packagesMap$$, this.searchTerm$$, this.selectedCateoryId$$, selectedLMIFilters$).pipe(\n map(([packages, searchTerm, selectedCategoryId, selectedLMIFilters]) => {\n let storeItems: StoreItem[] = [];\n if (packages.size) {\n storeItems = (selectedCategoryId ? packages.get(selectedCategoryId) : packages.get(Array.from(packages.keys())[0]));\n }\n storeItems = storeItems ? this.lmiCategoryFilter.applyFilters(storeItems) : [];\n\n return searchTerm ? storeItems.filter(item => item.name.toLowerCase().indexOf(searchTerm.toLowerCase()) !== -1) : storeItems;\n })\n );\n }\n\n ngOnDestroy(): void {\n this.searchTermSubscription.unsubscribe();\n }\n\n public onSearchTermChanged(term: string): void {\n this.searchTerm$$.next(term);\n }\n\n public onFieldValueChanged(filterField: FilterField<any>): void {\n if (!(filterField instanceof TabbedFilterField)) {\n return;\n }\n\n this.selectedCateoryId$$.next(filterField.value.id);\n this.categorySelected.emit(filterField.value as StorefrontCategory);\n\n const currentStoreItemsForSelectCategory = this.packagesMap$$.getValue().get(filterField.value.id);\n if (!(currentStoreItemsForSelectCategory && currentStoreItemsForSelectCategory.length)) {\n this.getDataForCategory.emit(filterField.value as StorefrontCategory);\n }\n}\n\n public storeItemClicked(item: StoreItem): void {\n this.packageIdSelected.emit(item.id);\n }\n\n}\n","import { Inject, NgModule, Optional } from '@angular/core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {\n MatCardModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatExpansionModule,\n MatCheckboxModule} from '@angular/material';\nimport {CommonModule} from '@angular/common';\n\nimport {UIKitModule, FilterService} from '@vendasta/uikit';\n\nimport {StoreCardModule} from './store-card.module';\nimport {StoreComponent} from './store.component';\nimport {VaOrderFormModule} from './order-form/order-form.module';\nimport {StoreService} from './store.service';\nimport {AddonModule} from './addon-details/addon.module';\nimport {StencilsModule} from './stencils/stencils.module';\nimport {VaPricingModule} from './pricing/pricing.module';\nimport {VaAddonListModule} from './addon-list/addon-list.module';\nimport {StorefrontComponent} from './storefront/storefront.component';\nimport {HeimdallClientModule} from './heimdall-client-token';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { En } from './assets/i18n/en';\nimport { Cs } from './assets/i18n/cs';\n\n@NgModule({\n imports: [CommonModule, UIKitModule, MatCardModule, MatIconModule, MatInputModule, FormsModule, ReactiveFormsModule,\n MatSelectModule, MatExpansionModule, MatCheckboxModule, StoreCardModule, VaOrderFormModule, AddonModule, StencilsModule,\n VaPricingModule, VaAddonListModule, HeimdallClientModule, TranslateModule.forChild()],\n declarations: [StoreComponent, StorefrontComponent],\n providers: [StoreService, FilterService],\n exports: [StoreComponent, StoreCardModule, VaOrderFormModule, StencilsModule, StorefrontComponent]\n})\nexport class StoreModule {\n constructor(private translateService: TranslateService,\n @Optional() @Inject('CURRENT_LANG') currentLang$: Observable<string>,\n @Optional() @Inject('DEFAULT_LANG') defaultLang$: Observable<string>) {\n if (!this.translateService.translations.hasOwnProperty('en')) {\n this.translateService.reloadLang('en');\n }\n if (!this.translateService.translations.hasOwnProperty('cs')) {\n this.translateService.reloadLang('cs');\n }\n this.translateService.setTranslation('en', En.en, true);\n this.translateService.setTranslation('cs', Cs.cs, true);\n if (currentLang$) { currentLang$.subscribe(currentLang => translateService.use(currentLang)); }\n if (defaultLang$) { defaultLang$.subscribe(defaultLang => translateService.setDefaultLang(defaultLang)); }\n }\n}\n","export interface LmiCategory {\n name: string;\n categoryId: string;\n}\n\nexport const LMI_CATEGORIES: LmiCategory[] = [\n { name: 'Listings', categoryId: 'listings' },\n { name: 'Social', categoryId: 'social' },\n { name: 'Reputation', categoryId: 'reputation' },\n { name: 'SEO', categoryId: 'seo' },\n { name: 'Website', categoryId: 'website' },\n { name: 'Advertising', categoryId: 'advertising' },\n { name: 'Content & Experience', categoryId: 'content_and_experience' }\n];\n\nexport const LMI_CATEGORY_MAP = LMI_CATEGORIES.reduce((previous, current) => {\n previous[current.categoryId] = current;\n return previous;\n}, {});\n\nexport const LMI_CATEGORIES_BY_NAME = LMI_CATEGORIES.reduce((previous, current) => {\n previous[current.name] = current;\n return previous;\n}, {});\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\n\nimport {Pricing} from '../pricing/pricing';\nimport {Salesperson} from './salesperson';\n\n\n@Component({\n selector: 'va-salesperson-details',\n templateUrl: './salesperson-details.component.html',\n styleUrls: ['./salesperson-details.component.scss']\n})\nexport class VaSalespersonDetailsComponent {\n @Input() salesperson: Salesperson;\n @Input() packagePricing: Pricing;\n @Input() brandName: string;\n @Input() showGetItNow = true;\n @Output() getItNow = new EventEmitter();\n\n onGetItNowSelected(): void {\n this.getItNow.emit(this.salesperson);\n }\n\n get iconUrl(): string {\n return this.salesperson && this.salesperson.photoUrlSecure ?\n this.salesperson.photoUrlSecure :\n 'https://vbc-frontend.storage-download.googleapis.com/salesperson-details/default_sales_person.jpg';\n }\n\n get name(): string {\n return this.salesperson && this.salesperson.formattedName ?\n this.salesperson.formattedName : '';\n }\n\n get title(): string {\n return this.salesperson && this.salesperson.jobTitle ?\n this.salesperson.jobTitle : '';\n }\n\n get email(): string {\n return this.salesperson && this.salesperson.email ?\n this.salesperson.email : '';\n }\n\n get cityAndState(): string {\n return this.salesperson && this.salesperson.city && this.salesperson.state ?\n this.salesperson.city + ', ' + this.salesperson.state : '';\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatButtonModule, MatIconModule} from '@angular/material';\nimport {VaIconModule} from '@vendasta/uikit';\n\nimport {VaPricingModule} from '../pricing/pricing.module';\n\nimport {VaSalespersonDetailsComponent} from './salesperson-details.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n VaIconModule,\n VaPricingModule,\n ],\n declarations: [\n VaSalespersonDetailsComponent\n ],\n exports: [\n VaSalespersonDetailsComponent\n ],\n entryComponents: [\n VaSalespersonDetailsComponent\n ]\n})\nexport class VaSalespersonDetailsModule {\n}\n","import { Sellable } from '../shared/sellable';\nimport { AddonKey } from '@vendasta/core/marketplace-packages';\n\nexport class Package extends Sellable {\n solution_id: string;\n partner_id: string;\n market_id: string;\n name: string;\n icon: string;\n status: string;\n tagline: string;\n header_image_url: string;\n content: string;\n products: string[];\n addon_keys: AddonKey[];\n hide_product_icons_and_names: boolean;\n hide_product_details: boolean;\n createdDate: Date;\n updatedDate: Date;\n productOrder: string[]; // the order the product / addons in the package\n\n static fromApi(data: any): Package {\n const newPackage = new Package();\n if (!data.pricing && data.selling_price) {\n data.pricing = {\n currency: data.currency,\n prices: [{\n price: data.selling_price * 100,\n frequency: data.billingFrequency,\n isStartingPrice: false,\n }]\n };\n }\n Object.assign(newPackage, data);\n if (!newPackage.name) {\n newPackage.name = 'Untitled';\n }\n if (data.created) {\n newPackage.createdDate = new Date(data.created);\n }\n if (data.updated) {\n newPackage.updatedDate = new Date(data.updated);\n }\n return newPackage;\n }\n\n get isPackageFree(): boolean {\n return this.isFree;\n }\n}\n","import { Addon } from '@vendasta/core/shared';\nimport { Product } from '../shared/product';\n\nexport function orderProductsAndAddons(combined: (Product | Addon)[], order: string[]): (Product | Addon)[] {\n if (!order || order.length === 0) {\n return combined || [];\n }\n if (!combined || combined.length === 0) {\n return [];\n }\n\n const itemMap = (combined || []).reduce((m, curr) => {\n m.set(getUniqueProductAddonId(curr), curr);\n return m;\n }, new Map<string, (Product | Addon)>());\n\n const combinedIdList = combined.map(getUniqueProductAddonId);\n const finalOrderedIds = combineProductOrderWithContainedProducts(order, combinedIdList);\n\n const orderedList = finalOrderedIds.reduce((items, id) => {\n items.push(itemMap.get(id));\n return items;\n }, []) as (Product | Addon)[];\n\n return orderedList.filter(filterUniqueAndDefined);\n}\n\nfunction filterUniqueAndDefined(elem, pos, arr) {\n return elem && arr.indexOf(elem) === pos;\n}\n\nexport function combineProductOrderWithContainedProducts(productOrder: string[], itemIds: string[]): string[] {\n if (itemIds == null || itemIds.length === 0) {\n return []\n }\n if (!productOrder || productOrder.length === 0) {\n return itemIds.filter(filterUniqueAndDefined);\n }\n return productOrder\n .filter(elem => itemIds.indexOf(elem) >= 0)\n .concat(itemIds)\n .filter(filterUniqueAndDefined);\n}\n\nexport function getUniqueProductAddonId(thing: any): string {\n return thing['addonId'] || thing['productId'];\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { BehaviorSubject, Observable, ReplaySubject, combineLatest, merge as observableMerge } from 'rxjs';\nimport { Package } from './package';\nimport { Addon } from '@vendasta/core/shared';\nimport { Product } from '../shared/product';\nimport { skipWhile, shareReplay, map, take } from 'rxjs/operators';\nimport { orderProductsAndAddons } from './utils';\n\n@Component({\n selector: 'va-package-details',\n templateUrl: 'package-details.component.html',\n styleUrls: ['./package-details.component.scss']\n})\nexport class VaPackageDetailsComponent {\n @Input() showActionButton = true;\n @Input() showPricing = true;\n @Input() actionLabel = 'Get It Now';\n\n @Output() getItNow = new EventEmitter();\n\n standAloneProducts$$: BehaviorSubject<Product[]> = new BehaviorSubject<Product[]>([]);\n products$: BehaviorSubject<Product[]> = new BehaviorSubject<Product[]>([]);\n addons$: BehaviorSubject<Addon[]> = new BehaviorSubject<Addon[]>([]);\n pkg$: ReplaySubject<Package> = new ReplaySubject<Package>(1);\n itemSelectedEvent$: ReplaySubject<number> = new ReplaySubject<number>(1);\n\n selectedItem$: Observable<Product | Addon>;\n combinedItemsList$: Observable<(Product | Addon)[]>;\n orderedItemsList$: Observable<(Product | Addon)[]>;\n lmiCategories$: Observable<Set<string>>;\n productNameForSingleAddon$: Observable<string>;\n displayTagName$: Observable<string>;\n\n @Input()\n set standAloneProducts(standAloneProducts: Product[]) {\n this.standAloneProducts$$.next(standAloneProducts);\n }\n\n @Input()\n set products(products: Product[]) {\n this.products$.next(products);\n }\n\n @Input()\n set addons(addons: Addon[]) {\n this.addons$.next(addons);\n }\n\n @Input()\n set pkg(pkg: Package) {\n this.pkg$.next(pkg);\n }\n\n static getLmiCategories(products: Product[]): Set<string> {\n let lmiCategories: string[] = [];\n if (products) {\n products.forEach(product => {\n lmiCategories = lmiCategories.concat(product.getLmiCategoryNames());\n });\n }\n return new Set(lmiCategories);\n }\n\n static getDisplayTagline(pkg: Package, items: (Product | Addon)[]): string {\n if (pkg && pkg.tagline) {\n return pkg.tagline;\n } else if (items && items.length === 1) {\n // Single product / addon package.\n return items[0].tagline || '';\n }\n return '';\n }\n\n static getProductNameForSingleAddon(items: (Product | Addon)[]): string {\n if (items && items.length === 1 && items[0] instanceof Addon) {\n const addon = items[0] as Addon;\n return addon.productName;\n }\n }\n\n constructor() {\n this.combinedItemsList$ = combineLatest(this.products$, this.addons$, (products: Product[], addons: Addon[]) => {\n return [].concat(products || []).concat(addons || []) as (Product | Addon)[];\n });\n\n this.orderedItemsList$ = combineLatest(this.combinedItemsList$, this.pkg$, (combined: (Product | Addon)[], pkg: Package) => {\n return orderProductsAndAddons(combined, pkg ? pkg.productOrder || [] : [])\n });\n\n const nonEmptyCombinedItemsList = this.combinedItemsList$.pipe(\n skipWhile(items => !items || items.length === 0),\n shareReplay(1)\n );\n\n // Need to map to an index because that's how product selection works.\n const initialSelectedItem$ = nonEmptyCombinedItemsList.pipe(\n map((_: any) => 0),\n take(1)\n );\n\n const mergedSelection = observableMerge(initialSelectedItem$, this.itemSelectedEvent$);\n\n this.selectedItem$ = combineLatest(mergedSelection, this.orderedItemsList$).pipe(\n map(([index, items]) => {\n return items[index];\n })\n );\n\n this.lmiCategories$ = this.products$.pipe(\n skipWhile(products => !products || products.length === 0),\n map(products => {\n return VaPackageDetailsComponent.getLmiCategories(products);\n })\n );\n\n this.productNameForSingleAddon$ = nonEmptyCombinedItemsList.pipe(\n map(items => {\n return VaPackageDetailsComponent.getProductNameForSingleAddon(items);\n })\n );\n\n this.displayTagName$ = combineLatest(this.pkg$, this.combinedItemsList$).pipe(\n map(([pkg, items]) => {\n return VaPackageDetailsComponent.getDisplayTagline(pkg, items);\n })\n );\n }\n\n selectItem(i: number): void {\n this.itemSelectedEvent$.next(i);\n }\n\n emitGetItNow(): void {\n this.getItNow.emit();\n }\n}\n","import {Component, Input, Output, EventEmitter} from '@angular/core';\nimport {Addon} from '@vendasta/core/shared';\nimport {Product} from '../shared/product';\n\n@Component({\n selector: 'va-products-nav',\n templateUrl: './products-nav.component.html',\n styleUrls: ['./products-nav.component.scss']\n})\n\nexport class VaProductsNavComponent {\n @Input() items: (Addon | Product) [];\n @Input() hideItemsNav: boolean;\n @Output() itemSelected = new EventEmitter();\n\n selectedIndex = 0;\n pageMarker = 0;\n\n onItemSelected(index: any): void {\n this.selectedIndex = index;\n this.itemSelected.emit(index);\n }\n\n moveSlides(slides: HTMLBodyElement): void {\n const sliderWidth = Math.round(slides.offsetWidth / slides.children[0].clientWidth);\n const numSlides = Math.ceil(slides.children.length / sliderWidth);\n if (numSlides === 0) {\n return;\n }\n const pageWidth = slides.offsetWidth;\n let move = 0;\n\n if (this.pageMarker === -1) {\n this.pageMarker = numSlides - 1; // go to end\n move = pageWidth * this.pageMarker;\n slides.style.left = `-${move}px`;\n } else if (this.pageMarker >= numSlides) {\n slides.style.left = '0px';\n this.pageMarker = 0; // reset\n } else {\n move = pageWidth * this.pageMarker;\n slides.style.left = `-${move}px`;\n }\n }\n\n pageNext(slides: HTMLBodyElement): void {\n this.pageMarker++;\n this.moveSlides(slides);\n }\n\n pagePrev(slides: HTMLBodyElement): void {\n this.pageMarker--;\n this.moveSlides(slides);\n }\n}\n","import {Component, Input, Output, EventEmitter} from '@angular/core';\nimport {StoreLineItem} from '../../package-details-v2/interface';\n\n@Component({\n selector: 'va-products-nav-v2',\n templateUrl: './products-nav-v2.component.html',\n styleUrls: ['./products-nav-v2.component.scss']\n})\n\nexport class ProductsNavV2Component {\n @Input() items: StoreLineItem[];\n @Input() hideItemsNav: boolean;\n @Output() itemSelected = new EventEmitter<string>();\n\n selected_id = '';\n pageMarker = 0;\n\n onItemSelected(id: string): void {\n this.selected_id = id;\n this.itemSelected.emit(id);\n }\n\n moveSlides(slides: HTMLBodyElement): void {\n const sliderWidth = Math.round(slides.offsetWidth / slides.children[0].clientWidth);\n const numSlides = Math.ceil(slides.children.length / sliderWidth);\n if (numSlides === 0) {\n return;\n }\n const pageWidth = slides.offsetWidth;\n let move = 0;\n\n if (this.pageMarker === -1) {\n this.pageMarker = numSlides - 1; // go to end\n move = pageWidth * this.pageMarker;\n slides.style.left = `-${move}px`;\n } else if (this.pageMarker >= numSlides) {\n slides.style.left = '0px';\n this.pageMarker = 0; // reset\n } else {\n move = pageWidth * this.pageMarker;\n slides.style.left = `-${move}px`;\n }\n }\n\n pageNext(slides: HTMLBodyElement): void {\n this.pageMarker++;\n this.moveSlides(slides);\n }\n\n pagePrev(slides: HTMLBodyElement): void {\n this.pageMarker--;\n this.moveSlides(slides);\n }\n}\n","import { Inject, NgModule, Optional } from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatIconModule} from '@angular/material';\nimport {VaProductsNavComponent} from './products-nav.component';\nimport {VaIconModule, VaBadgeModule} from '@vendasta/uikit';\nimport {ProductsNavV2Component} from './products-nav-v2/products-nav-v2.component';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { En } from '../assets/i18n/en';\nimport { Cs } from '../assets/i18n/cs';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n VaIconModule,\n VaBadgeModule,\n TranslateModule.forChild()\n ],\n declarations: [VaProductsNavComponent, ProductsNavV2Component],\n exports: [VaProductsNavComponent, ProductsNavV2Component]\n})\n\nexport class VaProductsNavModule {\n constructor(private translateService: TranslateService,\n @Optional() @Inject('CURRENT_LANG') currentLang$: Observable<string>,\n @Optional() @Inject('DEFAULT_LANG') defaultLang$: Observable<string>) {\n if (!this.translateService.translations.hasOwnProperty('en')) {\n this.translateService.reloadLang('en');\n }\n if (!this.translateService.translations.hasOwnProperty('cs')) {\n this.translateService.reloadLang('cs');\n }\n this.translateService.setTranslation('en', En.en, true);\n this.translateService.setTranslation('cs', Cs.cs, true);\n if (currentLang$) { currentLang$.subscribe(currentLang => translateService.use(currentLang)); }\n if (defaultLang$) { defaultLang$.subscribe(defaultLang => translateService.setDefaultLang(defaultLang)); }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatIconModule, MatButtonModule} from '@angular/material';\nimport {VaImageGalleryModule, VaSafeHtmlModule, VaIconModule} from '@vendasta/uikit';\n\nimport {VaPricingModule} from '../pricing/pricing.module';\nimport {VaPackageDetailsComponent} from './package-details.component';\nimport {VaFilesModule} from '../files/files.module';\nimport {VaFaqsModule} from '../faqs/faqs.module';\nimport {VaSellingInfoModule} from '../selling-info/selling-info.module';\nimport {VaHeaderContainerModule} from '../header-container/header-container.module';\nimport {VaAddonListModule} from '../addon-list/addon-list.module';\nimport {VaProductsNavModule} from '../products-nav/products-nav.module';\n\n@NgModule({\n imports: [\n VaImageGalleryModule, CommonModule, MatIconModule, VaSafeHtmlModule, VaIconModule,\n VaPricingModule, MatButtonModule, VaFilesModule, VaFaqsModule, VaSellingInfoModule,\n VaHeaderContainerModule, VaAddonListModule, VaProductsNavModule],\n declarations: [VaPackageDetailsComponent],\n exports: [VaPackageDetailsComponent],\n entryComponents: [VaPackageDetailsComponent]\n})\nexport class VaPackageDetailsModule {}\n","import {Price, Pricing, File} from '..';\nimport {StoreLineItem} from './interface';\nimport {\n LineItem as ProtoLineItem,\n ProductInterface,\n LineItems as ProtoLineItems,\n Package as ProtoPackage,\n Pricing as ProtoPricing,\n Currency as ProtoCurrency,\n MarketAction,\n} from '@vendasta/core/marketplace-packages';\n\nexport class PackageDetails {\n solution_id: string;\n partner_id: string;\n market_id: string;\n name: string;\n icon: string;\n status: string;\n tagline: string;\n header_image_url: string;\n content: string;\n hide_product_icons_and_names: boolean;\n hide_product_details: boolean;\n createdDate: Date;\n updatedDate: Date;\n pricing: Pricing;\n line_items: StoreLineItem[];\n market_action: MarketAction;\n\n get isPackageFree(): boolean {\n const isFreeHelper = (prices: Price[]): boolean => {\n return prices ? prices.some(p => p.price === 0 || p.price === undefined) : false;\n };\n return this.pricing && isFreeHelper(this.pricing.prices);\n }\n}\n\nexport function convertToPackageDetails(data: ProtoPackage, products: ProductInterface[]): PackageDetails {\n if (!data) {\n return undefined;\n }\n\n const newPackage = new PackageDetails();\n if (!data.pricing) {\n data.pricing = ProtoPricing.fromProto({\n currency: undefined,\n prices: [{\n price: 0,\n frequency: undefined,\n isStartingPrice: false,\n }]\n });\n }\n\n Object.assign(newPackage, data);\n\n if (!newPackage.name) {\n newPackage.name = 'Untitled';\n }\n if (data.created) {\n newPackage.createdDate = new Date(data.created);\n }\n if (data.updated) {\n newPackage.updatedDate = new Date(data.updated);\n }\n if (data.lineItems) {\n newPackage.line_items = convertProtoLineItemsToStoreLineItems(data.lineItems, products);\n }\n if (typeof data.pricing.currency === 'number') {\n newPackage.pricing.currency = ProtoCurrency[data.pricing.currency];\n }\n\n return newPackage;\n}\n\nexport function convertProtoLineItemsToStoreLineItems(protoLineItems: ProtoLineItems, products: ProductInterface[]): StoreLineItem[] {\n if (!protoLineItems || !protoLineItems.lineItems || protoLineItems.lineItems.length === 0 || !products || products.length === 0) {\n return [];\n }\n return protoLineItems.lineItems.map(lineItem => {\n const product = products.find(p => p.productId === lineItem.id);\n let parent;\n if (!!lineItem.parentId) {\n parent = products.find(p => p.productId === lineItem.parentId);\n }\n return convertProtoLineItemToStoreLineItem(lineItem, product, parent);\n });\n}\n\nfunction convertProtoLineItemToStoreLineItem(\n protoLineItem: ProtoLineItem,\n product: ProductInterface,\n parentProduct?: ProductInterface\n): StoreLineItem {\n if (!product || !protoLineItem) {\n return undefined;\n }\n\n let files = [];\n if (product.pdfUploadUrls && product.pdfUploadUrls.length > 0) {\n files = product.pdfUploadUrls.map(url => new File(url));\n }\n\n const lineItem = {\n item: {\n id: protoLineItem.id,\n editionId: protoLineItem.editionId,\n icon: product.iconUrl,\n name: product.name,\n editionName: '',\n description: product.description,\n keySellingPoints: product.keySellingPoints,\n faqs: product.faqs,\n files: files,\n screenshotUrls: product.screenshotUrls,\n lmiCategories: [],\n\n },\n quantity: protoLineItem.quantity,\n parent: {}\n } as StoreLineItem;\n\n if (protoLineItem.parentId && parentProduct) {\n lineItem.parent = {\n id: protoLineItem.parentId,\n editionId: '',\n icon: parentProduct.iconUrl,\n name: parentProduct.name,\n editionName: '',\n }\n }\n return lineItem;\n}\n","import { Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';\nimport {Observable, combineLatest, BehaviorSubject, ReplaySubject} from 'rxjs';\nimport {PackageDetails} from './package';\nimport {map, take, tap, filter, shareReplay} from 'rxjs/operators';\nimport {StoreLineItem} from './interface';\nimport { TranslateService } from '@ngx-translate/core';\nimport { En } from '../assets/i18n/en';\nimport { Cs } from '../assets/i18n/cs';\n\n@Component({\n selector: 'va-package-details-v2',\n templateUrl: 'package-details-v2.component.html',\n styleUrls: ['./package-details-v2.component.scss']\n})\nexport class VaPackageDetailsV2Component {\n @Input() showActionButton = true;\n @Input() showPricing = true;\n @Input() actionLabel = 'FRONTEND.STORE.GET_IT_NOW';\n @Input() set pkg(pkg: PackageDetails) {\n this.pkg$$.next(pkg);\n }\n @Output() getItNow = new EventEmitter();\n\n pkg$$ = new ReplaySubject<PackageDetails>(1);\n itemSelectedEvent$$ = new BehaviorSubject<string>('');\n selectedItem$: Observable<StoreLineItem>;\n orderedLineItems$: Observable<StoreLineItem[]>;\n productNameForSingleAddon$: Observable<string>;\n lmiCategories$: Observable<string[]>;\n\n constructor(private translateService: TranslateService, @Optional() @Inject('CURRENT_LANG') currentLang$: Observable<string>) {\n if (!this.translateService.translations.hasOwnProperty('en')) {\n this.translateService.reloadLang('en');\n }\n if (!this.translateService.translations.hasOwnProperty('cs')) {\n this.translateService.reloadLang('cs');\n }\n this.translateService.setTranslation('en', En.en, true);\n this.translateService.setTranslation('cs', Cs.cs, true);\n if (currentLang$) { currentLang$.subscribe(currentLang => this.translateService.use(currentLang)); }\n\n this.orderedLineItems$ = this.pkg$$.pipe(\n map(pkg => pkg.line_items),\n filter(items => !!items || items.length === 0),\n shareReplay(1),\n );\n\n this.productNameForSingleAddon$ = this.orderedLineItems$.pipe(\n map(items => this.getParentsNameForItem(items))\n );\n\n this.selectedItem$ = combineLatest([this.itemSelectedEvent$$, this.orderedLineItems$]).pipe(\n map(([id, lineItems]) => lineItems.find(lineItem => lineItem.item.id === id)),\n );\n\n this.lmiCategories$ = this.orderedLineItems$.pipe(map((lis) => {\n const lmiMap = (lis || []).reduce((prev, li) => {\n if (li && li.item) {\n (li.item.lmiCategories || []).forEach(lmi => prev.set(lmi, lmi))\n }\n return prev;\n }, new Map<string, string>());\n\n const lmiCats = [];\n lmiMap.forEach((v, k) => {\n lmiCats.push(k);\n });\n return lmiCats;\n }));\n\n // Set the initial selected Item\n this.orderedLineItems$.pipe(\n map(lineItems => lineItems[0]),\n tap(lineItem => this.selectItem(lineItem && lineItem.item ? lineItem.item.id : '')),\n take(1)\n ).subscribe();\n }\n\n selectItem(id: string): void {\n this.itemSelectedEvent$$.next(id);\n }\n\n emitGetItNow(): void {\n this.getItNow.emit();\n }\n\n getParentsNameForItem(items: StoreLineItem[]): string {\n if (items && items.length === 1 && items[0]) {\n return items[0].parent.name;\n }\n }\n}\n","import {Inject, NgModule, Optional} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatIconModule, MatButtonModule} from '@angular/material';\nimport {VaImageGalleryModule, VaSafeHtmlModule, VaIconModule} from '@vendasta/uikit';\n\nimport {VaPricingModule} from '../pricing/pricing.module';\nimport {VaPackageDetailsV2Component} from './package-details-v2.component';\nimport {VaFilesModule} from '../files/files.module';\nimport {VaFaqsModule} from '../faqs/faqs.module';\nimport {VaSellingInfoModule} from '../selling-info/selling-info.module';\nimport {VaHeaderContainerModule} from '../header-container/header-container.module';\nimport {VaAddonListModule} from '../addon-list/addon-list.module';\nimport {VaProductsNavModule} from '../products-nav/products-nav.module';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {Observable} from 'rxjs';\nimport { En } from '../assets/i18n/en';\nimport { Cs } from '../assets/i18n/cs';\n\n@NgModule({\n imports: [\n VaImageGalleryModule,\n CommonModule,\n MatIconModule,\n VaSafeHtmlModule,\n VaIconModule,\n VaPricingModule,\n MatButtonModule,\n VaFilesModule,\n VaFaqsModule,\n VaSellingInfoModule,\n VaHeaderContainerModule,\n VaAddonListModule,\n VaProductsNavModule,\n TranslateModule.forChild()\n ],\n declarations: [VaPackageDetailsV2Component],\n exports: [VaPackageDetailsV2Component],\n entryComponents: [VaPackageDetailsV2Component]\n})\nexport class VaPackageDetailsV2Module {\n constructor(private translateService: TranslateService,\n @Optional() @Inject('CURRENT_LANG') currentLang$: Observable<string>,\n @Optional() @Inject('DEFAULT_LANG') defaultLang$: Observable<string>) {\n if (!this.translateService.translations.hasOwnProperty('en')) {\n this.translateService.reloadLang('en');\n }\n if (!this.translateService.translations.hasOwnProperty('cs')) {\n this.translateService.reloadLang('cs');\n }\n this.translateService.setTranslation('en', En.en, true);\n this.translateService.setTranslation('cs', Cs.cs, true);\n if (currentLang$) { currentLang$.subscribe(currentLang => translateService.use(currentLang)); }\n if (defaultLang$) { defaultLang$.subscribe(defaultLang => translateService.setDefaultLang(defaultLang)); }\n }\n}\n","import { Product, Package, ProductWithParent } from '../';\nimport { Addon, AddonKey } from '@vendasta/core/marketplace-packages';\n\nexport interface SalesPackage {\n formattedPrices: string;\n packageId: string;\n name: string;\n icon: string;\n productIds: string[];\n products: SalesProduct[];\n addonsWithNoParent: SalesAddon[];\n totalAddons: number;\n activationStatus?: StatusNotificationItem;\n}\n\nexport interface SalesProduct {\n formattedPrices: string;\n productId: string;\n name: string;\n icon: string;\n tagline: string;\n activationStatus?: StatusNotificationItem;\n editionId?: string;\n editionName?: string;\n addons: SalesAddon[];\n parentInfo?: ProductParentInfo;\n}\n\nexport interface ProductParentInfo {\n parentId: string;\n parentName: string;\n parentIconUrl: string;\n multipleActivations: boolean;\n}\n\nexport interface SalesAddon {\n parentId: string;\n addonId: string;\n name: string;\n icon: string;\n tagline: string;\n parentName: string;\n parentIcon: string;\n multipleActivations: boolean;\n activationStatus?: StatusNotificationItem;\n}\n\nexport interface PackageItemActivationStatus {\n packageItemId: string;\n status: ActivationStatus;\n}\n\nexport enum ActivationStatus {\n SUCCESS = 0,\n WARNING = 1,\n ERROR = 2\n}\n\nexport interface StatusNotificationItem {\n icon: string,\n text: string,\n status: ActivationStatus\n}\n\nexport function buildSalesPackages(packages: Package[], products: Product[], addons: Addon[]): SalesPackage[] {\n if (!packages || packages.length < 1) {\n return [];\n }\n return packages.map(pkg => buildSalesPackageFromPackage(pkg, products, addons));\n}\n\nfunction buildSalesPackageFromPackage(pkg: Package, products: Product[], addons: Addon[]): SalesPackage {\n if (!pkg) {\n return null;\n }\n\n const salesProducts = buildSalesProducts(pkg, products, addons);\n // Addons can be in a package even if the parent product is not, this will create salesAddons with no parent\n const addonsWithNoParent: SalesAddon[] = buildSalesAddonsWithNoParent(pkg, products, addons);\n\n return createSalesPackage(pkg, salesProducts, addonsWithNoParent);\n}\n\nexport function buildSalesProducts(pkg: Package, products: Product[], addons: Addon[]): SalesProduct[] {\n if (!(products && products.length && pkg.products && pkg.products.length)) {\n return [];\n }\n const productMap: Map<string, Product> = new Map<string, Product>();\n products.forEach(product => productMap.set(product.productId, product));\n return pkg.products\n .map(productId => {\n const productMatch: Product = productMap.get(productId);\n const addonsInPackage = coerceAddonsForAddonKeys(addons, pkg.addon_keys);\n return productMatch ? buildSalesProductFromProduct(productMatch, addonsInPackage) : null;\n })\n .filter(productItem => productItem);\n}\n\nexport function coerceAddonsForAddonKeys(addons: Addon[], addonKeys: AddonKey[]): Addon[] {\n if (!addons || addons.length === 0 || !addonKeys || addonKeys.length === 0) {\n return [];\n }\n\n return addons.reduce((addonsArray, addon) => {\n const key = addonKeys.find(k => k.addonId === addon.addonId);\n if (key) {\n const quantity = key.quantity || 1;\n for (let i = 0; i < quantity; i++) {\n addonsArray.push(addon)\n }\n }\n return addonsArray;\n }, []);\n}\n\nexport function buildSalesAddonsWithNoParent(pkg: Package, products: Product[], addons: Addon[]): SalesAddon[] {\n if (!addons || addons.length < 1 || !pkg.addon_keys) {\n return [];\n }\n const productMap: Map<string, Product> = new Map<string, Product>();\n products.forEach(product => productMap.set(product.productId, product));\n const addonsMap: Map<string, Addon> = new Map<string, Addon>();\n addons.forEach(addon => addonsMap.set(addon.addonId, addon));\n\n const addonsWithNoParent = pkg.addon_keys.reduce<SalesAddon[]>((addonArray: SalesAddon[], addonKey: AddonKey): SalesAddon[] => {\n if (pkg.products && pkg.products.some(productId => productId === addonKey.appId)) {\n return addonArray || [];\n }\n const parentProduct = productMap.get(addonKey.appId);\n const parentName = parentProduct ? parentProduct.name : null;\n const parentIcon = parentProduct ? parentProduct.iconUrl : null;\n const quantity = addonKey.quantity || 1;\n const addon: Addon = addonsMap.get(addonKey.addonId); // could be undefined\n for (let i = 0; i < quantity; i++) {\n addonArray.push(createSalesAddon(addon, parentName, parentIcon));\n }\n return addonArray;\n }, []);\n return addonsWithNoParent;\n}\n\nexport function buildSalesProductFromProduct(product: Product | ProductWithParent, addons: Addon[]): SalesProduct {\n if (!product) {\n return null;\n }\n if (!addons || addons.length < 1) {\n return createSalesProduct(product, null);\n }\n\n const productAddons = addons.filter(addon => addon.appId === product.productId);\n const salesAddons = createSalesAddons(productAddons);\n return createSalesProduct(product, salesAddons);\n}\n\nfunction createSalesPackage(pkg: Package, salesProducts: SalesProduct[], addonsWithNoParent: SalesAddon[]): SalesPackage {\n let totalAddons = 0;\n for (const key of pkg.addon_keys || []) {\n totalAddons += key.quantity || 1;\n }\n\n return {\n formattedPrices: pkg.priceStrings.join(', '),\n packageId: pkg.solution_id,\n name: pkg.name,\n icon: pkg.icon,\n productIds: pkg.products,\n products: salesProducts || [],\n addonsWithNoParent: addonsWithNoParent || [],\n totalAddons: totalAddons\n }\n}\n\nfunction createSalesProduct(product: Product | ProductWithParent, salesAddons: SalesAddon[]): SalesProduct {\n let parentInfo: ProductParentInfo;\n if (product instanceof ProductWithParent) {\n parentInfo = {\n parentId: product.parentId,\n parentName: product.parentName,\n parentIconUrl: product.parentIconUrl,\n multipleActivations: product.multipleActivations || false,\n }\n }\n return {\n formattedPrices: product.priceStrings.join(', '),\n productId: product.productId,\n name: product.name,\n tagline: product.tagline || '',\n icon: product.iconUrl,\n addons: salesAddons || [],\n editionId: product.editionId,\n editionName: product.editionName,\n parentInfo: parentInfo,\n }\n}\n\nfunction createSalesAddons(addons: Addon[]): SalesAddon[] {\n return addons.map(addon => createSalesAddon(addon));\n}\n\nfunction createSalesAddon(addon: Addon, parentName?: string, parentIcon?: string): SalesAddon {\n return {\n parentId: addon.appId,\n addonId: addon.addonId,\n name: addon.title,\n tagline: addon.tagline || '',\n icon: addon.icon || '',\n multipleActivations: addon.multipleActivations,\n parentIcon: parentIcon || '',\n parentName: parentName || ''\n }\n}\n\nfunction createSalesPackageWithStatus(pkg: SalesPackage, products: SalesProduct[], addons: SalesAddon[],\n activationStatus: StatusNotificationItem): SalesPackage {\n\n return {\n formattedPrices: pkg.formattedPrices,\n packageId: pkg.packageId,\n name: pkg.name,\n icon: pkg.icon,\n productIds: pkg.productIds,\n products: products || [],\n addonsWithNoParent: addons || [],\n activationStatus: activationStatus || null,\n totalAddons: pkg.totalAddons\n }\n}\n\nfunction createSalesProductWithStatus(product: SalesProduct, addons: SalesAddon[], activationStatus: StatusNotificationItem): SalesProduct {\n return {\n formattedPrices: product.formattedPrices,\n productId: product.productId,\n name: product.name,\n editionId: product.editionId,\n editionName: product.editionName,\n tagline: product.tagline,\n icon: product.icon,\n addons: addons || [],\n activationStatus: activationStatus || null,\n parentInfo: product.parentInfo || null,\n };\n}\n\nfunction createSalesAddonWithStatus(addon: SalesAddon, activationStatus: StatusNotificationItem): SalesAddon {\n return {\n parentId: addon.parentId,\n addonId: addon.addonId,\n name: addon.name,\n tagline: addon.tagline,\n icon: addon.icon,\n parentIcon: addon.parentIcon,\n parentName: addon.parentName,\n multipleActivations: addon.multipleActivations,\n activationStatus: activationStatus || null\n }\n}\n\nexport function addStatusesToSalesPackages(salesPackages: SalesPackage[], statuses: PackageItemActivationStatus[]): SalesPackage[] {\n if (!statuses || statuses.length === 0) {\n return salesPackages;\n }\n\n return salesPackages.map(salesPackage => {\n const newProducts = salesPackage.products.map(product => addStatusesToSalesProduct(product, statuses));\n\n const newAddonsWithNoParent = salesPackage.addonsWithNoParent.map(addon => {\n const status = findStatus(statuses, addon.addonId);\n return addStatusesToSalesAddon(addon, status)\n });\n\n const productStatuses = newProducts\n .map(product => product.activationStatus.status);\n const addonStatuses = newProducts\n .map(product => product.addons ? product.addons.map(addon => addon.activationStatus.status) : [])\n .reduce((statusList, reducedList) => reducedList.concat(statusList), []);\n const addonsWithNoParentStatuses = newAddonsWithNoParent\n .map(addon => addon.activationStatus ? addon.activationStatus.status : null);\n const allStatuses = [...productStatuses, ...addonStatuses, ...addonsWithNoParentStatuses];\n\n const packageStatus = convertNumberToActivationStatus(Math.max(...allStatuses));\n const statusNotification = createStatusNotificationItemForPackage(packageStatus);\n\n return createSalesPackageWithStatus(salesPackage, newProducts, newAddonsWithNoParent, statusNotification);\n });\n}\n\nexport function addStatusesToSalesProduct(product: SalesProduct, statuses: PackageItemActivationStatus[]): SalesProduct {\n if (!statuses || statuses.length === 0) {\n return product;\n }\n const productStatus = findStatus(statuses, product.productId);\n const statusNotification = createStatusNotificationItemForPackageItem(productStatus);\n if (!product.addons) {\n return createSalesProductWithStatus(product, null, statusNotification)\n }\n\n const newSalesAddons = product.addons.map(addon => {\n const addonStatus = findStatus(statuses, addon.addonId);\n return addStatusesToSalesAddon(addon, addonStatus)\n });\n\n return createSalesProductWithStatus(product, newSalesAddons, statusNotification);\n}\n\nfunction addStatusesToSalesAddon(addon: SalesAddon, status: ActivationStatus): SalesAddon {\n const addonStatusNotification = createStatusNotificationItemForPackageItem(status);\n return createSalesAddonWithStatus(addon, addonStatusNotification);\n}\n\nfunction findStatus(statuses: PackageItemActivationStatus[], id: string): ActivationStatus {\n if (!statuses || statuses.length <= 0) {\n return null\n }\n const statusIndex = statuses.findIndex(s => {\n return s.packageItemId === id;\n });\n if (statusIndex < 0) {\n return null;\n }\n const status = statuses[statusIndex].status;\n statuses.splice(statusIndex, 1);\n return status;\n}\n\nfunction createStatusNotificationItemForPackageItem(status: ActivationStatus): StatusNotificationItem {\n switch (status) {\n case ActivationStatus.SUCCESS:\n return {icon: 'check_circle', status: status, text: 'Activated'};\n case ActivationStatus.WARNING:\n return {icon: 'warning', status: status, text: 'Already Activated'};\n default:\n return {icon: 'error', status: status, text: 'Activation Errors'};\n }\n}\n\nfunction createStatusNotificationItemForPackage(status: ActivationStatus): StatusNotificationItem {\n switch (status) {\n case ActivationStatus.SUCCESS:\n return {icon: 'check_circle', status: status, text: 'Activated'};\n case ActivationStatus.WARNING:\n return {icon: 'warning', status: status, text: 'Activation Warnings'};\n default:\n return {icon: 'error', status: status, text: 'Activation Errors Occured'};\n }\n}\n\nfunction convertNumberToActivationStatus(number: Number): ActivationStatus {\n switch (number) {\n case 0:\n return ActivationStatus.SUCCESS;\n case 1:\n return ActivationStatus.WARNING;\n default:\n return ActivationStatus.ERROR;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ActivationStatus, StatusNotificationItem } from '../sales-package';\n\nexport enum ListIndent {\n INDENT_ZERO = 'indent-zero',\n INDENT_ONE = 'indent-one',\n INDENT_TWO = 'indent-two',\n}\n\n@Component({\n selector: 'va-package-dropdown-item',\n templateUrl: './package-dropdown-item.component.html',\n styleUrls: ['./package-dropdown-item.component.scss', '../package-dropdown.component.scss']\n})\nexport class VaPackageDropdownItemComponent implements OnInit {\n @Input() title: string;\n @Input() titleBadge: string;\n @Input() titleDescriptor: string;\n @Input() iconUrl: string;\n @Input() secondaryIconUrl: string;\n @Input() secondaryIconName: string;\n @Input() subtitle: string;\n @Input() statusItem: StatusNotificationItem;\n @Input() enableDropdown = false;\n @Input() indent = ListIndent.INDENT_ZERO;\n @Input() toggleValue: boolean;\n @Input() description: string;\n @Output() itemToggled: EventEmitter<null> = new EventEmitter<null>();\n\n ngOnInit() {\n }\n\n toggleItem(): void {\n this.itemToggled.emit(null);\n }\n\n isActivatedStatus(status: ActivationStatus): boolean {\n return status === ActivationStatus.SUCCESS;\n }\n isWarningStatus(status: ActivationStatus): boolean {\n return status === ActivationStatus.WARNING;\n }\n isErrorStatus(status: ActivationStatus): boolean {\n return status === ActivationStatus.ERROR\n }\n\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport { trigger, transition, animate, style, state } from '@angular/animations';\nimport { Observable, BehaviorSubject, ReplaySubject, combineLatest, zip } from 'rxjs';\nimport {filter, map, startWith, tap} from 'rxjs/operators';\n\nimport { Addon } from '@vendasta/core/marketplace-packages';\nimport {\n SalesPackage,\n SalesProduct,\n buildSalesPackages,\n buildSalesProductFromProduct,\n addStatusesToSalesPackages,\n addStatusesToSalesProduct,\n PackageItemActivationStatus,\n} from './sales-package';\nimport { Product, ProductWithParent } from '../shared/product';\nimport { Package } from '../package-details/package';\nimport { ListIndent } from './package-dropdown-item/package-dropdown-item.component';\n\ninterface OrderLengthsForToggling {\n packages: number;\n products: number;\n}\n\n@Component({\n selector: 'va-package-dropdown',\n animations: [\n trigger('listAnimationStart', [\n state('void', style({ height: '0px' })),\n state('*', style({ height: '*' })),\n transition('void => *', [animate('0.25s ease')]),\n transition('* => void', [animate('0.25s ease')])\n ])\n ],\n templateUrl: 'package-dropdown.component.html',\n styleUrls: ['./package-dropdown.component.scss']\n})\nexport class VaPackageDropdownComponent implements OnInit {\n // packages in dropdown\n @Input()\n set packages(packages: Package[]) {\n this.packages$$.next(packages);\n }\n\n // products within given packages\n @Input()\n set products(products: Product[]) {\n this.products$$.next(products);\n }\n\n // products not associated with a package\n @Input()\n set standAloneProducts(standAloneProducts: Product[]) {\n this.standAloneProducts$$.next(standAloneProducts);\n }\n\n // statuses for all products and addons\n @Input()\n set statuses(statuses: PackageItemActivationStatus[]) {\n this.statuses$$.next(statuses);\n }\n\n // addons within given packages\n @Input()\n set addons(addons: Addon[]) {\n this.addons$$.next(addons);\n }\n\n // controls whether only one dropdown can be expanded at a time\n @Input() singularDropdown = false;\n\n // hides pricing\n @Input() hidePricing = false;\n\n packageProductIndent = ListIndent.INDENT_ONE;\n packageAddonWithoutProductIndent = ListIndent.INDENT_ONE;\n packageAddonWithProductIndent = ListIndent.INDENT_TWO;\n productAddonIndent = ListIndent.INDENT_ONE;\n\n packages$$: ReplaySubject<Package[]> = new ReplaySubject(1);\n products$$: ReplaySubject<Product[]> = new ReplaySubject(1);\n standAloneProducts$$: ReplaySubject<(Product | ProductWithParent) []> = new ReplaySubject(1);\n statuses$$: BehaviorSubject<PackageItemActivationStatus[]> = new BehaviorSubject([]);\n addons$$: ReplaySubject<Addon[]> = new ReplaySubject(1);\n\n orderItemLengths$$ = new BehaviorSubject<OrderLengthsForToggling> (\n <OrderLengthsForToggling> {\n packages: 0,\n products: 0\n }\n );\n\n templateData$: Observable<{ packages: SalesPackage[]; products: SalesProduct[] }>;\n salesPackages$: Observable<SalesPackage[]>;\n salesProducts$: Observable<SalesProduct[]>;\n packageToggles: boolean[] = [];\n productToggles: boolean[] = [];\n\n ngOnInit(): void {\n const packages$: Observable<Package[]> = this.packages$$.pipe(filter(packages => packages !== null));\n const products$: Observable<Product[]> = this.products$$.pipe(filter(products => products !== null));\n const addons$: Observable<Addon[]> = this.addons$$.pipe(filter(addons => addons !== null));\n\n const salesPackage$ = zip(packages$, products$, addons$).pipe(\n tap(([packages, products, _]) => {\n this.orderItemLengths$$.next(\n <OrderLengthsForToggling> {\n packages: packages.length,\n products: products.length\n });\n }),\n map(([packages, products, addons]) => buildSalesPackages(packages, products, addons)),\n );\n\n this.salesPackages$ = combineLatest(salesPackage$, this.statuses$$).pipe(\n map(([salesPackages, statuses]) => addStatusesToSalesPackages(salesPackages, statuses)),\n startWith([]),\n );\n\n this.salesProducts$ = combineLatest(this.standAloneProducts$$, this.statuses$$).pipe(\n filter(([products, _]) => products !== null),\n map(([products, statuses]: [(Product | ProductWithParent)[], PackageItemActivationStatus[]]): SalesProduct[] => {\n return products.map(p => {\n const addons = p.addons || null;\n const salesProducts = buildSalesProductFromProduct(p, addons);\n return addStatusesToSalesProduct(salesProducts, statuses);\n });\n }),\n startWith([]),\n );\n this.templateData$ = combineLatest(this.salesPackages$, this.salesProducts$).pipe(\n map(([packages, products]) => ({packages: packages, products: products}))\n )\n }\n\n public openAllDropdowns() {\n for (let x = 0; x < this.orderItemLengths$$.getValue().packages; x++) {\n this.packageToggles[x] = true;\n }\n for (let x = 0; x < this.orderItemLengths$$.getValue().products; x++) {\n this.productToggles[x] = true;\n }\n }\n\n public togglePackage(indexToToggle: number): void {\n if (this.singularDropdown) {\n const openedIndex = this.packageToggles.findIndex(value => value === true);\n if (openedIndex !== indexToToggle) {\n this.packageToggles[openedIndex] = false;\n }\n const productOpenedIndex = this.productToggles.findIndex(value => value === true);\n if (productOpenedIndex > -1) {\n this.productToggles[productOpenedIndex] = false;\n }\n }\n this.packageToggles[indexToToggle] = !this.packageToggles[indexToToggle];\n }\n\n public toggleProduct(indexToToggle: number): void {\n if (this.singularDropdown) {\n const openedIndex = this.productToggles.findIndex(value => value === true);\n if (openedIndex !== indexToToggle) {\n this.productToggles[openedIndex] = false;\n }\n const packageOpenedIndex = this.packageToggles.findIndex(value => value === true);\n if (packageOpenedIndex > -1) {\n this.packageToggles[packageOpenedIndex] = false;\n }\n }\n this.productToggles[indexToToggle] = !this.productToggles[indexToToggle];\n }\n\n public standAloneProductDescription(product: SalesProduct): string {\n if (product.addons && product.addons.length > 0) {\n let description = `Contains ${product.addons.length}`;\n description = product.addons.length === 1 ? `${description} Addon` : `${description} Addons`;\n return description;\n }\n return '';\n }\n\n public standAloneProductWithParentDescription(product: SalesProduct): string {\n if (!product.parentInfo) {\n return '';\n }\n\n return `(Requires ${product.parentInfo.parentName})`\n }\n\n public packageDescription(pkg: SalesPackage): string {\n const hasProducts = pkg.products && pkg.products.length > 0;\n if (!hasProducts && pkg.totalAddons === 0) {\n return 'No Items in Package';\n }\n\n let description = '';\n const hasOneProduct = pkg.products && pkg.products.length === 1;\n if (hasProducts || pkg.totalAddons > 0) {\n description = 'Contains ';\n }\n if (hasProducts) {\n description = `${description} ${pkg.products.length}`;\n description = hasOneProduct ? `${description} Product` : `${description} Products`;\n }\n if (hasProducts && pkg.totalAddons > 0) {\n description = `${description} & ${pkg.totalAddons}`;\n description = pkg.totalAddons === 1 ? `${description} Addon` : `${description} Addons`;\n }\n return description;\n }\n}\n","import { Inject, NgModule, Optional } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule, MatButtonModule, MatListModule, MatIconModule } from '@angular/material';\n\nimport { VaIconModule, VaBadgeModule } from '@vendasta/uikit';\nimport { VaPackageDropdownComponent } from './package-dropdown.component';\nimport { VaPackageDropdownItemComponent } from './package-dropdown-item/package-dropdown-item.component';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { En } from '../assets/i18n/en';\nimport { Cs } from '../assets/i18n/cs';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatCardModule,\n MatListModule,\n MatIconModule,\n VaIconModule,\n VaBadgeModule,\n TranslateModule.forChild()\n ],\n declarations: [VaPackageDropdownComponent, VaPackageDropdownItemComponent],\n exports: [VaPackageDropdownComponent],\n entryComponents: [VaPackageDropdownComponent]\n})\nexport class VaPackageDropdownModule {\n constructor(private translateService: TranslateService,\n @Optional() @Inject('CURRENT_LANG') currentLang$: Observable<string>,\n @Optional() @Inject('DEFAULT_LANG') defaultLang$: Observable<string>) {\n if (!this.translateService.translations.hasOwnProperty('en')) {\n this.translateService.reloadLang('en');\n }\n if (!this.translateService.translations.hasOwnProperty('cs')) {\n this.translateService.reloadLang('cs');\n }\n this.translateService.setTranslation('en', En.en, true);\n this.translateService.setTranslation('cs', Cs.cs, true);\n if (currentLang$) { currentLang$.subscribe(currentLang => translateService.use(currentLang)); }\n if (defaultLang$) { defaultLang$.subscribe(defaultLang => translateService.setDefaultLang(defaultLang)); }\n }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Product} from '../shared/product';\nimport {Price, CONTACT_SALES} from '../pricing/pricing';\nimport {Addon} from '@vendasta/core/shared';\nimport {BilledProduct} from '@vendasta/core/billing';\n\n@Component({\n selector: 'va-product-details',\n templateUrl: 'product-details.component.html',\n styleUrls: ['./product-details.component.scss']\n})\n\nexport class VaProductDetailsComponent {\n @Input() product: Product;\n @Input() billedProduct: BilledProduct;\n @Input() hasVerifiedContract = false;\n @Input() canAccessContractPricing = false;\n @Input() showActionButton = false;\n @Input() showPricing = false;\n @Input() primaryPricingActionLabel: string;\n @Input() pricingActionLabel: string;\n @Input() showPricingAction = false;\n @Input() loaded = true;\n @Input() partnerID: string;\n\n @Output() enableClicked = new EventEmitter();\n @Output() addonSelected = new EventEmitter<string>();\n @Output() primaryPricingActionSelected = new EventEmitter();\n @Output() pricingActionSelected = new EventEmitter();\n private _addons: Addon[];\n\n getAddons(): Addon[] {\n if (!this._addons) {\n this._addons = this.product.addons.map((addon) => Addon.fromApi(addon))\n }\n return this._addons;\n }\n\n getActionLabel(): string {\n if (this.product.isArchived) {\n return 'Enable';\n }\n return 'Enabled';\n }\n\n get price() {\n // NOTE: wholesalePrice = 0 means free, wholesalePrice = null || -1 means \"contact sales\"\n let prices: Price[] = [];\n if (this.product.wholesalePrice !== CONTACT_SALES && this.product.wholesalePrice != null) {\n prices = [{\n price: this.product.wholesalePrice,\n frequency: this.product.billingFrequency\n }]\n }\n return {\n currency: this.product.currency,\n prices: prices\n }\n }\n\n onAddonSelected(addonId: string): void {\n this.addonSelected.emit(addonId);\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {VaImageGalleryModule, VaIconModule, VaSafeHtmlModule} from '@vendasta/uikit';\nimport {VaPricingModule} from '../pricing/pricing.module';\nimport {VaFilesModule} from '../files/files.module';\nimport {VaFaqsModule} from '../faqs/faqs.module';\nimport {VaSellingInfoModule} from '../selling-info/selling-info.module';\nimport {VaProductDetailsComponent} from './product-details.component';\nimport {VaHeaderContainerModule} from '../header-container/header-container.module';\nimport {VaAddonListModule} from '../addon-list/addon-list.module';\nimport {RestrictionsModule} from '../restrictions/restrictions.module';\n\n@NgModule({\n imports: [\n VaImageGalleryModule,\n CommonModule,\n VaIconModule,\n VaPricingModule, VaFilesModule, VaFaqsModule, VaSellingInfoModule,\n VaHeaderContainerModule, VaSafeHtmlModule, VaAddonListModule, RestrictionsModule],\n declarations: [VaProductDetailsComponent],\n exports: [VaProductDetailsComponent],\n entryComponents: [VaProductDetailsComponent]\n})\nexport class VaProductDetailsModule {}\n","import { OrderForm, Restrictions, TrialConfiguration, Integration } from '@vendasta/core/marketplace-apps';\n\nexport class ResellerItem {\n appId?: string;\n addonId?: string;\n name?: string;\n icon?: string;\n tagline?: string;\n headerImage?: string;\n currency?: string;\n price?: number;\n billingFrequency?: string;\n lmiCategories?: string[];\n enabled: boolean;\n isCustom: boolean;\n orderForm?: OrderForm;\n quantity = 1;\n allowMultipleActivations: boolean;\n usesCustomizationForm: boolean;\n usesActivationSpecificEntryUrl: boolean;\n entryUrl: string;\n restrictions?: Restrictions;\n activationRequiresApproval?: boolean;\n billingId?: string;\n usesEditions: boolean;\n editionIds: string[];\n suggestedRetailPrice: number; // price is in cents\n editionId?: string;\n trialConfiguration?: TrialConfiguration;\n integration?: Integration;\n\n constructor(data?: any) {\n data = data || {};\n Object.assign(this, data);\n }\n}\n","import {ControlType, FieldBase} from './field-base';\n\nexport class CheckboxField extends FieldBase<boolean> {\n readonly controlType: ControlType = 'checkbox';\n}\n","import {ControlType, FieldBase, FieldBaseOptions} from './field-base';\nimport {Option as InputOption} from '@vendasta/forms'\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport interface Option {\n value: string,\n label: string,\n disabled?: boolean\n}\n\nexport interface DropDownFieldOptions extends FieldBaseOptions {\n options: Option[] | InputOption[] | string[];\n allowMultiples?: boolean;\n allowDuplicates?: boolean;\n maxChoices?: number;\n}\n\nexport class DropdownField extends FieldBase<string | string[]> {\n readonly controlType: ControlType = 'dropdown';\n options: Option[] | InputOption[];\n allowMultiples: boolean;\n allowDuplicates: boolean;\n maxChoices: number;\n\n constructor(options: DropDownFieldOptions) {\n super(options);\n this.options = [];\n if (!!options.options && options.options.length > 0) {\n // Because this typeof guard is on the element and not the array as a whole typescript doesn't recognize it as a valid type assertion\n // The ts-ignore's are required because of this\n if (typeof options.options[0] === 'string') {\n if (options.allowMultiples) {\n // @ts-ignore\n this.options = options.options.map((o: string) => ({value: o, name: o}));\n } else {\n // @ts-ignore\n this.options = options.options.map((o: string) => ({value: o, label: o}));\n }\n } else {\n if (options.allowMultiples) {\n // @ts-ignore\n this.options = options.options.map((o: string) => ({value: o.value, name: o.label}));\n } else {\n // @ts-ignore\n this.options = options.options;\n }\n }\n }\n\n this.allowMultiples = !!options.allowMultiples;\n this.allowDuplicates = !!options.allowDuplicates;\n this.maxChoices = options.maxChoices ? options.maxChoices : 1;\n\n this.validator = this.validatorBuilder();\n }\n\n protected validatorBuilder(): ValidatorFn {\n const maxChoices = this.maxChoices;\n return (control: AbstractControl): { [key: string]: any } => {\n if (Array.isArray(control.value) && maxChoices && control.value.length > maxChoices) {\n return {overMaxChoices: true}\n }\n }\n }\n}\n","import {ControlType, FieldBase, FieldBaseOptions} from './field-base';\n\nconst DEFAULT_NUM_FILES = 5;\n\nexport type FileType = 'image';\n\nexport interface FileUploadGroupFieldOptions extends FieldBaseOptions {\n fileType: FileType;\n uploadUrl: string;\n numFiles: number;\n}\n\nexport class FileUploadGroupField extends FieldBase<string[]> {\n readonly controlType: ControlType = 'file';\n fileType: FileType;\n uploadUrl: string;\n numFiles: number;\n\n constructor(options: FileUploadGroupFieldOptions) {\n super(options);\n if (!options.uploadUrl) {\n throw new Error('uploadUrl is required.');\n }\n this.fileType = options.fileType || 'image';\n this.numFiles = options.numFiles || DEFAULT_NUM_FILES;\n this.uploadUrl = options.uploadUrl;\n this.value = [];\n }\n}\n","import {ControlType, FieldBase, FieldBaseOptions} from './field-base';\n\n\nexport class TextareaField extends FieldBase<string> { controlType: ControlType = 'textarea'; }\n","import {ControlType, FieldBase, FieldBaseOptions} from './field-base';\n\nexport type TextboxType = 'text';\n\nexport interface TextBoxFieldOptions extends FieldBaseOptions {\n textboxType: TextboxType;\n prefix?: string;\n suffix?: string;\n displayOnly?: boolean;\n}\n\nexport class TextboxField extends FieldBase<string> {\n readonly controlType: ControlType = 'textbox';\n textboxType: TextboxType;\n prefix: string;\n suffix: string;\n regexValidator: string;\n regexErrorMessage: string;\n displayOnly: boolean;\n\n constructor(options: TextBoxFieldOptions) {\n super(options);\n this.textboxType = options.textboxType || 'text';\n this.prefix = options.prefix || '';\n this.suffix = options.suffix || '';\n this.regexValidator = options.regexValidator || '';\n this.regexErrorMessage = options.regexErrorMessage || '';\n this.displayOnly = options.displayOnly || false;\n }\n}\n","import {ControlType, FieldBaseOptions} from './field-base';\nimport {DropdownField, Option} from './field-dropdown';\n\nexport interface User {\n userId: string,\n email: string,\n firstName?: string,\n lastName?: string,\n}\n\nexport interface VBCUserFieldOptions extends FieldBaseOptions { users: User[]; }\n\nexport class VBCUserField extends DropdownField {\n readonly controlType: ControlType = 'vbcuser';\n\n constructor(options: VBCUserFieldOptions) {\n super({\n id: options.id,\n label: options.label,\n required: options.required,\n description: options.description,\n options: getOptions(options.users),\n disabled: options.disabled,\n forOfficeUseOnly: options.forOfficeUseOnly\n });\n }\n}\n\nfunction getOptions(vbcUsers: User[]): Option[] {\n if (vbcUsers && vbcUsers.length > 0) {\n vbcUsers.sort(compareUsersByEmail);\n return vbcUsers.map(user => {\n const labelString = createLabelString(user.firstName, user.lastName, user.email);\n\n if (user.userId && user.email && user.firstName && user.lastName) {\n return {\n label: labelString,\n value: JSON.stringify({firstName: user.firstName, lastName: user.lastName, email: user.email, id: user.userId})\n };\n }\n return {label: labelString, value: '', disabled: true};\n });\n }\n return [{label: 'No Users — Please add one to this account', value: '', disabled: true}];\n}\n\nfunction compareUsersByEmail(a: User, b: User): number {\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n return a.email.localeCompare(b.email);\n}\n\nfunction createLabelString(firstName: string, lastName: string, email: string): string {\n let returnString = '';\n returnString += firstName ? firstName + ' ' : '';\n returnString += lastName ? lastName + ' ' : '';\n returnString += email ? `(${email})` : '';\n return returnString;\n}\n"]}
\No newline at end of file