ng-easycommerce 0.0.430 → 0.0.431

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["ng://ng-easycommerce/lib/pipes/order-by.pipe.ts","ng://ng-easycommerce/lib/services/windows.service.ts","ng://ng-easycommerce/lib/interfaces/choose-options/filter-option.ts","ng://ng-easycommerce/lib/core.consts.ts","ng://ng-easycommerce/lib/api/connection.service.ts","ng://ng-easycommerce/lib/services/pagination.service.ts","ng://ng-easycommerce/lib/classes/filters/Filter.ts","ng://ng-easycommerce/lib/classes/filters/CategoryFilter.ts","ng://ng-easycommerce/lib/services/options.service.ts","ng://ng-easycommerce/lib/classes/filters/AttributesFilter.ts","ng://ng-easycommerce/lib/classes/filters/DinamycsFilter.ts","ng://ng-easycommerce/lib/classes/filters/SortFilter.ts","ng://ng-easycommerce/lib/services/products/products.service.ts","ng://ng-easycommerce/lib/services/banner.service.ts","ng://ng-easycommerce/lib/classes/user.ts","ng://ng-easycommerce/lib/classes/checkout/step.ts","ng://ng-easycommerce/lib/utils/order-util.service.ts","ng://ng-easycommerce/lib/utils/analytics/doppler.service.ts","ng://ng-easycommerce/lib/utils/analytics/facebook-pixel.service.ts","ng://ng-easycommerce/lib/utils/analytics/google-analytics.service.ts","ng://ng-easycommerce/lib/utils/analytics/gtm.service.ts","ng://ng-easycommerce/lib/utils/analytics/metricool-pixel.service.ts","ng://ng-easycommerce/lib/services/analytics.service.ts","ng://ng-easycommerce/lib/services/checkout/error-handler.service.ts","ng://ng-easycommerce/lib/utils/toast.service.ts","ng://ng-easycommerce/lib/services/checkout/checkout.service.ts","ng://ng-easycommerce/lib/classes/checkout/step-service.ts","ng://ng-easycommerce/lib/services/checkout/addressing.service.ts","ng://ng-easycommerce/lib/services/channel-config.service.ts","ng://ng-easycommerce/lib/services/auth.service.ts","ng://ng-easycommerce/lib/services/cart.service.ts","ng://ng-easycommerce/lib/services/account/orders.service.ts","ng://ng-easycommerce/lib/utils/shipment-transformer.service.ts","ng://ng-easycommerce/lib/services/stores.service.ts","ng://ng-easycommerce/lib/services/checkout/shipment.service.ts","ng://ng-easycommerce/lib/utils/options-of-product-list-data.service.ts","ng://ng-easycommerce/lib/services/dataform.service.ts","ng://ng-easycommerce/lib/services/blocks/blocks-repository.service.ts","ng://ng-easycommerce/lib/services/blocks/blocks.service.ts","ng://ng-easycommerce/lib/utils/utils.service.ts","ng://ng-easycommerce/lib/utils/payment-utils.service.ts","ng://ng-easycommerce/lib/guards/auth-guard.service.ts","ng://ng-easycommerce/lib/guards/able-buyer-guard.service.ts","ng://ng-easycommerce/lib/guards/user-role-guard.service.ts","ng://ng-easycommerce/lib/guards/loggedin-guard.service.ts","ng://ng-easycommerce/lib/guards/checkout-ready.service.ts","ng://ng-easycommerce/lib/interceptors/auth.interceptor.ts","ng://ng-easycommerce/lib/interceptors/customer.interceptor.ts","ng://ng-easycommerce/lib/classes/component-helper.ts","ng://ng-easycommerce/lib/services/parameters.service.ts","ng://ng-easycommerce/lib/ec-component/account-ec/account-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/blocks-ec.component.ts","ng://ng-easycommerce/lib/ec-component/cart-ec/cart-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/checkout-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.ts","ng://ng-easycommerce/lib/services/checkout/payment.service.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/success-ec/success-ec.component.ts","ng://ng-easycommerce/lib/ec-component/collection-ec/collection-ec.component.ts","ng://ng-easycommerce/lib/ec-component/coupon-ec/coupon-ec.component.ts","ng://ng-easycommerce/lib/ec-component/faqs-content-ec/faqs-content-ec.component.ts","ng://ng-easycommerce/lib/ec-component/filters-ec/filters-ec.component.ts","ng://ng-easycommerce/lib/ec-component/filters-top-ec/filters-top-ec.component.ts","ng://ng-easycommerce/lib/ec-component/footer-ec/footer-ec.component.ts","ng://ng-easycommerce/lib/ec-component/header-ec/header-ec.component.ts","ng://ng-easycommerce/lib/ec-component/home-ec/home-ec.component.ts","ng://ng-easycommerce/lib/ec-component/login-ec/login-ec.component.ts","ng://ng-easycommerce/lib/services/products/product-detail.service.ts","ng://ng-easycommerce/lib/ec-component/product-detail-ec/product-detail-ec.component.ts","ng://ng-easycommerce/lib/ec-component/product-ec/product-ec.component.ts","ng://ng-easycommerce/lib/ec-component/related-products-ec/related-products-ec.component.ts","ng://ng-easycommerce/lib/ec-component/section-container-ec/section-container-ec.component.ts","ng://ng-easycommerce/lib/ec-component/stores-ec/stores-ec.component.ts","ng://ng-easycommerce/lib/ec-component/variants-ec/variants-ec.component.ts","ng://ng-easycommerce/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/price-ec/price-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.ts","ng://ng-easycommerce/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.ts","ng://ng-easycommerce/lib/ec-component/account-ec/order-ec/order-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/auth-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.ts","ng://ng-easycommerce/lib/ec-component/password-reset-ec/password-reset-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.ts","ng://ng-easycommerce/lib/ec-component/share-block-ec/share-block-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-error-ec/checkout-error-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.ts","ng://ng-easycommerce/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.ts","ng://ng-easycommerce/lib/services/captcha.service.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.ts","ng://ng-easycommerce/lib/ec-component/index.ts","ng://ng-easycommerce/lib/ec-directive/add-action-redirect.directive.ts","ng://ng-easycommerce/lib/ec-directive/product-stock.directive.ts","ng://ng-easycommerce/lib/ec-directive/product-off.directive.ts","ng://ng-easycommerce/lib/ec-directive/product-mini-standard.directive.ts","ng://ng-easycommerce/lib/ec-directive/auth-wholesaler.directive.ts","ng://ng-easycommerce/lib/ec-directive/index.ts","ng://ng-easycommerce/lib/ec-pipe/ec-currency-symbol.pipe.ts","ng://ng-easycommerce/lib/ec-pipe/ec-sanitizer-html.pipe.ts","ng://ng-easycommerce/lib/ec-pipe/ec-sanitizer-url.pipe.ts","ng://ng-easycommerce/lib/ec-pipe/index.ts","ng://ng-easycommerce/lib/ng-easycommerce.module.ts","ng://ng-easycommerce/lib/services/gift-card.service.ts","ng://ng-easycommerce/lib/services/wishlist.service.ts","ng://ng-easycommerce/lib/strategies/standard.strategy.ts"],"names":["OrderByPipe","prototype","transform","array","val","_this","this","trim","Array","from","sort","item1","item2","orderByComparator","a","b","isNaN","parseFloat","isFinite","toLowerCase","__decorate","Pipe","name","WINDOW","InjectionToken","WindowRef","Object","defineProperty","Error","BrowserWindowRef","_super","call","__extends","window","__decorate$1","Injectable","windowFactory","browserWindowRef","platformId","isPlatformBrowser","nativeWindow","FilterOptionTypes","browserWindowProvider","provide","useClass","windowProvider","useFactory","deps","PLATFORM_ID","WINDOW_PROVIDERS","Constants$1","translate","router","env","LOCALE","CHANNEL","channelConfigSubject","ReplaySubject","channelConfig$","asObservable","channelConfigAPI","channel","browserWindow","browserWindowEnv","urlBase","apiUrl","urlAssets","urlFrontend","locale","localStorage","getItem","blocksCacheTime","modalConfig","title","class","keyboard","setModalConfig","config","getModalConfig","version","routes","masterChannel","getMasterChannel","setMasterChannel","setItem","isProduction","production","setUrlBase","url","setUrlAssets","onlyIfProduction","next","params","mediaUrl","mediaBannerUrl","mediaStoreUrl","getProductsListRoute","getSectionsRoute","getUrlBase","getUrlFrontend","getBlocksCacheTime","parseInt","getLocale","getLocaleTranslate","split","setLocale","use","getChannel","setChannel","getVersion","loginExtraData","client_id","client_secret","grant_type","isCollection","path","test","mobile","innerWidth","strictTypeChannel","toDecimal","total","Math","floor","addRouteToReuse","route","push","removeRouteToReuse","index","indexOf","splice","getRoutesToReuse","getRatingStar","rating","star","notStar","urlStar","cantStar","Number","error","console","inputValidationByExpressions","e","patron","condition","tecla","keyCode","which","patronReg","RegExp","tecla_final","String","fromCharCode","currency","code","symbol","position","withoutDecimals","setCurrency","currencyTypeFind","customType","find","ct","toUpperCase","__assign","modifyChannelConfig","channelConfig","locales","baseCurrency","Constants","needles","haystack","result","entries","forEach","value","hasOwnProperty","searched","prefix","suffix","casesensitive","param","TranslateService","Router","Inject","args","__decorate$2","providedIn","__param","ConnectionService","http","consts","formUrl","api","location","protocol","includes","replace","post","data","pipe","take","postOutsider","get","__assign$1","catch","err","of","getOutsider","getErrorNotHandler","getOutsiderWithParams","getHTML","httpHeaders","HttpHeaders","Accept","responseType","headers","getWithLimit","limit","HttpParams","append","getPaginated","page","put","delete","HttpClient","__decorate$3","PaginationService","connection","constants","nextSubject","BehaviorSubject","finishedSubject","waiting","finished$","updatePageData","response","cleanRoute","links","finished","pages","items","finalize","slice","isFinished","initialize","initialValues","getNext","nextProducts","subscribe","getPage","totalItems","currentPage","pageSize","__decorate$4","generated_url","multi","type","getContent","toUrlParams","setContent","options","setSelected","element","cleanFilter","setSelectedValue","element_to_change","selected","children","length","reset","sublist","elements","findIndex","subelement","child","i","founded","some","elem","filter","getSelectedList","findSelected","new_result","CategoryFilter","categories$","formatter","initial_value","categories","original","createElement","shape","removeAccents","_a","slug","_b","map","_c","_d","actual_url","str","normalize","res","raw_data","Filter","OptionsService","categoriesSubject","attributesSubject","sectionsSubject","readySubject","attributes","sections","readyAll","ready","getAllData","getCategories","getAttributes","getSections","getSectionContentByLink","link","pageContentByCodeApi","html","catchError","getSectionContentByLinkAsPromise","toPromise","getFAQ","faqsApi","response_faq","faqs","translations","topic","questions","frequentlyAskedQuestions","asked_question","question","answer","isSubElement","chidren","findCode","getCodeBySlug","generateMenu","getHigher","cmsBase","cmsChannel","shopApi","sectionsApi","sectionByCodeApi","taxonsApi","attributesApi","addAttributesSlug","attribute","__assign$2","slugify","text","getBreadcrumb","breadcrumb","generateBreadcrumb","reverse","getBreadcrumbByFilters","filters","final_result","unshift","apply","__spread","length_1","appendPaths","then","sent","optionLoaded","isCategory","item","section","appendSection","key","state","keys","every","option_key","__decorate$5","AttributesFilter","attributes$","already","aux_url","cleanResult","DynamicsFilter","arguments","option","label","values","description","holi","SortFilter","father","products","ProductsService","pagination","productsSubject","filtersSubject","catalogMode","products$","filters$","latestProductsByCategoryApi","category","latestProductsApi","specificProductApi","variant","productsBySpecialMarkApi","specialmark","relatedProductsApi","productVariantApi","latestProductsByAttributeApi","productSearchApi","cmsRelatedProductsApi","productsFilterApi","getLatestProducts","getLatestProductsByCategory","getSpecificProduct","getProductsBySpecialMark","getRelatedProducts","getProductVariant","getlatestProductsByAttribute","getSearchedProducts","content","generateFinalApi","subscription","getCMSRelatedProducts","getProductsSearched","search_value","getProductsForFilter","defaultFilters","setFilters","unsubscribe","updateDynamicFilters","final_filters","getFilterInstance","filterDefault","filter_type","codes","instance","request","setFilterSelected","filterObj","filterElem","updateProductsForFilter","getProductsWithUniqueVariant","withOption","defaultFirstOption","checkIfStock","productsUniqueVariant","product","variants","__spread$1","opt","optionValue","modified_product","JSON","parse","stringify","variantAux","stock","op","productWithVariantValues","firstOptions_1","picturesdefault","images","variant_id","currentOption","__assign$3","productCode","id","variantCode","finalPrice","saleprice","price","cleanAllFilters","isWaiting","extra_params","extra","getTotal","__decorate$6","BannerService","optionsService","bannerSubject","banners","button_route","banner","bannersByTaxonApi","taxon","bannersByAttributeApi","getBanner","loadBannersByTaxon","loadBannersByAtrribute","getImage","mobileImageName","imageName","getImageFull","getBannersByTaxon","getBannersByAttribute","procesateBanners","final_banners","__decorate$7","User","USER","email","username","password","first_name","last_name","address","country","city","postcode","birthday","gender","phone_number","suscribed_to_newsletter","document_type","preferred_card","document_number","channels","customers","token","typeUser","initilized","isWholesaler","isSeller","isRetailCustomer","toForm","firstName","lastName","phoneNumber","documentType","documentNumer","street","countryCode","provinceName","persistInStorage","json","jsonify","loadFromStorage","deserialize","removeFromStorage","removeItem","log","setChannels","_i","input","assign","removePassword","needsAuth","priority","doing","restart","isPending","isReady","OrderUtilityService","getPromotions","cart","forCart","checkoutState","new_state","subtotal","amount","totals","cartDiscounts","cartDiscount","formatType","getAmount","discount","shipping","__decorate$8","DopplerService","rendererFactory","document","isLoaded","pixelSrc","scriptInsert","renderer","setAttribute","appendChild","body","createRenderer","RendererFactory2","DOCUMENT","__decorate$9","FacebookPixelService","enabled","pixel_id","new_analityc_script","setTimeout","callEvent","event_name","translateEventName","fbq","evalEvent","toViewContent","toCheckoutInit","toPaymentInfo","toPurchase","toAddToCart","callCustomEvent","disable","content_type","content_name","content_ids","contents","getContents","getContentIds","num_items","quantity","__decorate$a","GoogleAnalyticsService","productsService","startListeningPageViews","gtm_id","events","event","NavigationEnd","gtag","page_path","urlAfterRedirects","toViewItem","toViewItemList","toShippingInfo","toRemoveToCart","toSignUp","coupon","toCartDiscount","tax","taxes","transaction_id","number","strDiscount","itemDiscount","join","lastProduct","toItem","__assign$4","item_list_name","item_list_id","productParam","item_name","item_id","item_brand","item_category","payment_type","payments","method","shipping_tier","shipments","declaration","async","src","initialization","head","__decorate$b","GTMService","browserGlobals","windowRef","documentRef","addGtmToDom","gtmTag","pageName","pushTag","countItems","__assign$5","getDataLayer","dataLayer","pushOnDataLayer","obj","Promise","resolve","reject","doc","gtm.start","Date","getTime","gtmScript","applyGtmQueryParams","gtm_resource_path","addEventListener","insertBefore","firstChild","k","__decorate$c","MetricoolPixelService","pixel_hash","__decorate$d","AnalyticsService","facebookAnalitycs","googleAnalytics","gtmAnalytics","metricoolAnalytics","dopplerAnalytics","services","initializeFacebook","initializeGoogle","initializeGTM","initializeMetricool","initializeDoppler","service","__decorate$e","ErrorHandlerService","cartService","toastrService","injector","errorSubject","error$","outOfStock","updateItemsOnError","otherErrors","channeAccessPermissionDenied","AuthService","logout","message","show","closeButton","timeOut","clearError","handlerErrorResponse","CartService","ToastrService","Injector","__decorate$f","ToastService","translation","setTimeMessage","time","configToast","interpolateParams","configToastr","__decorate$g","CheckoutService$1","orderUtils","analyticsService","authService","errorHandler","baseApi","getCartToken","getPaymentMethodsApi","putAddressApi","putPaymentApi","completeApi","persistShipmentApi","getPreferenceApi","getHasPurchaseConditions","canCheckoutSubject","onReadySubject","stateSubject","loadingSubject","orderSubject","asociatedDataSubject","checkout_data","order$","state$","loading$","canCheckout$","asociatedData$","onReady$","updateOrder","order","getStepData","step_name","step_result","getValue","step","setSteps","steps","autohandle","final_steps","Step","__assign$6","cartLocal","setStepReady","step_number","__awaiter$1","restartAllStepsFrom","isCheckoutReady","setStepDoing","included","update","isStepReady","setOrder","getOrder","completeOrder","notes","complete","changeHaveToUpdate","ok","require_login","clearAndResetCart","updateAsociatedData","getUserProfileAsUser","promotion","restartCheckout","combineLatest","cartItems","loading","__read$2","getTotalAmount","getUserProfile","user","navigateByUrl","CheckoutService","__decorate$h","checkout","step_id","restartStep","getUserData","getShipmentData","getPaymentData","step_data","__awaiter$2","__generator$2","AddressingService$1","checkoutService","countriesApi","zonesApi","provincesApi","addressBookApi","headquarterApi","typeForms","modeSelectAddress","countriesList","documentTypes","provinceList","getAddressingData","__awaiter$3","__generator$3","_embedded","getAddressBook","addres","__assign$7","default","setHeadquarter","sede","setAddress","user_data","putAddressAndHandle","onError","shippingAddress","getTypeForm","configForm","formAddres","Validators","required","pattern","documentNumber","maxLength","provinceCode","terms","formBilling","viewForms","setTypeSelectAddress","setTypeForms","paises","toLocaleLowerCase","provinces","AddressingService","__decorate$i","StepService","ChannelConfigService$1","channelConfigApi","localesApi","channelsApi","channelsSubject","localesSubject","getChannelConfig","setChannelInfo","getChannels","getLocales","changeChannel","channelObj","headquarterSelectionOnly","ChannelConfigService","__decorate$j","AuthService$1","JWT_TOKEN","REFRESH_TOKEN","EXPIRATES_IN","MAIL","CUSTOMER","activeChannelChange","loggedInSubject","loggingInSubject","userInSubject","channelsUserSubject","tokenApi","registerApi","registerWholesalerApi","confirmAccountApi","resetPasswordApi","recoverPasswordApi","loggedIn","loggingIn","userAuth","channelsUser","customer","homeResolver","channelAccessPermission","userchannel","channelAccess","hostname","encoded","btoa","reload","doLogin","__assign$8","doLoginUser","mapTo","toString","signUp","confirmAccount","passwordReset","new_password","first","second","recoverPassword","isTokenExpired","fecha_expiracion","getExpiratesAt","moment","hasToRefresh","getRefreshToken","signUpWholesaler","getCountriesData","__awaiter$4","__generator$4","setActiveChannelChange","activelyChangeChannelsOnLogin","isAllowedRole","allowedRoles","role","forceChannelsForSeller","tokens","__spread$2","setCustomer","clearAndResetCustomerCart","getCustomer","setHomeResolver","resolverFunction","getHomeResolver","isAbleToBuy","isAuthenticated","withRoles","ch","Observable","getCurrentUser","getCurrentUserAsUser","doLogoutUser","getToken","refresh_token","expires_in","add","format","__decorate$k","CartService$1","channelConfigService","cartItemsSubject","couponSubject","cartSubject","requestInProcess","promotionsSubject","count","logged_in","have_to_update","cart_baseUrl","cartItemsApi","addItemApi","cart_token","addAllItemsApi","updateItemQuantityApi","deleteItemApi","couponApi","switchPriceInCartItem","promotions","getCart","__awaiter$5","initializeCart","getCartByToken","getCartByCustomer","tokenValue","updateCartObj","updateCartItems","transformItems","stepCart","isItemInLocal","deleteCartItem","addAllToCart","external_item","updateLocalCart","updateCartItemQuantity","newQuantity","appendToCart","removeCartItem","toast","__assign$9","addIfAllreadyExists","quantityAdd","updateItemQuantity","findItem","resetCart","emitEvent","couponCode","formatCoupon","addToCart","handleError","addToCartPromise","mergeItemsAddAllToCart","cart_response","status","paramsMerge","itemInterno","itemParam","__spread$3","validateQuantity","findItemByIdVariant","getCountFromItemInCart","maximumItemsQuantity","minimumItemsQuantity","calculateStockCounts","id_buscado","codeVariant","product_id","getCountCartItems","getTaxesAmount","getSubTotalAmount","addCoupon","errors","removeCoupon","current_coupon","current","readyForCheckout","successCallback","errorCallback","minimumQuantityPurchaseItems","reasons","minimumPurchaseAmount","itemsWithError","itemsUpdated","failedItem","failed","loadCartByToken","server_item","pop","reduce","prev","curr","__decorate$l","OrdersService$1","ordersSubject","selectedOrderSubject","orders$","selectedOrder$","ordersListapi","updateOrders","mapOrdersAndAddInfo","orders","setSelectedOrder","findOrder","order_number","getOrderByNumber","waitUntilOrders","OrdersService","formatProduct","percentaje","toFixed","__assign$a","__decorate$m","ShipmentDataTransformer","getData","newDataSet","getApi","appendShipmentExtra","contract","__assign$b","codigo_sucursal","getMethodDetail","branch","direccion","componentesDeDireccion","component","meta","contenido","transformAndreani","descripcion","latitude","geocoordenadas","latitud","longitude","longitud","atencion","horarioDeAtencion","info","__decorate$n","StoresService$1","storesSubject","stores","getAllStoresApi","StoresService","__decorate$o","ShipmentService","transformer","storesService","methodsSubject","costsSubject","methods","costs","moreInfoInMethod","shipmentMethodsApi","putShipmentApi","putContractApi","calculatedCostsApi","getShipmentMethods","responseToList","setMethod","__awaiter$6","putShipment","getCalculatedCosts","modifyCostsResponse","setContract","__assign$c","otherParamsForContract","post_code","multiplePrices","branch_delivery","submethod","contracts","branch_property","address_data","computed","final_method_data_1","pickup_store","current_store","store","detail","shipping_method_contract","shipping_method_branch_code","getBranchOffices","formatUnnecesaryDocument","billingAddress","_e","_f","ngOnDestroy","__decorate$p","OptionsOfProductListDataReceiverService","sortOptions","oneSelect","selectedOption","filterOptions","__decorate$q","DataformService","fb","isValid","checkoutForm","valid","change","group","patchValue","FormBuilder","__decorate$r","BlocksRepositoryService","blocksAPI","getBlocks","__awaiter$7","hasSectionBlocks","blocks","appendBlock","block_info","new_block","restartBlocks","setInterval","__decorate$s","BlocksService","blocksRepo","blocksSubject","contactFormResponseAPI","orderedAndModified","result_ordered","getBlockByCode","block","getBannerImage","resultado","redirectionType","asociacion","sendResponse","response_obj","prepareData","__decorate$t","UtilsService","titleCaseWord","word","substr","__decorate$u","PaymentUtils","mp_error_codes","pending_contingency","pending_review_manual","cc_rejected_bad_filled_card_number","cc_rejected_bad_filled_date","cc_rejected_bad_filled_other","cc_rejected_bad_filled_security_code","cc_rejected_blacklist","cc_rejected_call_for_authorize","cc_rejected_card_disabled","cc_rejected_card_error","cc_rejected_duplicated_payment","cc_rejected_high_risk","cc_rejected_insufficient_amount","cc_rejected_invalid_installments","cc_rejected_max_attempts","cc_rejected_other_reason","getErrorMessage","__decorate$v","AuthGuardService$1","auth","AuthGuardService","routeSnapshot","redirectTo","__decorate$w","AbleBuyerGuardService$1","AbleBuyerGuardService","redirectSellerTo","__decorate$x","UserRoleGuardService$1","UserRoleGuardService","authorizedRoles","__decorate$y","LoggedInGuard$1","LoggedInGuard","navigate","__decorate$z","CheckoutReadyGuard$1","CheckoutReadyGuard","__decorate$A","AuthInterceptor","intercept","req","setHeaders","Content-Type","Authorization","authReq","clone","handle","catchErr","handleErrors","throwError","__decorate$B","CustomerInterceptor","__decorate$C","ComponentHelper","ecOnInit","ecOnConstruct","hasParams","navigateOnRouter","ParametersService$1","parametersSubject","readyParamsSubject","parameters","ready$","getAllParametersAPI","insertAnalitycs","initializeAnalytics","waitUntilData","facebook","google","gtm","metricool","doppler","ParametersService","__decorate$D","AccountEcComponent","paramsService","p","ngOnInit","__decorate$E","Component","selector","template","BlockBannerBoxesEcComponent","blocksService","big_ones","columnSize","esImpar","boxesInlcudesCode","box","__assign$d","Input","__decorate$F","BlockBannerFullEcComponent","__assign$e","handlePage","__decorate$G","BlockFormContactEcComponent","formBuilder","redirect","form_data","FormData","sendForm","form","success_message","formData","sendValue","contact_form","setSubject","setValue","__assign$f","subject","toastNewsletterForm","preventDefault","newsletter_form","toastCompleteForm","keysearch","telephone","attachment","captcha","uploadFile","target","files","file","ngOnChanges","resolved","captchaResponse","catpcha","__decorate$H","BlockHtmlEcComponent","sanitizer","html_content","bypassSecurityTrustHtml","DomSanitizer","__decorate$I","ContactFormNewsEcComponent","codeBlock","blockContact","subscribeBlockNews","__assign$g","contactForm","__decorate$J","providers","BlockProductsEcComponent","__assign$h","getKeyByValue","object","__decorate$K","BlocksEcComponent","strsection","show_loading","getHTMLContent","isNewsletter","paramsstrsection","__decorate$L","CartEcComponent","modalService","isLoggedIn","actualizarCantidad","cantidad","redirectCheckout","redirectRegister","updateLoggedIn","scroll","openModal","modalRef","redirectDetailProduct","BsModalService","__decorate$M","CheckoutEcComponent","canCheckout","initializeCheckout","setStepper","subReady","endCheckout","goBack","stepper","previous","querySelector","Stepper","linear","animation","scrollTo","top","behavior","error_value","getIcon","data_item","subCan","contain_items","__decorate$N","DataFormEcComponent","addressingService","countriesSubject","provincesSubject","countriesFacturacionSubject","provincesFacturacionSubject","countries$","provinces$","countriesFacturacion$","provincesFacturacion$","form_ready","allready_data","addressBook","addressBookSelected","validado","viewDataFacturacion","selectAddres","showFormFacturacion","onFormChange","onFormValid","onInputChange","onCountrySelected","controls","onCountrySelectedFacturacion","checkoutFormFacturacion","onProvincesSelected","onProvincesSelectedFacturacion","verifyValidate","onlySelf","emitResult","showError","error_message","__awaiter$8","__assign$i","getRawValue","undefined","setSelectAddress","addressSelect","selectAddress","addressSelected","getMode","setMode","mode","getCountry","getProvince","getDocumentType","dt","getLabelNotesParam","getParamByChannelAndLanguage","nameParam","statusChanges","localEmail","backdrop","__decorate$O","PaymentService","paymentMethodsSubject","methods$","getCheckoutMobbexApi","getCheckoutBancardApi","getPaymentMethods","__awaiter$9","putPayment","getPreference","shipment_data","preference","getCheckoutMobbex","getCheckoutBancard","getRandomArbitrary","round","random","__decorate$P","PaymentEcComponent","toastr","paymentService","methodDataSubject","loading_internal","loading_internal_mp","method_data$","allData","__assign$j","setError","__awaiter$a","setLoading","estado","r","submitForm","getPK","public_key","isRedirectRedsys","isRedirectCecaBank","isMP","isMPTarjetaDeCredito","isMethodOffline","isPeyPalExpress","isMobbex","isBancard","isDecidir","total_amount","setActive","parent","parentElement","parent_1","__values","parent_1_1","done","button","classList","contains","remove","Renderer2","ViewChild","__decorate$Q","ShipmentEcComponent","shipmentService","points","costos","method_name","contract_data","__assign$k","sucursal_id","cost","co","contra","toTraducible","deleteUPS","methodSelect","validName","showResponse","cos","__decorate$R","SuccessEcComponent","activedRoute","orderDetails","from_mp","external_reference","ActivatedRoute","__decorate$S","CollectionEcComponent","paramsSrv","activeRoute","productsWithUniqueVariant","optionsFilters","getSpecificFilters","types","result_filter","areProducts","setFinished","changeFilter","addAllProductosToCart","prod","productWithUniqueVariant","productToCartItem","getObjectWithVariant","getProductsAndSubscribe","queryParams","__read$5","cambio_1","search","latest","suscripcion","__spread$4","filters_top","onScroll","__decorate$T","CouponEcComponent","coupon_value","aplied","validCoupon","invalidCoupon","applyCoupon","__decorate$U","FaqsContentEcComponent","empty_faqs","changeFAQ","new_index","actual_index","__decorate$V","FiltersEcComponent","expand","close","accordion_id","Document","decorators","__decorate$W","FiltersTopEcComponent","full","EventEmitter","mid","filterChild","emit","getDescripcion","getStyles","setSeleccion","valores","f","opChild","c","createValue","filterItem","Output","__decorate$X","FooterEcComponent","menuItemsCategories","menuItemsSections","menuItemsAttributes","updateCategories","ecUpdateMenuItemCategories","updateAttributes","ecUpdateMenuItemAttributes","updateMenuItem","ecUpdateMenuItemSection","addChildren","menuItems","stackPlace","__assign$l","__decorate$Y","HeaderEcComponent","menuSections","envetUrlTransparent","toggled","__spread$5","updateMenuItemLastCreated","nagivate","setSearchValue","getCollectionSearch","searchValue","toogleToolbar","menu_button","nativeElement","removeClass","addClass","changeLanguage","lang","changeUrlTransparent","urlTransparent","subscribeAttributes","arrayAttributes","subscribeCategories","arrayCategories","arrayMenu","changeUrlNavigation","NavigationStart","url_1","evUrl","transparent","cat","atr","mediaQuery","matchMedia","mediaMenu","matches","__decorate$Z","HomeEcComponent","noNewsletter","__decorate$_","LoginEcComponent","buyButton","redirectHome","$","collapse","login","$event","loginForm","__decorate$$","ProductDetailService","productSubject","optionsSubject","picture","product$","options$","loadProduct","getProduct","variant_code","getOptions","updateVariants","generateAsociatedDataFromVariants","setProduct","isProductValid","setOption","option_code","option_value","changePicture","__awaiter$b","product_selected","_","makeAffordableProduct","product_received","toOption","preoption","variant_option","updateOptions","asociated","properties","beautifyProperties","cratePrice","crateSalePrice","crateDiscount","maximumAmount","minimumAmount","_g","_h","_j","finalConsumer","finalConsumerPrice","_k","final_consumer_price","originalFinalConsumerPrice","_l","original_final_consumer_price","taxIncluded","_m","taxCategory","_o","beautifyData","prop","all_discount_1","min_price","max_price","all_prices","min","max","inRange","actualQuantity","asociatedData","getProductWithUniqueVariant","__assign$m","getVariantsSelected","optionsException","variantsSelected","v","getVariantsAvailable","variantsAvailable","aux","va","containsAll","existVariantAndHasStock","__decorate$10","ProductDetailEcComponent","productService","focusImage","owlOptions","saveRef","carousel","plus","less","showContact","hideContact","thereIsMoreInfo","special_mark","changeImgFocus","img","snapshot","queryParamMap","__assign$n","contact","scrollIntoView","__decorate$11","ProductEcComponent","canBuy","buyOrRedirect","idredirect","getBrandName","__decorate$12","RelatedProductsEcComponent","relatedProducts","customOptions","loop","dots","navSpeed","margin","navText","nav","responsive","0","600","900","load","changes","left","currentValue","__decorate$13","SectionContainerEcComponent","activatedRoute","content_html","loadSection","sanitizeHtml","getSection","__decorate$14","StoresEcComponent","filterStores","storesAll","exclusiveStores","imageMap","getProvices","provincesOpt","s","province","getStoresByProvinces","storesByProvinces","getPickupStores","cond","pickupStore","getNonExclusiveStores","exclusive","selectChange","select","urlmap","bypassSecurityTrustResourceUrl","updateMap","__decorate$15","VariantsEcComponent","attr","view","__decorate$16","SellerDashboardContainerEcComponent","UIComponents","activeCustomer","sortValue","searchInput","filteredCustomers","fuseOptions","isCaseSensitive","shouldSort","tokenize","threshold","distance","maxPatternLength","minMatchCharLength","fuse","Fuse","updateCustomers","setCollection","sortCustomers","typeValue","sortType","comparator","sortFunction","sortNumber","sortText","aCustomer","otherCustomer","changeCustomer","hasHeader","hasUIComponent","navigateExternal","open","UIComponent","__decorate$17","LoadingFullEcComponent","hole_height","__decorate$18","LoadingInlineEcComponent","__decorate$19","MPCreditEcComponent","installments","issuers","doSubmit","payment_method","require_issuer","allready_payed","doc_type","finishApi","expiryChange","fechaSplit","month","year","expiryOnKey","charCode","fecha","cardNumberChange","restartInstallments","guessPaymentMethod","post_data","issuer_id","installment","merchant_account_id","payment_method_option_id","payment_method_id","processing_mode","doc_number","processResponse","processError","cardnumber","setPaymentMethod","bind","bin","substring","getPaymentMethod","data_to_send","marketplace","js_version","bins","referer","results","payment_data","payment_type_id","issuer","payer_costs","payerCost","__assign$o","calculateTotal","installment_data","paymentMethod","getIssuers","getInstallments","additional_info_needed","paymentMethodId","setIssuers","Mercadopago","selectIssuer","selectInstallment","installment_cost","agreements","merchant_accounts","transactionAmount","issuerId","payment","setInstallments","recommended_message","getCardToken","$form","getElementById","createToken","setCardTokenAndPay","card","parseErrorMessage","isInvalid","cardholder","installment_rate","status_detail","status_code","getDescripcionCuota","itemCuota","setPublishableKey","__decorate$1a","PriceEcComponent","priceSize","__decorate$1b","RedsysCatchEcComponent","setStateInLocal","mensaje","sessionStorage","setStateInSesion","hide","__read$7","queryRouter","__decorate$1c","RedSysProEcComponent","intentoRequest","isDobleAuth","urls","closeModal","challengeApi","merchantOrder","clearStorageState","clickClose","callState","animated","__decorate$1d","RedSysRedirectEcComponent","dataRedirect","__decorate$1e","CecaRedirectEcComponent","__decorate$1f","OrdersEcComponent","ordersService","sortedByNewest","anOrder","otherOrder","goToOrder","toDate","date","optionsBox","autoplay","smartSpeed","dotsData","1000","or","__decorate$1g","OrderEcComponent","numberOrder","callError","volver","__awaiter$c","__decorate$1h","AuthEcComponent","nombre","apellido","register_loading","setProp","register","registerForm","plainPassword","newsletter","resul","atob","__decorate$1i","RegisterFormEcComponent","isLogged","darkMode","success","campospersonajuridica","registroUsuario","plainPassword2","__decorate$1j","LoginFormEcComponent","__decorate$1k","ForgotPasswordEcComponent","validEmail","processOk","__decorate$1l","ConfirmAccountEcComponent","onSuccess","__decorate$1m","PasswordResetEcComponent","sendNewPassword","invalidForm","formGroup","passwords","sendToLogin","__decorate$1n","RegisterWholesalerFormEcComponent","documentTypesSubject","documentTypes$","requestTerms","onGenderSelected","onDocumentTypeSelected","companyName","taxIdentification","comments","contactFirstName","contactLastName","contactCompanyPosition","contactEmail","contactDocumentType","contactDocumentNumber","subscribedToNewsletter","__decorate$1o","ShareBlockEcComponent","mediaimg","toShareFacebook","toShareTwitter","toSharePinterest","toShareWhatsapp","wsp","toShareEmail","mail","createMetadata","href","addTags","property","getTitle","Meta","Title","__decorate$1p","DetailCheckoutBlockEcComponent","__decorate$1q","CheckoutErrorComponent","checkoutErrorService","urlRedireccion","initializeTemplate","subs","bsModalRef","subsModal","onHide","onClose","__decorate$1r","MpRedirectEcComponent","iniciar","ventana","closed","paymentServiceInst","init_point","renderMP","origin","__decorate$1s","RedSysRedirectOutEcComponent","__decorate$1t","PaypalExpressEcComponent","getUrlNotification","producto","precio","tried","renderPayPal","paypal","Buttons","createOrder","actions","create","purchase_units","currency_code","onApprove","__awaiter$d","capture","render","paypalElement","setVariables","subsCart","scriptSdk","public_client_id","static","__decorate$1u","MobbexEcComponent","dataMobbex","__decorate$1v","BancardEcComponent","dataBancard","iframe_link","process_id","__decorate$1w","BancardRedirectEcComponent","__decorate$1x","SelectChannelEcComponent","setSelect","chanelSelect","chanel","__assign$p","__decorate$1y","CartLoadEcComponent","__read$8","__decorate$1z","MagnizoomComponent","zoomMode","minZoomFactor","maxZoomFactor","mousePosition","lensSize","width","height","zoomFactor","imageSrc","loadImage","image","initContext","canvas","mainCanvasRef","context","getContext","Image","onload","clearRect","canvasWidth","canvasHeight","lineWidth","drawImage","renderLensMode","renderCoverMode","zoomRect","getZoomRect","fillRect","x","y","w","h","clippingRect","getClippingRect","strokeRect","covertRect","getCoverRect","clampRect","calculateMousePosition","clientX","clientY","boundingRect","getBoundingClientRect","viewToModelX","viewToModelY","onMouseLeave","onMouseEnterOrMove","onMouseScroll","newZoomFactor","deltaY","stopPropagation","__decorate$1A","MultipleItemsToCartEcComponent","totalCostItems","optionsProductForVariant","setQuantity","totalCost","allWithoutTracking","getObjectParamsWithVariant","objectWithVariant","__decorate$1B","CaptchaService$1","captchaSubject","siteKey","testing","productionEnvironment","recaptchaSiteKeysUrl","recaptchaSitesUrl","recaptchaSitesUrlProd","captchaApi","isProd","urlBaseFormat","initializer","paramThisChannel","paramGeneral","getRecaptchaSites","RECAPTCHA_SITES","concatMap","getRecaptchaSiteKeys","RECAPTCHA_SITE_KEYS","getSiteKey","getKey","formatUrl","CaptchaService","__decorate$1C","RecaptchaEcComponent","captchaService","updateKey","__decorate$1D","DecidirEcComponent","paramsMensaje","showMessage","subMessage","getCheckoutDecidir","dataDecidir","resizeIframe","style","contentWindow","scrollHeight","scrollWidth","__decorate$1E","components","AddActionRedirectDirective","elementRef","redirectUrl","linstenEvent","redirectFromUrl","evt","classStr","setStyle","cl","setProperty","listen","ElementRef","__decorate$1F","Directive","ProductStockDirective","templateRef","viewContainer","productDirective","validateStock","checkValuesForStock","existMark","clear","ecProductStockElse","createEmbeddedView","TemplateRef","ViewContainerRef","__decorate$1G","ProductOffDirective","customMessageStr","hasDiscount","prices","saleprices","saleBf","generateDiscount","saleLt","createImage","popover","childNodes","node","removeChild","__decorate$1H","ProductMiniStandardDirective","idConteiner","setMarkStandar","containerImg_1","image_view","special_marks","__decorate$1I","AuthWholesalerDirective","authparams","ecAuthWholesalerElse","__decorate$1J","directives","ecCurrencySymbolPipe","currencyPipe","changeSymbolTransform","valor","positionSymbol","checkingWithoutDecimals","clearSymbol","Intl","NumberFormat","CurrencyPipe","__decorate$1K","EcSanitizerHtmlPipe","__decorate$1L","EcSanitizerUrlPipe","__decorate$1M","pipes","NgEasycommerceModule","forRoot","environment","ngModule","NgEasycommerceModule_1","useValue","fromPipeBase.pipes","RECAPTCHA_SETTINGS","HTTP_INTERCEPTORS","forChild","__decorate$1N","NgModule","exports","fromComponentsBase.components","fromDirectiveBase.directives","imports","CommonModule","RouterModule","TranslateModule","HttpClientModule","InfiniteScrollModule","ToastrModule","FormsModule","ReactiveFormsModule","RecaptchaFormsModule","RecaptchaModule","CardModule","ModalModule","declarations","GiftCardService$1","baseUrl","setCoupon","handleResponse","deleteCoupon","avoidCoupon","GiftCardService","__decorate$1O","WishlistService$1","wishlistProducts","WishlistService","observer","hasProduct","__decorate$1P","StandardReuseStrategy","storedRoutes","Map","shouldDetach","set","shouldAttach","retrieve","shouldReuseRoute","future","routeConfig","__decorate$1Q"],"mappings":"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","sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'orderBy'\n})\nexport class OrderByPipe implements PipeTransform {\n\n transform(array, val = 'desc'){\n \n if (!val || val.trim() == \"\"){\n return array;\n } \n\n //ascending\n if (val == 'asc'){\n return Array.from(array).sort((item1: any, item2: any) => { \n return this.orderByComparator(item1['id'], item2['id']);\n });\n } else if(val == 'desc'){ // desc\n return Array.from(array).sort((item1: any, item2: any) => { \n return this.orderByComparator(item2['id'], item1['id']);\n });\n } else if(val == 'a-z') { // a-z\n return Array.from(array).sort((a: any, b: any) => { \n if ( a['name'] < b['name'] ){\n return -1;\n } else if ( a['name'] > b['name'] ){\n return 1;\n } else {\n return 0; \n }\n });\n } else if(val == 'z-a') { // z-a\n return Array.from(array).sort((a: any, b: any) => { \n if ( a['name'] > b['name'] ){\n return -1;\n } else if ( a['name'] < b['name'] ){\n return 1;\n } else {\n return 0; \n }\n });\n } else if(val == 'low') { // low to high\n return Array.from(array).sort((a: any, b: any) => { \n if ( a['price'] < b['price'] ){\n return -1;\n } else if ( a['price'] > b['price'] ){\n return 1;\n } else {\n return 0; \n }\n });\n } else if(val == 'high') { // high to low\n return Array.from(array).sort((a: any, b: any) => { \n if ( a['price'] > b['price'] ){\n return -1;\n } else if ( a['price'] < b['price'] ){\n return 1;\n } else {\n return 0; \n }\n });\n }\n\n }\n\n orderByComparator(a:any, b:any):number{\n\n if((isNaN(parseFloat(a)) || !isFinite(a)) || (isNaN(parseFloat(b)) || !isFinite(b))){\n //Isn't a number so lowercase the string to properly compare\n if(a.toLowerCase() < b.toLowerCase()) return -1;\n if(a.toLowerCase() > b.toLowerCase()) return 1;\n }\n else{\n //Parse strings as numbers to compare properly\n if(parseFloat(a) < parseFloat(b)) return -1;\n if(parseFloat(a) > parseFloat(b)) return 1;\n }\n\n return 0; //equal each other\n }\n\n}\n","import { isPlatformBrowser } from \"@angular/common\";\r\nimport { ClassProvider, FactoryProvider, InjectionToken, PLATFORM_ID, Injectable } from '@angular/core';\r\n\r\n/* Create a new injection token for injecting the window into a component. */\r\nexport const WINDOW = new InjectionToken('WindowToken');\r\n\r\n/* Define abstract class for obtaining reference to the global window object. */\r\nexport abstract class WindowRef {\r\n\r\n get nativeWindow(): Window | Object {\r\n throw new Error('Not implemented.');\r\n }\r\n\r\n}\r\n\r\n/* Define class that implements the abstract class and returns the native window object. */\r\n@Injectable()\r\nexport class BrowserWindowRef extends WindowRef {\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n get nativeWindow(): Window | Object {\r\n return window;\r\n }\r\n\r\n}\r\n\r\n/* Create an factory function that returns the native window object. */\r\nexport function windowFactory(browserWindowRef: BrowserWindowRef, platformId: Object): Window | Object {\r\n if (isPlatformBrowser(platformId)) {\r\n return browserWindowRef.nativeWindow;\r\n }\r\n return new Object();\r\n}\r\n\r\n/* Create a injectable provider for the WindowRef token that uses the BrowserWindowRef class. */\r\nexport const browserWindowProvider: ClassProvider = {\r\n provide: WindowRef,\r\n useClass: BrowserWindowRef\r\n};\r\n\r\n/* Create an injectable provider that uses the windowFactory function for returning the native window object. */\r\nexport const windowProvider: FactoryProvider = {\r\n provide: WINDOW,\r\n useFactory: windowFactory,\r\n deps: [ WindowRef, PLATFORM_ID ]\r\n};\r\n\r\n/* Create an array of providers. */\r\nexport const WINDOW_PROVIDERS = [\r\n browserWindowProvider,\r\n windowProvider\r\n];","export interface FilterOption {\n name: string;\n value: string;\n type: FilterOptionTypes;\n selectedOption: any;\n options: Array<FilterOptionValue>;\n}\n\nexport interface FilterOptionValue {\n name: string;\n value: any;\n selected: boolean;\n}\n\nexport enum FilterOptionTypes {\n oneSelect = 'one-select',\n multiSelect = 'multi-select'\n}","\nimport { Injectable, Inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\nimport { ConnectionService } from './api/connection.service';\nimport { CurrencyConfig } from './interfaces/currencyConfig';\ntype currencyType = 'EUR' | 'ARG' | 'USD' | 'PYG' | 'PEN' | 'SEK' | 'CUSTOM';\ntype positionType = 'L' | 'R';\ntype channelTypes = 'b2b' | 'b2b2c' | 'b2c';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Constants {\n\n constructor(public translate: TranslateService, private router: Router, @Inject('env') private env) { }\n\n private readonly LOCALE = 'LOCALE';\n private readonly CHANNEL = 'CHANNEL';\n\n private channelConfigSubject = new ReplaySubject<any>();\n public channelConfig$ = this.channelConfigSubject.asObservable();\n\n private channelConfigAPI = (channel) => '/shop-api/' + channel + 'channel';\n\n private browserWindow: object = window || {};\n private browserWindowEnv: object = this.browserWindow['__env'] || {};\n\n // private urlBase: string = 'http://testing.backend.easycommercetech.com/';\n private urlBase: string = this.browserWindowEnv['apiUrl'] ? this.browserWindowEnv['apiUrl'] : (this.env.apiUrl || 'http://backend.easycommerce.devp/');\n private urlAssets: string = this.browserWindowEnv['urlAssets'] ? this.browserWindowEnv['urlAssets'] : (this.env.urlAssets || this.urlBase);\n private urlFrontend: string = this.browserWindowEnv['urlFrontend'] ? this.browserWindowEnv['urlFrontend'] : (this.env.urlFrontend || 'https://elden.easycommercetech.com/');\n private locale: string = localStorage.getItem(this.LOCALE) ? localStorage.getItem(this.LOCALE) : this.browserWindowEnv['locale'] ? this.browserWindowEnv['locale'] : (this.env.locale || 'es_AR');\n private channel: string = localStorage.getItem(this.CHANNEL) ? localStorage.getItem(this.CHANNEL) : this.browserWindowEnv['channel'] ? this.browserWindowEnv['channel'] : (this.env.channel || 'minorista')\n private blocksCacheTime: string = this.browserWindowEnv['blocksCacheTime'] ? this.browserWindowEnv['blocksCacheTime'] : (this.env.blocksCacheTime || null);\n\n private modalConfig = { title: 'Example', class: 'modal-xl modal-dialog-centered', keyboard: false };\n setModalConfig = (config: any) => this.modalConfig = config;\n getModalConfig = () => this.modalConfig;\n\n private version: string = 'v1';\n\n private routes = [/^home$/g, /^(\\/?)collection(\\/?)([\\w\\.\\/\\?]*)$/g, /^contact$/g];\n\n /* Get rid of this ASAP! */\n private masterChannel = null\n\n public getMasterChannel = () => {\n if (!this.masterChannel) this.masterChannel = localStorage.getItem('MASTER_CHANNEL')\n return this.masterChannel\n }\n\n public setMasterChannel = channel => {\n this.masterChannel = channel\n localStorage.setItem('MASTER_CHANNEL', channel)\n }\n\n private isProduction = () => this.browserWindowEnv['production'] ? this.browserWindowEnv['production'] : (this.env.production || false);\n\n setUrlBase = (url) => this.urlBase = url;\n setUrlAssets = (url) => this.urlAssets = url;\n\n /**\n * @param next Function to execute\n * @param params That function needs\n *\n * Execute the function passed as params, if the frontend is in production mode\n */\n onlyIfProduction = (next, params) => this.isProduction() && next(params);\n\n mediaUrl = () => this.urlAssets + (this.urlAssets == this.urlBase ? 'media/' : '') + \"image/\";\n mediaBannerUrl = () => this.urlAssets + (this.urlAssets == this.urlBase ? 'media/' : '') + \"banner-image/\";\n mediaStoreUrl = () => this.urlAssets + (this.urlAssets == this.urlBase ? 'media/' : '') + \"store-image/\";\n\n getProductsListRoute = () => 'collection/';\n\n getSectionsRoute = () => 'section/';\n\n getUrlBase = () => this.urlBase;\n getUrlFrontend = () => this.urlFrontend;\n\n getBlocksCacheTime = (): number => this.blocksCacheTime && parseInt(this.blocksCacheTime);\n\n // getLocale = () => this.locale;\n // setLocale = (locale) => this.locale = locale;\n\n getLocale = () => {\n if (localStorage.getItem(this.LOCALE)) {\n this.locale = localStorage.getItem(this.LOCALE)\n }\n return this.locale\n }\n\n getLocaleTranslate = () => {\n return this.getLocale().split('_')[0]\n }\n\n public setLocale = locale => {\n localStorage.setItem(this.LOCALE, locale)\n this.translate.use(locale.split('_')[0])\n this.locale = locale\n }\n\n getChannel = () => {\n if (localStorage.getItem(this.CHANNEL)) {\n this.channel = localStorage.getItem(this.CHANNEL)\n }\n return this.channel\n }\n\n public setChannel = channel => {\n localStorage.setItem(this.CHANNEL, channel)\n this.channel = channel\n }\n\n getVersion = () => this.version;\n\n loginExtraData = () => {\n return {\n client_id: 'demo_client',\n client_secret: 'secret_demo_client',\n grant_type: 'password'\n }\n }\n\n isCollection = (path) => (/^(\\/?)collection(\\/?)([\\w\\.\\/\\?]*)$/g).test(path);\n\n /**\n * Utilities\n */\n\n mobile = () => window.innerWidth < 750;\n\n strictTypeChannel = () => this.env.strictTypeChannel || 'b2b2c';\n\n toDecimal = (total) => (total - Math.floor(total) == 0) ? total / 100 : total;\n\n /**\n * Elementos para manejo de lista de rutas reutilizables\n */\n\n addRouteToReuse = (route: RegExp) => route && this.routes.push(route);\n\n removeRouteToReuse = (route: RegExp) => {\n const index = this.routes.indexOf(route);\n if (index > -1) {\n this.routes.splice(index, 1);\n }\n }\n\n getRoutesToReuse = (): RegExp[] => this.routes;\n\n\n\n /**\n * @public ejemplo de uso <img *ngFor=\"let item of consts.getRatingStar(product.rating,'assets/images/star.png','assets/images/notStar.png')\" [src]=\"item\">\n * @description funcion que dado un valor entre 1 .. 5, y star: notStar: \n * (deben ser el path del archivo local a la implementacion).\n * retorna un arreglo con con la valoracion correspondiente. \n */\n getRatingStar = (rating: any, star: String, notStar: String) => {\n try {\n let urlStar = [];\n let cantStar = Number(rating) || 0;\n for (let index = 0; index < 5; index++) {\n urlStar.push(\n cantStar > 0\n ? star\n : notStar\n );\n cantStar--;\n }\n return urlStar;\n } catch (error) {\n console.error(\"getRatingStar produjo un error -> \", error);\n }\n\n };\n\n /**\n * @public ejemplo de uso (keypress)=\"inputValidationByExpressions($event,'[0-9]{1,9}')\" en el DOM.\n * @description funcion que dado un manejandor de evento, y una expresion regular esta es \n * evaluada sobre los valores que el manejador de eventos nos envia. \n * En el caso en el que se envie el parametro 'condition' este puede ser para \n * anular el evento como condicion adicional a la evaluacion de la entrada.\n */\n inputValidationByExpressions = (e, patron, condition = null ) => {\n try {\n let tecla = (document) ? e.keyCode : e.which;\n if (tecla == 8) return true;\n let patronReg = new RegExp(patron)\n let tecla_final = String.fromCharCode(tecla);\n if (condition != null) {\n return patronReg.test(tecla_final) && condition;\n }\n return patronReg.test(tecla_final)\n } catch (error) {\n console.error(\"inputValidationByExpressions produjo un error -> \", error);\n }\n }\n\n\n /**\n * \n * @param needles (agujas) object con claves valor a filtrar\n * @param haystack (pajar) objecto en el que buscar\n * \n * @description funcion que busca en el haystack (pajar) todos los objetos que contentan \n * todas las claves de los needles(agujas) que contengan el mismo valor\n */\n containsAll(needles: object, haystack: object): boolean {\n let result: boolean = true;\n\n if (!!needles && !!haystack) {\n Object.entries(needles).forEach(value => {\n if (!(haystack.hasOwnProperty(value[0]) && haystack[value[0]] == value[1])) result = false\n })\n }\n return result;\n }\n\n /**\n * Propiedad que se utiliza para tomar como configuración para el tipo de moneda que se utiliza en el sitio. \n * Estos valores son utilizados para el pipe currencyPrice\n */\n public currency: CurrencyConfig = {\n code: 'ARG',\n symbol: '$',\n position: 'L',\n withoutDecimals: false\n }\n\n /**\n * \n * @param currencyTypeFind Definir el code del tipo de moneda que se quiera utilizar. \n * Si el tipo es CUSTOM se toman los valores del segundo parametro donde se puede definir la simbología y posesión que se quiera.\n * @param customType Formato del parámetro ejemplo { code: 'ARG', symbol: '$', position: 'L' , withoutDecimals: false } ,\n * todas las key son opcionales y por defecto se toman los valores del ejemplo. \n * @returns se retorna la configuración que se seteo a la propiedad currency del servicio.\n */\n public setCurrency = (currencyTypeFind: currencyType, customType?: CurrencyConfig) => {\n let currencyTypeCofig: CurrencyConfig[] = [\n {\n code: 'EUR',\n symbol: '€',\n position: 'R',\n withoutDecimals: false\n\n },\n {\n code: 'ARG',\n symbol: '$',\n position: 'L',\n withoutDecimals: false\n },\n {\n code: 'USD',\n symbol: '$',\n position: 'L',\n withoutDecimals: false\n },\n {\n code: 'PYG',\n symbol: 'Gs.',\n position: 'L',\n withoutDecimals: false\n },\n {\n code: 'PEN',\n symbol: 'S/',\n position: 'L',\n withoutDecimals: false\n },\n {\n code: 'SEK',\n symbol: 'SEK',\n position: 'R',\n withoutDecimals: false\n }\n ]\n this.currency = currencyTypeCofig.find(ct => ct.code == currencyTypeFind.toUpperCase()) || this.currency\n customType && (this.currency = { ...this.currency, ...customType })\n return this.currency;\n };\n\n\n /**\n * devuelve true si existe el elemento \"search\" en el array de parametros \"params\"\n * \n * @param params Array de parametros entre los que buscar\n * @param searched Elemento que buscar\n * @param prefix prefijo del string a buscar (ejemplo: \"link_\")\n * @param suffix sufijo del string a buscar (ejemplo: \"link_\")\n * @param casesensitive determina si se evalua con sensibilidad entre mayuscula y minuscula\n * @returns retorna true o false si se encontro o no el parametro en el array\n */\n public hasParams(\n params,\n searched,\n prefix = '',\n suffix = '',\n casesensitive = false): boolean {\n\n\n return casesensitive ? params.find(param => (param.code).toLowerCase() == (prefix + searched + suffix).toLowerCase() || (param.code).toLowerCase() == (searched).toLowerCase())\n : params.find(param => param.code == (prefix + searched + suffix) || param.code == searched)\n\n };\n\n public modifyChannelConfig = channelConfig => {\n if (channelConfig.channel || channelConfig.code)\n this.setChannel(channelConfig.channel || channelConfig.code)\n\n if (channelConfig.locale || channelConfig.locales.code)\n this.setLocale(channelConfig.locale || channelConfig.locales.code)\n\n if (channelConfig.currency || channelConfig.baseCurrency)\n this.setCurrency(channelConfig.currency || channelConfig.baseCurrency)\n\n return channelConfig;\n }\n\n}\n\n","import { Injectable, OnInit } from '@angular/core';\nimport { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { Constants } from '../core.consts';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FilterOption, FilterOptionTypes, FilterOptionValue } from '../interfaces/choose-options/filter-option';\nimport { take } from 'rxjs/operators';\nimport 'rxjs/add/operator/catch';\n\n@Injectable()\nexport class ConnectionService {\n\n private url;\n\n constructor(private http: HttpClient, private translate: TranslateService,\n private consts: Constants) {\n this.url = this.consts.getUrlBase();\n }\n\n /** POST */\n post(api: string, data?): Observable<any> {\n return this.http.post<any>(this.url + api, data || {}).pipe(take(1));\n }\n\n postOutsider(api: string, data): Observable<any> {\n return this.http.post<any>(api, data).pipe(take(1));\n }\n\n /** GET */\n get(api: string, data?): Observable<any> {\n return this.http.get<any>(this.formUrl(api), { params: { ...data } }).catch(err => of(null)).pipe(take(1));\n }\n\n getOutsider(api: string): Observable<any> {\n return this.http.get<any>(api).pipe(take(1));\n }\n\n getErrorNotHandler(api: string): Observable<any> {\n return this.http.get<any>(this.url + api).pipe(take(1));\n }\n\n getOutsiderWithParams(api: string, data: any): Observable<any> {\n return this.http.get<any>(api, { params: { ...data }});\n }\n\n getHTML(api: string): Observable<any> {\n let httpHeaders = new HttpHeaders({ Accept: 'text/plain, text/html' });\n return this.http.get(this.url + api, { responseType: 'text', headers: httpHeaders }).pipe(take(1));\n }\n\n getWithLimit(api: string, limit: string): Observable<any> {\n let params = new HttpParams();\n params = params.append('limit', limit);\n return this.http.get<any>(this.url + api, { params }).pipe(take(1));\n }\n\n getPaginated(api: string, limit: string, page: string): Observable<any> {\n let params = new HttpParams();\n params = params.append('limit', limit);\n params = params.append('page', page);\n return this.http.get<any>(this.url + api, { params }).pipe(take(1));\n }\n\n /** PUT */\n put(api: string, data): Observable<any> {\n return this.http.put<any>(this.url + api, data).pipe(take(1));\n }\n\n /** DELETE */\n delete(api: string): Observable<any> {\n return this.http.delete<any>(this.url + api).pipe(take(1));\n }\n\n formUrl = (api) => {\n return window.location.protocol == 'https:' && !this.url.includes('https') ? (this.url.replace('http', 'https')) + api : this.url + api;\n }\n}","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../api/connection.service';\nimport { Constants } from '../core.consts';\nimport { BehaviorSubject } from 'rxjs';\nimport { Product } from '../interfaces/product';\n\n@Injectable()\nexport class PaginationService {\n\n private api: string;\n private limit;\n private params;\n private nextSubject : BehaviorSubject<Product[]> = new BehaviorSubject([]);\n private finishedSubject : BehaviorSubject<boolean> = new BehaviorSubject(false);\n private finished;\n public total= 0;\n \n public waiting = false;\n \n public next = this.nextSubject.asObservable();\n public finished$ = this.finishedSubject.asObservable();\n\n constructor(private connection: ConnectionService, private constants: Constants) { }\n\n initialize(api, limit?, initialValues?) {\n this.api = api;\n this.limit = limit || this.limit || 10;\n this.finished = false;\n this.nextSubject.next([]);\n }\n\n getNext(next?) : boolean{\n this.waiting = true;\n this.api = this.api.replace('%20', ' '); //-\n let nextProducts = !this.api.includes('page=') \n ? this.connection.get(this.api, { limit: this.limit, page: 1 }) \n : this.connection.get(this.api);\n !this.finished && nextProducts.subscribe(\n response => {\n response.links ? this.updatePageData(response) : this.finalize(response)\n next && next(response);\n }\n )\n return true;\n }\n\n private updatePageData = (response) => {\n this.api = this.cleanRoute(response.links.next);\n this.finished = response.page == response.pages;\n this.total = response.total;\n this.finishedSubject.next((response.page == response.pages))\n this.nextSubject.next(response.items);\n this.waiting = false;\n }\n\n private finalize = (response) => {\n this.finished = true;\n this.finishedSubject.next(true);\n this.nextSubject.next(response.items);\n this.waiting = false;\n }\n\n cleanRoute = (route: string) => route.slice(1);\n\n getPage(totalItems: number, currentPage: number = 1, pageSize: number = 8) { }\n\n isFinished = () => this.finished;\n}\n","import { IFilter, FilterElement, FilterType } from \"../../interfaces/filter\";\n\nexport class Filter implements IFilter {\n\n generated_url = '';\n data: FilterElement[] = [];\n multi = false;\n type = (): FilterType => null;\n getContent = (): FilterElement[] => null;\n toUrlParams = (): string => null;\n setContent = (options): void => null;\n\n setSelected = (element, value?) => {\n !this.multi && this.cleanFilter(this.data, element);\n this.setSelectedValue(element, value);\n }\n\n cleanFilter = (data, element_to_change) => {\n element_to_change && data.forEach(element => {\n element_to_change != element ? element.selected = false : null;\n (element.children && element.children.length > 0) && this.cleanFilter(element.children, element_to_change);\n })\n }\n\n reset = (children?) => {\n let data = children || this.data;\n data.forEach(element => {\n element.selected = false;\n (element.children && element.children.length > 0) && this.reset(element.children);\n })\n }\n\n setSelectedValue = (element, value?, sublist?, multi?) => {\n let elements = sublist || this.data;\n let index = elements.findIndex(subelement => {\n return (element.code || element) == subelement.code;\n });\n if (index >= 0) {\n elements[index].selected = elements[index].selected ? false : true;\n !multi && elements.forEach((child, i) => {\n if (i != index) child.selected = false;\n });\n return {\n elements,\n founded: true\n };\n } else {\n elements.some(elem => elem.type == 'sub') && elements.some(\n filter => {\n let founded = false;\n if (filter.type == 'sub') {\n const result = this.setSelectedValue(element, value, filter.children, filter.multi);\n if (result && result.founded) {\n filter.children = result.elements;\n founded = true;\n }\n }\n return founded;\n }\n )\n }\n };\n\n getSelectedList = (): any => this.findSelected(this.data, []);\n\n findSelected = (elements: any[], result) => {\n let element = elements.find(elem => elem.selected);\n if (element) {\n result.push(element.code);\n return result;\n }\n elements.forEach(elem => {\n if (elem.children && elem.children.length) {\n let new_result = this.findSelected(elem.children, result);\n if (new_result) result = new_result;\n }\n })\n return result;\n }\n}\n\n","import { FilterType } from \"../../interfaces/filter\";\nimport { FilterElement } from \"../../interfaces/filter\";\nimport { Observable } from \"rxjs\";\nimport { Filter } from \"./Filter\";\n\nexport class CategoryFilter extends Filter {\n\n data: FilterElement[] = [];\n private raw_data;\n multi = false;\n\n constructor(private categories$: Observable<any>, formatter, initial_value?) {\n super();\n this.categories$.subscribe(\n res => {\n this.raw_data = res;\n this.setContent(formatter(res), res, initial_value);\n }\n )\n }\n\n type = (): FilterType => 'category';\n\n setContent = (categories, original?, initial_value?) => {\n categories.forEach((filter, i) => filter = this.createElement(filter, original[i], initial_value));\n this.data = categories;\n }\n\n createElement = (filter, original, initial_value?) => {\n if (filter.type == 'sub') {\n filter.multi = false;\n filter.shape = 'text';\n filter.value = original.code;\n filter.selected = (initial_value && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initial_value?.toLowerCase()));\n filter.children = filter.children.map((child, i) => this.createElement(child, original.children[i], initial_value));\n } else {\n filter.value = original.code;\n filter.selected = (initial_value && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initial_value?.toLowerCase()));\n }\n return filter;\n }\n\n getContent = (): FilterElement[] => this.data;\n\n toUrlParams = (actual_url = '', sublist?) => {\n let elements = sublist || this.data;\n elements.forEach(element => {\n if (element.type == 'sub' && !element.selected) {\n const result = this.toUrlParams('', element.children);\n !actual_url.includes(result) ? actual_url += result : null;\n } else if (element.selected) {\n if (actual_url == '') actual_url = '&category=' + element.value;\n else actual_url = element.value;\n }\n })\n return actual_url;\n };\n\n removeAccents = (str) => {\n return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n }\n}","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../api/connection.service';\nimport { BehaviorSubject, of, Observable } from 'rxjs';\nimport { Constants } from '../core.consts';\nimport { AuthService } from './auth.service';\nimport { take, map, catchError } from 'rxjs/operators';\nimport { FAQ } from '../interfaces/faqs';\nimport { Filter } from '../classes/filters/Filter';\n\n@Injectable()\nexport class OptionsService {\n\n private categoriesSubject: BehaviorSubject<any> = new BehaviorSubject([]);\n private attributesSubject: BehaviorSubject<any> = new BehaviorSubject([]);\n private sectionsSubject: BehaviorSubject<any> = new BehaviorSubject([]);\n private readySubject: BehaviorSubject<any> = new BehaviorSubject({ options: { categories: false, attributes: false, sections: false }, readyAll: false });\n private data = [];\n\n\n public categories = this.categoriesSubject.asObservable();\n public attributes = this.attributesSubject.asObservable();\n public sections = this.sectionsSubject.asObservable();\n public ready = this.readySubject.asObservable();\n\n constructor(private connection: ConnectionService, private constants: Constants) {\n this.getAllData();\n // this.authService.loggedIn.subscribe(res => res && this.getAllData());\n }\n\n private getAllData = () => {\n this.getCategories();\n this.getAttributes();\n this.getSections();\n }\n\n private async getCategories() {\n await this.connection.get(this.taxonsApi()).pipe(take(1),\n map(response => this.appendPaths(true, response)))\n .toPromise().then(\n response => {\n response.forEach(element => this.data.push(element));\n this.categoriesSubject.next(response)\n }\n ).catch(() => this.categoriesSubject.next([]))\n this.optionLoaded('categories');\n }\n\n private async getAttributes() {\n await this.connection.get(this.attributesApi()).pipe(\n map(response => this.appendPaths(false, (response.items || response))))\n .toPromise().then(\n response => {\n response.forEach(element => this.data.push(element));\n this.attributesSubject.next(this.addAttributesSlug(response));\n }\n ).catch(() => this.attributesSubject.next([]))\n this.optionLoaded('attributes');\n }\n\n private appendPaths(isCategory, response) {\n let result = response.map(subelement => {\n if (!subelement.children || subelement.children.length == 0) {\n subelement.children = [];\n subelement.path = isCategory ? this.constants.getProductsListRoute() + 'categories/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name))\n : this.constants.getProductsListRoute() + 'attributes/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name));\n } else if (subelement.children) {\n subelement.slug = subelement.slug || this.slugify(subelement.name);\n subelement.children = this.appendPaths(isCategory, subelement.children);\n }\n isCategory ? subelement.path = this.constants.getProductsListRoute() + 'categories/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name)) : null;\n return subelement;\n });\n return result;\n }\n\n private async getSections() {\n await this.connection.get(this.sectionsApi()).toPromise().then(\n response => {\n let sections = response.filter(item => item.code != 'home');\n sections = sections.map(section => this.appendSection(section));\n this.sectionsSubject.next(sections);\n }\n ).catch(() => this.categoriesSubject.next([]));\n this.optionLoaded('sections');\n }\n\n private appendSection(section) {\n let data: any = {};\n if (section.pages?.length) {\n data.type = 'sub';\n data.children = section.pages.map(page => {\n return {\n code: page.code,\n name: page.name,\n type: 'link',\n path: this.constants.getSectionsRoute() + page.code,\n // path: this.constants.getSectionsRoute() + page.slug,\n }\n });\n data.title = section.name;\n data.name = section.name;\n data.path = this.constants.getSectionsRoute() + section.code;\n data.code = section.code;\n } else {\n data.code = section.code;\n data.title = section.name;\n data.type = 'link';\n data.children = [];\n data.path = this.constants.getSectionsRoute() + section.code;\n }\n return data;\n }\n\n public getSectionContentByLink = (link) =>\n this.connection.getHTML(this.pageContentByCodeApi(link)).pipe(\n map(html => html.split('</head>')[html.split('</head>').length - 1]),\n catchError(e => of(false))\n );\n\n public getSectionContentByLinkAsPromise = (link) =>\n this.connection.getHTML(this.pageContentByCodeApi(link)).pipe(\n map(html => html.split('</head>')[html.split('</head>').length - 1]),\n ).toPromise().catch(e => null);\n\n public getFAQ = () => {\n return this.connection.get(this.faqsApi()).pipe(map(response => {\n let result: FAQ[] = [];\n response.forEach(response_faq => {\n let faqs: FAQ = {\n code: response_faq.code,\n position: response_faq.position,\n title: response_faq.translations[this.constants.getLocale()].topic,\n questions: response_faq.frequentlyAskedQuestions.map(asked_question => ({\n code: asked_question.code,\n position: asked_question.position,\n question: asked_question.translations[this.constants.getLocale()] ? asked_question.translations[this.constants.getLocale()].question : '',\n answer: asked_question.translations[this.constants.getLocale()] ? asked_question.translations[this.constants.getLocale()].answer : '',\n }))\n };\n result.push(faqs);\n })\n return result;\n }));\n }\n\n private optionLoaded(key) {\n const allReady = (options) => Object.keys(options).every(option_key => state.options[option_key]);\n let state = this.readySubject.value;\n state.options[key] = true;\n this.readySubject.next({ options: state.options, readyAll: allReady(state.options) })\n }\n\n private isSubElement = (array, code) => {\n let element = array.find(element => element.code == code);\n return (element && element.code) || (array.children && this.isSubElement(array.chidren, code));\n }\n\n private findCode = (slug, elements) => {\n let element = elements.find(elem => elem.slug == slug);\n if (element) return element.code;\n elements.some(elem => {\n if (elem.children && elem.children.length) {\n element = this.findCode(slug, elem.children);\n }\n return element || false;\n });\n return element;\n }\n\n getCodeBySlug = (slug) => {\n let code = this.findCode(slug, this.generateMenu(this.categoriesSubject.value));\n if (!code) code = this.findCode(slug, this.generateMenu(this.attributesSubject.value));\n return code || slug;\n }\n\n getHigher = (code) => {\n let higher_code;\n higher_code = this.data.find(element => !(element.code == code) && !this.isSubElement(element.children, code)).code;\n return higher_code || 'default';\n }\n\n /**\n * @private\n * APIS\n */\n\n private cmsBase = () => 'cms/' + this.constants.getLocale();\n private cmsChannel = () => 'cms/' + this.constants.getChannel();\n private shopApi = () => 'shop-api/' + this.constants.getChannel();\n\n private faqsApi = () => 'cms/' + this.constants.getChannel() + '/faq';\n // private sectionsApi = () => this.cmsBase() + '/sections/';\n private sectionsApi = () => this.cmsChannel() + '/sections/' + '?locale=' + this.constants.getLocale();\n private sectionByCodeApi = (code) => this.cmsBase() + '/pages/' + code;\n // private pageContentByCodeApi = (code) => this.cmsBase() + '/' + this.constants.getChannel() + '/page/' + code;\n private pageContentByCodeApi = (code) => this.cmsBase() + '/' + this.constants.getChannel() + '/page/' + code;\n private taxonsApi = () => this.shopApi() + '/taxons/' + '?locale=' + this.constants.getLocale();\n private attributesApi = () => this.shopApi() + '/attributes-list' + '?locale=' + this.constants.getLocale();\n\n /**\n * @public\n * UTILS\n */\n\n addAttributesSlug = (attributes) => attributes.map(\n attribute => { return { ...attribute, children: attribute.children.map(child => { return { ...child, slug: this.slugify(child.name) } }) } }\n );\n\n slugify = (text: string) => this.removeAccents(text.toLowerCase().replace(/ & /g, ' ').replace(/ /g, '-').replace(/\\//g, '-').replace(/ñ/g, 'n'));\n\n generateMenu = (elements) => {\n return elements.map(subelement => {\n let result;\n (subelement.children && subelement.children.length == 0) ? result = {\n ...subelement,\n title: subelement.name,\n path: subelement.path,\n type: 'link',\n }\n : result = {\n ...subelement,\n title: subelement.name,\n type: 'sub',\n path: subelement.path,\n children: (subelement.children ? this.generateMenu(subelement.children) : [])\n };\n return result;\n });\n }\n\n removeAccents = (str) => {\n return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n }\n\n getBreadcrumb = (code) => {\n if (!code) return null;\n let breadcrumb = this.generateBreadcrumb(code, this.generateMenu(this.categoriesSubject.value), []);\n if (!breadcrumb || !breadcrumb.length) breadcrumb = this.generateBreadcrumb(code, this.generateMenu(this.attributesSubject.value), []);\n return (breadcrumb && breadcrumb.length) && breadcrumb.reverse();\n }\n\n getBreadcrumbByFilters = (filters: Filter[]) => {\n let final_result = [];\n filters.forEach(filter => {\n let result = filter.getSelectedList();\n if (!result || !result.length) return;\n\n if (filter.type() == 'category') final_result.unshift(...this.generateBreadcrumb(result[0], filter.data, []).reverse());\n else result.forEach(\n code => {\n let breadcrumb = this.generateBreadcrumb(code, filter.data, [])\n breadcrumb.length && final_result.push(breadcrumb[0]);\n }\n );\n });\n\n return final_result;\n }\n\n private generateBreadcrumb = (code, elements, result) => {\n let element = elements.find(elem => elem.code == code);\n if (element) {\n result.push(element);\n }\n else {\n elements.some(elem => {\n if (elem.children && elem.children.length) {\n const length = result.length;\n let new_result = this.generateBreadcrumb(code, elem.children, result);\n if (new_result.length > length) {\n result = new_result;\n result.push(elem);\n return true;\n }\n }\n return false;\n })\n }\n return result;\n }\n}","import { FilterType } from \"../../interfaces/filter\";\nimport { FilterElement } from \"../../interfaces/filter\";\nimport { OptionsService } from \"../../services/options.service\";\nimport { Observable } from \"rxjs\";\nimport { Filter } from \"./Filter\";\n\nexport class AttributesFilter extends Filter {\n\n data: FilterElement[] = [];\n raw_data;\n multi = false;\n\n constructor(private attributes$: Observable<any>, formatter, initial_value?) {\n super();\n this.attributes$.subscribe(\n res => {\n this.raw_data = res;\n this.setContent(formatter(res), res, initial_value);\n }\n )\n }\n\n setContent = (attributes, original?, initial_value?) => {\n attributes.forEach((filter, i) => filter = this.createElement(filter, original[i], initial_value));\n this.data = attributes;\n }\n\n createElement = (filter, original, initial_value?) => {\n if (filter.type == 'sub') {\n filter.multi = false;\n filter.shape = 'text';\n filter.value = original.code;\n filter.children = filter.children.map((child, i) => this.createElement(child, original.children[i], initial_value));\n } else {\n filter.value = original.code;\n filter.selected = (initial_value && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initial_value?.toLowerCase()));\n }\n return filter;\n }\n\n type = (): FilterType => 'attributes';\n\n getContent = (): FilterElement[] => this.data;\n\n toUrlParams = (actual_url = '&attributeCodes=', sublist?, already?) => {\n let elements = sublist || this.data;\n let aux_url = '';\n elements.forEach(element => {\n if (element.type == 'sub') {\n let result = this.toUrlParams('', element.children, (actual_url != '&attributeCodes=' && actual_url != ''))\n if (!actual_url.includes(result)) actual_url += this.cleanResult(result);\n } else if (element.selected) {\n if (actual_url == '&attributeCodes=' && aux_url == '') {\n aux_url = element.value;\n }\n else {\n if (aux_url == '') aux_url = (already ? '<and>' : '') + element.value;\n else aux_url += ('<and>' + element.value);\n }\n }\n })\n return actual_url + aux_url;\n };\n\n cleanResult = (text) => text.replace('&attributeCodes=', '');\n\n removeAccents = (str) => {\n return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n }\n}","import { FilterType } from \"../../interfaces/filter\";\nimport { FilterElement } from \"../../interfaces/filter\";\nimport { Filter } from \"./Filter\";\n\nexport class DynamicsFilter extends Filter {\n\n generated_url = '';\n data: FilterElement[] = [];\n multi = true;\n\n type = (): FilterType => 'dynamics';\n\n setContent = (options) => {\n options = options.map(option => option = this.createElement(option));\n this.data = options;\n }\n\n createElement = (option) => {\n option = {\n title: option.label, type: 'sub', multi: false, code: option.code, shape: option.type, children: option.values.map(value => {\n return {\n title: value.code,\n description: value.name,\n code: (option.code + ' ' + value.name),\n type: 'child',\n value: value.code,\n selected: false\n }\n })\n }\n return option;\n }\n\n holi = () => {\n\n }\n\n getContent = (): FilterElement[] => this.data;\n\n toUrlParams = (actual_url = '&optionCodes=', sublist?, already?) => {\n let elements = sublist || this.data;\n let aux_url = '';\n elements.forEach(element => {\n if (element.type == 'sub') {\n let result = this.toUrlParams('', element.children, (actual_url != '&optionCodes=' && actual_url != ''))\n if (!actual_url.includes(result)) actual_url += this.cleanResult(result);\n } else if (element.selected) {\n if (actual_url == '&optionCodes=' && aux_url == '') {\n aux_url = element.value;\n }\n else {\n if (aux_url == '') aux_url = (already ? '<and>' : '') + element.value;\n else aux_url += ('<and>' + element.value);\n }\n }\n })\n return actual_url + aux_url;\n };\n\n cleanResult = (text) => text.replace('&optionCodes=', '');\n}","import { FilterType } from \"../../interfaces/filter\";\nimport { FilterElement } from \"../../interfaces/filter\";\nimport { Filter } from \"./Filter\";\n\nexport class SortFilter extends Filter {\n\n data : FilterElement[] = [];\n multi = true;\n\n constructor() {\n super();\n this.setContent();\n }\n\n type = () : FilterType => 'sort';\n\n setContent = () => {\n this.data = [\n {\n title: 'price', type: 'sub', multi: false, code: 'price' ,shape: 'text', children: [\n { title: 'cheapest-first', code: 'price chip', type: 'child', value: 'asc', selected: false },\n { title: 'most-expensive-first', code: 'price expensive', type: 'child', value: 'desc', selected: false }\n ]\n },\n {\n title: 'alphabetical-order', type: 'sub', code: 'order-alph', multi: false, shape: 'text', children: [\n { title: 'ascendancy', type: 'child', code: 'alpha asc', value: 'asc', selected: false },\n { title: 'descendant', type: 'child', code: 'alpha desc', value: 'desc', selected: false }\n ]\n }\n ]\n }\n\n getContent = () : FilterElement[] => this.data;\n \n toUrlParams = (actual_url = '', sublist?, father?) => {\n let elements = sublist || this.data;\n elements.forEach(element => {\n if (element.type == 'sub') {\n const result = this.toUrlParams(actual_url, element.children, element.title);\n !actual_url.includes(result) ? actual_url += result : null;\n } else if(element.selected) {\n actual_url = ('&sorting[' + this.translate(father) + ']=' + element.value);\n }\n })\n return actual_url;\n };\n\n // UTILS\n\n translate = (value) => {\n switch(value) {\n case 'price': return 'price';\n case 'created-date': return 'createdAt';\n case 'alphabetical-order': return 'name';\n }\n }\n}","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, of, Subscriber } from 'rxjs';\r\nimport 'rxjs/add/operator/map';\r\nimport { ConnectionService } from '../../api/connection.service';\r\nimport { Constants } from '../../core.consts';\r\nimport { Product } from '../../interfaces/product';\r\nimport { FilterOptionValue, FilterOption } from '../../interfaces/choose-options/filter-option';\r\nimport { FilterType, FilterElement, DefaultFilter } from '../../interfaces/filter';\r\nimport { PaginationService } from '../pagination.service';\r\nimport { CategoryFilter } from '../../classes/filters/CategoryFilter';\r\nimport { OptionsService } from '../options.service';\r\nimport { AttributesFilter } from '../../classes/filters/AttributesFilter';\r\nimport { DynamicsFilter } from '../../classes/filters/DinamycsFilter';\r\nimport { SortFilter } from '../../classes/filters/SortFilter';\r\nimport { Filter } from '../../classes/filters/Filter';\r\nimport 'rxjs/add/operator/catch';\r\nimport { ParamsProductsWithUniqueVariant } from '../../interfaces/paramsInterfaces/paramsProductsWithUniqueVariant';\r\n\r\n\r\n// Get product from Localstorage\r\nlet products : any = {};\r\ntype order_type = 'asc' | 'desc';\r\n\r\n@Injectable()\r\nexport class ProductsService {\r\n\r\n /** ATTRIBUTES */\r\n private subscription;\r\n private productsSubject: BehaviorSubject<Product[]> = new BehaviorSubject([]);\r\n private filtersSubject: BehaviorSubject<Filter[]> = new BehaviorSubject([]);\r\n\r\n public currency = 'USD';\r\n public catalogMode: boolean = false;\r\n public products$ = this.productsSubject.asObservable();\r\n public filters$ = this.filtersSubject.asObservable();\r\n\r\n\r\n private search_value :String;\r\n\r\n /** APIS */\r\n\r\n latestProductsByCategoryApi = (category) => 'shop-api/' + this.constants.getChannel() + '/taxon-products/by-code/' + category;\r\n latestProductsApi = () => 'shop-api/' + this.constants.getChannel() + '/product-latest/';\r\n specificProductApi = (code, variant) => 'shop-api/' + this.constants.getChannel() + '/products/by-code/' + (variant ? 'variant/' : '') + code + '?locale=' + this.constants.getLocale();\r\n productsBySpecialMarkApi = (specialmark) => 'shop-api/' + this.constants.getVersion() + '/' + this.constants.getChannel() + '/special-marks/' + specialmark + '/products/';\r\n relatedProductsApi = (key) => 'shop-api/' + this.constants.getChannel() + '/products/related/by-code/' + key + '?locale=' + this.constants.getLocale();\r\n productVariantApi = (code) => 'shop-api/' + this.constants.getChannel() + '/products/by-code/variant/' + code;\r\n latestProductsByAttributeApi = (attribute) => 'shop-api/' + this.constants.getChannel() + '/products/by-attribute/' + attribute;\r\n productSearchApi = () => 'shop-api/' + this.constants.getChannel() + '/product-search/';\r\n cmsRelatedProductsApi = (page) => 'cms/' + this.constants.getLocale() + '/' + this.constants.getChannel() + '/page/' + page + '/product-related';\r\n productsFilterApi = (filters = '') => 'shop-api/' + this.constants.getChannel() + '/product-search/' + '?locale=' + this.constants.getLocale() + filters;\r\n\r\n constructor(private connection: ConnectionService, private constants: Constants, private pagination: PaginationService, private options: OptionsService) { }\r\n\r\n /** FUNCTIONS */\r\n\r\n getLatestProducts = (limit: string = '0'): Observable<any> =>\r\n limit == '0' ? this.connection.get(this.latestProductsApi()) :\r\n this.connection.getWithLimit(this.latestProductsApi(), limit);\r\n\r\n getLatestProductsByCategory = (category: string, limit: string = '0'): Observable<any> =>\r\n limit == '0' ? this.connection.get(this.latestProductsByCategoryApi(category)) :\r\n this.connection.getWithLimit(this.latestProductsByCategoryApi(category), limit);\r\n\r\n getPaginated = (limit: string, page: string): Observable<any> =>\r\n this.connection.getPaginated(this.latestProductsApi(), limit, page);\r\n\r\n getSpecificProduct = (code: string, variant: boolean): Observable<any> =>\r\n this.connection.get(this.specificProductApi(code, variant));\r\n\r\n getProductsBySpecialMark = (specialmark, limit: string = '0'): Observable<any> =>\r\n limit == '0' ? this.connection.get(this.productsBySpecialMarkApi(specialmark)) :\r\n this.connection.getWithLimit(this.productsBySpecialMarkApi(specialmark), limit);\r\n\r\n getRelatedProducts = (key: string): Observable<any> =>\r\n this.connection.get(this.relatedProductsApi(key));\r\n\r\n getProductVariant = (code: string) =>\r\n this.connection.get(this.productVariantApi(code));\r\n\r\n getlatestProductsByAttribute = (attribute) =>\r\n this.connection.get(this.latestProductsByAttributeApi(attribute));\r\n\r\n getSearchedProducts = (content) => {\r\n this.productsSubject.next([]);\r\n this.pagination.initialize(this.generateFinalApi(content), products?.limit || 8);\r\n this.subscription = this.pagination.next.subscribe(\r\n res => this.productsSubject.next(res),\r\n err => this.productsSubject.next(null)\r\n )\r\n }\r\n\r\n getCMSRelatedProducts = (page) =>\r\n this.connection.get(this.cmsRelatedProductsApi(page)).catch((err) => of(null));\r\n\r\n getProductsSearched = (search_value, filters?: FilterType[]) => {\r\n this.getProductsForFilter(null, filters, search_value);\r\n }\r\n\r\n /**\r\n * @param products \r\n * @param filters \r\n * @param search_value \r\n * @param defaultFilters \r\n */\r\n getProductsForFilter = (products?: { type?: string, value?: string, limit?: number, latest?: boolean }, filters?: FilterType[], search_value?, defaultFilters?: DefaultFilter[]) => {\r\n this.productsSubject.next([]);\r\n search_value ? this.search_value = search_value : this.search_value = ''; \r\n filters && this.setFilters(products, filters, defaultFilters);\r\n this.pagination.initialize(this.generateFinalApi(search_value), products?.limit || 8);\r\n this.subscription && this.subscription.unsubscribe();\r\n this.subscription = this.pagination.next.subscribe(\r\n res => this.productsSubject.next(res),\r\n err => this.productsSubject.next(null)\r\n )\r\n this.filtersSubject.value.some(filter => filter.type() == 'dynamics')\r\n ? this.pagination.getNext(this.updateDynamicFilters)\r\n : this.pagination.getNext();\r\n }\r\n\r\n setFilters = (products, filters: FilterType[], defaultFilters?: DefaultFilter[]) => {\r\n let final_filters: Filter[] = [];\r\n if (filters?.includes('all')) filters = ['attributes', 'category', 'dynamics', 'sort'];\r\n filters?.forEach(filter => final_filters.push(this.getFilterInstance(filter, products)));\r\n defaultFilters?.forEach(filterDefault => {\r\n let filter = final_filters.find(filter => filter.type() == filterDefault.filter_type);\r\n filter && filterDefault.codes.forEach(value => filter.setSelected(value));\r\n })\r\n this.filtersSubject.next(final_filters);\r\n }\r\n\r\n getFilterInstance = (filter: string, products): Filter => {\r\n let instance: Filter;\r\n switch (filter) {\r\n case 'category': instance = new CategoryFilter(this.options.categories, this.options.generateMenu, (products.type == 'categories' && products.value)); break;\r\n case 'attributes': instance = new AttributesFilter(this.options.attributes, this.options.generateMenu, (products.type == 'attributes' && products.value)); break;\r\n case 'sort': instance = new SortFilter(); break;\r\n case 'dynamics': instance = new DynamicsFilter(); break;\r\n }\r\n return instance;\r\n }\r\n\r\n updateDynamicFilters = (request) => {\r\n if (!request.options) return;\r\n let final_filters: Filter[] = this.filtersSubject.value;\r\n let index = final_filters.findIndex(filter => filter.type() == 'dynamics');\r\n index && final_filters[index].setContent(request.options);\r\n this.filtersSubject.next(final_filters);\r\n }\r\n\r\n getNext = (): boolean => !this.pagination.isFinished() && this.pagination.getNext();\r\n\r\n setFilterSelected = (filterObj: Filter, filterElem: FilterElement) => {\r\n let final_filters: Filter[] = this.filtersSubject.value;\r\n let index = final_filters.findIndex(filter => filter.type() == filterObj.type());\r\n final_filters[index].setSelected(filterElem, filterElem.value);\r\n this.filtersSubject.next(final_filters);\r\n this.updateProductsForFilter();\r\n }\r\n\r\n updateProductsForFilter = () => {\r\n this.pagination.waiting = true;\r\n this.productsSubject.next([]);\r\n this.pagination.initialize(this.search_value ? this.generateFinalApi(this.search_value) : this.generateFinalApi() );\r\n this.pagination.getNext();\r\n // SI SE ACTUALIZARAN LOS FILTROS DINAMICOS EN EL FUTURO\r\n // let filtersObj = this.filtersSubject.value;\r\n // filtersObj.some(filter => filter.type() == 'dynamics') \r\n // ? this.pagination.getNext(this.updateDynamicFilters) \r\n // : this.pagination.getNext();\r\n }\r\n\r\n /**\r\n * \r\n * @param products Array. Lista de productos.\r\n * @param withOption 'type' tipo de opción, code: código de la opción. 'defaultFirstOption': en caso de que no se pueda desdoblar por la opción indicada si el valor es verdadero se intentara desdoblar por la primera opción asociada al producto.\r\n * 'checkIfStock': en caso de que esta valor sea verdadero se realiza un control de que la variantes cuenten con stock para ser un producto desdoblado por la variante, si el valor es falso no se realiza dicho control y el producto se desdoblara con stock en 0.\r\n * @returns arreglo con los productos desdoblados por la opción solicitada. \r\n * (opción por defecto que se intenta hacer el desdoblamiento 'color', o bien si en le parámetro withOption el atributo 'defaultFirstOption' es verdadero se desdobla por la primera opción asociada al producto ) \r\n * \r\n * @description Recibe una lista de productos y retorna los mismos productos tantas veces como variantes tenga. \r\n * cada producto retornado tendrá una única variante.\r\n */\r\n getProductsWithUniqueVariant = (products, withOption: ParamsProductsWithUniqueVariant = { type: 'color' , code: 'color' , defaultFirstOption:false , checkIfStock:true }) => {\r\n\r\n !withOption['code'] && withOption['type'] && (withOption['code'] = withOption['type']) || !withOption['code'] && (withOption['code'] = 'color')\r\n !withOption['type'] && withOption['code'] && (withOption['type'] = withOption['code']) || !withOption['type'] && (withOption['type'] = 'color')\r\n !withOption.hasOwnProperty('defaultFirstOption') && (withOption['defaultFirstOption'] = false)\r\n !withOption.hasOwnProperty('checkIfStock') && (withOption['checkIfStock'] = true)\r\n\r\n let productsUniqueVariant = [];\r\n products.forEach(product => {\r\n let variants = [...product?.variants];\r\n let option = product.options.find(opt => opt.type.toLowerCase() === withOption.type.toLowerCase());\r\n \r\n if (option) {\r\n option.values.forEach(optionValue => {\r\n let modified_product = JSON.parse(JSON.stringify(product));\r\n modified_product.options.find(option => option.type.toLowerCase() == withOption.type.toLowerCase()).values = [{ code: optionValue.code, name: optionValue.name}];\r\n //busco una variante con ese code para asignarle la lista de imagenes\r\n let variantAux = variants.find(\r\n variant => ((withOption.checkIfStock && variant.stock > 0) || withOption.checkIfStock == false ) \r\n && variant.options.length \r\n && variant.options.some(op => (op.hasOwnProperty(withOption.code.toLowerCase()) || op.hasOwnProperty(withOption.code.toUpperCase())) \r\n && (op[withOption.code.toLowerCase()] || op[withOption.code.toUpperCase()]) === optionValue.code)\r\n \r\n );\r\n variantAux && productsUniqueVariant.push(this.productWithVariantValues(modified_product, variantAux, optionValue));\r\n })\r\n }else{\r\n if (withOption.defaultFirstOption && product.options?.length) {\r\n let firstOptions = product.options[0]\r\n product.options[0].values.forEach(optionValue => {\r\n let modified_product = JSON.parse(JSON.stringify(product));\r\n modified_product.options.find(option => option.type == firstOptions.type).values = [{ code: firstOptions.code, name: firstOptions.name }];\r\n let variantAux = variants.find(\r\n variant => {\r\n return ((withOption.checkIfStock && variant.stock > 0) || withOption.checkIfStock == false ) \r\n && variant.options.length \r\n && variant.options.some(op => (op.hasOwnProperty(firstOptions.code.toLowerCase()) || op.hasOwnProperty(firstOptions.code.toUpperCase())) \r\n && (op[firstOptions.code.toLowerCase()] || op[firstOptions.code.toUpperCase()]) === optionValue.code)\r\n }\r\n );\r\n variantAux && productsUniqueVariant.push(this.productWithVariantValues(modified_product, variantAux, optionValue));\r\n })\r\n }else{\r\n productsUniqueVariant.push(product)\r\n }\r\n\r\n }\r\n })\r\n return productsUniqueVariant.length > 0 ? productsUniqueVariant : products;\r\n }\r\n\r\n productWithVariantValues = (product, variant, optionValue) => {\r\n product.picturesdefault = variant.images\r\n product.variant_id = variant.code; //lo dejo aca hasta asegurarnos de que no se estaba usando en otra parte.\r\n product.stock = variant.stock || 0; //lo dejo aca hasta asegurarnos de que no se estaba usando en otra parte.\r\n product.currentOption = {\r\n ...optionValue,\r\n productCode: product.id,\r\n variantCode: variant.code,\r\n stock: variant.stock || 0,\r\n finalPrice: variant.saleprice || variant.price || 0,\r\n }\r\n return product\r\n }\r\n\r\n\r\n cleanAllFilters = () => {\r\n let final_filters: Filter[] = this.filtersSubject.value;\r\n final_filters.forEach(filter => filter.reset());\r\n this.filtersSubject.next(final_filters);\r\n this.updateProductsForFilter();\r\n }\r\n\r\n /** UTILS AND FILTERING */\r\n\r\n isWaiting = () => this.pagination.waiting;\r\n isFinished = () => this.pagination.isFinished();\r\n\r\n generateFinalApi = (search_value?) => {\r\n let extra_params = '';\r\n this.filtersSubject.value.forEach(filter => {\r\n const extra = filter.toUrlParams();\r\n extra.split('=')[1] != '' ? extra_params += extra : null;\r\n })\r\n if (search_value) extra_params += ('&criteria[search][type]=contains&criteria[search][value]=' + search_value);\r\n return this.productsFilterApi(extra_params);\r\n }\r\n\r\n finished = (): Observable<boolean> => this.pagination.finished$;\r\n\r\n getTotal = () => this.pagination.total;\r\n}","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../api/connection.service';\nimport { Constants } from '../core.consts';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { OptionsService } from './options.service';\nimport 'rxjs/add/operator/catch';\n\n@Injectable()\nexport class BannerService {\n\n private bannerSubject = new BehaviorSubject<any>({ banners: [], button_route: '' });\n private type;\n private code;\n\n public banner = this.bannerSubject.asObservable();\n\n bannersByTaxonApi = (taxon) => 'api/' + this.constants.getVersion() + '/banners/by-taxon/' + taxon;\n bannersByAttributeApi = (attribute) => 'api/' + this.constants.getVersion() + '/banners/by-attribute/' + attribute;\n\n constructor(private connection: ConnectionService, private constants: Constants, private optionsService: OptionsService) {\n // Get available methods of instance, and update this.methods\n }\n\n getBanner = (type, code) => {\n this.type = type;\n this.code = code;\n if (type && code) {\n if (type == 'taxon' || type == 'categories') {\n this.loadBannersByTaxon(code);\n } else {\n this.loadBannersByAtrribute(code);\n }\n }\n }\n\n getBannersByTaxon(taxon: string): Observable<any> {\n return this.connection.get(this.bannersByTaxonApi(taxon)).pipe(catchError(\n err => this.connection.get(this.bannersByTaxonApi(this.optionsService.getHigher(taxon)))\n ));\n }\n\n getBannersByAttribute(attribute): Observable<any> {\n return this.connection.get(this.bannersByAttributeApi(attribute)).pipe(catchError(\n err => this.connection.get(this.bannersByTaxonApi(this.optionsService.getHigher(attribute)))\n ));\n }\n\n loadBannersByTaxon(taxon) {\n this.getBannersByTaxon(taxon).catch(err => of([])).subscribe(res => {\n res && this.procesateBanners(res);\n })\n }\n\n loadBannersByAtrribute(attribute) {\n this.getBannersByAttribute(attribute).catch(err => of([])).subscribe(res => {\n res && this.procesateBanners(res);\n })\n }\n\n private procesateBanners(banners) {\n let final_banners = [];\n banners.forEach(banner => final_banners.push(banner.translations.filter(res => res['locale'] == this.constants.getLocale())[0]));\n let button_route = '/collection/' + (this.type == 'taxon' ? 'categories' : 'attributes') + '/' + this.code;\n this.bannerSubject.next({ banners: final_banners, button_route });\n }\n\n getImage = (banner) => (this.mobile() && banner.mobileImageName && banner.mobileImageName != '') ? banner.mobileImageName : banner.imageName;\n getImageFull = (banner) =>\n this.constants.getUrlBase() + ((this.mobile() && banner.mobileImageName && banner.mobileImageName != '') ? banner.mobileImageName : banner.imageName);\n\n mobile = () => window.innerWidth < 750;\n\n\n}\n","import { Deserializable } from '../interfaces/deserializable';\n\nexport class User implements Deserializable {\n\n private readonly USER = 'USER';\n public type = 'loguedin';\n public config = {};\n public client_id = 'demo_client';\n public client_secret = 'secret_demo_client';\n public grant_type = 'password';\n public email = '';\n public username = '';\n public password = '';\n public first_name = '';\n public last_name = '';\n public address = { country: '', city: '', state: '', address: '', postcode: '' };\n public birthday = '';\n public gender = '';\n public phone_number = '';\n public suscribed_to_newsletter: boolean = true;\n public document_type? = '';\n public preferred_card? = '';\n public document_number? = '';\n public channels = []\n public customers = []\n public token = '';\n public typeUser? = null;\n\n initilized = res => {\n this.token = res.token\n this.typeUser = res.hasOwnProperty('type') ? res.type : 'retail_customer'\n this.username = res.username\n this.email = res.username\n this.channels = res.channels || []\n this.customers = res.customers || []\n }\n\n isWholesaler = () => this.typeUser && (this.typeUser == 'wholesaler_customer' || this.typeUser == 'seller') || false\n\n isSeller = () => this.typeUser && this.typeUser == 'seller' || false\n\n isRetailCustomer = () => this.typeUser && this.typeUser == 'retail_customer' || false\n\n deserialize(input: any): this {\n return Object.assign(this, input);\n }\n\n jsonify() {\n return {\n client_id: this.client_id,\n client_secret: this.client_secret,\n grant_type: this.grant_type,\n username: this.username,\n email: this.email,\n password: this.password,\n token: this.token,\n typeUser: this.typeUser,\n channels: this.channels,\n customers: this.customers\n }\n }\n\n removePassword() {\n this.password = '';\n }\n\n needsAuth() {\n return this.type == 'loguedin';\n }\n\n toForm = () => {\n return {\n firstName: this.first_name,\n lastName: this.last_name,\n phoneNumber: this.phone_number,\n email: this.email,\n documentType: this.document_type,\n documentNumer: this.document_number,\n street: this.address.address,\n countryCode: this.address.country,\n city: this.address.city,\n provinceName: this.address.state,\n postcode: this.address.postcode\n }\n }\n\n persistInStorage = (key = this.USER) => {\n try {\n const json = this.jsonify()\n const str = JSON.stringify(json)\n localStorage.setItem(key, JSON.stringify(this.jsonify()))\n return true\n } catch (error) {\n console.error(error);\n return false\n }\n }\n\n loadFromStorage = (key = this.USER) => {\n if (localStorage.getItem(key)) {\n this.deserialize(JSON.parse(localStorage.getItem(key)));\n return true\n }\n return false\n }\n\n removeFromStorage = (key = this.USER) => {\n try {\n localStorage.removeItem(key);\n console.log('usuario removido');\n return true\n } catch (error) {\n console.error(error);\n return false\n }\n }\n\n public setChannels = (...channels) => this.channels = channels\n\n}","import { StepI, StepState, StepTypeI } from \"../../interfaces/step\";\n\nexport class Step implements StepI {\n\n public name;\n public priority;\n public type: StepTypeI;\n public data;\n public state: StepState = 'pending';\n\n constructor(name, priority) {\n this.name = name;\n this.priority = priority;\n }\n\n doing = () => {\n this.data = null;\n this.state = 'doing';\n };\n\n restart = () => {\n this.data = null;\n this.state = 'pending';\n }\n\n ready = (data) => {\n this.data = data;\n this.state = 'ready';\n }\n\n isPending = () => this.state == 'pending' || this.state == 'doing';\n\n isReady = () => this.state == 'ready' && this.data;\n}","import { Injectable } from '@angular/core';\nimport { CheckoutData, CheckoutDataType } from '../interfaces/checkout-data';\n\n@Injectable()\nexport class OrderUtilityService {\n\n constructor() { }\n\n /**\n * @param cart Objeto carrito o orden, indistintamente, ya que poseen el mismo formato\n * @param forCart Si la solicitud de promociones proviene del carrito, suprime el subtotal y el total\n * @description Devuelve un listado con todas las promociones que posee el carro/orden\n */\n getPromotions = (cart: any, forCart: boolean = false): CheckoutData[] => {\n if (cart.checkoutState && cart.checkoutState == \"completed\") return;\n let new_state: CheckoutData[] = [];\n let subtotal: CheckoutData = { type: 'subtotal', name: 'subtotal', amount: cart.totals.items };\n let total: CheckoutData = { type: 'total', name: 'total', amount: cart.totals.total };\n !forCart && new_state.push(subtotal);\n cart.cartDiscounts.forEach(cartDiscount => {\n cartDiscount.type = this.formatType(cartDiscount.type);\n new_state.push({\n type: cartDiscount.type,\n name: (cartDiscount.type != 'coupon') ? cartDiscount.name : 'coupon',\n amount: this.getAmount(cartDiscount, cart)\n });\n });\n !forCart && new_state.push(total);\n return new_state;\n }\n\n getAmount = (discount, cart): number => {\n if (discount.type != 'shipment') return discount.amount;\n return cart.totals.shipping;\n }\n\n formatType = (type: string): CheckoutDataType => {\n let result;\n switch (type) {\n case 'order_promotion': result = 'discount'; break;\n case 'order_shipping_promotion': result = 'shipment'; break;\n case 'order_coupon_promotion': result = 'coupon'; break;\n case 'order_unit_promotion': result = 'discount'; break;\n }\n !result && (result = type.includes('promotion') || type.includes('discount') ? 'discount' : type )\n return result || type;\n }\n}","import { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n@Injectable()\nexport class DopplerService {\n\n private isLoaded = false;\n private renderer: Renderer2;\n\n constructor(private rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document: any) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n initialize = (pixelSrc) => {\n this.isLoaded = true\n let scriptInsert = this.renderer.createElement(\"script\");\n this.renderer.setAttribute(scriptInsert, 'type', 'text/javascript');\n this.renderer.setAttribute(scriptInsert, 'async', 'async');\n this.renderer.setAttribute(scriptInsert, 'src', pixelSrc);\n this.renderer.appendChild(this.document.body, scriptInsert);\n }\n\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { AnalyticEventKey } from '../../interfaces/analytics/event-key.model';\nimport { FacebookPixelData } from '../../interfaces/analytics/facebook-pixel/facebook-pixel-model';\n\ndeclare let fbq: Function;\n\n@Injectable()\nexport class FacebookPixelService {\n\n private renderer: Renderer2;\n private enabled = false;\n\n constructor(private rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document: any) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n initialize = (pixel_id) => {\n let new_analityc_script = this.renderer.createElement('script');\n new_analityc_script.type = 'text/javascript';\n new_analityc_script.text = `!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', ${pixel_id});`;\n this.renderer.appendChild(this.document.body, new_analityc_script);\n this.enabled = true;\n setTimeout(() => this.callEvent('initialize'), 1000);\n }\n\n callEvent = (event_name: AnalyticEventKey, data = {}) => {\n if (!this.enabled) return;\n let event = this.translateEventName(event_name);\n event && fbq('track', this.translateEventName(event_name), this.evalEvent(event_name, data));\n }\n\n translateEventName = (event_name: AnalyticEventKey) => {\n switch (event_name) {\n case 'initialize': return 'PageView';\n case 'view_item': return 'ViewContent';\n case 'checkout_init': return 'InitiateCheckout';\n case 'payment_info': return 'AddPaymentInfo';\n case 'purchase': return 'Purchase';\n case 'add_to_cart': return 'AddToCart';\n default: return null;\n }\n }\n\n evalEvent = (event_name, data) => {\n switch (event_name) {\n case 'initialize': return data;\n case 'view_item': return this.toViewContent(data);\n case 'checkout_init': return this.toCheckoutInit(data);\n case 'payment_info': return this.toPaymentInfo(data);\n case 'purchase': return this.toPurchase(data);\n case 'add_to_cart': return this.toAddToCart(data);\n default: return data;\n }\n }\n \n callCustomEvent = (event_name, data: FacebookPixelData = {}) => {\n if (!this.enabled) return;\n fbq('trackCustom', event_name, data);\n }\n \n disable = () => this.enabled = false;\n\n private toViewContent = (data) => {\n let lastProduct = data?.name || 'not-product'\n return {\n content_type: 'product',\n content_name: lastProduct,\n content_ids: [data.variants[0]?.code],\n currency: data.currency || \"USD\",\n value: data.variants[0]?.saleprice || data.variants[0]?.price,\n //product_catalog_id: 'TEST'\n }\n }\n \n private toPurchase = (data) => {\n return { \n currency: data.currency || \"USD\",\n value: data.totals?.total || 0 ,\n content_type: 'product_group',\n contents: this.getContents(data),\n //product_catalog_id: 'TEST'\n }\n }\n\n private toCheckoutInit = (data) => {\n return {\n //content_category : \"inicio checkout\",\n content_type: 'product_group',\n contents: this.getContents(data),\n content_ids: this.getContentIds(data),\n currency: data.currency || \"USD\",\n num_items: data.items?.length || 0,\n value: data.totals?.total || 0 ,\n }\n }\n\n private toPaymentInfo = (data) => {\n return {\n //content_category : \"inicio checkout\",\n content_type: 'product_group',\n contents: this.getContents(data),\n content_ids: this.getContentIds(data),\n currency: data.currency || \"USD\",\n value: data.totals?.total || 0,\n }\n }\n\n private toAddToCart = (data) => {\n let lastProduct = data.items?.length && data.items[data.items.length - 1]?.product?.name || 'not-product'\n return {\n content_name: lastProduct,\n content_type: 'product',\n contents: this.getContents(data),\n content_ids: this.getContentIds(data),\n currency: data.currency || \"USD\",\n value: data.totals?.total || 0,\n //product_catalog_id: 'TEST'\n\n }\n }\n\n private getContents = (data) => {\n return data.items.map(\n item => {\n return {\n id: item.product.variants[0]?.code,\n quantity: item.quantity\n }\n }\n )\n }\n\n private getContentIds = (data) => {\n return data.items.map(\n item => item.product.variants[0]?.code\n )\n }\n}","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { AnalyticEventKey } from '../../interfaces/analytics/event-key.model';\nimport { ProductsService } from '../../services/products/products.service';\n\ndeclare var gtag: Function;\ndeclare var dataLayer: any[];\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GoogleAnalyticsService {\n\n private renderer: Renderer2;\n private enabled = false;\n\n constructor(private rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document: any,\n private router: Router, private productsService: ProductsService) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n initialize(gtm_id: string) {\n const declaration = this.renderer.createElement('script');\n declaration.async = true;\n declaration.src = `https://www.googletagmanager.com/gtag/js?id=${gtm_id}`;\n const initialization = this.renderer.createElement('script');\n initialization.text = `window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '${gtm_id}')`;\n this.renderer.appendChild(this.document.head, initialization);\n this.renderer.appendChild(this.document.head, declaration);\n this.enabled = true;\n setTimeout(() => this.startListeningPageViews(gtm_id), 1000);\n }\n\n private startListeningPageViews = (gtm_id) => {\n this.router.events.pipe(\n filter(event => event instanceof NavigationEnd)\n ).subscribe((event: NavigationEnd) => {\n gtag('config', gtm_id, {\n 'page_path': event.urlAfterRedirects\n })\n })\n }\n\n callEvent = (event_name: AnalyticEventKey, data = {}) => {\n if (!this.enabled) return;\n let event = this.translateEventName(event_name);\n event && gtag('event', this.translateEventName(event_name), this.evalEvent(event_name, data));\n }\n\n translateEventName = (event_name: AnalyticEventKey) => {\n switch (event_name) {\n case 'view_item': return 'view_item';\n case 'view_item_list': return 'view_item_list';\n case 'checkout_init': return 'begin_checkout'; \n case 'shipping_info': return 'add_shipping_info';\n case 'add_payment_info': return 'add_payment_info';\n case 'purchase': return 'purchase';\n case 'add_to_cart': return 'add_to_cart';\n case 'remove_from_cart': return 'remove_from_cart';\n case 'sign_up': return 'sign_up';\n default: return null;\n //default: return event_name;\n }\n }\n\n evalEvent = (event_name, data) => {\n switch (event_name) {\n case 'view_item': return this.toViewItem(data);\n case 'view_item_list': return this.toViewItemList(data);\n case 'checkout_init': return this.toCheckoutInit(data);\n case 'shipping_info': return this.toShippingInfo(data);\n case 'add_payment_info': return this.toPaymentInfo(data);\n case 'purchase': return this.toPurchase(data);\n case 'add_to_cart': return this.toAddToCart(data);\n case 'remove_from_cart': return this.toRemoveToCart(data);\n case 'sign_up': return this.toSignUp(data);\n default: return data;\n }\n }\n\n private toPurchase = (data) => {\n // console.log('toPurchese', {\n // coupon: this.toCartDiscount(data),\n // currency: data.currency,\n // shipping: data.totals.shipping,\n // tax: data.totals.taxes,\n // value: data.totals.total,\n // transaction_id: data.number,\n // items: data.items.map(item => ({\n // id: item.product.id,\n // name: item.product.name,\n // category: item.product.category,\n // price: item.total,\n // quantity: item.quantity\n // }))\n // });\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency,\n shipping: data.totals.shipping,\n tax: data.totals.taxes,\n value: data.totals.total,\n transaction_id: data.number,\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n }))\n }\n }\n\n private toCheckoutInit = (data) => {\n // console.log('toInitcheckout', {\n // coupon: this.toCartDiscount(data),\n // currency: data.currency || \"USD\",\n // items: data.items.map(item => ({\n // id: item.product.id,\n // name: item.product.name,\n // category: item.product.category,\n // price: item.total,\n // quantity: item.quantity\n // })),\n // value: data.totals?.total || 0,\n // });\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n value: data.totals?.total || 0,\n }\n }\n\n private toCartDiscount = (data) => {\n let strDiscount = ''\n strDiscount = data.cartDiscounts.map(itemDiscount => itemDiscount?.type).join()\n return strDiscount == '' ? 'not-discount' : strDiscount\n }\n\n private toAddToCart = (data) => {\n let lastProduct = data.items?.length && data.items[data.items.length - 1]\n return {\n currency: data.currency || \"USD\",\n items: [this.toItem({ quantity:lastProduct.quantity,...lastProduct.product })],\n value: lastProduct.total || 0,\n }\n // console.log('addtocart', {\n // data,\n // currency: data.currency || \"USD\",\n // items: [this.toItem({ quantity: lastProduct.quantity, ...lastProduct.product })],\n // value: lastProduct.total || 0,\n // });\n }\n\n disable = () => this.enabled = false;\n\n private toViewItem = (product) => {\n return {\n currency: product.currency,\n items: [this.toItem(product)],\n value: product.variants[0]?.saleprice || product.variants[0]?.price,\n }\n // console.log('view ', {\n // currency: product.currency,\n // items: [this.toItem(product)],\n // value: product.variants[0]?.saleprice || product.variants[0]?.price,\n // });\n }\n\n private toViewItemList = (data) => {\n return {\n items: data.products.map(product => this.toItem(product)),\n item_list_name: data.item_list_name || 'Collection',\n item_list_id: data.item_list_id || 'collection'\n }\n // console.log('toViewItemList ', {\n // items: data.products.map(product => this.toItem(product)),\n // item_list_name: data.item_list_name || 'Collection',\n // item_list_id: data.item_list_id || 'collection'\n // });\n }\n\n private toRemoveToCart = (product) => {\n let productParam = product.product\n return {\n currency: product.currency || \"USD\",\n items: [this.toItem({ quantity: product.quantity, ...productParam })],\n value: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,\n }\n // console.log('remove_from_cart ', {\n // currency: product.currency || \"USD\",\n // items: [this.toItem({ quantity: product.quantity, ...productParam })],\n // value: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,\n // });\n }\n\n private toItem = (product) => ({\n item_name: product.name,\n item_id: product.id,\n item_brand: product.attributes?.length ? product.attributes[0].name : '',\n item_category: product.category,\n price: product.variants[0]?.saleprice || product.variants[0]?.price,\n quantity: product.quantity || 1,\n })\n\n private toPaymentInfo = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n payment_type: data.payments[0]?.method?.code || 'not-payments',\n value: data.totals?.total || 0,\n }\n }\n\n private toShippingInfo = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n shipping_tier: data.shipments[0]?.method?.code || 'not-shipping',\n value: data.totals?.total || 0,\n }\n }\n\n private toSignUp = (data) => {\n return {\n ...data\n }\n }\n}","import {Inject, Injectable, Optional} from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { AnalyticEventKey } from '../../interfaces/analytics/event-key.model';\nimport {GoogleTagManagerConfig} from '../../interfaces/analytics/gtm-config';\n\n@Injectable({providedIn: 'root'})\nexport class GTMService {\n private isLoaded = false;\n private enabled = false;\n\n\n private config : GoogleTagManagerConfig = { id: null };\n\n private browserGlobals = {\n windowRef(): any {\n return window;\n },\n documentRef(): any {\n return document;\n }\n };\n\n constructor(private router: Router) {}\n\n public getDataLayer(): any[]{\n const window = this.browserGlobals.windowRef();\n window.dataLayer = window.dataLayer || [];\n return window.dataLayer;\n }\n\n private pushOnDataLayer(obj : object): void {\n const dataLayer = this.getDataLayer();\n dataLayer.push(obj);\n }\n\n public addGtmToDom(): Promise < boolean > {\n return new Promise(\n (resolve, reject) => {\n if (this.isLoaded) {\n return resolve(this.isLoaded);\n }\n const doc = this.browserGlobals.documentRef();\n this.pushOnDataLayer({'gtm.start': new Date().getTime(), event: 'gtm.js'});\n\n const gtmScript = doc.createElement('script');\n gtmScript.id = 'GTMscript';\n gtmScript.async = true;\n gtmScript.src = this.applyGtmQueryParams(this.config.gtm_resource_path ? this.config.gtm_resource_path : 'https://www.googletagmanager.com/gtm.js');\n gtmScript.addEventListener('load', () => {\n return resolve(this.isLoaded = true);\n });\n gtmScript.addEventListener('error', () => {\n return reject(false);\n });\n doc.head.insertBefore(gtmScript, doc.head.firstChild);\n }\n );\n }\n\n public initialize = (config : GoogleTagManagerConfig) => {\n this.config = config || this.config;\n this.addGtmToDom().then(() => {\n this.router.events.forEach(item => {\n if (item instanceof NavigationEnd) {\n const gtmTag = {\n event: 'page',\n pageName: item.url\n };\n this.pushTag(gtmTag);\n }\n });\n })\n }\n\n public pushTag(item : object): Promise < void > {\n return new Promise<void>((resolve, reject) => {\n if (!this.isLoaded) {\n this.addGtmToDom().then(() => {\n this.pushOnDataLayer(item);\n return resolve();\n }).catch(() => reject());\n } else {\n this.pushOnDataLayer(item);\n return resolve();\n }\n });\n }\n\n private applyGtmQueryParams(url : string): string {\n if (url.indexOf('?') === -1) {\n url += '?';\n }\n return(url + Object.keys(this.config).filter((k) => this.config[k]).map((k) => `${k}=${\n this.config[k]\n }`).join('&'));\n }\n\n\n callEvent = (event_name: AnalyticEventKey, data = {}) => {\n if (!this.isLoaded) return;\n let event = this.translateEventName(event_name);\n event && this.pushTag({ 'event': this.translateEventName(event_name), data: this.evalEvent(event_name, data) })\n }\n\n translateEventName = (event_name: AnalyticEventKey) => {\n switch (event_name) {\n case 'view_item': return 'view_item_gtm';\n case 'view_item_list': return 'view_item_list_gtm';\n case 'checkout_init': return 'begin_checkout_gtm';\n case 'shipping_info': return 'add_shipping_info_gtm';\n case 'add_payment_info': return 'add_payment_info_gtm';\n case 'purchase': return 'purchase_gtm';\n case 'add_to_cart': return 'add_to_cart_gtm';\n case 'remove_from_cart': return 'remove_from_cart_gtm';\n case 'sign_up': return 'sign_up_gtm';\n default: return null;\n }\n }\n\n evalEvent = (event_name, data) => {\n switch (event_name) {\n case 'view_item_gtm': return this.toViewItem(data);\n case 'view_item_list_gtm': return this.toViewItemList(data);\n case 'checkout_init_gtm': return this.toCheckoutInit(data);\n case 'shipping_info_gtm': return this.toShippingInfo(data);\n case 'add_payment_info_gtm': return this.toPaymentInfo(data);\n case 'purchase_gtm': return this.toPurchase(data);\n case 'add_to_cart_gtm': return this.toAddToCart(data);\n case 'remove_from_cart_gtm': return this.toRemoveToCart(data);\n case 'sign_up_gtm': return this.toSignUp(data);\n default: return data;\n }\n }\n\n private toPurchase = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency,\n shipping: data.totals.shipping,\n tax: data.totals.taxes,\n value: data.totals.total,\n transaction_id: data.number,\n countItems: data.items?.length || 0,\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n }))\n }\n }\n\n private toCheckoutInit = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n value: data.totals?.total || 0,\n }\n }\n\n private toCartDiscount = (data) => {\n let strDiscount = ''\n strDiscount = data.cartDiscounts.map(itemDiscount => itemDiscount?.type).join()\n return strDiscount == '' ? 'not-discount' : strDiscount\n }\n\n private toAddToCart = (data) => {\n let lastProduct = data.items?.length && data.items[data.items.length - 1]\n return {\n currency: data.currency || \"USD\",\n items: [this.toItem({ quantity: lastProduct.quantity, ...lastProduct.product })],\n value: lastProduct.total || 0,\n }\n }\n\n disable = () => this.enabled = false;\n\n private toViewItem = (product) => {\n return {\n currency: product.currency,\n items: [this.toItem(product)],\n value: product.variants[0]?.saleprice || product.variants[0]?.price,\n }\n }\n\n private toViewItemList = (data) => {\n return {\n items: data.products.map(product => this.toItem(product)),\n item_list_name: data.item_list_name || 'Collection',\n item_list_id: data.item_list_id || 'collection'\n }\n }\n\n private toRemoveToCart = (product) => {\n let productParam = product.product\n return {\n currency: product.currency || \"USD\",\n items: [this.toItem({ quantity: product.quantity, ...productParam })],\n value: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,\n }\n }\n\n private toItem = (product) => ({\n item_name: product.name,\n item_id: product.id,\n item_brand: product.attributes?.length ? product.attributes[0].name : '',\n item_category: product.category,\n price: product.variants[0]?.saleprice || product.variants[0]?.price,\n quantity: product.quantity || 1,\n })\n\n private toPaymentInfo = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n payment_type: data.payments[0]?.method?.code || 'not-payments',\n value: data.totals?.total || 0,\n }\n }\n\n private toShippingInfo = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n shipping_tier: data.shipments[0]?.method?.code || 'not-shipping',\n value: data.totals?.total || 0,\n }\n }\n\n private toSignUp = (data) => {\n return {\n ...data\n }\n }\n}\n","import { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { MetricoolPixel } from \"../../interfaces/analytics/metricool-pixel\";\nimport { DOCUMENT } from '@angular/common';\n\n@Injectable({providedIn: 'root'})\nexport class MetricoolPixelService {\n private isLoaded = false;\n\n\n\n private renderer: Renderer2;\n\n \n\n constructor(private rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document: any) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n initialize = (pixel_hash) => {\n let new_analityc_script = this.renderer.createElement('script');\n new_analityc_script.type = 'text/javascript';\n new_analityc_script.text = `\n function loadScript(a) {\n var b = document.getElementsByTagName(\"head\")[0], c = document.createElement(\"script\");\n c.type = \"text/javascript\",\n c.src = \"https://tracker.metricool.com/resources/be.js\",\n c.onreadystatechange = a,\n c.onload = a, b.appendChild(c)\n } loadScript(function () {\n beTracker.t({ hash: \"${pixel_hash}\" })\n });\n `;\n this.renderer.appendChild(this.document.body, new_analityc_script);\n }\n \n}\n","import { Injectable } from '@angular/core';\nimport { AnalyticEventKey } from '../interfaces/analytics/event-key.model';\nimport { DopplerService } from '../utils/analytics/doppler.service';\nimport { FacebookPixelService } from '../utils/analytics/facebook-pixel.service';\nimport { GoogleAnalyticsService } from '../utils/analytics/google-analytics.service';\nimport { GTMService } from '../utils/analytics/gtm.service';\nimport { MetricoolPixelService } from '../utils/analytics/metricool-pixel.service';\n\n@Injectable()\nexport class AnalyticsService {\n\n private services: any[] = [];\n\n constructor(\n private facebookAnalitycs: FacebookPixelService,\n private googleAnalytics: GoogleAnalyticsService,\n private gtmAnalytics: GTMService,\n private metricoolAnalytics:MetricoolPixelService,\n private dopplerAnalytics:DopplerService) {\n this.services.push(this.facebookAnalitycs);\n this.services.push(this.googleAnalytics);\n this.services.push(this.gtmAnalytics);\n }\n\n initializeFacebook = (value) => {\n this.facebookAnalitycs.initialize(value);\n }\n\n initializeGoogle = (value) => {\n this.googleAnalytics.initialize(value);\n }\n\n initializeGTM = (value) => {\n this.gtmAnalytics.initialize({ id: value });\n }\n\n initializeMetricool = (value) => {\n this.metricoolAnalytics.initialize(value);\n }\n\n initializeDoppler = (value) => {\n this.dopplerAnalytics.initialize(value);\n }\n\n callEvent = (event_name: AnalyticEventKey, data: any = {}) => {\n this.services.forEach(service => {\n service.callEvent(event_name, data)\n });\n }\n}","import { Injectable, Injector } from '@angular/core';\nimport { BodyError } from '../../interfaces/checkout/checkout-error';\nimport { CartService } from '../cart.service';\nimport { Constants } from '../../core.consts';\nimport { BehaviorSubject } from 'rxjs';\nimport { ToastService } from '../../utils/toast.service';\nimport { ToastrService } from 'ngx-toastr';\nimport { AuthService } from '../auth.service';\n\n@Injectable({ providedIn: 'root' })\nexport class ErrorHandlerService {\n\n private errorSubject = new BehaviorSubject<BodyError>(null);\n public error$ = this.errorSubject.asObservable();\n\n constructor(private cartService: CartService,\n private toastrService: ToastrService,\n private injector: Injector,\n private consts: Constants) { }\n\n outOfStock = (error: BodyError) => {\n this.cartService.updateItemsOnError(error.content, error.code)\n this.otherErrors(error)\n }\n\n channeAccessPermissionDenied = (error: BodyError) => {\n this.injector.get(AuthService).logout()\n this.otherErrors(error)\n }\n\n otherErrors = (error: BodyError) => {\n error && error.message && this.errorSubject.next(error)\n this.toastrService.show(error.message,'', {closeButton:true,timeOut:6000})\n this.clearError()\n }\n\n clearError = () => {\n setTimeout(() => {\n this.errorSubject.next(null)\n }, 3000);\n }\n\n handlerErrorResponse = (error: BodyError) => {\n switch (error.code) {\n case 'out_of_stock': this.outOfStock(error); break;\n case 'items_with_product_or_product_variant_not_enabled': this.outOfStock(error); break;\n case 'channel_access_permission_denied': this.channeAccessPermissionDenied(error); break;\n case 'user_disabled': this.otherErrors(error); break;\n default: this.otherErrors(error); break;\n }\n }\n}","import { Injectable, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { IndividualConfig, ToastrService } from 'ngx-toastr';\nimport { take } from 'rxjs/operators';\nimport { Constants } from '../core.consts';\nimport { ParametersService } from '../services/parameters.service';\nimport { Parameter } from '../interfaces/parameters';\n\n@Injectable()\nexport class ToastService {\n public configToast;\n\n constructor(private translation: TranslateService,\n private toastrService: ToastrService) {\n this.configToast = {}\n }\n\n /**\n * @description Cambia el tiempo que se muestra el mensaje.\n * @param time \n */\n setTimeMessage = (time: number) => {\n this.configToast = {\n timeOut: time\n }\n }\n\n show = (message, interpolateParams: any = {}, title = '', configToastr: Partial<IndividualConfig> = this.configToast) => {\n this.translation.get(message, interpolateParams).pipe(take(1)).subscribe(\n res => this.toastrService.show((res ? res : message), title, configToastr)\n );\n }\n}","import { Injectable, OnInit } from '@angular/core';\nimport { ConnectionService } from '../../api/connection.service';\nimport { CartService } from '../cart.service';\nimport { Constants } from '../../core.consts';\nimport { BehaviorSubject, ReplaySubject, combineLatest } from 'rxjs';\nimport { StepI, StepTypeI } from '../../interfaces/step';\nimport { Step } from '../../classes/checkout/step';\nimport { CheckoutData, CheckoutDataType } from '../../interfaces/checkout-data';\nimport { OrderUtilityService } from '../../utils/order-util.service';\nimport { AnalyticsService } from '../analytics.service';\nimport { AuthService } from '../auth.service';\nimport { User } from '../../classes/user';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { filter, take } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { ToastService } from '../../utils/toast.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CheckoutService implements OnInit {\n\n baseApi = () => 'shop-api/' + this.consts.getChannel() + '/checkout/' + this.cartService.getCartToken();\n getPaymentMethodsApi = () => this.baseApi() + '/payment';\n putAddressApi = () => this.baseApi() + '/address';\n putPaymentApi = (method) => this.baseApi() + '/payment/' + method;\n completeApi = () => this.baseApi() + '/complete';\n persistShipmentApi = () => '';\n getPreferenceApi = () => 'shop-api/' + this.consts.getChannel() + '/mercado-pago/' + this.cartService.getCartToken() + '/preference';\n getHasPurchaseConditions = () => 'shop-api/' + this.consts.getChannel() + '/carts/' + this.cartService.getCartToken() + '/has_purchase_conditions';\n\n private canCheckoutSubject = new ReplaySubject<boolean>();\n private onReadySubject = new BehaviorSubject<boolean>(false);\n\n private stateSubject = new BehaviorSubject<Step[]>(null);\n private loadingSubject = new BehaviorSubject<boolean>(false);\n private orderSubject = new BehaviorSubject<any>(null);\n private asociatedDataSubject = new BehaviorSubject<CheckoutData[]>(null);\n private order: any;\n private checkout_data: any = {};\n public total;\n private cartLocal;\n private user: User;\n\n public order$ = this.orderSubject.asObservable();\n public state$ = this.stateSubject.asObservable();\n public loading$ = this.loadingSubject.asObservable();\n public canCheckout$ = this.canCheckoutSubject.asObservable();\n public asociatedData$ = this.asociatedDataSubject.asObservable();\n public onReady$ = this.onReadySubject.asObservable();\n\n constructor(private connection: ConnectionService,\n private cartService: CartService,\n private consts: Constants,\n private toastrService: ToastService,\n private orderUtils: OrderUtilityService,\n private analyticsService: AnalyticsService,\n public authService: AuthService,\n private router: Router,\n private errorHandler: ErrorHandlerService) {\n\n combineLatest([this.cartService.cartItems, this.cartService.loading]).subscribe(([items, loading]) => {\n if (!loading && items.length > 0) {\n this.canCheckoutSubject.next(true)\n this.cartService.getTotalAmount().subscribe(res => {\n this.total = res;\n });\n }\n\n })\n this.cartService.cart.subscribe(cart => cart && (this.cartLocal = cart) && this.updateAsociatedData(cart));\n this.order$.subscribe(order => order && this.updateAsociatedData(order))\n this.authService.getUserProfile().subscribe(user => this.user = user)\n this.errorHandler.error$.pipe(filter(res => res != null)).subscribe(\n res => {\n if (res.code == 'out_of_stock' || res.code == 'items_with_product_or_product_variant_not_enabled') {\n this.toastrService.show('redirect-cart')\n setTimeout(() => {\n this.router.navigateByUrl('/cart')\n }, 3000);\n }\n }\n )\n }\n\n ngOnInit() {\n }\n\n updateOrder = (order) => order && this.orderSubject.next(order);\n\n getStepData = (step_name: StepTypeI) => {\n let step_result = this.stateSubject.getValue().find(step => step.name == step_name);\n return (step_result && step_result.data);\n }\n\n setSteps = (steps: StepI[], autohandle = true) => {\n let final_steps = [];\n steps.forEach((step, i) => final_steps.push(new Step(step.name, step.priority || (i + 1))));\n this.stateSubject.next(final_steps);\n this.connection.getErrorNotHandler(this.getHasPurchaseConditions()).toPromise().then(\n res => {\n this.analyticsService.callEvent('checkout_init', { ...this.cartLocal, currency: this.cartLocal?.currency, value: this.cartLocal?.total })\n }\n )\n }\n\n setStepReady = async (step_number, data, order?) => {\n await this.restartAllStepsFrom(step_number);\n setTimeout(() => {\n let steps = this.stateSubject.getValue();\n steps.find(step => step.priority == step_number).ready(data);\n this.stateSubject.next(steps);\n\n if (order) {\n this.orderSubject.next(order);\n this.total = order.totals.total;\n }\n\n this.isCheckoutReady() &&\n setTimeout(() => {\n this.onReadySubject.next(true);\n }, 500);\n }, 150);\n return true;\n }\n\n setStepDoing = async (step_number) => {\n let steps = this.stateSubject.getValue();\n steps = await this.restartAllStepsFrom(step_number, false, false);\n steps.find(step => step.priority == step_number).doing();\n this.stateSubject.next(steps);\n return true;\n }\n\n restartAllStepsFrom = (step_number, included = true, update = true) => {\n let steps = this.stateSubject.getValue();\n steps = steps.map((step) => {\n included\n ? (step.priority >= step_number) && step.restart()\n : (step.priority > step_number) && step.restart()\n return step;\n })\n update && this.stateSubject.next(steps);\n return steps;\n }\n\n isCheckoutReady = () => {\n let steps = this.stateSubject.value;\n const step_missing = steps.find(step => step.isPending());\n return !step_missing;\n }\n\n isStepReady = (step_name) => {\n return this.stateSubject.getValue().find(step => step.name == step_name).isReady()\n };\n\n setOrder = (order) => { this.order = order, this.orderSubject.next(order) };\n getOrder = () => this.order || this.orderSubject.value;\n\n private completeOrder = () => this.connection.put(this.completeApi(), { email: this.checkout_data.email, notes: this.checkout_data.notes || '' }).toPromise();\n\n complete = async () => {\n this.loadingSubject.next(true);\n let result = await this.completeOrder();\n if (result && result.error) {\n this.cartService.changeHaveToUpdate(false);\n this.loadingSubject.next(false);\n return ({ ok: false, require_login: true, message: 'not-completed' });\n }\n this.setOrder(result);\n this.analyticsService.callEvent('purchase', { ...result, currency: result.currency, value: result.total });\n this.cartService.clearAndResetCart();\n this.canCheckoutSubject.next(false);\n this.onReadySubject.next(false);\n this.loadingSubject.next(false);\n return ({ ok: true, require_login: false, message: '' });\n }\n\n updateAsociatedData = (cart: any) => {\n let result = this.orderUtils.getPromotions(cart);\n if (this.authService.getUserProfileAsUser()?.isWholesaler() && cart.totals.taxes != 0) {\n let total = { ...result[result.length - 1] };\n result[result.length - 1] = {\n type: 'taxes',\n name: 'taxes',\n amount: cart.totals.taxes\n }\n result.push(total);\n }\n let shipment = result?.find(promotion => promotion.type == \"shipment\");\n if (!shipment && cart.totals.shipping != 0) {\n\n if (result?.length && !result.find(item => item.type === \"shipment\")) {\n let total = { ...result[result.length - 1] };\n result[result.length - 1] = {\n type: 'shipment',\n name: 'shipment',\n amount: cart.totals.shipping\n }\n result.push(total);\n }\n }\n this.asociatedDataSubject.next(result);\n }\n\n restartCheckout = () => { }\n\n}","import { BodyError } from \"../../interfaces/checkout/checkout-error\";\nimport { CheckoutService } from \"../../services/checkout/checkout.service\";\n\nexport class StepService {\n\n public step_id;\n\n constructor(private checkout: CheckoutService) { }\n\n /** Persistir el id del paso para luego indicarle al CheckoutService quien le habla */\n initialize = (step_id) => {\n this.step_id = step_id;\n }\n\n /** Reinicia información en CheckoutService del paso */\n restartStep = () => this.checkout.setStepDoing(this.step_id);\n\n /**\n * Obtener información obtenida en el paso de datos asociados al usuario y a la facturación\n */\n getUserData = () => this.checkout.getStepData('address');\n\n /**\n * Obtener información obtenida en el paso de envío\n */\n getShipmentData = () => this.checkout.getStepData('shipment');\n\n /**\n * Obtener información obtenida en el paso de pago\n */\n getPaymentData = () => this.checkout.getStepData('payment');\n\n /**\n * \n * @param step_data Información obtenida en el paso\n * @param order Información de la orden que devolvió el backend al terminar el paso\n */\n setStepReady = async (step_data, order) => (await this.restartStep()) && this.checkout.setStepReady(this.step_id, step_data, order);\n\n /**\n * \n */\n //setError = (error: BodyError) => error && this.checkout.handleError(error);\n}","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../../api/connection.service';\nimport { Constants } from '../../core.consts';\nimport { map } from 'rxjs/operators';\nimport { CartService } from '../cart.service';\nimport { CheckoutService } from './checkout.service';\nimport { StepService } from '../../classes/checkout/step-service';\nimport { ParametersService } from '../parameters.service';\nimport { AnalyticsService } from '../analytics.service';\nimport { Validators } from '@angular/forms';\n\ntype typeForms = 'EUR' | 'ARG';\ntype typeSelectAddress = 'ONLY_LOAD_ADDRESS' | 'ONLY_ADDRESS_SELECTION' | 'LOAD_ADDRESS_AND_SELECTION';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddressingService extends StepService {\n\n baseApi = () => 'shop-api/' + this.consts.getChannel() + '/' + 'checkout/' + this.cartService.getCartToken();\n countriesApi = () => 'shop-api/' + this.consts.getChannel() + '/countries';\n zonesApi = () => 'shop-api/' + this.consts.getChannel() + '/zones';\n provincesApi = () => 'shop-api/' + this.consts.getChannel() + '/provinces';\n putAddressApi = () => this.baseApi() + '/address';\n addressBookApi = () => 'shop-api/' + this.consts.getChannel() + '/address-book';\n headquarterApi = () => 'shop-api/' + this.consts.getChannel() + '/checkout/' + this.cartService.getCartToken() +'/headquarter';\n\n public typeForms: typeForms = 'ARG';\n public modeSelectAddress: typeSelectAddress = 'LOAD_ADDRESS_AND_SELECTION';\n public countriesList = [];\n public documentTypes = [];\n public provinceList = [];\n\n constructor(private connection: ConnectionService, private consts: Constants, private cartService: CartService, private checkoutService: CheckoutService,\n private analyticsService: AnalyticsService) {\n super(checkoutService);\n this.getAddressingData().then(res => {\n if (res) {\n this.documentTypes = (res.find(paises => this.consts.getLocale().toLocaleLowerCase().includes(paises.code.toLocaleLowerCase())))?.documentTypes || []\n this.provinceList = (res.find(paises => this.consts.getLocale().toLocaleLowerCase().includes(paises.code.toLocaleLowerCase())))?.provinces || []\n this.countriesList = res\n }\n })\n }\n\n ngOnInit() {\n\n }\n\n getAddressingData = async () =>\n this.connection.get(this.countriesApi()).pipe(map(res => res?._embedded?.items)).toPromise();\n\n getAddressBook = async () =>\n this.connection.get(this.addressBookApi()).pipe(map(res => res?.length && res.map(addres => { return addres && { ...addres, selected: addres.default } }) || null )).toPromise();\n \n setHeadquarter = (sede: any) => {\n return this.connection.put(this.headquarterApi(), sede.selected)\n .pipe(map(order => {\n if (order && order.error) {\n this.cartService.changeHaveToUpdate(false);\n return false;\n }\n this.setStepReady(sede, order);\n this.analyticsService.callEvent('payment_info', order);\n return order;\n })).toPromise().then(\n res => res,\n err => {\n return new Promise((resolve, reject) => reject(new Error(err.error)))\n }\n ).catch(err => console.error(err))\n }\n \n setAddress = (user_data: any) => {\n user_data.locale = this.consts.getLocale();\n return this.connection.put(this.putAddressApi(), user_data).pipe(map(order => {\n if (order && order.error) {\n this.cartService.changeHaveToUpdate(false);\n return false;\n }\n this.setStepReady(user_data, order);\n this.analyticsService.callEvent('payment_info', order);\n return order;\n })).toPromise().then(\n res => res,\n err => {\n return new Promise((resolve, reject) => reject(new Error(err.error)))\n }\n ).catch(err => console.error(err))\n }\n\n putAddressAndHandle = (user_data, next?, onError?) => {\n user_data.locale = this.consts.getLocale();\n let data = { shippingAddress: { ...user_data.data } };\n this.connection.put(this.putAddressApi(), data).toPromise().then(\n res => {\n this.setStepReady(user_data, res);\n this.analyticsService.callEvent('payment_info', res);\n next && next();\n },\n err => onError && onError(err)\n )\n }\n\n getTypeForm = () => {\n let formsTypeCofig = [\n {\n code: 'EUR',\n configForm: {\n formAddres: {\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n email: ['', [Validators.required, Validators.email]],\n documentType: ['', []],\n documentNumber: ['', []],\n street: ['', [Validators.required, Validators.maxLength(50)]],\n countryCode: [null, [Validators.required]],\n city: ['', Validators.required],\n provinceCode: [null, [Validators.required]],\n postcode: ['', Validators.required],\n terms: [null, Validators.required],\n notes: ['']\n },\n formBilling: {\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n email: ['', [Validators.required, Validators.email]],\n documentType: ['', []],\n documentNumber: ['', []],\n street: ['', [Validators.required, Validators.maxLength(50)]],\n countryCode: [null, [Validators.required]],\n city: ['', Validators.required],\n provinceCode: [null, [Validators.required]],\n postcode: ['', Validators.required],\n notes: ['']\n }\n },\n viewForms: {\n firstName: { enabled: true, required: true, values: [] },\n lastName: { enabled: true, required: true, values: [] },\n phoneNumber: { enabled: true, required: true, values: [] },\n email: { enabled: true, required: true, values: [] },\n documentType: { enabled: true, required: false, values: this.documentTypes },\n documentNumber: { enabled: true, required: false, values: [] },\n street: { enabled: true, required: true, values: [] },\n countryCode: { enabled: true, required: true, values: [] },\n city: { enabled: true, required: true, values: [] },\n provinceCode: { enabled: true, required: true, values: [] },\n postcode: { enabled: true, required: true, values: [] },\n terms: { enabled: true, required: true, values: [] },\n notes: { enabled: true, required: false, values: [] }\n }\n },\n {\n code: 'ARG',\n configForm: {\n formAddres: {\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n email: ['', [Validators.required, Validators.email]],\n documentType: ['', [Validators.required]],\n documentNumber: ['', [Validators.required]],\n street: ['', [Validators.required, Validators.maxLength(50)]],\n countryCode: [null, [Validators.required]],\n city: ['', Validators.required],\n provinceCode: [null, [Validators.required]],\n postcode: ['', Validators.required],\n notes: ['']\n },\n formBilling: {\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n email: ['', [Validators.required, Validators.email]],\n documentType: ['', [Validators.required]],\n documentNumber: ['', [Validators.required]],\n street: ['', [Validators.required, Validators.maxLength(50)]],\n countryCode: [null, [Validators.required]],\n city: ['', Validators.required],\n provinceCode: [null, [Validators.required]],\n postcode: ['', Validators.required],\n notes: ['']\n }\n },\n viewForms: {\n firstName: { enabled: true, required: true, values: [] },\n lastName: { enabled: true, required: true, values: [] },\n phoneNumber: { enabled: true, required: true, values: [] },\n email: { enabled: true, required: true, values: [] },\n documentType: { enabled: true, required: true, values: this.documentTypes},\n documentNumber: { enabled: true, required: true, values: [] },\n street: { enabled: true, required: true, values: [] },\n countryCode: { enabled: true, required: true, values: [] },\n city: { enabled: true, required: true, values: [] },\n provinceCode: { enabled: true, required: true, values: [] },\n postcode: { enabled: true, required: true, values: [] },\n terms: { enabled: false, required: false, values: [] },\n notes: { enabled: true, required: false, values: [] }\n }\n }\n ]\n return formsTypeCofig.find(ct => ct.code == this.typeForms);\n }\n\n setTypeSelectAddress = (type: typeSelectAddress) => {\n this.modeSelectAddress = type && type || 'LOAD_ADDRESS_AND_SELECTION'\n }\n\n setTypeForms = (type: typeForms) => {\n this.typeForms = type && type || 'ARG' \n }\n}","\nimport { Injectable, Inject, Injector } from '@angular/core';\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\nimport { ConnectionService } from '../api/connection.service';\nimport { AddressingService } from './checkout/addressing.service';\nimport { Constants } from '../core.consts';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ChannelConfigService {\n\n constructor(private consts: Constants, @Inject('env') private env, private connection: ConnectionService, private injector: Injector) {\n this.getChannelConfig()\n this.getChannels()\n this.getLocales()\n }\n\n private channelConfigApi = () => 'shop-api/' + this.consts.getChannel() + '/channel'\n private localesApi = () => 'shop-api/' + this.consts.getChannel() + '/locales'\n private channelsApi = () => 'shop-api/channels'\n\n private channelConfigSubject = new ReplaySubject<any>()\n public channelConfig$ = this.channelConfigSubject.asObservable()\n\n private channelsSubject: BehaviorSubject<any> = new BehaviorSubject([])\n public channels = this.channelsSubject.asObservable()\n\n private localesSubject: BehaviorSubject<any> = new BehaviorSubject([])\n public locales = this.localesSubject.asObservable()\n\n public getChannelConfig = () => {\n this.connection.get(this.channelConfigApi()).toPromise().then(\n res => { this.channelConfigSubject.next(res), res && this.setChannelInfo(res) },\n err => this.channelConfigSubject.next({})\n ).catch(err => this.channelConfigSubject.next(null))\n }\n\n public getChannels = () => {\n this.connection.get(this.channelsApi()).toPromise()\n .then(res => this.channelsSubject.next(res))\n .catch(err => this.channelsSubject.next([]))\n }\n\n public getLocales = () => {\n this.connection.get(this.localesApi()).toPromise()\n .then(res => this.localesSubject.next(res.items))\n .catch(err => this.localesSubject.next([]))\n }\n\n public changeChannel = channelObj => {\n this.consts.modifyChannelConfig({\n channel: channelObj.code,\n currency: channelObj.baseCurrency,\n locale: channelObj.locales.code\n })\n this.injector.get(AddressingService).setTypeSelectAddress(channelObj.headquarterSelectionOnly || 'LOAD_ADDRESS_AND_SELECTION')\n }\n\n public setChannelInfo = channelObj => {\n this.consts.setChannel(channelObj.code)\n this.consts.setCurrency(channelObj.baseCurrency)\n this.injector.get(AddressingService).setTypeSelectAddress(channelObj.headquarterSelectionOnly || 'LOAD_ADDRESS_AND_SELECTION')\n }\n\n}\n\n","import { Injectable, Injector } from '@angular/core';\nimport { ConnectionService } from '../api/connection.service';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\nimport { User } from '../classes/user';\nimport 'rxjs/add/observable/of';\nimport { ToastrService } from 'ngx-toastr';\nimport { Constants } from '../core.consts';\nimport { map, mapTo, catchError, tap } from 'rxjs/operators';\nimport * as moment from \"moment\";\nimport { ChannelConfigService } from './channel-config.service';\nimport { take } from 'rxjs-compat/operator/take';\nimport { CartService } from './cart.service';\nimport { Router } from '@angular/router';\nimport { UserRoleType } from '../classes/user-role-type';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService {\n\n private readonly JWT_TOKEN = 'JWT_TOKEN'\n private readonly REFRESH_TOKEN = 'REFRESH_TOKEN'\n private readonly EXPIRATES_IN = 'EXPIRATES_IN'\n private readonly USER = 'USER'\n private readonly MAIL = 'mail'\n private readonly LOCALE = 'LOCALE'\n private readonly CHANNEL = 'CHANNEL'\n private readonly CUSTOMER = 'CUSTOMER'\n\n /* activeChannelSwitch? */\n private activeChannelChange: boolean = false\n private loggedInSubject = new BehaviorSubject<any>(false)\n private loggingInSubject = new BehaviorSubject<any>(false)\n private userInSubject = new BehaviorSubject<User>(null)\n private channelsUserSubject = new BehaviorSubject<any[]>([])\n /* private customerSubject = new BehaviorSubject<any>(null) */\n private user: User = null\n\n // APIS\n public tokenApi = () => 'shop-api/login_check';\n public registerApi = () => 'shop-api/' + this.constants.getChannel() + '/register';\n public registerWholesalerApi = () => 'shop-api/' + this.constants.getChannel() + '/register-wholesaler';\n public confirmAccountApi = (token) => 'shop-api/' + this.constants.getChannel() + '/verify-account?token=' + token;\n public resetPasswordApi = (token) => 'shop-api/' + this.constants.getChannel() + '/password-reset/' + token;\n public recoverPasswordApi = () => 'shop-api/' + this.constants.getChannel() + '/request-password-reset';\n public countriesApi = () => 'shop-api/' + this.constants.getChannel() + '/countries';\n\n // Atributos utiles\n public waiting = false;\n public loggedIn = this.loggedInSubject.asObservable()\n public loggingIn = this.loggingInSubject.asObservable()\n public userAuth = this.userInSubject.asObservable()\n public channelsUser = this.channelsUserSubject.asObservable()\n /* private customer = this.channelsUserSubject.asObservable() */\n private customer = null\n public channel = null\n public channels = []\n private homeResolver = null\n\n constructor(private connection: ConnectionService,\n private toastrService: ToastrService,\n private constants: Constants,\n private injector: Injector\n ) {\n this.isAuthenticated() && this.loggedInSubject.next(true)\n }\n\n /**\n * @desc Devuelve un observable\n * @param user Objeto que contiene username y password \n */\n login(user: { username: string, password: string }, withRoles: UserRoleType[] = []): Observable<any> {\n this.injector.get(ChannelConfigService).channelConfig$.subscribe(ch => this.channel = ch)\n this.injector.get(ChannelConfigService).channels.subscribe(ch => this.channels = ch)\n this.loggingInSubject.next(true);\n user = { ...user, ...this.constants.loginExtraData() };\n let result = this.connection.post(this.tokenApi(), user).pipe(\n map(res => {\n if (this.channelAccessPermission({ ...user, ...res }) && this.isAllowedRole(withRoles, res.type)) {\n this.doLoginUser({ ...user, ...res })\n return 'ok'\n }\n return 'error'\n }),\n catchError(err => {\n this.loggingInSubject.next(false);\n return of(err.toString());\n })\n );\n return result\n }\n\n channelAccessPermission = (res) => {\n this.channelsUserSubject.next([])\n\n /* Please remove this ASAP - Needs *channels* array in user object ALWAYS */\n /* if (UserRoleType.SELLER == res.type as UserRoleType) return true */\n\n /* No authorized channels */\n if (res.channels?.length == 0) {\n return false\n }\n /* Some authorized channel(s) including current channel */\n if (res.channels.find(userchannel => userchannel.code === this.channel.code)) {\n /* Multiple authorized channels including current channel */\n if (res.channels?.length > 1 && this.activeChannelChange)\n this.channelsUserSubject.next(res.channels)\n return true\n }\n /* One authorized channel not including current channel */\n if (res.channels?.length == 1 && this.activeChannelChange) {\n delete res.password\n this.channelAccess(res.channels[0], res)\n return true\n }\n /* Multiple authorized channels not including current channel */\n if (this.activeChannelChange) {\n this.channelsUserSubject.next(res.channels)\n return true\n }\n return false\n }\n\n channelAccess = (channel, user = null) => {\n if (window.location.hostname != channel.hostname) {\n let encoded = btoa(JSON.stringify(user != null ? user : this.user))\n window.location.replace(`${window.location.protocol}//${channel.hostname}/auth/redirect/${encoded}`)\n } else {\n this.constants.modifyChannelConfig(channel)\n window.location.reload()\n }\n }\n\n /**\n * @desc Devuelve una promesa\n * @param user Objeto que contiene username y password \n */\n doLogin = (user: { username: string, password: string }) => {\n this.loggingInSubject.next(true);\n user = { ...user, ...this.constants.loginExtraData() };\n return this.connection.post(this.tokenApi(), user).pipe(\n map(res => this.doLoginUser(res)),\n mapTo('ok'),\n catchError(err => {\n this.loggingInSubject.next(false);\n return of(err.toString());\n })\n ).toPromise();\n }\n\n getUserProfile(): Observable<User> {\n return (this.user && Observable.of(this.user)) || this.getCurrentUser();\n }\n\n getUserProfileAsUser(): User {\n return this.user || this.getCurrentUserAsUser();\n }\n\n private getCurrentUserAsUser(): User {\n this.user = new User();\n if (!this.user.loadFromStorage()) {\n this.user = null\n }\n else if (this.user?.channels.find(userchannel => userchannel?.code === this.constants.getChannel())) {\n return this.user;\n } else {\n this.logout()\n }\n return this.user;\n }\n\n private getCurrentUser(): Observable<User> {\n this.user = new User();\n if (!this.user.loadFromStorage()) {\n this.user = null\n }\n return Observable.of(this.user);\n }\n\n signUp = (data) => this.connection.post(this.registerApi(), data);\n\n isAuthenticated(): boolean {\n if (this.isTokenExpired()) {\n this.doLogoutUser()\n }\n this.getCurrentUserAsUser()\n this.userInSubject.next(this.user);\n return this.getToken() && !this.isTokenExpired() && this.user != null;\n }\n\n confirmAccount = (token: string) =>\n this.connection.get(this.confirmAccountApi(token));\n\n passwordReset = (new_password, token) => {\n const data = { password: { first: new_password, second: new_password } };\n return this.connection.put(this.resetPasswordApi(token), data);\n }\n\n recoverPassword = (email: string) =>\n this.connection.put(this.recoverPasswordApi(), { email });\n\n /* TOKEN */\n\n logout() {\n this.doLogoutUser();\n }\n\n refreshToken() {\n let data = { ...this.constants.loginExtraData(), refresh_token: this.getRefreshToken() }\n return this.connection.post(this.tokenApi(), data).pipe(map(\n res => this.doLoginUser(res)\n ))\n }\n\n getToken() {\n return localStorage.getItem(this.JWT_TOKEN);\n }\n\n isTokenExpired = () => {\n const fecha_expiracion = this.getExpiratesAt();\n const result = moment() >= moment(fecha_expiracion);\n return result;\n }\n\n getExpiratesAt = () => localStorage.getItem(this.EXPIRATES_IN);\n\n public doLoginUser(tokens) {\n this.user = new User()\n this.user.initilized(tokens)\n this.forceChannelsForSeller(tokens)\n this.user.persistInStorage()\n localStorage.setItem(this.EXPIRATES_IN, moment(tokens.expires_in).add(1, 'h').format());\n localStorage.setItem(this.REFRESH_TOKEN, moment(tokens.expires_in).add(1, 'h').format());\n localStorage.setItem(this.JWT_TOKEN, tokens.token);\n localStorage.setItem(this.MAIL, tokens.username);\n this.userInSubject.next(this.user);\n this.loggedInSubject.next(true);\n this.loggingInSubject.next(false);\n }\n\n public doLogoutUser() {\n this.user = null\n localStorage.removeItem(this.USER);\n localStorage.removeItem(this.EXPIRATES_IN);\n localStorage.removeItem(this.JWT_TOKEN);\n localStorage.removeItem(this.REFRESH_TOKEN);\n localStorage.removeItem('cart_token');\n localStorage.removeItem(this.MAIL);\n localStorage.removeItem(this.CHANNEL);\n localStorage.removeItem(this.LOCALE);\n localStorage.removeItem(this.CUSTOMER);\n localStorage.removeItem('MASTER_CHANNEL');\n this.loggedInSubject.next(false);\n this.userInSubject.next(this.user);\n this.channelsUserSubject.next([])\n }\n\n private getRefreshToken() {\n return localStorage.getItem(this.REFRESH_TOKEN);\n }\n\n hasToRefresh = () => this.getRefreshToken();\n\n signUpWholesaler = (data) => this.connection.post(this.registerWholesalerApi(), data);\n\n getCountriesData = async () =>\n this.connection.get(this.countriesApi()).pipe(map(res => res._embedded.items)).toPromise();\n\n public setActiveChannelChange = (activelyChangeChannelsOnLogin: boolean) => this.activeChannelChange = activelyChangeChannelsOnLogin\n\n private isAllowedRole = (allowedRoles: UserRoleType[], role: string) => {\n return allowedRoles.length\n ? allowedRoles.includes(role as UserRoleType)\n : true\n }\n\n /* Please remove this ASAP - Needs *channels* array in user object ALWAYS */\n private forceChannelsForSeller = tokens => {\n if (UserRoleType.SELLER == tokens.type as UserRoleType)\n this.channels?.length\n ? this.user.setChannels(...this.channels)\n : this.user.setChannels(this.channel)\n }\n\n public setCustomer = customer => {\n /* this.customerSubject.next(customer) */\n this.customer = customer\n localStorage.setItem(this.CUSTOMER, JSON.stringify(customer))\n this.injector.get(CartService).clearAndResetCustomerCart()\n }\n\n /* public getCustomer = () => Observable.of(JSON.parse(localStorage.getItem(this.CUSTOMER))) */\n\n public getCustomer = () => {\n /* this.customerSubject.next(JSON.parse(localStorage.getItem(this.CUSTOMER)))\n return this.customer */\n return this.customer || JSON.parse(localStorage.getItem(this.CUSTOMER))\n }\n\n public setHomeResolver = resolverFunction => this.homeResolver = resolverFunction\n\n public getHomeResolver = () => this.homeResolver\n\n public isAbleToBuy = (): boolean => !this.getUserProfileAsUser()?.isSeller() || !!this.getCustomer()\n\n}","import { Injectable } from '@angular/core';\r\nimport { Product } from '../interfaces/product';\r\nimport { CartItem } from '../interfaces/cart-item';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { ConnectionService } from '../api/connection.service';\r\nimport { Constants } from '../core.consts';\r\nimport { AuthService } from './auth.service';\r\nimport { ToastService } from '../utils/toast.service';\r\nimport { CouponI } from '../interfaces/coupon';\r\nimport { OrderUtilityService } from '../utils/order-util.service';\r\nimport { CheckoutData } from '../interfaces/checkout-data';\r\nimport { CartAffordable } from '../interfaces/cart/cart-affordable';\r\nimport { ChannelConfigService } from './channel-config.service';\r\nimport { AnalyticsService } from '../../public-api';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CartService {\r\n private cartItemsSubject: BehaviorSubject<CartItem[]> = new BehaviorSubject([]);\r\n private couponSubject: BehaviorSubject<any> = new BehaviorSubject(null);\r\n private cartSubject: BehaviorSubject<any> = new BehaviorSubject(null);\r\n private requestInProcess = new BehaviorSubject(false);\r\n private promotionsSubject: BehaviorSubject<CheckoutData[]> = new BehaviorSubject([]);\r\n\r\n private items = [];\r\n private count: number = 0;\r\n private locale = \"\";\r\n private logged_in = false;\r\n private have_to_update = true;\r\n public channelConfig: any = {};\r\n private cart_baseUrl = 'shop-api/' + this.consts.getChannel() + '/carts';\r\n\r\n public cartItemsApi = () => this.cart_baseUrl + '?locale=' + this.consts.getLocale();\r\n public addItemApi = () => this.cart_baseUrl + '/' + this.cart_token + '/items'+ '?locale=' + this.consts.getLocale();\r\n public addAllItemsApi = () => this.cart_baseUrl + '/' + this.cart_token + '/multiple-items'+ '?locale=' + this.consts.getLocale();\r\n public updateItemQuantityApi = (item_id) => this.cart_baseUrl + '/' + this.cart_token + '/items/' + item_id+ '?locale=' + this.consts.getLocale();\r\n public deleteItemApi = (item_id) => this.cart_baseUrl + '/' + this.cart_token + '/items/' + item_id + '?locale=' + this.consts.getLocale();\r\n public couponApi = () => this.cart_baseUrl + '/' + this.cart_token + '/coupon';\r\n\r\n public cart_token;\r\n public cartItems = this.cartItemsSubject.asObservable().pipe(map(items => this.switchPriceInCartItem(items)))\r\n public coupon = this.couponSubject.asObservable();\r\n public loading = this.requestInProcess.asObservable();\r\n public cart = this.cartSubject.asObservable();\r\n public promotions = this.promotionsSubject.asObservable();\r\n\r\n constructor(private connection: ConnectionService, private toastrService: ToastService, private consts: Constants,\r\n private authService: AuthService, private orderUtils: OrderUtilityService, private analyticsService: AnalyticsService,\r\n private channelConfigService: ChannelConfigService) {\r\n\r\n this.requestInProcess.next(true);\r\n this.items = JSON.parse(localStorage.getItem('cart')) || [];\r\n this.cart_token = localStorage.getItem('cart_token') || null;\r\n this.authService.loggedIn.subscribe(res => this.getCart());\r\n this.channelConfigService.channelConfig$.subscribe(res => this.channelConfig = res);\r\n }\r\n\r\n\r\n private getCart = async () =>\r\n this.connection.post(this.cartItemsApi(), ((this.cart_token && this.items.length >= 1) && { token: this.cart_token })).subscribe(\r\n res => this.initializeCart(res)\r\n )\r\n\r\n private getCartByToken = async () =>\r\n this.connection.post(this.cartItemsApi(), ((this.cart_token) && { token: this.cart_token })).subscribe(\r\n res => this.initializeCart(res)\r\n )\r\n\r\n private getCartByCustomer = async () =>\r\n this.connection.post(this.cartItemsApi()).subscribe(\r\n res => this.initializeCart(res)\r\n )\r\n\r\n /**\r\n * @private\r\n * CART CRUD SERVER'S SYNCRONIZED\r\n */\r\n\r\n private initializeCart = (response) => {\r\n this.cart_token = response.tokenValue;\r\n localStorage.setItem('cart_token', this.cart_token);\r\n this.locale = response.locale;\r\n /* let localeFromStorage = localStorage.getItem('LOCALE')\r\n console.log(localeFromStorage)\r\n this.locale = localeFromStorage ? localeFromStorage : response.locale;\r\n response.locale = this.locale */\r\n this.updateCartObj(response, false);\r\n this.updateCartItems(this.transformItems(response.items));\r\n this.requestInProcess.next(false);\r\n return true;\r\n }\r\n\r\n private switchPriceInCartItem = (items: CartItem[]) => {\r\n //return items;\r\n return items.map(\r\n item => {\r\n if (item.product) {\r\n item.product.price = item.product.variants[0].saleprice ? item.product.variants[0].saleprice : item.product.variants[0].price\r\n }\r\n return item\r\n }\r\n )\r\n }\r\n\r\n private stepCart = (res) => {\r\n res.items.length > 0 && res.items.forEach(\r\n item => !this.isItemInLocal(item.id) && this.deleteCartItem(item, false)\r\n );\r\n this.addAllToCart(\r\n this.items.filter(\r\n item => !res.items.some(external_item => external_item.id == item.item_id)\r\n )\r\n );\r\n }\r\n\r\n private updateCartItems = (items) => {\r\n this.items = items;\r\n this.count = items.length;\r\n this.cartItemsSubject.next(this.items);\r\n this.updateLocalCart();\r\n this.requestInProcess.next(false);\r\n }\r\n\r\n private updateCartItemQuantity = (variant_id, quantity) => {\r\n let newQuantity = this.items.find(item => item.variant_id == variant_id).quantity = quantity;\r\n this.cartItemsSubject.next(this.items);\r\n this.requestInProcess.next(false);\r\n this.updateLocalCart();\r\n this.toastrService.show('product-updated', {quantity:newQuantity});\r\n }\r\n\r\n private appendToCart = (cart) => {\r\n this.updateCartObj(cart);\r\n this.items = this.transformItems(cart.items);\r\n this.count = this.items.length;\r\n this.requestInProcess.next(false);\r\n this.updateLocalCart();\r\n this.toastrService.show('product-added');\r\n this.cartItemsSubject.next(this.items);\r\n }\r\n\r\n private removeCartItem = (cart, product, toast = true) => {\r\n this.updateCartObj(cart, false);\r\n this.items.splice(this.items.findIndex(item => item.item_id == product.item_id), 1);\r\n this.cartItemsSubject.next(this.items);\r\n toast && this.requestInProcess.next(false);\r\n toast && this.toastrService.show('product-removed');\r\n this.updateLocalCart();\r\n // this.googleAnalytics.removeFromCart(product);\r\n this.analyticsService.callEvent('remove_from_cart', { ...product, currency: this.consts.currency.code })\r\n }\r\n\r\n private addIfAllreadyExists = (product, variant_id, quantityAdd = 1) =>\r\n this.items.find((item, index) => {\r\n if (item.product.id == product.id && item.variant_id == variant_id) {\r\n this.updateItemQuantity(item, this.findItem(product.id).quantity + quantityAdd);\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n private updateLocalCart = () => {\r\n localStorage.setItem('cart', JSON.stringify(this.items));\r\n }\r\n\r\n private resetCart = (next?) => {\r\n this.items = [];\r\n this.cartSubject.next(null);\r\n this.cart_token = null;\r\n this.cartItemsSubject.next([]);\r\n this.count = 0;\r\n localStorage.setItem('cart', \"[]\");\r\n localStorage.removeItem('cart_token');\r\n next && next();\r\n }\r\n\r\n private updateCartObj = (cart, emitEvent = true): boolean => {\r\n this.cartSubject.next(cart);\r\n emitEvent && this.analyticsService.callEvent('add_to_cart', cart);\r\n this.promotionsSubject.next(this.orderUtils.getPromotions(cart, true));\r\n\r\n cart.couponCode\r\n ? this.formatCoupon(cart)\r\n : this.couponSubject.next(null);\r\n return true;\r\n }\r\n\r\n private isItemInLocal = (item_id) => this.items.some(item => item.item_id == item_id);\r\n\r\n /**\r\n * @public\r\n * CART CRUD\r\n */\r\n\r\n addToCart = (product: Product, quantity: number, variant_id) => {\r\n if (!this.authService.isAbleToBuy()) {\r\n this.toastrService.show('must-select-customer')\r\n return\r\n }\r\n\r\n this.requestInProcess.next(true);\r\n let added = this.addIfAllreadyExists(product, variant_id, quantity);\r\n !added && this.connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variant_id })\r\n .subscribe(\r\n res => this.appendToCart(res),\r\n err => this.handleError(err)\r\n );\r\n }\r\n\r\n addToCartPromise = async (product: Product, quantity: number, variant_id) => {\r\n if (!this.authService.isAbleToBuy()) {\r\n this.toastrService.show('must-select-customer')\r\n return\r\n }\r\n\r\n this.requestInProcess.next(true);\r\n let added = this.addIfAllreadyExists(product, variant_id, quantity);\r\n if (!added) {\r\n let result = await (this.connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variant_id }).toPromise());\r\n if (!result || result.error) this.handleError(result.error);\r\n else {\r\n this.appendToCart(result);\r\n return { error: false }\r\n }\r\n }\r\n return { error: true }\r\n }\r\n\r\n\r\n addAllToCart = (items: any[]) => {\r\n if (!this.authService.isAbleToBuy()) {\r\n this.toastrService.show('must-select-customer')\r\n return\r\n }\r\n\r\n this.requestInProcess.next(true);\r\n\r\n const params = { items: this.mergeItemsAddAllToCart(items) };\r\n\r\n this.connection.post(this.addAllItemsApi(), params)\r\n .toPromise().then(\r\n res => {\r\n this.updateCartObj(res.cart) && this.updateCartItems(this.transformItems(res.cart.items));\r\n res.cart_response.status == 'success' && this.toastrService.show('products-added');\r\n },\r\n err => {\r\n this.handleError(err);\r\n }\r\n ).catch(err => {\r\n this.handleError(err);\r\n });\r\n }\r\n\r\n mergeItemsAddAllToCart = (items: any[]) => {\r\n let paramsMerge = []\r\n this.items.forEach(item => {\r\n let itemInterno = items.find(itemParam => itemParam.variantCode == item.variant_id)\r\n paramsMerge.push(\r\n {\r\n productCode: item.product.id,\r\n variantCode: item.variant_id,\r\n quantity: itemInterno && itemInterno.quantity || item.quantity\r\n }\r\n )\r\n })\r\n\r\n items = items.filter(itemParam => !this.items.find(item => itemParam.variantCode == item.variant_id))\r\n\r\n return [...items, ...paramsMerge]\r\n }\r\n\r\n updateItemQuantity = (item: CartItem, quantity) => {\r\n if (this.validateQuantity(item, quantity)) {\r\n this.connection.put(this.updateItemQuantityApi(this.findItemByIdVariant(item.variant_id)), { 'quantity': Number(quantity) }).subscribe(\r\n res => this.updateCartObj(res) && this.updateCartItemQuantity(item.variant_id, Number(quantity)),\r\n err => this.handleError(err)\r\n )\r\n }\r\n }\r\n\r\n\r\n validateQuantity = (item: CartItem, quantity) => {\r\n if ((this.getCountFromItemInCart(item.productCode) + quantity) > item.product.variants[0].maximumItemsQuantity) {\r\n this.toastrService.show('maximum-items-quantity', { quantity: item.product.variants[0].maximumItemsQuantity })\r\n return false\r\n }\r\n if ((this.getCountFromItemInCart(item.productCode) + quantity) < item.product.variants[0].minimumItemsQuantity) {\r\n this.toastrService.show('minimum-items-quantity', { quantity: item.product.variants[0].minimumItemsQuantity })\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n calculateStockCounts = (item: CartItem, quantity) => {\r\n if (item.product.stock < item.quantity + quantity) {\r\n // this.toastrService.show('out-of-stock');\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n deleteCartItem = (item, toast = true) => {\r\n let id_buscado = this.findItemByIdVariant(item.variant_id)\r\n this.connection.delete(this.deleteItemApi(id_buscado)).subscribe(\r\n res => this.removeCartItem(res, item, toast),\r\n err => this.handleError(err)\r\n )\r\n }\r\n\r\n clearCart() {\r\n //solucion provisaoria\r\n let items = [...this.items]\r\n while (items && items.length > 0) {\r\n this.deleteCartItem(items.pop(), false)\r\n }\r\n //this.resetCart(this.getCart);\r\n }\r\n\r\n clearAndResetCart() {\r\n this.resetCart(this.getCart);\r\n }\r\n\r\n clearAndResetCustomerCart() {\r\n console.log(\"Clearing and reseting...\")\r\n this.resetCart(this.getCartByCustomer)\r\n }\r\n\r\n handleError = (error: { error: string }) => {\r\n this.toastrService.show('operation-error-param');\r\n this.requestInProcess.next(false);\r\n }\r\n\r\n getCountFromItemInCart = (codeVariant): number => this.items.find(item => item.variant_id == codeVariant)?.quantity || 0;\r\n\r\n findItemByIdVariant = (variant_id) => this.items.find(item => item.variant_id == variant_id).item_id\r\n\r\n findItem = (product_id) => this.items.find(item => item.product.id == product_id);\r\n\r\n /** DATA FOR OTHER SERVICES */\r\n getCartToken = () => this.cart_token;\r\n\r\n getLocale = () => this.locale;\r\n\r\n getTotalAmount = (): Observable<number> =>\r\n this.cart.pipe(map((cart) => cart?.totals?.total));\r\n\r\n getCountCartItems = (): Observable<number> =>\r\n this.cartItems.pipe(map((cartItems) => cartItems?.length));\r\n\r\n getTaxesAmount = (): Observable<number> =>\r\n this.cart.pipe(map((cart) => cart?.totals?.taxes > 0 ? cart?.totals?.taxes : 0));\r\n\r\n getSubTotalAmount = (): Observable<number> =>\r\n this.cart.pipe(map((cart) => cart?.totals?.items));\r\n\r\n toDecimal = (total) => (total - Math.floor(total) == 0) ? total / 100 : total\r\n\r\n getDiscount(): Observable<number> {\r\n return this.cartItems.pipe(map((product) => {\r\n let total = this.items.reduce((prev, curr) => {\r\n return prev + curr.product.saleprice * curr.quantity;\r\n }, 0);\r\n let subtotal = this.items.reduce((prev, curr) => {\r\n return prev + curr.product.price * curr.quantity;\r\n }, 0);\r\n return subtotal - total;\r\n }));\r\n }\r\n\r\n addCoupon = async (code): Promise<any> => {\r\n try {\r\n let result = await this.connection.put(this.couponApi(), { coupon: code }).toPromise();\r\n if (result.error || result.errors) return { error: true, message: 'invalid-coupon' };\r\n this.updateCartObj(result, false);\r\n return { error: false, message: 'ok' };\r\n } catch (e) {\r\n return { error: true, message: 'invalid-coupon' };\r\n }\r\n }\r\n\r\n removeCoupon = async () => this.connection.delete(this.couponApi()).pipe(map(res => this.updateCartObj(res, false))).toPromise();\r\n\r\n formatCoupon = (cart) => {\r\n let current_coupon = this.couponSubject.value;\r\n let coupon: CouponI = { code: cart.couponCode };\r\n try {\r\n const key = Object.keys(cart.cartDiscounts)[0];\r\n coupon = {\r\n ...coupon,\r\n amount: (cart.cartDiscounts && cart.cartDiscounts[key].amount.current) || 0,\r\n name: (cart.cartDiscounts && cart.cartDiscounts[key].name) || 'no-name'\r\n };\r\n } catch (e) { }\r\n (coupon != current_coupon) && this.couponSubject.next(coupon);\r\n }\r\n\r\n changeHaveToUpdate = (value) => this.have_to_update = value;\r\n\r\n readyForCheckout = (successCallback?: Function, errorCallback?: Function): CartAffordable => {\r\n let cart = this.cartSubject.value;\r\n let items = this.cartItemsSubject.value;\r\n let result: CartAffordable = { ok: true };\r\n if (items.length < this.channelConfig.minimumQuantityPurchaseItems) {\r\n result.ok = false; result.reasons.push({ message: 'not-enought-items' })\r\n }\r\n if (cart.totals.total < this.channelConfig.minimumPurchaseAmount) {\r\n result.ok = false; result.reasons.push({ message: 'not-enought-amount' })\r\n }\r\n if (successCallback || errorCallback) {\r\n result.ok\r\n ? successCallback && successCallback()\r\n : errorCallback && errorCallback();\r\n }\r\n return result;\r\n }\r\n\r\n updateItemsOnError = (itemsWithError: any[], code: string) => {\r\n // console.log(itemsWithError);\r\n // console.log(this.items);\r\n let itemsUpdated = this.items.map(item => {\r\n let itemWithError = itemsWithError.find(failedItem => item.item_id == failedItem.id);\r\n if (itemWithError) {\r\n item.failed = true;\r\n item.error = code;\r\n }\r\n return item;\r\n })\r\n // console.log(itemsUpdated);\r\n this.updateCartItems(itemsUpdated);\r\n }\r\n\r\n loadCartByToken = async (token: string) => {\r\n this.cart_token = token\r\n let result = await this.getCartByToken()\r\n return result\r\n }\r\n\r\n /**\r\n * UTILS\r\n */\r\n\r\n transformItems = (server_item) => server_item.map(\r\n item => {\r\n item = {\r\n product: item.product,\r\n variant_id: item.product.variants[0].code,\r\n quantity: item.quantity,\r\n item_id: item.id,\r\n total: item.total\r\n }\r\n // console.log(item.product.variants[0]);\r\n // console.log(item.product.variants[0].saleprice);\r\n // console.log(item.product.variants[0].price);\r\n // console.log(item.product.variants[0].saleprice > 0 ? item.product.variants[0].seleprice : item.product.variants[0].price);\r\n // setTimeout(() => {\r\n // item.product.price = item.total / item.quantity// ? item.product.variants[0].seleprice : item.product.variants[0].price;\r\n // }, 100);\r\n return item;\r\n }\r\n )\r\n \r\n}","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { ConnectionService } from '../../api/connection.service';\nimport { CartService } from '../cart.service';\nimport { ObservableError } from '../../interfaces/observable-error.interface';\nimport { Constants } from '../../core.consts';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrdersService {\n\n private ordersSubject: BehaviorSubject<any> = new BehaviorSubject(null);\n private errorSubject: BehaviorSubject<ObservableError> = new BehaviorSubject(null);\n private selectedOrderSubject: BehaviorSubject<any> = new BehaviorSubject(null);\n\n public orders$ = this.ordersSubject.asObservable();\n public error$ = this.errorSubject.asObservable();\n public selectedOrder$ = this.selectedOrderSubject.asObservable();\n\n private loading = false;\n\n ordersListapi = () => `shop-api/${this.consts.getChannel()}/orders`;\n\n constructor(private connection: ConnectionService, private cartService: CartService, private router: Router, private consts: Constants) {\n // this.updateOrders();\n }\n\n updateOrders = () => {\n this.loading = true;\n this.connection.get(this.ordersListapi())\n .pipe(\n map(res => {\n let orders = this.mapOrdersAndAddInfo(res);\n return orders;\n })\n )\n .subscribe(\n response => {\n this.ordersSubject.next(response);\n this.loading = false;\n },\n err => {\n this.errorSubject.next({ message: 'unable-get-orders' });\n }\n )\n }\n\n mapOrdersAndAddInfo = (orders) =>\n orders.map(order => {\n order.total = order.payments.reduce((a, b) => a + b.price.current, 0);\n return order;\n })\n\n setSelectedOrder = (order: any) => this.selectedOrderSubject.next(order);\n\n findOrder = (order_number) =>\n this.ordersSubject.value ? this.getOrderByNumber(order_number) : this.waitUntilOrders(order_number, this.getOrderByNumber);\n\n getOrderByNumber = (order_number) => {\n // El dia de mañana, cuando vengan paginadas y haya que preguntarle al servidor, se cambia este metodo\n const orders = this.ordersSubject.value;\n let order = orders.find(order => order.number == order_number)\n return order;\n }\n\n waitUntilOrders = (order_number, next) => {\n this.orders$.toPromise().then(orders => {\n if (!orders) {\n if (!this.loading) this.updateOrders();\n this.waitUntilOrders(order_number, next);\n }\n this.getOrderByNumber(order_number);\n })\n }\n\n reBuy(order) {\n // this.cartService.clearCart();\n order.items.map(item => {\n this.cartService.addToCart(this.formatProduct(item.product, item.product.discount), item.quantity, item.variant_id);\n });\n this.router.navigateByUrl('/cart');\n }\n\n formatProduct(product, discount) {\n let percentaje = parseFloat('0.' + discount.toString()).toFixed(2);\n product.price = product.variants[0].price;\n product.saleprice = (product.price - (product.price * parseFloat(percentaje)));\n product.options = {};\n product.variants[0].options.forEach(option => product.options = { ...product.options, ...option });\n return product;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ShipmentDataTransformer {\n\n getData = (method, response) => {\n switch(method) {\n case 'andreani': return response;\n case 'oca': return response.newDataSet;\n }\n }\n\n getApi = (method) => {\n switch(method) {\n case 'andreani': return 'https://api.andreani.com/v1/sucursales';\n case 'oca': return 'http://webservice.oca.com.ar/oep_tracking/Oep_Track.asmx/GetCentrosImposicion';\n }\n }\n\n constructor() { }\n\n appendShipmentExtra = (contract, data) => {\n let result: any = {}\n switch(contract) {\n case 'domicilio': result = { ...data }; break;\n // case 'sucursal': result = { ...data, codigo_sucursal: data. }; break;\n // case 'local': result = { ...data, codigo_local: data. }\n }\n if (contract == 'domicilio') {\n result = { ...data }\n } else {\n result = { codigo_sucursal: data.id }\n }\n return data;\n }\n\n // Andreni\n getMethodDetail = (method, branch) => {\n let result = '';\n branch.direccion.componentesDeDireccion.forEach(component => result += (component.meta + ' ' + component.contenido + ' '));\n return result;\n }\n\n transformAndreani = (response) => {\n let result = []\n response.forEach(element => {\n let data: any = {};\n data.name = element.descripcion;\n data.label = element.descripcion;\n data.latitude = element.geocoordenadas && element.geocoordenadas.latitud;\n data.longitude = element.geocoordenadas && element.geocoordenadas.longitud;\n data.atencion = element.horarioDeAtencion;\n data.address = element.direccion.componentesDeDireccion.map(data => data.contenido).join(' ');\n data.info = 'Sucursal ' + data.name + ' - ' + data.address + ' - ' + data.atencion;\n result.push(data);\n });\n return result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Store } from '../interfaces/store';\nimport { ConnectionService } from '../api/connection.service';\nimport { Constants } from '../core.consts';\nimport { catchError } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoresService {\n\n private storesSubject = new BehaviorSubject<Store[]>([]);\n public stores = this.storesSubject.asObservable();\n\n getAllStoresApi = () => 'shop-api/' + this.consts.getChannel() + '/stores';\n\n constructor(private connection: ConnectionService, private consts: Constants) {\n this.connection.get(this.getAllStoresApi()).toPromise().then(\n res => {\n res.length && this.storesSubject.next(res);\n !res.length && this.storesSubject.next(null);\n }\n )\n }\n}","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, of, Observable, Subscription } from 'rxjs';\nimport { take, tap, map } from 'rxjs/operators';\nimport { CartService } from '../cart.service';\nimport { Constants } from '../../core.consts';\nimport { CheckoutProcessState } from '../../classes/checkout-process-state';\nimport { ShipmentDataTransformer } from '../../utils/shipment-transformer.service';\nimport { ConnectionService } from '../../api/connection.service';\nimport { StoresService } from '../stores.service';\nimport { CheckoutService } from './checkout.service';\nimport { StepService } from '../../classes/checkout/step-service';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AnalyticsService } from '../analytics.service';\n\n@Injectable()\nexport class ShipmentService extends StepService {\n\n private stateSubject = new BehaviorSubject<CheckoutProcessState>({ doing: false, ok: false, data: null });\n private methodsSubject = new BehaviorSubject<any>([]);\n private costsSubject = new BehaviorSubject<any>([]);\n private subscription: Subscription;\n \n public order;\n \n private baseApi = () => 'shop-api/' + this.consts.getChannel() + '/' + 'checkout/' + this.cartService.getCartToken();\n \n public state = this.stateSubject.asObservable();\n public methods = this.methodsSubject.asObservable();\n public costs = this.costsSubject.asObservable();\n\n\n /**\n * @param moreInfoInMethod por defecto su estado es false, si se desea que visualice información adicional de cada método de envió asignar true.\n */\n public moreInfoInMethod = false;\n \n\n public shipmentMethodsApi = () => this.baseApi() + '/shipping';\n\n public persistShipmentApi = () => 'shop-api/' + this.consts.getChannel() + '/andreani/' + this.cartService.getCartToken() + '/ship';\n public putShipmentApi = () => this.baseApi() + '/shipping/' + this.stateSubject.getValue().data.method;\n public putContractApi = () => 'shop-api/' + this.consts.getChannel() + '/checkout/' + this.cartService.getCartToken() + '/shipping-contract';\n public calculatedCostsApi = () => 'shop-api/' + this.consts.getChannel() + '/carts/' + this.cartService.getCartToken() + '/multiple-estimated-shipping-cost';\n\n constructor(private connection: ConnectionService, private transformer: ShipmentDataTransformer, private analyticsService: AnalyticsService,\n private consts: Constants, private cartService: CartService, private storesService: StoresService, private checkoutService: CheckoutService) {\n super(checkoutService);\n }\n\n getShipmentMethods = () => {\n // this.connection.get(this.shipmentMethodsApi()).toPromise().then(\n // res => this.methodsSubject.next(this.responseToList(res))\n // ).catch(err => this.methodsSubject.next([]))\n this.connection.getErrorNotHandler(this.shipmentMethodsApi()).toPromise().then(\n res => {\n this.methodsSubject.next(this.responseToList(res))\n },\n err => {\n this.methodsSubject.next([])\n }\n ).catch(err => {\n this.methodsSubject.next([])\n })\n }\n\n setMethod = async (method) => {\n this.costsSubject.next([]);\n this.stateSubject.next({ doing: true, ok: false, data: { method } });\n this.putShipment().then(\n async res => {\n this.checkoutService.updateAsociatedData(res);\n this.order = res;\n const costs = await this.getCalculatedCosts();\n this.modifyCostsResponse(costs, this.getUserData().shippingAddress.postcode, method);\n },\n err => {\n return new Promise((resolve,reject) => reject(new Error(err.error)))\n }\n ).catch(err => console.error(err))\n }\n\n private putShipment = () => this.connection.put(this.putShipmentApi(), { method: this.stateSubject.getValue().data.method }).toPromise();\n\n getCalculatedCosts = () => this.connection.get(this.calculatedCostsApi()).toPromise();\n\n setContract = async (contract: any) => {\n const data = { ...contract, ...this.otherParamsForContract(contract) };\n return await this.connection.put(this.putContractApi(), data)\n .toPromise().then(\n order => {\n this.analyticsService.callEvent('shipping_info', order);\n return this.setStepReady(data, order)},\n err => {\n return new Promise((resolve, reject) => reject(new Error(err.error)))\n }\n ).catch(err => console.error(err))\n }\n\n ngOnDestroy() {\n this.subscription && this.subscription.unsubscribe();\n }\n\n // UTILS\n\n /**\n * @param response De api de solicitud de costos por metodo de envío seleccionado\n * @param post_code Indicado en el paso de Addressing (datos personales y de facturación)\n * @param method Metodo de envío seleccionado\n */\n modifyCostsResponse = async (response, post_code, method) => {\n response = response.multiplePrices;\n let branch_delivery = response.findIndex(submethod => submethod.name == 'branch_delivery');\n if (branch_delivery != -1) {\n response[branch_delivery].contracts = response[branch_delivery].contracts.map(contract => {\n let branch_property = contract.branch_property || {};\n let address_data = branch_property.address || {};\n return {\n contract: 'branch_delivery',\n name: contract.name,\n price: contract.price,\n ...address_data,\n ...branch_property,\n computed: (address_data.street || '') + ' N° ' + (address_data.number || '')\n };\n });\n this.costsSubject.next(response);\n }\n if (method == 'pickup_store') {\n let final_method_data = response;\n this.subscription = this.storesService.stores.subscribe(stores => {\n if (stores.length) {\n final_method_data.forEach(pickup_store => {\n pickup_store.contracts.forEach(contract => {\n const current_store = stores.find(store => store.code == contract.name);\n if (!current_store) contract.detail = 'Sin información';\n else contract.detail = current_store.name + ' - ' + current_store.address;\n return contract;\n })\n })\n this.costsSubject.next(final_method_data);\n }\n })\n } else {\n this.costsSubject.next(response);\n }\n }\n\n responseToList = (response) =>\n (response.shipments && response.shipments.length > 0) && Object.keys(response.shipments[0].methods).map(key => response.shipments[0].methods[key]);\n\n otherParamsForContract = (contract) => {\n return {\n shipping_method_contract:\n contract.shipping_method_contract\n ? contract.shipping_method_contract\n : contract.contract + '_' + contract.name,\n shipping_method_branch_code:\n contract.shipping_method_branch_code\n ? contract.shipping_method_branch_code\n : (contract.contract && contract.contract == \"branch_delivery\") ? contract.number : contract.name\n }\n }\n\n getBranchOffices = (method) => this.connection.getOutsider(this.transformer.getApi(method.toLowerCase())).toPromise();\n\n formatUnnecesaryDocument = (data) => {\n if (data.shippingAddress?.documentNumber?.length == 0) {\n data.shippingAddress.documentNumber = '00000000'\n }\n if (data.shippingAddress?.documentType?.length == 0) {\n data.shippingAddress.documentType = 'XXX'\n }\n if (data.billingAddress && data.billingAddress.documentNumber?.length == 0) {\n data.billingAddress.documentNumber = '00000000'\n }\n if (data.billingAddress && data.billingAddress.documentType?.length == 0) {\n data.billingAddress.documentType = 'XXX'\n }\n return data\n }\n}\n","import { Injectable } from '@angular/core';\nimport { OptionsOfProductListInterface } from '../interfaces/choose-options/options-of-product-list';\nimport { FilterOptionTypes } from '../interfaces/choose-options/filter-option';\n\n@Injectable()\nexport class OptionsOfProductListDataReceiverService {\n constructor() { }\n\n getData(): OptionsOfProductListInterface {\n return {\n sortOptions: [\n {\n name: 'Alphabetical order',\n value: 'name',\n type: FilterOptionTypes.oneSelect,\n selectedOption: null,\n options: [\n {\n name: 'Ascendancy',\n value: 'asc',\n selected: false,\n },\n {\n name: 'Descendant',\n value: 'desc',\n selected: false,\n }\n ]\n },\n {\n name: 'Created date',\n value: 'createdAt',\n type: FilterOptionTypes.oneSelect,\n selectedOption: null,\n options: [\n {\n name: 'Oldest first',\n value: 'asc',\n selected: false,\n },\n {\n name: 'Newest first',\n value: 'desc',\n selected: false,\n }\n ]\n },\n {\n name: 'Price',\n value: 'price',\n type: FilterOptionTypes.oneSelect,\n selectedOption: null,\n options: [\n {\n name: 'Cheapest first',\n value: 'asc',\n selected: false,\n },\n {\n name: 'Most expensive first',\n value: 'desc',\n selected: false,\n }\n ]\n },\n ],\n filterOptions: [\n {\n name: 'Vigencia',\n value: 'enabled',\n type: FilterOptionTypes.oneSelect,\n selectedOption: null,\n options: [\n {\n name: 'Habilitados',\n value: 'true',\n selected: false,\n },\n {\n name: 'Deshabilitados',\n value: 'false',\n selected: false,\n }\n ]\n }\n ],\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { AuthService } from './auth.service';\nimport { BehaviorSubject } from 'rxjs';\nimport { CheckoutProcessState } from '../classes/checkout-process-state';\n\n@Injectable()\nexport class DataformService {\n\n private stateSubject = new BehaviorSubject<CheckoutProcessState>({ doing: false, ok: false, data: null });\n\n public state = this.stateSubject.asObservable();\n public checkoutForm : FormGroup;\n\n constructor(private fb: FormBuilder, private authService: AuthService) {\n this.checkoutForm = this.fb.group({\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n email: ['', [Validators.required, Validators.email]],\n documentType: ['', [Validators.required]],\n documentNumber: ['', [Validators.required]],\n street: ['', [Validators.required, Validators.maxLength(50)]],\n countryCode: ['', Validators.required],\n city: ['', Validators.required],\n provinceName: ['', Validators.required],\n postcode: ['', Validators.required]\n });\n\n this.authService.getUserProfile().subscribe(\n res => this.checkoutForm.patchValue(res.toForm())\n )\n }\n\n isValid = () => this.checkoutForm.valid;\n\n change = () => {\n this.checkoutForm.valid ? this.stateSubject.next({ doing: false, ok: true, data: this.checkoutForm.value }) \n : this.stateSubject.next({ doing: true, ok: false, data: null })\n }\n}","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../../api/connection.service';\nimport { Constants } from '../../core.consts';\nimport { IBlock } from '../../interfaces/block';\n\nexport interface BlockInfo {\n section: string,\n blocks: IBlock[]\n}\n\n@Injectable()\nexport class BlocksRepositoryService {\n\n private data: BlockInfo[] = [];\n\n blocksAPI = (section) => 'cms/' + this.consts.getChannel() + '/blocks/section/' + section + '?locale=' + this.consts.getLocale();\n\n constructor(private consts: Constants, private connection: ConnectionService) {\n this.consts.getBlocksCacheTime() && setInterval(this.restartBlocks, this.consts.getBlocksCacheTime());\n }\n\n getBlocks = async (section) : Promise<IBlock[]> => this.hasSectionBlocks(section)?.blocks || this.connection.get(this.blocksAPI(section))\n .toPromise().then(\n res => this.appendBlock(res.items, section) && res.items,\n err => new Promise((resolve, reject) => reject()) // Va por callback error, el servicio define el valor a setear\n ).catch(err => new Promise((resolve,reject) => reject(new Error(null)))); //Queda pendiente ver como manejar el error de este lado\n\n hasSectionBlocks = (section) => this.data.find(block_info => block_info.section == section);\n\n appendBlock = (blocks : IBlock[], section) => {\n const new_block = { section, blocks };\n this.data.push(new_block);\n return true;\n }\n\n restartBlocks = () => this.data = [];\n}","import { Injectable } from '@angular/core';\nimport { Constants } from '../../core.consts';\nimport { BehaviorSubject } from 'rxjs';\nimport { ConnectionService } from '../../api/connection.service';\nimport { BlocksRepositoryService } from './blocks-repository.service';\n\n\n/**\n * @description Servicio de manejo de Bloques. Cada sección posee N bloques asociados, ordenados por posición y con tu tipo y datos correspondientes\n * (chequear interfaz de IBlock)\n */\n@Injectable()\nexport class BlocksService {\n\n private blocksSubject = new BehaviorSubject<any[]>([]);\n\n public blocks = this.blocksSubject.asObservable();\n\n blocksAPI = (section) => 'cms/' + this.consts.getChannel() + '/blocks/section/' + section + '?locale=' + this.consts.getLocale();\n contactFormResponseAPI = () => 'cms/' + this.consts.getLocale() + '/contact-form/response';\n\n constructor(private consts: Constants, private connection: ConnectionService,\n private blocksRepo: BlocksRepositoryService) { }\n\n getBlocks = (section) => {\n this.blocksRepo.getBlocks(section).then(\n res => this.blocksSubject.next(this.orderedAndModified(res)),\n err => this.blocksSubject.next(null)\n )\n }\n\n orderedAndModified = (result) => {\n let result_ordered = result.sort((a, b) => a.priority - b.priority);\n return (result_ordered.length ? result_ordered : null);\n }\n\n getBlockByCode = (code) =>\n this.blocksSubject.value && this.blocksSubject.value.find(block => block.code == code);\n\n // getBannerImage = (banner) => (this.consts.mobile() && banner.mobileImageName && banner.mobileImageName != '') ? banner.mobileImageName : banner.imageName;\n getBannerImage = (banner) =>\n (this.consts.mobile() && banner.translations[this.consts.getLocale()].mobileImageName && banner.translations[this.consts.getLocale()].mobileImageName != '')\n ? banner.translations[this.consts.getLocale()].mobileImageName\n : banner.translations[this.consts.getLocale()].imageName;\n\n getImage = (banner) => (this.consts.mediaBannerUrl() +\n (this.consts.mobile() && banner.translations[this.consts.getLocale()].mobileImageName && banner.translations[this.consts.getLocale()].mobileImageName != '')\n ? banner.translations[this.consts.getLocale()].mobileImageName\n : banner.translations[this.consts.getLocale()].imageName)\n\n formUrl = (banner) => {\n let resultado = \"/\";\n const element = (banner.redirectionType == 'attribute' ? 'attributes' : 'categories');\n try {\n let asociacion = banner[(element == 'categories' ? 'taxons' : element)];\n asociacion = asociacion.length && asociacion[0];\n if (asociacion) resultado = '/collection/' + element + '/' + (asociacion.slug || asociacion.translations[this.consts.getLocale()].slug);\n } catch (e) {\n }\n return resultado;\n }\n\n sendResponse = (response_obj) =>\n this.connection.post(this.contactFormResponseAPI(), this.prepareData(response_obj));\n\n prepareData = (obj) => {\n // Para el futuro, cuando haya que toquetear antes de mandar\n // attachmentFile\n return obj;\n }\n}","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class UtilsService {\n\n constructor() { }\n\n titleCaseWord(word: string) {\n if (!word) return word;\n return word[0].toUpperCase() + word.substr(1).toLowerCase();\n }\n}","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class PaymentUtils {\n\n constructor() {}\n\n private mp_error_codes = {\n 'pending_contingency': 'Estamos procesando el pago. En menos de 2 días hábiles te enviaremos por e-mail el resultado.',\n 'pending_review_manual': 'Estamos procesando el pago. En menos de 2 días hábiles te diremos por e-mail si se acreditó o si necesitamos más información.',\n 'cc_rejected_bad_filled_card_number': 'Revisa el número de tarjeta.',\n 'cc_rejected_bad_filled_date': \t'Revisa la fecha de vencimiento.',\n 'cc_rejected_bad_filled_other': \t'Revisa los datos.',\n 'cc_rejected_bad_filled_security_code': \t'Revisa el código de seguridad.',\n 'cc_rejected_blacklist': \t'No pudimos procesar tu pago.',\n 'cc_rejected_call_for_authorize': \t'Debes autorizar ante payment_method_id el pago de amount a Mercado Pago',\n 'cc_rejected_card_disabled': \t'Llama a payment_method_id para que active tu tarjeta. El teléfono está al dorso de tu tarjeta.',\n 'cc_rejected_card_error': \t'No pudimos procesar tu pago.',\n 'cc_rejected_duplicated_payment': \t'Ya hiciste un pago por ese valor. Si necesitas volver a pagar usa otra tarjeta u otro medio de pago.',\n 'cc_rejected_high_risk': \t'Tu pago fue rechazado. Elige otro de los medios de pago, te recomendamos con medios en efectivo.',\n 'cc_rejected_insufficient_amount': \t'Tu payment_method_id no tiene fondos suficientes.',\n 'cc_rejected_invalid_installments': \t'El metodo de pago no procesa pagos en cuotas.',\n 'cc_rejected_max_attempts': \t'Llegaste al límite de intentos permitidos. Elige otra tarjeta u otro medio de pago.',\n 'cc_rejected_other_reason': \t'No procesó el pago.'\n }\n\n getErrorMessage = (code) => this.mp_error_codes[code];\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthGuardService implements CanActivate {\n\n constructor(private auth: AuthService, private router: Router) { }\n\n canActivate(routeSnapshot: ActivatedRouteSnapshot): boolean {\n const redirectTo = routeSnapshot.data.redirectTo || '/'\n\n if (!this.auth.isAuthenticated())\n this.router.navigateByUrl(redirectTo)\n\n return this.auth.isAuthenticated()\n }\n\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AbleBuyerGuardService implements CanActivate {\n\n constructor(private auth: AuthService, private router: Router) { }\n\n canActivate(routeSnapshot: ActivatedRouteSnapshot): boolean {\n const redirectTo = routeSnapshot.data.redirectSellerTo || '/'\n\n if (!this.auth.isAbleToBuy())\n this.router.navigateByUrl(redirectTo)\n\n return this.auth.isAbleToBuy()\n }\n\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserRoleGuardService implements CanActivate {\n\n constructor(private auth: AuthService, private router: Router) { }\n\n canActivate(routeSnapshot: ActivatedRouteSnapshot): boolean {\n const redirectTo = routeSnapshot.data.redirectTo || '/'\n const authorizedRoles = routeSnapshot.data.authorizedRoles || []\n\n if (!authorizedRoles.includes(this.auth.getUserProfileAsUser()?.typeUser))\n this.router.navigateByUrl(redirectTo)\n\n return this.auth.isAuthenticated()\n }\n\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\n\n@Injectable({\n providedIn: 'root'\n })\nexport class LoggedInGuard implements CanActivate { \n \n constructor(private auth: AuthService, public router: Router) {} \n \n canActivate(): boolean {\n if (!this.auth.isAuthenticated()) {\n this.router.navigate(['/login']);\n }\n return this.auth.isAuthenticated();\n }\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\nimport { CheckoutService } from '../services/checkout/checkout.service';\n\n@Injectable({\n providedIn: 'root'\n })\nexport class CheckoutReadyGuard implements CanActivate { \n \n constructor(private router: Router, private checkoutService: CheckoutService) {} \n \n canActivate(): boolean {\n if (!this.checkoutService.isCheckoutReady()) {\n this.router.navigate(['/']);\n }\n return this.checkoutService.isCheckoutReady();\n }\n}","import { Injectable, Injector } from \"@angular/core\";\nimport {\n HttpEvent, HttpInterceptor, HttpHandler,\n HttpRequest, HttpErrorResponse\n} from \"@angular/common/http\";\nimport { throwError, Observable, of } from \"rxjs\";\nimport { catchError } from \"rxjs/operators\";\nimport { AuthService } from '../services/auth.service';\nimport { Constants } from \"../core.consts\";\nimport { ErrorHandlerService } from \"../services/checkout/error-handler.service\";\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n constructor(\n private injector: Injector\n ) { }\n\n intercept(\n req: HttpRequest<any>,\n next: HttpHandler,\n ): Observable<HttpEvent<any>> {\n \n if (this.injector.get(AuthService).isAuthenticated()\n && req.url.includes(this.injector.get(Constants).getUrlBase())\n && !req.url.includes('shop-api/login_check')) {\n\n let headers = {\n setHeaders: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.injector.get(AuthService).getToken()}`,\n },\n }\n\n if (req.url.includes('contact-form/response'))\n delete headers.setHeaders[\"Content-Type\"]\n\n /* if (this.injector.get(AuthService).getCustomer())\n delete headers.setHeaders[\"Authorization\"] */\n\n let authReq: HttpRequest<any> = req.clone(headers)\n \n return next.handle(authReq).pipe(catchError(catchErr => this.handleErrors(catchErr)));\n }\n return next.handle(req).pipe(catchError(catchErr => this.handleErrors(catchErr)));\n }\n\n private handleErrors(err: HttpErrorResponse): Observable<any> {\n if (err.status === 403) {\n this.injector.get(AuthService).doLogoutUser()\n return of(err);\n }\n if (err.status === 450 || err.status === 401) {\n this.injector.get(ErrorHandlerService).handlerErrorResponse(err.error)\n return of(err.error);\n }\n return throwError(err);\n }\n}\n","import { Injectable, Injector } from \"@angular/core\";\nimport {\n HttpEvent, HttpInterceptor, HttpHandler,\n HttpRequest, HttpErrorResponse, HttpHeaders, HttpClient\n} from \"@angular/common/http\";\nimport { Router } from '@angular/router';\nimport { throwError, Observable, BehaviorSubject, of } from \"rxjs\";\nimport { catchError, filter, take, switchMap } from \"rxjs/operators\";\nimport { AuthService } from '../services/auth.service';\nimport { Constants } from \"../core.consts\";\nimport { ErrorHandlerService } from \"../services/checkout/error-handler.service\";\nimport { BodyError } from \"../interfaces/checkout/checkout-error\";\nimport { ToastService } from \"../utils/toast.service\";\n\n@Injectable()\nexport class CustomerInterceptor implements HttpInterceptor {\n\n constructor(\n private injector: Injector\n ) { }\n\n intercept(\n req: HttpRequest<any>,\n next: HttpHandler,\n ): Observable<HttpEvent<any>> {\n\n const customer = this.injector.get(AuthService).getCustomer()\n\n if (customer) {\n\n const headers = {\n setHeaders: {\n 'customer': String(customer.id)\n }\n }\n\n let authReq: HttpRequest<any> = req.clone(headers)\n\n return next.handle(authReq).pipe(catchError(catchErr => this.handleErrors(catchErr)));\n }\n return next.handle(req).pipe(catchError(catchErr => this.handleErrors(catchErr)));\n }\n\n private handleErrors(err: HttpErrorResponse): Observable<any> {\n if (err.status === 403) {\n this.injector.get(AuthService).doLogoutUser()\n return of(err);\n }\n if (err.status === 450 || err.status === 401) {\n this.injector.get(ErrorHandlerService).handlerErrorResponse(err.error)\n return of(err.error);\n }\n return throwError(err);\n }\n\n}","import { Injectable } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { CheckoutService } from \"../services/checkout/checkout.service\";\n\nexport class ComponentHelper {\n\n constructor() {\n this.ecOnConstruct()\n }\n\n ecOnInit = (params = {}) => {\n\n }\n\n ecOnConstruct = (params = {}) => {\n\n }\n\n hasParams = (params, searched) => params && params != null && params.find(param => param.code?.toLowerCase().includes(searched.toLowerCase()));\n\n navigateOnRouter(router : Router,url: string) {\n router.navigateByUrl(`/${url}`);\n }\n}","import { Injectable, Renderer2, Inject, RendererFactory2 } from '@angular/core';\nimport { ConnectionService } from '../api/connection.service';\nimport { Constants } from '../core.consts';\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\nimport { Parameter } from '../interfaces/parameters';\nimport { DOCUMENT } from '@angular/common';\nimport { Script } from '../interfaces/Script';\nimport { FacebookPixelService } from '../utils/analytics/facebook-pixel.service';\nimport { AnalyticEventKey } from '../interfaces/analytics/event-key.model';\nimport { GoogleAnalyticsService } from '../utils/analytics/google-analytics.service';\nimport { AnalyticsService } from './analytics.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ParametersService {\n\n private parametersSubject = new BehaviorSubject<Parameter[]>(null);\n private readyParamsSubject = new ReplaySubject<boolean>(1);\n\n public parameters = this.parametersSubject.asObservable();\n public ready$ = this.readyParamsSubject.asObservable();\n\n getAllParametersAPI = () => 'shop-api/' + (this.constants.getMasterChannel() || this.constants.getChannel()) + '/parameters';\n\n constructor(private connection: ConnectionService, private constants: Constants,\n private analyticsService: AnalyticsService) {\n this.connection.get(this.getAllParametersAPI()).toPromise().then(res => {\n this.parametersSubject.next(res);\n this.readyParamsSubject.next(true);\n })\n }\n\n insertAnalitycs = () => {\n this.parametersSubject.value\n ? this.constants.onlyIfProduction(this.initializeAnalytics, this.parametersSubject.value)\n : this.waitUntilData(this.initializeAnalytics)\n }\n\n private initializeAnalytics = (params) => {\n\n let facebook = params.find(param => param.code.includes(\"_\" + this.constants.getChannel() + \"_\") && param.code.includes('facebook') && param.code.includes('id'));\n !facebook && (facebook = params.find(param => param.code.includes('facebook') && param.code.includes('id')));\n facebook && this.analyticsService.initializeFacebook(facebook.value);\n\n let google = params.find(param => param.code.includes(\"_\" + this.constants.getChannel() + \"_\") && param.code.includes('google') && param.code.includes('id'));\n !google && (google = params.find(param => param.code.includes('google') && param.code.includes('id')));\n google && this.analyticsService.initializeGoogle(google.value);\n\n let gtm = params.find(param => param.code.includes(\"_\" + this.constants.getChannel() + \"_\") && param.code.includes('gtm') && param.code.includes('id'));\n !gtm && (gtm = params.find(param => param.code.includes('gtm') && param.code.includes('id')));\n gtm && this.analyticsService.initializeGTM(gtm.value);\n\n let metricool = params.find(param => param.code.includes(\"_\" + this.constants.getChannel() + \"_\") && param.code.includes('metricool') && param.code.includes('id'));\n !metricool && (metricool = params.find(param => param.code.includes('metricool') && param.code.includes('id')));\n metricool && this.analyticsService.initializeMetricool(metricool.value);\n\n let doppler = params.find(param => param.code.includes(\"_\" + this.constants.getChannel() + \"_\") && param.code.includes('doppler') && param.code.includes('id'));\n !doppler && (doppler = params.find(param => param.code.includes('doppler') && param.code.includes('id')));\n doppler && this.analyticsService.initializeDoppler(doppler.value);\n\n }\n\n private waitUntilData = (next) => {\n const subscription = this.parameters.subscribe(res => {\n if (res) {\n this.insertAnalitycs();\n subscription.unsubscribe();\n }\n });\n }\n\n}","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { AuthService } from '../../services/auth.service';\nimport { ParametersService } from '../../services/parameters.service';\n\n@Component({\n selector: 'app-account-ec',\n templateUrl: 'account-ec.component.html',\n styleUrls: ['account-ec.component.scss']\n})\nexport class AccountEcComponent extends ComponentHelper {\n\n public params = null\n\n constructor(protected authService: AuthService, public router: Router, public paramsService: ParametersService ) {\n super();\n this.paramsService.parameters.subscribe(p => {\n this.params = p\n })\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n logout = () => {\n this.authService.logout();\n this.router.navigateByUrl('/home');\n }\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { Banner } from '../../../interfaces/block';\nimport { BlocksService } from '../../../services/blocks/blocks.service';\n// import { OwlOptions } from 'ngx-owl-carousel-o';\n\nexport type ColumnSize = 'col-md-8' | 'col-md-4' | 'col-md-12'\n\n@Component({\n selector: 'app-block-banner-boxes-ec',\n templateUrl: './block-banner-boxes-ec.component.html',\n styleUrls: ['./block-banner-boxes-ec.component.scss']\n})\nexport class BlockBannerBoxesEcComponent extends ComponentHelper implements OnInit {\n @Input() banners: Banner[];\n @Input() meta: any;\n\n protected big_ones = [0, 3, 4, 7, 8, 11, 12, 15, 16];\n\n constructor(public blocksService: BlocksService, protected consts: Constants) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.banners = this.banners.map(\n banner => { return { ...banner, ...banner.translations[this.consts.getLocale()] } }\n );\n this.meta = { ...this.meta, ...this.meta.translations[this.consts.getLocale()] }\n this.ecOnInit()\n }\n\n getImage = (banner) => this.blocksService.getBannerImage(banner);\n\n formUrl = (banner) => this.blocksService.formUrl(banner);\n\n columnSize = (i): ColumnSize => {\n if (!this.consts.mobile()) {\n if (this.big_ones.includes(i)) return 'col-md-8';\n else if (!((i + 1) == this.banners.length)) return 'col-md-4';\n else if (((i + 1) == this.banners.length) && this.esImpar(i)) return 'col-md-4';\n }\n return 'col-md-12';\n }\n\n esImpar = (number) => (number % 2) == 1;\n \n boxesInlcudesCode = (box: string) => this.meta.code.toUpperCase().includes(box.toUpperCase())\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { BlocksService } from '../../../services/blocks/blocks.service';\n\ndeclare var $: any;\n\n@Component({\n selector: 'app-block-banner-full-ec',\n templateUrl: './block-banner-full-ec.component.html',\n styleUrls: ['./block-banner-full-ec.component.scss']\n})\nexport class BlockBannerFullEcComponent extends ComponentHelper implements OnInit {\n\n @Input() banners;\n @Input() meta: any;\n\n public options: any;\n\n constructor(public blocksService: BlocksService, protected consts: Constants, public router: Router) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.banners = this.banners.map(\n banner => { return { ...banner, ...banner.translations[this.consts.getLocale()] } }\n );\n this.ecOnInit()\n\n }\n\n getImage = (banner) => this.blocksService.getBannerImage(banner);\n\n formUrl = (banner) => this.blocksService.formUrl(banner);\n\n handlePage(page: string) {\n return this.router.url.includes(page);\n }\n\n}\n","import { Component, Input, OnInit, OnChanges } from '@angular/core';\n// import { ToastService, Constants, BlocksService } from 'ng-easycommerce';\nimport { Router } from '@angular/router';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ToastService } from '../../../utils/toast.service';\nimport { BlocksService } from '../../../services/blocks/blocks.service';\nimport { Constants } from '../../../core.consts';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-block-form-contact-ec',\n templateUrl: 'block-form-contact-ec.component.html',\n styleUrls: ['block-form-contact-ec.component.scss']\n})\nexport class BlockFormContactEcComponent extends ComponentHelper implements OnInit, OnChanges {\n\n @Input() block;\n @Input() success_message;\n @Input() redirect = true;\n @Input() subject?;\n public contact_form: FormGroup;\n public newsletter_form: FormGroup;\n protected form_data: any = new FormData();\n\n constructor(protected toastrService: ToastService, public router: Router, public consts: Constants,\n public formBuilder: FormBuilder, protected blocksService: BlocksService) {\n super();\n this.contact_form = this.formBuilder.group({\n name: ['', []],\n email: ['', Validators.required],\n telephone: ['', []],\n subject: ['', []],\n body: ['', []],\n attachment: [''],\n captcha: ['', Validators.required],\n })\n this.newsletter_form = this.formBuilder.group({\n email: ['', Validators.required],\n })\n this.ecOnConstruct()\n }\n\n sendForm = (form, success_message) => {\n if (form.valid && (form.value.email.includes('@'))) {\n const formData = new FormData();\n formData.append('mailText', form.value.body)\n formData.append('form_code', this.block.code)\n this.sendValue('name') && formData.append('name', this.contact_form.get('name').value)\n this.sendValue('email') && formData.append('email', this.contact_form.get('email').value)\n this.sendValue('telephone') && formData.append('telephone', this.contact_form.get('telephone').value)\n this.sendValue('subject') && formData.append('subject', this.contact_form.get('subject').value)\n this.sendValue('body') && formData.append('body', this.contact_form.get('body').value)\n this.sendValue('attachments') && formData.append('attachment', this.contact_form.get('attachment').value)\n this.blocksService.sendResponse(formData).toPromise().then(\n res => {\n this.contact_form.reset()\n this.toastrService.show(this.success_message || success_message);\n this.redirect && this.router.navigateByUrl('/home');\n },\n err => {\n this.toastrService.show('inquiry-error');\n }\n );\n } else {\n this.toastrService.show('invalid-form');\n }\n }\n\n uploadFile(event) {\n if (event.target.files.length > 0) {\n const file = event.target.files[0];\n this.contact_form.get('attachment').setValue(file);\n }\n }\n\n ngOnChanges() { }\n\n ngOnInit() {\n this.block = { ...this.block, ...this.block.translations[this.consts.getLocale()] };\n this.subject && this.setSubject();\n this.ecOnInit()\n }\n\n setSubject = () => {\n this.contact_form.setValue({\n ...this.contact_form.value,\n subject: this.subject\n });\n }\n\n resolved(captchaResponse: string) {\n this.form_data.catpcha = captchaResponse;\n }\n\n subscribe = () => {\n // PEDIR AL SERVICIO SE LO SUBSCRIBA, Y RESPONDA SI LO SUBSCRIBIÓ O YA ESTABA SUBSCRIPTO\n }\n\n toastNewsletterForm = (e) => {\n e.preventDefault();\n this.sendForm(this.newsletter_form, 'newsletter-thanks');\n }\n\n toastCompleteForm = (e) => {\n e.preventDefault();\n this.sendForm(this.contact_form, 'inquiry-sent');\n }\n\n\n sendValue = (key) => {\n try {\n let keysearch = key[0].toUpperCase() + key.slice(1).toLowerCase();\n return this.block && this.block['send' + keysearch] || false\n } catch (error) {\n console.error(error);\n return false\n }\n }\n\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-block-html-ec',\n templateUrl: './block-html-ec.component.html',\n styleUrls: ['./block-html-ec.component.scss'],\n})\nexport class BlockHtmlEcComponent extends ComponentHelper implements OnInit {\n\n @Input() html_content;\n\n constructor(protected sanitizer: DomSanitizer) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.html_content = this.sanitizer.bypassSecurityTrustHtml(this.html_content);\n this.ecOnInit()\n\n }\n\n}\n","import { Component, Inject, Input, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { BlockType } from '../../../interfaces/block';\nimport { BlocksService } from '../../../services/blocks/blocks.service';\nimport { ParametersService } from '../../../services/parameters.service';\nimport { ToastService } from '../../../utils/toast.service';\n\n@Component({\n selector: 'app-contact-form-news-ec',\n templateUrl: './contact-form-news-ec.component.html',\n styleUrls: ['./contact-form-news-ec.component.scss'],\n providers: [BlocksService]\n})\nexport class ContactFormNewsEcComponent extends ComponentHelper implements OnInit {\n\n @Input() block;\n @Input() complete = false;\n @Input() success_message;\n @Input() subject?;\n @Input() codeBlock = 'newsletter_block'\n\n public blocks: BlockType[] = [];\n public blockContact: any = null;\n\n public contact_form: FormGroup;\n public newsletter_form: FormGroup;\n protected form_data: any = {};\n\n constructor(protected toastrService: ToastService, public router: Router, public consts: Constants, public paramsService: ParametersService,\n public formBuilder: FormBuilder, protected blocksService: BlocksService, @Inject('env') public env ) {\n super();\n this.newsletter_form = this.formBuilder.group({\n name: ['', []],\n email: ['', Validators.required],\n telephone: ['', []],\n subject: ['', []],\n body: ['', []],\n captcha: ['', []],\n terms: ['', Validators.required],\n })\n this.ecOnConstruct()\n\n }\n\n sendForm = (form, success_message) => {\n if (form.valid && (form.value.email.includes('@'))) {\n const formData = new FormData();\n formData.append('form_code', this.block.code)\n this.sendValue('name') && formData.append('name', form.get('name').value)\n this.sendValue('email') && formData.append('email', form.get('email').value)\n this.sendValue('telephone') && formData.append('telephone', form.get('telephone').value)\n this.sendValue('subject') && formData.append('subject', form.get('subject').value)\n this.sendValue('body') && formData.append('body', form.get('body').value)\n this.sendValue('attachments') && formData.append('attachment', form.get('attachment').value)\n this.blocksService.sendResponse(formData).toPromise().then(\n res => {\n this.newsletter_form.reset()\n this.toastrService.show(this.success_message || success_message);\n },\n err => {\n this.toastrService.show('inquiry-error');\n }\n );\n } else {\n this.toastrService.show('invalid-form');\n }\n }\n\n ngOnChanges() {\n }\n\n ngOnInit() {\n if (!this.block) {\n this.blocksService.getBlocks('home') ;\n this.blocksService.blocks.pipe(filter((blocks) => (blocks && blocks.length > 0))).subscribe(blocks => {\n this.block = this.blocksService.getBlockByCode(this.codeBlock);\n if (this.block.contactForm) {\n this.block = this.block.contactForm\n }\n this.block = { ...this.block, ...this.block.translations[this.consts.getLocale()] };\n\n this.subscribeBlockNews(this.block);\n\n }) \n }else{\n this.block = { ...this.block, ...this.block.translations[this.consts.getLocale()] };\n }\n this.subject && this.setSubject();\n this.ecOnInit()\n }\n\n subscribeBlockNews = (block: any) => {\n \n }\n\n setSubject = () => {\n this.contact_form.setValue({\n ...this.contact_form.value,\n subject: this.subject\n });\n }\n\n resolved(captchaResponse: string, res) {\n this.form_data.catpcha = captchaResponse;\n }\n\n subscribe = () => {\n // PEDIR AL SERVICIO SE LO SUBSCRIBA, Y RESPONDA SI LO SUBSCRIBIÓ O YA ESTABA SUBSCRIPTO\n }\n\n toastNewsletterForm = (e) => {\n e.preventDefault();\n this.sendForm(this.newsletter_form, 'newsletter-thanks');\n }\n\n sendValue = (key) => {\n try {\n let keysearch = key[0].toUpperCase() + key.slice(1).toLowerCase();\n return this.block && this.block['send' + keysearch] || false\n } catch (error) {\n console.error(error);\n return false\n }\n }\n\n}\n","import { Component, OnInit, Input, OnChanges } from '@angular/core';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { Product } from '../../../interfaces/product';\nimport { AnalyticsService } from '../../../services/analytics.service';\n\n@Component({\n selector: 'app-block-products-ec',\n templateUrl: './block-products-ec.component.html',\n styleUrls: ['./block-products-ec.component.scss']\n})\nexport class BlockProductsEcComponent extends ComponentHelper implements OnInit, OnChanges {\n\n @Input() products: Product[];\n @Input() meta: any;\n\n public options: any;\n\n constructor(protected consts: Constants, \n private analyticsService: AnalyticsService,\n ) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.meta = { ...this.meta, ...(this.meta.translations ? this.meta.translations[this.consts.getLocale()] : { name: null }) }\n this.analyticsService.callEvent('view_item_list', { products: this.products, item_list_name: this.meta.name || 'Block Products', item_list_id: this.meta.name?.toLowerCase()?.replace(' ', '-') || 'block-products' })\n this.ecOnInit()\n }\n\n ngOnChanges(): void {\n\n }\n\n boxesInlcudesCode = (box: string) => this.meta.code.toUpperCase().includes(box.toUpperCase())\n\n\n getKeyByValue(object, value) {\n return Object.keys(object).find(key => object[key] === value);\n}\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { IBlock } from '../../interfaces/block';\nimport { BlocksService } from '../../services/blocks/blocks.service';\n\n@Component({\n selector: 'app-blocks-ec',\n templateUrl: './blocks-ec.component.html',\n styleUrls: ['./blocks-ec.component.scss'],\n providers: [BlocksService]\n})\nexport class BlocksEcComponent extends ComponentHelper implements OnInit {\n\n private strsection = null\n\n @Input()\n set section(paramsstrsection) {\n this.strsection = paramsstrsection\n this.strsection && this.blocksService.getBlocks(this.strsection);\n }\n @Input() show_loading = true;\n\n constructor(public blocksService: BlocksService, protected consts: Constants) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n // this.blocksService.getBlocks(this.section);\n this.ecOnInit()\n }\n\n getHTMLContent = (block: IBlock) => block.translations[this.consts.getLocale()].content;\n\n isNewsletter = (block) => block.code.includes('news');\n}\n","import { Component, OnInit, Input, TemplateRef } from \"@angular/core\"\nimport { Router } from \"@angular/router\";\nimport { BsModalService } from \"ngx-bootstrap/modal\";\nimport { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';\nimport { Constants } from \"../../core.consts\";\nimport { AuthService } from '../../services/auth.service';\nimport { ProductsService } from '../../services/products/products.service';\nimport { CartService } from '../../services/cart.service';\nimport { ComponentHelper } from \"../../classes/component-helper\";\nimport { ToastService } from \"../../utils/toast.service\";\n\n\n@Component({\n selector: 'app-cart-ec',\n templateUrl: './cart-ec.component.html',\n styleUrls: ['./cart-ec.component.scss']\n})\nexport class CartEcComponent extends ComponentHelper implements OnInit {\n\n public isLoggedIn = false;\n public mediaUrl = '';\n public modalRef: BsModalRef | null;\n public promotions = [];\n\n constructor(public cartService: CartService, public authService: AuthService, protected consts: Constants,\n public productsService: ProductsService, public router: Router, public modalService: BsModalService, protected toastrService: ToastService) {\n super();\n this.ecOnConstruct()\n this.isLoggedIn = this.authService.isAuthenticated();\n this.mediaUrl = this.consts.mediaUrl();\n }\n\n\n ngOnChanges() {\n this.isLoggedIn = this.authService.isAuthenticated();\n }\n\n updateLoggedIn() {\n this.isLoggedIn = this.authService.isAuthenticated();\n }\n\n ngOnInit() {\n window.scroll(0, 0);\n this.cartService.promotions.subscribe(promotions => this.promotions = promotions);\n this.ecOnInit()\n\n }\n\n toDecimal = (amount) => this.consts.toDecimal(amount);\n\n actualizarCantidad = (item, cantidad, stock) => {\n cantidad > 0 && cantidad <= stock ? this.cartService.updateItemQuantity(item, cantidad) : this.toastrService.show('out-of-stock-actually');\n }\n\n redirectCheckout = () => this.router.navigateByUrl(`/checkout`)\n\n redirectRegister = () => this.router.navigateByUrl(`/auth/login`)\n\n openModal(template: TemplateRef<any>) {\n this.modalRef = this.modalService.show(template, { class: 'modal-xl', keyboard: false });\n }\n\n redirectDetailProduct(product) {\n let variant = product.variants[0]\n let path = '/product/'\n path += variant.code\n path += variant.options.length ? \"?variant=true\" : \"\"\n this.router.navigateByUrl(path)\n }\n}\n","import { Component, OnInit, OnChanges } from '@angular/core';\nimport Stepper from 'bs-stepper';\nimport { Router } from '@angular/router';\nimport { BehaviorSubject, ReplaySubject, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { CheckoutService } from '../../services/checkout/checkout.service';\nimport { ToastService } from '../../utils/toast.service';\nimport { CartService } from '../../services/cart.service';\nimport { StepI } from '../../interfaces/step';\nimport { CheckoutData } from '../../interfaces/checkout-data';\nimport { ProductsService } from '../../services/products/products.service';\nimport { ComponentHelper } from '../../classes/component-helper';\n\n@Component({\n selector: 'app-checkout-ec',\n templateUrl: './checkout-ec.component.html',\n styleUrls: ['./checkout-ec.component.scss']\n})\nexport class CheckoutEcComponent extends ComponentHelper implements OnInit {\n\n public stepper: Stepper;\n public loadingSubject = new BehaviorSubject<boolean>(true);\n public canCheckout = false;\n public require_login = false;\n public subCan: Subscription;\n public subReady: Subscription;\n\n public loading$ = this.loadingSubject.asObservable();\n\n constructor(public checkoutService: CheckoutService, public toastrService: ToastService,\n public router: Router, public cartService: CartService, public productsService: ProductsService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.subCan = this.checkoutService.canCheckout$.pipe(take(1)).subscribe(contain_items => {\n if (contain_items) this.initializeCheckout();\n else this.canCheckout = false;\n })\n this.ecOnInit()\n\n }\n\n ngOnDestroy() {\n this.subCan?.unsubscribe()\n this.subReady?.unsubscribe()\n }\n\n initializeCheckout = () => {\n this.canCheckout = true;\n let steps: StepI[] = [];\n steps.push({ name: 'address' });\n steps.push({ name: 'shipment' });\n steps.push({ name: 'payment' });\n this.checkoutService.setSteps(steps);\n this.setStepper();\n this.loadingSubject.next(false);\n\n this.subReady = this.checkoutService.onReady$.pipe(filter( ready => ready )).subscribe(\n res => { res && this.endCheckout()}\n );\n }\n\n goBack = () => this.stepper.previous();\n\n isStepReady = (step_name) => this.checkoutService.isStepReady(step_name);\n\n endCheckout = () => {\n this.checkoutService.complete().then(\n res => res.ok && this.router.navigate(['checkout/order_success']),\n err => this.toastrService.show('operation-error')\n )\n }\n\n setStepper = () => {\n setTimeout(() => {\n if (document.querySelector('#stepper') != null) {\n this.stepper = new Stepper(document.querySelector('#stepper'), {\n linear: true,\n animation: true\n })\n }else{\n this.setStepper()\n }\n }, 1000);\n }\n\n next = () => {\n this.stepper.next()\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n };\n\n error = (error_value) => this.toastrService.show(error_value);\n\n getIcon = (data_item: CheckoutData) => {\n switch (data_item.type) {\n case 'coupon': return 'assets/images/coupon.png';\n case 'discount': return 'assets/images/discount.png';\n case 'shipment': return 'assets/images/ico-envio.png';\n case 'subtotal': return 'assets/images/products.png';\n case 'total': return 'assets/images/ico-carrito.png';\n default: return 'assets/images/ico-carrito.png';\n }\n }\n\n}\n","import { Component, EventEmitter, Output, Input, OnInit, ViewChild, TemplateRef } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { AuthService } from '../../../services/auth.service';\nimport { CartService } from '../../../services/cart.service';\nimport { AddressingService } from '../../../services/checkout/addressing.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';\nimport { Constants } from '../../../core.consts';\nimport { add } from 'ngx-bootstrap/chronos';\nimport { ParametersService } from '../../../services/parameters.service';\n\n\n@Component({\n selector: 'app-dataform-ec',\n templateUrl: 'dataform-ec.component.html',\n styleUrls: ['dataform-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class DataFormEcComponent extends ComponentHelper implements OnInit {\n\n @Input() step_id;\n protected countriesSubject = new BehaviorSubject<any[]>([]);\n protected provincesSubject = new BehaviorSubject<any[]>([]);\n protected countriesFacturacionSubject = new BehaviorSubject<any[]>([]);\n protected provincesFacturacionSubject = new BehaviorSubject<any[]>([]);\n\n public countries$ = this.countriesSubject.asObservable();\n public provinces$ = this.provincesSubject.asObservable();\n public countriesFacturacion$ = this.countriesFacturacionSubject.asObservable();\n public provincesFacturacion$ = this.provincesFacturacionSubject.asObservable();\n\n public require_login = false;\n public checkoutForm: FormGroup;\n public checkoutFormFacturacion: FormGroup;\n public loading = false;\n public form_ready = false;\n public allready_data = false;\n public addressBook = [];\n public addressBookSelected = { id: 0, notes: \"\" }\n\n public validado = false;\n public viewDataFacturacion: boolean = true;\n\n public modalRef: BsModalRef | null;\n public params: any = {};\n public selectAddres: boolean = false;\n\n constructor(public authService: AuthService,\n public fb: FormBuilder,\n public toast: ToastService,\n public addressingService: AddressingService,\n public cartService: CartService,\n private modalService: BsModalService,\n public paramsService: ParametersService,\n public consts: Constants) {\n super();\n this.ecOnConstruct()\n this.checkoutForm = this.fb.group(this.addressingService.getTypeForm().configForm.formAddres);\n this.checkoutForm.statusChanges\n .pipe(\n filter(() => { this.onFormChange(); return this.checkoutForm.valid }))\n .subscribe(() => this.onFormValid());\n\n this.checkoutFormFacturacion = this.fb.group(this.addressingService.getTypeForm().configForm.formBilling);\n this.checkoutFormFacturacion.statusChanges\n .pipe(\n filter(() => { this.onFormChange(); return this.checkoutFormFacturacion.valid }))\n .subscribe(() => this.onFormValid());\n }\n\n ngOnInit() {\n this.paramsService.parameters.subscribe(res => this.params = res);\n this.addressingService.initialize(this.step_id);\n const localEmail = localStorage.getItem('mail')\n this.authService.isAuthenticated() && this.checkoutForm.controls['email'].setValue(this.authService.getCustomer()?.email || localEmail);\n this.authService.isAuthenticated() && this.checkoutForm.get('email').disable({ onlySelf: true });\n this.addressingService.getAddressingData().then(res => {\n this.countriesSubject.next(res);\n this.countriesFacturacionSubject.next(res);\n });\n\n (this.addressingService.modeSelectAddress == 'LOAD_ADDRESS_AND_SELECTION' || this.addressingService.modeSelectAddress == 'ONLY_ADDRESS_SELECTION') \n && this.addressingService.getAddressBook().then(res => {\n this.addressBook = res && res || null\n this.addressBook == null && this.setMode('carga') }\n )\n\n this.ecOnInit()\n }\n\n showFormFacturacion = () => {\n this.viewDataFacturacion = !this.viewDataFacturacion\n this.onFormChange()\n return this.viewDataFacturacion\n }\n\n onFormValid = () => {\n }\n\n protected onFormChange() {\n if (this.checkoutForm.valid) {\n if (!this.viewDataFacturacion && this.checkoutFormFacturacion.valid) {\n this.validado = true\n return\n }\n if (this.viewDataFacturacion && this.checkoutForm.valid) {\n this.validado = true\n return\n }\n }\n this.validado = false\n }\n\n onInputChange = () => this.form_ready = false;\n\n onCountrySelected = (value) => {\n this.checkoutForm.controls['countryCode'].setValue(value == 'null' ? null : value);\n this.checkoutForm.controls['provinceCode'].setValue(null);\n this.provincesSubject.next(\n value && value != 'null' ?\n this.countriesSubject.value.find(country => country.code == value).provinces\n :\n []);\n }\n\n onCountrySelectedFacturacion = (value) => {\n this.checkoutFormFacturacion.controls['countryCode'].setValue(value == 'null' ? null : value);\n this.checkoutFormFacturacion.controls['provinceCode'].setValue(null);\n this.provincesFacturacionSubject.next(\n value && value != 'null' ?\n this.countriesFacturacionSubject.value.find(country => country.code == value).provinces\n :\n []);\n }\n\n onProvincesSelected = (value) => this.checkoutForm.controls['provinceCode'].setValue(value == 'null' ? null : value);\n\n onProvincesSelectedFacturacion = (value) => this.checkoutFormFacturacion.controls['provinceCode'].setValue(value == 'null' ? null : value);\n\n verifyValidate = (e) => {\n console.log(\"Verifying: \", e)\n this.require_login = false;\n if (e) {\n this.checkoutForm.controls['email'].setValue(e);\n this.authService.isAuthenticated() && this.checkoutForm.get('email').disable({ onlySelf: true });\n }\n this.checkoutForm.valid ? this.emitResult() : this.showError('invalid-form');\n }\n\n showError = (error_message) => { this.toast.show(error_message); return true; }\n\n protected emitResult = async () => {\n this.loading = true;\n let data: any = { shippingAddress: { ...this.checkoutForm.getRawValue(), phoneNumber: this.checkoutForm.value.phoneNumber.toString() }, notes: (this.checkoutForm.getRawValue()).notes };\n if (!this.viewDataFacturacion && this.checkoutFormFacturacion.valid) data = { ...data, notes: data.notes, billingAddress: this.checkoutFormFacturacion.getRawValue() };\n try {\n let result = await this.addressingService.setAddress(data);\n\n if (result === false)\n this.require_login = true\n\n if (result !== false && result !== undefined) {\n this.form_ready = true\n this.allready_data = true\n }\n\n } catch (e) { this.toast.show('operation-error') }\n this.loading = false;\n }\n\n openModal(template: TemplateRef<any>) {\n this.modalRef = this.modalService.show(template, { class: 'modal-lg ', keyboard: false, backdrop: 'static' });\n }\n\n setSelectAddress = (addressSelect: any) => {\n this.addressBook.map(address => address.selected = address.id === addressSelect.id)\n this.addressBookSelected.id = this.addressBook.find(address => address.selected).id || 0\n }\n\n selectAddress = async () => {\n this.loading = true;\n let addressSelected = this.addressBook.find(address => address.selected)\n if (addressSelected) {\n try {\n if (!this.addressBookSelected.id) {\n this.addressBookSelected.id = addressSelected.id || 0\n }\n const request = {\n selected: this.addressBookSelected,\n shippingAddress: addressSelected\n }\n const resultSede = await this.addressingService.setHeadquarter(request);\n if (resultSede) {\n this.form_ready = true;\n this.allready_data = true;\n } else {\n this.toast.show('operation-error')\n }\n } catch (e) { this.toast.show('operation-error') }\n } else {\n this.showError('invalid-form')\n }\n this.loading = false;\n }\n\n getMode = () => {\n switch (this.addressingService.modeSelectAddress) {\n case 'ONLY_LOAD_ADDRESS':\n return true\n case 'ONLY_ADDRESS_SELECTION':\n if (this.authService.isAuthenticated()) {\n return false\n }\n return true\n case 'LOAD_ADDRESS_AND_SELECTION':\n if (this.authService.isAuthenticated()) {\n return this.selectAddres\n }\n return true\n }\n }\n\n setMode = (mode) => this.selectAddres = mode == \"carga\"\n\n getCountry = (code) => this.addressingService.countriesList.find(paises => paises.code.toLocaleLowerCase().includes(code.toLocaleLowerCase()))?.name || \"\"\n\n getProvince = (code) => this.addressingService.provinceList.find(ct => ct.code == code)?.name || \"\"\n\n getDocumentType = (code) => this.addressingService.documentTypes.find(dt => dt.code == code)?.name || \"\"\n\n getLabelNotesParam = () => this.hasParams(this.params, 'label_notes_' + this.consts.getChannel() + '_' + this.consts.getLocale().split('_')[0])\n\n getParamByChannelAndLanguage = (nameParam) => this.hasParams(this.params, nameParam + this.consts.getChannel() + '_' + this.consts.getLocale().split('_')[0])\n\n}\n","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../../api/connection.service';\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\nimport { ToastService } from '../../utils/toast.service';\nimport { CartService } from '../cart.service';\nimport { Constants } from '../../core.consts';\nimport { map } from 'rxjs/operators';\nimport { CheckoutService } from './checkout.service';\nimport { StepService } from '../../classes/checkout/step-service';\nimport { ParametersService } from '../parameters.service';\nimport { AnalyticsService } from '../analytics.service';\n\n@Injectable()\nexport class PaymentService extends StepService {\n\n private paymentMethodsSubject = new BehaviorSubject<any[]>([]);\n public methods$ = this.paymentMethodsSubject.asObservable();\n\n baseApi = () => 'shop-api/' + this.consts.getChannel() + '/' + 'checkout/' + this.cartService.getCartToken();\n getPaymentMethodsApi = () => this.baseApi() + '/payment';\n getPreferenceApi = () => 'shop-api/' + this.consts.getChannel() + '/mercado-pago/' + this.cartService.getCartToken() + '/preference';\n getCheckoutMobbexApi = () => 'shop-api/' + this.consts.getChannel() + '/mobbex/' + this.cartService.getCartToken() + '/process-payment'\n getCheckoutBancardApi = () => 'shop-api/' + this.consts.getChannel() + '/bancard/' + this.cartService.getCartToken() + '/process-payment' //?testOrderNumber=' + this.getRandomArbitrary()\n putPaymentApi = (method) => this.baseApi() + '/payment/' + method;\n\n constructor(private connection: ConnectionService, private toastrService: ToastService, private cartService: CartService, private consts: Constants,\n private checkoutService: CheckoutService, private analyticsService: AnalyticsService) {\n super(checkoutService);\n this.getPaymentMethods();\n }\n\n getPaymentMethods = async () => this.connection.get(this.getPaymentMethodsApi()).toPromise().then(\n res => res.payments?.length && this.paymentMethodsSubject.next(Object.keys(res.payments[0].methods).map(key => res.payments[0].methods[key])),\n err => this.toastrService.show('operation-error')\n );\n\n // putPayment = (method) => this.connection.put(this.putPaymentApi(method), { method }).toPromise();\n putPayment = (method) =>\n this.connection\n .put(this.putPaymentApi(method), { method })\n .toPromise()\n .then(\n res => {\n this.analyticsService.callEvent('add_payment_info', res);\n return res\n },\n err => {\n return new Promise((resolve, reject) => reject(new Error(err.error)))\n }\n ).catch(err => console.error(err))\n\n getPreference = (shipment_data) => this.connection.post(this.getPreferenceApi(), shipment_data).pipe(map(res => (res.preference || res))).toPromise();\n\n getCheckoutMobbex = (shipment_data) => this.connection.post(this.getCheckoutMobbexApi(), shipment_data).toPromise();\n\n getCheckoutBancard = (shipment_data) => this.connection.get(this.getCheckoutBancardApi(), shipment_data).toPromise();\n\n private getRandomArbitrary = () => Math.round(Math.random() * (Number(9999999) - Number(2000003)) + Number(2000003))\n}","import { Component, Renderer2, ElementRef, ViewChild, Input, OnChanges, OnInit, Output, EventEmitter } from '@angular/core';\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CheckoutData } from '../../../interfaces/checkout-data';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\nimport { PaymentService } from '../../../services/checkout/payment.service';\nimport { ToastService } from '../../../utils/toast.service';\n\n@Component({\n selector: 'app-payment-ec',\n templateUrl: 'payment-ec.component.html',\n styleUrls: ['payment-ec.component.scss'],\n providers: [PaymentService]\n\n})\nexport class PaymentEcComponent extends ComponentHelper implements OnChanges, OnInit {\n\n @Input() step_id;\n @ViewChild('formContainer') protected mercadopago_button: ElementRef;\n protected methodDataSubject = new BehaviorSubject<any>(null);\n private loadingSubject = new BehaviorSubject<boolean>(false);\n protected preference;\n\n\n public loading_internal = false;\n public order_id;\n public error;\n public loading = true;\n public loading_internal_mp = false;\n public method_data$ = this.methodDataSubject.asObservable();\n public loading$ = this.loadingSubject.asObservable();\n public total_amount;\n\n \n constructor(protected renderer: Renderer2, protected toastr: ToastService,\n public paymentService: PaymentService, public checkoutService: CheckoutService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnChanges() { }\n\n ngOnInit() {\n this.paymentService.initialize(this.step_id);\n this.checkoutService.asociatedData$.subscribe((data: CheckoutData[]) => this.total_amount = (data.find(item => item.type == 'total')).amount)\n this.ecOnInit()\n\n }\n\n allData = () => ({\n ...this.paymentService.getUserData().shippingAddress,\n ...this.paymentService.getShipmentData(),\n });\n\n setError = (message) => {\n this.error = message;\n }\n\n emitResult = async () => {\n this.paymentService.setStepReady(this.methodDataSubject.getValue(), null).then(res => {\n this.setLoading(false)\n });\n }\n\n setLoading = (estado = true) => {\n this.loadingSubject.next(estado);\n return true;\n }\n\n verifyValidate = () => {\n this.setLoading()\n setTimeout(r => this.emitResult(), 1000);\n }\n\n setMethod = async (method) => {\n this.methodDataSubject.next(null);\n let result = await this.paymentService.putPayment(method.code);\n this.methodDataSubject.next(method);\n // this.isMP(method.code) && this.getPreference();\n }\n\n setActive(e) {\n const parent = e.target.parentElement.children;\n for (const button of parent) {\n if (button.classList.contains('active')) {\n button.classList.remove('active')\n }\n }\n e.target.classList.add(\"active\")\n }\n\n submitForm = (event) => {\n try {\n //console.log(\"EVENT\", event);\n event.preventDefault();\n return false;\n } catch (e) {\n //console.log('SE ROMOPIO EL PREVENT DEFAULT')\n }\n\n }\n\n getPK = (method) => (method.config.public_key || method.public_key);\n\n isRedirectRedsys = (code: string) => code && code.toLocaleLowerCase().includes('redsys_redirect');\n\n isRedirectCecaBank = (code: string) => code && code.toLocaleLowerCase().includes('ceca_bank_redirect');\n\n isMP = (code: string) => code && code.toLocaleLowerCase() == ('mercado_pago');\n \n isMPTarjetaDeCredito = (code: string) => code && code.toLocaleLowerCase().includes('credit');\n\n isMethodOffline = (code: string) => code && code.toLocaleLowerCase().includes('offline');\n\n isPeyPalExpress = (code: string) => code && code.toLocaleLowerCase().includes('paypal') && code.toLocaleLowerCase().includes('express');\n\n isMobbex = (code: string) => code && code.toLocaleLowerCase().includes('mobbex');\n\n isBancard = (code: string) => code && code.toLocaleLowerCase().includes('bancard');\n\n isDecidir = (code: string) => code && code.toLocaleLowerCase().includes('decidir');\n}","import { Component, Input, Output, EventEmitter, OnInit, OnChanges } from '@angular/core';\nimport { map } from 'rxjs-compat/operator/map';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\nimport { ShipmentService } from '../../../services/checkout/shipment.service';\nimport { ProductsService } from '../../../services/products/products.service';\nimport { ToastService } from '../../../utils/toast.service';\n\n@Component({\n selector: 'app-shipment-ec',\n templateUrl: './shipment-ec.component.html',\n styleUrls: ['./shipment-ec.component.scss'],\n providers: [ShipmentService]\n})\nexport class ShipmentEcComponent extends ComponentHelper implements OnInit, OnChanges {\n\n @Input() step_id;\n public methods_list: any[];\n public methodSelect: any;\n public loading_internal = false;\n public points: any[] = [];\n public selected_final;\n public costos = null\n public costs = []\n\n contracts = [];\n\n constructor(public shipmentService: ShipmentService, protected toastrService: ToastService,\n public productsService: ProductsService, public checkoutService: CheckoutService) {\n super();\n this.ecOnConstruct()\n }\n\n emitResult = (method_name, contract_data) => {\n contract_data = {\n ...contract_data,\n shipping_method_contract: method_name + '_' + contract_data.name,\n shipping_method_branch_code: method_name == \"branch_delivery\" ? contract_data.sucursal_id : contract_data.name,\n }\n this.shipmentService.setContract(contract_data);\n }\n\n verifyValidate = (contract, data) => {\n try {\n this.costs.forEach(cost => cost.contracts.forEach(co => co.selected = false))\n this.costs.find(cost => cost.name == contract).contracts.find(contra => contra.name == data.name).selected = true\n } catch (error) {\n console.log(\"error al buscar contrato\", error);\n }\n this.emitResult(contract, data);\n };\n\n ngOnInit() {\n this.shipmentService.initialize(this.step_id);\n this.shipmentService.getShipmentMethods();\n this.checkoutService.asociatedData$.subscribe(data => {\n this.costos = data && data.find(value => value.type == \"shipment\") || null\n })\n this.shipmentService.costs.subscribe(cos => {\n this.costs = cos.map(cost => { return { ...cost, contracts: cost.contracts.map(co => { return { ...co, selected: false } } ) } })\n if (this.costs.length && this.costs[0]?.name && this.costs[0]?.contracts[0]) {\n this.verifyValidate(this.costs[0].name, this.costs[0].contracts[0])\n }\n })\n this.ecOnInit()\n\n }\n\n ngOnChanges() {\n this.shipmentService.getShipmentMethods();\n }\n\n toTraducible = (name) => name.replace(/_/g, '-');\n\n deleteUPS = (methods) => methods.filter(method => method.name != 'UPS');\n\n setMethod = (method) => {\n this.methodSelect = method;\n this.loading_internal = true;\n this.shipmentService.restartStep();\n setTimeout(() => {\n this.shipmentService.setMethod(method.code).then(res => this.loading_internal = false);\n }, 1000);\n }\n\n setActive(e) {\n const parent = e.target.parentElement.children;\n for (const button of parent) {\n if (button.classList.contains('active')) {\n button.classList.remove('active')\n }\n }\n e.target.classList.add(\"active\")\n }\n\n validName = (name) => isNaN(name);\n\n showResponse = (costs) => console.log(costs);\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { combineLatest } from 'rxjs';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CartService } from '../../../services/cart.service';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\n\n@Component({\n selector: 'app-order-success-ec',\n templateUrl: './success-ec.component.html',\n styleUrls: ['./success-ec.component.scss']\n})\nexport class SuccessEcComponent extends ComponentHelper implements OnInit {\n\n public orderDetails = {};\n public params: any = {};\n public from_mp = true;\n public payments;\n\n constructor(protected activedRoute: ActivatedRoute, protected cartService: CartService, public router: Router, protected checkoutService: CheckoutService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.checkoutService.order$.subscribe(\n res => {\n //console.log('LO QUE LLEGA EN ORDEN', res);\n this.params = {\n external_reference: res.number,\n }\n this.payments = res.payments\n }\n );\n this.ecOnInit()\n\n }\n\n}\n","import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n// import { Constants, Filter, OptionsService, Product, ProductsService } from 'ng-easycommerce';\nimport { combineLatest, Subscription } from 'rxjs';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Filter } from '../../classes/filters/Filter';\nimport { Constants } from '../../core.consts';\nimport { FilterType } from '../../interfaces/filter';\nimport { ParamsProductsWithUniqueVariant } from '../../interfaces/paramsInterfaces/paramsProductsWithUniqueVariant';\nimport { Product } from '../../interfaces/product';\nimport { AnalyticsService } from '../../services/analytics.service';\nimport { AuthService } from '../../services/auth.service';\nimport { CartService } from '../../services/cart.service';\nimport { OptionsService } from '../../services/options.service';\nimport { ParametersService } from '../../services/parameters.service';\nimport { ProductsService } from '../../services/products/products.service';\n\n\n@Component({\n selector: 'app-collection-ec',\n templateUrl: './collection-ec.component.html',\n styleUrls: ['./collection-ec.component.scss']\n})\nexport class CollectionEcComponent extends ComponentHelper implements OnInit {\n\n public filters: Filter[] = [];\n public filters_top: Filter[];\n // public optionsFilters: ['all'];\n public products: Product[];\n public finished = false;\n protected suscripcion: Subscription;\n public loading = true;\n public breadcrumb: string[] = []\n public isCollection = true;\n public params: any;\n\n @Input() type;\n @Input() value;\n @Input() productsWithUniqueVariant: boolean = false;\n @Input() optionsFilters: FilterType[] = ['all'];\n\n constructor(public productsService: ProductsService,\n protected paramsSrv: ParametersService,\n protected activeRoute: ActivatedRoute,\n protected optionsService: OptionsService,\n public authService: AuthService,\n private analyticsService: AnalyticsService,\n public cartService: CartService,\n public consts: Constants) {\n super();\n this.paramsSrv.parameters.subscribe(param => this.params = param)\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n window.scroll(0, 0);\n this.products = [];\n this.ecOnInit()\n this.getProductsAndSubscribe();\n }\n getProductsAndSubscribe(): void {\n combineLatest([this.activeRoute.params, this.optionsService.ready, this.activeRoute.queryParams]).subscribe(([params, ready, queryParams]) => {\n if (ready.readyAll) {\n let cambio = false;\n this.products = [];\n if (!params['type'] || !params['value']) {\n this.productsService.getProductsForFilter({ latest: true, limit: 10 }, this.optionsFilters, queryParams.search);\n }\n else {\n this.productsService.getProductsForFilter({ type: params.type, value: params.value }, this.optionsFilters, queryParams.search);\n cambio = true;\n this.type = params['type'];\n this.value = params['value'];\n }\n try { this.suscripcion.unsubscribe(); } catch (e) { };\n this.suscripcion = this.productsService.products$.subscribe(\n res => {\n this.loading = false;\n if (res.length == 0) {\n this.products = [];\n this.finished = this.productsService.isFinished();\n } else {\n if (this.productsWithUniqueVariant) {\n if (cambio) {\n this.products = this.productsService.getProductsWithUniqueVariant(res, this.getObjectWithVariant() );\n cambio = false;\n }\n else {\n res = this.productsService.getProductsWithUniqueVariant(res, this.getObjectWithVariant() );\n this.products.push(...res)\n };\n } else {\n if (cambio) { this.products = res; cambio = false; }\n else this.products.push(...res);\n }\n }\n this.analyticsService.callEvent('view_item_list', { products: this.products, item_list_name: 'Collection', item_list_id: 'collection' })\n });\n this.productsService.filters$.subscribe(res => {\n this.breadcrumb = this.optionsService.getBreadcrumbByFilters(res);\n this.filters = this.getSpecificFilters(res, ['category', 'attributes', 'dynamics']);\n this.filters_top = this.getSpecificFilters(res, ['sort']);\n });\n this.productsService.finished().subscribe(res => this.finished = res);\n this.loading = false;\n }\n })\n }\n\n getSpecificFilters = (filters: Filter[], types: FilterType[]): Filter[] => {\n let result = [];\n types.forEach(type => {\n let result_filter = filters.find(filter => filter.type() == type);\n if (result_filter) result.push(result_filter);\n return result;\n });\n return result;\n }\n\n onScroll(): void {\n this.loading = true;\n if (!this.productsService.isWaiting() && !this.productsService.getNext()) {\n this.finished = true;\n this.loading = false;\n }\n }\n\n areProducts = () => this.products.length > 0;\n isWaiting = () => this.productsService.isWaiting();\n setFinished = () => this.finished = true;\n\n\n changeFilter = (e) => {\n if (!this.isCollection) {\n this.isCollection = true;\n }\n }\n\n addAllProductosToCart = (products = null) => {\n let items = [];\n (products || this.products).map(prod => prod.productWithUniqueVariant.map(p => items.push(p)))\n items = items.filter(prod => prod.productToCartItem).map(prod => prod.productToCartItem )\n items?.length && this.cartService.addAllToCart(items)\n }\n\n getObjectWithVariant = (): ParamsProductsWithUniqueVariant => {\n return { type: 'color', code: 'color', defaultFirstOption: false , checkIfStock:true } \n } \n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { CartService } from '../../services/cart.service';\nimport { ToastService } from '../../utils/toast.service';\n\n@Component({\n selector: 'app-coupon-ec',\n templateUrl: 'coupon-ec.component.html',\n styleUrls: ['coupon-ec.component.scss']\n})\nexport class CouponEcComponent extends ComponentHelper {\n\n public coupon_value = \"\";\n public aplied = false;\n public loading = false;\n\n constructor(public cartService: CartService, protected toastr: ToastService) { \n super();\n this.ecOnConstruct()\n }\n \n ngOnInit() {\n this.ecOnInit()\n }\n\n addCoupon = () => {\n this.validCoupon() && this.cartService.addCoupon(this.coupon_value).then(\n res => {\n res.error ? this.invalidCoupon() : this.applyCoupon();\n }\n )\n }\n\n invalidCoupon = () => {\n this.toastr.show('invalid-coupon');\n this.coupon_value = '';\n this.loading = false;\n }\n\n applyCoupon = () => {\n this.aplied = true;\n this.loading = false;\n }\n\n setLoading = () => this.loading = true;\n\n validCoupon = (): boolean => \n this.coupon_value && /^([A-Za-z\\-0-9]*)\\w+$/.test(this.coupon_value);\n}","import { Component, OnInit } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { FAQ } from '../../interfaces/faqs';\nimport { OptionsService } from '../../services/options.service';\nimport { ToastService } from '../../utils/toast.service';\n\n@Component({\n selector: 'app-faqs-content-ec',\n templateUrl: 'faqs-content-ec.component.html',\n styleUrls: ['faqs-content-ec.component.scss']\n})\nexport class FaqsContentEcComponent extends ComponentHelper implements OnInit {\n\n public faqs : FAQ[];\n public actual_index;\n public empty_faqs = false;\n\n constructor(protected optionsService: OptionsService, protected toastr: ToastService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.optionsService.getFAQ().toPromise().then(\n faqs => {\n console.log('LAS FAQS; ', faqs);\n if (faqs.length > 0) {\n this.faqs = faqs;\n this.actual_index = 0;\n } else {\n this.empty_faqs = true;\n }\n },\n error => {\n console.log(error);\n this.toastr.show('No fue posible encontrar la sección solicitada');\n }\n ).catch(err => this.toastr.show('empty-faqs')); \n this.ecOnInit()\n\n }\n\n changeFAQ = (new_index) => this.actual_index = new_index;\n}","import { Component, Input, OnChanges, OnInit, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Constants } from '../../core.consts';\nimport { ComponentHelper } from '../../classes/component-helper';\n\n/** @dynamic */\n@Component({\n selector: 'app-filters-ec',\n templateUrl: './filters-ec.component.html',\n styleUrls: ['./filters-ec.component.scss']\n})\nexport class FiltersEcComponent extends ComponentHelper implements OnInit {\n\n @Input() setSelected;\n @Input() filters;\n public expand: boolean = true;\n\n\n constructor(protected consts: Constants, @Inject(DOCUMENT) public document: Document) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.expand = !this.consts.mobile()\n this.ecOnInit()\n\n }\n\n ngOnChanges() {\n }\n\n // close = () => {\n // this.document.getElementById(\"filtros\").classList.remove('in');\n // return true;\n // };\n\n\n close = (accordion_id) => {\n // this.consts.mobile()\n // ? this.document.getElementById(\"accordionExample\").classList.remove('show')\n // : this.document.getElementById(accordion_id).classList.remove('show');\n return true;\n };\n\n}\n","import { Component, Input, OnChanges, OnInit, Inject, EventEmitter, Output } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Constants } from '../../core.consts';\nimport { ComponentHelper } from '../../classes/component-helper';\n\n/** @dynamic */\n@Component({\n selector: 'app-filters-top-ec',\n templateUrl: './filters-top-ec.component.html',\n styleUrls: ['./filters-top-ec.component.scss']\n})\nexport class FiltersTopEcComponent extends ComponentHelper implements OnInit {\n\n // @Input() setSelected;\n // @Input() filters;\n\n // public expand: boolean = true;\n\n\n // constructor(protected consts: Constants, @Inject(DOCUMENT) public document: Document) {\n // super();\n // this.ecOnConstruct() \n // }\n\n // ngOnInit() {\n // this.expand = !this.consts.mobile()\n // this.ecOnInit()\n\n // }\n\n // ngOnChanges() {\n // }\n\n // setSelectedInternal = (filter, $event) => {\n // console.log('EL VALO RQUE VA A MANDAR: ', $event.target.value);\n // this.setSelected(filter, $event.target.value);\n // }\n\n // close = () => {\n // this.document.getElementById(\"filtros\").classList.remove('in');\n // return true;\n // };\n\n\n @Input() setSelected;\n @Input() filters;\n @Input() full = true\n @Output() changeFilter = new EventEmitter();\n\n public expand: boolean = true;\n\n constructor(private consts: Constants, @Inject(DOCUMENT) private document: Document) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.expand = !this.consts.mobile()\n this.full = !this.consts.mobile()\n this.ecOnInit()\n }\n\n ngOnChanges() {\n }\n\n mid = (filter, filterChild, value) => {\n // console.log(\"FILTER \", filter);\n // console.log(\"HIJO \", filterChild);\n // console.log(\"VALOR \", value);\n this.changeFilter.emit(value);\n return true\n }\n\n close = () => {\n //this.document.getElementById(\"filtros\").classList.remove('in');\n return true;\n };\n\n getDescripcion = (title) => {\n switch (title) {\n case 'most-expensive-first':\n return '+';\n case 'cheapest-first':\n return '-';\n case 'ascendancy':\n return 'Asc';\n case 'descendant':\n return 'Desc';\n default:\n return title;\n }\n }\n\n getStyles = (state) => {\n console.log(state);\n return (state) ? 'btn btn-secondary btn-sm active' : 'btn btn-secondary btn-sm'\n }\n\n setSeleccion = (values) => {\n //console.log('SELECIOTOTOT => ', values);\n let valores = values.split('@')\n let filter = this.filters.find(f => f.type() == valores[0]);\n let opChild = {}\n if (valores[1] == 'sub') {\n opChild = (filter.data.find(f => f.children.find(c => c.selected))).children.find(c => c.selected)\n } else {\n opChild = (filter.data.find(f => f.children.find(c => c.value == valores[2]))).children.find(c => c.value == valores[2])\n }\n this.setSelected(filter, opChild)\n }\n\n createValue = (filter, filterItem) => filter.type() + '@' + filterItem.type + '@' + filterItem.value\n\n}\n","import { Component, OnInit, Output } from '@angular/core';\nimport { EventEmitter } from 'events';\nimport { take } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { Menu } from '../../interfaces/navbar-items';\nimport { OptionsService } from '../../services/options.service';\nimport { ParametersService } from '../../services/parameters.service';\n\n@Component({\n selector: 'app-footer-ec',\n templateUrl: 'footer-ec.component.html',\n styleUrls: ['footer-ec.component.scss']\n})\n\nexport class FooterEcComponent extends ComponentHelper implements OnInit {\n public menuItemsCategories: Menu[] = [];\n public menuItemsSections: Menu[] = [];\n public menuItemsAttributes: Menu[] = [];\n\n public sections = [];\n public categories = [];\n public attributes = [];\n public mediaUrl: string;\n public params: any = {};\n\n\n constructor(protected optionsService: OptionsService, public paramsService: ParametersService, protected consts: Constants) {\n super();\n this.optionsService.sections.subscribe(res => (res.length > 0) && this.updateMenuItem(res));\n this.optionsService.categories.subscribe(res => (res.length > 0) && this.updateCategories(res));\n this.optionsService.attributes.subscribe(res => (res.length > 0) && this.updateAttributes(res));\n this.mediaUrl = this.consts.mediaUrl();\n this.ecOnConstruct()\n\n }\n\n ngOnInit() {\n this.paramsService.parameters.subscribe(res => this.params = res);\n this.ecOnInit()\n\n }\n\n protected updateCategories = (categories) => {\n this.menuItemsCategories = this.optionsService.generateMenu(categories);\n this.menuItemsCategories = this.ecUpdateMenuItemCategories(this.menuItemsCategories)\n this.categories = this.menuItemsCategories\n }\n\n protected updateAttributes = (attributes) => {\n this.menuItemsAttributes = this.optionsService.generateMenu(attributes);\n this.menuItemsAttributes = this.ecUpdateMenuItemAttributes(this.menuItemsAttributes)\n this.attributes = this.menuItemsAttributes\n }\n\n protected updateMenuItem = (elements) => {\n this.menuItemsSections = this.optionsService.generateMenu(elements);\n this.menuItemsSections = this.ecUpdateMenuItemSection(this.menuItemsSections)\n this.sections = this.menuItemsSections;\n }\n\n hasParams = (params, searched) => params && params.find(param => param.code.toLowerCase().includes(searched));\n\n mobile = () => this.consts.mobile();\n\n public addChildren = (menuItems, code, item, stackPlace = 'end') => {\n (stackPlace == 'start')\n ? menuItems.find(item => item.code?.toLowerCase().includes(code))?.children.unshift(\n { code: 'sd', name: 'sd', path: '/home', title: 'sd', ...item }\n )\n : menuItems.find(item => item.code?.toLowerCase().includes(code))?.children.push(\n { code: 'sd', name: 'sd', path: '/home', title: 'sd', ...item }\n )\n }\n\n public ecUpdateMenuItemSection = (menuItems) => {\n return menuItems\n }\n\n public ecUpdateMenuItemCategories = (menuItems) => {\n return menuItems\n }\n\n public ecUpdateMenuItemAttributes = (menuItems) => {\n return menuItems\n }\n}","import { Component, ElementRef, OnInit, Renderer2, ViewChild } from '@angular/core';\nimport { Router, Event, NavigationStart } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { Location } from '@angular/common';\nimport { THIS_EXPR } from '@angular/compiler/src/output/output_ast';\nimport { Menu } from '../../interfaces/navbar-items';\nimport { Constants } from '../../core.consts';\nimport { CartService } from '../../services/cart.service';\nimport { OptionsService } from '../../services/options.service';\nimport { ParametersService } from '../../services/parameters.service';\nimport { ProductsService } from '../../services/products/products.service';\nimport { AuthService } from '../../services/auth.service';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { TranslateService } from '@ngx-translate/core';\ndeclare var $ : any\n\n@Component({\n selector: 'app-header-ec',\n templateUrl: './header-ec.component.html',\n styleUrls: ['./header-ec.component.scss']\n})\n\nexport class HeaderEcComponent extends ComponentHelper implements OnInit {\n \n transparent: boolean;\n mediaMenu: boolean;\n\n //og elden\n public menuItems: Menu[] = [];\n public menuSections: any[] = [];\n\n public attributes: Menu[] = [];\n public categories: Menu[] = [];\n public envetUrlTransparent = [\"/home\", \"/\"];\n public searchValue: string;\n public params: any = {};\n public toggled = false;\n\n @ViewChild(\"menu\") menu_button: ElementRef;\n\n constructor(\n public router: Router,\n protected consts: Constants,\n public cartService: CartService,\n protected optionsService: OptionsService,\n public paramsService: ParametersService,\n public productsService: ProductsService,\n public authService: AuthService,\n public translate: TranslateService,\n protected renderer: Renderer2) {\n super();\n this.envetUrlTransparent = this.changeUrlTransparent(this.envetUrlTransparent)\n this.router.events.subscribe((event: Event) => {\n if (event instanceof NavigationStart) {\n const url = event.url;\n this.changeUrlNavigation(url)\n this.envetUrlTransparent.find(evUrl => evUrl === url) != undefined \n ? this.transparent = true\n : this.transparent = false\n }\n });\n // menu\n this.optionsService.categories.pipe(filter(cat => cat.length > 0)).subscribe(res => {\n this.updateMenuItem('categories', res)\n this.subscribeCategories(res)\n });\n this.optionsService.attributes.pipe(filter(atr => atr.length > 0)).subscribe(res => {\n this.updateMenuItem('attributes', res)\n this.subscribeAttributes(res)\n });\n this.ecOnConstruct()\n }\n\n \n\n\n ngOnInit(): void {\n this.paramsService.parameters.subscribe(res => this.params = res);\n const mediaQuery = window.matchMedia('(max-width: 992px)');\n this.mediaMenu = mediaQuery.matches;\n this.ecOnInit()\n }\n\n protected updateMenuItem = (title, elements) => {\n const index = this.menuItems.findIndex(element => element.title == title);\n if (index != null && index >= 0) {\n this.menuItems[index].children = this.optionsService.generateMenu(elements);\n } else {\n if (title == 'attributes') {\n this.attributes.push(...this.optionsService.generateMenu(elements))\n this.attributes = this.updateMenuItemLastCreated(this.attributes);\n }\n if (title == 'categories') {\n this.categories.push(...this.optionsService.generateMenu(elements))\n this.categories = this.updateMenuItemLastCreated(this.categories);\n } \n }\n }\n\n nagivate = (url: string) => this.router.navigateByUrl(`/${url}`);\n \n logout = () => {\n this.authService.logout();\n this.router.navigateByUrl('home');\n }\n\n setSearchValue = (event) => {\n event.key == 'Enter' && this.getCollectionSearch()\n this.searchValue = event.target.value;\n }\n\n getCollectionSearch = () => this.router.navigateByUrl('/collection?search=' + this.searchValue);\n \n\n toogleToolbar = () => {\n console.log('LLAMA AL TOOGLE')\n if (this.menu_button.nativeElement.classList.contains('d-none')) {\n this.renderer.removeClass(this.menu_button, 'd-none');\n this.renderer.addClass(this.menu_button, 'active-mobile');\n } else {\n this.renderer.addClass(this.menu_button, 'd-none');\n this.renderer.removeClass(this.menu_button, 'active-mobile');\n }\n }\n\n changeLanguage = (lang) => {\n this.consts.setLocale(lang)\n window.location.reload()\n } \n\n changeUrlTransparent = (urlTransparent = []) => urlTransparent\n\n subscribeAttributes = (arrayAttributes: Array<any>) => {\n \n }\n\n subscribeCategories = (arrayCategories: Array<any>) => {\n \n }\n\n updateMenuItemLastCreated = (arrayMenu: Menu[]) => arrayMenu\n\n changeUrlNavigation = (url: string) => { }\n \n}\n","import { Component, OnInit } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { IBlock } from '../../interfaces/block';\nimport { BlocksService } from '../../services/blocks/blocks.service';\n\n\n@Component({\n selector: 'app-home-ec',\n templateUrl: './home-ec.component.html',\n styleUrls: ['./home-ec.component.scss']\n})\nexport class HomeEcComponent extends ComponentHelper implements OnInit {\n\n constructor(public blocksService: BlocksService, protected consts: Constants) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.blocksService.getBlocks('home');\n this.ecOnInit()\n\n }\n\n getHTMLContent = (block: IBlock) => block.translations[this.consts.getLocale()].content;\n\n noNewsletter = (block) => !block.code.includes('newsletter');\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from \"@angular/core\"\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\nimport { filter } from \"rxjs/operators\";\nimport { ComponentHelper } from \"../../classes/component-helper\";\nimport { UserRoleType } from \"../../classes/user-role-type\";\nimport { AuthService } from \"../../services/auth.service\";\nimport { ToastService } from \"../../utils/toast.service\";\ndeclare var $: any;\n\n\n@Component({\n selector: 'app-login-ec',\n templateUrl: './login-ec.component.html',\n styleUrls: ['./login-ec.component.scss']\n})\nexport class LoginEcComponent extends ComponentHelper implements OnInit {\n\n @Input() redirect = true;\n @Input() title = 'login';\n @Input() buyButton = false;\n @Input() withRoles: UserRoleType[] = []\n @Output() ready = new EventEmitter();\n @Output() loggedIn = new EventEmitter();\n\n public loading = false;\n public loginForm: FormGroup;\n\n constructor(protected authService: AuthService,\n protected toastrService: ToastService,\n protected formBuilder: FormBuilder,\n public router: Router\n ) {\n super();\n this.ecOnConstruct()\n }\n\n\n ngOnInit() {\n !this.authService.isAuthenticated() && localStorage.removeItem('mail')\n this.loginForm = this.formBuilder.group({\n username: ['', Validators.required],\n password: ['', Validators.required]\n });\n this.ecOnInit()\n\n }\n\n redirectHome = () => {\n $('#collapse_login5').collapse('hide');\n this.router.navigateByUrl('/home')\n }\n\n nagivate(url: string) {\n $('#collapse_login5').collapse('hide');\n this.router.navigateByUrl(`/${url}`);\n }\n\n\n login = ($event) => {\n $event.preventDefault();\n this.loading = true;\n this.authService.login(this.loginForm.value, this.withRoles).toPromise().then(\n res => {\n $('#collapse_login5').collapse('hide');\n if (res == 'ok') {\n localStorage.setItem('mail', this.loginForm.value.username);\n $('#collapse_login5').collapse('hide');\n if (this.redirect) {\n this.redirectHome()\n } else {\n this.loggedIn.emit('true')\n this.ready.emit(this.loginForm.value.username)\n }\n }\n else {\n this.loading = false;\n }\n },\n err => {\n $('#collapse_login5').collapse('hide');\n this.loading = false;\n }\n )\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, partition } from 'rxjs';\nimport { Product } from '../../interfaces/product';\nimport { ProductsService } from './products.service';\nimport { CartService } from '../cart.service';\nimport { ToastService } from '../../utils/toast.service';\nimport { Constants } from '../../core.consts';\nimport _ from \"lodash\";\nimport { AnalyticsService } from '../analytics.service';\nimport { ParamsProductsWithUniqueVariant } from '../../interfaces/paramsInterfaces/paramsProductsWithUniqueVariant';\n\n@Injectable()\nexport class ProductDetailService {\n\n private productSubject = new BehaviorSubject<Product>({});\n private optionsSubject = new BehaviorSubject<any>({});\n private asociatedDataSubject = new BehaviorSubject<any>({ price: '', stock: 0, picture: '' });\n\n private variants = []\n\n public product$ = this.productSubject.asObservable();\n public options$ = this.optionsSubject.asObservable();\n public asociatedData$ = this.asociatedDataSubject.asObservable();\n\n constructor(\n private productsService: ProductsService, private cartService: CartService, private toastrService: ToastService,\n private constants: Constants, public analyticsService: AnalyticsService,) {\n }\n\n /**\n * @param code Identificador del producto\n * @param variant Indica si se está solicitando un producto por su codigo, o por el codigo correspondiente a una de sus variantes\n * \n * Carga el producto solicitado asyncronicamente sin respuesta \n */\n loadProduct = (code, variant: boolean = false) =>\n this.productsService.getSpecificProduct(code, variant).toPromise().then(\n res => variant ? this.initialize(res, code) : this.initialize(res),\n err => this.productSubject.next(null)\n )\n\n /**\n * @param product_id Identificador del producto\n * @param variant Indica si se está solicitando un producto por su codigo, o por el codigo correspondiente a una de sus variantes\n * @async\n * \n * A diferencia del metodo loadProduct, este retorna un valor cuando termina \n */\n getProduct = async (product_id, variant: boolean = false) => {\n let result = await this.productsService.getSpecificProduct(product_id, variant).toPromise();\n if (!result || result.error) this.productSubject.next(null);\n else variant ? this.initialize(result, product_id) : this.initialize(result);\n return true;\n }\n\n private initialize = (product, variant_code?) => {\n this.productSubject.next(product);\n this.optionsSubject.next(this.getOptions())\n variant_code ? this.updateVariants(variant_code) : this.updateVariants();\n this.variants.length && this.generateAsociatedDataFromVariants();\n //this.analyticsService.callEvent('view_item', { ...product, currency: this.constants.currency.code })\n // variant_code && this.analyticsService.callEvent('view_item', { ...product, currency: this.constants.currency.code })\n }\n\n setProduct = (product) => this.isProductValid(product) && this.initialize(product);\n\n isReady = () => this.variants.length == 1;\n\n setOption = (option_code, option_value) => {\n let options = this.optionsSubject.value;\n let option = options.find(element => element.code == option_code).values.find(value => value.name == option_value);\n option.selected = !option.selected;\n options.find(element => element.code == option_code).values.forEach(\n value => { if (value.name != option.name) value.selected = false }\n );\n this.optionsSubject.next(options);\n this.updateVariants();\n this.generateAsociatedDataFromVariants();\n }\n\n changePicture = (picture) => {\n let data = this.asociatedDataSubject.value;\n data.picture = picture;\n this.asociatedDataSubject.next(data);\n }\n\n handleError = (error) => {\n // Whathever we need to do with error\n }\n\n addToCart(quantity) {\n quantity = parseInt(quantity);\n if (!this.variants.length) {\n this.toastrService.show('cant-buy');\n return;\n }\n let product_selected = _.clone(this.productSubject.value);\n if (this.variants.length > 1 || this.variants.length == 0 || this.asociatedDataSubject.value.stock == 0) {\n this.variants.length == 0 && this.toastrService.show('no-variants');\n (this.variants.length > 1 && this.asociatedDataSubject.value.stock > 0) && this.toastrService.show('variants-left');\n (this.variants.length != 0 && this.asociatedDataSubject.value.stock == 0) && this.toastrService.show('out-of-stock');\n return;\n }\n if (!this.validateQuantity(quantity)) return;\n this.cartService.addToCart(this.makeAffordableProduct(product_selected), quantity, this.variants[0].code);\n };\n\n\n\n addToCartPromise = async (quantity) => {\n quantity = parseInt(quantity);\n if (!this.variants.length) {\n return { error: true, message: 'cant-buy' };\n }\n let product_selected = _.clone(this.productSubject.value);\n if (this.variants.length > 1 || this.variants.length == 0 || this.asociatedDataSubject.value.stock == 0) {\n if (this.variants.length == 0) return { error: true, message: 'no-variants' };\n else if (this.variants.length > 1 && this.asociatedDataSubject.value.stock > 0) return { error: true, message: 'variants-left' };\n else if (this.variants.length != 0 && this.asociatedDataSubject.value.stock == 0) return { error: true, message: 'out-of-stock' };\n }\n if (!this.validateQuantity(quantity)) return;\n let result = await this.cartService.addToCartPromise(this.makeAffordableProduct(product_selected), quantity, this.variants[0].code);\n return (result && !(result.error));\n };\n\n private getOptions = (product_received?: Product) => {\n let product = product_received || this.productSubject.value;\n let options = [];\n product.options.forEach(element => {\n options.push(this.toOption(element));\n })\n return options;\n }\n\n private toOption = (preoption) => {\n return {\n name: preoption.label,\n code: preoption.code,\n type: preoption.type,\n values: preoption.values.map(value => ({ name: value.code, description: value.name, selected: false }))\n }\n }\n\n private makeAffordableProduct(product_selected: Product) {\n product_selected.price = parseFloat(this.asociatedDataSubject.value.price);\n product_selected.saleprice = parseFloat(this.asociatedDataSubject.value.price);\n product_selected.options = {};\n this.variants[0].options.forEach(option => product_selected.options = { ...product_selected.options, ...option })\n return product_selected;\n }\n\n private updateVariants = (code?) => {\n let variants = this.productSubject.value.variants;\n if (!code) {\n this.optionsSubject.value.forEach(option => {\n option.values.forEach(value => {\n if (value.selected) {\n variants = variants.filter(variant => {\n return variant.options.some(variant_option => {\n return (option.code in variant_option && variant_option[option.code] == value.name);\n })\n })\n }\n })\n })\n } else {\n variants = variants.filter(variant => variant.code == code);\n }\n this.variants = variants;\n code && this.updateOptions();\n }\n\n private updateOptions = () => {\n let { options } = this.variants.length && this.variants[0];\n options && options.forEach(option => Object.keys(option).forEach(key => this.setOption(key, option[key])))\n }\n\n private generateAsociatedDataFromVariants = () => {\n let asociated: any = {};\n if (this.isReady()) {\n asociated.stock = this.variants[0].stock\n asociated.price = this.variants[0].price.toString()\n asociated.saleprice = this.variants[0].saleprice && this.variants[0].saleprice.toString() || undefined;\n asociated.discount = this.variants[0]?.discount || undefined;\n asociated.properties = this.variants[0].properties ? this.beautifyProperties(this.variants[0].properties) : undefined;\n // asociated.price = this.variants[0].saleprice && this.variants[0].saleprice.toString() || undefined;\n // asociated.saleprice = this.variants[0].price.toString()\n } else {\n asociated.price = this.cratePrice()\n asociated.saleprice = this.crateSalePrice()\n asociated.stock = (this.variants.map(variant => variant.stock)).reduce((a, b) => a + b)\n asociated.discount = this.crateDiscount()\n }\n\n ('images' in this.variants[0] && this.variants[0].images.length > 0)\n ? asociated.picture = this.variants[0].images[0]\n : asociated.picture = (this.asociatedDataSubject.value.picture || this.productSubject.value.picturesdefault[0]);\n\n\n asociated.maximumAmount = this.variants[0]?.maximumAmount || 0\n asociated.minimumAmount = this.variants[0]?.minimumAmount || 0\n\n asociated.maximumItemsQuantity = this.variants[0]?.stock > 0 && 'maximumItemsQuantity' in this.variants[0] ? this.variants[0]?.maximumItemsQuantity : this.variants[0]?.stock\n asociated.minimumItemsQuantity = this.variants[0]?.stock > 0 && 'minimumItemsQuantity' in this.variants[0] && this.variants[0]?.minimumItemsQuantity > 0 ? this.variants[0]?.minimumItemsQuantity : 1\n\n asociated.finalConsumer = {\n finalConsumerPrice: this.variants[0]?.final_consumer_price,\n originalFinalConsumerPrice: this.variants[0]?.original_final_consumer_price,\n }\n\n asociated.taxes = {\n taxIncluded: this.variants[0]?.taxIncluded,\n taxCategory: this.variants[0]?.taxCategory,\n }\n\n this.asociatedDataSubject.next(asociated);\n }\n\n /**\n * @description Recibe las propiedades de una variante y por cada item arma un objeto con \n * el name=clave y value=valor de ese item. \n * @param properties \n * @returns Un arreglo con las propiedades de la forma { name = ... , value = ...}\n */\n private beautifyProperties = ( properties) => {\n let beautifyData = []\n properties.forEach(prop => {\n for ( let key in prop){\n beautifyData.push({name: key, value: prop[key]})\n }\n });\n return beautifyData\n }\n\n private crateDiscount = () => {\n try {\n let all_discount = '';\n this.variants.forEach(variant => {\n variant.discount && (all_discount = all_discount + ', ' + variant.discount);\n });\n if (all_discount == '') {\n return undefined\n }\n return all_discount\n } catch (error) {\n return undefined\n }\n }\n\n private cratePrice = () => {\n let min_price = 0;\n let max_price = 0;\n let all_prices = [];\n this.variants.forEach(variant => {\n all_prices.push(variant.price);\n });\n min_price = all_prices.reduce((a, b) => Math.min(a, b));\n max_price = all_prices.reduce((a, b) => Math.max(a, b), 0);\n return min_price == max_price ? max_price.toString() : min_price + ' - ' + max_price;\n }\n\n private crateSalePrice = () => {\n let min_price = 0;\n let max_price = 0;\n let all_prices = [];\n this.variants.forEach(variant => {\n variant.saleprice && all_prices.push(variant.saleprice);\n });\n if (!all_prices.length) {\n return undefined\n }\n min_price = all_prices.reduce((a, b) => Math.min(a, b));\n max_price = all_prices.reduce((a, b) => Math.max(a, b), 0);\n return min_price == max_price ? max_price.toString() : min_price + ' - ' + max_price;\n }\n\n private inRange = (quantity, min, max) => ((quantity - min) * (quantity - max) <= 0)\n\n private validateQuantity = (quantity: number) => {\n const actualQuantity = this.cartService.getCountFromItemInCart(this.variants[0].code);\n const asociatedData = this.asociatedDataSubject.value;\n console.log('La cantidad que llego: ', quantity, ' y la cantidad actual: ', actualQuantity);\n if ((actualQuantity + quantity) > asociatedData.maximumItemsQuantity) {\n this.toastrService.show('maximum-items-quantity', { quantity: asociatedData.maximumItemsQuantity })\n return false;\n }\n if ((actualQuantity + quantity) < asociatedData.minimumItemsQuantity) {\n this.toastrService.show('minimum-items-quantity', { quantity: asociatedData.minimumItemsQuantity })\n return false;\n }\n return true\n }\n\n // Cuando haya modelos de respuesta, validamos que no se intente cargar un producto incompleto\n private isProductValid = (product: Product) => true;\n\n /**\n * \n * @param options Array de Variantes y sus valores\n * \n * @description Retorna una lista filtrada de las variantes que estan seleccionadas\n */\n private getVariantsSelected(options: any, optionsException: Array<any>): Array<Object> {\n\n let variantsSelected = [];\n options.forEach(v => {\n if (v.values && v.values.length) {\n v.values.forEach(val => {\n if (val.selected && !optionsException.find(op => op.toUpperCase() == v.code.toUpperCase())) {\n variantsSelected[v.code] = val.name;\n }\n })\n }\n });\n\n return variantsSelected;\n\n }\n\n /**\n * \n * @param options Array de Variantes y sus valores\n * @param variants Todas las variantes disponibles del producto\n * \n * @description retorna todas las variantes disponibles a seleccion y su stock\n */\n public getVariantsAvailable(options: any, variants: any, optionsException: Array<any>): any {\n\n let variantsSelected = this.getVariantsSelected(options, optionsException);\n\n let variantsAvailable = [];\n\n variants.map(v => {\n\n let aux = {};\n if (v.options && v.options.length) {\n v.options.map(op => {\n Object.assign(aux, op, { stock: v.stock });\n })\n }\n variantsAvailable.push(aux);\n })\n return variantsAvailable.filter(va => this.constants.containsAll({ ...variantsSelected }, va))\n }\n\n\n /**\n * \n * @param options Array de variantes y sus valores\n * @param code Codigo de la variante a buscar\n * @param name nombre de la variante a buscar\n * @param variants variantes del producto\n * \n * @description busca en la lista de variantes disponibles si hay de ese codigo, ese nombre y con stock \n */\n public existVariantAndHasStock(options, code, name, variants, optionsException = []): boolean {\n\n return this.getVariantsAvailable(options, variants, optionsException).find(va =>\n va.hasOwnProperty(code) && va[code] === name && va.stock > 0)\n }\n\n /**\n * \n * @param product producto el cual se quiere desdoblar por variantes por una opción.\n * @param withOption 'type' tipo de opción, code: código de la opción. 'defaultFirstOption': en caso de que no se pueda desdoblar por la opción indicada si el valor es verdadero se intentara desdoblar por la primera opción asociada al producto.\n * 'checkIfStock': en caso de que esta valor sea verdadero se realiza un control de que la variantes cuenten con stock para ser un producto desdoblado por la variante, si el valor es falso no se realiza dicho control y el producto se desdoblara con stock en 0.\n * @returns arreglo con el producto desdoblado por la variante solicitada.\n * (opción por defecto que se intenta hacer el desdoblamiento 'color', o bien si en le parámetro withOption el atributo 'defaultFirstOption' es verdadero se desdobla por la primera opción asociada al producto ) \n */\n getProductWithUniqueVariant = (product, withOption?: ParamsProductsWithUniqueVariant) => {\n return this.productsService.getProductsWithUniqueVariant([product], withOption)\n }\n\n}","import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { AnalyticsService } from '../../services/analytics.service';\nimport { CartService } from '../../services/cart.service';\nimport { OptionsService } from '../../services/options.service';\nimport { ProductDetailService } from '../../services/products/product-detail.service';\nimport { ProductsService } from '../../services/products/products.service';\nimport { ToastService } from '../../utils/toast.service';\n\n\n@Component({\n selector: 'app-product-detail-ec',\n templateUrl: './product-detail-ec.component.html',\n styleUrls: ['./product-detail-ec.component.scss'],\n providers: [ProductDetailService]\n})\nexport class ProductDetailEcComponent extends ComponentHelper implements OnInit {\n\n public product: any;\n public mediaUrl;\n public show = false;\n public quantity = 1;\n public breadcrumb = [];\n public carousel: any;\n public code = null;\n public focusImage: string = null\n public owlOptions = {}\n \n\n @ViewChild('contact') contact: ElementRef;\n\n constructor(\n public productService: ProductDetailService,\n public consts: Constants,\n protected activedRoute: ActivatedRoute,\n public cartService: CartService,\n public optionsService: OptionsService,\n public productsService: ProductsService,\n public analyticsService: AnalyticsService,\n public router: Router,\n protected toastrService: ToastService) {\n super();\n this.mediaUrl = this.consts.mediaUrl();\n this.activedRoute.params.subscribe(queryParams => {\n let variant: any = (this.activedRoute.snapshot.queryParamMap.get('variant'));\n let code = queryParams.id;\n this.productService.loadProduct(code, variant);\n this.code = queryParams.id\n })\n this.productService.product$.subscribe(res => {\n this.product = res;\n window.scroll(0, 0);\n this.breadcrumb = this.optionsService.getBreadcrumb(this.product.category);\n });\n this.productService.product$.pipe(filter(data => data && data.id && data.id != 0)).subscribe(\n (productParam) => {\n this.analyticsService.callEvent('view_item', { ...productParam, currency: this.consts.currency.code })\n this.changeImgFocus(productParam.picturesdefault[0])}\n )\n this.ecOnConstruct()\n\n }\n\n ngOnInit(): void {\n this.ecOnInit()\n }\n\n addToCart = () => {\n this.quantity > 0 && this.productService.addToCart(this.quantity);\n }\n\n addAllProductosToCart = () => {\n let items = this.product.productWithUniqueVariant?.filter(prod => prod.productToCartItem).map(prod => prod.productToCartItem)\n items?.length && this.cartService.addAllToCart(items)\n }\n\n scroll() {\n let el = this.contact.nativeElement as HTMLElement;\n el.scrollIntoView();\n }\n\n saveRef = (carousel) => {\n this.carousel = carousel;\n }\n\n plus = (stock) => this.quantity < stock ? this.quantity = this.quantity + 1 : this.toastrService.show('out-of-stock-actually');\n less = () => this.quantity > 1 ? this.quantity = this.quantity - 1 : null;\n\n showContact = () => this.show = true;\n hideContact = () => this.show = false;\n\n thereIsMoreInfo = (product: any) => {\n let result;\n if (product?.special_mark && product?.special_mark.length) {\n result = product?.special_mark?.find(special_mark => special_mark.type == 'more_info');\n }\n return result;\n }\n\n changeImgFocus = (img) => {\n this.focusImage = img\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { AuthService } from '../../services/auth.service';\nimport { ProductDetailService } from '../../services/products/product-detail.service';\n\n@Component({\n selector: 'app-product-ec',\n templateUrl: './product-ec.component.html',\n styleUrls: ['./product-ec.component.scss'],\n providers: [ProductDetailService]\n})\nexport class ProductEcComponent extends ComponentHelper implements OnInit {\n\n public quantity = 1;\n public stock = 0\n public data = null\n\n\n constructor(public consts: Constants, public router: Router,public productService: ProductDetailService,public authService: AuthService,) {\n super();\n this.ecOnConstruct()\n }\n @Input() product: any;\n\n ngOnInit(): void {\n this.productService.setProduct(this.product)\n this.productService.asociatedData$.subscribe(res => { this.data = res; this.stock = res.stock })\n this.ecOnInit()\n }\n\n canBuy = () => false;\n\n ngOnChanges() {\n }\n\n buyOrRedirect = (variant = false) => {\n let idredirect = variant && this.product.variants.find(v => v.stock > 0)?.code\n if (!idredirect) { idredirect = this.product.id; variant = false }\n else { if (idredirect.includes(\"/\")) {idredirect = this.product.id ; variant = false} }\n this.router.navigateByUrl(`/product/${idredirect}${variant ? '?variant=true':''}`)\n }\n\n plus = () => this.quantity = this.quantity + 1;\n less = () => this.quantity > 1 ? this.quantity = this.quantity - 1 : null;\n\n addToCart = () => {\n this.productService.addToCart(+this.quantity)\n }\n\n getBrandName = product => {\n if (product && product.attributes)\n return product.attributes\n .filter(attribute => attribute.code === 'marca')\n .map(attribute => attribute.children[0].name)\n }\n}\n","import { Component, OnInit, Input, SimpleChanges } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { take } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { AnalyticsService } from '../../services/analytics.service';\nimport { ProductsService } from '../../services/products/products.service';\n\n@Component({\n selector: 'app-related-products-ec',\n templateUrl: './related-products-ec.component.html',\n styleUrls: ['./related-products-ec.component.scss']\n})\nexport class RelatedProductsEcComponent extends ComponentHelper implements OnInit {\n\n public relatedProducts = [];\n @Input() product_id;\n public name = null;\n\n constructor(protected productsService: ProductsService,\n private analyticsService: AnalyticsService,\n public consts: Constants,\n public router: Router) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.load(this.product_id)\n this.ecOnInit()\n }\n\n load(product_id) {\n this.productsService.getRelatedProducts(product_id).pipe(take(1)).subscribe(\n res => {\n this.relatedProducts = res\n res.map(products => this.analyticsService.callEvent('view_item_list', { products: products.items, item_list_name: products.title || 'Related Products', item_list_id: products.title?.toLowerCase()?.replace(' ', '-') || 'related-products' }))\n },\n //res => res.items ? this.products = res.items : null\n // err => this.toastrService.show('unable-to-fetch-products')\n )\n }\n\n\n ngOnChanges(changes: SimpleChanges) {\n window.scroll({\n top: 0,\n left: 0,\n behavior: 'smooth'\n });\n this.load(changes.product_id.currentValue)\n //this.doSomething(changes.categoryId.currentValue);\n // You can also use categoryId.previousValue and \n // categoryId.firstChange for comparing old and new values\n\n }\n\n\n\n public customOptions: any = {\n loop: true,\n dots: false,\n navSpeed: 950,\n margin: 0,\n navText: ['', ''],\n nav: true,\n responsive: {\n 0: {\n items: 1,\n nav: true\n },\n 600: {\n items: 3,\n nav: true\n },\n 900: {\n items: 4,\n nav: true,\n }\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { OptionsService } from '../../services/options.service';\n\n@Component({\n selector: 'app-section-container-ec',\n templateUrl: './section-container-ec.component.html',\n styleUrls: ['./section-container-ec.component.scss']\n})\nexport class SectionContainerEcComponent extends ComponentHelper implements OnInit {\n\n public content_html: SafeHtml = \"<p>Sin información</p>\";\n public loadSection: boolean = false;\n @Input() sanitizeHtml: boolean = false\n @Input() name = null;\n\n constructor(protected activatedRoute: ActivatedRoute, protected optionsService: OptionsService,\n protected toastrService: ToastrService, protected sanitizer: DomSanitizer) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n if (this.name) {\n this.getSection(this.name)\n } else {\n this.activatedRoute.params.subscribe(\n params => {\n this.name = params.name;\n this.getSection(this.name)\n }\n );\n }\n this.ecOnInit()\n }\n\n getSection = (link: any) => {\n this.loadSection = false\n this.optionsService.getSectionContentByLink(link).toPromise().then(\n html => {\n if (html) this.content_html =\n this.sanitizeHtml\n ? html\n : this.sanitizer.bypassSecurityTrustHtml(html)\n this.loadSection = true\n }\n ,\n error => {\n console.log(error);\n this.loadSection = true\n this.content_html = \"<p>Sin información</p>\";\n this.toastrService.show('No fue posible encontrar la sección solicitada');\n }\n ).catch(error => {\n this.content_html = \"<p>Sin información</p>\"\n this.loadSection = true\n });\n }\n}","import { Component } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { StoresService } from '../../services/stores.service';\n\n@Component({\n selector: 'app-store-ec',\n templateUrl: 'stores-ec.component.html',\n styleUrls: ['stores-ec.component.scss']\n})\nexport class StoresEcComponent extends ComponentHelper {\n\n public filterStores = null\n public storesAll = null\n public exclusiveStores = null\n public imageMap = true\n public urlmap;\n public stores = [];\n public provinces = []\n\n constructor(public storesService: StoresService, public consts: Constants , protected sanitizer: DomSanitizer) {\n super();\n this.urlmap = this.sanitizer.bypassSecurityTrustResourceUrl('https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d13137.519688957545!2d-58.3888163!3d-34.5945533!3m2!1i1024!2i768!4f13.1!5e0!3m2!1ses-419!2sar!4v1523889204148')\n this.storesService.stores.pipe(filter(store => store && store.length > 0)).subscribe(stores => {\n this.storesAll = stores\n this.stores = stores\n this.exclusiveStores = stores.filter(store => store.exclusive )\n this.selectChange('')\n })\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n updateMap(url:string) {\n url = url.includes ('embed') ? url : 'https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d13137.519688957545!2d-58.3888163!3d-34.5945533!3m2!1i1024!2i768!4f13.1!5e0!3m2!1ses-419!2sar!4v1523889204148'\n this.urlmap = this.sanitizer.bypassSecurityTrustResourceUrl(url)\n }\n\n /**\n * @description Obtiene todas la provincias que figuren en el arreglo\n * @param stores Arreglo de tiendas\n * @returns {Array} Arreglo de provincias\n */\n getProvices = (stores) => {\n let provincesOpt = []\n stores.forEach(store => {\n if (provincesOpt.find(s => s.code == store.province.code) == undefined) {\n provincesOpt.push(store.province)\n }\n });\n return provincesOpt\n }\n\n /**\n * @description Retorna un arreglo de objetos formado por las claves \n * \"province\"(contiene un objeto provincia) y\n * \"stores\" (contiene un arreglo de tiendas pertenecientes a la provincia)\n * @param stores Opcional, arreglo de tiendas a la que se le quiere aplicar la division por provincia\n * @returns {Array<{\"province\", \"stores\"}>}\n */\n getStoresByProvinces = (stores = this.stores) => {\n let storesByProvinces = []\n if(stores){\n let provinces = this.getProvices(stores)\n provinces.forEach( elem => {\n let aux = stores?.filter(store => store.province.code == elem.code)\n storesByProvinces.push({province:elem,stores:aux})\n })\n }\n return storesByProvinces\n } \n\n /**\n * @description Retorna las tiendas con/sin retiro en el local\n * @param stores Opcional, arreglo de tiendas \n * @param cond Opcional, Si es \"true\" obtiene las tiendas con retiro local caso contrario \"false\"\n * @returns {Array<Store>} Arreglo de Store\n */\n getPickupStores = (stores = this.stores, cond:Boolean = true) => stores && stores.filter(store => cond == store.pickupStore)\n\n /**\n * @description Metodo que devuelve las tiendas que NO son exclusivas.\n * @returns {Array<Store>} Arreglo de Store\n */\n getNonExclusiveStores = () => this.stores.filter(store => !store.exclusive )\n\n selectChange = (select) => {\n this.filterStores = select != '' && this.storesAll.filter(store => store.province.code == select) || this.storesAll\n return true\n }\n\n}\n","import { Component, Input } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { ProductDetailService } from '../../services/products/product-detail.service';\ndeclare var $: any;\n\n@Component({\n selector: 'app-product-variants-ec',\n templateUrl: 'variants-ec.component.html',\n styleUrls: ['variants-ec.component.scss']\n})\nexport class VariantsEcComponent extends ComponentHelper {\n\n @Input() product;\n @Input('options') options$;\n @Input() setOption;\n\n constructor(public consts: Constants, public productService: ProductDetailService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n setSeleccion = (values) => {\n $('#op').attr('disabled', true); \n let valores = values.split(',')\n if (valores.length != 2) return\n console.log(values);\n console.log(valores);\n this.setOption(valores[0], valores[1])\n }\n\n view = (length, options) => {\n // console.log('LAS OPCIONES', options);\n return length > 1;\n }\n\n\n\n}","import { Component, Inject, Input, OnInit } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { AuthService } from \"../../services/auth.service\";\nimport { ToastService } from '../../utils/toast.service';\nimport { Constants } from '../../core.consts';\nimport { take } from 'rxjs/operators';\nimport Fuse from 'fuse.js'\n\nexport type SellerDashboardUI =\n | 'HEADER_TAB'\n | 'GENERATE_BUDGET_BTN'\n | 'MANAGE_ORDERS_BTN'\n | 'SORT_SELECT'\n | 'SEARCH_FORM'\n | 'ORDER_COUNTER'\n\n@Component({\n selector: 'app-seller-dashboard-container',\n templateUrl: 'seller-dashboard-container-ec.component.html',\n styleUrls: ['seller-dashboard-container-ec.component.scss']\n})\nexport class SellerDashboardContainerEcComponent extends ComponentHelper implements OnInit {\n\n @Input() UIComponents: SellerDashboardUI[] = []\n \n public user = null\n public activeCustomer = null\n public sortValue = ''\n public searchInput = ''\n public customers = []\n public filteredCustomers = []\n private fuseOptions = {\n isCaseSensitive: false,\n shouldSort: false,\n tokenize: true,\n threshold: 0.2,\n location: 0,\n distance: 100,\n maxPatternLength: 32,\n minMatchCharLength: 0,\n keys: ['firstName', 'lastName', 'email', 'id']\n }\n private fuse = new Fuse(this.customers, this.fuseOptions)\n\n constructor(protected authService: AuthService, protected toastrService: ToastService, protected constants: Constants, @Inject('env') protected env) {\n super()\n this.ecOnConstruct()\n }\n\n updateCustomers = () => {\n this.filteredCustomers = this.customers\n this.fuse.setCollection(this.filteredCustomers)\n\n this.filteredCustomers =\n this.searchInput\n ? this.fuse\n .search(this.searchInput)\n .map(customer => customer.item)\n : this.customers\n\n this.fuse.setCollection(this.filteredCustomers)\n this.sortCustomers(this.sortValue)\n }\n\n /**\n * @description Ordena la lista de clientes\n * @param value recibe una cadena que de estar formada de la forma \"tipoOrdenacion_atributoPorOrdenar\"\n * Ejemplo: \"asc_firstName\" o \"desc_id\" ...\n */\n sortCustomers = value => {\n \n this.sortValue = value\n \n let values = (value as string).split('_')\n let sortType = values[0]\n let attribute = values[1] \n\n const comparator =\n (sortType == 'asc')\n ? [-1, 1]\n : [1, -1]\n\n let typeValue\n if(this.filteredCustomers.length > 0){\n typeValue = typeof(this.filteredCustomers[0][attribute])\n }\n let sortFunction = typeValue == 'number' ? this.sortNumber : this.sortText\n \n this.filteredCustomers =\n this.sortValue\n ? this.filteredCustomers.sort( (aCustomer,otherCustomer) => sortFunction(aCustomer,otherCustomer,attribute,comparator))\n : this.filteredCustomers\n }\n\n private sortNumber = (aCustomer, otherCustomer, attribute, comparator) => aCustomer[attribute] < otherCustomer[attribute] ? comparator[0] : comparator[1]\n\n private sortText = (aCustomer, otherCustomer, attribute, comparator) => {\n return (aCustomer[attribute] == otherCustomer[attribute])\n ? aCustomer.lastName.toLowerCase() < otherCustomer.lastName.toLowerCase() ? comparator[0] : comparator[1]\n : String(aCustomer[attribute]).toLowerCase() < String(otherCustomer[attribute]).toLowerCase() ? comparator[0] : comparator[1]\n }\n\n changeCustomer = customer => {\n this.authService.setCustomer(customer)\n customer\n ? this.toastrService.show('start-impersonating', { customer: customer.firstName + ' ' + customer.lastName })\n : this.toastrService.show('stop-impersonating')\n }\n\n hasHeader = () =>\n this.hasUIComponent('HEADER_TAB') ||\n this.hasUIComponent('GENERATE_BUDGET_BTN') ||\n this.hasUIComponent('MANAGE_ORDERS_BTN') ||\n this.hasUIComponent('SORT_SELECT') ||\n this.hasUIComponent('SEARCH_FORM')\n\n navigateExternal = url => window.open(url)\n\n hasUIComponent = (UIComponent: SellerDashboardUI) => this.UIComponents.includes(UIComponent)\n\n ngOnInit() {\n this.authService.getUserProfile()\n .pipe(take(1))\n .subscribe(user => {\n this.user = user\n this.customers = user.customers\n this.filteredCustomers = this.customers\n this.fuse.setCollection(this.filteredCustomers)\n this.sortCustomers('desc_ordersNotApproved')\n })\n \n }\n\n}\n","import { Component, Input } from '@angular/core';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-loading-full-ec',\n templateUrl: 'loading-full-ec.component.html',\n styleUrls: ['loading-full-ec.component.scss']\n})\nexport class LoadingFullEcComponent extends ComponentHelper {\n\n @Input() hole_height = false;\n \n constructor() {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n}","import { Component } from '@angular/core';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-loading-inline-ec',\n templateUrl: 'loading-inline-ec.component.html',\n styleUrls: ['loading-inline-ec.component.scss']\n})\nexport class LoadingInlineEcComponent extends ComponentHelper {\n\n constructor() {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n}","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ToastService } from '../../../../utils/toast.service';\nimport { Constants } from '../../../../core.consts';\nimport { ConnectionService } from '../../../../api/connection.service';\nimport { CartService } from '../../../../services/cart.service';\nimport { ComponentHelper } from '../../../../classes/component-helper';\n\ndeclare var Mercadopago: any;\n\n@Component({\n selector: '[app-mp-credit-ec]',\n templateUrl: 'mpcredit-ec.component.html',\n styleUrls: ['mpcredit-ec.component.scss']\n})\nexport class MPCreditEcComponent extends ComponentHelper implements OnInit {\n\n @Input() public_key;\n @Input() total_amount;\n @Output() ready = new EventEmitter();\n @Input() user_data;\n\n public installments = [];\n public installment;\n public installment_data;\n public issuers = [];\n public issuer_id;\n public merchant_account_id;\n public doSubmit = false;\n public payment_method = '';\n public require_issuer = false;\n public allready_payed = false;\n public payment_method_option_id;\n public payment_method_id;\n public processing_mode;\n public token;\n public email;\n public doc_number;\n public doc_type = \"DNI\";\n public bin;\n public code;\n public month;\n public year;\n public cardholder;\n\n protected finishApi = () => 'shop-api/' + this.consts.getChannel() + '/mercado-pago/' + this.cartService.cart_token + '/process-payment';\n\n constructor(protected renderer: Renderer2, protected connection: ConnectionService,\n public consts: Constants, protected cartService: CartService, protected toastr: ToastService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n //console.log('SHIPMENT DATA', this.user_data);\n var s = this.renderer.createElement(\"script\");\n this.renderer.setAttribute(s, 'src', 'https://secure.mlstatic.com/sdk/javascript/v1/mercadopago.js');\n this.renderer.appendChild(document.body, s);\n setTimeout(() => {\n Mercadopago.setPublishableKey(this.public_key);\n }, 1000)\n this.ecOnInit()\n\n }\n\n expiryChange = (event) => {\n let fecha = (event.target.value).replace(/ /g, \"\");\n let fechaSplit = fecha.split('/')\n if (fechaSplit.length == 2) {\n this.month = fechaSplit[0]\n this.year = fechaSplit[1]\n }\n }\n\n expiryOnKey = (event) => {\n let key = event.keyCode || event.charCode;\n let fecha = (event.target.value).replace(/ /g, \"\");\n if (key != 8 && fecha.length == 2) {\n event.target.value = fecha + '/'\n }\n }\n\n cardNumberChange = (event) => {\n //console.log('TOMA EL ON CHANGE DE TARJETA');\n this.restartInstallments();\n this.guessPaymentMethod(event);\n }\n\n verifyValidate = (data) => {\n // FALTA SACAR EL PAYMENT METOD OPTTION ID\n let post_data = {\n token: data.id,\n issuer_id: this.issuer_id,\n installments: this.installment,\n merchant_account_id: this.merchant_account_id,\n payment_method_option_id: this.payment_method_option_id,\n payment_method_id: this.payment_method_id,\n processing_mode: this.processing_mode,\n email: this.email,\n document_type: this.doc_type,\n document_number: this.doc_number,\n };\n //console.log('LA DATA QUE VA A MANDAR: ', post_data);\n this.connection.post(this.finishApi(), post_data).toPromise().then(this.processResponse, this.processError)\n }\n\n // Obtener método de pago de la tarjeta\n\n guessPaymentMethod = (event) => {\n //console.log('SE LLAMA AL GUESS PAYMENT');\n let cardnumber = (event.target.value).replace(/ /g, \"\");\n this.setPaymentMethod.bind(this);\n if (cardnumber.length >= 6) {\n let bin = cardnumber.substring(0, 6);\n this.getPaymentMethod(bin);\n }\n };\n\n getPaymentMethod = (bin) => {\n let data_to_send = {\n public_key: this.public_key,\n marketplace: 'NONE',\n status: 'active',\n js_version: '1.3.1',\n bins: bin,\n referer: 'http://enzoshoes.easycommercetech.com'\n }\n\n this.connection.getOutsiderWithParams('https://api.mercadopago.com/v1/payment_methods/search', data_to_send).toPromise().then((res) => {\n //console.log('LA RESPUESTA DEL SEARCH PAYMENT METHOD: ', res);\n if (res && res.results && res.results.length) {\n const payment_data = res.results.find(result => result.processing_mode == \"gateway\") || res.results[0];\n if (payment_data.payment_type_id != \"credit_card\") {\n this.toastr.show('Debe ingresar información de una tarjeta de credito');\n return;\n }\n this.payment_method = payment_data.id;\n this.issuer_id = payment_data.issuer.id;\n payment_data.payer_costs.forEach(payerCost => {\n this.installments.push({ ...payerCost, name: ('Cuotas: ' + payerCost.installments + ' - Total: ' + this.calculateTotal(payerCost)), value: payerCost.installments });\n });\n this.installment_data = payment_data;\n } else {\n this.toastr.show('El número de tarjeta ingresado no es valido');\n }\n }).catch(err => this.toastr.show('Hubo un error al obtener la información de la tarjeta. Verifique que los datos sean correctos.'));\n }\n\n setPaymentMethod = (status, response) => {\n //console.log('SE LLAMA AL SET PAYMENT', response);\n let paymentMethod = response[0];\n this.payment_method = paymentMethod.id;\n this.getIssuers.bind(this);\n this.getInstallments.bind(this);\n if (paymentMethod.additional_info_needed.includes(\"issuer_id\")) {\n this.getIssuers(paymentMethod.id);\n } else {\n // this.issuer_id = response.issuer\n this.getInstallments(\n paymentMethod.id,\n this.total_amount\n );\n }\n }\n\n // Obtener banco emisor\n\n getIssuers = (paymentMethodId) => {\n this.restartInstallments();\n this.require_issuer = true;\n //console.log('SE LLAMA AL GET ISSUER');\n this.setIssuers.bind(this);\n Mercadopago.getIssuers(\n paymentMethodId,\n this.setIssuers\n );\n }\n\n setIssuers = (status, response) => {\n //console.log('SE LLAMA AL SET ISSUER', response);\n this.getInstallments.bind(this);\n if (status == 200) {\n response.forEach(issuer => {\n this.issuers.push({ name: issuer.name, value: issuer.value });\n });\n } else {\n this.toastr.show('Error al obtener proveedores disponibles');\n }\n }\n\n // UTILS\n\n restartInstallments = () => {\n this.installments = [];\n this.installment_data = null;\n this.merchant_account_id = null;\n this.payment_method_option_id = null;\n this.issuer_id = null;\n this.payment_method_id = null;\n }\n\n selectIssuer = (value) => {\n this.issuer_id = value;\n this.getInstallments(this.payment_method, this.total_amount, this.issuer_id);\n }\n\n selectInstallment = (value) => {\n const cost = this.installments.find(installment_cost => installment_cost.value == value);\n this.installment = cost.value;\n this.merchant_account_id = this.installment_data.merchant_account_id;\n this.payment_method_option_id = cost.payment_method_option_id || (this.installment_data.agreements && this.installment_data.agreements[0].merchant_accounts[0].payment_method_option_id);\n this.issuer_id = this.installment_data.issuer.id;\n this.payment_method_id = this.installment_data.payment_method_id || this.installment_data.id;\n this.processing_mode = this.installment_data.processing_mode;\n\n //console.log('COMO QUEDAN: ', this.merchant_account_id, this.payment_method_option_id, this.issuer_id, this.payment_method_id, this.installment);\n // this.payme\n }\n\n // Obtener cantidad de cuotas\n\n getInstallments = (paymentMethodId?, transactionAmount?, issuerId?) => {\n let payment = paymentMethodId || this.payment_method;\n let amount = transactionAmount || this.total_amount;\n //console.log('SE LLAMA AL GET INSTALLMENTS');\n this.setInstallments.bind(this);\n let data = {\n \"payment_method_id\": payment,\n \"bin\": this.bin.replace(/ /g, \"\"),\n \"amount\": parseFloat(amount),\n \"issuer_id\": issuerId ? parseInt(issuerId) : undefined\n };\n //console.log('LO QUE VA A MANDAR AL GET INSTALLMENTS');\n Mercadopago.getInstallments(data, this.setInstallments);\n }\n\n setInstallments = (status, response) => {\n //console.log('LA RESPUESTA DEL GET INSTALLMENTS', response);\n if (status == 200 && response.length) {\n this.installments = [];\n response[0].payer_costs.forEach(payerCost => {\n this.installments.push({ ...payerCost, name: payerCost.recommended_message, value: payerCost.installments });\n });\n this.installment_data = response[0];\n } else {\n // alert(`installments method info error: ${response}`);\n this.toastr.show('Hubo un error al obtener las cuotas disponibles. Vuelva a intentarlo más tarde');\n }\n }\n\n // Crea el token de la tarjeta\n\n getCardToken = (event) => {\n //console.log('SE LLAMA AL GET CARD TOKEN');\n event.preventDefault();\n if (!this.doSubmit) {\n let $form = document.getElementById('paymentForm');\n Mercadopago.createToken.bind(this)($form, this.setCardTokenAndPay);\n return false;\n }\n };\n\n setCardTokenAndPay = (status, response) => {\n //console.log('SE LLAMA AL SET CARD TOKEN AND PAY');\n if (status == 200 || status == 201) {\n let form = document.getElementById('paymentForm');\n let card = document.createElement('input');\n card.setAttribute('name', 'token');\n card.setAttribute('type', 'hidden');\n card.setAttribute('value', response.id);\n form.appendChild(card);\n this.token = response.id;\n this.doSubmit = true;\n // form.submit();\n // TERMINAR\n this.verifyValidate(response);\n } else {\n //console.log('EL RESPONSE: ', response);\n this.toastr.show(this.parseErrorMessage(status));\n }\n };\n\n // UTILS\n\n isInvalid = () => {\n const result = (\n !this.issuer_id ||\n !this.payment_method_id ||\n !this.payment_method_option_id ||\n (this.processing_mode == 'gateway' && !this.merchant_account_id) ||\n !this.installment ||\n !this.email ||\n !this.doc_type ||\n !this.doc_number ||\n this.allready_payed ||\n !this.code ||\n !this.month ||\n !this.year ||\n !this.cardholder\n )\n return result;\n }\n\n calculateTotal = (cost) => {\n let result = this.total_amount + ((this.total_amount * cost.installment_rate) / 100);\n result = parseFloat(result).toFixed(2);\n return result;\n }\n\n processResponse = (response) => {\n if (response.status !== 'rejected') {\n //console.log('SE PUDO EFECTUAR LA COMPRA');\n this.ready.emit('true');\n return;\n }\n this.processError(response);\n }\n\n processError = (response) => {\n this.allready_payed = false;\n if (response.status_detail) {\n switch (response.status_detail) {\n case 'rejected': this.toastr.show('Revisa el número de tarjeta.'); break;\n case 'rejected': this.toastr.show('Revisa la fecha de vencimiento.'); break;\n case 'rejected': this.toastr.show('Revisa los datos.'); break;\n case 'rejected': this.toastr.show('Revisa el código de seguridad de la tarjeta.'); break;\n case 'rejected': this.toastr.show('No pudimos procesar tu pago.'); break;\n case 'rejected': this.toastr.show('Debes autorizar ante payment_method_id el pago de amount.'); break;\n case 'rejected': this.toastr.show('Llama a payment_method_id para activar tu tarjeta o usa otro medio de pago. El teléfono está al dorso de tu tarjeta.'); break;\n case 'rejected': this.toastr.show('No pudimos procesar tu pago.'); break;\n case 'rejected': this.toastr.show('Ya hiciste un pago por ese valor. Si necesitas volver a pagar usa otra tarjeta u otro medio de pago.'); break;\n case 'rejected': this.toastr.show('Tu pago fue rechazado. Elige otro de los medios de pago, te recomendamos con medios en efectivo.'); break;\n case 'rejected': this.toastr.show('Tu payment_method_id no tiene fondos suficientes.'); break;\n case 'rejected': this.toastr.show('payment_method_id no procesa pagos en installments cuotas.'); break;\n case 'rejected': this.toastr.show('Llegaste al límite de intentos permitidos. Elige otra tarjeta u otro medio de pago.'); break;\n case 'rejected': this.toastr.show('payment_method_id no procesó el pago.'); break;\n }\n return;\n }\n this.toastr.show('Hubo un error al intentar realizar el pago. Vuelva a intentarlo más tarde');\n }\n\n parseErrorMessage = (status_code) => {\n switch (status_code) {\n case 205: return ('Ingresa el número de tu tarjeta.');\n case 208: return ('Elige un mes.');\n case 209: return ('Elige un año.');\n case 212: return ('Ingresa tu tipo de documento.');\n case 213: return ('Ingresa tu documento.');\n case 214: return ('Ingresa tu documento.');\n case 220: return ('Ingresa tu banco.');\n case 221: return ('Ingresa el nombre y apellido.');\n case 224: return ('Ingresa el código de seguridad.');\n case 316: return ('Ingresa un nombre válido.');\n case 322: return ('El tipo de documento es inválido.');\n case 323: return ('Revisa tu documento.');\n case 324: return ('El documento es inválido.');\n case 325: return ('El mes es inválido');\n case 326: return ('El año es inválido');\n default: return ('Verifique que los datos sean correctos.');\n }\n }\n\n getDescripcionCuota = (itemCuota) => {\n //console.log(itemCuota);\n return itemCuota.name\n }\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { ProductsService } from '../../../services/products/products.service';\n\n@Component({\n selector: 'app-price-ec',\n templateUrl: 'price-ec.component.html',\n styleUrls: ['price-ec.component.scss']\n})\n\nexport class PriceEcComponent extends ComponentHelper implements OnInit {\n\n @Input() price;\n @Input() saleprice;\n @Input() priceSize: boolean = true\n @Input() classStrSpacing;\n\n constructor(public productsService: ProductsService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n}","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { combineLatest } from 'rxjs';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CartService } from '../../../services/cart.service';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\ndeclare var $: any;\n\n@Component({\n selector: 'app-redsys-catch-ec',\n templateUrl: './redsys-catch-ec.component.html',\n styleUrls: ['./redsys-catch-ec.component.scss']\n})\nexport class RedsysCatchEcComponent extends ComponentHelper implements OnInit {\n\n public message = ''\n\n constructor(public activedRoute: ActivatedRoute, public router: Router, public checkoutService: CheckoutService) {\n super();\n $(\"header\").hide();\n $(\"footer\").hide();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n let state\n combineLatest([this.activedRoute.params, this.activedRoute.queryParams]).subscribe(([queryRouter, queryParams]) => {\n state = queryRouter.state\n state && state == 'statuspayment' && (state = queryParams.status)\n console.log('PARAMETROS STATE -> ', state);\n switch (state) {\n case '200':\n state = 'success'\n this.setStateInLocal('Su pago fue procesado con éxito.', state)\n break;\n case 'success':\n this.setStateInLocal('Su pago fue procesado con éxito.',state)\n break;\n case 'pending':\n this.setStateInLocal('Su pago fue procesado con éxito.', state)\n break;\n case 'failure':\n this.setStateInLocal('Se ha cancelado el proceso de pago.', state)\n break;\n case 'cancel':\n this.setStateInLocal('Se ha cancelado el proceso de pago.', state)\n break;\n case 'ok':\n this.setStateInSesion('Su pago fue procesado con éxito.', state)\n break;\n case 'challenge':\n this.setStateInSesion('Redirigiendo a autenticación del banco emisor.', state)\n break;\n case 'error':\n this.setStateInSesion('Algo no salio bien en la validación de sus datos.', state)\n break;\n case '0':\n state = 'failure'\n this.setStateInLocal('Se ha cancelado el proceso de pago.', state)\n break;\n default:\n break;\n }\n })\n this.ecOnInit()\n }\n\n\n setStateInLocal = (mensaje, state) => {\n this.message = mensaje\n localStorage.setItem('state', state)\n sessionStorage.setItem('modalnews', 'false')\n }\n\n setStateInSesion = (mensaje, state) => {\n this.message = mensaje\n sessionStorage.setItem('state', state)\n localStorage.setItem('state', state)\n sessionStorage.setItem('modalnews', 'false')\n }\n\n}\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { CartService } from '../../../services/cart.service';\nimport { Constants } from '../../../core.consts';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n/** @dynamic */\n@Component({\n selector: 'app-redsys-pro-ec',\n templateUrl: 'redsys-pro-ec.component.html',\n styleUrls: ['redsys-pro-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class RedSysProEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method;\n @Input() total_amount = 0;\n @Output() ready = new EventEmitter();\n @Input() user_data;\n @ViewChild('formDobleAuthContainer') protected formDobleAuth: ElementRef;\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n\n protected intentoRequest: boolean = false\n public loading = true;\n public isDobleAuth = false;\n public urls = [];\n public closeModal = ''\n protected finishApi = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/' + this.cartService.cart_token + '/process-payment';\n protected challengeApi = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/3ds-challenge';\n protected merchantOrder = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/' + this.cartService.cart_token + '/ds-merchant-order';\n \n constructor(protected renderer: Renderer2, protected connection: ConnectionService, protected toastrService: ToastService,\n public consts: Constants, public cartService: CartService, protected toastr: ToastService, @Inject(DOCUMENT) protected document: Document,\n protected activedRoute: ActivatedRoute,protected modalService: BsModalService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n console.log(\"SE CAMBIO\");\n }\n\n \n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n sessionStorage.setItem('method', JSON.stringify(this.method))\n sessionStorage.setItem('user_data', JSON.stringify(this.user_data))\n sessionStorage.setItem('finishApi',this.finishApi())\n sessionStorage.setItem('challengeApi',this.challengeApi())\n sessionStorage.setItem('merchantOrder',this.merchantOrder())\n this.modalRef = this.modalService.show(template, { class: 'modal-lg modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con tarjeta')\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : sessionStorage.getItem('state')\n console.log(state);\n if (state && state != 'challenge') {\n sessionStorage.removeItem('state')\n if (state == 'ok') {\n this.modalRef.hide()\n this.ready.emit(true)\n return \n }\n if (state == 'menosuno') {\n this.modalRef.hide()\n this.processError('')\n return \n }\n if (state == 'cancel') {\n return \n }\n this.modalRef.hide()\n this.processError('')\n return \n }\n setTimeout(() => {\n this.callState()\n }, 6000); \n \n }\n\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n}","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-redsys-redirect-ec',\n templateUrl: 'redsys-redirect-ec.component.html',\n styleUrls: ['redsys-redirect-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class RedSysRedirectEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Output() ready = new EventEmitter();\n @Input() user_data = null;\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n\n public loading = true;\n public isDobleAuth = false;\n public urls = [];\n public closeModal = ''\n protected dataRedirect = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2, \n public connection: ConnectionService, \n public toastrService: ToastService,\n public consts: Constants, \n public cartService: CartService, \n public toastr: ToastService, \n public activedRoute: ActivatedRoute,\n public modalService: BsModalService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n console.log(\"SE CAMBIO\");\n }\n \n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n sessionStorage.setItem('dataRedirect',this.dataRedirect())\n this.modalRef = this.modalService.show(template, { class: 'modal-lg modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con tarjeta')\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : sessionStorage.getItem('state')\n console.log(state);\n if (state) {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n if (state == 'ok') {\n this.modalRef.hide()\n this.ready.emit(true)\n return \n }\n if (state == 'menosuno') {\n this.modalRef.hide()\n this.processError('')\n return \n }\n if (state == 'cancel') {\n return \n }\n this.modalRef.hide()\n this.processError('')\n return \n }\n setTimeout(() => {\n this.callState()\n }, 6000); \n \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n}","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-ceca-redirect-ec',\n templateUrl: 'ceca-redirect-ec.component.html',\n styleUrls: ['ceca-redirect-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class CecaRedirectEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Output() ready = new EventEmitter();\n @Input() user_data = null;\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n\n public loading = true;\n public isDobleAuth = false;\n public urls = [];\n public closeModal = ''\n protected dataRedirect = () => this.consts.getUrlBase() + 'shop-api/' + this.consts.getChannel() + '/cecabank/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2, \n public connection: ConnectionService, \n public toastrService: ToastService,\n public consts: Constants, \n public cartService: CartService, \n public toastr: ToastService, \n public activedRoute: ActivatedRoute,\n public modalService: BsModalService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n console.log(\"SE CAMBIO\");\n }\n \n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n localStorage.setItem('dataRedirect',this.dataRedirect())\n this.modalRef = this.modalService.show(template, { class: 'modal-lg modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con tarjeta')\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n console.log(state);\n if (state) {\n localStorage.removeItem('state')\n if (state == 'success') {\n this.modalRef.hide()\n this.ready.emit(true)\n return \n }\n if (state == 'pending') {\n this.modalRef.hide()\n this.ready.emit(true)\n return\n }\n if (state == 'failure') {\n this.modalRef.hide()\n this.processError('')\n return \n }\n if (state == 'cancel') {\n this.processError('Se cancelo el pago')\n return \n }\n this.modalRef.hide()\n this.processError('')\n return \n }\n setTimeout(() => {\n this.callState()\n }, 6000); \n \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n}","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport * as moment from 'moment';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { OrdersService } from '../../../services/account/orders.service';\n// import { OwlOptions } from 'projects/ng-easycommerce/src/lib/ec-component/product-detail-ec/node_modules/projects/ng-easycommerce/src/lib/ec-component/home-ec/node_modules/ngx-owl-carousel-o';\n\n@Component({\n selector: 'app-orders-ec',\n templateUrl: 'orders-list-ec.component.html',\n styleUrls: ['orders-list-ec.component.scss']\n})\nexport class OrdersEcComponent extends ComponentHelper implements OnInit {\n\n public mediaUrl;\n public orders;\n public loading = true;\n public error;\n\n constructor(public ordersService: OrdersService, public router: Router, protected consts: Constants) {\n super();\n this.mediaUrl = this.consts.mediaUrl();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.loading = true;\n this.ordersService.updateOrders();\n this.ordersService.orders$.pipe(filter(or => or)).subscribe(\n orders => {\n this.orders = this.sortedByNewest(orders);\n this.loading = false\n },\n err => {\n this.loading = false\n this.error = 'orders-error';\n }\n )\n this.ecOnInit()\n\n }\n\n sortedByNewest = orders => orders && orders.length && orders.sort((anOrder, otherOrder) => anOrder.number > otherOrder.number ? -1 : 1)\n\n goToOrder = (order) => {\n this.ordersService.setSelectedOrder(order);\n this.router.navigateByUrl((`account/orders/${order.number}`))\n }\n\n toDate = (date, format) => moment(date).format(!format && 'DD/MM/YYYY, h:mm:ss a' || format)\n\n optionsBox = {\n loop: true,\n autoplay: true,\n smartSpeed: 950,\n margin: 10,\n dots: false,\n dotsData: false,\n navText: [\"\", \"\"],\n responsive: {\n 0: {\n items: 1,\n },\n 600: {\n items: 1,\n },\n 1000: {\n items: 1,\n }\n }\n }\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport * as moment from 'moment';\nimport { OrdersService } from '../../../services/account/orders.service';\nimport { Constants } from '../../../core.consts';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-order-ec',\n templateUrl: 'order-ec.component.html',\n styleUrls: ['order-ec.component.scss']\n})\nexport class OrderEcComponent extends ComponentHelper implements OnInit {\n\n protected orderSubject = new BehaviorSubject<any>({});\n\n public order$ = this.orderSubject.asObservable();\n public order = null\n public loading = true;\n public error;\n @Input() numberOrder = null\n\n constructor(public ordersService: OrdersService, protected activedRoute: ActivatedRoute, public router: Router, public consts: Constants) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.loading = true;\n this.ordersService.selectedOrder$.subscribe(\n async res => {\n let order;\n if (this.numberOrder == null) {\n this.numberOrder = this.activedRoute.snapshot.params.number\n }\n if (res) order = res;\n else order = await this.ordersService.findOrder(this.numberOrder);\n order && this.orderSubject.next(order);\n !order && this.callError();\n this.order = order\n this.loading = false;\n }),\n err => {\n this.ordersService.error$.toPromise().then(res => this.error = res);\n this.loading = false;\n this.callError();\n }\n this.ecOnInit()\n }\n\n toDate = (date, format) => moment(date).format(!format && 'DD/MM/YYYY, h:mm:ss a' || format)\n\n callError = () => {\n this.error = '?';\n this.router.navigateByUrl('account/orders');\n }\n\n volver = () => this.router.navigateByUrl('account/orders');\n\n}","import { Component, Input, OnInit, OnChanges } from '@angular/core';\nimport { take } from 'rxjs/operators';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AuthService } from '../../services/auth.service';\nimport { ToastService } from '../../utils/toast.service';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { ParametersService } from '../../services/parameters.service';\n\n@Component({\n selector: 'app-auth-ec',\n templateUrl: 'auth-ec.component.html',\n styleUrls: ['auth-ec.component.scss']\n})\nexport class AuthEcComponent extends ComponentHelper implements OnInit, OnChanges {\n\n @Input() complete = true;\n public data = {\n email: null,\n password: null,\n nombre: null,\n apellido: null,\n }\n @Input() redirect = true;\n public loginForm: FormGroup;\n public registerForm: FormGroup;\n public loading: Boolean = false;\n public register_loading: Boolean = false;\n public params: any = [];\n\n\n constructor(public authService: AuthService, protected toastr: ToastService,\n public paramsService: ParametersService,\n protected activatedRoute: ActivatedRoute,\n protected formBuilder: FormBuilder, public router: Router) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.paramsService.parameters.subscribe(res => this.params = res);\n (this.authService.isAuthenticated() && this.complete) && this.router.navigateByUrl('/');\n this.loginForm = this.formBuilder.group({\n username: ['', Validators.required],\n password: ['', Validators.required]\n });\n this.registerForm = this.formBuilder.group({\n firstName: ['', Validators.required],\n lastName: ['', Validators.required],\n email: ['', Validators.required],\n plainPassword: ['', Validators.required],\n newsletter: [false],\n terms: ['', Validators.required],\n });\n\n this.activatedRoute.params.subscribe(\n params => {\n if (params?.data) {\n let resul = JSON.parse(atob(params.data))\n resul && this.authService.doLoginUser(resul)\n }\n }\n );\n this.ecOnInit()\n\n }\n\n ngOnChanges() {\n (this.authService.isAuthenticated() && this.complete) && this.router.navigateByUrl('/');\n }\n\n setProp = (prop, event) => {\n this.data[prop] = event.target.value;\n }\n\n login = () => this.redirect && this.redirectHome();\n\n redirectHome = () => {\n setTimeout(() => this.router.navigateByUrl('/'), 1500);\n }\n\n register = (event) => {\n event.preventDefault();\n this.register_loading = true;\n if (this.registerForm.valid) {\n this.authService.signUp(this.registerForm.value).toPromise().then(\n res => {\n this.register_loading = false;\n this.toastr.show('register-ok');\n this.router.navigateByUrl('home')\n },\n error => {\n this.register_loading = false;\n if (error.status == 400) {\n this.toastr.show('El email ingresado ya se encuentra registrado.');\n } else {\n this.toastr.show('Error en el registro. Vuelva a intentarlo más tarde.');\n }\n }\n )\n } else {\n this.toastr.show('invalid-form');\n }\n }\n}\n\n\n\n\n\n","import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { Router } from \"@angular/router\";\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { ToastService } from '../../../utils/toast.service';\n\n@Component({\n selector: 'app-register-form-ec',\n templateUrl: 'register-form-ec.component.html',\n styleUrls: ['register-form-ec.component.scss']\n})\nexport class RegisterFormEcComponent extends ComponentHelper implements OnInit {\n public isLogged: Boolean = true;\n @Input() darkMode = false;\n @Input() redirect = true;\n @Input() complete = true;\n @Output() ready = new EventEmitter();\n public success: Boolean = false\n public campospersonajuridica: boolean = false;\n public register_loading: boolean;\n public registerForm: FormGroup;\n public registroUsuario: any = {\n firstName: '',\n lastName: '',\n email: '',\n plainPassword: '',\n plainPassword2: '',\n newsletter: false,\n terms: false,\n }\n\n constructor(public authService: AuthService,\n protected toastr: ToastService,\n public router: Router,\n public analyticsService: AnalyticsService,\n protected formBuilder: FormBuilder) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n\n this.registerForm = this.formBuilder.group({\n firstName: ['', Validators.required],\n lastName: ['', Validators.required],\n email: ['', Validators.required],\n plainPassword: ['', Validators.required],\n plainPassword2: ['', Validators.required],\n newsletter: [false],\n terms: ['', Validators.required],\n });\n this.ecOnInit()\n\n }\n\n setProp = (prop, event) => {\n this.registroUsuario[prop] = event.target.value;\n }\n redirectHome = () => {\n this.router.navigateByUrl('/')\n }\n\n register = (event) => {\n event.preventDefault();\n this.register_loading = true;\n if (!this.registerForm.valid) {\n this.toastr.show('Aún hay campos sin completar o invalidos');\n this.register_loading = false\n return;\n };\n this.register_loading = true;\n if (this.registerForm.value.plainPassword != this.registerForm.value.plainPassword2) {\n this.toastr.show('Las contraseñas no coinciden');\n this.register_loading = false\n return;\n }\n if (this.registerForm.valid) {\n this.authService.signUp(this.registerForm.value).toPromise().then(\n res => {\n this.register_loading = false;\n this.toastr.show('register-ok');\n this.analyticsService.callEvent('sign_up', {\n firstName: this.registerForm.value.firstName,\n lastName: this.registerForm.value.lastName,\n email:this.registerForm.value.email\n })\n this.success =true\n this.ready.emit(true)\n if(this.redirect){\n this.router.navigateByUrl('home')\n }\n },\n error => {\n this.register_loading = false;\n if (error.status == 400) {\n this.toastr.show('El email ingresado ya se encuentra registrado.');\n } else {\n this.toastr.show('Error en el registro. Vuelva a intentarlo más tarde.');\n }\n }\n )\n } else {\n this.toastr.show('invalid-form');\n }\n }\n}","import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { Router } from \"@angular/router\";\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { AuthService } from '../../../services/auth.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { UserRoleType } from '../../../classes/user-role-type';\nimport { filter } from 'rxjs/operators';\n\n@Component({\n selector: 'app-login-form-ec',\n templateUrl: 'login-form-ec.component.html',\n styleUrls: ['login-form-ec.component.scss']\n})\nexport class LoginFormEcComponent extends ComponentHelper implements OnInit {\n\n @Input() darkMode = false;\n @Input() redirect = true;\n @Input() complete = true;\n @Input() title = 'login';\n /* @Input() withRoles: UserRoleType[] = [UserRoleType.SELLER, UserRoleType.RETAILER, UserRoleType.WHOLESALER] */\n /* @Input() withRoles: UserRoleType[] = [] */\n @Output() ready = new EventEmitter();\n public loading = false;\n public loginForm: FormGroup;\n\n\n constructor(protected authService: AuthService, protected toastrService: ToastService, protected formBuilder: FormBuilder, public router: Router\n ) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.redirect && this.authService.isAuthenticated() && this.redirectHome()\n !this.authService.isAuthenticated() && localStorage.removeItem('mail')\n this.loginForm = this.formBuilder.group({\n username: ['', Validators.required],\n password: ['', Validators.required]\n });\n this.ecOnInit()\n }\n\n login = ($event, withRoles: UserRoleType[] = []) => {\n $event.preventDefault();\n this.loading = true;\n if (!this.loginForm.valid) {\n this.toastrService.show('Aún hay datos sin completar');\n return;\n }\n this.authService.login(this.loginForm.value, withRoles).toPromise().then(\n res => {\n if (res == 'ok') {\n this.ready.emit(this.loginForm.value.username);\n if (this.redirect)\n setTimeout(() => this.redirectHome(), 500);\n }\n else {\n if (res == 'error') {\n this.toastrService.show('invalid-credentials')\n this.loading = false;\n return\n }\n this.loading = false;\n }\n },\n err => {\n this.loading = false;\n }\n )\n }\n\n redirectHome = () => {\n const resolverFunction = this.authService.getHomeResolver()\n resolverFunction\n ? resolverFunction()\n : this.router.navigateByUrl('/')\n }\n\n}","import { Component } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { AuthService } from '../../../services/auth.service';\nimport { ToastService } from '../../../utils/toast.service';\n\n@Component({\n selector: 'app-forgot-password-ec',\n templateUrl: 'forgot-password-ec.component.html',\n styleUrls: ['forgot-password-ec.component.scss']\n})\nexport class ForgotPasswordEcComponent extends ComponentHelper {\n\n public email = \"\";\n public loading = false;\n public ready = false;\n\n constructor(protected authService: AuthService, protected toastr: ToastService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n recoverPassword = (event) => {\n event.preventDefault();\n if (!this.validEmail()) this.toastr.show('invalid-email');\n else {\n this.loading = true;\n this.authService.recoverPassword(this.email).toPromise()\n .then(this.processOk, this.processOk).catch(this.processOk);\n }\n }\n\n processOk = (response) => {\n this.loading = false;\n this.ready = true;\n }\n\n processError = (response) => {\n this.loading = false;\n (!response || response.error)\n ? this.toastr.show('non-existent-email')\n : this.toastr.show(response.error);\n }\n\n validEmail = () => this.email != '' && this.email.includes('@');\n}","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { AuthService } from '../../../services/auth.service';\n\n@Component({\n selector: 'app-confirm-account-ec',\n templateUrl: 'confirm-account-ec.component.html',\n styleUrls: ['confirm-account-ec.component.scss']\n})\nexport class ConfirmAccountEcComponent extends ComponentHelper {\n\n public ok: Boolean = false;\n public error: Boolean = false;\n\n constructor(protected authService: AuthService, protected activedRoute: ActivatedRoute) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n const token = this.activedRoute.snapshot.queryParams.token;\n this.authService.confirmAccount(token).toPromise().then(this.onSuccess, this.onSuccess).catch(this.onSuccess) \n this.ecOnInit()\n\n }\n\n onSuccess = () => {\n this.ok = true;\n }\n\n onError = () => {\n this.error = true;\n }\n}","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { AuthService } from '../../services/auth.service';\nimport { ToastService } from '../../utils/toast.service';\n\n@Component({\n selector: 'app-password-reset-ec',\n templateUrl: 'password-reset-ec.component.html',\n styleUrls: ['password-reset-ec.component.scss']\n})\nexport class PasswordResetEcComponent extends ComponentHelper implements OnInit {\n\n public email = \"\";\n public loading = false;\n public ready = false;\n protected token;\n public formGroup: FormGroup;\n\n constructor(protected authService: AuthService, protected toastr: ToastService, protected activedRoute: ActivatedRoute, \n public router: Router, protected formBuilder: FormBuilder) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.token = this.activedRoute.snapshot.queryParams.token;\n !this.token && this.router.navigateByUrl('/');\n this.formGroup = this.formBuilder.group({\n first: ['', Validators.required],\n second: ['', Validators.required]\n })\n this.ecOnInit()\n\n }\n\n sendNewPassword = (event) => {\n event.preventDefault();\n if (this.invalidForm()) return;\n this.loading = true;\n this.authService.passwordReset(this.formGroup.value.first, this.token).toPromise()\n .then(this.processOk)\n .catch(this.processError);\n }\n\n invalidForm = () => {\n if (this.formGroup.valid) {\n const passwords = this.formGroup.value;\n if (passwords.first == passwords.second) return false;\n else this.toastr.show('password-doesnt-match');\n } else this.toastr.show('invalid-form');\n return true;\n }\n\n processOk = (response) => {\n this.loading = false;\n this.ready = true;\n }\n\n processError = (response) => {\n this.loading = false;\n (!response || response.error)\n ? this.toastr.show('operation-error')\n : this.toastr.show(response.error);\n }\n\n sendToLogin = () => this.router.navigateByUrl('/auth/login');\n}","import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { Router } from \"@angular/router\";\nimport { BehaviorSubject } from 'rxjs';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { AuthService } from '../../../services/auth.service';\nimport { ParametersService } from '../../../services/parameters.service';\nimport { ToastService } from '../../../utils/toast.service';\ndeclare var $: any;\n\n@Component({\n selector: 'app-register-wholesaler-form-ec',\n templateUrl: 'register-wholesaler-form-ec.component.html',\n styleUrls: ['register-wholesaler-form-ec.component.scss']\n})\nexport class RegisterWholesalerFormEcComponent extends ComponentHelper implements OnInit {\n\n protected provincesSubject = new BehaviorSubject<any[]>([]);\n protected countriesSubject = new BehaviorSubject<any[]>([]);\n protected documentTypesSubject = new BehaviorSubject<any[]>([]);\n\n public provinces$ = this.provincesSubject.asObservable();\n public countries$ = this.countriesSubject.asObservable();\n public documentTypes$ = this.documentTypesSubject.asObservable();\n\n public isLogged: Boolean = true;\n @Input() darkMode = false;\n @Input() redirect = true;\n @Input() complete = true;\n @Output() ready = new EventEmitter();\n public success : Boolean = false;\n public requestTerms = false;\n public campospersonajuridica: boolean = false;\n public register_loading: boolean;\n public registerForm: FormGroup;\n public params: any = {};\n\n\n constructor(public authService: AuthService,\n protected toastr: ToastService,\n public router: Router,\n public consts: Constants,\n public paramsService: ParametersService,\n protected formBuilder: FormBuilder) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.paramsService.parameters.subscribe(res => this.params = res);\n this.registerForm = this.formBuilder.group({\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n documentType: [null, [Validators.required]],\n documentNumber: ['', [Validators.required]],\n email: ['', [Validators.required, Validators.email]],\n plainPassword: ['', Validators.required],\n plainPassword2: ['', []],\n countryCode: [null, Validators.required],\n street: [null, [Validators.maxLength(50)]],\n city: ['', Validators.required],\n postcode: ['', Validators.required],\n provinceName: ['', Validators.required],\n provinceCode: [null, Validators.required],\n companyName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n gender: [null, []],\n birthday: [null, [Validators.maxLength(11)]],\n taxIdentification: ['', Validators.required],\n comments: ['', []],\n contactFirstName: ['', []],\n contactLastName: ['', []],\n contactCompanyPosition: ['', []],\n contactEmail: ['', []],\n contactDocumentType: ['', []],\n contactDocumentNumber: ['', []],\n subscribedToNewsletter: [false],\n terms: [true, Validators.required],\n });\n this.authService.getCountriesData().then(res => {\n this.countriesSubject.next(res);\n let documentTypes = []\n res.map(paises => {\n this.consts.getLocale().toLocaleLowerCase().includes(paises.code.toLocaleLowerCase()) && (documentTypes = paises.documentTypes || [])\n });\n this.documentTypesSubject.next(documentTypes);\n });\n this.ecOnInit()\n }\n\n onCountrySelected = (value) => {\n $('#selectOpPais').attr('disabled', true);\n this.registerForm.controls['countryCode'].setValue(value);\n this.registerForm.controls['provinceCode'].setValue('');\n value != '' && this.provincesSubject.next(this.countriesSubject.value.find(country => country.code == value).provinces);\n }\n\n onProvincesSelected = (value) => {\n $('#selectOpProvincia').attr('disabled', true);\n this.registerForm.controls['provinceName'].setValue(this.provincesSubject.value.find(province => province.code == value).name);\n }\n\n onGenderSelected = (value) => {\n $('#selectOpSexo').attr('disabled', true);\n }\n\n onDocumentTypeSelected = (value) => {\n $('#selectOpDocumentType').attr('disabled', true);\n }\n\n redirectHome = () => {\n this.router.navigateByUrl('/')\n }\n\n register = (event) => {\n event.preventDefault();\n this.register_loading = true;\n if (!this.registerForm.valid) {\n this.toastr.show('Aún hay campos sin completar o invalidos');\n this.register_loading = false\n return;\n };\n this.register_loading = true;\n if (this.registerForm.valid) {\n this.authService.signUpWholesaler(this.registerForm.value).toPromise().then(\n res => {\n this.register_loading = false;\n this.toastr.show('register-ok');\n this.success = true;\n this.ready.emit(true);\n if(this.redirect){\n this.router.navigateByUrl('home')\n }\n },\n error => {\n this.register_loading = false;\n if (error.status == 400) {\n this.toastr.show('El email ingresado ya se encuentra registrado.');\n } else {\n this.toastr.show('Error en el registro. Vuelva a intentarlo más tarde.');\n }\n }\n )\n } else {\n this.toastr.show('invalid-form');\n }\n }\n}","import { DOCUMENT } from '@angular/common';\nimport { Component, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { Product } from '../../interfaces/product';\nimport { ParametersService } from '../../services/parameters.service';\n\n\n\n@Component({\n selector: 'app-share-block-ec',\n templateUrl: './share-block-ec.component.html',\n styleUrls: ['./share-block-ec.component.scss'],\n})\nexport class ShareBlockEcComponent extends ComponentHelper implements OnInit {\n\n @Input() product: Product\n\n public url = ''\n public mediaimg = ''\n public description = ''\n public params: any = {}\n\n constructor(\n public consts: Constants, public paramsService: ParametersService, protected renderer: Renderer2, private meta: Meta, private title: Title) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.url = window.location.href\n this.mediaimg = this.product.picturesdefault && this.product.picturesdefault[0]\n this.description = this.product.name\n if (this.description) {\n this.meta.addTags(\n [\n {\n name: \"description\",\n content: this.description\n },\n {\n property: \"og:site_name\",\n content: this.title.getTitle()\n }\n ,\n {\n property: \"og:url\",\n content: this.url\n }\n ,\n {\n property: \"og:title\",\n content: this.description\n }\n ,\n {\n property: \"og:type\",\n content: 'product'\n }\n ,\n {\n property: \"og:price:amount\",\n content: this.product.price\n }\n ,\n {\n property: \"og:price:currency\",\n content: this.consts.currency.code\n }\n ,\n {\n property: \"og:image\",\n content: this.consts.mediaUrl()+this.mediaimg\n }\n ,\n {\n property: \"og:image:secure_url\",\n content: this.consts.mediaUrl()+this.mediaimg\n }\n ,\n {\n property: \"witter:site\",\n content: '@'\n }\n ,\n {\n property: \"twitter:card\",\n content: 'summary_large_image'\n }\n ,\n {\n property: \"twitter:title\",\n content: this.description\n }\n ,\n {\n property: \"twitter:description\",\n content: this.description\n }\n \n ], true);\n }\n this.paramsService.parameters.subscribe(res =>{ \n this.params = res != null ? res?.filter( elem => elem.code.includes('share')) : []\n });\n\n this.ecOnInit()\n }\n\n toShareFacebook = () => {\n //return `https://www.facebook.com/share.php?u=${encodeURIComponent(this.url)}`\n return `https://www.facebook.com/share.php?u=${this.url}`\n }\n\n toShareTwitter = () => {\n //return `https://twitter.com/share?text=${encodeURIComponent(this.description)};url=${encodeURIComponent(this.url)}`\n return `https://twitter.com/share?text=${this.description}&url=${this.url}`\n }\n\n toSharePinterest = () => {\n //return `https://pinterest.com/pin/create/button/?url=${encodeURIComponent(this.url)}&media=${encodeURIComponent(this.mediaimg)}&description=${encodeURIComponent(this.description)}`\n return `https://pinterest.com/pin/create/button/?url=${this.url}&media=${this.consts.mediaUrl()+this.mediaimg}&description=${this.description}`\n }\n\n toShareWhatsapp = (wsp) => {\n return `https://wa.me/${wsp.value}?text=Me%20interesa%20este%20producto.%20${this.url}`\n }\n\n toShareEmail = (mail) => {\n return `mailto:${mail.value}?subject=Consulta%20sobre%20el%20producto:%20${this.description}&body=Artículo:%20${this.url}`\n }\n\n createMetadata = () => {\n\n // <meta name=\"description\" content=\"Cojín JOY, en algodón rústico súper soft, tonos frescos y naturales, y con detalles de borlas para darle un toque divertido.\">\n // <meta property=\"og:site_name\" content=\"MYC HOME LINENS\">\n // <meta property=\"og:url\" content=\"https://myc-homelinens.com/products/cojin-algodon-joy-azul\">\n \n // <meta property=\"og:title\" content=\"COJÍN JOY - AZUL\">\n // <meta property=\"og:type\" content=\"product\">\n // <meta property=\"og:description\" content=\"Cojín JOY, en algodón rústico súper soft, tonos frescos y naturales, y con detalles de borlas para darle un toque divertido.\">\n // <meta property=\"og:price:amount\" content=\"20,20\">\n // <meta property=\"og:price:currency\" content=\"EUR\">\n // <meta property=\"og:image\" content=\"http://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYAZUL45FG_f3304197-1c5a-47e2-b993-8bfcde1f9978_1200x630.png?v=1614246269\">\n // <meta property=\"og:image\" content=\"http://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYAZULTEXTURA_1200x630.png?v=1614246269\">\n // <meta property=\"og:image\" content=\"http://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYJUNTOSCUADRADA_69e9dcc0-d4d1-42e1-94f8-30f4ea263325_1200x630.png?v=1614246269\">\n // <meta property=\"og:image:secure_url\" content=\"https://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYAZUL45FG_f3304197-1c5a-47e2-b993-8bfcde1f9978_1200x630.png?v=1614246269\">\n // <meta property=\"og:image:secure_url\" content=\"https://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYAZULTEXTURA_1200x630.png?v=1614246269\">\n // <meta property=\"og:image:secure_url\" content=\"https://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYJUNTOSCUADRADA_69e9dcc0-d4d1-42e1-94f8-30f4ea263325_1200x630.png?v=1614246269\">\n // <meta name=\"twitter:site\" content=\"@\">\n // <meta name=\"twitter:card\" content=\"summary_large_image\">\n // <meta name=\"twitter:title\" content=\"COJÍN JOY - AZUL\">\n // <meta name=\"twitter:description\" content=\"Cojín JOY, en algodón rústico súper soft, tonos frescos y naturales, y con detalles de borlas para darle un toque divertido.\">\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Component, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CheckoutData } from '../../../interfaces/checkout-data';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\n\n@Component({\n selector: 'app-detail-checkout-block-ec',\n templateUrl: './detail-checkout-block-ec.component.html',\n styleUrls: ['./detail-checkout-block-ec.component.scss'],\n})\nexport class DetailCheckoutBlockEcComponent extends ComponentHelper implements OnInit {\n\n @Input() asociatedData\n public data = null\n\n constructor(public checkoutService: CheckoutService,) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.asociatedData && (this.data = this.asociatedData) ||\n this.checkoutService.asociatedData$.subscribe(data => this.data = data)\n this.ecOnInit()\n }\n\n getIcon = (data_item: CheckoutData) => {\n\n switch (data_item.type) {\n case 'coupon': return 'fas fa-ticket-alt fa-3x';\n case 'discount': return 'fas fa-tags fa-3x';\n case 'shipment': return 'fas fa-shipping-fast fa-3x';\n case 'subtotal': return 'fas fa-boxes fa-3x';\n case 'taxes': return 'fas fa-file-invoice-dollar fa-3x';\n case 'total': return 'fas fa-shopping-basket fa-3x';\n default: return 'fas fa-tags fa-3x';\n }\n }\n // case 'coupon': return 'assets/images/iconosdetailcheckout/ticket-alt.svg';\n // case 'discount': return 'assets/images/iconosdetailcheckout/tags.svg';\n // case 'shipment': return 'assets/images/iconosdetailcheckout/shipping-fast.svg';\n // case 'subtotal': return 'assets/images/iconosdetailcheckout/boxes.svg';\n // case 'taxes': return 'assets/images/iconosdetailcheckout/file-invoice-dollar.svg';\n // case 'total': return 'assets/images/iconosdetailcheckout/shopping-basket.svg';\n // default: return 'assets/images/iconosdetailcheckout/shopping-basket.svg';\n}\n","import { THIS_EXPR, ThrowStmt } from '@angular/compiler/src/output/output_ast';\nimport { Component, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BsModalRef, BsModalService, ModalDirective } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { BodyError } from '../../interfaces/checkout/checkout-error';\nimport { CheckoutService } from '../../services/checkout/checkout.service';\nimport { ErrorHandlerService } from '../../services/checkout/error-handler.service';\n\n@Component({\n selector: 'ec-checkout-error',\n templateUrl: 'checkout-error-ec.component.html',\n styleUrls: ['checkout-error-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class CheckoutErrorComponent extends ComponentHelper implements OnInit {\n\n public error: BodyError;\n public bsModalRef: BsModalRef\n @ViewChild('template') protected template: TemplateRef<any>;\n @Input() urlRedireccion = '/cart'\n subs: Subscription;\n subsModal: Subscription;\n\n constructor(\n public checkoutErrorService: ErrorHandlerService,\n public checkoutService: CheckoutService,\n private modalService: BsModalService,\n private router: Router\n ) {\n super();\n }\n\n ngOnInit() {\n console.log('Componente manejo de errores inicializando')\n this.subs = this.checkoutErrorService.error$.pipe(filter(res => res != null)).subscribe(\n res => {\n this.error = res;\n setTimeout(() => {\n this.navigateByUrl()\n }, 3000);\n }\n );\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n this.subs?.unsubscribe()\n this.subsModal?.unsubscribe()\n }\n\n navigateByUrl = () => {\n this.router.navigateByUrl(this.urlRedireccion)\n }\n\n initializeTemplate = () => {\n if (!this.template) {\n setTimeout(() => {\n this.initializeTemplate()\n }, 1000);\n }else{\n this.subs = this.checkoutErrorService.error$.pipe(filter(res => res != null)).subscribe(\n res => {\n this.error = res;\n this.bsModalRef = this.modalService.show(this.template, { class: 'modal-lg ', keyboard: false, backdrop: 'static', animated: true })\n }\n );\n this.subsModal = this.modalService.onHide.subscribe(onClose => {\n this.bsModalRef = null\n this.navigateByUrl()\n })\n }\n }\n}","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../../classes/component-helper\";\nimport { ConnectionService } from '../../../../api/connection.service';\nimport { ToastService } from '../../../../utils/toast.service';\nimport { Constants } from '../../../../core.consts';\nimport { CartService } from '../../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\ndeclare var $ : any \n\n@Component({\n selector: 'app-mp-redirect-ec',\n templateUrl: 'mp-redirect-ec.component.html',\n styleUrls: ['mp-redirect-ec.component.scss'],\n})\nexport class MpRedirectEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() paymentServiceInst;\n @Input() allData;\n @Output() ready = new EventEmitter();\n protected preference;\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public ventana\n protected dataRedirect = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2, \n public connection: ConnectionService, \n public toastrService: ToastService,\n public consts: Constants, \n public cartService: CartService, \n public toastr: ToastService, \n public activedRoute: ActivatedRoute,\n private sanitizer: DomSanitizer) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.getPreference()\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n iniciar = () => {\n this.closeModal = ''\n this.clearStorageState()\n this.ventana = window.open(this.url)\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.ventana?.close()\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n !state && this.ventana.closed && (state = 'cancel')\n this.loading = true\n state && console.log(state);\n if (state) {\n this.loading = false\n localStorage.removeItem('state')\n if (state == 'success') {\n this.ventana?.close()\n this.ready.emit(true)\n return \n }\n if (state == 'pending') {\n this.ventana?.close()\n this.ready.emit(true)\n return\n }\n if (state == 'failure') {\n this.ventana?.close()\n this.processError('')\n return \n }\n if (state == 'cancel') {\n this.ventana?.close()\n this.processError('Se cancelo el pago con mercado pago')\n return \n }\n this.ventana?.close()\n this.processError('')\n return \n }\n setTimeout(() => {\n this.callState()\n }, 5000); \n \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n getPreference = () =>\n this.paymentServiceInst.getPreference(this.allData).then(\n res => {\n this.preference = res;\n this.url = this.preference.init_point\n this.renderMP(this.preference);\n },\n err => this.setError('operation-error')\n );\n\n setError = (message) => {\n //this.error = message;\n }\n\n renderMP = (preference) => {\n window.addEventListener(\"message\", (event) => {\n if (event.origin !== 'https://www.mercadopago.com.ar' || !event.data.type) {\n return;\n }\n let dataType = event.data.type;\n if (dataType === 'submit') {\n const paymentData = event.data.value;\n return;\n }\n });\n }\n}\n\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../classes/component-helper\";\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\ndeclare var $ : any \n\n@Component({\n selector: 'app-redsys-redirect-out-ec',\n templateUrl: 'redsys-redirect-out-ec.component.html',\n styleUrls: ['redsys-redirect-out-ec.component.scss'],\n})\nexport class RedSysRedirectOutEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() user_data = null;\n @Input() paymentServiceInst;\n @Input() allData;\n @Output() ready = new EventEmitter();\n protected preference;\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public ventana\n protected dataRedirect = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2, \n public connection: ConnectionService, \n public toastrService: ToastService,\n public consts: Constants, \n public cartService: CartService, \n public toastr: ToastService, \n public activedRoute: ActivatedRoute,\n private sanitizer: DomSanitizer) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n setTimeout(() => {\n this.url = \"../../../assets/redsysFrameRedirectOutBase.html\"\n }, 1000);\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n iniciar = () => {\n this.closeModal = ''\n this.clearStorageState()\n localStorage.setItem('dataRedirect', this.dataRedirect())\n this.ventana = window.open(this.url)\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.ventana?.close()\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n !state && this.ventana.closed && (state = 'cancel')\n this.loading = true\n state && console.log(state);\n if (state) {\n this.loading = false\n localStorage.removeItem('state')\n if (state == 'success' || state == 'ok') {\n this.ventana?.close()\n this.ready.emit(true)\n return \n }\n if (state == 'pending' || state == 'ok') {\n this.ventana?.close()\n this.ready.emit(true)\n return\n }\n if (state == 'failure' || state == 'error') {\n this.ventana?.close()\n this.processError('')\n return \n }\n if (state == 'cancel') {\n this.ventana?.close()\n this.processError('Se cancelo el pago con redsys')\n return \n }\n this.ventana?.close()\n this.processError('')\n return \n }\n setTimeout(() => {\n this.callState()\n }, 5000); \n \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n\n setError = (message) => {\n \n }\n\n}\n\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Subscription } from 'rxjs';\ndeclare var paypal;\ndeclare var PAYPAL_CLIENT: any;\ndeclare var PAYPAL_SECRET: any;\ndeclare var PAYPAL_ORDER_API: any;\n\n@Component({\n selector: 'app-paypal-express-ec',\n templateUrl: 'paypal-express-ec.component.html',\n styleUrls: ['paypal-express-ec.component.scss'],\n})\nexport class PaypalExpressEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Output() ready = new EventEmitter();\n @Input() user_data = null;\n @ViewChild('template') protected template: TemplateRef<any>;\n @ViewChild('paypal', { static: true }) paypalElement: ElementRef;\n\n public getUrlNotification = () => this.consts.getUrlBase() + 'shop-api/' + this.consts.getChannel() + '/paypal/redirect/notification';\n\n producto = {\n descripcion: 'producto en venta',\n precio: 10,\n img: 'imagen de tu producto'\n }\n title = 'angular-paypal-payment';\n\n public loading = false;\n public cart = null;\n public tried = 10;\n public subsCart: Subscription;\n\n constructor(public renderer: Renderer2,\n public connection: ConnectionService,\n public toastrService: ToastService,\n public consts: Constants,\n public cartService: CartService,\n public toastr: ToastService,\n public activedRoute: ActivatedRoute) {\n super();\n\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.loading = true;\n this.setVariables()\n this.subsCart = this.cartService.cart.subscribe(cart => {\n this.cart = cart\n console.log(this.cart);\n let scriptSdk = this.renderer.createElement(\"script\");\n this.renderer.setAttribute(scriptSdk, 'src', 'https://www.paypal.com/sdk/js?client-id=' + this.method.config.public_client_id + '&currency=' + this.cart?.currency || 'USD');\n this.renderer.appendChild(document.body, scriptSdk);\n this.renderPayPal()\n })\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n this.subsCart.unsubscribe()\n }\n\n ngOnChanges() {\n }\n\n renderPayPal = () => {\n if (this.tried == 0) {\n return\n }else{\n this.tried--\n }\n setTimeout(() => {\n try {\n if ((typeof paypal !== 'undefined') && paypal != undefined && paypal != null) {\n paypal\n .Buttons({\n createOrder: (data, actions) => {\n return actions.order.create({\n purchase_units: [\n {\n amount: {\n currency_code: this.cart?.currency || 'USD',\n value: this.total_amount || this.cart?.totals?.total\n }\n }\n ]\n })\n },\n onApprove: async (data, actions) => {\n const order = await actions.order.capture();\n order.purchase_units[0]['reference_id'] = this.cart.tokenValue\n console.log(order);\n this.connection.postOutsider(this.getUrlNotification(), order).toPromise().then(res => {\n this.ready.emit(true)\n console.log('ok');\n }).catch(res => {\n this.processError('')\n console.log('error');\n })\n },\n onError: err => {\n console.log(err);\n this.processError('')\n }\n })\n .render(this.paypalElement.nativeElement);\n this.loading = false;\n } else {\n console.log('Entro al else');\n this.renderPayPal();\n }\n } catch (error) {\n console.log('Entro al catch');\n this.renderPayPal();\n }\n }, 1000);\n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n setVariables = () => {\n // setTimeout(() => {\n // if (typeof PAYPAL_CLIENT !== 'undefined'\n // && typeof PAYPAL_SECRET !== 'undefined'\n // && typeof PAYPAL_ORDER_API !== 'undefined') {\n // PAYPAL_CLIENT = this.method.config.public_client_id;\n // PAYPAL_SECRET = this.method.config.public_client_secret;\n // PAYPAL_ORDER_API = 'https://api-m.paypal.com/v2/checkout/orders/';\n // } else {\n // console.log('no entro al if');\n // this.setVariables()\n // }\n // }, 2000);\n }\n}","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../classes/component-helper\";\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\ndeclare var $ : any \n\n@Component({\n selector: 'app-mobbex-ec',\n templateUrl: 'mobbex-ec.component.html',\n styleUrls: ['mobbex-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class MobbexEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() paymentServiceInst;\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() allData;\n @Input() user_data = null;\n @Output() ready = new EventEmitter();\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n protected dataMobbex;\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public ventana\n protected dataRedirect = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2,\n public connection: ConnectionService,\n public toastrService: ToastService,\n public consts: Constants,\n public cartService: CartService,\n public toastr: ToastService,\n public activedRoute: ActivatedRoute,\n public sanitizer: DomSanitizer,\n public modalService: BsModalService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.getCheckoutMobbex()\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n this.modalRef = this.modalService.show(template, { class: 'modal-lg modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con mobbex')\n }\n\n\n callState = () => {\n try {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n this.loading = true\n state && console.log(state);\n if (state) {\n this.loading = false\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n if (state == 'success') {\n this.ready.emit(true)\n }\n if (state == 'cancel') {\n return\n }\n if (state == 'failure') {\n this.processError('')\n }\n this.modalRef.hide()\n return\n }\n setTimeout(() => {\n this.callState()\n }, 5000);\n } catch (error) {\n console.error(error);\n \n } \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n getCheckoutMobbex = () => {\n this.loading = true\n this.paymentServiceInst.getCheckoutMobbex(this.allData).then(\n res => {\n this.dataMobbex = res;\n this.url = res?.data?.url && this.sanitizer.bypassSecurityTrustResourceUrl(res?.data?.url)\n this.loading = false\n },\n err => {\n this.processError('operation-error')\n this.loading = false\n }\n );\n }\n\n}\n\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../classes/component-helper\";\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\ndeclare var $: any\n\n@Component({\n selector: 'app-bancard-ec',\n templateUrl: 'bancard-ec.component.html',\n styleUrls: ['bancard-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class BancardEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() paymentServiceInst;\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() allData;\n @Input() user_data = null;\n @Output() ready = new EventEmitter();\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n protected dataBancard;\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public ventana\n protected dataRedirect = () => this.consts.getUrlBase() + 'shop-api/' + this.consts.getChannel() + '/bancard/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2,\n public connection: ConnectionService,\n public toastrService: ToastService,\n public consts: Constants,\n public cartService: CartService,\n public toastr: ToastService,\n public activedRoute: ActivatedRoute,\n public sanitizer: DomSanitizer,\n public modalService: BsModalService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.getCheckoutBancard()\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n this.modalRef = this.modalService.show(template, { class: 'modal-lg modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con bancard')\n }\n\n\n callState = () => {\n try {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n this.loading = true\n state && console.log(state);\n if (state) {\n this.loading = false\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n if (state == 'success') {\n this.ready.emit(true)\n }\n if (state == 'cancel') {\n this.processError('Se cancelo el pago con bancard')\n return\n }\n if (state == 'failure') {\n this.processError('')\n }\n this.modalRef.hide()\n return\n }\n setTimeout(() => {\n this.callState()\n }, 5000);\n } catch (error) {\n console.error(error);\n }\n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n getCheckoutBancard = () => {\n this.loading = true\n this.paymentServiceInst.getCheckoutBancard(this.allData).then(\n res => {\n this.dataBancard = res;\n this.url = res?.iframe_link && this.sanitizer.bypassSecurityTrustResourceUrl(res?.iframe_link)\n res?.iframe_link || (this.url = null) && this.processError('operation-error')\n this.dataBancard?.process_id && localStorage.setItem('dataRedirect', this.dataBancard.process_id )\n this.loading = false\n },\n err => {\n this.processError('operation-error')\n this.loading = false\n }\n );\n }\n\n}\n\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../classes/component-helper\";\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\ndeclare var $ : any \n\n@Component({\n selector: 'app-bancard-redirect-ec',\n templateUrl: 'bancard-redirect-ec.component.html',\n styleUrls: ['bancard-redirect-ec.component.scss'],\n})\nexport class BancardRedirectEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() user_data = null;\n @Input() paymentServiceInst;\n @Input() allData;\n @Output() ready = new EventEmitter();\n protected preference;\n protected dataBancard;\n\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public ventana\n protected dataRedirect = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2, \n public connection: ConnectionService, \n public toastrService: ToastService,\n public consts: Constants, \n public cartService: CartService, \n public toastr: ToastService, \n public activedRoute: ActivatedRoute,\n private sanitizer: DomSanitizer) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.getCheckoutBancard()\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n iniciar = () => {\n this.closeModal = ''\n this.clearStorageState()\n this.ventana = window.open(this.url)\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.ventana?.close()\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n !state && this.ventana.closed && (state = 'cancel')\n this.loading = true\n state && console.log(state);\n if (state) {\n this.loading = false\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n if (state == 'success') {\n this.ready.emit(true)\n }\n if (state == 'cancel') {\n return\n }\n if (state == 'failure') {\n this.processError('')\n }\n this.ventana?.close()\n return\n }\n setTimeout(() => {\n this.callState()\n }, 4000); \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n setError = (message) => {\n \n }\n\n getCheckoutBancard = () => {\n this.loading = true\n this.paymentServiceInst.getCheckoutBancard(this.allData).then(\n res => {\n this.dataBancard = res;\n this.url = res?.iframe_link && res?.iframe_link\n res?.iframe_link || (this.url = null) && this.processError('operation-error')\n this.loading = false\n },\n err => {\n this.processError('operation-error')\n this.loading = false\n }\n );\n }\n\n}\n\n","import { THIS_EXPR, ThrowStmt } from '@angular/compiler/src/output/output_ast';\nimport { Component, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BsModalRef, BsModalService, ModalDirective } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { BodyError } from '../../../interfaces/checkout/checkout-error';\nimport { AuthService } from '../../../services/auth.service';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\nimport { ErrorHandlerService } from '../../../services/checkout/error-handler.service';\n\n@Component({\n selector: 'select-channel-ec',\n templateUrl: 'select-channel-ec.component.html',\n styleUrls: ['select-channel-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class SelectChannelEcComponent extends ComponentHelper implements OnInit {\n\n public bsModalRef: BsModalRef\n @ViewChild('template') protected template: TemplateRef<any>;\n subs: Subscription;\n subsModal: Subscription;\n public channels = []\n\n constructor(\n public authService: AuthService,\n private modalService: BsModalService,\n private router: Router\n ) {\n super();\n }\n\n ngOnInit() {\n this.subs = this.authService.channelsUser.pipe(filter(res => res != null && res.length > 0)).subscribe(\n res => {\n this.channels = res.map(item => {\n return { ...(item as object), selected: false }\n })\n this.initializeTemplate()\n }\n );\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n this.subs?.unsubscribe()\n this.subsModal?.unsubscribe()\n }\n\n navigateByUrl = () => {\n this.router.navigateByUrl('')\n }\n\n initializeTemplate = () => {\n if (!this.template) {\n setTimeout(() => {\n this.initializeTemplate()\n }, 1000);\n } else {\n this.bsModalRef = this.modalService.show(this.template, { class: 'modal-sm modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true })\n this.subsModal = this.modalService.onHide.subscribe(onClose => {\n this.bsModalRef = null\n })\n }\n }\n\n setSelect = (chanelSelect: any) => {\n this.channels.map(chanel => chanel.selected = chanel.code == chanelSelect.code)\n }\n\n setChannel = () => {\n if (this.channels.find(chanel => chanel.selected)) {\n this.authService.channelAccess(this.channels.find(chanel => chanel.selected))\n this.bsModalRef.hide()\n }\n }\n\n\n}","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { combineLatest } from 'rxjs';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CartService } from '../../../services/cart.service';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\ndeclare var $: any;\n\n@Component({\n selector: 'app-cart-load-ec',\n templateUrl: './cart-load-ec.component.html',\n styleUrls: ['./cart-load-ec.component.scss']\n})\nexport class CartLoadEcComponent extends ComponentHelper implements OnInit {\n\n public message = ''\n\n constructor(public activedRoute: ActivatedRoute, \n public router: Router, \n public checkoutService: CheckoutService, \n public cartService: CartService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n let token\n combineLatest([this.activedRoute.params, this.activedRoute.queryParams]).subscribe(([queryRouter, queryParams]) => {\n token = queryRouter.token\n console.log('PARAMETROS token -> ', token);\n this.cartService.loadCartByToken(token).then(res => {\n this.router.navigateByUrl('/cart')\n })\n })\n this.ecOnInit()\n }\n\n}\n","import { ElementRef, OnChanges, SimpleChanges } from '@angular/core';\nimport { Component, OnInit, Input, ViewChild } from '@angular/core';\n\ninterface Size2D { width: number; height: number; }\ntype Point2D = { x: number, y: number } | null;\n\n@Component({\n selector: '[app-magnizoom-ec]',\n templateUrl: './magnizoom.component.html',\n styleUrls: ['./magnizoom.component.scss']\n})\nexport class MagnizoomComponent implements OnInit {\n\n private imageSrc:string\n @Input() set ImageSrc(value) { \n this.imageSrc = value; \n this.loadImage(this.imageSrc); \n }\n @Input() zoomMode: 'LENS' | 'COVER' = 'COVER';\n @Input() minZoomFactor = 1.2;\n @Input() maxZoomFactor = 3;\n\n @Input() imageStyle: { [x: string]: any; };\n @Input() imageClass: any;\n\n @ViewChild('mainCanvas', { static: true }) mainCanvasRef: ElementRef;\n\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n image: HTMLImageElement;\n\n mousePosition: Point2D = null;\n lensSize: Size2D = { width: 400, height: 300 };\n zoomFactor = 2;\n\n get canvasWidth() { return this.image && this.image.width || 800; }\n get canvasHeight() { return this.image && this.image.height || 600; }\n\n constructor() { }\n \n ngOnInit() {\n this.initContext();\n this.loadImage(this.imageSrc);\n }\n\n initContext() {\n \n this.canvas = (this.mainCanvasRef.nativeElement as HTMLCanvasElement);\n this.context = this.canvas.getContext('2d');\n }\n\n loadImage(src: string) {\n \n this.image = new Image();\n this.image.onload = () => {\n this.lensSize = { width: this.image.width / 2, height: this.image.height / 2 };\n setTimeout(() => this.render());\n };\n this.image.src = src;\n }\n\n render() {\n this.context.clearRect(0, 0, this.canvasWidth, this.canvasHeight); // clear canvas\n this.context.lineWidth = 1; // border width\n this.context.drawImage(this.image, 0, 0); // bg image\n\n if (this.mousePosition) {\n switch (this.zoomMode) {\n case 'LENS': this.renderLensMode(); break;\n case 'COVER': this.renderCoverMode(); break;\n }\n }\n }\n\n renderLensMode() {\n this.context.lineWidth = 5; // border width\n const zoomRect = this.getZoomRect();\n this.context.fillRect(zoomRect.x, zoomRect.y, zoomRect.w, zoomRect.h); // bg (clear)\n const clippingRect = this.getClippingRect();\n // zoom image\n this.context.drawImage(\n this.image,\n clippingRect.x, clippingRect.y, clippingRect.w, clippingRect.h,\n zoomRect.x, zoomRect.y, zoomRect.w, zoomRect.h\n );\n this.context.strokeRect(zoomRect.x, zoomRect.y, zoomRect.w, zoomRect.h); // border\n }\n\n renderCoverMode() {\n const covertRect = this.getCoverRect();\n this.context.drawImage(\n this.image,\n covertRect.x, covertRect.y, covertRect.w, covertRect.h,\n 0, 0, this.canvasWidth, this.canvasHeight\n ); // cover image\n }\n\n getZoomRect() {\n const w = this.lensSize.width;\n const h = this.lensSize.height;\n const x = this.mousePosition.x - (w / 2);\n const y = this.mousePosition.y - (h / 2);\n return this.clampRect(x, y, w, h);\n }\n\n getClippingRect() {\n const w = this.lensSize.width / this.zoomFactor;\n const h = this.lensSize.height / this.zoomFactor;\n const x = this.mousePosition.x - (w / 2);\n const y = this.mousePosition.y - (h / 2);\n return this.clampRect(x, y, w, h);\n }\n\n getCoverRect() {\n const w = this.canvasWidth / this.zoomFactor;\n const h = this.canvasHeight / this.zoomFactor;\n // const x = this.mousePosition.x - (w / 2);\n // const y = this.mousePosition.y - (h / 2);\n const x = this.mousePosition.x - this.mousePosition.x / this.zoomFactor;\n const y = this.mousePosition.y - this.mousePosition.y / this.zoomFactor;\n return this.clampRect(x, y, w, h);\n }\n\n clampRect(x: number, y: number, w: number, h: number) {\n if (x <= 0) { x = 0; }\n if (x + w >= this.canvasWidth) { x = this.canvasWidth - w; }\n if (y < 0) { y = 0; }\n if (y + h >= this.canvasHeight) { y = this.canvasHeight - h; }\n return { x, y, w, h };\n }\n\n calculateMousePosition(clientX: number, clientY: number) {\n const boundingRect = this.canvas.getBoundingClientRect();\n const viewToModelX = this.canvasWidth / boundingRect.width;\n const viewToModelY = this.canvasHeight / boundingRect.height;\n const x = (clientX - boundingRect.left) * viewToModelX;\n const y = (clientY - boundingRect.top) * viewToModelY;\n this.mousePosition = { x, y };\n }\n\n onMouseLeave(event: MouseEvent) {\n this.mousePosition = null;\n this.render();\n }\n\n onMouseEnterOrMove(event: MouseEvent) {\n this.calculateMousePosition(event.clientX, event.clientY);\n this.render();\n }\n\n onMouseScroll(event: WheelEvent) {\n let newZoomFactor = this.zoomFactor;\n newZoomFactor -= event.deltaY / 1000;\n if (newZoomFactor < this.minZoomFactor) { newZoomFactor = this.minZoomFactor; }\n if (newZoomFactor > this.maxZoomFactor) { newZoomFactor = this.maxZoomFactor; }\n if (this.zoomFactor !== newZoomFactor) {\n this.zoomFactor = newZoomFactor;\n this.render();\n }\n event.preventDefault();\n event.stopPropagation();\n }\n\n\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { ParamsProductsWithUniqueVariant } from '../../interfaces/paramsInterfaces/paramsProductsWithUniqueVariant';\nimport { Product } from '../../interfaces/product';\nimport { ProductDetailService } from '../../services/products/product-detail.service';\ndeclare var $: any;\n\n@Component({\n selector: 'app-multiple-items-to-cart-ec',\n templateUrl: 'multiple-items-to-cart-ec.component.html',\n styleUrls: ['multiple-items-to-cart-ec.component.scss']\n})\nexport class MultipleItemsToCartEcComponent extends ComponentHelper {\n\n @Input() product: Product;\n @Input() objectWithVariant: ParamsProductsWithUniqueVariant;\n @Output() totalCostItems = new EventEmitter()\n @Output() totalItems = new EventEmitter()\n\n public total = 0\n public countItems = 0\n\n constructor(public consts: Constants, public productService: ProductDetailService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.product.productWithUniqueVariant = this.productService?.getProductWithUniqueVariant(this.product, this.getObjectParamsWithVariant())\n this.ecOnInit()\n }\n\n optionsProductForVariant = () => this.product.productWithUniqueVariant\n\n setQuantity = (value, product: Product) => {\n \n let quantity = Number(value) > product.currentOption.stock ? product.currentOption.stock : Number(value)\n product.productToCartItem = {\n productCode: product.currentOption.productCode,\n variantCode: product.currentOption.variantCode,\n quantity: quantity,\n finalPrice: product.currentOption.finalPrice,\n totalCost: quantity * product.currentOption.finalPrice,\n }\n\n this.total = 0\n this.countItems = 0\n this.product.productWithUniqueVariant.filter(prod => prod.productToCartItem).map(\n prod => {\n this.total += prod.productToCartItem.totalCost\n this.countItems += prod.productToCartItem.quantity\n }\n )\n this.totalCostItems.emit(this.total.toString())\n this.totalItems.emit(this.countItems.toString())\n\n }\n\n condition = (value, product: Product) : boolean => {\n if (Number(value) >= product.currentOption.stock) {\n return false\n }\n return true\n }\n\n allWithoutTracking = () => this.optionsProductForVariant().some( item => item.currentOption?.stock != 9999)\n\n private getObjectParamsWithVariant = (): ParamsProductsWithUniqueVariant => {\n return this.objectWithVariant || this.getObjectWithVariant()\n } \n\n getObjectWithVariant = (): ParamsProductsWithUniqueVariant => {\n return { type: 'color', code: 'color', defaultFirstOption: true , checkIfStock: false }\n } \n\n}","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { RecaptchaSettings } from 'ng-recaptcha/recaptcha/recaptcha-settings';\nimport { BehaviorSubject} from 'rxjs';\nimport { map, filter, concatMap} from 'rxjs/operators';\nimport { ConnectionService } from '../api/connection.service';\nimport { Constants } from '../core.consts';\nimport { ParametersService } from '../services/parameters.service';\n\n//import * from '../assets/ec-i18n'\n@Injectable({\n providedIn: 'root'\n})\nexport class CaptchaService {\n \n private captchaSubject: BehaviorSubject<RecaptchaSettings> = new BehaviorSubject({siteKey:''})\n public captcha = this.captchaSubject.asObservable()\n \n public params: any;\n\n private urlBaseFormat:string\n private testing:string = \"easycommercetech\"\n private productionEnvironment:Boolean = false;\n \n private recaptchaSiteKeysUrl = './assets/recaptcha/recaptcha-site-keys.json';\n private recaptchaSitesUrl = './assets/recaptcha/recaptcha-sites.json';\n private recaptchaSitesUrlProd = './assets/recaptcha/recaptcha-sites-prod.json'\n\n private RECAPTCHA_SITE_KEYS \n private RECAPTCHA_SITES \n /**\n * @description Carga las configuraciones iniciales\n * @param consts Constantes del core\n * @param connection Servicio para realizar las peticiones HTTP al backend\n * @param http Servicio utilizado para obtener archivos estaticos contenidos dentro de la aplicación\n */\n constructor(private consts: Constants,\n private connection: ConnectionService,\n private http:HttpClient,\n protected paramsSrv: ParametersService,\n ) {\n this.paramsSrv.parameters.subscribe(param => this.params = param)\n /**\n * @description Carga la direccion de la pagina actual que sera utilizada como clave para obtener\n * la clave por defecto que pertenece a esta direccion, inicializa la configuracion inicial.\n */\n this.urlBaseFormat = this.formatUrl(location.href)\n this.productionEnvironment = this.isProd()\n this.initializer()\n }\n /**\n * \n * @returns {string} path que contiene la direccion del endpoint referido al captcha\n */\n private captchaApi = () => 'shop-api/channels';\n \n /**\n * @description Devuelve true si la url es de produccion, false en caso contrario. \n * @returns {Boolean}\n */\n private isProd = () => !this.urlBaseFormat.includes(this.testing)\n\n /**\n * @description Prioriza si existe un parametro desde el backend de nombre 'recaptcha_key_canal', \n * de no existir este busca uno de tipo general de nombre 'recaptcha_key',\n * y en caso de que este no exista se realiza lo siguiente: \n * carga las variables RECAPTCHA_SITES y RECAPTCHA_SITE_KEYS, con los valores\n * de los Json estaticos, para posteriormente obtener la \"siteKey\"(clave del captcha) en caso\n * de que no venga desde el backend. \n */\n private initializer = () => {\n let paramThisChannel = this.params.find(param => param.code == 'recaptcha_key_' + this.consts.getChannel())\n if (paramThisChannel) {\n this.captchaSubject.next({ siteKey: paramThisChannel.value })\n } else {\n let paramGeneral = this.params.find(param => param.code == 'recaptcha_key')\n if (paramGeneral) {\n this.captchaSubject.next({ siteKey: paramGeneral.value })\n } else {\n this.getRecaptchaSites().pipe(\n //filter( e => e[this.urlBaseFormat+'ee'] ),\n map(res => this.RECAPTCHA_SITES = res),\n concatMap(e => this.getRecaptchaSiteKeys().pipe(\n map(res => this.RECAPTCHA_SITE_KEYS = res)))).subscribe(\n e => this.getSiteKey())\n }\n }\n }\n \n /**\n * \n * @returns {Observable<>} Datos obtenidos del archivo con las claves captcha\n */\n private getRecaptchaSiteKeys = () => {\n return this.http.get<any[]>(this.recaptchaSiteKeysUrl)\n }\n\n /**\n * @description Se obtiene los datos segun el entorno en que se ejecute\n * @returns {Observable<>} Datos obtenidos del archivo con las url de los sitios\n */\n private getRecaptchaSites = () => this.productionEnvironment ? this.http.get<any[]>(this.recaptchaSitesUrlProd) : this.http.get<any[]>(this.recaptchaSitesUrl)\n\n /**\n * @description Genera una peticion para recibir la clave del captcha. En caso de no tener exito,\n * utiliza los archivos estaticos para retornar una clave por defecto. Rellena el Observable con\n * los datos generados.\n */\n private getSiteKey = () => {\n this.connection.get(this.captchaApi()).toPromise().then(\n res => { console.log(res); this.captchaSubject.next({ siteKey: res.siteKey ? res.siteKey : this.RECAPTCHA_SITE_KEYS[this.RECAPTCHA_SITES[this.urlBaseFormat]] }) },\n err => { console.log('ERROR 1', err); this.captchaSubject.next({ siteKey: this.RECAPTCHA_SITES[this.RECAPTCHA_SITES[this.urlBaseFormat]] }) }\n ).catch(err => { console.log('ERROR 2 ', err, ' Base url:', this.consts.getUrlBase()); this.captchaSubject.next({ siteKey: this.RECAPTCHA_SITE_KEYS[this.RECAPTCHA_SITES[this.urlBaseFormat]] }) })\n //console.log(this.captcha)\n }\n\n /**\n * \n * @returns {string} Clave del captcha.\n */\n public getKey = () => {\n return this.captcha.pipe(map((elem) => elem?.siteKey));\n }\n\n /**\n * @description Recibe una url y se encarga de quitarle \"http\", \"/\" y las demas rutas, para devolver la url\n * del sitio con una formato limpio. Ejemplo \"https://ejemplo.com.ar/ruta1/ruta2/\" a \"ejemplo.com.ar\" \n * @param {string} url url que sera formateada \n * @returns {string} url formateada\n */\n private formatUrl = (url:string) => url.split(\"/\").filter(e => e != \"/\").filter(e => !e.includes(\"http\")).filter(e => e.length).slice(0,1).pop()\n\n}","import { ElementRef, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { Component, OnInit, Input, ViewChild } from '@angular/core';\nimport { CaptchaService } from '../../../services/captcha.service';\n\ninterface Size2D { width: number; height: number; }\ntype Point2D = { x: number, y: number } | null;\n\n@Component({\n selector: 're-captcha-ec',\n templateUrl: './re-captcha-ec.component.html',\n styleUrls: ['./re-captcha-ec.component.scss']\n})\nexport class RecaptchaEcComponent implements OnInit {\n \n /**\n * @param form recibe el formulario que contiene al captcha.\n * @param siteKey recibe un string con la clave para el captcha\n */\n @Input() form: any;\n @Input() siteKey: string;\n public captcha:any;\n constructor(public captchaService: CaptchaService){ \n }\n\n ngOnInit(): void {\n // throw new Error('Method not implemented.');\n this.captchaService.captcha.subscribe( res => {\n this.captcha = res;\n this.updateKey()} )\n }\n\n /**\n * @description Carga el campo captcha del formulario pasado con la respuesta luego de completar el captcha.\n * @param {string} captchaResponse obtiene la respuesta que genero el captcha.\n */\n resolved(captchaResponse: string) {\n this.form.catpcha = captchaResponse;\n }\n /**\n * @description Actualiza la clave si está es pasada por parametro en la variable siteKey \n * @returns {null}\n */\n updateKey = () => this.siteKey ? this.captcha.siteKey = this.siteKey : null\n\n \n}\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../classes/component-helper\";\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { ParametersService } from '../../../services/parameters.service';\ndeclare var $: any\n\n@Component({\n selector: 'app-decidir-ec',\n templateUrl: 'decidir-ec.component.html',\n styleUrls: ['decidir-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class DecidirEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() paymentServiceInst;\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() allData;\n @Input() user_data = null;\n @Output() ready = new EventEmitter();\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n protected dataDecidir;\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public paramsMensaje = ''\n public ventana\n public params\n protected dataRedirect = () => this.consts.getUrlBase() + 'shop-api/' + this.consts.getChannel() + '/decidir/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2,\n public connection: ConnectionService,\n public toastrService: ToastService,\n public consts: Constants,\n public cartService: CartService,\n public activedRoute: ActivatedRoute,\n public sanitizer: DomSanitizer,\n public modalService: BsModalService,\n public paramsService: ParametersService\n ) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.getCheckoutDecidir()\n this.paramsService.parameters.subscribe(res => {\n this.params = res\n this.paramsMensaje = this.hasParams(res,'partially_authorized_decidir') || 'Se está procesando el pago con tarjeta.'\n });\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n localStorage.setItem('dataRedirect', this.dataRedirect())\n localStorage.setItem('dataDecidir', JSON.stringify(this.method))\n this.modalRef = this.modalService.show(template, { class: 'modal-xl modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n localStorage.removeItem('dataRedirect')\n localStorage.removeItem('dataDecidir')\n localStorage.removeItem('message')\n localStorage.removeItem('subMessage')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con Decidir')\n }\n\n showMessage = () => {\n let message = localStorage.getItem('message') || undefined\n let subMessage = localStorage.getItem('subMessage') || undefined\n message && this.toastrService.show(message,{},'', {closeButton:true,timeOut:6000});\n subMessage && this.toastrService.show(subMessage,{},'', {closeButton:true,timeOut:6000});\n }\n\n\n callState = () => {\n try {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n this.loading = true\n state && this.showMessage();\n if (state) {\n this.loading = false\n this.clearStorageState()\n if (state == 'success') {\n this.ready.emit(true)\n }\n if (state == 'partially_authorized') {\n this.ready.emit(true)\n this.processError(this.paramsMensaje)\n }\n if (state == 'cancel') {\n return\n }\n if (state == 'failure') {\n this.processError('')\n }\n this.modalRef.hide()\n return\n }\n setTimeout(() => {\n this.callState()\n }, 5000);\n } catch (error) {\n console.error(error);\n\n }\n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n getCheckoutDecidir = () => {\n this.loading = true\n this.dataDecidir = this.method;\n this.url = this.sanitizer.bypassSecurityTrustResourceUrl('assets/decidirFormEc.html')\n this.loading = false\n }\n\n resizeIframe = (obj) => {\n obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';\n obj.style.width = obj.contentWindow.document.body.scrollWidth + 'px';\n }\n\n}\n\n","// //Component base\n\nimport { AccountEcComponent } from \"./account-ec/account-ec.component\";\nimport { BlockBannerBoxesEcComponent } from \"./blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component\";\nimport { BlockBannerFullEcComponent } from \"./blocks-ec/block-banner-full-ec/block-banner-full-ec.component\";\nimport { BlockFormContactEcComponent } from \"./blocks-ec/block-form-contact-ec/block-form-contact-ec.component\";\nimport { BlockHtmlEcComponent } from \"./blocks-ec/block-html-ec/block-html-ec.component\";\nimport { ContactFormNewsEcComponent } from \"./blocks-ec/block-newsletter-ec/contact-form-news-ec.component\";\nimport { BlockProductsEcComponent } from \"./blocks-ec/block-products-ec/block-products-ec.component\";\nimport { BlocksEcComponent } from \"./blocks-ec/blocks-ec.component\";\nimport { CartEcComponent } from \"./cart-ec/cart-ec.component\";\nimport { CheckoutEcComponent } from \"./checkout-ec/checkout-ec.component\";\nimport { DataFormEcComponent } from \"./checkout-ec/dataform-ec/dataform-ec.component\";\nimport { PaymentEcComponent } from \"./checkout-ec/payment-ec/payment-ec.component\";\nimport { ShipmentEcComponent } from \"./checkout-ec/shipment-ec/shipment-ec.component\";\nimport { SuccessEcComponent } from \"./checkout-ec/success-ec/success-ec.component\";\nimport { CollectionEcComponent } from \"./collection-ec/collection-ec.component\";\nimport { CouponEcComponent } from \"./coupon-ec/coupon-ec.component\";\nimport { FaqsContentEcComponent } from \"./faqs-content-ec/faqs-content-ec.component\";\nimport { FiltersEcComponent } from \"./filters-ec/filters-ec.component\";\nimport { FiltersTopEcComponent } from \"./filters-top-ec/filters-top-ec.component\";\nimport { FooterEcComponent } from \"./footer-ec/footer-ec.component\";\nimport { HeaderEcComponent } from \"./header-ec/header-ec.component\";\nimport { HomeEcComponent } from \"./home-ec/home-ec.component\";\nimport { LoginEcComponent } from \"./login-ec/login-ec.component\";\nimport { ProductDetailEcComponent } from \"./product-detail-ec/product-detail-ec.component\";\nimport { ProductEcComponent } from \"./product-ec/product-ec.component\";\nimport { RelatedProductsEcComponent } from \"./related-products-ec/related-products-ec.component\";\nimport { SectionContainerEcComponent } from \"./section-container-ec/section-container-ec.component\";\nimport { StoresEcComponent } from \"./stores-ec/stores-ec.component\";\nimport { VariantsEcComponent } from \"./variants-ec/variants-ec.component\";\nimport { SellerDashboardContainerEcComponent } from \"./seller-dashboard-container-ec/seller-dashboard-container-ec.component\";\nimport { LoadingFullEcComponent } from \"./widgets-ec/loading-full-ec/loading-full-ec.component\";\nimport { LoadingInlineEcComponent } from \"./widgets-ec/loading-inline-ec/loading-inline-ec.component\";\nimport { MPCreditEcComponent } from \"./widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component\";\nimport { PriceEcComponent } from \"./widgets-ec/price-ec/price-ec.component\";\nimport { RedsysCatchEcComponent } from \"./widgets-ec/redsys-catch-ec/redsys-catch-ec.component\";\nimport { RedSysProEcComponent } from \"./widgets-ec/redsys-pro-ec/redsys-pro-ec.component\";\nimport { RedSysRedirectEcComponent } from \"./widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component\";\nimport { CecaRedirectEcComponent } from \"./widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component\";\nimport { OrdersEcComponent } from \"./account-ec/orders-list-ec/orders-list-ec.component\";\nimport { OrderEcComponent } from \"./account-ec/order-ec/order-ec.component\";\nimport { AuthEcComponent } from \"./auth-ec/auth-ec.component\";\nimport { RegisterFormEcComponent } from \"./auth-ec/register-form-ec/register-form-ec.component\";\nimport { LoginFormEcComponent } from \"./auth-ec/login-form-ec/login-form-ec.component\";\nimport { ForgotPasswordEcComponent } from \"./auth-ec/forgot-password-ec/forgot-password-ec.component\";\nimport { ConfirmAccountEcComponent } from \"./auth-ec/confirm-account-ec/confirm-account-ec.component\";\nimport { PasswordResetEcComponent } from \"./password-reset-ec/password-reset-ec.component\";\nimport { RegisterWholesalerFormEcComponent } from \"./auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component\";\nimport { ShareBlockEcComponent } from \"./share-block-ec/share-block-ec.component\";\nimport { DetailCheckoutBlockEcComponent } from \"./checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component\";\nimport { CheckoutErrorComponent } from \"./checkout-error-ec/checkout-error-ec.component\";\nimport { MpRedirectEcComponent } from \"./widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component\";\nimport { RedSysRedirectOutEcComponent } from \"./widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component\";\nimport { PaypalExpressEcComponent } from \"./widgets-ec/paypal-express-ec/paypal-express-ec.component\";\nimport { MobbexEcComponent } from \"./widgets-ec/mobbex-ec/mobbex-ec.component\";\nimport { BancardEcComponent } from \"./widgets-ec/bancard-ec/bancard-ec.component\";\nimport { BancardRedirectEcComponent } from \"./widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component\";\nimport { SelectChannelEcComponent } from \"./auth-ec/select-channel-ec/select-channel-ec.component\";\nimport { CartLoadEcComponent } from \"./widgets-ec/cart-load-ec/cart-load-ec.component\";\nimport { MagnizoomComponent } from \"./widgets-ec/zoom-ec/magnizoom.component\";\nimport { MultipleItemsToCartEcComponent } from \"./multiple-items-to-cart-ec/multiple-items-to-cart-ec.component\";\nimport { RecaptchaEcComponent } from \"./widgets-ec/re-captcha-ec/re-captcha-ec.component\";\nimport { DecidirEcComponent } from \"./widgets-ec/decidir-ec/decidir-ec.component\";\n\n\nexport const components: any[] = [\n BlockBannerBoxesEcComponent,\n BlockBannerFullEcComponent,\n BlockFormContactEcComponent,\n BlockHtmlEcComponent,\n ContactFormNewsEcComponent,\n BlockProductsEcComponent,\n BlocksEcComponent,\n\n CartEcComponent,\n\n DataFormEcComponent,\n PaymentEcComponent,\n ShipmentEcComponent,\n SuccessEcComponent,\n CheckoutEcComponent,\n \n CollectionEcComponent,\n CouponEcComponent,\n FaqsContentEcComponent,\n FiltersEcComponent,\n FiltersTopEcComponent,\n FooterEcComponent,\n HeaderEcComponent,\n LoginEcComponent,\n ProductEcComponent,\n RelatedProductsEcComponent,\n SectionContainerEcComponent,\n StoresEcComponent,\n VariantsEcComponent,\n SellerDashboardContainerEcComponent,\n \n LoadingInlineEcComponent,\n LoadingFullEcComponent,\n MPCreditEcComponent,\n PriceEcComponent,\n RedsysCatchEcComponent,\n RedSysProEcComponent,\n RedSysRedirectEcComponent,\n HomeEcComponent,\n ProductDetailEcComponent,\n AccountEcComponent,\n OrdersEcComponent,\n OrderEcComponent,\n AuthEcComponent,\n RegisterFormEcComponent,\n LoginFormEcComponent,\n SelectChannelEcComponent,\n ForgotPasswordEcComponent,\n ConfirmAccountEcComponent,\n PasswordResetEcComponent,\n CecaRedirectEcComponent,\n\n RegisterWholesalerFormEcComponent,\n\n ShareBlockEcComponent,\n DetailCheckoutBlockEcComponent,\n\n CheckoutErrorComponent,\n MpRedirectEcComponent,\n RedSysRedirectOutEcComponent,\n PaypalExpressEcComponent,\n\n MobbexEcComponent,\n BancardEcComponent,\n BancardRedirectEcComponent,\n DecidirEcComponent,\n\n CartLoadEcComponent,\n MultipleItemsToCartEcComponent,\n\n MagnizoomComponent,\n RecaptchaEcComponent\n];\n\n\nexport * from \"./blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component\";\nexport * from \"./blocks-ec/block-banner-full-ec/block-banner-full-ec.component\";\nexport * from \"./blocks-ec/block-form-contact-ec/block-form-contact-ec.component\";\nexport * from \"./blocks-ec/block-html-ec/block-html-ec.component\";\nexport * from \"./blocks-ec/block-newsletter-ec/contact-form-news-ec.component\";\nexport * from \"./blocks-ec/block-products-ec/block-products-ec.component\";\nexport * from \"./blocks-ec/blocks-ec.component\";\nexport * from \"./cart-ec/cart-ec.component\";\nexport * from \"./checkout-ec/checkout-ec.component\";\nexport * from \"./checkout-ec/dataform-ec/dataform-ec.component\";\nexport * from \"./checkout-ec/payment-ec/payment-ec.component\";\nexport * from \"./checkout-ec/shipment-ec/shipment-ec.component\";\nexport * from \"./checkout-ec/success-ec/success-ec.component\";\nexport * from \"./collection-ec/collection-ec.component\";\nexport * from \"./coupon-ec/coupon-ec.component\";\nexport * from \"./faqs-content-ec/faqs-content-ec.component\";\nexport * from \"./filters-ec/filters-ec.component\";\nexport * from \"./filters-top-ec/filters-top-ec.component\";\nexport * from \"./footer-ec/footer-ec.component\";\nexport * from \"./header-ec/header-ec.component\";\nexport * from \"./login-ec/login-ec.component\";\nexport * from \"./product-ec/product-ec.component\";\nexport * from \"./related-products-ec/related-products-ec.component\";\nexport * from \"./section-container-ec/section-container-ec.component\";\nexport * from \"./stores-ec/stores-ec.component\";\nexport * from \"./variants-ec/variants-ec.component\";\nexport * from \"./seller-dashboard-container-ec/seller-dashboard-container-ec.component\";\nexport * from \"./widgets-ec/loading-full-ec/loading-full-ec.component\";\nexport * from \"./widgets-ec/loading-inline-ec/loading-inline-ec.component\";\nexport * from \"./widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component\";\nexport * from \"./widgets-ec/price-ec/price-ec.component\";\nexport * from \"./widgets-ec/redsys-catch-ec/redsys-catch-ec.component\";\nexport * from \"./widgets-ec/redsys-pro-ec/redsys-pro-ec.component\";\nexport * from \"./widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component\";\nexport * from \"./home-ec/home-ec.component\";\nexport * from \"./product-detail-ec/product-detail-ec.component\";\nexport * from \"./account-ec/account-ec.component\";\nexport * from \"./account-ec/orders-list-ec/orders-list-ec.component\";\nexport * from \"./account-ec/order-ec/order-ec.component\";\nexport * from \"./auth-ec/auth-ec.component\";\nexport * from \"./auth-ec/register-form-ec/register-form-ec.component\";\nexport * from \"./auth-ec/login-form-ec/login-form-ec.component\";\nexport * from \"./auth-ec/forgot-password-ec/forgot-password-ec.component\";\nexport * from \"./auth-ec/confirm-account-ec/confirm-account-ec.component\";\nexport * from \"./password-reset-ec/password-reset-ec.component\";\nexport * from \"./auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component\";\nexport * from \"./share-block-ec/share-block-ec.component\";\nexport * from \"./checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component\";\nexport * from \"./widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component\";\nexport * from './widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component';\nexport * from \"./checkout-error-ec/checkout-error-ec.component\";\nexport * from \"./widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component\";\nexport * from \"./widgets-ec/paypal-express-ec/paypal-express-ec.component\";\nexport * from \"./widgets-ec/mobbex-ec/mobbex-ec.component\";\nexport * from \"./widgets-ec/bancard-ec/bancard-ec.component\";\nexport * from \"./widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component\";\nexport * from \"./auth-ec/select-channel-ec/select-channel-ec.component\";\nexport * from \"./widgets-ec/cart-load-ec/cart-load-ec.component\";\nexport * from \"./widgets-ec/zoom-ec/magnizoom.component\";\nexport * from \"./multiple-items-to-cart-ec/multiple-items-to-cart-ec.component\";\nexport * from \"./widgets-ec/re-captcha-ec/re-captcha-ec.component\";\nexport * from \"./widgets-ec/decidir-ec/decidir-ec.component\";\n","import {\n Directive,\n OnInit,\n OnDestroy,\n Input,\n ElementRef,\n Renderer2,\n Inject,\n OnChanges,\n SimpleChanges,\n} from \"@angular/core\";\nimport { DOCUMENT } from \"@angular/common\";\nimport { BlocksService } from \"../services/blocks/blocks.service\";\nimport { Router } from \"@angular/router\";\n\nexport class ParamsContext {\n [key: string]: any;\n}\n\n@Directive({\n selector: \"[ecAddActionRedirect]\",\n})\nexport class AddActionRedirectDirective implements OnChanges, OnInit, OnDestroy {\n private banner: any;\n private classStr: \"\";\n private redirectUrl = ''\n private linstenEvent = null\n private transparent = true\n\n @Input()\n set ecAddActionRedirect(value: any) {\n this.banner = value;\n }\n @Input()\n set classStrSpacing(value: any) {\n this.classStr = value;\n }\n @Input()\n set isTransparent(value: boolean) {\n this.transparent = value;\n }\n\n constructor(\n @Inject(DOCUMENT) private document,\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private blocksService: BlocksService,\n private router: Router,\n ) { }\n\n ngOnInit() { }\n\n\n ngOnChanges(changes: SimpleChanges) {\n this.transparent && this.renderer.setStyle(this.elementRef.nativeElement, 'color', 'transparent')\n this.renderer.setAttribute(this.elementRef.nativeElement, \"role\", \"button\")\n this.classStr?.split(\" \").forEach((cl) => {\n try {\n this.renderer.addClass(this.elementRef.nativeElement, cl);\n } catch (error) { console.log('add class directive -> ', error) }\n });\n this.redirectUrl = this.banner.url ? this.banner.url : this.blocksService.formUrl(this.banner)\n this.banner.url ?\n this.renderer.setProperty(this.elementRef.nativeElement, \"href\", this.banner.url)\n :\n this.linstenEvent = this.renderer.listen(this.elementRef.nativeElement, 'click', this.redirectFromUrl)\n }\n\n redirectFromUrl = (evt) => {\n this.router.navigateByUrl(this.redirectUrl)\n }\n\n ngOnDestroy() {\n this.linstenEvent && this.linstenEvent()\n }\n}\n","import { Template } from '@angular/compiler/src/render3/r3_ast';\nimport { Directive, ElementRef, Input, OnInit, TemplateRef, ViewContainerRef, Renderer2, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { async } from '@angular/core/testing';\nimport { filter } from 'rxjs/operators';\nimport { Product } from '../interfaces/product';\nimport { ProductDetailService } from '../services/products/product-detail.service';\n\n@Directive({\n selector: \"[ecProductStock]\"\n})\nexport class ProductStockDirective {\n\n private productDirective: Product = null;\n\n @Input()\n ecProductStockElse: TemplateRef<any>\n\n @Input()\n set ecProductStock(product: Product) {\n this.productDirective = product\n this.viewContainer.clear();\n if (this.validateStock()) {\n if (this.ecProductStockElse) {\n this.viewContainer.createEmbeddedView(this.ecProductStockElse);\n }else{\n console.error('falta definir el template de agotado');\n }\n } else {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n }\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef, ) {\n }\n\n ngOnInit() { }\n\n ngOnDestroy() { }\n\n ngOnChanges() { }\n\n validateStock = () => {\n if (this.productDirective.special_mark == undefined || this.productDirective.variants == undefined) {\n setTimeout(() => {\n return this.validateStock()\n }, 1000);\n } else {\n return this.checkValuesForStock()\n }\n }\n\n checkValuesForStock = () => {\n let existMark = false\n this.productDirective.special_mark.forEach(special_mark => {\n switch (special_mark.type) {\n case 'out_of_stock': existMark = true; break;\n }\n })\n if (!existMark) {\n existMark = this.productDirective.variants.find(v => v.stock > 0) == undefined\n }\n return existMark\n }\n}","import {\n Directive,\n OnInit,\n ViewContainerRef,\n OnDestroy,\n Input,\n ElementRef,\n Renderer2,\n Inject,\n OnChanges,\n SimpleChanges,\n} from \"@angular/core\";\nimport { DOCUMENT } from \"@angular/common\";\n\nexport class ParamsContext {\n [key: string]: any;\n}\n\n@Directive({\n selector: \"[ecProductOff]\",\n})\nexport class ProductOffDirective implements OnChanges, OnInit, OnDestroy {\n\n private product: any;\n private classStr: \"\";\n private customMessageStr = \"{discount}% OFF\";\n\n @Input()\n set ecProductOff(value: any) {\n this.product = value;\n }\n @Input()\n set classStrSpacing(value: any) {\n this.classStr = value;\n }\n @Input()\n set customMessage(value: string) {\n this.customMessageStr = value;\n }\n\n constructor(\n @Inject(DOCUMENT) private document,\n private elementRef: ElementRef,\n private renderer: Renderer2,\n ) { }\n\n ngOnInit() { }\n hasDiscount = (product) => {\n\n if (!product.saleprice) {\n return null\n }\n if (product.price?.toString().includes(\"-\") && product.saleprice?.toString().includes(\"-\")) {\n let prices = product.price?.toString().split('-')\n let saleprices = product.saleprice?.toString().split('-')\n let saleBf = this.generateDiscount(prices[1]?.trim(), saleprices[1]?.trim())\n let saleLt = this.generateDiscount(prices[0]?.trim(), saleprices[0]?.trim())\n if (!saleBf && !saleLt) {\n return null\n }\n if (saleBf && saleLt && saleBf == saleLt) {\n return `${saleBf}`\n }\n if (saleBf && !saleLt) {\n return `${saleBf}`\n }\n if (!saleBf && saleLt) {\n return `${saleLt}`\n }\n return `${saleBf} - ${saleLt}`\n }else{\n if (parseInt(product.price) > parseInt(product.saleprice)) {\n return this.generateDiscount(product.price, product.saleprice)\n }\n }\n // console.log(product.price?.toString().includes(\"-\"));\n // console.log(product.saleprice?.toString().includes(\"-\"));\n // console.log(' PRECIO ', product.price);\n // console.log(' SALE ', product.saleprice);\n \n // if (\n // !product.price.toString().includes(\"-\") &&\n // product.saleprice &&\n // parseInt(product.price) > parseInt(product.saleprice)\n // ) {\n // let result =\n // ((parseInt(product.price) - parseInt(product.saleprice)) /\n // parseInt(product.price)) *\n // 100;\n // if (Number.isNaN(result)) {\n // return null;\n // } else return Math.floor(result);\n // }\n // return null;\n };\n\n\n generateDiscount = (price, saleprice) => {\n \n if (parseFloat(price) > parseFloat(saleprice) ) {\n let result =\n ((parseFloat(price) - parseFloat(saleprice)) /\n parseFloat(price)) *\n 100;\n if (Number.isNaN(result)) {\n return null;\n } else return Math.round(result)//Math.floor(result);\n }\n return null;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.product.price) {\n let discount = this.hasDiscount(this.product);\n this.elementRef.nativeElement.childNodes.forEach(node => {\n this.renderer.removeChild(this.elementRef.nativeElement, node)\n })\n if (discount) {\n this.renderer.appendChild(this.elementRef.nativeElement, this.createImage(discount));\n } \n // else {\n // this.renderer.removeChild(this.elementRef.nativeElement.parentElement, this.elementRef.nativeElement);\n // }\n }\n }\n\n createImage = (discount) => {\n let popover = this.renderer.createElement(\"a\");\n this.customMessageStr = this.customMessageStr.replace('{discount}',discount)\n this.renderer.setProperty(popover, \"innerHTML\", this.customMessageStr);\n this.classStr?.split(\" \").forEach((cl) => {\n try {\n this.renderer.addClass(popover, cl);\n } catch (error) { console.log('add class directive -> ', error) }\n });\n return popover;\n };\n\n ngOnDestroy() { }\n}\n","import { Directive, OnInit, TemplateRef, ViewContainerRef, OnDestroy, Input, ElementRef, Renderer2, Inject, OnChanges, SimpleChanges } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Product } from '../interfaces/product';\nimport { Constants } from '../core.consts';\n\n\n@Directive({\n selector: '[ecProductMiniStandard]'\n})\nexport class ProductMiniStandardDirective implements OnChanges, OnInit, OnDestroy {\n\n private special_marks: any[];\n private product: Product;\n private idConteiner = null\n @Input()\n set ecProductMiniStandard(productParam: Product) {\n this.special_marks = productParam.special_mark\n this.product = productParam\n this.idConteiner = `container-img-marks-standard-${this.product.id}`\n }\n\n constructor(\n private elementRef: ElementRef,\n private viewContainer: ViewContainerRef,\n private renderer: Renderer2,\n private constants: Constants,\n ) { }\n\n ngOnInit() {\n }\n\n ngOnChanges(changes: SimpleChanges) {\n (this.special_marks && this.special_marks.length)\n &&\n (this.special_marks.filter(special_mark => special_mark.type.includes('standard')))\n .map(special_mark => this.setMarkStandar(special_mark));\n }\n\n ngOnDestroy() { }\n\n setMarkStandar = (special_mark) => {\n let containerImg = document.getElementById(this.idConteiner);\n if (!containerImg) {\n let containerImg = this.renderer.createElement('div');\n this.renderer.setAttribute(containerImg, 'id', this.idConteiner);\n this.renderer.addClass(containerImg, 'container-img-marks-standard');\n this.renderer.appendChild(this.elementRef.nativeElement, containerImg);\n }\n this.renderer.appendChild(document.getElementById(this.idConteiner), this.createImage(special_mark));\n }\n\n createImage = (data) => {\n let image = (data.images && data.images.length) && data.images[0];\n if (!image) return null;\n let image_view = this.renderer.createElement('img');\n this.renderer.setAttribute(image_view, 'src', this.constants.mediaUrl() + image);\n return image_view;\n }\n\n}","import { Template } from '@angular/compiler/src/render3/r3_ast';\nimport { Directive, ElementRef, Input, OnInit, TemplateRef, ViewContainerRef, Renderer2, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { async } from '@angular/core/testing';\nimport { filter } from 'rxjs/operators';\nimport { User } from '../classes/user';\nimport { Product } from '../interfaces/product';\nimport { AuthService } from '../services/auth.service';\nimport { ProductDetailService } from '../services/products/product-detail.service';\n\n@Directive({\n selector: \"[ecAuthWholesaler]\"\n})\nexport class AuthWholesalerDirective {\n\n public auth: boolean = true\n public user: User = null\n private productDirective: Product = null;\n\n\n @Input()\n ecAuthWholesalerElse: TemplateRef<any>\n\n @Input()\n set ecAuthWholesaler(authparams) {\n this.auth = authparams\n if (this.auth) {\n this.authService.userAuth.subscribe(user => {\n this.viewContainer.clear();\n this.user = user\n this.viewContainer.createEmbeddedView(\n user?.isWholesaler() ? this.templateRef : this.ecAuthWholesalerElse\n )\n })\n }else{\n this.viewContainer.clear();\n this.viewContainer.createEmbeddedView( this.templateRef )\n }\n }\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef,\n private authService: AuthService,) {\n }\n\n ngOnInit() { }\n\n ngOnDestroy() { }\n\n ngOnChanges() { }\n}","//Directives base\n\n// import { ProductButtonBaseDirective } from './product-button-base.directive';\n// import { ProductContactBaseDirective } from './product-contact-base.directive';\n// import { ProductMiniBaseDirective } from './product-mini-base.directive';\n// import { ProductOffDetailBaseDirective } from './product-off-detail-base.directive';\n// import { ProductPriceBaseDirective } from './product-price-base.directive';\n\n\nimport { AddActionRedirectDirective } from './add-action-redirect.directive';\nimport { ProductStockDirective } from './product-stock.directive';\nimport { ProductOffDirective } from './product-off.directive';\nimport { ProductMiniStandardDirective } from './product-mini-standard.directive';\nimport { AuthWholesalerDirective } from './auth-wholesaler.directive';\n\nexport const directives: any[] = [\n // ProductButtonBaseDirective,\n // ProductContactBaseDirective,\n // ProductMiniBaseDirective,\n // ProductOffDetailBaseDirective,\n // ProductPriceBaseDirective,\n\n ProductMiniStandardDirective,\n ProductOffDirective,\n AddActionRedirectDirective,\n ProductStockDirective,\n AuthWholesalerDirective,\n];\n\n// export * from './product-button-base.directive';\n// export * from './product-contact-base.directive';\n// export * from './product-mini-base.directive';\n// export * from './product-off-detail-base.directive';\n// export * from './product-price-base.directive';\n\nexport * from './product-mini-standard.directive';\nexport * from './product-stock.directive';\nexport * from './product-off.directive';\nexport * from './auth-wholesaler.directive';\n","import { CurrencyPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { Constants } from '../core.consts';\nimport { ProductsService } from '../services/products/products.service';\n\n@Pipe({\n name: 'ecCurrencySymbol',\n})\nexport class ecCurrencySymbolPipe implements PipeTransform {\n \n\n constructor(public productsService: ProductsService, private currencyPipe: CurrencyPipe, public consts: Constants) { }\n\n transform(\n value: number\n ): string {\n const formatter = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'USD' });\n return value && this.changeSymbolTransform(formatter.format(value)?.toString()) || ''\n //return value && this.changeSymbolTransform(this.currencyPipe.transform(value,'USD').toString()) || ''\n }\n\n changeSymbolTransform = (valor) => {\n try {\n return this.positionSymbol(this.checkingWithoutDecimals(this.clearSymbol(valor)))\n } catch (error) {\n console.error('Errores en custom pipe -> ',error);\n return valor\n }\n }\n\n clearSymbol = (value) => value.replace('$', '')\n\n positionSymbol = (value) => this.consts?.currency.position.toUpperCase() == 'L' ? `${this.consts?.currency.symbol} ${value?.trim()}` : `${value?.trim()} ${this.consts?.currency.symbol}`\n\n checkingWithoutDecimals = (value) => {\n if (this.consts?.currency.withoutDecimals) {\n let val = value?.split(',')\n return val[1]?.trim() == \"00\" && value.trim().slice(0, value.trim().length - 3) || value\n }\n return value\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'ecSanitizerHtml'\n})\nexport class EcSanitizerHtmlPipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) { }\n\n transform(value) {\n return this.sanitizer.bypassSecurityTrustHtml(value);\n }\n\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'ecSanitizerUrl'\n})\nexport class EcSanitizerUrlPipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) { }\n\n transform(value) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(value);\n }\n\n}\n","//Pipes base\n\nimport { ecCurrencySymbolPipe } from \"./ec-currency-symbol.pipe\";\nimport { EcSanitizerHtmlPipe } from \"./ec-sanitizer-html.pipe\";\nimport { EcSanitizerUrlPipe } from \"./ec-sanitizer-url.pipe\";\n\n\nexport const pipes: any[] = [\n ecCurrencySymbolPipe,\n EcSanitizerHtmlPipe,\n EcSanitizerUrlPipe\n];\n\nexport * from \"./ec-currency-symbol.pipe\";\nexport * from \"./ec-sanitizer-html.pipe\";\nexport * from \"./ec-sanitizer-url.pipe\";\n","import { NgModule, ModuleWithProviders, Injector } from '@angular/core';\nimport { CommonModule, CurrencyPipe } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { OrderByPipe } from './pipes/order-by.pipe';\nimport { RouterModule } from '@angular/router';\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { ToastrModule } from 'ngx-toastr';\nimport { WINDOW_PROVIDERS } from './services/windows.service';\nimport { ProductsService } from './services/products/products.service';\nimport { BannerService } from './services/banner.service';\nimport { CartService } from './services/cart.service';\nimport { OrdersService } from './services/account/orders.service';\nimport { PaginationService } from './interfaces/paginate';\nimport { ConnectionService } from './api/connection.service';\nimport { AuthService } from './services/auth.service';\nimport { OptionsService } from './services/options.service';\nimport { ShipmentService } from './services/checkout/shipment.service';\nimport { CheckoutService } from './services/checkout/checkout.service';\nimport { OptionsOfProductListDataReceiverService } from './utils/options-of-product-list-data.service';\nimport { DataformService } from './services/dataform.service';\nimport { BlocksService } from './services/blocks/blocks.service';\nimport { UtilsService } from './utils/utils.service';\nimport { ShipmentDataTransformer } from './utils/shipment-transformer.service';\nimport { PaymentUtils } from './utils/payment-utils.service';\nimport { ToastService } from './utils/toast.service';\nimport { Constants } from './core.consts';\nimport { AuthGuardService } from './guards/auth-guard.service';\nimport { AbleBuyerGuardService } from './guards/able-buyer-guard.service';\nimport { UserRoleGuardService } from './guards/user-role-guard.service';\nimport { LoggedInGuard } from './guards/loggedin-guard.service';\nimport { CheckoutReadyGuard } from './guards/checkout-ready.service';\nimport { AuthInterceptor } from './interceptors/auth.interceptor';\nimport { CustomerInterceptor } from './interceptors/customer.interceptor';\nimport { StoresService } from './services/stores.service';\nimport { AddressingService } from './services/checkout/addressing.service';\nimport * as fromComponentsBase from './ec-component/index';\nimport * as fromDirectiveBase from './ec-directive/index';\nimport * as fromPipeBase from './ec-pipe/index';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RecaptchaModule, RecaptchaFormsModule, RECAPTCHA_SETTINGS, RecaptchaSettings, RECAPTCHA_LANGUAGE } from 'ng-recaptcha';\nimport { OrderUtilityService } from './utils/order-util.service';\nimport { FacebookPixelService } from './utils/analytics/facebook-pixel.service';\nimport { GoogleAnalyticsService } from './utils/analytics/google-analytics.service';\nimport { CardModule } from 'ngx-card';\nimport { AnalyticsService } from './services/analytics.service';\nimport { GTMService } from './utils/analytics/gtm.service';\nimport { ChannelConfigService } from './services/channel-config.service';\nimport { BlocksRepositoryService } from './services/blocks/blocks-repository.service';\nimport { ErrorHandlerService } from './services/checkout/error-handler.service';\nimport { ModalModule } from 'ngx-bootstrap/modal';\nimport { EcSanitizerHtmlPipe } from './ec-pipe/ec-sanitizer-html.pipe';\nimport { EcSanitizerUrlPipe } from './ec-pipe/ec-sanitizer-url.pipe';\nimport { CaptchaService } from './services/captcha.service';\nimport { DopplerService } from './utils/analytics/doppler.service';\n\n@NgModule({\n exports: [\n OrderByPipe,\n fromComponentsBase.components,\n fromDirectiveBase.directives,\n fromPipeBase.pipes,\n ],\n imports: [\n CommonModule,\n RouterModule,\n TranslateModule,\n HttpClientModule,\n InfiniteScrollModule,\n ToastrModule,\n FormsModule,\n ReactiveFormsModule,\n RecaptchaFormsModule,\n RecaptchaModule,\n CardModule,\n ModalModule\n ],\n declarations: [\n OrderByPipe,\n fromComponentsBase.components,\n fromDirectiveBase.directives,\n fromPipeBase.pipes,\n EcSanitizerHtmlPipe,\n EcSanitizerUrlPipe,\n ],\n providers: [\n\n ]\n})\nexport class NgEasycommerceModule {\n public static forRoot(environment: any): ModuleWithProviders {\n\n return {\n ngModule: NgEasycommerceModule,\n providers: [\n Constants,\n {\n provide: 'env', // you can also use InjectionToken\n useValue: environment\n },\n WINDOW_PROVIDERS,\n ProductsService,\n BannerService,\n CartService,\n OrdersService,\n PaginationService,\n ConnectionService,\n AuthService,\n OptionsService,\n ShipmentService,\n CheckoutService,\n OptionsOfProductListDataReceiverService,\n DataformService,\n BlocksService,\n StoresService,\n AnalyticsService,\n // Utils\n Constants,\n UtilsService,\n ShipmentDataTransformer,\n PaymentUtils,\n OptionsOfProductListDataReceiverService,\n ToastService,\n AddressingService,\n FacebookPixelService,\n GoogleAnalyticsService,\n GTMService,\n DopplerService,\n // Guards\n AuthGuardService,\n AbleBuyerGuardService,\n UserRoleGuardService,\n LoggedInGuard,\n CheckoutReadyGuard,\n OrderUtilityService,\n fromPipeBase.pipes,\n CurrencyPipe,\n ChannelConfigService,\n BlocksRepositoryService,\n ErrorHandlerService,\n CaptchaService,\n {\n provide: RECAPTCHA_SETTINGS,\n useValue: { siteKey: '6LcPPbUZAAAAAB8tKJ-UozPs1PztvGTEXnC26aY3' } as RecaptchaSettings,\n },\n // Others\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AuthInterceptor,\n multi: true\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: CustomerInterceptor,\n multi: true\n }\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n\n return {\n ngModule: NgEasycommerceModule,\n providers: []\n };\n }\n}","import { Injectable } from '@angular/core';\r\nimport { Constants } from '../core.consts';\r\nimport { CartService } from './cart.service';\r\nimport { CheckoutProcessState } from '../classes/checkout-process-state';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ConnectionService } from '../api/connection.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GiftCardService {\r\n\r\n private stateSubject = new BehaviorSubject<CheckoutProcessState>({ doing: false, ok: false, data: null });\r\n\r\n private baseUrl = this.consts.getUrlBase() + 'shop-api/' + this.consts.getChannel() + '/';\r\n private couponApi = () => this.baseUrl + 'carts/' + this.cartService.getCartToken() + '/coupon';\r\n\r\n public state = this.stateSubject.asObservable();\r\n\r\n constructor(private consts: Constants, private cartService: CartService, private connection: ConnectionService) { }\r\n\r\n setCoupon = (coupon) => {\r\n this.stateSubject.next({ doing: true, ok: false, data: null });\r\n this.connection.put(this.couponApi(), { coupon }).subscribe(\r\n res => this.handleResponse(res, coupon)\r\n )\r\n }\r\n\r\n removeCoupon = () => this.stateSubject.getValue().data.coupon && this.deleteCoupon();\r\n\r\n deleteCoupon = () => {\r\n this.stateSubject.next({ doing: true, ok: false, data: null });\r\n this.connection.delete(this.couponApi());\r\n }\r\n\r\n handleResponse = (response, coupon) => {\r\n response.code ?\r\n this.stateSubject.next({\r\n doing: false,\r\n ok: false,\r\n data: { message: response.message, discount: '' }\r\n }) :\r\n this.stateSubject.next({\r\n doing: false,\r\n ok: true,\r\n data: { message: 'coupon-ready', discount: 'APPLIED DISCOUNT', coupon }\r\n });\r\n }\r\n\r\n avoidCoupon = () => {\r\n this.stateSubject.next({ doing: false, ok: true, data: { discount: null, message: 'avoided', coupon: null } })\r\n }\r\n}","import { Injectable } from '@angular/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { Product } from '../interfaces/product';\nimport { BehaviorSubject, Observable, Subscriber } from 'rxjs';\nimport { map, filter } from 'rxjs/operators';\n\n// Get product from Localstorage\nlet products = JSON.parse(localStorage.getItem(\"wishlistItem\")) || [];\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WishlistService {\n \n // wishlist array\n public wishlistProducts: BehaviorSubject<Product[]> = new BehaviorSubject([]);\n public observer : Subscriber<{}>;\n\n // Initialize \n constructor(private toastrService: ToastrService) { \n this.wishlistProducts.subscribe(products => products = products);\n }\n\n // Get wishlist Products\n public getProducts(): Observable<Product[]> {\n const itemsStream = new Observable(observer => {\n observer.next(products);\n observer.complete();\n });\n return <Observable<Product[]>>itemsStream;\n }\n\n // If item is aleready added In wishlist\n public hasProduct(product: Product): boolean {\n const item = products.find(item => item.id === product.id);\n return item !== undefined;\n }\n\n // Add to wishlist\n public addToWishlist(product: Product): Product | boolean {\n var item: Product | boolean = false;\n if (this.hasProduct(product)) {\n item = products.filter(item => item.id === product.id)[0];\n const index = products.indexOf(item);\n } else {\n products.push(product);\n }\n this.toastrService.success('This product added to Wishlist.'); // toasr services\n localStorage.setItem(\"wishlistItem\", JSON.stringify(products));\n return item;\n }\n\n // Removed Product\n public removeFromWishlist(product: Product) {\n if (product === undefined) { return; }\n const index = products.indexOf(product);\n products.splice(index, 1);\n localStorage.setItem(\"wishlistItem\", JSON.stringify(products));\n }\n \n\n}\n","import {Inject, Injectable, OnInit} from '@angular/core';\nimport {RouteReuseStrategy, ActivatedRouteSnapshot, DetachedRouteHandle} from '@angular/router';\nimport {Constants} from '../core.consts';\n\n@Injectable()\nexport class StandardReuseStrategy implements RouteReuseStrategy {\n\n private routes : string[] = [];\n private storedRoutes = new Map<string, DetachedRouteHandle>();\n\n constructor(@Inject('env')private env) {}\n\n shouldDetach(route : ActivatedRouteSnapshot): boolean {\n this.routes = (this.routes.length && this.routes) || (this.env.routes || []);\n let result = route.data.key && this.routes.includes(route.data.key);\n return result;\n }\n\n store(route : ActivatedRouteSnapshot, handle : DetachedRouteHandle): void {\n this.storedRoutes.set(route.data.key, handle);\n }\n\n shouldAttach(route : ActivatedRouteSnapshot): boolean {\n return !!this.storedRoutes.get(route.data.key);\n }\n\n retrieve(route : ActivatedRouteSnapshot): DetachedRouteHandle {\n return this.storedRoutes.get(route.data.key);\n }\n\n shouldReuseRoute(future : ActivatedRouteSnapshot, curr : ActivatedRouteSnapshot): boolean {\n return future.routeConfig === curr.routeConfig;\n }\n}\n"]}
1
+ {"version":3,"sources":["ng://ng-easycommerce/lib/pipes/order-by.pipe.ts","ng://ng-easycommerce/lib/services/windows.service.ts","ng://ng-easycommerce/lib/interfaces/choose-options/filter-option.ts","ng://ng-easycommerce/lib/core.consts.ts","ng://ng-easycommerce/lib/api/connection.service.ts","ng://ng-easycommerce/lib/services/pagination.service.ts","ng://ng-easycommerce/lib/classes/filters/Filter.ts","ng://ng-easycommerce/lib/classes/filters/CategoryFilter.ts","ng://ng-easycommerce/lib/services/options.service.ts","ng://ng-easycommerce/lib/classes/filters/AttributesFilter.ts","ng://ng-easycommerce/lib/classes/filters/DinamycsFilter.ts","ng://ng-easycommerce/lib/classes/filters/SortFilter.ts","ng://ng-easycommerce/lib/services/products/products.service.ts","ng://ng-easycommerce/lib/services/banner.service.ts","ng://ng-easycommerce/lib/classes/user.ts","ng://ng-easycommerce/lib/classes/checkout/step.ts","ng://ng-easycommerce/lib/utils/order-util.service.ts","ng://ng-easycommerce/lib/utils/analytics/doppler.service.ts","ng://ng-easycommerce/lib/utils/analytics/facebook-pixel.service.ts","ng://ng-easycommerce/lib/utils/analytics/google-analytics.service.ts","ng://ng-easycommerce/lib/utils/analytics/gtm.service.ts","ng://ng-easycommerce/lib/utils/analytics/metricool-pixel.service.ts","ng://ng-easycommerce/lib/services/analytics.service.ts","ng://ng-easycommerce/lib/services/checkout/error-handler.service.ts","ng://ng-easycommerce/lib/utils/toast.service.ts","ng://ng-easycommerce/lib/services/checkout/checkout.service.ts","ng://ng-easycommerce/lib/classes/checkout/step-service.ts","ng://ng-easycommerce/lib/services/checkout/addressing.service.ts","ng://ng-easycommerce/lib/services/channel-config.service.ts","ng://ng-easycommerce/lib/services/auth.service.ts","ng://ng-easycommerce/lib/services/cart.service.ts","ng://ng-easycommerce/lib/services/account/orders.service.ts","ng://ng-easycommerce/lib/utils/shipment-transformer.service.ts","ng://ng-easycommerce/lib/services/stores.service.ts","ng://ng-easycommerce/lib/services/checkout/shipment.service.ts","ng://ng-easycommerce/lib/utils/options-of-product-list-data.service.ts","ng://ng-easycommerce/lib/services/dataform.service.ts","ng://ng-easycommerce/lib/services/blocks/blocks-repository.service.ts","ng://ng-easycommerce/lib/services/blocks/blocks.service.ts","ng://ng-easycommerce/lib/utils/utils.service.ts","ng://ng-easycommerce/lib/utils/payment-utils.service.ts","ng://ng-easycommerce/lib/guards/auth-guard.service.ts","ng://ng-easycommerce/lib/guards/able-buyer-guard.service.ts","ng://ng-easycommerce/lib/guards/user-role-guard.service.ts","ng://ng-easycommerce/lib/guards/loggedin-guard.service.ts","ng://ng-easycommerce/lib/guards/checkout-ready.service.ts","ng://ng-easycommerce/lib/interceptors/auth.interceptor.ts","ng://ng-easycommerce/lib/interceptors/customer.interceptor.ts","ng://ng-easycommerce/lib/classes/component-helper.ts","ng://ng-easycommerce/lib/services/parameters.service.ts","ng://ng-easycommerce/lib/ec-component/account-ec/account-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.ts","ng://ng-easycommerce/lib/ec-component/blocks-ec/blocks-ec.component.ts","ng://ng-easycommerce/lib/ec-component/cart-ec/cart-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/checkout-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.ts","ng://ng-easycommerce/lib/services/checkout/payment.service.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/success-ec/success-ec.component.ts","ng://ng-easycommerce/lib/ec-component/collection-ec/collection-ec.component.ts","ng://ng-easycommerce/lib/ec-component/coupon-ec/coupon-ec.component.ts","ng://ng-easycommerce/lib/ec-component/faqs-content-ec/faqs-content-ec.component.ts","ng://ng-easycommerce/lib/ec-component/filters-ec/filters-ec.component.ts","ng://ng-easycommerce/lib/ec-component/filters-top-ec/filters-top-ec.component.ts","ng://ng-easycommerce/lib/ec-component/footer-ec/footer-ec.component.ts","ng://ng-easycommerce/lib/ec-component/header-ec/header-ec.component.ts","ng://ng-easycommerce/lib/ec-component/home-ec/home-ec.component.ts","ng://ng-easycommerce/lib/ec-component/login-ec/login-ec.component.ts","ng://ng-easycommerce/lib/services/products/product-detail.service.ts","ng://ng-easycommerce/lib/ec-component/product-detail-ec/product-detail-ec.component.ts","ng://ng-easycommerce/lib/ec-component/product-ec/product-ec.component.ts","ng://ng-easycommerce/lib/ec-component/related-products-ec/related-products-ec.component.ts","ng://ng-easycommerce/lib/ec-component/section-container-ec/section-container-ec.component.ts","ng://ng-easycommerce/lib/ec-component/stores-ec/stores-ec.component.ts","ng://ng-easycommerce/lib/ec-component/variants-ec/variants-ec.component.ts","ng://ng-easycommerce/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/price-ec/price-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.ts","ng://ng-easycommerce/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.ts","ng://ng-easycommerce/lib/ec-component/account-ec/order-ec/order-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/auth-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.ts","ng://ng-easycommerce/lib/ec-component/password-reset-ec/password-reset-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.ts","ng://ng-easycommerce/lib/ec-component/share-block-ec/share-block-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.ts","ng://ng-easycommerce/lib/ec-component/checkout-error-ec/checkout-error-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.ts","ng://ng-easycommerce/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.ts","ng://ng-easycommerce/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.ts","ng://ng-easycommerce/lib/services/captcha.service.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.ts","ng://ng-easycommerce/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.ts","ng://ng-easycommerce/lib/ec-component/index.ts","ng://ng-easycommerce/lib/ec-directive/add-action-redirect.directive.ts","ng://ng-easycommerce/lib/ec-directive/product-stock.directive.ts","ng://ng-easycommerce/lib/ec-directive/product-off.directive.ts","ng://ng-easycommerce/lib/ec-directive/product-mini-standard.directive.ts","ng://ng-easycommerce/lib/ec-directive/auth-wholesaler.directive.ts","ng://ng-easycommerce/lib/ec-directive/index.ts","ng://ng-easycommerce/lib/ec-pipe/ec-currency-symbol.pipe.ts","ng://ng-easycommerce/lib/ec-pipe/ec-sanitizer-html.pipe.ts","ng://ng-easycommerce/lib/ec-pipe/ec-sanitizer-url.pipe.ts","ng://ng-easycommerce/lib/ec-pipe/index.ts","ng://ng-easycommerce/lib/ng-easycommerce.module.ts","ng://ng-easycommerce/lib/services/gift-card.service.ts","ng://ng-easycommerce/lib/services/wishlist.service.ts","ng://ng-easycommerce/lib/strategies/standard.strategy.ts"],"names":["OrderByPipe","prototype","transform","array","val","_this","this","trim","Array","from","sort","item1","item2","orderByComparator","a","b","isNaN","parseFloat","isFinite","toLowerCase","__decorate","Pipe","name","WINDOW","InjectionToken","WindowRef","Object","defineProperty","Error","BrowserWindowRef","_super","call","__extends","window","__decorate$1","Injectable","windowFactory","browserWindowRef","platformId","isPlatformBrowser","nativeWindow","FilterOptionTypes","browserWindowProvider","provide","useClass","windowProvider","useFactory","deps","PLATFORM_ID","WINDOW_PROVIDERS","Constants$1","translate","router","env","LOCALE","CHANNEL","channelConfigSubject","ReplaySubject","channelConfig$","asObservable","channelConfigAPI","channel","browserWindow","browserWindowEnv","urlBase","apiUrl","urlAssets","urlFrontend","locale","localStorage","getItem","blocksCacheTime","modalConfig","title","class","keyboard","setModalConfig","config","getModalConfig","version","routes","masterChannel","getMasterChannel","setMasterChannel","setItem","isProduction","production","setUrlBase","url","setUrlAssets","onlyIfProduction","next","params","mediaUrl","mediaBannerUrl","mediaStoreUrl","getProductsListRoute","getSectionsRoute","getUrlBase","getUrlFrontend","getBlocksCacheTime","parseInt","getLocale","getLocaleTranslate","split","setLocale","use","getChannel","setChannel","getVersion","loginExtraData","client_id","client_secret","grant_type","isCollection","path","test","mobile","innerWidth","strictTypeChannel","toDecimal","total","Math","floor","addRouteToReuse","route","push","removeRouteToReuse","index","indexOf","splice","getRoutesToReuse","getRatingStar","rating","star","notStar","urlStar","cantStar","Number","error","console","inputValidationByExpressions","e","patron","condition","tecla","keyCode","which","patronReg","RegExp","tecla_final","String","fromCharCode","currency","code","symbol","position","withoutDecimals","setCurrency","currencyTypeFind","customType","find","ct","toUpperCase","__assign","modifyChannelConfig","channelConfig","locales","baseCurrency","Constants","needles","haystack","result","entries","forEach","value","hasOwnProperty","searched","prefix","suffix","casesensitive","param","TranslateService","Router","Inject","args","__decorate$2","providedIn","__param","ConnectionService","http","consts","formUrl","api","location","protocol","includes","replace","post","data","pipe","take","postOutsider","get","__assign$1","catch","err","of","getOutsider","getErrorNotHandler","getOutsiderWithParams","getHTML","httpHeaders","HttpHeaders","Accept","responseType","headers","getWithLimit","limit","HttpParams","append","getPaginated","page","put","delete","HttpClient","__decorate$3","PaginationService","connection","constants","nextSubject","BehaviorSubject","finishedSubject","waiting","finished$","updatePageData","response","cleanRoute","links","finished","pages","items","finalize","slice","isFinished","initialize","initialValues","getNext","nextProducts","subscribe","getPage","totalItems","currentPage","pageSize","__decorate$4","generated_url","multi","type","getContent","toUrlParams","setContent","options","setSelected","element","cleanFilter","setSelectedValue","element_to_change","selected","children","length","reset","sublist","elements","findIndex","subelement","child","i","founded","some","elem","filter","getSelectedList","findSelected","new_result","CategoryFilter","categories$","formatter","initial_value","categories","original","createElement","shape","removeAccents","_a","slug","_b","map","_c","_d","actual_url","str","normalize","res","raw_data","Filter","OptionsService","categoriesSubject","attributesSubject","sectionsSubject","readySubject","attributes","sections","readyAll","ready","getAllData","getCategories","getAttributes","getSections","getSectionContentByLink","link","pageContentByCodeApi","html","catchError","getSectionContentByLinkAsPromise","toPromise","getFAQ","faqsApi","response_faq","faqs","translations","topic","questions","frequentlyAskedQuestions","asked_question","question","answer","isSubElement","chidren","findCode","getCodeBySlug","generateMenu","getHigher","cmsBase","cmsChannel","shopApi","sectionsApi","sectionByCodeApi","taxonsApi","attributesApi","addAttributesSlug","attribute","__assign$2","slugify","text","getBreadcrumb","breadcrumb","generateBreadcrumb","reverse","getBreadcrumbByFilters","filters","final_result","unshift","apply","__spread","length_1","appendPaths","then","sent","optionLoaded","isCategory","item","section","appendSection","key","state","keys","every","option_key","__decorate$5","AttributesFilter","attributes$","already","aux_url","cleanResult","DynamicsFilter","arguments","option","label","values","description","holi","SortFilter","father","products","ProductsService","pagination","productsSubject","filtersSubject","catalogMode","products$","filters$","latestProductsByCategoryApi","category","latestProductsApi","specificProductApi","variant","productsBySpecialMarkApi","specialmark","relatedProductsApi","productVariantApi","latestProductsByAttributeApi","productSearchApi","cmsRelatedProductsApi","productsFilterApi","getLatestProducts","getLatestProductsByCategory","getSpecificProduct","getProductsBySpecialMark","getRelatedProducts","getProductVariant","getlatestProductsByAttribute","getSearchedProducts","content","generateFinalApi","subscription","getCMSRelatedProducts","getProductsSearched","search_value","getProductsForFilter","defaultFilters","setFilters","unsubscribe","updateDynamicFilters","final_filters","getFilterInstance","filterDefault","filter_type","codes","instance","request","setFilterSelected","filterObj","filterElem","updateProductsForFilter","getProductsWithUniqueVariant","withOption","defaultFirstOption","checkIfStock","productsUniqueVariant","product","variants","__spread$1","opt","optionValue","modified_product","JSON","parse","stringify","variantAux","stock","op","productWithVariantValues","firstOptions_1","picturesdefault","images","variant_id","currentOption","__assign$3","productCode","id","variantCode","finalPrice","saleprice","price","cleanAllFilters","isWaiting","extra_params","extra","getTotal","__decorate$6","BannerService","optionsService","bannerSubject","banners","button_route","banner","bannersByTaxonApi","taxon","bannersByAttributeApi","getBanner","loadBannersByTaxon","loadBannersByAtrribute","getImage","mobileImageName","imageName","getImageFull","getBannersByTaxon","getBannersByAttribute","procesateBanners","final_banners","__decorate$7","User","USER","email","username","password","first_name","last_name","address","country","city","postcode","birthday","gender","phone_number","suscribed_to_newsletter","document_type","preferred_card","document_number","channels","customers","token","typeUser","initilized","isWholesaler","isSeller","isRetailCustomer","toForm","firstName","lastName","phoneNumber","documentType","documentNumer","street","countryCode","provinceName","persistInStorage","json","jsonify","loadFromStorage","deserialize","removeFromStorage","removeItem","log","setChannels","_i","input","assign","removePassword","needsAuth","priority","doing","restart","isPending","isReady","OrderUtilityService","getPromotions","cart","forCart","checkoutState","new_state","subtotal","amount","totals","cartDiscounts","cartDiscount","formatType","getAmount","discount","shipping","__decorate$8","DopplerService","rendererFactory","document","isLoaded","pixelSrc","scriptInsert","renderer","setAttribute","appendChild","body","createRenderer","RendererFactory2","DOCUMENT","__decorate$9","FacebookPixelService","enabled","pixel_id","new_analityc_script","setTimeout","callEvent","event_name","translateEventName","fbq","evalEvent","toViewContent","toCheckoutInit","toPaymentInfo","toPurchase","toAddToCart","callCustomEvent","disable","content_type","content_name","content_ids","contents","getContents","getContentIds","num_items","quantity","__decorate$a","GoogleAnalyticsService","productsService","startListeningPageViews","gtm_id","events","event","NavigationEnd","gtag","page_path","urlAfterRedirects","toViewItem","toViewItemList","toShippingInfo","toRemoveToCart","toSignUp","coupon","toCartDiscount","tax","taxes","transaction_id","number","strDiscount","itemDiscount","join","lastProduct","toItem","__assign$4","item_list_name","item_list_id","productParam","item_name","item_id","item_brand","item_category","payment_type","payments","method","shipping_tier","shipments","declaration","async","src","initialization","head","__decorate$b","GTMService","browserGlobals","windowRef","documentRef","addGtmToDom","gtmTag","pageName","pushTag","countItems","__assign$5","getDataLayer","dataLayer","pushOnDataLayer","obj","Promise","resolve","reject","doc","gtm.start","Date","getTime","gtmScript","applyGtmQueryParams","gtm_resource_path","addEventListener","insertBefore","firstChild","k","__decorate$c","MetricoolPixelService","pixel_hash","__decorate$d","AnalyticsService","facebookAnalitycs","googleAnalytics","gtmAnalytics","metricoolAnalytics","dopplerAnalytics","services","initializeFacebook","initializeGoogle","initializeGTM","initializeMetricool","initializeDoppler","service","__decorate$e","ErrorHandlerService","cartService","toastrService","injector","errorSubject","error$","outOfStock","updateItemsOnError","otherErrors","channeAccessPermissionDenied","AuthService","logout","message","show","closeButton","timeOut","clearError","handlerErrorResponse","CartService","ToastrService","Injector","__decorate$f","ToastService","translation","setTimeMessage","time","configToast","interpolateParams","configToastr","__decorate$g","CheckoutService$1","orderUtils","analyticsService","authService","errorHandler","baseApi","getCartToken","getPaymentMethodsApi","putAddressApi","putPaymentApi","completeApi","persistShipmentApi","getPreferenceApi","getHasPurchaseConditions","canCheckoutSubject","onReadySubject","stateSubject","loadingSubject","orderSubject","asociatedDataSubject","checkout_data","order$","state$","loading$","canCheckout$","asociatedData$","onReady$","updateOrder","order","getStepData","step_name","step_result","getValue","step","setSteps","steps","autohandle","final_steps","Step","__assign$6","cartLocal","setStepReady","step_number","__awaiter$1","restartAllStepsFrom","isCheckoutReady","setStepDoing","included","update","isStepReady","setOrder","getOrder","completeOrder","notes","complete","changeHaveToUpdate","ok","require_login","clearAndResetCart","updateAsociatedData","getUserProfileAsUser","promotion","restartCheckout","combineLatest","cartItems","loading","__read$2","getTotalAmount","getUserProfile","user","navigateByUrl","CheckoutService","__decorate$h","checkout","step_id","restartStep","getUserData","getShipmentData","getPaymentData","step_data","__awaiter$2","__generator$2","AddressingService$1","checkoutService","countriesApi","zonesApi","provincesApi","addressBookApi","headquarterApi","typeForms","modeSelectAddress","countriesList","documentTypes","provinceList","getAddressingData","__awaiter$3","__generator$3","_embedded","getAddressBook","addres","__assign$7","default","setHeadquarter","sede","setAddress","user_data","putAddressAndHandle","onError","shippingAddress","getTypeForm","configForm","formAddres","Validators","required","pattern","documentNumber","maxLength","provinceCode","terms","formBilling","viewForms","setTypeSelectAddress","setTypeForms","paises","toLocaleLowerCase","provinces","AddressingService","__decorate$i","StepService","ChannelConfigService$1","channelConfigApi","localesApi","channelsApi","channelsSubject","localesSubject","getChannelConfig","setChannelInfo","getChannels","getLocales","changeChannel","channelObj","headquarterSelectionOnly","ChannelConfigService","__decorate$j","AuthService$1","JWT_TOKEN","REFRESH_TOKEN","EXPIRATES_IN","MAIL","CUSTOMER","activeChannelChange","loggedInSubject","loggingInSubject","userInSubject","channelsUserSubject","tokenApi","registerApi","registerWholesalerApi","confirmAccountApi","resetPasswordApi","recoverPasswordApi","loggedIn","loggingIn","userAuth","channelsUser","customer","homeResolver","channelAccessPermission","userchannel","channelAccess","hostname","encoded","btoa","reload","doLogin","__assign$8","doLoginUser","mapTo","toString","signUp","confirmAccount","passwordReset","new_password","first","second","recoverPassword","isTokenExpired","fecha_expiracion","getExpiratesAt","moment","hasToRefresh","getRefreshToken","signUpWholesaler","getCountriesData","__awaiter$4","__generator$4","setActiveChannelChange","activelyChangeChannelsOnLogin","isAllowedRole","allowedRoles","role","forceChannelsForSeller","tokens","__spread$2","setCustomer","clearAndResetCustomerCart","getCustomer","setHomeResolver","resolverFunction","getHomeResolver","isAbleToBuy","isAuthenticated","withRoles","ch","Observable","getCurrentUser","getCurrentUserAsUser","doLogoutUser","getToken","refresh_token","expires_in","add","format","__decorate$k","CartService$1","channelConfigService","cartItemsSubject","couponSubject","cartSubject","requestInProcess","promotionsSubject","count","logged_in","have_to_update","cart_baseUrl","cartItemsApi","addItemApi","cart_token","addAllItemsApi","updateItemQuantityApi","deleteItemApi","couponApi","switchPriceInCartItem","promotions","getCart","__awaiter$5","initializeCart","getCartByToken","getCartByCustomer","tokenValue","updateCartObj","updateCartItems","transformItems","stepCart","isItemInLocal","deleteCartItem","addAllToCart","external_item","updateLocalCart","updateCartItemQuantity","newQuantity","appendToCart","removeCartItem","toast","__assign$9","addIfAllreadyExists","quantityAdd","updateItemQuantity","findItem","resetCart","emitEvent","couponCode","formatCoupon","addToCart","handleError","addToCartPromise","mergeItemsAddAllToCart","cart_response","status","paramsMerge","itemInterno","itemParam","__spread$3","validateQuantity","findItemByIdVariant","getCountFromItemInCart","maximumItemsQuantity","minimumItemsQuantity","calculateStockCounts","id_buscado","codeVariant","product_id","getCountCartItems","getTaxesAmount","getSubTotalAmount","addCoupon","errors","removeCoupon","current_coupon","current","readyForCheckout","successCallback","errorCallback","minimumQuantityPurchaseItems","reasons","minimumPurchaseAmount","itemsWithError","itemsUpdated","failedItem","failed","loadCartByToken","server_item","pop","reduce","prev","curr","__decorate$l","OrdersService$1","ordersSubject","selectedOrderSubject","orders$","selectedOrder$","ordersListapi","updateOrders","mapOrdersAndAddInfo","orders","setSelectedOrder","findOrder","order_number","getOrderByNumber","waitUntilOrders","OrdersService","formatProduct","percentaje","toFixed","__assign$a","__decorate$m","ShipmentDataTransformer","getData","newDataSet","getApi","appendShipmentExtra","contract","__assign$b","codigo_sucursal","getMethodDetail","branch","direccion","componentesDeDireccion","component","meta","contenido","transformAndreani","descripcion","latitude","geocoordenadas","latitud","longitude","longitud","atencion","horarioDeAtencion","info","__decorate$n","StoresService$1","storesSubject","stores","getAllStoresApi","StoresService","__decorate$o","ShipmentService","transformer","storesService","methodsSubject","costsSubject","methods","costs","shipmentMethodsApi","putShipmentApi","putContractApi","calculatedCostsApi","getShipmentMethods","responseToList","setMethod","__awaiter$6","putShipment","getCalculatedCosts","modifyCostsResponse","setContract","__assign$c","otherParamsForContract","post_code","multiplePrices","branch_delivery","submethod","contracts","branch_property","address_data","computed","final_method_data_1","pickup_store","current_store","store","detail","shipping_method_contract","shipping_method_branch_code","getBranchOffices","formatUnnecesaryDocument","billingAddress","_e","_f","ngOnDestroy","moreInfoInMethod","__decorate$p","OptionsOfProductListDataReceiverService","sortOptions","oneSelect","selectedOption","filterOptions","__decorate$q","DataformService","fb","isValid","checkoutForm","valid","change","group","patchValue","FormBuilder","__decorate$r","BlocksRepositoryService","blocksAPI","getBlocks","__awaiter$7","hasSectionBlocks","blocks","appendBlock","block_info","new_block","restartBlocks","setInterval","__decorate$s","BlocksService","blocksRepo","blocksSubject","contactFormResponseAPI","orderedAndModified","result_ordered","getBlockByCode","block","getBannerImage","resultado","redirectionType","asociacion","sendResponse","response_obj","prepareData","__decorate$t","UtilsService","titleCaseWord","word","substr","__decorate$u","PaymentUtils","mp_error_codes","pending_contingency","pending_review_manual","cc_rejected_bad_filled_card_number","cc_rejected_bad_filled_date","cc_rejected_bad_filled_other","cc_rejected_bad_filled_security_code","cc_rejected_blacklist","cc_rejected_call_for_authorize","cc_rejected_card_disabled","cc_rejected_card_error","cc_rejected_duplicated_payment","cc_rejected_high_risk","cc_rejected_insufficient_amount","cc_rejected_invalid_installments","cc_rejected_max_attempts","cc_rejected_other_reason","getErrorMessage","__decorate$v","AuthGuardService$1","auth","AuthGuardService","routeSnapshot","redirectTo","__decorate$w","AbleBuyerGuardService$1","AbleBuyerGuardService","redirectSellerTo","__decorate$x","UserRoleGuardService$1","UserRoleGuardService","authorizedRoles","__decorate$y","LoggedInGuard$1","LoggedInGuard","navigate","__decorate$z","CheckoutReadyGuard$1","CheckoutReadyGuard","__decorate$A","AuthInterceptor","intercept","req","setHeaders","Content-Type","Authorization","authReq","clone","handle","catchErr","handleErrors","throwError","__decorate$B","CustomerInterceptor","__decorate$C","ComponentHelper","ecOnInit","ecOnConstruct","hasParams","navigateOnRouter","ParametersService$1","parametersSubject","readyParamsSubject","parameters","ready$","getAllParametersAPI","insertAnalitycs","initializeAnalytics","waitUntilData","facebook","google","gtm","metricool","doppler","ParametersService","__decorate$D","AccountEcComponent","paramsService","p","ngOnInit","__decorate$E","Component","selector","template","BlockBannerBoxesEcComponent","blocksService","big_ones","columnSize","esImpar","boxesInlcudesCode","box","__assign$d","Input","__decorate$F","BlockBannerFullEcComponent","__assign$e","handlePage","__decorate$G","BlockFormContactEcComponent","formBuilder","redirect","form_data","FormData","sendForm","form","success_message","formData","sendValue","contact_form","setSubject","setValue","__assign$f","subject","toastNewsletterForm","preventDefault","newsletter_form","toastCompleteForm","keysearch","telephone","attachment","captcha","uploadFile","target","files","file","ngOnChanges","resolved","captchaResponse","catpcha","__decorate$H","BlockHtmlEcComponent","sanitizer","html_content","bypassSecurityTrustHtml","DomSanitizer","__decorate$I","ContactFormNewsEcComponent","codeBlock","blockContact","subscribeBlockNews","__assign$g","contactForm","__decorate$J","providers","BlockProductsEcComponent","__assign$h","getKeyByValue","object","__decorate$K","BlocksEcComponent","strsection","show_loading","getHTMLContent","isNewsletter","paramsstrsection","__decorate$L","CartEcComponent","modalService","isLoggedIn","actualizarCantidad","cantidad","redirectCheckout","redirectRegister","updateLoggedIn","scroll","openModal","modalRef","redirectDetailProduct","BsModalService","__decorate$M","CheckoutEcComponent","canCheckout","initializeCheckout","setStepper","subReady","endCheckout","goBack","stepper","previous","querySelector","Stepper","linear","animation","scrollTo","top","behavior","error_value","getIcon","data_item","subCan","contain_items","__decorate$N","DataFormEcComponent","addressingService","countriesSubject","provincesSubject","countriesFacturacionSubject","provincesFacturacionSubject","countries$","provinces$","countriesFacturacion$","provincesFacturacion$","form_ready","allready_data","addressBook","addressBookSelected","validado","viewDataFacturacion","selectAddres","showFormFacturacion","onFormChange","onFormValid","onInputChange","onCountrySelected","controls","onCountrySelectedFacturacion","checkoutFormFacturacion","onProvincesSelected","onProvincesSelectedFacturacion","verifyValidate","onlySelf","emitResult","showError","error_message","__awaiter$8","__assign$i","getRawValue","undefined","setSelectAddress","addressSelect","selectAddress","addressSelected","getMode","setMode","mode","getCountry","getProvince","getDocumentType","dt","getLabelNotesParam","getParamByChannelAndLanguage","nameParam","statusChanges","localEmail","backdrop","__decorate$O","PaymentService","paymentMethodsSubject","methods$","getCheckoutMobbexApi","getCheckoutBancardApi","getPaymentMethods","__awaiter$9","putPayment","getPreference","shipment_data","preference","getCheckoutMobbex","getCheckoutBancard","getRandomArbitrary","round","random","__decorate$P","PaymentEcComponent","toastr","paymentService","methodDataSubject","loading_internal","loading_internal_mp","method_data$","allData","__assign$j","setError","__awaiter$a","setLoading","estado","r","submitForm","getPK","public_key","isRedirectRedsys","isRedirectCecaBank","isMP","isMPTarjetaDeCredito","isMethodOffline","isPeyPalExpress","isMobbex","isBancard","isDecidir","total_amount","setActive","parent","parentElement","parent_1","__values","parent_1_1","done","button","classList","contains","remove","Renderer2","ViewChild","__decorate$Q","ShipmentEcComponent","shipmentService","points","costos","method_name","contract_data","__assign$k","sucursal_id","cost","co","contra","toTraducible","deleteUPS","methodSelect","validName","showResponse","cos","__decorate$R","SuccessEcComponent","activedRoute","orderDetails","from_mp","external_reference","ActivatedRoute","__decorate$S","CollectionEcComponent","paramsSrv","activeRoute","productsWithUniqueVariant","optionsFilters","getSpecificFilters","types","result_filter","areProducts","setFinished","changeFilter","addAllProductosToCart","prod","productWithUniqueVariant","productToCartItem","getObjectWithVariant","getProductsAndSubscribe","queryParams","__read$5","cambio_1","search","latest","suscripcion","__spread$4","filters_top","onScroll","__decorate$T","CouponEcComponent","coupon_value","aplied","validCoupon","invalidCoupon","applyCoupon","__decorate$U","FaqsContentEcComponent","empty_faqs","changeFAQ","new_index","actual_index","__decorate$V","FiltersEcComponent","expand","close","accordion_id","Document","decorators","__decorate$W","FiltersTopEcComponent","full","EventEmitter","mid","filterChild","emit","getDescripcion","getStyles","setSeleccion","valores","f","opChild","c","createValue","filterItem","Output","__decorate$X","FooterEcComponent","menuItemsCategories","menuItemsSections","menuItemsAttributes","updateCategories","ecUpdateMenuItemCategories","updateAttributes","ecUpdateMenuItemAttributes","updateMenuItem","ecUpdateMenuItemSection","addChildren","menuItems","stackPlace","__assign$l","__decorate$Y","HeaderEcComponent","menuSections","envetUrlTransparent","toggled","__spread$5","updateMenuItemLastCreated","nagivate","setSearchValue","getCollectionSearch","searchValue","toogleToolbar","menu_button","nativeElement","removeClass","addClass","changeLanguage","lang","changeUrlTransparent","urlTransparent","subscribeAttributes","arrayAttributes","subscribeCategories","arrayCategories","arrayMenu","changeUrlNavigation","NavigationStart","url_1","evUrl","transparent","cat","atr","mediaQuery","matchMedia","mediaMenu","matches","__decorate$Z","HomeEcComponent","noNewsletter","__decorate$_","LoginEcComponent","buyButton","redirectHome","$","collapse","login","$event","loginForm","__decorate$$","ProductDetailService","productSubject","optionsSubject","picture","product$","options$","loadProduct","getProduct","variant_code","getOptions","updateVariants","generateAsociatedDataFromVariants","setProduct","isProductValid","setOption","option_code","option_value","changePicture","__awaiter$b","product_selected","_","makeAffordableProduct","product_received","toOption","preoption","variant_option","updateOptions","asociated","properties","beautifyProperties","cratePrice","crateSalePrice","crateDiscount","maximumAmount","minimumAmount","_g","_h","_j","finalConsumer","finalConsumerPrice","_k","final_consumer_price","originalFinalConsumerPrice","_l","original_final_consumer_price","taxIncluded","_m","taxCategory","_o","beautifyData","prop","all_discount_1","min_price","max_price","all_prices","min","max","inRange","actualQuantity","asociatedData","getProductWithUniqueVariant","__assign$m","getVariantsSelected","optionsException","variantsSelected","v","getVariantsAvailable","variantsAvailable","aux","va","containsAll","existVariantAndHasStock","__decorate$10","ProductDetailEcComponent","productService","focusImage","owlOptions","saveRef","carousel","plus","less","showContact","hideContact","thereIsMoreInfo","special_mark","changeImgFocus","img","snapshot","queryParamMap","__assign$n","contact","scrollIntoView","__decorate$11","ProductEcComponent","canBuy","buyOrRedirect","idredirect","getBrandName","__decorate$12","RelatedProductsEcComponent","relatedProducts","customOptions","loop","dots","navSpeed","margin","navText","nav","responsive","0","600","900","load","changes","left","currentValue","__decorate$13","SectionContainerEcComponent","activatedRoute","content_html","loadSection","sanitizeHtml","getSection","__decorate$14","StoresEcComponent","filterStores","storesAll","exclusiveStores","imageMap","getProvices","provincesOpt","s","province","getStoresByProvinces","storesByProvinces","getPickupStores","cond","pickupStore","getNonExclusiveStores","exclusive","selectChange","select","urlmap","bypassSecurityTrustResourceUrl","updateMap","__decorate$15","VariantsEcComponent","attr","view","__decorate$16","SellerDashboardContainerEcComponent","UIComponents","activeCustomer","sortValue","searchInput","filteredCustomers","fuseOptions","isCaseSensitive","shouldSort","tokenize","threshold","distance","maxPatternLength","minMatchCharLength","fuse","Fuse","updateCustomers","setCollection","sortCustomers","typeValue","sortType","comparator","sortFunction","sortNumber","sortText","aCustomer","otherCustomer","changeCustomer","hasHeader","hasUIComponent","navigateExternal","open","UIComponent","__decorate$17","LoadingFullEcComponent","hole_height","__decorate$18","LoadingInlineEcComponent","__decorate$19","MPCreditEcComponent","installments","issuers","doSubmit","payment_method","require_issuer","allready_payed","doc_type","finishApi","expiryChange","fechaSplit","month","year","expiryOnKey","charCode","fecha","cardNumberChange","restartInstallments","guessPaymentMethod","post_data","issuer_id","installment","merchant_account_id","payment_method_option_id","payment_method_id","processing_mode","doc_number","processResponse","processError","cardnumber","setPaymentMethod","bind","bin","substring","getPaymentMethod","data_to_send","marketplace","js_version","bins","referer","results","payment_data","payment_type_id","issuer","payer_costs","payerCost","__assign$o","calculateTotal","installment_data","paymentMethod","getIssuers","getInstallments","additional_info_needed","paymentMethodId","setIssuers","Mercadopago","selectIssuer","selectInstallment","installment_cost","agreements","merchant_accounts","transactionAmount","issuerId","payment","setInstallments","recommended_message","getCardToken","$form","getElementById","createToken","setCardTokenAndPay","card","parseErrorMessage","isInvalid","cardholder","installment_rate","status_detail","status_code","getDescripcionCuota","itemCuota","setPublishableKey","__decorate$1a","PriceEcComponent","priceSize","__decorate$1b","RedsysCatchEcComponent","setStateInLocal","mensaje","sessionStorage","setStateInSesion","hide","__read$7","queryRouter","__decorate$1c","RedSysProEcComponent","intentoRequest","isDobleAuth","urls","closeModal","challengeApi","merchantOrder","clearStorageState","clickClose","callState","animated","__decorate$1d","RedSysRedirectEcComponent","dataRedirect","__decorate$1e","CecaRedirectEcComponent","__decorate$1f","OrdersEcComponent","ordersService","sortedByNewest","anOrder","otherOrder","goToOrder","toDate","date","optionsBox","autoplay","smartSpeed","dotsData","1000","or","__decorate$1g","OrderEcComponent","numberOrder","callError","volver","__awaiter$c","__decorate$1h","AuthEcComponent","nombre","apellido","register_loading","setProp","register","registerForm","plainPassword","newsletter","resul","atob","__decorate$1i","RegisterFormEcComponent","isLogged","darkMode","success","campospersonajuridica","registroUsuario","plainPassword2","__decorate$1j","LoginFormEcComponent","__decorate$1k","ForgotPasswordEcComponent","validEmail","processOk","__decorate$1l","ConfirmAccountEcComponent","onSuccess","__decorate$1m","PasswordResetEcComponent","sendNewPassword","invalidForm","formGroup","passwords","sendToLogin","__decorate$1n","RegisterWholesalerFormEcComponent","documentTypesSubject","documentTypes$","requestTerms","onGenderSelected","onDocumentTypeSelected","companyName","taxIdentification","comments","contactFirstName","contactLastName","contactCompanyPosition","contactEmail","contactDocumentType","contactDocumentNumber","subscribedToNewsletter","__decorate$1o","ShareBlockEcComponent","mediaimg","toShareFacebook","toShareTwitter","toSharePinterest","toShareWhatsapp","wsp","toShareEmail","mail","createMetadata","href","addTags","property","getTitle","Meta","Title","__decorate$1p","DetailCheckoutBlockEcComponent","__decorate$1q","CheckoutErrorComponent","checkoutErrorService","urlRedireccion","initializeTemplate","subs","bsModalRef","subsModal","onHide","onClose","__decorate$1r","MpRedirectEcComponent","iniciar","ventana","closed","paymentServiceInst","init_point","renderMP","origin","__decorate$1s","RedSysRedirectOutEcComponent","__decorate$1t","PaypalExpressEcComponent","getUrlNotification","producto","precio","tried","renderPayPal","paypal","Buttons","createOrder","actions","create","purchase_units","currency_code","onApprove","__awaiter$d","capture","render","paypalElement","setVariables","subsCart","scriptSdk","public_client_id","static","__decorate$1u","MobbexEcComponent","dataMobbex","__decorate$1v","BancardEcComponent","dataBancard","iframe_link","process_id","__decorate$1w","BancardRedirectEcComponent","__decorate$1x","SelectChannelEcComponent","setSelect","chanelSelect","chanel","__assign$p","__decorate$1y","CartLoadEcComponent","__read$8","__decorate$1z","MagnizoomComponent","zoomMode","minZoomFactor","maxZoomFactor","mousePosition","lensSize","width","height","zoomFactor","imageSrc","loadImage","image","initContext","canvas","mainCanvasRef","context","getContext","Image","onload","clearRect","canvasWidth","canvasHeight","lineWidth","drawImage","renderLensMode","renderCoverMode","zoomRect","getZoomRect","fillRect","x","y","w","h","clippingRect","getClippingRect","strokeRect","covertRect","getCoverRect","clampRect","calculateMousePosition","clientX","clientY","boundingRect","getBoundingClientRect","viewToModelX","viewToModelY","onMouseLeave","onMouseEnterOrMove","onMouseScroll","newZoomFactor","deltaY","stopPropagation","__decorate$1A","MultipleItemsToCartEcComponent","totalCostItems","optionsProductForVariant","setQuantity","totalCost","allWithoutTracking","getObjectParamsWithVariant","objectWithVariant","__decorate$1B","CaptchaService$1","captchaSubject","siteKey","testing","productionEnvironment","recaptchaSiteKeysUrl","recaptchaSitesUrl","recaptchaSitesUrlProd","captchaApi","isProd","urlBaseFormat","initializer","paramThisChannel","paramGeneral","getRecaptchaSites","RECAPTCHA_SITES","concatMap","getRecaptchaSiteKeys","RECAPTCHA_SITE_KEYS","getSiteKey","getKey","formatUrl","CaptchaService","__decorate$1C","RecaptchaEcComponent","captchaService","updateKey","__decorate$1D","DecidirEcComponent","paramsMensaje","showMessage","subMessage","getCheckoutDecidir","dataDecidir","resizeIframe","style","contentWindow","scrollHeight","scrollWidth","__decorate$1E","components","AddActionRedirectDirective","elementRef","redirectUrl","linstenEvent","redirectFromUrl","evt","classStr","setStyle","cl","setProperty","listen","ElementRef","__decorate$1F","Directive","ProductStockDirective","templateRef","viewContainer","productDirective","validateStock","checkValuesForStock","existMark","clear","ecProductStockElse","createEmbeddedView","TemplateRef","ViewContainerRef","__decorate$1G","ProductOffDirective","customMessageStr","hasDiscount","prices","saleprices","saleBf","generateDiscount","saleLt","createImage","popover","childNodes","node","removeChild","__decorate$1H","ProductMiniStandardDirective","idConteiner","setMarkStandar","containerImg_1","image_view","special_marks","__decorate$1I","AuthWholesalerDirective","authparams","ecAuthWholesalerElse","__decorate$1J","directives","ecCurrencySymbolPipe","currencyPipe","changeSymbolTransform","valor","positionSymbol","checkingWithoutDecimals","clearSymbol","Intl","NumberFormat","CurrencyPipe","__decorate$1K","EcSanitizerHtmlPipe","__decorate$1L","EcSanitizerUrlPipe","__decorate$1M","pipes","NgEasycommerceModule","forRoot","environment","ngModule","NgEasycommerceModule_1","useValue","fromPipeBase.pipes","RECAPTCHA_SETTINGS","HTTP_INTERCEPTORS","forChild","__decorate$1N","NgModule","exports","fromComponentsBase.components","fromDirectiveBase.directives","imports","CommonModule","RouterModule","TranslateModule","HttpClientModule","InfiniteScrollModule","ToastrModule","FormsModule","ReactiveFormsModule","RecaptchaFormsModule","RecaptchaModule","CardModule","ModalModule","declarations","GiftCardService$1","baseUrl","setCoupon","handleResponse","deleteCoupon","avoidCoupon","GiftCardService","__decorate$1O","WishlistService$1","wishlistProducts","WishlistService","observer","hasProduct","__decorate$1P","StandardReuseStrategy","storedRoutes","Map","shouldDetach","set","shouldAttach","retrieve","shouldReuseRoute","future","routeConfig","__decorate$1Q"],"mappings":"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","sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'orderBy'\n})\nexport class OrderByPipe implements PipeTransform {\n\n transform(array, val = 'desc'){\n \n if (!val || val.trim() == \"\"){\n return array;\n } \n\n //ascending\n if (val == 'asc'){\n return Array.from(array).sort((item1: any, item2: any) => { \n return this.orderByComparator(item1['id'], item2['id']);\n });\n } else if(val == 'desc'){ // desc\n return Array.from(array).sort((item1: any, item2: any) => { \n return this.orderByComparator(item2['id'], item1['id']);\n });\n } else if(val == 'a-z') { // a-z\n return Array.from(array).sort((a: any, b: any) => { \n if ( a['name'] < b['name'] ){\n return -1;\n } else if ( a['name'] > b['name'] ){\n return 1;\n } else {\n return 0; \n }\n });\n } else if(val == 'z-a') { // z-a\n return Array.from(array).sort((a: any, b: any) => { \n if ( a['name'] > b['name'] ){\n return -1;\n } else if ( a['name'] < b['name'] ){\n return 1;\n } else {\n return 0; \n }\n });\n } else if(val == 'low') { // low to high\n return Array.from(array).sort((a: any, b: any) => { \n if ( a['price'] < b['price'] ){\n return -1;\n } else if ( a['price'] > b['price'] ){\n return 1;\n } else {\n return 0; \n }\n });\n } else if(val == 'high') { // high to low\n return Array.from(array).sort((a: any, b: any) => { \n if ( a['price'] > b['price'] ){\n return -1;\n } else if ( a['price'] < b['price'] ){\n return 1;\n } else {\n return 0; \n }\n });\n }\n\n }\n\n orderByComparator(a:any, b:any):number{\n\n if((isNaN(parseFloat(a)) || !isFinite(a)) || (isNaN(parseFloat(b)) || !isFinite(b))){\n //Isn't a number so lowercase the string to properly compare\n if(a.toLowerCase() < b.toLowerCase()) return -1;\n if(a.toLowerCase() > b.toLowerCase()) return 1;\n }\n else{\n //Parse strings as numbers to compare properly\n if(parseFloat(a) < parseFloat(b)) return -1;\n if(parseFloat(a) > parseFloat(b)) return 1;\n }\n\n return 0; //equal each other\n }\n\n}\n","import { isPlatformBrowser } from \"@angular/common\";\r\nimport { ClassProvider, FactoryProvider, InjectionToken, PLATFORM_ID, Injectable } from '@angular/core';\r\n\r\n/* Create a new injection token for injecting the window into a component. */\r\nexport const WINDOW = new InjectionToken('WindowToken');\r\n\r\n/* Define abstract class for obtaining reference to the global window object. */\r\nexport abstract class WindowRef {\r\n\r\n get nativeWindow(): Window | Object {\r\n throw new Error('Not implemented.');\r\n }\r\n\r\n}\r\n\r\n/* Define class that implements the abstract class and returns the native window object. */\r\n@Injectable()\r\nexport class BrowserWindowRef extends WindowRef {\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n get nativeWindow(): Window | Object {\r\n return window;\r\n }\r\n\r\n}\r\n\r\n/* Create an factory function that returns the native window object. */\r\nexport function windowFactory(browserWindowRef: BrowserWindowRef, platformId: Object): Window | Object {\r\n if (isPlatformBrowser(platformId)) {\r\n return browserWindowRef.nativeWindow;\r\n }\r\n return new Object();\r\n}\r\n\r\n/* Create a injectable provider for the WindowRef token that uses the BrowserWindowRef class. */\r\nexport const browserWindowProvider: ClassProvider = {\r\n provide: WindowRef,\r\n useClass: BrowserWindowRef\r\n};\r\n\r\n/* Create an injectable provider that uses the windowFactory function for returning the native window object. */\r\nexport const windowProvider: FactoryProvider = {\r\n provide: WINDOW,\r\n useFactory: windowFactory,\r\n deps: [ WindowRef, PLATFORM_ID ]\r\n};\r\n\r\n/* Create an array of providers. */\r\nexport const WINDOW_PROVIDERS = [\r\n browserWindowProvider,\r\n windowProvider\r\n];","export interface FilterOption {\n name: string;\n value: string;\n type: FilterOptionTypes;\n selectedOption: any;\n options: Array<FilterOptionValue>;\n}\n\nexport interface FilterOptionValue {\n name: string;\n value: any;\n selected: boolean;\n}\n\nexport enum FilterOptionTypes {\n oneSelect = 'one-select',\n multiSelect = 'multi-select'\n}","\nimport { Injectable, Inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\nimport { ConnectionService } from './api/connection.service';\nimport { CurrencyConfig } from './interfaces/currencyConfig';\ntype currencyType = 'EUR' | 'ARG' | 'USD' | 'PYG' | 'PEN' | 'SEK' | 'CUSTOM';\ntype positionType = 'L' | 'R';\ntype channelTypes = 'b2b' | 'b2b2c' | 'b2c';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Constants {\n\n constructor(public translate: TranslateService, private router: Router, @Inject('env') private env) { }\n\n private readonly LOCALE = 'LOCALE';\n private readonly CHANNEL = 'CHANNEL';\n\n private channelConfigSubject = new ReplaySubject<any>();\n public channelConfig$ = this.channelConfigSubject.asObservable();\n\n private channelConfigAPI = (channel) => '/shop-api/' + channel + 'channel';\n\n private browserWindow: object = window || {};\n private browserWindowEnv: object = this.browserWindow['__env'] || {};\n\n // private urlBase: string = 'http://testing.backend.easycommercetech.com/';\n private urlBase: string = this.browserWindowEnv['apiUrl'] ? this.browserWindowEnv['apiUrl'] : (this.env.apiUrl || 'http://backend.easycommerce.devp/');\n private urlAssets: string = this.browserWindowEnv['urlAssets'] ? this.browserWindowEnv['urlAssets'] : (this.env.urlAssets || this.urlBase);\n private urlFrontend: string = this.browserWindowEnv['urlFrontend'] ? this.browserWindowEnv['urlFrontend'] : (this.env.urlFrontend || 'https://elden.easycommercetech.com/');\n private locale: string = localStorage.getItem(this.LOCALE) ? localStorage.getItem(this.LOCALE) : this.browserWindowEnv['locale'] ? this.browserWindowEnv['locale'] : (this.env.locale || 'es_AR');\n private channel: string = localStorage.getItem(this.CHANNEL) ? localStorage.getItem(this.CHANNEL) : this.browserWindowEnv['channel'] ? this.browserWindowEnv['channel'] : (this.env.channel || 'minorista')\n private blocksCacheTime: string = this.browserWindowEnv['blocksCacheTime'] ? this.browserWindowEnv['blocksCacheTime'] : (this.env.blocksCacheTime || null);\n\n private modalConfig = { title: 'Example', class: 'modal-xl modal-dialog-centered', keyboard: false };\n setModalConfig = (config: any) => this.modalConfig = config;\n getModalConfig = () => this.modalConfig;\n\n private version: string = 'v1';\n\n private routes = [/^home$/g, /^(\\/?)collection(\\/?)([\\w\\.\\/\\?]*)$/g, /^contact$/g];\n\n /* Get rid of this ASAP! */\n private masterChannel = null\n\n public getMasterChannel = () => {\n if (!this.masterChannel) this.masterChannel = localStorage.getItem('MASTER_CHANNEL')\n return this.masterChannel\n }\n\n public setMasterChannel = channel => {\n this.masterChannel = channel\n localStorage.setItem('MASTER_CHANNEL', channel)\n }\n\n private isProduction = () => this.browserWindowEnv['production'] ? this.browserWindowEnv['production'] : (this.env.production || false);\n\n setUrlBase = (url) => this.urlBase = url;\n setUrlAssets = (url) => this.urlAssets = url;\n\n /**\n * @param next Function to execute\n * @param params That function needs\n *\n * Execute the function passed as params, if the frontend is in production mode\n */\n onlyIfProduction = (next, params) => this.isProduction() && next(params);\n\n mediaUrl = () => this.urlAssets + (this.urlAssets == this.urlBase ? 'media/' : '') + \"image/\";\n mediaBannerUrl = () => this.urlAssets + (this.urlAssets == this.urlBase ? 'media/' : '') + \"banner-image/\";\n mediaStoreUrl = () => this.urlAssets + (this.urlAssets == this.urlBase ? 'media/' : '') + \"store-image/\";\n\n getProductsListRoute = () => 'collection/';\n\n getSectionsRoute = () => 'section/';\n\n getUrlBase = () => this.urlBase;\n getUrlFrontend = () => this.urlFrontend;\n\n getBlocksCacheTime = (): number => this.blocksCacheTime && parseInt(this.blocksCacheTime);\n\n // getLocale = () => this.locale;\n // setLocale = (locale) => this.locale = locale;\n\n getLocale = () => {\n if (localStorage.getItem(this.LOCALE)) {\n this.locale = localStorage.getItem(this.LOCALE)\n }\n return this.locale\n }\n\n getLocaleTranslate = () => {\n return this.getLocale().split('_')[0]\n }\n\n public setLocale = locale => {\n localStorage.setItem(this.LOCALE, locale)\n this.translate.use(locale.split('_')[0])\n this.locale = locale\n }\n\n getChannel = () => {\n if (localStorage.getItem(this.CHANNEL)) {\n this.channel = localStorage.getItem(this.CHANNEL)\n }\n return this.channel\n }\n\n public setChannel = channel => {\n localStorage.setItem(this.CHANNEL, channel)\n this.channel = channel\n }\n\n getVersion = () => this.version;\n\n loginExtraData = () => {\n return {\n client_id: 'demo_client',\n client_secret: 'secret_demo_client',\n grant_type: 'password'\n }\n }\n\n isCollection = (path) => (/^(\\/?)collection(\\/?)([\\w\\.\\/\\?]*)$/g).test(path);\n\n /**\n * Utilities\n */\n\n mobile = () => window.innerWidth < 750;\n\n strictTypeChannel = () => this.env.strictTypeChannel || 'b2b2c';\n\n toDecimal = (total) => (total - Math.floor(total) == 0) ? total / 100 : total;\n\n /**\n * Elementos para manejo de lista de rutas reutilizables\n */\n\n addRouteToReuse = (route: RegExp) => route && this.routes.push(route);\n\n removeRouteToReuse = (route: RegExp) => {\n const index = this.routes.indexOf(route);\n if (index > -1) {\n this.routes.splice(index, 1);\n }\n }\n\n getRoutesToReuse = (): RegExp[] => this.routes;\n\n\n\n /**\n * @public ejemplo de uso <img *ngFor=\"let item of consts.getRatingStar(product.rating,'assets/images/star.png','assets/images/notStar.png')\" [src]=\"item\">\n * @description funcion que dado un valor entre 1 .. 5, y star: notStar: \n * (deben ser el path del archivo local a la implementacion).\n * retorna un arreglo con con la valoracion correspondiente. \n */\n getRatingStar = (rating: any, star: String, notStar: String) => {\n try {\n let urlStar = [];\n let cantStar = Number(rating) || 0;\n for (let index = 0; index < 5; index++) {\n urlStar.push(\n cantStar > 0\n ? star\n : notStar\n );\n cantStar--;\n }\n return urlStar;\n } catch (error) {\n console.error(\"getRatingStar produjo un error -> \", error);\n }\n\n };\n\n /**\n * @public ejemplo de uso (keypress)=\"inputValidationByExpressions($event,'[0-9]{1,9}')\" en el DOM.\n * @description funcion que dado un manejandor de evento, y una expresion regular esta es \n * evaluada sobre los valores que el manejador de eventos nos envia. \n * En el caso en el que se envie el parametro 'condition' este puede ser para \n * anular el evento como condicion adicional a la evaluacion de la entrada.\n */\n inputValidationByExpressions = (e, patron, condition = null ) => {\n try {\n let tecla = (document) ? e.keyCode : e.which;\n if (tecla == 8) return true;\n let patronReg = new RegExp(patron)\n let tecla_final = String.fromCharCode(tecla);\n if (condition != null) {\n return patronReg.test(tecla_final) && condition;\n }\n return patronReg.test(tecla_final)\n } catch (error) {\n console.error(\"inputValidationByExpressions produjo un error -> \", error);\n }\n }\n\n\n /**\n * \n * @param needles (agujas) object con claves valor a filtrar\n * @param haystack (pajar) objecto en el que buscar\n * \n * @description funcion que busca en el haystack (pajar) todos los objetos que contentan \n * todas las claves de los needles(agujas) que contengan el mismo valor\n */\n containsAll(needles: object, haystack: object): boolean {\n let result: boolean = true;\n\n if (!!needles && !!haystack) {\n Object.entries(needles).forEach(value => {\n if (!(haystack.hasOwnProperty(value[0]) && haystack[value[0]] == value[1])) result = false\n })\n }\n return result;\n }\n\n /**\n * Propiedad que se utiliza para tomar como configuración para el tipo de moneda que se utiliza en el sitio. \n * Estos valores son utilizados para el pipe currencyPrice\n */\n public currency: CurrencyConfig = {\n code: 'ARG',\n symbol: '$',\n position: 'L',\n withoutDecimals: false\n }\n\n /**\n * \n * @param currencyTypeFind Definir el code del tipo de moneda que se quiera utilizar. \n * Si el tipo es CUSTOM se toman los valores del segundo parametro donde se puede definir la simbología y posesión que se quiera.\n * @param customType Formato del parámetro ejemplo { code: 'ARG', symbol: '$', position: 'L' , withoutDecimals: false } ,\n * todas las key son opcionales y por defecto se toman los valores del ejemplo. \n * @returns se retorna la configuración que se seteo a la propiedad currency del servicio.\n */\n public setCurrency = (currencyTypeFind: currencyType, customType?: CurrencyConfig) => {\n let currencyTypeCofig: CurrencyConfig[] = [\n {\n code: 'EUR',\n symbol: '€',\n position: 'R',\n withoutDecimals: false\n\n },\n {\n code: 'ARG',\n symbol: '$',\n position: 'L',\n withoutDecimals: false\n },\n {\n code: 'USD',\n symbol: '$',\n position: 'L',\n withoutDecimals: false\n },\n {\n code: 'PYG',\n symbol: 'Gs.',\n position: 'L',\n withoutDecimals: false\n },\n {\n code: 'PEN',\n symbol: 'S/',\n position: 'L',\n withoutDecimals: false\n },\n {\n code: 'SEK',\n symbol: 'SEK',\n position: 'R',\n withoutDecimals: false\n }\n ]\n this.currency = currencyTypeCofig.find(ct => ct.code == currencyTypeFind.toUpperCase()) || this.currency\n customType && (this.currency = { ...this.currency, ...customType })\n return this.currency;\n };\n\n\n /**\n * devuelve true si existe el elemento \"search\" en el array de parametros \"params\"\n * \n * @param params Array de parametros entre los que buscar\n * @param searched Elemento que buscar\n * @param prefix prefijo del string a buscar (ejemplo: \"link_\")\n * @param suffix sufijo del string a buscar (ejemplo: \"link_\")\n * @param casesensitive determina si se evalua con sensibilidad entre mayuscula y minuscula\n * @returns retorna true o false si se encontro o no el parametro en el array\n */\n public hasParams(\n params,\n searched,\n prefix = '',\n suffix = '',\n casesensitive = false): boolean {\n\n\n return casesensitive ? params.find(param => (param.code).toLowerCase() == (prefix + searched + suffix).toLowerCase() || (param.code).toLowerCase() == (searched).toLowerCase())\n : params.find(param => param.code == (prefix + searched + suffix) || param.code == searched)\n\n };\n\n public modifyChannelConfig = channelConfig => {\n if (channelConfig.channel || channelConfig.code)\n this.setChannel(channelConfig.channel || channelConfig.code)\n\n if (channelConfig.locale || channelConfig.locales.code)\n this.setLocale(channelConfig.locale || channelConfig.locales.code)\n\n if (channelConfig.currency || channelConfig.baseCurrency)\n this.setCurrency(channelConfig.currency || channelConfig.baseCurrency)\n\n return channelConfig;\n }\n\n}\n\n","import { Injectable, OnInit } from '@angular/core';\nimport { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { Constants } from '../core.consts';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FilterOption, FilterOptionTypes, FilterOptionValue } from '../interfaces/choose-options/filter-option';\nimport { take } from 'rxjs/operators';\nimport 'rxjs/add/operator/catch';\n\n@Injectable()\nexport class ConnectionService {\n\n private url;\n\n constructor(private http: HttpClient, private translate: TranslateService,\n private consts: Constants) {\n this.url = this.consts.getUrlBase();\n }\n\n /** POST */\n post(api: string, data?): Observable<any> {\n return this.http.post<any>(this.url + api, data || {}).pipe(take(1));\n }\n\n postOutsider(api: string, data): Observable<any> {\n return this.http.post<any>(api, data).pipe(take(1));\n }\n\n /** GET */\n get(api: string, data?): Observable<any> {\n return this.http.get<any>(this.formUrl(api), { params: { ...data } }).catch(err => of(null)).pipe(take(1));\n }\n\n getOutsider(api: string): Observable<any> {\n return this.http.get<any>(api).pipe(take(1));\n }\n\n getErrorNotHandler(api: string): Observable<any> {\n return this.http.get<any>(this.url + api).pipe(take(1));\n }\n\n getOutsiderWithParams(api: string, data: any): Observable<any> {\n return this.http.get<any>(api, { params: { ...data }});\n }\n\n getHTML(api: string): Observable<any> {\n let httpHeaders = new HttpHeaders({ Accept: 'text/plain, text/html' });\n return this.http.get(this.url + api, { responseType: 'text', headers: httpHeaders }).pipe(take(1));\n }\n\n getWithLimit(api: string, limit: string): Observable<any> {\n let params = new HttpParams();\n params = params.append('limit', limit);\n return this.http.get<any>(this.url + api, { params }).pipe(take(1));\n }\n\n getPaginated(api: string, limit: string, page: string): Observable<any> {\n let params = new HttpParams();\n params = params.append('limit', limit);\n params = params.append('page', page);\n return this.http.get<any>(this.url + api, { params }).pipe(take(1));\n }\n\n /** PUT */\n put(api: string, data): Observable<any> {\n return this.http.put<any>(this.url + api, data).pipe(take(1));\n }\n\n /** DELETE */\n delete(api: string): Observable<any> {\n return this.http.delete<any>(this.url + api).pipe(take(1));\n }\n\n formUrl = (api) => {\n return window.location.protocol == 'https:' && !this.url.includes('https') ? (this.url.replace('http', 'https')) + api : this.url + api;\n }\n}","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../api/connection.service';\nimport { Constants } from '../core.consts';\nimport { BehaviorSubject } from 'rxjs';\nimport { Product } from '../interfaces/product';\n\n@Injectable()\nexport class PaginationService {\n\n private api: string;\n private limit;\n private params;\n private nextSubject : BehaviorSubject<Product[]> = new BehaviorSubject([]);\n private finishedSubject : BehaviorSubject<boolean> = new BehaviorSubject(false);\n private finished;\n public total= 0;\n \n public waiting = false;\n \n public next = this.nextSubject.asObservable();\n public finished$ = this.finishedSubject.asObservable();\n\n constructor(private connection: ConnectionService, private constants: Constants) { }\n\n initialize(api, limit?, initialValues?) {\n this.api = api;\n this.limit = limit || this.limit || 10;\n this.finished = false;\n this.nextSubject.next([]);\n }\n\n getNext(next?) : boolean{\n this.waiting = true;\n this.api = this.api.replace('%20', ' '); //-\n let nextProducts = !this.api.includes('page=') \n ? this.connection.get(this.api, { limit: this.limit, page: 1 }) \n : this.connection.get(this.api);\n !this.finished && nextProducts.subscribe(\n response => {\n response.links ? this.updatePageData(response) : this.finalize(response)\n next && next(response);\n }\n )\n return true;\n }\n\n private updatePageData = (response) => {\n this.api = this.cleanRoute(response.links.next);\n this.finished = response.page == response.pages;\n this.total = response.total;\n this.finishedSubject.next((response.page == response.pages))\n this.nextSubject.next(response.items);\n this.waiting = false;\n }\n\n private finalize = (response) => {\n this.finished = true;\n this.finishedSubject.next(true);\n this.nextSubject.next(response.items);\n this.waiting = false;\n }\n\n cleanRoute = (route: string) => route.slice(1);\n\n getPage(totalItems: number, currentPage: number = 1, pageSize: number = 8) { }\n\n isFinished = () => this.finished;\n}\n","import { IFilter, FilterElement, FilterType } from \"../../interfaces/filter\";\n\nexport class Filter implements IFilter {\n\n generated_url = '';\n data: FilterElement[] = [];\n multi = false;\n type = (): FilterType => null;\n getContent = (): FilterElement[] => null;\n toUrlParams = (): string => null;\n setContent = (options): void => null;\n\n setSelected = (element, value?) => {\n !this.multi && this.cleanFilter(this.data, element);\n this.setSelectedValue(element, value);\n }\n\n cleanFilter = (data, element_to_change) => {\n element_to_change && data.forEach(element => {\n element_to_change != element ? element.selected = false : null;\n (element.children && element.children.length > 0) && this.cleanFilter(element.children, element_to_change);\n })\n }\n\n reset = (children?) => {\n let data = children || this.data;\n data.forEach(element => {\n element.selected = false;\n (element.children && element.children.length > 0) && this.reset(element.children);\n })\n }\n\n setSelectedValue = (element, value?, sublist?, multi?) => {\n let elements = sublist || this.data;\n let index = elements.findIndex(subelement => {\n return (element.code || element) == subelement.code;\n });\n if (index >= 0) {\n elements[index].selected = elements[index].selected ? false : true;\n !multi && elements.forEach((child, i) => {\n if (i != index) child.selected = false;\n });\n return {\n elements,\n founded: true\n };\n } else {\n elements.some(elem => elem.type == 'sub') && elements.some(\n filter => {\n let founded = false;\n if (filter.type == 'sub') {\n const result = this.setSelectedValue(element, value, filter.children, filter.multi);\n if (result && result.founded) {\n filter.children = result.elements;\n founded = true;\n }\n }\n return founded;\n }\n )\n }\n };\n\n getSelectedList = (): any => this.findSelected(this.data, []);\n\n findSelected = (elements: any[], result) => {\n let element = elements.find(elem => elem.selected);\n if (element) {\n result.push(element.code);\n return result;\n }\n elements.forEach(elem => {\n if (elem.children && elem.children.length) {\n let new_result = this.findSelected(elem.children, result);\n if (new_result) result = new_result;\n }\n })\n return result;\n }\n}\n\n","import { FilterType } from \"../../interfaces/filter\";\nimport { FilterElement } from \"../../interfaces/filter\";\nimport { Observable } from \"rxjs\";\nimport { Filter } from \"./Filter\";\n\nexport class CategoryFilter extends Filter {\n\n data: FilterElement[] = [];\n private raw_data;\n multi = false;\n\n constructor(private categories$: Observable<any>, formatter, initial_value?) {\n super();\n this.categories$.subscribe(\n res => {\n this.raw_data = res;\n this.setContent(formatter(res), res, initial_value);\n }\n )\n }\n\n type = (): FilterType => 'category';\n\n setContent = (categories, original?, initial_value?) => {\n categories.forEach((filter, i) => filter = this.createElement(filter, original[i], initial_value));\n this.data = categories;\n }\n\n createElement = (filter, original, initial_value?) => {\n if (filter.type == 'sub') {\n filter.multi = false;\n filter.shape = 'text';\n filter.value = original.code;\n filter.selected = (initial_value && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initial_value?.toLowerCase()));\n filter.children = filter.children.map((child, i) => this.createElement(child, original.children[i], initial_value));\n } else {\n filter.value = original.code;\n filter.selected = (initial_value && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initial_value?.toLowerCase()));\n }\n return filter;\n }\n\n getContent = (): FilterElement[] => this.data;\n\n toUrlParams = (actual_url = '', sublist?) => {\n let elements = sublist || this.data;\n elements.forEach(element => {\n if (element.type == 'sub' && !element.selected) {\n const result = this.toUrlParams('', element.children);\n !actual_url.includes(result) ? actual_url += result : null;\n } else if (element.selected) {\n if (actual_url == '') actual_url = '&category=' + element.value;\n else actual_url = element.value;\n }\n })\n return actual_url;\n };\n\n removeAccents = (str) => {\n return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n }\n}","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../api/connection.service';\nimport { BehaviorSubject, of, Observable } from 'rxjs';\nimport { Constants } from '../core.consts';\nimport { AuthService } from './auth.service';\nimport { take, map, catchError } from 'rxjs/operators';\nimport { FAQ } from '../interfaces/faqs';\nimport { Filter } from '../classes/filters/Filter';\n\n@Injectable()\nexport class OptionsService {\n\n private categoriesSubject: BehaviorSubject<any> = new BehaviorSubject([]);\n private attributesSubject: BehaviorSubject<any> = new BehaviorSubject([]);\n private sectionsSubject: BehaviorSubject<any> = new BehaviorSubject([]);\n private readySubject: BehaviorSubject<any> = new BehaviorSubject({ options: { categories: false, attributes: false, sections: false }, readyAll: false });\n private data = [];\n\n\n public categories = this.categoriesSubject.asObservable();\n public attributes = this.attributesSubject.asObservable();\n public sections = this.sectionsSubject.asObservable();\n public ready = this.readySubject.asObservable();\n\n constructor(private connection: ConnectionService, private constants: Constants) {\n this.getAllData();\n // this.authService.loggedIn.subscribe(res => res && this.getAllData());\n }\n\n private getAllData = () => {\n this.getCategories();\n this.getAttributes();\n this.getSections();\n }\n\n private async getCategories() {\n await this.connection.get(this.taxonsApi()).pipe(take(1),\n map(response => this.appendPaths(true, response)))\n .toPromise().then(\n response => {\n response.forEach(element => this.data.push(element));\n this.categoriesSubject.next(response)\n }\n ).catch(() => this.categoriesSubject.next([]))\n this.optionLoaded('categories');\n }\n\n private async getAttributes() {\n await this.connection.get(this.attributesApi()).pipe(\n map(response => this.appendPaths(false, (response.items || response))))\n .toPromise().then(\n response => {\n response.forEach(element => this.data.push(element));\n this.attributesSubject.next(this.addAttributesSlug(response));\n }\n ).catch(() => this.attributesSubject.next([]))\n this.optionLoaded('attributes');\n }\n\n private appendPaths(isCategory, response) {\n let result = response.map(subelement => {\n if (!subelement.children || subelement.children.length == 0) {\n subelement.children = [];\n subelement.path = isCategory ? this.constants.getProductsListRoute() + 'categories/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name))\n : this.constants.getProductsListRoute() + 'attributes/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name));\n } else if (subelement.children) {\n subelement.slug = subelement.slug || this.slugify(subelement.name);\n subelement.children = this.appendPaths(isCategory, subelement.children);\n }\n isCategory ? subelement.path = this.constants.getProductsListRoute() + 'categories/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name)) : null;\n return subelement;\n });\n return result;\n }\n\n private async getSections() {\n await this.connection.get(this.sectionsApi()).toPromise().then(\n response => {\n let sections = response.filter(item => item.code != 'home');\n sections = sections.map(section => this.appendSection(section));\n this.sectionsSubject.next(sections);\n }\n ).catch(() => this.categoriesSubject.next([]));\n this.optionLoaded('sections');\n }\n\n private appendSection(section) {\n let data: any = {};\n if (section.pages?.length) {\n data.type = 'sub';\n data.children = section.pages.map(page => {\n return {\n code: page.code,\n name: page.name,\n type: 'link',\n path: this.constants.getSectionsRoute() + page.code,\n // path: this.constants.getSectionsRoute() + page.slug,\n }\n });\n data.title = section.name;\n data.name = section.name;\n data.path = this.constants.getSectionsRoute() + section.code;\n data.code = section.code;\n } else {\n data.code = section.code;\n data.title = section.name;\n data.type = 'link';\n data.children = [];\n data.path = this.constants.getSectionsRoute() + section.code;\n }\n return data;\n }\n\n public getSectionContentByLink = (link) =>\n this.connection.getHTML(this.pageContentByCodeApi(link)).pipe(\n map(html => html.split('</head>')[html.split('</head>').length - 1]),\n catchError(e => of(false))\n );\n\n public getSectionContentByLinkAsPromise = (link) =>\n this.connection.getHTML(this.pageContentByCodeApi(link)).pipe(\n map(html => html.split('</head>')[html.split('</head>').length - 1]),\n ).toPromise().catch(e => null);\n\n public getFAQ = () => {\n return this.connection.get(this.faqsApi()).pipe(map(response => {\n let result: FAQ[] = [];\n response.forEach(response_faq => {\n let faqs: FAQ = {\n code: response_faq.code,\n position: response_faq.position,\n title: response_faq.translations[this.constants.getLocale()].topic,\n questions: response_faq.frequentlyAskedQuestions.map(asked_question => ({\n code: asked_question.code,\n position: asked_question.position,\n question: asked_question.translations[this.constants.getLocale()] ? asked_question.translations[this.constants.getLocale()].question : '',\n answer: asked_question.translations[this.constants.getLocale()] ? asked_question.translations[this.constants.getLocale()].answer : '',\n }))\n };\n result.push(faqs);\n })\n return result;\n }));\n }\n\n private optionLoaded(key) {\n const allReady = (options) => Object.keys(options).every(option_key => state.options[option_key]);\n let state = this.readySubject.value;\n state.options[key] = true;\n this.readySubject.next({ options: state.options, readyAll: allReady(state.options) })\n }\n\n private isSubElement = (array, code) => {\n let element = array.find(element => element.code == code);\n return (element && element.code) || (array.children && this.isSubElement(array.chidren, code));\n }\n\n private findCode = (slug, elements) => {\n let element = elements.find(elem => elem.slug == slug);\n if (element) return element.code;\n elements.some(elem => {\n if (elem.children && elem.children.length) {\n element = this.findCode(slug, elem.children);\n }\n return element || false;\n });\n return element;\n }\n\n getCodeBySlug = (slug) => {\n let code = this.findCode(slug, this.generateMenu(this.categoriesSubject.value));\n if (!code) code = this.findCode(slug, this.generateMenu(this.attributesSubject.value));\n return code || slug;\n }\n\n getHigher = (code) => {\n let higher_code;\n higher_code = this.data.find(element => !(element.code == code) && !this.isSubElement(element.children, code)).code;\n return higher_code || 'default';\n }\n\n /**\n * @private\n * APIS\n */\n\n private cmsBase = () => 'cms/' + this.constants.getLocale();\n private cmsChannel = () => 'cms/' + this.constants.getChannel();\n private shopApi = () => 'shop-api/' + this.constants.getChannel();\n\n private faqsApi = () => 'cms/' + this.constants.getChannel() + '/faq';\n // private sectionsApi = () => this.cmsBase() + '/sections/';\n private sectionsApi = () => this.cmsChannel() + '/sections/' + '?locale=' + this.constants.getLocale();\n private sectionByCodeApi = (code) => this.cmsBase() + '/pages/' + code;\n // private pageContentByCodeApi = (code) => this.cmsBase() + '/' + this.constants.getChannel() + '/page/' + code;\n private pageContentByCodeApi = (code) => this.cmsBase() + '/' + this.constants.getChannel() + '/page/' + code;\n private taxonsApi = () => this.shopApi() + '/taxons/' + '?locale=' + this.constants.getLocale();\n private attributesApi = () => this.shopApi() + '/attributes-list' + '?locale=' + this.constants.getLocale();\n\n /**\n * @public\n * UTILS\n */\n\n addAttributesSlug = (attributes) => attributes.map(\n attribute => { return { ...attribute, children: attribute.children.map(child => { return { ...child, slug: this.slugify(child.name) } }) } }\n );\n\n slugify = (text: string) => this.removeAccents(text.toLowerCase().replace(/ & /g, ' ').replace(/ /g, '-').replace(/\\//g, '-').replace(/ñ/g, 'n'));\n\n generateMenu = (elements) => {\n return elements.map(subelement => {\n let result;\n (subelement.children && subelement.children.length == 0) ? result = {\n ...subelement,\n title: subelement.name,\n path: subelement.path,\n type: 'link',\n }\n : result = {\n ...subelement,\n title: subelement.name,\n type: 'sub',\n path: subelement.path,\n children: (subelement.children ? this.generateMenu(subelement.children) : [])\n };\n return result;\n });\n }\n\n removeAccents = (str) => {\n return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n }\n\n getBreadcrumb = (code) => {\n if (!code) return null;\n let breadcrumb = this.generateBreadcrumb(code, this.generateMenu(this.categoriesSubject.value), []);\n if (!breadcrumb || !breadcrumb.length) breadcrumb = this.generateBreadcrumb(code, this.generateMenu(this.attributesSubject.value), []);\n return (breadcrumb && breadcrumb.length) && breadcrumb.reverse();\n }\n\n getBreadcrumbByFilters = (filters: Filter[]) => {\n let final_result = [];\n filters.forEach(filter => {\n let result = filter.getSelectedList();\n if (!result || !result.length) return;\n\n if (filter.type() == 'category') final_result.unshift(...this.generateBreadcrumb(result[0], filter.data, []).reverse());\n else result.forEach(\n code => {\n let breadcrumb = this.generateBreadcrumb(code, filter.data, [])\n breadcrumb.length && final_result.push(breadcrumb[0]);\n }\n );\n });\n\n return final_result;\n }\n\n private generateBreadcrumb = (code, elements, result) => {\n let element = elements.find(elem => elem.code == code);\n if (element) {\n result.push(element);\n }\n else {\n elements.some(elem => {\n if (elem.children && elem.children.length) {\n const length = result.length;\n let new_result = this.generateBreadcrumb(code, elem.children, result);\n if (new_result.length > length) {\n result = new_result;\n result.push(elem);\n return true;\n }\n }\n return false;\n })\n }\n return result;\n }\n}","import { FilterType } from \"../../interfaces/filter\";\nimport { FilterElement } from \"../../interfaces/filter\";\nimport { OptionsService } from \"../../services/options.service\";\nimport { Observable } from \"rxjs\";\nimport { Filter } from \"./Filter\";\n\nexport class AttributesFilter extends Filter {\n\n data: FilterElement[] = [];\n raw_data;\n multi = false;\n\n constructor(private attributes$: Observable<any>, formatter, initial_value?) {\n super();\n this.attributes$.subscribe(\n res => {\n this.raw_data = res;\n this.setContent(formatter(res), res, initial_value);\n }\n )\n }\n\n setContent = (attributes, original?, initial_value?) => {\n attributes.forEach((filter, i) => filter = this.createElement(filter, original[i], initial_value));\n this.data = attributes;\n }\n\n createElement = (filter, original, initial_value?) => {\n if (filter.type == 'sub') {\n filter.multi = false;\n filter.shape = 'text';\n filter.value = original.code;\n filter.children = filter.children.map((child, i) => this.createElement(child, original.children[i], initial_value));\n } else {\n filter.value = original.code;\n filter.selected = (initial_value && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initial_value?.toLowerCase()));\n }\n return filter;\n }\n\n type = (): FilterType => 'attributes';\n\n getContent = (): FilterElement[] => this.data;\n\n toUrlParams = (actual_url = '&attributeCodes=', sublist?, already?) => {\n let elements = sublist || this.data;\n let aux_url = '';\n elements.forEach(element => {\n if (element.type == 'sub') {\n let result = this.toUrlParams('', element.children, (actual_url != '&attributeCodes=' && actual_url != ''))\n if (!actual_url.includes(result)) actual_url += this.cleanResult(result);\n } else if (element.selected) {\n if (actual_url == '&attributeCodes=' && aux_url == '') {\n aux_url = element.value;\n }\n else {\n if (aux_url == '') aux_url = (already ? '<and>' : '') + element.value;\n else aux_url += ('<and>' + element.value);\n }\n }\n })\n return actual_url + aux_url;\n };\n\n cleanResult = (text) => text.replace('&attributeCodes=', '');\n\n removeAccents = (str) => {\n return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n }\n}","import { FilterType } from \"../../interfaces/filter\";\nimport { FilterElement } from \"../../interfaces/filter\";\nimport { Filter } from \"./Filter\";\n\nexport class DynamicsFilter extends Filter {\n\n generated_url = '';\n data: FilterElement[] = [];\n multi = true;\n\n type = (): FilterType => 'dynamics';\n\n setContent = (options) => {\n options = options.map(option => option = this.createElement(option));\n this.data = options;\n }\n\n createElement = (option) => {\n option = {\n title: option.label, type: 'sub', multi: false, code: option.code, shape: option.type, children: option.values.map(value => {\n return {\n title: value.code,\n description: value.name,\n code: (option.code + ' ' + value.name),\n type: 'child',\n value: value.code,\n selected: false\n }\n })\n }\n return option;\n }\n\n holi = () => {\n\n }\n\n getContent = (): FilterElement[] => this.data;\n\n toUrlParams = (actual_url = '&optionCodes=', sublist?, already?) => {\n let elements = sublist || this.data;\n let aux_url = '';\n elements.forEach(element => {\n if (element.type == 'sub') {\n let result = this.toUrlParams('', element.children, (actual_url != '&optionCodes=' && actual_url != ''))\n if (!actual_url.includes(result)) actual_url += this.cleanResult(result);\n } else if (element.selected) {\n if (actual_url == '&optionCodes=' && aux_url == '') {\n aux_url = element.value;\n }\n else {\n if (aux_url == '') aux_url = (already ? '<and>' : '') + element.value;\n else aux_url += ('<and>' + element.value);\n }\n }\n })\n return actual_url + aux_url;\n };\n\n cleanResult = (text) => text.replace('&optionCodes=', '');\n}","import { FilterType } from \"../../interfaces/filter\";\nimport { FilterElement } from \"../../interfaces/filter\";\nimport { Filter } from \"./Filter\";\n\nexport class SortFilter extends Filter {\n\n data : FilterElement[] = [];\n multi = true;\n\n constructor() {\n super();\n this.setContent();\n }\n\n type = () : FilterType => 'sort';\n\n setContent = () => {\n this.data = [\n {\n title: 'price', type: 'sub', multi: false, code: 'price' ,shape: 'text', children: [\n { title: 'cheapest-first', code: 'price chip', type: 'child', value: 'asc', selected: false },\n { title: 'most-expensive-first', code: 'price expensive', type: 'child', value: 'desc', selected: false }\n ]\n },\n {\n title: 'alphabetical-order', type: 'sub', code: 'order-alph', multi: false, shape: 'text', children: [\n { title: 'ascendancy', type: 'child', code: 'alpha asc', value: 'asc', selected: false },\n { title: 'descendant', type: 'child', code: 'alpha desc', value: 'desc', selected: false }\n ]\n }\n ]\n }\n\n getContent = () : FilterElement[] => this.data;\n \n toUrlParams = (actual_url = '', sublist?, father?) => {\n let elements = sublist || this.data;\n elements.forEach(element => {\n if (element.type == 'sub') {\n const result = this.toUrlParams(actual_url, element.children, element.title);\n !actual_url.includes(result) ? actual_url += result : null;\n } else if(element.selected) {\n actual_url = ('&sorting[' + this.translate(father) + ']=' + element.value);\n }\n })\n return actual_url;\n };\n\n // UTILS\n\n translate = (value) => {\n switch(value) {\n case 'price': return 'price';\n case 'created-date': return 'createdAt';\n case 'alphabetical-order': return 'name';\n }\n }\n}","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, of, Subscriber } from 'rxjs';\r\nimport 'rxjs/add/operator/map';\r\nimport { ConnectionService } from '../../api/connection.service';\r\nimport { Constants } from '../../core.consts';\r\nimport { Product } from '../../interfaces/product';\r\nimport { FilterOptionValue, FilterOption } from '../../interfaces/choose-options/filter-option';\r\nimport { FilterType, FilterElement, DefaultFilter } from '../../interfaces/filter';\r\nimport { PaginationService } from '../pagination.service';\r\nimport { CategoryFilter } from '../../classes/filters/CategoryFilter';\r\nimport { OptionsService } from '../options.service';\r\nimport { AttributesFilter } from '../../classes/filters/AttributesFilter';\r\nimport { DynamicsFilter } from '../../classes/filters/DinamycsFilter';\r\nimport { SortFilter } from '../../classes/filters/SortFilter';\r\nimport { Filter } from '../../classes/filters/Filter';\r\nimport 'rxjs/add/operator/catch';\r\nimport { ParamsProductsWithUniqueVariant } from '../../interfaces/paramsInterfaces/paramsProductsWithUniqueVariant';\r\n\r\n\r\n// Get product from Localstorage\r\nlet products : any = {};\r\ntype order_type = 'asc' | 'desc';\r\n\r\n@Injectable()\r\nexport class ProductsService {\r\n\r\n /** ATTRIBUTES */\r\n private subscription;\r\n private productsSubject: BehaviorSubject<Product[]> = new BehaviorSubject([]);\r\n private filtersSubject: BehaviorSubject<Filter[]> = new BehaviorSubject([]);\r\n\r\n public currency = 'USD';\r\n public catalogMode: boolean = false;\r\n public products$ = this.productsSubject.asObservable();\r\n public filters$ = this.filtersSubject.asObservable();\r\n\r\n\r\n private search_value :String;\r\n\r\n /** APIS */\r\n\r\n latestProductsByCategoryApi = (category) => 'shop-api/' + this.constants.getChannel() + '/taxon-products/by-code/' + category;\r\n latestProductsApi = () => 'shop-api/' + this.constants.getChannel() + '/product-latest/';\r\n specificProductApi = (code, variant) => 'shop-api/' + this.constants.getChannel() + '/products/by-code/' + (variant ? 'variant/' : '') + code + '?locale=' + this.constants.getLocale();\r\n productsBySpecialMarkApi = (specialmark) => 'shop-api/' + this.constants.getVersion() + '/' + this.constants.getChannel() + '/special-marks/' + specialmark + '/products/';\r\n relatedProductsApi = (key) => 'shop-api/' + this.constants.getChannel() + '/products/related/by-code/' + key + '?locale=' + this.constants.getLocale();\r\n productVariantApi = (code) => 'shop-api/' + this.constants.getChannel() + '/products/by-code/variant/' + code;\r\n latestProductsByAttributeApi = (attribute) => 'shop-api/' + this.constants.getChannel() + '/products/by-attribute/' + attribute;\r\n productSearchApi = () => 'shop-api/' + this.constants.getChannel() + '/product-search/';\r\n cmsRelatedProductsApi = (page) => 'cms/' + this.constants.getLocale() + '/' + this.constants.getChannel() + '/page/' + page + '/product-related';\r\n productsFilterApi = (filters = '') => 'shop-api/' + this.constants.getChannel() + '/product-search/' + '?locale=' + this.constants.getLocale() + filters;\r\n\r\n constructor(private connection: ConnectionService, private constants: Constants, private pagination: PaginationService, private options: OptionsService) { }\r\n\r\n /** FUNCTIONS */\r\n\r\n getLatestProducts = (limit: string = '0'): Observable<any> =>\r\n limit == '0' ? this.connection.get(this.latestProductsApi()) :\r\n this.connection.getWithLimit(this.latestProductsApi(), limit);\r\n\r\n getLatestProductsByCategory = (category: string, limit: string = '0'): Observable<any> =>\r\n limit == '0' ? this.connection.get(this.latestProductsByCategoryApi(category)) :\r\n this.connection.getWithLimit(this.latestProductsByCategoryApi(category), limit);\r\n\r\n getPaginated = (limit: string, page: string): Observable<any> =>\r\n this.connection.getPaginated(this.latestProductsApi(), limit, page);\r\n\r\n getSpecificProduct = (code: string, variant: boolean): Observable<any> =>\r\n this.connection.get(this.specificProductApi(code, variant));\r\n\r\n getProductsBySpecialMark = (specialmark, limit: string = '0'): Observable<any> =>\r\n limit == '0' ? this.connection.get(this.productsBySpecialMarkApi(specialmark)) :\r\n this.connection.getWithLimit(this.productsBySpecialMarkApi(specialmark), limit);\r\n\r\n getRelatedProducts = (key: string): Observable<any> =>\r\n this.connection.get(this.relatedProductsApi(key));\r\n\r\n getProductVariant = (code: string) =>\r\n this.connection.get(this.productVariantApi(code));\r\n\r\n getlatestProductsByAttribute = (attribute) =>\r\n this.connection.get(this.latestProductsByAttributeApi(attribute));\r\n\r\n getSearchedProducts = (content) => {\r\n this.productsSubject.next([]);\r\n this.pagination.initialize(this.generateFinalApi(content), products?.limit || 8);\r\n this.subscription = this.pagination.next.subscribe(\r\n res => this.productsSubject.next(res),\r\n err => this.productsSubject.next(null)\r\n )\r\n }\r\n\r\n getCMSRelatedProducts = (page) =>\r\n this.connection.get(this.cmsRelatedProductsApi(page)).catch((err) => of(null));\r\n\r\n getProductsSearched = (search_value, filters?: FilterType[]) => {\r\n this.getProductsForFilter(null, filters, search_value);\r\n }\r\n\r\n /**\r\n * @param products \r\n * @param filters \r\n * @param search_value \r\n * @param defaultFilters \r\n */\r\n getProductsForFilter = (products?: { type?: string, value?: string, limit?: number, latest?: boolean }, filters?: FilterType[], search_value?, defaultFilters?: DefaultFilter[]) => {\r\n this.productsSubject.next([]);\r\n search_value ? this.search_value = search_value : this.search_value = ''; \r\n filters && this.setFilters(products, filters, defaultFilters);\r\n this.pagination.initialize(this.generateFinalApi(search_value), products?.limit || 8);\r\n this.subscription && this.subscription.unsubscribe();\r\n this.subscription = this.pagination.next.subscribe(\r\n res => this.productsSubject.next(res),\r\n err => this.productsSubject.next(null)\r\n )\r\n this.filtersSubject.value.some(filter => filter.type() == 'dynamics')\r\n ? this.pagination.getNext(this.updateDynamicFilters)\r\n : this.pagination.getNext();\r\n }\r\n\r\n setFilters = (products, filters: FilterType[], defaultFilters?: DefaultFilter[]) => {\r\n let final_filters: Filter[] = [];\r\n if (filters?.includes('all')) filters = ['attributes', 'category', 'dynamics', 'sort'];\r\n filters?.forEach(filter => final_filters.push(this.getFilterInstance(filter, products)));\r\n defaultFilters?.forEach(filterDefault => {\r\n let filter = final_filters.find(filter => filter.type() == filterDefault.filter_type);\r\n filter && filterDefault.codes.forEach(value => filter.setSelected(value));\r\n })\r\n this.filtersSubject.next(final_filters);\r\n }\r\n\r\n getFilterInstance = (filter: string, products): Filter => {\r\n let instance: Filter;\r\n switch (filter) {\r\n case 'category': instance = new CategoryFilter(this.options.categories, this.options.generateMenu, (products.type == 'categories' && products.value)); break;\r\n case 'attributes': instance = new AttributesFilter(this.options.attributes, this.options.generateMenu, (products.type == 'attributes' && products.value)); break;\r\n case 'sort': instance = new SortFilter(); break;\r\n case 'dynamics': instance = new DynamicsFilter(); break;\r\n }\r\n return instance;\r\n }\r\n\r\n updateDynamicFilters = (request) => {\r\n if (!request.options) return;\r\n let final_filters: Filter[] = this.filtersSubject.value;\r\n let index = final_filters.findIndex(filter => filter.type() == 'dynamics');\r\n index && final_filters[index].setContent(request.options);\r\n this.filtersSubject.next(final_filters);\r\n }\r\n\r\n getNext = (): boolean => !this.pagination.isFinished() && this.pagination.getNext();\r\n\r\n setFilterSelected = (filterObj: Filter, filterElem: FilterElement) => {\r\n let final_filters: Filter[] = this.filtersSubject.value;\r\n let index = final_filters.findIndex(filter => filter.type() == filterObj.type());\r\n final_filters[index].setSelected(filterElem, filterElem.value);\r\n this.filtersSubject.next(final_filters);\r\n this.updateProductsForFilter();\r\n }\r\n\r\n updateProductsForFilter = () => {\r\n this.pagination.waiting = true;\r\n this.productsSubject.next([]);\r\n this.pagination.initialize(this.search_value ? this.generateFinalApi(this.search_value) : this.generateFinalApi() );\r\n this.pagination.getNext();\r\n // SI SE ACTUALIZARAN LOS FILTROS DINAMICOS EN EL FUTURO\r\n // let filtersObj = this.filtersSubject.value;\r\n // filtersObj.some(filter => filter.type() == 'dynamics') \r\n // ? this.pagination.getNext(this.updateDynamicFilters) \r\n // : this.pagination.getNext();\r\n }\r\n\r\n /**\r\n * \r\n * @param products Array. Lista de productos.\r\n * @param withOption 'type' tipo de opción, code: código de la opción. 'defaultFirstOption': en caso de que no se pueda desdoblar por la opción indicada si el valor es verdadero se intentara desdoblar por la primera opción asociada al producto.\r\n * 'checkIfStock': en caso de que esta valor sea verdadero se realiza un control de que la variantes cuenten con stock para ser un producto desdoblado por la variante, si el valor es falso no se realiza dicho control y el producto se desdoblara con stock en 0.\r\n * @returns arreglo con los productos desdoblados por la opción solicitada. \r\n * (opción por defecto que se intenta hacer el desdoblamiento 'color', o bien si en le parámetro withOption el atributo 'defaultFirstOption' es verdadero se desdobla por la primera opción asociada al producto ) \r\n * \r\n * @description Recibe una lista de productos y retorna los mismos productos tantas veces como variantes tenga. \r\n * cada producto retornado tendrá una única variante.\r\n */\r\n getProductsWithUniqueVariant = (products, withOption: ParamsProductsWithUniqueVariant = { type: 'color' , code: 'color' , defaultFirstOption:false , checkIfStock:true }) => {\r\n\r\n !withOption['code'] && withOption['type'] && (withOption['code'] = withOption['type']) || !withOption['code'] && (withOption['code'] = 'color')\r\n !withOption['type'] && withOption['code'] && (withOption['type'] = withOption['code']) || !withOption['type'] && (withOption['type'] = 'color')\r\n !withOption.hasOwnProperty('defaultFirstOption') && (withOption['defaultFirstOption'] = false)\r\n !withOption.hasOwnProperty('checkIfStock') && (withOption['checkIfStock'] = true)\r\n\r\n let productsUniqueVariant = [];\r\n products.forEach(product => {\r\n let variants = [...product?.variants];\r\n let option = product.options.find(opt => opt.type.toLowerCase() === withOption.type.toLowerCase());\r\n \r\n if (option) {\r\n option.values.forEach(optionValue => {\r\n let modified_product = JSON.parse(JSON.stringify(product));\r\n modified_product.options.find(option => option.type.toLowerCase() == withOption.type.toLowerCase()).values = [{ code: optionValue.code, name: optionValue.name}];\r\n //busco una variante con ese code para asignarle la lista de imagenes\r\n let variantAux = variants.find(\r\n variant => ((withOption.checkIfStock && variant.stock > 0) || withOption.checkIfStock == false ) \r\n && variant.options.length \r\n && variant.options.some(op => (op.hasOwnProperty(withOption.code.toLowerCase()) || op.hasOwnProperty(withOption.code.toUpperCase())) \r\n && (op[withOption.code.toLowerCase()] || op[withOption.code.toUpperCase()]) === optionValue.code)\r\n \r\n );\r\n variantAux && productsUniqueVariant.push(this.productWithVariantValues(modified_product, variantAux, optionValue));\r\n })\r\n }else{\r\n if (withOption.defaultFirstOption && product.options?.length) {\r\n let firstOptions = product.options[0]\r\n product.options[0].values.forEach(optionValue => {\r\n let modified_product = JSON.parse(JSON.stringify(product));\r\n modified_product.options.find(option => option.type == firstOptions.type).values = [{ code: firstOptions.code, name: firstOptions.name }];\r\n let variantAux = variants.find(\r\n variant => {\r\n return ((withOption.checkIfStock && variant.stock > 0) || withOption.checkIfStock == false ) \r\n && variant.options.length \r\n && variant.options.some(op => (op.hasOwnProperty(firstOptions.code.toLowerCase()) || op.hasOwnProperty(firstOptions.code.toUpperCase())) \r\n && (op[firstOptions.code.toLowerCase()] || op[firstOptions.code.toUpperCase()]) === optionValue.code)\r\n }\r\n );\r\n variantAux && productsUniqueVariant.push(this.productWithVariantValues(modified_product, variantAux, optionValue));\r\n })\r\n }else{\r\n productsUniqueVariant.push(product)\r\n }\r\n\r\n }\r\n })\r\n return productsUniqueVariant.length > 0 ? productsUniqueVariant : products;\r\n }\r\n\r\n productWithVariantValues = (product, variant, optionValue) => {\r\n product.picturesdefault = variant.images\r\n product.variant_id = variant.code; //lo dejo aca hasta asegurarnos de que no se estaba usando en otra parte.\r\n product.stock = variant.stock || 0; //lo dejo aca hasta asegurarnos de que no se estaba usando en otra parte.\r\n product.currentOption = {\r\n ...optionValue,\r\n productCode: product.id,\r\n variantCode: variant.code,\r\n stock: variant.stock || 0,\r\n finalPrice: variant.saleprice || variant.price || 0,\r\n }\r\n return product\r\n }\r\n\r\n\r\n cleanAllFilters = () => {\r\n let final_filters: Filter[] = this.filtersSubject.value;\r\n final_filters.forEach(filter => filter.reset());\r\n this.filtersSubject.next(final_filters);\r\n this.updateProductsForFilter();\r\n }\r\n\r\n /** UTILS AND FILTERING */\r\n\r\n isWaiting = () => this.pagination.waiting;\r\n isFinished = () => this.pagination.isFinished();\r\n\r\n generateFinalApi = (search_value?) => {\r\n let extra_params = '';\r\n this.filtersSubject.value.forEach(filter => {\r\n const extra = filter.toUrlParams();\r\n extra.split('=')[1] != '' ? extra_params += extra : null;\r\n })\r\n if (search_value) extra_params += ('&criteria[search][type]=contains&criteria[search][value]=' + search_value);\r\n return this.productsFilterApi(extra_params);\r\n }\r\n\r\n finished = (): Observable<boolean> => this.pagination.finished$;\r\n\r\n getTotal = () => this.pagination.total;\r\n}","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../api/connection.service';\nimport { Constants } from '../core.consts';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { OptionsService } from './options.service';\nimport 'rxjs/add/operator/catch';\n\n@Injectable()\nexport class BannerService {\n\n private bannerSubject = new BehaviorSubject<any>({ banners: [], button_route: '' });\n private type;\n private code;\n\n public banner = this.bannerSubject.asObservable();\n\n bannersByTaxonApi = (taxon) => 'api/' + this.constants.getVersion() + '/banners/by-taxon/' + taxon;\n bannersByAttributeApi = (attribute) => 'api/' + this.constants.getVersion() + '/banners/by-attribute/' + attribute;\n\n constructor(private connection: ConnectionService, private constants: Constants, private optionsService: OptionsService) {\n // Get available methods of instance, and update this.methods\n }\n\n getBanner = (type, code) => {\n this.type = type;\n this.code = code;\n if (type && code) {\n if (type == 'taxon' || type == 'categories') {\n this.loadBannersByTaxon(code);\n } else {\n this.loadBannersByAtrribute(code);\n }\n }\n }\n\n getBannersByTaxon(taxon: string): Observable<any> {\n return this.connection.get(this.bannersByTaxonApi(taxon)).pipe(catchError(\n err => this.connection.get(this.bannersByTaxonApi(this.optionsService.getHigher(taxon)))\n ));\n }\n\n getBannersByAttribute(attribute): Observable<any> {\n return this.connection.get(this.bannersByAttributeApi(attribute)).pipe(catchError(\n err => this.connection.get(this.bannersByTaxonApi(this.optionsService.getHigher(attribute)))\n ));\n }\n\n loadBannersByTaxon(taxon) {\n this.getBannersByTaxon(taxon).catch(err => of([])).subscribe(res => {\n res && this.procesateBanners(res);\n })\n }\n\n loadBannersByAtrribute(attribute) {\n this.getBannersByAttribute(attribute).catch(err => of([])).subscribe(res => {\n res && this.procesateBanners(res);\n })\n }\n\n private procesateBanners(banners) {\n let final_banners = [];\n banners.forEach(banner => final_banners.push(banner.translations.filter(res => res['locale'] == this.constants.getLocale())[0]));\n let button_route = '/collection/' + (this.type == 'taxon' ? 'categories' : 'attributes') + '/' + this.code;\n this.bannerSubject.next({ banners: final_banners, button_route });\n }\n\n getImage = (banner) => (this.mobile() && banner.mobileImageName && banner.mobileImageName != '') ? banner.mobileImageName : banner.imageName;\n getImageFull = (banner) =>\n this.constants.getUrlBase() + ((this.mobile() && banner.mobileImageName && banner.mobileImageName != '') ? banner.mobileImageName : banner.imageName);\n\n mobile = () => window.innerWidth < 750;\n\n\n}\n","import { Deserializable } from '../interfaces/deserializable';\n\nexport class User implements Deserializable {\n\n private readonly USER = 'USER';\n public type = 'loguedin';\n public config = {};\n public client_id = 'demo_client';\n public client_secret = 'secret_demo_client';\n public grant_type = 'password';\n public email = '';\n public username = '';\n public password = '';\n public first_name = '';\n public last_name = '';\n public address = { country: '', city: '', state: '', address: '', postcode: '' };\n public birthday = '';\n public gender = '';\n public phone_number = '';\n public suscribed_to_newsletter: boolean = true;\n public document_type? = '';\n public preferred_card? = '';\n public document_number? = '';\n public channels = []\n public customers = []\n public token = '';\n public typeUser? = null;\n\n initilized = res => {\n this.token = res.token\n this.typeUser = res.hasOwnProperty('type') ? res.type : 'retail_customer'\n this.username = res.username\n this.email = res.username\n this.channels = res.channels || []\n this.customers = res.customers || []\n }\n\n isWholesaler = () => this.typeUser && (this.typeUser == 'wholesaler_customer' || this.typeUser == 'seller') || false\n\n isSeller = () => this.typeUser && this.typeUser == 'seller' || false\n\n isRetailCustomer = () => this.typeUser && this.typeUser == 'retail_customer' || false\n\n deserialize(input: any): this {\n return Object.assign(this, input);\n }\n\n jsonify() {\n return {\n client_id: this.client_id,\n client_secret: this.client_secret,\n grant_type: this.grant_type,\n username: this.username,\n email: this.email,\n password: this.password,\n token: this.token,\n typeUser: this.typeUser,\n channels: this.channels,\n customers: this.customers\n }\n }\n\n removePassword() {\n this.password = '';\n }\n\n needsAuth() {\n return this.type == 'loguedin';\n }\n\n toForm = () => {\n return {\n firstName: this.first_name,\n lastName: this.last_name,\n phoneNumber: this.phone_number,\n email: this.email,\n documentType: this.document_type,\n documentNumer: this.document_number,\n street: this.address.address,\n countryCode: this.address.country,\n city: this.address.city,\n provinceName: this.address.state,\n postcode: this.address.postcode\n }\n }\n\n persistInStorage = (key = this.USER) => {\n try {\n const json = this.jsonify()\n const str = JSON.stringify(json)\n localStorage.setItem(key, JSON.stringify(this.jsonify()))\n return true\n } catch (error) {\n console.error(error);\n return false\n }\n }\n\n loadFromStorage = (key = this.USER) => {\n if (localStorage.getItem(key)) {\n this.deserialize(JSON.parse(localStorage.getItem(key)));\n return true\n }\n return false\n }\n\n removeFromStorage = (key = this.USER) => {\n try {\n localStorage.removeItem(key);\n console.log('usuario removido');\n return true\n } catch (error) {\n console.error(error);\n return false\n }\n }\n\n public setChannels = (...channels) => this.channels = channels\n\n}","import { StepI, StepState, StepTypeI } from \"../../interfaces/step\";\n\nexport class Step implements StepI {\n\n public name;\n public priority;\n public type: StepTypeI;\n public data;\n public state: StepState = 'pending';\n\n constructor(name, priority) {\n this.name = name;\n this.priority = priority;\n }\n\n doing = () => {\n this.data = null;\n this.state = 'doing';\n };\n\n restart = () => {\n this.data = null;\n this.state = 'pending';\n }\n\n ready = (data) => {\n this.data = data;\n this.state = 'ready';\n }\n\n isPending = () => this.state == 'pending' || this.state == 'doing';\n\n isReady = () => this.state == 'ready' && this.data;\n}","import { Injectable } from '@angular/core';\nimport { CheckoutData, CheckoutDataType } from '../interfaces/checkout-data';\n\n@Injectable()\nexport class OrderUtilityService {\n\n constructor() { }\n\n /**\n * @param cart Objeto carrito o orden, indistintamente, ya que poseen el mismo formato\n * @param forCart Si la solicitud de promociones proviene del carrito, suprime el subtotal y el total\n * @description Devuelve un listado con todas las promociones que posee el carro/orden\n */\n getPromotions = (cart: any, forCart: boolean = false): CheckoutData[] => {\n if (cart.checkoutState && cart.checkoutState == \"completed\") return;\n let new_state: CheckoutData[] = [];\n let subtotal: CheckoutData = { type: 'subtotal', name: 'subtotal', amount: cart.totals.items };\n let total: CheckoutData = { type: 'total', name: 'total', amount: cart.totals.total };\n !forCart && new_state.push(subtotal);\n cart.cartDiscounts.forEach(cartDiscount => {\n cartDiscount.type = this.formatType(cartDiscount.type);\n new_state.push({\n type: cartDiscount.type,\n name: (cartDiscount.type != 'coupon') ? cartDiscount.name : 'coupon',\n amount: this.getAmount(cartDiscount, cart)\n });\n });\n !forCart && new_state.push(total);\n return new_state;\n }\n\n getAmount = (discount, cart): number => {\n if (discount.type != 'shipment') return discount.amount;\n return cart.totals.shipping;\n }\n\n formatType = (type: string): CheckoutDataType => {\n let result;\n switch (type) {\n case 'order_promotion': result = 'discount'; break;\n case 'order_shipping_promotion': result = 'shipment'; break;\n case 'order_coupon_promotion': result = 'coupon'; break;\n case 'order_unit_promotion': result = 'discount'; break;\n }\n !result && (result = type.includes('promotion') || type.includes('discount') ? 'discount' : type )\n return result || type;\n }\n}","import { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n@Injectable()\nexport class DopplerService {\n\n private isLoaded = false;\n private renderer: Renderer2;\n\n constructor(private rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document: any) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n initialize = (pixelSrc) => {\n this.isLoaded = true\n let scriptInsert = this.renderer.createElement(\"script\");\n this.renderer.setAttribute(scriptInsert, 'type', 'text/javascript');\n this.renderer.setAttribute(scriptInsert, 'async', 'async');\n this.renderer.setAttribute(scriptInsert, 'src', pixelSrc);\n this.renderer.appendChild(this.document.body, scriptInsert);\n }\n\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { AnalyticEventKey } from '../../interfaces/analytics/event-key.model';\nimport { FacebookPixelData } from '../../interfaces/analytics/facebook-pixel/facebook-pixel-model';\n\ndeclare let fbq: Function;\n\n@Injectable()\nexport class FacebookPixelService {\n\n private renderer: Renderer2;\n private enabled = false;\n\n constructor(private rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document: any) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n initialize = (pixel_id) => {\n let new_analityc_script = this.renderer.createElement('script');\n new_analityc_script.type = 'text/javascript';\n new_analityc_script.text = `!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', ${pixel_id});`;\n this.renderer.appendChild(this.document.body, new_analityc_script);\n this.enabled = true;\n setTimeout(() => this.callEvent('initialize'), 1000);\n }\n\n callEvent = (event_name: AnalyticEventKey, data = {}) => {\n if (!this.enabled) return;\n let event = this.translateEventName(event_name);\n event && fbq('track', this.translateEventName(event_name), this.evalEvent(event_name, data));\n }\n\n translateEventName = (event_name: AnalyticEventKey) => {\n switch (event_name) {\n case 'initialize': return 'PageView';\n case 'view_item': return 'ViewContent';\n case 'checkout_init': return 'InitiateCheckout';\n case 'payment_info': return 'AddPaymentInfo';\n case 'purchase': return 'Purchase';\n case 'add_to_cart': return 'AddToCart';\n default: return null;\n }\n }\n\n evalEvent = (event_name, data) => {\n switch (event_name) {\n case 'initialize': return data;\n case 'view_item': return this.toViewContent(data);\n case 'checkout_init': return this.toCheckoutInit(data);\n case 'payment_info': return this.toPaymentInfo(data);\n case 'purchase': return this.toPurchase(data);\n case 'add_to_cart': return this.toAddToCart(data);\n default: return data;\n }\n }\n \n callCustomEvent = (event_name, data: FacebookPixelData = {}) => {\n if (!this.enabled) return;\n fbq('trackCustom', event_name, data);\n }\n \n disable = () => this.enabled = false;\n\n private toViewContent = (data) => {\n let lastProduct = data?.name || 'not-product'\n return {\n content_type: 'product',\n content_name: lastProduct,\n content_ids: [data.variants[0]?.code],\n currency: data.currency || \"USD\",\n value: data.variants[0]?.saleprice || data.variants[0]?.price,\n //product_catalog_id: 'TEST'\n }\n }\n \n private toPurchase = (data) => {\n return { \n currency: data.currency || \"USD\",\n value: data.totals?.total || 0 ,\n content_type: 'product_group',\n contents: this.getContents(data),\n //product_catalog_id: 'TEST'\n }\n }\n\n private toCheckoutInit = (data) => {\n return {\n //content_category : \"inicio checkout\",\n content_type: 'product_group',\n contents: this.getContents(data),\n content_ids: this.getContentIds(data),\n currency: data.currency || \"USD\",\n num_items: data.items?.length || 0,\n value: data.totals?.total || 0 ,\n }\n }\n\n private toPaymentInfo = (data) => {\n return {\n //content_category : \"inicio checkout\",\n content_type: 'product_group',\n contents: this.getContents(data),\n content_ids: this.getContentIds(data),\n currency: data.currency || \"USD\",\n value: data.totals?.total || 0,\n }\n }\n\n private toAddToCart = (data) => {\n let lastProduct = data.items?.length && data.items[data.items.length - 1]?.product?.name || 'not-product'\n return {\n content_name: lastProduct,\n content_type: 'product',\n contents: this.getContents(data),\n content_ids: this.getContentIds(data),\n currency: data.currency || \"USD\",\n value: data.totals?.total || 0,\n //product_catalog_id: 'TEST'\n\n }\n }\n\n private getContents = (data) => {\n return data.items.map(\n item => {\n return {\n id: item.product.variants[0]?.code,\n quantity: item.quantity\n }\n }\n )\n }\n\n private getContentIds = (data) => {\n return data.items.map(\n item => item.product.variants[0]?.code\n )\n }\n}","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { AnalyticEventKey } from '../../interfaces/analytics/event-key.model';\nimport { ProductsService } from '../../services/products/products.service';\n\ndeclare var gtag: Function;\ndeclare var dataLayer: any[];\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GoogleAnalyticsService {\n\n private renderer: Renderer2;\n private enabled = false;\n\n constructor(private rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document: any,\n private router: Router, private productsService: ProductsService) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n initialize(gtm_id: string) {\n const declaration = this.renderer.createElement('script');\n declaration.async = true;\n declaration.src = `https://www.googletagmanager.com/gtag/js?id=${gtm_id}`;\n const initialization = this.renderer.createElement('script');\n initialization.text = `window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '${gtm_id}')`;\n this.renderer.appendChild(this.document.head, initialization);\n this.renderer.appendChild(this.document.head, declaration);\n this.enabled = true;\n setTimeout(() => this.startListeningPageViews(gtm_id), 1000);\n }\n\n private startListeningPageViews = (gtm_id) => {\n this.router.events.pipe(\n filter(event => event instanceof NavigationEnd)\n ).subscribe((event: NavigationEnd) => {\n gtag('config', gtm_id, {\n 'page_path': event.urlAfterRedirects\n })\n })\n }\n\n callEvent = (event_name: AnalyticEventKey, data = {}) => {\n if (!this.enabled) return;\n let event = this.translateEventName(event_name);\n event && gtag('event', this.translateEventName(event_name), this.evalEvent(event_name, data));\n }\n\n translateEventName = (event_name: AnalyticEventKey) => {\n switch (event_name) {\n case 'view_item': return 'view_item';\n case 'view_item_list': return 'view_item_list';\n case 'checkout_init': return 'begin_checkout'; \n case 'shipping_info': return 'add_shipping_info';\n case 'add_payment_info': return 'add_payment_info';\n case 'purchase': return 'purchase';\n case 'add_to_cart': return 'add_to_cart';\n case 'remove_from_cart': return 'remove_from_cart';\n case 'sign_up': return 'sign_up';\n default: return null;\n //default: return event_name;\n }\n }\n\n evalEvent = (event_name, data) => {\n switch (event_name) {\n case 'view_item': return this.toViewItem(data);\n case 'view_item_list': return this.toViewItemList(data);\n case 'checkout_init': return this.toCheckoutInit(data);\n case 'shipping_info': return this.toShippingInfo(data);\n case 'add_payment_info': return this.toPaymentInfo(data);\n case 'purchase': return this.toPurchase(data);\n case 'add_to_cart': return this.toAddToCart(data);\n case 'remove_from_cart': return this.toRemoveToCart(data);\n case 'sign_up': return this.toSignUp(data);\n default: return data;\n }\n }\n\n private toPurchase = (data) => {\n // console.log('toPurchese', {\n // coupon: this.toCartDiscount(data),\n // currency: data.currency,\n // shipping: data.totals.shipping,\n // tax: data.totals.taxes,\n // value: data.totals.total,\n // transaction_id: data.number,\n // items: data.items.map(item => ({\n // id: item.product.id,\n // name: item.product.name,\n // category: item.product.category,\n // price: item.total,\n // quantity: item.quantity\n // }))\n // });\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency,\n shipping: data.totals.shipping,\n tax: data.totals.taxes,\n value: data.totals.total,\n transaction_id: data.number,\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n }))\n }\n }\n\n private toCheckoutInit = (data) => {\n // console.log('toInitcheckout', {\n // coupon: this.toCartDiscount(data),\n // currency: data.currency || \"USD\",\n // items: data.items.map(item => ({\n // id: item.product.id,\n // name: item.product.name,\n // category: item.product.category,\n // price: item.total,\n // quantity: item.quantity\n // })),\n // value: data.totals?.total || 0,\n // });\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n value: data.totals?.total || 0,\n }\n }\n\n private toCartDiscount = (data) => {\n let strDiscount = ''\n strDiscount = data.cartDiscounts.map(itemDiscount => itemDiscount?.type).join()\n return strDiscount == '' ? 'not-discount' : strDiscount\n }\n\n private toAddToCart = (data) => {\n let lastProduct = data.items?.length && data.items[data.items.length - 1]\n return {\n currency: data.currency || \"USD\",\n items: [this.toItem({ quantity:lastProduct.quantity,...lastProduct.product })],\n value: lastProduct.total || 0,\n }\n // console.log('addtocart', {\n // data,\n // currency: data.currency || \"USD\",\n // items: [this.toItem({ quantity: lastProduct.quantity, ...lastProduct.product })],\n // value: lastProduct.total || 0,\n // });\n }\n\n disable = () => this.enabled = false;\n\n private toViewItem = (product) => {\n return {\n currency: product.currency,\n items: [this.toItem(product)],\n value: product.variants[0]?.saleprice || product.variants[0]?.price,\n }\n // console.log('view ', {\n // currency: product.currency,\n // items: [this.toItem(product)],\n // value: product.variants[0]?.saleprice || product.variants[0]?.price,\n // });\n }\n\n private toViewItemList = (data) => {\n return {\n items: data.products.map(product => this.toItem(product)),\n item_list_name: data.item_list_name || 'Collection',\n item_list_id: data.item_list_id || 'collection'\n }\n // console.log('toViewItemList ', {\n // items: data.products.map(product => this.toItem(product)),\n // item_list_name: data.item_list_name || 'Collection',\n // item_list_id: data.item_list_id || 'collection'\n // });\n }\n\n private toRemoveToCart = (product) => {\n let productParam = product.product\n return {\n currency: product.currency || \"USD\",\n items: [this.toItem({ quantity: product.quantity, ...productParam })],\n value: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,\n }\n // console.log('remove_from_cart ', {\n // currency: product.currency || \"USD\",\n // items: [this.toItem({ quantity: product.quantity, ...productParam })],\n // value: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,\n // });\n }\n\n private toItem = (product) => ({\n item_name: product.name,\n item_id: product.id,\n item_brand: product.attributes?.length ? product.attributes[0].name : '',\n item_category: product.category,\n price: product.variants[0]?.saleprice || product.variants[0]?.price,\n quantity: product.quantity || 1,\n })\n\n private toPaymentInfo = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n payment_type: data.payments[0]?.method?.code || 'not-payments',\n value: data.totals?.total || 0,\n }\n }\n\n private toShippingInfo = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n shipping_tier: data.shipments[0]?.method?.code || 'not-shipping',\n value: data.totals?.total || 0,\n }\n }\n\n private toSignUp = (data) => {\n return {\n ...data\n }\n }\n}","import {Inject, Injectable, Optional} from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { AnalyticEventKey } from '../../interfaces/analytics/event-key.model';\nimport {GoogleTagManagerConfig} from '../../interfaces/analytics/gtm-config';\n\n@Injectable({providedIn: 'root'})\nexport class GTMService {\n private isLoaded = false;\n private enabled = false;\n\n\n private config : GoogleTagManagerConfig = { id: null };\n\n private browserGlobals = {\n windowRef(): any {\n return window;\n },\n documentRef(): any {\n return document;\n }\n };\n\n constructor(private router: Router) {}\n\n public getDataLayer(): any[]{\n const window = this.browserGlobals.windowRef();\n window.dataLayer = window.dataLayer || [];\n return window.dataLayer;\n }\n\n private pushOnDataLayer(obj : object): void {\n const dataLayer = this.getDataLayer();\n dataLayer.push(obj);\n }\n\n public addGtmToDom(): Promise < boolean > {\n return new Promise(\n (resolve, reject) => {\n if (this.isLoaded) {\n return resolve(this.isLoaded);\n }\n const doc = this.browserGlobals.documentRef();\n this.pushOnDataLayer({'gtm.start': new Date().getTime(), event: 'gtm.js'});\n\n const gtmScript = doc.createElement('script');\n gtmScript.id = 'GTMscript';\n gtmScript.async = true;\n gtmScript.src = this.applyGtmQueryParams(this.config.gtm_resource_path ? this.config.gtm_resource_path : 'https://www.googletagmanager.com/gtm.js');\n gtmScript.addEventListener('load', () => {\n return resolve(this.isLoaded = true);\n });\n gtmScript.addEventListener('error', () => {\n return reject(false);\n });\n doc.head.insertBefore(gtmScript, doc.head.firstChild);\n }\n );\n }\n\n public initialize = (config : GoogleTagManagerConfig) => {\n this.config = config || this.config;\n this.addGtmToDom().then(() => {\n this.router.events.forEach(item => {\n if (item instanceof NavigationEnd) {\n const gtmTag = {\n event: 'page',\n pageName: item.url\n };\n this.pushTag(gtmTag);\n }\n });\n })\n }\n\n public pushTag(item : object): Promise < void > {\n return new Promise<void>((resolve, reject) => {\n if (!this.isLoaded) {\n this.addGtmToDom().then(() => {\n this.pushOnDataLayer(item);\n return resolve();\n }).catch(() => reject());\n } else {\n this.pushOnDataLayer(item);\n return resolve();\n }\n });\n }\n\n private applyGtmQueryParams(url : string): string {\n if (url.indexOf('?') === -1) {\n url += '?';\n }\n return(url + Object.keys(this.config).filter((k) => this.config[k]).map((k) => `${k}=${\n this.config[k]\n }`).join('&'));\n }\n\n\n callEvent = (event_name: AnalyticEventKey, data = {}) => {\n if (!this.isLoaded) return;\n let event = this.translateEventName(event_name);\n event && this.pushTag({ 'event': this.translateEventName(event_name), data: this.evalEvent(event_name, data) })\n }\n\n translateEventName = (event_name: AnalyticEventKey) => {\n switch (event_name) {\n case 'view_item': return 'view_item_gtm';\n case 'view_item_list': return 'view_item_list_gtm';\n case 'checkout_init': return 'begin_checkout_gtm';\n case 'shipping_info': return 'add_shipping_info_gtm';\n case 'add_payment_info': return 'add_payment_info_gtm';\n case 'purchase': return 'purchase_gtm';\n case 'add_to_cart': return 'add_to_cart_gtm';\n case 'remove_from_cart': return 'remove_from_cart_gtm';\n case 'sign_up': return 'sign_up_gtm';\n default: return null;\n }\n }\n\n evalEvent = (event_name, data) => {\n switch (event_name) {\n case 'view_item_gtm': return this.toViewItem(data);\n case 'view_item_list_gtm': return this.toViewItemList(data);\n case 'checkout_init_gtm': return this.toCheckoutInit(data);\n case 'shipping_info_gtm': return this.toShippingInfo(data);\n case 'add_payment_info_gtm': return this.toPaymentInfo(data);\n case 'purchase_gtm': return this.toPurchase(data);\n case 'add_to_cart_gtm': return this.toAddToCart(data);\n case 'remove_from_cart_gtm': return this.toRemoveToCart(data);\n case 'sign_up_gtm': return this.toSignUp(data);\n default: return data;\n }\n }\n\n private toPurchase = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency,\n shipping: data.totals.shipping,\n tax: data.totals.taxes,\n value: data.totals.total,\n transaction_id: data.number,\n countItems: data.items?.length || 0,\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n }))\n }\n }\n\n private toCheckoutInit = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n value: data.totals?.total || 0,\n }\n }\n\n private toCartDiscount = (data) => {\n let strDiscount = ''\n strDiscount = data.cartDiscounts.map(itemDiscount => itemDiscount?.type).join()\n return strDiscount == '' ? 'not-discount' : strDiscount\n }\n\n private toAddToCart = (data) => {\n let lastProduct = data.items?.length && data.items[data.items.length - 1]\n return {\n currency: data.currency || \"USD\",\n items: [this.toItem({ quantity: lastProduct.quantity, ...lastProduct.product })],\n value: lastProduct.total || 0,\n }\n }\n\n disable = () => this.enabled = false;\n\n private toViewItem = (product) => {\n return {\n currency: product.currency,\n items: [this.toItem(product)],\n value: product.variants[0]?.saleprice || product.variants[0]?.price,\n }\n }\n\n private toViewItemList = (data) => {\n return {\n items: data.products.map(product => this.toItem(product)),\n item_list_name: data.item_list_name || 'Collection',\n item_list_id: data.item_list_id || 'collection'\n }\n }\n\n private toRemoveToCart = (product) => {\n let productParam = product.product\n return {\n currency: product.currency || \"USD\",\n items: [this.toItem({ quantity: product.quantity, ...productParam })],\n value: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,\n }\n }\n\n private toItem = (product) => ({\n item_name: product.name,\n item_id: product.id,\n item_brand: product.attributes?.length ? product.attributes[0].name : '',\n item_category: product.category,\n price: product.variants[0]?.saleprice || product.variants[0]?.price,\n quantity: product.quantity || 1,\n })\n\n private toPaymentInfo = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n payment_type: data.payments[0]?.method?.code || 'not-payments',\n value: data.totals?.total || 0,\n }\n }\n\n private toShippingInfo = (data) => {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map(item => ({\n id: item.product.id,\n name: item.product.name,\n category: item.product.category,\n price: item.total,\n quantity: item.quantity\n })),\n shipping_tier: data.shipments[0]?.method?.code || 'not-shipping',\n value: data.totals?.total || 0,\n }\n }\n\n private toSignUp = (data) => {\n return {\n ...data\n }\n }\n}\n","import { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { MetricoolPixel } from \"../../interfaces/analytics/metricool-pixel\";\nimport { DOCUMENT } from '@angular/common';\n\n@Injectable({providedIn: 'root'})\nexport class MetricoolPixelService {\n private isLoaded = false;\n\n\n\n private renderer: Renderer2;\n\n \n\n constructor(private rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document: any) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n initialize = (pixel_hash) => {\n let new_analityc_script = this.renderer.createElement('script');\n new_analityc_script.type = 'text/javascript';\n new_analityc_script.text = `\n function loadScript(a) {\n var b = document.getElementsByTagName(\"head\")[0], c = document.createElement(\"script\");\n c.type = \"text/javascript\",\n c.src = \"https://tracker.metricool.com/resources/be.js\",\n c.onreadystatechange = a,\n c.onload = a, b.appendChild(c)\n } loadScript(function () {\n beTracker.t({ hash: \"${pixel_hash}\" })\n });\n `;\n this.renderer.appendChild(this.document.body, new_analityc_script);\n }\n \n}\n","import { Injectable } from '@angular/core';\nimport { AnalyticEventKey } from '../interfaces/analytics/event-key.model';\nimport { DopplerService } from '../utils/analytics/doppler.service';\nimport { FacebookPixelService } from '../utils/analytics/facebook-pixel.service';\nimport { GoogleAnalyticsService } from '../utils/analytics/google-analytics.service';\nimport { GTMService } from '../utils/analytics/gtm.service';\nimport { MetricoolPixelService } from '../utils/analytics/metricool-pixel.service';\n\n@Injectable()\nexport class AnalyticsService {\n\n private services: any[] = [];\n\n constructor(\n private facebookAnalitycs: FacebookPixelService,\n private googleAnalytics: GoogleAnalyticsService,\n private gtmAnalytics: GTMService,\n private metricoolAnalytics:MetricoolPixelService,\n private dopplerAnalytics:DopplerService) {\n this.services.push(this.facebookAnalitycs);\n this.services.push(this.googleAnalytics);\n this.services.push(this.gtmAnalytics);\n }\n\n initializeFacebook = (value) => {\n this.facebookAnalitycs.initialize(value);\n }\n\n initializeGoogle = (value) => {\n this.googleAnalytics.initialize(value);\n }\n\n initializeGTM = (value) => {\n this.gtmAnalytics.initialize({ id: value });\n }\n\n initializeMetricool = (value) => {\n this.metricoolAnalytics.initialize(value);\n }\n\n initializeDoppler = (value) => {\n this.dopplerAnalytics.initialize(value);\n }\n\n callEvent = (event_name: AnalyticEventKey, data: any = {}) => {\n this.services.forEach(service => {\n service.callEvent(event_name, data)\n });\n }\n}","import { Injectable, Injector } from '@angular/core';\nimport { BodyError } from '../../interfaces/checkout/checkout-error';\nimport { CartService } from '../cart.service';\nimport { Constants } from '../../core.consts';\nimport { BehaviorSubject } from 'rxjs';\nimport { ToastService } from '../../utils/toast.service';\nimport { ToastrService } from 'ngx-toastr';\nimport { AuthService } from '../auth.service';\n\n@Injectable({ providedIn: 'root' })\nexport class ErrorHandlerService {\n\n private errorSubject = new BehaviorSubject<BodyError>(null);\n public error$ = this.errorSubject.asObservable();\n\n constructor(private cartService: CartService,\n private toastrService: ToastrService,\n private injector: Injector,\n private consts: Constants) { }\n\n outOfStock = (error: BodyError) => {\n this.cartService.updateItemsOnError(error.content, error.code)\n this.otherErrors(error)\n }\n\n channeAccessPermissionDenied = (error: BodyError) => {\n this.injector.get(AuthService).logout()\n this.otherErrors(error)\n }\n\n otherErrors = (error: BodyError) => {\n error && error.message && this.errorSubject.next(error)\n this.toastrService.show(error.message,'', {closeButton:true,timeOut:6000})\n this.clearError()\n }\n\n clearError = () => {\n setTimeout(() => {\n this.errorSubject.next(null)\n }, 3000);\n }\n\n handlerErrorResponse = (error: BodyError) => {\n switch (error.code) {\n case 'out_of_stock': this.outOfStock(error); break;\n case 'items_with_product_or_product_variant_not_enabled': this.outOfStock(error); break;\n case 'channel_access_permission_denied': this.channeAccessPermissionDenied(error); break;\n case 'user_disabled': this.otherErrors(error); break;\n default: this.otherErrors(error); break;\n }\n }\n}","import { Injectable, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { IndividualConfig, ToastrService } from 'ngx-toastr';\nimport { take } from 'rxjs/operators';\nimport { Constants } from '../core.consts';\nimport { ParametersService } from '../services/parameters.service';\nimport { Parameter } from '../interfaces/parameters';\n\n@Injectable()\nexport class ToastService {\n public configToast;\n\n constructor(private translation: TranslateService,\n private toastrService: ToastrService) {\n this.configToast = {}\n }\n\n /**\n * @description Cambia el tiempo que se muestra el mensaje.\n * @param time \n */\n setTimeMessage = (time: number) => {\n this.configToast = {\n timeOut: time\n }\n }\n\n show = (message, interpolateParams: any = {}, title = '', configToastr: Partial<IndividualConfig> = this.configToast) => {\n this.translation.get(message, interpolateParams).pipe(take(1)).subscribe(\n res => this.toastrService.show((res ? res : message), title, configToastr)\n );\n }\n}","import { Injectable, OnInit } from '@angular/core';\nimport { ConnectionService } from '../../api/connection.service';\nimport { CartService } from '../cart.service';\nimport { Constants } from '../../core.consts';\nimport { BehaviorSubject, ReplaySubject, combineLatest } from 'rxjs';\nimport { StepI, StepTypeI } from '../../interfaces/step';\nimport { Step } from '../../classes/checkout/step';\nimport { CheckoutData, CheckoutDataType } from '../../interfaces/checkout-data';\nimport { OrderUtilityService } from '../../utils/order-util.service';\nimport { AnalyticsService } from '../analytics.service';\nimport { AuthService } from '../auth.service';\nimport { User } from '../../classes/user';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { filter, take } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { ToastService } from '../../utils/toast.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CheckoutService implements OnInit {\n\n baseApi = () => 'shop-api/' + this.consts.getChannel() + '/checkout/' + this.cartService.getCartToken();\n getPaymentMethodsApi = () => this.baseApi() + '/payment';\n putAddressApi = () => this.baseApi() + '/address';\n putPaymentApi = (method) => this.baseApi() + '/payment/' + method;\n completeApi = () => this.baseApi() + '/complete';\n persistShipmentApi = () => '';\n getPreferenceApi = () => 'shop-api/' + this.consts.getChannel() + '/mercado-pago/' + this.cartService.getCartToken() + '/preference';\n getHasPurchaseConditions = () => 'shop-api/' + this.consts.getChannel() + '/carts/' + this.cartService.getCartToken() + '/has_purchase_conditions';\n\n private canCheckoutSubject = new ReplaySubject<boolean>();\n private onReadySubject = new BehaviorSubject<boolean>(false);\n\n private stateSubject = new BehaviorSubject<Step[]>(null);\n private loadingSubject = new BehaviorSubject<boolean>(false);\n private orderSubject = new BehaviorSubject<any>(null);\n private asociatedDataSubject = new BehaviorSubject<CheckoutData[]>(null);\n private order: any;\n private checkout_data: any = {};\n public total;\n private cartLocal;\n private user: User;\n\n public order$ = this.orderSubject.asObservable();\n public state$ = this.stateSubject.asObservable();\n public loading$ = this.loadingSubject.asObservable();\n public canCheckout$ = this.canCheckoutSubject.asObservable();\n public asociatedData$ = this.asociatedDataSubject.asObservable();\n public onReady$ = this.onReadySubject.asObservable();\n\n constructor(private connection: ConnectionService,\n private cartService: CartService,\n private consts: Constants,\n private toastrService: ToastService,\n private orderUtils: OrderUtilityService,\n private analyticsService: AnalyticsService,\n public authService: AuthService,\n private router: Router,\n private errorHandler: ErrorHandlerService) {\n\n combineLatest([this.cartService.cartItems, this.cartService.loading]).subscribe(([items, loading]) => {\n if (!loading && items.length > 0) {\n this.canCheckoutSubject.next(true)\n this.cartService.getTotalAmount().subscribe(res => {\n this.total = res;\n });\n }\n\n })\n this.cartService.cart.subscribe(cart => cart && (this.cartLocal = cart) && this.updateAsociatedData(cart));\n this.order$.subscribe(order => order && this.updateAsociatedData(order))\n this.authService.getUserProfile().subscribe(user => this.user = user)\n this.errorHandler.error$.pipe(filter(res => res != null)).subscribe(\n res => {\n if (res.code == 'out_of_stock' || res.code == 'items_with_product_or_product_variant_not_enabled') {\n this.toastrService.show('redirect-cart')\n setTimeout(() => {\n this.router.navigateByUrl('/cart')\n }, 3000);\n }\n }\n )\n }\n\n ngOnInit() {\n }\n\n updateOrder = (order) => order && this.orderSubject.next(order);\n\n getStepData = (step_name: StepTypeI) => {\n let step_result = this.stateSubject.getValue().find(step => step.name == step_name);\n return (step_result && step_result.data);\n }\n\n setSteps = (steps: StepI[], autohandle = true) => {\n let final_steps = [];\n steps.forEach((step, i) => final_steps.push(new Step(step.name, step.priority || (i + 1))));\n this.stateSubject.next(final_steps);\n this.connection.getErrorNotHandler(this.getHasPurchaseConditions()).toPromise().then(\n res => {\n this.analyticsService.callEvent('checkout_init', { ...this.cartLocal, currency: this.cartLocal?.currency, value: this.cartLocal?.total })\n }\n )\n }\n\n setStepReady = async (step_number, data, order?) => {\n await this.restartAllStepsFrom(step_number);\n setTimeout(() => {\n let steps = this.stateSubject.getValue();\n steps.find(step => step.priority == step_number).ready(data);\n this.stateSubject.next(steps);\n\n if (order) {\n this.orderSubject.next(order);\n this.total = order.totals.total;\n }\n\n this.isCheckoutReady() &&\n setTimeout(() => {\n this.onReadySubject.next(true);\n }, 500);\n }, 150);\n return true;\n }\n\n setStepDoing = async (step_number) => {\n let steps = this.stateSubject.getValue();\n steps = await this.restartAllStepsFrom(step_number, false, false);\n steps.find(step => step.priority == step_number).doing();\n this.stateSubject.next(steps);\n return true;\n }\n\n restartAllStepsFrom = (step_number, included = true, update = true) => {\n let steps = this.stateSubject.getValue();\n steps = steps.map((step) => {\n included\n ? (step.priority >= step_number) && step.restart()\n : (step.priority > step_number) && step.restart()\n return step;\n })\n update && this.stateSubject.next(steps);\n return steps;\n }\n\n isCheckoutReady = () => {\n let steps = this.stateSubject.value;\n const step_missing = steps.find(step => step.isPending());\n return !step_missing;\n }\n\n isStepReady = (step_name) => {\n return this.stateSubject.getValue().find(step => step.name == step_name).isReady()\n };\n\n setOrder = (order) => { this.order = order, this.orderSubject.next(order) };\n getOrder = () => this.order || this.orderSubject.value;\n\n private completeOrder = () => this.connection.put(this.completeApi(), { email: this.checkout_data.email, notes: this.checkout_data.notes || '' }).toPromise();\n\n complete = async () => {\n this.loadingSubject.next(true);\n let result = await this.completeOrder();\n if (result && result.error) {\n this.cartService.changeHaveToUpdate(false);\n this.loadingSubject.next(false);\n return ({ ok: false, require_login: true, message: 'not-completed' });\n }\n this.setOrder(result);\n this.analyticsService.callEvent('purchase', { ...result, currency: result.currency, value: result.total });\n this.cartService.clearAndResetCart();\n this.canCheckoutSubject.next(false);\n this.onReadySubject.next(false);\n this.loadingSubject.next(false);\n return ({ ok: true, require_login: false, message: '' });\n }\n\n updateAsociatedData = (cart: any) => {\n let result = this.orderUtils.getPromotions(cart);\n if (this.authService.getUserProfileAsUser()?.isWholesaler() && cart.totals.taxes != 0) {\n let total = { ...result[result.length - 1] };\n result[result.length - 1] = {\n type: 'taxes',\n name: 'taxes',\n amount: cart.totals.taxes\n }\n result.push(total);\n }\n let shipment = result?.find(promotion => promotion.type == \"shipment\");\n if (!shipment && cart.totals.shipping != 0) {\n\n if (result?.length && !result.find(item => item.type === \"shipment\")) {\n let total = { ...result[result.length - 1] };\n result[result.length - 1] = {\n type: 'shipment',\n name: 'shipment',\n amount: cart.totals.shipping\n }\n result.push(total);\n }\n }\n this.asociatedDataSubject.next(result);\n }\n\n restartCheckout = () => { }\n\n}","import { BodyError } from \"../../interfaces/checkout/checkout-error\";\nimport { CheckoutService } from \"../../services/checkout/checkout.service\";\n\nexport class StepService {\n\n public step_id;\n\n constructor(private checkout: CheckoutService) { }\n\n /** Persistir el id del paso para luego indicarle al CheckoutService quien le habla */\n initialize = (step_id) => {\n this.step_id = step_id;\n }\n\n /** Reinicia información en CheckoutService del paso */\n restartStep = () => this.checkout.setStepDoing(this.step_id);\n\n /**\n * Obtener información obtenida en el paso de datos asociados al usuario y a la facturación\n */\n getUserData = () => this.checkout.getStepData('address');\n\n /**\n * Obtener información obtenida en el paso de envío\n */\n getShipmentData = () => this.checkout.getStepData('shipment');\n\n /**\n * Obtener información obtenida en el paso de pago\n */\n getPaymentData = () => this.checkout.getStepData('payment');\n\n /**\n * \n * @param step_data Información obtenida en el paso\n * @param order Información de la orden que devolvió el backend al terminar el paso\n */\n setStepReady = async (step_data, order) => (await this.restartStep()) && this.checkout.setStepReady(this.step_id, step_data, order);\n\n /**\n * \n */\n //setError = (error: BodyError) => error && this.checkout.handleError(error);\n}","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../../api/connection.service';\nimport { Constants } from '../../core.consts';\nimport { map } from 'rxjs/operators';\nimport { CartService } from '../cart.service';\nimport { CheckoutService } from './checkout.service';\nimport { StepService } from '../../classes/checkout/step-service';\nimport { ParametersService } from '../parameters.service';\nimport { AnalyticsService } from '../analytics.service';\nimport { Validators } from '@angular/forms';\n\ntype typeForms = 'EUR' | 'ARG';\ntype typeSelectAddress = 'ONLY_LOAD_ADDRESS' | 'ONLY_ADDRESS_SELECTION' | 'LOAD_ADDRESS_AND_SELECTION';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddressingService extends StepService {\n\n baseApi = () => 'shop-api/' + this.consts.getChannel() + '/' + 'checkout/' + this.cartService.getCartToken();\n countriesApi = () => 'shop-api/' + this.consts.getChannel() + '/countries';\n zonesApi = () => 'shop-api/' + this.consts.getChannel() + '/zones';\n provincesApi = () => 'shop-api/' + this.consts.getChannel() + '/provinces';\n putAddressApi = () => this.baseApi() + '/address';\n addressBookApi = () => 'shop-api/' + this.consts.getChannel() + '/address-book';\n headquarterApi = () => 'shop-api/' + this.consts.getChannel() + '/checkout/' + this.cartService.getCartToken() +'/headquarter';\n\n public typeForms: typeForms = 'ARG';\n public modeSelectAddress: typeSelectAddress = 'LOAD_ADDRESS_AND_SELECTION';\n public countriesList = [];\n public documentTypes = [];\n public provinceList = [];\n\n constructor(private connection: ConnectionService, private consts: Constants, private cartService: CartService, private checkoutService: CheckoutService,\n private analyticsService: AnalyticsService) {\n super(checkoutService);\n this.getAddressingData().then(res => {\n if (res) {\n this.documentTypes = (res.find(paises => this.consts.getLocale().toLocaleLowerCase().includes(paises.code.toLocaleLowerCase())))?.documentTypes || []\n this.provinceList = (res.find(paises => this.consts.getLocale().toLocaleLowerCase().includes(paises.code.toLocaleLowerCase())))?.provinces || []\n this.countriesList = res\n }\n })\n }\n\n ngOnInit() {\n\n }\n\n getAddressingData = async () =>\n this.connection.get(this.countriesApi()).pipe(map(res => res?._embedded?.items)).toPromise();\n\n getAddressBook = async () =>\n this.connection.get(this.addressBookApi()).pipe(map(res => res?.length && res.map(addres => { return addres && { ...addres, selected: addres.default } }) || null )).toPromise();\n \n setHeadquarter = (sede: any) => {\n return this.connection.put(this.headquarterApi(), sede.selected)\n .pipe(map(order => {\n if (order && order.error) {\n this.cartService.changeHaveToUpdate(false);\n return false;\n }\n this.setStepReady(sede, order);\n this.analyticsService.callEvent('payment_info', order);\n return order;\n })).toPromise().then(\n res => res,\n err => {\n return new Promise((resolve, reject) => reject(new Error(err.error)))\n }\n ).catch(err => console.error(err))\n }\n \n setAddress = (user_data: any) => {\n user_data.locale = this.consts.getLocale();\n return this.connection.put(this.putAddressApi(), user_data).pipe(map(order => {\n if (order && order.error) {\n this.cartService.changeHaveToUpdate(false);\n return false;\n }\n this.setStepReady(user_data, order);\n this.analyticsService.callEvent('payment_info', order);\n return order;\n })).toPromise().then(\n res => res,\n err => {\n return new Promise((resolve, reject) => reject(new Error(err.error)))\n }\n ).catch(err => console.error(err))\n }\n\n putAddressAndHandle = (user_data, next?, onError?) => {\n user_data.locale = this.consts.getLocale();\n let data = { shippingAddress: { ...user_data.data } };\n this.connection.put(this.putAddressApi(), data).toPromise().then(\n res => {\n this.setStepReady(user_data, res);\n this.analyticsService.callEvent('payment_info', res);\n next && next();\n },\n err => onError && onError(err)\n )\n }\n\n getTypeForm = () => {\n let formsTypeCofig = [\n {\n code: 'EUR',\n configForm: {\n formAddres: {\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n email: ['', [Validators.required, Validators.email]],\n documentType: ['', []],\n documentNumber: ['', []],\n street: ['', [Validators.required, Validators.maxLength(50)]],\n countryCode: [null, [Validators.required]],\n city: ['', Validators.required],\n provinceCode: [null, [Validators.required]],\n postcode: ['', Validators.required],\n terms: [null, Validators.required],\n notes: ['']\n },\n formBilling: {\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n email: ['', [Validators.required, Validators.email]],\n documentType: ['', []],\n documentNumber: ['', []],\n street: ['', [Validators.required, Validators.maxLength(50)]],\n countryCode: [null, [Validators.required]],\n city: ['', Validators.required],\n provinceCode: [null, [Validators.required]],\n postcode: ['', Validators.required],\n notes: ['']\n }\n },\n viewForms: {\n firstName: { enabled: true, required: true, values: [] },\n lastName: { enabled: true, required: true, values: [] },\n phoneNumber: { enabled: true, required: true, values: [] },\n email: { enabled: true, required: true, values: [] },\n documentType: { enabled: true, required: false, values: this.documentTypes },\n documentNumber: { enabled: true, required: false, values: [] },\n street: { enabled: true, required: true, values: [] },\n countryCode: { enabled: true, required: true, values: [] },\n city: { enabled: true, required: true, values: [] },\n provinceCode: { enabled: true, required: true, values: [] },\n postcode: { enabled: true, required: true, values: [] },\n terms: { enabled: true, required: true, values: [] },\n notes: { enabled: true, required: false, values: [] }\n }\n },\n {\n code: 'ARG',\n configForm: {\n formAddres: {\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n email: ['', [Validators.required, Validators.email]],\n documentType: ['', [Validators.required]],\n documentNumber: ['', [Validators.required]],\n street: ['', [Validators.required, Validators.maxLength(50)]],\n countryCode: [null, [Validators.required]],\n city: ['', Validators.required],\n provinceCode: [null, [Validators.required]],\n postcode: ['', Validators.required],\n notes: ['']\n },\n formBilling: {\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n email: ['', [Validators.required, Validators.email]],\n documentType: ['', [Validators.required]],\n documentNumber: ['', [Validators.required]],\n street: ['', [Validators.required, Validators.maxLength(50)]],\n countryCode: [null, [Validators.required]],\n city: ['', Validators.required],\n provinceCode: [null, [Validators.required]],\n postcode: ['', Validators.required],\n notes: ['']\n }\n },\n viewForms: {\n firstName: { enabled: true, required: true, values: [] },\n lastName: { enabled: true, required: true, values: [] },\n phoneNumber: { enabled: true, required: true, values: [] },\n email: { enabled: true, required: true, values: [] },\n documentType: { enabled: true, required: true, values: this.documentTypes},\n documentNumber: { enabled: true, required: true, values: [] },\n street: { enabled: true, required: true, values: [] },\n countryCode: { enabled: true, required: true, values: [] },\n city: { enabled: true, required: true, values: [] },\n provinceCode: { enabled: true, required: true, values: [] },\n postcode: { enabled: true, required: true, values: [] },\n terms: { enabled: false, required: false, values: [] },\n notes: { enabled: true, required: false, values: [] }\n }\n }\n ]\n return formsTypeCofig.find(ct => ct.code == this.typeForms);\n }\n\n setTypeSelectAddress = (type: typeSelectAddress) => {\n this.modeSelectAddress = type && type || 'LOAD_ADDRESS_AND_SELECTION'\n }\n\n setTypeForms = (type: typeForms) => {\n this.typeForms = type && type || 'ARG' \n }\n}","\nimport { Injectable, Inject, Injector } from '@angular/core';\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\nimport { ConnectionService } from '../api/connection.service';\nimport { AddressingService } from './checkout/addressing.service';\nimport { Constants } from '../core.consts';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ChannelConfigService {\n\n constructor(private consts: Constants, @Inject('env') private env, private connection: ConnectionService, private injector: Injector) {\n this.getChannelConfig()\n this.getChannels()\n this.getLocales()\n }\n\n private channelConfigApi = () => 'shop-api/' + this.consts.getChannel() + '/channel'\n private localesApi = () => 'shop-api/' + this.consts.getChannel() + '/locales'\n private channelsApi = () => 'shop-api/channels'\n\n private channelConfigSubject = new ReplaySubject<any>()\n public channelConfig$ = this.channelConfigSubject.asObservable()\n\n private channelsSubject: BehaviorSubject<any> = new BehaviorSubject([])\n public channels = this.channelsSubject.asObservable()\n\n private localesSubject: BehaviorSubject<any> = new BehaviorSubject([])\n public locales = this.localesSubject.asObservable()\n\n public getChannelConfig = () => {\n this.connection.get(this.channelConfigApi()).toPromise().then(\n res => { this.channelConfigSubject.next(res), res && this.setChannelInfo(res) },\n err => this.channelConfigSubject.next({})\n ).catch(err => this.channelConfigSubject.next(null))\n }\n\n public getChannels = () => {\n this.connection.get(this.channelsApi()).toPromise()\n .then(res => this.channelsSubject.next(res))\n .catch(err => this.channelsSubject.next([]))\n }\n\n public getLocales = () => {\n this.connection.get(this.localesApi()).toPromise()\n .then(res => this.localesSubject.next(res.items))\n .catch(err => this.localesSubject.next([]))\n }\n\n public changeChannel = channelObj => {\n this.consts.modifyChannelConfig({\n channel: channelObj.code,\n currency: channelObj.baseCurrency,\n locale: channelObj.locales.code\n })\n this.injector.get(AddressingService).setTypeSelectAddress(channelObj.headquarterSelectionOnly || 'LOAD_ADDRESS_AND_SELECTION')\n }\n\n public setChannelInfo = channelObj => {\n this.consts.setChannel(channelObj.code)\n this.consts.setCurrency(channelObj.baseCurrency)\n this.injector.get(AddressingService).setTypeSelectAddress(channelObj.headquarterSelectionOnly || 'LOAD_ADDRESS_AND_SELECTION')\n }\n\n}\n\n","import { Injectable, Injector } from '@angular/core';\nimport { ConnectionService } from '../api/connection.service';\nimport { Observable, BehaviorSubject, of } from 'rxjs';\nimport { User } from '../classes/user';\nimport 'rxjs/add/observable/of';\nimport { ToastrService } from 'ngx-toastr';\nimport { Constants } from '../core.consts';\nimport { map, mapTo, catchError, tap } from 'rxjs/operators';\nimport * as moment from \"moment\";\nimport { ChannelConfigService } from './channel-config.service';\nimport { take } from 'rxjs-compat/operator/take';\nimport { CartService } from './cart.service';\nimport { Router } from '@angular/router';\nimport { UserRoleType } from '../classes/user-role-type';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService {\n\n private readonly JWT_TOKEN = 'JWT_TOKEN'\n private readonly REFRESH_TOKEN = 'REFRESH_TOKEN'\n private readonly EXPIRATES_IN = 'EXPIRATES_IN'\n private readonly USER = 'USER'\n private readonly MAIL = 'mail'\n private readonly LOCALE = 'LOCALE'\n private readonly CHANNEL = 'CHANNEL'\n private readonly CUSTOMER = 'CUSTOMER'\n\n /* activeChannelSwitch? */\n private activeChannelChange: boolean = false\n private loggedInSubject = new BehaviorSubject<any>(false)\n private loggingInSubject = new BehaviorSubject<any>(false)\n private userInSubject = new BehaviorSubject<User>(null)\n private channelsUserSubject = new BehaviorSubject<any[]>([])\n /* private customerSubject = new BehaviorSubject<any>(null) */\n private user: User = null\n\n // APIS\n public tokenApi = () => 'shop-api/login_check';\n public registerApi = () => 'shop-api/' + this.constants.getChannel() + '/register';\n public registerWholesalerApi = () => 'shop-api/' + this.constants.getChannel() + '/register-wholesaler';\n public confirmAccountApi = (token) => 'shop-api/' + this.constants.getChannel() + '/verify-account?token=' + token;\n public resetPasswordApi = (token) => 'shop-api/' + this.constants.getChannel() + '/password-reset/' + token;\n public recoverPasswordApi = () => 'shop-api/' + this.constants.getChannel() + '/request-password-reset';\n public countriesApi = () => 'shop-api/' + this.constants.getChannel() + '/countries';\n\n // Atributos utiles\n public waiting = false;\n public loggedIn = this.loggedInSubject.asObservable()\n public loggingIn = this.loggingInSubject.asObservable()\n public userAuth = this.userInSubject.asObservable()\n public channelsUser = this.channelsUserSubject.asObservable()\n /* private customer = this.channelsUserSubject.asObservable() */\n private customer = null\n public channel = null\n public channels = []\n private homeResolver = null\n\n constructor(private connection: ConnectionService,\n private toastrService: ToastrService,\n private constants: Constants,\n private injector: Injector\n ) {\n this.isAuthenticated() && this.loggedInSubject.next(true)\n }\n\n /**\n * @desc Devuelve un observable\n * @param user Objeto que contiene username y password \n */\n login(user: { username: string, password: string }, withRoles: UserRoleType[] = []): Observable<any> {\n this.injector.get(ChannelConfigService).channelConfig$.subscribe(ch => this.channel = ch)\n this.injector.get(ChannelConfigService).channels.subscribe(ch => this.channels = ch)\n this.loggingInSubject.next(true);\n user = { ...user, ...this.constants.loginExtraData() };\n let result = this.connection.post(this.tokenApi(), user).pipe(\n map(res => {\n if (this.channelAccessPermission({ ...user, ...res }) && this.isAllowedRole(withRoles, res.type)) {\n this.doLoginUser({ ...user, ...res })\n return 'ok'\n }\n return 'error'\n }),\n catchError(err => {\n this.loggingInSubject.next(false);\n return of(err.toString());\n })\n );\n return result\n }\n\n channelAccessPermission = (res) => {\n this.channelsUserSubject.next([])\n\n /* Please remove this ASAP - Needs *channels* array in user object ALWAYS */\n /* if (UserRoleType.SELLER == res.type as UserRoleType) return true */\n\n /* No authorized channels */\n if (res.channels?.length == 0) {\n return false\n }\n /* Some authorized channel(s) including current channel */\n if (res.channels.find(userchannel => userchannel.code === this.channel.code)) {\n /* Multiple authorized channels including current channel */\n if (res.channels?.length > 1 && this.activeChannelChange)\n this.channelsUserSubject.next(res.channels)\n return true\n }\n /* One authorized channel not including current channel */\n if (res.channels?.length == 1 && this.activeChannelChange) {\n delete res.password\n this.channelAccess(res.channels[0], res)\n return true\n }\n /* Multiple authorized channels not including current channel */\n if (this.activeChannelChange) {\n this.channelsUserSubject.next(res.channels)\n return true\n }\n return false\n }\n\n channelAccess = (channel, user = null) => {\n if (window.location.hostname != channel.hostname) {\n let encoded = btoa(JSON.stringify(user != null ? user : this.user))\n window.location.replace(`${window.location.protocol}//${channel.hostname}/auth/redirect/${encoded}`)\n } else {\n this.constants.modifyChannelConfig(channel)\n window.location.reload()\n }\n }\n\n /**\n * @desc Devuelve una promesa\n * @param user Objeto que contiene username y password \n */\n doLogin = (user: { username: string, password: string }) => {\n this.loggingInSubject.next(true);\n user = { ...user, ...this.constants.loginExtraData() };\n return this.connection.post(this.tokenApi(), user).pipe(\n map(res => this.doLoginUser(res)),\n mapTo('ok'),\n catchError(err => {\n this.loggingInSubject.next(false);\n return of(err.toString());\n })\n ).toPromise();\n }\n\n getUserProfile(): Observable<User> {\n return (this.user && Observable.of(this.user)) || this.getCurrentUser();\n }\n\n getUserProfileAsUser(): User {\n return this.user || this.getCurrentUserAsUser();\n }\n\n private getCurrentUserAsUser(): User {\n this.user = new User();\n if (!this.user.loadFromStorage()) {\n this.user = null\n }\n else if (this.user?.channels.find(userchannel => userchannel?.code === this.constants.getChannel())) {\n return this.user;\n } else {\n this.logout()\n }\n return this.user;\n }\n\n private getCurrentUser(): Observable<User> {\n this.user = new User();\n if (!this.user.loadFromStorage()) {\n this.user = null\n }\n return Observable.of(this.user);\n }\n\n signUp = (data) => this.connection.post(this.registerApi(), data);\n\n isAuthenticated(): boolean {\n if (this.isTokenExpired()) {\n this.doLogoutUser()\n }\n this.getCurrentUserAsUser()\n this.userInSubject.next(this.user);\n return this.getToken() && !this.isTokenExpired() && this.user != null;\n }\n\n confirmAccount = (token: string) =>\n this.connection.get(this.confirmAccountApi(token));\n\n passwordReset = (new_password, token) => {\n const data = { password: { first: new_password, second: new_password } };\n return this.connection.put(this.resetPasswordApi(token), data);\n }\n\n recoverPassword = (email: string) =>\n this.connection.put(this.recoverPasswordApi(), { email });\n\n /* TOKEN */\n\n logout() {\n this.doLogoutUser();\n }\n\n refreshToken() {\n let data = { ...this.constants.loginExtraData(), refresh_token: this.getRefreshToken() }\n return this.connection.post(this.tokenApi(), data).pipe(map(\n res => this.doLoginUser(res)\n ))\n }\n\n getToken() {\n return localStorage.getItem(this.JWT_TOKEN);\n }\n\n isTokenExpired = () => {\n const fecha_expiracion = this.getExpiratesAt();\n const result = moment() >= moment(fecha_expiracion);\n return result;\n }\n\n getExpiratesAt = () => localStorage.getItem(this.EXPIRATES_IN);\n\n public doLoginUser(tokens) {\n this.user = new User()\n this.user.initilized(tokens)\n this.forceChannelsForSeller(tokens)\n this.user.persistInStorage()\n localStorage.setItem(this.EXPIRATES_IN, moment(tokens.expires_in).add(1, 'h').format());\n localStorage.setItem(this.REFRESH_TOKEN, moment(tokens.expires_in).add(1, 'h').format());\n localStorage.setItem(this.JWT_TOKEN, tokens.token);\n localStorage.setItem(this.MAIL, tokens.username);\n this.userInSubject.next(this.user);\n this.loggedInSubject.next(true);\n this.loggingInSubject.next(false);\n }\n\n public doLogoutUser() {\n this.user = null\n localStorage.removeItem(this.USER);\n localStorage.removeItem(this.EXPIRATES_IN);\n localStorage.removeItem(this.JWT_TOKEN);\n localStorage.removeItem(this.REFRESH_TOKEN);\n localStorage.removeItem('cart_token');\n localStorage.removeItem(this.MAIL);\n localStorage.removeItem(this.CHANNEL);\n localStorage.removeItem(this.LOCALE);\n localStorage.removeItem(this.CUSTOMER);\n localStorage.removeItem('MASTER_CHANNEL');\n this.loggedInSubject.next(false);\n this.userInSubject.next(this.user);\n this.channelsUserSubject.next([])\n }\n\n private getRefreshToken() {\n return localStorage.getItem(this.REFRESH_TOKEN);\n }\n\n hasToRefresh = () => this.getRefreshToken();\n\n signUpWholesaler = (data) => this.connection.post(this.registerWholesalerApi(), data);\n\n getCountriesData = async () =>\n this.connection.get(this.countriesApi()).pipe(map(res => res._embedded.items)).toPromise();\n\n public setActiveChannelChange = (activelyChangeChannelsOnLogin: boolean) => this.activeChannelChange = activelyChangeChannelsOnLogin\n\n private isAllowedRole = (allowedRoles: UserRoleType[], role: string) => {\n return allowedRoles.length\n ? allowedRoles.includes(role as UserRoleType)\n : true\n }\n\n /* Please remove this ASAP - Needs *channels* array in user object ALWAYS */\n private forceChannelsForSeller = tokens => {\n if (UserRoleType.SELLER == tokens.type as UserRoleType)\n this.channels?.length\n ? this.user.setChannels(...this.channels)\n : this.user.setChannels(this.channel)\n }\n\n public setCustomer = customer => {\n /* this.customerSubject.next(customer) */\n this.customer = customer\n localStorage.setItem(this.CUSTOMER, JSON.stringify(customer))\n this.injector.get(CartService).clearAndResetCustomerCart()\n }\n\n /* public getCustomer = () => Observable.of(JSON.parse(localStorage.getItem(this.CUSTOMER))) */\n\n public getCustomer = () => {\n /* this.customerSubject.next(JSON.parse(localStorage.getItem(this.CUSTOMER)))\n return this.customer */\n return this.customer || JSON.parse(localStorage.getItem(this.CUSTOMER))\n }\n\n public setHomeResolver = resolverFunction => this.homeResolver = resolverFunction\n\n public getHomeResolver = () => this.homeResolver\n\n public isAbleToBuy = (): boolean => !this.getUserProfileAsUser()?.isSeller() || !!this.getCustomer()\n\n}","import { Injectable } from '@angular/core';\r\nimport { Product } from '../interfaces/product';\r\nimport { CartItem } from '../interfaces/cart-item';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { ConnectionService } from '../api/connection.service';\r\nimport { Constants } from '../core.consts';\r\nimport { AuthService } from './auth.service';\r\nimport { ToastService } from '../utils/toast.service';\r\nimport { CouponI } from '../interfaces/coupon';\r\nimport { OrderUtilityService } from '../utils/order-util.service';\r\nimport { CheckoutData } from '../interfaces/checkout-data';\r\nimport { CartAffordable } from '../interfaces/cart/cart-affordable';\r\nimport { ChannelConfigService } from './channel-config.service';\r\nimport { AnalyticsService } from '../../public-api';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CartService {\r\n private cartItemsSubject: BehaviorSubject<CartItem[]> = new BehaviorSubject([]);\r\n private couponSubject: BehaviorSubject<any> = new BehaviorSubject(null);\r\n private cartSubject: BehaviorSubject<any> = new BehaviorSubject(null);\r\n private requestInProcess = new BehaviorSubject(false);\r\n private promotionsSubject: BehaviorSubject<CheckoutData[]> = new BehaviorSubject([]);\r\n\r\n private items = [];\r\n private count: number = 0;\r\n private locale = \"\";\r\n private logged_in = false;\r\n private have_to_update = true;\r\n public channelConfig: any = {};\r\n private cart_baseUrl = 'shop-api/' + this.consts.getChannel() + '/carts';\r\n\r\n public cartItemsApi = () => this.cart_baseUrl + '?locale=' + this.consts.getLocale();\r\n public addItemApi = () => this.cart_baseUrl + '/' + this.cart_token + '/items'+ '?locale=' + this.consts.getLocale();\r\n public addAllItemsApi = () => this.cart_baseUrl + '/' + this.cart_token + '/multiple-items'+ '?locale=' + this.consts.getLocale();\r\n public updateItemQuantityApi = (item_id) => this.cart_baseUrl + '/' + this.cart_token + '/items/' + item_id+ '?locale=' + this.consts.getLocale();\r\n public deleteItemApi = (item_id) => this.cart_baseUrl + '/' + this.cart_token + '/items/' + item_id + '?locale=' + this.consts.getLocale();\r\n public couponApi = () => this.cart_baseUrl + '/' + this.cart_token + '/coupon';\r\n\r\n public cart_token;\r\n public cartItems = this.cartItemsSubject.asObservable().pipe(map(items => this.switchPriceInCartItem(items)))\r\n public coupon = this.couponSubject.asObservable();\r\n public loading = this.requestInProcess.asObservable();\r\n public cart = this.cartSubject.asObservable();\r\n public promotions = this.promotionsSubject.asObservable();\r\n\r\n constructor(private connection: ConnectionService, private toastrService: ToastService, private consts: Constants,\r\n private authService: AuthService, private orderUtils: OrderUtilityService, private analyticsService: AnalyticsService,\r\n private channelConfigService: ChannelConfigService) {\r\n\r\n this.requestInProcess.next(true);\r\n this.items = JSON.parse(localStorage.getItem('cart')) || [];\r\n this.cart_token = localStorage.getItem('cart_token') || null;\r\n this.authService.loggedIn.subscribe(res => this.getCart());\r\n this.channelConfigService.channelConfig$.subscribe(res => this.channelConfig = res);\r\n }\r\n\r\n\r\n private getCart = async () =>\r\n this.connection.post(this.cartItemsApi(), ((this.cart_token && this.items.length >= 1) && { token: this.cart_token })).subscribe(\r\n res => this.initializeCart(res)\r\n )\r\n\r\n private getCartByToken = async () =>\r\n this.connection.post(this.cartItemsApi(), ((this.cart_token) && { token: this.cart_token })).subscribe(\r\n res => this.initializeCart(res)\r\n )\r\n\r\n private getCartByCustomer = async () =>\r\n this.connection.post(this.cartItemsApi()).subscribe(\r\n res => this.initializeCart(res)\r\n )\r\n\r\n /**\r\n * @private\r\n * CART CRUD SERVER'S SYNCRONIZED\r\n */\r\n\r\n private initializeCart = (response) => {\r\n this.cart_token = response.tokenValue;\r\n localStorage.setItem('cart_token', this.cart_token);\r\n this.locale = response.locale;\r\n /* let localeFromStorage = localStorage.getItem('LOCALE')\r\n console.log(localeFromStorage)\r\n this.locale = localeFromStorage ? localeFromStorage : response.locale;\r\n response.locale = this.locale */\r\n this.updateCartObj(response, false);\r\n this.updateCartItems(this.transformItems(response.items));\r\n this.requestInProcess.next(false);\r\n return true;\r\n }\r\n\r\n private switchPriceInCartItem = (items: CartItem[]) => {\r\n //return items;\r\n return items.map(\r\n item => {\r\n if (item.product) {\r\n item.product.price = item.product.variants[0].saleprice ? item.product.variants[0].saleprice : item.product.variants[0].price\r\n }\r\n return item\r\n }\r\n )\r\n }\r\n\r\n private stepCart = (res) => {\r\n res.items.length > 0 && res.items.forEach(\r\n item => !this.isItemInLocal(item.id) && this.deleteCartItem(item, false)\r\n );\r\n this.addAllToCart(\r\n this.items.filter(\r\n item => !res.items.some(external_item => external_item.id == item.item_id)\r\n )\r\n );\r\n }\r\n\r\n private updateCartItems = (items) => {\r\n this.items = items;\r\n this.count = items.length;\r\n this.cartItemsSubject.next(this.items);\r\n this.updateLocalCart();\r\n this.requestInProcess.next(false);\r\n }\r\n\r\n private updateCartItemQuantity = (variant_id, quantity) => {\r\n let newQuantity = this.items.find(item => item.variant_id == variant_id).quantity = quantity;\r\n this.cartItemsSubject.next(this.items);\r\n this.requestInProcess.next(false);\r\n this.updateLocalCart();\r\n this.toastrService.show('product-updated', {quantity:newQuantity});\r\n }\r\n\r\n private appendToCart = (cart) => {\r\n this.updateCartObj(cart);\r\n this.items = this.transformItems(cart.items);\r\n this.count = this.items.length;\r\n this.requestInProcess.next(false);\r\n this.updateLocalCart();\r\n this.toastrService.show('product-added');\r\n this.cartItemsSubject.next(this.items);\r\n }\r\n\r\n private removeCartItem = (cart, product, toast = true) => {\r\n this.updateCartObj(cart, false);\r\n this.items.splice(this.items.findIndex(item => item.item_id == product.item_id), 1);\r\n this.cartItemsSubject.next(this.items);\r\n toast && this.requestInProcess.next(false);\r\n toast && this.toastrService.show('product-removed');\r\n this.updateLocalCart();\r\n // this.googleAnalytics.removeFromCart(product);\r\n this.analyticsService.callEvent('remove_from_cart', { ...product, currency: this.consts.currency.code })\r\n }\r\n\r\n private addIfAllreadyExists = (product, variant_id, quantityAdd = 1) =>\r\n this.items.find((item, index) => {\r\n if (item.product.id == product.id && item.variant_id == variant_id) {\r\n this.updateItemQuantity(item, this.findItem(product.id).quantity + quantityAdd);\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n private updateLocalCart = () => {\r\n localStorage.setItem('cart', JSON.stringify(this.items));\r\n }\r\n\r\n private resetCart = (next?) => {\r\n this.items = [];\r\n this.cartSubject.next(null);\r\n this.cart_token = null;\r\n this.cartItemsSubject.next([]);\r\n this.count = 0;\r\n localStorage.setItem('cart', \"[]\");\r\n localStorage.removeItem('cart_token');\r\n next && next();\r\n }\r\n\r\n private updateCartObj = (cart, emitEvent = true): boolean => {\r\n this.cartSubject.next(cart);\r\n emitEvent && this.analyticsService.callEvent('add_to_cart', cart);\r\n this.promotionsSubject.next(this.orderUtils.getPromotions(cart, true));\r\n\r\n cart.couponCode\r\n ? this.formatCoupon(cart)\r\n : this.couponSubject.next(null);\r\n return true;\r\n }\r\n\r\n private isItemInLocal = (item_id) => this.items.some(item => item.item_id == item_id);\r\n\r\n /**\r\n * @public\r\n * CART CRUD\r\n */\r\n\r\n addToCart = (product: Product, quantity: number, variant_id) => {\r\n if (!this.authService.isAbleToBuy()) {\r\n this.toastrService.show('must-select-customer')\r\n return\r\n }\r\n\r\n this.requestInProcess.next(true);\r\n let added = this.addIfAllreadyExists(product, variant_id, quantity);\r\n !added && this.connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variant_id })\r\n .subscribe(\r\n res => this.appendToCart(res),\r\n err => this.handleError(err)\r\n );\r\n }\r\n\r\n addToCartPromise = async (product: Product, quantity: number, variant_id) => {\r\n if (!this.authService.isAbleToBuy()) {\r\n this.toastrService.show('must-select-customer')\r\n return\r\n }\r\n\r\n this.requestInProcess.next(true);\r\n let added = this.addIfAllreadyExists(product, variant_id, quantity);\r\n if (!added) {\r\n let result = await (this.connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variant_id }).toPromise());\r\n if (!result || result.error) this.handleError(result.error);\r\n else {\r\n this.appendToCart(result);\r\n return { error: false }\r\n }\r\n }\r\n return { error: true }\r\n }\r\n\r\n\r\n addAllToCart = (items: any[]) => {\r\n if (!this.authService.isAbleToBuy()) {\r\n this.toastrService.show('must-select-customer')\r\n return\r\n }\r\n\r\n this.requestInProcess.next(true);\r\n\r\n const params = { items: this.mergeItemsAddAllToCart(items) };\r\n\r\n this.connection.post(this.addAllItemsApi(), params)\r\n .toPromise().then(\r\n res => {\r\n this.updateCartObj(res.cart) && this.updateCartItems(this.transformItems(res.cart.items));\r\n res.cart_response.status == 'success' && this.toastrService.show('products-added');\r\n },\r\n err => {\r\n this.handleError(err);\r\n }\r\n ).catch(err => {\r\n this.handleError(err);\r\n });\r\n }\r\n\r\n mergeItemsAddAllToCart = (items: any[]) => {\r\n let paramsMerge = []\r\n this.items.forEach(item => {\r\n let itemInterno = items.find(itemParam => itemParam.variantCode == item.variant_id)\r\n paramsMerge.push(\r\n {\r\n productCode: item.product.id,\r\n variantCode: item.variant_id,\r\n quantity: itemInterno && itemInterno.quantity || item.quantity\r\n }\r\n )\r\n })\r\n\r\n items = items.filter(itemParam => !this.items.find(item => itemParam.variantCode == item.variant_id))\r\n\r\n return [...items, ...paramsMerge]\r\n }\r\n\r\n updateItemQuantity = (item: CartItem, quantity) => {\r\n if (this.validateQuantity(item, quantity)) {\r\n this.connection.put(this.updateItemQuantityApi(this.findItemByIdVariant(item.variant_id)), { 'quantity': Number(quantity) }).subscribe(\r\n res => this.updateCartObj(res) && this.updateCartItemQuantity(item.variant_id, Number(quantity)),\r\n err => this.handleError(err)\r\n )\r\n }\r\n }\r\n\r\n\r\n validateQuantity = (item: CartItem, quantity) => {\r\n if ((this.getCountFromItemInCart(item.productCode) + quantity) > item.product.variants[0].maximumItemsQuantity) {\r\n this.toastrService.show('maximum-items-quantity', { quantity: item.product.variants[0].maximumItemsQuantity })\r\n return false\r\n }\r\n if ((this.getCountFromItemInCart(item.productCode) + quantity) < item.product.variants[0].minimumItemsQuantity) {\r\n this.toastrService.show('minimum-items-quantity', { quantity: item.product.variants[0].minimumItemsQuantity })\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n calculateStockCounts = (item: CartItem, quantity) => {\r\n if (item.product.stock < item.quantity + quantity) {\r\n // this.toastrService.show('out-of-stock');\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n deleteCartItem = (item, toast = true) => {\r\n let id_buscado = this.findItemByIdVariant(item.variant_id)\r\n this.connection.delete(this.deleteItemApi(id_buscado)).subscribe(\r\n res => this.removeCartItem(res, item, toast),\r\n err => this.handleError(err)\r\n )\r\n }\r\n\r\n clearCart() {\r\n //solucion provisaoria\r\n let items = [...this.items]\r\n while (items && items.length > 0) {\r\n this.deleteCartItem(items.pop(), false)\r\n }\r\n //this.resetCart(this.getCart);\r\n }\r\n\r\n clearAndResetCart() {\r\n this.resetCart(this.getCart);\r\n }\r\n\r\n clearAndResetCustomerCart() {\r\n console.log(\"Clearing and reseting...\")\r\n this.resetCart(this.getCartByCustomer)\r\n }\r\n\r\n handleError = (error: { error: string }) => {\r\n this.toastrService.show('operation-error-param');\r\n this.requestInProcess.next(false);\r\n }\r\n\r\n getCountFromItemInCart = (codeVariant): number => this.items.find(item => item.variant_id == codeVariant)?.quantity || 0;\r\n\r\n findItemByIdVariant = (variant_id) => this.items.find(item => item.variant_id == variant_id).item_id\r\n\r\n findItem = (product_id) => this.items.find(item => item.product.id == product_id);\r\n\r\n /** DATA FOR OTHER SERVICES */\r\n getCartToken = () => this.cart_token;\r\n\r\n getLocale = () => this.locale;\r\n\r\n getTotalAmount = (): Observable<number> =>\r\n this.cart.pipe(map((cart) => cart?.totals?.total));\r\n\r\n getCountCartItems = (): Observable<number> =>\r\n this.cartItems.pipe(map((cartItems) => cartItems?.length));\r\n\r\n getTaxesAmount = (): Observable<number> =>\r\n this.cart.pipe(map((cart) => cart?.totals?.taxes > 0 ? cart?.totals?.taxes : 0));\r\n\r\n getSubTotalAmount = (): Observable<number> =>\r\n this.cart.pipe(map((cart) => cart?.totals?.items));\r\n\r\n toDecimal = (total) => (total - Math.floor(total) == 0) ? total / 100 : total\r\n\r\n getDiscount(): Observable<number> {\r\n return this.cartItems.pipe(map((product) => {\r\n let total = this.items.reduce((prev, curr) => {\r\n return prev + curr.product.saleprice * curr.quantity;\r\n }, 0);\r\n let subtotal = this.items.reduce((prev, curr) => {\r\n return prev + curr.product.price * curr.quantity;\r\n }, 0);\r\n return subtotal - total;\r\n }));\r\n }\r\n\r\n addCoupon = async (code): Promise<any> => {\r\n try {\r\n let result = await this.connection.put(this.couponApi(), { coupon: code }).toPromise();\r\n if (result.error || result.errors) return { error: true, message: 'invalid-coupon' };\r\n this.updateCartObj(result, false);\r\n return { error: false, message: 'ok' };\r\n } catch (e) {\r\n return { error: true, message: 'invalid-coupon' };\r\n }\r\n }\r\n\r\n removeCoupon = async () => this.connection.delete(this.couponApi()).pipe(map(res => this.updateCartObj(res, false))).toPromise();\r\n\r\n formatCoupon = (cart) => {\r\n let current_coupon = this.couponSubject.value;\r\n let coupon: CouponI = { code: cart.couponCode };\r\n try {\r\n const key = Object.keys(cart.cartDiscounts)[0];\r\n coupon = {\r\n ...coupon,\r\n amount: (cart.cartDiscounts && cart.cartDiscounts[key].amount.current) || 0,\r\n name: (cart.cartDiscounts && cart.cartDiscounts[key].name) || 'no-name'\r\n };\r\n } catch (e) { }\r\n (coupon != current_coupon) && this.couponSubject.next(coupon);\r\n }\r\n\r\n changeHaveToUpdate = (value) => this.have_to_update = value;\r\n\r\n readyForCheckout = (successCallback?: Function, errorCallback?: Function): CartAffordable => {\r\n let cart = this.cartSubject.value;\r\n let items = this.cartItemsSubject.value;\r\n let result: CartAffordable = { ok: true };\r\n if (items.length < this.channelConfig.minimumQuantityPurchaseItems) {\r\n result.ok = false; result.reasons.push({ message: 'not-enought-items' })\r\n }\r\n if (cart.totals.total < this.channelConfig.minimumPurchaseAmount) {\r\n result.ok = false; result.reasons.push({ message: 'not-enought-amount' })\r\n }\r\n if (successCallback || errorCallback) {\r\n result.ok\r\n ? successCallback && successCallback()\r\n : errorCallback && errorCallback();\r\n }\r\n return result;\r\n }\r\n\r\n updateItemsOnError = (itemsWithError: any[], code: string) => {\r\n // console.log(itemsWithError);\r\n // console.log(this.items);\r\n let itemsUpdated = this.items.map(item => {\r\n let itemWithError = itemsWithError.find(failedItem => item.item_id == failedItem.id);\r\n if (itemWithError) {\r\n item.failed = true;\r\n item.error = code;\r\n }\r\n return item;\r\n })\r\n // console.log(itemsUpdated);\r\n this.updateCartItems(itemsUpdated);\r\n }\r\n\r\n loadCartByToken = async (token: string) => {\r\n this.cart_token = token\r\n let result = await this.getCartByToken()\r\n return result\r\n }\r\n\r\n /**\r\n * UTILS\r\n */\r\n\r\n transformItems = (server_item) => server_item.map(\r\n item => {\r\n item = {\r\n product: item.product,\r\n variant_id: item.product.variants[0].code,\r\n quantity: item.quantity,\r\n item_id: item.id,\r\n total: item.total\r\n }\r\n // console.log(item.product.variants[0]);\r\n // console.log(item.product.variants[0].saleprice);\r\n // console.log(item.product.variants[0].price);\r\n // console.log(item.product.variants[0].saleprice > 0 ? item.product.variants[0].seleprice : item.product.variants[0].price);\r\n // setTimeout(() => {\r\n // item.product.price = item.total / item.quantity// ? item.product.variants[0].seleprice : item.product.variants[0].price;\r\n // }, 100);\r\n return item;\r\n }\r\n )\r\n \r\n}","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { ConnectionService } from '../../api/connection.service';\nimport { CartService } from '../cart.service';\nimport { ObservableError } from '../../interfaces/observable-error.interface';\nimport { Constants } from '../../core.consts';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrdersService {\n\n private ordersSubject: BehaviorSubject<any> = new BehaviorSubject(null);\n private errorSubject: BehaviorSubject<ObservableError> = new BehaviorSubject(null);\n private selectedOrderSubject: BehaviorSubject<any> = new BehaviorSubject(null);\n\n public orders$ = this.ordersSubject.asObservable();\n public error$ = this.errorSubject.asObservable();\n public selectedOrder$ = this.selectedOrderSubject.asObservable();\n\n private loading = false;\n\n ordersListapi = () => `shop-api/${this.consts.getChannel()}/orders`;\n\n constructor(private connection: ConnectionService, private cartService: CartService, private router: Router, private consts: Constants) {\n // this.updateOrders();\n }\n\n updateOrders = () => {\n this.loading = true;\n this.connection.get(this.ordersListapi())\n .pipe(\n map(res => {\n let orders = this.mapOrdersAndAddInfo(res);\n return orders;\n })\n )\n .subscribe(\n response => {\n this.ordersSubject.next(response);\n this.loading = false;\n },\n err => {\n this.errorSubject.next({ message: 'unable-get-orders' });\n }\n )\n }\n\n mapOrdersAndAddInfo = (orders) =>\n orders.map(order => {\n order.total = order.payments.reduce((a, b) => a + b.price.current, 0);\n return order;\n })\n\n setSelectedOrder = (order: any) => this.selectedOrderSubject.next(order);\n\n findOrder = (order_number) =>\n this.ordersSubject.value ? this.getOrderByNumber(order_number) : this.waitUntilOrders(order_number, this.getOrderByNumber);\n\n getOrderByNumber = (order_number) => {\n // El dia de mañana, cuando vengan paginadas y haya que preguntarle al servidor, se cambia este metodo\n const orders = this.ordersSubject.value;\n let order = orders.find(order => order.number == order_number)\n return order;\n }\n\n waitUntilOrders = (order_number, next) => {\n this.orders$.toPromise().then(orders => {\n if (!orders) {\n if (!this.loading) this.updateOrders();\n this.waitUntilOrders(order_number, next);\n }\n this.getOrderByNumber(order_number);\n })\n }\n\n reBuy(order) {\n // this.cartService.clearCart();\n order.items.map(item => {\n this.cartService.addToCart(this.formatProduct(item.product, item.product.discount), item.quantity, item.variant_id);\n });\n this.router.navigateByUrl('/cart');\n }\n\n formatProduct(product, discount) {\n let percentaje = parseFloat('0.' + discount.toString()).toFixed(2);\n product.price = product.variants[0].price;\n product.saleprice = (product.price - (product.price * parseFloat(percentaje)));\n product.options = {};\n product.variants[0].options.forEach(option => product.options = { ...product.options, ...option });\n return product;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ShipmentDataTransformer {\n\n getData = (method, response) => {\n switch(method) {\n case 'andreani': return response;\n case 'oca': return response.newDataSet;\n }\n }\n\n getApi = (method) => {\n switch(method) {\n case 'andreani': return 'https://api.andreani.com/v1/sucursales';\n case 'oca': return 'http://webservice.oca.com.ar/oep_tracking/Oep_Track.asmx/GetCentrosImposicion';\n }\n }\n\n constructor() { }\n\n appendShipmentExtra = (contract, data) => {\n let result: any = {}\n switch(contract) {\n case 'domicilio': result = { ...data }; break;\n // case 'sucursal': result = { ...data, codigo_sucursal: data. }; break;\n // case 'local': result = { ...data, codigo_local: data. }\n }\n if (contract == 'domicilio') {\n result = { ...data }\n } else {\n result = { codigo_sucursal: data.id }\n }\n return data;\n }\n\n // Andreni\n getMethodDetail = (method, branch) => {\n let result = '';\n branch.direccion.componentesDeDireccion.forEach(component => result += (component.meta + ' ' + component.contenido + ' '));\n return result;\n }\n\n transformAndreani = (response) => {\n let result = []\n response.forEach(element => {\n let data: any = {};\n data.name = element.descripcion;\n data.label = element.descripcion;\n data.latitude = element.geocoordenadas && element.geocoordenadas.latitud;\n data.longitude = element.geocoordenadas && element.geocoordenadas.longitud;\n data.atencion = element.horarioDeAtencion;\n data.address = element.direccion.componentesDeDireccion.map(data => data.contenido).join(' ');\n data.info = 'Sucursal ' + data.name + ' - ' + data.address + ' - ' + data.atencion;\n result.push(data);\n });\n return result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Store } from '../interfaces/store';\nimport { ConnectionService } from '../api/connection.service';\nimport { Constants } from '../core.consts';\nimport { catchError } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoresService {\n\n private storesSubject = new BehaviorSubject<Store[]>([]);\n public stores = this.storesSubject.asObservable();\n\n getAllStoresApi = () => 'shop-api/' + this.consts.getChannel() + '/stores';\n\n constructor(private connection: ConnectionService, private consts: Constants) {\n this.connection.get(this.getAllStoresApi()).toPromise().then(\n res => {\n res.length && this.storesSubject.next(res);\n !res.length && this.storesSubject.next(null);\n }\n )\n }\n}","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, of, Observable, Subscription } from 'rxjs';\nimport { take, tap, map } from 'rxjs/operators';\nimport { CartService } from '../cart.service';\nimport { Constants } from '../../core.consts';\nimport { CheckoutProcessState } from '../../classes/checkout-process-state';\nimport { ShipmentDataTransformer } from '../../utils/shipment-transformer.service';\nimport { ConnectionService } from '../../api/connection.service';\nimport { StoresService } from '../stores.service';\nimport { CheckoutService } from './checkout.service';\nimport { StepService } from '../../classes/checkout/step-service';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AnalyticsService } from '../analytics.service';\n\n@Injectable()\nexport class ShipmentService extends StepService {\n\n private stateSubject = new BehaviorSubject<CheckoutProcessState>({ doing: false, ok: false, data: null });\n private methodsSubject = new BehaviorSubject<any>([]);\n private costsSubject = new BehaviorSubject<any>([]);\n private subscription: Subscription;\n \n public order;\n \n private baseApi = () => 'shop-api/' + this.consts.getChannel() + '/' + 'checkout/' + this.cartService.getCartToken();\n \n public state = this.stateSubject.asObservable();\n public methods = this.methodsSubject.asObservable();\n public costs = this.costsSubject.asObservable();\n\n\n /**\n * @param moreInfoInMethod por defecto su estado es false, si se desea que visualice información adicional de cada método de envió asignar true.\n */\n public static moreInfoInMethod = false;\n \n\n public shipmentMethodsApi = () => this.baseApi() + '/shipping';\n\n public persistShipmentApi = () => 'shop-api/' + this.consts.getChannel() + '/andreani/' + this.cartService.getCartToken() + '/ship';\n public putShipmentApi = () => this.baseApi() + '/shipping/' + this.stateSubject.getValue().data.method;\n public putContractApi = () => 'shop-api/' + this.consts.getChannel() + '/checkout/' + this.cartService.getCartToken() + '/shipping-contract';\n public calculatedCostsApi = () => 'shop-api/' + this.consts.getChannel() + '/carts/' + this.cartService.getCartToken() + '/multiple-estimated-shipping-cost';\n\n constructor(private connection: ConnectionService, private transformer: ShipmentDataTransformer, private analyticsService: AnalyticsService,\n private consts: Constants, private cartService: CartService, private storesService: StoresService, private checkoutService: CheckoutService) {\n super(checkoutService);\n }\n\n getShipmentMethods = () => {\n // this.connection.get(this.shipmentMethodsApi()).toPromise().then(\n // res => this.methodsSubject.next(this.responseToList(res))\n // ).catch(err => this.methodsSubject.next([]))\n this.connection.getErrorNotHandler(this.shipmentMethodsApi()).toPromise().then(\n res => {\n this.methodsSubject.next(this.responseToList(res))\n },\n err => {\n this.methodsSubject.next([])\n }\n ).catch(err => {\n this.methodsSubject.next([])\n })\n }\n\n setMethod = async (method) => {\n this.costsSubject.next([]);\n this.stateSubject.next({ doing: true, ok: false, data: { method } });\n this.putShipment().then(\n async res => {\n this.checkoutService.updateAsociatedData(res);\n this.order = res;\n const costs = await this.getCalculatedCosts();\n this.modifyCostsResponse(costs, this.getUserData().shippingAddress.postcode, method);\n },\n err => {\n return new Promise((resolve,reject) => reject(new Error(err.error)))\n }\n ).catch(err => console.error(err))\n }\n\n private putShipment = () => this.connection.put(this.putShipmentApi(), { method: this.stateSubject.getValue().data.method }).toPromise();\n\n getCalculatedCosts = () => this.connection.get(this.calculatedCostsApi()).toPromise();\n\n setContract = async (contract: any) => {\n const data = { ...contract, ...this.otherParamsForContract(contract) };\n return await this.connection.put(this.putContractApi(), data)\n .toPromise().then(\n order => {\n this.analyticsService.callEvent('shipping_info', order);\n return this.setStepReady(data, order)},\n err => {\n return new Promise((resolve, reject) => reject(new Error(err.error)))\n }\n ).catch(err => console.error(err))\n }\n\n ngOnDestroy() {\n this.subscription && this.subscription.unsubscribe();\n }\n\n // UTILS\n\n /**\n * @param response De api de solicitud de costos por metodo de envío seleccionado\n * @param post_code Indicado en el paso de Addressing (datos personales y de facturación)\n * @param method Metodo de envío seleccionado\n */\n modifyCostsResponse = async (response, post_code, method) => {\n response = response.multiplePrices;\n let branch_delivery = response.findIndex(submethod => submethod.name == 'branch_delivery');\n if (branch_delivery != -1) {\n response[branch_delivery].contracts = response[branch_delivery].contracts.map(contract => {\n let branch_property = contract.branch_property || {};\n let address_data = branch_property.address || {};\n return {\n contract: 'branch_delivery',\n name: contract.name,\n price: contract.price,\n ...address_data,\n ...branch_property,\n computed: (address_data.street || '') + ' N° ' + (address_data.number || '')\n };\n });\n this.costsSubject.next(response);\n }\n if (method == 'pickup_store') {\n let final_method_data = response;\n this.subscription = this.storesService.stores.subscribe(stores => {\n if (stores.length) {\n final_method_data.forEach(pickup_store => {\n pickup_store.contracts.forEach(contract => {\n const current_store = stores.find(store => store.code == contract.name);\n if (!current_store) contract.detail = 'Sin información';\n else contract.detail = current_store.name + ' - ' + current_store.address;\n return contract;\n })\n })\n this.costsSubject.next(final_method_data);\n }\n })\n } else {\n this.costsSubject.next(response);\n }\n }\n\n responseToList = (response) =>\n (response.shipments && response.shipments.length > 0) && Object.keys(response.shipments[0].methods).map(key => response.shipments[0].methods[key]);\n\n otherParamsForContract = (contract) => {\n return {\n shipping_method_contract:\n contract.shipping_method_contract\n ? contract.shipping_method_contract\n : contract.contract + '_' + contract.name,\n shipping_method_branch_code:\n contract.shipping_method_branch_code\n ? contract.shipping_method_branch_code\n : (contract.contract && contract.contract == \"branch_delivery\") ? contract.number : contract.name\n }\n }\n\n getBranchOffices = (method) => this.connection.getOutsider(this.transformer.getApi(method.toLowerCase())).toPromise();\n\n formatUnnecesaryDocument = (data) => {\n if (data.shippingAddress?.documentNumber?.length == 0) {\n data.shippingAddress.documentNumber = '00000000'\n }\n if (data.shippingAddress?.documentType?.length == 0) {\n data.shippingAddress.documentType = 'XXX'\n }\n if (data.billingAddress && data.billingAddress.documentNumber?.length == 0) {\n data.billingAddress.documentNumber = '00000000'\n }\n if (data.billingAddress && data.billingAddress.documentType?.length == 0) {\n data.billingAddress.documentType = 'XXX'\n }\n return data\n }\n}\n","import { Injectable } from '@angular/core';\nimport { OptionsOfProductListInterface } from '../interfaces/choose-options/options-of-product-list';\nimport { FilterOptionTypes } from '../interfaces/choose-options/filter-option';\n\n@Injectable()\nexport class OptionsOfProductListDataReceiverService {\n constructor() { }\n\n getData(): OptionsOfProductListInterface {\n return {\n sortOptions: [\n {\n name: 'Alphabetical order',\n value: 'name',\n type: FilterOptionTypes.oneSelect,\n selectedOption: null,\n options: [\n {\n name: 'Ascendancy',\n value: 'asc',\n selected: false,\n },\n {\n name: 'Descendant',\n value: 'desc',\n selected: false,\n }\n ]\n },\n {\n name: 'Created date',\n value: 'createdAt',\n type: FilterOptionTypes.oneSelect,\n selectedOption: null,\n options: [\n {\n name: 'Oldest first',\n value: 'asc',\n selected: false,\n },\n {\n name: 'Newest first',\n value: 'desc',\n selected: false,\n }\n ]\n },\n {\n name: 'Price',\n value: 'price',\n type: FilterOptionTypes.oneSelect,\n selectedOption: null,\n options: [\n {\n name: 'Cheapest first',\n value: 'asc',\n selected: false,\n },\n {\n name: 'Most expensive first',\n value: 'desc',\n selected: false,\n }\n ]\n },\n ],\n filterOptions: [\n {\n name: 'Vigencia',\n value: 'enabled',\n type: FilterOptionTypes.oneSelect,\n selectedOption: null,\n options: [\n {\n name: 'Habilitados',\n value: 'true',\n selected: false,\n },\n {\n name: 'Deshabilitados',\n value: 'false',\n selected: false,\n }\n ]\n }\n ],\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { AuthService } from './auth.service';\nimport { BehaviorSubject } from 'rxjs';\nimport { CheckoutProcessState } from '../classes/checkout-process-state';\n\n@Injectable()\nexport class DataformService {\n\n private stateSubject = new BehaviorSubject<CheckoutProcessState>({ doing: false, ok: false, data: null });\n\n public state = this.stateSubject.asObservable();\n public checkoutForm : FormGroup;\n\n constructor(private fb: FormBuilder, private authService: AuthService) {\n this.checkoutForm = this.fb.group({\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n email: ['', [Validators.required, Validators.email]],\n documentType: ['', [Validators.required]],\n documentNumber: ['', [Validators.required]],\n street: ['', [Validators.required, Validators.maxLength(50)]],\n countryCode: ['', Validators.required],\n city: ['', Validators.required],\n provinceName: ['', Validators.required],\n postcode: ['', Validators.required]\n });\n\n this.authService.getUserProfile().subscribe(\n res => this.checkoutForm.patchValue(res.toForm())\n )\n }\n\n isValid = () => this.checkoutForm.valid;\n\n change = () => {\n this.checkoutForm.valid ? this.stateSubject.next({ doing: false, ok: true, data: this.checkoutForm.value }) \n : this.stateSubject.next({ doing: true, ok: false, data: null })\n }\n}","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../../api/connection.service';\nimport { Constants } from '../../core.consts';\nimport { IBlock } from '../../interfaces/block';\n\nexport interface BlockInfo {\n section: string,\n blocks: IBlock[]\n}\n\n@Injectable()\nexport class BlocksRepositoryService {\n\n private data: BlockInfo[] = [];\n\n blocksAPI = (section) => 'cms/' + this.consts.getChannel() + '/blocks/section/' + section + '?locale=' + this.consts.getLocale();\n\n constructor(private consts: Constants, private connection: ConnectionService) {\n this.consts.getBlocksCacheTime() && setInterval(this.restartBlocks, this.consts.getBlocksCacheTime());\n }\n\n getBlocks = async (section) : Promise<IBlock[]> => this.hasSectionBlocks(section)?.blocks || this.connection.get(this.blocksAPI(section))\n .toPromise().then(\n res => this.appendBlock(res.items, section) && res.items,\n err => new Promise((resolve, reject) => reject()) // Va por callback error, el servicio define el valor a setear\n ).catch(err => new Promise((resolve,reject) => reject(new Error(null)))); //Queda pendiente ver como manejar el error de este lado\n\n hasSectionBlocks = (section) => this.data.find(block_info => block_info.section == section);\n\n appendBlock = (blocks : IBlock[], section) => {\n const new_block = { section, blocks };\n this.data.push(new_block);\n return true;\n }\n\n restartBlocks = () => this.data = [];\n}","import { Injectable } from '@angular/core';\nimport { Constants } from '../../core.consts';\nimport { BehaviorSubject } from 'rxjs';\nimport { ConnectionService } from '../../api/connection.service';\nimport { BlocksRepositoryService } from './blocks-repository.service';\n\n\n/**\n * @description Servicio de manejo de Bloques. Cada sección posee N bloques asociados, ordenados por posición y con tu tipo y datos correspondientes\n * (chequear interfaz de IBlock)\n */\n@Injectable()\nexport class BlocksService {\n\n private blocksSubject = new BehaviorSubject<any[]>([]);\n\n public blocks = this.blocksSubject.asObservable();\n\n blocksAPI = (section) => 'cms/' + this.consts.getChannel() + '/blocks/section/' + section + '?locale=' + this.consts.getLocale();\n contactFormResponseAPI = () => 'cms/' + this.consts.getLocale() + '/contact-form/response';\n\n constructor(private consts: Constants, private connection: ConnectionService,\n private blocksRepo: BlocksRepositoryService) { }\n\n getBlocks = (section) => {\n this.blocksRepo.getBlocks(section).then(\n res => this.blocksSubject.next(this.orderedAndModified(res)),\n err => this.blocksSubject.next(null)\n )\n }\n\n orderedAndModified = (result) => {\n let result_ordered = result.sort((a, b) => a.priority - b.priority);\n return (result_ordered.length ? result_ordered : null);\n }\n\n getBlockByCode = (code) =>\n this.blocksSubject.value && this.blocksSubject.value.find(block => block.code == code);\n\n // getBannerImage = (banner) => (this.consts.mobile() && banner.mobileImageName && banner.mobileImageName != '') ? banner.mobileImageName : banner.imageName;\n getBannerImage = (banner) =>\n (this.consts.mobile() && banner.translations[this.consts.getLocale()].mobileImageName && banner.translations[this.consts.getLocale()].mobileImageName != '')\n ? banner.translations[this.consts.getLocale()].mobileImageName\n : banner.translations[this.consts.getLocale()].imageName;\n\n getImage = (banner) => (this.consts.mediaBannerUrl() +\n (this.consts.mobile() && banner.translations[this.consts.getLocale()].mobileImageName && banner.translations[this.consts.getLocale()].mobileImageName != '')\n ? banner.translations[this.consts.getLocale()].mobileImageName\n : banner.translations[this.consts.getLocale()].imageName)\n\n formUrl = (banner) => {\n let resultado = \"/\";\n const element = (banner.redirectionType == 'attribute' ? 'attributes' : 'categories');\n try {\n let asociacion = banner[(element == 'categories' ? 'taxons' : element)];\n asociacion = asociacion.length && asociacion[0];\n if (asociacion) resultado = '/collection/' + element + '/' + (asociacion.slug || asociacion.translations[this.consts.getLocale()].slug);\n } catch (e) {\n }\n return resultado;\n }\n\n sendResponse = (response_obj) =>\n this.connection.post(this.contactFormResponseAPI(), this.prepareData(response_obj));\n\n prepareData = (obj) => {\n // Para el futuro, cuando haya que toquetear antes de mandar\n // attachmentFile\n return obj;\n }\n}","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class UtilsService {\n\n constructor() { }\n\n titleCaseWord(word: string) {\n if (!word) return word;\n return word[0].toUpperCase() + word.substr(1).toLowerCase();\n }\n}","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class PaymentUtils {\n\n constructor() {}\n\n private mp_error_codes = {\n 'pending_contingency': 'Estamos procesando el pago. En menos de 2 días hábiles te enviaremos por e-mail el resultado.',\n 'pending_review_manual': 'Estamos procesando el pago. En menos de 2 días hábiles te diremos por e-mail si se acreditó o si necesitamos más información.',\n 'cc_rejected_bad_filled_card_number': 'Revisa el número de tarjeta.',\n 'cc_rejected_bad_filled_date': \t'Revisa la fecha de vencimiento.',\n 'cc_rejected_bad_filled_other': \t'Revisa los datos.',\n 'cc_rejected_bad_filled_security_code': \t'Revisa el código de seguridad.',\n 'cc_rejected_blacklist': \t'No pudimos procesar tu pago.',\n 'cc_rejected_call_for_authorize': \t'Debes autorizar ante payment_method_id el pago de amount a Mercado Pago',\n 'cc_rejected_card_disabled': \t'Llama a payment_method_id para que active tu tarjeta. El teléfono está al dorso de tu tarjeta.',\n 'cc_rejected_card_error': \t'No pudimos procesar tu pago.',\n 'cc_rejected_duplicated_payment': \t'Ya hiciste un pago por ese valor. Si necesitas volver a pagar usa otra tarjeta u otro medio de pago.',\n 'cc_rejected_high_risk': \t'Tu pago fue rechazado. Elige otro de los medios de pago, te recomendamos con medios en efectivo.',\n 'cc_rejected_insufficient_amount': \t'Tu payment_method_id no tiene fondos suficientes.',\n 'cc_rejected_invalid_installments': \t'El metodo de pago no procesa pagos en cuotas.',\n 'cc_rejected_max_attempts': \t'Llegaste al límite de intentos permitidos. Elige otra tarjeta u otro medio de pago.',\n 'cc_rejected_other_reason': \t'No procesó el pago.'\n }\n\n getErrorMessage = (code) => this.mp_error_codes[code];\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthGuardService implements CanActivate {\n\n constructor(private auth: AuthService, private router: Router) { }\n\n canActivate(routeSnapshot: ActivatedRouteSnapshot): boolean {\n const redirectTo = routeSnapshot.data.redirectTo || '/'\n\n if (!this.auth.isAuthenticated())\n this.router.navigateByUrl(redirectTo)\n\n return this.auth.isAuthenticated()\n }\n\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AbleBuyerGuardService implements CanActivate {\n\n constructor(private auth: AuthService, private router: Router) { }\n\n canActivate(routeSnapshot: ActivatedRouteSnapshot): boolean {\n const redirectTo = routeSnapshot.data.redirectSellerTo || '/'\n\n if (!this.auth.isAbleToBuy())\n this.router.navigateByUrl(redirectTo)\n\n return this.auth.isAbleToBuy()\n }\n\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserRoleGuardService implements CanActivate {\n\n constructor(private auth: AuthService, private router: Router) { }\n\n canActivate(routeSnapshot: ActivatedRouteSnapshot): boolean {\n const redirectTo = routeSnapshot.data.redirectTo || '/'\n const authorizedRoles = routeSnapshot.data.authorizedRoles || []\n\n if (!authorizedRoles.includes(this.auth.getUserProfileAsUser()?.typeUser))\n this.router.navigateByUrl(redirectTo)\n\n return this.auth.isAuthenticated()\n }\n\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\n\n@Injectable({\n providedIn: 'root'\n })\nexport class LoggedInGuard implements CanActivate { \n \n constructor(private auth: AuthService, public router: Router) {} \n \n canActivate(): boolean {\n if (!this.auth.isAuthenticated()) {\n this.router.navigate(['/login']);\n }\n return this.auth.isAuthenticated();\n }\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate } from '@angular/router';\nimport { AuthService } from '../services/auth.service';\nimport { CheckoutService } from '../services/checkout/checkout.service';\n\n@Injectable({\n providedIn: 'root'\n })\nexport class CheckoutReadyGuard implements CanActivate { \n \n constructor(private router: Router, private checkoutService: CheckoutService) {} \n \n canActivate(): boolean {\n if (!this.checkoutService.isCheckoutReady()) {\n this.router.navigate(['/']);\n }\n return this.checkoutService.isCheckoutReady();\n }\n}","import { Injectable, Injector } from \"@angular/core\";\nimport {\n HttpEvent, HttpInterceptor, HttpHandler,\n HttpRequest, HttpErrorResponse\n} from \"@angular/common/http\";\nimport { throwError, Observable, of } from \"rxjs\";\nimport { catchError } from \"rxjs/operators\";\nimport { AuthService } from '../services/auth.service';\nimport { Constants } from \"../core.consts\";\nimport { ErrorHandlerService } from \"../services/checkout/error-handler.service\";\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n constructor(\n private injector: Injector\n ) { }\n\n intercept(\n req: HttpRequest<any>,\n next: HttpHandler,\n ): Observable<HttpEvent<any>> {\n \n if (this.injector.get(AuthService).isAuthenticated()\n && req.url.includes(this.injector.get(Constants).getUrlBase())\n && !req.url.includes('shop-api/login_check')) {\n\n let headers = {\n setHeaders: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.injector.get(AuthService).getToken()}`,\n },\n }\n\n if (req.url.includes('contact-form/response'))\n delete headers.setHeaders[\"Content-Type\"]\n\n /* if (this.injector.get(AuthService).getCustomer())\n delete headers.setHeaders[\"Authorization\"] */\n\n let authReq: HttpRequest<any> = req.clone(headers)\n \n return next.handle(authReq).pipe(catchError(catchErr => this.handleErrors(catchErr)));\n }\n return next.handle(req).pipe(catchError(catchErr => this.handleErrors(catchErr)));\n }\n\n private handleErrors(err: HttpErrorResponse): Observable<any> {\n if (err.status === 403) {\n this.injector.get(AuthService).doLogoutUser()\n return of(err);\n }\n if (err.status === 450 || err.status === 401) {\n this.injector.get(ErrorHandlerService).handlerErrorResponse(err.error)\n return of(err.error);\n }\n return throwError(err);\n }\n}\n","import { Injectable, Injector } from \"@angular/core\";\nimport {\n HttpEvent, HttpInterceptor, HttpHandler,\n HttpRequest, HttpErrorResponse, HttpHeaders, HttpClient\n} from \"@angular/common/http\";\nimport { Router } from '@angular/router';\nimport { throwError, Observable, BehaviorSubject, of } from \"rxjs\";\nimport { catchError, filter, take, switchMap } from \"rxjs/operators\";\nimport { AuthService } from '../services/auth.service';\nimport { Constants } from \"../core.consts\";\nimport { ErrorHandlerService } from \"../services/checkout/error-handler.service\";\nimport { BodyError } from \"../interfaces/checkout/checkout-error\";\nimport { ToastService } from \"../utils/toast.service\";\n\n@Injectable()\nexport class CustomerInterceptor implements HttpInterceptor {\n\n constructor(\n private injector: Injector\n ) { }\n\n intercept(\n req: HttpRequest<any>,\n next: HttpHandler,\n ): Observable<HttpEvent<any>> {\n\n const customer = this.injector.get(AuthService).getCustomer()\n\n if (customer) {\n\n const headers = {\n setHeaders: {\n 'customer': String(customer.id)\n }\n }\n\n let authReq: HttpRequest<any> = req.clone(headers)\n\n return next.handle(authReq).pipe(catchError(catchErr => this.handleErrors(catchErr)));\n }\n return next.handle(req).pipe(catchError(catchErr => this.handleErrors(catchErr)));\n }\n\n private handleErrors(err: HttpErrorResponse): Observable<any> {\n if (err.status === 403) {\n this.injector.get(AuthService).doLogoutUser()\n return of(err);\n }\n if (err.status === 450 || err.status === 401) {\n this.injector.get(ErrorHandlerService).handlerErrorResponse(err.error)\n return of(err.error);\n }\n return throwError(err);\n }\n\n}","import { Injectable } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { CheckoutService } from \"../services/checkout/checkout.service\";\n\nexport class ComponentHelper {\n\n constructor() {\n this.ecOnConstruct()\n }\n\n ecOnInit = (params = {}) => {\n\n }\n\n ecOnConstruct = (params = {}) => {\n\n }\n\n hasParams = (params, searched) => params && params != null && params.find(param => param.code?.toLowerCase().includes(searched.toLowerCase()));\n\n navigateOnRouter(router : Router,url: string) {\n router.navigateByUrl(`/${url}`);\n }\n}","import { Injectable, Renderer2, Inject, RendererFactory2 } from '@angular/core';\nimport { ConnectionService } from '../api/connection.service';\nimport { Constants } from '../core.consts';\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\nimport { Parameter } from '../interfaces/parameters';\nimport { DOCUMENT } from '@angular/common';\nimport { Script } from '../interfaces/Script';\nimport { FacebookPixelService } from '../utils/analytics/facebook-pixel.service';\nimport { AnalyticEventKey } from '../interfaces/analytics/event-key.model';\nimport { GoogleAnalyticsService } from '../utils/analytics/google-analytics.service';\nimport { AnalyticsService } from './analytics.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ParametersService {\n\n private parametersSubject = new BehaviorSubject<Parameter[]>(null);\n private readyParamsSubject = new ReplaySubject<boolean>(1);\n\n public parameters = this.parametersSubject.asObservable();\n public ready$ = this.readyParamsSubject.asObservable();\n\n getAllParametersAPI = () => 'shop-api/' + (this.constants.getMasterChannel() || this.constants.getChannel()) + '/parameters';\n\n constructor(private connection: ConnectionService, private constants: Constants,\n private analyticsService: AnalyticsService) {\n this.connection.get(this.getAllParametersAPI()).toPromise().then(res => {\n this.parametersSubject.next(res);\n this.readyParamsSubject.next(true);\n })\n }\n\n insertAnalitycs = () => {\n this.parametersSubject.value\n ? this.constants.onlyIfProduction(this.initializeAnalytics, this.parametersSubject.value)\n : this.waitUntilData(this.initializeAnalytics)\n }\n\n private initializeAnalytics = (params) => {\n\n let facebook = params.find(param => param.code.includes(\"_\" + this.constants.getChannel() + \"_\") && param.code.includes('facebook') && param.code.includes('id'));\n !facebook && (facebook = params.find(param => param.code.includes('facebook') && param.code.includes('id')));\n facebook && this.analyticsService.initializeFacebook(facebook.value);\n\n let google = params.find(param => param.code.includes(\"_\" + this.constants.getChannel() + \"_\") && param.code.includes('google') && param.code.includes('id'));\n !google && (google = params.find(param => param.code.includes('google') && param.code.includes('id')));\n google && this.analyticsService.initializeGoogle(google.value);\n\n let gtm = params.find(param => param.code.includes(\"_\" + this.constants.getChannel() + \"_\") && param.code.includes('gtm') && param.code.includes('id'));\n !gtm && (gtm = params.find(param => param.code.includes('gtm') && param.code.includes('id')));\n gtm && this.analyticsService.initializeGTM(gtm.value);\n\n let metricool = params.find(param => param.code.includes(\"_\" + this.constants.getChannel() + \"_\") && param.code.includes('metricool') && param.code.includes('id'));\n !metricool && (metricool = params.find(param => param.code.includes('metricool') && param.code.includes('id')));\n metricool && this.analyticsService.initializeMetricool(metricool.value);\n\n let doppler = params.find(param => param.code.includes(\"_\" + this.constants.getChannel() + \"_\") && param.code.includes('doppler') && param.code.includes('id'));\n !doppler && (doppler = params.find(param => param.code.includes('doppler') && param.code.includes('id')));\n doppler && this.analyticsService.initializeDoppler(doppler.value);\n\n }\n\n private waitUntilData = (next) => {\n const subscription = this.parameters.subscribe(res => {\n if (res) {\n this.insertAnalitycs();\n subscription.unsubscribe();\n }\n });\n }\n\n}","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { AuthService } from '../../services/auth.service';\nimport { ParametersService } from '../../services/parameters.service';\n\n@Component({\n selector: 'app-account-ec',\n templateUrl: 'account-ec.component.html',\n styleUrls: ['account-ec.component.scss']\n})\nexport class AccountEcComponent extends ComponentHelper {\n\n public params = null\n\n constructor(protected authService: AuthService, public router: Router, public paramsService: ParametersService ) {\n super();\n this.paramsService.parameters.subscribe(p => {\n this.params = p\n })\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n logout = () => {\n this.authService.logout();\n this.router.navigateByUrl('/home');\n }\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { Banner } from '../../../interfaces/block';\nimport { BlocksService } from '../../../services/blocks/blocks.service';\n// import { OwlOptions } from 'ngx-owl-carousel-o';\n\nexport type ColumnSize = 'col-md-8' | 'col-md-4' | 'col-md-12'\n\n@Component({\n selector: 'app-block-banner-boxes-ec',\n templateUrl: './block-banner-boxes-ec.component.html',\n styleUrls: ['./block-banner-boxes-ec.component.scss']\n})\nexport class BlockBannerBoxesEcComponent extends ComponentHelper implements OnInit {\n @Input() banners: Banner[];\n @Input() meta: any;\n\n protected big_ones = [0, 3, 4, 7, 8, 11, 12, 15, 16];\n\n constructor(public blocksService: BlocksService, protected consts: Constants) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.banners = this.banners.map(\n banner => { return { ...banner, ...banner.translations[this.consts.getLocale()] } }\n );\n this.meta = { ...this.meta, ...this.meta.translations[this.consts.getLocale()] }\n this.ecOnInit()\n }\n\n getImage = (banner) => this.blocksService.getBannerImage(banner);\n\n formUrl = (banner) => this.blocksService.formUrl(banner);\n\n columnSize = (i): ColumnSize => {\n if (!this.consts.mobile()) {\n if (this.big_ones.includes(i)) return 'col-md-8';\n else if (!((i + 1) == this.banners.length)) return 'col-md-4';\n else if (((i + 1) == this.banners.length) && this.esImpar(i)) return 'col-md-4';\n }\n return 'col-md-12';\n }\n\n esImpar = (number) => (number % 2) == 1;\n \n boxesInlcudesCode = (box: string) => this.meta.code.toUpperCase().includes(box.toUpperCase())\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { BlocksService } from '../../../services/blocks/blocks.service';\n\ndeclare var $: any;\n\n@Component({\n selector: 'app-block-banner-full-ec',\n templateUrl: './block-banner-full-ec.component.html',\n styleUrls: ['./block-banner-full-ec.component.scss']\n})\nexport class BlockBannerFullEcComponent extends ComponentHelper implements OnInit {\n\n @Input() banners;\n @Input() meta: any;\n\n public options: any;\n\n constructor(public blocksService: BlocksService, protected consts: Constants, public router: Router) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.banners = this.banners.map(\n banner => { return { ...banner, ...banner.translations[this.consts.getLocale()] } }\n );\n this.ecOnInit()\n\n }\n\n getImage = (banner) => this.blocksService.getBannerImage(banner);\n\n formUrl = (banner) => this.blocksService.formUrl(banner);\n\n handlePage(page: string) {\n return this.router.url.includes(page);\n }\n\n}\n","import { Component, Input, OnInit, OnChanges } from '@angular/core';\n// import { ToastService, Constants, BlocksService } from 'ng-easycommerce';\nimport { Router } from '@angular/router';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ToastService } from '../../../utils/toast.service';\nimport { BlocksService } from '../../../services/blocks/blocks.service';\nimport { Constants } from '../../../core.consts';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-block-form-contact-ec',\n templateUrl: 'block-form-contact-ec.component.html',\n styleUrls: ['block-form-contact-ec.component.scss']\n})\nexport class BlockFormContactEcComponent extends ComponentHelper implements OnInit, OnChanges {\n\n @Input() block;\n @Input() success_message;\n @Input() redirect = true;\n @Input() subject?;\n public contact_form: FormGroup;\n public newsletter_form: FormGroup;\n protected form_data: any = new FormData();\n\n constructor(protected toastrService: ToastService, public router: Router, public consts: Constants,\n public formBuilder: FormBuilder, protected blocksService: BlocksService) {\n super();\n this.contact_form = this.formBuilder.group({\n name: ['', []],\n email: ['', Validators.required],\n telephone: ['', []],\n subject: ['', []],\n body: ['', []],\n attachment: [''],\n captcha: ['', Validators.required],\n })\n this.newsletter_form = this.formBuilder.group({\n email: ['', Validators.required],\n })\n this.ecOnConstruct()\n }\n\n sendForm = (form, success_message) => {\n if (form.valid && (form.value.email.includes('@'))) {\n const formData = new FormData();\n formData.append('mailText', form.value.body)\n formData.append('form_code', this.block.code)\n this.sendValue('name') && formData.append('name', this.contact_form.get('name').value)\n this.sendValue('email') && formData.append('email', this.contact_form.get('email').value)\n this.sendValue('telephone') && formData.append('telephone', this.contact_form.get('telephone').value)\n this.sendValue('subject') && formData.append('subject', this.contact_form.get('subject').value)\n this.sendValue('body') && formData.append('body', this.contact_form.get('body').value)\n this.sendValue('attachments') && formData.append('attachment', this.contact_form.get('attachment').value)\n this.blocksService.sendResponse(formData).toPromise().then(\n res => {\n this.contact_form.reset()\n this.toastrService.show(this.success_message || success_message);\n this.redirect && this.router.navigateByUrl('/home');\n },\n err => {\n this.toastrService.show('inquiry-error');\n }\n );\n } else {\n this.toastrService.show('invalid-form');\n }\n }\n\n uploadFile(event) {\n if (event.target.files.length > 0) {\n const file = event.target.files[0];\n this.contact_form.get('attachment').setValue(file);\n }\n }\n\n ngOnChanges() { }\n\n ngOnInit() {\n this.block = { ...this.block, ...this.block.translations[this.consts.getLocale()] };\n this.subject && this.setSubject();\n this.ecOnInit()\n }\n\n setSubject = () => {\n this.contact_form.setValue({\n ...this.contact_form.value,\n subject: this.subject\n });\n }\n\n resolved(captchaResponse: string) {\n this.form_data.catpcha = captchaResponse;\n }\n\n subscribe = () => {\n // PEDIR AL SERVICIO SE LO SUBSCRIBA, Y RESPONDA SI LO SUBSCRIBIÓ O YA ESTABA SUBSCRIPTO\n }\n\n toastNewsletterForm = (e) => {\n e.preventDefault();\n this.sendForm(this.newsletter_form, 'newsletter-thanks');\n }\n\n toastCompleteForm = (e) => {\n e.preventDefault();\n this.sendForm(this.contact_form, 'inquiry-sent');\n }\n\n\n sendValue = (key) => {\n try {\n let keysearch = key[0].toUpperCase() + key.slice(1).toLowerCase();\n return this.block && this.block['send' + keysearch] || false\n } catch (error) {\n console.error(error);\n return false\n }\n }\n\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-block-html-ec',\n templateUrl: './block-html-ec.component.html',\n styleUrls: ['./block-html-ec.component.scss'],\n})\nexport class BlockHtmlEcComponent extends ComponentHelper implements OnInit {\n\n @Input() html_content;\n\n constructor(protected sanitizer: DomSanitizer) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.html_content = this.sanitizer.bypassSecurityTrustHtml(this.html_content);\n this.ecOnInit()\n\n }\n\n}\n","import { Component, Inject, Input, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { BlockType } from '../../../interfaces/block';\nimport { BlocksService } from '../../../services/blocks/blocks.service';\nimport { ParametersService } from '../../../services/parameters.service';\nimport { ToastService } from '../../../utils/toast.service';\n\n@Component({\n selector: 'app-contact-form-news-ec',\n templateUrl: './contact-form-news-ec.component.html',\n styleUrls: ['./contact-form-news-ec.component.scss'],\n providers: [BlocksService]\n})\nexport class ContactFormNewsEcComponent extends ComponentHelper implements OnInit {\n\n @Input() block;\n @Input() complete = false;\n @Input() success_message;\n @Input() subject?;\n @Input() codeBlock = 'newsletter_block'\n\n public blocks: BlockType[] = [];\n public blockContact: any = null;\n\n public contact_form: FormGroup;\n public newsletter_form: FormGroup;\n protected form_data: any = {};\n\n constructor(protected toastrService: ToastService, public router: Router, public consts: Constants, public paramsService: ParametersService,\n public formBuilder: FormBuilder, protected blocksService: BlocksService, @Inject('env') public env ) {\n super();\n this.newsletter_form = this.formBuilder.group({\n name: ['', []],\n email: ['', Validators.required],\n telephone: ['', []],\n subject: ['', []],\n body: ['', []],\n captcha: ['', []],\n terms: ['', Validators.required],\n })\n this.ecOnConstruct()\n\n }\n\n sendForm = (form, success_message) => {\n if (form.valid && (form.value.email.includes('@'))) {\n const formData = new FormData();\n formData.append('form_code', this.block.code)\n this.sendValue('name') && formData.append('name', form.get('name').value)\n this.sendValue('email') && formData.append('email', form.get('email').value)\n this.sendValue('telephone') && formData.append('telephone', form.get('telephone').value)\n this.sendValue('subject') && formData.append('subject', form.get('subject').value)\n this.sendValue('body') && formData.append('body', form.get('body').value)\n this.sendValue('attachments') && formData.append('attachment', form.get('attachment').value)\n this.blocksService.sendResponse(formData).toPromise().then(\n res => {\n this.newsletter_form.reset()\n this.toastrService.show(this.success_message || success_message);\n },\n err => {\n this.toastrService.show('inquiry-error');\n }\n );\n } else {\n this.toastrService.show('invalid-form');\n }\n }\n\n ngOnChanges() {\n }\n\n ngOnInit() {\n if (!this.block) {\n this.blocksService.getBlocks('home') ;\n this.blocksService.blocks.pipe(filter((blocks) => (blocks && blocks.length > 0))).subscribe(blocks => {\n this.block = this.blocksService.getBlockByCode(this.codeBlock);\n if (this.block.contactForm) {\n this.block = this.block.contactForm\n }\n this.block = { ...this.block, ...this.block.translations[this.consts.getLocale()] };\n\n this.subscribeBlockNews(this.block);\n\n }) \n }else{\n this.block = { ...this.block, ...this.block.translations[this.consts.getLocale()] };\n }\n this.subject && this.setSubject();\n this.ecOnInit()\n }\n\n subscribeBlockNews = (block: any) => {\n \n }\n\n setSubject = () => {\n this.contact_form.setValue({\n ...this.contact_form.value,\n subject: this.subject\n });\n }\n\n resolved(captchaResponse: string, res) {\n this.form_data.catpcha = captchaResponse;\n }\n\n subscribe = () => {\n // PEDIR AL SERVICIO SE LO SUBSCRIBA, Y RESPONDA SI LO SUBSCRIBIÓ O YA ESTABA SUBSCRIPTO\n }\n\n toastNewsletterForm = (e) => {\n e.preventDefault();\n this.sendForm(this.newsletter_form, 'newsletter-thanks');\n }\n\n sendValue = (key) => {\n try {\n let keysearch = key[0].toUpperCase() + key.slice(1).toLowerCase();\n return this.block && this.block['send' + keysearch] || false\n } catch (error) {\n console.error(error);\n return false\n }\n }\n\n}\n","import { Component, OnInit, Input, OnChanges } from '@angular/core';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { Product } from '../../../interfaces/product';\nimport { AnalyticsService } from '../../../services/analytics.service';\n\n@Component({\n selector: 'app-block-products-ec',\n templateUrl: './block-products-ec.component.html',\n styleUrls: ['./block-products-ec.component.scss']\n})\nexport class BlockProductsEcComponent extends ComponentHelper implements OnInit, OnChanges {\n\n @Input() products: Product[];\n @Input() meta: any;\n\n public options: any;\n\n constructor(protected consts: Constants, \n private analyticsService: AnalyticsService,\n ) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.meta = { ...this.meta, ...(this.meta.translations ? this.meta.translations[this.consts.getLocale()] : { name: null }) }\n this.analyticsService.callEvent('view_item_list', { products: this.products, item_list_name: this.meta.name || 'Block Products', item_list_id: this.meta.name?.toLowerCase()?.replace(' ', '-') || 'block-products' })\n this.ecOnInit()\n }\n\n ngOnChanges(): void {\n\n }\n\n boxesInlcudesCode = (box: string) => this.meta.code.toUpperCase().includes(box.toUpperCase())\n\n\n getKeyByValue(object, value) {\n return Object.keys(object).find(key => object[key] === value);\n}\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { IBlock } from '../../interfaces/block';\nimport { BlocksService } from '../../services/blocks/blocks.service';\n\n@Component({\n selector: 'app-blocks-ec',\n templateUrl: './blocks-ec.component.html',\n styleUrls: ['./blocks-ec.component.scss'],\n providers: [BlocksService]\n})\nexport class BlocksEcComponent extends ComponentHelper implements OnInit {\n\n private strsection = null\n\n @Input()\n set section(paramsstrsection) {\n this.strsection = paramsstrsection\n this.strsection && this.blocksService.getBlocks(this.strsection);\n }\n @Input() show_loading = true;\n\n constructor(public blocksService: BlocksService, protected consts: Constants) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n // this.blocksService.getBlocks(this.section);\n this.ecOnInit()\n }\n\n getHTMLContent = (block: IBlock) => block.translations[this.consts.getLocale()].content;\n\n isNewsletter = (block) => block.code.includes('news');\n}\n","import { Component, OnInit, Input, TemplateRef } from \"@angular/core\"\nimport { Router } from \"@angular/router\";\nimport { BsModalService } from \"ngx-bootstrap/modal\";\nimport { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';\nimport { Constants } from \"../../core.consts\";\nimport { AuthService } from '../../services/auth.service';\nimport { ProductsService } from '../../services/products/products.service';\nimport { CartService } from '../../services/cart.service';\nimport { ComponentHelper } from \"../../classes/component-helper\";\nimport { ToastService } from \"../../utils/toast.service\";\n\n\n@Component({\n selector: 'app-cart-ec',\n templateUrl: './cart-ec.component.html',\n styleUrls: ['./cart-ec.component.scss']\n})\nexport class CartEcComponent extends ComponentHelper implements OnInit {\n\n public isLoggedIn = false;\n public mediaUrl = '';\n public modalRef: BsModalRef | null;\n public promotions = [];\n\n constructor(public cartService: CartService, public authService: AuthService, protected consts: Constants,\n public productsService: ProductsService, public router: Router, public modalService: BsModalService, protected toastrService: ToastService) {\n super();\n this.ecOnConstruct()\n this.isLoggedIn = this.authService.isAuthenticated();\n this.mediaUrl = this.consts.mediaUrl();\n }\n\n\n ngOnChanges() {\n this.isLoggedIn = this.authService.isAuthenticated();\n }\n\n updateLoggedIn() {\n this.isLoggedIn = this.authService.isAuthenticated();\n }\n\n ngOnInit() {\n window.scroll(0, 0);\n this.cartService.promotions.subscribe(promotions => this.promotions = promotions);\n this.ecOnInit()\n\n }\n\n toDecimal = (amount) => this.consts.toDecimal(amount);\n\n actualizarCantidad = (item, cantidad, stock) => {\n cantidad > 0 && cantidad <= stock ? this.cartService.updateItemQuantity(item, cantidad) : this.toastrService.show('out-of-stock-actually');\n }\n\n redirectCheckout = () => this.router.navigateByUrl(`/checkout`)\n\n redirectRegister = () => this.router.navigateByUrl(`/auth/login`)\n\n openModal(template: TemplateRef<any>) {\n this.modalRef = this.modalService.show(template, { class: 'modal-xl', keyboard: false });\n }\n\n redirectDetailProduct(product) {\n let variant = product.variants[0]\n let path = '/product/'\n path += variant.code\n path += variant.options.length ? \"?variant=true\" : \"\"\n this.router.navigateByUrl(path)\n }\n}\n","import { Component, OnInit, OnChanges } from '@angular/core';\nimport Stepper from 'bs-stepper';\nimport { Router } from '@angular/router';\nimport { BehaviorSubject, ReplaySubject, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { CheckoutService } from '../../services/checkout/checkout.service';\nimport { ToastService } from '../../utils/toast.service';\nimport { CartService } from '../../services/cart.service';\nimport { StepI } from '../../interfaces/step';\nimport { CheckoutData } from '../../interfaces/checkout-data';\nimport { ProductsService } from '../../services/products/products.service';\nimport { ComponentHelper } from '../../classes/component-helper';\n\n@Component({\n selector: 'app-checkout-ec',\n templateUrl: './checkout-ec.component.html',\n styleUrls: ['./checkout-ec.component.scss']\n})\nexport class CheckoutEcComponent extends ComponentHelper implements OnInit {\n\n public stepper: Stepper;\n public loadingSubject = new BehaviorSubject<boolean>(true);\n public canCheckout = false;\n public require_login = false;\n public subCan: Subscription;\n public subReady: Subscription;\n\n public loading$ = this.loadingSubject.asObservable();\n\n constructor(public checkoutService: CheckoutService, public toastrService: ToastService,\n public router: Router, public cartService: CartService, public productsService: ProductsService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.subCan = this.checkoutService.canCheckout$.pipe(take(1)).subscribe(contain_items => {\n if (contain_items) this.initializeCheckout();\n else this.canCheckout = false;\n })\n this.ecOnInit()\n\n }\n\n ngOnDestroy() {\n this.subCan?.unsubscribe()\n this.subReady?.unsubscribe()\n }\n\n initializeCheckout = () => {\n this.canCheckout = true;\n let steps: StepI[] = [];\n steps.push({ name: 'address' });\n steps.push({ name: 'shipment' });\n steps.push({ name: 'payment' });\n this.checkoutService.setSteps(steps);\n this.setStepper();\n this.loadingSubject.next(false);\n\n this.subReady = this.checkoutService.onReady$.pipe(filter( ready => ready )).subscribe(\n res => { res && this.endCheckout()}\n );\n }\n\n goBack = () => this.stepper.previous();\n\n isStepReady = (step_name) => this.checkoutService.isStepReady(step_name);\n\n endCheckout = () => {\n this.checkoutService.complete().then(\n res => res.ok && this.router.navigate(['checkout/order_success']),\n err => this.toastrService.show('operation-error')\n )\n }\n\n setStepper = () => {\n setTimeout(() => {\n if (document.querySelector('#stepper') != null) {\n this.stepper = new Stepper(document.querySelector('#stepper'), {\n linear: true,\n animation: true\n })\n }else{\n this.setStepper()\n }\n }, 1000);\n }\n\n next = () => {\n this.stepper.next()\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n };\n\n error = (error_value) => this.toastrService.show(error_value);\n\n getIcon = (data_item: CheckoutData) => {\n switch (data_item.type) {\n case 'coupon': return 'assets/images/coupon.png';\n case 'discount': return 'assets/images/discount.png';\n case 'shipment': return 'assets/images/ico-envio.png';\n case 'subtotal': return 'assets/images/products.png';\n case 'total': return 'assets/images/ico-carrito.png';\n default: return 'assets/images/ico-carrito.png';\n }\n }\n\n}\n","import { Component, EventEmitter, Output, Input, OnInit, ViewChild, TemplateRef } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { AuthService } from '../../../services/auth.service';\nimport { CartService } from '../../../services/cart.service';\nimport { AddressingService } from '../../../services/checkout/addressing.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';\nimport { Constants } from '../../../core.consts';\nimport { add } from 'ngx-bootstrap/chronos';\nimport { ParametersService } from '../../../services/parameters.service';\n\n\n@Component({\n selector: 'app-dataform-ec',\n templateUrl: 'dataform-ec.component.html',\n styleUrls: ['dataform-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class DataFormEcComponent extends ComponentHelper implements OnInit {\n\n @Input() step_id;\n protected countriesSubject = new BehaviorSubject<any[]>([]);\n protected provincesSubject = new BehaviorSubject<any[]>([]);\n protected countriesFacturacionSubject = new BehaviorSubject<any[]>([]);\n protected provincesFacturacionSubject = new BehaviorSubject<any[]>([]);\n\n public countries$ = this.countriesSubject.asObservable();\n public provinces$ = this.provincesSubject.asObservable();\n public countriesFacturacion$ = this.countriesFacturacionSubject.asObservable();\n public provincesFacturacion$ = this.provincesFacturacionSubject.asObservable();\n\n public require_login = false;\n public checkoutForm: FormGroup;\n public checkoutFormFacturacion: FormGroup;\n public loading = false;\n public form_ready = false;\n public allready_data = false;\n public addressBook = [];\n public addressBookSelected = { id: 0, notes: \"\" }\n\n public validado = false;\n public viewDataFacturacion: boolean = true;\n\n public modalRef: BsModalRef | null;\n public params: any = {};\n public selectAddres: boolean = false;\n\n constructor(public authService: AuthService,\n public fb: FormBuilder,\n public toast: ToastService,\n public addressingService: AddressingService,\n public cartService: CartService,\n private modalService: BsModalService,\n public paramsService: ParametersService,\n public consts: Constants) {\n super();\n this.ecOnConstruct()\n this.checkoutForm = this.fb.group(this.addressingService.getTypeForm().configForm.formAddres);\n this.checkoutForm.statusChanges\n .pipe(\n filter(() => { this.onFormChange(); return this.checkoutForm.valid }))\n .subscribe(() => this.onFormValid());\n\n this.checkoutFormFacturacion = this.fb.group(this.addressingService.getTypeForm().configForm.formBilling);\n this.checkoutFormFacturacion.statusChanges\n .pipe(\n filter(() => { this.onFormChange(); return this.checkoutFormFacturacion.valid }))\n .subscribe(() => this.onFormValid());\n }\n\n ngOnInit() {\n this.paramsService.parameters.subscribe(res => this.params = res);\n this.addressingService.initialize(this.step_id);\n const localEmail = localStorage.getItem('mail')\n this.authService.isAuthenticated() && this.checkoutForm.controls['email'].setValue(this.authService.getCustomer()?.email || localEmail);\n this.authService.isAuthenticated() && this.checkoutForm.get('email').disable({ onlySelf: true });\n this.addressingService.getAddressingData().then(res => {\n this.countriesSubject.next(res);\n this.countriesFacturacionSubject.next(res);\n });\n\n (this.addressingService.modeSelectAddress == 'LOAD_ADDRESS_AND_SELECTION' || this.addressingService.modeSelectAddress == 'ONLY_ADDRESS_SELECTION') \n && this.addressingService.getAddressBook().then(res => {\n this.addressBook = res && res || null\n this.addressBook == null && this.setMode('carga') }\n )\n\n this.ecOnInit()\n }\n\n showFormFacturacion = () => {\n this.viewDataFacturacion = !this.viewDataFacturacion\n this.onFormChange()\n return this.viewDataFacturacion\n }\n\n onFormValid = () => {\n }\n\n protected onFormChange() {\n if (this.checkoutForm.valid) {\n if (!this.viewDataFacturacion && this.checkoutFormFacturacion.valid) {\n this.validado = true\n return\n }\n if (this.viewDataFacturacion && this.checkoutForm.valid) {\n this.validado = true\n return\n }\n }\n this.validado = false\n }\n\n onInputChange = () => this.form_ready = false;\n\n onCountrySelected = (value) => {\n this.checkoutForm.controls['countryCode'].setValue(value == 'null' ? null : value);\n this.checkoutForm.controls['provinceCode'].setValue(null);\n this.provincesSubject.next(\n value && value != 'null' ?\n this.countriesSubject.value.find(country => country.code == value).provinces\n :\n []);\n }\n\n onCountrySelectedFacturacion = (value) => {\n this.checkoutFormFacturacion.controls['countryCode'].setValue(value == 'null' ? null : value);\n this.checkoutFormFacturacion.controls['provinceCode'].setValue(null);\n this.provincesFacturacionSubject.next(\n value && value != 'null' ?\n this.countriesFacturacionSubject.value.find(country => country.code == value).provinces\n :\n []);\n }\n\n onProvincesSelected = (value) => this.checkoutForm.controls['provinceCode'].setValue(value == 'null' ? null : value);\n\n onProvincesSelectedFacturacion = (value) => this.checkoutFormFacturacion.controls['provinceCode'].setValue(value == 'null' ? null : value);\n\n verifyValidate = (e) => {\n console.log(\"Verifying: \", e)\n this.require_login = false;\n if (e) {\n this.checkoutForm.controls['email'].setValue(e);\n this.authService.isAuthenticated() && this.checkoutForm.get('email').disable({ onlySelf: true });\n }\n this.checkoutForm.valid ? this.emitResult() : this.showError('invalid-form');\n }\n\n showError = (error_message) => { this.toast.show(error_message); return true; }\n\n protected emitResult = async () => {\n this.loading = true;\n let data: any = { shippingAddress: { ...this.checkoutForm.getRawValue(), phoneNumber: this.checkoutForm.value.phoneNumber.toString() }, notes: (this.checkoutForm.getRawValue()).notes };\n if (!this.viewDataFacturacion && this.checkoutFormFacturacion.valid) data = { ...data, notes: data.notes, billingAddress: this.checkoutFormFacturacion.getRawValue() };\n try {\n let result = await this.addressingService.setAddress(data);\n\n if (result === false)\n this.require_login = true\n\n if (result !== false && result !== undefined) {\n this.form_ready = true\n this.allready_data = true\n }\n\n } catch (e) { this.toast.show('operation-error') }\n this.loading = false;\n }\n\n openModal(template: TemplateRef<any>) {\n this.modalRef = this.modalService.show(template, { class: 'modal-lg ', keyboard: false, backdrop: 'static' });\n }\n\n setSelectAddress = (addressSelect: any) => {\n this.addressBook.map(address => address.selected = address.id === addressSelect.id)\n this.addressBookSelected.id = this.addressBook.find(address => address.selected).id || 0\n }\n\n selectAddress = async () => {\n this.loading = true;\n let addressSelected = this.addressBook.find(address => address.selected)\n if (addressSelected) {\n try {\n if (!this.addressBookSelected.id) {\n this.addressBookSelected.id = addressSelected.id || 0\n }\n const request = {\n selected: this.addressBookSelected,\n shippingAddress: addressSelected\n }\n const resultSede = await this.addressingService.setHeadquarter(request);\n if (resultSede) {\n this.form_ready = true;\n this.allready_data = true;\n } else {\n this.toast.show('operation-error')\n }\n } catch (e) { this.toast.show('operation-error') }\n } else {\n this.showError('invalid-form')\n }\n this.loading = false;\n }\n\n getMode = () => {\n switch (this.addressingService.modeSelectAddress) {\n case 'ONLY_LOAD_ADDRESS':\n return true\n case 'ONLY_ADDRESS_SELECTION':\n if (this.authService.isAuthenticated()) {\n return false\n }\n return true\n case 'LOAD_ADDRESS_AND_SELECTION':\n if (this.authService.isAuthenticated()) {\n return this.selectAddres\n }\n return true\n }\n }\n\n setMode = (mode) => this.selectAddres = mode == \"carga\"\n\n getCountry = (code) => this.addressingService.countriesList.find(paises => paises.code.toLocaleLowerCase().includes(code.toLocaleLowerCase()))?.name || \"\"\n\n getProvince = (code) => this.addressingService.provinceList.find(ct => ct.code == code)?.name || \"\"\n\n getDocumentType = (code) => this.addressingService.documentTypes.find(dt => dt.code == code)?.name || \"\"\n\n getLabelNotesParam = () => this.hasParams(this.params, 'label_notes_' + this.consts.getChannel() + '_' + this.consts.getLocale().split('_')[0])\n\n getParamByChannelAndLanguage = (nameParam) => this.hasParams(this.params, nameParam + this.consts.getChannel() + '_' + this.consts.getLocale().split('_')[0])\n\n}\n","import { Injectable } from '@angular/core';\nimport { ConnectionService } from '../../api/connection.service';\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\nimport { ToastService } from '../../utils/toast.service';\nimport { CartService } from '../cart.service';\nimport { Constants } from '../../core.consts';\nimport { map } from 'rxjs/operators';\nimport { CheckoutService } from './checkout.service';\nimport { StepService } from '../../classes/checkout/step-service';\nimport { ParametersService } from '../parameters.service';\nimport { AnalyticsService } from '../analytics.service';\n\n@Injectable()\nexport class PaymentService extends StepService {\n\n private paymentMethodsSubject = new BehaviorSubject<any[]>([]);\n public methods$ = this.paymentMethodsSubject.asObservable();\n\n baseApi = () => 'shop-api/' + this.consts.getChannel() + '/' + 'checkout/' + this.cartService.getCartToken();\n getPaymentMethodsApi = () => this.baseApi() + '/payment';\n getPreferenceApi = () => 'shop-api/' + this.consts.getChannel() + '/mercado-pago/' + this.cartService.getCartToken() + '/preference';\n getCheckoutMobbexApi = () => 'shop-api/' + this.consts.getChannel() + '/mobbex/' + this.cartService.getCartToken() + '/process-payment'\n getCheckoutBancardApi = () => 'shop-api/' + this.consts.getChannel() + '/bancard/' + this.cartService.getCartToken() + '/process-payment' //?testOrderNumber=' + this.getRandomArbitrary()\n putPaymentApi = (method) => this.baseApi() + '/payment/' + method;\n\n constructor(private connection: ConnectionService, private toastrService: ToastService, private cartService: CartService, private consts: Constants,\n private checkoutService: CheckoutService, private analyticsService: AnalyticsService) {\n super(checkoutService);\n this.getPaymentMethods();\n }\n\n getPaymentMethods = async () => this.connection.get(this.getPaymentMethodsApi()).toPromise().then(\n res => res.payments?.length && this.paymentMethodsSubject.next(Object.keys(res.payments[0].methods).map(key => res.payments[0].methods[key])),\n err => this.toastrService.show('operation-error')\n );\n\n // putPayment = (method) => this.connection.put(this.putPaymentApi(method), { method }).toPromise();\n putPayment = (method) =>\n this.connection\n .put(this.putPaymentApi(method), { method })\n .toPromise()\n .then(\n res => {\n this.analyticsService.callEvent('add_payment_info', res);\n return res\n },\n err => {\n return new Promise((resolve, reject) => reject(new Error(err.error)))\n }\n ).catch(err => console.error(err))\n\n getPreference = (shipment_data) => this.connection.post(this.getPreferenceApi(), shipment_data).pipe(map(res => (res.preference || res))).toPromise();\n\n getCheckoutMobbex = (shipment_data) => this.connection.post(this.getCheckoutMobbexApi(), shipment_data).toPromise();\n\n getCheckoutBancard = (shipment_data) => this.connection.get(this.getCheckoutBancardApi(), shipment_data).toPromise();\n\n private getRandomArbitrary = () => Math.round(Math.random() * (Number(9999999) - Number(2000003)) + Number(2000003))\n}","import { Component, Renderer2, ElementRef, ViewChild, Input, OnChanges, OnInit, Output, EventEmitter } from '@angular/core';\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CheckoutData } from '../../../interfaces/checkout-data';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\nimport { PaymentService } from '../../../services/checkout/payment.service';\nimport { ToastService } from '../../../utils/toast.service';\n\n@Component({\n selector: 'app-payment-ec',\n templateUrl: 'payment-ec.component.html',\n styleUrls: ['payment-ec.component.scss'],\n providers: [PaymentService]\n\n})\nexport class PaymentEcComponent extends ComponentHelper implements OnChanges, OnInit {\n\n @Input() step_id;\n @ViewChild('formContainer') protected mercadopago_button: ElementRef;\n protected methodDataSubject = new BehaviorSubject<any>(null);\n private loadingSubject = new BehaviorSubject<boolean>(false);\n protected preference;\n\n\n public loading_internal = false;\n public order_id;\n public error;\n public loading = true;\n public loading_internal_mp = false;\n public method_data$ = this.methodDataSubject.asObservable();\n public loading$ = this.loadingSubject.asObservable();\n public total_amount;\n\n \n constructor(protected renderer: Renderer2, protected toastr: ToastService,\n public paymentService: PaymentService, public checkoutService: CheckoutService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnChanges() { }\n\n ngOnInit() {\n this.paymentService.initialize(this.step_id);\n this.checkoutService.asociatedData$.subscribe((data: CheckoutData[]) => this.total_amount = (data.find(item => item.type == 'total')).amount)\n this.ecOnInit()\n\n }\n\n allData = () => ({\n ...this.paymentService.getUserData().shippingAddress,\n ...this.paymentService.getShipmentData(),\n });\n\n setError = (message) => {\n this.error = message;\n }\n\n emitResult = async () => {\n this.paymentService.setStepReady(this.methodDataSubject.getValue(), null).then(res => {\n this.setLoading(false)\n });\n }\n\n setLoading = (estado = true) => {\n this.loadingSubject.next(estado);\n return true;\n }\n\n verifyValidate = () => {\n this.setLoading()\n setTimeout(r => this.emitResult(), 1000);\n }\n\n setMethod = async (method) => {\n this.methodDataSubject.next(null);\n let result = await this.paymentService.putPayment(method.code);\n this.methodDataSubject.next(method);\n // this.isMP(method.code) && this.getPreference();\n }\n\n setActive(e) {\n const parent = e.target.parentElement.children;\n for (const button of parent) {\n if (button.classList.contains('active')) {\n button.classList.remove('active')\n }\n }\n e.target.classList.add(\"active\")\n }\n\n submitForm = (event) => {\n try {\n //console.log(\"EVENT\", event);\n event.preventDefault();\n return false;\n } catch (e) {\n //console.log('SE ROMOPIO EL PREVENT DEFAULT')\n }\n\n }\n\n getPK = (method) => (method.config.public_key || method.public_key);\n\n isRedirectRedsys = (code: string) => code && code.toLocaleLowerCase().includes('redsys_redirect');\n\n isRedirectCecaBank = (code: string) => code && code.toLocaleLowerCase().includes('ceca_bank_redirect');\n\n isMP = (code: string) => code && code.toLocaleLowerCase() == ('mercado_pago');\n \n isMPTarjetaDeCredito = (code: string) => code && code.toLocaleLowerCase().includes('credit');\n\n isMethodOffline = (code: string) => code && code.toLocaleLowerCase().includes('offline');\n\n isPeyPalExpress = (code: string) => code && code.toLocaleLowerCase().includes('paypal') && code.toLocaleLowerCase().includes('express');\n\n isMobbex = (code: string) => code && code.toLocaleLowerCase().includes('mobbex');\n\n isBancard = (code: string) => code && code.toLocaleLowerCase().includes('bancard');\n\n isDecidir = (code: string) => code && code.toLocaleLowerCase().includes('decidir');\n}","import { Component, Input, Output, EventEmitter, OnInit, OnChanges } from '@angular/core';\nimport { map } from 'rxjs-compat/operator/map';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\nimport { ShipmentService } from '../../../services/checkout/shipment.service';\nimport { ProductsService } from '../../../services/products/products.service';\nimport { ToastService } from '../../../utils/toast.service';\n\n@Component({\n selector: 'app-shipment-ec',\n templateUrl: './shipment-ec.component.html',\n styleUrls: ['./shipment-ec.component.scss'],\n providers: [ShipmentService]\n})\nexport class ShipmentEcComponent extends ComponentHelper implements OnInit, OnChanges {\n\n @Input() step_id;\n public methods_list: any[];\n public methodSelect: any;\n public loading_internal = false;\n public points: any[] = [];\n public selected_final;\n public costos = null\n public costs = []\n public moreInfoInMethod: any\n \n contracts = [];\n\n constructor(public shipmentService: ShipmentService, protected toastrService: ToastService,\n public productsService: ProductsService, public checkoutService: CheckoutService) {\n super();\n this.ecOnConstruct()\n }\n\n emitResult = (method_name, contract_data) => {\n contract_data = {\n ...contract_data,\n shipping_method_contract: method_name + '_' + contract_data.name,\n shipping_method_branch_code: method_name == \"branch_delivery\" ? contract_data.sucursal_id : contract_data.name,\n }\n this.shipmentService.setContract(contract_data);\n }\n\n verifyValidate = (contract, data) => {\n try {\n this.costs.forEach(cost => cost.contracts.forEach(co => co.selected = false))\n this.costs.find(cost => cost.name == contract).contracts.find(contra => contra.name == data.name).selected = true\n } catch (error) {\n console.log(\"error al buscar contrato\", error);\n }\n this.emitResult(contract, data);\n };\n\n ngOnInit() {\n this.shipmentService.initialize(this.step_id);\n this.shipmentService.getShipmentMethods();\n this.checkoutService.asociatedData$.subscribe(data => {\n this.costos = data && data.find(value => value.type == \"shipment\") || null\n })\n this.shipmentService.costs.subscribe(cos => {\n this.costs = cos.map(cost => { return { ...cost, contracts: cost.contracts.map(co => { return { ...co, selected: false } } ) } })\n if (this.costs.length && this.costs[0]?.name && this.costs[0]?.contracts[0]) {\n this.verifyValidate(this.costs[0].name, this.costs[0].contracts[0])\n }\n })\n this.moreInfoInMethod = ShipmentService.moreInfoInMethod;\n this.ecOnInit()\n\n }\n\n ngOnChanges() {\n this.shipmentService.getShipmentMethods();\n }\n\n toTraducible = (name) => name.replace(/_/g, '-');\n\n deleteUPS = (methods) => methods.filter(method => method.name != 'UPS');\n\n setMethod = (method) => {\n this.methodSelect = method;\n this.loading_internal = true;\n this.shipmentService.restartStep();\n setTimeout(() => {\n this.shipmentService.setMethod(method.code).then(res => this.loading_internal = false);\n }, 1000);\n }\n\n setActive(e) {\n const parent = e.target.parentElement.children;\n for (const button of parent) {\n if (button.classList.contains('active')) {\n button.classList.remove('active')\n }\n }\n e.target.classList.add(\"active\")\n }\n\n validName = (name) => isNaN(name);\n\n showResponse = (costs) => console.log(costs);\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { combineLatest } from 'rxjs';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CartService } from '../../../services/cart.service';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\n\n@Component({\n selector: 'app-order-success-ec',\n templateUrl: './success-ec.component.html',\n styleUrls: ['./success-ec.component.scss']\n})\nexport class SuccessEcComponent extends ComponentHelper implements OnInit {\n\n public orderDetails = {};\n public params: any = {};\n public from_mp = true;\n public payments;\n\n constructor(protected activedRoute: ActivatedRoute, protected cartService: CartService, public router: Router, protected checkoutService: CheckoutService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.checkoutService.order$.subscribe(\n res => {\n //console.log('LO QUE LLEGA EN ORDEN', res);\n this.params = {\n external_reference: res.number,\n }\n this.payments = res.payments\n }\n );\n this.ecOnInit()\n\n }\n\n}\n","import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n// import { Constants, Filter, OptionsService, Product, ProductsService } from 'ng-easycommerce';\nimport { combineLatest, Subscription } from 'rxjs';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Filter } from '../../classes/filters/Filter';\nimport { Constants } from '../../core.consts';\nimport { FilterType } from '../../interfaces/filter';\nimport { ParamsProductsWithUniqueVariant } from '../../interfaces/paramsInterfaces/paramsProductsWithUniqueVariant';\nimport { Product } from '../../interfaces/product';\nimport { AnalyticsService } from '../../services/analytics.service';\nimport { AuthService } from '../../services/auth.service';\nimport { CartService } from '../../services/cart.service';\nimport { OptionsService } from '../../services/options.service';\nimport { ParametersService } from '../../services/parameters.service';\nimport { ProductsService } from '../../services/products/products.service';\n\n\n@Component({\n selector: 'app-collection-ec',\n templateUrl: './collection-ec.component.html',\n styleUrls: ['./collection-ec.component.scss']\n})\nexport class CollectionEcComponent extends ComponentHelper implements OnInit {\n\n public filters: Filter[] = [];\n public filters_top: Filter[];\n // public optionsFilters: ['all'];\n public products: Product[];\n public finished = false;\n protected suscripcion: Subscription;\n public loading = true;\n public breadcrumb: string[] = []\n public isCollection = true;\n public params: any;\n\n @Input() type;\n @Input() value;\n @Input() productsWithUniqueVariant: boolean = false;\n @Input() optionsFilters: FilterType[] = ['all'];\n\n constructor(public productsService: ProductsService,\n protected paramsSrv: ParametersService,\n protected activeRoute: ActivatedRoute,\n protected optionsService: OptionsService,\n public authService: AuthService,\n private analyticsService: AnalyticsService,\n public cartService: CartService,\n public consts: Constants) {\n super();\n this.paramsSrv.parameters.subscribe(param => this.params = param)\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n window.scroll(0, 0);\n this.products = [];\n this.ecOnInit()\n this.getProductsAndSubscribe();\n }\n getProductsAndSubscribe(): void {\n combineLatest([this.activeRoute.params, this.optionsService.ready, this.activeRoute.queryParams]).subscribe(([params, ready, queryParams]) => {\n if (ready.readyAll) {\n let cambio = false;\n this.products = [];\n if (!params['type'] || !params['value']) {\n this.productsService.getProductsForFilter({ latest: true, limit: 10 }, this.optionsFilters, queryParams.search);\n }\n else {\n this.productsService.getProductsForFilter({ type: params.type, value: params.value }, this.optionsFilters, queryParams.search);\n cambio = true;\n this.type = params['type'];\n this.value = params['value'];\n }\n try { this.suscripcion.unsubscribe(); } catch (e) { };\n this.suscripcion = this.productsService.products$.subscribe(\n res => {\n this.loading = false;\n if (res.length == 0) {\n this.products = [];\n this.finished = this.productsService.isFinished();\n } else {\n if (this.productsWithUniqueVariant) {\n if (cambio) {\n this.products = this.productsService.getProductsWithUniqueVariant(res, this.getObjectWithVariant() );\n cambio = false;\n }\n else {\n res = this.productsService.getProductsWithUniqueVariant(res, this.getObjectWithVariant() );\n this.products.push(...res)\n };\n } else {\n if (cambio) { this.products = res; cambio = false; }\n else this.products.push(...res);\n }\n }\n this.analyticsService.callEvent('view_item_list', { products: this.products, item_list_name: 'Collection', item_list_id: 'collection' })\n });\n this.productsService.filters$.subscribe(res => {\n this.breadcrumb = this.optionsService.getBreadcrumbByFilters(res);\n this.filters = this.getSpecificFilters(res, ['category', 'attributes', 'dynamics']);\n this.filters_top = this.getSpecificFilters(res, ['sort']);\n });\n this.productsService.finished().subscribe(res => this.finished = res);\n this.loading = false;\n }\n })\n }\n\n getSpecificFilters = (filters: Filter[], types: FilterType[]): Filter[] => {\n let result = [];\n types.forEach(type => {\n let result_filter = filters.find(filter => filter.type() == type);\n if (result_filter) result.push(result_filter);\n return result;\n });\n return result;\n }\n\n onScroll(): void {\n this.loading = true;\n if (!this.productsService.isWaiting() && !this.productsService.getNext()) {\n this.finished = true;\n this.loading = false;\n }\n }\n\n areProducts = () => this.products.length > 0;\n isWaiting = () => this.productsService.isWaiting();\n setFinished = () => this.finished = true;\n\n\n changeFilter = (e) => {\n if (!this.isCollection) {\n this.isCollection = true;\n }\n }\n\n addAllProductosToCart = (products = null) => {\n let items = [];\n (products || this.products).map(prod => prod.productWithUniqueVariant.map(p => items.push(p)))\n items = items.filter(prod => prod.productToCartItem).map(prod => prod.productToCartItem )\n items?.length && this.cartService.addAllToCart(items)\n }\n\n getObjectWithVariant = (): ParamsProductsWithUniqueVariant => {\n return { type: 'color', code: 'color', defaultFirstOption: false , checkIfStock:true } \n } \n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { CartService } from '../../services/cart.service';\nimport { ToastService } from '../../utils/toast.service';\n\n@Component({\n selector: 'app-coupon-ec',\n templateUrl: 'coupon-ec.component.html',\n styleUrls: ['coupon-ec.component.scss']\n})\nexport class CouponEcComponent extends ComponentHelper {\n\n public coupon_value = \"\";\n public aplied = false;\n public loading = false;\n\n constructor(public cartService: CartService, protected toastr: ToastService) { \n super();\n this.ecOnConstruct()\n }\n \n ngOnInit() {\n this.ecOnInit()\n }\n\n addCoupon = () => {\n this.validCoupon() && this.cartService.addCoupon(this.coupon_value).then(\n res => {\n res.error ? this.invalidCoupon() : this.applyCoupon();\n }\n )\n }\n\n invalidCoupon = () => {\n this.toastr.show('invalid-coupon');\n this.coupon_value = '';\n this.loading = false;\n }\n\n applyCoupon = () => {\n this.aplied = true;\n this.loading = false;\n }\n\n setLoading = () => this.loading = true;\n\n validCoupon = (): boolean => \n this.coupon_value && /^([A-Za-z\\-0-9]*)\\w+$/.test(this.coupon_value);\n}","import { Component, OnInit } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { FAQ } from '../../interfaces/faqs';\nimport { OptionsService } from '../../services/options.service';\nimport { ToastService } from '../../utils/toast.service';\n\n@Component({\n selector: 'app-faqs-content-ec',\n templateUrl: 'faqs-content-ec.component.html',\n styleUrls: ['faqs-content-ec.component.scss']\n})\nexport class FaqsContentEcComponent extends ComponentHelper implements OnInit {\n\n public faqs : FAQ[];\n public actual_index;\n public empty_faqs = false;\n\n constructor(protected optionsService: OptionsService, protected toastr: ToastService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.optionsService.getFAQ().toPromise().then(\n faqs => {\n console.log('LAS FAQS; ', faqs);\n if (faqs.length > 0) {\n this.faqs = faqs;\n this.actual_index = 0;\n } else {\n this.empty_faqs = true;\n }\n },\n error => {\n console.log(error);\n this.toastr.show('No fue posible encontrar la sección solicitada');\n }\n ).catch(err => this.toastr.show('empty-faqs')); \n this.ecOnInit()\n\n }\n\n changeFAQ = (new_index) => this.actual_index = new_index;\n}","import { Component, Input, OnChanges, OnInit, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Constants } from '../../core.consts';\nimport { ComponentHelper } from '../../classes/component-helper';\n\n/** @dynamic */\n@Component({\n selector: 'app-filters-ec',\n templateUrl: './filters-ec.component.html',\n styleUrls: ['./filters-ec.component.scss']\n})\nexport class FiltersEcComponent extends ComponentHelper implements OnInit {\n\n @Input() setSelected;\n @Input() filters;\n public expand: boolean = true;\n\n\n constructor(protected consts: Constants, @Inject(DOCUMENT) public document: Document) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.expand = !this.consts.mobile()\n this.ecOnInit()\n\n }\n\n ngOnChanges() {\n }\n\n // close = () => {\n // this.document.getElementById(\"filtros\").classList.remove('in');\n // return true;\n // };\n\n\n close = (accordion_id) => {\n // this.consts.mobile()\n // ? this.document.getElementById(\"accordionExample\").classList.remove('show')\n // : this.document.getElementById(accordion_id).classList.remove('show');\n return true;\n };\n\n}\n","import { Component, Input, OnChanges, OnInit, Inject, EventEmitter, Output } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Constants } from '../../core.consts';\nimport { ComponentHelper } from '../../classes/component-helper';\n\n/** @dynamic */\n@Component({\n selector: 'app-filters-top-ec',\n templateUrl: './filters-top-ec.component.html',\n styleUrls: ['./filters-top-ec.component.scss']\n})\nexport class FiltersTopEcComponent extends ComponentHelper implements OnInit {\n\n // @Input() setSelected;\n // @Input() filters;\n\n // public expand: boolean = true;\n\n\n // constructor(protected consts: Constants, @Inject(DOCUMENT) public document: Document) {\n // super();\n // this.ecOnConstruct() \n // }\n\n // ngOnInit() {\n // this.expand = !this.consts.mobile()\n // this.ecOnInit()\n\n // }\n\n // ngOnChanges() {\n // }\n\n // setSelectedInternal = (filter, $event) => {\n // console.log('EL VALO RQUE VA A MANDAR: ', $event.target.value);\n // this.setSelected(filter, $event.target.value);\n // }\n\n // close = () => {\n // this.document.getElementById(\"filtros\").classList.remove('in');\n // return true;\n // };\n\n\n @Input() setSelected;\n @Input() filters;\n @Input() full = true\n @Output() changeFilter = new EventEmitter();\n\n public expand: boolean = true;\n\n constructor(private consts: Constants, @Inject(DOCUMENT) private document: Document) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.expand = !this.consts.mobile()\n this.full = !this.consts.mobile()\n this.ecOnInit()\n }\n\n ngOnChanges() {\n }\n\n mid = (filter, filterChild, value) => {\n // console.log(\"FILTER \", filter);\n // console.log(\"HIJO \", filterChild);\n // console.log(\"VALOR \", value);\n this.changeFilter.emit(value);\n return true\n }\n\n close = () => {\n //this.document.getElementById(\"filtros\").classList.remove('in');\n return true;\n };\n\n getDescripcion = (title) => {\n switch (title) {\n case 'most-expensive-first':\n return '+';\n case 'cheapest-first':\n return '-';\n case 'ascendancy':\n return 'Asc';\n case 'descendant':\n return 'Desc';\n default:\n return title;\n }\n }\n\n getStyles = (state) => {\n console.log(state);\n return (state) ? 'btn btn-secondary btn-sm active' : 'btn btn-secondary btn-sm'\n }\n\n setSeleccion = (values) => {\n //console.log('SELECIOTOTOT => ', values);\n let valores = values.split('@')\n let filter = this.filters.find(f => f.type() == valores[0]);\n let opChild = {}\n if (valores[1] == 'sub') {\n opChild = (filter.data.find(f => f.children.find(c => c.selected))).children.find(c => c.selected)\n } else {\n opChild = (filter.data.find(f => f.children.find(c => c.value == valores[2]))).children.find(c => c.value == valores[2])\n }\n this.setSelected(filter, opChild)\n }\n\n createValue = (filter, filterItem) => filter.type() + '@' + filterItem.type + '@' + filterItem.value\n\n}\n","import { Component, OnInit, Output } from '@angular/core';\nimport { EventEmitter } from 'events';\nimport { take } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { Menu } from '../../interfaces/navbar-items';\nimport { OptionsService } from '../../services/options.service';\nimport { ParametersService } from '../../services/parameters.service';\n\n@Component({\n selector: 'app-footer-ec',\n templateUrl: 'footer-ec.component.html',\n styleUrls: ['footer-ec.component.scss']\n})\n\nexport class FooterEcComponent extends ComponentHelper implements OnInit {\n public menuItemsCategories: Menu[] = [];\n public menuItemsSections: Menu[] = [];\n public menuItemsAttributes: Menu[] = [];\n\n public sections = [];\n public categories = [];\n public attributes = [];\n public mediaUrl: string;\n public params: any = {};\n\n\n constructor(protected optionsService: OptionsService, public paramsService: ParametersService, protected consts: Constants) {\n super();\n this.optionsService.sections.subscribe(res => (res.length > 0) && this.updateMenuItem(res));\n this.optionsService.categories.subscribe(res => (res.length > 0) && this.updateCategories(res));\n this.optionsService.attributes.subscribe(res => (res.length > 0) && this.updateAttributes(res));\n this.mediaUrl = this.consts.mediaUrl();\n this.ecOnConstruct()\n\n }\n\n ngOnInit() {\n this.paramsService.parameters.subscribe(res => this.params = res);\n this.ecOnInit()\n\n }\n\n protected updateCategories = (categories) => {\n this.menuItemsCategories = this.optionsService.generateMenu(categories);\n this.menuItemsCategories = this.ecUpdateMenuItemCategories(this.menuItemsCategories)\n this.categories = this.menuItemsCategories\n }\n\n protected updateAttributes = (attributes) => {\n this.menuItemsAttributes = this.optionsService.generateMenu(attributes);\n this.menuItemsAttributes = this.ecUpdateMenuItemAttributes(this.menuItemsAttributes)\n this.attributes = this.menuItemsAttributes\n }\n\n protected updateMenuItem = (elements) => {\n this.menuItemsSections = this.optionsService.generateMenu(elements);\n this.menuItemsSections = this.ecUpdateMenuItemSection(this.menuItemsSections)\n this.sections = this.menuItemsSections;\n }\n\n hasParams = (params, searched) => params && params.find(param => param.code.toLowerCase().includes(searched));\n\n mobile = () => this.consts.mobile();\n\n public addChildren = (menuItems, code, item, stackPlace = 'end') => {\n (stackPlace == 'start')\n ? menuItems.find(item => item.code?.toLowerCase().includes(code))?.children.unshift(\n { code: 'sd', name: 'sd', path: '/home', title: 'sd', ...item }\n )\n : menuItems.find(item => item.code?.toLowerCase().includes(code))?.children.push(\n { code: 'sd', name: 'sd', path: '/home', title: 'sd', ...item }\n )\n }\n\n public ecUpdateMenuItemSection = (menuItems) => {\n return menuItems\n }\n\n public ecUpdateMenuItemCategories = (menuItems) => {\n return menuItems\n }\n\n public ecUpdateMenuItemAttributes = (menuItems) => {\n return menuItems\n }\n}","import { Component, ElementRef, OnInit, Renderer2, ViewChild } from '@angular/core';\nimport { Router, Event, NavigationStart } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { Location } from '@angular/common';\nimport { THIS_EXPR } from '@angular/compiler/src/output/output_ast';\nimport { Menu } from '../../interfaces/navbar-items';\nimport { Constants } from '../../core.consts';\nimport { CartService } from '../../services/cart.service';\nimport { OptionsService } from '../../services/options.service';\nimport { ParametersService } from '../../services/parameters.service';\nimport { ProductsService } from '../../services/products/products.service';\nimport { AuthService } from '../../services/auth.service';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { TranslateService } from '@ngx-translate/core';\ndeclare var $ : any\n\n@Component({\n selector: 'app-header-ec',\n templateUrl: './header-ec.component.html',\n styleUrls: ['./header-ec.component.scss']\n})\n\nexport class HeaderEcComponent extends ComponentHelper implements OnInit {\n \n transparent: boolean;\n mediaMenu: boolean;\n\n //og elden\n public menuItems: Menu[] = [];\n public menuSections: any[] = [];\n\n public attributes: Menu[] = [];\n public categories: Menu[] = [];\n public envetUrlTransparent = [\"/home\", \"/\"];\n public searchValue: string;\n public params: any = {};\n public toggled = false;\n\n @ViewChild(\"menu\") menu_button: ElementRef;\n\n constructor(\n public router: Router,\n protected consts: Constants,\n public cartService: CartService,\n protected optionsService: OptionsService,\n public paramsService: ParametersService,\n public productsService: ProductsService,\n public authService: AuthService,\n public translate: TranslateService,\n protected renderer: Renderer2) {\n super();\n this.envetUrlTransparent = this.changeUrlTransparent(this.envetUrlTransparent)\n this.router.events.subscribe((event: Event) => {\n if (event instanceof NavigationStart) {\n const url = event.url;\n this.changeUrlNavigation(url)\n this.envetUrlTransparent.find(evUrl => evUrl === url) != undefined \n ? this.transparent = true\n : this.transparent = false\n }\n });\n // menu\n this.optionsService.categories.pipe(filter(cat => cat.length > 0)).subscribe(res => {\n this.updateMenuItem('categories', res)\n this.subscribeCategories(res)\n });\n this.optionsService.attributes.pipe(filter(atr => atr.length > 0)).subscribe(res => {\n this.updateMenuItem('attributes', res)\n this.subscribeAttributes(res)\n });\n this.ecOnConstruct()\n }\n\n \n\n\n ngOnInit(): void {\n this.paramsService.parameters.subscribe(res => this.params = res);\n const mediaQuery = window.matchMedia('(max-width: 992px)');\n this.mediaMenu = mediaQuery.matches;\n this.ecOnInit()\n }\n\n protected updateMenuItem = (title, elements) => {\n const index = this.menuItems.findIndex(element => element.title == title);\n if (index != null && index >= 0) {\n this.menuItems[index].children = this.optionsService.generateMenu(elements);\n } else {\n if (title == 'attributes') {\n this.attributes.push(...this.optionsService.generateMenu(elements))\n this.attributes = this.updateMenuItemLastCreated(this.attributes);\n }\n if (title == 'categories') {\n this.categories.push(...this.optionsService.generateMenu(elements))\n this.categories = this.updateMenuItemLastCreated(this.categories);\n } \n }\n }\n\n nagivate = (url: string) => this.router.navigateByUrl(`/${url}`);\n \n logout = () => {\n this.authService.logout();\n this.router.navigateByUrl('home');\n }\n\n setSearchValue = (event) => {\n event.key == 'Enter' && this.getCollectionSearch()\n this.searchValue = event.target.value;\n }\n\n getCollectionSearch = () => this.router.navigateByUrl('/collection?search=' + this.searchValue);\n \n\n toogleToolbar = () => {\n console.log('LLAMA AL TOOGLE')\n if (this.menu_button.nativeElement.classList.contains('d-none')) {\n this.renderer.removeClass(this.menu_button, 'd-none');\n this.renderer.addClass(this.menu_button, 'active-mobile');\n } else {\n this.renderer.addClass(this.menu_button, 'd-none');\n this.renderer.removeClass(this.menu_button, 'active-mobile');\n }\n }\n\n changeLanguage = (lang) => {\n this.consts.setLocale(lang)\n window.location.reload()\n } \n\n changeUrlTransparent = (urlTransparent = []) => urlTransparent\n\n subscribeAttributes = (arrayAttributes: Array<any>) => {\n \n }\n\n subscribeCategories = (arrayCategories: Array<any>) => {\n \n }\n\n updateMenuItemLastCreated = (arrayMenu: Menu[]) => arrayMenu\n\n changeUrlNavigation = (url: string) => { }\n \n}\n","import { Component, OnInit } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { IBlock } from '../../interfaces/block';\nimport { BlocksService } from '../../services/blocks/blocks.service';\n\n\n@Component({\n selector: 'app-home-ec',\n templateUrl: './home-ec.component.html',\n styleUrls: ['./home-ec.component.scss']\n})\nexport class HomeEcComponent extends ComponentHelper implements OnInit {\n\n constructor(public blocksService: BlocksService, protected consts: Constants) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.blocksService.getBlocks('home');\n this.ecOnInit()\n\n }\n\n getHTMLContent = (block: IBlock) => block.translations[this.consts.getLocale()].content;\n\n noNewsletter = (block) => !block.code.includes('newsletter');\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from \"@angular/core\"\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\nimport { filter } from \"rxjs/operators\";\nimport { ComponentHelper } from \"../../classes/component-helper\";\nimport { UserRoleType } from \"../../classes/user-role-type\";\nimport { AuthService } from \"../../services/auth.service\";\nimport { ToastService } from \"../../utils/toast.service\";\ndeclare var $: any;\n\n\n@Component({\n selector: 'app-login-ec',\n templateUrl: './login-ec.component.html',\n styleUrls: ['./login-ec.component.scss']\n})\nexport class LoginEcComponent extends ComponentHelper implements OnInit {\n\n @Input() redirect = true;\n @Input() title = 'login';\n @Input() buyButton = false;\n @Input() withRoles: UserRoleType[] = []\n @Output() ready = new EventEmitter();\n @Output() loggedIn = new EventEmitter();\n\n public loading = false;\n public loginForm: FormGroup;\n\n constructor(protected authService: AuthService,\n protected toastrService: ToastService,\n protected formBuilder: FormBuilder,\n public router: Router\n ) {\n super();\n this.ecOnConstruct()\n }\n\n\n ngOnInit() {\n !this.authService.isAuthenticated() && localStorage.removeItem('mail')\n this.loginForm = this.formBuilder.group({\n username: ['', Validators.required],\n password: ['', Validators.required]\n });\n this.ecOnInit()\n\n }\n\n redirectHome = () => {\n $('#collapse_login5').collapse('hide');\n this.router.navigateByUrl('/home')\n }\n\n nagivate(url: string) {\n $('#collapse_login5').collapse('hide');\n this.router.navigateByUrl(`/${url}`);\n }\n\n\n login = ($event) => {\n $event.preventDefault();\n this.loading = true;\n this.authService.login(this.loginForm.value, this.withRoles).toPromise().then(\n res => {\n $('#collapse_login5').collapse('hide');\n if (res == 'ok') {\n localStorage.setItem('mail', this.loginForm.value.username);\n $('#collapse_login5').collapse('hide');\n if (this.redirect) {\n this.redirectHome()\n } else {\n this.loggedIn.emit('true')\n this.ready.emit(this.loginForm.value.username)\n }\n }\n else {\n this.loading = false;\n }\n },\n err => {\n $('#collapse_login5').collapse('hide');\n this.loading = false;\n }\n )\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, partition } from 'rxjs';\nimport { Product } from '../../interfaces/product';\nimport { ProductsService } from './products.service';\nimport { CartService } from '../cart.service';\nimport { ToastService } from '../../utils/toast.service';\nimport { Constants } from '../../core.consts';\nimport _ from \"lodash\";\nimport { AnalyticsService } from '../analytics.service';\nimport { ParamsProductsWithUniqueVariant } from '../../interfaces/paramsInterfaces/paramsProductsWithUniqueVariant';\n\n@Injectable()\nexport class ProductDetailService {\n\n private productSubject = new BehaviorSubject<Product>({});\n private optionsSubject = new BehaviorSubject<any>({});\n private asociatedDataSubject = new BehaviorSubject<any>({ price: '', stock: 0, picture: '' });\n\n private variants = []\n\n public product$ = this.productSubject.asObservable();\n public options$ = this.optionsSubject.asObservable();\n public asociatedData$ = this.asociatedDataSubject.asObservable();\n\n constructor(\n private productsService: ProductsService, private cartService: CartService, private toastrService: ToastService,\n private constants: Constants, public analyticsService: AnalyticsService,) {\n }\n\n /**\n * @param code Identificador del producto\n * @param variant Indica si se está solicitando un producto por su codigo, o por el codigo correspondiente a una de sus variantes\n * \n * Carga el producto solicitado asyncronicamente sin respuesta \n */\n loadProduct = (code, variant: boolean = false) =>\n this.productsService.getSpecificProduct(code, variant).toPromise().then(\n res => variant ? this.initialize(res, code) : this.initialize(res),\n err => this.productSubject.next(null)\n )\n\n /**\n * @param product_id Identificador del producto\n * @param variant Indica si se está solicitando un producto por su codigo, o por el codigo correspondiente a una de sus variantes\n * @async\n * \n * A diferencia del metodo loadProduct, este retorna un valor cuando termina \n */\n getProduct = async (product_id, variant: boolean = false) => {\n let result = await this.productsService.getSpecificProduct(product_id, variant).toPromise();\n if (!result || result.error) this.productSubject.next(null);\n else variant ? this.initialize(result, product_id) : this.initialize(result);\n return true;\n }\n\n private initialize = (product, variant_code?) => {\n this.productSubject.next(product);\n this.optionsSubject.next(this.getOptions())\n variant_code ? this.updateVariants(variant_code) : this.updateVariants();\n this.variants.length && this.generateAsociatedDataFromVariants();\n //this.analyticsService.callEvent('view_item', { ...product, currency: this.constants.currency.code })\n // variant_code && this.analyticsService.callEvent('view_item', { ...product, currency: this.constants.currency.code })\n }\n\n setProduct = (product) => this.isProductValid(product) && this.initialize(product);\n\n isReady = () => this.variants.length == 1;\n\n setOption = (option_code, option_value) => {\n let options = this.optionsSubject.value;\n let option = options.find(element => element.code == option_code).values.find(value => value.name == option_value);\n option.selected = !option.selected;\n options.find(element => element.code == option_code).values.forEach(\n value => { if (value.name != option.name) value.selected = false }\n );\n this.optionsSubject.next(options);\n this.updateVariants();\n this.generateAsociatedDataFromVariants();\n }\n\n changePicture = (picture) => {\n let data = this.asociatedDataSubject.value;\n data.picture = picture;\n this.asociatedDataSubject.next(data);\n }\n\n handleError = (error) => {\n // Whathever we need to do with error\n }\n\n addToCart(quantity) {\n quantity = parseInt(quantity);\n if (!this.variants.length) {\n this.toastrService.show('cant-buy');\n return;\n }\n let product_selected = _.clone(this.productSubject.value);\n if (this.variants.length > 1 || this.variants.length == 0 || this.asociatedDataSubject.value.stock == 0) {\n this.variants.length == 0 && this.toastrService.show('no-variants');\n (this.variants.length > 1 && this.asociatedDataSubject.value.stock > 0) && this.toastrService.show('variants-left');\n (this.variants.length != 0 && this.asociatedDataSubject.value.stock == 0) && this.toastrService.show('out-of-stock');\n return;\n }\n if (!this.validateQuantity(quantity)) return;\n this.cartService.addToCart(this.makeAffordableProduct(product_selected), quantity, this.variants[0].code);\n };\n\n\n\n addToCartPromise = async (quantity) => {\n quantity = parseInt(quantity);\n if (!this.variants.length) {\n return { error: true, message: 'cant-buy' };\n }\n let product_selected = _.clone(this.productSubject.value);\n if (this.variants.length > 1 || this.variants.length == 0 || this.asociatedDataSubject.value.stock == 0) {\n if (this.variants.length == 0) return { error: true, message: 'no-variants' };\n else if (this.variants.length > 1 && this.asociatedDataSubject.value.stock > 0) return { error: true, message: 'variants-left' };\n else if (this.variants.length != 0 && this.asociatedDataSubject.value.stock == 0) return { error: true, message: 'out-of-stock' };\n }\n if (!this.validateQuantity(quantity)) return;\n let result = await this.cartService.addToCartPromise(this.makeAffordableProduct(product_selected), quantity, this.variants[0].code);\n return (result && !(result.error));\n };\n\n private getOptions = (product_received?: Product) => {\n let product = product_received || this.productSubject.value;\n let options = [];\n product.options.forEach(element => {\n options.push(this.toOption(element));\n })\n return options;\n }\n\n private toOption = (preoption) => {\n return {\n name: preoption.label,\n code: preoption.code,\n type: preoption.type,\n values: preoption.values.map(value => ({ name: value.code, description: value.name, selected: false }))\n }\n }\n\n private makeAffordableProduct(product_selected: Product) {\n product_selected.price = parseFloat(this.asociatedDataSubject.value.price);\n product_selected.saleprice = parseFloat(this.asociatedDataSubject.value.price);\n product_selected.options = {};\n this.variants[0].options.forEach(option => product_selected.options = { ...product_selected.options, ...option })\n return product_selected;\n }\n\n private updateVariants = (code?) => {\n let variants = this.productSubject.value.variants;\n if (!code) {\n this.optionsSubject.value.forEach(option => {\n option.values.forEach(value => {\n if (value.selected) {\n variants = variants.filter(variant => {\n return variant.options.some(variant_option => {\n return (option.code in variant_option && variant_option[option.code] == value.name);\n })\n })\n }\n })\n })\n } else {\n variants = variants.filter(variant => variant.code == code);\n }\n this.variants = variants;\n code && this.updateOptions();\n }\n\n private updateOptions = () => {\n let { options } = this.variants.length && this.variants[0];\n options && options.forEach(option => Object.keys(option).forEach(key => this.setOption(key, option[key])))\n }\n\n private generateAsociatedDataFromVariants = () => {\n let asociated: any = {};\n if (this.isReady()) {\n asociated.stock = this.variants[0].stock\n asociated.price = this.variants[0].price.toString()\n asociated.saleprice = this.variants[0].saleprice && this.variants[0].saleprice.toString() || undefined;\n asociated.discount = this.variants[0]?.discount || undefined;\n asociated.properties = this.variants[0].properties ? this.beautifyProperties(this.variants[0].properties) : undefined;\n // asociated.price = this.variants[0].saleprice && this.variants[0].saleprice.toString() || undefined;\n // asociated.saleprice = this.variants[0].price.toString()\n } else {\n asociated.price = this.cratePrice()\n asociated.saleprice = this.crateSalePrice()\n asociated.stock = (this.variants.map(variant => variant.stock)).reduce((a, b) => a + b)\n asociated.discount = this.crateDiscount()\n }\n\n ('images' in this.variants[0] && this.variants[0].images.length > 0)\n ? asociated.picture = this.variants[0].images[0]\n : asociated.picture = (this.asociatedDataSubject.value.picture || this.productSubject.value.picturesdefault[0]);\n\n\n asociated.maximumAmount = this.variants[0]?.maximumAmount || 0\n asociated.minimumAmount = this.variants[0]?.minimumAmount || 0\n\n asociated.maximumItemsQuantity = this.variants[0]?.stock > 0 && 'maximumItemsQuantity' in this.variants[0] ? this.variants[0]?.maximumItemsQuantity : this.variants[0]?.stock\n asociated.minimumItemsQuantity = this.variants[0]?.stock > 0 && 'minimumItemsQuantity' in this.variants[0] && this.variants[0]?.minimumItemsQuantity > 0 ? this.variants[0]?.minimumItemsQuantity : 1\n\n asociated.finalConsumer = {\n finalConsumerPrice: this.variants[0]?.final_consumer_price,\n originalFinalConsumerPrice: this.variants[0]?.original_final_consumer_price,\n }\n\n asociated.taxes = {\n taxIncluded: this.variants[0]?.taxIncluded,\n taxCategory: this.variants[0]?.taxCategory,\n }\n\n this.asociatedDataSubject.next(asociated);\n }\n\n /**\n * @description Recibe las propiedades de una variante y por cada item arma un objeto con \n * el name=clave y value=valor de ese item. \n * @param properties \n * @returns Un arreglo con las propiedades de la forma { name = ... , value = ...}\n */\n private beautifyProperties = ( properties) => {\n let beautifyData = []\n properties.forEach(prop => {\n for ( let key in prop){\n beautifyData.push({name: key, value: prop[key]})\n }\n });\n return beautifyData\n }\n\n private crateDiscount = () => {\n try {\n let all_discount = '';\n this.variants.forEach(variant => {\n variant.discount && (all_discount = all_discount + ', ' + variant.discount);\n });\n if (all_discount == '') {\n return undefined\n }\n return all_discount\n } catch (error) {\n return undefined\n }\n }\n\n private cratePrice = () => {\n let min_price = 0;\n let max_price = 0;\n let all_prices = [];\n this.variants.forEach(variant => {\n all_prices.push(variant.price);\n });\n min_price = all_prices.reduce((a, b) => Math.min(a, b));\n max_price = all_prices.reduce((a, b) => Math.max(a, b), 0);\n return min_price == max_price ? max_price.toString() : min_price + ' - ' + max_price;\n }\n\n private crateSalePrice = () => {\n let min_price = 0;\n let max_price = 0;\n let all_prices = [];\n this.variants.forEach(variant => {\n variant.saleprice && all_prices.push(variant.saleprice);\n });\n if (!all_prices.length) {\n return undefined\n }\n min_price = all_prices.reduce((a, b) => Math.min(a, b));\n max_price = all_prices.reduce((a, b) => Math.max(a, b), 0);\n return min_price == max_price ? max_price.toString() : min_price + ' - ' + max_price;\n }\n\n private inRange = (quantity, min, max) => ((quantity - min) * (quantity - max) <= 0)\n\n private validateQuantity = (quantity: number) => {\n const actualQuantity = this.cartService.getCountFromItemInCart(this.variants[0].code);\n const asociatedData = this.asociatedDataSubject.value;\n console.log('La cantidad que llego: ', quantity, ' y la cantidad actual: ', actualQuantity);\n if ((actualQuantity + quantity) > asociatedData.maximumItemsQuantity) {\n this.toastrService.show('maximum-items-quantity', { quantity: asociatedData.maximumItemsQuantity })\n return false;\n }\n if ((actualQuantity + quantity) < asociatedData.minimumItemsQuantity) {\n this.toastrService.show('minimum-items-quantity', { quantity: asociatedData.minimumItemsQuantity })\n return false;\n }\n return true\n }\n\n // Cuando haya modelos de respuesta, validamos que no se intente cargar un producto incompleto\n private isProductValid = (product: Product) => true;\n\n /**\n * \n * @param options Array de Variantes y sus valores\n * \n * @description Retorna una lista filtrada de las variantes que estan seleccionadas\n */\n private getVariantsSelected(options: any, optionsException: Array<any>): Array<Object> {\n\n let variantsSelected = [];\n options.forEach(v => {\n if (v.values && v.values.length) {\n v.values.forEach(val => {\n if (val.selected && !optionsException.find(op => op.toUpperCase() == v.code.toUpperCase())) {\n variantsSelected[v.code] = val.name;\n }\n })\n }\n });\n\n return variantsSelected;\n\n }\n\n /**\n * \n * @param options Array de Variantes y sus valores\n * @param variants Todas las variantes disponibles del producto\n * \n * @description retorna todas las variantes disponibles a seleccion y su stock\n */\n public getVariantsAvailable(options: any, variants: any, optionsException: Array<any>): any {\n\n let variantsSelected = this.getVariantsSelected(options, optionsException);\n\n let variantsAvailable = [];\n\n variants.map(v => {\n\n let aux = {};\n if (v.options && v.options.length) {\n v.options.map(op => {\n Object.assign(aux, op, { stock: v.stock });\n })\n }\n variantsAvailable.push(aux);\n })\n return variantsAvailable.filter(va => this.constants.containsAll({ ...variantsSelected }, va))\n }\n\n\n /**\n * \n * @param options Array de variantes y sus valores\n * @param code Codigo de la variante a buscar\n * @param name nombre de la variante a buscar\n * @param variants variantes del producto\n * \n * @description busca en la lista de variantes disponibles si hay de ese codigo, ese nombre y con stock \n */\n public existVariantAndHasStock(options, code, name, variants, optionsException = []): boolean {\n\n return this.getVariantsAvailable(options, variants, optionsException).find(va =>\n va.hasOwnProperty(code) && va[code] === name && va.stock > 0)\n }\n\n /**\n * \n * @param product producto el cual se quiere desdoblar por variantes por una opción.\n * @param withOption 'type' tipo de opción, code: código de la opción. 'defaultFirstOption': en caso de que no se pueda desdoblar por la opción indicada si el valor es verdadero se intentara desdoblar por la primera opción asociada al producto.\n * 'checkIfStock': en caso de que esta valor sea verdadero se realiza un control de que la variantes cuenten con stock para ser un producto desdoblado por la variante, si el valor es falso no se realiza dicho control y el producto se desdoblara con stock en 0.\n * @returns arreglo con el producto desdoblado por la variante solicitada.\n * (opción por defecto que se intenta hacer el desdoblamiento 'color', o bien si en le parámetro withOption el atributo 'defaultFirstOption' es verdadero se desdobla por la primera opción asociada al producto ) \n */\n getProductWithUniqueVariant = (product, withOption?: ParamsProductsWithUniqueVariant) => {\n return this.productsService.getProductsWithUniqueVariant([product], withOption)\n }\n\n}","import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { AnalyticsService } from '../../services/analytics.service';\nimport { CartService } from '../../services/cart.service';\nimport { OptionsService } from '../../services/options.service';\nimport { ProductDetailService } from '../../services/products/product-detail.service';\nimport { ProductsService } from '../../services/products/products.service';\nimport { ToastService } from '../../utils/toast.service';\n\n\n@Component({\n selector: 'app-product-detail-ec',\n templateUrl: './product-detail-ec.component.html',\n styleUrls: ['./product-detail-ec.component.scss'],\n providers: [ProductDetailService]\n})\nexport class ProductDetailEcComponent extends ComponentHelper implements OnInit {\n\n public product: any;\n public mediaUrl;\n public show = false;\n public quantity = 1;\n public breadcrumb = [];\n public carousel: any;\n public code = null;\n public focusImage: string = null\n public owlOptions = {}\n \n\n @ViewChild('contact') contact: ElementRef;\n\n constructor(\n public productService: ProductDetailService,\n public consts: Constants,\n protected activedRoute: ActivatedRoute,\n public cartService: CartService,\n public optionsService: OptionsService,\n public productsService: ProductsService,\n public analyticsService: AnalyticsService,\n public router: Router,\n protected toastrService: ToastService) {\n super();\n this.mediaUrl = this.consts.mediaUrl();\n this.activedRoute.params.subscribe(queryParams => {\n let variant: any = (this.activedRoute.snapshot.queryParamMap.get('variant'));\n let code = queryParams.id;\n this.productService.loadProduct(code, variant);\n this.code = queryParams.id\n })\n this.productService.product$.subscribe(res => {\n this.product = res;\n window.scroll(0, 0);\n this.breadcrumb = this.optionsService.getBreadcrumb(this.product.category);\n });\n this.productService.product$.pipe(filter(data => data && data.id && data.id != 0)).subscribe(\n (productParam) => {\n this.analyticsService.callEvent('view_item', { ...productParam, currency: this.consts.currency.code })\n this.changeImgFocus(productParam.picturesdefault[0])}\n )\n this.ecOnConstruct()\n\n }\n\n ngOnInit(): void {\n this.ecOnInit()\n }\n\n addToCart = () => {\n this.quantity > 0 && this.productService.addToCart(this.quantity);\n }\n\n addAllProductosToCart = () => {\n let items = this.product.productWithUniqueVariant?.filter(prod => prod.productToCartItem).map(prod => prod.productToCartItem)\n items?.length && this.cartService.addAllToCart(items)\n }\n\n scroll() {\n let el = this.contact.nativeElement as HTMLElement;\n el.scrollIntoView();\n }\n\n saveRef = (carousel) => {\n this.carousel = carousel;\n }\n\n plus = (stock) => this.quantity < stock ? this.quantity = this.quantity + 1 : this.toastrService.show('out-of-stock-actually');\n less = () => this.quantity > 1 ? this.quantity = this.quantity - 1 : null;\n\n showContact = () => this.show = true;\n hideContact = () => this.show = false;\n\n thereIsMoreInfo = (product: any) => {\n let result;\n if (product?.special_mark && product?.special_mark.length) {\n result = product?.special_mark?.find(special_mark => special_mark.type == 'more_info');\n }\n return result;\n }\n\n changeImgFocus = (img) => {\n this.focusImage = img\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { AuthService } from '../../services/auth.service';\nimport { ProductDetailService } from '../../services/products/product-detail.service';\n\n@Component({\n selector: 'app-product-ec',\n templateUrl: './product-ec.component.html',\n styleUrls: ['./product-ec.component.scss'],\n providers: [ProductDetailService]\n})\nexport class ProductEcComponent extends ComponentHelper implements OnInit {\n\n public quantity = 1;\n public stock = 0\n public data = null\n\n\n constructor(public consts: Constants, public router: Router,public productService: ProductDetailService,public authService: AuthService,) {\n super();\n this.ecOnConstruct()\n }\n @Input() product: any;\n\n ngOnInit(): void {\n this.productService.setProduct(this.product)\n this.productService.asociatedData$.subscribe(res => { this.data = res; this.stock = res.stock })\n this.ecOnInit()\n }\n\n canBuy = () => false;\n\n ngOnChanges() {\n }\n\n buyOrRedirect = (variant = false) => {\n let idredirect = variant && this.product.variants.find(v => v.stock > 0)?.code\n if (!idredirect) { idredirect = this.product.id; variant = false }\n else { if (idredirect.includes(\"/\")) {idredirect = this.product.id ; variant = false} }\n this.router.navigateByUrl(`/product/${idredirect}${variant ? '?variant=true':''}`)\n }\n\n plus = () => this.quantity = this.quantity + 1;\n less = () => this.quantity > 1 ? this.quantity = this.quantity - 1 : null;\n\n addToCart = () => {\n this.productService.addToCart(+this.quantity)\n }\n\n getBrandName = product => {\n if (product && product.attributes)\n return product.attributes\n .filter(attribute => attribute.code === 'marca')\n .map(attribute => attribute.children[0].name)\n }\n}\n","import { Component, OnInit, Input, SimpleChanges } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { take } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { AnalyticsService } from '../../services/analytics.service';\nimport { ProductsService } from '../../services/products/products.service';\n\n@Component({\n selector: 'app-related-products-ec',\n templateUrl: './related-products-ec.component.html',\n styleUrls: ['./related-products-ec.component.scss']\n})\nexport class RelatedProductsEcComponent extends ComponentHelper implements OnInit {\n\n public relatedProducts = [];\n @Input() product_id;\n public name = null;\n\n constructor(protected productsService: ProductsService,\n private analyticsService: AnalyticsService,\n public consts: Constants,\n public router: Router) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.load(this.product_id)\n this.ecOnInit()\n }\n\n load(product_id) {\n this.productsService.getRelatedProducts(product_id).pipe(take(1)).subscribe(\n res => {\n this.relatedProducts = res\n res.map(products => this.analyticsService.callEvent('view_item_list', { products: products.items, item_list_name: products.title || 'Related Products', item_list_id: products.title?.toLowerCase()?.replace(' ', '-') || 'related-products' }))\n },\n //res => res.items ? this.products = res.items : null\n // err => this.toastrService.show('unable-to-fetch-products')\n )\n }\n\n\n ngOnChanges(changes: SimpleChanges) {\n window.scroll({\n top: 0,\n left: 0,\n behavior: 'smooth'\n });\n this.load(changes.product_id.currentValue)\n //this.doSomething(changes.categoryId.currentValue);\n // You can also use categoryId.previousValue and \n // categoryId.firstChange for comparing old and new values\n\n }\n\n\n\n public customOptions: any = {\n loop: true,\n dots: false,\n navSpeed: 950,\n margin: 0,\n navText: ['', ''],\n nav: true,\n responsive: {\n 0: {\n items: 1,\n nav: true\n },\n 600: {\n items: 3,\n nav: true\n },\n 900: {\n items: 4,\n nav: true,\n }\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { OptionsService } from '../../services/options.service';\n\n@Component({\n selector: 'app-section-container-ec',\n templateUrl: './section-container-ec.component.html',\n styleUrls: ['./section-container-ec.component.scss']\n})\nexport class SectionContainerEcComponent extends ComponentHelper implements OnInit {\n\n public content_html: SafeHtml = \"<p>Sin información</p>\";\n public loadSection: boolean = false;\n @Input() sanitizeHtml: boolean = false\n @Input() name = null;\n\n constructor(protected activatedRoute: ActivatedRoute, protected optionsService: OptionsService,\n protected toastrService: ToastrService, protected sanitizer: DomSanitizer) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n if (this.name) {\n this.getSection(this.name)\n } else {\n this.activatedRoute.params.subscribe(\n params => {\n this.name = params.name;\n this.getSection(this.name)\n }\n );\n }\n this.ecOnInit()\n }\n\n getSection = (link: any) => {\n this.loadSection = false\n this.optionsService.getSectionContentByLink(link).toPromise().then(\n html => {\n if (html) this.content_html =\n this.sanitizeHtml\n ? html\n : this.sanitizer.bypassSecurityTrustHtml(html)\n this.loadSection = true\n }\n ,\n error => {\n console.log(error);\n this.loadSection = true\n this.content_html = \"<p>Sin información</p>\";\n this.toastrService.show('No fue posible encontrar la sección solicitada');\n }\n ).catch(error => {\n this.content_html = \"<p>Sin información</p>\"\n this.loadSection = true\n });\n }\n}","import { Component } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { StoresService } from '../../services/stores.service';\n\n@Component({\n selector: 'app-store-ec',\n templateUrl: 'stores-ec.component.html',\n styleUrls: ['stores-ec.component.scss']\n})\nexport class StoresEcComponent extends ComponentHelper {\n\n public filterStores = null\n public storesAll = null\n public exclusiveStores = null\n public imageMap = true\n public urlmap;\n public stores = [];\n public provinces = []\n\n constructor(public storesService: StoresService, public consts: Constants , protected sanitizer: DomSanitizer) {\n super();\n this.urlmap = this.sanitizer.bypassSecurityTrustResourceUrl('https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d13137.519688957545!2d-58.3888163!3d-34.5945533!3m2!1i1024!2i768!4f13.1!5e0!3m2!1ses-419!2sar!4v1523889204148')\n this.storesService.stores.pipe(filter(store => store && store.length > 0)).subscribe(stores => {\n this.storesAll = stores\n this.stores = stores\n this.exclusiveStores = stores.filter(store => store.exclusive )\n this.selectChange('')\n })\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n updateMap(url:string) {\n url = url.includes ('embed') ? url : 'https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d13137.519688957545!2d-58.3888163!3d-34.5945533!3m2!1i1024!2i768!4f13.1!5e0!3m2!1ses-419!2sar!4v1523889204148'\n this.urlmap = this.sanitizer.bypassSecurityTrustResourceUrl(url)\n }\n\n /**\n * @description Obtiene todas la provincias que figuren en el arreglo\n * @param stores Arreglo de tiendas\n * @returns {Array} Arreglo de provincias\n */\n getProvices = (stores) => {\n let provincesOpt = []\n stores.forEach(store => {\n if (provincesOpt.find(s => s.code == store.province.code) == undefined) {\n provincesOpt.push(store.province)\n }\n });\n return provincesOpt\n }\n\n /**\n * @description Retorna un arreglo de objetos formado por las claves \n * \"province\"(contiene un objeto provincia) y\n * \"stores\" (contiene un arreglo de tiendas pertenecientes a la provincia)\n * @param stores Opcional, arreglo de tiendas a la que se le quiere aplicar la division por provincia\n * @returns {Array<{\"province\", \"stores\"}>}\n */\n getStoresByProvinces = (stores = this.stores) => {\n let storesByProvinces = []\n if(stores){\n let provinces = this.getProvices(stores)\n provinces.forEach( elem => {\n let aux = stores?.filter(store => store.province.code == elem.code)\n storesByProvinces.push({province:elem,stores:aux})\n })\n }\n return storesByProvinces\n } \n\n /**\n * @description Retorna las tiendas con/sin retiro en el local\n * @param stores Opcional, arreglo de tiendas \n * @param cond Opcional, Si es \"true\" obtiene las tiendas con retiro local caso contrario \"false\"\n * @returns {Array<Store>} Arreglo de Store\n */\n getPickupStores = (stores = this.stores, cond:Boolean = true) => stores && stores.filter(store => cond == store.pickupStore)\n\n /**\n * @description Metodo que devuelve las tiendas que NO son exclusivas.\n * @returns {Array<Store>} Arreglo de Store\n */\n getNonExclusiveStores = () => this.stores.filter(store => !store.exclusive )\n\n selectChange = (select) => {\n this.filterStores = select != '' && this.storesAll.filter(store => store.province.code == select) || this.storesAll\n return true\n }\n\n}\n","import { Component, Input } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { ProductDetailService } from '../../services/products/product-detail.service';\ndeclare var $: any;\n\n@Component({\n selector: 'app-product-variants-ec',\n templateUrl: 'variants-ec.component.html',\n styleUrls: ['variants-ec.component.scss']\n})\nexport class VariantsEcComponent extends ComponentHelper {\n\n @Input() product;\n @Input('options') options$;\n @Input() setOption;\n\n constructor(public consts: Constants, public productService: ProductDetailService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n setSeleccion = (values) => {\n $('#op').attr('disabled', true); \n let valores = values.split(',')\n if (valores.length != 2) return\n console.log(values);\n console.log(valores);\n this.setOption(valores[0], valores[1])\n }\n\n view = (length, options) => {\n // console.log('LAS OPCIONES', options);\n return length > 1;\n }\n\n\n\n}","import { Component, Inject, Input, OnInit } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { AuthService } from \"../../services/auth.service\";\nimport { ToastService } from '../../utils/toast.service';\nimport { Constants } from '../../core.consts';\nimport { take } from 'rxjs/operators';\nimport Fuse from 'fuse.js'\n\nexport type SellerDashboardUI =\n | 'HEADER_TAB'\n | 'GENERATE_BUDGET_BTN'\n | 'MANAGE_ORDERS_BTN'\n | 'SORT_SELECT'\n | 'SEARCH_FORM'\n | 'ORDER_COUNTER'\n\n@Component({\n selector: 'app-seller-dashboard-container',\n templateUrl: 'seller-dashboard-container-ec.component.html',\n styleUrls: ['seller-dashboard-container-ec.component.scss']\n})\nexport class SellerDashboardContainerEcComponent extends ComponentHelper implements OnInit {\n\n @Input() UIComponents: SellerDashboardUI[] = []\n \n public user = null\n public activeCustomer = null\n public sortValue = ''\n public searchInput = ''\n public customers = []\n public filteredCustomers = []\n private fuseOptions = {\n isCaseSensitive: false,\n shouldSort: false,\n tokenize: true,\n threshold: 0.2,\n location: 0,\n distance: 100,\n maxPatternLength: 32,\n minMatchCharLength: 0,\n keys: ['firstName', 'lastName', 'email', 'id']\n }\n private fuse = new Fuse(this.customers, this.fuseOptions)\n\n constructor(protected authService: AuthService, protected toastrService: ToastService, protected constants: Constants, @Inject('env') protected env) {\n super()\n this.ecOnConstruct()\n }\n\n updateCustomers = () => {\n this.filteredCustomers = this.customers\n this.fuse.setCollection(this.filteredCustomers)\n\n this.filteredCustomers =\n this.searchInput\n ? this.fuse\n .search(this.searchInput)\n .map(customer => customer.item)\n : this.customers\n\n this.fuse.setCollection(this.filteredCustomers)\n this.sortCustomers(this.sortValue)\n }\n\n /**\n * @description Ordena la lista de clientes\n * @param value recibe una cadena que de estar formada de la forma \"tipoOrdenacion_atributoPorOrdenar\"\n * Ejemplo: \"asc_firstName\" o \"desc_id\" ...\n */\n sortCustomers = value => {\n \n this.sortValue = value\n \n let values = (value as string).split('_')\n let sortType = values[0]\n let attribute = values[1] \n\n const comparator =\n (sortType == 'asc')\n ? [-1, 1]\n : [1, -1]\n\n let typeValue\n if(this.filteredCustomers.length > 0){\n typeValue = typeof(this.filteredCustomers[0][attribute])\n }\n let sortFunction = typeValue == 'number' ? this.sortNumber : this.sortText\n \n this.filteredCustomers =\n this.sortValue\n ? this.filteredCustomers.sort( (aCustomer,otherCustomer) => sortFunction(aCustomer,otherCustomer,attribute,comparator))\n : this.filteredCustomers\n }\n\n private sortNumber = (aCustomer, otherCustomer, attribute, comparator) => aCustomer[attribute] < otherCustomer[attribute] ? comparator[0] : comparator[1]\n\n private sortText = (aCustomer, otherCustomer, attribute, comparator) => {\n return (aCustomer[attribute] == otherCustomer[attribute])\n ? aCustomer.lastName.toLowerCase() < otherCustomer.lastName.toLowerCase() ? comparator[0] : comparator[1]\n : String(aCustomer[attribute]).toLowerCase() < String(otherCustomer[attribute]).toLowerCase() ? comparator[0] : comparator[1]\n }\n\n changeCustomer = customer => {\n this.authService.setCustomer(customer)\n customer\n ? this.toastrService.show('start-impersonating', { customer: customer.firstName + ' ' + customer.lastName })\n : this.toastrService.show('stop-impersonating')\n }\n\n hasHeader = () =>\n this.hasUIComponent('HEADER_TAB') ||\n this.hasUIComponent('GENERATE_BUDGET_BTN') ||\n this.hasUIComponent('MANAGE_ORDERS_BTN') ||\n this.hasUIComponent('SORT_SELECT') ||\n this.hasUIComponent('SEARCH_FORM')\n\n navigateExternal = url => window.open(url)\n\n hasUIComponent = (UIComponent: SellerDashboardUI) => this.UIComponents.includes(UIComponent)\n\n ngOnInit() {\n this.authService.getUserProfile()\n .pipe(take(1))\n .subscribe(user => {\n this.user = user\n this.customers = user.customers\n this.filteredCustomers = this.customers\n this.fuse.setCollection(this.filteredCustomers)\n this.sortCustomers('desc_ordersNotApproved')\n })\n \n }\n\n}\n","import { Component, Input } from '@angular/core';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-loading-full-ec',\n templateUrl: 'loading-full-ec.component.html',\n styleUrls: ['loading-full-ec.component.scss']\n})\nexport class LoadingFullEcComponent extends ComponentHelper {\n\n @Input() hole_height = false;\n \n constructor() {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n}","import { Component } from '@angular/core';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-loading-inline-ec',\n templateUrl: 'loading-inline-ec.component.html',\n styleUrls: ['loading-inline-ec.component.scss']\n})\nexport class LoadingInlineEcComponent extends ComponentHelper {\n\n constructor() {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n}","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ToastService } from '../../../../utils/toast.service';\nimport { Constants } from '../../../../core.consts';\nimport { ConnectionService } from '../../../../api/connection.service';\nimport { CartService } from '../../../../services/cart.service';\nimport { ComponentHelper } from '../../../../classes/component-helper';\n\ndeclare var Mercadopago: any;\n\n@Component({\n selector: '[app-mp-credit-ec]',\n templateUrl: 'mpcredit-ec.component.html',\n styleUrls: ['mpcredit-ec.component.scss']\n})\nexport class MPCreditEcComponent extends ComponentHelper implements OnInit {\n\n @Input() public_key;\n @Input() total_amount;\n @Output() ready = new EventEmitter();\n @Input() user_data;\n\n public installments = [];\n public installment;\n public installment_data;\n public issuers = [];\n public issuer_id;\n public merchant_account_id;\n public doSubmit = false;\n public payment_method = '';\n public require_issuer = false;\n public allready_payed = false;\n public payment_method_option_id;\n public payment_method_id;\n public processing_mode;\n public token;\n public email;\n public doc_number;\n public doc_type = \"DNI\";\n public bin;\n public code;\n public month;\n public year;\n public cardholder;\n\n protected finishApi = () => 'shop-api/' + this.consts.getChannel() + '/mercado-pago/' + this.cartService.cart_token + '/process-payment';\n\n constructor(protected renderer: Renderer2, protected connection: ConnectionService,\n public consts: Constants, protected cartService: CartService, protected toastr: ToastService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n //console.log('SHIPMENT DATA', this.user_data);\n var s = this.renderer.createElement(\"script\");\n this.renderer.setAttribute(s, 'src', 'https://secure.mlstatic.com/sdk/javascript/v1/mercadopago.js');\n this.renderer.appendChild(document.body, s);\n setTimeout(() => {\n Mercadopago.setPublishableKey(this.public_key);\n }, 1000)\n this.ecOnInit()\n\n }\n\n expiryChange = (event) => {\n let fecha = (event.target.value).replace(/ /g, \"\");\n let fechaSplit = fecha.split('/')\n if (fechaSplit.length == 2) {\n this.month = fechaSplit[0]\n this.year = fechaSplit[1]\n }\n }\n\n expiryOnKey = (event) => {\n let key = event.keyCode || event.charCode;\n let fecha = (event.target.value).replace(/ /g, \"\");\n if (key != 8 && fecha.length == 2) {\n event.target.value = fecha + '/'\n }\n }\n\n cardNumberChange = (event) => {\n //console.log('TOMA EL ON CHANGE DE TARJETA');\n this.restartInstallments();\n this.guessPaymentMethod(event);\n }\n\n verifyValidate = (data) => {\n // FALTA SACAR EL PAYMENT METOD OPTTION ID\n let post_data = {\n token: data.id,\n issuer_id: this.issuer_id,\n installments: this.installment,\n merchant_account_id: this.merchant_account_id,\n payment_method_option_id: this.payment_method_option_id,\n payment_method_id: this.payment_method_id,\n processing_mode: this.processing_mode,\n email: this.email,\n document_type: this.doc_type,\n document_number: this.doc_number,\n };\n //console.log('LA DATA QUE VA A MANDAR: ', post_data);\n this.connection.post(this.finishApi(), post_data).toPromise().then(this.processResponse, this.processError)\n }\n\n // Obtener método de pago de la tarjeta\n\n guessPaymentMethod = (event) => {\n //console.log('SE LLAMA AL GUESS PAYMENT');\n let cardnumber = (event.target.value).replace(/ /g, \"\");\n this.setPaymentMethod.bind(this);\n if (cardnumber.length >= 6) {\n let bin = cardnumber.substring(0, 6);\n this.getPaymentMethod(bin);\n }\n };\n\n getPaymentMethod = (bin) => {\n let data_to_send = {\n public_key: this.public_key,\n marketplace: 'NONE',\n status: 'active',\n js_version: '1.3.1',\n bins: bin,\n referer: 'http://enzoshoes.easycommercetech.com'\n }\n\n this.connection.getOutsiderWithParams('https://api.mercadopago.com/v1/payment_methods/search', data_to_send).toPromise().then((res) => {\n //console.log('LA RESPUESTA DEL SEARCH PAYMENT METHOD: ', res);\n if (res && res.results && res.results.length) {\n const payment_data = res.results.find(result => result.processing_mode == \"gateway\") || res.results[0];\n if (payment_data.payment_type_id != \"credit_card\") {\n this.toastr.show('Debe ingresar información de una tarjeta de credito');\n return;\n }\n this.payment_method = payment_data.id;\n this.issuer_id = payment_data.issuer.id;\n payment_data.payer_costs.forEach(payerCost => {\n this.installments.push({ ...payerCost, name: ('Cuotas: ' + payerCost.installments + ' - Total: ' + this.calculateTotal(payerCost)), value: payerCost.installments });\n });\n this.installment_data = payment_data;\n } else {\n this.toastr.show('El número de tarjeta ingresado no es valido');\n }\n }).catch(err => this.toastr.show('Hubo un error al obtener la información de la tarjeta. Verifique que los datos sean correctos.'));\n }\n\n setPaymentMethod = (status, response) => {\n //console.log('SE LLAMA AL SET PAYMENT', response);\n let paymentMethod = response[0];\n this.payment_method = paymentMethod.id;\n this.getIssuers.bind(this);\n this.getInstallments.bind(this);\n if (paymentMethod.additional_info_needed.includes(\"issuer_id\")) {\n this.getIssuers(paymentMethod.id);\n } else {\n // this.issuer_id = response.issuer\n this.getInstallments(\n paymentMethod.id,\n this.total_amount\n );\n }\n }\n\n // Obtener banco emisor\n\n getIssuers = (paymentMethodId) => {\n this.restartInstallments();\n this.require_issuer = true;\n //console.log('SE LLAMA AL GET ISSUER');\n this.setIssuers.bind(this);\n Mercadopago.getIssuers(\n paymentMethodId,\n this.setIssuers\n );\n }\n\n setIssuers = (status, response) => {\n //console.log('SE LLAMA AL SET ISSUER', response);\n this.getInstallments.bind(this);\n if (status == 200) {\n response.forEach(issuer => {\n this.issuers.push({ name: issuer.name, value: issuer.value });\n });\n } else {\n this.toastr.show('Error al obtener proveedores disponibles');\n }\n }\n\n // UTILS\n\n restartInstallments = () => {\n this.installments = [];\n this.installment_data = null;\n this.merchant_account_id = null;\n this.payment_method_option_id = null;\n this.issuer_id = null;\n this.payment_method_id = null;\n }\n\n selectIssuer = (value) => {\n this.issuer_id = value;\n this.getInstallments(this.payment_method, this.total_amount, this.issuer_id);\n }\n\n selectInstallment = (value) => {\n const cost = this.installments.find(installment_cost => installment_cost.value == value);\n this.installment = cost.value;\n this.merchant_account_id = this.installment_data.merchant_account_id;\n this.payment_method_option_id = cost.payment_method_option_id || (this.installment_data.agreements && this.installment_data.agreements[0].merchant_accounts[0].payment_method_option_id);\n this.issuer_id = this.installment_data.issuer.id;\n this.payment_method_id = this.installment_data.payment_method_id || this.installment_data.id;\n this.processing_mode = this.installment_data.processing_mode;\n\n //console.log('COMO QUEDAN: ', this.merchant_account_id, this.payment_method_option_id, this.issuer_id, this.payment_method_id, this.installment);\n // this.payme\n }\n\n // Obtener cantidad de cuotas\n\n getInstallments = (paymentMethodId?, transactionAmount?, issuerId?) => {\n let payment = paymentMethodId || this.payment_method;\n let amount = transactionAmount || this.total_amount;\n //console.log('SE LLAMA AL GET INSTALLMENTS');\n this.setInstallments.bind(this);\n let data = {\n \"payment_method_id\": payment,\n \"bin\": this.bin.replace(/ /g, \"\"),\n \"amount\": parseFloat(amount),\n \"issuer_id\": issuerId ? parseInt(issuerId) : undefined\n };\n //console.log('LO QUE VA A MANDAR AL GET INSTALLMENTS');\n Mercadopago.getInstallments(data, this.setInstallments);\n }\n\n setInstallments = (status, response) => {\n //console.log('LA RESPUESTA DEL GET INSTALLMENTS', response);\n if (status == 200 && response.length) {\n this.installments = [];\n response[0].payer_costs.forEach(payerCost => {\n this.installments.push({ ...payerCost, name: payerCost.recommended_message, value: payerCost.installments });\n });\n this.installment_data = response[0];\n } else {\n // alert(`installments method info error: ${response}`);\n this.toastr.show('Hubo un error al obtener las cuotas disponibles. Vuelva a intentarlo más tarde');\n }\n }\n\n // Crea el token de la tarjeta\n\n getCardToken = (event) => {\n //console.log('SE LLAMA AL GET CARD TOKEN');\n event.preventDefault();\n if (!this.doSubmit) {\n let $form = document.getElementById('paymentForm');\n Mercadopago.createToken.bind(this)($form, this.setCardTokenAndPay);\n return false;\n }\n };\n\n setCardTokenAndPay = (status, response) => {\n //console.log('SE LLAMA AL SET CARD TOKEN AND PAY');\n if (status == 200 || status == 201) {\n let form = document.getElementById('paymentForm');\n let card = document.createElement('input');\n card.setAttribute('name', 'token');\n card.setAttribute('type', 'hidden');\n card.setAttribute('value', response.id);\n form.appendChild(card);\n this.token = response.id;\n this.doSubmit = true;\n // form.submit();\n // TERMINAR\n this.verifyValidate(response);\n } else {\n //console.log('EL RESPONSE: ', response);\n this.toastr.show(this.parseErrorMessage(status));\n }\n };\n\n // UTILS\n\n isInvalid = () => {\n const result = (\n !this.issuer_id ||\n !this.payment_method_id ||\n !this.payment_method_option_id ||\n (this.processing_mode == 'gateway' && !this.merchant_account_id) ||\n !this.installment ||\n !this.email ||\n !this.doc_type ||\n !this.doc_number ||\n this.allready_payed ||\n !this.code ||\n !this.month ||\n !this.year ||\n !this.cardholder\n )\n return result;\n }\n\n calculateTotal = (cost) => {\n let result = this.total_amount + ((this.total_amount * cost.installment_rate) / 100);\n result = parseFloat(result).toFixed(2);\n return result;\n }\n\n processResponse = (response) => {\n if (response.status !== 'rejected') {\n //console.log('SE PUDO EFECTUAR LA COMPRA');\n this.ready.emit('true');\n return;\n }\n this.processError(response);\n }\n\n processError = (response) => {\n this.allready_payed = false;\n if (response.status_detail) {\n switch (response.status_detail) {\n case 'rejected': this.toastr.show('Revisa el número de tarjeta.'); break;\n case 'rejected': this.toastr.show('Revisa la fecha de vencimiento.'); break;\n case 'rejected': this.toastr.show('Revisa los datos.'); break;\n case 'rejected': this.toastr.show('Revisa el código de seguridad de la tarjeta.'); break;\n case 'rejected': this.toastr.show('No pudimos procesar tu pago.'); break;\n case 'rejected': this.toastr.show('Debes autorizar ante payment_method_id el pago de amount.'); break;\n case 'rejected': this.toastr.show('Llama a payment_method_id para activar tu tarjeta o usa otro medio de pago. El teléfono está al dorso de tu tarjeta.'); break;\n case 'rejected': this.toastr.show('No pudimos procesar tu pago.'); break;\n case 'rejected': this.toastr.show('Ya hiciste un pago por ese valor. Si necesitas volver a pagar usa otra tarjeta u otro medio de pago.'); break;\n case 'rejected': this.toastr.show('Tu pago fue rechazado. Elige otro de los medios de pago, te recomendamos con medios en efectivo.'); break;\n case 'rejected': this.toastr.show('Tu payment_method_id no tiene fondos suficientes.'); break;\n case 'rejected': this.toastr.show('payment_method_id no procesa pagos en installments cuotas.'); break;\n case 'rejected': this.toastr.show('Llegaste al límite de intentos permitidos. Elige otra tarjeta u otro medio de pago.'); break;\n case 'rejected': this.toastr.show('payment_method_id no procesó el pago.'); break;\n }\n return;\n }\n this.toastr.show('Hubo un error al intentar realizar el pago. Vuelva a intentarlo más tarde');\n }\n\n parseErrorMessage = (status_code) => {\n switch (status_code) {\n case 205: return ('Ingresa el número de tu tarjeta.');\n case 208: return ('Elige un mes.');\n case 209: return ('Elige un año.');\n case 212: return ('Ingresa tu tipo de documento.');\n case 213: return ('Ingresa tu documento.');\n case 214: return ('Ingresa tu documento.');\n case 220: return ('Ingresa tu banco.');\n case 221: return ('Ingresa el nombre y apellido.');\n case 224: return ('Ingresa el código de seguridad.');\n case 316: return ('Ingresa un nombre válido.');\n case 322: return ('El tipo de documento es inválido.');\n case 323: return ('Revisa tu documento.');\n case 324: return ('El documento es inválido.');\n case 325: return ('El mes es inválido');\n case 326: return ('El año es inválido');\n default: return ('Verifique que los datos sean correctos.');\n }\n }\n\n getDescripcionCuota = (itemCuota) => {\n //console.log(itemCuota);\n return itemCuota.name\n }\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { ProductsService } from '../../../services/products/products.service';\n\n@Component({\n selector: 'app-price-ec',\n templateUrl: 'price-ec.component.html',\n styleUrls: ['price-ec.component.scss']\n})\n\nexport class PriceEcComponent extends ComponentHelper implements OnInit {\n\n @Input() price;\n @Input() saleprice;\n @Input() priceSize: boolean = true\n @Input() classStrSpacing;\n\n constructor(public productsService: ProductsService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n}","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { combineLatest } from 'rxjs';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CartService } from '../../../services/cart.service';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\ndeclare var $: any;\n\n@Component({\n selector: 'app-redsys-catch-ec',\n templateUrl: './redsys-catch-ec.component.html',\n styleUrls: ['./redsys-catch-ec.component.scss']\n})\nexport class RedsysCatchEcComponent extends ComponentHelper implements OnInit {\n\n public message = ''\n\n constructor(public activedRoute: ActivatedRoute, public router: Router, public checkoutService: CheckoutService) {\n super();\n $(\"header\").hide();\n $(\"footer\").hide();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n let state\n combineLatest([this.activedRoute.params, this.activedRoute.queryParams]).subscribe(([queryRouter, queryParams]) => {\n state = queryRouter.state\n state && state == 'statuspayment' && (state = queryParams.status)\n console.log('PARAMETROS STATE -> ', state);\n switch (state) {\n case '200':\n state = 'success'\n this.setStateInLocal('Su pago fue procesado con éxito.', state)\n break;\n case 'success':\n this.setStateInLocal('Su pago fue procesado con éxito.',state)\n break;\n case 'pending':\n this.setStateInLocal('Su pago fue procesado con éxito.', state)\n break;\n case 'failure':\n this.setStateInLocal('Se ha cancelado el proceso de pago.', state)\n break;\n case 'cancel':\n this.setStateInLocal('Se ha cancelado el proceso de pago.', state)\n break;\n case 'ok':\n this.setStateInSesion('Su pago fue procesado con éxito.', state)\n break;\n case 'challenge':\n this.setStateInSesion('Redirigiendo a autenticación del banco emisor.', state)\n break;\n case 'error':\n this.setStateInSesion('Algo no salio bien en la validación de sus datos.', state)\n break;\n case '0':\n state = 'failure'\n this.setStateInLocal('Se ha cancelado el proceso de pago.', state)\n break;\n default:\n break;\n }\n })\n this.ecOnInit()\n }\n\n\n setStateInLocal = (mensaje, state) => {\n this.message = mensaje\n localStorage.setItem('state', state)\n sessionStorage.setItem('modalnews', 'false')\n }\n\n setStateInSesion = (mensaje, state) => {\n this.message = mensaje\n sessionStorage.setItem('state', state)\n localStorage.setItem('state', state)\n sessionStorage.setItem('modalnews', 'false')\n }\n\n}\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { CartService } from '../../../services/cart.service';\nimport { Constants } from '../../../core.consts';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n/** @dynamic */\n@Component({\n selector: 'app-redsys-pro-ec',\n templateUrl: 'redsys-pro-ec.component.html',\n styleUrls: ['redsys-pro-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class RedSysProEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method;\n @Input() total_amount = 0;\n @Output() ready = new EventEmitter();\n @Input() user_data;\n @ViewChild('formDobleAuthContainer') protected formDobleAuth: ElementRef;\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n\n protected intentoRequest: boolean = false\n public loading = true;\n public isDobleAuth = false;\n public urls = [];\n public closeModal = ''\n protected finishApi = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/' + this.cartService.cart_token + '/process-payment';\n protected challengeApi = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/3ds-challenge';\n protected merchantOrder = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/' + this.cartService.cart_token + '/ds-merchant-order';\n \n constructor(protected renderer: Renderer2, protected connection: ConnectionService, protected toastrService: ToastService,\n public consts: Constants, public cartService: CartService, protected toastr: ToastService, @Inject(DOCUMENT) protected document: Document,\n protected activedRoute: ActivatedRoute,protected modalService: BsModalService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n console.log(\"SE CAMBIO\");\n }\n\n \n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n sessionStorage.setItem('method', JSON.stringify(this.method))\n sessionStorage.setItem('user_data', JSON.stringify(this.user_data))\n sessionStorage.setItem('finishApi',this.finishApi())\n sessionStorage.setItem('challengeApi',this.challengeApi())\n sessionStorage.setItem('merchantOrder',this.merchantOrder())\n this.modalRef = this.modalService.show(template, { class: 'modal-lg modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con tarjeta')\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : sessionStorage.getItem('state')\n console.log(state);\n if (state && state != 'challenge') {\n sessionStorage.removeItem('state')\n if (state == 'ok') {\n this.modalRef.hide()\n this.ready.emit(true)\n return \n }\n if (state == 'menosuno') {\n this.modalRef.hide()\n this.processError('')\n return \n }\n if (state == 'cancel') {\n return \n }\n this.modalRef.hide()\n this.processError('')\n return \n }\n setTimeout(() => {\n this.callState()\n }, 6000); \n \n }\n\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n}","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-redsys-redirect-ec',\n templateUrl: 'redsys-redirect-ec.component.html',\n styleUrls: ['redsys-redirect-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class RedSysRedirectEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Output() ready = new EventEmitter();\n @Input() user_data = null;\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n\n public loading = true;\n public isDobleAuth = false;\n public urls = [];\n public closeModal = ''\n protected dataRedirect = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2, \n public connection: ConnectionService, \n public toastrService: ToastService,\n public consts: Constants, \n public cartService: CartService, \n public toastr: ToastService, \n public activedRoute: ActivatedRoute,\n public modalService: BsModalService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n console.log(\"SE CAMBIO\");\n }\n \n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n sessionStorage.setItem('dataRedirect',this.dataRedirect())\n this.modalRef = this.modalService.show(template, { class: 'modal-lg modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con tarjeta')\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : sessionStorage.getItem('state')\n console.log(state);\n if (state) {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n if (state == 'ok') {\n this.modalRef.hide()\n this.ready.emit(true)\n return \n }\n if (state == 'menosuno') {\n this.modalRef.hide()\n this.processError('')\n return \n }\n if (state == 'cancel') {\n return \n }\n this.modalRef.hide()\n this.processError('')\n return \n }\n setTimeout(() => {\n this.callState()\n }, 6000); \n \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n}","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-ceca-redirect-ec',\n templateUrl: 'ceca-redirect-ec.component.html',\n styleUrls: ['ceca-redirect-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class CecaRedirectEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Output() ready = new EventEmitter();\n @Input() user_data = null;\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n\n public loading = true;\n public isDobleAuth = false;\n public urls = [];\n public closeModal = ''\n protected dataRedirect = () => this.consts.getUrlBase() + 'shop-api/' + this.consts.getChannel() + '/cecabank/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2, \n public connection: ConnectionService, \n public toastrService: ToastService,\n public consts: Constants, \n public cartService: CartService, \n public toastr: ToastService, \n public activedRoute: ActivatedRoute,\n public modalService: BsModalService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n console.log(\"SE CAMBIO\");\n }\n \n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n localStorage.setItem('dataRedirect',this.dataRedirect())\n this.modalRef = this.modalService.show(template, { class: 'modal-lg modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con tarjeta')\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n console.log(state);\n if (state) {\n localStorage.removeItem('state')\n if (state == 'success') {\n this.modalRef.hide()\n this.ready.emit(true)\n return \n }\n if (state == 'pending') {\n this.modalRef.hide()\n this.ready.emit(true)\n return\n }\n if (state == 'failure') {\n this.modalRef.hide()\n this.processError('')\n return \n }\n if (state == 'cancel') {\n this.processError('Se cancelo el pago')\n return \n }\n this.modalRef.hide()\n this.processError('')\n return \n }\n setTimeout(() => {\n this.callState()\n }, 6000); \n \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n}","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport * as moment from 'moment';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { OrdersService } from '../../../services/account/orders.service';\n// import { OwlOptions } from 'projects/ng-easycommerce/src/lib/ec-component/product-detail-ec/node_modules/projects/ng-easycommerce/src/lib/ec-component/home-ec/node_modules/ngx-owl-carousel-o';\n\n@Component({\n selector: 'app-orders-ec',\n templateUrl: 'orders-list-ec.component.html',\n styleUrls: ['orders-list-ec.component.scss']\n})\nexport class OrdersEcComponent extends ComponentHelper implements OnInit {\n\n public mediaUrl;\n public orders;\n public loading = true;\n public error;\n\n constructor(public ordersService: OrdersService, public router: Router, protected consts: Constants) {\n super();\n this.mediaUrl = this.consts.mediaUrl();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.loading = true;\n this.ordersService.updateOrders();\n this.ordersService.orders$.pipe(filter(or => or)).subscribe(\n orders => {\n this.orders = this.sortedByNewest(orders);\n this.loading = false\n },\n err => {\n this.loading = false\n this.error = 'orders-error';\n }\n )\n this.ecOnInit()\n\n }\n\n sortedByNewest = orders => orders && orders.length && orders.sort((anOrder, otherOrder) => anOrder.number > otherOrder.number ? -1 : 1)\n\n goToOrder = (order) => {\n this.ordersService.setSelectedOrder(order);\n this.router.navigateByUrl((`account/orders/${order.number}`))\n }\n\n toDate = (date, format) => moment(date).format(!format && 'DD/MM/YYYY, h:mm:ss a' || format)\n\n optionsBox = {\n loop: true,\n autoplay: true,\n smartSpeed: 950,\n margin: 10,\n dots: false,\n dotsData: false,\n navText: [\"\", \"\"],\n responsive: {\n 0: {\n items: 1,\n },\n 600: {\n items: 1,\n },\n 1000: {\n items: 1,\n }\n }\n }\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport * as moment from 'moment';\nimport { OrdersService } from '../../../services/account/orders.service';\nimport { Constants } from '../../../core.consts';\nimport { ComponentHelper } from '../../../classes/component-helper';\n\n@Component({\n selector: 'app-order-ec',\n templateUrl: 'order-ec.component.html',\n styleUrls: ['order-ec.component.scss']\n})\nexport class OrderEcComponent extends ComponentHelper implements OnInit {\n\n protected orderSubject = new BehaviorSubject<any>({});\n\n public order$ = this.orderSubject.asObservable();\n public order = null\n public loading = true;\n public error;\n @Input() numberOrder = null\n\n constructor(public ordersService: OrdersService, protected activedRoute: ActivatedRoute, public router: Router, public consts: Constants) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.loading = true;\n this.ordersService.selectedOrder$.subscribe(\n async res => {\n let order;\n if (this.numberOrder == null) {\n this.numberOrder = this.activedRoute.snapshot.params.number\n }\n if (res) order = res;\n else order = await this.ordersService.findOrder(this.numberOrder);\n order && this.orderSubject.next(order);\n !order && this.callError();\n this.order = order\n this.loading = false;\n }),\n err => {\n this.ordersService.error$.toPromise().then(res => this.error = res);\n this.loading = false;\n this.callError();\n }\n this.ecOnInit()\n }\n\n toDate = (date, format) => moment(date).format(!format && 'DD/MM/YYYY, h:mm:ss a' || format)\n\n callError = () => {\n this.error = '?';\n this.router.navigateByUrl('account/orders');\n }\n\n volver = () => this.router.navigateByUrl('account/orders');\n\n}","import { Component, Input, OnInit, OnChanges } from '@angular/core';\nimport { take } from 'rxjs/operators';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AuthService } from '../../services/auth.service';\nimport { ToastService } from '../../utils/toast.service';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { ParametersService } from '../../services/parameters.service';\n\n@Component({\n selector: 'app-auth-ec',\n templateUrl: 'auth-ec.component.html',\n styleUrls: ['auth-ec.component.scss']\n})\nexport class AuthEcComponent extends ComponentHelper implements OnInit, OnChanges {\n\n @Input() complete = true;\n public data = {\n email: null,\n password: null,\n nombre: null,\n apellido: null,\n }\n @Input() redirect = true;\n public loginForm: FormGroup;\n public registerForm: FormGroup;\n public loading: Boolean = false;\n public register_loading: Boolean = false;\n public params: any = [];\n\n\n constructor(public authService: AuthService, protected toastr: ToastService,\n public paramsService: ParametersService,\n protected activatedRoute: ActivatedRoute,\n protected formBuilder: FormBuilder, public router: Router) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.paramsService.parameters.subscribe(res => this.params = res);\n (this.authService.isAuthenticated() && this.complete) && this.router.navigateByUrl('/');\n this.loginForm = this.formBuilder.group({\n username: ['', Validators.required],\n password: ['', Validators.required]\n });\n this.registerForm = this.formBuilder.group({\n firstName: ['', Validators.required],\n lastName: ['', Validators.required],\n email: ['', Validators.required],\n plainPassword: ['', Validators.required],\n newsletter: [false],\n terms: ['', Validators.required],\n });\n\n this.activatedRoute.params.subscribe(\n params => {\n if (params?.data) {\n let resul = JSON.parse(atob(params.data))\n resul && this.authService.doLoginUser(resul)\n }\n }\n );\n this.ecOnInit()\n\n }\n\n ngOnChanges() {\n (this.authService.isAuthenticated() && this.complete) && this.router.navigateByUrl('/');\n }\n\n setProp = (prop, event) => {\n this.data[prop] = event.target.value;\n }\n\n login = () => this.redirect && this.redirectHome();\n\n redirectHome = () => {\n setTimeout(() => this.router.navigateByUrl('/'), 1500);\n }\n\n register = (event) => {\n event.preventDefault();\n this.register_loading = true;\n if (this.registerForm.valid) {\n this.authService.signUp(this.registerForm.value).toPromise().then(\n res => {\n this.register_loading = false;\n this.toastr.show('register-ok');\n this.router.navigateByUrl('home')\n },\n error => {\n this.register_loading = false;\n if (error.status == 400) {\n this.toastr.show('El email ingresado ya se encuentra registrado.');\n } else {\n this.toastr.show('Error en el registro. Vuelva a intentarlo más tarde.');\n }\n }\n )\n } else {\n this.toastr.show('invalid-form');\n }\n }\n}\n\n\n\n\n\n","import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { Router } from \"@angular/router\";\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { ToastService } from '../../../utils/toast.service';\n\n@Component({\n selector: 'app-register-form-ec',\n templateUrl: 'register-form-ec.component.html',\n styleUrls: ['register-form-ec.component.scss']\n})\nexport class RegisterFormEcComponent extends ComponentHelper implements OnInit {\n public isLogged: Boolean = true;\n @Input() darkMode = false;\n @Input() redirect = true;\n @Input() complete = true;\n @Output() ready = new EventEmitter();\n public success: Boolean = false\n public campospersonajuridica: boolean = false;\n public register_loading: boolean;\n public registerForm: FormGroup;\n public registroUsuario: any = {\n firstName: '',\n lastName: '',\n email: '',\n plainPassword: '',\n plainPassword2: '',\n newsletter: false,\n terms: false,\n }\n\n constructor(public authService: AuthService,\n protected toastr: ToastService,\n public router: Router,\n public analyticsService: AnalyticsService,\n protected formBuilder: FormBuilder) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n\n this.registerForm = this.formBuilder.group({\n firstName: ['', Validators.required],\n lastName: ['', Validators.required],\n email: ['', Validators.required],\n plainPassword: ['', Validators.required],\n plainPassword2: ['', Validators.required],\n newsletter: [false],\n terms: ['', Validators.required],\n });\n this.ecOnInit()\n\n }\n\n setProp = (prop, event) => {\n this.registroUsuario[prop] = event.target.value;\n }\n redirectHome = () => {\n this.router.navigateByUrl('/')\n }\n\n register = (event) => {\n event.preventDefault();\n this.register_loading = true;\n if (!this.registerForm.valid) {\n this.toastr.show('Aún hay campos sin completar o invalidos');\n this.register_loading = false\n return;\n };\n this.register_loading = true;\n if (this.registerForm.value.plainPassword != this.registerForm.value.plainPassword2) {\n this.toastr.show('Las contraseñas no coinciden');\n this.register_loading = false\n return;\n }\n if (this.registerForm.valid) {\n this.authService.signUp(this.registerForm.value).toPromise().then(\n res => {\n this.register_loading = false;\n this.toastr.show('register-ok');\n this.analyticsService.callEvent('sign_up', {\n firstName: this.registerForm.value.firstName,\n lastName: this.registerForm.value.lastName,\n email:this.registerForm.value.email\n })\n this.success =true\n this.ready.emit(true)\n if(this.redirect){\n this.router.navigateByUrl('home')\n }\n },\n error => {\n this.register_loading = false;\n if (error.status == 400) {\n this.toastr.show('El email ingresado ya se encuentra registrado.');\n } else {\n this.toastr.show('Error en el registro. Vuelva a intentarlo más tarde.');\n }\n }\n )\n } else {\n this.toastr.show('invalid-form');\n }\n }\n}","import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { Router } from \"@angular/router\";\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { AuthService } from '../../../services/auth.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { UserRoleType } from '../../../classes/user-role-type';\nimport { filter } from 'rxjs/operators';\n\n@Component({\n selector: 'app-login-form-ec',\n templateUrl: 'login-form-ec.component.html',\n styleUrls: ['login-form-ec.component.scss']\n})\nexport class LoginFormEcComponent extends ComponentHelper implements OnInit {\n\n @Input() darkMode = false;\n @Input() redirect = true;\n @Input() complete = true;\n @Input() title = 'login';\n /* @Input() withRoles: UserRoleType[] = [UserRoleType.SELLER, UserRoleType.RETAILER, UserRoleType.WHOLESALER] */\n /* @Input() withRoles: UserRoleType[] = [] */\n @Output() ready = new EventEmitter();\n public loading = false;\n public loginForm: FormGroup;\n\n\n constructor(protected authService: AuthService, protected toastrService: ToastService, protected formBuilder: FormBuilder, public router: Router\n ) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.redirect && this.authService.isAuthenticated() && this.redirectHome()\n !this.authService.isAuthenticated() && localStorage.removeItem('mail')\n this.loginForm = this.formBuilder.group({\n username: ['', Validators.required],\n password: ['', Validators.required]\n });\n this.ecOnInit()\n }\n\n login = ($event, withRoles: UserRoleType[] = []) => {\n $event.preventDefault();\n this.loading = true;\n if (!this.loginForm.valid) {\n this.toastrService.show('Aún hay datos sin completar');\n return;\n }\n this.authService.login(this.loginForm.value, withRoles).toPromise().then(\n res => {\n if (res == 'ok') {\n this.ready.emit(this.loginForm.value.username);\n if (this.redirect)\n setTimeout(() => this.redirectHome(), 500);\n }\n else {\n if (res == 'error') {\n this.toastrService.show('invalid-credentials')\n this.loading = false;\n return\n }\n this.loading = false;\n }\n },\n err => {\n this.loading = false;\n }\n )\n }\n\n redirectHome = () => {\n const resolverFunction = this.authService.getHomeResolver()\n resolverFunction\n ? resolverFunction()\n : this.router.navigateByUrl('/')\n }\n\n}","import { Component } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { AuthService } from '../../../services/auth.service';\nimport { ToastService } from '../../../utils/toast.service';\n\n@Component({\n selector: 'app-forgot-password-ec',\n templateUrl: 'forgot-password-ec.component.html',\n styleUrls: ['forgot-password-ec.component.scss']\n})\nexport class ForgotPasswordEcComponent extends ComponentHelper {\n\n public email = \"\";\n public loading = false;\n public ready = false;\n\n constructor(protected authService: AuthService, protected toastr: ToastService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.ecOnInit()\n }\n\n recoverPassword = (event) => {\n event.preventDefault();\n if (!this.validEmail()) this.toastr.show('invalid-email');\n else {\n this.loading = true;\n this.authService.recoverPassword(this.email).toPromise()\n .then(this.processOk, this.processOk).catch(this.processOk);\n }\n }\n\n processOk = (response) => {\n this.loading = false;\n this.ready = true;\n }\n\n processError = (response) => {\n this.loading = false;\n (!response || response.error)\n ? this.toastr.show('non-existent-email')\n : this.toastr.show(response.error);\n }\n\n validEmail = () => this.email != '' && this.email.includes('@');\n}","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { AuthService } from '../../../services/auth.service';\n\n@Component({\n selector: 'app-confirm-account-ec',\n templateUrl: 'confirm-account-ec.component.html',\n styleUrls: ['confirm-account-ec.component.scss']\n})\nexport class ConfirmAccountEcComponent extends ComponentHelper {\n\n public ok: Boolean = false;\n public error: Boolean = false;\n\n constructor(protected authService: AuthService, protected activedRoute: ActivatedRoute) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n const token = this.activedRoute.snapshot.queryParams.token;\n this.authService.confirmAccount(token).toPromise().then(this.onSuccess, this.onSuccess).catch(this.onSuccess) \n this.ecOnInit()\n\n }\n\n onSuccess = () => {\n this.ok = true;\n }\n\n onError = () => {\n this.error = true;\n }\n}","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { AuthService } from '../../services/auth.service';\nimport { ToastService } from '../../utils/toast.service';\n\n@Component({\n selector: 'app-password-reset-ec',\n templateUrl: 'password-reset-ec.component.html',\n styleUrls: ['password-reset-ec.component.scss']\n})\nexport class PasswordResetEcComponent extends ComponentHelper implements OnInit {\n\n public email = \"\";\n public loading = false;\n public ready = false;\n protected token;\n public formGroup: FormGroup;\n\n constructor(protected authService: AuthService, protected toastr: ToastService, protected activedRoute: ActivatedRoute, \n public router: Router, protected formBuilder: FormBuilder) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.token = this.activedRoute.snapshot.queryParams.token;\n !this.token && this.router.navigateByUrl('/');\n this.formGroup = this.formBuilder.group({\n first: ['', Validators.required],\n second: ['', Validators.required]\n })\n this.ecOnInit()\n\n }\n\n sendNewPassword = (event) => {\n event.preventDefault();\n if (this.invalidForm()) return;\n this.loading = true;\n this.authService.passwordReset(this.formGroup.value.first, this.token).toPromise()\n .then(this.processOk)\n .catch(this.processError);\n }\n\n invalidForm = () => {\n if (this.formGroup.valid) {\n const passwords = this.formGroup.value;\n if (passwords.first == passwords.second) return false;\n else this.toastr.show('password-doesnt-match');\n } else this.toastr.show('invalid-form');\n return true;\n }\n\n processOk = (response) => {\n this.loading = false;\n this.ready = true;\n }\n\n processError = (response) => {\n this.loading = false;\n (!response || response.error)\n ? this.toastr.show('operation-error')\n : this.toastr.show(response.error);\n }\n\n sendToLogin = () => this.router.navigateByUrl('/auth/login');\n}","import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { Router } from \"@angular/router\";\nimport { BehaviorSubject } from 'rxjs';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Constants } from '../../../core.consts';\nimport { AuthService } from '../../../services/auth.service';\nimport { ParametersService } from '../../../services/parameters.service';\nimport { ToastService } from '../../../utils/toast.service';\ndeclare var $: any;\n\n@Component({\n selector: 'app-register-wholesaler-form-ec',\n templateUrl: 'register-wholesaler-form-ec.component.html',\n styleUrls: ['register-wholesaler-form-ec.component.scss']\n})\nexport class RegisterWholesalerFormEcComponent extends ComponentHelper implements OnInit {\n\n protected provincesSubject = new BehaviorSubject<any[]>([]);\n protected countriesSubject = new BehaviorSubject<any[]>([]);\n protected documentTypesSubject = new BehaviorSubject<any[]>([]);\n\n public provinces$ = this.provincesSubject.asObservable();\n public countries$ = this.countriesSubject.asObservable();\n public documentTypes$ = this.documentTypesSubject.asObservable();\n\n public isLogged: Boolean = true;\n @Input() darkMode = false;\n @Input() redirect = true;\n @Input() complete = true;\n @Output() ready = new EventEmitter();\n public success : Boolean = false;\n public requestTerms = false;\n public campospersonajuridica: boolean = false;\n public register_loading: boolean;\n public registerForm: FormGroup;\n public params: any = {};\n\n\n constructor(public authService: AuthService,\n protected toastr: ToastService,\n public router: Router,\n public consts: Constants,\n public paramsService: ParametersService,\n protected formBuilder: FormBuilder) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.paramsService.parameters.subscribe(res => this.params = res);\n this.registerForm = this.formBuilder.group({\n firstName: ['', [Validators.required]],\n lastName: ['', [Validators.required]],\n documentType: [null, [Validators.required]],\n documentNumber: ['', [Validators.required]],\n email: ['', [Validators.required, Validators.email]],\n plainPassword: ['', Validators.required],\n plainPassword2: ['', []],\n countryCode: [null, Validators.required],\n street: [null, [Validators.maxLength(50)]],\n city: ['', Validators.required],\n postcode: ['', Validators.required],\n provinceName: ['', Validators.required],\n provinceCode: [null, Validators.required],\n companyName: ['', [Validators.required]],\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\n gender: [null, []],\n birthday: [null, [Validators.maxLength(11)]],\n taxIdentification: ['', Validators.required],\n comments: ['', []],\n contactFirstName: ['', []],\n contactLastName: ['', []],\n contactCompanyPosition: ['', []],\n contactEmail: ['', []],\n contactDocumentType: ['', []],\n contactDocumentNumber: ['', []],\n subscribedToNewsletter: [false],\n terms: [true, Validators.required],\n });\n this.authService.getCountriesData().then(res => {\n this.countriesSubject.next(res);\n let documentTypes = []\n res.map(paises => {\n this.consts.getLocale().toLocaleLowerCase().includes(paises.code.toLocaleLowerCase()) && (documentTypes = paises.documentTypes || [])\n });\n this.documentTypesSubject.next(documentTypes);\n });\n this.ecOnInit()\n }\n\n onCountrySelected = (value) => {\n $('#selectOpPais').attr('disabled', true);\n this.registerForm.controls['countryCode'].setValue(value);\n this.registerForm.controls['provinceCode'].setValue('');\n value != '' && this.provincesSubject.next(this.countriesSubject.value.find(country => country.code == value).provinces);\n }\n\n onProvincesSelected = (value) => {\n $('#selectOpProvincia').attr('disabled', true);\n this.registerForm.controls['provinceName'].setValue(this.provincesSubject.value.find(province => province.code == value).name);\n }\n\n onGenderSelected = (value) => {\n $('#selectOpSexo').attr('disabled', true);\n }\n\n onDocumentTypeSelected = (value) => {\n $('#selectOpDocumentType').attr('disabled', true);\n }\n\n redirectHome = () => {\n this.router.navigateByUrl('/')\n }\n\n register = (event) => {\n event.preventDefault();\n this.register_loading = true;\n if (!this.registerForm.valid) {\n this.toastr.show('Aún hay campos sin completar o invalidos');\n this.register_loading = false\n return;\n };\n this.register_loading = true;\n if (this.registerForm.valid) {\n this.authService.signUpWholesaler(this.registerForm.value).toPromise().then(\n res => {\n this.register_loading = false;\n this.toastr.show('register-ok');\n this.success = true;\n this.ready.emit(true);\n if(this.redirect){\n this.router.navigateByUrl('home')\n }\n },\n error => {\n this.register_loading = false;\n if (error.status == 400) {\n this.toastr.show('El email ingresado ya se encuentra registrado.');\n } else {\n this.toastr.show('Error en el registro. Vuelva a intentarlo más tarde.');\n }\n }\n )\n } else {\n this.toastr.show('invalid-form');\n }\n }\n}","import { DOCUMENT } from '@angular/common';\nimport { Component, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { Product } from '../../interfaces/product';\nimport { ParametersService } from '../../services/parameters.service';\n\n\n\n@Component({\n selector: 'app-share-block-ec',\n templateUrl: './share-block-ec.component.html',\n styleUrls: ['./share-block-ec.component.scss'],\n})\nexport class ShareBlockEcComponent extends ComponentHelper implements OnInit {\n\n @Input() product: Product\n\n public url = ''\n public mediaimg = ''\n public description = ''\n public params: any = {}\n\n constructor(\n public consts: Constants, public paramsService: ParametersService, protected renderer: Renderer2, private meta: Meta, private title: Title) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.url = window.location.href\n this.mediaimg = this.product.picturesdefault && this.product.picturesdefault[0]\n this.description = this.product.name\n if (this.description) {\n this.meta.addTags(\n [\n {\n name: \"description\",\n content: this.description\n },\n {\n property: \"og:site_name\",\n content: this.title.getTitle()\n }\n ,\n {\n property: \"og:url\",\n content: this.url\n }\n ,\n {\n property: \"og:title\",\n content: this.description\n }\n ,\n {\n property: \"og:type\",\n content: 'product'\n }\n ,\n {\n property: \"og:price:amount\",\n content: this.product.price\n }\n ,\n {\n property: \"og:price:currency\",\n content: this.consts.currency.code\n }\n ,\n {\n property: \"og:image\",\n content: this.consts.mediaUrl()+this.mediaimg\n }\n ,\n {\n property: \"og:image:secure_url\",\n content: this.consts.mediaUrl()+this.mediaimg\n }\n ,\n {\n property: \"witter:site\",\n content: '@'\n }\n ,\n {\n property: \"twitter:card\",\n content: 'summary_large_image'\n }\n ,\n {\n property: \"twitter:title\",\n content: this.description\n }\n ,\n {\n property: \"twitter:description\",\n content: this.description\n }\n \n ], true);\n }\n this.paramsService.parameters.subscribe(res =>{ \n this.params = res != null ? res?.filter( elem => elem.code.includes('share')) : []\n });\n\n this.ecOnInit()\n }\n\n toShareFacebook = () => {\n //return `https://www.facebook.com/share.php?u=${encodeURIComponent(this.url)}`\n return `https://www.facebook.com/share.php?u=${this.url}`\n }\n\n toShareTwitter = () => {\n //return `https://twitter.com/share?text=${encodeURIComponent(this.description)};url=${encodeURIComponent(this.url)}`\n return `https://twitter.com/share?text=${this.description}&url=${this.url}`\n }\n\n toSharePinterest = () => {\n //return `https://pinterest.com/pin/create/button/?url=${encodeURIComponent(this.url)}&media=${encodeURIComponent(this.mediaimg)}&description=${encodeURIComponent(this.description)}`\n return `https://pinterest.com/pin/create/button/?url=${this.url}&media=${this.consts.mediaUrl()+this.mediaimg}&description=${this.description}`\n }\n\n toShareWhatsapp = (wsp) => {\n return `https://wa.me/${wsp.value}?text=Me%20interesa%20este%20producto.%20${this.url}`\n }\n\n toShareEmail = (mail) => {\n return `mailto:${mail.value}?subject=Consulta%20sobre%20el%20producto:%20${this.description}&body=Artículo:%20${this.url}`\n }\n\n createMetadata = () => {\n\n // <meta name=\"description\" content=\"Cojín JOY, en algodón rústico súper soft, tonos frescos y naturales, y con detalles de borlas para darle un toque divertido.\">\n // <meta property=\"og:site_name\" content=\"MYC HOME LINENS\">\n // <meta property=\"og:url\" content=\"https://myc-homelinens.com/products/cojin-algodon-joy-azul\">\n \n // <meta property=\"og:title\" content=\"COJÍN JOY - AZUL\">\n // <meta property=\"og:type\" content=\"product\">\n // <meta property=\"og:description\" content=\"Cojín JOY, en algodón rústico súper soft, tonos frescos y naturales, y con detalles de borlas para darle un toque divertido.\">\n // <meta property=\"og:price:amount\" content=\"20,20\">\n // <meta property=\"og:price:currency\" content=\"EUR\">\n // <meta property=\"og:image\" content=\"http://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYAZUL45FG_f3304197-1c5a-47e2-b993-8bfcde1f9978_1200x630.png?v=1614246269\">\n // <meta property=\"og:image\" content=\"http://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYAZULTEXTURA_1200x630.png?v=1614246269\">\n // <meta property=\"og:image\" content=\"http://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYJUNTOSCUADRADA_69e9dcc0-d4d1-42e1-94f8-30f4ea263325_1200x630.png?v=1614246269\">\n // <meta property=\"og:image:secure_url\" content=\"https://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYAZUL45FG_f3304197-1c5a-47e2-b993-8bfcde1f9978_1200x630.png?v=1614246269\">\n // <meta property=\"og:image:secure_url\" content=\"https://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYAZULTEXTURA_1200x630.png?v=1614246269\">\n // <meta property=\"og:image:secure_url\" content=\"https://cdn.shopify.com/s/files/1/0054/8179/1603/products/JOYJUNTOSCUADRADA_69e9dcc0-d4d1-42e1-94f8-30f4ea263325_1200x630.png?v=1614246269\">\n // <meta name=\"twitter:site\" content=\"@\">\n // <meta name=\"twitter:card\" content=\"summary_large_image\">\n // <meta name=\"twitter:title\" content=\"COJÍN JOY - AZUL\">\n // <meta name=\"twitter:description\" content=\"Cojín JOY, en algodón rústico súper soft, tonos frescos y naturales, y con detalles de borlas para darle un toque divertido.\">\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Component, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CheckoutData } from '../../../interfaces/checkout-data';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\n\n@Component({\n selector: 'app-detail-checkout-block-ec',\n templateUrl: './detail-checkout-block-ec.component.html',\n styleUrls: ['./detail-checkout-block-ec.component.scss'],\n})\nexport class DetailCheckoutBlockEcComponent extends ComponentHelper implements OnInit {\n\n @Input() asociatedData\n public data = null\n\n constructor(public checkoutService: CheckoutService,) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit(): void {\n this.asociatedData && (this.data = this.asociatedData) ||\n this.checkoutService.asociatedData$.subscribe(data => this.data = data)\n this.ecOnInit()\n }\n\n getIcon = (data_item: CheckoutData) => {\n\n switch (data_item.type) {\n case 'coupon': return 'fas fa-ticket-alt fa-3x';\n case 'discount': return 'fas fa-tags fa-3x';\n case 'shipment': return 'fas fa-shipping-fast fa-3x';\n case 'subtotal': return 'fas fa-boxes fa-3x';\n case 'taxes': return 'fas fa-file-invoice-dollar fa-3x';\n case 'total': return 'fas fa-shopping-basket fa-3x';\n default: return 'fas fa-tags fa-3x';\n }\n }\n // case 'coupon': return 'assets/images/iconosdetailcheckout/ticket-alt.svg';\n // case 'discount': return 'assets/images/iconosdetailcheckout/tags.svg';\n // case 'shipment': return 'assets/images/iconosdetailcheckout/shipping-fast.svg';\n // case 'subtotal': return 'assets/images/iconosdetailcheckout/boxes.svg';\n // case 'taxes': return 'assets/images/iconosdetailcheckout/file-invoice-dollar.svg';\n // case 'total': return 'assets/images/iconosdetailcheckout/shopping-basket.svg';\n // default: return 'assets/images/iconosdetailcheckout/shopping-basket.svg';\n}\n","import { THIS_EXPR, ThrowStmt } from '@angular/compiler/src/output/output_ast';\nimport { Component, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BsModalRef, BsModalService, ModalDirective } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { BodyError } from '../../interfaces/checkout/checkout-error';\nimport { CheckoutService } from '../../services/checkout/checkout.service';\nimport { ErrorHandlerService } from '../../services/checkout/error-handler.service';\n\n@Component({\n selector: 'ec-checkout-error',\n templateUrl: 'checkout-error-ec.component.html',\n styleUrls: ['checkout-error-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class CheckoutErrorComponent extends ComponentHelper implements OnInit {\n\n public error: BodyError;\n public bsModalRef: BsModalRef\n @ViewChild('template') protected template: TemplateRef<any>;\n @Input() urlRedireccion = '/cart'\n subs: Subscription;\n subsModal: Subscription;\n\n constructor(\n public checkoutErrorService: ErrorHandlerService,\n public checkoutService: CheckoutService,\n private modalService: BsModalService,\n private router: Router\n ) {\n super();\n }\n\n ngOnInit() {\n console.log('Componente manejo de errores inicializando')\n this.subs = this.checkoutErrorService.error$.pipe(filter(res => res != null)).subscribe(\n res => {\n this.error = res;\n setTimeout(() => {\n this.navigateByUrl()\n }, 3000);\n }\n );\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n this.subs?.unsubscribe()\n this.subsModal?.unsubscribe()\n }\n\n navigateByUrl = () => {\n this.router.navigateByUrl(this.urlRedireccion)\n }\n\n initializeTemplate = () => {\n if (!this.template) {\n setTimeout(() => {\n this.initializeTemplate()\n }, 1000);\n }else{\n this.subs = this.checkoutErrorService.error$.pipe(filter(res => res != null)).subscribe(\n res => {\n this.error = res;\n this.bsModalRef = this.modalService.show(this.template, { class: 'modal-lg ', keyboard: false, backdrop: 'static', animated: true })\n }\n );\n this.subsModal = this.modalService.onHide.subscribe(onClose => {\n this.bsModalRef = null\n this.navigateByUrl()\n })\n }\n }\n}","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../../classes/component-helper\";\nimport { ConnectionService } from '../../../../api/connection.service';\nimport { ToastService } from '../../../../utils/toast.service';\nimport { Constants } from '../../../../core.consts';\nimport { CartService } from '../../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\ndeclare var $ : any \n\n@Component({\n selector: 'app-mp-redirect-ec',\n templateUrl: 'mp-redirect-ec.component.html',\n styleUrls: ['mp-redirect-ec.component.scss'],\n})\nexport class MpRedirectEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() paymentServiceInst;\n @Input() allData;\n @Output() ready = new EventEmitter();\n protected preference;\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public ventana\n protected dataRedirect = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2, \n public connection: ConnectionService, \n public toastrService: ToastService,\n public consts: Constants, \n public cartService: CartService, \n public toastr: ToastService, \n public activedRoute: ActivatedRoute,\n private sanitizer: DomSanitizer) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.getPreference()\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n iniciar = () => {\n this.closeModal = ''\n this.clearStorageState()\n this.ventana = window.open(this.url)\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.ventana?.close()\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n !state && this.ventana.closed && (state = 'cancel')\n this.loading = true\n state && console.log(state);\n if (state) {\n this.loading = false\n localStorage.removeItem('state')\n if (state == 'success') {\n this.ventana?.close()\n this.ready.emit(true)\n return \n }\n if (state == 'pending') {\n this.ventana?.close()\n this.ready.emit(true)\n return\n }\n if (state == 'failure') {\n this.ventana?.close()\n this.processError('')\n return \n }\n if (state == 'cancel') {\n this.ventana?.close()\n this.processError('Se cancelo el pago con mercado pago')\n return \n }\n this.ventana?.close()\n this.processError('')\n return \n }\n setTimeout(() => {\n this.callState()\n }, 5000); \n \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n getPreference = () =>\n this.paymentServiceInst.getPreference(this.allData).then(\n res => {\n this.preference = res;\n this.url = this.preference.init_point\n this.renderMP(this.preference);\n },\n err => this.setError('operation-error')\n );\n\n setError = (message) => {\n //this.error = message;\n }\n\n renderMP = (preference) => {\n window.addEventListener(\"message\", (event) => {\n if (event.origin !== 'https://www.mercadopago.com.ar' || !event.data.type) {\n return;\n }\n let dataType = event.data.type;\n if (dataType === 'submit') {\n const paymentData = event.data.value;\n return;\n }\n });\n }\n}\n\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../classes/component-helper\";\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\ndeclare var $ : any \n\n@Component({\n selector: 'app-redsys-redirect-out-ec',\n templateUrl: 'redsys-redirect-out-ec.component.html',\n styleUrls: ['redsys-redirect-out-ec.component.scss'],\n})\nexport class RedSysRedirectOutEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() user_data = null;\n @Input() paymentServiceInst;\n @Input() allData;\n @Output() ready = new EventEmitter();\n protected preference;\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public ventana\n protected dataRedirect = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2, \n public connection: ConnectionService, \n public toastrService: ToastService,\n public consts: Constants, \n public cartService: CartService, \n public toastr: ToastService, \n public activedRoute: ActivatedRoute,\n private sanitizer: DomSanitizer) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n setTimeout(() => {\n this.url = \"../../../assets/redsysFrameRedirectOutBase.html\"\n }, 1000);\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n iniciar = () => {\n this.closeModal = ''\n this.clearStorageState()\n localStorage.setItem('dataRedirect', this.dataRedirect())\n this.ventana = window.open(this.url)\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.ventana?.close()\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n !state && this.ventana.closed && (state = 'cancel')\n this.loading = true\n state && console.log(state);\n if (state) {\n this.loading = false\n localStorage.removeItem('state')\n if (state == 'success' || state == 'ok') {\n this.ventana?.close()\n this.ready.emit(true)\n return \n }\n if (state == 'pending' || state == 'ok') {\n this.ventana?.close()\n this.ready.emit(true)\n return\n }\n if (state == 'failure' || state == 'error') {\n this.ventana?.close()\n this.processError('')\n return \n }\n if (state == 'cancel') {\n this.ventana?.close()\n this.processError('Se cancelo el pago con redsys')\n return \n }\n this.ventana?.close()\n this.processError('')\n return \n }\n setTimeout(() => {\n this.callState()\n }, 5000); \n \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n\n setError = (message) => {\n \n }\n\n}\n\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { Subscription } from 'rxjs';\ndeclare var paypal;\ndeclare var PAYPAL_CLIENT: any;\ndeclare var PAYPAL_SECRET: any;\ndeclare var PAYPAL_ORDER_API: any;\n\n@Component({\n selector: 'app-paypal-express-ec',\n templateUrl: 'paypal-express-ec.component.html',\n styleUrls: ['paypal-express-ec.component.scss'],\n})\nexport class PaypalExpressEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Output() ready = new EventEmitter();\n @Input() user_data = null;\n @ViewChild('template') protected template: TemplateRef<any>;\n @ViewChild('paypal', { static: true }) paypalElement: ElementRef;\n\n public getUrlNotification = () => this.consts.getUrlBase() + 'shop-api/' + this.consts.getChannel() + '/paypal/redirect/notification';\n\n producto = {\n descripcion: 'producto en venta',\n precio: 10,\n img: 'imagen de tu producto'\n }\n title = 'angular-paypal-payment';\n\n public loading = false;\n public cart = null;\n public tried = 10;\n public subsCart: Subscription;\n\n constructor(public renderer: Renderer2,\n public connection: ConnectionService,\n public toastrService: ToastService,\n public consts: Constants,\n public cartService: CartService,\n public toastr: ToastService,\n public activedRoute: ActivatedRoute) {\n super();\n\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.loading = true;\n this.setVariables()\n this.subsCart = this.cartService.cart.subscribe(cart => {\n this.cart = cart\n console.log(this.cart);\n let scriptSdk = this.renderer.createElement(\"script\");\n this.renderer.setAttribute(scriptSdk, 'src', 'https://www.paypal.com/sdk/js?client-id=' + this.method.config.public_client_id + '&currency=' + this.cart?.currency || 'USD');\n this.renderer.appendChild(document.body, scriptSdk);\n this.renderPayPal()\n })\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n this.subsCart.unsubscribe()\n }\n\n ngOnChanges() {\n }\n\n renderPayPal = () => {\n if (this.tried == 0) {\n return\n }else{\n this.tried--\n }\n setTimeout(() => {\n try {\n if ((typeof paypal !== 'undefined') && paypal != undefined && paypal != null) {\n paypal\n .Buttons({\n createOrder: (data, actions) => {\n return actions.order.create({\n purchase_units: [\n {\n amount: {\n currency_code: this.cart?.currency || 'USD',\n value: this.total_amount || this.cart?.totals?.total\n }\n }\n ]\n })\n },\n onApprove: async (data, actions) => {\n const order = await actions.order.capture();\n order.purchase_units[0]['reference_id'] = this.cart.tokenValue\n console.log(order);\n this.connection.postOutsider(this.getUrlNotification(), order).toPromise().then(res => {\n this.ready.emit(true)\n console.log('ok');\n }).catch(res => {\n this.processError('')\n console.log('error');\n })\n },\n onError: err => {\n console.log(err);\n this.processError('')\n }\n })\n .render(this.paypalElement.nativeElement);\n this.loading = false;\n } else {\n console.log('Entro al else');\n this.renderPayPal();\n }\n } catch (error) {\n console.log('Entro al catch');\n this.renderPayPal();\n }\n }, 1000);\n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n setVariables = () => {\n // setTimeout(() => {\n // if (typeof PAYPAL_CLIENT !== 'undefined'\n // && typeof PAYPAL_SECRET !== 'undefined'\n // && typeof PAYPAL_ORDER_API !== 'undefined') {\n // PAYPAL_CLIENT = this.method.config.public_client_id;\n // PAYPAL_SECRET = this.method.config.public_client_secret;\n // PAYPAL_ORDER_API = 'https://api-m.paypal.com/v2/checkout/orders/';\n // } else {\n // console.log('no entro al if');\n // this.setVariables()\n // }\n // }, 2000);\n }\n}","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../classes/component-helper\";\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\ndeclare var $ : any \n\n@Component({\n selector: 'app-mobbex-ec',\n templateUrl: 'mobbex-ec.component.html',\n styleUrls: ['mobbex-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class MobbexEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() paymentServiceInst;\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() allData;\n @Input() user_data = null;\n @Output() ready = new EventEmitter();\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n protected dataMobbex;\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public ventana\n protected dataRedirect = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2,\n public connection: ConnectionService,\n public toastrService: ToastService,\n public consts: Constants,\n public cartService: CartService,\n public toastr: ToastService,\n public activedRoute: ActivatedRoute,\n public sanitizer: DomSanitizer,\n public modalService: BsModalService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.getCheckoutMobbex()\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n this.modalRef = this.modalService.show(template, { class: 'modal-lg modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con mobbex')\n }\n\n\n callState = () => {\n try {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n this.loading = true\n state && console.log(state);\n if (state) {\n this.loading = false\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n if (state == 'success') {\n this.ready.emit(true)\n }\n if (state == 'cancel') {\n return\n }\n if (state == 'failure') {\n this.processError('')\n }\n this.modalRef.hide()\n return\n }\n setTimeout(() => {\n this.callState()\n }, 5000);\n } catch (error) {\n console.error(error);\n \n } \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n getCheckoutMobbex = () => {\n this.loading = true\n this.paymentServiceInst.getCheckoutMobbex(this.allData).then(\n res => {\n this.dataMobbex = res;\n this.url = res?.data?.url && this.sanitizer.bypassSecurityTrustResourceUrl(res?.data?.url)\n this.loading = false\n },\n err => {\n this.processError('operation-error')\n this.loading = false\n }\n );\n }\n\n}\n\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../classes/component-helper\";\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\ndeclare var $: any\n\n@Component({\n selector: 'app-bancard-ec',\n templateUrl: 'bancard-ec.component.html',\n styleUrls: ['bancard-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class BancardEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() paymentServiceInst;\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() allData;\n @Input() user_data = null;\n @Output() ready = new EventEmitter();\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n protected dataBancard;\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public ventana\n protected dataRedirect = () => this.consts.getUrlBase() + 'shop-api/' + this.consts.getChannel() + '/bancard/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2,\n public connection: ConnectionService,\n public toastrService: ToastService,\n public consts: Constants,\n public cartService: CartService,\n public toastr: ToastService,\n public activedRoute: ActivatedRoute,\n public sanitizer: DomSanitizer,\n public modalService: BsModalService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.getCheckoutBancard()\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n this.modalRef = this.modalService.show(template, { class: 'modal-lg modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con bancard')\n }\n\n\n callState = () => {\n try {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n this.loading = true\n state && console.log(state);\n if (state) {\n this.loading = false\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n if (state == 'success') {\n this.ready.emit(true)\n }\n if (state == 'cancel') {\n this.processError('Se cancelo el pago con bancard')\n return\n }\n if (state == 'failure') {\n this.processError('')\n }\n this.modalRef.hide()\n return\n }\n setTimeout(() => {\n this.callState()\n }, 5000);\n } catch (error) {\n console.error(error);\n }\n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n getCheckoutBancard = () => {\n this.loading = true\n this.paymentServiceInst.getCheckoutBancard(this.allData).then(\n res => {\n this.dataBancard = res;\n this.url = res?.iframe_link && this.sanitizer.bypassSecurityTrustResourceUrl(res?.iframe_link)\n res?.iframe_link || (this.url = null) && this.processError('operation-error')\n this.dataBancard?.process_id && localStorage.setItem('dataRedirect', this.dataBancard.process_id )\n this.loading = false\n },\n err => {\n this.processError('operation-error')\n this.loading = false\n }\n );\n }\n\n}\n\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../classes/component-helper\";\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\ndeclare var $ : any \n\n@Component({\n selector: 'app-bancard-redirect-ec',\n templateUrl: 'bancard-redirect-ec.component.html',\n styleUrls: ['bancard-redirect-ec.component.scss'],\n})\nexport class BancardRedirectEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() user_data = null;\n @Input() paymentServiceInst;\n @Input() allData;\n @Output() ready = new EventEmitter();\n protected preference;\n protected dataBancard;\n\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public ventana\n protected dataRedirect = () => this.consts.getUrlBase() +'shop-api/' + this.consts.getChannel() + '/redsys/redirect/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2, \n public connection: ConnectionService, \n public toastrService: ToastService,\n public consts: Constants, \n public cartService: CartService, \n public toastr: ToastService, \n public activedRoute: ActivatedRoute,\n private sanitizer: DomSanitizer) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.getCheckoutBancard()\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n iniciar = () => {\n this.closeModal = ''\n this.clearStorageState()\n this.ventana = window.open(this.url)\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.ventana?.close()\n }\n\n callState = () => {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n !state && this.ventana.closed && (state = 'cancel')\n this.loading = true\n state && console.log(state);\n if (state) {\n this.loading = false\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n if (state == 'success') {\n this.ready.emit(true)\n }\n if (state == 'cancel') {\n return\n }\n if (state == 'failure') {\n this.processError('')\n }\n this.ventana?.close()\n return\n }\n setTimeout(() => {\n this.callState()\n }, 4000); \n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n setError = (message) => {\n \n }\n\n getCheckoutBancard = () => {\n this.loading = true\n this.paymentServiceInst.getCheckoutBancard(this.allData).then(\n res => {\n this.dataBancard = res;\n this.url = res?.iframe_link && res?.iframe_link\n res?.iframe_link || (this.url = null) && this.processError('operation-error')\n this.loading = false\n },\n err => {\n this.processError('operation-error')\n this.loading = false\n }\n );\n }\n\n}\n\n","import { THIS_EXPR, ThrowStmt } from '@angular/compiler/src/output/output_ast';\nimport { Component, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BsModalRef, BsModalService, ModalDirective } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { BodyError } from '../../../interfaces/checkout/checkout-error';\nimport { AuthService } from '../../../services/auth.service';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\nimport { ErrorHandlerService } from '../../../services/checkout/error-handler.service';\n\n@Component({\n selector: 'select-channel-ec',\n templateUrl: 'select-channel-ec.component.html',\n styleUrls: ['select-channel-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class SelectChannelEcComponent extends ComponentHelper implements OnInit {\n\n public bsModalRef: BsModalRef\n @ViewChild('template') protected template: TemplateRef<any>;\n subs: Subscription;\n subsModal: Subscription;\n public channels = []\n\n constructor(\n public authService: AuthService,\n private modalService: BsModalService,\n private router: Router\n ) {\n super();\n }\n\n ngOnInit() {\n this.subs = this.authService.channelsUser.pipe(filter(res => res != null && res.length > 0)).subscribe(\n res => {\n this.channels = res.map(item => {\n return { ...(item as object), selected: false }\n })\n this.initializeTemplate()\n }\n );\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n this.subs?.unsubscribe()\n this.subsModal?.unsubscribe()\n }\n\n navigateByUrl = () => {\n this.router.navigateByUrl('')\n }\n\n initializeTemplate = () => {\n if (!this.template) {\n setTimeout(() => {\n this.initializeTemplate()\n }, 1000);\n } else {\n this.bsModalRef = this.modalService.show(this.template, { class: 'modal-sm modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true })\n this.subsModal = this.modalService.onHide.subscribe(onClose => {\n this.bsModalRef = null\n })\n }\n }\n\n setSelect = (chanelSelect: any) => {\n this.channels.map(chanel => chanel.selected = chanel.code == chanelSelect.code)\n }\n\n setChannel = () => {\n if (this.channels.find(chanel => chanel.selected)) {\n this.authService.channelAccess(this.channels.find(chanel => chanel.selected))\n this.bsModalRef.hide()\n }\n }\n\n\n}","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { combineLatest } from 'rxjs';\nimport { ComponentHelper } from '../../../classes/component-helper';\nimport { CartService } from '../../../services/cart.service';\nimport { CheckoutService } from '../../../services/checkout/checkout.service';\ndeclare var $: any;\n\n@Component({\n selector: 'app-cart-load-ec',\n templateUrl: './cart-load-ec.component.html',\n styleUrls: ['./cart-load-ec.component.scss']\n})\nexport class CartLoadEcComponent extends ComponentHelper implements OnInit {\n\n public message = ''\n\n constructor(public activedRoute: ActivatedRoute, \n public router: Router, \n public checkoutService: CheckoutService, \n public cartService: CartService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n let token\n combineLatest([this.activedRoute.params, this.activedRoute.queryParams]).subscribe(([queryRouter, queryParams]) => {\n token = queryRouter.token\n console.log('PARAMETROS token -> ', token);\n this.cartService.loadCartByToken(token).then(res => {\n this.router.navigateByUrl('/cart')\n })\n })\n this.ecOnInit()\n }\n\n}\n","import { ElementRef, OnChanges, SimpleChanges } from '@angular/core';\nimport { Component, OnInit, Input, ViewChild } from '@angular/core';\n\ninterface Size2D { width: number; height: number; }\ntype Point2D = { x: number, y: number } | null;\n\n@Component({\n selector: '[app-magnizoom-ec]',\n templateUrl: './magnizoom.component.html',\n styleUrls: ['./magnizoom.component.scss']\n})\nexport class MagnizoomComponent implements OnInit {\n\n private imageSrc:string\n @Input() set ImageSrc(value) { \n this.imageSrc = value; \n this.loadImage(this.imageSrc); \n }\n @Input() zoomMode: 'LENS' | 'COVER' = 'COVER';\n @Input() minZoomFactor = 1.2;\n @Input() maxZoomFactor = 3;\n\n @Input() imageStyle: { [x: string]: any; };\n @Input() imageClass: any;\n\n @ViewChild('mainCanvas', { static: true }) mainCanvasRef: ElementRef;\n\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n image: HTMLImageElement;\n\n mousePosition: Point2D = null;\n lensSize: Size2D = { width: 400, height: 300 };\n zoomFactor = 2;\n\n get canvasWidth() { return this.image && this.image.width || 800; }\n get canvasHeight() { return this.image && this.image.height || 600; }\n\n constructor() { }\n \n ngOnInit() {\n this.initContext();\n this.loadImage(this.imageSrc);\n }\n\n initContext() {\n \n this.canvas = (this.mainCanvasRef.nativeElement as HTMLCanvasElement);\n this.context = this.canvas.getContext('2d');\n }\n\n loadImage(src: string) {\n \n this.image = new Image();\n this.image.onload = () => {\n this.lensSize = { width: this.image.width / 2, height: this.image.height / 2 };\n setTimeout(() => this.render());\n };\n this.image.src = src;\n }\n\n render() {\n this.context.clearRect(0, 0, this.canvasWidth, this.canvasHeight); // clear canvas\n this.context.lineWidth = 1; // border width\n this.context.drawImage(this.image, 0, 0); // bg image\n\n if (this.mousePosition) {\n switch (this.zoomMode) {\n case 'LENS': this.renderLensMode(); break;\n case 'COVER': this.renderCoverMode(); break;\n }\n }\n }\n\n renderLensMode() {\n this.context.lineWidth = 5; // border width\n const zoomRect = this.getZoomRect();\n this.context.fillRect(zoomRect.x, zoomRect.y, zoomRect.w, zoomRect.h); // bg (clear)\n const clippingRect = this.getClippingRect();\n // zoom image\n this.context.drawImage(\n this.image,\n clippingRect.x, clippingRect.y, clippingRect.w, clippingRect.h,\n zoomRect.x, zoomRect.y, zoomRect.w, zoomRect.h\n );\n this.context.strokeRect(zoomRect.x, zoomRect.y, zoomRect.w, zoomRect.h); // border\n }\n\n renderCoverMode() {\n const covertRect = this.getCoverRect();\n this.context.drawImage(\n this.image,\n covertRect.x, covertRect.y, covertRect.w, covertRect.h,\n 0, 0, this.canvasWidth, this.canvasHeight\n ); // cover image\n }\n\n getZoomRect() {\n const w = this.lensSize.width;\n const h = this.lensSize.height;\n const x = this.mousePosition.x - (w / 2);\n const y = this.mousePosition.y - (h / 2);\n return this.clampRect(x, y, w, h);\n }\n\n getClippingRect() {\n const w = this.lensSize.width / this.zoomFactor;\n const h = this.lensSize.height / this.zoomFactor;\n const x = this.mousePosition.x - (w / 2);\n const y = this.mousePosition.y - (h / 2);\n return this.clampRect(x, y, w, h);\n }\n\n getCoverRect() {\n const w = this.canvasWidth / this.zoomFactor;\n const h = this.canvasHeight / this.zoomFactor;\n // const x = this.mousePosition.x - (w / 2);\n // const y = this.mousePosition.y - (h / 2);\n const x = this.mousePosition.x - this.mousePosition.x / this.zoomFactor;\n const y = this.mousePosition.y - this.mousePosition.y / this.zoomFactor;\n return this.clampRect(x, y, w, h);\n }\n\n clampRect(x: number, y: number, w: number, h: number) {\n if (x <= 0) { x = 0; }\n if (x + w >= this.canvasWidth) { x = this.canvasWidth - w; }\n if (y < 0) { y = 0; }\n if (y + h >= this.canvasHeight) { y = this.canvasHeight - h; }\n return { x, y, w, h };\n }\n\n calculateMousePosition(clientX: number, clientY: number) {\n const boundingRect = this.canvas.getBoundingClientRect();\n const viewToModelX = this.canvasWidth / boundingRect.width;\n const viewToModelY = this.canvasHeight / boundingRect.height;\n const x = (clientX - boundingRect.left) * viewToModelX;\n const y = (clientY - boundingRect.top) * viewToModelY;\n this.mousePosition = { x, y };\n }\n\n onMouseLeave(event: MouseEvent) {\n this.mousePosition = null;\n this.render();\n }\n\n onMouseEnterOrMove(event: MouseEvent) {\n this.calculateMousePosition(event.clientX, event.clientY);\n this.render();\n }\n\n onMouseScroll(event: WheelEvent) {\n let newZoomFactor = this.zoomFactor;\n newZoomFactor -= event.deltaY / 1000;\n if (newZoomFactor < this.minZoomFactor) { newZoomFactor = this.minZoomFactor; }\n if (newZoomFactor > this.maxZoomFactor) { newZoomFactor = this.maxZoomFactor; }\n if (this.zoomFactor !== newZoomFactor) {\n this.zoomFactor = newZoomFactor;\n this.render();\n }\n event.preventDefault();\n event.stopPropagation();\n }\n\n\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ComponentHelper } from '../../classes/component-helper';\nimport { Constants } from '../../core.consts';\nimport { ParamsProductsWithUniqueVariant } from '../../interfaces/paramsInterfaces/paramsProductsWithUniqueVariant';\nimport { Product } from '../../interfaces/product';\nimport { ProductDetailService } from '../../services/products/product-detail.service';\ndeclare var $: any;\n\n@Component({\n selector: 'app-multiple-items-to-cart-ec',\n templateUrl: 'multiple-items-to-cart-ec.component.html',\n styleUrls: ['multiple-items-to-cart-ec.component.scss']\n})\nexport class MultipleItemsToCartEcComponent extends ComponentHelper {\n\n @Input() product: Product;\n @Input() objectWithVariant: ParamsProductsWithUniqueVariant;\n @Output() totalCostItems = new EventEmitter()\n @Output() totalItems = new EventEmitter()\n\n public total = 0\n public countItems = 0\n\n constructor(public consts: Constants, public productService: ProductDetailService) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.product.productWithUniqueVariant = this.productService?.getProductWithUniqueVariant(this.product, this.getObjectParamsWithVariant())\n this.ecOnInit()\n }\n\n optionsProductForVariant = () => this.product.productWithUniqueVariant\n\n setQuantity = (value, product: Product) => {\n \n let quantity = Number(value) > product.currentOption.stock ? product.currentOption.stock : Number(value)\n product.productToCartItem = {\n productCode: product.currentOption.productCode,\n variantCode: product.currentOption.variantCode,\n quantity: quantity,\n finalPrice: product.currentOption.finalPrice,\n totalCost: quantity * product.currentOption.finalPrice,\n }\n\n this.total = 0\n this.countItems = 0\n this.product.productWithUniqueVariant.filter(prod => prod.productToCartItem).map(\n prod => {\n this.total += prod.productToCartItem.totalCost\n this.countItems += prod.productToCartItem.quantity\n }\n )\n this.totalCostItems.emit(this.total.toString())\n this.totalItems.emit(this.countItems.toString())\n\n }\n\n condition = (value, product: Product) : boolean => {\n if (Number(value) >= product.currentOption.stock) {\n return false\n }\n return true\n }\n\n allWithoutTracking = () => this.optionsProductForVariant().some( item => item.currentOption?.stock != 9999)\n\n private getObjectParamsWithVariant = (): ParamsProductsWithUniqueVariant => {\n return this.objectWithVariant || this.getObjectWithVariant()\n } \n\n getObjectWithVariant = (): ParamsProductsWithUniqueVariant => {\n return { type: 'color', code: 'color', defaultFirstOption: true , checkIfStock: false }\n } \n\n}","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { RecaptchaSettings } from 'ng-recaptcha/recaptcha/recaptcha-settings';\nimport { BehaviorSubject} from 'rxjs';\nimport { map, filter, concatMap} from 'rxjs/operators';\nimport { ConnectionService } from '../api/connection.service';\nimport { Constants } from '../core.consts';\nimport { ParametersService } from '../services/parameters.service';\n\n//import * from '../assets/ec-i18n'\n@Injectable({\n providedIn: 'root'\n})\nexport class CaptchaService {\n \n private captchaSubject: BehaviorSubject<RecaptchaSettings> = new BehaviorSubject({siteKey:''})\n public captcha = this.captchaSubject.asObservable()\n \n public params: any;\n\n private urlBaseFormat:string\n private testing:string = \"easycommercetech\"\n private productionEnvironment:Boolean = false;\n \n private recaptchaSiteKeysUrl = './assets/recaptcha/recaptcha-site-keys.json';\n private recaptchaSitesUrl = './assets/recaptcha/recaptcha-sites.json';\n private recaptchaSitesUrlProd = './assets/recaptcha/recaptcha-sites-prod.json'\n\n private RECAPTCHA_SITE_KEYS \n private RECAPTCHA_SITES \n /**\n * @description Carga las configuraciones iniciales\n * @param consts Constantes del core\n * @param connection Servicio para realizar las peticiones HTTP al backend\n * @param http Servicio utilizado para obtener archivos estaticos contenidos dentro de la aplicación\n */\n constructor(private consts: Constants,\n private connection: ConnectionService,\n private http:HttpClient,\n protected paramsSrv: ParametersService,\n ) {\n this.paramsSrv.parameters.subscribe(param => this.params = param)\n /**\n * @description Carga la direccion de la pagina actual que sera utilizada como clave para obtener\n * la clave por defecto que pertenece a esta direccion, inicializa la configuracion inicial.\n */\n this.urlBaseFormat = this.formatUrl(location.href)\n this.productionEnvironment = this.isProd()\n this.initializer()\n }\n /**\n * \n * @returns {string} path que contiene la direccion del endpoint referido al captcha\n */\n private captchaApi = () => 'shop-api/channels';\n \n /**\n * @description Devuelve true si la url es de produccion, false en caso contrario. \n * @returns {Boolean}\n */\n private isProd = () => !this.urlBaseFormat.includes(this.testing)\n\n /**\n * @description Prioriza si existe un parametro desde el backend de nombre 'recaptcha_key_canal', \n * de no existir este busca uno de tipo general de nombre 'recaptcha_key',\n * y en caso de que este no exista se realiza lo siguiente: \n * carga las variables RECAPTCHA_SITES y RECAPTCHA_SITE_KEYS, con los valores\n * de los Json estaticos, para posteriormente obtener la \"siteKey\"(clave del captcha) en caso\n * de que no venga desde el backend. \n */\n private initializer = () => {\n let paramThisChannel = this.params.find(param => param.code == 'recaptcha_key_' + this.consts.getChannel())\n if (paramThisChannel) {\n this.captchaSubject.next({ siteKey: paramThisChannel.value })\n } else {\n let paramGeneral = this.params.find(param => param.code == 'recaptcha_key')\n if (paramGeneral) {\n this.captchaSubject.next({ siteKey: paramGeneral.value })\n } else {\n this.getRecaptchaSites().pipe(\n //filter( e => e[this.urlBaseFormat+'ee'] ),\n map(res => this.RECAPTCHA_SITES = res),\n concatMap(e => this.getRecaptchaSiteKeys().pipe(\n map(res => this.RECAPTCHA_SITE_KEYS = res)))).subscribe(\n e => this.getSiteKey())\n }\n }\n }\n \n /**\n * \n * @returns {Observable<>} Datos obtenidos del archivo con las claves captcha\n */\n private getRecaptchaSiteKeys = () => {\n return this.http.get<any[]>(this.recaptchaSiteKeysUrl)\n }\n\n /**\n * @description Se obtiene los datos segun el entorno en que se ejecute\n * @returns {Observable<>} Datos obtenidos del archivo con las url de los sitios\n */\n private getRecaptchaSites = () => this.productionEnvironment ? this.http.get<any[]>(this.recaptchaSitesUrlProd) : this.http.get<any[]>(this.recaptchaSitesUrl)\n\n /**\n * @description Genera una peticion para recibir la clave del captcha. En caso de no tener exito,\n * utiliza los archivos estaticos para retornar una clave por defecto. Rellena el Observable con\n * los datos generados.\n */\n private getSiteKey = () => {\n this.connection.get(this.captchaApi()).toPromise().then(\n res => { console.log(res); this.captchaSubject.next({ siteKey: res.siteKey ? res.siteKey : this.RECAPTCHA_SITE_KEYS[this.RECAPTCHA_SITES[this.urlBaseFormat]] }) },\n err => { console.log('ERROR 1', err); this.captchaSubject.next({ siteKey: this.RECAPTCHA_SITES[this.RECAPTCHA_SITES[this.urlBaseFormat]] }) }\n ).catch(err => { console.log('ERROR 2 ', err, ' Base url:', this.consts.getUrlBase()); this.captchaSubject.next({ siteKey: this.RECAPTCHA_SITE_KEYS[this.RECAPTCHA_SITES[this.urlBaseFormat]] }) })\n //console.log(this.captcha)\n }\n\n /**\n * \n * @returns {string} Clave del captcha.\n */\n public getKey = () => {\n return this.captcha.pipe(map((elem) => elem?.siteKey));\n }\n\n /**\n * @description Recibe una url y se encarga de quitarle \"http\", \"/\" y las demas rutas, para devolver la url\n * del sitio con una formato limpio. Ejemplo \"https://ejemplo.com.ar/ruta1/ruta2/\" a \"ejemplo.com.ar\" \n * @param {string} url url que sera formateada \n * @returns {string} url formateada\n */\n private formatUrl = (url:string) => url.split(\"/\").filter(e => e != \"/\").filter(e => !e.includes(\"http\")).filter(e => e.length).slice(0,1).pop()\n\n}","import { ElementRef, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { Component, OnInit, Input, ViewChild } from '@angular/core';\nimport { CaptchaService } from '../../../services/captcha.service';\n\ninterface Size2D { width: number; height: number; }\ntype Point2D = { x: number, y: number } | null;\n\n@Component({\n selector: 're-captcha-ec',\n templateUrl: './re-captcha-ec.component.html',\n styleUrls: ['./re-captcha-ec.component.scss']\n})\nexport class RecaptchaEcComponent implements OnInit {\n \n /**\n * @param form recibe el formulario que contiene al captcha.\n * @param siteKey recibe un string con la clave para el captcha\n */\n @Input() form: any;\n @Input() siteKey: string;\n public captcha:any;\n constructor(public captchaService: CaptchaService){ \n }\n\n ngOnInit(): void {\n // throw new Error('Method not implemented.');\n this.captchaService.captcha.subscribe( res => {\n this.captcha = res;\n this.updateKey()} )\n }\n\n /**\n * @description Carga el campo captcha del formulario pasado con la respuesta luego de completar el captcha.\n * @param {string} captchaResponse obtiene la respuesta que genero el captcha.\n */\n resolved(captchaResponse: string) {\n this.form.catpcha = captchaResponse;\n }\n /**\n * @description Actualiza la clave si está es pasada por parametro en la variable siteKey \n * @returns {null}\n */\n updateKey = () => this.siteKey ? this.captcha.siteKey = this.siteKey : null\n\n \n}\n","import { Component, Output, OnInit, ViewChild, ElementRef, Input, Renderer2, Inject, OnChanges, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgForm } from '@angular/forms';\nimport { ComponentHelper } from \"../../../classes/component-helper\";\nimport { ConnectionService } from '../../../api/connection.service';\nimport { ToastService } from '../../../utils/toast.service';\nimport { Constants } from '../../../core.consts';\nimport { CartService } from '../../../services/cart.service';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { ParametersService } from '../../../services/parameters.service';\ndeclare var $: any\n\n@Component({\n selector: 'app-decidir-ec',\n templateUrl: 'decidir-ec.component.html',\n styleUrls: ['decidir-ec.component.scss'],\n providers: [BsModalService]\n})\nexport class DecidirEcComponent extends ComponentHelper implements OnInit, OnDestroy, OnChanges {\n\n @Input() paymentServiceInst;\n @Input() method = null;\n @Input() total_amount = 0;\n @Input() allData;\n @Input() user_data = null;\n @Output() ready = new EventEmitter();\n @ViewChild('template') protected template: TemplateRef<any>;\n protected modalRef: BsModalRef | null;\n protected dataDecidir;\n\n public loading = false;\n public isDobleAuth = false;\n public urls = [];\n public url;\n public closeModal = ''\n public paramsMensaje = ''\n public ventana\n public params\n protected dataRedirect = () => this.consts.getUrlBase() + 'shop-api/' + this.consts.getChannel() + '/decidir/' + this.cartService.cart_token + '/process-payment';\n\n constructor(public renderer: Renderer2,\n public connection: ConnectionService,\n public toastrService: ToastService,\n public consts: Constants,\n public cartService: CartService,\n public activedRoute: ActivatedRoute,\n public sanitizer: DomSanitizer,\n public modalService: BsModalService,\n public paramsService: ParametersService\n ) {\n super();\n this.ecOnConstruct()\n }\n\n ngOnInit() {\n this.getCheckoutDecidir()\n this.paramsService.parameters.subscribe(res => {\n this.params = res\n this.paramsMensaje = this.hasParams(res,'partially_authorized_decidir') || 'Se está procesando el pago con tarjeta.'\n });\n this.ecOnInit()\n }\n\n ngOnDestroy() {\n // console.log(\"SE DESTROZA\");\n }\n\n ngOnChanges() {\n // console.log(\"SE CAMBIO\");\n }\n\n openModal(template: TemplateRef<any>) {\n this.clearStorageState()\n localStorage.setItem('dataRedirect', this.dataRedirect())\n localStorage.setItem('dataDecidir', JSON.stringify(this.method))\n this.modalRef = this.modalService.show(template, { class: 'modal-xl modal-dialog-centered ', keyboard: false, backdrop: 'static', animated: true });\n this.closeModal = ''\n this.callState()\n }\n\n clearStorageState = () => {\n sessionStorage.removeItem('state')\n localStorage.removeItem('state')\n localStorage.removeItem('dataRedirect')\n localStorage.removeItem('dataDecidir')\n localStorage.removeItem('message')\n localStorage.removeItem('subMessage')\n }\n\n clickClose = () => {\n this.closeModal = 'cancel'\n this.modalRef.hide()\n this.processError('Se cancelo el pago con Decidir')\n }\n\n showMessage = () => {\n let message = localStorage.getItem('message') || undefined\n let subMessage = localStorage.getItem('subMessage') || undefined\n message && this.toastrService.show(message,{},'', {closeButton:true,timeOut:6000});\n subMessage && this.toastrService.show(subMessage,{},'', {closeButton:true,timeOut:6000});\n }\n\n\n callState = () => {\n try {\n let state = this.closeModal != '' ? this.closeModal : localStorage.getItem('state')\n this.loading = true\n state && this.showMessage();\n if (state) {\n this.loading = false\n this.clearStorageState()\n if (state == 'success') {\n this.ready.emit(true)\n }\n if (state == 'partially_authorized') {\n this.ready.emit(true)\n this.processError(this.paramsMensaje)\n }\n if (state == 'cancel') {\n return\n }\n if (state == 'failure') {\n this.processError('')\n }\n this.modalRef.hide()\n return\n }\n setTimeout(() => {\n this.callState()\n }, 5000);\n } catch (error) {\n console.error(error);\n\n }\n }\n\n processError = (err) => {\n this.toastrService.show(err != '' ? err : 'payment-error');\n console.log(\"ERROR ENVIO BACK \", err);\n }\n\n getCheckoutDecidir = () => {\n this.loading = true\n this.dataDecidir = this.method;\n this.url = this.sanitizer.bypassSecurityTrustResourceUrl('assets/decidirFormEc.html')\n this.loading = false\n }\n\n resizeIframe = (obj) => {\n obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';\n obj.style.width = obj.contentWindow.document.body.scrollWidth + 'px';\n }\n\n}\n\n","// //Component base\n\nimport { AccountEcComponent } from \"./account-ec/account-ec.component\";\nimport { BlockBannerBoxesEcComponent } from \"./blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component\";\nimport { BlockBannerFullEcComponent } from \"./blocks-ec/block-banner-full-ec/block-banner-full-ec.component\";\nimport { BlockFormContactEcComponent } from \"./blocks-ec/block-form-contact-ec/block-form-contact-ec.component\";\nimport { BlockHtmlEcComponent } from \"./blocks-ec/block-html-ec/block-html-ec.component\";\nimport { ContactFormNewsEcComponent } from \"./blocks-ec/block-newsletter-ec/contact-form-news-ec.component\";\nimport { BlockProductsEcComponent } from \"./blocks-ec/block-products-ec/block-products-ec.component\";\nimport { BlocksEcComponent } from \"./blocks-ec/blocks-ec.component\";\nimport { CartEcComponent } from \"./cart-ec/cart-ec.component\";\nimport { CheckoutEcComponent } from \"./checkout-ec/checkout-ec.component\";\nimport { DataFormEcComponent } from \"./checkout-ec/dataform-ec/dataform-ec.component\";\nimport { PaymentEcComponent } from \"./checkout-ec/payment-ec/payment-ec.component\";\nimport { ShipmentEcComponent } from \"./checkout-ec/shipment-ec/shipment-ec.component\";\nimport { SuccessEcComponent } from \"./checkout-ec/success-ec/success-ec.component\";\nimport { CollectionEcComponent } from \"./collection-ec/collection-ec.component\";\nimport { CouponEcComponent } from \"./coupon-ec/coupon-ec.component\";\nimport { FaqsContentEcComponent } from \"./faqs-content-ec/faqs-content-ec.component\";\nimport { FiltersEcComponent } from \"./filters-ec/filters-ec.component\";\nimport { FiltersTopEcComponent } from \"./filters-top-ec/filters-top-ec.component\";\nimport { FooterEcComponent } from \"./footer-ec/footer-ec.component\";\nimport { HeaderEcComponent } from \"./header-ec/header-ec.component\";\nimport { HomeEcComponent } from \"./home-ec/home-ec.component\";\nimport { LoginEcComponent } from \"./login-ec/login-ec.component\";\nimport { ProductDetailEcComponent } from \"./product-detail-ec/product-detail-ec.component\";\nimport { ProductEcComponent } from \"./product-ec/product-ec.component\";\nimport { RelatedProductsEcComponent } from \"./related-products-ec/related-products-ec.component\";\nimport { SectionContainerEcComponent } from \"./section-container-ec/section-container-ec.component\";\nimport { StoresEcComponent } from \"./stores-ec/stores-ec.component\";\nimport { VariantsEcComponent } from \"./variants-ec/variants-ec.component\";\nimport { SellerDashboardContainerEcComponent } from \"./seller-dashboard-container-ec/seller-dashboard-container-ec.component\";\nimport { LoadingFullEcComponent } from \"./widgets-ec/loading-full-ec/loading-full-ec.component\";\nimport { LoadingInlineEcComponent } from \"./widgets-ec/loading-inline-ec/loading-inline-ec.component\";\nimport { MPCreditEcComponent } from \"./widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component\";\nimport { PriceEcComponent } from \"./widgets-ec/price-ec/price-ec.component\";\nimport { RedsysCatchEcComponent } from \"./widgets-ec/redsys-catch-ec/redsys-catch-ec.component\";\nimport { RedSysProEcComponent } from \"./widgets-ec/redsys-pro-ec/redsys-pro-ec.component\";\nimport { RedSysRedirectEcComponent } from \"./widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component\";\nimport { CecaRedirectEcComponent } from \"./widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component\";\nimport { OrdersEcComponent } from \"./account-ec/orders-list-ec/orders-list-ec.component\";\nimport { OrderEcComponent } from \"./account-ec/order-ec/order-ec.component\";\nimport { AuthEcComponent } from \"./auth-ec/auth-ec.component\";\nimport { RegisterFormEcComponent } from \"./auth-ec/register-form-ec/register-form-ec.component\";\nimport { LoginFormEcComponent } from \"./auth-ec/login-form-ec/login-form-ec.component\";\nimport { ForgotPasswordEcComponent } from \"./auth-ec/forgot-password-ec/forgot-password-ec.component\";\nimport { ConfirmAccountEcComponent } from \"./auth-ec/confirm-account-ec/confirm-account-ec.component\";\nimport { PasswordResetEcComponent } from \"./password-reset-ec/password-reset-ec.component\";\nimport { RegisterWholesalerFormEcComponent } from \"./auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component\";\nimport { ShareBlockEcComponent } from \"./share-block-ec/share-block-ec.component\";\nimport { DetailCheckoutBlockEcComponent } from \"./checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component\";\nimport { CheckoutErrorComponent } from \"./checkout-error-ec/checkout-error-ec.component\";\nimport { MpRedirectEcComponent } from \"./widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component\";\nimport { RedSysRedirectOutEcComponent } from \"./widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component\";\nimport { PaypalExpressEcComponent } from \"./widgets-ec/paypal-express-ec/paypal-express-ec.component\";\nimport { MobbexEcComponent } from \"./widgets-ec/mobbex-ec/mobbex-ec.component\";\nimport { BancardEcComponent } from \"./widgets-ec/bancard-ec/bancard-ec.component\";\nimport { BancardRedirectEcComponent } from \"./widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component\";\nimport { SelectChannelEcComponent } from \"./auth-ec/select-channel-ec/select-channel-ec.component\";\nimport { CartLoadEcComponent } from \"./widgets-ec/cart-load-ec/cart-load-ec.component\";\nimport { MagnizoomComponent } from \"./widgets-ec/zoom-ec/magnizoom.component\";\nimport { MultipleItemsToCartEcComponent } from \"./multiple-items-to-cart-ec/multiple-items-to-cart-ec.component\";\nimport { RecaptchaEcComponent } from \"./widgets-ec/re-captcha-ec/re-captcha-ec.component\";\nimport { DecidirEcComponent } from \"./widgets-ec/decidir-ec/decidir-ec.component\";\n\n\nexport const components: any[] = [\n BlockBannerBoxesEcComponent,\n BlockBannerFullEcComponent,\n BlockFormContactEcComponent,\n BlockHtmlEcComponent,\n ContactFormNewsEcComponent,\n BlockProductsEcComponent,\n BlocksEcComponent,\n\n CartEcComponent,\n\n DataFormEcComponent,\n PaymentEcComponent,\n ShipmentEcComponent,\n SuccessEcComponent,\n CheckoutEcComponent,\n \n CollectionEcComponent,\n CouponEcComponent,\n FaqsContentEcComponent,\n FiltersEcComponent,\n FiltersTopEcComponent,\n FooterEcComponent,\n HeaderEcComponent,\n LoginEcComponent,\n ProductEcComponent,\n RelatedProductsEcComponent,\n SectionContainerEcComponent,\n StoresEcComponent,\n VariantsEcComponent,\n SellerDashboardContainerEcComponent,\n \n LoadingInlineEcComponent,\n LoadingFullEcComponent,\n MPCreditEcComponent,\n PriceEcComponent,\n RedsysCatchEcComponent,\n RedSysProEcComponent,\n RedSysRedirectEcComponent,\n HomeEcComponent,\n ProductDetailEcComponent,\n AccountEcComponent,\n OrdersEcComponent,\n OrderEcComponent,\n AuthEcComponent,\n RegisterFormEcComponent,\n LoginFormEcComponent,\n SelectChannelEcComponent,\n ForgotPasswordEcComponent,\n ConfirmAccountEcComponent,\n PasswordResetEcComponent,\n CecaRedirectEcComponent,\n\n RegisterWholesalerFormEcComponent,\n\n ShareBlockEcComponent,\n DetailCheckoutBlockEcComponent,\n\n CheckoutErrorComponent,\n MpRedirectEcComponent,\n RedSysRedirectOutEcComponent,\n PaypalExpressEcComponent,\n\n MobbexEcComponent,\n BancardEcComponent,\n BancardRedirectEcComponent,\n DecidirEcComponent,\n\n CartLoadEcComponent,\n MultipleItemsToCartEcComponent,\n\n MagnizoomComponent,\n RecaptchaEcComponent\n];\n\n\nexport * from \"./blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component\";\nexport * from \"./blocks-ec/block-banner-full-ec/block-banner-full-ec.component\";\nexport * from \"./blocks-ec/block-form-contact-ec/block-form-contact-ec.component\";\nexport * from \"./blocks-ec/block-html-ec/block-html-ec.component\";\nexport * from \"./blocks-ec/block-newsletter-ec/contact-form-news-ec.component\";\nexport * from \"./blocks-ec/block-products-ec/block-products-ec.component\";\nexport * from \"./blocks-ec/blocks-ec.component\";\nexport * from \"./cart-ec/cart-ec.component\";\nexport * from \"./checkout-ec/checkout-ec.component\";\nexport * from \"./checkout-ec/dataform-ec/dataform-ec.component\";\nexport * from \"./checkout-ec/payment-ec/payment-ec.component\";\nexport * from \"./checkout-ec/shipment-ec/shipment-ec.component\";\nexport * from \"./checkout-ec/success-ec/success-ec.component\";\nexport * from \"./collection-ec/collection-ec.component\";\nexport * from \"./coupon-ec/coupon-ec.component\";\nexport * from \"./faqs-content-ec/faqs-content-ec.component\";\nexport * from \"./filters-ec/filters-ec.component\";\nexport * from \"./filters-top-ec/filters-top-ec.component\";\nexport * from \"./footer-ec/footer-ec.component\";\nexport * from \"./header-ec/header-ec.component\";\nexport * from \"./login-ec/login-ec.component\";\nexport * from \"./product-ec/product-ec.component\";\nexport * from \"./related-products-ec/related-products-ec.component\";\nexport * from \"./section-container-ec/section-container-ec.component\";\nexport * from \"./stores-ec/stores-ec.component\";\nexport * from \"./variants-ec/variants-ec.component\";\nexport * from \"./seller-dashboard-container-ec/seller-dashboard-container-ec.component\";\nexport * from \"./widgets-ec/loading-full-ec/loading-full-ec.component\";\nexport * from \"./widgets-ec/loading-inline-ec/loading-inline-ec.component\";\nexport * from \"./widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component\";\nexport * from \"./widgets-ec/price-ec/price-ec.component\";\nexport * from \"./widgets-ec/redsys-catch-ec/redsys-catch-ec.component\";\nexport * from \"./widgets-ec/redsys-pro-ec/redsys-pro-ec.component\";\nexport * from \"./widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component\";\nexport * from \"./home-ec/home-ec.component\";\nexport * from \"./product-detail-ec/product-detail-ec.component\";\nexport * from \"./account-ec/account-ec.component\";\nexport * from \"./account-ec/orders-list-ec/orders-list-ec.component\";\nexport * from \"./account-ec/order-ec/order-ec.component\";\nexport * from \"./auth-ec/auth-ec.component\";\nexport * from \"./auth-ec/register-form-ec/register-form-ec.component\";\nexport * from \"./auth-ec/login-form-ec/login-form-ec.component\";\nexport * from \"./auth-ec/forgot-password-ec/forgot-password-ec.component\";\nexport * from \"./auth-ec/confirm-account-ec/confirm-account-ec.component\";\nexport * from \"./password-reset-ec/password-reset-ec.component\";\nexport * from \"./auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component\";\nexport * from \"./share-block-ec/share-block-ec.component\";\nexport * from \"./checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component\";\nexport * from \"./widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component\";\nexport * from './widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component';\nexport * from \"./checkout-error-ec/checkout-error-ec.component\";\nexport * from \"./widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component\";\nexport * from \"./widgets-ec/paypal-express-ec/paypal-express-ec.component\";\nexport * from \"./widgets-ec/mobbex-ec/mobbex-ec.component\";\nexport * from \"./widgets-ec/bancard-ec/bancard-ec.component\";\nexport * from \"./widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component\";\nexport * from \"./auth-ec/select-channel-ec/select-channel-ec.component\";\nexport * from \"./widgets-ec/cart-load-ec/cart-load-ec.component\";\nexport * from \"./widgets-ec/zoom-ec/magnizoom.component\";\nexport * from \"./multiple-items-to-cart-ec/multiple-items-to-cart-ec.component\";\nexport * from \"./widgets-ec/re-captcha-ec/re-captcha-ec.component\";\nexport * from \"./widgets-ec/decidir-ec/decidir-ec.component\";\n","import {\n Directive,\n OnInit,\n OnDestroy,\n Input,\n ElementRef,\n Renderer2,\n Inject,\n OnChanges,\n SimpleChanges,\n} from \"@angular/core\";\nimport { DOCUMENT } from \"@angular/common\";\nimport { BlocksService } from \"../services/blocks/blocks.service\";\nimport { Router } from \"@angular/router\";\n\nexport class ParamsContext {\n [key: string]: any;\n}\n\n@Directive({\n selector: \"[ecAddActionRedirect]\",\n})\nexport class AddActionRedirectDirective implements OnChanges, OnInit, OnDestroy {\n private banner: any;\n private classStr: \"\";\n private redirectUrl = ''\n private linstenEvent = null\n private transparent = true\n\n @Input()\n set ecAddActionRedirect(value: any) {\n this.banner = value;\n }\n @Input()\n set classStrSpacing(value: any) {\n this.classStr = value;\n }\n @Input()\n set isTransparent(value: boolean) {\n this.transparent = value;\n }\n\n constructor(\n @Inject(DOCUMENT) private document,\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private blocksService: BlocksService,\n private router: Router,\n ) { }\n\n ngOnInit() { }\n\n\n ngOnChanges(changes: SimpleChanges) {\n this.transparent && this.renderer.setStyle(this.elementRef.nativeElement, 'color', 'transparent')\n this.renderer.setAttribute(this.elementRef.nativeElement, \"role\", \"button\")\n this.classStr?.split(\" \").forEach((cl) => {\n try {\n this.renderer.addClass(this.elementRef.nativeElement, cl);\n } catch (error) { console.log('add class directive -> ', error) }\n });\n this.redirectUrl = this.banner.url ? this.banner.url : this.blocksService.formUrl(this.banner)\n this.banner.url ?\n this.renderer.setProperty(this.elementRef.nativeElement, \"href\", this.banner.url)\n :\n this.linstenEvent = this.renderer.listen(this.elementRef.nativeElement, 'click', this.redirectFromUrl)\n }\n\n redirectFromUrl = (evt) => {\n this.router.navigateByUrl(this.redirectUrl)\n }\n\n ngOnDestroy() {\n this.linstenEvent && this.linstenEvent()\n }\n}\n","import { Template } from '@angular/compiler/src/render3/r3_ast';\nimport { Directive, ElementRef, Input, OnInit, TemplateRef, ViewContainerRef, Renderer2, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { async } from '@angular/core/testing';\nimport { filter } from 'rxjs/operators';\nimport { Product } from '../interfaces/product';\nimport { ProductDetailService } from '../services/products/product-detail.service';\n\n@Directive({\n selector: \"[ecProductStock]\"\n})\nexport class ProductStockDirective {\n\n private productDirective: Product = null;\n\n @Input()\n ecProductStockElse: TemplateRef<any>\n\n @Input()\n set ecProductStock(product: Product) {\n this.productDirective = product\n this.viewContainer.clear();\n if (this.validateStock()) {\n if (this.ecProductStockElse) {\n this.viewContainer.createEmbeddedView(this.ecProductStockElse);\n }else{\n console.error('falta definir el template de agotado');\n }\n } else {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n }\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef, ) {\n }\n\n ngOnInit() { }\n\n ngOnDestroy() { }\n\n ngOnChanges() { }\n\n validateStock = () => {\n if (this.productDirective.special_mark == undefined || this.productDirective.variants == undefined) {\n setTimeout(() => {\n return this.validateStock()\n }, 1000);\n } else {\n return this.checkValuesForStock()\n }\n }\n\n checkValuesForStock = () => {\n let existMark = false\n this.productDirective.special_mark.forEach(special_mark => {\n switch (special_mark.type) {\n case 'out_of_stock': existMark = true; break;\n }\n })\n if (!existMark) {\n existMark = this.productDirective.variants.find(v => v.stock > 0) == undefined\n }\n return existMark\n }\n}","import {\n Directive,\n OnInit,\n ViewContainerRef,\n OnDestroy,\n Input,\n ElementRef,\n Renderer2,\n Inject,\n OnChanges,\n SimpleChanges,\n} from \"@angular/core\";\nimport { DOCUMENT } from \"@angular/common\";\n\nexport class ParamsContext {\n [key: string]: any;\n}\n\n@Directive({\n selector: \"[ecProductOff]\",\n})\nexport class ProductOffDirective implements OnChanges, OnInit, OnDestroy {\n\n private product: any;\n private classStr: \"\";\n private customMessageStr = \"{discount}% OFF\";\n\n @Input()\n set ecProductOff(value: any) {\n this.product = value;\n }\n @Input()\n set classStrSpacing(value: any) {\n this.classStr = value;\n }\n @Input()\n set customMessage(value: string) {\n this.customMessageStr = value;\n }\n\n constructor(\n @Inject(DOCUMENT) private document,\n private elementRef: ElementRef,\n private renderer: Renderer2,\n ) { }\n\n ngOnInit() { }\n hasDiscount = (product) => {\n\n if (!product.saleprice) {\n return null\n }\n if (product.price?.toString().includes(\"-\") && product.saleprice?.toString().includes(\"-\")) {\n let prices = product.price?.toString().split('-')\n let saleprices = product.saleprice?.toString().split('-')\n let saleBf = this.generateDiscount(prices[1]?.trim(), saleprices[1]?.trim())\n let saleLt = this.generateDiscount(prices[0]?.trim(), saleprices[0]?.trim())\n if (!saleBf && !saleLt) {\n return null\n }\n if (saleBf && saleLt && saleBf == saleLt) {\n return `${saleBf}`\n }\n if (saleBf && !saleLt) {\n return `${saleBf}`\n }\n if (!saleBf && saleLt) {\n return `${saleLt}`\n }\n return `${saleBf} - ${saleLt}`\n }else{\n if (parseInt(product.price) > parseInt(product.saleprice)) {\n return this.generateDiscount(product.price, product.saleprice)\n }\n }\n // console.log(product.price?.toString().includes(\"-\"));\n // console.log(product.saleprice?.toString().includes(\"-\"));\n // console.log(' PRECIO ', product.price);\n // console.log(' SALE ', product.saleprice);\n \n // if (\n // !product.price.toString().includes(\"-\") &&\n // product.saleprice &&\n // parseInt(product.price) > parseInt(product.saleprice)\n // ) {\n // let result =\n // ((parseInt(product.price) - parseInt(product.saleprice)) /\n // parseInt(product.price)) *\n // 100;\n // if (Number.isNaN(result)) {\n // return null;\n // } else return Math.floor(result);\n // }\n // return null;\n };\n\n\n generateDiscount = (price, saleprice) => {\n \n if (parseFloat(price) > parseFloat(saleprice) ) {\n let result =\n ((parseFloat(price) - parseFloat(saleprice)) /\n parseFloat(price)) *\n 100;\n if (Number.isNaN(result)) {\n return null;\n } else return Math.round(result)//Math.floor(result);\n }\n return null;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.product.price) {\n let discount = this.hasDiscount(this.product);\n this.elementRef.nativeElement.childNodes.forEach(node => {\n this.renderer.removeChild(this.elementRef.nativeElement, node)\n })\n if (discount) {\n this.renderer.appendChild(this.elementRef.nativeElement, this.createImage(discount));\n } \n // else {\n // this.renderer.removeChild(this.elementRef.nativeElement.parentElement, this.elementRef.nativeElement);\n // }\n }\n }\n\n createImage = (discount) => {\n let popover = this.renderer.createElement(\"a\");\n this.customMessageStr = this.customMessageStr.replace('{discount}',discount)\n this.renderer.setProperty(popover, \"innerHTML\", this.customMessageStr);\n this.classStr?.split(\" \").forEach((cl) => {\n try {\n this.renderer.addClass(popover, cl);\n } catch (error) { console.log('add class directive -> ', error) }\n });\n return popover;\n };\n\n ngOnDestroy() { }\n}\n","import { Directive, OnInit, TemplateRef, ViewContainerRef, OnDestroy, Input, ElementRef, Renderer2, Inject, OnChanges, SimpleChanges } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Product } from '../interfaces/product';\nimport { Constants } from '../core.consts';\n\n\n@Directive({\n selector: '[ecProductMiniStandard]'\n})\nexport class ProductMiniStandardDirective implements OnChanges, OnInit, OnDestroy {\n\n private special_marks: any[];\n private product: Product;\n private idConteiner = null\n @Input()\n set ecProductMiniStandard(productParam: Product) {\n this.special_marks = productParam.special_mark\n this.product = productParam\n this.idConteiner = `container-img-marks-standard-${this.product.id}`\n }\n\n constructor(\n private elementRef: ElementRef,\n private viewContainer: ViewContainerRef,\n private renderer: Renderer2,\n private constants: Constants,\n ) { }\n\n ngOnInit() {\n }\n\n ngOnChanges(changes: SimpleChanges) {\n (this.special_marks && this.special_marks.length)\n &&\n (this.special_marks.filter(special_mark => special_mark.type.includes('standard')))\n .map(special_mark => this.setMarkStandar(special_mark));\n }\n\n ngOnDestroy() { }\n\n setMarkStandar = (special_mark) => {\n let containerImg = document.getElementById(this.idConteiner);\n if (!containerImg) {\n let containerImg = this.renderer.createElement('div');\n this.renderer.setAttribute(containerImg, 'id', this.idConteiner);\n this.renderer.addClass(containerImg, 'container-img-marks-standard');\n this.renderer.appendChild(this.elementRef.nativeElement, containerImg);\n }\n this.renderer.appendChild(document.getElementById(this.idConteiner), this.createImage(special_mark));\n }\n\n createImage = (data) => {\n let image = (data.images && data.images.length) && data.images[0];\n if (!image) return null;\n let image_view = this.renderer.createElement('img');\n this.renderer.setAttribute(image_view, 'src', this.constants.mediaUrl() + image);\n return image_view;\n }\n\n}","import { Template } from '@angular/compiler/src/render3/r3_ast';\nimport { Directive, ElementRef, Input, OnInit, TemplateRef, ViewContainerRef, Renderer2, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { async } from '@angular/core/testing';\nimport { filter } from 'rxjs/operators';\nimport { User } from '../classes/user';\nimport { Product } from '../interfaces/product';\nimport { AuthService } from '../services/auth.service';\nimport { ProductDetailService } from '../services/products/product-detail.service';\n\n@Directive({\n selector: \"[ecAuthWholesaler]\"\n})\nexport class AuthWholesalerDirective {\n\n public auth: boolean = true\n public user: User = null\n private productDirective: Product = null;\n\n\n @Input()\n ecAuthWholesalerElse: TemplateRef<any>\n\n @Input()\n set ecAuthWholesaler(authparams) {\n this.auth = authparams\n if (this.auth) {\n this.authService.userAuth.subscribe(user => {\n this.viewContainer.clear();\n this.user = user\n this.viewContainer.createEmbeddedView(\n user?.isWholesaler() ? this.templateRef : this.ecAuthWholesalerElse\n )\n })\n }else{\n this.viewContainer.clear();\n this.viewContainer.createEmbeddedView( this.templateRef )\n }\n }\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef,\n private authService: AuthService,) {\n }\n\n ngOnInit() { }\n\n ngOnDestroy() { }\n\n ngOnChanges() { }\n}","//Directives base\n\n// import { ProductButtonBaseDirective } from './product-button-base.directive';\n// import { ProductContactBaseDirective } from './product-contact-base.directive';\n// import { ProductMiniBaseDirective } from './product-mini-base.directive';\n// import { ProductOffDetailBaseDirective } from './product-off-detail-base.directive';\n// import { ProductPriceBaseDirective } from './product-price-base.directive';\n\n\nimport { AddActionRedirectDirective } from './add-action-redirect.directive';\nimport { ProductStockDirective } from './product-stock.directive';\nimport { ProductOffDirective } from './product-off.directive';\nimport { ProductMiniStandardDirective } from './product-mini-standard.directive';\nimport { AuthWholesalerDirective } from './auth-wholesaler.directive';\n\nexport const directives: any[] = [\n // ProductButtonBaseDirective,\n // ProductContactBaseDirective,\n // ProductMiniBaseDirective,\n // ProductOffDetailBaseDirective,\n // ProductPriceBaseDirective,\n\n ProductMiniStandardDirective,\n ProductOffDirective,\n AddActionRedirectDirective,\n ProductStockDirective,\n AuthWholesalerDirective,\n];\n\n// export * from './product-button-base.directive';\n// export * from './product-contact-base.directive';\n// export * from './product-mini-base.directive';\n// export * from './product-off-detail-base.directive';\n// export * from './product-price-base.directive';\n\nexport * from './product-mini-standard.directive';\nexport * from './product-stock.directive';\nexport * from './product-off.directive';\nexport * from './auth-wholesaler.directive';\n","import { CurrencyPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { Constants } from '../core.consts';\nimport { ProductsService } from '../services/products/products.service';\n\n@Pipe({\n name: 'ecCurrencySymbol',\n})\nexport class ecCurrencySymbolPipe implements PipeTransform {\n \n\n constructor(public productsService: ProductsService, private currencyPipe: CurrencyPipe, public consts: Constants) { }\n\n transform(\n value: number\n ): string {\n const formatter = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'USD' });\n return value && this.changeSymbolTransform(formatter.format(value)?.toString()) || ''\n //return value && this.changeSymbolTransform(this.currencyPipe.transform(value,'USD').toString()) || ''\n }\n\n changeSymbolTransform = (valor) => {\n try {\n return this.positionSymbol(this.checkingWithoutDecimals(this.clearSymbol(valor)))\n } catch (error) {\n console.error('Errores en custom pipe -> ',error);\n return valor\n }\n }\n\n clearSymbol = (value) => value.replace('$', '')\n\n positionSymbol = (value) => this.consts?.currency.position.toUpperCase() == 'L' ? `${this.consts?.currency.symbol} ${value?.trim()}` : `${value?.trim()} ${this.consts?.currency.symbol}`\n\n checkingWithoutDecimals = (value) => {\n if (this.consts?.currency.withoutDecimals) {\n let val = value?.split(',')\n return val[1]?.trim() == \"00\" && value.trim().slice(0, value.trim().length - 3) || value\n }\n return value\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'ecSanitizerHtml'\n})\nexport class EcSanitizerHtmlPipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) { }\n\n transform(value) {\n return this.sanitizer.bypassSecurityTrustHtml(value);\n }\n\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'ecSanitizerUrl'\n})\nexport class EcSanitizerUrlPipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) { }\n\n transform(value) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(value);\n }\n\n}\n","//Pipes base\n\nimport { ecCurrencySymbolPipe } from \"./ec-currency-symbol.pipe\";\nimport { EcSanitizerHtmlPipe } from \"./ec-sanitizer-html.pipe\";\nimport { EcSanitizerUrlPipe } from \"./ec-sanitizer-url.pipe\";\n\n\nexport const pipes: any[] = [\n ecCurrencySymbolPipe,\n EcSanitizerHtmlPipe,\n EcSanitizerUrlPipe\n];\n\nexport * from \"./ec-currency-symbol.pipe\";\nexport * from \"./ec-sanitizer-html.pipe\";\nexport * from \"./ec-sanitizer-url.pipe\";\n","import { NgModule, ModuleWithProviders, Injector } from '@angular/core';\nimport { CommonModule, CurrencyPipe } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { OrderByPipe } from './pipes/order-by.pipe';\nimport { RouterModule } from '@angular/router';\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { ToastrModule } from 'ngx-toastr';\nimport { WINDOW_PROVIDERS } from './services/windows.service';\nimport { ProductsService } from './services/products/products.service';\nimport { BannerService } from './services/banner.service';\nimport { CartService } from './services/cart.service';\nimport { OrdersService } from './services/account/orders.service';\nimport { PaginationService } from './interfaces/paginate';\nimport { ConnectionService } from './api/connection.service';\nimport { AuthService } from './services/auth.service';\nimport { OptionsService } from './services/options.service';\nimport { ShipmentService } from './services/checkout/shipment.service';\nimport { CheckoutService } from './services/checkout/checkout.service';\nimport { OptionsOfProductListDataReceiverService } from './utils/options-of-product-list-data.service';\nimport { DataformService } from './services/dataform.service';\nimport { BlocksService } from './services/blocks/blocks.service';\nimport { UtilsService } from './utils/utils.service';\nimport { ShipmentDataTransformer } from './utils/shipment-transformer.service';\nimport { PaymentUtils } from './utils/payment-utils.service';\nimport { ToastService } from './utils/toast.service';\nimport { Constants } from './core.consts';\nimport { AuthGuardService } from './guards/auth-guard.service';\nimport { AbleBuyerGuardService } from './guards/able-buyer-guard.service';\nimport { UserRoleGuardService } from './guards/user-role-guard.service';\nimport { LoggedInGuard } from './guards/loggedin-guard.service';\nimport { CheckoutReadyGuard } from './guards/checkout-ready.service';\nimport { AuthInterceptor } from './interceptors/auth.interceptor';\nimport { CustomerInterceptor } from './interceptors/customer.interceptor';\nimport { StoresService } from './services/stores.service';\nimport { AddressingService } from './services/checkout/addressing.service';\nimport * as fromComponentsBase from './ec-component/index';\nimport * as fromDirectiveBase from './ec-directive/index';\nimport * as fromPipeBase from './ec-pipe/index';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RecaptchaModule, RecaptchaFormsModule, RECAPTCHA_SETTINGS, RecaptchaSettings, RECAPTCHA_LANGUAGE } from 'ng-recaptcha';\nimport { OrderUtilityService } from './utils/order-util.service';\nimport { FacebookPixelService } from './utils/analytics/facebook-pixel.service';\nimport { GoogleAnalyticsService } from './utils/analytics/google-analytics.service';\nimport { CardModule } from 'ngx-card';\nimport { AnalyticsService } from './services/analytics.service';\nimport { GTMService } from './utils/analytics/gtm.service';\nimport { ChannelConfigService } from './services/channel-config.service';\nimport { BlocksRepositoryService } from './services/blocks/blocks-repository.service';\nimport { ErrorHandlerService } from './services/checkout/error-handler.service';\nimport { ModalModule } from 'ngx-bootstrap/modal';\nimport { EcSanitizerHtmlPipe } from './ec-pipe/ec-sanitizer-html.pipe';\nimport { EcSanitizerUrlPipe } from './ec-pipe/ec-sanitizer-url.pipe';\nimport { CaptchaService } from './services/captcha.service';\nimport { DopplerService } from './utils/analytics/doppler.service';\n\n@NgModule({\n exports: [\n OrderByPipe,\n fromComponentsBase.components,\n fromDirectiveBase.directives,\n fromPipeBase.pipes,\n ],\n imports: [\n CommonModule,\n RouterModule,\n TranslateModule,\n HttpClientModule,\n InfiniteScrollModule,\n ToastrModule,\n FormsModule,\n ReactiveFormsModule,\n RecaptchaFormsModule,\n RecaptchaModule,\n CardModule,\n ModalModule\n ],\n declarations: [\n OrderByPipe,\n fromComponentsBase.components,\n fromDirectiveBase.directives,\n fromPipeBase.pipes,\n EcSanitizerHtmlPipe,\n EcSanitizerUrlPipe,\n ],\n providers: [\n\n ]\n})\nexport class NgEasycommerceModule {\n public static forRoot(environment: any): ModuleWithProviders {\n\n return {\n ngModule: NgEasycommerceModule,\n providers: [\n Constants,\n {\n provide: 'env', // you can also use InjectionToken\n useValue: environment\n },\n WINDOW_PROVIDERS,\n ProductsService,\n BannerService,\n CartService,\n OrdersService,\n PaginationService,\n ConnectionService,\n AuthService,\n OptionsService,\n ShipmentService,\n CheckoutService,\n OptionsOfProductListDataReceiverService,\n DataformService,\n BlocksService,\n StoresService,\n AnalyticsService,\n // Utils\n Constants,\n UtilsService,\n ShipmentDataTransformer,\n PaymentUtils,\n OptionsOfProductListDataReceiverService,\n ToastService,\n AddressingService,\n FacebookPixelService,\n GoogleAnalyticsService,\n GTMService,\n DopplerService,\n // Guards\n AuthGuardService,\n AbleBuyerGuardService,\n UserRoleGuardService,\n LoggedInGuard,\n CheckoutReadyGuard,\n OrderUtilityService,\n fromPipeBase.pipes,\n CurrencyPipe,\n ChannelConfigService,\n BlocksRepositoryService,\n ErrorHandlerService,\n CaptchaService,\n {\n provide: RECAPTCHA_SETTINGS,\n useValue: { siteKey: '6LcPPbUZAAAAAB8tKJ-UozPs1PztvGTEXnC26aY3' } as RecaptchaSettings,\n },\n // Others\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AuthInterceptor,\n multi: true\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: CustomerInterceptor,\n multi: true\n }\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders {\n\n return {\n ngModule: NgEasycommerceModule,\n providers: []\n };\n }\n}","import { Injectable } from '@angular/core';\r\nimport { Constants } from '../core.consts';\r\nimport { CartService } from './cart.service';\r\nimport { CheckoutProcessState } from '../classes/checkout-process-state';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ConnectionService } from '../api/connection.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GiftCardService {\r\n\r\n private stateSubject = new BehaviorSubject<CheckoutProcessState>({ doing: false, ok: false, data: null });\r\n\r\n private baseUrl = this.consts.getUrlBase() + 'shop-api/' + this.consts.getChannel() + '/';\r\n private couponApi = () => this.baseUrl + 'carts/' + this.cartService.getCartToken() + '/coupon';\r\n\r\n public state = this.stateSubject.asObservable();\r\n\r\n constructor(private consts: Constants, private cartService: CartService, private connection: ConnectionService) { }\r\n\r\n setCoupon = (coupon) => {\r\n this.stateSubject.next({ doing: true, ok: false, data: null });\r\n this.connection.put(this.couponApi(), { coupon }).subscribe(\r\n res => this.handleResponse(res, coupon)\r\n )\r\n }\r\n\r\n removeCoupon = () => this.stateSubject.getValue().data.coupon && this.deleteCoupon();\r\n\r\n deleteCoupon = () => {\r\n this.stateSubject.next({ doing: true, ok: false, data: null });\r\n this.connection.delete(this.couponApi());\r\n }\r\n\r\n handleResponse = (response, coupon) => {\r\n response.code ?\r\n this.stateSubject.next({\r\n doing: false,\r\n ok: false,\r\n data: { message: response.message, discount: '' }\r\n }) :\r\n this.stateSubject.next({\r\n doing: false,\r\n ok: true,\r\n data: { message: 'coupon-ready', discount: 'APPLIED DISCOUNT', coupon }\r\n });\r\n }\r\n\r\n avoidCoupon = () => {\r\n this.stateSubject.next({ doing: false, ok: true, data: { discount: null, message: 'avoided', coupon: null } })\r\n }\r\n}","import { Injectable } from '@angular/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { Product } from '../interfaces/product';\nimport { BehaviorSubject, Observable, Subscriber } from 'rxjs';\nimport { map, filter } from 'rxjs/operators';\n\n// Get product from Localstorage\nlet products = JSON.parse(localStorage.getItem(\"wishlistItem\")) || [];\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WishlistService {\n \n // wishlist array\n public wishlistProducts: BehaviorSubject<Product[]> = new BehaviorSubject([]);\n public observer : Subscriber<{}>;\n\n // Initialize \n constructor(private toastrService: ToastrService) { \n this.wishlistProducts.subscribe(products => products = products);\n }\n\n // Get wishlist Products\n public getProducts(): Observable<Product[]> {\n const itemsStream = new Observable(observer => {\n observer.next(products);\n observer.complete();\n });\n return <Observable<Product[]>>itemsStream;\n }\n\n // If item is aleready added In wishlist\n public hasProduct(product: Product): boolean {\n const item = products.find(item => item.id === product.id);\n return item !== undefined;\n }\n\n // Add to wishlist\n public addToWishlist(product: Product): Product | boolean {\n var item: Product | boolean = false;\n if (this.hasProduct(product)) {\n item = products.filter(item => item.id === product.id)[0];\n const index = products.indexOf(item);\n } else {\n products.push(product);\n }\n this.toastrService.success('This product added to Wishlist.'); // toasr services\n localStorage.setItem(\"wishlistItem\", JSON.stringify(products));\n return item;\n }\n\n // Removed Product\n public removeFromWishlist(product: Product) {\n if (product === undefined) { return; }\n const index = products.indexOf(product);\n products.splice(index, 1);\n localStorage.setItem(\"wishlistItem\", JSON.stringify(products));\n }\n \n\n}\n","import {Inject, Injectable, OnInit} from '@angular/core';\nimport {RouteReuseStrategy, ActivatedRouteSnapshot, DetachedRouteHandle} from '@angular/router';\nimport {Constants} from '../core.consts';\n\n@Injectable()\nexport class StandardReuseStrategy implements RouteReuseStrategy {\n\n private routes : string[] = [];\n private storedRoutes = new Map<string, DetachedRouteHandle>();\n\n constructor(@Inject('env')private env) {}\n\n shouldDetach(route : ActivatedRouteSnapshot): boolean {\n this.routes = (this.routes.length && this.routes) || (this.env.routes || []);\n let result = route.data.key && this.routes.includes(route.data.key);\n return result;\n }\n\n store(route : ActivatedRouteSnapshot, handle : DetachedRouteHandle): void {\n this.storedRoutes.set(route.data.key, handle);\n }\n\n shouldAttach(route : ActivatedRouteSnapshot): boolean {\n return !!this.storedRoutes.get(route.data.key);\n }\n\n retrieve(route : ActivatedRouteSnapshot): DetachedRouteHandle {\n return this.storedRoutes.get(route.data.key);\n }\n\n shouldReuseRoute(future : ActivatedRouteSnapshot, curr : ActivatedRouteSnapshot): boolean {\n return future.routeConfig === curr.routeConfig;\n }\n}\n"]}