ng-easycommerce-v18 0.0.2 → 0.0.3
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.
- package/README.md +24 -24
- package/assets/ec-i18n/ct.json +273 -273
- package/assets/ec-i18n/en.json +0 -0
- package/assets/ec-i18n/es.json +387 -387
- package/assets/ec-i18n/fr.json +0 -0
- package/assets/ec-i18n/gl.json +273 -273
- package/assets/ec-i18n/pr.json +273 -273
- package/assets/recaptcha/recaptcha-site-keys.json +3 -3
- package/assets/recaptcha/recaptcha-sites-prod.json +38 -38
- package/assets/recaptcha/recaptcha-sites.json +52 -52
- package/esm2022/lib/api/connection.service.mjs +1 -1
- package/esm2022/lib/classes/checkout/steps.mjs +1 -1
- package/esm2022/lib/classes/filters/attributes-filter.mjs +1 -1
- package/esm2022/lib/classes/filters/category-filter.mjs +1 -1
- package/esm2022/lib/classes/filters/dynamics-filter.mjs +1 -1
- package/esm2022/lib/classes/filters/filter-factory.mjs +1 -1
- package/esm2022/lib/classes/filters/filter.mjs +1 -1
- package/esm2022/lib/classes/filters/index.mjs +1 -1
- package/esm2022/lib/classes/filters/sort-filter.mjs +1 -1
- package/esm2022/lib/classes/index.mjs +1 -1
- package/esm2022/lib/classes/user.mjs +1 -1
- package/esm2022/lib/constants/api.constants.service.mjs +1 -1
- package/esm2022/lib/constants/core.constants.service.mjs +10 -1
- package/esm2022/lib/constants/index.mjs +1 -1
- package/esm2022/lib/ec-components/abstractions-components/block-ec.component.mjs +1 -1
- package/esm2022/lib/ec-components/abstractions-components/index.mjs +1 -1
- package/esm2022/lib/ec-components/abstractions-components/menu-ec.component.mjs +1 -1
- package/esm2022/lib/ec-components/account-ec/account-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/account-ec/index.mjs +1 -1
- package/esm2022/lib/ec-components/account-ec/order-ec/order-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/auth-ec/auth-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/auth-ec/index.mjs +1 -1
- package/esm2022/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.mjs +8 -3
- package/esm2022/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.mjs +31 -23
- package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/blocks-ec/blocks-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/blocks-ec/index.mjs +1 -1
- package/esm2022/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/cart-ec/cart-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/cart-ec/index.mjs +1 -1
- package/esm2022/lib/ec-components/checkout-ec/checkout-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.mjs +1 -1
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/checkout-ec/success-ec/success-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/collection-ec/collection-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/coupon-ec/coupon-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/filters-ec/filters-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/filters-sort-ec/filters-sort-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/footer-ec/footer-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +5 -3
- package/esm2022/lib/ec-components/home-ec/home-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/index.mjs +7 -1
- package/esm2022/lib/ec-components/product-detail-ec/product-detail-ec.component.mjs +23 -11
- package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/variants-ec/variants-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/widgets-ec/index.mjs +1 -1
- package/esm2022/lib/ec-components/widgets-ec/loading/index.mjs +1 -1
- package/esm2022/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/widgets-ec/price-ec/price-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.mjs +3 -3
- package/esm2022/lib/ec-guards/auth.guard.mjs +1 -1
- package/esm2022/lib/ec-pipe/ec-currency-symbol.pipe.mjs +9 -3
- package/esm2022/lib/ec-services/addressing.service.mjs +1 -1
- package/esm2022/lib/ec-services/analytics/analytics.service.mjs +1 -1
- package/esm2022/lib/ec-services/analytics/doppler.service.mjs +1 -1
- package/esm2022/lib/ec-services/analytics/facebook-pixel.service.mjs +1 -1
- package/esm2022/lib/ec-services/analytics/google-analytics.service.mjs +1 -1
- package/esm2022/lib/ec-services/analytics/gtm.service.mjs +1 -1
- package/esm2022/lib/ec-services/analytics/index.mjs +1 -1
- package/esm2022/lib/ec-services/analytics/metricool-pixel.service.mjs +11 -11
- package/esm2022/lib/ec-services/auth.service.mjs +1 -1
- package/esm2022/lib/ec-services/auth.storage.service.mjs +1 -1
- package/esm2022/lib/ec-services/blocks-repository.service.mjs +1 -1
- package/esm2022/lib/ec-services/blocks.service.mjs +1 -1
- package/esm2022/lib/ec-services/cart.service.mjs +1 -1
- package/esm2022/lib/ec-services/channel.service.mjs +1 -1
- package/esm2022/lib/ec-services/checkout.service.mjs +1 -1
- package/esm2022/lib/ec-services/currency.service.mjs +1 -1
- package/esm2022/lib/ec-services/filters.service.mjs +1 -1
- package/esm2022/lib/ec-services/form.service.mjs +1 -1
- package/esm2022/lib/ec-services/index.mjs +1 -1
- package/esm2022/lib/ec-services/local-storage.service.mjs +1 -1
- package/esm2022/lib/ec-services/ngx-local-storage.service.mjs +1 -1
- package/esm2022/lib/ec-services/options.service.mjs +1 -1
- package/esm2022/lib/ec-services/order-utility.service.mjs +1 -1
- package/esm2022/lib/ec-services/orders.service.mjs +1 -1
- package/esm2022/lib/ec-services/pagination.service.mjs +1 -1
- package/esm2022/lib/ec-services/parameters.service.mjs +1 -1
- package/esm2022/lib/ec-services/payment.service.mjs +1 -1
- package/esm2022/lib/ec-services/product-detail.service.mjs +1 -1
- package/esm2022/lib/ec-services/products.service.mjs +1 -1
- package/esm2022/lib/ec-services/re-captcha.service.mjs +1 -1
- package/esm2022/lib/ec-services/shipment.service.mjs +1 -1
- package/esm2022/lib/ec-services/stores.service.mjs +1 -1
- package/esm2022/lib/ec-services/test.service.mjs +1 -1
- package/esm2022/lib/ec-services/toast.service.mjs +1 -1
- package/esm2022/lib/interceptors/auth.interceptor.mjs +1 -1
- package/esm2022/lib/interfaces/analytics/event-key.mjs +1 -1
- package/esm2022/lib/interfaces/analytics/facebook-pixel-data.mjs +1 -1
- package/esm2022/lib/interfaces/analytics/gtm-config.mjs +1 -1
- package/esm2022/lib/interfaces/analytics/index.mjs +1 -1
- package/esm2022/lib/interfaces/blocks.mjs +1 -1
- package/esm2022/lib/interfaces/checkout.mjs +1 -1
- package/esm2022/lib/interfaces/connection.mjs +1 -1
- package/esm2022/lib/interfaces/coupon.mjs +1 -1
- package/esm2022/lib/interfaces/currency.mjs +1 -1
- package/esm2022/lib/interfaces/deserializable.mjs +1 -1
- package/esm2022/lib/interfaces/environment.mjs +1 -1
- package/esm2022/lib/interfaces/filter.mjs +1 -1
- package/esm2022/lib/interfaces/index.mjs +1 -1
- package/esm2022/lib/interfaces/options.mjs +1 -1
- package/esm2022/lib/interfaces/pagination.mjs +1 -1
- package/esm2022/lib/interfaces/parameter.mjs +1 -1
- package/esm2022/lib/interfaces/product.mjs +1 -1
- package/esm2022/lib/interfaces/step.mjs +1 -1
- package/esm2022/lib/interfaces/storage.mjs +1 -1
- package/esm2022/lib/interfaces/store.mjs +1 -1
- package/esm2022/lib/interfaces/types/user.type.mjs +1 -1
- package/esm2022/lib/providers/provideEnvironment.mjs +1 -1
- package/esm2022/lib/stores/currency.store.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/ng-easycommerce-v18.mjs +169 -131
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
- package/lib/constants/core.constants.service.d.ts +7 -0
- package/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.d.ts +1 -0
- package/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.d.ts +3 -1
- package/lib/ec-components/header-ec/header-ec.component.d.ts +4 -1
- package/lib/ec-components/index.d.ts +6 -0
- package/lib/ec-components/product-detail-ec/product-detail-ec.component.d.ts +5 -9
- package/lib/ec-pipe/ec-currency-symbol.pipe.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-easycommerce-v18.mjs","sources":["../../../projects/ng-easycommerce-v18/src/lib/providers/provideEnvironment.ts","../../../projects/ng-easycommerce-v18/src/lib/constants/api.constants.service.ts","../../../projects/ng-easycommerce-v18/src/lib/api/connection.service.ts","../../../projects/ng-easycommerce-v18/src/lib/constants/core.constants.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/options.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/parameters.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/blocks-repository.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/blocks.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/facebook-pixel.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/google-analytics.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/gtm.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/doppler.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/metricool-pixel.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/analytics.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/channel.service.ts","../../../projects/ng-easycommerce-v18/src/lib/stores/currency.store.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/currency.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/toast.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/re-captcha.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/form.service.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/user.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/filter.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/category-filter.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/attributes-filter.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/dynamics-filter.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/sort-filter.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/filter-factory.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/checkout/steps.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/local-storage.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/auth.storage.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/auth.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/filters.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/pagination.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/products.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/ngx-local-storage.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/cart.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/product-detail.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/order-utility.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/checkout.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/addressing.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/stores.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/shipment.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/payment.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/test.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/orders.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/abstractions-components/menu-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/abstractions-components/block-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/footer-ec/footer-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/footer-ec/footer-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/header-ec/header-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/header-ec/header-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/home-ec/home-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/home-ec/home-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-pipe/ec-currency-symbol.pipe.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/product-ec/product-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/product-ec/product-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/blocks-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/blocks-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/collection-ec/collection-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/collection-ec/collection-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/auth-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/auth-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/filters-ec/filters-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/filters-ec/filters-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/product-detail-ec/product-detail-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/product-detail-ec/product-detail-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/variants-ec/variants-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/variants-ec/variants-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/cart-ec/cart-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/cart-ec/cart-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/coupon-ec/coupon-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/coupon-ec/coupon-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/checkout-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/checkout-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/account-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/account-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/order-ec/order-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/order-ec/order-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/interfaces/index.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-guards/auth.guard.ts","../../../projects/ng-easycommerce-v18/src/lib/interceptors/auth.interceptor.ts","../../../projects/ng-easycommerce-v18/src/public-api.ts","../../../projects/ng-easycommerce-v18/src/ng-easycommerce-v18.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from \"@angular/core\";\nimport { Environment } from \"../interfaces\";\n/**\n * Token para el provider de enviroment\n */\nconst ENVIRONMENT_TOKEN = new InjectionToken<Environment>('app.environment')\n/**\n * Función que es utilizada para configurar el entorno en donde se estara ejecutando la aplicación.\n * @param environment \n * @returns \n */\nconst provideEnvironment = (environment: Environment): EnvironmentProviders => {\n return makeEnvironmentProviders([\n {\n provide: ENVIRONMENT_TOKEN,\n useValue: environment\n }\n ])\n}\n\nexport {\n ENVIRONMENT_TOKEN,\n provideEnvironment\n}","import { inject, Injectable } from '@angular/core';\nimport { ENVIRONMENT_TOKEN } from '../providers';\nimport { Environment } from '../interfaces';\nimport { LocalStorageService } from '../ec-services';\nimport { TranslateService } from '@ngx-translate/core';\nimport { CoreConstantsService } from './core.constants.service';\n\n/**\n * Servicio que provee de datos que estan relacionado con las peticiones a la API\n * @export\n * @class ApiConstantsService\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiConstantsService {\n\tprivate _localStorage: LocalStorageService = inject(LocalStorageService);\n\tprivate _translate: TranslateService = inject(TranslateService);\n\n\t/**\n\t * Contiene los datos provisto por el frontend en el archivo environment.ts\n\t */\n\tprivate environment:Environment = inject(ENVIRONMENT_TOKEN)\n\t/**\n\t * Canal actual del frontend\n\t */\n\tpublic CHANNEL:string = this.environment.channel;\n\t/**\n\t * Locale actual del frontend\n\t */\n\tpublic LOCALE:string = this.environment.locale;\n\t/**\n\t * URL del backend para realizar las peticiones\n\t */\n\tpublic readonly API_URL:string = this.environment.apiUrl;\n\t/**\n\t * URL para las peticiones a shop-api\n\t */\n\tpublic readonly SHOP_API_URL:string = 'shop-api/';\n\t/**\n\t * URL para las peticiones a cms\n\t */\n\tpublic readonly CMS_URL:string = 'cms/';\n\t/**\n\t * URL base para realizar las peticiones a la API\n\t */\n\tprivate urlBase: string = this.environment.apiUrl\n\t/**\n\t * Retorna la url base\n\t * @returns {string}\n\t */\n\tpublic getUrlBase(): string { return this.urlBase}; \n\t/**\n\t * Cambia el canal actual\n\t * @param code\n\t * @returns \n\t */\n\tpublic setChannel(code: string):void{ this.CHANNEL = code;} \n\n\tpublic setLocale(locale: string):void{\n\t\tthis._localStorage.setItem(this.LOCALE_KEY, locale);\n\t\tthis._translate.use(locale.split('_')[0])\n\t\tthis.LOCALE = locale;\n\t}\n\n\t//Storage key\n\tprivate readonly LOCALE_KEY:string = 'LOCALE';\n\tprivate readonly CHANNEL_KEY:string = 'CHANNEL';\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Connection } from '../interfaces';\nimport { map, Observable, of, take } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { ApiConstantsService } from '../constants/api.constants.service';\n\n/**\n * Servicio que funciona como abstracción para manejar la conexión con la API\n * @export\n * @class ConnectionService\n * @implements {Connection}\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ConnectionService implements Connection {\n\t/**\n\t * Herrramienta usada para generar las peticiones.\n\t * @memberof ConnectionService\n\t */\n\tprivate readonly _http = inject(HttpClient);\n\n\t/**\n\t * Servicio que contiene las constantes usadas para la API\n\t * @memberof ConnectionService\n\t */\n\tprivate constantsSvr = inject(ApiConstantsService);\n\n\t/**\n\t * URL Base para las peticiones.\n\t * @type {string}\n\t * @memberof ConnectionService\n\t */\n\tprivate url: string;\n\n\tconstructor() {\n\t\tthis.url = this.constantsSvr.getUrlBase();\n\t}\n\n\t/**\n\t * Función para generar peticiones de tipo GET\n\t * @param apiurl url del endpoint\n\t * @param data parametros para la url\n\t * @returns \n\t */\n\tget(apiurl: string, data?: any): Observable<any> {\n\t\treturn this._http.get<any>(this.url + apiurl, { params: { ...data } }).pipe(take(1));\n\t}\n\tgetErrorNotHandler(apiurl: string): Observable<any> {\n return this._http.get<any>(this.url + apiurl).pipe(take(1));\n }\n\n\t/**\n\t * Funcion para generar peticiones de tipo POST\n\t * @param apiurl url del endpoint\n\t * @param data \n\t */\n\tpost(apiurl: string, data?: any): Observable<any> {\n\t\treturn this._http.post<any>(this.url + apiurl, data || {}).pipe(take(1));\n\t}\n\tput(apiurl: string, data?: any): Observable<any> {\n\t\treturn this._http.put<any>(this.url + apiurl, data).pipe(take(1));\n\t}\n\tdelete(apiurl: string, data?: any): Observable<any> {\n\t\treturn this._http.delete<any>(this.url + apiurl).pipe(take(1));\n\t}\n\t/**\n\t * Genera un petición tipo GET pero usando el parametro como la url completa.\n\t * @param fullurl \n\t * @returns \n\t */\n\tgetWithFullUrl(fullurl: string): Observable<any> {\n\t\treturn this._http.get<any[]>(fullurl)\n\t}\n\n\t/* formUrl = (api: string) => {\n\t return window.location.protocol == 'https:' && !this.url.includes('https') ? (this.url.replace('http', 'https')) + api : this.url + api;\n\t} */\n}\n","import { inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { ApiConstantsService } from './api.constants.service';\nimport { isPlatformBrowser } from '@angular/common';\nimport { CurrencyConfig, currencyType, ParamsProductsWithUniqueVariant } from '../interfaces';\n/**\n * Servicio que provee las constantes necesarias que se utilizan por toda la aplicación.\n * @export\n * @class CoreConstantsService\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class CoreConstantsService {\n\n\t/**\n\t * Servicio que contiene las constantes usadas para la API\n\t */\n\tprivate apiConstants = inject(ApiConstantsService)\n\t/**\n\t * Provee el ID de la plataforma en donde se esta ejecutando el codigo, esto sirve para poder diferenciar si es de un servidor o un navegador web.\n\t */\n\tprivate platformId: any = inject(PLATFORM_ID)\n\t/**\n\t * Guarda la variable window del web browser.\n\t */\n\tprivate window?:Window;\n\n\tconstructor() {\n\t\tif (isPlatformBrowser(this.platformId)) {\n\t\t\tthis.window = window\n\t\t}\n\t}\n\t/**\n\t * Path usado en las colecciones de productos.\n\t */\n\tpublic PRODUCT_LIST_ROUTE: string = 'collection/';\n\t/**\n\t * Path usado para acceder a las secciones.\n\t */\n\tpublic SECTIONS_ROUTE: string = 'sections/';\n\t/**\n\t * Path que aloja la carpeta de los assets.\n\t */\n\tpublic readonly ASSETS_URL: string = this.apiConstants.API_URL;\n\t/**\n\t * Retorna la url donde se guarda las imagenes.\n\t * @param postMedia \n\t * @returns \n\t */\n\tpublic mediaUrl = (postMedia?: string) => this.ASSETS_URL + (this.ASSETS_URL == this.apiConstants.API_URL ? 'media/' : '') + (postMedia ? postMedia : \"image/\");\n\t/**\n\t * Retorna la url de las imagenes de los banners\n\t * @returns \n\t */\n\tpublic mediaBannerUrl = () => this.ASSETS_URL + (this.ASSETS_URL == this.apiConstants.API_URL ? 'media/' : '') + \"banner-image/\";\n\t/**\n\t * Retorna `true` si la vista es mobile, `false` caso contrario.\n\t * @returns {boolean}\n\t */\n\tpublic mobileScreen = (): boolean => this.window && this.window?.innerWidth < 750 || false;\n\t/**\n\t * Contiene los valores para la moneda actual\n\t */\n\tpublic currency: CurrencyConfig = {\n\t\tcode: 'ARG',\n\t\tsymbol: '$',\n\t\tposition: 'Left',\n\t\twithoutDecimal: false\n\t};\n\n\t/**\n\t * Arreglo de valores usados para el pipe currencyPrice\n\t */\n\tpublic currencyTypeConfig: CurrencyConfig[] = [\n\t\t{\n\t\t\tcode: 'EUR',\n\t\t\tsymbol: '€',\n\t\t\tposition: 'Right',\n\t\t\twithoutDecimal: false\n\n\t\t},\n\t\t{\n\t\t\tcode: 'ARG',\n\t\t\tsymbol: '$',\n\t\t\tposition: 'Left',\n\t\t\twithoutDecimal: false\n\t\t},\n\t\t{\n\t\t\tcode: 'ARS',\n\t\t\tsymbol: '$',\n\t\t\tposition: 'Left',\n\t\t\twithoutDecimal: false\n\t\t},\n\t\t{\n\t\t\tcode: 'USD',\n\t\t\tsymbol: '$',\n\t\t\tposition: 'Left',\n\t\t\twithoutDecimal: false\n\t\t},\n\t\t{\n\t\t\tcode: 'PYG',\n\t\t\tsymbol: 'Gs.',\n\t\t\tposition: 'Left',\n\t\t\twithoutDecimal: false\n\t\t},\n\t\t{\n\t\t\tcode: 'PEN',\n\t\t\tsymbol: 'S/',\n\t\t\tposition: 'Left',\n\t\t\twithoutDecimal: false\n\t\t},\n\t\t{\n\t\t\tcode: 'SEK',\n\t\t\tsymbol: 'SEK',\n\t\t\tposition: 'Right',\n\t\t\twithoutDecimal: true\n\t\t},\n\t]\n\t/**\n\t * Cambia la configuración de la moneda.\n\t * @param currencyTypeConfig Arreglo con las distintas monedas.\n\t */\n\tpublic setCurrencyTypeConfig(currencyTypeConfig: CurrencyConfig[]) {\n\t\tthis.currencyTypeConfig = currencyTypeConfig;\n\t}\n\n\t/**\n\t * @param currencyTypeFind Definir el code del tipo de moneda que se quiera utilizar.\n\t * 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\t * @param customType Formato del parámetro ejemplo { code: 'ARG', symbol: '$', position: 'L' , withoutDecimals: false } ,\n\t * todas las key son opcionales y por defecto se toman los valores del ejemplo.\n\t * @returns se retorna la configuración que se seteo a la propiedad currency del servicio.\n\t */\n\tpublic setCurrency(currencyTypeFind: currencyType, customType?: CurrencyConfig): CurrencyConfig {\n\t\tthis.currency = this.currencyTypeConfig.find((ct: CurrencyConfig) => ct.code == currencyTypeFind.toUpperCase()) || this.currency\n\t\tcustomType && (this.currency = { ...this.currency, ...customType })\n\t\treturn this.currency;\n\t};\n\n\n\tpublic modifyChannelConfig(channelConfig: any) {\n\t\tif (channelConfig.channel || channelConfig.code)\n\t\t\tthis.apiConstants.setChannel(channelConfig.channel || channelConfig.code)\n\n\t\tif (channelConfig.locale || channelConfig.locales.code)\n\t\t\tthis.apiConstants.setLocale(channelConfig.locale || channelConfig.locales.code)\n\n\t\tif (channelConfig.currency || channelConfig.baseCurrency)\n\t\t\tthis.setCurrency(channelConfig.currency || channelConfig.baseCurrency)\n\n\t\treturn channelConfig;\n\t}\n\n\t/**\n\t* @description se utiliza para configurar que filtros del tipo `SortFilter` se quiere mostrar en la vista.\n\t* Se usan los codigo de los filtros para indicar cuales se deben mostrar.\n\t*/\n\tprivate sortFilters: string[] = ['price', 'order-alph', 'recent']\n\n\t/**\n\t *\n\t * @param filtersCode arreglo de strings con los codigos de los filtros.\n\t * Si se le pasa el parametro **all** este mostrara todos.\n\t * @example price | order-alph | recent | update | all\n\t * @returns\n\t */\n\tsetSortFilters = (filtersCode: string[] = ['all']) => this.sortFilters = filtersCode;\n\n\tgetSortFilters = () => this.sortFilters;\n\n\t// ABOUT PRODUCTS \n\tprivate productsWithUniqueVariant: boolean = false;\n\tsetProductWithUniqueVariant(value: boolean) { this.productsWithUniqueVariant = value; }\n\tgetProductWithUniqueVariant() { return this.productsWithUniqueVariant }\n\n\t/**\n\t* @description esta variable se utiliza para configurar los parametros cuando se desea mostrar\n\t* variantes el listado de productos.\n\t* @param {string}type tipo de options\n\t* @param {string}code codigo de options\n\t* @param {boolean}defaultFirstOption `true` toma el primer option del producto en general\n\t* @param {boolean}checkIfStock `true` se realiza un chequeo de si la variante tiene stock para mostrarla\n\t* @example ```javascript\n\t* {\n\t type: 'color',\n\t code: 'color',\n\t defaultFirstOption: false ,\n\t checkIfStock:true\n\t } ```\n\t*/\n\tprivate paramsProductsWithUniqueVariant: ParamsProductsWithUniqueVariant = {\n\t\ttype: 'color',\n\t\tcode: 'color',\n\t\tdefaultFirstOption: false,\n\t\tcheckIfStock: true\n\t}\n\n\tsetParamsProductsWithUniqueVariant = (value: ParamsProductsWithUniqueVariant) => {\n\t\tthis.paramsProductsWithUniqueVariant = {\n\t\t\t...this.paramsProductsWithUniqueVariant,\n\t\t\t...value\n\t\t}\n\t}\n\n\tgetParamsProductsWithUniqueVariant = () => this.paramsProductsWithUniqueVariant\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ConnectionService } from '../api';\nimport { BehaviorSubject, catchError, map, Observable, of, shareReplay, take } from 'rxjs';\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\nimport { Attribute, Category, Section } from '../interfaces';\nimport { Filter } from '../classes';\n/**\n * Este servicio permite maneja las Categorias, Secciones y Atributos como menues \n * para la aplicación. \n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class OptionsService {\n\t/**\n\t * Maneja las peticiones a la API\n\t */\n\tprivate connection = inject(ConnectionService);\n\t/**\n\t * Constantes del core\n\t */\n\tprivate constants = inject(CoreConstantsService);\n\t/**\n\t * Constantes de la API\n\t */\n\tprivate apiConstants = inject(ApiConstantsService);\n\t/**\n\t * Maneja los cambios en las categorias\n\t */\n\tprivate categoriesSubject = new BehaviorSubject<Category[]>([]);\n\tprivate categories$: Observable<Category[]> = this.categoriesSubject.asObservable(); \n\t/**\n\t * Maneja los cambios en las secciones\n\t */\n\tprivate sectionsSubject = new BehaviorSubject<Section[]>([]);\n\tprivate sections$: Observable<Section[]> = this.sectionsSubject.asObservable();\n\t/**\n\t * Maneja los cambios en los atributos\n\t */\n\tprivate attributesSubject = new BehaviorSubject<Attribute[]>([]);\n\tprivate attributes$:Observable<Attribute[]> = this.attributesSubject.asObservable();\n\n\t//API URLS\n\tprivate readonly SHOP_CHANNEL_API = `${this.apiConstants.SHOP_API_URL}${this.apiConstants.CHANNEL}/`;\n\tprivate readonly CMS_CHANNEL_API = `${this.apiConstants.CMS_URL}${this.apiConstants.CHANNEL}/`;\n\t/**\n\t * Devuelve la URL para obtener las categorias.\n\t * @returns \n\t */\n\tprivate taxonsApi() { return `${this.SHOP_CHANNEL_API}taxons/?locale=${this.apiConstants.LOCALE}` };\n\t/**\n\t * Devuelve la URL para obtener las secciones\n\t * @returns \n\t */\n\tprivate sectionsApi() { return `${this.CMS_CHANNEL_API}sections/?locale=${this.apiConstants.LOCALE}` };\n\t/**\n\t * Devuelve la URL para obtener los atributos. Se le puede aplicar flitros.\n\t * @param filter \n\t * @returns \n\t */\n\tprivate attributesApi(filter = '') { return `${this.SHOP_CHANNEL_API}product-search/attributes/?locale=${this.apiConstants.LOCALE}&limit=1&page=1${filter}` };\n\t\n\tconstructor() { }\n\t/**\n\t * Obtiene las categorias del backend. Y los mapea para que sea mas amigable el manejo como menú.\n\t * @returns \n\t */\n\tpublic getCategories(): Observable<Category[]> {\n\t\tif(this.categoriesSubject.getValue().length === 0){\n\t\t\tthis.connection.get(this.taxonsApi()).pipe(\n\t\t\t\tshareReplay(1),\n\t\t\t\tmap((response: Category[]) => { \n\t\t\t\t\tconst categories = this.appendPaths(true,response)\n\t\t\t\t\tthis.categoriesSubject.next(categories)\n\t\t\t\t\treturn categories\n\t\t\t\t}),\n\t\t\t\t\tcatchError((error:any)=> {\n\t\t\t\t\t\tconsole.log(`Error: ${error}`)\n\t\t\t\t\t\tthis.categoriesSubject.next([])\n\t\t\t\t\t\treturn of([])\n\t\t\t\t\t})\n\t\t\t).subscribe();\n\t\t}\n\t\treturn this.categories$;\n\t}\n\t/**\n\t * Obtiene las secciones del backend. Y los mapea para que sea mas amigable el manejo como menú.\n\t * @returns \n\t */\n\tpublic getSections(): Observable<Section[]> {\n\t\tif (this.sectionsSubject.getValue().length === 0) {\n\t\t\tthis.connection.get(this.sectionsApi()).pipe(\n\t\t\t\tshareReplay(1),\n\t\t\t\tmap((response: Section[]) => {\n\t\t\t\t\tlet sections = response.filter((section: Section) => section.code != 'home')\n\t\t\t\t\tsections = sections.map((section: Section) => this.appendSection(section))\n\t\t\t\t\tthis.sectionsSubject.next(sections)\n\t\t\t\t\treturn sections\n\t\t\t\t})).subscribe()\n\t\t}\n\t\treturn this.sections$;\n\t}\n\t/**\n\t * Obtiene los atributos del backend. Y los mapea para que sea mas amigable el manejo como menú.\n\t * @param params \n\t * @returns \n\t */\n\tpublic getAttributes(params?: any): Observable<Attribute[]> {\n\t\tif (this.attributesSubject.getValue().length === 0) {\n\t\t\tthis.connection.get(this.attributesApi(params)).pipe(\n\t\t\t\tshareReplay(1),\n\t\t\t\tmap((response: any | Attribute) => {\n\t\t\t\t\tconst attributes = this.appendPaths(false, (response.attributes[0] || response))\n\t\t\t\t\tthis.attributesSubject.next(attributes)\n\t\t\t\t\treturn attributes\n\t\t\t\t}\n\t\t\t\t)).subscribe()\n\t\t}\n\t\treturn this.attributes$;\n\t}\n\n\n\t// HELPERS\n\tprivate slugify = (text: string) => this.removeAccents(text.toLowerCase().replace(/ & /g, ' ').replace(/ /g, '-').replace(/\\//g, '-').replace(/ñ/g, 'n'));\n\t/**\n\t * Elimina los acentos\n\t * @param str \n\t * @returns \n\t */\n\tprivate removeAccents(str: string){\n\t\treturn str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n\t}\n\t/**\n\t * Realiza un mapeo de los datos para darle un formato mas entendible a la\n\t * hora de usar como un menú.\n\t * @param isCategory Utilizado para diferenciar si es categoría o atributo.\n\t * @param response Respuesta que obtiene del backend con los datos a mapear.\n\t * @returns \n\t */\n\tpublic appendPaths(isCategory: boolean, response: any) {\n\t\tconst result = response.map((subelement: any) => {\n\t\t\tif (!subelement.children || subelement.children.length == 0) {\n\t\t\t\tsubelement.children = [];\n\t\t\t\tsubelement.path = isCategory ? this.constants.PRODUCT_LIST_ROUTE + 'categories/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name))\n\t\t\t\t\t: this.constants.PRODUCT_LIST_ROUTE + 'attributes/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name));\n\t\t\t} else if (subelement.children) {\n\t\t\t\tsubelement.slug = subelement.slug || this.slugify(subelement.name);\n\t\t\t\tsubelement.children = this.appendPaths(isCategory, subelement.children);\n\t\t\t}\n\t\t\tisCategory ? subelement.path = this.constants.PRODUCT_LIST_ROUTE + 'categories/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name))\n\t\t\t\t: subelement.path = this.constants.PRODUCT_LIST_ROUTE + 'attributes/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name));\n\t\t\treturn subelement;\n\t\t});\n\t\treturn result;\n\t}\n\t/**\n\t * Genera un mapeo de secciones para que queden mas amigables a la hora de manejar como menú.\n\t * @param section \n\t * @returns \n\t */\n\tprivate appendSection(section:any) {\n let data: any = {};\n if (section.pages?.length) {\n data.type = 'sub';\n data.children = section.pages.map((page:any) => {\n return {\n code: page.code,\n name: page.name,\n type: 'link',\n path: this.constants.SECTIONS_ROUTE + (page.slug ? page.slug : page.code),\n // path: this.constants.SECTIONS_ROUTE + page.slug,\n }\n });\n //data.title = section.name;\n data.name = section.name;\n data.path = this.constants.SECTIONS_ROUTE + (section.slug ? section.slug : section.code);\n data.code = section.code;\n } else {\n data.code = section.code;\n //data.title = section.name;\n\t\t\tdata.name = section.name;\n data.type = 'link';\n data.children = [];\n data.path = this.constants.SECTIONS_ROUTE + (section.slug ? section.slug : section.code);\n }\n return data;\n\t}\n\t/**\n\t * Mapea los elementos para darle un formato mas amigable para los menúes y filtros.\n\t * @param elements categorias | atributos \n\t * @returns \n\t */\n\tpublic generateMenu = (elements:any) => {\n\t\treturn elements.map( (element: any) => {\n\t\t\tif (element.children && element.children.length == 0) {\n\t\t\t\treturn {\n\t\t\t\t\t...element,\n\t\t\t\t\ttitle: element.name,\n\t\t\t\t\tpath: element.path,\n\t\t\t\t\ttype: 'link',\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\treturn {\n\t\t\t\t\t...element,\n\t\t\t\t\ttitle: element.name,\n\t\t\t\t\ttype: 'sub',\n\t\t\t\t\tpath: element.path,\n\t\t\t\t\tchildren : ( element.children ? this.generateMenu(element.children) : [])\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\t/**\n\t * Devuelve los elementos del breadcrumb.\n\t * @param code \n\t * @returns \n\t */\n\tgetBreadcrumb = (code:any) => {\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\t/**\n\t * Genera los breadcrumbs en base a los filtros aplicados.\n\t * @param filters \n\t * @returns \n\t */\n\tgetBreadcrumbByFilters = (filters: Filter[]) => {\n let final_result:any[] = [];\n filters.forEach(filter => {\n let result = filter.getSelectedList();\n if (!result || !result.length) return;\n\n if (filter.type() == 'categories') final_result.unshift(...this.generateBreadcrumb(result[0], filter.data, []).reverse());\n else result.forEach(\n (code:any) => {\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\t/**\n\t * Genera el listado de breadcrumb.\n\t * @param code \n\t * @param elements filtros actuales en el frontend\n\t * @param result datos a actualizar con el nuevo listado de breadcrumb\n\t * @returns \n\t */\n\tprivate generateBreadcrumb = (code:string, elements:any, result:any) => {\n let element = elements.find((elem:any) => elem.code == code);\n if (element) {\n result.push(element);\n }\n else {\n elements.some((elem:any) => {\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} \n","import { inject, Injectable } from '@angular/core';\nimport { ApiConstantsService } from '../constants';\nimport { ConnectionService } from '../api';\nimport { BehaviorSubject, catchError, map, Observable, of, shareReplay } from 'rxjs';\nimport { Parameter } from '../interfaces';\n/**\n * Servicio que maneja los parametros de la aplicación.\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ParametersService {\n\t/**\n\t * Constantes de la API\n\t */\n\tprivate apiConstants = inject(ApiConstantsService)\n\t/**\n\t * Maneja las peticiones a la API\n\t */\n\tprivate connection = inject(ConnectionService)\n\n\t//API URLS\n\t/**\n\t * Devuelve la URL para obtener todos los parametros.\n\t * @returns \n\t */\n\tprivate getAllParametersAPI() { return `${this.apiConstants.SHOP_API_URL}${this.apiConstants.CHANNEL}/parameters` }\n\n\t//OBSERVABLES\n\t/**\n\t * Subject para manejar los cambios en los datos de los parametros\n\t */\n\tprivate parametersSubject = new BehaviorSubject<Parameter[] | null>(null);\n\tprivate parameters$: Observable<Parameter[] | null> = this.parametersSubject.asObservable();\n\n\t//METHODS\n\t/**\n\t * Obtiene los parámetros del backend. \n\t * @returns \n\t */\n\tpublic getParameters(): Observable<Parameter[] | null> {\n\t\tif (this.parametersSubject.getValue() === null) {\n\t\t\tthis.connection.get(this.getAllParametersAPI()).pipe(\n\t\t\t\tshareReplay(1),\n\t\t\t\tmap((response: Parameter[]) => {\n\t\t\t\t\tthis.parametersSubject.next(response)\n\t\t\t\t\treturn response\n\t\t\t\t}), catchError((error: any) => {\n\t\t\t\t\tconsole.log(`Error: ${error}`)\n\t\t\t\t\tthis.parametersSubject.next([])\n\t\t\t\t\treturn of([])\n\t\t\t\t})\n\t\t\t).subscribe();\n\t\t}\n\t\treturn this.parameters$\n\t}\n\t/**\n\t * Comprueba si el código de un parámetro existe en la lista de parámetros.\n\t * @param params Lista de parámetros\n\t * @param code Código del parámetro a buscar\n\t * @returns El objeto con los datos del parámetro encontrado, sino retorna `null`\n\t */\n\tpublic hasParams(params: any, code: string): any { return params && params.find((param: any) => param.code?.toLowerCase().includes(code.toLowerCase())) }\n\n\tconstructor() { }\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ApiConstantsService } from '../constants';\nimport { BehaviorSubject, map, Observable, shareReplay } from 'rxjs';\nimport { IBlock, IBlockInfo } from '../interfaces';\nimport { ConnectionService } from '../api';\n/**\n * Servicio que maneja los bloques como repositorio.\n * @class BlocksRepositoryService\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class BlocksRepositoryService {\n\t/**\n\t * Constantes de la API\n\t */\n\tprivate apiConstants = inject(ApiConstantsService);\n\t/**\n\t * Menaja las conexiones con la API\n\t */\n\tprivate connection = inject(ConnectionService)\n\t/**\n\t * Subject para manejar los bloques recibidos.\n\t */\n\tprivate blocksSubject = new BehaviorSubject<IBlock[]>([])\n\t/**\n\t * Observable de bloques.\n\t */\n\tprivate blocks$: Observable<IBlock[]> = this.blocksSubject.asObservable();\n\n\t//API URLS\n\t/**\n\t * Devuelve la url para obtener los bloques segun la sección.\n\t * @param section \n\t * @returns \n\t */\n\tblocksAPI(section: string) { return `${this.apiConstants.CMS_URL}${this.apiConstants.CHANNEL}/blocks/section/${section}?locale=${this.apiConstants.LOCALE}` }\n\n\t/**\n\t * Obtiene los bloques segun la seccion del Backend.\n\t * @param section \n\t * @returns Un observable de los bloques.\n\t */\n\tpublic getBlocks(section: string): Observable<IBlock[]> {\n\t\t//if(this.blocksSubject.getValue() != null){\n\t\tthis.connection.get(this.blocksAPI(section)).pipe(\n\t\t\tshareReplay(1),\n\t\t\tmap((response: any) => {\n\t\t\t\t//console.log(response)\n\t\t\t\tthis.blocksSubject.next(response.items)\n\t\t\t\treturn response\n\t\t\t})\n\t\t).subscribe()\n\t\t//}\n\t\treturn this.blocks$\n\t}\n\n\t/* private hasSectionBlocks = (section: string) => {\n\t\t\n\t} */\n\n\tprivate appendBlock = (blocks: IBlock[], section: string) => {\n\t\tconst new_block: IBlockInfo = { section, blocks };\n\n\t}\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ApiConstantsService } from '../constants';\nimport { BlocksRepositoryService } from './blocks-repository.service';\nimport { IBlock } from '../interfaces';\n/**\n * Servicio de tipo adapter para manejar los bloques.\n * @class BlocksService\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class BlocksService {\n\t/**\n\t * Constantes de la API\n\t */\n\tprivate apiConstants = inject(ApiConstantsService);\n\t/**\n\t * Servicio de BlocksRepository.\n\t */\n\tprivate blocksRepositoryService = inject(BlocksRepositoryService);\n\t/**\n\t * Subject para manejar los bloques recibidos.\n\t */\n\tprivate blocksSubject = new BehaviorSubject<any[]>([]);\n\t/**\n\t * Observable de bloques.\n\t */\n\tpublic blocks$: Observable<any[]> = this.blocksSubject.asObservable();\n\n\t//API URLS\n\t/**\n\t * Devuelve la url para interactuar con el bloque de contacto.\n\t * @returns \n\t */\n\tcontactFormResponseAPI() { return `${this.apiConstants.CMS_URL}${this.apiConstants.LOCALE}/contact-form/response` }\n\n\t//METHODS\n\t/**\n\t * Obtiene los bloques de una sección en especifico.\n\t * @param section \n\t * @returns Observable de los bloques.\n\t */\n\tpublic getBlocks(section: string): Observable<any> {\n\t\treturn this.blocksRepositoryService.getBlocks(section)\n\t}\n\tconstructor() { }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID, Renderer2, RendererFactory2 } from '@angular/core';\nimport { AnalyticEventKey, FacebookPixelData } from '../../interfaces';\n/**\n * Funcion que sera dada por el script que se inserta en el inicializador de Facebook Analytics.\n * \n * https://es-la.facebook.com/business/help/402791146561655?id=1205376682832142 \n * \n * Relacionado con: {@link FacebookPixelService}\n */\ndeclare let fbq: Function;\n/**\n * Servicio que se encarga de manejar el Analytics de Facebook.\n * @class FacebookPixelService\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class FacebookPixelService {\n\n private rendererFactory: RendererFactory2 = inject(RendererFactory2)\n private document: Document | null = null;\n /**\n * Se encarga de crear el elemento HTML con las configuraciones para \n * que se pueda ejecutar el servicio.\n */\n private renderer: Renderer2;\n /**\n * Indica cuando el servicio esta habilitado.\n */\n private enabled: boolean = false;\n private platformId = inject(PLATFORM_ID);\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n this.document = inject(DOCUMENT); // Solo se inyecta en el navegador\n }\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n /**\n * Inicializa el Servicio de analytics con sus configuraciones.\n * @param pixel_id id provisto por Facebook Pixel.\n */\n initialize(pixel_id: any) {\n if (!this.document?.getElementById('facebook_pixel')) {\n let new_analityc_script = this.renderer.createElement('script');\n new_analityc_script.id = \"facebook_pixel\"\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 }\n setTimeout(() => this.callEvent('initialize'), 1000);\n }\n /**\n * Ejecuta el evento pasado por parametro. \n * @param event_name Nombre del evento.\n * @param data Data extra para agregar al evento.\n * @returns \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 * Traduce el evento recibido y devuelve el nombre de la función que lo va a tratar.\n * @param event_name \n * @returns \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 * Evalua el evento y devuelve los datos de las funciones relacionadas.\n * @param event_name Nombre del evento\n * @param data Data extra para agregar al evento\n * @returns \n */\n evalEvent(event_name: AnalyticEventKey, data: any) {\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 * Para ejecutar un evento propio.\n * @param event_name Nombre de evento\n * @param data Data extra para agregar al evento.\n * @returns \n */\n callCustomEvent(event_name: AnalyticEventKey, data: FacebookPixelData = {}) {\n if (!this.enabled) return;\n fbq('trackCustom', event_name, data);\n }\n /**\n * Cambia la variable **enabled** a `false`\n * @returns \n */\n disable() { this.enabled = false };\n /**\n * Cuando un evento interactua con el contenido de la vista del producto.\n * @param data \n * @returns \n */\n private toViewContent(data: any) {\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 * Evento que se dispara cuando se quiere comprar un producto.\n * @param data \n * @returns \n */\n private toPurchase(data: any) {\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 * Evento que se dispara cuando se inicializa en checkout.\n * @param data \n * @returns \n */\n private toCheckoutInit(data: any) {\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 * Evento que se dispara cuando se consulta la información de pago.\n * @param data \n * @returns \n */\n private toPaymentInfo(data: any) {\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 * Evento que se dispara cuando se agrega un producto al carrito. \n * @param data \n * @returns \n */\n private toAddToCart(data: any) {\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 * Mapeo de datos para obtener solo el ID del producto y la cantidad.\n * @param data \n * @returns \n */\n private getContents(data: any) {\n return data.items.map(\n (item: any) => {\n return {\n id: item.product.variants[0]?.code,\n quantity: item.quantity\n }\n }\n )\n }\n /**\n * Mapeo de datos para obtener solo el ID del producto.\n * @param data \n * @returns \n */\n private getContentIds(data: any) {\n return data.items.map(\n (item: any) => item.product.variants[0]?.code\n )\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID, Renderer2, RendererFactory2 } from '@angular/core';\nimport { AnalyticEventKey } from '../../interfaces';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs';\n/**\n * Funcion que sera dada por el script que se inserta en el inicializador de Google Analytics.\n */\ndeclare var gtag: Function;\ndeclare var dataLayer: any[];\n\n/**\n * Servicio encargado de manejar el analytics de google.\n * @class GoogleAnalyticsService\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class GoogleAnalyticsService {\n\t/**\n\t * Se encarga de crear el elemento HTML con las configuraciones para \n\t * que se pueda ejecutar el servicio.\n\t */\n\tprivate renderer: Renderer2;\n\t/**\n\t * Indica cuando el servicio esta habilitado.\n\t */\n\tprivate enabled: boolean = false;\n\n\tprivate rendererFactory: RendererFactory2 = inject(RendererFactory2);\n\tprivate document: Document | null = null;\n\tprivate platformId = inject(PLATFORM_ID);\n\n\t/**\n\t * Servicio de ruteo de angular.\n\t */\n\tprivate router: Router = inject(Router);\n\n\tconstructor() {\n\t\tif (isPlatformBrowser(this.platformId)) {\n\t\t\tthis.document = inject(DOCUMENT); // Solo se inyecta en el navegador\n\t\t}\n\t\tthis.renderer = this.rendererFactory.createRenderer(null, null);\n\t}\n\t/**\n\t * Inicializa el Servicio de analytics con sus configuraciones.\n\t * @param gtm_id id provisto por Google Tag Manager.\n\t */\n\tinitialize(gtm_id: string) {\n\t\tif (!document.getElementById('google_tag_manager')) {\n\t\t\tconsole.log('hay elemento')\n\t\t\tconst declaration = this.renderer.createElement('script');\n\t\t\tdeclaration.async = true;\n\t\t\tdeclaration.id = 'google_tag_manager';\n\t\t\tdeclaration.src = `https://www.googletagmanager.com/gtag/js?id=${gtm_id}`;\n\t\t\tconst initialization = this.renderer.createElement('script');\n\t\t\tinitialization.text = `window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '${gtm_id}')`;\n\t\t\tthis.renderer.appendChild(this.document?.head, initialization);\n\t\t\tthis.renderer.appendChild(this.document?.head, declaration);\n\t\t\tthis.enabled = true;\n\t\t}\n\t\tsetTimeout(() => this.startListeningPageViews(gtm_id), 1000);\n\t}\n\t/**\n\t * \n\t * @param gtm_id \n\t */\n\tprivate startListeningPageViews(gtm_id: any) {\n\t\tthis.router.events.pipe(\n\t\t\tfilter(event => event instanceof NavigationEnd)\n\t\t).subscribe((event: NavigationEnd) => {\n\t\t\tgtag('config', gtm_id, {\n\t\t\t\t'page_path': event.urlAfterRedirects\n\t\t\t})\n\t\t})\n\t}\n\t/**\n\t * Ejecuta el evento pasado por parametro. \n\t * @param event_name Nombre del evento.\n\t * @param data Data extra para agregar al evento.\n\t * @returns \n\t */\n\tcallEvent(event_name: AnalyticEventKey, data = {}) {\n\t\tif (!this.enabled) return;\n\t\tlet event = this.translateEventName(event_name);\n\t\tevent && gtag('event', this.translateEventName(event_name), this.evalEvent(event_name, data));\n\t}\n\t/**\n\t * Traduce el evento recibido y devuelve el nombre de la función que lo va a tratar.\n\t * @param event_name \n\t * @returns \n\t */\n\ttranslateEventName(event_name: AnalyticEventKey) {\n\t\tswitch (event_name) {\n\t\t\tcase 'view_item': return 'view_item';\n\t\t\tcase 'view_item_list': return 'view_item_list';\n\t\t\tcase 'checkout_init': return 'begin_checkout';\n\t\t\tcase 'shipping_info': return 'add_shipping_info';\n\t\t\tcase 'add_payment_info': return 'add_payment_info';\n\t\t\tcase 'purchase': return 'purchase';\n\t\t\tcase 'add_to_cart': return 'add_to_cart';\n\t\t\tcase 'remove_from_cart': return 'remove_from_cart';\n\t\t\tcase 'sign_up': return 'sign_up';\n\t\t\tdefault: return null;\n\t\t\t//default: return event_name;\n\t\t}\n\t}\n\t/**\n\t * Evalua el evento y devuelve los datos de las funciones relacionadas.\n\t * @param event_name Nombre del evento\n\t * @param data Data extra para agregar al evento\n\t * @returns \n\t */\n\tevalEvent(event_name: AnalyticEventKey, data: any) {\n\t\tswitch (event_name) {\n\t\t\tcase 'view_item': return this.toViewItem(data);\n\t\t\tcase 'view_item_list': return this.toViewItemList(data);\n\t\t\tcase 'checkout_init': return this.toCheckoutInit(data);\n\t\t\tcase 'shipping_info': return this.toShippingInfo(data);\n\t\t\tcase 'add_payment_info': return this.toPaymentInfo(data);\n\t\t\tcase 'purchase': return this.toPurchase(data);\n\t\t\tcase 'add_to_cart': return this.toAddToCart(data);\n\t\t\tcase 'remove_from_cart': return this.toRemoveToCart(data);\n\t\t\tcase 'sign_up': return this.toSignUp(data);\n\t\t\tdefault: return data;\n\t\t}\n\t}\n\t/**\n\t * Evento que se dispara cuando se quiere comprar un producto.\n\t * @param data \n\t * @returns \n\t */\n\tprivate toPurchase(data: any) {\n\t\treturn {\n\t\t\tcoupon: this.toCartDiscount(data),\n\t\t\tcurrency: data.currency,\n\t\t\tshipping: data.totals.shipping,\n\t\t\ttax: data.totals.taxes,\n\t\t\tvalue: data.totals.total,\n\t\t\ttransaction_id: data.number,\n\t\t\titems: data.items.map((item: any) => ({\n\t\t\t\tid: item.product.id,\n\t\t\t\tname: item.product.name,\n\t\t\t\tcategory: item.product.category,\n\t\t\t\tprice: item.total,\n\t\t\t\tquantity: item.quantity\n\t\t\t}))\n\t\t}\n\t}\n\t/**\n\t * Evento que se dispara cuando se inicializa en checkout.\n\t * @param data \n\t * @returns \n\t */\n\tprivate toCheckoutInit(data: any) {\n\t\treturn {\n\t\t\tcoupon: this.toCartDiscount(data),\n\t\t\tcurrency: data.currency || \"USD\",\n\t\t\titems: data.items.map((item: any) => ({\n\t\t\t\tid: item.product.id,\n\t\t\t\tname: item.product.name,\n\t\t\t\tcategory: item.product.category,\n\t\t\t\tprice: item.total,\n\t\t\t\tquantity: item.quantity\n\t\t\t})),\n\t\t\tvalue: data.totals?.total || 0,\n\t\t}\n\t}\n\t/**\n\t * Evento que se dispara con los descuentos en el carrito.\n\t * @param data \n\t * @returns \n\t */\n\tprivate toCartDiscount(data: any) {\n\t\tlet strDiscount = ''\n\t\tstrDiscount = data.cartDiscounts.map((itemDiscount: any) => itemDiscount?.type).join()\n\t\treturn strDiscount == '' ? 'not-discount' : strDiscount\n\t}\n\t/**\n\t * Evento que se dispara cuando se agrega un producto al carrito. \n\t * @param data \n\t * @returns \n\t */\n\tprivate toAddToCart(data: any) {\n\t\tlet lastProduct = data.items?.length && data.items[data.items.length - 1]\n\t\treturn {\n\t\t\tcurrency: data.currency || \"USD\",\n\t\t\titems: [this.toItem({ quantity: lastProduct.quantity, ...lastProduct.product })],\n\t\t\tvalue: lastProduct.total || 0,\n\t\t}\n\t}\n\t/**\n\t * Cambia la variable **enabled** a `false`\n\t * @returns \n\t */\n\tdisable() { this.enabled = false; }\n\t/**\n\t * Evento que se dispara cuando se interactua a las vista del producto.\n\t * @param product \n\t * @returns \n\t */\n\tprivate toViewItem(product: any) {\n\t\treturn {\n\t\t\tcurrency: product.currency,\n\t\t\titems: [this.toItem(product)],\n\t\t\tvalue: product.variants[0]?.saleprice || product.variants[0]?.price,\n\t\t}\n\t}\n\t/**\n\t * Evento que se dispara cuando se interactua con el listado de productos.\n\t * @param data \n\t * @returns \n\t */\n\tprivate toViewItemList(data: any) {\n\t\treturn {\n\t\t\titems: data.products.map((product: any) => this.toItem(product)),\n\t\t\titem_list_name: data.item_list_name || 'Collection',\n\t\t\titem_list_id: data.item_list_id || 'collection'\n\t\t}\n\t}\n\t/**\n\t * Evento que se dispara cuando se quita un item del carrito.\n\t * @param product \n\t * @returns \n\t */\n\tprivate toRemoveToCart(product: any) {\n\t\tlet productParam = product.product\n\t\treturn {\n\t\t\tcurrency: product.currency || \"USD\",\n\t\t\titems: [this.toItem({ quantity: product.quantity, ...productParam })],\n\t\t\tvalue: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,\n\t\t}\n\t}\n\n\tprivate toItem = (product: any) => ({\n\t\titem_name: product.name,\n\t\titem_id: product.id,\n\t\titem_brand: product.attributes?.length ? product.attributes[0].name : '',\n\t\titem_category: product.category,\n\t\tprice: product.variants[0]?.saleprice || product.variants[0]?.price,\n\t\tquantity: product.quantity || 1,\n\t})\n\t/**\n\t * Evento que se dispara cuando se consulta la información de pago.\n\t * @param data \n\t * @returns \n\t */\n\tprivate toPaymentInfo(data: any) {\n\t\treturn {\n\t\t\tcoupon: this.toCartDiscount(data),\n\t\t\tcurrency: data.currency || \"USD\",\n\t\t\titems: data.items.map((item: any) => ({\n\t\t\t\tid: item.product.id,\n\t\t\t\tname: item.product.name,\n\t\t\t\tcategory: item.product.category,\n\t\t\t\tprice: item.total,\n\t\t\t\tquantity: item.quantity\n\t\t\t})),\n\t\t\tpayment_type: data.payments[0]?.method?.code || 'not-payments',\n\t\t\tvalue: data.totals?.total || 0,\n\t\t}\n\t}\n\t/**\n\t * Evento que se dispara cuando se interactua con los métodos de envío.\n\t * @param data \n\t * @returns \n\t */\n\tprivate toShippingInfo(data: any) {\n\t\treturn {\n\t\t\tcoupon: this.toCartDiscount(data),\n\t\t\tcurrency: data.currency || \"USD\",\n\t\t\titems: data.items.map((item: any) => ({\n\t\t\t\tid: item.product.id,\n\t\t\t\tname: item.product.name,\n\t\t\t\tcategory: item.product.category,\n\t\t\t\tprice: item.total,\n\t\t\t\tquantity: item.quantity\n\t\t\t})),\n\t\t\tshipping_tier: data.shipments[0]?.method?.code || 'not-shipping',\n\t\t\tvalue: data.totals?.total || 0,\n\t\t}\n\t}\n\n\tprivate toSignUp(data: any) {\n\t\treturn {\n\t\t\t...data\n\t\t}\n\t}\n}\n","import { afterRender, inject, Injectable, PLATFORM_ID, Renderer2, RendererFactory2 } from '@angular/core';\nimport { AnalyticEventKey, GoogleTagManagerConfig } from '../../interfaces';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\n/**\n * Servicio que se encarga de manejar el analytics de GTM.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class GTMService {\n /**\n * Indica si se esta cargando el servicio.\n */\n private isLoaded: boolean = false;\n /**\n * Indica cuando el servicio esta habilitado.\n */\n private enabled: boolean = false;\n /**\n * Se encarga de crear el elemento HTML con las configuraciones para \n * que se pueda ejecutar el servicio.\n */\n private renderer: Renderer2;\n /**\n * Almacena el objecto window del navegador.\n */\n private window?: Window;\n\n private rendererFactory: RendererFactory2 = inject(RendererFactory2);\n private document: Document | null = null;\n /**\n * Servicio de ruteo de angular.\n */\n private router: Router = inject(Router);\n /**\n * Configuración de Google Tag Manager.\n */\n private config: GoogleTagManagerConfig = { id: null }\n private platformId: any = inject(PLATFORM_ID)\n constructor() {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n if (isPlatformBrowser(this.platformId)) {\n this.window = window\n this.document = inject(DOCUMENT);\n }\n }\n /**\n * Obtiene el dataLayer del objecto window\n * @returns \n */\n public getDataLayer(): any[] {\n const window = this.window;\n /* if(window)\n window.dataLayer = window.dataLayer || [];\n return window.dataLayer; */\n return []\n }\n /**\n * Agrega datos al dataLayer.\n * @param obj \n */\n private pushOnDataLayer(obj: object): void {\n const dataLayer = this.getDataLayer();\n dataLayer.push(obj);\n }\n /**\n * Agrega el script de GTM para que empiece a capturar eventos.\n * @returns \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 = this.document?.createElement('script') //doc.createElement('script');\n if(gtmScript){\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 this.document?.head.insertBefore(gtmScript, this.document.head.firstChild);\n }\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}=${this.config[k]\n }`).join('&'));\n }\n /**\n * Inicializa el Servicio de analytics con sus configuraciones.\n * @param config Configuraciones de Google Tag Manager\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 * Ejecuta el evento pasado por parametro. \n * @param event_name Nombre del evento.\n * @param data Data extra para agregar al evento.\n * @returns \n */\n callEvent(event_name: AnalyticEventKey, data = {}) {\n if (!this.isLoaded) return;\n let event = this.translateEventName(event_name);\n event && this.pushTag({ ecommerce: null })\n event && this.pushTag({ 'event': this.translateEventName(event_name), ecommerce: this.evalEvent(event_name, data) })\n }\n /**\n * Traduce el evento recibido y devuelve el nombre de la función que lo va a tratar.\n * @param event_name \n * @returns \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 case 'select_promotion': return 'select_promotion';\n case 'select_item': return 'select_item';\n default: return null;\n }\n }\n /**\n * Evalua el evento y devuelve los datos de las funciones relacionadas.\n * @param event_name Nombre del evento\n * @param data Data extra para agregar al evento\n * @returns \n */\n evalEvent(event_name: AnalyticEventKey, data: any) {\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 case 'select_promotion': return this.toSelectPromotion(data);\n case 'select_item': return this.toSelectItem(data);\n default: return data;\n }\n }\n /**\n * Evento que se dispara cuando se quiere comprar un producto.\n * @param data \n * @returns \n */\n private toPurchase(data: any) {\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: any) => ({\n item_id: item.product.id,\n item_name: item.product.name,\n //coupon:'',\n discount: item.product.discount || 0,\n //index:'',\n item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',\n item_category: item.product.category,\n item_variant: item.product.variants[0]?.code || '',\n //location_id: '',\n price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,\n quantity: item.quantity || 1,\n }))\n }\n }\n /**\n * Evento que se dispara cuando se inicializa en checkout.\n * @param data \n * @returns \n */\n private toCheckoutInit(data: any) {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n items: data.items.map((item: any) => ({\n item_id: item.product.id,\n item_name: item.product.name,\n //coupon:'',\n discount: item.product.discount || 0,\n //index:'',\n item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',\n item_category: item.product.category,\n //item_list_id: '',\n //item_list_name: '',\n item_variant: item.product.variants[0]?.code || '',\n //location_id: '',\n price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,\n quantity: item.quantity || 1,\n })),\n value: data.totals?.total || 0,\n }\n }\n /**\n * Evento que se dispara con los descuentos en el carrito.\n * @param data \n * @returns \n */\n private toCartDiscount(data: any) {\n let strDiscount = ''\n strDiscount = data.cartDiscounts.map((itemDiscount: any) => itemDiscount?.type).join()\n return strDiscount == '' ? 'not-discount' : strDiscount\n }\n /**\n * Evento que se dispara cuando se agrega un producto al carrito. \n * @param data \n * @returns \n */\n private toAddToCart(data: any) {\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 * Cambia la variable **enabled** a `false`\n * @returns \n */\n disable() { this.enabled = false }\n /**\n * Evento que se dispara cuando se interactua a las vista del producto.\n * @param product \n * @returns \n */\n private toViewItem(product: any) {\n return {\n currency: product.currency,\n value: product.price,\n items: [this.toItem(product)]\n\n }\n }\n /**\n * Evento que se dispara cuando se interactua con el listado de productos.\n * @param data \n * @returns \n */\n private toViewItemList(data: any) {\n return {\n items: data.products.map((product: any) => this.toItem(product)),\n item_list_name: data.item_list_name || 'Collection',\n item_list_id: data.item_list_id || 0\n }\n\n\n }\n /**\n * Evento que se dispara cuando se quita un item del carrito.\n * @param product \n * @returns \n */\n private toRemoveToCart(product: any) {\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: any) => ({\n item_id: product.id,\n item_name: product.name,\n //coupon:'',\n discount: product.discount || 0,\n //index:'',\n item_brand: product.attributes?.length ? product.attributes[0].name : '',\n item_category: product.category,\n //item_list_id: '',\n //item_list_name: '',\n item_variant: product.variants[0]?.code || '',\n //location_id: '',\n price: product.variants[0]?.saleprice || product.variants[0]?.price,\n quantity: product.quantity || 1,\n })\n /**\n * Evento que se dispara cuando se consulta la información de pago.\n * @param data \n * @returns \n */\n private toPaymentInfo(data: any) {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n payment_type: data.payments[0]?.method?.code || 'not-payments',\n value: data.totals?.total || 0,\n items: data.items.map((item: any) => ({\n item_id: item.product.id,\n item_name: item.product.name,\n //coupon:'',\n discount: item.product.discount || 0,\n //index:'',\n item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',\n item_category: item.product.category,\n //item_list_id: '',\n //item_list_name: '',\n item_variant: item.product.variants[0]?.code || '',\n //location_id: '',\n price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,\n quantity: item.quantity || 1,\n })),\n }\n }\n /**\n * Evento que se dispara cuando se interactua con los métodos de envío.\n * @param data \n * @returns \n */\n private toShippingInfo(data: any) {\n return {\n coupon: this.toCartDiscount(data),\n currency: data.currency || \"USD\",\n shipping_tier: data.shipments[0]?.method?.code || 'not-shipping',\n value: data.totals?.total || 0,\n items: data.items.map((item: any) => ({\n item_id: item.product.id,\n item_name: item.product.name,\n //coupon:'',\n discount: item.product.discount || 0,\n //index:'',\n item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',\n item_category: item.product.category,\n //item_list_id: '',\n //item_list_name: '',\n item_variant: item.product.variants[0]?.code || '',\n //location_id: '',\n price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,\n quantity: item.quantity || 1,\n })),\n }\n }\n\n private toSignUp(data: any) {\n return {\n ...data\n }\n }\n /**\n * Evento que se dispara cuando se interactua con una promoción.\n * @param data \n * @returns \n */\n private toSelectPromotion(data: any) {\n console.log(data);\n return {\n promotion_id: data.id || '',\n promotion_name: data.code || data.name,\n promotion_title: data.subtitle,\n location_id: data.priority || 0\n }\n }\n /**\n * Evento que se disapra cuando se interactua al seleccionar un item.\n * @param data \n * @returns \n */\n private toSelectItem(data: any) {\n console.log(data);\n return {\n items: this.toItem(data)\n }\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID, Renderer2, RendererFactory2 } from '@angular/core';\n/**\n * Servicio de Analytics de Doppler\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class DopplerService {\n\t/**\n\t * Para indicar cuando se este cargando el servicio.\n\t */\n\tprivate isLoaded = false;\n\n\tprivate rendererFactory: RendererFactory2 = inject(RendererFactory2)\n\tprivate document: Document | null = null;\n\t/**\n\t * Se encarga de crear el elemento HTML con las configuraciones para \n\t * que se pueda ejecutar el servicio.\n\t */\n\tprivate renderer: Renderer2;\n\tprivate platformId = inject(PLATFORM_ID);\n\n\tconstructor() {\n\t\tif (isPlatformBrowser(this.platformId)) {\n\t\t\tthis.document = inject(DOCUMENT); // Solo se inyecta en el navegador\n\t\t}\n\t\tthis.renderer = this.rendererFactory.createRenderer(null, null);\n\t}\n\t/**\n\t * Inicializa el Servicio de analytics con sus configuraciones.\n\t * @param pixelSrc path que se usa en el atributo `src` del elemento html.\n\t */\n\tinitialize = (pixelSrc: any) => {\n\t\tthis.isLoaded = true\n\t\tlet scriptInsert = this.renderer.createElement(\"script\");\n\t\tthis.renderer.setAttribute(scriptInsert, 'type', 'text/javascript');\n\t\tthis.renderer.setAttribute(scriptInsert, 'async', 'async');\n\t\tthis.renderer.setAttribute(scriptInsert, 'src', pixelSrc);\n\t\tthis.renderer.appendChild(this.document?.body, scriptInsert);\n\t}\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID, Renderer2, RendererFactory2 } from '@angular/core';\n/**\n * Servicio encargado de manejar el analytics de Metricool Pixel\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class MetricoolPixelService {\n /**\n * Indica si se esta cargando el Servicio.\n */\n private isLoaded = false;\n\n private rendererFactory: RendererFactory2 = inject(RendererFactory2)\n private document: Document | null = inject(DOCUMENT)\n private platformId: any = inject(PLATFORM_ID)\n /**\n * Se encarga de crear el elemento HTML con las configuraciones para \n * que se pueda ejecutar el servicio.\n */\n private renderer: Renderer2;\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n this.document = document\n }\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n /**\n * Inicializa el Servicio de analytics con sus configuraciones.\n * @param pixel_hash hash provisto por Metricool Pixel.\n */\n initialize = (pixel_hash: any) => {\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","import { inject, Injectable } from '@angular/core';\nimport { AnalyticEventKey } from '../../interfaces';\nimport { FacebookPixelService } from './facebook-pixel.service';\nimport { GoogleAnalyticsService } from './google-analytics.service';\nimport { GTMService } from './gtm.service';\nimport { DopplerService } from './doppler.service';\nimport { MetricoolPixelService } from './metricool-pixel.service';\n/**\n * Servicio que se encarga de manejar todo lo referido con Analytics.\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class AnalyticsService {\n /**\n * Guarda los distintos tipos de analytics.\n */\n\tprivate services: any[] = [];\n\n\tprivate facebookAnalytics: any = inject(FacebookPixelService)\n\tprivate googleAnalytics: any = inject(GoogleAnalyticsService)\n\tprivate gtmAnalytics: any = inject(GTMService)\n\tprivate metricoolAnalytics: any = inject(MetricoolPixelService)\n\tprivate dopplerAnalytics: any = inject(DopplerService)\n\n\tconstructor() {\n\t\tthis.services.push(this.facebookAnalytics);\n\t\tthis.services.push(this.googleAnalytics);\n\t\tthis.services.push(this.gtmAnalytics);\n\t}\n /**\n * Inicializa el servicio de analytics de Facebook.\n * @param value Pixel Id\n */\n\tinitializeFacebook(value: any){\n this.facebookAnalytics.initialize(value);\n }\n /**\n * Inicializa el servicio de analytics de google.\n * @param value GTM Id\n */\n initializeGoogle(value: any){\n this.googleAnalytics.initialize(value);\n }\n /**\n * Inicializa el servicio de analytics de Google Tag Manager (GTM).\n * @param value id de GTM\n */\n initializeGTM(value: any){\n this.gtmAnalytics.initialize({ id: value });\n }\n /**\n * Inicializa el servicio de analytics de Metricool\n * @param value Pixel Hash\n */\n initializeMetricool(value: any){\n this.metricoolAnalytics.initialize(value);\n }\n /**\n * Inicializa el servicio de analytics de Doppler\n * @param value Pixel src\n */\n initializeDoppler(value: any){\n this.dopplerAnalytics.initialize(value);\n }\n /**\n * Recorre los servicios cargados ejecutando un evento en especifico.\n * @param event_name Nombre del evento a ejecutar.\n * @param data Datos extras para agregar al evento.\n */\n callEvent(event_name: AnalyticEventKey, data: any = {}){\n this.services.forEach(service => {\n service.callEvent(event_name, data)\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\nimport { ConnectionService } from '../api';\nimport { map, Observable, ReplaySubject, shareReplay } from 'rxjs';\n/**\n * Servicio para manejar los canales de la aplicación\n * @class ChannelService\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ChannelService {\n\t/**\n\t * Constantes de la API\n\t */\n\tprivate apiConsts: ApiConstantsService = inject(ApiConstantsService);\n\t/**\n\t * Constantes del core\n\t */\n\tprivate consts: CoreConstantsService = inject(CoreConstantsService)\n\t/**\n\t * Maneja las peticiones a la API\n\t */\n\tprivate connection: ConnectionService = inject(ConnectionService)\n\t/**\n\t * Subject para manejar los cambios en los canales.\n\t */\n\tprivate channelSubject = new ReplaySubject<any>()\n\t/**\n\t * Observable de canales.\n\t */\n\tpublic channel$: Observable<any> = this.channelSubject.asObservable()\n\t/**\n\t * Almacena el canal activo en la aplicación.\n\t */\n\tpublic activeChannel: any;\n\t/**\n\t * Almacena el tipo de canal.\n\t */\n\tpublic channelType: any;\n\n\t//API URL\n\t/**\n\t * Devuelve la url para obtener los datos de un canal.\n\t * @returns \n\t */\n\tprivate channelApi() { return `${this.apiConsts.SHOP_API_URL}${this.apiConsts.CHANNEL}/channel`; }\n\n\tconstructor() { }\n\t/**\n\t * Obtiene el canal de la API\n\t * @returns Observable con el canal.\n\t */\n\tpublic getChannel = (): Observable<any> => {\n\t\tthis.connection.get(this.channelApi()).pipe(\n\t\t\tshareReplay(1),\n\t\t\tmap((response: any) => {\n\t\t\t\tthis.setChannelInfo(response);\n\t\t\t\tthis.channelSubject.next(response);\n\t\t\t\tthis.channelType = response.type;\n\t\t\t\treturn response\n\t\t\t}),\n\t\t).subscribe()\n\t\treturn this.channel$;\n\t}\n\t/**\n\t * Cambia la configuración del canal con un canal nuevo.\n\t * @param channelObj \n\t */\n\tpublic setChannelInfo(channelObj: any) {\n\t\tthis.apiConsts.setChannel(channelObj.code)\n\t\tthis.consts.setCurrency(channelObj.baseCurrency)\n\t\tthis.activeChannel = channelObj\n\t\t//this.injector.get(AddressingService).setTypeSelectAddress(channelObj.headquarterSelectionOnly || 'LOAD_ADDRESS_AND_SELECTION')\n\t}\n\t/**\n\t * Devuelve el canal activo en la aplicación.\n\t * @returns \n\t */\n\tpublic getActiveChannel() { return this.activeChannel; }\n}\n","import { CurrencyConfig } from \"../interfaces\";\nimport { patchState, signalStore, withMethods, withState } from '@ngrx/signals';\n\ninterface CurrencyState {\n currency: CurrencyConfig;\n}\n\nconst initialState: CurrencyState = {\n currency: {}\n}\n\nexport const CurrencyStore = signalStore(\n { providedIn: 'root' },\n withState(initialState),\n withMethods(({ currency, ...store }) => ({\n add(newCurrency: CurrencyConfig) {\n patchState(store, { currency: newCurrency })\n }\n }))\n)","import { inject, Injectable } from '@angular/core';\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\nimport { ConnectionService } from '../api';\nimport { BehaviorSubject, firstValueFrom, Observable } from 'rxjs';\nimport { CurrencyConfig } from '../interfaces';\nimport { ChannelService } from './channel.service';\nimport { CurrencyStore } from '../stores';\n/**\n * Servicio encargado de manejar todo lo que este relacionado a la moneda\n * que maneja la aplicación.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CurrencyService {\n /**\n * Constantes de core\n */\n private _consts: CoreConstantsService = inject(CoreConstantsService)\n /**\n * Constantes de la API\n */\n private _apiConsts: ApiConstantsService = inject(ApiConstantsService)\n /**\n * Maneja las peticiones a la API\n */\n private _connection: ConnectionService = inject(ConnectionService)\n /**\n * Servicio de canales\n */\n private _channel: ChannelService = inject(ChannelService)\n /**\n * Contiene el canal activo de la API.\n */\n private _channel$: Observable<any> = this._channel.getChannel();\n /**\n * Subject para manejar la moneda actual.\n */\n private _currencySubject: BehaviorSubject<CurrencyConfig> = new BehaviorSubject({})\n /**\n * Subject para manejar la lista de monedas de la aplicación.\n */\n private _currencyListSubject: BehaviorSubject<any> = new BehaviorSubject([])\n /**\n * Subject para indicar la actualización de un estado.\n */\n private _updateSubject: BehaviorSubject<boolean> = new BehaviorSubject(false)\n\n public currency$: Observable<CurrencyConfig> = this._currencySubject.asObservable()\n public currencyList$: Observable<any[]> = this._currencyListSubject.asObservable()\n public update$: Observable<boolean> = this._updateSubject.asObservable();\n\n //API URL\n /**\n * Devuelve la URL para obtener lista de monedas de la aplicación.\n * @returns \n */\n private getCurrencyListApi() { return `${this._apiConsts.SHOP_API_URL}/currencies` };\n /**\n * Devuelve la URL para obtener la convertibilidad de una moneda. \n * @param baseCurrency Moneda base\n * @param targetCurrency Moneda destino\n * @returns \n */\n private getConvertibilityApi(baseCurrency: any, targetCurrency: any) { return `${this._apiConsts.SHOP_API_URL}/currencies?baseCurrency=${baseCurrency}&targetCurrency=${targetCurrency}` }\n /**\n * Store que guardara la moneda actual que maneja la aplicación.\n */\n protected currencyStore = inject(CurrencyStore);\n\n constructor() {\n this._channel$.subscribe(channel => {\n channel.applyCurrencyExchange ? this.loadCurrencyList() : this.loadDefaultCurrency(channel.baseCurrency);\n })\n }\n\n /**\n * Se carga la moneda por defecto.\n */\n private loadDefaultCurrency(currency: any) {\n this._consts.setCurrency(currency);\n this.load()\n }\n\n /**\n * Carga la lista de monedas/currencies.\n */\n private async loadCurrencyList() {\n await firstValueFrom(this._connection.get(this.getCurrencyListApi()))\n .then(res => {\n this._currencyListSubject.next(res)\n this._consts.setCurrencyTypeConfig(res)\n this.load()\n })\n }\n\n /**\n * calcula la convetibilidad del precio pasado por paramentro segun esta formula:\n * **c = a * b** donde *c=moneda despues del cambio*, *a=valor que quiero cambiar* y *b=ratio de cambio*. \n * @param price Precio a cambiar\n * @param ratio Ratio de cambio\n * @returns Si el ratio no es null, retorna el precio cambiado, sino retorna el precio sin cambios. \n */\n public calculateConvetibility(price: number, ratio: number) {\n return ratio ? price * ratio : price;\n }\n\n /**\n * genera la carga y configuración de la moneda elegida para la conversion.\n * @param currency Moneda a convertir.\n */\n private loadCurrency(currency: any) {\n this._currencySubject.next(currency);\n this._consts.setCurrency(currency.code);\n let update = this._updateSubject.getValue()\n this._updateSubject.next(!update)\n this.currencyStore.add(this._consts.currency)\n }\n\n /**\n * Genera la convertibilidad de la moneda base a la nueva. Si baseCurrency no tiene valor \n * entonces utiliza la moneda base del canal.\n * @param currency Objeto de la moneda destino.\n * @param baseCurrency Codigo de la moneda base. *Ej: USD | ARS | EUR |...*\n */\n async generateConvertibility(currency: any, baseCurrency?: string) {\n if (!baseCurrency) {\n try {\n baseCurrency = await this._channel.getActiveChannel().baseCurrency;\n } catch (error) {\n //console.error(error)\n baseCurrency = 'USD'\n }\n }\n console.log(\"BC\", baseCurrency);\n if (currency.code == baseCurrency) {\n this.loadCurrency(currency);\n } else {\n this.getConvertibility(baseCurrency, currency.code);\n }\n }\n\n /**\n * Obtiene la conversion desde la moneda base a la destino. Recibe un objeto de tipo CurrencyConfig.\n * Si la conversion retorna resultado realiza el cambio, de lo contrario emite un mensaje de error.\n * @param baseCurrency Codigo de la moneda base.\n * @param targetCurrency Codigo de la moneda destino.\n */\n private getConvertibility(baseCurrency: any, targetCurrency: any) {\n this._connection.get(this.getConvertibilityApi(baseCurrency, targetCurrency))\n .toPromise().then(\n res => {\n if (res) {\n let tempCurrency = res[0]\n this.loadCurrency(tempCurrency)\n } else {\n console.error('Error la variable res no contiene valor, asegurese de que esta conversión este configurada en el backoffice')\n //this.toastr.show('error-convertibility')\n }\n },\n err => {\n console.log(err)\n }\n ).catch(err => console.log(err))\n }\n\n /**\n * Carga la moneda, si hay una en el localstorage toma esa y realiza la conversion.\n * de lo contrario solo setea en el observable currencySubject el valor por defecto cargado en las constantes. \n */\n private load() {\n let storeCurrency = this.currencyStore.currency();\n if (storeCurrency && storeCurrency.code) {\n this.generateConvertibility(storeCurrency)\n } else {\n this._currencySubject.next(this._consts.currency)\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IndividualConfig, ToastrService } from 'ngx-toastr';\nimport { TranslateService } from '@ngx-translate/core';\nimport { take } from 'rxjs';\n/**\n * Servicio que se encarga de manejar mensajes en formato de toast.\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ToastService {\n\t/**\n\t * Servicio para lanzar los toast.\n\t */\n\tprivate toastrService:ToastrService = inject(ToastrService);\n\t/**\n\t * Serivicio de Traducciones.\n\t */\n\tprivate trasnlationService:TranslateService = inject(TranslateService);\n\t/**\n\t * Configuraciones para el Toast\n\t */\n\tprivate configToast:Partial<IndividualConfig> = {};\n\n\tconstructor() { }\n\n /**\n * Cambia el tiempo que se muestra el mensaje.\n * @param time \n */\n\tsetTimeMessage(time:number){\n\t\tthis.configToast = {\n\t\t\ttimeOut: time,\n\t\t}\n\t}\n\n\t/**\n\t * Cambia las configuraciones del toast\n\t * @param configToast\n\t */\n\tsetConfigToast(configToast:Partial<IndividualConfig>){\n\t\tthis.configToast = configToast\n\t}\n\t/**\n\t * Muestra el mensaje en el toast. Utiliza el servicio de translate para traducir aquellos mensajes\n\t * que entran como clave y estas estan en un archivo .json con las traducciones correspondientes asociadas.\n\t * @param message Texto a mostrar o puede ser una clave del archivo .json de traducciones.\n\t * @param interpolateParams \n\t * @param title Titulo para el Toast\n\t * @param configToast Configuraciones del toast.\n\t */\n\tshow(message:string, interpolateParams:any = {}, title='', configToast:Partial<IndividualConfig>=this.configToast){\n\t\tthis.trasnlationService.get(message,interpolateParams).pipe(take(1)).subscribe(\n\t\t\t(response:any) => this.toastrService.show((response ? response : message), title, configToast)\n\t\t)\n\t}\n\t/**\n\t * Muestra un mensaje de **ERROR** en el toast. Utiliza el servicio de translate para traducir aquellos mensajes\n\t * que entran como clave y estas estan en un archivo .json con las traducciones correspondientes asociadas.\n\t * @param message Texto a mostrar o puede ser una clave del archivo .json de traducciones.\n\t * @param interpolateParams \n\t * @param title Titulo para el Toast\n\t * @param configToast Configuraciones del toast.\n\t */\n\terror(message:string, interpolateParams:any = {}, title='', configToast:Partial<IndividualConfig>=this.configToast){\n\t\tthis.trasnlationService.get(message,interpolateParams).pipe(take(1)).subscribe(\n\t\t\t(response:any) => this.toastrService.error((response ? response : message), title, configToast)\n\t\t)\n\t}\n\t/**\n\t * Muestra un mensaje de **EXITO** en el toast. Utiliza el servicio de translate para traducir aquellos mensajes\n\t * que entran como clave y estas estan en un archivo .json con las traducciones correspondientes asociadas.\n\t * @param message Texto a mostrar o puede ser una clave del archivo .json de traducciones.\n\t * @param interpolateParams \n\t * @param title Titulo para el Toast\n\t * @param configToast Configuraciones del toast.\n\t */\n\tsuccess(message:string, interpolateParams:any = {}, title='', configToast:Partial<IndividualConfig>=this.configToast){\n\t\tthis.trasnlationService.get(message,interpolateParams).pipe(take(1)).subscribe(\n\t\t\t(response:any) => this.toastrService.success((response ? response : message), title, configToast)\n\t\t)\n\t}\n\n}\n","import { afterNextRender, inject, Injectable } from '@angular/core';\nimport { RecaptchaSettings } from 'ng-recaptcha-2';\nimport { BehaviorSubject, concatMap, firstValueFrom, map, Observable } from 'rxjs';\nimport { ConnectionService } from '../api';\nimport { ParametersService } from './parameters.service';\nimport { ApiConstantsService } from '../constants';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ReCaptchaService {\n\n\tprivate _connection: ConnectionService = inject(ConnectionService);\n\tprivate _paramsService: ParametersService = inject(ParametersService);\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\n\n\tprivate _recaptchaSubject: BehaviorSubject<RecaptchaSettings> = new BehaviorSubject<RecaptchaSettings>({ siteKey: '' });\n\tpublic recaptcha$ = this._recaptchaSubject.asObservable();\n\n\tprivate params$ = this._paramsService.getParameters();\n\tpublic params: any;\n\n\tprivate urlBaseFormat: string = '';\n\tprivate testing: string = \"easycommercetech\"\n\tprivate productionEnvironment: Boolean = false;\n\n\tprivate recaptchaSiteKeysUrl = './assets/recaptcha/recaptcha-site-keys.json';\n\tprivate recaptchaSitesUrl = './assets/recaptcha/recaptcha-sites.json';\n\tprivate recaptchaSitesUrlProd = './assets/recaptcha/recaptcha-sites-prod.json'\n\n\tprivate RECAPTCHA_SITE_KEYS: any = []\n\tprivate RECAPTCHA_SITES: any = []\n\n\tconstructor() {\n\t\tthis.params$.subscribe(params => this.params = params);\t\n\t\tthis.initializer();\n\t\tafterNextRender(()=> {\n\t\t\tthis.urlBaseFormat = this.formatUrl(location.href);\n\t\t\tthis.productionEnvironment = this.isProd();\n\t\t})\n\t}\n\t/**\n * Devuelve true si la url es de produccion, false en caso contrario. \n * @returns {Boolean}\n */\n\tprivate isProd(): Boolean {\n\t\treturn !this.urlBaseFormat.includes(this.testing)\n\t}\n\t/**\n * 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\tprivate formatUrl(url: string): string {\n\t\treturn url.split(\"/\").filter(e => e != \"/\").filter(e => !e.includes(\"http\")).filter(e => e.length).slice(0,1).pop() || ''\n\t}\n\n\t/**\n * Path que contiene la direccion del endpoint referido al captcha\n * @returns {string} \n */\n private captchaApi():string { return `${this._apiConsts.SHOP_API_URL}channels`;}\n\t/**\n * 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\tprivate initializer(): void {\n\t\tlet paramThisChannel = this.params.find((param:any) => param.code === `recaptcha_key_${this._apiConsts.CHANNEL}`)\n\t\tif(paramThisChannel){\n\t\t\tthis._recaptchaSubject.next({siteKey: paramThisChannel.value});\n\t\t}else{\n\t\t\tlet paramGeneral = this.params.find((param:any) => param.code === 'recaptcha_key')\n\t\t\tif(paramGeneral){\n\t\t\t\tthis._recaptchaSubject.next({siteKey: paramGeneral.value});\n\t\t\t} else {\n\t\t\t\tthis.getRecaptchaSites().pipe(\n\t\t\t\t\tmap((res:any) => this.RECAPTCHA_SITES = res),\n\t\t\t\t\tconcatMap( res => this.getRecaptchaSiteKeys().pipe(\n\t\t\t\t\t\tmap(res=> this.RECAPTCHA_SITE_KEYS = res)\n\t\t\t\t\t))\n\t\t\t\t).subscribe(\n\t\t\t\t\te => this.getSiteKey()\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n * Obtiene los datos del archivo .json en donde se guardan las claves.\n * @returns {Observable<any>} Datos obtenidos del archivo con las claves captcha\n */\n\tprivate getRecaptchaSiteKeys(): Observable<any>{\n\t\treturn this._connection.getWithFullUrl(this.recaptchaSiteKeysUrl)\n\t}\n\t/**\n * Se obtiene los datos segun el entorno en que se ejecute\n * @returns {Observable<any>} Datos obtenidos del archivo con las url de los sitios\n */\n\tprivate getRecaptchaSites(): Observable<any>{\n\t\treturn this.productionEnvironment ? \n\t\t\tthis._connection.getWithFullUrl(this.recaptchaSitesUrlProd) :\n\t\t\tthis._connection.getWithFullUrl(this.recaptchaSitesUrl);\n\t}\n\t/**\n * Genera una peticion para recibir la clave del recaptcha. 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\tprivate getSiteKey(){\n\t\tfirstValueFrom(this._connection.get(this.captchaApi())).then(\n\t\t\t(res: any) => {\n\t\t\t\tthis._recaptchaSubject.next( {\n\t\t\t\t\tsiteKey: res.siteKey ? res.siteKey : this.RECAPTCHA_SITE_KEYS[this.RECAPTCHA_SITES[this.urlBaseFormat]]\n\t\t\t\t})\n\t\t\t},\n\t\t\t(err: any) => {\n\t\t\t\tthis._recaptchaSubject.next({ siteKey: this.RECAPTCHA_SITE_KEYS[this.RECAPTCHA_SITES[this.urlBaseFormat]]})\n\t\t\t}\n\t\t)\n\t}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ApiConstantsService } from '../constants';\nimport { ConnectionService } from '../api';\nimport { BehaviorSubject, map, Observable, shareReplay } from 'rxjs';\n\n/**\n * Servicio encargado de manejar todo aquello relacionado con los formularios dentro de la aplicación.\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class FormService {\n\tprivate apiConsts: ApiConstantsService = inject(ApiConstantsService)\n\tprivate connection: ConnectionService = inject(ConnectionService)\n \t\n\tprotected countriesSubject = new BehaviorSubject<any[]>([]);\n\tprotected provincesSubject = new BehaviorSubject<any[]>([]);\n protected documentTypesSubject = new BehaviorSubject<any[]>([]);\n\t\n\tpublic countries$ = this.countriesSubject.asObservable();\n public provinces$ = this.provincesSubject.asObservable();\n public documentTypes$ = this.documentTypesSubject.asObservable();\n\n\t//API URL\n\t/**\n\t * Retorna una url para enviar los datos de un formulario de contacto.\n\t * @returns \n\t */\n\tpublic contactFormResponseAPI() { return `${this.apiConsts.CMS_URL}${this.apiConsts.LOCALE}/contact-form/response` }\n\t/**\n\t * Retorna una url para el endpoint que obtinen los paises.\n\t * @returns \n\t */\n\tpublic countriesApi() { return 'shop-api/' + this.apiConsts.CHANNEL + '/countries' };\n\n\tconstructor() { }\n\t/**\n\t * Envia en formulario.\n\t * @param response_obj \n\t * @returns \n\t */\n\tsendResponse(response_obj: any) {\n\t\treturn this.connection.post(this.contactFormResponseAPI(), this.prepareData(response_obj))\n\t}\n\t/**\n\t * Obtiene los paises y los guarda en un observable.\n\t * @returns \n\t */\n\tgetCountriesData():Observable<any> {\n\t\tthis.connection.get(this.countriesApi()).pipe(\n\t\t\tshareReplay(1),\n\t\t\tmap((response:any) => {\n\t\t\t\t//console.log(response);\n\t\t\t\tconst data = response._embedded.items;\n\t\t\t\tthis.countriesSubject.next(data)\n\t\t\t\tconst documentTypesLocale = data.find((res: any) => {\n\t\t\t\t\treturn res.code.toLocaleLowerCase() == this.apiConsts.LOCALE.toLocaleLowerCase().split('_')[1]\n\t\t\t\t})\n\t\t\t\tconst documentTypesData = documentTypesLocale['documentTypes']\n\t\t\t\tthis.documentTypesSubject.next(documentTypesData)\n\t\t\t})).subscribe();\n\t\t\n\t\treturn this.countries$;\n\t}\n\t/**\n\t * Cambia la lista de provincias segun el codigo del país.\n\t * @param code \n\t */\n\tonCountrySelected = (code:string) => {\n\t\tconst provinces = this.countriesSubject.value.find(province => province.code == code).provinces;\n\t\tthis.provincesSubject.next(provinces);\n\t}\n\t/**\n\t * Para el futuro, cuando haya que aplicar algun formato antes de enviar el formulario.\n\t * @param response_obj \n\t * @returns \n\t */\n\tprepareData(response_obj: any) {\n\t\treturn response_obj\n\t}\n\n}\n","import { Deserializable } from \"../interfaces\";\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: any) {\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 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 public isSeller() { return this.typeUser && this.typeUser == 'seller' || false }\n\n public setChannels(...channels: any): void { this.channels = channels }\n\n public isWholesaler():boolean {\n\t\treturn this.typeUser && (this.typeUser == 'wholesaler_customer' || this.typeUser == 'seller') || false\n\t}\n\n static fromJson(data: any): User {\n return Object.assign(new User(), data);\n }\n}\n","import { FilterElement, FilterType, IFilter } from \"../../interfaces\";\n\nexport class Filter implements IFilter {\n \n data: FilterElement[] = [];\n multi: boolean = false;\n \n type(): FilterType {\n throw new Error(\"Method not implemented.\");\n }\n setContent(options: any): void {\n throw new Error(\"Method not implemented.\");\n }\n getContent(): FilterElement[] {\n throw new Error(\"Method not implemented.\");\n }\n toUrlParams(): string {\n throw new Error(\"Method not implemented.\");\n }\n createElement(filter: any, original: any, initialValue?: any) {\n throw new Error(\"Method not implemented.\");\n }\n removeAccents = (str:string) => {\n return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n }\n\n setSelected(element:any, value?:any){\n //console.log(element, value);\n ((element.multi != undefined) && !element.multi) ? this.cleanFilter(this.data, element) : null;\n this.setSelectedValue(element, value);\n }\n\n cleanFilter = (data:any, element_to_change:any) => {\n //console.log(\"cleanFilter\");\n element_to_change && data.forEach((element:any) => {\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 setSelectedValue(element:any, value?:any, sublist?:any, multi?:any){\n let elements = sublist || this.data;\n let index = elements.findIndex((subelement:any) => {\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:any, i:number) => {\n if (i != index) child.selected = false;\n });\n return {\n elements,\n founded: true\n };\n } else {\n elements.some((elem:any) => elem.type == 'sub') && elements.some(\n (filter:any) => {\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 return null;\n };\n\n getSelectedList = (): any => this.findSelected(this.data, []);\n\n findSelected = (elements: any[], result:any) => {\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","import { inject } from \"@angular/core\";\nimport { OptionsService } from \"../../ec-services\";\nimport { FilterElement, FilterType, IFilter } from \"../../interfaces\";\nimport { Filter } from \"./filter\";\n\nexport class CategoryFilter extends Filter{\n private _optionsService: OptionsService = inject(OptionsService);\n\n override data: FilterElement[] = [];\n override multi: boolean = false;\n\n constructor(private initialValues?: any,) {\n super();\n this._optionsService.getCategories().subscribe(res => {\n //console.log(res);\n this.setContent(res, initialValues);\n })\n }\n\n override type(): FilterType {\n return 'categories';\n }\n override setContent(options: any, initialValue?: any): void {\n const categories = this._optionsService.generateMenu(options);\n categories.forEach((filter: any, i: number) => filter = this.createElement(filter, options[i], initialValue));\n this.data = categories;\n }\n override getContent(): FilterElement[] {\n throw new Error(\"Method not implemented.\");\n }\n override toUrlParams(actual_url = '', sublist?: any): string {\n let elements = sublist || this.data;\n elements.forEach((element: any) => {\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 override createElement(filter: any, original: any, initialValue?: any) {\n if (filter.type == 'sub') {\n filter.multi = false;\n filter.shape = 'text';\n filter.value = original.code;\n filter.selected = (initialValue && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initialValue?.toLowerCase()));\n filter.children = filter.children.map((child:any, i:number) => this.createElement(child, original.children[i], initialValue));\n } else {\n filter.value = original.code;\n filter.selected = (initialValue && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initialValue?.toLowerCase()));\n }\n return filter\n }\n}\n","import { inject } from \"@angular/core\";\nimport { OptionsService } from \"../../ec-services\";\nimport { FilterElement, FilterType, IFilter } from \"../../interfaces\";\nimport { Filter } from \"./filter\";\n\nexport class AttributesFilter extends Filter {\n private _optionsService: OptionsService = inject(OptionsService);\n\n override data: FilterElement[] = [];\n override multi: boolean = false;\n\n constructor(initialValue?: any, options?:any) {\n super();\n if(options){\n this.setContent(options, initialValue); \n }else{\n this._optionsService.getAttributes().subscribe(\n res => {\n //console.log(res);\n this.setContent(res, initialValue);\n }\n )\n }\n }\n\n override type(): FilterType { return 'attributes'; }\n\n override setContent(options: any, initialValue?: any): void {\n const attributes = this._optionsService.generateMenu(options);\n attributes.forEach((filter: any) => filter = this.createElement(filter, options, initialValue));\n this.data = attributes;\n }\n override getContent(): FilterElement[] {\n return this.data;\n }\n override toUrlParams(actual_url = '&attributeCodes=', sublist?:any, already?:any) {\n let elements = sublist || this.data;\n let aux_url = '';\n elements.forEach((element: any) => {\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.code;\n }\n else {\n if (aux_url == '') aux_url = (already ? '<and>' : '') + element.code;\n else aux_url += ('<and>' + element.code);\n }\n }\n })\n //console.log(actual_url + aux_url);\n return actual_url + aux_url;\n };\n\n cleanResult(text: string) { return text.replace('&attributeCodes=', '') };\n\n override createElement(filter: any, original: any, initialValue?: any) {\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: any, i: number) =>{\n return this.createElement(child, child.children, initialValue)\n });\n } else {\n filter.value = original.code;\n filter.multi = false;\n filter.selected = (initialValue && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initialValue?.toLowerCase()));\n }\n return filter;\n }\n}\n","import { FilterElement, FilterType, IFilter } from \"../../interfaces\";\nimport { Filter } from \"./filter\";\n\nexport class DynamicsFilter extends Filter{\n generated_url = '';\n override data: FilterElement[] = [];\n override multi: boolean = true;\n \n override type(): FilterType {\n return 'dynamics';\n }\n override setContent(options: any): void {\n options = options.map((option:any) => option = this.createElement(option));\n this.data = options;\n }\n override getContent(): FilterElement[] {\n throw new Error(\"Method not implemented.\");\n }\n override toUrlParams = (actual_url = '&optionCodes=', sublist?:any, already?:any):string => {\n let elements = sublist || this.data;\n let aux_url = '';\n elements.forEach((element:any) => {\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 override createElement(option: any) {\n option = {\n title: option.label, useToFilter:option.useToFilter, type: 'sub', multi: false, code: option.code, shape: option.type, children: option.values.map((value:any) => {\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 image: value.image\n }\n })\n }\n return option;\n }\n\n cleanResult(text:string) {return text.replace('&optionCodes=', '')};\n}\n","import { inject } from \"@angular/core\";\nimport { CoreConstantsService } from \"../../constants\";\nimport { FilterElement, FilterType, IFilter } from \"../../interfaces\";\nimport { Filter } from \"./filter\";\n\nexport class SortFilter extends Filter {\n private _consts: CoreConstantsService = inject(CoreConstantsService);\n\n override data: FilterElement[] = [];\n override multi: boolean = true;\n\n constructor(){\n super();\n this.setContent();\n }\n\n override type(): FilterType {\n return 'sort'\n }\n override setContent(): void {\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, multi: false, },\n { title: 'most-expensive-first', code: 'price expensive', type: 'child', value: 'desc', selected: false, multi: false, }\n ]\n },\n {\n title: 'alphabetical-order', type: 'sub', code: 'order-alph', multi: false, shape: 'text', children: [\n // { title: 'order-alph', type: 'child', code: 'alpha default', value: '', selected: false, multi: false },\n { title: 'ascendancy', type: 'child', code: 'alpha asc', value: 'asc', selected: false, multi: false, },\n { title: 'descendant', type: 'child', code: 'alpha desc', value: 'desc', selected: false, multi: false, }\n ]\n },\n {\n title: 'created-date',\n type: 'sub',\n code: 'recent',\n multi: false,\n shape: 'text',\n children: [\n { title: 'order-date', type: 'child', code: 'recent default', value: '', selected: false, multi: false },\n { title: 'newest-first', type: 'child', code: 'recent desc', value: 'desc', selected: false, multi: false },\n { title: 'oldest-first', type: 'child', code: 'recent asc', value: 'asc', selected: false, multi: false },\n ]\n },\n {\n title: 'date-created',\n type: 'sub',\n code: 'update',\n multi: false,\n shape: 'text',\n children: [\n { noUrl: true, title: 'newest-first', type: 'child', code: 'update asc', value: 'asc', selected: false, multi: false },\n { noUrl: true, title: 'oldest-first', type: 'child', code: 'update desc', value: 'desc', selected: false, multi: false },\n ]\n }\n ]\n\n if (!this._consts.getSortFilters().includes('all')) {\n this.data = this.data.filter(elem => this._consts.getSortFilters().includes(elem.code))\n }\n }\n override getContent(): FilterElement[] {\n return this.data;\n }\n override toUrlParams(actual_url = '', sublist?:any, father?:any): string {\n let elements = sublist || this.data;\n elements.forEach((element:any) => {\n if (!element.noUrl) { //Si es sin url, no se hace nada. Osea el filtrado es en la vista.\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 })\n return actual_url;\n }\n override createElement(filter: any, original: any, initialValue?: any) {\n throw new Error(\"Method not implemented.\");\n }\n\n translate(value:string):string | null{\n switch (value) {\n case 'price': return 'price';\n case 'created-date': return 'dateCreate';\n case 'alphabetical-order': return 'name';\n default: return null;\n }\n }\n}\n","import { FilterType, IFilter, PaginationSettings } from \"../../interfaces\";\nimport { AttributesFilter } from \"./attributes-filter\";\nimport { CategoryFilter } from \"./category-filter\";\nimport { DynamicsFilter } from \"./dynamics-filter\";\nimport { Filter } from \"./filter\";\nimport { SortFilter } from \"./sort-filter\";\n\nexport class FilterFactory {\n public create(filterType: FilterType, productsFilter?: PaginationSettings): Filter {\n switch (filterType) {\n case 'categories':\n return new CategoryFilter(productsFilter ? (productsFilter.type == 'categories' && productsFilter.value) : null);\n case 'attributes':\n return new AttributesFilter(productsFilter ? (productsFilter.type == 'attributes' && productsFilter.value) : null);\n case 'dynamics':\n return new DynamicsFilter();\n case 'sort':\n return new SortFilter();\n default:\n throw new Error(\"Not implemented\")\n }\n }\n}\n","import { IStep, StepState, StepType } from \"../../interfaces/step\";\n\nexport class Step implements IStep {\n\n public name;\n public label:string = '';\n public priority;\n public type: StepType = null;\n public data:any;\n public state: StepState = 'pending';\n\n constructor(name:any, priority:any, label:string, state?:StepState) {\n this.name = name;\n this.label = label;\n this.state = state || 'pending';\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:any) => {\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 { inject, Injectable } from '@angular/core';\nimport { CookieService } from 'ngx-cookie-service';\nimport { Storage } from '../interfaces';\n/**\n * Adapter usado para storagear los datos.\n * @class LocalStorageService\n * @implements {Storage}\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalStorageService implements Storage {\n /**\n * Servicio usado para guardar los datos en las cookies\n */\n private _cookieService: CookieService = inject(CookieService);\n\n constructor() { }\n /**\n * Obtiene el item del Storage\n * @param key Clave para acceder al valor\n * @returns \n */\n getItem(key: string):string {\n return this._cookieService.get(key);\n }\n /**\n * Guarda un dato en el storage.\n * @param key Clave que se asocia al valor\n * @param value Valor a guardar\n * @param metadata Opciones extra que puede necesitar el servicio.\n */\n setItem(key: string, value: any, metadata:any = {path:'/'}) {\n this._cookieService.set(key, value, metadata);\n }\n /**\n * Remueve el item del storage.\n * @param key Clave del item del storage a eliminar.\n * @param metadata Opciones extra que puede necesitar el servicio.\n */\n removeItem(key: string, metadata:any = '/'): void {\n this._cookieService.delete(key, metadata);\n }\n /**\n * Limpia el Storage.\n */\n clear(): void {\n this._cookieService.deleteAll();\n }\n key(index: number): string | null {\n throw new Error('Method not implemented.');\n }\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, map } from 'rxjs';\nimport { NgxLocalStorageService } from './ngx-local-storage.service';\nimport { LocalStorageService } from './local-storage.service';\nimport moment from 'moment';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class AuthStorageService {\n\tprivate _localStorage = inject(LocalStorageService);\n\n\tprivate _authTokenSubject = new BehaviorSubject<string | null>(null)\n\n\t// Contantes para el storage.\n\tprivate readonly JWT_TOKEN = 'JWT_TOKEN'\n\tprivate readonly REFRESH_TOKEN = 'REFRESH_TOKEN'\n\tprivate readonly EXPIRATES_IN = 'EXPIRATES_IN'\n\tconstructor() { }\n\n\tsetAuthToken(token: string | null): void {\n\t\tthis._authTokenSubject.next(token);\n\t}\n\n\tgetAuthToken$() {\n\t\treturn this._authTokenSubject.asObservable();\n\t}\n\n\tgetAuthToken(): string | null {\n\t\tif(!this._authTokenSubject.value){\n\t\t\tconst res = this._localStorage.getItem(this.JWT_TOKEN)\n\t\t\treturn res ? res : null;\n\t\t} else {\n\t\t\treturn this._authTokenSubject.value;\n\t\t}\n\t}\n\n\t/**\n\t * Devuelve `true`si el token expiro, `false` caso contrario.\n\t * @returns \n\t */\n\tprivate isTokenExpired() {\n\t\tconst fecha_expiracion = this.getExpiratesAt();\n\t\tconst result = moment() >= moment(fecha_expiracion);\n\t\treturn result;\n\t}\n\t/**\n\t * Obtiene la fecha de expiración del token.\n\t * @returns \n\t */\n\tprivate getExpiratesAt() {\n\t\treturn this._localStorage.getItem(this.EXPIRATES_IN);\n\t}\n}\n","import { inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport { UserRoleType } from '../interfaces';\nimport { BehaviorSubject, catchError, map, Observable, of } from 'rxjs';\nimport { ConnectionService } from '../api';\nimport { User } from '../classes';\nimport moment from 'moment';\nimport { ChannelService } from './channel.service';\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\nimport { LocalStorageService } from './local-storage.service';\nimport { AuthStorageService } from './auth.storage.service';\nimport { CartService } from './cart.service';\nimport { isPlatformBrowser } from '@angular/common';\n/**\n * Servicio de autentificación del usuario en la plataforma.\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class AuthService {\n\tprivate _localStorage: LocalStorageService = inject(LocalStorageService)\n\tprivate _connection: ConnectionService = inject(ConnectionService);\n\tprivate _channelService: ChannelService = inject(ChannelService);\n\tprivate _constants: CoreConstantsService = inject(CoreConstantsService);\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\n\tprivate _authStorage: AuthStorageService = inject(AuthStorageService);\n\n\t// Contantes para el storage.\n\tprivate readonly JWT_TOKEN = 'JWT_TOKEN'\n\tprivate readonly REFRESH_TOKEN = 'REFRESH_TOKEN'\n\tprivate readonly EXPIRATES_IN = 'EXPIRATES_IN'\n\tprivate readonly USER = 'USER'\n\tprivate readonly MAIL = 'mail'\n\tprivate readonly LOCALE = 'LOCALE'\n\tprivate readonly CHANNEL = 'CHANNEL'\n\tprivate readonly CUSTOMER = 'CUSTOMER'\n\tprivate readonly CHANNELSELLER = 'CHANNELSELLER'\n\n\tprivate channelsUserSubject = new BehaviorSubject<any[]>([])\n\tpublic channels$ = this.channelsUserSubject.asObservable()\n\tprivate _channel$ = this._channelService.getChannel()\n\tprivate _userInSubject = new BehaviorSubject<User | null>(null)\n\tprivate _loggedInSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\tpublic loggedIn$: Observable<boolean> = this._loggedInSubject.asObservable();\n\tprivate _loggingInSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\tpublic loggingIn$: Observable<boolean> = this._loggingInSubject.asObservable();\n\n\t/**\n\t * Para indicar si un canal cambio.\n\t */\n\tprivate _activeChannelChange: boolean = false;\n\t/**\n\t * Guarda los datos del usuario\n\t */\n\tprivate _user: User | null = null;\n\tprivate _customer = null;\n\t/**\n\t * Guarda los datos del canal\n\t */\n\tpublic channel: any = []\n\tpublic channels: any[] = []\n\t/**\n\t * Utilizado para resolver hacia donde se tiene que redireccionar\n\t * la pagina tras un evento.\n\t */\n\tprivate _homeResolver: any;\n\t/**\n\t * Signal para guardar el token de usuario una vez logueado\n\t */\n\tprivate _tokenSignal = signal<string | null>(null);\n\t/**\n\t * Signal para guardar el usuario\n\t */\n\tprivate _userSignal = signal<User | null>(null);\n\t//APIs\n\tprivate shopApi: string = this._apiConsts.SHOP_API_URL\n\tprivate channelApi: string = this._apiConsts.CHANNEL\n\tprivate tokenApi() { return this.shopApi + 'login_check' }\n\tprivate recoverPasswordApi() { return `${this.shopApi}${this.channelApi}/request-password-reset` }\n\tprivate confirmAccountApi(token: string) { return `${this.shopApi}${this.channelApi}/verify-account?token=${token}` }\n\tprivate registerApi() { return `${this.shopApi}${this.channelApi}/register` }\n\tprivate registerWholesalerApi() { return `${this.shopApi}${this.channelApi}/register-wholesaler`}\n\tprivate platformId: any = inject(PLATFORM_ID)\n\t\n\tpublic window?:Window;\n\tpublic localStorage?:Storage;\n\tconstructor() {\n\t\tif (isPlatformBrowser(this.platformId)) {\n\t\t\tthis.window = window\n\t\t\tthis.localStorage = localStorage;\n\t\t}\n\t\tthis.loadTokenFromStorage();\n\t\tthis.isAuthenticated() && this._loggedInSubject.next(true);\n\t}\n\t/**\n\t * Loguea al usuario en la aplicación.\n\t * @param user datos del usuario\n\t * @param withRoles roles del usuario\n\t * @returns \n\t */\n\tlogin(user: { username: string, password: string }, withRoles: UserRoleType[] = []): Observable<any> {\n\t\tthis._channel$.subscribe(ch => this.channel = ch);\n\t\tthis.channels$.subscribe(ch => this.channels = ch);\n\t\tthis._loggingInSubject.next(true);\n\t\tuser = {...user, ...this.loginExtraData() }\n\t\treturn this._connection.post(this.tokenApi(), user).pipe(\n\t\t\tmap((res: any) => {\n\t\t\t\tif (this.channelAccessPermission({ ...user, ...res }) && this.isAllowedRole(withRoles, res.type)) {\n\t\t\t\t\tthis.doLoginUser({ ...user, ...res });\n\t\t\t\t\treturn 'ok';\n\t\t\t\t}\n\t\t\t\treturn 'error';\n\t\t\t}),\n\t\t\tcatchError((error: any) => {\n\t\t\t\tthis._loggingInSubject.next(false);\n\t\t\t\treturn of(error.toString());\n\t\t\t})\n\t\t)\n\t}\n\t/**\n\t * Controla que el usuario logueado tenga permisos \n\t * para el canal actual de la aplicación.\n\t * @param res \n\t * @returns \n\t */\n\tprivate channelAccessPermission(res: any) {\n\t\t//console.log('channelAccess', res);\n\t\tthis.channelsUserSubject.next([]);\n\n\t\t/* No authorized channels */\n\t\tif (res.channels?.length == 0) {\n\t\t\treturn false\n\t\t}\n\t\t/* Some authorized channel(s) including current channel */\n\t\tif (res.channels.find((userchannel: any) => userchannel.code === this.channel.code)) {\n\t\t\t/* Multiple authorized channels including current channel */\n\t\t\tif (res.channels?.length > 1 && this._activeChannelChange)\n\t\t\t\tthis.channelsUserSubject.next(res.channels)\n\t\t\treturn true\n\t\t}\n\t\t/* One authorized channel not including current channel */\n\t\tif (res.channels?.length == 1 && this._activeChannelChange) {\n\t\t\tdelete res.password\n\t\t\tthis.channelAccess(res.channels[0], res)\n\t\t\treturn true\n\t\t}\n\t\t/* Multiple authorized channels not including current channel */\n\t\tif (this._activeChannelChange) {\n\t\t\tthis.channelsUserSubject.next(res.channels)\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\t/**\n\t * Controla el acceso al canal, de ser otro nuevo cambia los valores.\n\t * @param channel \n\t * @param user \n\t */\n\tchannelAccess(channel: any, user = null) {\n\t\tif (this.window?.location.hostname != channel.hostname) {\n\t\t\tlet encoded = btoa(JSON.stringify(user != null ? user : this._user))\n\t\t\tthis.window?.location.replace(`${this.window?.location.protocol}//${channel.hostname}/auth/redirect/${encoded}`)\n\t\t} else {\n\t\t\tthis._constants.modifyChannelConfig(channel)\n\t\t\tthis.window?.location.reload()\n\t\t}\n\t}\n\t/**\n\t * Controla que el rol del usuario sea un rol permitido por la aplicación.\n\t * @param allowedRoles roles que permite la aplicación.\n\t * @param role rol del usuarios\n\t * @returns \n\t */\n\tprivate isAllowedRole(allowedRoles: UserRoleType[], role: string) {\n\t\treturn allowedRoles.length\n\t\t\t? allowedRoles.includes(role as UserRoleType)\n\t\t\t: true\n\t}\n\t/**\n\t * Tras un logueo exitoso, guarda los datos necesarios en el storage y demás\n\t * configuraciones necesarias.\n\t * @param tokens \n\t */\n\tprivate doLoginUser(tokens: any) {\n\t\tthis._user = new User()\n\t\tthis._user.initilized(tokens)\n\t\t\n\t\tthis.forceChannelsForSeller(tokens)\n\t\t//Channel\n\t\tconst userJsonify = this._user.jsonify()\n\t\tthis._localStorage.setItem(this.USER, JSON.stringify(userJsonify))\n\t\tthis._localStorage.setItem(this.EXPIRATES_IN, moment(tokens.expire_in).add(1, 'h').format());\n\t\tthis._localStorage.setItem(this.REFRESH_TOKEN, moment(tokens.expire_in).add(1, 'h').format());\n\t\tthis._localStorage.setItem(this.JWT_TOKEN, tokens.token);\n\t\tthis._authStorage.setAuthToken(tokens.token)\n\t\tthis._tokenSignal.set(tokens.token);\n\t\tthis._localStorage.setItem(this.MAIL, tokens.username);\n\t\t//Observables\n\t\tthis._userInSubject.next(this._user);\n\t\tthis._loggedInSubject.next(true);\n\t\tthis._loggingInSubject.next(false);\n\t}\n\t/**\n\t * Cambia la funcion que se encarga de resolver hacia donde se redirige el frontend\n\t * tras una acción\n\t * @param resolverFunction \n\t */\n\tpublic setHomeResolver(resolverFunction: any) { this._homeResolver = resolverFunction }\n\t/**\n\t * Obtiene la funcion que se encarga de resolver hacia donde se redirige el frontend.\n\t * @returns \n\t */\n\tpublic getHomeResolver() { return this._homeResolver }\n\t/**\n\t * Obtiene el token del storage y lo guarda en la signal.\n\t */\n\tpublic loadTokenFromStorage() {\n\t\tconst token = this._localStorage.getItem(this.JWT_TOKEN);\n\t\tif (token) {\n\t\t\tthis._tokenSignal.set(token);\n\t\t}\n\t}\n\t/**\n\t * Desloguea al usuario.\n\t */\n\tpublic logout() {\n\t\tthis.doLogoutUser();\n\t}\n\t/**\n\t * Retorna si hay un usuario logueado o no.\n\t * @returns \n\t */\n\tpublic isAuthenticated(): boolean {\n\t\t//console.log(\"isAuthenticated\",this.isTokenExpired(), this._tokenSignal() );\n\t\tif (this.isTokenExpired()) {\n\t\t\tthis.doLogoutUser()\n\t\t}\n\t\tthis.getCurrentUserAsUser()\n\t\tthis._userInSubject.next(this._user);\n\t\t//console.log(this.getToken(), !this.isTokenExpired() , this._user != null);\n\t\treturn this.getToken() && !this.isTokenExpired() && this._user != null;\n\t}\n\t/**\n\t * Retorna el token de usuario\n\t * @returns \n\t */\n\tpublic getToken(): any {\n\t\treturn this._tokenSignal();\n\t}\n\t/**\n\t * Limpia el storage y las configuraciones internas\n\t */\n\tpublic doLogoutUser() {\n\t\tthis._user = null\n\t\tthis._localStorage.removeItem(this.USER);\n\t\tthis._localStorage.removeItem(this.EXPIRATES_IN);\n\t\tthis._localStorage.removeItem(this.JWT_TOKEN);\n\t\tthis._authStorage.setAuthToken(null);\n\t\tthis._localStorage.removeItem(this.REFRESH_TOKEN);\n\t\tthis._localStorage.removeItem('cart_token');\n\t\tthis._localStorage.removeItem(this.MAIL);\n\t\tthis._localStorage.removeItem(this.CHANNEL);\n\t\tthis._localStorage.removeItem(this.CHANNELSELLER);\n\t\tthis._localStorage.removeItem(this.LOCALE);\n\t\tthis._localStorage.removeItem(this.CUSTOMER);\n\t\tthis._localStorage.removeItem('MASTER_CHANNEL');\n\t\tthis._loggedInSubject.next(false);\n\t\tthis._userInSubject.next(this._user);\n\t\tthis.channelsUserSubject.next([])\n\t\tthis._tokenSignal.set(null)\n\t}\n\t/**\n\t * Devuelve `true`si el token expiro, `false` caso contrario.\n\t * @returns \n\t */\n\tprivate isTokenExpired() {\n\t\tconst fecha_expiracion = this.getExpiratesAt();\n\t\tconst result = moment() >= moment(fecha_expiracion);\n\t\treturn result;\n\t}\n\t/**\n\t * Obtiene la fecha de expiración del token.\n\t * @returns \n\t */\n\tprivate getExpiratesAt() {\n\t\treturn this._localStorage.getItem(this.EXPIRATES_IN);\n\t}\n\t/**\n\t * Obtiene al usuario actual y lo convierte en una instancia de `User`\n\t * @returns \n\t */\n\tprivate getCurrentUserAsUser(): User | null {\n\t\tthis._user = new User();\n\t\tif (!this.loadUserFromStorage()) {\n\t\t\tthis._user = null\n\t\t}\n\t\telse if (this._user?.channels.find((userchannel: any) => userchannel?.code === this._apiConsts.CHANNEL)) {\n\t\t\treturn this._user;\n\t\t} else {\n\t\t\tthis.logout()\n\t\t}\n\t\treturn this._user;\n\t}\n\t/**\n\t * Obtiene el usuario del storage.\n\t * @param key \n\t * @returns \n\t */\n\tprivate loadUserFromStorage(key = this.USER) {\n\t\tif (this._localStorage.getItem(key)) {\n\t\t\tthis._user = JSON.parse(this._localStorage.getItem(key));\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\t/**\n\t * Envia la solicitud para cambiar la contraseña.\n\t * @param email email del solicitante.\n\t * @returns \n\t */\n\trecoverPassword(email: string) {\n\t\treturn this._connection.put(this.recoverPasswordApi(), { email });\n\t}\n\t/**\n\t * Para confirmar el registro de usuario.\n\t * @param token \n\t * @returns \n\t */\n\tconfirmAccount(token: string) {\n\t\treturn this._connection.get(this.confirmAccountApi(token));\n\t}\n\t/**\n\t * Para registrar a un usuario común\n\t * @param data \n\t * @returns \n\t */\n\tsingUp(data: any) {\n\t\treturn this._connection.post(this.registerApi(), data);\n\t}\n\t/**\n\t * Para registrar a un usuario mayorista.\n\t * @param data \n\t * @returns \n\t */\n\tsignUpWholesaler(data: any) {\n\t\treturn this._connection.post(this.registerWholesalerApi(),data);\n\t}\n\t/**\n\t * Chequea si un usuario esta habilitado a comprar o no.\n\t * @returns \n\t */\n\tisAbleToBuy():boolean {\n\t\tconst currentUser = this.getUserProfileAsUser() as User;\n\t\tconst isSeller = currentUser.typeUser && currentUser.typeUser == 'seller' || false\n\t\treturn !isSeller || !this.getCustomer();\n\t}\n\t/**\n\t * Retorna un usuario de tipo cliente.\n\t * @returns \n\t */\n\tgetCustomer() {\n\t\treturn this._customer || JSON.parse(this._localStorage.getItem(this.CUSTOMER))\n\t}\n\t/**\n\t * Devuelve el usuario actual logueado.\n\t * @returns \n\t */\n\tgetUserProfileAsUser(): User {\n return this._user! as User || this.getCurrentUserAsUser();\n }\n\t/**\n\t * Agrega data extra al objecto de Usuario.\n\t * @returns \n\t */\n\tloginExtraData = () => {\n return {\n client_id: 'demo_client',\n client_secret: 'secret_demo_client',\n grant_type: 'password'\n }\n }\n\t/* Please remove this ASAP - Needs *channels* array in user object ALWAYS */\n private forceChannelsForSeller(tokens:any){\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\t /**\n * Carga el cliente con el que se realizaran pedidos. Si recibe el valor null\n * se vuelve a cargar el vendedor para su uso. \n * @param customer \n */\n\t public setCustomer(customer:any){\n let refreshPage = false\n this._customer = customer\n this._localStorage.setItem(this.CUSTOMER, JSON.stringify(customer))\n \n let sameChannel = customer ? this.sameChannel(customer.channels[0].code, customer.channels[0].locales.code) : null\n \n if (customer) {\n if(!sameChannel){\n !this.localStorage?.getItem(this.CHANNELSELLER) ?\n this.localStorage?.setItem(this.CHANNELSELLER, JSON.stringify({\n channel: this._apiConsts.CHANNEL,\n locale: this._apiConsts.LOCALE\n })) : null;\n this.changeChannel({\n channel: customer.channels[0].code,\n locale: customer.channels[0].locales.code\n })\n refreshPage = true\n }\n } else {\n let res = JSON.parse(this._localStorage.getItem(this.CHANNELSELLER))\n if(res){\n if(!this.sameChannel(res.channel, res.locale)){\n this.changeChannel(res)\n refreshPage = true\n }\n this.localStorage?.removeItem(this.CHANNELSELLER);\n }\n }\n //this._cartService.clearAndResetCustomerCart()\n refreshPage ? location.href = location.href : null\n }\n\n\t/**\n * Comprueba si los valores del canal actual son iguales a los ingresado por parametros.\n * @param {string} channel Nombre del canal\n * @param {string} locale Locale del canal\n * @returns {boolean} True si es el mismo canal, False caso contrario.\n */\n private sameChannel = (channel:string, locale:string):boolean => (channel == this._apiConsts.CHANNEL) && (locale == this._apiConsts.LOCALE)\n\n\t/**\n * Cambia de canal\n * @param channelConfig debe ser un objeto que contenga al menos las keys channel y locale.\n */\n private changeChannel = (channelConfig:any) => {\n this._constants.modifyChannelConfig({\n channel: channelConfig.channel,\n locale: channelConfig.locale\n })\n }\n}\n","import { EnvironmentInjector, inject, Injectable, runInInjectionContext } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Filter, FilterFactory } from '../classes';\nimport { DefaultFilter, FilterElement, FilterType, PaginationSettings } from '../interfaces';\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FiltersService {\n private _apiConsts: ApiConstantsService = inject(ApiConstantsService);\n private _consts: CoreConstantsService = inject(CoreConstantsService);\n private _filtersSubject: BehaviorSubject<Filter[]> = new BehaviorSubject<Filter[]>([]);\n public filters$: Observable<Filter[]> = this._filtersSubject.asObservable();\n\n private _apiUrlSubject: BehaviorSubject<string> = new BehaviorSubject<string>('');\n public apiUrl$: Observable<string> = this._apiUrlSubject.asObservable();\n\n private _readySubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n public ready$: Observable<boolean> = this._readySubject.asObservable();\n\n private environmentInjector = inject(EnvironmentInjector)\n\n private _optionsFilters: FilterType[] = ['all'];\n private _defaultFilters: DefaultFilter[] = [];\n\n private _paginationSettings: PaginationSettings = {\n value:'',\n type:'',\n limit:0\n };\n\n constructor(){\n //this._defaultFilters = this._consts.getDefaultFilters()\n }\n\n //API URL\n /**\n * Retorna la url para el filtrado\n * @param filters \n * @returns \n */\n productsFilterApi(filters = '') { return 'shop-api/' + this._apiConsts.CHANNEL + '/product-search/' + '?locale=' + this._apiConsts.LOCALE + filters };\n /**\n * Arma los filtros y retorna la url completa con los filtros aplicados.\n * @param search_value valor a buscar\n * @returns \n */\n generateFinalApi(search_value?: string) {\n let extra_params = '';\n this._filtersSubject.value.forEach(filter => {\n const extra = filter.toUrlParams();\n extra.split('=')[1] != '' ? extra_params += extra : null;\n })\n if (search_value) extra_params += ('&criteria[search][type]=contains&criteria[search][value]=' + search_value);\n \n //console.log(\"extra_params\",extra_params);\n return this.productsFilterApi(extra_params);\n }\n\n private isUpdated(paginationSettings: PaginationSettings){\n const keys:string[] = Object.keys(paginationSettings);\n let change:boolean = false;\n keys.forEach((key:string) => { \n const value = (paginationSettings as Record<string, any>)[key]; \n const value2 = (this._paginationSettings as Record<string, any>)[key];\n if (value != value2) change = true; \n })\n if (change) this._paginationSettings = paginationSettings;\n return change;\n }\n /**\n * Configura los filtros que seran aplicados en el frontend.\n * @param paginationSettings \n */\n setFilters(paginationSettings: PaginationSettings) {\n let final_filters: Filter[] = [];\n if (this._optionsFilters?.includes('all')) this._optionsFilters = ['attributes', 'categories', 'dynamics', 'sort'];\n runInInjectionContext(this.environmentInjector, () => {\n const filterFactory = new FilterFactory();\n this._optionsFilters?.forEach(filter => final_filters.push(filterFactory.create(filter, paginationSettings)));\n })\n this._defaultFilters?.forEach(filterDefault => {\n let filter = final_filters.find(filter => filter.type() == filterDefault.filter_type);\n filter && filterDefault.codes.forEach(value => filter.setSelected(value));\n })\n this._filtersSubject.next(final_filters);\n }\n /**\n * Obtengo filtros especificos según el tipo.\n * @param types \n * @returns \n */\n getSpecificFilters(types: FilterType[]): Filter[] {\n const filters: Filter[] = this._filtersSubject.value.filter(filter => types.includes(filter.type()))\n return filters;\n }\n /**\n * Aplica un filtro.\n * @param filterObj \n * @param filterElem \n */\n setFilterSelected(filterObj: Filter, filterElem: FilterElement) {\n let final_filters: Filter[] = this._filtersSubject.value;\n let index = final_filters.findIndex(filter => filter.type() == filterObj.type());\n final_filters[index].setSelected(filterElem, filterElem.value || filterElem.code);\n //console.log(index, final_filters)\n this._filtersSubject.next(final_filters);\n }\n /**\n * Actualiza los filtros.\n * @param paginationFilters \n */\n updateFilters(paginationFilters: any): void {\n const claves = Object.keys(paginationFilters)\n runInInjectionContext(this.environmentInjector, () => {\n const filterFactory = new FilterFactory();\n const filter:Filter[] = []\n /* claves.forEach((key:any) => {\n filter.push(filterFactory.create(key))\n paginationFilters[key].forEach((value:any) => {\n console.log(filter[0].createElement(value,paginationFilters[key]));\n })\n \n }) */\n this._filtersSubject.value.forEach((value:any) => {\n if(value.type() == \"attributes\") { \n //value.data = [];\n }\n })\n })\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { ConnectionService } from '../api';\nimport { BehaviorSubject, map, Observable, shareReplay, switchMap } from 'rxjs';\nimport { Pagination, Product } from '../interfaces';\nimport { FiltersService } from './filters.service';\nimport { Filter } from '../classes';\n/**\n * Servicio para manejar la paginación de los productos.\n * @class PaginationService\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class PaginationService {\n\n\tprivate _connectionService: ConnectionService = inject(ConnectionService);\n\tprivate _filtersService: FiltersService = inject(FiltersService)\n\tpublic paginationData$ = this._filtersService.filters$.pipe(\n\t\tshareReplay(1),\n\t\tswitchMap((filters) => {\n\t\t\tconst url = this.buildUrl(filters);\n\t\t\tconsole.log(\"pag\",url);\n\t\t\treturn this.getData(url);\n\t\t})\n\t)\n\n\tprivate _dataPagination: any = signal<Pagination>({\n\t\tattributes: [],\n\t\tcategory: [],\n\t\toptions: [],\n\t\tlimit: 0,\n\t\tpage: 0,\n\t\tpages: 0,\n\t\ttotal: 0,\n\t\titems: [],\n\t\tcalled: false\n\t});\n\n\tprivate _waiting: boolean = false;\n\tprivate _finished: boolean = false;\n\tprivate _apiUrl: string = '';\n\tprivate _start: boolean = false;\n\n\tprivate _nextProductsSubject: BehaviorSubject<Product[]> = new BehaviorSubject<Product[]>([]);\n\tpublic nextProducts$ = this._nextProductsSubject.asObservable();\n\n\tprivate _resetSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\tpublic reset$ = this._resetSubject.asObservable();\n\tconstructor() { }\n\n\t/**\n\t * Inicializa la configuración para el Servicio de Paginación.\n\t * @param apiUrl Url con los filtros aplicados. \n\t * @param limit limite de productos en cada petición.\n\t */\n\tinitialize(apiUrl: string, limit?: number) {\n\t\t//console.log(apiUrl)\n\t\tthis._apiUrl = apiUrl;\n\t\tthis._dataPagination().limit = limit || this._dataPagination().limit || 10;\n\t\tthis._finished = false;\n\t\tthis._start = true;\n\t\tthis._nextProductsSubject.next([]);\n\t}\n\t/**\n\t * Obtengo los datos de la siguiente página.\n\t * @param next \n\t * @returns \n\t */\n\tgetNext(next?: any): boolean {\n\t\tthis._waiting = true;\n\t\tthis._nextProductsSubject.next([]);\n\t\tthis._apiUrl = this._apiUrl.replace('%20', ' ');// mas para cuando es un search value.\n\t\tlet nextProducts;\n\t\tif (this._start) {\n\t\t\tnextProducts = this._connectionService.get(this._apiUrl, { limit: this._dataPagination().limit, page: 1 })\n\t\t\tthis._start = false\n\t\t} else {\n\t\t\tnextProducts = this._connectionService.get(this._dataPagination().links.next.slice(1));\n\t\t}\n\n\t\t!this._finished && nextProducts.subscribe(\n\t\t\t(response: Pagination) => {\n\t\t\t\tresponse.links ? this.updatePageData(response) : this.finish(response)\n\t\t\t\tthis._nextProductsSubject.next(response.items);\n\t\t\t}\n\t\t)\n\t\treturn true;\n\t}\n\t/**\n\t * Actualiza los datos de la pagina.\n\t * @param response respuesta del backend o objecto del tipo `Pagination`.\n\t */\n\tupdatePageData(response: Pagination): void {\n\t\tthis._dataPagination.set({ ...response, called: true })\n\t\tthis._finished = (response.page == response.pages)\n\t\tthis._waiting = false;\n\t}\n\t/**\n\t * Marca el final de las paginas, es decir cuando ya no queda mas elementos que mostrar.\n\t * @param response \n\t */\n\tfinish(response: Pagination): void {\n\t\tthis._finished = true;\n\t\tthis._waiting = false;\n\t}\n\t/**\n\t * Obtengo los productos de la pagina cargada actual. \n\t * @returns \n\t */\n\tpublic getNextProducts(): Product[] {\n\t\treturn this._nextProductsSubject.value;\n\t}\n\t/**\n\t * Devuelve si esta esperando o no la petición al backend.\n\t * @returns \n\t */\n\tpublic getWaiting(): boolean { return this._waiting; }\n\t/**\n\t * Setea la variable waiting.\n\t * @param value \n\t */\n\tpublic setWaiting(value: boolean): void { this._waiting = value }\n\t/**\n\t * Getter para la variable `_finished`.\n\t * @returns \n\t */\n\tpublic getFinished(): boolean { return this._finished; }\n\t/**\n\t * Devuelve el total de Items.\n\t * @returns \n\t */\n\tpublic getTotalItems(): number {\n\t\treturn this._dataPagination().limit * this._dataPagination().page;\n\t}\n\t/**\n\t * Obtengo un objecto con los datos de los filtros resultantes.\n\t * @returns \n\t */\n\tpublic getFiltersPagination(): any {\n\t\treturn {\n\t\t\t\"categories\": this._dataPagination().category,\n\t\t\t\"attributes\": this._dataPagination().attributes,\n\t\t\t\"options\": this._dataPagination().options\n\t\t}\n\t}\n\t/**\n\t * Para contruiste la url en base a los filtros aplicados.\n\t * @param filters \n\t * @returns \n\t */\n\tpublic buildUrl(filters: Filter[]) {\n\t\treturn this._filtersService.generateFinalApi();\n\t}\n\t/**\n\t * Devuelve un observable de los productos que devolvio la última página obtenida.\n\t * @param url \n\t * @returns \n\t */\n\tpublic getData(url: string): Observable<any> {\n\t\tthis._resetSubject.next(true);\n\t\tthis._nextProductsSubject.next([]);\n\t\tthis._connectionService.get(url, { limit: 10, page: 1 }).pipe(\n\t\t\tmap(res =>{ \n\t\t\t\t//console.log(res)\n\t\t\t\tthis._nextProductsSubject.next(res.items);\n\t\t\t\tres.links ? this.updatePageData(res) : this.finish(res)\n\t\t\t})).subscribe();\n\n\t\treturn this.nextProducts$;\n\t}\n}\n\n","import { EnvironmentInjector, inject, Injectable, runInInjectionContext, signal } from '@angular/core';\nimport { BehaviorSubject, map, Observable, ReplaySubject, shareReplay, switchMap } from 'rxjs';\nimport { DefaultFilter, FilterElement, FilterType, IFilter, Options, PaginationSettings, ParamsProductsWithUniqueVariant, Product } from '../interfaces';\nimport { ConnectionService } from '../api';\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\nimport { OptionsService } from './options.service';\nimport { PaginationService } from './pagination.service';\nimport { Filter, FilterFactory } from '../classes';\nimport { FiltersService } from './filters.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProductsService {\n private _connection: ConnectionService = inject(ConnectionService);\n private _apiConsts: ApiConstantsService = inject(ApiConstantsService);\n private _optionsService: OptionsService = inject(OptionsService);\n private _paginationService: PaginationService = inject(PaginationService);\n private _consts: CoreConstantsService = inject(CoreConstantsService);\n\n private _productsSubject: BehaviorSubject<Product[]> = new BehaviorSubject<Product[]>([])\n public products$: Observable<Product[]> = this._productsSubject.asObservable();\n private _filtersService: FiltersService = inject(FiltersService)\n\n private searchValue = signal<string>('');\n\n constructor() {\n this._paginationService.reset$.subscribe(res => {\n this._productsSubject.next([])\n })\n this._paginationService.paginationData$.subscribe(\n products => {\n const productsWithUniqueVariant = this._consts.getProductWithUniqueVariant();\n if (productsWithUniqueVariant)\n products = this.getProductsWithUniqueVariant(products, this.getObjectWithVariant())\n const currentProducts = this._productsSubject.value;\n this._productsSubject.next([...currentProducts, ...products]);\n }\n )\n }\n\n //API URL\n private _shopApiUrl = this._apiConsts.SHOP_API_URL;\n productByCodeApi(code: string, variant: boolean) { return this._shopApiUrl + this._apiConsts.CHANNEL + '/products/by-code/' + (variant ? 'variant/' : '') + code + '?locale=' + this._apiConsts.LOCALE; }\n\n /**\n * Setea los filtros para obtener los productos.\n * @param paginationSettings \n * @param searchValue \n */\n getProductsForFilter(paginationSettings?: PaginationSettings, searchValue?: any): any {\n searchValue ? this.searchValue.set(searchValue) : this.searchValue.set('');\n paginationSettings && this._filtersService.setFilters(paginationSettings)\n }\n /**\n * Actualiza los productos con los de la siguiente pagina.\n */\n updateProducts() {\n if (!this._paginationService.getWaiting()) {\n this._paginationService.getNext()\n }\n }\n /**\n * Devuelve el producto por codigo.\n * @param code Codigo del producto\n * @param variant Para indicar si es variante o no.\n * @returns \n */\n getProductByCode(code: string, variant: boolean): Observable<Product> {\n return this._connection.get(this.productByCodeApi(code, variant));\n }\n\n /**\n * Recibe una lista de productos y retorna los mismos productos tantas veces como variantes tenga.\n * cada producto retornado tendrá una única variante.\n * @param products Array. Lista de productos.\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 los productos desdoblados por la opción 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 getProductsWithUniqueVariant = (products: Product[], withOption: ParamsProductsWithUniqueVariant = { type: 'color', code: 'color', defaultFirstOption: false, checkIfStock: true }) => {\n\n !withOption['code'] && withOption['type'] && (withOption['code'] = withOption['type']) || !withOption['code'] && (withOption['code'] = 'color')\n !withOption['type'] && withOption['code'] && (withOption['type'] = withOption['code']) || !withOption['type'] && (withOption['type'] = 'color')\n !withOption.hasOwnProperty('defaultFirstOption') && (withOption['defaultFirstOption'] = false)\n !withOption.hasOwnProperty('checkIfStock') && (withOption['checkIfStock'] = true)\n\n let productsUniqueVariant: any[] = [];\n products.forEach((product: any) => {\n let variants = [...product?.variants];\n let option = product.options.find((opt: any) => opt.type.toLowerCase() === withOption.type?.toLowerCase());\n if (option) {\n option.values.forEach((optionValue: any) => {\n let modified_product = JSON.parse(JSON.stringify(product));\n modified_product.options.find((option: any) => option.type.toLowerCase() == withOption.type?.toLowerCase()).values = [{ code: optionValue.code, name: optionValue.name }];\n //busco una variante con ese code para asignarle la lista de imagenes\n let variantAux = variants.find(\n variant => ((withOption.checkIfStock && variant.stock > 0) || withOption.checkIfStock == false)\n && variant.options.length\n && variant.options.some((op: any) => (op.hasOwnProperty(withOption.code?.toLowerCase()) || op.hasOwnProperty(withOption.code?.toUpperCase()))\n && (op[`${withOption.code?.toLowerCase()}`] || op[`${withOption.code?.toUpperCase()}`]) === optionValue.code)\n\n );\n //console.log(\"---\",variantAux);\n variantAux && productsUniqueVariant.push(this.productWithVariantValues(modified_product, variantAux, optionValue));\n })\n } else {\n /**\n * se modifica el caso para cuando se toma el primer `option` del producto para\n * armar la lista de productos con variantes.\n */\n if (withOption.defaultFirstOption && product.options?.length) {\n let firstOptions = product.options[0]\n product.options[0].values.forEach((optionValue: any) => {\n\n let modified_product = JSON.parse(JSON.stringify(product));\n modified_product.options.find((option: Options) => option.type == firstOptions.type).values = [{ code: optionValue.code, name: optionValue.name }];\n\n let variantAux = variants.find(variant => {\n return variant.options.find((elem: any) => elem[firstOptions.code] == optionValue.code)\n })\n\n if (variantAux && variantAux.images.length == 0) {\n variantAux.images = product.picturesdefault\n }\n\n if (withOption.checkIfStock) {\n (variantAux && variantAux.stock > 0) ? productsUniqueVariant.push(this.productWithVariantValues(modified_product, variantAux, optionValue)) : null;\n } else {\n variantAux && productsUniqueVariant.push(this.productWithVariantValues(modified_product, variantAux, optionValue))\n }\n\n })\n } else {\n productsUniqueVariant.push(product)\n }\n\n }\n })\n return productsUniqueVariant.length > 0 ? productsUniqueVariant : products;\n }\n\n productWithVariantValues = (product: Product, variant: any, optionValue: any) => {\n product.picturesdefault = [...variant.images]\n product.variant_id = variant.code; //lo dejo aca hasta asegurarnos de que no se estaba usando en otra parte.\n product.stock = variant.stock || 0; //lo dejo aca hasta asegurarnos de que no se estaba usando en otra parte.\n product.price = variant.price.toString() || '0';\n product.currentOption = {\n ...optionValue,\n productCode: product.id,\n variantCode: variant.code,\n stock: variant.stock || 0,\n finalPrice: variant.saleprice || variant.price || 0,\n }\n return product\n }\n\n private getObjectWithVariant = (): ParamsProductsWithUniqueVariant => {\n return this._consts.getParamsProductsWithUniqueVariant()\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CookieService } from 'ngx-cookie-service';\nimport { Storage } from '../interfaces';\nimport { StorageMap, LocalStorage } from '@ngx-pwa/local-storage';\nimport { map, Observable } from 'rxjs';\n/**\n * Adapter usado para storagear los datos.\n * @class NgxLocalStorageService\n * @implements {Storage}\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class NgxLocalStorageService implements Storage {\n\t/**\n\t * Servicio usado para guardar los datos en el localstorage.\n\t */\n\tprivate _storage: LocalStorage = inject(LocalStorage);\n\n\tconstructor() { }\n\n\tprivate getItemPromise(key: any): Promise<string | null> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis._storage.getItem(key).subscribe({\n\t\t\t\tnext: (data: any) => resolve(data),\n\t\t\t\terror: (err) => reject(err),\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Obtiene el item del Storage\n\t * @param key Clave para acceder al valor\n\t * @returns \n\t */\n\tgetItem(key: string): Observable<any> {\n\t\treturn this._storage.getItem(key);\n\t}\n\t/**\n\t * Guarda un dato en el storage.\n\t * @param key Clave que se asocia al valor\n\t * @param value Valor a guardar\n\t * @param metadata Opciones extra que puede necesitar el servicio.\n\t */\n\tsetItem(key: string, value: any, metadata: any = { path: '/' }) {\n\t\tthis._storage.setItem(key, value).subscribe(() => { });\n\t}\n\t/**\n\t * Remueve el item del storage.\n\t * @param key Clave del item del storage a eliminar.\n\t * @param metadata Opciones extra que puede necesitar el servicio.\n\t */\n\tremoveItem(key: string, metadata?: any): void {\n\t\tthis._storage.removeItem(key).subscribe(() => { });\n\t}\n\t/**\n\t * Limpia el Storage.\n\t */\n\tclear(): void {\n\t\tthis._storage.clear().subscribe(() => { });\n\t}\n\tkey(index: number): string | null {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BalanceCustomer, CartItem, ICoupon, Product } from '../interfaces';\nimport { AuthService } from './auth.service';\nimport { ToastService } from './toast.service';\nimport { ConnectionService } from '../api';\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\nimport { BehaviorSubject, combineLatest, firstValueFrom, map, Observable } from 'rxjs';\nimport { AnalyticsService } from './analytics';\nimport { LocalStorageService } from './local-storage.service';\nimport { ChannelService } from './channel.service';\nimport { NgxLocalStorageService } from './ngx-local-storage.service';\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class CartService {\n\tprivate _authService: AuthService = inject(AuthService);\n\tprivate _toastService: ToastService = inject(ToastService);\n\tprivate _connection: ConnectionService = inject(ConnectionService);\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\n\tprivate _localStorage: LocalStorageService = inject(LocalStorageService);\n\tprivate _channelService: ChannelService = inject(ChannelService);\n\tprivate _consts: CoreConstantsService = inject(CoreConstantsService);\n\tprivate _storage: NgxLocalStorageService = inject(NgxLocalStorageService);\n\n\tprivate _cartSubject: BehaviorSubject<any> = new BehaviorSubject(null);\n\tprivate _promotionsSubject: BehaviorSubject<any> = new BehaviorSubject([]);\n\tprivate _couponSubject: BehaviorSubject<any> = new BehaviorSubject(null);\n\tprivate _cartItemsSubject: BehaviorSubject<CartItem[]> = new BehaviorSubject<CartItem[]>([])\n\tprivate _requestInProcess: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\tprivate _balanceCustomerSubject: BehaviorSubject<BalanceCustomer> = new BehaviorSubject<BalanceCustomer>({\n allowAnyPaymentMethod: false,\n allowExceedBalance: false,\n creditAmount: 0,\n showMax: false,\n showPrice: false,\n remainingCredits: 0,\n });\n\n\tprivate readonly CART_KEY: string = 'cart';\n\tprivate readonly CART_TOKEN_KEY: string = 'cart_token';\n\n\tprivate _items: any[] = [];\n\tprivate _count: number = 0;\n\tpublic cartToken: string | null = '';\n\tpublic channelConfig: any = {};\n\tprivate _locale = \"\";\n\tpublic cartItems$ = this._cartItemsSubject.asObservable().pipe(map(items => this.switchPriceInCartItem(items)))\n\tpublic coupon$: Observable<any> = this._couponSubject.asObservable();\n\tpublic cart$: Observable<any> = this._cartSubject.asObservable();\n\tpublic loading$: Observable<boolean> = this._requestInProcess.asObservable();\n\tprivate _haveToUpdate = true;\n\n\t//API URL\n\tprivate _cartBaseUrl: string = `${this._apiConsts.SHOP_API_URL}${this._apiConsts.CHANNEL}/carts`;\n\n\tpublic updateItemQuantityApi(item_id: any) { return this._cartBaseUrl + '/' + this.cartToken + '/items/' + item_id + '?locale=' + this._apiConsts.LOCALE; }\n\tpublic addItemApi(): string { return this._cartBaseUrl + '/' + this.cartToken + '/items?locale=' + this._apiConsts.LOCALE }\n\tpublic cartItemsApi(): string { return this._cartBaseUrl + '?locale=' + this._apiConsts.LOCALE }\n\tpublic deleteItemApi(item_id: string) { return this._cartBaseUrl + '/' + this.cartToken + '/items/' + item_id + '?locale=' + this._apiConsts.LOCALE; }\n\tpublic couponApi() { return this._cartBaseUrl + '/' + this.cartToken + '/coupon' };\n\n\tconstructor() {\n\t\tthis._requestInProcess.next(true);\n\t\tthis.cartToken = this._localStorage.getItem(this.CART_TOKEN_KEY) || null;\n\t\tthis.initializeDataCart();\n\t\tthis._channelService.channel$.subscribe(res => this.channelConfig = res)\n\t}\n\t/**\n\t * Inicializa el carrito con los datos del local storage en caso de que existan o no.\n\t */\n\tprivate initializeDataCart() {\n\t\tcombineLatest([this._authService.loggedIn$, this._storage.getItem(this.CART_KEY)]).subscribe({\n\t\t\tnext: ([loggedIn, token]) => {\n\t\t\t\t//console.log(loggedIn, token);\n\t\t\t\tthis._items = token || [];\n\t\t\t\tthis.getCart()\n\t\t\t}\n\t\t})\n\t}\n\t/**\n\t * Obtiene el carrito desde el backend y lo inicializa. \n\t * Si existe el cartToken y hay items en el carrito, envía el token como parámetro.\n\t */\n\tprivate getCart() {\n\t\t//console.warn(this._items, this._items.length, this.cartToken)\n\t\tfirstValueFrom(\n\t\t\tthis._connection.post(this.cartItemsApi(), ((this.cartToken && this._items.length >= 1) && { token: this.cartToken }))\n\t\t).then((res: any) => {\n\t\t\t//console.log(res)\t\n\t\t\tthis.initializeCart(res)\n\t\t})\n\t}\n\t/**\n\t * Configura el carrito con los parametros iniciales.\n\t * @param response \n\t * @returns \n\t */\n\tinitializeCart(response: any): any {\n\t\tthis.cartToken = response.tokenValue;\n\t\tthis._localStorage.setItem(this.CART_TOKEN_KEY, this.cartToken);\n\t\tthis._locale = response.locale;\n\n\t\tthis.updateCartObj(response, false);\n\t\tthis.updateCartItems(this.transformItems(response.items));\n\t\tthis._requestInProcess.next(false);\n\t\treturn true;\n\t}\n\t/**\n\t * Actualiza los items del carrito.\n\t * @param items \n\t */\n\tupdateCartItems(items: any[]) {\n\t\tthis._items = items;\n\t\tthis._count = items.length;\n\t\tthis._cartItemsSubject.next(this._items);\n\t\tthis.updateLocalCart();\n\t\tthis._requestInProcess.next(false);\n\t}\n\t/**\n\t * Agrega un producto al carrito con la cantidad deseada. \n\t * @param product Producto a agregar\n\t * @param quantity Cantidad \n\t * @param variantId Id de la variante\n\t * @returns \n\t */\n\taddToCart(product: Product, quantity: number, variantId: string) {\n\t\t//console.log(product);\n\t\tif (!this._authService.isAbleToBuy()) {\n\t\t\tthis._toastService.show('must-select-customer')\n\t\t\treturn\n\t\t}\n\t\tthis._requestInProcess.next(true);\n\t\tlet added = this.addIfAllreadyExists(product, variantId, quantity);\n\n\t\tif (!added) {\n\t\t\tfirstValueFrom(\n\t\t\t\tthis._connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variantId }))\n\t\t\t\t.then(\n\t\t\t\t\tres => {\n\t\t\t\t\t\t// Manejar la respuesta HTTP exitosa (código 200)\n\t\t\t\t\t\tthis.appendToCart(res);\n\t\t\t\t\t\tthis._toastService.show('product-added');\n\t\t\t\t\t},\n\t\t\t\t\terr => {\n\t\t\t\t\t\t// Manejar el error de la llamada HTTP (código 500 u otro error)\n\t\t\t\t\t\tif (err.status === 500) {\n\t\t\t\t\t\t\t// Código de error 500 (timeout)\n\t\t\t\t\t\t\tthis.handleError(err);\n\t\t\t\t\t\t\tthis._toastService.show('cart-error');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Otro código de error\n\t\t\t\t\t\t\tthis.handleError(err);\n\t\t\t\t\t\t\tthis._toastService.show('error-server');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t}\n\t}\n\t/**\n\t * Actualiza el carrito agregando los nuevos items.\n\t * @param cart \n\t */\n\tappendToCart(cart: any) {\n\t\tthis.updateCartObj(cart);\n\t\tthis._items = this.transformItems(cart.items);\n\t\tthis._count = this._items.length;\n\t\tthis._requestInProcess.next(false);\n\t\tthis.updateLocalCart();\n\t\tthis._cartItemsSubject.next(this._items);\n\t}\n\t/**\n\t * Mapea los items del carrito para darle un mejor formato similar a la interfaz `CartItem`.\n\t * @param items \n\t * @returns \n\t */\n\ttransformItems(items: any): any[] {\n\t\treturn items.map((item: any) => {\n\t\t\treturn {\n\t\t\t\tproduct: item.product,\n\t\t\t\tvariant_id: item.product.variants[0].code,\n\t\t\t\tlot: item.orderItemLot,\n\t\t\t\tquantity: item.quantity,\n\t\t\t\titem_id: item.id,\n\t\t\t\ttotal: item.total\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t * Chequea si el producto ya existe en el carrito de compras.\n\t * @param product \n\t * @param variantId \n\t * @param quantityAdd Cantidad a agregar. Por defecto es 1.\n\t */\n\taddIfAllreadyExists(product: Product, variantId: string, quantityAdd: number = 1) {\n\t\treturn this._items.find((item: any, index) => {\n\t\t\tif (item.product.id == product.id && item.variant_id == variantId) {\n\t\t\t\tthis.updateItemQuantity(item, this.findItem(product.id).quantity + quantityAdd);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t})\n\t}\n\t/**\n\t * Obtiene la cantidad de un producto del item del carrito \n\t * @param codeVariant codigo de la variante.\n\t * @returns la cantidad o `0` en su defecto.\n\t */\n\tgetCountFromItemInCart(codeVariant: any): number {\n\t\treturn this._items.find(item => item.variant_id == codeVariant)?.quantity || 0;\n\t}\n\t/**\n\t * Obtiene un observable con la cantidad de items en el carrito.\n\t */\n\tgetCountCartItems(): Observable<number> {\n\t\treturn this.cartItems$.pipe(map((cartItems) => cartItems?.length));\n\t}\n\t/**\n\t * Mapea los productos en el carrito para cambiar el precio obteniendo de la variante y seleccionando si es\n\t * precio de oferta o el precio normal.\n\t * @param items \n\t * @returns \n\t */\n\tprivate switchPriceInCartItem = (items: any[]) => {\n\t\treturn items.map(\n\t\t\titem => {\n\t\t\t\tif (item.product) {\n\t\t\t\t\titem.product.price = item.product.variants[0].saleprice ? item.product.variants[0].saleprice : item.product.variants[0].price;\n\t\t\t\t}\n\t\t\t\treturn item\n\t\t\t}\n\t\t)\n\t}\n\t/**\n\t * Actualiza la cantidad de un producto existente en el carrito.\n\t * @param item el item a actualizar.\n\t * @param quantity la cantidad nueva.\n\t */\n\tupdateItemQuantity(item: CartItem, quantity: number) {\n\t\tif (this.validateQuantity(item, quantity)) {\n\t\t\tfirstValueFrom(\n\t\t\t\tthis._connection.put(this.updateItemQuantityApi(this.findItemByIdVariant(item.variant_id)), { 'quantity': Number(quantity) })).then(\n\t\t\t\t\tres => this.updateCartObj(res) && this.updateCartItemQuantity(item.variant_id, Number(quantity)),\n\t\t\t\t\terr => this.handleError(err)\n\t\t\t\t)\n\t\t}\n\t}\n\t/**\n\t * Maneja el error en caso de que no se pueda agregar al carrito el producto.\n\t * @param err \n\t */\n\thandleError(err: any): void {\n\t\tthis._toastService.show('operation-error-param');\n\t\tthis._requestInProcess.next(false);\n\t}\n\t/**\n\t * Actualiza la cantidad del item del producto del carrito.\n\t * @param variantId ID de la variante para buscar el item.\n\t * @param quantity Nueva cantidad. \n\t */\n\tupdateCartItemQuantity(variantId: any, quantity: number): void {\n\t\t//console.log(\"updateCartItemQuantity\", this._items, variantId)\n\t\tlet newQuantity = this._items.find(item => item.variant_id == variantId).quantity = quantity;\n\t\tthis._cartItemsSubject.next(this._items);\n\t\tthis._requestInProcess.next(false);\n\t\tthis.updateLocalCart();\n\t\tthis._toastService.show('product-updated', { quantity: newQuantity });\n\t}\n\t/**\n\t * Actualiza los datos del carrito en el localStorage. \n\t */\n\tupdateLocalCart() {\n\t\tthis._storage.setItem(this.CART_KEY, this._items)\n\t}\n\t/**\n\t * Actualiza el carrito. Emite evento de analitics. \n\t * Actualiza todo lo relacionado al cupón.\n\t * @param cart Respuesta producida por el enpoint con información del carrito.\n\t * @param emitEvent \n\t * @returns \n\t */\n\tupdateCartObj(cart: any, emitEvent = true): boolean {\n\t\tthis._cartSubject.next(cart);\n\t\temitEvent && this._analyticsService.callEvent('add_to_cart', cart);\n\t\t//this._promotionsSubject.next(this.orderUtils.getPromotions(cart, true));\n\n\t\tcart.couponCode\n\t\t\t? this.formatCoupon(cart)\n\t\t\t: this._couponSubject.next(null);\n\t\treturn true;\n\t}\n\t/**\n\t * Aplicar un mejor formato a los datos de los cupones aplicados.\n\t * @param cart \n\t */\n\tformatCoupon(cart: any) {\n\t\tlet current_coupon = this._couponSubject.value;\n\t\tlet coupon: ICoupon = { code: cart.couponCode };\n\t\ttry {\n\t\t\tconst key = Object.keys(cart.cartDiscounts)[0];\n\t\t\tcoupon = {\n\t\t\t\t...coupon,\n\t\t\t\tamount: (cart.cartDiscounts && cart.cartDiscounts[key].amount.current) || 0,\n\t\t\t\tname: (cart.cartDiscounts && cart.cartDiscounts[key].name) || 'no-name'\n\t\t\t};\n\t\t} catch (e) { }\n\t\t(coupon != current_coupon) && this._couponSubject.next(coupon);\n\t\t//console.log(coupon);\n\t}\n\t/**\n\t * Retorna el ID del item del carrito.\n\t * @param variant_id Id de la variante utilizada para buscar el item.\n\t * @returns \n\t */\n\tfindItemByIdVariant(variant_id: any): any {\n\t\treturn this._items.find(item => item.variant_id == variant_id)!.item_id\n\t}\n\t/**\n\t * Valida la cantidad para saber si se puede actualizar o no.\n\t * @param item item del carrito\n\t * @param quantity cantidad a agregar\n\t * @returns \n\t */\n\tvalidateQuantity(item: any, quantity: any) {\n\t\tif ((this.getCountFromItemInCart(item.productCode) + quantity) > item.product.variants[0].maximumItemsQuantity) {\n\t\t\tthis._toastService.show('maximum-items-quantity', { quantity: item.product.variants[0].maximumItemsQuantity })\n\t\t\treturn false\n\t\t}\n\t\tif ((this.getCountFromItemInCart(item.productCode) + quantity) < item.product.variants[0].minimumItemsQuantity) {\n\t\t\tthis._toastService.show('minimum-items-quantity', { quantity: item.product.variants[0].minimumItemsQuantity })\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t}\n\t/**\n\t * Busca un producto a través de su ID en los items del carrito.\n\t * @param product_id \n\t * @returns\n\t */\n\tfindItem(product_id: any): any { return this._items.find((item: any) => item.product.id == product_id) }\n\t/**\n\t * Elimina un item del carrito en el backend.\n\t * @param item item a eliminar\n\t * @param toast indica si se dispara un toast o no. Por defecto en `true`.\n\t */\n\tdeleteCartItem(item: any, toast: boolean = true) {\n\t\tlet idItemSearched = this.findItemByIdVariant(item.variant_id)\n\t\t//console.log(idItemSearched)\n\t\tthis._requestInProcess.next(true);\n\t\tfirstValueFrom(this._connection.delete(this.deleteItemApi(idItemSearched))).then(\n\t\t\tres => {\n\t\t\t\tthis.removeCartItem(res, item, toast);\n\t\t\t\tthis._requestInProcess.next(false);\n\t\t\t},\n\t\t\terr => {\n\t\t\t\tthis.handleError(err);\n\t\t\t\tthis._requestInProcess.next(false);\n\t\t\t}\n\t\t)\n\t}\n\t/**\n\t * Elimina un item en carrito de forma local. \n\t * @param cart Carrito, es decir, respuesta del backend.\n\t * @param product producto a eliminar\n\t * @param toast {boolean} para indicar si se dispara un toast o no. \n\t */\n\tremoveCartItem(cart: any, product: any, toast: boolean) {\n\t\tthis.updateCartObj(cart, false);\n\t\tthis._items.splice(this._items.findIndex(value => value.item_id === product.item_id), 1);\n\t\tthis._cartItemsSubject.next(this._items);\n\t\ttoast && this._requestInProcess.next(false);\n\t\ttoast && this._toastService.show('product-removed');\n\t\tthis.updateLocalCart();\n\t\tthis._analyticsService.callEvent('remove_from_cart', { ...product, currency: this._consts.currency.code })\n\t}\n\t/**\n\t * Agrega un cupon al carrito.\n\t * @param value Codigo del cupón.\n\t */\n\taddCoupon(value: string) {\n\t\tfirstValueFrom(this._connection.put(this.couponApi(), { coupon: value })).then(\n\t\t\tres => {\n\t\t\t\t//console.log(res)\n\t\t\t\tthis.updateCartObj(res)\n\t\t\t\tthis._toastService.show('Cupon aplicado')\n\t\t\t},\n\t\t\terr => {\n\t\t\t\t//console.error(err) \n\t\t\t\tthis._toastService.show('invalid-coupon')\n\t\t\t}\n\t\t)\n\t}\n\t/**\n\t * Elimina un cupón del carrito. \n\t */\n\tremoveCoupon() {\n\t\tfirstValueFrom(this._connection.delete(this.couponApi())).then(\n\t\t\tres => {\n\t\t\t\t//console.log(res)\n\t\t\t\tthis.updateCartObj(res)\n\t\t\t}\n\t\t)\n\t}\n\t/**\n\t * Retorna un observable con el subtotal del carrito.\n\t * @returns \n\t */\n\tgetSubTotalAmount(): Observable<number> {\n\t\treturn this.cart$.pipe(map((cart) => cart?.totals?.items));\n\t}\n\t/**\n\t * Retorna un observable con el total del monto de las promociones aplicadas.\n\t * @returns \n\t */\n\tgetTotalPromotionAmount(): Observable<number> {\n\t\treturn this.cart$.pipe(map((cart) => cart?.totals?.promotion));\n\t}\n\t/**\n\t * Retorna un observable con el monto de los impuestos aplicados.\n\t * @returns \n\t */\n\tgetTaxesAmount(): Observable<number> {\n\t\treturn this.cart$.pipe(map((cart) => cart?.totals?.taxes > 0 ? cart?.totals?.taxes : 0));\n\t}\n\t/**\n\t * Retorna un observable con el monto total del carrito.\n\t * @returns \n\t */\n\tgetTotalAmount() {\n\t\treturn this.cart$.pipe(map((cart) => cart?.totals?.total));\n\t}\n\t/**\n\t * Retorna el token del carrito.\n\t * @returns \n\t */\n\tgetCartToken() {\n\t\treturn this.cartToken;\n\t}\n\tchangeHaveToUpdate = (value: any) => this._haveToUpdate = value;\n\tclearAndResetCustomerCart() {\n\t\tconsole.log(\"Clearing and reseting...\")\n\t\tthis.resetCart(this.getCartByCustomer)\n\t}\n\n\tprivate getCartByCustomer = async () =>\n\t\tthis._connection.post(this.cartItemsApi()).subscribe(\n\t\t\tres => this.initializeCart(res)\n\t\t)\n\tprivate resetCart = (fn?: any) => {\n\t\tthis._items = [];\n\t\tthis._cartSubject.next(null);\n\t\tthis.updateBalanceAttributes(null);\n\t\tthis.cartToken = null;\n\t\tthis._cartItemsSubject.next([]);\n\t\tthis._count = 0;\n\t\tthis._localStorage.setItem(this.CART_KEY, \"[]\");\n\t\tthis._localStorage.removeItem(this.CART_TOKEN_KEY);\n\t\tfn && fn();\n\t}\n\tclearAndResetCart() {\n this.resetCart(() => this.getCart);\n }\n\n\tpublic updateBalanceAttributes(cartData: any) {\n const balanceData = {\n allowAnyPaymentMethod: cartData?.allowAnyPaymentMethod ?? false,\n allowExceedBalance: cartData?.allowExceedBalance ?? false,\n creditAmount: cartData?.creditAmount ?? null,\n showMax: cartData?.showMax ?? false,\n showPrice: cartData?.showPrice ?? false,\n remainingCredits: cartData?.creditAmount && cartData?.creditAmount >= cartData?.totals.total\n ? cartData?.creditAmount - cartData?.totals.total\n : 0,\n };\n\n this._balanceCustomerSubject.next(balanceData);\n\t\tconsole.log(balanceData)\n }\n\taddToLot(product: Product, quantity: number, variant_id: any, id?: number, order_item_id?: any, lot_quantity?: any, unit_price?: any, unit_total?: any, ajustement_total?: any, total_lot?: number, lot_status?: string, date_request?: string, notes?: string, shipping_address_id?: number, shipping_address_name?: string, action?: string){\n if (!this._authService.isAbleToBuy()) {\n this._toastService.show('must-select-customer')\n return\n }\n\n let added = '';\n !added && this._connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variant_id, id: id || '', order_item_id: order_item_id || '', lot_quantity: lot_quantity || '', unit_price: unit_price || '', unit_total: unit_total || '', ajustement_total: ajustement_total || '', total_lot: total_lot || '', lot_status: lot_status || '', date_request: date_request || '', notes: notes || '', shipping_address_id: shipping_address_id || '', shipping_address_name: shipping_address_name || '', action: action || 'newlot' })\n .subscribe({\n\t\t\t\tnext: (res) => this.appendToCart(res),\n\t\t\t\terror: (err) => this.handleError(err)\n\t\t\t});\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ProductsService } from './products.service';\nimport { BehaviorSubject, firstValueFrom } from 'rxjs';\nimport { Options, OptionValue, Product } from '../interfaces';\nimport { ToastService } from './toast.service';\nimport { CartService } from './cart.service';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ProductDetailService {\n\tprivate _productsService: ProductsService = inject(ProductsService);\n\tprivate _toastService: ToastService = inject(ToastService);\n\tprivate _cartService: CartService = inject(CartService);\n\n\tprivate _productSubject = new BehaviorSubject<Product | null>({});\n\tprivate _optionsSubject = new BehaviorSubject<any>({});\n\tprivate _associatedDataSubject = new BehaviorSubject<any>({ price: '', stock: 0, picture: '' });\n\n\tpublic product$ = this._productSubject.asObservable();\n\tpublic options$ = this._optionsSubject.asObservable();\n\tpublic associatedData$ = this._associatedDataSubject.asObservable();\n\n\tprivate variants: any[] = []\n\n\tconstructor() { }\n\t/**\n\t * Obtengo el producto a traves de su codigo e inicializo la configuración\n\t * del Servicio.\n\t * @param code \n\t * @param variant \n\t */\n\tloadProduct(code: string, variant: boolean = false) {\n\t\tfirstValueFrom(this._productsService.getProductByCode(code, variant))\n\t\t\t.then(res => {\n\t\t\t\tvariant ? this.initialize(res, code) : this.initialize(res)\n\t\t\t})\n\t\t\t.catch(err => { console.log(err); this._productSubject.next(null) });\n\t}\n\t/**\n\t * Carga el producto en el observable y la configuración de las variantes.\n\t * @param product \n\t * @param variantCode \n\t */\n\tprivate initialize(product: Product, variantCode?: string) {\n\t\tthis._productSubject.next(product);\n\t\tconst aux: Product['options'] = product.options || [];\n\t\tconst options = aux?.map(option => this.toOption(option))\n\t\tthis._optionsSubject.next(options);\n\t\tvariantCode ? this.updateVariants(variantCode) : this.updateVariants();\n\t\tthis.variants.length && this.generateAssociatedDataFromVariants();\n\t}\n\t/**\n\t * Formate los datos para las opciones del producto.\n\t * @param option \n\t * @returns \n\t */\n\tprivate toOption(option: Options) {\n\t\treturn {\n\t\t\tname: option.label,\n\t\t\tcode: option.code,\n\t\t\ttype: option.type,\n\t\t\tvalues: option.values.map((value: any) => ({ name: value.code, description: value.name, image: value.image, mobileImage: value.mobileImage, selected: false }))\n\t\t}\n\t}\n\n\t/**\n\t * Cambia las opciones, obtiene el producto asociado a la opcion elegida.\n\t */\n\tsetOption(optionCode: any, optionValue: any) {\n\t\tconst options = this._optionsSubject.value;\n\t\tconst option = options.find((element: any) => element.code == optionCode).values.find((value: any) => value.name == optionValue);\n\t\toption.selected = !option.selected;\n\t\toptions.find((element: any) => element.code == optionCode).values.forEach(\n\t\t\t(value: any) => { if (value.name != option.name) value.selected = false }\n\t\t);\n\t\tthis._optionsSubject.next(options);\n\t\tthis.updateVariants();\n\t\tthis.variants.length > 0 ? this.generateAssociatedDataFromVariants() : this._toastService.show('selection-not-available')\n\t}\n\t/**\n\t * Actualiza el observable de `associatedData` el cual se utiliza para mostrar los datos\n\t * en el frontend segun el producto y/o variante elegida.\n\t * Obtiene los datos de la variante y los formatea.\n\t */\n\tgenerateAssociatedDataFromVariants() {\n\t\tlet associated: any = {};\n\t\tif (this.variants.length == 1) {\n\t\t\tconst variant = this.variants[0];\n\t\t\tconsole.log(variant)\n\t\t\tassociated.stock = variant.stock\n\t\t\tassociated.price = variant.price.toString();\n\t\t\tassociated.saleprice = variant.saleprice && variant.saleprice.toString() || undefined;\n\t\t\tassociated.discount = variant?.discount || undefined;\n\t\t\tassociated.properties = variant.properties ? this.beautifyProperties(variant.properties) : undefined;\n\t\t\tassociated.uniqueExternalCode = variant?.uniqueExternalCode || undefined;\n\t\t\tassociated.multipleQuantity = variant?.multipleQuantity || undefined;\n\t\t} else {\n\t\t\tassociated.price = this.createPrice()\n\t\t\tassociated.saleprice = this.createSalePrice()\n\t\t\tassociated.stock = (this.variants.map(variant => variant.stock)).reduce((a, b) => a + b)\n\t\t\tassociated.discount = this.createDiscount()\n\t\t}\n\n\t\t('images' in this.variants[0] && this.variants[0].images.length > 0)\n\t\t\t? associated.picture = this.variants[0].images[0]\n\t\t\t: associated.picture = (this._associatedDataSubject.value?.picture || (this._productSubject.value && this._productSubject.value?.picturesdefault?.[0] || []));\n\n\t\tassociated.maximumAmount = this.variants[0]?.maximumAmount || 0\n\t\tassociated.minimumAmount = this.variants[0]?.minimumAmount || 0\n\n\t\tassociated.maximumItemsQuantity = this.variants[0]?.stock > 0 && 'maximumItemsQuantity' in this.variants[0] ? this.variants[0]?.maximumItemsQuantity : this.variants[0]?.stock\n\t\tassociated.minimumItemsQuantity = this.variants[0]?.stock > 0 && 'minimumItemsQuantity' in this.variants[0]\n\t\t\t&& this.variants[0]?.minimumItemsQuantity > 0 ? this.variants[0]?.minimumItemsQuantity\n\t\t\t: (this.variants[0]?.multipleQuantity ? this.variants[0]?.multipleQuantity : 1)\n\n\t\tassociated.finalConsumer = {\n\t\t\tfinalConsumerPrice: this.variants[0]?.final_consumer_price,\n\t\t\toriginalFinalConsumerPrice: this.variants[0]?.original_final_consumer_price,\n\t\t}\n\t\tassociated.taxes = {\n\t\t\ttaxIncluded: this.variants[0]?.taxIncluded,\n\t\t\ttaxCategory: this.variants[0]?.taxCategory,\n\t\t}\n\t\t//console.log(associated)\n\t\tthis._associatedDataSubject.next(associated);\n\t}\n\t/**\n\t * Mejora los datos de las `properties`.\n\t * @param properties \n\t * @returns \n\t */\n\tbeautifyProperties(properties: any): any {\n\t\tlet beautifyData: any = [];\n\t\tproperties.forEach((prop: any) => {\n\t\t\tfor (let key in prop) {\n\t\t\t\tbeautifyData.push({ name: key, value: prop[key] })\n\t\t\t}\n\t\t})\n\t\treturn beautifyData\n\t}\n\t/**\n\t * Devuelve un descuento en caso de existir.\n\t * @returns \n\t */\n\tcreateDiscount(): any {\n\t\tlet allDiscounts: string = '';\n\t\tthis.variants.forEach(variant => {\n\t\t\tvariant.discount && (allDiscounts += ', ' + variant.discount);\n\t\t})\n\t\tif (allDiscounts == '') return undefined;\n\t\treturn allDiscounts;\n\t}\n\t/**\n\t * Devuelve el precio de venta.\n\t * @returns \n\t */\n\tcreateSalePrice(): any {\n\t\tlet minPrice: number = 0;\n\t\tlet maxPrice: number = 0;\n\t\tlet allPrices: any = this.variants.map(v => v.saleprice).filter(e => e !== undefined);\n\t\tif (allPrices.length == 0) {\n\t\t\treturn undefined\n\t\t}\n\t\tminPrice = allPrices.reduce((a: number, b: number) => Math.min(a, b));\n\t\tmaxPrice = allPrices.reduce((a: number, b: number) => Math.max(a, b));\n\t\treturn minPrice == maxPrice ? maxPrice.toString() : minPrice + ' - ' + maxPrice;\n\t}\n\t/**\n\t * Devuelve el precio o los precios en caso de tener varias variantes con distintos precios.\n\t * @returns \n\t */\n\tcreatePrice(): any {\n\t\tlet minPrice: number = 0;\n\t\tlet maxPrice: number = 0;\n\t\tlet allPrice: any = this.variants.map(v => v.price)\n\t\tminPrice = allPrice.reduce((a: number, b: number) => Math.min(a, b));\n\t\tmaxPrice = allPrice.reduce((a: number, b: number) => Math.max(a, b));\n\t\treturn minPrice == maxPrice ? maxPrice.toString() : minPrice + ' - ' + maxPrice;\n\t}\n\t/**\n\t * Actualiza las variantes.\n\t * @param code \n\t */\n\tupdateVariants = (code?: string) => {\n\t\tlet variants = this._productSubject.value?.variants\n\t\t//console.log(variants)\n\t\tif (!code) {\n\t\t\tthis._optionsSubject.value.forEach((option: any) => {\n\t\t\t\toption.values.forEach((value: any) => {\n\t\t\t\t\tif (value.selected) {\n\t\t\t\t\t\tvariants = variants?.filter(variant => {\n\t\t\t\t\t\t\treturn variant.options.some((variantOption: any) => {\n\t\t\t\t\t\t\t\treturn (option.code in variantOption && variantOption[option.code] == value.name);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t} else {\n\t\t\tvariants = variants?.filter(variant => variant.code == code);\n\t\t}\n\t\tthis.variants = variants || [];\n\t\tcode && this.updateOptions();\n\t}\n\t/**\n\t * Actualiza las opciones\n\t */\n\tprivate updateOptions = () => {\n\t\tlet { options } = this.variants.length && this.variants[0];\n\t\toptions && options.forEach((option: any) => Object.keys(option).forEach(key => this.setOption(key, option[key])))\n\t}\n\t/**\n\t * Agrega el producto al carrito.\n\t * @param quantity Cantidad del producto a agregar\n\t * @param variantCode Codigo de la variante.\n\t * @returns \n\t */\n\taddToCart(quantity: number, variantCode?: string){\n\n\t\tif(!this.variants.length){\n\t\t\tthis._toastService.show('cant-buy')\n\t\t\treturn;\n\t\t}\n\t\tlet productSelected = JSON.parse(JSON.stringify((this._productSubject.getValue())));\n\n\t\tlet variant:any;\n\n\t\tswitch(this.variants.length){\n\t\t\tcase 0:\n\t\t\t\tthis._toastService.show('no-variants');\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tthis._associatedDataSubject.value.stock == 0\n\t\t\t\t\t? this._toastService.show('out-of-stock')\n\t\t\t\t\t: variant = this.variants[0]\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif(variantCode){\n\t\t\t\t\tvariant = this.variants.find( variant => variant.code === variantCode)\n\t\t\t\t\tif(variant.stock == 0){\n\t\t\t\t\t\tthis._toastService.show('out-of-stock')\n\t\t\t\t\t\tvariant = undefined\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._toastService.show('variants-left')\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\tif(!variant) return;\n\t\tif(!this.validateQuantity(quantity)) return;\n\n\t\t//agregar al servicio del carrito\n\t\tthis._cartService.addToCart(this.makeAffordableProduct(productSelected), quantity, variant.code);\n\t}\n\t/**\n\t * Genera un producto para hacer mas facíl el envio del elemento al backend.\n\t * @param productSelected \n\t * @returns \n\t */\n\tprivate makeAffordableProduct(productSelected: Product) {\n productSelected.price = parseFloat(this._associatedDataSubject.value.price);\n productSelected.saleprice = parseFloat(this._associatedDataSubject.value.price);\n\t\tproductSelected.options = [];\n this.variants[0].options.forEach((option:any) => productSelected.options = { ...productSelected.options, ...option })\n return productSelected;\n }\n\t/**\n\t * Valida la cantidad que se quiere agregar de un producto.\n\t * Revisa que no supere el stock, el maximo de items que se puede agregar\n\t * asi como el minimo.\n\t * @param quantity \n\t * @returns \n\t */\n\tprivate validateQuantity = (quantity: number) => {\n const actualQuantity = this._cartService.getCountFromItemInCart(this.variants[0].code);\n const asociatedData = this._associatedDataSubject.value;\n if ((actualQuantity + quantity) > asociatedData.maximumItemsQuantity) {\n this._toastService.show('maximum-items-quantity', { quantity: asociatedData.maximumItemsQuantity })\n return false;\n }\n if ((actualQuantity + quantity) < asociatedData.minimumItemsQuantity) {\n this._toastService.show('minimum-items-quantity', { quantity: asociatedData.minimumItemsQuantity })\n return false;\n }\n return true\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CheckoutData, CheckoutDataType } from '../interfaces';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class OrderUtilityService {\n\n\tconstructor() { }\n\t/**\n\t * @param cart Objeto carrito o orden, indistintamente, ya que poseen el mismo formato\n\t * @param forCart Si la solicitud de promociones proviene del carrito, suprime el subtotal y el total\n\t * @description Devuelve un listado con todas las promociones que posee el carro/orden\n\t */\n\tgetPromotions = (cart: any, forCart: boolean = false): CheckoutData[] | undefined => {\n\t\tif (cart.checkoutState && cart.checkoutState == \"completed\") return;\n\t\tlet new_state: CheckoutData[] = [];\n\t\tlet subtotal: CheckoutData = { type: 'subtotal', name: 'subtotal', amount: cart.totals.items };\n\t\tlet total: CheckoutData = { type: 'total', name: 'total', amount: cart.totals.total };\n\t\t!forCart && new_state.push(subtotal);\n\t\t\n\t\tfor (let index = 0; index < cart.cartDiscounts.length; index++) {\n\t\t\tcart.cartDiscounts[index].type = this.formatType(cart.cartDiscounts[index].type);\n\t\t\tnew_state.push({\n\t\t\t\ttype: cart.cartDiscounts[index].type,\n\t\t\t\tname: (cart.cartDiscounts[index].type != 'coupon') ? cart.cartDiscounts[index].name : 'coupon',\n\t\t\t\tamount: this.getAmount(cart.cartDiscounts[index], cart)\n\t\t\t});\n\n\t\t}\n\n\t\t!forCart && new_state.push(total);\n\t\treturn new_state;\n\t}\n\n\tgetAmount(discount:any, cart:any): number{\n\t\tif (discount.type != 'shipment') return discount.amount;\n\t\treturn cart.totals.shipping;\n\t}\n\n\tformatType(type: string): CheckoutDataType | string{\n\t\tlet result;\n\t\tswitch (type) {\n\t\t\tcase 'order_promotion': result = 'discount'; break;\n\t\t\tcase 'order_shipping_promotion': result = 'shipment'; break;\n\t\t\tcase 'order_coupon_promotion': result = 'coupon'; break;\n\t\t\tcase 'order_unit_promotion': result = 'discount'; break;\n\t\t}\n\t\t!result && (result = type.includes('promotion') || type.includes('discount') ? 'discount' : type)\n\t\treturn result || type;\n\t}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, combineLatest, firstValueFrom, Observable, ReplaySubject } from 'rxjs';\nimport { CartService } from './cart.service';\nimport { CheckoutData, IStep, StepType } from '../interfaces';\nimport { ConnectionService } from '../api';\nimport { AnalyticsService } from './analytics';\nimport { ApiConstantsService } from '../constants';\nimport { Step, User } from '../classes';\nimport { AuthService } from './auth.service';\nimport { OrderUtilityService } from './order-utility.service';\nimport { Router } from '@angular/router';\nimport { ToastService } from './toast.service';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class CheckoutService {\n\n\tprivate _cartService: CartService = inject(CartService);\n\tprivate _connection: ConnectionService = inject(ConnectionService);\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\n\tprivate _consts: ApiConstantsService = inject(ApiConstantsService);\n\tprivate _authService: AuthService = inject(AuthService);\n\tprivate _orderUtilityService: OrderUtilityService = inject(OrderUtilityService);\n\tprivate _router: Router = inject(Router);\n\tprivate _toastService: ToastService = inject(ToastService);\n\n\tprivate _canCheckoutSubject = new ReplaySubject<boolean>();\n\tprivate _stateSubject = new BehaviorSubject<Step[]>([])\n\tprivate _lastStepSubject = new BehaviorSubject<boolean>(false);\n\tprivate _loadingSubject = new BehaviorSubject<boolean>(false);\n\tprivate _orderSubject = new BehaviorSubject<any>(null);\n\tprivate _associatedDataSubject = new BehaviorSubject<CheckoutData[] | null>(null);\n\tprivate _loadingStepSubject = new BehaviorSubject<boolean>(false);\n\n\tpublic canCheckout$: Observable<boolean> = this._canCheckoutSubject.asObservable();\n\tpublic state$: Observable<any> = this._stateSubject.asObservable();\n\tpublic isLastStep$: Observable<boolean> = this._lastStepSubject.asObservable();\n\tpublic associatedData$: Observable<any> = this._associatedDataSubject.asObservable();\n\tpublic order$: Observable<any> = this._orderSubject.asObservable();\n\tpublic loadingStep$:Observable<boolean> = this._loadingStepSubject.asObservable();\n\n\tpublic total: any;\n\tprivate cartLocal: any;\n\tprivate checkoutData: any = {};\n\tprivate order: any;\n\n\t//API Methods\n\tbaseApi = () => 'shop-api/' + this._consts.CHANNEL + '/checkout/' + this._cartService.getCartToken();\n\tgetHasPurchaseConditions() { return 'shop-api/' + this._consts.CHANNEL + '/carts/' + this._cartService.getCartToken() + '/has_purchase_conditions' };\n\tcompleteApi() { return this.baseApi() + '/complete' };\n\n\n\tconstructor() {\n\t\tcombineLatest([this._cartService.cartItems$, this._cartService.loading$]).subscribe(([items, loading]) => {\n\t\t\tif (!loading && items.length > 0) {\n\t\t\t\tthis._canCheckoutSubject.next(true);\n\t\t\t\tthis._cartService.getTotalAmount().subscribe((res: any) => {\n\t\t\t\t\tthis.total = res;\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t\tthis._cartService.cart$.subscribe(cart => cart && (this.cartLocal = cart) && this.updateAsociatedData(cart));\n\t\tthis.order$.subscribe(order => order && this.updateAsociatedData(order))\n\t}\n\n\tsetSteps(steps: IStep[]) {\n\t\tlet final_steps: Step[] = [];\n\t\tsteps.forEach((step, i) => final_steps.push(new Step(step.name, step.priority || (i + 1), step.label, step.state)));\n\t\tthis._stateSubject.next(final_steps);\n\t\tif (final_steps.length == 1) {\n\t\t\tthis._lastStepSubject.next(true);\n\t\t}\n\t\tconsole.log(final_steps);\n\t\tfirstValueFrom(this._connection.get(this.getHasPurchaseConditions())).then(\n\t\t\tres => {\n\t\t\t\tthis._analyticsService.callEvent('checkout_init', { ...this.cartLocal, currency: this.cartLocal?.currency, value: this.cartLocal?.total })\n\t\t\t}\n\t\t)\n\t}\n\n\tnext() {\n\t\tthis._loadingStepSubject.next(true);\n\t\tconst steps = this._stateSubject.getValue()\n\t\tconst readyStep = steps.findIndex(step => step.state === 'ready');\n\t\tif (steps[readyStep + 1]) {\n\t\t\tsteps[readyStep].state = 'doing'\n\t\t\tsteps[readyStep + 1].state = 'ready';\n\t\t\tif (!steps[readyStep + 2]) this._lastStepSubject.next(true);\n\t\t\tthis._loadingStepSubject.next(false)\n\t\t} else {\n\t\t\tthis.complete().then(\n\t\t\t\tres => {\n\t\t\t\t\tif (res.ok) {\n\t\t\t\t\t\tthis._router.navigate(['checkout/order_success'])\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._toastService.show('operation-error')\n\t\t\t\t\t}\n\t\t\t\t\tthis._loadingStepSubject.next(false)\n\t\t\t\t},\n\t\t\t\terr => {\n\t\t\t\t\tconsole.log(err)\n\t\t\t\t\tthis._loadingStepSubject.next(false)\n\t\t\t\t\tthis._toastService.show('operation-error')\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t}\n\n\tback() {\n\t\tconst steps = this._stateSubject.getValue()\n\t\tconst readyStep = steps.findIndex(step => step.state === 'ready');\n\t\tthis._lastStepSubject.next(false);\n\t\tif (steps[readyStep - 1]) {\n\t\t\tsteps[readyStep].state = 'pending'\n\t\t\tsteps[readyStep - 1].state = 'ready';\n\t\t}\n\t}\n\n\tsetOrder = (order: any) => { this.order = order, this._orderSubject.next(order) };\n\t//getOrder = () => this.order || this.orderSubject.value;\n\n\tprivate completeOrder = () => firstValueFrom(this._connection.put(this.completeApi(), { email: this.checkoutData.email, notes: this.checkoutData.notes || '' }));\n\n\tcomplete = async () => {\n\t\ttry {\n\t\t\tthis._loadingSubject.next(true);\n\t\t\tlet result = await this.completeOrder();\n\t\t\t\n\t\t\tif (result && result.error) {\n\t\t\t\tthis._cartService.changeHaveToUpdate(false);\n\t\t\t\tthis._loadingSubject.next(false);\n\t\t\t\treturn ({ ok: false, require_login: true, message: 'not-completed' });\n\t\t\t}\n\n\t\t\tthis.setOrder(result);\n\t\t\tthis._analyticsService.callEvent('purchase', { ...result, currency: result.currency, value: result.total });\n\t\t\tthis._cartService.clearAndResetCart();\n\t\t\tthis._canCheckoutSubject.next(false);\n\t\t\t//this._onReadySubject.next(false);\n\t\t\tthis._loadingSubject.next(false);\n\n\t\t\treturn ({ ok: true, require_login: false, message: '' });\n\t\t} catch (error) {\n\t\t\tthis._loadingSubject.next(false);\n\t\t\tconsole.error('Error in complete:', error);\n\n\t\t\treturn { ok: false, require_login: false, message: 'An error occurred' };\n\t\t}\n\n\t}\n\n\tupdateAsociatedData = (cart: any) => {\n\t\tlet result = this._orderUtilityService.getPromotions(cart);\n\t\tconst userProfile: User = User.fromJson(this._authService.getUserProfileAsUser());\n\t\tif (result) {\n\t\t\tif (userProfile.isWholesaler() && cart.totals.taxes != 0) {\n\t\t\t\tlet total = { ...result[result.length - 1] };\n\t\t\t\tresult[result.length - 1] = {\n\t\t\t\t\ttype: 'taxes',\n\t\t\t\t\tname: 'taxes',\n\t\t\t\t\tamount: cart.totals.taxes\n\t\t\t\t}\n\t\t\t\tresult.push(total);\n\t\t\t}\n\t\t\tlet shipment = result?.find((promotion: any) => promotion.type == \"shipment\");\n\t\t\tif (!shipment && cart.totals.shipping != 0) {\n\n\t\t\t\tif (result?.length && !result.find((item: any) => item.type === \"shipment\")) {\n\t\t\t\t\tlet total = { ...result[result.length - 1] };\n\t\t\t\t\tresult[result.length - 1] = {\n\t\t\t\t\t\ttype: 'shipment',\n\t\t\t\t\t\tname: 'shipment',\n\t\t\t\t\t\tamount: cart.totals.shipping\n\t\t\t\t\t}\n\t\t\t\t\tresult.push(total);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._associatedDataSubject.next(result);\n\t\t}\n\t}\n\n\tgetStepData = (step_name: StepType) => {\n\t\tlet step_result = this._stateSubject.getValue().find(step => step.name == step_name);\n\t\treturn (step_result && step_result.data);\n\t}\n\n\tsetStepData = (step_name: StepType, data: any) => {\n\t\tlet step = this._stateSubject.getValue().find(step => step.name == step_name);\n\t\tstep?.ready(data);\n\t\t/* if (data) {\n\t\t\tthis._orderSubject.next(data);\n\t\t\tthis.total = data.totals.total;\n\t\t} */\n\t}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ApiConstantsService } from '../constants';\nimport { CartService } from './cart.service';\nimport { ConnectionService } from '../api';\nimport { firstValueFrom, map, Observable } from 'rxjs';\nimport { AnalyticsService } from './analytics';\nimport { Validators } from '@angular/forms';\nimport { CheckoutService } from './checkout.service';\n\ntype typeForms = 'EUR' | 'ARG';\ntype typeSelectAddress = 'ONLY_LOAD_ADDRESS' | 'ONLY_ADDRESS_SELECTION' | 'LOAD_ADDRESS_AND_SELECTION';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class AddressingService {\n\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\n\tprivate _cartService: CartService = inject(CartService);\n\tprivate _connection: ConnectionService = inject(ConnectionService);\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\n private _checkoutService: CheckoutService = inject(CheckoutService);\n\n\tpublic typeForms: typeForms = 'ARG';\n\tpublic modeSelectAddress: typeSelectAddress = 'LOAD_ADDRESS_AND_SELECTION';\n\tpublic countriesList:any = [];\n\tpublic documentTypes:any = [];\n\tpublic provinceList:any = [];\n\n\t//API URL\n\tbaseApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/' + 'checkout/' + this._cartService.getCartToken(); }\n\tcountriesApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/countries'; }\n\tzonesApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/zones'; }\n\tprovincesApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/provinces'; }\n\tputAddressApi() { return this.baseApi() + '/address'; }\n\taddressBookApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/address-book'; }\n\theadquarterApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/checkout/' + this._cartService.getCartToken() + '/headquarter'; }\n\n\tconstructor() {\n\t\tthis.getAddressingData().then((res: any) => {\n\t\t\tif (res) {\n\t\t\t\tthis.documentTypes = (res.find((paises: any) => this._apiConsts.LOCALE.toLocaleLowerCase().includes(paises.code.toLocaleLowerCase())))?.documentTypes || []\n\t\t\t\tthis.provinceList = (res.find((paises: any) => this._apiConsts.LOCALE.toLocaleLowerCase().includes(paises.code.toLocaleLowerCase())))?.provinces || []\n\t\t\t\tthis.countriesList = res\n\t\t\t}\n\t\t})\n\t}\n\n\tgetAddressingData() {\n\t\treturn firstValueFrom(this._connection.get(this.countriesApi()).pipe(map(res => res?._embedded?.items)));\n\t}\n\tgetAddressBook(): Observable<any> {\n\t\treturn this._connection.get(this.addressBookApi()).pipe(map(res => res?.length && res.map((address: any) => { return address && { ...address, selected: address.default } }) || null))\n\t}\n\tsetHeadquarter(sede:any): Promise<any>{\n\t\treturn firstValueFrom(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._checkoutService.setStepData('address',sede);\n this._analyticsService.callEvent('payment_info', order);\n return order;\n }))).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\t}\n\n\tgetTypeForm = () => {\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\tsetAddress = (user_data: any) => {\n user_data.locale = this._apiConsts.LOCALE;\n\n // se modifica el código postal para castearlo a String antes de enviarlo\n user_data.shippingAddress.postcode = user_data.shippingAddress.postcode.toString();\n \n return firstValueFrom(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 \n this._checkoutService.setStepData('address',user_data);\n this._analyticsService.callEvent('payment_info', order);\n return order;\n }))).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}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, firstValueFrom } from 'rxjs';\nimport { ApiConstantsService } from '../constants';\nimport { ConnectionService } from '../api';\nimport { Store } from '../interfaces/store';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class StoresService {\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\n\tprivate _connection: ConnectionService = inject(ConnectionService);\n\n\tprivate _storesSubject = new BehaviorSubject<Store[] | null>([]);\n\tpublic stores = this._storesSubject.asObservable();\n\n\tgetAllStoresApi = () => 'shop-api/' + this._apiConsts.CHANNEL + '/stores';\n\n\tconstructor() {\n\t\tfirstValueFrom(this._connection.get(this.getAllStoresApi())).then(\n\t\t\tres => {\n\t\t\t\tres.length && this._storesSubject.next(res);\n\t\t\t\t!res.length && this._storesSubject.next(null);\n\t\t\t}\n\t\t)\n\t}\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, firstValueFrom, Observable, Subscription } from 'rxjs';\nimport { CheckoutService } from './checkout.service';\nimport { CheckoutProcessState } from '../interfaces';\nimport { ConnectionService } from '../api';\nimport { ApiConstantsService } from '../constants';\nimport { CartService } from './cart.service';\nimport { StoresService } from './stores.service';\nimport { AnalyticsService } from './analytics';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ShipmentService {\n private _checkoutService: CheckoutService = inject(CheckoutService);\n private _connection: ConnectionService = inject(ConnectionService);\n private _apiConsts: ApiConstantsService = inject(ApiConstantsService);\n private _cartService: CartService = inject(CartService);\n private _storesService: StoresService = inject(StoresService);\n private _analyticsService: AnalyticsService = inject(AnalyticsService);\n\n private _methodsSubject = new BehaviorSubject<any>([]);\n private _costsSubject = new BehaviorSubject<any>([]);\n private _stateSubject = new BehaviorSubject<CheckoutProcessState>({ doing: false, ok: false, data: null });\n\n public methods$: Observable<any> = this._methodsSubject.asObservable();\n public costs$: Observable<any[]> = this._costsSubject.asObservable();\n public state$: Observable<any> = this._stateSubject.asObservable();\n public buttonsDisabled: boolean = false;\n public order: any;\n private _subscription: Subscription | null = null;\n\n //API URL\n private baseApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/' + 'checkout/' + this._cartService.getCartToken(); }\n\n public shipmentMethodsApi() { return this.baseApi() + '/shipping' };\n public putShipmentApi() { return this.baseApi() + '/shipping/' + this._stateSubject.getValue().data.method };\n public putContractApi = () => 'shop-api/' + this._apiConsts.CHANNEL + '/checkout/' + this._cartService.getCartToken() + '/shipping-contract';\n public calculatedCostsApi = () => 'shop-api/' + this._apiConsts.CHANNEL + '/carts/' + this._cartService.getCartToken() + '/multiple-estimated-shipping-cost';\n\n\n constructor() { }\n\n setMethod(method: any): Promise<any> {\n // Deshabilitar todos los botones\n //this.buttonsDisabled = true;\n\n this._costsSubject.next([]);\n this._stateSubject.next({ doing: true, ok: false, data: { method } });\n\n return this.putShipment().then(\n (res: any) => {\n this._checkoutService.updateAsociatedData(res);\n this.order = res;\n return this.getCalculatedCosts()\n }).then(\n (res: any) => {\n this.modifyCostsResponse(res, this.getUserData().shippingAddress.postcode, method)\n return { success: true, order: this.order };\n }).then(\n (res:any) => {\n const firstContract = this._costsSubject.getValue();\n this.setContract(firstContract);\n return { success: true, order: this.order };\n }\n ).catch((error) => {\n console.log(error)\n return { success: false, error: error };\n })\n }\n\n private putShipment() {\n return firstValueFrom(this._connection.put(this.putShipmentApi(), { method: this._stateSubject.getValue().data.method }));\n }\n\n getCalculatedCosts() { return firstValueFrom(this._connection.get(this.calculatedCostsApi())) };\n\n getShipmentMethods = () => {\n firstValueFrom(this._connection.getErrorNotHandler(this.shipmentMethodsApi())).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 responseToList(response: any) {\n return (response.shipments && response.shipments.length > 0) && Object.keys(response.shipments[0].methods).map(key => response.shipments[0].methods[key]);\n }\n\n restartStep() {\n throw new Error('Method not implemented.');\n }\n /**\n * Obtener información obtenida en el paso de datos asociados al usuario y a la facturación\n */\n getUserData = () => this._checkoutService.getStepData('address');\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(response: any, post_code: any, method: any) {\n response = response.multiplePrices;\n let branch_delivery = response.findIndex((submethod: any) => submethod.name == 'branch_delivery');\n if (branch_delivery != -1) {\n response[branch_delivery].contracts = response[branch_delivery].contracts.map(\n (contract: any) => {\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.includes('pickup_store')) {\n let final_method_data = response;\n this._subscription = this._storesService.stores.subscribe((stores: any) => {\n if (stores.length) {\n final_method_data.forEach((pickup_store: any) => {\n pickup_store.contracts.forEach((contract: any) => {\n const current_store = stores.find((store: any) => 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 ngOnDestroy() {\n this._subscription && this._subscription.unsubscribe();\n }\n\n setContract(contract: any){\n const data = { ...contract, ...this.additionalParamsForContract(contract) };\n return firstValueFrom(this._connection.put(this.putContractApi(), data)).then(\n order => {\n this._analyticsService.callEvent('shipping_info', order);\n this._checkoutService.updateAsociatedData(order);\n return this._checkoutService.setStepData('shipment',order);},\n err => {\n return new Promise((resolve, reject) => reject(new Error(err.error)))\n }\n ).catch(err => console.error(err))\n }\n additionalParamsForContract(contract:any){\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","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, firstValueFrom, map } from 'rxjs';\nimport { ConnectionService } from '../api';\nimport { ToastService } from './toast.service';\nimport { ApiConstantsService } from '../constants';\nimport { CartService } from './cart.service';\nimport { AnalyticsService } from './analytics';\nimport { CheckoutService } from './checkout.service';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class PaymentService {\n\n\tprivate _connectionService: ConnectionService = inject(ConnectionService);\n\tprivate _toastService: ToastService = inject(ToastService);\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\n\tprivate _cartService: CartService = inject(CartService);\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService);\n\n\tprivate paymentMethodsSubject = new BehaviorSubject<any[]>([]);\n\tpublic methods$ = this.paymentMethodsSubject.asObservable();\n\n\t//API URL\n\tbaseApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/' + 'checkout/' + this._cartService.getCartToken(); }\n\tgetPaymentMethodsApi() { return this.baseApi() + '/payment'; }\n\tputPaymentApi(method: string) { return this.baseApi() + '/payment/' + method; }\n\tgetPreferenceApi (){ return 'shop-api/' + this._apiConsts.CHANNEL + '/mercado-pago/' + this._cartService.getCartToken() + '/preference'; }\n\n\tconstructor() {\n\t\tthis.getPaymentMethods();\n\t}\n\n\tgetPaymentMethods() {\n\t\treturn firstValueFrom(this._connectionService.get(this.getPaymentMethodsApi())).then(\n\t\t\tres => res.payments?.length && this.paymentMethodsSubject.next(Object.keys(res.payments[0].methods).map(key => res.payments[0].methods[key])),\n\t\t\terr => this._toastService.show('operation-error')\n\t\t);\n\t}\n\n\tputPayment(method: any) {\n\t\treturn firstValueFrom(this._connectionService\n\t\t\t.put(this.putPaymentApi(method), { method })).then(\n\t\t\t\tres => {\n\t\t\t\t\tthis._analyticsService.callEvent('add_payment_info', res);\n\t\t\t\t\treturn res\n\t\t\t\t},\n\t\t\t\terr => {\n\t\t\t\t\treturn new Promise((resolve, reject) => reject(new Error(err.error)))\n\t\t\t\t}\n\t\t\t).catch(err => console.error(err))\n\t}\n\n\tgetPreference(shipment_data:any){\n\t\treturn firstValueFrom(this._connectionService.post(this.getPreferenceApi(), shipment_data).pipe(map(res => (res.preference || res))));\n\t}\n\n\tsetPayment(data:any) {\n\t\treturn this._checkoutService.setStepData('payment',data);\n\t}\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TestService {\n\n constructor() {\n console.log('hola');\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ConnectionService } from '../api';\nimport { BehaviorSubject, map } from 'rxjs';\nimport { ApiConstantsService } from '../constants';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class OrdersService {\n\tprivate _connection:ConnectionService = inject(ConnectionService);\n\tprivate _apiConsts:ApiConstantsService = inject(ApiConstantsService);\n\n\tprivate _ordersSubject: BehaviorSubject<any> = new BehaviorSubject(null);\n\tprivate _errorSubject: BehaviorSubject<any> = new BehaviorSubject(null);\n\n\tpublic orders$ = this._ordersSubject.asObservable();\n\n\tpublic loading:boolean = false;\n\n\t//API URL\n\tordersListapi(){ return `shop-api/${this._apiConsts.CHANNEL}/orders`};\n\n\tupdateOrders() {\n\t\tthis.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 next: (response) => {\n this._ordersSubject.next(response);\n this.loading = false;\n },\n error: (e) => {\n this._errorSubject.next({ message: 'unable-get-orders' });\n }\n\t\t\t})\n\n\t}\n\tmapOrdersAndAddInfo(orders:any){\n return orders.map((order:any) => {\n order.total = order.payments.reduce((a:any, b:any) => a + b.price.current, 0);\n return order;\n })\n\t}\n\n}\n","import { afterNextRender, afterRender, Component, inject } from '@angular/core';\nimport { AuthService, OptionsService, ParametersService } from '../../ec-services';\nimport { map, Observable } from 'rxjs';\nimport { CoreConstantsService } from '../../constants';\nimport { Attribute, Category, Parameter, Section } from '../../interfaces';\n/**\n * Para diferenciar los tipos de Menu\n */\ntype MenuType = \"category\" | \"attribute\" | \"section\"\n/**\n * Componente que sirve para abstraer la funcionalidad que comparten \n * el menú y el footer.\n * @class MenuEcComponent\n */\n@Component({\n\tselector: 'lib-footer-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplate: '<p>Menu and Footer Helper Component</p>'\n})\nexport class MenuEcComponent {\n\tprivate optionsService = inject(OptionsService)\n\tprivate parametersService = inject(ParametersService)\n\tprivate _authService: AuthService = inject(AuthService)\n\t/**\n\t * Constantes del core.\n\t */\n\tprivate consts = inject(CoreConstantsService)\n\n\t/**\n\t * Observable de categorias\n\t */\n\tpublic categories$: Observable<Category[]> = this.optionsService.getCategories()\n\t/**\n\t * Observable de secciones\n\t */\n\tpublic sections$: Observable<Section[]> = this.optionsService.getSections()\n\t/**\n\t * Observable de atributos\n\t */\n\tpublic attributes$: Observable<Attribute[]> = this.optionsService.getAttributes()\n\t/**\n\t * Observable de parametros\n\t */\n\tpublic parameters$: Observable<Parameter[] | null> = this.parametersService.getParameters()\n\t/**\n\t * Url para las imagenes guardades en el backend.\n\t */\n\tpublic mediaUrl = this.consts.mediaUrl()\n\t/**\n\t * Funcion para saber si existen un parametro. \n\t */\n\tpublic hasParams = this.parametersService.hasParams\n\n\tconstructor() {}\n\n\tprotected addChildren = (menuType: MenuType, code: string, item: any, stackPlace = 'end'): void => {\n\n\t}\n\n\t/* protected addChildren = (menuItems: any[], code: string, item: any, stackPlace = 'end') => {\n\t (stackPlace === 'start')\n\t\t? menuItems.find(item => item.code?.toLowerCase().includes(code))?.children.unshift(item)\n\t\t: menuItems.find(item => item.code?.toLowerCase().includes(code))?.children.push(item)\n \n\t} */\n\t/**\n\t * Actualiza las categorias agregando nuevas.\n\t * @param categories \n\t */\n\tprotected updateCategories(categories: Category[]) {\n\t\tthis.categories$ = this.categories$.pipe(map((data: Category[]) => {\n\t\t\treturn [...data, ...categories]\n\t\t}))\n\t}\n\t/**\n\t * Actualiza las secciones agregando nuevas.\n\t * @param sections \n\t */\n\tprotected updateSections(sections: Section[]) {\n\t\tthis.sections$ = this.sections$.pipe(map((data: Section[]) => {\n\t\t\treturn [...data, ...sections]\n\t\t}))\n\t}\n\t/**\n\t * Actualiza el menú de atributos agredando nuevos.\n\t * @param attributes \n\t */\n\tprotected updateAttributes(attributes: Attribute[]) {\n\t\tthis.attributes$ = this.attributes$.pipe(map((data: Attribute[]) => {\n\t\t\treturn [...data, ...attributes]\n\t\t}))\n\t}\n\n\tpublic isAuthenticated() {\n\t\treturn this._authService.isAuthenticated();\n\t}\n\n\tpublic logout() {\n\t\tthis._authService.logout();\n\t}\n}","import { afterNextRender, Component, inject } from \"@angular/core\";\nimport { ApiConstantsService, CoreConstantsService } from \"../../constants\";\nimport { SwiperOptions } from \"swiper/types\";\n/**\n * Componente para abstraer la funcionalidad de los componentes\n * y que puedan heredarla.\n * @export\n * @class BlockEcComponent\n */\n@Component({\n\tselector: 'lib-block-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplate: '<p>Block Helper Component</p>'\n})\nexport class BlockEcComponent {\n /**\n * Constantes del core\n */\n private consts = inject(CoreConstantsService)\n /**\n * Constantes de la API\n */\n protected apiConsts = inject(ApiConstantsService)\n /**\n * Url para las imagenes\n */\n public mediaUrl = this.consts.mediaUrl()\n /**\n * Url para las imagenes de los banners\n */\n public mediaBannerUrl = this.consts.mediaBannerUrl()\n /**\n * Si la vista es mobile o no.\n */\n public mobileScreen:boolean = this.consts.mobileScreen(); \n \n constructor(){}\n /**\n * Esta función separa el código del bloque y se queda con el elemento en la posicion uno para usarlo como clase CSS. \n * La idea es que el código del bloque mantenga un formato similar a **BLOQUE-[nombre]-[extra]...** entonces esta función \n * se quedaria con lo que contiene **nombre** para usarlo como nombre de clase css.\n * @param code Código del bloque.\n * @returns {string}\n */\n trimClassBlock (code:string):string {\n return (code.split('-').length > 1) ? code.split('-')[1].toLowerCase() : ''\n }\n /**\n * Obtiene la imagen del banner dependiendo de si es para mobile o desktop\n * @param banner \n * @returns \n */\n getBannerImage(banner: any):string {\n return (this.mobileScreen && banner.translations[this.apiConsts.LOCALE].mobileImageName && banner.translations[this.apiConsts.LOCALE].mobileImageName != '')\n ? banner.translations[this.apiConsts.LOCALE].mobileImageName\n : banner.translations[this.apiConsts.LOCALE].imageName;\n }\n\n /**\n * Obtiene la imagen del banner dependiendo de si es para mobile o desktop.\n * Le suma el path para las url del banner.\n * @param banner \n * @returns \n */\n getImage(banner: any): string {\n return this.mediaBannerUrl +\n (this.mobileScreen && banner.translations[this.apiConsts.LOCALE].mobileImageName && banner.translations[this.apiConsts.LOCALE].mobileImageName != '')\n ? banner.translations[this.apiConsts.LOCALE].mobileImageName\n : banner.translations[this.apiConsts.LOCALE].imageName\n }\n /**\n * Retorna la configuración base para el carrusel.\n * Más detalles: {@link https://swiperjs.com/types/interfaces/types_swiper_options.SwiperOptions}\n * @returns {SwiperOptions}\n * \n */\n swiperOptions():SwiperOptions {\n return {\n slidesPerView: 1,\n autoplay: true,\n loop: true,\n speed: 1050,\n pagination: true,\n navigation: false,\n autoHeight: true,\n breakpoints: {\n 0: {\n slidesPerView: 1\n },\n 576:{\n slidesPerView: 1 \n },\n 768: {\n slidesPerView: 1,\n },\n 992: {\n slidesPerView: 1,\n },\n 1200: {\n slidesPerView: 1,\n }\n }\n }\n }\n\n}","import { Component} from '@angular/core';\nimport { AsyncPipe } from '@angular/common';\nimport { MenuEcComponent } from '../abstractions-components';\n/**\n * Componente que se encarga de manejar la funcionalidad del Footer.\n * @extends {MenuEcComponent}\n */\n@Component({\n\tselector: 'lib-footer-ec',\n\tstandalone: true,\n\timports: [AsyncPipe],\n\ttemplateUrl: './footer-ec.component.html',\n\tstyleUrl: './footer-ec.component.scss'\n})\nexport class FooterEcComponent extends MenuEcComponent{\n\n}\n\n","<p>footer-ec works!</p>\n","import { afterNextRender, Component, inject, Injector, OnInit } from '@angular/core';\nimport { TitleCasePipe } from '@angular/common';\nimport { MenuEcComponent } from '../abstractions-components';\nimport { CartService, TestService, ToastService } from '../../ec-services';\nimport { Observable } from 'rxjs';\n/**\n * Componente que se encarga de manejar la funcionalidad del Header.\n */\n@Component({\n\tselector: 'lib-header-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './header-ec.component.html',\n\tstyleUrl: './header-ec.component.scss'\n})\nexport class HeaderEcComponent extends MenuEcComponent {\n\tprivate _cartService: CartService = inject(CartService);\n\tpublic count$: Observable<number> = this._cartService.getCountCartItems();\n\t\n}\n","<p>header-ec works!</p>\n","import { Component, inject } from '@angular/core';\nimport { CoreConstantsService } from '../../constants';\nimport { BlocksService } from '../../ec-services';\n/**\n * Componente que se encarga de manejar el Home de la aplicación.\n */\n@Component({\n selector: 'lib-home-ec',\n standalone: true,\n imports: [],\n templateUrl: './home-ec.component.html',\n styleUrl: './home-ec.component.scss'\n})\nexport class HomeEcComponent {\n\n}\n","<p>home-ec works!</p>\n","import { afterNextRender, afterRender, Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, OnInit, PLATFORM_ID, signal } from '@angular/core';\nimport { IBlock } from '../../../interfaces';\nimport { BlockEcComponent } from '../../abstractions-components';\nimport { register, SwiperContainer } from 'swiper/element/bundle';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { AnalyticsService } from '../../../ec-services';\n\nregister();\n/**\n * Componente para manejar los banners de tipo full\n * @extends {BlockEcComponent}\n * @implements {OnInit}\n * @class BlockBannerFullEcComponent\n */\n@Component({\n\tselector: 'app-block-banner-full-ec',\n\tstandalone: true,\n\timports: [CommonModule, RouterLink],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\ttemplateUrl: './block-banner-full-ec.component.html',\n\tstyleUrl: './block-banner-full-ec.component.scss'\n})\nexport class BlockBannerFullEcComponent extends BlockEcComponent implements OnInit {\n\t/**\n\t * Banners tipo full\n\t */\n\t@Input({\n\t\trequired: true\n\t}) banners: any;\n\t/**\n\t * Datos del bloque que contiene a los banners\n\t */\n\t@Input({ required: true }) meta: any;\n\t/**\n\t * Servicio para Analytics\n\t */\n\tprivate analyticsService = inject(AnalyticsService)\n\t/**\n\t * Signal utlizado para guarda el contenedor del carrusel\n\t */\n\tswiperElement = signal<SwiperContainer | null>(null)\n\t/**\n\t * Método original en: {@link BlockEcComponent}\n\t * @param banner \n\t * @returns \n\t */\n\tpublic override getImage = (banner: any) => this.getBannerImage(banner);\n\t/**\n\t * Se mappea los banners para sumarle el objeto de translations y que\n\t * sean mas amigables para su uso.\n\t */\n\tngOnInit(): void {\n\t\tthis.banners = this.banners.map((banner: any) => { return { ...banner, ...banner.translations[this.apiConsts.LOCALE] } })\n\t}\n\tprivate document?: Document;\n\tprivate platformId: any = inject(PLATFORM_ID)\n\n\t/**\n\t * Ejecuta el método `afterNextRender`para cargar las configuraciones necesarias \n\t * para el carrusel del banners. Esto debe ser asi debido a que ya debe estar presente\n\t * en el Dom el element `<swiper-container>` para poder configurarlo.\n\t */\n\tconstructor() {\n\t\tsuper()\n\t\tif (isPlatformBrowser(this.platformId)) {\n\t\t\tthis.document = document\n\t\t}\n\t\tafterNextRender(() => {\n\t\t\tconst swiperElemConstructor = this.document?.querySelector('#' + this.meta?.code)\n\t\t\tObject.assign(swiperElemConstructor!, this.swiperOptions())\n\t\t\tthis.swiperElement.set(swiperElemConstructor as SwiperContainer)\n\t\t\tthis.swiperElement()?.initialize();\n\t\t})\n\t}\n\t/**\n\t * Aplica el evento `select_promotion` junto con el banner que interactua.\n\t * @param banner \n\t */\n\tselectPromotion(banner: any): void {\n\t\tthis.analyticsService.callEvent('select_promotion', banner)\n\t}\n}\n","@if(banners.length > 0) {\n <section [ngClass]=\"trimClassBlock(meta?.code)+' container-fluid px-0'\"\n [style.background-color]=\"meta.styles?.backgroundColor\"\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\n\n @if (banners.length == 1) {\n <!-- si es formato fijo -->\n <div class=\"row justify-content-center\">\n @let banner = banners[0];\n @if(!banners.styles?.button?.text){\n <!-- banner sin boton -->\n <a [href]=\"banner.url\" >\n <div class=\"item col-12\">\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\n @if(banner.title){\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#fff' \">\n {{banner.title}}\n </h2>\n }\n @if(banner.subtitle){\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\n {{banner.subtitle}}\n </p>\n }\n </div>\n </div>\n </a>\n }@else {\n <!-- banner fijo con boton -->\n <div class=\"item col-12\">\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\n @if(banner.title){\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\n {{banner.title}}\n </h2>\n }\n @if(banner.subtitle){\n <p \n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\n {{banner.subtitle}}\n </p>\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\n @if(banner.styles?.button?.text){\n <a href=\"{{banner.url}}\"\n [class]=\"'item-button-full btn btn-light '\">\n {{banner.styles.button.text}}\n </a> \n }\n \n </div>\n }\n </div>\n </div>\n }\n </div>\n }@else {\n <!-- si es carrousel -->\n <!-- @if(swiperElement() != null){ -->\n <swiper-container init=\"false\" [id]=\"meta?.code\">\n @for (banner of banners; track $index) {\n <swiper-slide>\n <div class=\"item\">\n @if (!banner.styles?.button?.text) {\n <!-- banner sin boton -->\n @if(banner.url){\n <a [href]=\"banner.url\" class=\"\">\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\n </a>\n }@else {\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\n }\n }@else {\n <!-- banner con boton -->\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" />\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\n @if(banner.title){\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\n {{banner.title}}\n </h2>\n }\n @if(banner.subtitle){\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\n {{banner.subtitle}}\n </p>\n }\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\n @if(banner.styles?.button?.text){\n <a href=\"{{banner.url}}\" [class]=\"'item-button-full btn btn-light'\">\n {{banner.styles.button.text}}\n </a>\n }\n </div>\n </div>\n }\n </div>\n </swiper-slide>\n }\n </swiper-container>\n <!-- } -->\n \n }\n </section>\n}","import { AsyncPipe, CommonModule, isPlatformBrowser } from '@angular/common';\nimport { afterNextRender, Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, PLATFORM_ID, signal } from '@angular/core';\nimport { BlockEcComponent } from '../../abstractions-components';\nimport { AnalyticsService } from '../../../ec-services';\nimport { register, SwiperContainer } from 'swiper/element';\nimport { SwiperOptions } from 'swiper/types';\n\nregister()\n/**\n * Componente para manejar los banner de tipo box.\n * @class BlockBannerBoxEcComponent\n * @extends {BlockEcComponent}\n */\n@Component({\n\tselector: 'app-block-banner-box-ec',\n\tstandalone: true,\n\timports: [CommonModule],\n\ttemplateUrl: './block-banner-box-ec.component.html',\n\tstyleUrl: './block-banner-box-ec.component.scss',\n\tschemas:[CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class BlockBannerBoxEcComponent extends BlockEcComponent {\n\t/**\n\t * Banners de tipo Box.\n\t */\n\t@Input({\n\t\trequired: true\n\t}) banners: any;\n\t/**\n\t * Datos del bloque que contiene a los banners\n\t */\n\t@Input({ required: true }) meta: any;\n\t/**\n\t * Servicio para Analytics\n\t */\n\tprivate analyticsService = inject(AnalyticsService)\n\t/**\n\t * Signal utlizado para guarda el contenedor del carrusel\n\t */\n\tswiperElement = signal<SwiperContainer | null>(null)\n\t\n\tprivate document?: Document;\n\tprivate platformId: any = inject(PLATFORM_ID)\n\t\n\t/**\n\t * Ejecuta el método `afterNextRender`para cargar las configuraciones necesarias \n\t * para el carrusel del banners. Esto debe ser asi debido a que ya debe estar presente\n\t * en el Dom el element `<swiper-container>` para poder configurarlo.\n\t */\n\tconstructor() {\n\t\tsuper()\n\t\tif (isPlatformBrowser(this.platformId)) {\n\t\t\tthis.document = document\n\t\t}\n\t\tafterNextRender(() => {\n\t\t\tconst swiperElemConstructor = this.document?.querySelector('#'+this.meta?.code)\n\t\t\tObject.assign(swiperElemConstructor!, this.swiperOptions())\n\t\t\tthis.swiperElement.set(swiperElemConstructor as SwiperContainer)\n\t\t\t//swiperElemConstructor?.initialize();\n\t\t\tthis.swiperElement()?.initialize();\n\t\t})\n\t}\n\t/**\n\t * Método original en: {@link BlockEcComponent}\n\t */\n\toverride swiperOptions ():SwiperOptions {\n\t\treturn {\n slidesPerView: 1,\n autoplay: true,\n loop: true,\n speed: 1050,\n pagination: false,\n navigation: true,\n autoHeight: true,\n breakpoints: {\n 0: {\n slidesPerView: 1\n },\n 576:{\n slidesPerView: 2 \n },\n 768: {\n slidesPerView: 4,\n },\n 992: {\n slidesPerView: 5,\n },\n 1200: {\n slidesPerView: 5,\n }\n }\n }\n\t}\n\t/**\n\t * Aplica el evento `select_promotion` junto con el banner que interactua.\n\t * @param banner \n\t */\n\tselectPromotion(banner: any): void {\n\t\tthis.analyticsService.callEvent('select_promotion', banner)\n\t}\n}\n","@if(banners.length){\n <section [ngClass]=\"trimClassBlock(meta.code) + ' container-fluid'\" \n [style.background-color]=\"meta.styles?.backgroundColor\"\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\n\n <div class=\"block-boxes\">\n @if(meta.name){\n <div class=\"row\">\n <div class=\"col-12 mt-4\">\n <h2 class=\"font-weight-normal font-gd\">\n <span>{{meta.name}}</span>\n </h2>\n </div>\n </div> \n }\n \n @if(meta.styles && meta.styles.carrousel == false){\n <!-- Si es formato fijo -->\n <div class=\"banner-content\">\n <div class=\"row g-0\">\n @for (banner of banners; track $index) {\n <div [ngClass]=\"'item '+'col-md-6 '+'col-lg-'+(12/banners.length) \" [id]=\"$index\">\n <img class=\"img-fluid\" [src]=\" mediaBannerUrl+getImage(banner)\" alt=\"\" />\n <div class=\"position-absolute w-100 top-0 start-0 h-100\">\n <h2 [ngClass]=\"'item-title px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000'\">\n {{banner.title}}\n </h2>\n @if(banner.subtitle){\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\n [class]=\"'px-4 item-subtitle item-position-vertical-' + (banner.styles?.description?.position)\">\n {{banner.subtitle}}\n </p>\n }\n </div>\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\n @if(banner.styles?.button?.text){\n <a href=\"{{banner.url}}\" [class]=\"'item-button btn btn-light'\">\n {{banner.styles.button.text}}\n </a>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }@else {\n <!-- Si es Carrousel -->\n <swiper-container init=\"false\" [id]=\"meta?.code\">\n @for (banner of banners; track $index) {\n <swiper-slide>\n <div class=\"banner-content carrousel\">\n <img [src]=\"mediaBannerUrl+getImage(banner)\" alt=\"\" />\n <div class=\"position-absolute w-100 top-0 start-0 h-100\">\n @if(banner.title){\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\n style=\"color:#fff\">\n {{banner.title}}\n </h2>\n }\n @if(banner.subtitle){\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\n {{banner.subtitle}}\n </p>\n }\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\n @if(banner.styles?.button?.text){\n <a href=\"{{banner.url}}\"\n [style.background-color]=\"(banner.styles?.button?.color) ? banner.styles?.button?.color : '#fff' \"\n [class]=\"'item-button-full btn btn-light'\">\n {{banner.styles.button.text}}\n </a>\n }\n </div>\n </div>\n </div>\n </swiper-slide>\n }\n </swiper-container> \n }\n </div>\n\n </section>\n}","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { BlockEcComponent } from '../../abstractions-components';\nimport { DomSanitizer } from '@angular/platform-browser';\n/**\n * Componente para manejar los Bloques de tipo HTML\n * @extends {BlockEcComponent}\n * @implements {OnInit}\n */\n@Component({\n\tselector: 'app-block-html-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './block-html-ec.component.html',\n\tstyleUrl: './block-html-ec.component.scss'\n})\nexport class BlockHtmlEcComponent extends BlockEcComponent implements OnInit {\n\t/**\n\t * Contenido html para sanitizar.\n\t */\n\t@Input({\n\t\trequired: true,\n\t}) html_content: any;\n\t/**\n\t * Sanitizador de Dom elements\n\t */\n\tprotected sanitizer: DomSanitizer = inject(DomSanitizer)\n\t/**\n\t * Se pasa el contenido de html por es sanitizador. \n\t */\n\tngOnInit(): void {\n\t\tthis.html_content = this.sanitizer.bypassSecurityTrustHtml(this.html_content);\n\t}\n}\n","<div [innerHTML]=\"html_content\"></div>\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { CurrencyService } from '../ec-services';\nimport { CoreConstantsService } from '../constants';\n/**\n * Formatea el precio de un producto.\n * @implements {PipeTransform}\n */\n@Pipe({\n\tname: 'ecCurrencySymbol',\n\tstandalone: true,\n})\nexport class EcCurrencySymbolPipe implements PipeTransform {\n\t/**\n\t * Contiene el valor de la moneda actual\n\t */\n\tprivate currency: any;\n\t/**\n\t * Servicio de Currency (para manejar la moneda)\n\t */\n\tprivate currencyService: CurrencyService = inject(CurrencyService)\n\t/**\n\t * Constantes del core\n\t */\n\tprivate consts: CoreConstantsService = inject(CoreConstantsService)\n\n\tconstructor() {\n\t\tthis.currencyService.currency$.subscribe(res => this.currency = res)\n\t}\n\t/**\n\t * Transforma el valor pasado y devuelve un string con los formatos aplicados\n\t * @param value Precio del producto\n\t * @returns \n\t */\n\ttransform(value: any): string {\n\t\tconst formatter = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'USD' });\n\t\tlet valueTransform = ''\n\t\tif (value) {\n\t\t\tvalue = this.currencyService.calculateConvetibility(value, this.currency.ratio).toString()\n\t\t\tvalueTransform = this.changeSymbolTransform(formatter.format(value)?.toString())\n\t\t}\n\t\treturn valueTransform;\n\t}\n\t/**\n\t * Genera el precio formateado con el simbolo y lo que las configuraciones requieran.\n\t * @param valor \n\t * @returns \n\t */\n\tchangeSymbolTransform(valor: any) {\n\t\ttry {\n\t\t\treturn this.positionSymbol(this.checkingWithoutDecimals(this.clearSymbol(valor)))\n\t\t} catch (error) {\n\t\t\tconsole.error('Errores en custom pipe -> ', error);\n\t\t\treturn valor\n\t\t}\n\t}\n\t/**\n\t * Limpia el simbolo de peso para obtener solo el número.\n\t * @param value \n\t * @returns \n\t */\n\tclearSymbol(value: any) { return value.replace('$', '') }\n\t/**\n\t * Aplica el simbolo de la moneda, segun la configuración, del lado derecho o del lado izquierdo.\n\t * @param value \n\t * @returns \n\t */\n\tpositionSymbol(value: any) {\n\t\treturn this.consts.currency.position && this.consts?.currency.position.toUpperCase() == 'LEFT'\n\t\t\t? `${this.currency.symbol} ${value?.trim()}`\n\t\t\t: `${value?.trim()} ${this.currency.symbol}`\n\n\t}\n\t/**\n\t * Si el parametro `withoutDecimal` de currency es `true` le saca los decimales, \n\t * de lo contrario se los agrega formateados.\n\t * @param value \n\t * @returns \n\t */\n\tcheckingWithoutDecimals(value: string) {\n\t\tif (this.consts?.currency.withoutDecimal) {\n\t\t\tlet val = value?.split(',');\n\t\t\treturn val[0]\n\t\t\t//?.trim() == \"00\" && value.trim().slice(0, value.trim().length - 3) || value\n\t\t} else {\n\t\t\tlet val = value?.split(',');\n\t\t\t(val[1] && val[1].length > 2) ? val[1] = val[1].slice(0, 2) : val[1] = \"00\"\n\t\t\tvalue = val[0] + ',' + val[1];\n\t\t\treturn value\n\t\t}\n\t}\n\n}\n","import { Component, Input } from '@angular/core';\nimport { EcCurrencySymbolPipe } from \"../../../ec-pipe/ec-currency-symbol.pipe\";\n/**\n * Componente para manejar la vista del precio de un producto.\n */\n@Component({\n selector: 'app-price-ec',\n standalone: true,\n imports: [EcCurrencySymbolPipe],\n templateUrl: './price-ec.component.html',\n styleUrl: './price-ec.component.scss'\n})\nexport class PriceEcComponent {\n /**\n * Precio de un producto.\n */\n\t@Input() price: any;\n /**\n * Precio de venta de un producto.\n */\n\t@Input() saleprice: any;\n}\n","@if(saleprice){\n <!--With saleprice-->\n <div class=\"\">\n @if(price && price.split(' - ').length > 1){\n <div class=\"price text-center p-0 mx-0 mx-md-3\">\n <del class=\"text-center price\">\n {{ price.split(' - ')[0] | ecCurrencySymbol }}\n {{ price.split(' - ')[1] | ecCurrencySymbol }}\n </del>\n </div>\n }@else {\n <!--Simple Price Del-->\n <div class=\" text-center delete p-0 mx-0 mx-md-3\">\n <del class=\" text-center delete\">\n {{ price | ecCurrencySymbol }}</del>\n </div>\n }\n @if(saleprice && saleprice.split(' - ').length > 1){\n <div class=\"\">\n {{\n saleprice.split(' - ')[0] | ecCurrencySymbol\n }}\n {{\n saleprice.split(' - ')[1] | ecCurrencySymbol\n }}\n </div>\n } @else {\n <!--Simple saleprice-->\n <div class=\"text-center price p-0 mx-0 mx-md-3\">\n {{ saleprice | ecCurrencySymbol }}\n </div>\n }\n</div> \n}@else {\n <!--Only Price-->\n @if(price && price.split(' - ').length > 1){\n <div class=\"price\">\n {{ price.split(' - ')[0] | ecCurrencySymbol }} -\n {{ price.split(' - ')[1] | ecCurrencySymbol }}\n </div> \n } @else {\n <!--Simple price-->\n <div class=\"text-center price p-0 mx-0 mx-md-3\">\n {{ price | ecCurrencySymbol }}\n </div>\n }\n}","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { Product } from '../../interfaces';\nimport { CoreConstantsService } from '../../constants';\nimport { AnalyticsService } from '../../ec-services';\nimport { Router, RouterLink } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { PriceEcComponent } from \"../widgets-ec/price-ec/price-ec.component\";\n/**\n * Componente que se encarga de manejar un producto.\n * @class ProductEcComponent\n */\n@Component({\n\tselector: 'app-product-ec',\n\tstandalone: true,\n\timports: [CommonModule, PriceEcComponent, RouterLink],\n\ttemplateUrl: './product-ec.component.html',\n\tstyleUrl: './product-ec.component.scss'\n})\nexport class ProductEcComponent implements OnInit {\n\t/**\n\t * Datos del producto.\n\t */\n\t@Input({\n\t\trequired: true\n\t})\n\tproduct!: Product;\n\t/**\n\t * Se usa para saber si el producto es de tipo Box o no y definir la vista adecuada.\n\t */\n\t@Input() isProductBox:boolean = true;\n\t/**\n\t * Constantes del core\n\t */\n\t@Output() loaded = new EventEmitter<number>();\n\n\tngOnInit() {\n\t this.loaded.emit(this.product.id);\n\t}\n\tprivate consts:CoreConstantsService = inject(CoreConstantsService)\n\tprivate analyticsService: AnalyticsService = inject(AnalyticsService)\n\tprivate router:Router = inject(Router)\n\t/**\n\t * URL para las imagenes del producto.\n\t */\n\tpublic mediaUrl:string = this.consts.mediaUrl()\n}\n","@if(isProductBox){\n <div class=\"position-relative h-100\">\n <div class=\"marcas position-absolute w-100\">\n <span>20 %OFF</span>\n </div>\n <div>\n @if(product.picturesdefault){\n <img [src]=\"mediaUrl+product.picturesdefault[0]\" class=\"img-fluid mx-auto\" />\n }\n </div>\n <div class=\"d-flex flex-column justify-center align-items-center\">\n <h6 class=\"productName text-center\">{{product.name}}</h6> \n <p class=\"productID\">{{product.id}}</p>\n @if(product.shortdetails){\n <div class=\"shortdetails\" [innerHTML]=\"product.shortdetails\"></div>\n }\n @if(product.currentOption && product.currentOption.name){\n <p class=\"currentOption\" >{{product.currentOption.name}}</p>\n }\n </div>\n <div class=\"d-flex flex-column justify-center alig-items-center\">\n @if(true){\n <!--Servicio de auth para controlar si esta logueado o no-->\n <app-price-ec [price]=\"product.price\" [saleprice]=\"product.saleprice\" class=\"\" />\n }\n <button class=\"btn btn-primary\" routerLink=\"{{'/product/' + product.id}}\">Ver Producto</button>\n </div>\n </div>\n} @else {\n \n}\n","import { afterNextRender, Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, PLATFORM_ID, signal, TemplateRef } from '@angular/core';\nimport { BlockEcComponent } from '../../abstractions-components';\nimport { SwiperOptions } from 'swiper/types';\nimport { AnalyticsService } from '../../../ec-services';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\n// import function to register Swiper custom elements\nimport { register, SwiperContainer } from 'swiper/element/bundle';\nimport { ProductEcComponent } from \"../../product-ec/product-ec.component\";\n\nregister()\n/**\n * Componen para manejar los bloques de productos.\n * @extends {BlockEcComponent}\n * @class BlockProductsEcComponent\n */\n@Component({\n\tselector: 'app-block-products-ec',\n\tstandalone: true,\n\timports: [CommonModule, ProductEcComponent],\n\ttemplateUrl: './block-products-ec.component.html',\n\tstyleUrl: './block-products-ec.component.scss',\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class BlockProductsEcComponent extends BlockEcComponent {\n\t/**\n\t * Servicio de Analytics\n\t */\n\tprivate analyticsService: AnalyticsService = inject(AnalyticsService)\n\t/**\n\t * Signal utlizado para guarda el contenedor del carrusel\n\t */\n\tswiperElement = signal<SwiperContainer | null>(null)\n\t/**\n\t * Input que recibe un template para el producto.\n\t */\n\t@Input() appProduct: TemplateRef<any> | undefined;\n\t/**\n\t * Colección de productos.\n\t */\n\t@Input({\n\t\trequired: true\n\t}) products: any; // Product[];\n\t/**\n\t * Bloque principal que contiene los productos\n\t */\n\t@Input({\n\t\trequired: true\n\t}) meta: any;\n\t/**\n\t * Método original en: {@link BlockEcComponent}\n\t */\n\toverride swiperOptions = (): SwiperOptions => {\n\t\treturn {\n\t\t\tnavigation: true,\n\t\t\tbreakpoints: {\n\t\t\t\t0: {\n\t\t\t\t\tslidesPerView: 1\n\t\t\t\t},\n\t\t\t\t576: {\n\t\t\t\t\tslidesPerView: 2\n\t\t\t\t},\n\t\t\t\t768: {\n\t\t\t\t\tslidesPerView: 4,\n\t\t\t\t},\n\t\t\t\t992: {\n\t\t\t\t\tslidesPerView: 4,\n\t\t\t\t},\n\t\t\t\t1200: {\n\t\t\t\t\tslidesPerView: 4,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tprivate document?: Document;\n\tprivate platformId: any = inject(PLATFORM_ID)\n\n\t/**\n\t * Ejecuta el método `afterNextRender`para cargar las configuraciones necesarias \n\t * para el carrusel del banners. Esto debe ser asi debido a que ya debe estar presente\n\t * en el Dom el element `<swiper-container>` para poder configurarlo.\n\t */\n\tconstructor() {\n\t\tsuper()\n\t\tif (isPlatformBrowser(this.platformId)) {\n\t\t\tthis.document = document\n\t\t}\n\t\tafterNextRender(() => {\n\t\t\tconst swiperElemConstructor = this.document?.querySelector('#' + this.meta?.code)\n\t\t\tif (swiperElemConstructor) {\n\t\t\t\tObject.assign(swiperElemConstructor!, this.swiperOptions())\n\t\t\t\tthis.swiperElement.set(swiperElemConstructor as SwiperContainer)\n\t\t\t\tthis.swiperElement()?.initialize();\n\t\t\t}\n\t\t})\n\t}\n\t/**\n\t * Aplica el evento `select_promotion` junto con el banner que interactua.\n\t * @param banner \n\t */\n\tselectPromotion(item: any): void {\n\t\tthis.analyticsService.callEvent('select_promotion', item)\n\t}\n}\n","<section [ngClass]=\"trimClassBlock(meta.code) + ' container-fluid'\">\n\n <div class=\"blockProduct block-product\">\n @if(meta.name){\n <div class=\"row\">\n <div class=\"col-12 mt-4\">\n <h2 class=\"font-weight-normal font-gd\">\n <span>{{meta.name}}</span>\n </h2>\n </div>\n </div>\n }\n\n\n @if(meta.styles && meta.styles.carrousel == false){\n <div class=\"row \">\n @for (product of products; track $index) {\n <div [class]=\"'item '+ ' col-'+ (meta.styles.items?.sm) + ' col-md-' + (meta.styles.items?.md) + ' col-lg-' + (meta.styles.items?.lg) + ' px-2'\" [id]=\"$index\">\n <!-- verifica que si vienen un template para un custom appProduct llamado \"appProduct\" con un objeto \"product\"- sino usa por defecto el del core -->\n <ng-container *ngTemplateOutlet=\"appProduct ? appProduct : defaultAppProduct; context: {product:product}\"></ng-container> \n </div>\n }\n </div>\n } @else {\n <swiper-container init=\"false\" [id]=\"meta?.code\">\n @for (product of products; track $index) {\n <swiper-slide>\n <ng-container *ngTemplateOutlet=\"appProduct ? appProduct : defaultAppProduct; context: {product:product}\"></ng-container> \n </swiper-slide>\n }\n </swiper-container>\n }\n </div>\n</section>\n\n\n<!-- componente por defecto (tomara como producto el contexto pasado como \"product\") -->\n<ng-template #defaultAppProduct let-product=\"product\" > \n <app-product-ec [product]=\"product\"></app-product-ec>\n</ng-template>\n","import { Component, inject, Input, signal } from '@angular/core';\nimport { FormService, ToastService } from '../../../ec-services';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { firstValueFrom } from 'rxjs';\n\n@Component({\n\tselector: 'app-block-newsletter-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './block-newsletter-ec.component.html',\n\tstyleUrl: './block-newsletter-ec.component.scss'\n})\nexport class BlockNewsletterEcComponent {\n\t@Input({ required:true }) block:any;\n\t@Input() success_message:string | undefined;\n\t@Input() subject:string | undefined;\n\n\tprivate _contactFormService: FormService = inject(FormService)\n\tprivate _toastService:ToastService = inject(ToastService)\n\tprivate _formBuilder:FormBuilder = inject(FormBuilder)\n\n\tpublic loading:boolean = false;\n\n\tpublic form = signal<FormGroup>(\n\t\tthis._formBuilder.group({\n\t\t\tname: ['', []],\n email: ['', Validators.required],\n telephone: ['', []],\n subject: ['', []],\n body: ['', []],\n attachment: [''],\n\t\t\tcaptcha:['',[]],\n\t\t\tterms: ['', Validators.required]\n\t\t})\n )\n\n\tonSubmit(e:any):void{\n\t\tthis.loading = true;\n\t\te.preventDefault();\n\t\tthis.sendForm(this.form(), 'inquiry-sent');\n\t}\n\n\tsendForm(form:any, success_message:string){\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.form().get('name')?.value)\n this.sendValue('email') && formData.append('email', this.form().get('email')?.value)\n this.sendValue('telephone') && formData.append('telephone', this.form().get('telephone')?.value)\n this.sendValue('subject') && formData.append('subject', this.form().get('subject')?.value)\n this.sendValue('body') && formData.append('body', this.form().get('body')?.value)\n this.sendValue('attachments') && formData.append('attachment', this.form().get('attachment')?.value)\n\t\t\tfirstValueFrom(this._contactFormService.sendResponse(formData)).then(\n (res:any) => {\n this.form().reset()\n this._toastService.show(this.success_message || success_message);\n this.loading = false\n\n },\n (err:any) => {\n this._toastService.error('inquiry-error');\n this.loading = false\n }\n );\n } else {\n this._toastService.error('invalid-form');\n this.loading = false\n }\n }\n\n\tsendValue(key:any){\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","<p>block-newsletter-ec works!</p>\n","import { Component } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n\tselector: 'app-loading-full-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './loading-full-ec.component.html',\n\tstyleUrl: './loading-full-ec.component.scss'\n})\nexport class LoadingFullEcComponent {\n\n}\n","<div [class]=\"'d-flex w-100'\">\n <div class=\"w-100 h-100 d-flex flex-row justify-content-center align-items-center\">\n <div class=\"spinner-border text-dark spinner-color\" id=\"loading\" role=\"status\">\n <span class=\"visually-hidden\">{{ 'loading' }}</span><!-- | translate -->\n </div>\n </div>\n</div>","import { Component } from '@angular/core';\nimport { LoadingFullEcComponent } from '../loading-full-ec/loading-full-ec.component';\n\n@Component({\n selector: 'app-loading-section-ec',\n standalone: true,\n imports: [LoadingFullEcComponent],\n templateUrl: './loading-section-ec.component.html',\n styleUrl: './loading-section-ec.component.scss'\n})\nexport class LoadingSectionEcComponent {\n\n}\n","<div id=\"sectionLoading\" class=\"d-flex flex-column position-absolute top-0 opacity-75 bg-white w-100 h-100 justify-content-center align-items-center\">\n <app-loading-full-ec></app-loading-full-ec>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-loading-inline-ec',\n standalone: true,\n imports: [TranslateModule],\n templateUrl: './loading-inline-ec.component.html',\n styleUrl: './loading-inline-ec.component.scss'\n})\nexport class LoadingInlineEcComponent {\n @Input() type:'border' | 'grow' = 'border';\n}\n","<div class=\"loading-inline-container\">\n <div [class]=\"'spinner-'+type+' text-dark spinner-colo'\" id=\"loading\" role=\"status\">\n <span class=\"visually-hidden\">{{ 'loading' | translate }}</span>\n </div>\n</div>\n","import { Component, forwardRef, inject, Input, OnInit, Signal } from '@angular/core';\nimport { LoadingFullEcComponent } from \"../loading/loading-full-ec/loading-full-ec.component\";\nimport { RecaptchaModule} from \"ng-recaptcha-2\";\nimport { ReCaptchaService } from '../../../ec-services';\nimport { ControlValueAccessor, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n\tselector: 're-captcha-ec',\n\tstandalone: true,\n\timports: [LoadingFullEcComponent, RecaptchaModule, ReactiveFormsModule],\n\ttemplateUrl: './re-captcha-ec.component.html',\n\tstyleUrl: './re-captcha-ec.component.scss',\n\tproviders:[\n\t\t{\n\t\t\tprovide:NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => ReCaptchaEcComponent),\n\t\t\tmulti: true\n\t\t}\n\t]\n\n})\nexport class ReCaptchaEcComponent implements OnInit, ControlValueAccessor {\n\t/**\n\t * Formulario que contiene al captcha.\n\t \n\t@Input({required: true}) form!:any;*/\n\t/**\n\t * Clave para el captcha.\n\t */\n\t@Input() siteKey:string | undefined;\n\n\tprivate _recaptchaService: ReCaptchaService = inject(ReCaptchaService);\n\n\tpublic captcha:any;\n\n\tprivate onChange!:(value:string) => void;\n\tprivate onTouched!:() => void;\n\n\tngOnInit():void {\n\t\tthis._recaptchaService.recaptcha$.subscribe( res => {\n\t\t\tconsole.log('recaptcha', res);\n\t\t\tthis.captcha = res;\n\t\t\tthis.updateSiteKey();\n\t\t})\n\t}\n\t\n\tupdateSiteKey() {\n\t\tif(this.siteKey) this.captcha.siteKey = this.siteKey;;\n\t}\n\n\tresolved(captchaResponse:any){\n\t\t//this.form['recaptcha'] = captchaResponse;\n\t\tthis.onChange(captchaResponse);\n\t\tthis.onTouched();\n\t}\n\n\twriteValue(obj: any): void {\n\t\t//throw new Error('Method not implemented.');\n\t}\n\tregisterOnChange(fn: any): void {\n\t\tthis.onChange = fn;\n\t}\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onTouched = fn;\n\t}\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\t//throw new Error('Method not implemented.');\n\t}\n\n}\n","@if(captcha.siteKey){\n <re-captcha (resolved)=\"resolved($event)\" siteKey=\"{{captcha.siteKey}}\">\n </re-captcha>\n}@else {\n <app-loading-full-ec></app-loading-full-ec>\n}","import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { afterNextRender, afterRender, Component, ElementRef, inject, Input, OnInit, PLATFORM_ID, ViewChild } from '@angular/core';\n\ninterface Size2D { width: number; height: number; }\ntype Point2D = { x: number, y: number } | null;\n\n@Component({\n\tselector: '[app-magnizoom-ec]',\n\tstandalone: true,\n\timports: [CommonModule],\n\ttemplateUrl: './magnizoom-ec.component.html',\n\tstyleUrl: './magnizoom-ec.component.scss'\n})\nexport class MagnizoomEcComponent implements OnInit {\n\tprivate document:Document | null = null;\n private platformId = inject(PLATFORM_ID);\n\n\tprivate imageSrc:string='';\n @Input() set ImageSrc(value:string) { \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()\n\timageStyle!: { [x: string]: any; };\n @Input() imageClass: any;\n\n @ViewChild('mainCanvas', { static: true }) mainCanvasRef!: ElementRef;\n\n canvas!: HTMLCanvasElement;\n context!: CanvasRenderingContext2D | null;\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 if (isPlatformBrowser(this.platformId)) {\n this.document = inject(DOCUMENT); // Solo se inyecta en el navegador\n }\n\t\tafterRender(()=> {\n\t\t\tthis.initContext();\n\t\t\tthis.loadImage(this.imageSrc);\n\t\t})\n\t }\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\t\tif(this.document){\n\t\t\tthis.image = this.document.createElement('img');\n\t\t\tthis.image.onload = () => {\n\t\t\t\tthis.lensSize = { width: this.image.width / 2, height: this.image.height / 2 };\n\t\t\t\tsetTimeout(() => this.render());\n\t\t\t};\n\t\t\tthis.image.src = src;\n\t\t}\n }\n\n render() {\n\t\tif(this.context){\n\t\t\tthis.context.clearRect(0, 0, this.canvasWidth, this.canvasHeight); // clear canvas\n\t\t\tthis.context.lineWidth = 1; // border width\n\t\t\tthis.context.drawImage(this.image, 0, 0); // bg image\n\n\t\t\tif (this.mousePosition) {\n\t\t\t\tswitch (this.zoomMode) {\n\t\t\t\t\tcase 'LENS': this.renderLensMode(); break;\n\t\t\t\t\tcase 'COVER': this.renderCoverMode(); break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n }\n\n renderLensMode() {\n\t\tif(this.context){\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\t}\n\t}\n\n renderCoverMode() {\n const covertRect = this.getCoverRect();\n this.context && 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","<canvas #mainCanvas\n class=\"main-canvas\"\n [ngClass]=\"imageClass\"\n [ngStyle]=\"imageStyle\"\n [width]=\"canvasWidth\"\n [height]=\"canvasHeight\"\n (mouseleave)=\"onMouseLeave($event)\"\n (mouseenter)=\"onMouseEnterOrMove($event)\"\n (mousemove)=\"onMouseEnterOrMove($event)\"\n (wheel)=\"onMouseScroll($event)\">\n</canvas>\n","import { Component, inject, Input, signal } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators} from '@angular/forms';\nimport { BlocksService, FormService, ToastService } from '../../../ec-services';\nimport { Router } from '@angular/router';\nimport { BlockEcComponent } from '../../abstractions-components';\nimport { LoadingSectionEcComponent, ReCaptchaEcComponent } from '../../widgets-ec';\nimport { JsonPipe } from '@angular/common';\nimport { firstValueFrom } from 'rxjs';\n\n@Component({\n\tselector: 'app-block-form-contact-ec',\n\tstandalone: true,\n\timports: [ReactiveFormsModule, LoadingSectionEcComponent, ReCaptchaEcComponent],\n\ttemplateUrl: './block-form-contact-ec.component.html',\n\tstyleUrl: './block-form-contact-ec.component.scss'\n})\nexport class BlockFormContactEcComponent extends BlockEcComponent {\n\t@Input({ required:true }) block:any;\n\t@Input() success_message:string | undefined;\n\t@Input() redirect:boolean = true;\n\t@Input() subject:string | undefined;\n\n\tprivate _contactFormService: FormService = inject(FormService)\n\tprivate _toastService:ToastService = inject(ToastService)\n\tprivate _formBuilder:FormBuilder = inject(FormBuilder)\n\tprivate _router:Router = inject(Router)\n\t\n\tprotected form_data:any = new FormData();\n\n\tpublic loading:boolean = false;\n\n\tpublic form = signal<FormGroup>(\n\t\tthis._formBuilder.group({\n\t\t\tname: ['', []],\n email: ['', Validators.required],\n telephone: ['', []],\n subject: ['', []],\n body: ['', []],\n attachment: [''],\n recaptcha: [null, Validators.required], //testear este cambio de nombre\n\t\t})\n )\n\n\tonSubmit(e:any):void{\n\t\tthis.loading = true;\n\t\te.preventDefault();\n\t\tthis.sendForm(this.form(), 'inquiry-sent');\n\t}\n\n\tsendForm(form:any, success_message:string){\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.form().get('name')?.value)\n this.sendValue('email') && formData.append('email', this.form().get('email')?.value)\n this.sendValue('telephone') && formData.append('telephone', this.form().get('telephone')?.value)\n this.sendValue('subject') && formData.append('subject', this.form().get('subject')?.value)\n this.sendValue('body') && formData.append('body', this.form().get('body')?.value)\n this.sendValue('attachments') && formData.append('attachment', this.form().get('attachment')?.value)\n\t\t\tfirstValueFrom(this._contactFormService.sendResponse(formData)).then(\n (res:any) => {\n this.form().reset()\n this._toastService.show(this.success_message || success_message);\n this.loading = false\n this.redirect && this._router.navigateByUrl('/home');\n\n },\n (err:any) => {\n this._toastService.error('inquiry-error');\n this.loading = false\n }\n );\n } else {\n this._toastService.error('invalid-form');\n this.loading = false\n }\n }\n\n\tsendValue(key:any){\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","@if(block){\n<div [class]=\"trimClassBlock(block.code) + ' container-fluid'\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12 col-md-12\">\n <div class=\"row w-100 m-auto\">\n <h5>{{block.name || 'Dejanos tu consulta'}}</h5>\n <p class=\"w-100\">{{ block.description || 'Completa el siguiente formulario y responderemos tu consulta a la brevedad' }}</p>\n </div>\n <form [formGroup]=\"form()\" (submit)=\"onSubmit($event)\" class=\"position-relative\" ><!-- (submit)=\"toastCompleteForm($event)\" -->\n @if(block.sendName){\n <div class=\"form-group\">\n <label class=\"sr-only\" for=\"nombre\">Nombre</label>\n <input formControlName=\"name\" type=\"text\"\n class=\"form-control form-control-sm required\" id=\"nombre\" placeholder=\"Nombre\">\n </div>\n }\n @if(block.sendEmail){\n <div class=\"form-group\">\n <label class=\"sr-only\" for=\"mail\">Email</label>\n <input formControlName=\"email\" type=\"email\"\n class=\"form-control form-control-sm required\" id=\"mail\" placeholder=\"Email\">\n </div>\n }\n @if(block.sendTelephone){\n <div class=\"form-group\">\n <label class=\"sr-only\" for=\"telefono\">Teléfono</label>\n <input formControlName=\"telephone\" type=\"text\"\n class=\"form-control form-control-sm required\" id=\"telefono\" placeholder=\"Teléfono\">\n </div>\n }\n @if(block.sendSubject){\n <div class=\"form-group\">\n <label class=\"sr-only\" for=\"subject\">Asunto</label>\n <input formControlName=\"subject\" type=\"text\"\n class=\"form-control form-control-sm required\" id=\"subject\" placeholder=\"Asunto\">\n </div>\n }\n @if(block.sendBody){\n <div class=\"form-group\">\n <label class=\"sr-only\" for=\"mensaje\">Mensaje</label>\n <textarea formControlName=\"body\" name=\"mensaje\" id=\"mensaje \" cols=\"30\"\n rows=\"5\" placeholder=\"Dejanos tu mensaje\"\n class=\"form-control form-control-sm required\"></textarea>\n </div>\n }\n <div class=\"boxContenidoCapcha mb-3\">\n <div class=\"contenedorCaptcha\">\n <re-captcha-ec formControlName=\"recaptcha\"></re-captcha-ec>\n </div>\n </div>\n\n <button type=\"submit\" class=\"btn btn-dark text-uppercase px-5\"\n [disabled]=\"form().invalid\">ENVIAR</button>\n @if(loading){\n <app-loading-section-ec />\n }\n </form>\n </div>\n\n </div>\n</div>\n}","import { Component, inject, Input, OnInit, TemplateRef } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BlocksService } from '../../ec-services';\nimport { AsyncPipe, JsonPipe } from '@angular/common';\nimport { IBlock } from '../../interfaces';\nimport { BlockBannerFullEcComponent } from './block-banner-full-ec/block-banner-full-ec.component';\nimport { BlockBannerBoxEcComponent } from \"./block-banner-box-ec/block-banner-box-ec.component\";\nimport { BlockHtmlEcComponent } from \"./block-html-ec/block-html-ec.component\";\nimport { ApiConstantsService } from '../../constants';\nimport { BlockProductsEcComponent } from \"./block-products-ec/block-products-ec.component\";\nimport { BlockNewsletterEcComponent } from \"./block-newsletter-ec/block-newsletter-ec.component\";\nimport { BlockFormContactEcComponent } from \"./block-form-contact-ec/block-form-contact-ec.component\";\n/**\n * Componente que es utilizado para manejar los distintos tipos\n * de bloques y distribuirlos por la aplicación.\n * @implements {OnInit}\n * @class BlocksEcComponent\n */\n@Component({\n\tselector: 'app-blocks-ec',\n\tstandalone: true,\n\timports: [\n\t\tAsyncPipe,\n\t\tJsonPipe,\n\t\tBlockBannerFullEcComponent,\n\t\tBlockBannerBoxEcComponent,\n\t\tBlockHtmlEcComponent,\n\t\tBlockProductsEcComponent,\n\t\tBlockNewsletterEcComponent,\n\t\tBlockFormContactEcComponent\n\t],\n\ttemplateUrl: './blocks-ec.component.html',\n\tstyleUrl: './blocks-ec.component.scss'\n})\nexport class BlocksEcComponent implements OnInit {\n\t/**\n\t * Servicio de Bloques\n\t */\n\tprivate _blocksService = inject(BlocksService);\n\t/**\tprivate _blocksService = inject(BlocksService);\n\n\t * Constantes de la API\n\t */\n\tprivate _apiConstants = inject(ApiConstantsService);\n\t/**\n\t * Observable de bloques\n\t */\n\tpublic blocks$: Observable<IBlock[]> | undefined;\n\t/**\n\t * Nombre de la sección que alberga a los bloques.\n\t */\n\tprivate _strsection: string | null = null;\n\t/**\n\t * Colección de Templates para reemplazar en los distintos tipos\n\t * de bloque por bloques locales generados en el frontend.\n\t */\n\t@Input() templates!: TemplateRef<any>;\n\t/**\n\t * Indicador para cuando se esten cargando los bloques.\n\t */\n\t@Input() show_loading: boolean = false;\n\t/**\n\t * Nombre de la sección del bloque. \n\t */\n\t@Input({\n\t\trequired: true,\n\t}) set section(value: string | null) {\n\t\tthis._strsection = value;\n\t\tthis.loadBlocks();\n\t}\n\t@Input() blockFilters: string[] | null = null;\n\tconstructor() { }\n\n\tngOnInit(): void { }\n\t/**\n\t * Obtiene el contenido html de un bloque, este método es usado cuando el bloque es de tipo **HTML**\n\t * @param block \n\t * @returns \n\t */\n\tgetHTMLContent = (block: IBlock) => block.translations && block.translations[this._apiConstants.LOCALE].content;\n\n\tisNewsletter(block: any): boolean { return block.contactForm.code.includes('news') };\n\n\tshowBlock = (block: IBlock) => this.blockFilters ? this.blockFilters.includes(block.code) : true\n\n\t/**\n * Carga los bloques de la sección actual.\n */\n\tprivate loadBlocks(): void {\n\t\tif (this._strsection) {\n\t\t\tthis.blocks$ = this._blocksService.getBlocks(this._strsection);\n\t\t}\n\t}\n}\t\n","@if(blocks$ | async; as blocks){\n @if(blocks.length > 0){\n <div class=\"container-fluid px-0\">\n <div class=\"row\">\n @for (block of blocks; track $index) {\n @switch (block.contentType) {\n @case ('banner') {\n @switch(block.design){\n @case ('full') {\n <app-block-banner-full-ec [banners]=\"block.banners\" [meta]=\"block\" />\n }\n @case ('boxes') {\n <app-block-banner-box-ec [banners]=\"block.banners\" [meta]=\"block\"/>\n }\n }\n }\n @case ('html') {\n @if(showBlock(block)){\n <app-block-html-ec [html_content]=\"getHTMLContent(block)\" />\n }\n }\n @case ('products') {\n <app-block-products-ec [products]=\"block.products?.items\" [meta]=\"block\" />\n }\n @case ('contact_form') {\n @if(isNewsletter(block)){\n <app-block-newsletter-ec [block]=\"block.contactForm\" />\n } @else {\n <app-block-form-contact-ec [block]=\"block.contactForm\" />\n }\n }\n }\n }\n </div>\n </div>\n }@else {\n <p>Loading... 2</p>\n }\n}@else {\n<p>Loading...</p>\n}","import { afterNextRender, Component, HostListener, inject, Input, OnInit, PLATFORM_ID, signal } from '@angular/core';\nimport { DefaultFilter, FilterType, PaginationSettings, Product } from '../../interfaces';\nimport { AuthService, FiltersService, OptionsService, ProductsService } from '../../ec-services';\nimport { ActivatedRoute } from '@angular/router';\nimport { CoreConstantsService } from '../../constants';\nimport { combineLatest, forkJoin, map, Observable, take } from 'rxjs';\nimport { Filter } from '../../classes';\nimport { InfiniteScrollDirective } from \"ngx-infinite-scroll\";\nimport { isPlatformBrowser } from '@angular/common';\n@Component({\n\tselector: 'lib-collection-ec',\n\tstandalone: true,\n\timports: [InfiniteScrollDirective],\n\ttemplateUrl: './collection-ec.component.html',\n\tstyleUrl: './collection-ec.component.scss'\n})\nexport class CollectionEcComponent implements OnInit {\n\n\tprotected _productsService: ProductsService = inject(ProductsService)\n\tprotected _activeRoute: ActivatedRoute = inject(ActivatedRoute)\n\tprotected _optionsService: OptionsService = inject(OptionsService)\n\n\tpublic params$ = this._activeRoute.params\n\t//public ready = this._optionsService.ready\n\tpublic queryParams$ = this._activeRoute.queryParams\n\tpublic products$ = this._productsService.products$\n\t//public products$ = []\n\n\tpublic authService: AuthService = inject(AuthService)\n\tpublic constanst: CoreConstantsService = inject(CoreConstantsService)\n\n\tpublic products: Product[] = [];\n\tpublic defaultFilters: DefaultFilter[] = [];\n\tpublic loading:Boolean = false;\n\tpublic countProducts = signal<number>(0)\n\tprivate loaded = false;\n\n\t@Input() optionsFilters: FilterType[] = ['all'];\n\n\tfilters_sort:Filter[] = [];\n\n\tprivate _filtersService: FiltersService = inject(FiltersService)\n public filters$: Observable<Filter[]> = this._filtersService.filters$;\n\tpublic ready$: Observable<boolean> = this._filtersService.ready$;\n\n\tprivate window?:Window;\n\n\tngOnInit(): void {\n\t \tthis.getProducts();\n\t\tthis.window?.scroll(0, 0)\n\t}\n\n\t//protected readonly questions = signal<Question[]>([]);\n\tprivate total = 0;\n\tprivate platformId: any = inject(PLATFORM_ID)\n\n\tconstructor() {\n\t\tif (isPlatformBrowser(this.platformId)) {\n\t\t\tthis.window = window\n\t\t\t\n\t\t}\n\t}\n\n\tgetProducts(): void {\n\t\tcombineLatest([this.params$, this.queryParams$]).subscribe({\n\t\t\tnext: ([params, queryParams]) => {\n\t\t\t\tconst paginationSettings:PaginationSettings = {\n\t\t\t\t\tlatest:true,\n\t\t\t\t\tlimit:10,\n\t\t\t\t\ttype: params['type'] || null,\n\t\t\t\t\tvalue: params['value'] || null\n\t\t\t\t}\n\t\t\t\t//console.log(ready,\"actualizar\")\n\t\t\t\tconsole.log(params['type'], params['value'])\n\t\t\t\t/* console.log(paginationSettings) */\n\t\t\t\tthis._productsService.getProductsForFilter(paginationSettings, queryParams[\"search\"]);\n\t\t\t}\n\t\t})\n\t}\n\n\tonScroll() {\n\t\tthis.loading = true;\n this._productsService.updateProducts()\n\t }\n\n}\n","<section class=\"container-xl mb-5\">\n <div class=\"row m-0 p-0\">\n <div class=\"d-none d-lg-block col-3\">\n <!--Filtros-->\n </div>\n\n <div class=\"col-12 col-lg-9 mt-2 p-0\">\n <div class=\"container\">\n <!-- @for(['a', 'b', 'c', 'd'] as product){\n\n } -->\n </div>\n </div>\n\n </div>\n</section>\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { FiltersService } from '../../ec-services';\nimport { Filter } from '../../classes';\nimport { FilterElement } from '../../interfaces';\n//import { FilterElement } from ';\n\n@Component({\n\tselector: 'app-filters-sort-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './filters-sort-ec.component.html',\n\tstyleUrl: './filters-sort-ec.component.scss'\n})\nexport class FiltersSortEcComponent {\n\tprivate _filtersService: FiltersService = inject(FiltersService);\n\tpublic filters: Filter[] = [];\n\tpublic filter$ = this._filtersService.filters$;\n\t//@Input() filters: Filter[] = [];\n\t@Output() changeFilter = new EventEmitter();\n\n\tconstructor() {\n\t\tthis.filter$.subscribe( res => {\n\t\t\tthis.filters = this._filtersService.getSpecificFilters(['sort'])\n\t\t\t//console.log(this.filters);\n\t\t})\n\t}\n\n\t/*Obtiene el filtro elegido en el select, lo pasa al setSelect\n para que se marque seleccionado*/\n onSelect(event:any,filter:FilterElement[]){\n //console.log(filter)\n const selectedOption = filter\n .flatMap(category => category.children)\n .filter(option => option?.code === event.target.value)\n .pop()\n selectedOption && this._filtersService.setFilterSelected(this.filters[0], selectedOption)\n }\n\n /* Retornar los filtros autorizados para el usuario logueado */\n /* filtersNotAuth = (filters, ...code) => {\n //console.log(this.filters)\n if (!this.authService.isAuthenticated()) {\n filters = filters.filter(attr => code.indexOf(attr['code']) >= 0)\n this.filters[0].data = filters\n }\n return filters\n } */\n\n}\n","<p>filters-sort works!</p>\n","import { Component, EventEmitter, inject, Input, Output, signal } from '@angular/core';\nimport { LoadingSectionEcComponent } from '../../widgets-ec';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { Router, RouterLink } from '@angular/router';\nimport { AuthService, ToastService } from '../../../ec-services';\nimport { UserRoleType } from '../../../interfaces';\nimport { firstValueFrom } from 'rxjs';\nimport { JsonPipe } from '@angular/common';\n\n@Component({\n\tselector: 'app-login-form-ec',\n\tstandalone: true,\n\timports: [LoadingSectionEcComponent, ReactiveFormsModule, RouterLink, JsonPipe],\n\ttemplateUrl: './login-form-ec.component.html',\n\tstyleUrl: './login-form-ec.component.scss'\n})\nexport class LoginFormEcComponent {\n\tprivate _authService:AuthService = inject(AuthService);\n\tprivate _formBuilder:FormBuilder = inject(FormBuilder);\n\tprivate _toastService:ToastService = inject(ToastService);\n\tprivate _router:Router = inject(Router);\n\t/**\n\t * Parametro para indicar si tras loguear\n\t * debe redireccionar o no.\n\t */\n\t@Input() redirect:boolean = true;\n\t/**\n\t * Parametro para indicar a donde redireccionar.\n\t */\n\t@Input() redirectTo:string = '/';\n\t@Output() ready = new EventEmitter();\n\t/**\n\t * Muestra si esta cargando o no.\n\t */\n\tpublic loading: boolean = false;\n\tpublic loggedIn: boolean = false;\n\t/**\n\t * Signal que guarda el formulario de login.\n\t */\n\tpublic loginForm: any = signal<FormGroup>(\n\t\tthis._formBuilder.group({\n\t\t\tusername: ['', Validators.required],\n\t\t\tpassword: ['', Validators.required]\n\t\t})\n\t);\n\t/**\n\t * Loguea al usuario en la plataforma.\n\t * @param $event \n\t * @param withRoles \n\t * @returns \n\t */\n\tpublic login($event: Event, withRoles: UserRoleType[] = []){\n\t\t$event.preventDefault();\n\t\tthis.loading = true;\n\t\tif(!this.loginForm().valid){\n\t\t\tthis._toastService.show('login-form-incomplete')\n\t\t\tthis.loading = false;\n\t\t\treturn;\n\t\t}\n\t\tfirstValueFrom(this._authService.login(this.loginForm().value, withRoles)).then(\n\t\t\t(res:any) => {\n\t\t\t\tconsole.log(res);\n\t\t\t\tif(res == 'ok'){\n\t\t\t\t\tthis.ready.emit(this.loginForm().value.username);\n\t\t\t\t\tthis.loggedIn = true;\n\t\t\t\t\tthis.redirect && this.redirectHome();\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(res == 'error'){\n\t\t\t\t\t\tthis._toastService.error('invalid-credentials')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.loading = false;\n\t\t\t},\n\t\t\t(err:any) => {\n\t\t\t\tthis.loading = false;\n\t\t\t}\n\t\t)\n\t}\n\t/**\n\t * Si el servicio de auth tiene configurado a donde volver, se ejecutar ese caso.\n\t * De lo contrario redirige al contenido de la variable `redirectTo`.\n\t */\n\tredirectHome(){\n const resolverFunction = this._authService.getHomeResolver()\n resolverFunction\n ? resolverFunction()\n : this._router.navigateByUrl(this.redirectTo)\n }\n\n}\n","<div class=\"d-flex flex-column position-relative\">\n <h1 class=\"right-line ff-ubuntu-light mb-2\"><span>Ingresar</span></h1>\n <p class=\"ff-ubuntu-light font-sm pr-4\">\n Si ya estás registrado. Ingresa en tu cuenta con tu email y la\n contraseña adecuada.\n </p>\n <div class=\"w-md-50 w-100 text-center\">\n <form [formGroup]=\"loginForm()\" (submit)=\"login($event)\">\n <input class=\"form-control mb-4 radius-0\" type=\"email\" formControlName=\"username\"\n placeholder=\"Correo Electrónico\">\n <input class=\"form-control mb-4 radius-0\" type=\"password\" formControlName=\"password\"\n placeholder=\"Contraseña\">\n\n <div class=\"row d-flex flex-column\">\n <div class=\"col-12\">\n <button type=\"submit\"\n class=\"bg-gray border-0 px-4 py-2 color-white ff-ubuntu-light\">INGRESAR</button>\n </div>\n <div class=\"col-12 d-flex justify-content-center align-items-center\">\n <a [routerLink]=\"'/auth/forgot-password'\" class=\"font-md ff-ubuntu-light\">\n ¿Olvidó su contraseña?\n </a>\n </div>\n </div>\n </form>\n </div>\n @if(loading){\n <app-loading-section-ec></app-loading-section-ec>\n }\n</div>","import { Component } from '@angular/core';\nimport { LoginFormEcComponent } from \"./login-form-ec/login-form-ec.component\";\n\n@Component({\n selector: 'app-auth-ec',\n standalone: true,\n imports: [LoginFormEcComponent],\n templateUrl: './auth-ec.component.html',\n styleUrl: './auth-ec.component.scss'\n})\nexport class AuthEcComponent {\n\n}\n","<div class=\"container-xl\">\n <div class=\"row\">\n <div class=\"col-md-6 col-12\">\n <app-login-form-ec />\n </div>\n <div class=\"col-md-6 col-12\">\n \n </div>\n </div>\n</div>\n","import { Component, inject, signal } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { LoadingInlineEcComponent } from \"../../widgets-ec/loading\";\nimport { firstValueFrom } from 'rxjs';\nimport { AuthService, ToastService } from '../../../ec-services';\n\n@Component({\n\tselector: 'app-forgot-password-ec',\n\tstandalone: true,\n\timports: [TranslateModule, ReactiveFormsModule, LoadingInlineEcComponent],\n\ttemplateUrl: './forgot-password-ec.component.html',\n\tstyleUrl: './forgot-password-ec.component.scss'\n})\nexport class ForgotPasswordEcComponent {\n\tprivate _formBuilder: FormBuilder = inject(FormBuilder);\n\tprivate _authService: AuthService = inject(AuthService);\n\tprivate _toastService: ToastService = inject(ToastService);\n\t/**\n\t * Para indicarle a la vista que se realizo con exito la petición\n\t */\n\tpublic ready: boolean = false;\n\t/**\n\t * Para mostrar el spinner.\n\t */\n\tpublic loading: boolean = false;\n\n\t/**\n\t * Contiene el formulario.\n\t */\n\tpublic form:FormGroup;\n\n\tconstructor(){\n\t\tthis.form = this._formBuilder.group({\n\t\t\temail: ['', [Validators.required, Validators.email]],\n\t\t})\n\t}\n\n\t/**\n\t * Genera una petición al backend para recuperar la contraseña.\n\t * @param event \n\t */\n\trecoverPassword = (event:Event) => {\n\t\tevent.preventDefault();\n\t\tthis.loading = true;\n\t\tfirstValueFrom(this._authService.recoverPassword(this.form.value.email))\n\t\t\t.then((res:any) => {\n\t\t\t\tthis.ready = true\n\t\t\t}).catch((res:any) => {\n\t\t\t\t(!res || res.error)\n\t\t\t\t? this._toastService.show('non-existent-email')\n\t\t\t\t: this._toastService.show(res.error);\n\t\t\t}).finally(() => this.loading = false)\n\t}\n}\n","<div class=\"container\" id=\"passReset\">\n @if(!ready){\n <div>\n <form [formGroup]=\"form\" (submit)=\"recoverPassword($event)\" class=\"row justify-content-center\">\n <div class=\"col-12 col-md-10 text-center\">\n <h3>{{ 'set-forgot-email' | translate }}</h3>\n <div class=\"element-container\">\n <input type=\"email\" class=\"form-control\" formControlName=\"email\" />\n </div>\n <button class=\"btn btn-primary btn-passreset my-2\" type=\"submit\" [disabled]=\"form.invalid\">{{ 'recover-password' | translate\n }}</button>\n @if(loading)\n {\n <app-loading-inline-ec />\n }\n </div>\n </form>\n </div>\n } @else {\n <div class=\"row d-flex justify-content-center\">\n <div class=\"col-12 col-md-8\">\n <div class=\"element-container text-center\">\n <h3>{{ 'mail-sent' | translate }}</h3>\n </div>\n <div class=\"element-container text-center\">\n <h5 class=\"center-text\">{{ 'check-your-email' | translate }}</h5>\n </div>\n </div>\n </div>\n }\n</div>","import { UpperCasePipe } from '@angular/common';\nimport { Component, inject, OnInit } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AuthService } from '../../../ec-services';\nimport { ActivatedRoute } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\n@Component({\n\tselector: 'app-confirm-account-ec',\n\tstandalone: true,\n\timports: [TranslateModule, UpperCasePipe],\n\ttemplateUrl: './confirm-account-ec.component.html',\n\tstyleUrl: './confirm-account-ec.component.scss'\n})\nexport class ConfirmAccountEcComponent implements OnInit {\n\n\tprivate _authService: AuthService = inject(AuthService)\n\tprivate _activedRoute: ActivatedRoute = inject(ActivatedRoute)\n\n\tpublic ok:boolean = false;\n\tpublic error:boolean = false;\n\n\tngOnInit(): void {\n\t\tconst token = this._activedRoute.snapshot.queryParams['token'];\n\t\tfirstValueFrom(this._authService.confirmAccount(token))\n\t\t\t.then( res => {\n\t\t\t\tthis.ok = true;\n\t\t\t}).catch( res => {\n\t\t\t\tthis.error = true;\n\t\t\t});\n\t}\n\n\n}\n","<div class=\"mt-5 mb-5\">\n <div class=\"row\">\n <div class=\"col-md-12 col-12 text-center\">\n <h4 class=\"confirm-title text-white py-3 text-uppercase d-inline-block\">\n {{ ('thanks-for-register' | translate) | uppercase }}</h4>\n </div>\n </div>\n \n \n <div class=\"row\">\n <div class=\"col-md-12 col-12 text-center\">\n <h4>{{ 'thanks-for-register-detail' | translate }}</h4>\n <a routerLink=\"/auth/login\">\n <button class=\"btn btn-primary my-4\" type=\"button\">{{ 'login' | translate |\n uppercase }}</button>\n </a>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { AnalyticsService, AuthService, ToastService } from '../../../ec-services';\nimport { Router } from '@angular/router';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { LoadingSectionEcComponent } from \"../../widgets-ec/loading\";\nimport { firstValueFrom } from 'rxjs';\n\n@Component({\n\tselector: 'app-register-form-ec',\n\tstandalone: true,\n\timports: [ReactiveFormsModule, LoadingSectionEcComponent],\n\ttemplateUrl: './register-form-ec.component.html',\n\tstyleUrls: ['./register-form-ec.component.scss']\n})\nexport class RegisterFormEcComponent {\n\tprivate _authService: AuthService = inject(AuthService);\n\tprivate _toastService: ToastService = inject(ToastService);\n\tprivate _router: Router = inject(Router);\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\n\tprivate _formBuilder: FormBuilder = inject(FormBuilder);\n\t /**\n * Indica si debe redireccionar o se queda en la misma pantalla\n */\n\t@Input() redirect:boolean = true;\n\t/**\n * Para que se puede capturar el estado de la petición de registro.\n */\n\t@Output() ready = new EventEmitter();\n\t/**\n\t * Contiene el formulario de registro.\n\t */\n\tpublic form: FormGroup;\n\t/**\n\t * Para indicar que se esta procesando la solicitud de registro.\n\t */\n\tpublic loading: boolean = false;\n\t/**\n\t * Para indicar el exito de la solicitud de registro.\n\t */\n\tpublic success: boolean = false;\n\n\tconstructor() {\n\t\tthis.form = this._formBuilder.group({\n\t\t\tfirstName: ['', Validators.required],\n\t\t\tlastName: ['', Validators.required],\n\t\t\temail: ['', [Validators.required, Validators.email]],\n\t\t\tplainPassword: ['', Validators.required],\n\t\t\tplainPassword2: ['', Validators.required],\n\t\t\tnewsletter: [false],\n\t\t\tterms: ['', Validators.required],\n\t\t});\n\t}\n\t/**\n\t * Registra un usuario.\n\t * @param event \n\t * @returns \n\t */\n\tregister(event: Event){\n\t\tevent.preventDefault();\n\t\tthis.loading = true;\n\t\tif (!this.form.valid) {\n this._toastService.show('fields-incomplete');\n this.loading = false\n return;\n };\n\t\tif (this.form.value.plainPassword != this.form.value.plainPassword2) {\n this._toastService.show('mismatched-password');\n this.loading = false\n return;\n }\n\t\tif(this.form.valid){\n\t\t\tfirstValueFrom(this._authService.singUp(this.form.value)).then(\n\t\t\t\tres => {\n\t\t\t\t\tthis.loading = false\n\t\t\t\t\tthis._toastService.success('register-ok')\n\t\t\t\t\tthis._analyticsService.callEvent('sign_up', {\n\t\t\t\t\t\tfirstName: this.form.value.firstName,\n\t\t\t\t\t\tlastName: this.form.value.lastName,\n\t\t\t\t\t\temail: this.form.value.email\n\t\t\t\t\t})\n\t\t\t\t\tthis.success = true\n\t\t\t\t\tthis.ready.emit(true)\n\t\t\t\t\tif(this.redirect){\n\t\t\t\t\t\tthis._router.navigateByUrl('home')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terr => {\n\t\t\t\t\tthis.loading = false\n\t\t\t\t\tif(err.status == 400){\n\t\t\t\t\t\tthis._toastService.show('email-already-registered')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._toastService.error('email-register-error')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t} else {\n\t\t\tthis._toastService.show('invalid-form')\n\t\t\tthis.loading = false\n\t\t}\n\t}\n\n}\n","<div class=\"w-100 pl-md-5 position-relative\" id=\"register\">\n <div class=\"py-2\">\n <h5>CREAR CUENTA</h5>\n </div>\n <form id=\"registro\" [formGroup]=\"form\" (submit)=\"register($event)\">\n <div class=\"form-group\">\n <label for=\"\" class=\"form-label\">NOMBRE</label>\n <input formControlName=\"firstName\" class=\"form-control rounded-0\" type=\"text\" placeholder=\"Nombre\">\n </div>\n <div class=\"form-group\">\n <label for=\"\" class=\"form-label\">APELLIDO</label>\n <input formControlName=\"lastName\" class=\"form-control rounded-0\" type=\"text\" placeholder=\"Apellido\">\n </div>\n <div class=\"form-group\">\n <label for=\"\" class=\"\">CORREO ELECTRONICO</label>\n <input formControlName=\"email\" email required class=\"form-control rounded-0\" type=\"email\"\n placeholder=\"Correo electrónico\">\n </div>\n <div class=\"form-group\">\n <label for=\"\" class=\"form-label\">CONTRASEÑA</label>\n <input formControlName=\"plainPassword\" required class=\"form-control rounded-0\" type=\"password\"\n placeholder=\"Contraseña\">\n </div>\n <div class=\"form-group\">\n <label for=\"\" class=\"form-label\">REPETIR CONTRASEÑA</label>\n <input formControlName=\"plainPassword2\" required class=\"form-control rounded-0\" type=\"password\"\n placeholder=\"Repetir contraseña\">\n </div>\n\n <div class=\"custom-control d-flex flex-row form-check custom-checkbox mr-sm-2 mt-4 mb-2\">\n <input type=\"checkbox\" formControlName=\"terms\" required class=\"custom-control-input form-check-input\" name=\"Color2\"\n id=\"Color2\">\n <label class=\"custom-control-label ff-ubuntu-light font-sm form-check-label\" for=\"Color2\"> He\n leído y acepto las políticas de privacidad y los términos y\n condiciones</label>\n </div>\n\n <div class=\"custom-control d-flex flex-row form-check custom-checkbox mr-sm-2 mb-4\">\n <input type=\"checkbox\" formControlName=\"newsletter\" class=\"custom-control-input form-check-input\" name=\"Color3\" id=\"Color3\">\n <label class=\"custom-control-label form-check-label ff-ubuntu-light font-sm\" for=\"Color3\">\n Suscripción al Newsletter</label>\n </div>\n\n <div class=\"row\">\n <div class=\"col-12\">\n <button [disabled]=\"form.invalid\" type=\"submit\"\n class=\"btn btn-primary px-5 py-2 h-fit\">CREAR</button>\n </div>\n </div>\n </form>\n @if(loading){\n <app-loading-section-ec />\n }\n \n</div>\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { LoadingSectionEcComponent } from \"../../widgets-ec/loading\";\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AuthService, FormService, ToastService } from '../../../ec-services';\nimport { AsyncPipe, JsonPipe } from '@angular/common';\nimport { Router, RouterLink } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\n@Component({\n selector: 'app-register-wholesaler-form-ec',\n standalone: true,\n imports: [LoadingSectionEcComponent, ReactiveFormsModule, TranslateModule, AsyncPipe, JsonPipe, RouterLink],\n templateUrl: './register-wholesaler-form-ec.component.html',\n styleUrl: './register-wholesaler-form-ec.component.scss'\n})\nexport class RegisterWholesalerFormEcComponent {\n private _formBuilder: FormBuilder = inject(FormBuilder)\n private _formService: FormService = inject(FormService)\n private _toastService: ToastService = inject(ToastService)\n private _authService: AuthService = inject(AuthService)\n private _router: Router = inject(Router)\n /**\n * Indica si debe redireccionar o se queda en la misma pantalla\n */\n @Input() redirect: boolean = true;\n /**\n * Para que se puede capturar el estado de la petición de registro.\n */\n @Output() ready = new EventEmitter();\n /**\n * Contiene los paises y sus datos\n */\n public countries$ = this._formService.getCountriesData();\n /**\n * Contiene las provincias\n */\n public provinces$ = this._formService.provinces$;\n /**\n * Contiene los tipos de documentos.\n */\n public documentTypes$ = this._formService.documentTypes$;\n /**\n * Contiene el formulario de registro.\n */\n public form: FormGroup;\n /**\n * Para indicar cuando se esta procesando el registro.\n */\n public loading: boolean = false;\n /**\n * Para indicar cuando se proceso con exito el registro.\n */\n public success: boolean = false;\n\n constructor() {\n this.form = 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: [''],\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 }\n /**\n * Registra un usuario.\n * @param event \n * @returns \n */\n register(event: Event) {\n event.preventDefault()\n this.loading = true;\n if (!this.form.valid) {\n this._toastService.show('fields-incomplete');\n this.loading = false\n return;\n };\n if (this.form.valid) {\n firstValueFrom(this._authService.signUpWholesaler(this.form.value)).then(\n (res: any) => {\n this.loading = false;\n this._toastService.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: any) => {\n this.loading = false;\n if (error.status == 400) {\n this._toastService.show('email-already-registered');\n } else {\n this._toastService.show('email-register-error');\n }\n }\n )\n } else {\n this._toastService.show('invalid-form');\n this.loading = false;\n }\n }\n /**\n * Captura el evento de cuando cambia un pais en el `<select>`\n * @param event \n */\n onCountrySelected = (event: any) => {\n const { value } = event.target;\n //$('#selectOpPais').attr('disabled', true);\n this.form.controls['countryCode'].setValue(value);\n this.form.controls['provinceCode'].setValue('null');\n //value != '' && this.provincesSubject.next(this.countriesSubject.value.find(country => country.code == value).provinces);\n if (value != '' || value != 'null') {\n this._formService.onCountrySelected(value);\n }\n }\n /**\n * Captura el evento de cuando cambia una provincia/estado en el `<select>`\n * @param event \n * @param provinces lista de provincias para obtener el nombre de la seleccionada.\n */\n onProvincesSelected = (event: any, provinces: any) => {\n const { value } = event.target;\n this.form.controls['provinceName'].setValue(provinces.find((province: any) => province.code == value).name);\n }\n\n}\n","<div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"\">\n <div class=\"pt-5 pb-3 border-bottom\">\n <h3 class=\"my-auto mx-2 text-left w-fit bold text-beige1 white-space-md-nowrap\">CREAR CUENTA\n MAYORISTA</h3>\n </div>\n <div class=\" py-3\">\n <p>Si todavia no tienes una cuenta de grandes consumidores en nuestra plataforma, registrate\n ingresando estos\n datos:</p>\n </div>\n <form [formGroup]=\"form\" (submit)=\"register($event)\" class=\"position-relative\">\n <div class=\"row w-100 mx-auto d-flex justify-content-center px-0 py-3\">\n\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\n <div class=\"form-group\">\n <label for=\"\">Nombre</label>\n <input type=\"text\" id=\"\" placeholder=\"Nombre\" required name=\"firstName\"\n formControlName=\"firstName\"\n [class]=\"form.controls['firstName'].touched ? (form.controls['firstName'].valid && form.controls['firstName'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">El nombre es un campo obligatorio.</span>\n </div>\n </div>\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\n <div class=\"form-group\">\n <label for=\"\">Apellidos</label>\n <input type=\"text\" id=\"\" placeholder=\"Apellido\" required name=\"lastName\"\n formControlName=\"lastName\"\n [class]=\"form.controls['lastName'].touched ? (form.controls['lastName'].valid && form.controls['lastName'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">El apellido es un campo obligatorio.</span>\n </div>\n </div>\n\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\n <div class=\"form-group\">\n <label for=\"\">Email</label>\n <input type=\"email\" id=\"\" placeholder=\"Email\" email required name=\"email\"\n formControlName=\"email\"\n [class]=\"form.controls['email'].touched ? (form.controls['email'].valid && form.controls['email'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">El email no posee un formato correcto.</span>\n </div>\n </div>\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\n <div class=\"form-group\">\n <label for=\"\">Contraseña</label>\n <input type=\"password\" id=\"\" placeholder=\"Contraseña\" required name=\"plainPassword\"\n formControlName=\"plainPassword\"\n [class]=\"form.controls['plainPassword'].touched ? (form.controls['plainPassword'].valid && form.controls['plainPassword'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">La contraseña es un campo obligatorio.</span>\n </div>\n </div>\n @if(documentTypes$ | async; as documentTypes){\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\n <div class=\"form-group\">\n <label for=\"\">{{'document-type'|translate}}</label>\n <select name=\"documentType\" formControlName=\"documentType\" required\n [class]=\"form.controls['documentType'].touched ? (form.controls['documentType'].valid && form.controls['documentType'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <option [value]=\"null\" id=\"selectDocumentType\" disabled>Seleccione un tipo</option>\n @for (type of documentTypes; track $index) {\n <option [value]=\"type.code\">{{ type.name }}</option>\n }\n </select>\n <span class=\"invalid-feedback\">{{'document-type-help'|translate}}</span>\n </div>\n </div>\n }\n\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\n <div class=\"form-group\">\n <label for=\"\">{{'document-number'|translate}}</label>\n <input type=\"text\" id=\"\" placeholder=\"{{'document-number'|translate}}\" required\n name=\"documentNumber\" formControlName=\"documentNumber\"\n [class]=\"form.controls['documentNumber'].touched ? (form.controls['documentNumber'].valid && form.controls['documentNumber'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">{{'document-type-help'|translate}}</span>\n </div>\n </div>\n\n @if(countries$ | async; as countries ){\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\n <div class=\"form-group\">\n <label for=\"\">{{'country'|translate}}</label>\n <select name=\"countryCode\" formControlName=\"countryCode\" required (change)=\"onCountrySelected($event)\"\n [class]=\"form.controls['countryCode'].touched ? (form.controls['countryCode'].valid && form.controls['countryCode'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <option [value]=\"null\" id=\"selectOpPais\" disabled>Seleccione un pais</option>\n @for (country of countries; track $index) {\n <option [value]=\"country.code\"> {{ country.name }}</option>\n }\n </select>\n <span class=\"invalid-feedback\">{{'country-help'|translate}}</span>\n </div>\n </div>\n }\n @if(provinces$ |async ; as provinces){\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\n <div class=\"form-group\">\n <label for=\"\">{{'state'|translate}}</label>\n <select name=\"provinceCode\" formControlName=\"provinceCode\" required (change)=\"onProvincesSelected($event, provinces)\"\n [class]=\"form.controls['provinceCode'].touched ? (form.controls['provinceCode'].valid && form.controls['provinceCode'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <option [value]=\"null\" id=\"selectOpProvincia\" disabled>Seleccione una provincia\n </option>\n @for (province of provinces; track $index) {\n <option [value]=\"province.code\">{{ province.name }}</option>\n }\n </select>\n <span class=\"invalid-feedback\">{{'state-help'|translate}}</span>\n </div>\n </div>\n }\n\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\n <div class=\"form-group\">\n <label for=\"\">{{'address'|translate}}</label>\n <input placeholder=\"{{'address'|translate}}\" required type=\"text\" name=\"street\"\n formControlName=\"street\"\n [class]=\"form.controls['street'].touched ? (form.controls['street'].valid && form.controls['street'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">{{'address-help1'|translate}}</span>\n </div>\n </div>\n\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\n <div class=\"form-group\">\n <label for=\"\">{{'town-city'|translate}}</label>\n <input placeholder=\"{{'town-city'|translate}}\" required type=\"text\" name=\"city\"\n formControlName=\"city\"\n [class]=\"form.controls['city'].touched ? (form.controls['city'].valid && form.controls['city'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">{{'town-city-help'|translate}}</span>\n </div>\n </div>\n\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\n <div class=\"form-group\">\n <label for=\"\">{{'postal-code'|translate}}</label>\n <input placeholder=\"{{'postal-code'|translate}}\" required type=\"text\" name=\"postcode\"\n formControlName=\"postcode\"\n [class]=\"form.controls['postcode'].touched ? (form.controls['postcode'].valid && form.controls['postcode'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">{{'postal-code-help'|translate}}</span>\n </div>\n </div>\n\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\n <div class=\"form-group\">\n <label for=\"\">Nombre compañía</label>\n <input type=\"text\" id=\"\" placeholder=\"Nombre compañía\" required name=\"companyName\"\n formControlName=\"companyName\"\n [class]=\"form.controls['companyName'].touched ? (form.controls['companyName'].valid && form.controls['companyName'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">El nombre compañía es un campo obligatorio.</span>\n </div>\n </div>\n\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\n <div class=\"form-group\">\n <label for=\"\">{{'phone'|translate}}</label>\n <input type=\"text\" id=\"\" placeholder=\"{{'phone'|translate}}\" required name=\"phoneNumber\"\n formControlName=\"phoneNumber\"\n [class]=\"form.controls['phoneNumber'].touched ? (form.controls['phoneNumber'].valid && form.controls['phoneNumber'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">El numero de telefono es un campo obligatorio.</span>\n </div>\n </div>\n\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\n <div class=\"form-group\">\n <label for=\"\">Sexo</label>\n <select required name=\"gender\" formControlName=\"gender\"\n [class]=\"form.controls['gender'].touched ? (form.controls['gender'].valid && form.controls['gender'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <option value=\"null\" id=\"selectOpSexo\">Sexo</option>\n <option value=\"u\">Desconocido</option>\n <option value=\"s\">Femenino</option>\n <option value=\"m\">Masculino</option>\n </select>\n <span class=\"invalid-feedback\">El sexo es un campo obligatorio.</span>\n </div>\n </div>\n\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\n <div class=\"form-group\">\n <label for=\"\">Fecha creacion</label>\n <input type=\"date\" id=\"\" placeholder=\"Fecha creacion\" required name=\"birthday\"\n formControlName=\"birthday\"\n [class]=\"form.controls['birthday'].touched ? (form.controls['birthday'].valid && form.controls['birthday'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">La fecha de creacion es un campo obligatorio.</span>\n </div>\n </div>\n\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\n <div class=\"form-group\">\n <label for=\"\">Identificacion</label>\n <input type=\"text\" id=\"\" placeholder=\"Identificacion\" required name=\"taxIdentification\"\n formControlName=\"taxIdentification\"\n [class]=\"form.controls['taxIdentification'].touched ? (form.controls['taxIdentification'].valid && form.controls['taxIdentification'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\n <span class=\"invalid-feedback\">La identificacion de la compañía es un campo\n obligatorio.</span>\n </div>\n </div>\n <div class=\"col-12 col-md-6 px-0 py-4 pl-md-1 \">\n <div class=\"form-check py-2\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"terms\" name=\"terms\"\n formControlName=\"terms\" type=\"checkbox\">\n <label for=\"terms\" class=\"form-check-label\">Acepto los <a\n [routerLink]=\"['/section/terminos-y-condiciones']\"\n routerLinkActive=\"router-link-active\" class=\"text-primary\">términos y\n condiciones *</a></label>\n </div>\n </div>\n <div class=\"col-12 col-md-6 px-0 py-4 pl-md-1\">\n <div class=\"form-check py-2\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"defaultCheck2\"\n name=\"subscribedToNewsletter\" formControlName=\"subscribedToNewsletter\"\n type=\"checkbox\">\n <label class=\"form-check-label\" for=\"defaultCheck2\">\n Suscripción al newsletter\n </label>\n </div>\n </div>\n\n <div\n class=\"col-12 col-md-6 px-0 py-4 pr-md-1 d-flex justify-content-md-start order-2 order-md-1\">\n\n <button type=\"submit\" role=\"button\" [disabled]=\"form.invalid\"\n class=\"btn btn-primary rounded-0 px-5 py-2 w-100 w-md-auto h-fit\">REGISTRATE</button>\n </div>\n\n </div>\n <pre>{{form.value | json}}</pre>\n @if(loading){\n <app-loading-section-ec />\n }\n </form>\n </div>\n </div>\n </div>\n</div>","import { Component, inject } from '@angular/core';\nimport { FiltersService } from '../../ec-services';\nimport { Filter } from '../../classes';\nimport { FilterElement, FilterType } from '../../interfaces';\n\n@Component({\n\tselector: 'lib-filters-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './filters-ec.component.html',\n\tstyleUrl: './filters-ec.component.scss'\n})\nexport class FiltersEcComponent {\n\tprivate _filtersService: FiltersService = inject(FiltersService);\n\tpublic filters: Filter[] = [];\n\tpublic filter$ = this._filtersService.filters$;\n\n\tconstructor() {\n\t\tthis.filter$.subscribe( res => {\n\t\t\tthis.filters = this._filtersService.getSpecificFilters(['attributes', 'categories', 'dynamics'])\n\t\t})\n\t}\n\n\tgetSpecificFilter(type:FilterType): Filter | null{\n\t\tconst filter = this.filters.find(filter => filter.type() === type)\n\t\treturn filter || null;\n\t}\n\n\t/*Obtiene el filtro elegido en el select, lo pasa al setSelect\n para que se marque seleccionado*/\n onSelect(event:any,filter:FilterElement[] | null){\n console.log(filter)\n /* const selectedOption = filter\n .flatMap(category => category.children)\n .filter(option => option?.code === event.target.value)\n .pop()\n selectedOption && this._filtersService.setFilterSelected(this.filters[0], selectedOption) */\n }\n\n\tsetSelected(filter:Filter | null, selected:FilterElement){\n\t\tconsole.log(\"set\",filter);\n\t\tfilter && this._filtersService.setFilterSelected(filter, selected)\n\t}\n\n}\n","<p>filters-ec works!</p>\n","import { Component, computed, inject, signal, WritableSignal } from '@angular/core';\nimport { ProductDetailService, ProductsService, ToastService } from '../../ec-services';\nimport { Observable } from 'rxjs';\nimport { Product } from '../../interfaces';\nimport { ActivatedRoute } from '@angular/router';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { CoreConstantsService } from '../../constants';\n\n@Component({\n\tselector: 'app-product-detail-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './product-detail-ec.component.html',\n\tstyleUrl: './product-detail-ec.component.scss'\n})\nexport class ProductDetailEcComponent {\n\tprivate _productDetailService: ProductDetailService = inject(ProductDetailService);\n\tprivate _productService: ProductsService = inject(ProductsService);\n\tprivate _activedRoute: ActivatedRoute = inject(ActivatedRoute);\n\tprivate _domSanitizer: DomSanitizer = inject(DomSanitizer);\n\tprivate _consts:CoreConstantsService = inject(CoreConstantsService);\n\tprivate _toastService: ToastService = inject(ToastService);\n\t\n\tpublic product$: Observable<Product | null> = this._productDetailService.product$;\n\tpublic options$: Observable<any> = this._productDetailService.options$;\n\tpublic data$: Observable<any> = this._productDetailService.associatedData$;\n\tpublic mediaUrl = this._consts.mediaUrl();\n\tpublic code:string = '';\n\n\tpublic quantity:WritableSignal<number> = signal(1);\n\n\tconstructor(){\n\t\tthis._activedRoute.params.subscribe( queryParams => {\n\t\t\tthis.code = queryParams[\"id\"];\n\t\t\tthis._productDetailService.loadProduct(this.code);\n\t\t})\n\t}\n\n\tsanitizedHtml(html: string){\n\t\treturn this._domSanitizer.bypassSecurityTrustHtml(html);\n\t}\n\n\taddToCart(){\n\t\tthis.quantity() > 0 && this._productDetailService.addToCart(this.quantity());\n\t}\n\n\t/**\n * @description actualiza la variable quantity sumandole 'x' contenido.\n * @param stock debe recibir un number que contenga el stock disponible.\n * @param multipleQuantity debe recibir el multiplo de cantidad que se quiera incrementar.\n */\n\tplus(stock?:number, multipleQuantity?:number){\n\t\tif(multipleQuantity && multipleQuantity > 0) {\n\t\t\tstock ? ( this.quantity() < stock \n\t\t\t\t\t? this.quantity.update(value => value + multipleQuantity)\n\t\t\t\t\t: this._toastService.show('out-of-stock-actually'))\n\t\t\t\t: this.quantity.update(value => value + multipleQuantity)\n\t\t} else {\n\t\t\tstock ? ( this.quantity() < stock \n\t\t\t\t\t? this.quantity.update(value => value + 1)\n\t\t\t\t\t: this._toastService.show('out-of-stock-actually'))\n\t\t\t\t: this.quantity.update(value => value + 1)\n\t\t}\t\t\n\t}\n\n\t/**\n * @description actualiza la varible quantity restandole 'x' contenido.\n * @param multipleQuantity debe recibir el multiplo de cantidad que se quiera decrementar.\n */\n\tless(multipleQuantity?:any){\n\t\tif(multipleQuantity && multipleQuantity > 0 ){\n\t\t\tthis.quantity() > multipleQuantity ? this.quantity.update(value => value - multipleQuantity) : null;\n\t\t} else {\n\t\t\tthis.quantity() > 1 ? this.quantity.update(value => value - 1) : null;\n\t\t}\n\t}\n\n\tcheckStock(stock: number){\n\t\tif(this.quantity() >= stock) \n\t\t\tthis.quantity.set(stock);\n\t}\n}\n","","import { Component, inject, Input } from '@angular/core';\nimport { ProductDetailService } from '../../ec-services';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'app-variants-ec',\n standalone: true,\n imports: [AsyncPipe],\n templateUrl: './variants-ec.component.html',\n styleUrl: './variants-ec.component.scss'\n})\nexport class VariantsEcComponent {\n\tprivate _productDetailsService: ProductDetailService = inject(ProductDetailService);\n\tpublic options$ = this._productDetailsService.options$;\n\t\n\tsetOption(optionCode:any, optionValue:any) {\n this._productDetailsService.setOption(optionCode, optionValue);\n }\n\t\n}\n","@if(options$ | async; as options){\n @if(options && options.length){\n @for(option of options; track $index){\n @switch (option.type) {\n @case ('color') {\n <h5>Colores disponibles</h5>\n <div class=\"row w-100 mx-auto pb-3 mb-3\">\n @for(value of option.values; track $index; let x = $index){\n <a role=\"button\" [title]=\"value.description\" (click)=\"setOption(option.code, value.name)\"\n [class]=\"'item m-1 circle ' + (value.selected ? 'shadow' : '')\" [id]=\"x + value.name\"\n [style.background]=\"'#' + value.name\" [style.box-shadow]=\"(value.selected ? '0px 0px 0px 2px #000' : 'none')\">\n </a>\n }\n </div>\n }\n @case ('size') {\n\n }\n @default {\n\n }\n }\n }\n } @else {\n <p>loading</p>\n }\n}\n\n<!-- <div *ngIf=\"(options$ | async) as options\">\n <div *ngIf=\"options && options.length; else loading\">\n <div *ngFor=\"let option of options; let i = index\">\n\n <div [ngSwitch]=\"option.type\">\n <div *ngSwitchCase=\"'color'\">\n <h5>Colores disponibles</h5>\n <div class=\"row w-100 mx-auto pb-3 mb-3\">\n <a *ngFor=\"let value of option.values; let x = index\" role=\"button\"\n (click)=\"setOption(option.code, value.name)\" [class]=\"'item m-1 ' + (value.selected ? 'shadow' : '')\"\n [id]=\"x + value.name\"\n [style.background]=\"'#' + value.name\"\n [style.box-shadow]=\"(value.selected ? '0px 0px 0px 2px #000' : 'none')\">\n </a>\n </div>\n </div>\n <div *ngSwitchCase=\"'size'\">\n <h5>Talles displonibles</h5>\n <div class=\"row w-100 mx-auto pb-3\">\n <a *ngFor=\"let value of option.values; let x = index\" role=\"buttom\"\n (click)=\"setOption(option.code, value.name)\"\n [id]=\"x + value.name\"\n [class]=\"'btn item m-1 ' + (value.selected ? 'selected-size' : 'unselected-size')\">\n {{ value.name }}\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <div id=\"loading\"></div>\n </div>\n</ng-template> -->","import { Component, inject } from '@angular/core';\nimport { FiltersService, OptionsService } from '../../ec-services';\nimport { Filter } from '../../classes';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { TitleCasePipe } from '@angular/common';\nimport { TranslateModule, TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n\tselector: 'app-breadcrumb-ec',\n\tstandalone: true,\n\timports: [RouterLink, RouterLinkActive, TitleCasePipe, TranslateModule],\n\ttemplateUrl: './breadcrumb-ec.component.html',\n\tstyleUrl: './breadcrumb-ec.component.scss'\n})\nexport class BreadcrumbEcComponent {\n\tprivate _filtersService: FiltersService = inject(FiltersService);\n\tprivate _optionsService: OptionsService = inject(OptionsService);\n\tpublic breadcrumb:any [] = [];\n\t\n\tconstructor(){\n\t\tthis._filtersService.filters$.subscribe(res => {\n\t\t\tthis.breadcrumb = this.generateBreadcrumb(res);\n\t\t})\n\t}\n\n\tgenerateBreadcrumb(filters:Filter[]){\n\t\treturn this._optionsService.getBreadcrumbByFilters(filters);\n\t}\n\t\n}\n","<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item\"><a routerLink=\"/home\">Home</a></li>\n @for (crumb of breadcrumb; track $index) {\n @if(breadcrumb.length === $index+1){\n <li class=\"breadcrumb-item active\" aria-current=\"page\">\n {{\n crumb.title | translate | titlecase\n }}\n </li>\n }@else {\n <li class=\"breadcrumb-item\">\n <a [routerLink]=\"'/'+crumb.path\">{{\n crumb.title | translate | titlecase\n }}</a>\n </li>\n }\n }\n </ol>\n</nav>","import { Component, inject } from '@angular/core';\nimport { CartService, ToastService } from '../../ec-services';\nimport { CoreConstantsService } from '../../constants';\n\n@Component({\n\tselector: 'lib-cart-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './cart-ec.component.html',\n\tstyleUrl: './cart-ec.component.scss'\n})\nexport class CartEcComponent {\n\tprivate _cartService: CartService = inject(CartService);\n\n\tpublic cartItems$ = this._cartService.cartItems$;\n\tpublic subTotalAmount$ = this._cartService.getSubTotalAmount();\n\tpublic totalPromotionAmount$ = this._cartService.getTotalPromotionAmount();\n\tpublic taxesAmount$ = this._cartService.getTaxesAmount();\n\tpublic totalAmount$ = this._cartService.getTotalAmount();\n\tremoveCoupon(){\n\t\tthis._cartService.removeCoupon()\n\t}\n\n}\n","<p>cart-ec works!</p>\n","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { CoreConstantsService } from '../../../constants';\nimport { CartService, ToastService } from '../../../ec-services';\n\n@Component({\n\tselector: 'lib-cart-item-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './cart-item-ec.component.html',\n\tstyleUrl: './cart-item-ec.component.scss'\n})\nexport class CartItemEcComponent implements OnInit {\n\t@Input({\n\t\trequired: true\n\t}) item: any;\n\n\tprivate _cartService: CartService = inject(CartService);\n\tprivate _toastService: ToastService = inject(ToastService);\n\n\tprivate _constants: CoreConstantsService = inject(CoreConstantsService);\n\tpublic mediaUrl = this._constants.mediaUrl();\n\tpublic quantity = 0;\n\n\tngOnInit() {\n\t\tthis.quantity = this.item.quantity\n\t}\n\n\tupdateQuantity(stock: number) {\n\t\tif (this.quantity > 0 && this.quantity <= stock) {\n\t\t\tthis._cartService.updateItemQuantity(this.item, this.quantity)\n\t\t} else {\n\t\t\tthis.quantity = this.item.quantity\n\t\t\tthis._toastService.show('out-of-stock-actually');\n\t\t}\n\t}\n\n\tless(stock: number, value: number = 1) {\n\t\tlet quantity = this.item.quantity - value;\n\t\tquantity > 0 && quantity <= stock ? this._cartService.updateItemQuantity(this.item, quantity) : this._toastService.show('out-of-stock-actually');\n\n\t}\n\n\tplus(stock: number, value: number = 1) {\n\t\tlet quantity = this.item.quantity + value;\n\t\tquantity > 0 && quantity <= stock ? this._cartService.updateItemQuantity(this.item, quantity) : this._toastService.show('out-of-stock-actually');\n\t}\n\n\tdeleteCartItem(){\n\t\tthis._cartService.deleteCartItem(this.item)\n\t}\n}\n","<p>cart-item-ec works!</p>\n","import { Component, inject } from '@angular/core';\nimport { CartService } from '../../ec-services';\nimport { Observable } from 'rxjs';\n\n@Component({\n\tselector: 'app-coupon-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './coupon-ec.component.html',\n\tstyleUrl: './coupon-ec.component.scss'\n})\nexport class CouponEcComponent {\n\tprivate _cartService: CartService = inject(CartService);\n\tpublic coupon$: Observable<any> = this._cartService.coupon$\n\tpublic couponValue: string = \"\";\n\n\taddCoupon(){\n\t\tthis.validCoupon() && this._cartService.addCoupon(this.couponValue)\n\t}\n\n\tvalidCoupon(): boolean {\n\t\tif(this.couponValue){\n\t\t\treturn /^([A-Za-z\\-0-9]*)\\w+$/.test(this.couponValue);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tremoveCoupon(){\n\t\tthis._cartService.removeCoupon()\n\t}\n}\n","<p>coupon-ec works!</p>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\nimport { LoginFormEcComponent } from '../../auth-ec';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AddressingService, AnalyticsService, AuthService, CartService, ChannelService, CheckoutService, FormService, ParametersService, ToastService } from '../../../ec-services';\nimport { AsyncPipe, JsonPipe, TitleCasePipe } from '@angular/common';\nimport { ApiConstantsService } from '../../../constants';\nimport { LoadingFullEcComponent } from '../../widgets-ec';\nimport { BehaviorSubject, filter, firstValueFrom } from 'rxjs';\nimport { ConnectionService } from '../../../api';\nimport { InputEcComponent } from './input-ec/input-ec.component';\nimport { BlocksEcComponent } from \"../../blocks-ec/blocks-ec.component\";\n\n@Component({\n selector: 'app-dataform-ec',\n standalone: true,\n imports: [\n RouterLink,\n ReactiveFormsModule,\n FormsModule,\n LoginFormEcComponent,\n TranslateModule,\n AsyncPipe,\n TitleCasePipe,\n LoadingFullEcComponent,\n JsonPipe,\n BlocksEcComponent\n],\n templateUrl: './dataform-ec.component.html',\n styleUrl: './dataform-ec.component.scss'\n})\nexport class DataformEcComponent implements OnInit {\n\n private _channelService: ChannelService = inject(ChannelService);\n private _authService: AuthService = inject(AuthService);\n private _paramsService: ParametersService = inject(ParametersService);\n private _apiConsts: ApiConstantsService = inject(ApiConstantsService);\n private _addressingService: AddressingService = inject(AddressingService);\n private _cartService: CartService = inject(CartService);\n private _toastService: ToastService = inject(ToastService);\n private _formService: FormService = inject(FormService);\n private _checkoutService: CheckoutService = inject(CheckoutService);\n private _formBuilder: FormBuilder = inject(FormBuilder);\n\n public modeSelectAddress = this._addressingService.modeSelectAddress;\n public cartItems: any = []\n\n public channel$ = this._channelService.channel$;\n public countries$ = this._formService.getCountriesData();\n public provinces$ = this._formService.provinces$;\n public documentTypes$ = this._formService.documentTypes$;\n public isLastStep$ = this._checkoutService.isLastStep$;\n public loadingStep$ = this._checkoutService.loadingStep$;\n \n public selectAddress: boolean = false;\n public params: any;\n public addressBook: any = [];\n public addressBookSelected = { id: 0, notes: \"\" }\n public form_ready: boolean = false;\n public loading: boolean = false;\n public allready_data: boolean = false;\n public require_login: boolean = false;\n public checkoutForm: FormGroup;\n public checkoutFormFacturacion: FormGroup;\n public getTypeForm: any = this._addressingService.getTypeForm;\n public isLastOne: boolean = false;\n public loadingStep: boolean = false;\n\n private readonly postalCodePattern = '^[0-9][0-9]*$';\n\n protected countriesFacturacionSubject = new BehaviorSubject<any[]>([]);\n protected provincesFacturacionSubject = new BehaviorSubject<any[]>([]);\n protected documentTypesFacturacionSubject = new BehaviorSubject<any[]>([]);\n\n public countriesFacturacion$ = this.countriesFacturacionSubject.asObservable();\n public provincesFacturacion$ = this.provincesFacturacionSubject.asObservable();\n public documentTypesFacturacion$ = this.documentTypesFacturacionSubject.asObservable();\n\n public viewDataFacturacion: boolean = true;\n public validado = false;\n\n constructor() {\n this.checkoutForm = this._formBuilder.group({\n ...this._addressingService.getTypeForm()?.configForm.formAddres,\n postcode: ['', [Validators.required, Validators.pattern(this.postalCodePattern)]]\n })\n this.checkoutForm.statusChanges\n .pipe(\n filter(() => { this.onFormChange(); return this.checkoutForm.valid }))\n .subscribe(() => this.onFormValid());\n\n this.checkoutFormFacturacion = this._formBuilder.group({\n ...this._addressingService.getTypeForm()?.configForm.formBilling,\n postcode: ['', [Validators.required, Validators.pattern(this.postalCodePattern)]] // Se agrega para que sólo acepte códigos postales mayores que cero\n });\n this.checkoutFormFacturacion.statusChanges\n .pipe(\n filter(() => { this.onFormChange(); return this.checkoutFormFacturacion.valid }))\n .subscribe(() => this.onFormValid());\n this.isLastStep$.subscribe( res => this.isLastOne = res);\n this.loadingStep$.subscribe( res => this.loadingStep = res);\n }\n\n ngOnInit(): void {\n this._paramsService.getParameters().subscribe(params => this.params = params);\n this._cartService.cartItems$.subscribe(items => this.cartItems = items);\n\n this._authService.isAuthenticated() && this.checkoutForm.controls['email'].setValue(this._authService.getUserProfileAsUser()?.email); //--> esto es momentaneo hasta que empiece a trabajar con Seller y Customer. \n this._authService.isAuthenticated() && this.checkoutForm.get('email')?.disable({ onlySelf: true });\n (this._addressingService.modeSelectAddress == 'LOAD_ADDRESS_AND_SELECTION' || this._addressingService.modeSelectAddress == 'ONLY_ADDRESS_SELECTION')\n && firstValueFrom(this._addressingService.getAddressBook()).then(res => {\n this.addressBook = res && res || null\n this.addressBook == null && this.setMode('carga')\n }\n ).catch(err => console.error(err.error.message))\n\n }\n\n isAuthenticated(): boolean {\n return this._authService.isAuthenticated()\n }\n\n getMode() {\n switch (this.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.selectAddress\n }\n return true\n }\n }\n\n setMode(mode: string) {\n this.selectAddress = mode == \"carga\"\n }\n\n getParamByChannelAndLanguage(nameParam: string) {\n return this._paramsService.hasParams(this.params, nameParam + this._apiConsts.CHANNEL + '_' + this._apiConsts.LOCALE.split('_')[0])\n }\n\n setSelectAddress(addressSelect: any) {\n this.addressBook.map((address: any) => address.selected = address.id === addressSelect.id)\n this.addressBookSelected.id = this.addressBook.find((address: any) => address.selected).id || 0\n }\n onSelectAddress(items:any){\n this.loading = true;\n let addressSelected = this.addressBook.find((address:any) => 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 this._addressingService.setHeadquarter(request).then(\n res => {\n if(this._cartService.channelConfig.applyOrderLot){\n items.forEach((item:any) => {\n if(!item.lot[0]){\n this._cartService.addToLot(item.product,0,item.variant_id,0,item.item_id,item.quantity,item.product.price,item.quantity,item.discount,item.product.price*item.quantity,'new','','',0,res.shippingAddress.city + ' - ' + res.shippingAddress.street, 'newlot'); \n }\n })\n }\n this.form_ready = true;\n this.allready_data = true;\n this.next();\n }\n ).catch(err => this._toastService.show('operation-error'));\n\n } catch (e) { this._toastService.show('operation-error') }\n } else {\n this.showError('invalid-form')\n }\n this.loading = false;\n }\n\n onInputChange = () => this.form_ready = false;\n\n getCountry(code: any) { return this._addressingService.countriesList.find((countries: any) => countries.code.toLocaleLowerCase().includes(code.toLocaleLowerCase()))?.name || \"\" }\n\n getProvince(code: any) { return this._addressingService.provinceList.find((ct: any) => ct.code == code)?.name || \"\" }\n\n getDocumentType(code: any) { return this._addressingService.documentTypes.find((dt: any) => dt.code == code)?.name || \"\" }\n\n getLabelNotesParam() { return this._paramsService.hasParams(this.params, 'label_notes_' + this._apiConsts.CHANNEL + '_' + this._apiConsts.LOCALE.split('_')[0]) }\n\n verifyValidate($event:any) { \n if (this.checkoutForm.valid) {\n // Aca debo resolver el formulario y una vez este todo ok debo avisar al observable de\n // los steps.\n this.emitResult();\n } else\n this.showError('invalid-form');\n }\n showError = (error_message: any) => { this._toastService.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 this._toastService.show('El email ya está registrado, inicie sesión.')\n }\n else if (result !== false && result !== undefined) {\n //Ojo que lo edito, no hizo una compra nueva, atenti a esto.\n this.form_ready = true\n this.allready_data = true\n this.next()\n }\n\n } catch (e) { this._toastService.show('operation-error') }\n this.loading = false;\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 onFormValid = () => {\n }\n\n /**\n * Captura el evento de cuando cambia un pais en el `<select>`\n * @param event \n */\n onCountrySelected = (event: any, billing:boolean = false) => {\n const { value } = event.target;\n //$('#selectOpPais').attr('disabled', true);\n const form = billing ? this.checkoutFormFacturacion : this.checkoutForm;\n form.controls['countryCode'].setValue(value);\n form.controls['provinceCode'].setValue('null');\n //value != '' && this.provincesSubject.next(this.countriesSubject.value.find(country => country.code == value).provinces);\n if (value != '' || value != 'null') {\n this._formService.onCountrySelected(value);\n }\n }\n /**\n * Captura el evento de cuando cambia una provincia/estado en el `<select>`\n * @param event \n * @param provinces lista de provincias para obtener el nombre de la seleccionada.\n */\n onProvincesSelected(event: any, provinces: any, billing:boolean = false){\n const { value } = event.target;\n const form = billing ? this.checkoutFormFacturacion : this.checkoutForm;\n return form.controls['provinceCode'].setValue(value == 'null' ? null : value);\n /* return form.controls['provinceName'].setValue(provinces.find((province: any) => province.code == value).name); */\n }\n onDocumentTypesSelected(event: any, billing:boolean = false) {\n const { value } = event.target\n const form = billing ? this.checkoutFormFacturacion : this.checkoutForm;\n return form.controls['documentType'].setValue(value == '' ? '' : value);\n }\n showFormFacturacion = () => {\n this.viewDataFacturacion = !this.viewDataFacturacion\n if (!this.viewDataFacturacion) {\n this.countriesFacturacion$.subscribe(res => {\n if (res && res.length > 0) {\n this.checkoutFormFacturacion.controls['countryCode'].setValue(res[0].code)\n // Provincia\n this.checkoutFormFacturacion.controls['provinceCode'].setValue(\n res[0]?.provinces[0].code\n )\n this.provincesFacturacionSubject.next(res[0]?.provinces)\n // Documento\n this.checkoutFormFacturacion.controls['documentType'].setValue(res[0]?.documentTypes[0].code)\n this.documentTypesFacturacionSubject.next(res[0]?.documentTypes)\n }\n })\n }\n this.onFormChange()\n return this.viewDataFacturacion\n }\n\n next(){\n\t\tthis._checkoutService.next()\n\t}\n \n}\n","@if(channel$ | async; as channelConfig){\n @if(channelConfig.channelType != 'b2b' || (channelConfig.channelType == 'b2b' && isAuthenticated())){\n @if( modeSelectAddress == 'LOAD_ADDRESS_AND_SELECTION' && isAuthenticated() && this.addressBook != null){\n <!--Selector de modos-->\n <div class=\"container card p-4 mb-3\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12 col-md-10 col-lg-8 text-center\">\n <div class=\"btn-group btn-group-toggle\" data-bs-toggle=\"buttons\">\n <label [class]=\"'btn btn-outline-secondary ' + (!getMode() ? 'active' : '')\">\n <input type=\"radio\" name=\"options\" id=\"option1\" autocomplete=\"off\" checked\n (change)=\"setMode('seleccion')\"> {{'select-address' | translate | titlecase}}\n </label>\n @if(!getParamByChannelAndLanguage('btn_new_address_')){\n <label [class]=\"'btn btn-outline-secondary ' + (getMode() ? 'active' : '')\">\n <input type=\"radio\" name=\"options\" id=\"option2\" autocomplete=\"off\" (change)=\"setMode('carga')\">\n {{ 'new-address' | translate | titlecase}}\n </label>\n }\n @if(getParamByChannelAndLanguage('btn_new_address_'); as param){\n <label [class]=\"'btn btn-outline-secondary ' + (selectAddress ? 'active' : '')\">\n <input type=\"radio\" name=\"options\" id=\"option2\" autocomplete=\"off\" (change)=\"setMode('carga')\">\n {{ param.value}}\n </label>\n }\n </div>\n </div>\n </div>\n </div>\n }\n\n @if(getMode()){\n @if(!require_login){\n <div>\n @if(modeSelectAddress == 'ONLY_LOAD_ADDRESS'){\n <div class=\"checkout-title my-2\">\n <h3>{{'billing-details'|translate}}</h3>\n </div>\n }\n <!--Formulario-->\n <form [formGroup]=\"checkoutForm\" (submit)=\"verifyValidate($event)\"> <!-- //this.cartService.items -->\n <div class=\"row mt-2\"><!--Fila 1-->\n\n @if(getTypeForm().viewForms.firstName.enabled){\n <div class=\"form-group col-12 col-md-6\">\n <!--Si es required-->\n <label class=\"form-label\">{{'first-name'|translate}}\n @if(getTypeForm().viewForms.firstName.required){\n <span class=\"required\">*</span>\n }\n </label>\n <!--Input-->\n <input class=\"form-control\" type=\"text\" name=\"firstName\" formControlName=\"firstName\" value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n @if(checkoutForm.controls['firstName'].touched &&\n checkoutForm.controls['firstName'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'first-name-help1'|translate}}</span>\n </div>\n }\n <!--Error info-->\n @if(checkoutForm.controls['firstName'].touched &&\n checkoutForm.controls['firstName'].errors?.['pattern']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'first-name-help2'|translate}}\n </span>\n </div>\n }\n </div>\n }\n @if(getTypeForm().viewForms.lastName.enabled){\n <div class=\"form-group col-12 col-md-6\">\n <label class=\"form-label\">{{'last-name'|translate}}\n @if(getTypeForm().viewForms.lastName.required){\n <span class=\"required\">*</span>\n }\n </label>\n <input class=\"form-control\" type=\"text\" name=\"lastName\" formControlName=\"lastName\" value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n @if(checkoutForm.controls['lastName'].touched &&\n checkoutForm.controls['lastName'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'last-name-help1'|translate}}</span>\n </div>\n }\n @if(checkoutForm.controls['lastName'].touched && checkoutForm.controls['lastName'].errors?.['pattern']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'last-name-help2'|translate}}</span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"row mt-2\"><!--Fila 2-->\n @if(getTypeForm().viewForms.phoneNumber.enabled){\n <div class=\"form-group col-12 col-md-6\">\n <label class=\"form-label\">{{'phone'|translate}}\n @if(getTypeForm().viewForms.phoneNumber.required){\n <span class=\"required\">*</span>\n }\n </label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"phoneNumber\"\n formControlName='phoneNumber' value=\"\" placeholder=\"\" autocomplete=\"off\">\n @if(checkoutForm.controls['phoneNumber'].touched &&\n checkoutForm.controls['phoneNumber'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'phone-help1'|translate}}\n </span>\n </div>\n }\n @if(checkoutForm.controls['phoneNumber'].touched &&\n checkoutForm.controls['phoneNumber'].errors?.['pattern']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'phone-help2'|translate}}\n </span>\n </div>\n }\n </div>\n }\n @if(getTypeForm().viewForms.email.enabled){\n <div class=\"form-group col-12 col-md-6\">\n <label class=\"form-label\">{{'email-address'|translate}}\n @if(getTypeForm().viewForms.email.required){\n <span class=\"required\">*</span>\n }</label>\n <input class=\"form-control\" type=\"email\" name=\"email\" formControlName='email' value=\"\" placeholder=\"\"\n autocomplete=\"off\">\n @if(checkoutForm.controls['email'].touched && checkoutForm.controls['email'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'email-address-help1'|translate}}\n </span>\n </div>\n }\n @if(checkoutForm.controls['email'].touched && checkoutForm.controls['email'].errors?.['email']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'email-address-help2'|translate}}\n </span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"row mt-2\"><!--Fila 3-->\n @if(getTypeForm().viewForms.countryCode.enabled){\n @if(countries$ | async; as countries){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"form-label\">{{'country'|translate}}\n @if(getTypeForm().viewForms.countryCode.required){\n <span class=\"required\">*</span>\n }</label>\n <select class=\"form-select\" name=\"countryCode\" formControlName='countryCode'\n (change)=\"onCountrySelected($event)\">\n @for(country of countries; track $index){\n <option [value]=\"country.code\">{{ country.name }}</option>\n }\n </select>\n @if(checkoutForm.controls['countryCode'].touched &&\n checkoutForm.controls['countryCode'].errors?.['required']){\n <div class=\"text text-danger\">\n {{'country-help'|translate}}\n </div>\n }\n </div>\n }\n }\n @if(getTypeForm().viewForms.provinceCode.enabled){\n @if(provinces$ | async; as provinces){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"form-label\">{{'state'|translate}}\n @if(getTypeForm().viewForms.provinceCode.required){\n <span class=\"required\">*</span>\n }</label>\n <select class=\"form-select\" name=\"provinceCode\" (change)=\"onProvincesSelected($event, provinces)\"\n formControlName='provinceCode'>\n @for(province of provinces; track $index){\n <option [value]=\"province.code\">{{ province.name }}\n </option>\n }\n </select>\n @if(checkoutForm.controls['provinceCode'].touched &&\n checkoutForm.controls['provinceCode'].errors?.['required']){\n <div class=\"text text-danger\">\n {{'state-help'|translate}}\n </div>\n }\n </div>\n }\n }\n @if(getTypeForm().viewForms.city.enabled){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"form-label\">{{'town-city'|translate}}\n @if(getTypeForm().viewForms.city.required){\n <span class=\"required\">*</span>\n }</label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"city\" formControlName='city'\n value=\"\" placeholder=\"\" autocomplete=\"off\">\n @if(checkoutForm.controls['city'].touched && checkoutForm.controls['city'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'town-city-help'|translate}}</span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"row mt-df\"><!--Fila 4-->\n @if(getTypeForm().viewForms.street.enabled){\n <div class=\"form-group col-12 col-md-8\">\n <label class=\"field-label\">{{'address'|translate}}\n @if(getTypeForm().viewForms.street.required){\n <span class=\"required\">*</span>\n }\n </label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"street\"\n formControlName='street' value=\"\" placeholder=\"\" autocomplete=\"off\">\n @if(checkoutForm.controls['street'].touched && checkoutForm.controls['street'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'address-help1'|translate}}</span>\n </div>\n }\n @if(checkoutForm.controls['street'].touched && checkoutForm.controls['street'].errors?.['maxlength']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'address-help2'|translate}}</span>\n </div>\n }\n </div>\n }\n\n <!-- form dirección -->\n @if(getTypeForm().viewForms.postcode.enabled){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"field-label\">{{'postal-code'|translate}}\n @if(getTypeForm().viewForms.postcode.required){\n <span class=\"required\">*</span>\n }</label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"postcode\"\n formControlName='postcode' value=\"\" placeholder=\"\" autocomplete=\"off\">\n @if(checkoutForm.controls['postcode'].touched &&\n checkoutForm.controls['postcode'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'postal-code-help'|translate}}</span>\n </div>\n }\n @if(checkoutForm.controls['postcode'].touched && checkoutForm.controls['postcode'].errors?.['pattern']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\"> {{'postal-code-pattern-error' | translate}} </span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"row mt-df\"><!--Fila 5-->\n @if(getTypeForm().viewForms.documentType.enabled){\n @if(documentTypes$ | async; as documentTypes){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"field-label\">{{'document-type'|translate}}\n @if(getTypeForm().viewForms.documentType.required){\n <span class=\"required\">*</span>\n }</label>\n <select name=\"documentType\" class=\"form-select\" (change)=\"onDocumentTypesSelected($event)\"\n formControlName='documentType'>\n <!-- <option [value]=\"''\" selected>{{'document-type'|translate}}</option>\n --> @for(item of documentTypes; track $index){\n <option [value]=\"item.code\">{{item.name}}</option>\n }\n </select>\n @if(checkoutForm.controls['documentType'].touched &&\n checkoutForm.controls['documentType'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'type-document-help'|translate}}\n </span>\n </div>\n }\n </div>\n }\n }\n @if(getTypeForm().viewForms.documentNumber.enabled){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"field-label\">{{'document-number'|translate}}\n @if(getTypeForm().viewForms.documentNumber.required){\n <span class=\"required\">*</span>\n }\n </label>\n <input (change)=\"onInputChange()\" class=\"form-control\" [type]=\"'text'\" name=\"documentNumber\"\n formControlName='documentNumber' min=\"1\" max=\"99999999999\" value=\"\" placeholder=\"\"\n autocomplete=\"off\">\n @if(checkoutForm.controls['documentNumber'].touched &&\n checkoutForm.controls['documentNumber'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'document-number-help'|translate}}\n </span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"row mt-df\"><!--Fila 6-->\n @if(getTypeForm().viewForms.notes.enabled){\n <div class=\"form-group col-12 col-md-12\">\n @if(!getLabelNotesParam()){\n <label class=\"field-label\">{{'notes'|translate}}\n @if(getTypeForm().viewForms.notes.required){\n <span class=\"required\">*</span>\n }\n </label>\n }\n @if(getLabelNotesParam(); as labelnotes){\n <label class=\"field-label\" [innerHTML]=\"labelnotes.value\">\n @if(getTypeForm().viewForms.notes.required){\n <span class=\"required\">*</span>\n }\n </label>\n }\n\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\" formControlName='notes'\n value=\"\" placeholder=\"\" autocomplete=\"off\">\n </div>\n }\n </div>\n <div class=\"row mt-df\"><!--Fila 7-->\n <div class=\"form-group col-12 col-md-12\">\n <label for=\"formFact\"><b>{{ 'same-billing-address' | translate }}</b> <input type=\"checkbox\"\n class=\"ms-2\" [checked]=\"viewDataFacturacion\" (change)=\"showFormFacturacion()\"\n id=\"formFact\"></label>\n </div>\n </div>\n <div class=\"row mt-df\">\n <div class=\"col-12\">\n <p>\n <label class=\"required text-underline text-danger\">* {{ 'required-fields' | translate }}</label>\n </p>\n </div>\n </div>\n <div class=\"row mt-df\">\n @if(getTypeForm().viewForms.terms.enabled){\n <div class=\"form-group col-12 col-md-12\">\n @if(getTypeForm().viewForms.terms.required){\n <span class=\"required\">*</span>\n }\n <label class=\"\" for=\"\"> {{ 'accept-terms' | translate }} <input class=\"ms-2\" name=\"terms\"\n formControlName='terms' type=\"checkbox\" required (change)=\"onInputChange()\" /> </label><br />\n <button type=\"button\" class=\"btn btn-primary\" data-bs-toggle=\"modal\"\n data-bs-target=\"#terminos-y-condiciones\">\n {{ 'whats-this' | translate }}\n </button>\n @if(checkoutForm.controls['terms'].touched && !checkoutForm.controls['terms'].value){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{ 'must-accept-terms' | translate }}</span>\n </div>\n }\n </div>\n }\n </div>\n @if(!viewDataFacturacion){\n <!--Formulario de Facturación-->\n <div class=\"card\">\n <div class=\"card-header text-center\">\n <h2>{{ 'billing-data' | translate }}</h2>\n </div>\n <div class=\"card-body\">\n <form [formGroup]=\"checkoutFormFacturacion\">\n <div class=\"row mt-2\"><!--Fila 1-->\n\n @if(getTypeForm().viewForms.firstName.enabled){\n <div class=\"form-group col-12 col-md-6\">\n <!--Si es required-->\n <label class=\"form-label\">{{'first-name'|translate}}\n @if(getTypeForm().viewForms.firstName.required){\n <span class=\"required\">*</span>\n }\n </label>\n <!--Input-->\n <input class=\"form-control\" type=\"text\" name=\"firstName\" formControlName=\"firstName\"\n value=\"\" placeholder=\"\" autocomplete=\"off\">\n @if(checkoutFormFacturacion.controls['firstName'].touched &&\n checkoutFormFacturacion.controls['firstName'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'first-name-help1'|translate}}</span>\n </div>\n }\n <!--Error info-->\n @if(checkoutFormFacturacion.controls['firstName'].touched &&\n checkoutFormFacturacion.controls['firstName'].errors?.['pattern']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'first-name-help2'|translate}}\n </span>\n </div>\n }\n </div>\n }\n @if(getTypeForm().viewForms.lastName.enabled){\n <div class=\"form-group col-12 col-md-6\">\n <label class=\"form-label\">{{'last-name'|translate}}\n @if(getTypeForm().viewForms.lastName.required){\n <span class=\"required\">*</span>\n }\n </label>\n <input class=\"form-control\" type=\"text\" name=\"lastName\" formControlName=\"lastName\" value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n @if(checkoutFormFacturacion.controls['lastName'].touched &&\n checkoutFormFacturacion.controls['lastName'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'last-name-help1'|translate}}</span>\n </div>\n }\n @if(checkoutFormFacturacion.controls['lastName'].touched &&\n checkoutFormFacturacion.controls['lastName'].errors?.['pattern']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'last-name-help2'|translate}}</span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"row mt-2\"><!--Fila 2-->\n @if(getTypeForm().viewForms.phoneNumber.enabled){\n <div class=\"form-group col-12 col-md-6\">\n <label class=\"form-label\">{{'phone'|translate}}\n @if(getTypeForm().viewForms.phoneNumber.required){\n <span class=\"required\">*</span>\n }\n </label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"phoneNumber\"\n formControlName='phoneNumber' value=\"\" placeholder=\"\" autocomplete=\"off\">\n @if(checkoutFormFacturacion.controls['phoneNumber'].touched &&\n checkoutFormFacturacion.controls['phoneNumber'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'phone-help1'|translate}}\n </span>\n </div>\n }\n @if(checkoutFormFacturacion.controls['phoneNumber'].touched &&\n checkoutFormFacturacion.controls['phoneNumber'].errors?.['pattern']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'phone-help2'|translate}}\n </span>\n </div>\n }\n </div>\n }\n @if(getTypeForm().viewForms.email.enabled){\n <div class=\"form-group col-12 col-md-6\">\n <label class=\"form-label\">{{'email-address'|translate}}\n @if(getTypeForm().viewForms.email.required){\n <span class=\"required\">*</span>\n }</label>\n <input class=\"form-control\" type=\"email\" name=\"email\" formControlName='email' value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n @if(checkoutFormFacturacion.controls['email'].touched &&\n checkoutFormFacturacion.controls['email'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'email-address-help1'|translate}}\n </span>\n </div>\n }\n @if(checkoutFormFacturacion.controls['email'].touched &&\n checkoutFormFacturacion.controls['email'].errors?.['email']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'email-address-help2'|translate}}\n </span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"row mt-2\"><!--Fila 3-->\n @if(getTypeForm().viewForms.countryCode.enabled){\n @if(countries$ | async; as countries){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"form-label\">{{'country'|translate}}\n @if(getTypeForm().viewForms.countryCode.required){\n <span class=\"required\">*</span>\n }</label>\n <select class=\"form-select\" name=\"countryCode\" formControlName='countryCode'\n (change)=\"onCountrySelected($event, true)\">\n @for(country of countries; track $index){\n <option [value]=\"country.code\">{{ country.name }}</option>\n }\n </select>\n @if(checkoutFormFacturacion.controls['countryCode'].touched &&\n checkoutFormFacturacion.controls['countryCode'].errors?.['required']){\n <div class=\"text text-danger\">\n {{'country-help'|translate}}\n </div>\n }\n </div>\n }\n }\n @if(getTypeForm().viewForms.provinceCode.enabled){\n @if(provinces$ | async; as provinces){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"form-label\">{{'state'|translate}}\n @if(getTypeForm().viewForms.provinceCode.required){\n <span class=\"required\">*</span>\n }</label>\n <select class=\"form-select\" name=\"provinceCode\"\n (change)=\"onProvincesSelected($event, provinces, true)\" formControlName='provinceCode'>\n @for(province of provinces; track $index){\n <option [value]=\"province.code\">{{ province.name }}\n </option>\n }\n </select>\n @if(checkoutFormFacturacion.controls['provinceCode'].touched &&\n checkoutFormFacturacion.controls['provinceCode'].errors?.['required']){\n <div class=\"text text-danger\">\n {{'state-help'|translate}}\n </div>\n }\n </div>\n }\n }\n @if(getTypeForm().viewForms.city.enabled){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"form-label\">{{'town-city'|translate}}\n @if(getTypeForm().viewForms.city.required){\n <span class=\"required\">*</span>\n }</label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"city\"\n formControlName='city' value=\"\" placeholder=\"\" autocomplete=\"off\">\n @if(checkoutFormFacturacion.controls['city'].touched &&\n checkoutFormFacturacion.controls['city'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'town-city-help'|translate}}</span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"row mt-df\"><!--Fila 4-->\n @if(getTypeForm().viewForms.street.enabled){\n <div class=\"form-group col-12 col-md-8\">\n <label class=\"field-label\">{{'address'|translate}}\n @if(getTypeForm().viewForms.street.required){\n <span class=\"required\">*</span>\n }\n </label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"street\"\n formControlName='street' value=\"\" placeholder=\"\" autocomplete=\"off\">\n @if(checkoutFormFacturacion.controls['street'].touched &&\n checkoutFormFacturacion.controls['street'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'address-help1'|translate}}</span>\n </div>\n }\n @if(checkoutFormFacturacion.controls['street'].touched &&\n checkoutFormFacturacion.controls['street'].errors?.['maxlength']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'address-help2'|translate}}</span>\n </div>\n }\n </div>\n }\n\n <!-- form dirección -->\n @if(getTypeForm().viewForms.postcode.enabled){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"field-label\">{{'postal-code'|translate}}\n @if(getTypeForm().viewForms.postcode.required){\n <span class=\"required\">*</span>\n }</label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"postcode\"\n formControlName='postcode' value=\"\" placeholder=\"\" autocomplete=\"off\">\n @if(checkoutFormFacturacion.controls['postcode'].touched &&\n checkoutFormFacturacion.controls['postcode'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">{{'postal-code-help'|translate}}</span>\n </div>\n }\n @if(checkoutFormFacturacion.controls['postcode'].touched &&\n checkoutFormFacturacion.controls['postcode'].errors?.['pattern']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\"> {{'postal-code-pattern-error' | translate}} </span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"row mt-df\"><!--Fila 5-->\n @if(getTypeForm().viewForms.documentType.enabled){\n @if(documentTypes$ | async; as documentTypes){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"field-label\">{{'document-type'|translate}}\n @if(getTypeForm().viewForms.documentType.required){\n <span class=\"required\">*</span>\n }</label>\n <select name=\"documentType\" class=\"form-select\" (change)=\"onDocumentTypesSelected($event, true)\"\n formControlName='documentType'>\n <!-- <option [value]=\"''\" selected>{{'document-type'|translate}}</option>\n --> @for(item of documentTypes; track $index){\n <option [value]=\"item.code\">{{item.name}}</option>\n }\n </select>\n @if(checkoutFormFacturacion.controls['documentType'].touched &&\n checkoutFormFacturacion.controls['documentType'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'type-document-help'|translate}}\n </span>\n </div>\n }\n </div>\n }\n }\n @if(getTypeForm().viewForms.documentNumber.enabled){\n <div class=\"form-group col-12 col-md-4\">\n <label class=\"field-label\">{{'document-number'|translate}}\n @if(getTypeForm().viewForms.documentNumber.required){\n <span class=\"required\">*</span>\n }\n </label>\n <input (change)=\"onInputChange()\" class=\"form-control\" [type]=\"'text'\" name=\"documentNumber\"\n formControlName='documentNumber' min=\"1\" max=\"99999999999\" value=\"\" placeholder=\"\"\n autocomplete=\"off\">\n @if(checkoutFormFacturacion.controls['documentNumber'].touched &&\n checkoutFormFacturacion.controls['documentNumber'].errors?.['required']){\n <div class=\"text-danger-container\">\n <span class=\"text-danger\">\n {{'document-number-help'|translate}}\n </span>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"row mt-df\"><!--Fila 6-->\n @if(getTypeForm().viewForms.notes.enabled){\n <div class=\"form-group col-12 col-md-12\">\n @if(!getLabelNotesParam()){\n <label class=\"field-label\">{{'notes'|translate}}\n @if(getTypeForm().viewForms.notes.required){\n <span class=\"required\">*</span>\n }\n </label>\n }\n @if(getLabelNotesParam(); as labelnotes){\n <label class=\"field-label\" [innerHTML]=\"labelnotes.value\">\n @if(getTypeForm().viewForms.notes.required){\n <span class=\"required\">*</span>\n }\n </label>\n }\n\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\"\n formControlName='notes' value=\"\" placeholder=\"\" autocomplete=\"off\">\n </div>\n }\n </div>\n </form>\n </div>\n </div>\n }\n <div class=\"row d-flex flex-row\">\n <div class=\"col-12 d-flex justify-content-end\">\n <button type=\"submit\" class=\"btn btn-primary text-white\" [disabled]=\"checkoutForm.invalid\">{{(isLastOne\n ? 'finish-checkout' : (allready_data ? 'update' :\n 'ready-form')) | translate}}\n <!-- {{(allready_data ? 'update' : (isLastOne ? 'finish-checkout' : 'ready-form')) | translate}} -->\n </button>\n </div>\n </div>\n @if(loading){\n <div class=\"d-flex flex-column justify-content-center align-items-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n }\n\n </form>\n </div>\n } @else {\n <div id=\"loginCheckout\">\n @if(require_login){\n <div class=\"d-flex flex-column justify-content-center align-items-center\">\n <div class=\"col-12\">\n <app-login-form-ec (ready)=\"verifyValidate($event)\" [redirect]=\"false\" [title]=\"'need-login'\">\n </app-login-form-ec>\n </div>\n </div>\n }\n </div>\n }\n } @else {\n @if(modeSelectAddress == 'ONLY_ADDRESS_SELECTION'){\n <div class=\"checkout-title my-2\">\n <h3>{{'address-selection'|translate}}</h3>\n </div>\n }\n\n @if(this.addressBook){\n @if(this.addressBook?.length){\n <div class=\"container\">\n <div class=\"row\">\n @for(item of addressBook; track $index; let i = $index){\n <div class=\"col-sm-6 col-12 my-3\">\n <div class=\"card p-3\">\n <input class=\"ms-1 mt-3 form-check-input input-size-lg\" type=\"radio\" [name]=\"'n-'+i\" [id]=\"i\"\n [checked]=\"item.selected\" (click)=\"setSelectAddress(item)\" (change)=\"onInputChange()\">\n <div class=\"ms-5\">\n <h4 class=\"card-title\">\n <strong>{{'address'|translate}}</strong><br>\n <span class=\"text-uppercase h3\">{{item.street}}</span>\n </h4>\n <div class=\"row\">\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\n <strong>{{'country'|translate}}</strong> {{getCountry(item.countryCode)}}\n </h5>\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\n <strong>{{'state'|translate}}</strong> {{getProvince(item.provinceCode)}}\n </h5>\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\n <strong>{{'town-city'|translate}}</strong> {{item.city}}\n </h5>\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\n <strong>{{'postal-code'|translate}}</strong> {{item.postcode}}\n </h5>\n </div>\n <div class=\"row px-3\">\n <div class=\"card p-2 bg-light w-100\">\n <div class=\"card-body\">\n <h5 class=\"card-title\">{{'address-contact'|translate}}</h5>\n <h6 class=\"card-subtitle mb-2 text-muted\">\n <strong>{{'first-name'|translate}}</strong>\n {{item.addressContact.firstName}}\n </h6>\n <h6 class=\"card-subtitle mb-2 text-muted\">\n <strong>{{'last-name'|translate}}</strong>\n {{item.addressContact.lastName}}\n </h6>\n <h6 class=\"card-subtitle mb-2 text-muted\">\n <strong>{{'document-type'|translate}}</strong>\n {{getDocumentType(item.addressContact.documentType)}}\n </h6>\n <h6 class=\"card-subtitle mb-2 text-muted\">\n <strong>{{'document-number'|translate}}</strong>\n {{item.addressContact.documentNumber}}\n </h6>\n <h6 class=\"card-subtitle mb-2 text-muted\">\n <strong>{{'email-address'|translate}}</strong>\n {{item.addressContact.email}}\n </h6>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n </div>\n\n <div class=\"w-100\">\n <div class=\"row mt-df\">\n <div class=\"form-group col-12 col-md-12\">\n @if(!getLabelNotesParam()){\n <label class=\"form-label\">{{'notes'|translate}}</label>\n }\n @if(getLabelNotesParam(); as labelnotes){\n <label class=\"form-label\" [innerHTML]=\"labelnotes.value\"></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\"\n [(ngModel)]=\"this.addressBookSelected.notes\" #ctrl=\"ngModel\" value=\"\" placeholder=\"\"\n autocomplete=\"off\">\n }\n\n </div>\n </div>\n </div>\n <div class=\"row d-flex flex-row\">\n <div class=\"col-12 d-flex justify-content-end\">\n <button (click)=\"onSelectAddress(cartItems)\" class=\"btn btn-primary text-white\" [disabled]=\"loadingStep\">{{(isLastOne\n ? 'finish-checkout' : (allready_data ? 'update' :\n 'ready-form')) | translate}}\n <!-- {{(allready_data ? 'update' : (isLastOne ? 'finish-checkout' : 'ready-form')) | translate}} -->\n </button>\n \n </div>\n </div>\n @if(loading){\n <div class=\"d-flex flex-column jusitfy-content-center align-items-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n }\n </div>\n } @else {\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12 text-center my-2\">\n <div class=\"d-flex flex-column justify-content-center align-items-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </div>\n </div>\n </div>\n }\n } @else {\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12 text-center my-2\">\n <h4> {{'address-book-not-result' | translate }} </h4>\n </div>\n </div>\n </div>\n }\n\n }\n\n }\n @else {\n <div class=\"container\">\n <p>Por favor <a [routerLink]=\"['/auth/login']\"> Inicie Sesión</a></p>\n </div>\n }\n}\n@if(getTypeForm().viewForms.terms.enabled){\n<div class=\"modal fade\" id=\"terminos-y-condiciones\" tabindex=\"-1\" aria-labelledby=\"modalLabel\" aria-hidden=\"true\">\n <div class=\"modal-dialog modal-xl modal-dialog-scrollable\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\" id=\"modalLabel\">Términos y condiciones</h5>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n </div>\n <div class=\"modal-body\">\n <app-blocks-ec [section]=\"'terminos-y-condiciones'\" />\n </div>\n </div>\n </div>\n</div>\n}","import { afterNextRender, Component, inject, OnInit } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { LoadingFullEcComponent } from '../../widgets-ec';\nimport { AsyncPipe, JsonPipe } from '@angular/common';\nimport { CheckoutService, ShipmentService } from '../../../ec-services';\nimport { EcCurrencySymbolPipe } from '../../../ec-pipe';\nimport { Observable } from 'rxjs';\n\n@Component({\n\tselector: 'app-shipment-ec',\n\tstandalone: true,\n\ttemplateUrl: './shipment-ec.component.html',\n\tstyleUrls: ['./shipment-ec.component.scss'],\n\timports: [LoadingFullEcComponent, TranslateModule, AsyncPipe, EcCurrencySymbolPipe, JsonPipe]\n})\nexport class ShipmentEcComponent implements OnInit {\n\n\tprivate _shipmentService: ShipmentService = inject(ShipmentService)\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService)\n\n\tpublic methods$ = this._shipmentService.methods$;\n\tpublic isLastStep$ = this._checkoutService.isLastStep$;\n\tpublic state$ = this._shipmentService.state$;\n\n\tprivate _hiddenMethods: string[] = ['UPS']\n\tpublic buttonsDisabled: boolean = false\n\tpublic methodSelect: any;\n\tpublic loadingInternal: boolean = false\n\tpublic moreInfoInMethod: boolean = false;\n\tpublic costos: any = null\n\tpublic costs$: Observable<any[]> = this._shipmentService.costs$;\n\tpublic isLastOne: boolean = false;\n\tpublic enabledConfirmButton: boolean = false\n\t\n\tconstructor() {\n\t\tthis.isLastStep$.subscribe(res => this.isLastOne = res);\n\t}\n\n\tngOnInit() {\n\t\tthis._shipmentService.getShipmentMethods();\n\t\tthis._checkoutService.associatedData$.subscribe(data => {\n\t\t\tthis.costos = data && data.find((value: any) => value.type == \"shipment\") || null\n\t\t})\n\t\tthis.state$.subscribe(res => {\n\t\t\tif(res.data){\n\t\t\t\tthis.methodSelect = res.data.method\n\t\t\t}\n\t\t})\n\t\tthis.moreInfoInMethod = true //ShipmentService.moreInfoInMethod;\n\t}\n\n\tfilterMethods(methods: any) {\n\t\treturn methods.filter((method: any) => !this._hiddenMethods.includes(method.name))\n\t}\n\n\tsetMethod(method: any) {\n\t\tthis.methodSelect = method;\n\t\tthis.loadingInternal = true;\n\n\t\t// Deshabilitar todos los botones\n\t\tthis.buttonsDisabled = true;\n\t\tthis.enabledConfirmButton = false;\n\n\t\t// setTimeout(() => {\n\t\tthis._shipmentService.setMethod(method.code).then(res => {\n\t\t\tthis.loadingInternal = false;\n\t\t\tthis.enabledConfirmButton = true;\n\t\t\t// Habilitar todos los botones\n\t\t\tthis.buttonsDisabled = false;\n\t\t}).catch(error => {\n\t\t\t// En caso de error, también habilitar los botones\n\t\t\tthis.loadingInternal = false;\n\t\t\tthis.buttonsDisabled = false;\n\t\t\tconsole.error(\"Error:\", error);\n\t\t});\n\t}\n\n\tvalidName(name: any) {\n\t\treturn isNaN(name);\n\t}\n\temitResult = (method_name: string, contract_data: any) => {\n\t\t\n\t\tcontract_data = {\n\t\t\t...contract_data,\n\t\t\tshipping_method_contract: method_name + '_' + contract_data.name,\n\t\t\tshipping_method_branch_code: method_name == \"branch_delivery\" ? contract_data.sucursal_id : contract_data.name,\n\t\t}\n\t\t//console.log(\"emitResult\", contract_data);\n\t\tthis._shipmentService.setContract(contract_data);\n\t}\n\tverifyValidate(costs: any[], contract: any, data: any) {\n\t\ttry {\n\t\t\tcosts.forEach((cost: any) => cost.contracts.forEach((co: any) => co.selected = false))\n\t\t\tcosts.find((cost: any) => cost.name == contract).contracts.find((contra: any) => contra.name == data.name).selected = true\n\t\t} catch (error) {\n\t\t\tconsole.log(\"error al buscar contrato\", error);\n\t\t}\n\t\tthis.emitResult(contract, data);\n\t}\n\n\tgoBack() {\n\t\tthis._checkoutService.back();\n\t}\n\tnext() {\n\t\tthis._checkoutService.next()\n\t}\n}\n","<div class=\"container-fluid\">\n\t<div class=\"col-12\">\n\t\t<div class=\"card text-center\">\n\t\t\t<div class=\"card-header text-dark\">\n\t\t\t\t<h4>{{ 'select-method' | translate }}</h4>\n\t\t\t\t@if(methods$ | async; as methods){\n\t\t\t\t\t<div class=\"btn-toolbar justify-content-center\" role=\"toolbar\" aria-label=\"Envios toolbar\">\n\t\t\t\t\t\t<div class=\"\" role=\"group\" aria-label=\"Grupo botones envio\">\n\t\t\t\t\t\t\t<div class=\"d-flex align-content-start justify-content-center flex-wrap\">\n\t\t\t\t\t\t\t\t@for(method of filterMethods(methods); track $index){\n\t\t\t\t\t\t\t\t<button [disabled]=\"buttonsDisabled\" type=\"button\"\n\t\t\t\t\t\t\t\t\t[class]=\"'btn btn-outline-secondary mx-1 mb-1 '+(methodSelect && methodSelect == method.code ? 'active' :'')\"\n\t\t\t\t\t\t\t\t\t(click)=\"setMethod(method)\">\n\t\t\t\t\t\t\t\t\t{{ method.name | translate }}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t}@else {\n\t\t\t\t\t<div class=\"d-flex flex-row w-100 justify-content-center mt-2\">\n\t\t\t\t\t\t<h5 class=\"text-secondary\">{{'no-shipment-methods'|translate}}</h5>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"card-body\">\n\t\t\t\t@if(moreInfoInMethod && methodSelect && methodSelect.description){\n <div class=\"row justify-content-center mb-2\">\n <div class=\"col-12 col-md-6 col-lg-4 d-flex flex-column mb-2\" [id]=\"methodSelect.code\">\n @for(line of methodSelect.description.split('\\r\\n'); track $index; let i=$index){\n <span [id]=\"methodSelect.code+'-'+i\" [class]=\"'line-'+i\">{{line}}</span>\n\t\t\t\t\t }\n </div>\n </div>}\n\t\t\t\t@if(costs$ | async; as costs){\n<!-- \t\t\t\t @if(costs){ -->\n <div class=\"row justify-content-center\">\n @if(!loadingInternal){\n\t\t\t\t\t\t@for(cost of costs; track $index; let y = $index){\n <div class=\"col-auto text-dark\">\n\t\t\t\t\t\t\t@if(cost.contracts.length > 0){\n\t\t\t\t\t\t\t\t@if(costs.length > 1){\n\t\t\t\t\t\t\t\t\t<span><b>{{ cost.name | translate }}</b></span>\n\t\t\t\t\t\t\t\t\t<hr />\n\t\t\t\t\t\t\t\t}@else{\n\t\t\t\t\t\t\t\t\t<span><b>{{ methodSelect.name | translate }}</b></span>\n\t\t\t\t\t\t\t\t\t<hr />\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@for(contract of cost.contracts; track $index; let i = $index){\n <div class=\"option\">\n <div class=\"form-check current-contract\">\n <input class=\"form-check-input\" [checked]=\"(y === 0 && i === 0) ? true : contract.selected\" type=\"radio\" name=\"card\" [id]=\"cost.name + i\"\n value=\"dark\" (click)=\"verifyValidate(costs,cost.name, contract)\">\n <label class=\"form-check-label\" [for]=\"cost.name + i\" aria-label=\"Dark grey\">\n @if(validName(contract.name)){\n\t\t\t\t\t\t\t\t\t\t\t<span\n [class]=\"(cost.name == 'home_delivery') ? 'shipment-contractname home_delivery' : 'shipment-contractname' \">\n\t\t\t\t\t\t\t\t\t\t\t\t{{ contract.name | translate }}\n\t\t\t\t\t\t\t\t\t\t\t</span>}\n\t\t\t\t\t\t\t\t\t\t\t@if(contract.computed){\n\t\t\t\t\t\t\t\t\t\t\t\t<span><br class=\"shipment-contractname\">{{ contract.computed | translate }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<br class=\"shipment-contractname\">\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t@if(contract.detail){\n <div class=\"contract-detail\">\n\t\t\t\t\t\t\t\t\t\t\t\t@for(line of contract.detail.split(' - '); track $index; let i = $index){\n <div [class]=\"'contrat-item-'+i\">\n @if(i == 0){<span><b>{{ line }}</b></span>}\n @if(i > 0){<span class=\"inside-detail\">{{ line }}</span>}\n </div>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n </div>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t@if(contract.price > 0){\n <span [class]=\"'inside-detail ' + ( costos?.amount == 0 ? ' free ' : '') \">\n @if(!contract.computed){<br class=\"shipment-contractname\">}\n {{ ('price'|translate) + ': ' + (contract.price | ecCurrencySymbol) }}</span>\n\t\t\t\t\t\t\t\t\t\t\t}\n <br>\n </label>\n </div>\n </div>\n\t\t\t\t\t\t\t\t}\n \n\t\t\t\t\t\t\t}\n </div>\n\t\t\t\t\t\t}\n }@else {\n\t\t\t\t\t\t<app-loading-full-ec></app-loading-full-ec>\n\t\t\t\t\t}\n </div>\n\t\t\t\t}\n\t\t\t\t\n </div>\n\n\t\t</div>\n\t\t<div class=\"row d-flex flex-row\">\n\t\t\t<div class=\"col-12 d-flex justify-content-between\">\n\t\t\t\t<button class=\"btn btn-primary text-white\" (click)=\"goBack()\">{{'back'|translate}}</button>\n\t\t\t\t<button type=\"submit\" (click)=\"next()\" [disabled]=\"!enabledConfirmButton\" class=\"btn btn-primary text-white\">{{(isLastOne\n\t\t\t\t\t? 'finish-checkout' :'ready-form') | translate}}\n\t\t\t\t\t<!-- {{(allready_data ? 'update' : (isLastOne ? 'finish-checkout' : 'ready-form')) | translate}} -->\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n</div>","import { Component, EventEmitter, inject, Input, OnInit, Output, PLATFORM_ID } from '@angular/core';\nimport { PaymentService, ToastService } from '../../../../../ec-services';\nimport { LoadingFullEcComponent } from '../../../../widgets-ec';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Component({\n\tselector: 'app-mp-redirect-ec',\n\tstandalone: true,\n\ttemplateUrl: './mp-redirect-ec.component.html',\n\tstyleUrls: ['./mp-redirect-ec.component.scss'],\n\timports: [LoadingFullEcComponent]\n})\nexport class MpRedirectEcComponent implements OnInit {\n\n\tprivate _paymentService: PaymentService = inject(PaymentService)\n\tprivate _toastService: ToastService = inject(ToastService)\n\n\t@Input() method = null;\n\t@Input() total_amount = 0;\n\t@Input() allData: any;\n\t@Output() ready = new EventEmitter();\n\n\tprotected preference: any;\n\n\tpublic loading = false;\n\tpublic url: any;\n\tpublic closeModal = ''\n\tpublic ventana: any;\n\tpublic window?: Window;\n\tpublic localStorage?:Storage;\n\n\tprivate platformId: any = inject(PLATFORM_ID)\n\n\tconstructor() {\n\t\tif (isPlatformBrowser(this.platformId)) {\n\t\t\tthis.window = window\n\t\t\tthis.localStorage = localStorage\n\t\t}\n\t}\n\n\tngOnInit() {\n\t\tthis.getPreference()\n\t}\n\tclickClose = () => {\n\t\t/* this.closeModal = 'cancel'\n\t\t this.ventana?.close() */\n\t}\n\n\tiniciar = () => {\n\t\tthis.closeModal = ''\n\t\tthis.clearStorageState()\n\t\tthis.ventana = this.window?.open(this.url)\n\t\tthis.callState()\n\t}\n\n\tcallState = () => {\n\t\tlet state = this.closeModal != '' ? this.closeModal : this.localStorage?.getItem('state')\n\t\t!state && this.ventana.closed && (state = 'cancel')\n\t\tthis.loading = true\n\t\tstate && console.log(state);\n\t\tif (state) {\n\t\t\tthis.loading = false\n\t\t\tthis.localStorage?.removeItem('state')\n\t\t\tif (state == 'success') {\n\t\t\t\tthis.ventana?.close()\n\t\t\t\tthis.ready.emit(true)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (state == 'pending') {\n\t\t\t\tthis.ventana?.close()\n\t\t\t\tthis.ready.emit(true)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (state == 'failure') {\n\t\t\t\tthis.ventana?.close()\n\t\t\t\tthis.processError('')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (state == 'cancel') {\n\t\t\t\tthis.ventana?.close()\n\t\t\t\tthis.processError('Se cancelo el pago con mercado pago')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.ventana?.close()\n\t\t\tthis.processError('')\n\t\t\treturn\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tthis.callState()\n\t\t}, 5000);\n\n\t}\n\tprocessError = (err: any) => {\n\t\tthis._toastService.show(err != '' ? err : 'payment-error');\n\t\tconsole.log(\"ERROR ENVIO BACK \", err);\n\t}\n\tclearStorageState = () => {\n\t\tsessionStorage.removeItem('state')\n\t\tthis.localStorage?.removeItem('state')\n\t}\n\n\tgetPreference = () =>\n\t\tthis._paymentService.getPreference(this.allData).then(\n\t\t\tres => {\n\t\t\t\tthis.preference = res;\n\t\t\t\tthis.url = this.preference.init_point\n\t\t\t\tthis.renderMP(this.preference);\n\t\t\t},\n\t\t\terr => this.setError('operation-error')\n\t\t);\n\tsetError = (message: any) => {\n\t\t//this.error = message;\n\t}\n\trenderMP = (preference: any) => {\n\t\tthis.window?.addEventListener(\"message\", (event: any) => {\n\t\t\tif (event.origin !== 'https://www.mercadopago.com.ar' || !event.data.type) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet dataType = event.data.type;\n\t\t\tif (dataType === 'submit') {\n\t\t\t\tconst paymentData = event.data.value;\n\t\t\t\treturn;\n\t\t\t}\n\t\t});\n\t}\n}\n","<div class=\"text-center\">\n\t@if(url){\n\t\t@if(!loading){\n\t\t\t<button (click)=\"iniciar()\" class=\"btn btn-outline-primary rounded-0 comprar mt-3\">Pagar</button>\n\t\t} @else {\n\t\t\t<div class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\n\t\t\t\t<h3>Procesando el pago por mercado pago</h3>\n\t\t\t\t<h5>Recuerde hacer click en \"Volver al sitio\" desde mercado pago para finalizar la compra.</h5>\n\t\t\t\t<app-loading-full-ec></app-loading-full-ec>\n\t\t\t</div>\n\t\t\t<div class=\"container-fluid\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-5\">\n\t\t\t\t\t\t<hr>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"col-2 text-center\">\n\t\t\t\t\t\t<label for=\"\">o</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"col-5\">\n\t\t\t\t\t\t<hr>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\n\t\t\t\t<button (click)=\"clickClose()\" class=\"btn btn-outline-secondary\">Cancelar pago</button>\n\t\t\t</div>\n\t\t}\n\t} @else{\n\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\n\t\t<app-loading-full-ec></app-loading-full-ec>\n\t</div>\n\t}\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { LoadingFullEcComponent, LoadingInlineEcComponent } from '../../../../widgets-ec';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n\tselector: 'app-bank-transfer-ec',\n\tstandalone: true,\n\ttemplateUrl: './bank-transfer-ec.component.html',\n\tstyleUrls: ['./bank-transfer-ec.component.scss'],\n\timports: [LoadingInlineEcComponent, TranslateModule, AsyncPipe],\n})\nexport class BankTransferEcComponent implements OnInit {\n\t\n\t@Input({\n\t\trequired: true,\n\t}) method: any;\n\t@Input() verifyValidate:any;\n\t@Input() setLoading:any;\n\t\n\tconstructor() { }\n\n\tngOnInit() {\n\t}\n\n}\n","<div class=\"row px-0 description-cont\">\n\n @for(line of method.description.split('\\r\\n');track $index; let i=$index){\n <p [id]=\"'faqs-'+i\" [class]=\"'qt px-5 m-0 line-'+i\">{{ line }}</p>\n }\n</div>\n@if(method.instructions){\n <hr />\n <div class=\"row px-0 instructions-cont mb-1\">\n <h5 class=\"instructions-title\">{{ ('instructions' | translate) }}</h5>\n @for(line of method.instructions.split('\\r\\n'); track $index; let i=$index){\n <p [class]=\"'px-5 m-0 instructions-text line-'+i \">{{ line }}</p>\n }\n</div>\n}\n\n<div class=\"end-button\">\n <button class=\"btn btn-outline-primary\" (click)=\"setLoading() && verifyValidate()\">{{\n ('pay-with-transfer'\n | translate) }}</button>\n</div>\n<!-- @if(loading$ | async; as loading){\n @if(loading){\n <div class=\"mt-2\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </div>\n }\n} -->","import { Component, Input, OnInit } from '@angular/core';\nimport { LoadingInlineEcComponent } from '../../../../widgets-ec';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n\tselector: 'app-offline-ec',\n\tstandalone: true,\n\ttemplateUrl: './offline-ec.component.html',\n\tstyleUrls: ['./offline-ec.component.scss'],\n\timports: [\n\t\tLoadingInlineEcComponent,\n\t\tTranslateModule\n\t]\n})\nexport class OfflineEcComponent implements OnInit {\n\t@Input({\n\t\trequired: true,\n\t}) method: any;\n\t@Input() verifyValidate: any;\n\t@Input() setLoading: any;\n\tconstructor() { }\n\n\tngOnInit() {\n\t}\n\n}\n","<p id=\"faqs\" class=\"qt px-5\">{{ method.description }}</p>\n<p class=\"px-5\">{{ method.instructions }}</p>\n<div class=\"end-button\">\n\t<button class=\"btn btn-outline-primary\" (click)=\"setLoading() && verifyValidate()\">{{\n\t\t('pay-with-offline'| translate) }}</button>\n</div>\n<!-- @if(loading$ | async; as loading){\n @if(loading){\n <div class=\"mt-2\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </div>\n }\n} -->","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, OnInit } from '@angular/core';\nimport { CheckoutService, PaymentService } from '../../../ec-services';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { LoadingInlineEcComponent } from '../../widgets-ec';\nimport { MpRedirectEcComponent, OfflineEcComponent } from './payment-methods';\nimport { BankTransferEcComponent } from './payment-methods/bank-transfer-ec/bank-transfer-ec.component';\n\n@Component({\n\tselector: 'app-payment-ec',\n\tstandalone: true,\n\ttemplateUrl: './payment-ec.component.html',\n\tstyleUrls: ['./payment-ec.component.scss'],\n\timports: [AsyncPipe,\n\t\tTranslateModule,\n\t\tLoadingInlineEcComponent,\n\t\tMpRedirectEcComponent,\n\t\tBankTransferEcComponent,\n\t\tOfflineEcComponent\n\t]\n})\nexport class PaymentEcComponent implements OnInit {\n\n\tprivate _paymentService: PaymentService = inject(PaymentService)\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService)\n\n\tprivate _methodDataSubject = new BehaviorSubject<any>(null);\n\tprivate _loadingSubject = new BehaviorSubject<boolean>(false);\n\n\tpublic methods$ = this._paymentService.methods$;\n\tpublic loading$ = this._loadingSubject.asObservable();\n\tpublic methodData$ = this._methodDataSubject.asObservable();\n\n\tpublic loadingInternal: boolean = false;\n\n\tconstructor() { }\n\n\tngOnInit() {\n\t}\n\tsetActive($event: any) {\n\t\tconst parent = $event.target.parentElement.children;\n\t\tfor (const button of parent) {\n\t\t\tif (button.classList.contains('active')) {\n\t\t\t\tbutton.classList.remove('active')\n\t\t\t}\n\t\t}\n\t\t$event.target.classList.add(\"active\")\n\t}\n\tasync setMethod(method: any) {\n\t\tthis._methodDataSubject.next(null);\n\t\tlet result = await this._paymentService.putPayment(method.code);\n\t\tthis._methodDataSubject.next(method);\n\t}\n\n\t//Funciones para chequear el metodo de pago.\n\tisRedirectRedsys = (code: string) => !!code?.toLowerCase().includes('redsys_redirect')\n\tisRedirectCecaBank = (code: string) => !!code?.toLowerCase().includes('ceca_bank_redirect')\n\tisMP = (code: string) => {\n\t\tconst lowerCode = code?.toLowerCase() || '';\n\t\treturn lowerCode.includes('mercado_pago') && !lowerCode.includes('credit');\n\t}\n\tisMPTarjetaDeCredito = (code: string) => !!code?.toLowerCase().includes('credit')\n\tisMethodOffline = (code: string) => !!code?.toLowerCase().includes('offline')\n\tisPeyPalExpress = (code: string) => {\n\t\tconst lowerCode = code?.toLowerCase() || '';\n\t\treturn lowerCode.includes('paypal') && lowerCode.includes('express');\n\t}\n\tisMobbex = (code: string) => !!code?.toLowerCase().includes('mobbex')\n\tisBancard = (code: string) => !!code?.toLowerCase().includes('bancard')\n\tisDecidir = (code: string) => !!code?.toLowerCase().includes('decidir')\n\tisCulqi = (code: string) => !!code?.toLowerCase().includes('culqi')\n\tisBankTransfer = (code: string) => !!code?.toLowerCase().includes('bank_transfer')\n\tisCatastro = (code: string) => !!code?.toLowerCase().includes('catastro')\n\tisBamboo = (code: string) => !!code?.toLowerCase().includes('bamboo')\n\n\tallData(): any {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\temitResult = async () => {\n\t\tthis._paymentService.setPayment(this._methodDataSubject.getValue())\n\t\tthis.setLoading(false)\n\t\tthis.next()\n\t}\n\n\tpublic setLoading = (estado = true) => {\n\t\tthis._loadingSubject.next(estado);\n\t\treturn true;\n\t}\n\n\tpublic verifyValidate = ($event:any) => {\n\t\tthis.setLoading(true)\n\t\tsetTimeout(() => this.emitResult(), 1000);\n\t}\n\n\tpublic next = () => {\n\t\tthis._checkoutService.next()\n\t}\n\n\tpublic goBack = () => {\n\t\tthis._checkoutService.back()\n\t}\n}\n","@if(methods$ | async; as methods){\n<div class=\"container-fluid\">\n\n\t<div class=\"row\">\n\t\t<div class=\"col-12\">\n\t\t\t<div class=\"card \">\n\t\t\t\t<div class=\"card-header text-dark text-center\">\n\t\t\t\t\t<h4>{{ 'select-method' | translate }}</h4>\n\t\t\t\t\t<div class=\"btn-toolbar justify-content-center\" role=\"toolbar\" aria-label=\"Envios toolbar\">\n\t\t\t\t\t\t<div class=\"\" role=\"group\" aria-label=\"Grupo botones envio\">\n\t\t\t\t\t\t\t<div class=\"d-flex align-content-start justify-content-center flex-wrap\">\n\t\t\t\t\t\t\t\t@for (method of methods; track $index; let x = $index) {\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-outline-secondary mx-1 mb-1\"(click)=\"setMethod(method) ; setActive($event)\">\n\t\t\t\t\t\t\t\t\t{{ method.name | translate }}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"card-body text-center\">\n\t\t\t\t\t@if(methodData$ | async; as method){\n\t\t\t\t\t<div class=\"row justify-content-center\">\n\t\t\t\t\t\t@if(!loadingInternal){\n\t\t\t\t\t\t\t@if(isMP(method.code)){\n\t\t\t\t\t\t\t\t<div class=\"method-container text-dark\">\n\t\t\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t\t<p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\n\t\t\t\t\t\t\t\t\t\t\t<p class=\"px-5\">{{ method.instructions }}</p>\n\t\t\t\t\t\t\t\t\t\t<app-mp-redirect-ec (ready)=\"verifyValidate($event)\" \t[method]=\"method\"></app-mp-redirect-ec>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<!-- <div class=\"method-container text-dark text-left\" *ngIf=\"isMPTarjetaDeCredito(method.code)\">\n\t\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t<p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\n\t\t\t\t\t\t\t\t\t\t<p class=\"px-5\">{{ method.instructions }}</p>\n\t\t\t\t\t\t\t\t\t\t<div app-mp-credit-ec (ready)=\"verifyValidate()\" [public_key]=\"getPK(method)\"\n\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [total_amount]=\"total_amount\">\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isRedirectRedsys(method.code)\">\n\t\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"!method.code.includes('bizum') && !method.code.includes('_out_')\">\n\t\t\t\t\t\t\t\t\t\t\t<app-redsys-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\">\n\t\t\t\t\t\t\t\t\t\t\t</app-redsys-redirect-ec>\n\t\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"method.code.includes('bizum') || method.code.includes('_out_')\">\n\t\t\t\t\t\t\t\t\t\t\t<app-redsys-redirect-out-ec (ready)=\"verifyValidate($event)\"\n\t\t\t\t\t\t\t\t\t\t\t\t[method]=\"method\" [user_data]=\"allData()\">\n\t\t\t\t\t\t\t\t\t\t\t</app-redsys-redirect-out-ec>\n\t\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isRedirectCecaBank(method.code)\">\n\t\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t<app-ceca-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\">\n\t\t\t\t\t\t\t\t\t\t</app-ceca-redirect-ec>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isPeyPalExpress(method.code)\">\n\t\t\t\t\t\t\t\t<div class=\"container\">\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t\t<app-paypal-express-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [total_amount]=\"total_amount\">\n\t\t\t\t\t\t\t\t\t\t\t</app-paypal-express-ec>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isMobbex(method.code)\">\n\t\t\t\t\t\t\t\t<div class=\"container\">\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t\t<app-mobbex-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n\t\t\t\t\t\t\t\t\t\t\t\t[total_amount]=\"total_amount\">\n\t\t\t\t\t\t\t\t\t\t\t</app-mobbex-ec>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isBancard(method.code)\">\n\t\t\t\t\t\t\t\t<div class=\"container\">\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t\t<app-bancard-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n\t\t\t\t\t\t\t\t\t\t\t\t[total_amount]=\"total_amount\">\n\t\t\t\t\t\t\t\t\t\t\t</app-bancard-ec>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isDecidir(method.code)\">\n\t\t\t\t\t\t\t\t<div class=\"container\">\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t\t<app-decidir-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n\t\t\t\t\t\t\t\t\t\t\t\t[total_amount]=\"total_amount\">\n\t\t\t\t\t\t\t\t\t\t\t</app-decidir-ec>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div> -->\n\t\t\t\t\t\t\t@if(isMethodOffline(method.code)){\n\t\t\t\t\t\t\t<div class=\"method-container text-dark\">\n\t\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t<app-offline-ec \n\t\t\t\t\t\t\t\t\t\t[method]=\"method\" \n\t\t\t\t\t\t\t\t\t\t[verifyValidate]= \"verifyValidate\"\n\t\t\t\t\t\t\t\t\t\t[setLoading] = \"setLoading\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t<!--\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isCulqi(method.code)\">\n\t\t\t\t\t\t\t\t<div class=\"container\">\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t\t<app-culqi-ec [apiKey]=\"getPKCulqi(method)\" [method]=\"method\"\n\t\t\t\t\t\t\t\t\t\t\t\t[amount]=\"total_amount\" [customStyle]=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t(ready)=\"verifyValidate()\"></app-culqi-ec>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isCatastro(method.code)\">\n\t\t\t\t\t\t\t\t<div class=\"container\">\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t\t<app-bancard-catastro-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n\t\t\t\t\t\t\t\t\t\t\t\t[total_amount]=\"total_amount\"></app-bancard-catastro-ec>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isBamboo(method.code)\">\n\t\t\t\t\t\t\t\t<div class=\"container\">\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t\t<app-bamboo-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\n\t\t\t\t\t\t\t\t\t\t\t\t[total_amount]=\"total_amount\"></app-bamboo-ec>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div> -->\n\t\t\t\t\t\t\t@if(isBankTransfer(method.code)){\n\t\t\t\t\t\t\t\t<div class=\"method-container text-dark\">\n\t\t\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\n\t\t\t\t\t\t\t\t\t\t\t<app-bank-transfer-ec \n\t\t\t\t\t\t\t\t\t\t\t\t[method]=\"method\" \n\t\t\t\t\t\t\t\t\t\t\t\t[verifyValidate]= \"verifyValidate\"\n\t\t\t\t\t\t\t\t\t\t\t\t[setLoading] = \"setLoading\" />\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t<app-loading-inline-ec></app-loading-inline-ec>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"row d-flex flex-row\">\n\t\t\t\t<div class=\"col-12 d-flex justify-content-between\">\n\t\t\t\t\t<button class=\"btn btn-primary text-white\" (click)=\"goBack()\">{{'back'|translate}}</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n}","import { Component, inject, Input } from '@angular/core';\nimport { IStep } from '../../../interfaces';\nimport { CheckoutService } from '../../../ec-services';\nimport { Step } from '../../../classes';\nimport { DataformEcComponent } from '../dataform-ec/dataform-ec.component';\nimport { ShipmentEcComponent } from '../shipment-ec/shipment-ec.component';\nimport { PaymentEcComponent } from '../payment-ec/payment-ec.component';\n\n@Component({\n\tselector: 'app-step-container-ec',\n\tstandalone: true,\n\timports: [\n\t\tDataformEcComponent,\n\t\tShipmentEcComponent,\n\t\tPaymentEcComponent\n\t],\n\ttemplateUrl: './step-container-ec.component.html',\n\tstyleUrl: './step-container-ec.component.scss'\n})\nexport class StepContainerEcComponent {\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService);\n\n\t@Input({\n\t\trequired: true,\n\t}) steps!: Step[];\n\t\n\tconstructor(){\n\t\tconsole.log('step-container-ec');\n\t}\n\n\tnext(){\n\t\tthis._checkoutService.next()\n\t}\n\n\tback() {\n\t\tthis._checkoutService.back()\n\t}\n\n}\n","<div>\n @for(step of steps; track $index; let x=$index){\n <div [id]=\"'test-l-'+step.priority\" class=\"content\">\n <!-- <app-step-ec [step_id]=\"step.step\" [id_step]=\"x+1\" [previousStep]=\"steps[x-1] ? steps[x-1].name : step.name\" [nextStep]=\"steps[x+1] ? next : endCheckout\" [goBack]=\"goBack\" [lastStep]=\"steps[x+1] ? false : true\">\n </app-step-ec> -->\n @switch (step.name) {\n @case ('address') {\n @if(step.state == 'ready') {\n <app-dataform-ec />\n }\n }\n @case ('payment') {\n @if(step.state == 'ready') {\n <app-payment-ec />\n }\n }\n @case ('shipment') {\n @if(step.state == 'ready') {\n <app-shipment-ec />\n }\n }\n }\n </div>\n }\n <!-- <div class=\"row d-flex flex-row\">\n <div class=\"col-6 d-flex justify-content-start\">\n <button type=\"button\" class=\"btn btn-primary text-white\" (click)=\"back()\">Anterior</button>\n </div>\n <div class=\"col-6 d-flex justify-content-end\">\n <button type=\"button\" class=\"btn btn-primary text-white\" (click)=\"next()\">Siguiente</button>\n </div>\n </div> -->\n</div>\n","import { Component, inject } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EcCurrencySymbolPipe } from '../../../ec-pipe';\nimport { CheckoutService } from '../../../ec-services';\nimport { AsyncPipe } from '@angular/common';\n@Component({\n selector: 'app-detail-checkout-block-ec',\n standalone: true,\n imports: [TranslateModule, EcCurrencySymbolPipe, AsyncPipe],\n templateUrl: './detail-checkout-block-ec.component.html',\n styleUrl: './detail-checkout-block-ec.component.scss'\n})\nexport class DetailCheckoutBlockEcComponent {\n private _checkoutService: CheckoutService = inject(CheckoutService);\n\n public data$ = this._checkoutService.associatedData$;\n public data: any = null\n getIcon = (data_type: string) => {\n\n switch (data_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 }\n constructor() {\n this._checkoutService.associatedData$.subscribe(data => {\n this.data = data.filter((value: any, i: number) => this.checkData(value, i));\n }\n );\n }\n\n private checkData(data: any, index: number) {\n switch (data.type) {\n case 'discount':\n return (data.amount != 0 && index === 1)\n case 'coupon':\n return (data.amount != 0 && index === 1)\n default:\n return true\n }\n }\n}\n","@if(data$ | async; as datos){\n <div id=\"appDetailCheckoutBlockEc\" class=\"d-flex flex-row w-100 justify-content-center flex-wrap\">\n @for(item of data; track $index; let i = $index){\n <div class=\"d-flex flex-column justify-content-center mx-sm-3 mx-2 text-center mb-4 resumen\">\n <i ngClass=\"mb-2 colorIconoCheckout\" [class]=\"getIcon(item.type)\"></i>\n <strong class=\"text-center w-100 font-brandon font-md mb-1\">{{ item.type | translate }}</strong>\n <span class=\"text-center w-100 font-brandon font-md text-gray\">{{ (item.amount != 0 ) ? (item.amount |\n ecCurrencySymbol) : ('free' | translate) }}</span>\n </div>\n }\n </div>\n}","import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, OnInit } from '@angular/core';\nimport { ChannelService, CheckoutService } from '../../ec-services';\nimport { IStep, Step, StepType } from '../../interfaces';\nimport { take } from 'rxjs';\nimport { AsyncPipe, JsonPipe } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { StepContainerEcComponent } from './step-container-ec/step-container-ec.component';\nimport { DetailCheckoutBlockEcComponent } from './detail-checkout-block-ec/detail-checkout-block-ec.component';\n\n@Component({\n\tselector: 'lib-checkout-ec',\n\tstandalone: true,\n\timports: [AsyncPipe, TranslateModule, StepContainerEcComponent, DetailCheckoutBlockEcComponent],\n\ttemplateUrl: './checkout-ec.component.html',\n\tstyleUrl: './checkout-ec.component.scss',\n\tschemas:[CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class CheckoutEcComponent implements OnInit {\n\tprivate _channelService: ChannelService = inject(ChannelService);\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService);\n\n\tpublic readonly ADDRESS: StepType = 'address';\n\tpublic readonly SHIPMENT: StepType = 'shipment';\n\tpublic readonly PAYMENT: StepType = 'payment';\n\n\t//public loading$ = this._checkoutService\n\t//public canCheckout$ = this._checkoutService.canCheckout$\n\tpublic state$ = this._checkoutService.state$;\n\n\tpublic channel: any;\n\t//public steps: Step[] = [];\n\tpublic subCan:any;\n\tpublic canCheckout: boolean = false;\n\n\tconstructor() {\n\t\t//console.log(\"constructo.....\");\n\t\tthis._channelService.channel$.subscribe(\n\t\t\t(res: any) => {\n\t\t\t\t//console.log(\"construct\")\n\t\t\t\tthis.channel = res;\n\t\t\t\t//this.initializeSteps();\n\t\t\t}\n\t\t)\n\t}\n\tngOnInit(): void {\n\t\tthis.subCan = this._checkoutService.canCheckout$.pipe(take(1)).subscribe(contain_items => {\n if (contain_items) this.initializeCheckout();\n else this.canCheckout = false;\n })\n\t}\n\tinitializeCheckout() {\n\t\tthis.canCheckout = true;\n\t\tthis.initializeSteps();\n\n\t}\n\tinitializeSteps() {\n\t\tlet steps: IStep[] = [];\n\t\t//El paso de elegir dirección siempre esta\n\t\tsteps.push({ name: this.ADDRESS, label: 'billing-details', state:'ready' })\n\t\t//El paso de elegir metodo de envio\n\t\tthis.channel?.isSkippingShippingStepAllowed ? null : steps.push({ name: this.SHIPMENT, label:'shipment-method' });\n\t\t//El paso de elegir metodo de pago\n\t\tthis.channel?.isSkippingPaymentStepAllowed ? null : steps.push({ name: this.PAYMENT, label: 'payment'});\n\t\tthis._checkoutService.setSteps(steps)\n\t}\n\n}\n","<main class=\"py-4\" id=\"appCheckoutEc\">\n @if(canCheckout){\n <app-detail-checkout-block-ec></app-detail-checkout-block-ec>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-md-12 col-12\">\n @if(state$ | async; as steps){ \n <div id=\"stepper\" class=\"bs-stepper\">\n <div class=\"mb-3 row d-flex justify-content-center position-relative stepperContainer\">\n @for(step of steps; track $index; let x=$index){\n <div [class]=\"'d-flex flex-column justify-content-center align-items-center px-0 col-2'\">\n <div [class]=\"'step d-inline-flex align-items-center'\" [attr.data-target]=\"'#test-l-'+step.step\">\n <span\n [class]=\"'px-2 rounded-circle text-white font-bold bs-stepper-number ' + (step.state == 'ready' ? 'bg-primary' : 'bg-secondary') \">{{x+1}}</span>\n <span class=\"bs-stepper-label\">{{ step.label |translate}}</span>\n </div>\n \n </div>\n @if(x < steps.length-1){\n <div class=\"col-3 d-flex align-items-center\"><hr [class]=\"'w-100 line ' + (step.state == 'doing' ? 'line-active' : 'line-default')\" ></div>\n }\n }\n </div>\n <!-- CONTENT -->\n <div class=\"bs-stepper-content margin-bottom-i\">\n <app-step-container-ec [steps]=\"steps\" />\n </div>\n </div>\n } \n </div>\n <!--@if(loading$ | async; as load){\n <div class=\"col-md-12 col-12\">\n <div *ngIf=\"load\" class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\n <app-loading-full-ec></app-loading-full-ec>\n <h5>{{ 'processing-payment' | translate }}</h5> \n </div>\n </div>\n }-->\n </div>\n </div>\n } @else {\n <div class=\"wrap\">\n <!-- <div *ngIf=\"(loading$ | async) as load\">\n <app-loading-full-ec *ngIf=\"canCheckout\"></app-loading-full-ec>\n </div>\n <section id=\"cart\" *ngIf=\"!canCheckout\">\n <section id=\"cart bg-white h-50\">\n <div class=\"d-flex flex-column justify-content-center align-items-center text-center\">\n <h4>{{ 'empty-cart' | translate }}</h4>\n <h5>{{ 'empty-cart-detail' | translate }}</h5>\n </div>\n </section>\n </section> -->\n </div>\n }\n</main>\n","import { Component, inject, OnInit, TemplateRef } from '@angular/core';\nimport { LoadingFullEcComponent } from '../../widgets-ec';\nimport { BlocksEcComponent } from '../../blocks-ec';\nimport { ApiConstantsService } from '../../../constants';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CommonModule, UpperCasePipe } from '@angular/common';\nimport { BlocksService, CartService, CheckoutService } from '../../../ec-services';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n\n@Component({\n\tselector: 'app-order-success-ec',\n\tstandalone: true,\n\ttemplateUrl: './success-ec.component.html',\n\tstyleUrls: ['./success-ec.component.scss'],\n\timports: [BlocksEcComponent, LoadingFullEcComponent, TranslateModule, UpperCasePipe, CommonModule]\n})\nexport class SuccessEcComponent implements OnInit {\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService)\n\tprivate _cartService: CartService = inject(CartService)\n\tprivate _router: Router = inject(Router)\n\tprivate _activatedRoute: ActivatedRoute = inject(ActivatedRoute)\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService)\n\tprivate _blocksService: BlocksService = inject(BlocksService);\n\n\n\tpublic locale = this._apiConsts.LOCALE;\n\n\tpublic orderDetails = {};\n\tpublic params: any = {};\n\tpublic from_mp = true;\n\tpublic payments: any;\n\tpublic blocks: any;\n\n\t/**\n * @description variable para recibir un template en caso de que se quiera cambiar la informacion por defecto.\n */\n public notInfoToMethodTemplate:TemplateRef<any> | null = null;\n\n\tconstructor() { }\n\n\tngOnInit() {\n\t\tthis._checkoutService.order$.subscribe(\n res => {\n //console.log('LO QUE LLEGA EN ORDEN', res);\n res?.number ? this.params = {\n external_reference: res.number,\n } : null\n //this.payments = [{method:{code:'bank_transsfer'}}]\n this.payments = res?.payments ? res.payments : null\n },\n );\n \n this._blocksService.getBlocks('info_metodo_pago')\n this._blocksService.blocks$.subscribe(res => this.blocks = res)\n\t}\n\n\t/**\n\t\t * @description Chequea si existe un bloque recibido por parametro.\n\t\t * @param codeBlock codigo del bloque.\n\t\t * @returns el bloque si lo encontro.\n\t\t */\n\tcontainsBlock(codeBlock: string): any { return this.blocks.find((block:any) => block.code == codeBlock) }\n\n}\n","<div id=\"container\" class=\"flex-center generalContainer container-xl\">\n\t@if(payments && payments[0].method.code){\n\t<div class=\"Main card my-2\">\n\t\t@if(this.blocks && this.blocks.length > 0){ \n\t\t\t@if(containsBlock(this.payments[0].method.code); as bloque) {\n\t\t\t\t<div class=\"wrap my-4 card-body\" [id]=\"bloque.code\">\n\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t<div class=\"col-md-12 col-12\">\n\t\t\t\t\t\t\t<h5 [class]=\"bloque.code+'-title'\">{{ (bloque?.translations[locale]?.name ?\n\t\t\t\t\t\t\t\tbloque.translations[locale].name :\n\t\t\t\t\t\t\t\t'thanks-for-buying') | translate\n\t\t\t\t\t\t\t\t| uppercase }}</h5>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t<div class=\"col-md-12 col-12 text-start\">\n\t\t\t\t\t\t\t<app-blocks-ec [section]=\"'info_metodo_pago'\" [blockFilters]=\"payments[0].method.code\">\n\t\t\t\t\t\t\t</app-blocks-ec>\n\t\t\t\t\t\t\t<div class=\"d-flex flex-column details\">\n\t\t\t\t\t\t\t\t<p class=\"card-text\">{{ ('number' | translate) + ': ' + params.external_reference }}</p>\n\t\t\t\t\t\t\t\t<p class=\"card-text\">{{((params.payment_status || 'pending') | translate)}}</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}@else {\n\t\t\t\t<ng-container *ngTemplateOutlet=\"notInfoToMethodTemplate ? notInfoToMethodTemplate : notInfoToMethod; context: { $implicit: params }\"></ng-container>\n\t\t\t}\n\t\t} @else{\n\t\t\t<ng-container *ngTemplateOutlet=\"notInfoToMethodTemplate ? notInfoToMethodTemplate : notInfoToMethod; context: { $implicit: params }\"></ng-container>\n\t}\n\t</div>\n\t} @else {\n\t\t<app-loading-full-ec></app-loading-full-ec>\t\n\t}\n</div>\n\n<ng-template #notInfoToMethod let-params>\n\n\t<div class=\"wrap my-4 card-body\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-12 col-12\">\n\t\t\t\t<h5 class=\"card-title titpage center-block text-center\">\n\t\t\t\t\t{{ 'thanks-for-buying' | translate | uppercase }}\n\t\t\t\t</h5>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-12 col-12 text-center py-3\">\n\t\t\t\t<h4 class=\"thanks-details\">{{ 'thanks-details' | translate }}</h4>\n\t\t\t\t<h5 class=\"number\">{{ ('number' | translate) + ': ' + params.external_reference }}</h5>\n\t\t\t\t<h5 class=\"pending\">{{ ((params.payment_status || 'pending') | translate) }}</h5>\n\t\t\t\t<!-- <h5 *ngIf=\"!from_mp\">{{ ('will_contact' | translate) }}</h5> -->\n\n\t\t\t\t<!-- <a routerLink=\"/collection\"><button class=\"comprar\">{{ 'continue-shopping' | translate }}</button></a> -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</ng-template>","import { Component, inject, OnInit } from '@angular/core';\nimport { OrdersService } from '../../../ec-services';\nimport { filter } from 'rxjs';\nimport { LoadingFullEcComponent } from '../../widgets-ec';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TitleCasePipe } from '@angular/common';\nimport moment from 'moment';\nimport { Router } from '@angular/router';\nimport { EcCurrencySymbolPipe } from '../../../ec-pipe';\n\n@Component({\n\tselector: 'app-orders-ec',\n\tstandalone: true,\n\timports: [LoadingFullEcComponent, TranslateModule, TitleCasePipe, EcCurrencySymbolPipe],\n\ttemplateUrl: './orders-list-ec.component.html',\n\tstyleUrl: './orders-list-ec.component.scss'\n})\nexport class OrdersListEcComponent implements OnInit {\n\n\tprivate _ordersService: OrdersService = inject(OrdersService);\n\tprivate _router: Router = inject(Router);\n\n\tpublic loading: boolean = false;\n\tpublic orders: any[] = [];\n\tprivate error: string = \"\";\n\tpublic sortValue: any;\n public showPrice: boolean = false;\n public creditAmountConfigured: boolean = false;\n\n\t/**\n\t * @description name -> nombre de clave de valuesToSort; asc -> true: ascendente, false: descendente\n\t */\n\tpublic currentSort: any = { name: '', asc: true }\n\t/**\n\t * @description true -> ordena de forma ascendente | false -> ordena de forma decreciente\n\t */\n\tpublic valuesToSort: any = {\n\t\tnumber: { asc: true, attribute: 'number' },\n\t\tpaymentState: { asc: true, attribute: 'state' },\n\t\tmethod: { asc: true, attribute: 'method', subAttribute: 'name' },\n\t\tmethodState: { asc: true, attribute: 'state' },\n\t\tdate: { asc: true, attribute: 'checkoutCompletedAt' },\n\t\ttotal: { asc: true, attribute: 'total' }\n\t};\n\n\tngOnInit(): void {\n\t\tthis.loading = true;\n\t\tthis._ordersService.updateOrders();\n\t\tthis._ordersService.orders$.pipe(filter(or => or)).subscribe({\n\t\t\tnext: (orders) => {\n\t\t\t\tthis.orders = this.sortedByNewest(orders);\n\t\t\t\tthis.loading = false\n\t\t\t},\n\t\t\terror: (error) => {\n\t\t\t\tthis.loading = false\n\t\t\t\tthis.error = 'orders-error';\n\t\t\t}\n\t\t})\n\t}\n\n\tsortedByNewest(orders: any) {\n\t\treturn orders && orders.length && orders.sort((anOrder: any, otherOrder: any) => anOrder.number > otherOrder.number ? -1 : 1)\n\t}\n\n\t/**\n\t* @description Ordena la lista de ordenes\n\t* @param value recibe una valor que debe coincidir con las claves de la variable valuesToSort\n\t*/\n\tsortOrders(value: any) {\n\t\tthis.sortValue = value\n\t\tthis.setCurrentSort(this.sortValue, this.valuesToSort[this.sortValue].asc)\n\t\tconst comparator =\n\t\t\t(this.valuesToSort[this.sortValue].asc)\n\t\t\t\t? [-1, 1]\n\t\t\t\t: [1, -1]\n\t\tthis.valuesToSort[this.sortValue].asc = !this.valuesToSort[this.sortValue].asc\n\t\t\n\t\t\tlet typeValue\n\t\tif (this.orders.length > 0) {\n\t\t\ttypeValue = typeof (this.orders[0])\n\t\t}\n\t\tlet sortFunction = this.getSortFunction(this.sortValue)\n\t\tthis.orders =\n\t\t\tthis.sortValue\n\t\t\t\t? this.orders.sort((aOrders, otherOrders) => sortFunction(aOrders, otherOrders, this.valuesToSort[this.sortValue], comparator))\n\t\t\t\t: this.orders\n\t}\n\n\t/**\n\t * @description funcion utilizada para desempate.\n\t * @param aOrders\n\t * @param otherOrders\n\t * @param comparator\n\t * @returns\n\t */\n\tprivate tieBreaker(aOrders: any, otherOrders: any, comparator: any) {\n\t\treturn aOrders.number.toLowerCase() < otherOrders.number.toLowerCase() ? comparator[0] : comparator[1]\n\t}\n\t/**\n\t * @description cambia los valores de la variable currentSort\n\t * @param name\n\t * @param asc\n\t */\n\tprivate setCurrentSort(name: string, asc: boolean) {\n\t\tthis.currentSort.name = name;\n\t\tthis.currentSort.asc = asc\n\t}\n\t/**\n\t * @description retorna la funcion que se debe utilizar para el sort del arreglo\n\t * @param value parametro que indica el tipo de funcion que debe retornar\n\t * @returns funcion para utilizar en la busqueda\n\t */\n\tprivate getSortFunction(value: any): Function {\n\t\tswitch (value) {\n\t\t\tcase 'paymentState':\n\t\t\t\treturn this.sortPaymentState.bind(this);\n\t\t\tcase 'method':\n\t\t\t\treturn this.sortShipments.bind(this);\n\t\t\tcase 'methodState':\n\t\t\t\treturn this.sortShipments.bind(this);\n\t\t\tcase 'total':\n\t\t\t\treturn this.sortNumber.bind(this);\n\t\t\tdefault:\n\t\t\t\treturn this.sortText.bind(this);\n\t\t}\n\t}\n\n\t/* Funciones para ordernar */\n\tprivate sortPaymentState(aOrders: any, otherOrders: any, data: any, comparator: any) {\n\t\treturn (aOrders.payments[0][data.attribute] == otherOrders.payments[0][data.attribute])\n\t\t\t? this.tieBreaker(aOrders, otherOrders, comparator)\n\t\t\t: String(aOrders.payments[0][data.attribute]).toLowerCase() < String(otherOrders.payments[0][data.attribute]).toLowerCase() ? comparator[0] : comparator[1]\n\t}\n\n\tprivate sortShipments(aOrders: any, otherOrders: any, data: any, comparator: any) {\n\t\tif (data.subAttribute) {\n\t\t\treturn (aOrders.shipments[0][data.attribute][data.subAttribute] == otherOrders.shipments[0][data.attribute][data.subAttribute])\n\t\t\t\t? this.tieBreaker(aOrders, otherOrders, comparator)\n\t\t\t\t: String(aOrders.shipments[0][data.attribute][data.subAttribute]).toLowerCase() < String(otherOrders.shipments[0][data.attribute][data.subAttribute]).toLowerCase() ? comparator[0] : comparator[1]\n\t\t}\n\t\telse {\n\t\t\treturn (aOrders.shipments[0][data.attribute] == otherOrders.shipments[0][data.attribute])\n\t\t\t\t? this.tieBreaker(aOrders, otherOrders, comparator)\n\t\t\t\t: String(aOrders.shipments[0][data.attribute]).toLowerCase() < String(otherOrders.shipments[0][data.attribute]).toLowerCase() ? comparator[0] : comparator[1]\n\t\t}\n\t}\n\n\tprivate sortNumber(aOrders: any, otherOrders: any, data: any, comparator: any) {\n\t\treturn aOrders[data.attribute] < otherOrders[data.attribute] ? comparator[0] : comparator[1]\n\t}\n\n\tprivate sortText(aOrders: any, otherOrders: any, data: any, comparator: any) {\n\t\treturn (aOrders[data.attribute] == otherOrders[data.attribute])\n\t\t\t? aOrders.number.toLowerCase() < otherOrders.number.toLowerCase() ? comparator[0] : comparator[1]\n\t\t\t: String(aOrders[data.attribute]).toLowerCase() < String(otherOrders[data.attribute]).toLowerCase() ? comparator[0] : comparator[1]\n\t}\n\n\ttoDate(date:any, format:any){ return moment(date).format(!format && 'DD/MM/YYYY, h:mm:ss a' || format)}\n\n\tgoToOrder(order:any){\n //this._ordersService.setSelectedOrder(order);\n //this._router.navigateByUrl((`account/orders/${order.number}`))\n }\n}\n","<div class=\"container-fluid\" id=\"ordersEcComponent\">\n @if(!loading){\n <section id=\"orders\" class=\"w-100\">\n @if(orders && orders.length){\n <div class=\"row mb-1 border-bottom\">\n <div class=\"col-lg-2 col-12\">\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'number' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\n (click)=\"sortOrders('number')\">{{ 'order' | translate }}:</p>\n </div>\n <div class=\"col-lg-2 col-12\">\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'paymentState' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\n (click)=\"sortOrders('paymentState')\">{{ 'payment-state' | translate }}:</p>\n </div>\n <div class=\"col-lg-2 col-12\">\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'method' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\n (click)=\"sortOrders('method')\">{{ 'shipment-method' | translate }}:</p>\n </div>\n <div class=\"col-lg-2 col-12 \">\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'methodState' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\n (click)=\"sortOrders('methodState')\">\n {{ 'shipment-state' | translate }}:</p>\n </div>\n <div class=\"col-lg-2 col-12\">\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'date' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\n (click)=\"sortOrders('date')\">{{ 'date' | translate }}:</p>\n </div>\n <div class=\"col-lg-2 col-12\">\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'total' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\n (click)=\"sortOrders('total')\">{{ 'total' | translate }}:</p>\n </div>\n </div>\n @for(order of orders; track $index){\n <div class=\"row item border-bottom py-2\">\n <div class=\"col-lg-2 col-12\">\n <h5 class=\"fw-bold\">\n {{ order.number }}\n </h5>\n </div>\n <div class=\"col-lg-2 col-12\">\n @if(order.payments && order.payments.length > 0){\n <p class=\"price\">\n {{ order.payments[0].state | translate | titlecase }}\n </p>\n }\n </div>\n <div class=\"col-lg-2 col-12\">\n <p class=\"price\">\n {{ order.shipments[0].method.name }}\n </p>\n </div>\n <div class=\"col-lg-2 col-12\">\n <p class=\"price\">\n {{ order.shipments[0].state | translate | titlecase }}\n </p>\n <!-- ACA DEBERIA IR EL LINK DE SEGUIMIENTO -->\n <!-- <button class=\"btn btn-outline-dark btnLogout px-3 py-1 font-size-10 w-auto btn-sm\">Ver seguimiento</button> -->\n @if(order.tracking){\n <a [href]=\"order.tracking\"\n class=\"btn btn-outline-dark btnLogout px-3 py-1 font-size-10 w-auto btn-sm\">Ver seguimiento</a>\n }\n </div>\n <div class=\"col-lg-2 col-12\">\n <p class=\"price\">\n {{ toDate(order.checkoutCompletedAt, 'DD/MM/YYYY') | translate }}<br>\n {{ toDate(order.checkoutCompletedAt, 'h:mm:ss a') | translate }}\n </p>\n </div>\n <div class=\"col-lg-2 col-12 d-flex\">\n @if(creditAmountConfigured ? showPrice : true){\n <h5 class=\"fw-bold text-nowrap\">\n {{ (order.totals.total) | ecCurrencySymbol }}\n </h5>\n }\n <!-- <button class=\"btn px-0 w-100 btdetalle\" (click)=\"goToOrder(order)\">{{\n 'see-order' | translate }}</button> -->\n <button class=\"btn px-0 w-100 btdetalle\" (click)=\"goToOrder(order)\">\n <i class=\"bi bi-box-arrow-in-right\"></i></button>\n </div>\n </div>\n }\n }@else {\n <div class=\"w-100 h-50\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <h5>{{ 'no-orders' | translate }}</h5>\n </div>\n </div>\n }\n </section>\n }@else {\n <div class=\"w-100 h-50 py-5\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </div>\n }\n</div>\n\n<ng-template #errorView>\n <div class=\"w-100 h-50\">\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\n <h4>{{ 'orders-error' | translate }}</h4>\n </div>\n </div>\n</ng-template>\n","import { Component, inject } from '@angular/core';\nimport { OrderEcComponent } from './order-ec/order-ec.component';\nimport { AuthService, ParametersService } from '../../ec-services';\nimport { Router } from '@angular/router';\nimport { OrdersListEcComponent } from './orders-list-ec/orders-list-ec.component';\n\n@Component({\n\tselector: 'lib-account-ec',\n\tstandalone: true,\n\timports: [OrdersListEcComponent],\n\ttemplateUrl: './account-ec.component.html',\n\tstyleUrl: './account-ec.component.scss'\n})\nexport class AccountEcComponent {\n\tprivate _authService: AuthService = inject(AuthService)\n\tprivate _router: Router = inject(Router)\n\tprivate _paramsService: ParametersService = inject(ParametersService)\n\tpublic params$: any = this._paramsService.getParameters()\n\t\n\tlogout = (path:string = '/home') => {\n this._authService.logout();\n this._router.navigateByUrl(path);\n }\n}\n","<section class=\"perfil mt-0\" id=\"accountEcComponent\">\n <div class=\"container row w-100 mx-auto py-md-3\">\n <div class=\"col-12 py-3\">\n <div class=\"row w-100 mx-auto border-bottom justify-content-between align-items-center py-3\">\n <h3 class=\"text-black w-auto\">MIS PEDIDOS</h3>\n <button class=\"btn btn-outline-dark px-3 py-1 font-size-10 w-auto\" (click)=\"logout()\">CERRAR\n SESIÓN</button>\n </div>\n <app-orders-ec></app-orders-ec>\n </div>\n </div>\n</section>\n","import { Component, inject, OnInit } from '@angular/core';\nimport { OrdersService } from '../../../ec-services';\n\n@Component({\n\tselector: 'app-order-ec',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './order-ec.component.html',\n\tstyleUrl: './order-ec.component.scss'\n})\nexport class OrderEcComponent implements OnInit {\n\n\tprivate _orderService: OrdersService = inject(OrdersService);\n\n\tngOnInit(): void {\n\t\tthrow new Error('Method not implemented.');\n\t}\n}\n","<p>order-ec works!</p>\n","//Types\nexport * from './types';\n//Interfaces\nexport * from './connection';\nexport * from './environment';\nexport * from './options';\nexport * from './parameter';\nexport * from './blocks';\nexport * from './product';\nexport * from './analytics';\nexport * from './currency';\nexport * from './deserializable';\nexport * from './storage';\nexport * from './filter';\nexport * from './pagination';\nexport * from './coupon';\nexport * from './step';\nexport * from './checkout';","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';\nimport { AuthService } from '../ec-services';\n/**\n * Guarda que controla que el usuario este logueado a no.\n * @param route \n * @param state \n * @returns \n */\nexport const authGuard: CanActivateFn = (route:ActivatedRouteSnapshot, state) => {\n\tconst authService = inject(AuthService)\n\tconst router = inject(Router);\n\tconst redirectTo = route.data[\"redirectTo\"] || '/'\n\n\tif(!authService.isAuthenticated())\n\t\trouter.navigateByUrl(redirectTo)\n\n\treturn authService.isAuthenticated();\n};\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpHandlerFn, HttpInterceptor, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { AuthService, AuthStorageService } from '../ec-services';\nimport { ApiConstantsService } from '../constants';\nimport { catchError, Observable, of, throwError } from 'rxjs';\n\nconst handleErrors: any = (err: HttpErrorResponse): Observable<HttpEvent<unknown>> => {\n\t\n\tif (err.status === 403) {\n\t\tinject(AuthService).doLogoutUser()\n\t\treturn throwError(() => err)\n\t}\n\tif (err.status === 450 || err.status === 401) {\n\t\t//this.injector.get(ErrorHandlerService).handlerErrorResponse(err.error)\n\t\treturn throwError(() => err)\n\t}\n\treturn throwError(() => err)\n}\n\n\nexport const authInterceptor: HttpInterceptorFn = (req: HttpRequest<unknown>, next: HttpHandlerFn): Observable<HttpEvent<unknown>> => {\n\tconst constants = inject(ApiConstantsService); \n const authTokenService = inject(AuthStorageService); // Servicio más sencillo para obtener el token.\n const authToken = authTokenService.getAuthToken();\n\t\n\tif(authToken && req.url.includes(constants.getUrlBase()) && !req.url.includes('shop-api/login-check')){\n\t\tlet headers = {\n\t\t\tsetHeaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAuthorization: `Bearer ${authToken}`\n\t\t\t}\n\t\t}\n\n\t\tif(req.url.includes('contact-form/response')){\n\t\t\tdelete (headers as any).setHeaders['Content-Type']\n\t\t}\n\t\tlet authReq:HttpRequest<any> = req.clone(headers)\n\n\t\treturn next(authReq)\n\t}\n\n\treturn next(req)\n};","/*\n * Public API Surface of ng-easycommerce\n */\n\n//Components\nexport * from './lib/ec-components';\n\n//Providers\nexport * from './lib/providers';\n\n//Interfaces\nexport * from './lib/interfaces';\n\n//Guards\nexport * from './lib/ec-guards';\n\n//Constants\nexport * from './lib/constants/core.constants.service';\n\n//Pipe\nexport * from './lib/ec-pipe';\n\n//Interceptors\nexport * from './lib/interceptors';\n\n//Services\nexport * from './lib/ec-services';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["register","i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-easycommerce-v18.mjs","sources":["../../../projects/ng-easycommerce-v18/src/lib/providers/provideEnvironment.ts","../../../projects/ng-easycommerce-v18/src/lib/constants/api.constants.service.ts","../../../projects/ng-easycommerce-v18/src/lib/api/connection.service.ts","../../../projects/ng-easycommerce-v18/src/lib/constants/core.constants.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/options.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/parameters.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/blocks-repository.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/blocks.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/facebook-pixel.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/google-analytics.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/gtm.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/doppler.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/metricool-pixel.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/analytics/analytics.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/channel.service.ts","../../../projects/ng-easycommerce-v18/src/lib/stores/currency.store.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/currency.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/toast.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/re-captcha.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/form.service.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/user.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/filter.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/category-filter.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/attributes-filter.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/dynamics-filter.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/sort-filter.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/filters/filter-factory.ts","../../../projects/ng-easycommerce-v18/src/lib/classes/checkout/steps.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/local-storage.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/auth.storage.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/auth.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/filters.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/pagination.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/products.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/ngx-local-storage.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/cart.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/product-detail.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/order-utility.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/checkout.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/addressing.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/stores.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/shipment.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/payment.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/test.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-services/orders.service.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/abstractions-components/menu-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/abstractions-components/block-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/footer-ec/footer-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/footer-ec/footer-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/header-ec/header-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/header-ec/header-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/home-ec/home-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/home-ec/home-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-pipe/ec-currency-symbol.pipe.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/product-ec/product-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/product-ec/product-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/blocks-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/blocks-ec/blocks-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/collection-ec/collection-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/collection-ec/collection-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/auth-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/auth-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/filters-ec/filters-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/filters-ec/filters-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/product-detail-ec/product-detail-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/product-detail-ec/product-detail-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/variants-ec/variants-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/variants-ec/variants-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/cart-ec/cart-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/cart-ec/cart-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/coupon-ec/coupon-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/coupon-ec/coupon-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/checkout-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/checkout-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/account-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/account-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/order-ec/order-ec.component.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-components/account-ec/order-ec/order-ec.component.html","../../../projects/ng-easycommerce-v18/src/lib/interfaces/index.ts","../../../projects/ng-easycommerce-v18/src/lib/ec-guards/auth.guard.ts","../../../projects/ng-easycommerce-v18/src/lib/interceptors/auth.interceptor.ts","../../../projects/ng-easycommerce-v18/src/public-api.ts","../../../projects/ng-easycommerce-v18/src/ng-easycommerce-v18.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from \"@angular/core\";\r\nimport { Environment } from \"../interfaces\";\r\n/**\r\n * Token para el provider de enviroment\r\n */\r\nconst ENVIRONMENT_TOKEN = new InjectionToken<Environment>('app.environment')\r\n/**\r\n * Función que es utilizada para configurar el entorno en donde se estara ejecutando la aplicación.\r\n * @param environment \r\n * @returns \r\n */\r\nconst provideEnvironment = (environment: Environment): EnvironmentProviders => {\r\n return makeEnvironmentProviders([\r\n {\r\n provide: ENVIRONMENT_TOKEN,\r\n useValue: environment\r\n }\r\n ])\r\n}\r\n\r\nexport {\r\n ENVIRONMENT_TOKEN,\r\n provideEnvironment\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { ENVIRONMENT_TOKEN } from '../providers';\r\nimport { Environment } from '../interfaces';\r\nimport { LocalStorageService } from '../ec-services';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { CoreConstantsService } from './core.constants.service';\r\n\r\n/**\r\n * Servicio que provee de datos que estan relacionado con las peticiones a la API\r\n * @export\r\n * @class ApiConstantsService\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ApiConstantsService {\r\n\tprivate _localStorage: LocalStorageService = inject(LocalStorageService);\r\n\tprivate _translate: TranslateService = inject(TranslateService);\r\n\r\n\t/**\r\n\t * Contiene los datos provisto por el frontend en el archivo environment.ts\r\n\t */\r\n\tprivate environment:Environment = inject(ENVIRONMENT_TOKEN)\r\n\t/**\r\n\t * Canal actual del frontend\r\n\t */\r\n\tpublic CHANNEL:string = this.environment.channel;\r\n\t/**\r\n\t * Locale actual del frontend\r\n\t */\r\n\tpublic LOCALE:string = this.environment.locale;\r\n\t/**\r\n\t * URL del backend para realizar las peticiones\r\n\t */\r\n\tpublic readonly API_URL:string = this.environment.apiUrl;\r\n\t/**\r\n\t * URL para las peticiones a shop-api\r\n\t */\r\n\tpublic readonly SHOP_API_URL:string = 'shop-api/';\r\n\t/**\r\n\t * URL para las peticiones a cms\r\n\t */\r\n\tpublic readonly CMS_URL:string = 'cms/';\r\n\t/**\r\n\t * URL base para realizar las peticiones a la API\r\n\t */\r\n\tprivate urlBase: string = this.environment.apiUrl\r\n\t/**\r\n\t * Retorna la url base\r\n\t * @returns {string}\r\n\t */\r\n\tpublic getUrlBase(): string { return this.urlBase}; \r\n\t/**\r\n\t * Cambia el canal actual\r\n\t * @param code\r\n\t * @returns \r\n\t */\r\n\tpublic setChannel(code: string):void{ this.CHANNEL = code;} \r\n\r\n\tpublic setLocale(locale: string):void{\r\n\t\tthis._localStorage.setItem(this.LOCALE_KEY, locale);\r\n\t\tthis._translate.use(locale.split('_')[0])\r\n\t\tthis.LOCALE = locale;\r\n\t}\r\n\r\n\t//Storage key\r\n\tprivate readonly LOCALE_KEY:string = 'LOCALE';\r\n\tprivate readonly CHANNEL_KEY:string = 'CHANNEL';\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Connection } from '../interfaces';\r\nimport { map, Observable, of, take } from 'rxjs';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { ApiConstantsService } from '../constants/api.constants.service';\r\n\r\n/**\r\n * Servicio que funciona como abstracción para manejar la conexión con la API\r\n * @export\r\n * @class ConnectionService\r\n * @implements {Connection}\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class ConnectionService implements Connection {\r\n\t/**\r\n\t * Herrramienta usada para generar las peticiones.\r\n\t * @memberof ConnectionService\r\n\t */\r\n\tprivate readonly _http = inject(HttpClient);\r\n\r\n\t/**\r\n\t * Servicio que contiene las constantes usadas para la API\r\n\t * @memberof ConnectionService\r\n\t */\r\n\tprivate constantsSvr = inject(ApiConstantsService);\r\n\r\n\t/**\r\n\t * URL Base para las peticiones.\r\n\t * @type {string}\r\n\t * @memberof ConnectionService\r\n\t */\r\n\tprivate url: string;\r\n\r\n\tconstructor() {\r\n\t\tthis.url = this.constantsSvr.getUrlBase();\r\n\t}\r\n\r\n\t/**\r\n\t * Función para generar peticiones de tipo GET\r\n\t * @param apiurl url del endpoint\r\n\t * @param data parametros para la url\r\n\t * @returns \r\n\t */\r\n\tget(apiurl: string, data?: any): Observable<any> {\r\n\t\treturn this._http.get<any>(this.url + apiurl, { params: { ...data } }).pipe(take(1));\r\n\t}\r\n\tgetErrorNotHandler(apiurl: string): Observable<any> {\r\n return this._http.get<any>(this.url + apiurl).pipe(take(1));\r\n }\r\n\r\n\t/**\r\n\t * Funcion para generar peticiones de tipo POST\r\n\t * @param apiurl url del endpoint\r\n\t * @param data \r\n\t */\r\n\tpost(apiurl: string, data?: any): Observable<any> {\r\n\t\treturn this._http.post<any>(this.url + apiurl, data || {}).pipe(take(1));\r\n\t}\r\n\tput(apiurl: string, data?: any): Observable<any> {\r\n\t\treturn this._http.put<any>(this.url + apiurl, data).pipe(take(1));\r\n\t}\r\n\tdelete(apiurl: string, data?: any): Observable<any> {\r\n\t\treturn this._http.delete<any>(this.url + apiurl).pipe(take(1));\r\n\t}\r\n\t/**\r\n\t * Genera un petición tipo GET pero usando el parametro como la url completa.\r\n\t * @param fullurl \r\n\t * @returns \r\n\t */\r\n\tgetWithFullUrl(fullurl: string): Observable<any> {\r\n\t\treturn this._http.get<any[]>(fullurl)\r\n\t}\r\n\r\n\t/* formUrl = (api: string) => {\r\n\t return window.location.protocol == 'https:' && !this.url.includes('https') ? (this.url.replace('http', 'https')) + api : this.url + api;\r\n\t} */\r\n}\r\n","import { inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { ApiConstantsService } from './api.constants.service';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { CurrencyConfig, currencyType, ParamsProductsWithUniqueVariant } from '../interfaces';\r\n/**\r\n * Servicio que provee las constantes necesarias que se utilizan por toda la aplicación.\r\n * @export\r\n * @class CoreConstantsService\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CoreConstantsService {\r\n\r\n\t/**\r\n\t * Servicio que contiene las constantes usadas para la API\r\n\t */\r\n\tprivate apiConstants = inject(ApiConstantsService)\r\n\t/**\r\n\t * Provee el ID de la plataforma en donde se esta ejecutando el codigo, esto sirve para poder diferenciar si es de un servidor o un navegador web.\r\n\t */\r\n\tprivate platformId: any = inject(PLATFORM_ID)\r\n\t/**\r\n\t * Guarda la variable window del web browser.\r\n\t */\r\n\tprivate window?:Window;\r\n\r\n\tconstructor() {\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tthis.window = window\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Path usado en las colecciones de productos.\r\n\t */\r\n\tpublic PRODUCT_LIST_ROUTE: string = 'collection/';\r\n\t/**\r\n\t * Path usado para acceder a las secciones.\r\n\t */\r\n\tpublic SECTIONS_ROUTE: string = 'sections/';\r\n\t/**\r\n\t * Path que aloja la carpeta de los assets.\r\n\t */\r\n\tpublic readonly ASSETS_URL: string = this.apiConstants.API_URL;\r\n\t/**\r\n\t * Retorna la url donde se guarda las imagenes.\r\n\t * @param postMedia \r\n\t * @returns \r\n\t */\r\n\tpublic mediaUrl = (postMedia?: string) => this.ASSETS_URL + (this.ASSETS_URL == this.apiConstants.API_URL ? 'media/' : '') + (postMedia ? postMedia : \"image/\");\r\n\t/**\r\n\t * Retorna la url del sitio.\r\n\t * @param postMedia \r\n\t * @returns \r\n\t */\r\n\tpublic url = () => this.apiConstants.API_URL.replace(/\\/$/, ''); // remove last slash\t\r\n\t/**\r\n\t * Retorna la url de las imagenes de los banners\r\n\t * @returns \r\n\t */\r\n\tpublic mediaBannerUrl = () => this.ASSETS_URL + (this.ASSETS_URL == this.apiConstants.API_URL ? 'media/' : '') + \"banner-image/\";\r\n\t/**\r\n\t * Retorna `true` si la vista es mobile, `false` caso contrario.\r\n\t * @returns {boolean}\r\n\t */\r\n\tpublic mobileScreen = (): boolean => this.window && this.window?.innerWidth < 750 || false;\r\n\t/**\r\n\t * Contiene los valores para la moneda actual\r\n\t */\r\n\tpublic currency: CurrencyConfig = {\r\n\t\tcode: 'ARG',\r\n\t\tsymbol: '$',\r\n\t\tposition: 'Left',\r\n\t\twithoutDecimal: false\r\n\t};\r\n\r\n\t/**\r\n\t * Arreglo de valores usados para el pipe currencyPrice\r\n\t */\r\n\tpublic currencyTypeConfig: CurrencyConfig[] = [\r\n\t\t{\r\n\t\t\tcode: 'EUR',\r\n\t\t\tsymbol: '€',\r\n\t\t\tposition: 'Right',\r\n\t\t\twithoutDecimal: false\r\n\r\n\t\t},\r\n\t\t{\r\n\t\t\tcode: 'ARG',\r\n\t\t\tsymbol: '$',\r\n\t\t\tposition: 'Left',\r\n\t\t\twithoutDecimal: false\r\n\t\t},\r\n\t\t{\r\n\t\t\tcode: 'ARS',\r\n\t\t\tsymbol: '$',\r\n\t\t\tposition: 'Left',\r\n\t\t\twithoutDecimal: false\r\n\t\t},\r\n\t\t{\r\n\t\t\tcode: 'USD',\r\n\t\t\tsymbol: '$',\r\n\t\t\tposition: 'Left',\r\n\t\t\twithoutDecimal: false\r\n\t\t},\r\n\t\t{\r\n\t\t\tcode: 'PYG',\r\n\t\t\tsymbol: 'Gs.',\r\n\t\t\tposition: 'Left',\r\n\t\t\twithoutDecimal: false\r\n\t\t},\r\n\t\t{\r\n\t\t\tcode: 'PEN',\r\n\t\t\tsymbol: 'S/',\r\n\t\t\tposition: 'Left',\r\n\t\t\twithoutDecimal: false\r\n\t\t},\r\n\t\t{\r\n\t\t\tcode: 'SEK',\r\n\t\t\tsymbol: 'SEK',\r\n\t\t\tposition: 'Right',\r\n\t\t\twithoutDecimal: true\r\n\t\t},\r\n\t]\r\n\t/**\r\n\t * Cambia la configuración de la moneda.\r\n\t * @param currencyTypeConfig Arreglo con las distintas monedas.\r\n\t */\r\n\tpublic setCurrencyTypeConfig(currencyTypeConfig: CurrencyConfig[]) {\r\n\t\tthis.currencyTypeConfig = currencyTypeConfig;\r\n\t}\r\n\r\n\t/**\r\n\t * @param currencyTypeFind Definir el code del tipo de moneda que se quiera utilizar.\r\n\t * 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.\r\n\t * @param customType Formato del parámetro ejemplo { code: 'ARG', symbol: '$', position: 'L' , withoutDecimals: false } ,\r\n\t * todas las key son opcionales y por defecto se toman los valores del ejemplo.\r\n\t * @returns se retorna la configuración que se seteo a la propiedad currency del servicio.\r\n\t */\r\n\tpublic setCurrency(currencyTypeFind: currencyType, customType?: CurrencyConfig): CurrencyConfig {\r\n\t\tthis.currency = this.currencyTypeConfig.find((ct: CurrencyConfig) => ct.code == currencyTypeFind.toUpperCase()) || this.currency\r\n\t\tcustomType && (this.currency = { ...this.currency, ...customType })\r\n\t\treturn this.currency;\r\n\t};\r\n\r\n\r\n\tpublic modifyChannelConfig(channelConfig: any) {\r\n\t\tif (channelConfig.channel || channelConfig.code)\r\n\t\t\tthis.apiConstants.setChannel(channelConfig.channel || channelConfig.code)\r\n\r\n\t\tif (channelConfig.locale || channelConfig.locales.code)\r\n\t\t\tthis.apiConstants.setLocale(channelConfig.locale || channelConfig.locales.code)\r\n\r\n\t\tif (channelConfig.currency || channelConfig.baseCurrency)\r\n\t\t\tthis.setCurrency(channelConfig.currency || channelConfig.baseCurrency)\r\n\r\n\t\treturn channelConfig;\r\n\t}\r\n\r\n\t/**\r\n\t* @description se utiliza para configurar que filtros del tipo `SortFilter` se quiere mostrar en la vista.\r\n\t* Se usan los codigo de los filtros para indicar cuales se deben mostrar.\r\n\t*/\r\n\tprivate sortFilters: string[] = ['price', 'order-alph', 'recent']\r\n\r\n\t/**\r\n\t *\r\n\t * @param filtersCode arreglo de strings con los codigos de los filtros.\r\n\t * Si se le pasa el parametro **all** este mostrara todos.\r\n\t * @example price | order-alph | recent | update | all\r\n\t * @returns\r\n\t */\r\n\tsetSortFilters = (filtersCode: string[] = ['all']) => this.sortFilters = filtersCode;\r\n\r\n\tgetSortFilters = () => this.sortFilters;\r\n\r\n\t// ABOUT PRODUCTS \r\n\tprivate productsWithUniqueVariant: boolean = false;\r\n\tsetProductWithUniqueVariant(value: boolean) { this.productsWithUniqueVariant = value; }\r\n\tgetProductWithUniqueVariant() { return this.productsWithUniqueVariant }\r\n\r\n\t/**\r\n\t* @description esta variable se utiliza para configurar los parametros cuando se desea mostrar\r\n\t* variantes el listado de productos.\r\n\t* @param {string}type tipo de options\r\n\t* @param {string}code codigo de options\r\n\t* @param {boolean}defaultFirstOption `true` toma el primer option del producto en general\r\n\t* @param {boolean}checkIfStock `true` se realiza un chequeo de si la variante tiene stock para mostrarla\r\n\t* @example ```javascript\r\n\t* {\r\n\t type: 'color',\r\n\t code: 'color',\r\n\t defaultFirstOption: false ,\r\n\t checkIfStock:true\r\n\t } ```\r\n\t*/\r\n\tprivate paramsProductsWithUniqueVariant: ParamsProductsWithUniqueVariant = {\r\n\t\ttype: 'color',\r\n\t\tcode: 'color',\r\n\t\tdefaultFirstOption: false,\r\n\t\tcheckIfStock: true\r\n\t}\r\n\r\n\tsetParamsProductsWithUniqueVariant = (value: ParamsProductsWithUniqueVariant) => {\r\n\t\tthis.paramsProductsWithUniqueVariant = {\r\n\t\t\t...this.paramsProductsWithUniqueVariant,\r\n\t\t\t...value\r\n\t\t}\r\n\t}\r\n\r\n\tgetParamsProductsWithUniqueVariant = () => this.paramsProductsWithUniqueVariant\r\n\t\r\n\tpublic getChannel(){\r\n\t\treturn this.apiConstants.CHANNEL;\r\n\t}\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ConnectionService } from '../api';\r\nimport { BehaviorSubject, catchError, map, Observable, of, shareReplay, take } from 'rxjs';\r\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\r\nimport { Attribute, Category, Section } from '../interfaces';\r\nimport { Filter } from '../classes';\r\n/**\r\n * Este servicio permite maneja las Categorias, Secciones y Atributos como menues \r\n * para la aplicación. \r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class OptionsService {\r\n\t/**\r\n\t * Maneja las peticiones a la API\r\n\t */\r\n\tprivate connection = inject(ConnectionService);\r\n\t/**\r\n\t * Constantes del core\r\n\t */\r\n\tprivate constants = inject(CoreConstantsService);\r\n\t/**\r\n\t * Constantes de la API\r\n\t */\r\n\tprivate apiConstants = inject(ApiConstantsService);\r\n\t/**\r\n\t * Maneja los cambios en las categorias\r\n\t */\r\n\tprivate categoriesSubject = new BehaviorSubject<Category[]>([]);\r\n\tprivate categories$: Observable<Category[]> = this.categoriesSubject.asObservable(); \r\n\t/**\r\n\t * Maneja los cambios en las secciones\r\n\t */\r\n\tprivate sectionsSubject = new BehaviorSubject<Section[]>([]);\r\n\tprivate sections$: Observable<Section[]> = this.sectionsSubject.asObservable();\r\n\t/**\r\n\t * Maneja los cambios en los atributos\r\n\t */\r\n\tprivate attributesSubject = new BehaviorSubject<Attribute[]>([]);\r\n\tprivate attributes$:Observable<Attribute[]> = this.attributesSubject.asObservable();\r\n\r\n\t//API URLS\r\n\tprivate readonly SHOP_CHANNEL_API = `${this.apiConstants.SHOP_API_URL}${this.apiConstants.CHANNEL}/`;\r\n\tprivate readonly CMS_CHANNEL_API = `${this.apiConstants.CMS_URL}${this.apiConstants.CHANNEL}/`;\r\n\t/**\r\n\t * Devuelve la URL para obtener las categorias.\r\n\t * @returns \r\n\t */\r\n\tprivate taxonsApi() { return `${this.SHOP_CHANNEL_API}taxons/?locale=${this.apiConstants.LOCALE}` };\r\n\t/**\r\n\t * Devuelve la URL para obtener las secciones\r\n\t * @returns \r\n\t */\r\n\tprivate sectionsApi() { return `${this.CMS_CHANNEL_API}sections/?locale=${this.apiConstants.LOCALE}` };\r\n\t/**\r\n\t * Devuelve la URL para obtener los atributos. Se le puede aplicar flitros.\r\n\t * @param filter \r\n\t * @returns \r\n\t */\r\n\tprivate attributesApi(filter = '') { return `${this.SHOP_CHANNEL_API}product-search/attributes/?locale=${this.apiConstants.LOCALE}&limit=1&page=1${filter}` };\r\n\t\r\n\tconstructor() { }\r\n\t/**\r\n\t * Obtiene las categorias del backend. Y los mapea para que sea mas amigable el manejo como menú.\r\n\t * @returns \r\n\t */\r\n\tpublic getCategories(): Observable<Category[]> {\r\n\t\tif(this.categoriesSubject.getValue().length === 0){\r\n\t\t\tthis.connection.get(this.taxonsApi()).pipe(\r\n\t\t\t\tshareReplay(1),\r\n\t\t\t\tmap((response: Category[]) => { \r\n\t\t\t\t\tconst categories = this.appendPaths(true,response)\r\n\t\t\t\t\tthis.categoriesSubject.next(categories)\r\n\t\t\t\t\treturn categories\r\n\t\t\t\t}),\r\n\t\t\t\t\tcatchError((error:any)=> {\r\n\t\t\t\t\t\tconsole.log(`Error: ${error}`)\r\n\t\t\t\t\t\tthis.categoriesSubject.next([])\r\n\t\t\t\t\t\treturn of([])\r\n\t\t\t\t\t})\r\n\t\t\t).subscribe();\r\n\t\t}\r\n\t\treturn this.categories$;\r\n\t}\r\n\t/**\r\n\t * Obtiene las secciones del backend. Y los mapea para que sea mas amigable el manejo como menú.\r\n\t * @returns \r\n\t */\r\n\tpublic getSections(): Observable<Section[]> {\r\n\t\tif (this.sectionsSubject.getValue().length === 0) {\r\n\t\t\tthis.connection.get(this.sectionsApi()).pipe(\r\n\t\t\t\tshareReplay(1),\r\n\t\t\t\tmap((response: Section[]) => {\r\n\t\t\t\t\tlet sections = response.filter((section: Section) => section.code != 'home')\r\n\t\t\t\t\tsections = sections.map((section: Section) => this.appendSection(section))\r\n\t\t\t\t\tthis.sectionsSubject.next(sections)\r\n\t\t\t\t\treturn sections\r\n\t\t\t\t})).subscribe()\r\n\t\t}\r\n\t\treturn this.sections$;\r\n\t}\r\n\t/**\r\n\t * Obtiene los atributos del backend. Y los mapea para que sea mas amigable el manejo como menú.\r\n\t * @param params \r\n\t * @returns \r\n\t */\r\n\tpublic getAttributes(params?: any): Observable<Attribute[]> {\r\n\t\tif (this.attributesSubject.getValue().length === 0) {\r\n\t\t\tthis.connection.get(this.attributesApi(params)).pipe(\r\n\t\t\t\tshareReplay(1),\r\n\t\t\t\tmap((response: any | Attribute) => {\r\n\t\t\t\t\tconst attributes = this.appendPaths(false, (response.attributes[0] || response))\r\n\t\t\t\t\tthis.attributesSubject.next(attributes)\r\n\t\t\t\t\treturn attributes\r\n\t\t\t\t}\r\n\t\t\t\t)).subscribe()\r\n\t\t}\r\n\t\treturn this.attributes$;\r\n\t}\r\n\r\n\r\n\t// HELPERS\r\n\tprivate slugify = (text: string) => this.removeAccents(text.toLowerCase().replace(/ & /g, ' ').replace(/ /g, '-').replace(/\\//g, '-').replace(/ñ/g, 'n'));\r\n\t/**\r\n\t * Elimina los acentos\r\n\t * @param str \r\n\t * @returns \r\n\t */\r\n\tprivate removeAccents(str: string){\r\n\t\treturn str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\r\n\t}\r\n\t/**\r\n\t * Realiza un mapeo de los datos para darle un formato mas entendible a la\r\n\t * hora de usar como un menú.\r\n\t * @param isCategory Utilizado para diferenciar si es categoría o atributo.\r\n\t * @param response Respuesta que obtiene del backend con los datos a mapear.\r\n\t * @returns \r\n\t */\r\n\tpublic appendPaths(isCategory: boolean, response: any) {\r\n\t\tconst result = response.map((subelement: any) => {\r\n\t\t\tif (!subelement.children || subelement.children.length == 0) {\r\n\t\t\t\tsubelement.children = [];\r\n\t\t\t\tsubelement.path = isCategory ? this.constants.PRODUCT_LIST_ROUTE + 'categories/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name))\r\n\t\t\t\t\t: this.constants.PRODUCT_LIST_ROUTE + 'attributes/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name));\r\n\t\t\t} else if (subelement.children) {\r\n\t\t\t\tsubelement.slug = subelement.slug || this.slugify(subelement.name);\r\n\t\t\t\tsubelement.children = this.appendPaths(isCategory, subelement.children);\r\n\t\t\t}\r\n\t\t\tisCategory ? subelement.path = this.constants.PRODUCT_LIST_ROUTE + 'categories/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name))\r\n\t\t\t\t: subelement.path = this.constants.PRODUCT_LIST_ROUTE + 'attributes/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name));\r\n\t\t\treturn subelement;\r\n\t\t});\r\n\t\treturn result;\r\n\t}\r\n\t/**\r\n\t * Genera un mapeo de secciones para que queden mas amigables a la hora de manejar como menú.\r\n\t * @param section \r\n\t * @returns \r\n\t */\r\n\tprivate appendSection(section:any) {\r\n let data: any = {};\r\n if (section.pages?.length) {\r\n data.type = 'sub';\r\n data.children = section.pages.map((page:any) => {\r\n return {\r\n code: page.code,\r\n name: page.name,\r\n type: 'link',\r\n path: this.constants.SECTIONS_ROUTE + (page.slug ? page.slug : page.code),\r\n // path: this.constants.SECTIONS_ROUTE + page.slug,\r\n }\r\n });\r\n //data.title = section.name;\r\n data.name = section.name;\r\n data.path = this.constants.SECTIONS_ROUTE + (section.slug ? section.slug : section.code);\r\n data.code = section.code;\r\n } else {\r\n data.code = section.code;\r\n //data.title = section.name;\r\n\t\t\tdata.name = section.name;\r\n data.type = 'link';\r\n data.children = [];\r\n data.path = this.constants.SECTIONS_ROUTE + (section.slug ? section.slug : section.code);\r\n }\r\n return data;\r\n\t}\r\n\t/**\r\n\t * Mapea los elementos para darle un formato mas amigable para los menúes y filtros.\r\n\t * @param elements categorias | atributos \r\n\t * @returns \r\n\t */\r\n\tpublic generateMenu = (elements:any) => {\r\n\t\treturn elements.map( (element: any) => {\r\n\t\t\tif (element.children && element.children.length == 0) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...element,\r\n\t\t\t\t\ttitle: element.name,\r\n\t\t\t\t\tpath: element.path,\r\n\t\t\t\t\ttype: 'link',\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...element,\r\n\t\t\t\t\ttitle: element.name,\r\n\t\t\t\t\ttype: 'sub',\r\n\t\t\t\t\tpath: element.path,\r\n\t\t\t\t\tchildren : ( element.children ? this.generateMenu(element.children) : [])\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\t/**\r\n\t * Devuelve los elementos del breadcrumb.\r\n\t * @param code \r\n\t * @returns \r\n\t */\r\n\tgetBreadcrumb = (code:any) => {\r\n if (!code) return null;\r\n let breadcrumb = this.generateBreadcrumb(code, this.generateMenu(this.categoriesSubject.value), []);\r\n if (!breadcrumb || !breadcrumb.length) breadcrumb = this.generateBreadcrumb(code, this.generateMenu(this.attributesSubject.value), []);\r\n return (breadcrumb && breadcrumb.length) && breadcrumb.reverse();\r\n }\r\n\t/**\r\n\t * Genera los breadcrumbs en base a los filtros aplicados.\r\n\t * @param filters \r\n\t * @returns \r\n\t */\r\n\tgetBreadcrumbByFilters = (filters: Filter[]) => {\r\n let final_result:any[] = [];\r\n filters.forEach(filter => {\r\n let result = filter.getSelectedList();\r\n if (!result || !result.length) return;\r\n\r\n if (filter.type() == 'categories') final_result.unshift(...this.generateBreadcrumb(result[0], filter.data, []).reverse());\r\n else result.forEach(\r\n (code:any) => {\r\n let breadcrumb = this.generateBreadcrumb(code, filter.data, [])\r\n breadcrumb.length && final_result.push(breadcrumb[0]);\r\n }\r\n );\r\n });\r\n\r\n return final_result;\r\n }\r\n\t/**\r\n\t * Genera el listado de breadcrumb.\r\n\t * @param code \r\n\t * @param elements filtros actuales en el frontend\r\n\t * @param result datos a actualizar con el nuevo listado de breadcrumb\r\n\t * @returns \r\n\t */\r\n\tprivate generateBreadcrumb = (code:string, elements:any, result:any) => {\r\n let element = elements.find((elem:any) => elem.code == code);\r\n if (element) {\r\n result.push(element);\r\n }\r\n else {\r\n elements.some((elem:any) => {\r\n if (elem.children && elem.children.length) {\r\n const length = result.length;\r\n let new_result = this.generateBreadcrumb(code, elem.children, result);\r\n if (new_result.length > length) {\r\n result = new_result;\r\n result.push(elem);\r\n return true;\r\n }\r\n }\r\n return false;\r\n })\r\n }\r\n return result;\r\n }\r\n} \r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ApiConstantsService } from '../constants';\r\nimport { ConnectionService } from '../api';\r\nimport { BehaviorSubject, catchError, map, Observable, of, shareReplay } from 'rxjs';\r\nimport { Parameter } from '../interfaces';\r\n/**\r\n * Servicio que maneja los parametros de la aplicación.\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class ParametersService {\r\n\t/**\r\n\t * Constantes de la API\r\n\t */\r\n\tprivate apiConstants = inject(ApiConstantsService)\r\n\t/**\r\n\t * Maneja las peticiones a la API\r\n\t */\r\n\tprivate connection = inject(ConnectionService)\r\n\r\n\t//API URLS\r\n\t/**\r\n\t * Devuelve la URL para obtener todos los parametros.\r\n\t * @returns \r\n\t */\r\n\tprivate getAllParametersAPI() { return `${this.apiConstants.SHOP_API_URL}${this.apiConstants.CHANNEL}/parameters` }\r\n\r\n\t//OBSERVABLES\r\n\t/**\r\n\t * Subject para manejar los cambios en los datos de los parametros\r\n\t */\r\n\tprivate parametersSubject = new BehaviorSubject<Parameter[] | null>(null);\r\n\tprivate parameters$: Observable<Parameter[] | null> = this.parametersSubject.asObservable();\r\n\r\n\t//METHODS\r\n\t/**\r\n\t * Obtiene los parámetros del backend. \r\n\t * @returns \r\n\t */\r\n\tpublic getParameters(): Observable<Parameter[] | null> {\r\n\t\tif (this.parametersSubject.getValue() === null) {\r\n\t\t\tthis.connection.get(this.getAllParametersAPI()).pipe(\r\n\t\t\t\tshareReplay(1),\r\n\t\t\t\tmap((response: Parameter[]) => {\r\n\t\t\t\t\tthis.parametersSubject.next(response)\r\n\t\t\t\t\treturn response\r\n\t\t\t\t}), catchError((error: any) => {\r\n\t\t\t\t\tconsole.log(`Error: ${error}`)\r\n\t\t\t\t\tthis.parametersSubject.next([])\r\n\t\t\t\t\treturn of([])\r\n\t\t\t\t})\r\n\t\t\t).subscribe();\r\n\t\t}\r\n\t\treturn this.parameters$\r\n\t}\r\n\t/**\r\n\t * Comprueba si el código de un parámetro existe en la lista de parámetros.\r\n\t * @param params Lista de parámetros\r\n\t * @param code Código del parámetro a buscar\r\n\t * @returns El objeto con los datos del parámetro encontrado, sino retorna `null`\r\n\t */\r\n\tpublic hasParams(params: any, code: string): any { return params && params.find((param: any) => param.code?.toLowerCase().includes(code.toLowerCase())) }\r\n\r\n\tconstructor() { }\r\n\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ApiConstantsService } from '../constants';\r\nimport { BehaviorSubject, map, Observable, shareReplay } from 'rxjs';\r\nimport { IBlock, IBlockInfo } from '../interfaces';\r\nimport { ConnectionService } from '../api';\r\n/**\r\n * Servicio que maneja los bloques como repositorio.\r\n * @class BlocksRepositoryService\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class BlocksRepositoryService {\r\n\t/**\r\n\t * Constantes de la API\r\n\t */\r\n\tprivate apiConstants = inject(ApiConstantsService);\r\n\t/**\r\n\t * Menaja las conexiones con la API\r\n\t */\r\n\tprivate connection = inject(ConnectionService)\r\n\t/**\r\n\t * Subject para manejar los bloques recibidos.\r\n\t */\r\n\tprivate blocksSubject = new BehaviorSubject<IBlock[]>([])\r\n\t/**\r\n\t * Observable de bloques.\r\n\t */\r\n\tprivate blocks$: Observable<IBlock[]> = this.blocksSubject.asObservable();\r\n\r\n\t//API URLS\r\n\t/**\r\n\t * Devuelve la url para obtener los bloques segun la sección.\r\n\t * @param section \r\n\t * @returns \r\n\t */\r\n\tblocksAPI(section: string) { return `${this.apiConstants.CMS_URL}${this.apiConstants.CHANNEL}/blocks/section/${section}?locale=${this.apiConstants.LOCALE}` }\r\n\r\n\t/**\r\n\t * Obtiene los bloques segun la seccion del Backend.\r\n\t * @param section \r\n\t * @returns Un observable de los bloques.\r\n\t */\r\n\tpublic getBlocks(section: string): Observable<IBlock[]> {\r\n\t\t//if(this.blocksSubject.getValue() != null){\r\n\t\tthis.connection.get(this.blocksAPI(section)).pipe(\r\n\t\t\tshareReplay(1),\r\n\t\t\tmap((response: any) => {\r\n\t\t\t\t//console.log(response)\r\n\t\t\t\tthis.blocksSubject.next(response.items)\r\n\t\t\t\treturn response\r\n\t\t\t})\r\n\t\t).subscribe()\r\n\t\t//}\r\n\t\treturn this.blocks$\r\n\t}\r\n\r\n\t/* private hasSectionBlocks = (section: string) => {\r\n\t\t\r\n\t} */\r\n\r\n\tprivate appendBlock = (blocks: IBlock[], section: string) => {\r\n\t\tconst new_block: IBlockInfo = { section, blocks };\r\n\r\n\t}\r\n\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { ApiConstantsService } from '../constants';\r\nimport { BlocksRepositoryService } from './blocks-repository.service';\r\nimport { IBlock } from '../interfaces';\r\n/**\r\n * Servicio de tipo adapter para manejar los bloques.\r\n * @class BlocksService\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class BlocksService {\r\n\t/**\r\n\t * Constantes de la API\r\n\t */\r\n\tprivate apiConstants = inject(ApiConstantsService);\r\n\t/**\r\n\t * Servicio de BlocksRepository.\r\n\t */\r\n\tprivate blocksRepositoryService = inject(BlocksRepositoryService);\r\n\t/**\r\n\t * Subject para manejar los bloques recibidos.\r\n\t */\r\n\tprivate blocksSubject = new BehaviorSubject<any[]>([]);\r\n\t/**\r\n\t * Observable de bloques.\r\n\t */\r\n\tpublic blocks$: Observable<any[]> = this.blocksSubject.asObservable();\r\n\r\n\t//API URLS\r\n\t/**\r\n\t * Devuelve la url para interactuar con el bloque de contacto.\r\n\t * @returns \r\n\t */\r\n\tcontactFormResponseAPI() { return `${this.apiConstants.CMS_URL}${this.apiConstants.LOCALE}/contact-form/response` }\r\n\r\n\t//METHODS\r\n\t/**\r\n\t * Obtiene los bloques de una sección en especifico.\r\n\t * @param section \r\n\t * @returns Observable de los bloques.\r\n\t */\r\n\tpublic getBlocks(section: string): Observable<any> {\r\n\t\treturn this.blocksRepositoryService.getBlocks(section)\r\n\t}\r\n\tconstructor() { }\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { inject, Injectable, PLATFORM_ID, Renderer2, RendererFactory2 } from '@angular/core';\r\nimport { AnalyticEventKey, FacebookPixelData } from '../../interfaces';\r\n/**\r\n * Funcion que sera dada por el script que se inserta en el inicializador de Facebook Analytics.\r\n * \r\n * https://es-la.facebook.com/business/help/402791146561655?id=1205376682832142 \r\n * \r\n * Relacionado con: {@link FacebookPixelService}\r\n */\r\ndeclare let fbq: Function;\r\n/**\r\n * Servicio que se encarga de manejar el Analytics de Facebook.\r\n * @class FacebookPixelService\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FacebookPixelService {\r\n\r\n private rendererFactory: RendererFactory2 = inject(RendererFactory2)\r\n private document: Document | null = null;\r\n /**\r\n * Se encarga de crear el elemento HTML con las configuraciones para \r\n * que se pueda ejecutar el servicio.\r\n */\r\n private renderer: Renderer2;\r\n /**\r\n * Indica cuando el servicio esta habilitado.\r\n */\r\n private enabled: boolean = false;\r\n private platformId = inject(PLATFORM_ID);\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.document = inject(DOCUMENT); // Solo se inyecta en el navegador\r\n }\r\n this.renderer = this.rendererFactory.createRenderer(null, null);\r\n }\r\n /**\r\n * Inicializa el Servicio de analytics con sus configuraciones.\r\n * @param pixel_id id provisto por Facebook Pixel.\r\n */\r\n initialize(pixel_id: any) {\r\n if (!this.document?.getElementById('facebook_pixel')) {\r\n let new_analityc_script = this.renderer.createElement('script');\r\n new_analityc_script.id = \"facebook_pixel\"\r\n new_analityc_script.type = 'text/javascript';\r\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});`;\r\n this.renderer.appendChild(this.document?.body, new_analityc_script);\r\n this.enabled = true;\r\n }\r\n setTimeout(() => this.callEvent('initialize'), 1000);\r\n }\r\n /**\r\n * Ejecuta el evento pasado por parametro. \r\n * @param event_name Nombre del evento.\r\n * @param data Data extra para agregar al evento.\r\n * @returns \r\n */\r\n callEvent(event_name: AnalyticEventKey, data = {}) {\r\n if (!this.enabled) return;\r\n let event = this.translateEventName(event_name);\r\n event && fbq('track', this.translateEventName(event_name), this.evalEvent(event_name, data));\r\n }\r\n /**\r\n * Traduce el evento recibido y devuelve el nombre de la función que lo va a tratar.\r\n * @param event_name \r\n * @returns \r\n */\r\n translateEventName(event_name: AnalyticEventKey) {\r\n switch (event_name) {\r\n case 'initialize': return 'PageView';\r\n case 'view_item': return 'ViewContent';\r\n case 'checkout_init': return 'InitiateCheckout';\r\n case 'payment_info': return 'AddPaymentInfo';\r\n case 'purchase': return 'Purchase';\r\n case 'add_to_cart': return 'AddToCart';\r\n default: return null;\r\n }\r\n }\r\n /**\r\n * Evalua el evento y devuelve los datos de las funciones relacionadas.\r\n * @param event_name Nombre del evento\r\n * @param data Data extra para agregar al evento\r\n * @returns \r\n */\r\n evalEvent(event_name: AnalyticEventKey, data: any) {\r\n switch (event_name) {\r\n case 'initialize': return data;\r\n case 'view_item': return this.toViewContent(data);\r\n case 'checkout_init': return this.toCheckoutInit(data);\r\n case 'payment_info': return this.toPaymentInfo(data);\r\n case 'purchase': return this.toPurchase(data);\r\n case 'add_to_cart': return this.toAddToCart(data);\r\n default: return data;\r\n }\r\n }\r\n /**\r\n * Para ejecutar un evento propio.\r\n * @param event_name Nombre de evento\r\n * @param data Data extra para agregar al evento.\r\n * @returns \r\n */\r\n callCustomEvent(event_name: AnalyticEventKey, data: FacebookPixelData = {}) {\r\n if (!this.enabled) return;\r\n fbq('trackCustom', event_name, data);\r\n }\r\n /**\r\n * Cambia la variable **enabled** a `false`\r\n * @returns \r\n */\r\n disable() { this.enabled = false };\r\n /**\r\n * Cuando un evento interactua con el contenido de la vista del producto.\r\n * @param data \r\n * @returns \r\n */\r\n private toViewContent(data: any) {\r\n let lastProduct = data?.name || 'not-product'\r\n return {\r\n content_type: 'product',\r\n content_name: lastProduct,\r\n content_ids: [data.variants[0]?.code],\r\n currency: data.currency || \"USD\",\r\n value: data.variants[0]?.saleprice || data.variants[0]?.price,\r\n //product_catalog_id: 'TEST'\r\n }\r\n }\r\n /**\r\n * Evento que se dispara cuando se quiere comprar un producto.\r\n * @param data \r\n * @returns \r\n */\r\n private toPurchase(data: any) {\r\n return {\r\n currency: data.currency || \"USD\",\r\n value: data.totals?.total || 0,\r\n content_type: 'product_group',\r\n contents: this.getContents(data),\r\n //product_catalog_id: 'TEST'\r\n }\r\n }\r\n /**\r\n * Evento que se dispara cuando se inicializa en checkout.\r\n * @param data \r\n * @returns \r\n */\r\n private toCheckoutInit(data: any) {\r\n return {\r\n //content_category : \"inicio checkout\",\r\n content_type: 'product_group',\r\n contents: this.getContents(data),\r\n content_ids: this.getContentIds(data),\r\n currency: data.currency || \"USD\",\r\n num_items: data.items?.length || 0,\r\n value: data.totals?.total || 0,\r\n }\r\n }\r\n /**\r\n * Evento que se dispara cuando se consulta la información de pago.\r\n * @param data \r\n * @returns \r\n */\r\n private toPaymentInfo(data: any) {\r\n return {\r\n //content_category : \"inicio checkout\",\r\n content_type: 'product_group',\r\n contents: this.getContents(data),\r\n content_ids: this.getContentIds(data),\r\n currency: data.currency || \"USD\",\r\n value: data.totals?.total || 0,\r\n }\r\n }\r\n /**\r\n * Evento que se dispara cuando se agrega un producto al carrito. \r\n * @param data \r\n * @returns \r\n */\r\n private toAddToCart(data: any) {\r\n let lastProduct = data.items?.length && data.items[data.items.length - 1]?.product?.name || 'not-product'\r\n return {\r\n content_name: lastProduct,\r\n content_type: 'product',\r\n contents: this.getContents(data),\r\n content_ids: this.getContentIds(data),\r\n currency: data.currency || \"USD\",\r\n value: data.totals?.total || 0,\r\n //product_catalog_id: 'TEST'\r\n\r\n }\r\n }\r\n /**\r\n * Mapeo de datos para obtener solo el ID del producto y la cantidad.\r\n * @param data \r\n * @returns \r\n */\r\n private getContents(data: any) {\r\n return data.items.map(\r\n (item: any) => {\r\n return {\r\n id: item.product.variants[0]?.code,\r\n quantity: item.quantity\r\n }\r\n }\r\n )\r\n }\r\n /**\r\n * Mapeo de datos para obtener solo el ID del producto.\r\n * @param data \r\n * @returns \r\n */\r\n private getContentIds(data: any) {\r\n return data.items.map(\r\n (item: any) => item.product.variants[0]?.code\r\n )\r\n }\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { inject, Injectable, PLATFORM_ID, Renderer2, RendererFactory2 } from '@angular/core';\r\nimport { AnalyticEventKey } from '../../interfaces';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { filter } from 'rxjs';\r\n/**\r\n * Funcion que sera dada por el script que se inserta en el inicializador de Google Analytics.\r\n */\r\ndeclare var gtag: Function;\r\ndeclare var dataLayer: any[];\r\n\r\n/**\r\n * Servicio encargado de manejar el analytics de google.\r\n * @class GoogleAnalyticsService\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class GoogleAnalyticsService {\r\n\t/**\r\n\t * Se encarga de crear el elemento HTML con las configuraciones para \r\n\t * que se pueda ejecutar el servicio.\r\n\t */\r\n\tprivate renderer: Renderer2;\r\n\t/**\r\n\t * Indica cuando el servicio esta habilitado.\r\n\t */\r\n\tprivate enabled: boolean = false;\r\n\r\n\tprivate rendererFactory: RendererFactory2 = inject(RendererFactory2);\r\n\tprivate document: Document | null = null;\r\n\tprivate platformId = inject(PLATFORM_ID);\r\n\r\n\t/**\r\n\t * Servicio de ruteo de angular.\r\n\t */\r\n\tprivate router: Router = inject(Router);\r\n\r\n\tconstructor() {\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tthis.document = inject(DOCUMENT); // Solo se inyecta en el navegador\r\n\t\t}\r\n\t\tthis.renderer = this.rendererFactory.createRenderer(null, null);\r\n\t}\r\n\t/**\r\n\t * Inicializa el Servicio de analytics con sus configuraciones.\r\n\t * @param gtm_id id provisto por Google Tag Manager.\r\n\t */\r\n\tinitialize(gtm_id: string) {\r\n\t\tif (!document.getElementById('google_tag_manager')) {\r\n\t\t\tconsole.log('hay elemento')\r\n\t\t\tconst declaration = this.renderer.createElement('script');\r\n\t\t\tdeclaration.async = true;\r\n\t\t\tdeclaration.id = 'google_tag_manager';\r\n\t\t\tdeclaration.src = `https://www.googletagmanager.com/gtag/js?id=${gtm_id}`;\r\n\t\t\tconst initialization = this.renderer.createElement('script');\r\n\t\t\tinitialization.text = `window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '${gtm_id}')`;\r\n\t\t\tthis.renderer.appendChild(this.document?.head, initialization);\r\n\t\t\tthis.renderer.appendChild(this.document?.head, declaration);\r\n\t\t\tthis.enabled = true;\r\n\t\t}\r\n\t\tsetTimeout(() => this.startListeningPageViews(gtm_id), 1000);\r\n\t}\r\n\t/**\r\n\t * \r\n\t * @param gtm_id \r\n\t */\r\n\tprivate startListeningPageViews(gtm_id: any) {\r\n\t\tthis.router.events.pipe(\r\n\t\t\tfilter(event => event instanceof NavigationEnd)\r\n\t\t).subscribe((event: NavigationEnd) => {\r\n\t\t\tgtag('config', gtm_id, {\r\n\t\t\t\t'page_path': event.urlAfterRedirects\r\n\t\t\t})\r\n\t\t})\r\n\t}\r\n\t/**\r\n\t * Ejecuta el evento pasado por parametro. \r\n\t * @param event_name Nombre del evento.\r\n\t * @param data Data extra para agregar al evento.\r\n\t * @returns \r\n\t */\r\n\tcallEvent(event_name: AnalyticEventKey, data = {}) {\r\n\t\tif (!this.enabled) return;\r\n\t\tlet event = this.translateEventName(event_name);\r\n\t\tevent && gtag('event', this.translateEventName(event_name), this.evalEvent(event_name, data));\r\n\t}\r\n\t/**\r\n\t * Traduce el evento recibido y devuelve el nombre de la función que lo va a tratar.\r\n\t * @param event_name \r\n\t * @returns \r\n\t */\r\n\ttranslateEventName(event_name: AnalyticEventKey) {\r\n\t\tswitch (event_name) {\r\n\t\t\tcase 'view_item': return 'view_item';\r\n\t\t\tcase 'view_item_list': return 'view_item_list';\r\n\t\t\tcase 'checkout_init': return 'begin_checkout';\r\n\t\t\tcase 'shipping_info': return 'add_shipping_info';\r\n\t\t\tcase 'add_payment_info': return 'add_payment_info';\r\n\t\t\tcase 'purchase': return 'purchase';\r\n\t\t\tcase 'add_to_cart': return 'add_to_cart';\r\n\t\t\tcase 'remove_from_cart': return 'remove_from_cart';\r\n\t\t\tcase 'sign_up': return 'sign_up';\r\n\t\t\tdefault: return null;\r\n\t\t\t//default: return event_name;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Evalua el evento y devuelve los datos de las funciones relacionadas.\r\n\t * @param event_name Nombre del evento\r\n\t * @param data Data extra para agregar al evento\r\n\t * @returns \r\n\t */\r\n\tevalEvent(event_name: AnalyticEventKey, data: any) {\r\n\t\tswitch (event_name) {\r\n\t\t\tcase 'view_item': return this.toViewItem(data);\r\n\t\t\tcase 'view_item_list': return this.toViewItemList(data);\r\n\t\t\tcase 'checkout_init': return this.toCheckoutInit(data);\r\n\t\t\tcase 'shipping_info': return this.toShippingInfo(data);\r\n\t\t\tcase 'add_payment_info': return this.toPaymentInfo(data);\r\n\t\t\tcase 'purchase': return this.toPurchase(data);\r\n\t\t\tcase 'add_to_cart': return this.toAddToCart(data);\r\n\t\t\tcase 'remove_from_cart': return this.toRemoveToCart(data);\r\n\t\t\tcase 'sign_up': return this.toSignUp(data);\r\n\t\t\tdefault: return data;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Evento que se dispara cuando se quiere comprar un producto.\r\n\t * @param data \r\n\t * @returns \r\n\t */\r\n\tprivate toPurchase(data: any) {\r\n\t\treturn {\r\n\t\t\tcoupon: this.toCartDiscount(data),\r\n\t\t\tcurrency: data.currency,\r\n\t\t\tshipping: data.totals.shipping,\r\n\t\t\ttax: data.totals.taxes,\r\n\t\t\tvalue: data.totals.total,\r\n\t\t\ttransaction_id: data.number,\r\n\t\t\titems: data.items.map((item: any) => ({\r\n\t\t\t\tid: item.product.id,\r\n\t\t\t\tname: item.product.name,\r\n\t\t\t\tcategory: item.product.category,\r\n\t\t\t\tprice: item.total,\r\n\t\t\t\tquantity: item.quantity\r\n\t\t\t}))\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Evento que se dispara cuando se inicializa en checkout.\r\n\t * @param data \r\n\t * @returns \r\n\t */\r\n\tprivate toCheckoutInit(data: any) {\r\n\t\treturn {\r\n\t\t\tcoupon: this.toCartDiscount(data),\r\n\t\t\tcurrency: data.currency || \"USD\",\r\n\t\t\titems: data.items.map((item: any) => ({\r\n\t\t\t\tid: item.product.id,\r\n\t\t\t\tname: item.product.name,\r\n\t\t\t\tcategory: item.product.category,\r\n\t\t\t\tprice: item.total,\r\n\t\t\t\tquantity: item.quantity\r\n\t\t\t})),\r\n\t\t\tvalue: data.totals?.total || 0,\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Evento que se dispara con los descuentos en el carrito.\r\n\t * @param data \r\n\t * @returns \r\n\t */\r\n\tprivate toCartDiscount(data: any) {\r\n\t\tlet strDiscount = ''\r\n\t\tstrDiscount = data.cartDiscounts.map((itemDiscount: any) => itemDiscount?.type).join()\r\n\t\treturn strDiscount == '' ? 'not-discount' : strDiscount\r\n\t}\r\n\t/**\r\n\t * Evento que se dispara cuando se agrega un producto al carrito. \r\n\t * @param data \r\n\t * @returns \r\n\t */\r\n\tprivate toAddToCart(data: any) {\r\n\t\tlet lastProduct = data.items?.length && data.items[data.items.length - 1]\r\n\t\treturn {\r\n\t\t\tcurrency: data.currency || \"USD\",\r\n\t\t\titems: [this.toItem({ quantity: lastProduct.quantity, ...lastProduct.product })],\r\n\t\t\tvalue: lastProduct.total || 0,\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Cambia la variable **enabled** a `false`\r\n\t * @returns \r\n\t */\r\n\tdisable() { this.enabled = false; }\r\n\t/**\r\n\t * Evento que se dispara cuando se interactua a las vista del producto.\r\n\t * @param product \r\n\t * @returns \r\n\t */\r\n\tprivate toViewItem(product: any) {\r\n\t\treturn {\r\n\t\t\tcurrency: product.currency,\r\n\t\t\titems: [this.toItem(product)],\r\n\t\t\tvalue: product.variants[0]?.saleprice || product.variants[0]?.price,\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Evento que se dispara cuando se interactua con el listado de productos.\r\n\t * @param data \r\n\t * @returns \r\n\t */\r\n\tprivate toViewItemList(data: any) {\r\n\t\treturn {\r\n\t\t\titems: data.products.map((product: any) => this.toItem(product)),\r\n\t\t\titem_list_name: data.item_list_name || 'Collection',\r\n\t\t\titem_list_id: data.item_list_id || 'collection'\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Evento que se dispara cuando se quita un item del carrito.\r\n\t * @param product \r\n\t * @returns \r\n\t */\r\n\tprivate toRemoveToCart(product: any) {\r\n\t\tlet productParam = product.product\r\n\t\treturn {\r\n\t\t\tcurrency: product.currency || \"USD\",\r\n\t\t\titems: [this.toItem({ quantity: product.quantity, ...productParam })],\r\n\t\t\tvalue: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,\r\n\t\t}\r\n\t}\r\n\r\n\tprivate toItem = (product: any) => ({\r\n\t\titem_name: product.name,\r\n\t\titem_id: product.id,\r\n\t\titem_brand: product.attributes?.length ? product.attributes[0].name : '',\r\n\t\titem_category: product.category,\r\n\t\tprice: product.variants[0]?.saleprice || product.variants[0]?.price,\r\n\t\tquantity: product.quantity || 1,\r\n\t})\r\n\t/**\r\n\t * Evento que se dispara cuando se consulta la información de pago.\r\n\t * @param data \r\n\t * @returns \r\n\t */\r\n\tprivate toPaymentInfo(data: any) {\r\n\t\treturn {\r\n\t\t\tcoupon: this.toCartDiscount(data),\r\n\t\t\tcurrency: data.currency || \"USD\",\r\n\t\t\titems: data.items.map((item: any) => ({\r\n\t\t\t\tid: item.product.id,\r\n\t\t\t\tname: item.product.name,\r\n\t\t\t\tcategory: item.product.category,\r\n\t\t\t\tprice: item.total,\r\n\t\t\t\tquantity: item.quantity\r\n\t\t\t})),\r\n\t\t\tpayment_type: data.payments[0]?.method?.code || 'not-payments',\r\n\t\t\tvalue: data.totals?.total || 0,\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Evento que se dispara cuando se interactua con los métodos de envío.\r\n\t * @param data \r\n\t * @returns \r\n\t */\r\n\tprivate toShippingInfo(data: any) {\r\n\t\treturn {\r\n\t\t\tcoupon: this.toCartDiscount(data),\r\n\t\t\tcurrency: data.currency || \"USD\",\r\n\t\t\titems: data.items.map((item: any) => ({\r\n\t\t\t\tid: item.product.id,\r\n\t\t\t\tname: item.product.name,\r\n\t\t\t\tcategory: item.product.category,\r\n\t\t\t\tprice: item.total,\r\n\t\t\t\tquantity: item.quantity\r\n\t\t\t})),\r\n\t\t\tshipping_tier: data.shipments[0]?.method?.code || 'not-shipping',\r\n\t\t\tvalue: data.totals?.total || 0,\r\n\t\t}\r\n\t}\r\n\r\n\tprivate toSignUp(data: any) {\r\n\t\treturn {\r\n\t\t\t...data\r\n\t\t}\r\n\t}\r\n}\r\n","import { afterRender, inject, Injectable, PLATFORM_ID, Renderer2, RendererFactory2 } from '@angular/core';\r\nimport { AnalyticEventKey, GoogleTagManagerConfig } from '../../interfaces';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n/**\r\n * Servicio que se encarga de manejar el analytics de GTM.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GTMService {\r\n /**\r\n * Indica si se esta cargando el servicio.\r\n */\r\n private isLoaded: boolean = false;\r\n /**\r\n * Indica cuando el servicio esta habilitado.\r\n */\r\n private enabled: boolean = false;\r\n /**\r\n * Se encarga de crear el elemento HTML con las configuraciones para \r\n * que se pueda ejecutar el servicio.\r\n */\r\n private renderer: Renderer2;\r\n /**\r\n * Almacena el objecto window del navegador.\r\n */\r\n private window?: Window;\r\n\r\n private rendererFactory: RendererFactory2 = inject(RendererFactory2);\r\n private document: Document | null = null;\r\n /**\r\n * Servicio de ruteo de angular.\r\n */\r\n private router: Router = inject(Router);\r\n /**\r\n * Configuración de Google Tag Manager.\r\n */\r\n private config: GoogleTagManagerConfig = { id: null }\r\n private platformId: any = inject(PLATFORM_ID)\r\n constructor() {\r\n this.renderer = this.rendererFactory.createRenderer(null, null);\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.window = window\r\n this.document = inject(DOCUMENT);\r\n }\r\n }\r\n /**\r\n * Obtiene el dataLayer del objecto window\r\n * @returns \r\n */\r\n public getDataLayer(): any[] {\r\n const window = this.window;\r\n /* if(window)\r\n window.dataLayer = window.dataLayer || [];\r\n return window.dataLayer; */\r\n return []\r\n }\r\n /**\r\n * Agrega datos al dataLayer.\r\n * @param obj \r\n */\r\n private pushOnDataLayer(obj: object): void {\r\n const dataLayer = this.getDataLayer();\r\n dataLayer.push(obj);\r\n }\r\n /**\r\n * Agrega el script de GTM para que empiece a capturar eventos.\r\n * @returns \r\n */\r\n public addGtmToDom(): Promise<boolean> {\r\n return new Promise(\r\n (resolve, reject) => {\r\n if (this.isLoaded) {\r\n return resolve(this.isLoaded);\r\n }\r\n //const doc = this.browserGlobals.documentRef();\r\n this.pushOnDataLayer({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });\r\n\r\n const gtmScript = this.document?.createElement('script') //doc.createElement('script');\r\n if(gtmScript){\r\n gtmScript.id = 'GTMscript';\r\n gtmScript.async = true;\r\n gtmScript.src = this.applyGtmQueryParams(this.config[\"gtm_resource_path\"] ? this.config[\"gtm_resource_path\"] : 'https://www.googletagmanager.com/gtm.js');\r\n gtmScript.addEventListener('load', () => {\r\n return resolve(this.isLoaded = true);\r\n });\r\n gtmScript.addEventListener('error', () => {\r\n return reject(false);\r\n });\r\n this.document?.head.insertBefore(gtmScript, this.document.head.firstChild);\r\n }\r\n }\r\n );\r\n }\r\n\r\n private applyGtmQueryParams(url: string): string {\r\n if (url.indexOf('?') === -1) {\r\n url += '?';\r\n }\r\n return (url + Object.keys(this.config).filter((k) => this.config[k]).map((k) => `${k}=${this.config[k]\r\n }`).join('&'));\r\n }\r\n /**\r\n * Inicializa el Servicio de analytics con sus configuraciones.\r\n * @param config Configuraciones de Google Tag Manager\r\n */\r\n public initialize(config: GoogleTagManagerConfig) {\r\n this.config = config || this.config;\r\n this.addGtmToDom().then(() => {\r\n this.router.events.forEach(item => {\r\n if (item instanceof NavigationEnd) {\r\n const gtmTag = {\r\n event: 'page',\r\n pageName: item.url\r\n };\r\n this.pushTag(gtmTag);\r\n }\r\n });\r\n })\r\n }\r\n\r\n public pushTag(item: object): Promise<void> {\r\n return new Promise<void>((resolve, reject) => {\r\n if (!this.isLoaded) {\r\n this.addGtmToDom().then(() => {\r\n this.pushOnDataLayer(item);\r\n return resolve();\r\n }).catch(() => reject());\r\n } else {\r\n this.pushOnDataLayer(item);\r\n return resolve();\r\n }\r\n });\r\n }\r\n /**\r\n * Ejecuta el evento pasado por parametro. \r\n * @param event_name Nombre del evento.\r\n * @param data Data extra para agregar al evento.\r\n * @returns \r\n */\r\n callEvent(event_name: AnalyticEventKey, data = {}) {\r\n if (!this.isLoaded) return;\r\n let event = this.translateEventName(event_name);\r\n event && this.pushTag({ ecommerce: null })\r\n event && this.pushTag({ 'event': this.translateEventName(event_name), ecommerce: this.evalEvent(event_name, data) })\r\n }\r\n /**\r\n * Traduce el evento recibido y devuelve el nombre de la función que lo va a tratar.\r\n * @param event_name \r\n * @returns \r\n */\r\n translateEventName(event_name: AnalyticEventKey) {\r\n switch (event_name) {\r\n case 'view_item': return 'view_item';\r\n case 'view_item_list': return 'view_item_list';\r\n case 'checkout_init': return 'begin_checkout';\r\n case 'shipping_info': return 'add_shipping_info';\r\n case 'add_payment_info': return 'add_payment_info';\r\n case 'purchase': return 'purchase';\r\n case 'add_to_cart': return 'add_to_cart';\r\n case 'remove_from_cart': return 'remove_from_cart';\r\n case 'sign_up': return 'sign_up';\r\n case 'select_promotion': return 'select_promotion';\r\n case 'select_item': return 'select_item';\r\n default: return null;\r\n }\r\n }\r\n /**\r\n * Evalua el evento y devuelve los datos de las funciones relacionadas.\r\n * @param event_name Nombre del evento\r\n * @param data Data extra para agregar al evento\r\n * @returns \r\n */\r\n evalEvent(event_name: AnalyticEventKey, data: any) {\r\n switch (event_name) {\r\n case 'view_item': return this.toViewItem(data);\r\n case 'view_item_list': return this.toViewItemList(data);\r\n case 'checkout_init': return this.toCheckoutInit(data);\r\n case 'shipping_info': return this.toShippingInfo(data);\r\n case 'add_payment_info': return this.toPaymentInfo(data);\r\n case 'purchase': return this.toPurchase(data);\r\n case 'add_to_cart': return this.toAddToCart(data);\r\n case 'remove_from_cart': return this.toRemoveToCart(data);\r\n case 'sign_up': return this.toSignUp(data);\r\n case 'select_promotion': return this.toSelectPromotion(data);\r\n case 'select_item': return this.toSelectItem(data);\r\n default: return data;\r\n }\r\n }\r\n /**\r\n * Evento que se dispara cuando se quiere comprar un producto.\r\n * @param data \r\n * @returns \r\n */\r\n private toPurchase(data: any) {\r\n return {\r\n coupon: this.toCartDiscount(data),\r\n currency: data.currency,\r\n shipping: data.totals.shipping,\r\n tax: data.totals.taxes,\r\n value: data.totals.total,\r\n transaction_id: data.number,\r\n countItems: data.items?.length || 0,\r\n items: data.items.map((item: any) => ({\r\n item_id: item.product.id,\r\n item_name: item.product.name,\r\n //coupon:'',\r\n discount: item.product.discount || 0,\r\n //index:'',\r\n item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',\r\n item_category: item.product.category,\r\n item_variant: item.product.variants[0]?.code || '',\r\n //location_id: '',\r\n price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,\r\n quantity: item.quantity || 1,\r\n }))\r\n }\r\n }\r\n /**\r\n * Evento que se dispara cuando se inicializa en checkout.\r\n * @param data \r\n * @returns \r\n */\r\n private toCheckoutInit(data: any) {\r\n return {\r\n coupon: this.toCartDiscount(data),\r\n currency: data.currency || \"USD\",\r\n items: data.items.map((item: any) => ({\r\n item_id: item.product.id,\r\n item_name: item.product.name,\r\n //coupon:'',\r\n discount: item.product.discount || 0,\r\n //index:'',\r\n item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',\r\n item_category: item.product.category,\r\n //item_list_id: '',\r\n //item_list_name: '',\r\n item_variant: item.product.variants[0]?.code || '',\r\n //location_id: '',\r\n price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,\r\n quantity: item.quantity || 1,\r\n })),\r\n value: data.totals?.total || 0,\r\n }\r\n }\r\n /**\r\n * Evento que se dispara con los descuentos en el carrito.\r\n * @param data \r\n * @returns \r\n */\r\n private toCartDiscount(data: any) {\r\n let strDiscount = ''\r\n strDiscount = data.cartDiscounts.map((itemDiscount: any) => itemDiscount?.type).join()\r\n return strDiscount == '' ? 'not-discount' : strDiscount\r\n }\r\n /**\r\n * Evento que se dispara cuando se agrega un producto al carrito. \r\n * @param data \r\n * @returns \r\n */\r\n private toAddToCart(data: any) {\r\n let lastProduct = data.items?.length && data.items[data.items.length - 1]\r\n return {\r\n currency: data.currency || \"USD\",\r\n items: [this.toItem({ quantity: lastProduct.quantity, ...lastProduct.product })],\r\n value: lastProduct.total || 0,\r\n }\r\n }\r\n /**\r\n * Cambia la variable **enabled** a `false`\r\n * @returns \r\n */\r\n disable() { this.enabled = false }\r\n /**\r\n * Evento que se dispara cuando se interactua a las vista del producto.\r\n * @param product \r\n * @returns \r\n */\r\n private toViewItem(product: any) {\r\n return {\r\n currency: product.currency,\r\n value: product.price,\r\n items: [this.toItem(product)]\r\n\r\n }\r\n }\r\n /**\r\n * Evento que se dispara cuando se interactua con el listado de productos.\r\n * @param data \r\n * @returns \r\n */\r\n private toViewItemList(data: any) {\r\n return {\r\n items: data.products.map((product: any) => this.toItem(product)),\r\n item_list_name: data.item_list_name || 'Collection',\r\n item_list_id: data.item_list_id || 0\r\n }\r\n\r\n\r\n }\r\n /**\r\n * Evento que se dispara cuando se quita un item del carrito.\r\n * @param product \r\n * @returns \r\n */\r\n private toRemoveToCart(product: any) {\r\n let productParam = product.product\r\n return {\r\n currency: product.currency || \"USD\",\r\n items: [this.toItem({ quantity: product.quantity, ...productParam })],\r\n value: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,\r\n }\r\n }\r\n\r\n private toItem = (product: any) => ({\r\n item_id: product.id,\r\n item_name: product.name,\r\n //coupon:'',\r\n discount: product.discount || 0,\r\n //index:'',\r\n item_brand: product.attributes?.length ? product.attributes[0].name : '',\r\n item_category: product.category,\r\n //item_list_id: '',\r\n //item_list_name: '',\r\n item_variant: product.variants[0]?.code || '',\r\n //location_id: '',\r\n price: product.variants[0]?.saleprice || product.variants[0]?.price,\r\n quantity: product.quantity || 1,\r\n })\r\n /**\r\n * Evento que se dispara cuando se consulta la información de pago.\r\n * @param data \r\n * @returns \r\n */\r\n private toPaymentInfo(data: any) {\r\n return {\r\n coupon: this.toCartDiscount(data),\r\n currency: data.currency || \"USD\",\r\n payment_type: data.payments[0]?.method?.code || 'not-payments',\r\n value: data.totals?.total || 0,\r\n items: data.items.map((item: any) => ({\r\n item_id: item.product.id,\r\n item_name: item.product.name,\r\n //coupon:'',\r\n discount: item.product.discount || 0,\r\n //index:'',\r\n item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',\r\n item_category: item.product.category,\r\n //item_list_id: '',\r\n //item_list_name: '',\r\n item_variant: item.product.variants[0]?.code || '',\r\n //location_id: '',\r\n price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,\r\n quantity: item.quantity || 1,\r\n })),\r\n }\r\n }\r\n /**\r\n * Evento que se dispara cuando se interactua con los métodos de envío.\r\n * @param data \r\n * @returns \r\n */\r\n private toShippingInfo(data: any) {\r\n return {\r\n coupon: this.toCartDiscount(data),\r\n currency: data.currency || \"USD\",\r\n shipping_tier: data.shipments[0]?.method?.code || 'not-shipping',\r\n value: data.totals?.total || 0,\r\n items: data.items.map((item: any) => ({\r\n item_id: item.product.id,\r\n item_name: item.product.name,\r\n //coupon:'',\r\n discount: item.product.discount || 0,\r\n //index:'',\r\n item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',\r\n item_category: item.product.category,\r\n //item_list_id: '',\r\n //item_list_name: '',\r\n item_variant: item.product.variants[0]?.code || '',\r\n //location_id: '',\r\n price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,\r\n quantity: item.quantity || 1,\r\n })),\r\n }\r\n }\r\n\r\n private toSignUp(data: any) {\r\n return {\r\n ...data\r\n }\r\n }\r\n /**\r\n * Evento que se dispara cuando se interactua con una promoción.\r\n * @param data \r\n * @returns \r\n */\r\n private toSelectPromotion(data: any) {\r\n console.log(data);\r\n return {\r\n promotion_id: data.id || '',\r\n promotion_name: data.code || data.name,\r\n promotion_title: data.subtitle,\r\n location_id: data.priority || 0\r\n }\r\n }\r\n /**\r\n * Evento que se disapra cuando se interactua al seleccionar un item.\r\n * @param data \r\n * @returns \r\n */\r\n private toSelectItem(data: any) {\r\n console.log(data);\r\n return {\r\n items: this.toItem(data)\r\n }\r\n }\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { inject, Injectable, PLATFORM_ID, Renderer2, RendererFactory2 } from '@angular/core';\r\n/**\r\n * Servicio de Analytics de Doppler\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class DopplerService {\r\n\t/**\r\n\t * Para indicar cuando se este cargando el servicio.\r\n\t */\r\n\tprivate isLoaded = false;\r\n\r\n\tprivate rendererFactory: RendererFactory2 = inject(RendererFactory2)\r\n\tprivate document: Document | null = null;\r\n\t/**\r\n\t * Se encarga de crear el elemento HTML con las configuraciones para \r\n\t * que se pueda ejecutar el servicio.\r\n\t */\r\n\tprivate renderer: Renderer2;\r\n\tprivate platformId = inject(PLATFORM_ID);\r\n\r\n\tconstructor() {\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tthis.document = inject(DOCUMENT); // Solo se inyecta en el navegador\r\n\t\t}\r\n\t\tthis.renderer = this.rendererFactory.createRenderer(null, null);\r\n\t}\r\n\t/**\r\n\t * Inicializa el Servicio de analytics con sus configuraciones.\r\n\t * @param pixelSrc path que se usa en el atributo `src` del elemento html.\r\n\t */\r\n\tinitialize = (pixelSrc: any) => {\r\n\t\tthis.isLoaded = true\r\n\t\tlet scriptInsert = this.renderer.createElement(\"script\");\r\n\t\tthis.renderer.setAttribute(scriptInsert, 'type', 'text/javascript');\r\n\t\tthis.renderer.setAttribute(scriptInsert, 'async', 'async');\r\n\t\tthis.renderer.setAttribute(scriptInsert, 'src', pixelSrc);\r\n\t\tthis.renderer.appendChild(this.document?.body, scriptInsert);\r\n\t}\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { inject, Injectable, PLATFORM_ID, Renderer2, RendererFactory2 } from '@angular/core';\r\n/**\r\n * Servicio encargado de manejar el analytics de Metricool Pixel\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MetricoolPixelService {\r\n /**\r\n * Indica si se esta cargando el Servicio.\r\n */\r\n private isLoaded = false;\r\n\r\n private rendererFactory: RendererFactory2 = inject(RendererFactory2)\r\n private document: Document | null = inject(DOCUMENT)\r\n private platformId: any = inject(PLATFORM_ID)\r\n /**\r\n * Se encarga de crear el elemento HTML con las configuraciones para \r\n * que se pueda ejecutar el servicio.\r\n */\r\n private renderer: Renderer2;\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.document = document\r\n }\r\n this.renderer = this.rendererFactory.createRenderer(null, null);\r\n }\r\n /**\r\n * Inicializa el Servicio de analytics con sus configuraciones.\r\n * @param pixel_hash hash provisto por Metricool Pixel.\r\n */\r\n initialize = (pixel_hash: any) => {\r\n let new_analityc_script = this.renderer.createElement('script');\r\n new_analityc_script.type = 'text/javascript';\r\n new_analityc_script.text = `\r\n function loadScript(a) {\r\n var b = document.getElementsByTagName(\"head\")[0], c = document.createElement(\"script\");\r\n c.type = \"text/javascript\",\r\n c.src = \"https://tracker.metricool.com/resources/be.js\",\r\n c.onreadystatechange = a,\r\n c.onload = a, b.appendChild(c)\r\n } loadScript(function () {\r\n beTracker.t({ hash: \"${pixel_hash}\" })\r\n });\r\n `;\r\n this.renderer.appendChild(this.document?.body, new_analityc_script);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { AnalyticEventKey } from '../../interfaces';\r\nimport { FacebookPixelService } from './facebook-pixel.service';\r\nimport { GoogleAnalyticsService } from './google-analytics.service';\r\nimport { GTMService } from './gtm.service';\r\nimport { DopplerService } from './doppler.service';\r\nimport { MetricoolPixelService } from './metricool-pixel.service';\r\n/**\r\n * Servicio que se encarga de manejar todo lo referido con Analytics.\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class AnalyticsService {\r\n /**\r\n * Guarda los distintos tipos de analytics.\r\n */\r\n\tprivate services: any[] = [];\r\n\r\n\tprivate facebookAnalytics: any = inject(FacebookPixelService)\r\n\tprivate googleAnalytics: any = inject(GoogleAnalyticsService)\r\n\tprivate gtmAnalytics: any = inject(GTMService)\r\n\tprivate metricoolAnalytics: any = inject(MetricoolPixelService)\r\n\tprivate dopplerAnalytics: any = inject(DopplerService)\r\n\r\n\tconstructor() {\r\n\t\tthis.services.push(this.facebookAnalytics);\r\n\t\tthis.services.push(this.googleAnalytics);\r\n\t\tthis.services.push(this.gtmAnalytics);\r\n\t}\r\n /**\r\n * Inicializa el servicio de analytics de Facebook.\r\n * @param value Pixel Id\r\n */\r\n\tinitializeFacebook(value: any){\r\n this.facebookAnalytics.initialize(value);\r\n }\r\n /**\r\n * Inicializa el servicio de analytics de google.\r\n * @param value GTM Id\r\n */\r\n initializeGoogle(value: any){\r\n this.googleAnalytics.initialize(value);\r\n }\r\n /**\r\n * Inicializa el servicio de analytics de Google Tag Manager (GTM).\r\n * @param value id de GTM\r\n */\r\n initializeGTM(value: any){\r\n this.gtmAnalytics.initialize({ id: value });\r\n }\r\n /**\r\n * Inicializa el servicio de analytics de Metricool\r\n * @param value Pixel Hash\r\n */\r\n initializeMetricool(value: any){\r\n this.metricoolAnalytics.initialize(value);\r\n }\r\n /**\r\n * Inicializa el servicio de analytics de Doppler\r\n * @param value Pixel src\r\n */\r\n initializeDoppler(value: any){\r\n this.dopplerAnalytics.initialize(value);\r\n }\r\n /**\r\n * Recorre los servicios cargados ejecutando un evento en especifico.\r\n * @param event_name Nombre del evento a ejecutar.\r\n * @param data Datos extras para agregar al evento.\r\n */\r\n callEvent(event_name: AnalyticEventKey, data: any = {}){\r\n this.services.forEach(service => {\r\n service.callEvent(event_name, data)\r\n });\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\r\nimport { ConnectionService } from '../api';\r\nimport { map, Observable, ReplaySubject, shareReplay } from 'rxjs';\r\n/**\r\n * Servicio para manejar los canales de la aplicación\r\n * @class ChannelService\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class ChannelService {\r\n\t/**\r\n\t * Constantes de la API\r\n\t */\r\n\tprivate apiConsts: ApiConstantsService = inject(ApiConstantsService);\r\n\t/**\r\n\t * Constantes del core\r\n\t */\r\n\tprivate consts: CoreConstantsService = inject(CoreConstantsService)\r\n\t/**\r\n\t * Maneja las peticiones a la API\r\n\t */\r\n\tprivate connection: ConnectionService = inject(ConnectionService)\r\n\t/**\r\n\t * Subject para manejar los cambios en los canales.\r\n\t */\r\n\tprivate channelSubject = new ReplaySubject<any>()\r\n\t/**\r\n\t * Observable de canales.\r\n\t */\r\n\tpublic channel$: Observable<any> = this.channelSubject.asObservable()\r\n\t/**\r\n\t * Almacena el canal activo en la aplicación.\r\n\t */\r\n\tpublic activeChannel: any;\r\n\t/**\r\n\t * Almacena el tipo de canal.\r\n\t */\r\n\tpublic channelType: any;\r\n\r\n\t//API URL\r\n\t/**\r\n\t * Devuelve la url para obtener los datos de un canal.\r\n\t * @returns \r\n\t */\r\n\tprivate channelApi() { return `${this.apiConsts.SHOP_API_URL}${this.apiConsts.CHANNEL}/channel`; }\r\n\r\n\tconstructor() { }\r\n\t/**\r\n\t * Obtiene el canal de la API\r\n\t * @returns Observable con el canal.\r\n\t */\r\n\tpublic getChannel = (): Observable<any> => {\r\n\t\tthis.connection.get(this.channelApi()).pipe(\r\n\t\t\tshareReplay(1),\r\n\t\t\tmap((response: any) => {\r\n\t\t\t\tthis.setChannelInfo(response);\r\n\t\t\t\tthis.channelSubject.next(response);\r\n\t\t\t\tthis.channelType = response.type;\r\n\t\t\t\treturn response\r\n\t\t\t}),\r\n\t\t).subscribe()\r\n\t\treturn this.channel$;\r\n\t}\r\n\t/**\r\n\t * Cambia la configuración del canal con un canal nuevo.\r\n\t * @param channelObj \r\n\t */\r\n\tpublic setChannelInfo(channelObj: any) {\r\n\t\tthis.apiConsts.setChannel(channelObj.code)\r\n\t\tthis.consts.setCurrency(channelObj.baseCurrency)\r\n\t\tthis.activeChannel = channelObj\r\n\t\t//this.injector.get(AddressingService).setTypeSelectAddress(channelObj.headquarterSelectionOnly || 'LOAD_ADDRESS_AND_SELECTION')\r\n\t}\r\n\t/**\r\n\t * Devuelve el canal activo en la aplicación.\r\n\t * @returns \r\n\t */\r\n\tpublic getActiveChannel() { return this.activeChannel; }\r\n}\r\n","import { CurrencyConfig } from \"../interfaces\";\r\nimport { patchState, signalStore, withMethods, withState } from '@ngrx/signals';\r\n\r\ninterface CurrencyState {\r\n currency: CurrencyConfig;\r\n}\r\n\r\nconst initialState: CurrencyState = {\r\n currency: {}\r\n}\r\n\r\nexport const CurrencyStore = signalStore(\r\n { providedIn: 'root' },\r\n withState(initialState),\r\n withMethods(({ currency, ...store }) => ({\r\n add(newCurrency: CurrencyConfig) {\r\n patchState(store, { currency: newCurrency })\r\n }\r\n }))\r\n)","import { inject, Injectable } from '@angular/core';\r\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\r\nimport { ConnectionService } from '../api';\r\nimport { BehaviorSubject, firstValueFrom, Observable } from 'rxjs';\r\nimport { CurrencyConfig } from '../interfaces';\r\nimport { ChannelService } from './channel.service';\r\nimport { CurrencyStore } from '../stores';\r\n/**\r\n * Servicio encargado de manejar todo lo que este relacionado a la moneda\r\n * que maneja la aplicación.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CurrencyService {\r\n /**\r\n * Constantes de core\r\n */\r\n private _consts: CoreConstantsService = inject(CoreConstantsService)\r\n /**\r\n * Constantes de la API\r\n */\r\n private _apiConsts: ApiConstantsService = inject(ApiConstantsService)\r\n /**\r\n * Maneja las peticiones a la API\r\n */\r\n private _connection: ConnectionService = inject(ConnectionService)\r\n /**\r\n * Servicio de canales\r\n */\r\n private _channel: ChannelService = inject(ChannelService)\r\n /**\r\n * Contiene el canal activo de la API.\r\n */\r\n private _channel$: Observable<any> = this._channel.getChannel();\r\n /**\r\n * Subject para manejar la moneda actual.\r\n */\r\n private _currencySubject: BehaviorSubject<CurrencyConfig> = new BehaviorSubject({})\r\n /**\r\n * Subject para manejar la lista de monedas de la aplicación.\r\n */\r\n private _currencyListSubject: BehaviorSubject<any> = new BehaviorSubject([])\r\n /**\r\n * Subject para indicar la actualización de un estado.\r\n */\r\n private _updateSubject: BehaviorSubject<boolean> = new BehaviorSubject(false)\r\n\r\n public currency$: Observable<CurrencyConfig> = this._currencySubject.asObservable()\r\n public currencyList$: Observable<any[]> = this._currencyListSubject.asObservable()\r\n public update$: Observable<boolean> = this._updateSubject.asObservable();\r\n\r\n //API URL\r\n /**\r\n * Devuelve la URL para obtener lista de monedas de la aplicación.\r\n * @returns \r\n */\r\n private getCurrencyListApi() { return `${this._apiConsts.SHOP_API_URL}/currencies` };\r\n /**\r\n * Devuelve la URL para obtener la convertibilidad de una moneda. \r\n * @param baseCurrency Moneda base\r\n * @param targetCurrency Moneda destino\r\n * @returns \r\n */\r\n private getConvertibilityApi(baseCurrency: any, targetCurrency: any) { return `${this._apiConsts.SHOP_API_URL}/currencies?baseCurrency=${baseCurrency}&targetCurrency=${targetCurrency}` }\r\n /**\r\n * Store que guardara la moneda actual que maneja la aplicación.\r\n */\r\n protected currencyStore = inject(CurrencyStore);\r\n\r\n constructor() {\r\n this._channel$.subscribe(channel => {\r\n channel.applyCurrencyExchange ? this.loadCurrencyList() : this.loadDefaultCurrency(channel.baseCurrency);\r\n })\r\n }\r\n\r\n /**\r\n * Se carga la moneda por defecto.\r\n */\r\n private loadDefaultCurrency(currency: any) {\r\n this._consts.setCurrency(currency);\r\n this.load()\r\n }\r\n\r\n /**\r\n * Carga la lista de monedas/currencies.\r\n */\r\n private async loadCurrencyList() {\r\n await firstValueFrom(this._connection.get(this.getCurrencyListApi()))\r\n .then(res => {\r\n this._currencyListSubject.next(res)\r\n this._consts.setCurrencyTypeConfig(res)\r\n this.load()\r\n })\r\n }\r\n\r\n /**\r\n * calcula la convetibilidad del precio pasado por paramentro segun esta formula:\r\n * **c = a * b** donde *c=moneda despues del cambio*, *a=valor que quiero cambiar* y *b=ratio de cambio*. \r\n * @param price Precio a cambiar\r\n * @param ratio Ratio de cambio\r\n * @returns Si el ratio no es null, retorna el precio cambiado, sino retorna el precio sin cambios. \r\n */\r\n public calculateConvetibility(price: number, ratio: number) {\r\n return ratio ? price * ratio : price;\r\n }\r\n\r\n /**\r\n * genera la carga y configuración de la moneda elegida para la conversion.\r\n * @param currency Moneda a convertir.\r\n */\r\n private loadCurrency(currency: any) {\r\n this._currencySubject.next(currency);\r\n this._consts.setCurrency(currency.code);\r\n let update = this._updateSubject.getValue()\r\n this._updateSubject.next(!update)\r\n this.currencyStore.add(this._consts.currency)\r\n }\r\n\r\n /**\r\n * Genera la convertibilidad de la moneda base a la nueva. Si baseCurrency no tiene valor \r\n * entonces utiliza la moneda base del canal.\r\n * @param currency Objeto de la moneda destino.\r\n * @param baseCurrency Codigo de la moneda base. *Ej: USD | ARS | EUR |...*\r\n */\r\n async generateConvertibility(currency: any, baseCurrency?: string) {\r\n if (!baseCurrency) {\r\n try {\r\n baseCurrency = await this._channel.getActiveChannel().baseCurrency;\r\n } catch (error) {\r\n //console.error(error)\r\n baseCurrency = 'USD'\r\n }\r\n }\r\n console.log(\"BC\", baseCurrency);\r\n if (currency.code == baseCurrency) {\r\n this.loadCurrency(currency);\r\n } else {\r\n this.getConvertibility(baseCurrency, currency.code);\r\n }\r\n }\r\n\r\n /**\r\n * Obtiene la conversion desde la moneda base a la destino. Recibe un objeto de tipo CurrencyConfig.\r\n * Si la conversion retorna resultado realiza el cambio, de lo contrario emite un mensaje de error.\r\n * @param baseCurrency Codigo de la moneda base.\r\n * @param targetCurrency Codigo de la moneda destino.\r\n */\r\n private getConvertibility(baseCurrency: any, targetCurrency: any) {\r\n this._connection.get(this.getConvertibilityApi(baseCurrency, targetCurrency))\r\n .toPromise().then(\r\n res => {\r\n if (res) {\r\n let tempCurrency = res[0]\r\n this.loadCurrency(tempCurrency)\r\n } else {\r\n console.error('Error la variable res no contiene valor, asegurese de que esta conversión este configurada en el backoffice')\r\n //this.toastr.show('error-convertibility')\r\n }\r\n },\r\n err => {\r\n console.log(err)\r\n }\r\n ).catch(err => console.log(err))\r\n }\r\n\r\n /**\r\n * Carga la moneda, si hay una en el localstorage toma esa y realiza la conversion.\r\n * de lo contrario solo setea en el observable currencySubject el valor por defecto cargado en las constantes. \r\n */\r\n private load() {\r\n let storeCurrency = this.currencyStore.currency();\r\n if (storeCurrency && storeCurrency.code) {\r\n this.generateConvertibility(storeCurrency)\r\n } else {\r\n this._currencySubject.next(this._consts.currency)\r\n }\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { IndividualConfig, ToastrService } from 'ngx-toastr';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { take } from 'rxjs';\r\n/**\r\n * Servicio que se encarga de manejar mensajes en formato de toast.\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class ToastService {\r\n\t/**\r\n\t * Servicio para lanzar los toast.\r\n\t */\r\n\tprivate toastrService:ToastrService = inject(ToastrService);\r\n\t/**\r\n\t * Serivicio de Traducciones.\r\n\t */\r\n\tprivate trasnlationService:TranslateService = inject(TranslateService);\r\n\t/**\r\n\t * Configuraciones para el Toast\r\n\t */\r\n\tprivate configToast:Partial<IndividualConfig> = {};\r\n\r\n\tconstructor() { }\r\n\r\n /**\r\n * Cambia el tiempo que se muestra el mensaje.\r\n * @param time \r\n */\r\n\tsetTimeMessage(time:number){\r\n\t\tthis.configToast = {\r\n\t\t\ttimeOut: time,\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Cambia las configuraciones del toast\r\n\t * @param configToast\r\n\t */\r\n\tsetConfigToast(configToast:Partial<IndividualConfig>){\r\n\t\tthis.configToast = configToast\r\n\t}\r\n\t/**\r\n\t * Muestra el mensaje en el toast. Utiliza el servicio de translate para traducir aquellos mensajes\r\n\t * que entran como clave y estas estan en un archivo .json con las traducciones correspondientes asociadas.\r\n\t * @param message Texto a mostrar o puede ser una clave del archivo .json de traducciones.\r\n\t * @param interpolateParams \r\n\t * @param title Titulo para el Toast\r\n\t * @param configToast Configuraciones del toast.\r\n\t */\r\n\tshow(message:string, interpolateParams:any = {}, title='', configToast:Partial<IndividualConfig>=this.configToast){\r\n\t\tthis.trasnlationService.get(message,interpolateParams).pipe(take(1)).subscribe(\r\n\t\t\t(response:any) => this.toastrService.show((response ? response : message), title, configToast)\r\n\t\t)\r\n\t}\r\n\t/**\r\n\t * Muestra un mensaje de **ERROR** en el toast. Utiliza el servicio de translate para traducir aquellos mensajes\r\n\t * que entran como clave y estas estan en un archivo .json con las traducciones correspondientes asociadas.\r\n\t * @param message Texto a mostrar o puede ser una clave del archivo .json de traducciones.\r\n\t * @param interpolateParams \r\n\t * @param title Titulo para el Toast\r\n\t * @param configToast Configuraciones del toast.\r\n\t */\r\n\terror(message:string, interpolateParams:any = {}, title='', configToast:Partial<IndividualConfig>=this.configToast){\r\n\t\tthis.trasnlationService.get(message,interpolateParams).pipe(take(1)).subscribe(\r\n\t\t\t(response:any) => this.toastrService.error((response ? response : message), title, configToast)\r\n\t\t)\r\n\t}\r\n\t/**\r\n\t * Muestra un mensaje de **EXITO** en el toast. Utiliza el servicio de translate para traducir aquellos mensajes\r\n\t * que entran como clave y estas estan en un archivo .json con las traducciones correspondientes asociadas.\r\n\t * @param message Texto a mostrar o puede ser una clave del archivo .json de traducciones.\r\n\t * @param interpolateParams \r\n\t * @param title Titulo para el Toast\r\n\t * @param configToast Configuraciones del toast.\r\n\t */\r\n\tsuccess(message:string, interpolateParams:any = {}, title='', configToast:Partial<IndividualConfig>=this.configToast){\r\n\t\tthis.trasnlationService.get(message,interpolateParams).pipe(take(1)).subscribe(\r\n\t\t\t(response:any) => this.toastrService.success((response ? response : message), title, configToast)\r\n\t\t)\r\n\t}\r\n\r\n}\r\n","import { afterNextRender, inject, Injectable } from '@angular/core';\r\nimport { RecaptchaSettings } from 'ng-recaptcha-2';\r\nimport { BehaviorSubject, concatMap, firstValueFrom, map, Observable } from 'rxjs';\r\nimport { ConnectionService } from '../api';\r\nimport { ParametersService } from './parameters.service';\r\nimport { ApiConstantsService } from '../constants';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class ReCaptchaService {\r\n\r\n\tprivate _connection: ConnectionService = inject(ConnectionService);\r\n\tprivate _paramsService: ParametersService = inject(ParametersService);\r\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\r\n\r\n\tprivate _recaptchaSubject: BehaviorSubject<RecaptchaSettings> = new BehaviorSubject<RecaptchaSettings>({ siteKey: '' });\r\n\tpublic recaptcha$ = this._recaptchaSubject.asObservable();\r\n\r\n\tprivate params$ = this._paramsService.getParameters();\r\n\tpublic params: any;\r\n\r\n\tprivate urlBaseFormat: string = '';\r\n\tprivate testing: string = \"easycommercetech\"\r\n\tprivate productionEnvironment: Boolean = false;\r\n\r\n\tprivate recaptchaSiteKeysUrl = './assets/recaptcha/recaptcha-site-keys.json';\r\n\tprivate recaptchaSitesUrl = './assets/recaptcha/recaptcha-sites.json';\r\n\tprivate recaptchaSitesUrlProd = './assets/recaptcha/recaptcha-sites-prod.json'\r\n\r\n\tprivate RECAPTCHA_SITE_KEYS: any = []\r\n\tprivate RECAPTCHA_SITES: any = []\r\n\r\n\tconstructor() {\r\n\t\tthis.params$.subscribe(params => this.params = params);\t\r\n\t\tthis.initializer();\r\n\t\tafterNextRender(()=> {\r\n\t\t\tthis.urlBaseFormat = this.formatUrl(location.href);\r\n\t\t\tthis.productionEnvironment = this.isProd();\r\n\t\t})\r\n\t}\r\n\t/**\r\n * Devuelve true si la url es de produccion, false en caso contrario. \r\n * @returns {Boolean}\r\n */\r\n\tprivate isProd(): Boolean {\r\n\t\treturn !this.urlBaseFormat.includes(this.testing)\r\n\t}\r\n\t/**\r\n * Recibe una url y se encarga de quitarle \"http\", \"/\" y las demas rutas, para devolver la url\r\n * del sitio con una formato limpio. Ejemplo \"https://ejemplo.com.ar/ruta1/ruta2/\" a \"ejemplo.com.ar\" \r\n * @param {string} url url que sera formateada \r\n * @returns {string} url formateada\r\n */\r\n\tprivate formatUrl(url: string): string {\r\n\t\treturn url.split(\"/\").filter(e => e != \"/\").filter(e => !e.includes(\"http\")).filter(e => e.length).slice(0,1).pop() || ''\r\n\t}\r\n\r\n\t/**\r\n * Path que contiene la direccion del endpoint referido al captcha\r\n * @returns {string} \r\n */\r\n private captchaApi():string { return `${this._apiConsts.SHOP_API_URL}channels`;}\r\n\t/**\r\n * Prioriza si existe un parametro desde el backend de nombre 'recaptcha_key_canal', \r\n * de no existir este busca uno de tipo general de nombre 'recaptcha_key',\r\n * y en caso de que este no exista se realiza lo siguiente: \r\n * carga las variables RECAPTCHA_SITES y RECAPTCHA_SITE_KEYS, con los valores\r\n * de los Json estaticos, para posteriormente obtener la \"siteKey\"(clave del captcha) en caso\r\n * de que no venga desde el backend. \r\n */\r\n\tprivate initializer(): void {\r\n\t\tlet paramThisChannel = this.params.find((param:any) => param.code === `recaptcha_key_${this._apiConsts.CHANNEL}`)\r\n\t\tif(paramThisChannel){\r\n\t\t\tthis._recaptchaSubject.next({siteKey: paramThisChannel.value});\r\n\t\t}else{\r\n\t\t\tlet paramGeneral = this.params.find((param:any) => param.code === 'recaptcha_key')\r\n\t\t\tif(paramGeneral){\r\n\t\t\t\tthis._recaptchaSubject.next({siteKey: paramGeneral.value});\r\n\t\t\t} else {\r\n\t\t\t\tthis.getRecaptchaSites().pipe(\r\n\t\t\t\t\tmap((res:any) => this.RECAPTCHA_SITES = res),\r\n\t\t\t\t\tconcatMap( res => this.getRecaptchaSiteKeys().pipe(\r\n\t\t\t\t\t\tmap(res=> this.RECAPTCHA_SITE_KEYS = res)\r\n\t\t\t\t\t))\r\n\t\t\t\t).subscribe(\r\n\t\t\t\t\te => this.getSiteKey()\r\n\t\t\t\t)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n * Obtiene los datos del archivo .json en donde se guardan las claves.\r\n * @returns {Observable<any>} Datos obtenidos del archivo con las claves captcha\r\n */\r\n\tprivate getRecaptchaSiteKeys(): Observable<any>{\r\n\t\treturn this._connection.getWithFullUrl(this.recaptchaSiteKeysUrl)\r\n\t}\r\n\t/**\r\n * Se obtiene los datos segun el entorno en que se ejecute\r\n * @returns {Observable<any>} Datos obtenidos del archivo con las url de los sitios\r\n */\r\n\tprivate getRecaptchaSites(): Observable<any>{\r\n\t\treturn this.productionEnvironment ? \r\n\t\t\tthis._connection.getWithFullUrl(this.recaptchaSitesUrlProd) :\r\n\t\t\tthis._connection.getWithFullUrl(this.recaptchaSitesUrl);\r\n\t}\r\n\t/**\r\n * Genera una peticion para recibir la clave del recaptcha. En caso de no tener exito,\r\n * utiliza los archivos estaticos para retornar una clave por defecto. Rellena el Observable con\r\n * los datos generados.\r\n */\r\n\tprivate getSiteKey(){\r\n\t\tfirstValueFrom(this._connection.get(this.captchaApi())).then(\r\n\t\t\t(res: any) => {\r\n\t\t\t\tthis._recaptchaSubject.next( {\r\n\t\t\t\t\tsiteKey: res.siteKey ? res.siteKey : this.RECAPTCHA_SITE_KEYS[this.RECAPTCHA_SITES[this.urlBaseFormat]]\r\n\t\t\t\t})\r\n\t\t\t},\r\n\t\t\t(err: any) => {\r\n\t\t\t\tthis._recaptchaSubject.next({ siteKey: this.RECAPTCHA_SITE_KEYS[this.RECAPTCHA_SITES[this.urlBaseFormat]]})\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ApiConstantsService } from '../constants';\r\nimport { ConnectionService } from '../api';\r\nimport { BehaviorSubject, map, Observable, shareReplay } from 'rxjs';\r\n\r\n/**\r\n * Servicio encargado de manejar todo aquello relacionado con los formularios dentro de la aplicación.\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class FormService {\r\n\tprivate apiConsts: ApiConstantsService = inject(ApiConstantsService)\r\n\tprivate connection: ConnectionService = inject(ConnectionService)\r\n \t\r\n\tprotected countriesSubject = new BehaviorSubject<any[]>([]);\r\n\tprotected provincesSubject = new BehaviorSubject<any[]>([]);\r\n protected documentTypesSubject = new BehaviorSubject<any[]>([]);\r\n\t\r\n\tpublic countries$ = this.countriesSubject.asObservable();\r\n public provinces$ = this.provincesSubject.asObservable();\r\n public documentTypes$ = this.documentTypesSubject.asObservable();\r\n\r\n\t//API URL\r\n\t/**\r\n\t * Retorna una url para enviar los datos de un formulario de contacto.\r\n\t * @returns \r\n\t */\r\n\tpublic contactFormResponseAPI() { return `${this.apiConsts.CMS_URL}${this.apiConsts.LOCALE}/contact-form/response` }\r\n\t/**\r\n\t * Retorna una url para el endpoint que obtinen los paises.\r\n\t * @returns \r\n\t */\r\n\tpublic countriesApi() { return 'shop-api/' + this.apiConsts.CHANNEL + '/countries' };\r\n\r\n\tconstructor() { }\r\n\t/**\r\n\t * Envia en formulario.\r\n\t * @param response_obj \r\n\t * @returns \r\n\t */\r\n\tsendResponse(response_obj: any) {\r\n\t\treturn this.connection.post(this.contactFormResponseAPI(), this.prepareData(response_obj))\r\n\t}\r\n\t/**\r\n\t * Obtiene los paises y los guarda en un observable.\r\n\t * @returns \r\n\t */\r\n\tgetCountriesData():Observable<any> {\r\n\t\tthis.connection.get(this.countriesApi()).pipe(\r\n\t\t\tshareReplay(1),\r\n\t\t\tmap((response:any) => {\r\n\t\t\t\t//console.log(response);\r\n\t\t\t\tconst data = response._embedded.items;\r\n\t\t\t\tthis.countriesSubject.next(data)\r\n\t\t\t\tconst documentTypesLocale = data.find((res: any) => {\r\n\t\t\t\t\treturn res.code.toLocaleLowerCase() == this.apiConsts.LOCALE.toLocaleLowerCase().split('_')[1]\r\n\t\t\t\t})\r\n\t\t\t\tconst documentTypesData = documentTypesLocale['documentTypes']\r\n\t\t\t\tthis.documentTypesSubject.next(documentTypesData)\r\n\t\t\t})).subscribe();\r\n\t\t\r\n\t\treturn this.countries$;\r\n\t}\r\n\t/**\r\n\t * Cambia la lista de provincias segun el codigo del país.\r\n\t * @param code \r\n\t */\r\n\tonCountrySelected = (code:string) => {\r\n\t\tconst provinces = this.countriesSubject.value.find(province => province.code == code).provinces;\r\n\t\tthis.provincesSubject.next(provinces);\r\n\t}\r\n\t/**\r\n\t * Para el futuro, cuando haya que aplicar algun formato antes de enviar el formulario.\r\n\t * @param response_obj \r\n\t * @returns \r\n\t */\r\n\tprepareData(response_obj: any) {\r\n\t\treturn response_obj\r\n\t}\r\n\r\n}\r\n","import { Deserializable } from \"../interfaces\";\r\n\r\nexport class User implements Deserializable {\r\n\r\n private readonly USER = 'USER';\r\n public type = 'loguedin';\r\n public config = {};\r\n public client_id = 'demo_client';\r\n public client_secret = 'secret_demo_client';\r\n public grant_type = 'password';\r\n public email = '';\r\n public username = '';\r\n public password = '';\r\n public first_name = '';\r\n public last_name = '';\r\n public address = { country: '', city: '', state: '', address: '', postcode: '' };\r\n public birthday = '';\r\n public gender = '';\r\n public phone_number = '';\r\n public suscribed_to_newsletter: boolean = true;\r\n public document_type? = '';\r\n public preferred_card? = '';\r\n public document_number? = '';\r\n public channels = []\r\n public customers = []\r\n public token = '';\r\n public typeUser? = null;\r\n\r\n initilized(res: any) {\r\n this.token = res.token\r\n this.typeUser = res.hasOwnProperty('type') ? res.type : 'retail_customer'\r\n this.username = res.username\r\n this.email = res.username\r\n this.channels = res.channels || []\r\n this.customers = res.customers || []\r\n }\r\n\r\n deserialize(input: any): this {\r\n return Object.assign(this, input);\r\n }\r\n\r\n jsonify() {\r\n return {\r\n client_id: this.client_id,\r\n client_secret: this.client_secret,\r\n grant_type: this.grant_type,\r\n username: this.username,\r\n email: this.email,\r\n password: this.password,\r\n token: this.token,\r\n typeUser: this.typeUser,\r\n channels: this.channels,\r\n customers: this.customers\r\n }\r\n }\r\n\r\n public isSeller() { return this.typeUser && this.typeUser == 'seller' || false }\r\n\r\n public setChannels(...channels: any): void { this.channels = channels }\r\n\r\n public isWholesaler():boolean {\r\n\t\treturn this.typeUser && (this.typeUser == 'wholesaler_customer' || this.typeUser == 'seller') || false\r\n\t}\r\n\r\n static fromJson(data: any): User {\r\n return Object.assign(new User(), data);\r\n }\r\n}\r\n","import { FilterElement, FilterType, IFilter } from \"../../interfaces\";\r\n\r\nexport class Filter implements IFilter {\r\n \r\n data: FilterElement[] = [];\r\n multi: boolean = false;\r\n \r\n type(): FilterType {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n setContent(options: any): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n getContent(): FilterElement[] {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n toUrlParams(): string {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n createElement(filter: any, original: any, initialValue?: any) {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n removeAccents = (str:string) => {\r\n return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\r\n }\r\n\r\n setSelected(element:any, value?:any){\r\n //console.log(element, value);\r\n ((element.multi != undefined) && !element.multi) ? this.cleanFilter(this.data, element) : null;\r\n this.setSelectedValue(element, value);\r\n }\r\n\r\n cleanFilter = (data:any, element_to_change:any) => {\r\n //console.log(\"cleanFilter\");\r\n element_to_change && data.forEach((element:any) => {\r\n element_to_change != element ? element.selected = false : null;\r\n (element.children && element.children.length > 0) && this.cleanFilter(element.children, element_to_change);\r\n })\r\n }\r\n\r\n setSelectedValue(element:any, value?:any, sublist?:any, multi?:any){\r\n let elements = sublist || this.data;\r\n let index = elements.findIndex((subelement:any) => {\r\n return (element.code || element) == subelement.code;\r\n });\r\n if (index >= 0) {\r\n elements[index].selected = elements[index].selected ? false : true;\r\n !multi && elements.forEach((child:any, i:number) => {\r\n if (i != index) child.selected = false;\r\n });\r\n return {\r\n elements,\r\n founded: true\r\n };\r\n } else {\r\n elements.some((elem:any) => elem.type == 'sub') && elements.some(\r\n (filter:any) => {\r\n let founded = false;\r\n if (filter.type == 'sub') {\r\n const result = this.setSelectedValue(element, value, filter.children, filter.multi);\r\n if (result && result.founded) {\r\n filter.children = result.elements;\r\n founded = true;\r\n }\r\n }\r\n return founded;\r\n }\r\n )\r\n }\r\n return null;\r\n };\r\n\r\n getSelectedList = (): any => this.findSelected(this.data, []);\r\n\r\n findSelected = (elements: any[], result:any) => {\r\n let element = elements.find(elem => elem.selected);\r\n if (element) {\r\n result.push(element.code);\r\n return result;\r\n }\r\n elements.forEach(elem => {\r\n if (elem.children && elem.children.length) {\r\n let new_result = this.findSelected(elem.children, result);\r\n if (new_result) result = new_result;\r\n }\r\n })\r\n return result;\r\n }\r\n}\r\n","import { inject } from \"@angular/core\";\r\nimport { OptionsService } from \"../../ec-services\";\r\nimport { FilterElement, FilterType, IFilter } from \"../../interfaces\";\r\nimport { Filter } from \"./filter\";\r\n\r\nexport class CategoryFilter extends Filter{\r\n private _optionsService: OptionsService = inject(OptionsService);\r\n\r\n override data: FilterElement[] = [];\r\n override multi: boolean = false;\r\n\r\n constructor(private initialValues?: any,) {\r\n super();\r\n this._optionsService.getCategories().subscribe(res => {\r\n //console.log(res);\r\n this.setContent(res, initialValues);\r\n })\r\n }\r\n\r\n override type(): FilterType {\r\n return 'categories';\r\n }\r\n override setContent(options: any, initialValue?: any): void {\r\n const categories = this._optionsService.generateMenu(options);\r\n categories.forEach((filter: any, i: number) => filter = this.createElement(filter, options[i], initialValue));\r\n this.data = categories;\r\n }\r\n override getContent(): FilterElement[] {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n override toUrlParams(actual_url = '', sublist?: any): string {\r\n let elements = sublist || this.data;\r\n elements.forEach((element: any) => {\r\n if (element.type == 'sub' && !element.selected) {\r\n const result = this.toUrlParams('', element.children);\r\n !actual_url.includes(result) ? actual_url += result : null;\r\n } else if (element.selected) {\r\n if (actual_url == '') actual_url = '&category=' + element.value;\r\n else actual_url = element.value;\r\n }\r\n })\r\n return actual_url;\r\n }\r\n override createElement(filter: any, original: any, initialValue?: any) {\r\n if (filter.type == 'sub') {\r\n filter.multi = false;\r\n filter.shape = 'text';\r\n filter.value = original.code;\r\n filter.selected = (initialValue && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initialValue?.toLowerCase()));\r\n filter.children = filter.children.map((child:any, i:number) => this.createElement(child, original.children[i], initialValue));\r\n } else {\r\n filter.value = original.code;\r\n filter.selected = (initialValue && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initialValue?.toLowerCase()));\r\n }\r\n return filter\r\n }\r\n}\r\n","import { inject } from \"@angular/core\";\r\nimport { OptionsService } from \"../../ec-services\";\r\nimport { FilterElement, FilterType, IFilter } from \"../../interfaces\";\r\nimport { Filter } from \"./filter\";\r\n\r\nexport class AttributesFilter extends Filter {\r\n private _optionsService: OptionsService = inject(OptionsService);\r\n\r\n override data: FilterElement[] = [];\r\n override multi: boolean = false;\r\n\r\n constructor(initialValue?: any, options?:any) {\r\n super();\r\n if(options){\r\n this.setContent(options, initialValue); \r\n }else{\r\n this._optionsService.getAttributes().subscribe(\r\n res => {\r\n //console.log(res);\r\n this.setContent(res, initialValue);\r\n }\r\n )\r\n }\r\n }\r\n\r\n override type(): FilterType { return 'attributes'; }\r\n\r\n override setContent(options: any, initialValue?: any): void {\r\n const attributes = this._optionsService.generateMenu(options);\r\n attributes.forEach((filter: any) => filter = this.createElement(filter, options, initialValue));\r\n this.data = attributes;\r\n }\r\n override getContent(): FilterElement[] {\r\n return this.data;\r\n }\r\n override toUrlParams(actual_url = '&attributeCodes=', sublist?:any, already?:any) {\r\n let elements = sublist || this.data;\r\n let aux_url = '';\r\n elements.forEach((element: any) => {\r\n if (element.type == 'sub') {\r\n let result = this.toUrlParams('', element.children, (actual_url != '&attributeCodes=' && actual_url != ''))\r\n if (!actual_url.includes(result)) actual_url += this.cleanResult(result);\r\n } else if (element.selected) {\r\n if (actual_url == '&attributeCodes=' && aux_url == '') {\r\n aux_url = element.code;\r\n }\r\n else {\r\n if (aux_url == '') aux_url = (already ? '<and>' : '') + element.code;\r\n else aux_url += ('<and>' + element.code);\r\n }\r\n }\r\n })\r\n //console.log(actual_url + aux_url);\r\n return actual_url + aux_url;\r\n };\r\n\r\n cleanResult(text: string) { return text.replace('&attributeCodes=', '') };\r\n\r\n override createElement(filter: any, original: any, initialValue?: any) {\r\n if (filter.type == 'sub') {\r\n filter.multi = false;\r\n filter.shape = 'text';\r\n filter.value = original.code;\r\n filter.children = filter.children.map((child: any, i: number) =>{\r\n return this.createElement(child, child.children, initialValue)\r\n });\r\n } else {\r\n filter.value = original.code;\r\n filter.multi = false;\r\n filter.selected = (initialValue && this.removeAccents(original.slug?.toLowerCase()) == this.removeAccents(initialValue?.toLowerCase()));\r\n }\r\n return filter;\r\n }\r\n}\r\n","import { FilterElement, FilterType, IFilter } from \"../../interfaces\";\r\nimport { Filter } from \"./filter\";\r\n\r\nexport class DynamicsFilter extends Filter{\r\n generated_url = '';\r\n override data: FilterElement[] = [];\r\n override multi: boolean = true;\r\n \r\n override type(): FilterType {\r\n return 'dynamics';\r\n }\r\n override setContent(options: any): void {\r\n options = options.map((option:any) => option = this.createElement(option));\r\n this.data = options;\r\n }\r\n override getContent(): FilterElement[] {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n override toUrlParams = (actual_url = '&optionCodes=', sublist?:any, already?:any):string => {\r\n let elements = sublist || this.data;\r\n let aux_url = '';\r\n elements.forEach((element:any) => {\r\n if (element.type == 'sub') {\r\n let result = this.toUrlParams('', element.children, (actual_url != '&optionCodes=' && actual_url != ''))\r\n if (!actual_url.includes(result)) actual_url += this.cleanResult(result);\r\n } else if (element.selected) {\r\n if (actual_url == '&optionCodes=' && aux_url == '') {\r\n aux_url = element.value;\r\n }\r\n else {\r\n if (aux_url == '') aux_url = (already ? '<and>' : '') + element.value;\r\n else aux_url += ('<and>' + element.value);\r\n }\r\n }\r\n })\r\n return actual_url + aux_url;\r\n };\r\n \r\n override createElement(option: any) {\r\n option = {\r\n title: option.label, useToFilter:option.useToFilter, type: 'sub', multi: false, code: option.code, shape: option.type, children: option.values.map((value:any) => {\r\n return {\r\n title: value.code,\r\n description: value.name,\r\n code: (option.code + ' ' + value.name),\r\n type: 'child',\r\n value: value.code,\r\n selected: false,\r\n image: value.image\r\n }\r\n })\r\n }\r\n return option;\r\n }\r\n\r\n cleanResult(text:string) {return text.replace('&optionCodes=', '')};\r\n}\r\n","import { inject } from \"@angular/core\";\r\nimport { CoreConstantsService } from \"../../constants\";\r\nimport { FilterElement, FilterType, IFilter } from \"../../interfaces\";\r\nimport { Filter } from \"./filter\";\r\n\r\nexport class SortFilter extends Filter {\r\n private _consts: CoreConstantsService = inject(CoreConstantsService);\r\n\r\n override data: FilterElement[] = [];\r\n override multi: boolean = true;\r\n\r\n constructor(){\r\n super();\r\n this.setContent();\r\n }\r\n\r\n override type(): FilterType {\r\n return 'sort'\r\n }\r\n override setContent(): void {\r\n this.data = [\r\n {\r\n title: 'price', type: 'sub', multi: false, code: 'price', shape: 'text', children: [\r\n { title: 'cheapest-first', code: 'price chip', type: 'child', value: 'asc', selected: false, multi: false, },\r\n { title: 'most-expensive-first', code: 'price expensive', type: 'child', value: 'desc', selected: false, multi: false, }\r\n ]\r\n },\r\n {\r\n title: 'alphabetical-order', type: 'sub', code: 'order-alph', multi: false, shape: 'text', children: [\r\n // { title: 'order-alph', type: 'child', code: 'alpha default', value: '', selected: false, multi: false },\r\n { title: 'ascendancy', type: 'child', code: 'alpha asc', value: 'asc', selected: false, multi: false, },\r\n { title: 'descendant', type: 'child', code: 'alpha desc', value: 'desc', selected: false, multi: false, }\r\n ]\r\n },\r\n {\r\n title: 'created-date',\r\n type: 'sub',\r\n code: 'recent',\r\n multi: false,\r\n shape: 'text',\r\n children: [\r\n { title: 'order-date', type: 'child', code: 'recent default', value: '', selected: false, multi: false },\r\n { title: 'newest-first', type: 'child', code: 'recent desc', value: 'desc', selected: false, multi: false },\r\n { title: 'oldest-first', type: 'child', code: 'recent asc', value: 'asc', selected: false, multi: false },\r\n ]\r\n },\r\n {\r\n title: 'date-created',\r\n type: 'sub',\r\n code: 'update',\r\n multi: false,\r\n shape: 'text',\r\n children: [\r\n { noUrl: true, title: 'newest-first', type: 'child', code: 'update asc', value: 'asc', selected: false, multi: false },\r\n { noUrl: true, title: 'oldest-first', type: 'child', code: 'update desc', value: 'desc', selected: false, multi: false },\r\n ]\r\n }\r\n ]\r\n\r\n if (!this._consts.getSortFilters().includes('all')) {\r\n this.data = this.data.filter(elem => this._consts.getSortFilters().includes(elem.code))\r\n }\r\n }\r\n override getContent(): FilterElement[] {\r\n return this.data;\r\n }\r\n override toUrlParams(actual_url = '', sublist?:any, father?:any): string {\r\n let elements = sublist || this.data;\r\n elements.forEach((element:any) => {\r\n if (!element.noUrl) { //Si es sin url, no se hace nada. Osea el filtrado es en la vista.\r\n if (element.type == 'sub') {\r\n const result = this.toUrlParams(actual_url, element.children, element.title);\r\n !actual_url.includes(result) ? actual_url += result : null;\r\n } else if (element.selected) {\r\n actual_url = ('&sorting[' + this.translate(father) + ']=' + element.value);\r\n }\r\n }\r\n })\r\n return actual_url;\r\n }\r\n override createElement(filter: any, original: any, initialValue?: any) {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n translate(value:string):string | null{\r\n switch (value) {\r\n case 'price': return 'price';\r\n case 'created-date': return 'dateCreate';\r\n case 'alphabetical-order': return 'name';\r\n default: return null;\r\n }\r\n }\r\n}\r\n","import { FilterType, IFilter, PaginationSettings } from \"../../interfaces\";\r\nimport { AttributesFilter } from \"./attributes-filter\";\r\nimport { CategoryFilter } from \"./category-filter\";\r\nimport { DynamicsFilter } from \"./dynamics-filter\";\r\nimport { Filter } from \"./filter\";\r\nimport { SortFilter } from \"./sort-filter\";\r\n\r\nexport class FilterFactory {\r\n public create(filterType: FilterType, productsFilter?: PaginationSettings): Filter {\r\n switch (filterType) {\r\n case 'categories':\r\n return new CategoryFilter(productsFilter ? (productsFilter.type == 'categories' && productsFilter.value) : null);\r\n case 'attributes':\r\n return new AttributesFilter(productsFilter ? (productsFilter.type == 'attributes' && productsFilter.value) : null);\r\n case 'dynamics':\r\n return new DynamicsFilter();\r\n case 'sort':\r\n return new SortFilter();\r\n default:\r\n throw new Error(\"Not implemented\")\r\n }\r\n }\r\n}\r\n","import { IStep, StepState, StepType } from \"../../interfaces/step\";\r\n\r\nexport class Step implements IStep {\r\n\r\n public name;\r\n public label:string = '';\r\n public priority;\r\n public type: StepType = null;\r\n public data:any;\r\n public state: StepState = 'pending';\r\n\r\n constructor(name:any, priority:any, label:string, state?:StepState) {\r\n this.name = name;\r\n this.label = label;\r\n this.state = state || 'pending';\r\n this.priority = priority;\r\n }\r\n\r\n doing = () => {\r\n this.data = null;\r\n this.state = 'doing';\r\n };\r\n\r\n restart = () => {\r\n this.data = null;\r\n this.state = 'pending';\r\n }\r\n\r\n ready = (data:any) => {\r\n this.data = data;\r\n this.state = 'ready';\r\n }\r\n\r\n isPending = () => this.state == 'pending' || this.state == 'doing';\r\n\r\n isReady = () => this.state == 'ready' && this.data;\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { Storage } from '../interfaces';\r\n/**\r\n * Adapter usado para storagear los datos.\r\n * @class LocalStorageService\r\n * @implements {Storage}\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalStorageService implements Storage {\r\n /**\r\n * Servicio usado para guardar los datos en las cookies\r\n */\r\n private _cookieService: CookieService = inject(CookieService);\r\n\r\n constructor() { }\r\n /**\r\n * Obtiene el item del Storage\r\n * @param key Clave para acceder al valor\r\n * @returns \r\n */\r\n getItem(key: string):string {\r\n return this._cookieService.get(key);\r\n }\r\n /**\r\n * Guarda un dato en el storage.\r\n * @param key Clave que se asocia al valor\r\n * @param value Valor a guardar\r\n * @param metadata Opciones extra que puede necesitar el servicio.\r\n */\r\n setItem(key: string, value: any, metadata:any = {path:'/'}) {\r\n this._cookieService.set(key, value, metadata);\r\n }\r\n /**\r\n * Remueve el item del storage.\r\n * @param key Clave del item del storage a eliminar.\r\n * @param metadata Opciones extra que puede necesitar el servicio.\r\n */\r\n removeItem(key: string, metadata:any = '/'): void {\r\n this._cookieService.delete(key, metadata);\r\n }\r\n /**\r\n * Limpia el Storage.\r\n */\r\n clear(): void {\r\n this._cookieService.deleteAll();\r\n }\r\n key(index: number): string | null {\r\n throw new Error('Method not implemented.');\r\n }\r\n\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, map } from 'rxjs';\r\nimport { NgxLocalStorageService } from './ngx-local-storage.service';\r\nimport { LocalStorageService } from './local-storage.service';\r\nimport moment from 'moment';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class AuthStorageService {\r\n\tprivate _localStorage = inject(LocalStorageService);\r\n\r\n\tprivate _authTokenSubject = new BehaviorSubject<string | null>(null)\r\n\r\n\t// Contantes para el storage.\r\n\tprivate readonly JWT_TOKEN = 'JWT_TOKEN'\r\n\tprivate readonly REFRESH_TOKEN = 'REFRESH_TOKEN'\r\n\tprivate readonly EXPIRATES_IN = 'EXPIRATES_IN'\r\n\tconstructor() { }\r\n\r\n\tsetAuthToken(token: string | null): void {\r\n\t\tthis._authTokenSubject.next(token);\r\n\t}\r\n\r\n\tgetAuthToken$() {\r\n\t\treturn this._authTokenSubject.asObservable();\r\n\t}\r\n\r\n\tgetAuthToken(): string | null {\r\n\t\tif(!this._authTokenSubject.value){\r\n\t\t\tconst res = this._localStorage.getItem(this.JWT_TOKEN)\r\n\t\t\treturn res ? res : null;\r\n\t\t} else {\r\n\t\t\treturn this._authTokenSubject.value;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Devuelve `true`si el token expiro, `false` caso contrario.\r\n\t * @returns \r\n\t */\r\n\tprivate isTokenExpired() {\r\n\t\tconst fecha_expiracion = this.getExpiratesAt();\r\n\t\tconst result = moment() >= moment(fecha_expiracion);\r\n\t\treturn result;\r\n\t}\r\n\t/**\r\n\t * Obtiene la fecha de expiración del token.\r\n\t * @returns \r\n\t */\r\n\tprivate getExpiratesAt() {\r\n\t\treturn this._localStorage.getItem(this.EXPIRATES_IN);\r\n\t}\r\n}\r\n","import { inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\r\nimport { UserRoleType } from '../interfaces';\r\nimport { BehaviorSubject, catchError, map, Observable, of } from 'rxjs';\r\nimport { ConnectionService } from '../api';\r\nimport { User } from '../classes';\r\nimport moment from 'moment';\r\nimport { ChannelService } from './channel.service';\r\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\r\nimport { LocalStorageService } from './local-storage.service';\r\nimport { AuthStorageService } from './auth.storage.service';\r\nimport { CartService } from './cart.service';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n/**\r\n * Servicio de autentificación del usuario en la plataforma.\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class AuthService {\r\n\tprivate _localStorage: LocalStorageService = inject(LocalStorageService)\r\n\tprivate _connection: ConnectionService = inject(ConnectionService);\r\n\tprivate _channelService: ChannelService = inject(ChannelService);\r\n\tprivate _constants: CoreConstantsService = inject(CoreConstantsService);\r\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\r\n\tprivate _authStorage: AuthStorageService = inject(AuthStorageService);\r\n\r\n\t// Contantes para el storage.\r\n\tprivate readonly JWT_TOKEN = 'JWT_TOKEN'\r\n\tprivate readonly REFRESH_TOKEN = 'REFRESH_TOKEN'\r\n\tprivate readonly EXPIRATES_IN = 'EXPIRATES_IN'\r\n\tprivate readonly USER = 'USER'\r\n\tprivate readonly MAIL = 'mail'\r\n\tprivate readonly LOCALE = 'LOCALE'\r\n\tprivate readonly CHANNEL = 'CHANNEL'\r\n\tprivate readonly CUSTOMER = 'CUSTOMER'\r\n\tprivate readonly CHANNELSELLER = 'CHANNELSELLER'\r\n\r\n\tprivate channelsUserSubject = new BehaviorSubject<any[]>([])\r\n\tpublic channels$ = this.channelsUserSubject.asObservable()\r\n\tprivate _channel$ = this._channelService.getChannel()\r\n\tprivate _userInSubject = new BehaviorSubject<User | null>(null)\r\n\tprivate _loggedInSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\tpublic loggedIn$: Observable<boolean> = this._loggedInSubject.asObservable();\r\n\tprivate _loggingInSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\tpublic loggingIn$: Observable<boolean> = this._loggingInSubject.asObservable();\r\n\r\n\t/**\r\n\t * Para indicar si un canal cambio.\r\n\t */\r\n\tprivate _activeChannelChange: boolean = false;\r\n\t/**\r\n\t * Guarda los datos del usuario\r\n\t */\r\n\tprivate _user: User | null = null;\r\n\tprivate _customer = null;\r\n\t/**\r\n\t * Guarda los datos del canal\r\n\t */\r\n\tpublic channel: any = []\r\n\tpublic channels: any[] = []\r\n\t/**\r\n\t * Utilizado para resolver hacia donde se tiene que redireccionar\r\n\t * la pagina tras un evento.\r\n\t */\r\n\tprivate _homeResolver: any;\r\n\t/**\r\n\t * Signal para guardar el token de usuario una vez logueado\r\n\t */\r\n\tprivate _tokenSignal = signal<string | null>(null);\r\n\t/**\r\n\t * Signal para guardar el usuario\r\n\t */\r\n\tprivate _userSignal = signal<User | null>(null);\r\n\t//APIs\r\n\tprivate shopApi: string = this._apiConsts.SHOP_API_URL\r\n\tprivate channelApi: string = this._apiConsts.CHANNEL\r\n\tprivate tokenApi() { return this.shopApi + 'login_check' }\r\n\tprivate recoverPasswordApi() { return `${this.shopApi}${this.channelApi}/request-password-reset` }\r\n\tprivate confirmAccountApi(token: string) { return `${this.shopApi}${this.channelApi}/verify-account?token=${token}` }\r\n\tprivate registerApi() { return `${this.shopApi}${this.channelApi}/register` }\r\n\tprivate registerWholesalerApi() { return `${this.shopApi}${this.channelApi}/register-wholesaler`}\r\n\tprivate platformId: any = inject(PLATFORM_ID)\r\n\t\r\n\tpublic window?:Window;\r\n\tpublic localStorage?:Storage;\r\n\tconstructor() {\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tthis.window = window\r\n\t\t\tthis.localStorage = localStorage;\r\n\t\t}\r\n\t\tthis.loadTokenFromStorage();\r\n\t\tthis.isAuthenticated() && this._loggedInSubject.next(true);\r\n\t}\r\n\t/**\r\n\t * Loguea al usuario en la aplicación.\r\n\t * @param user datos del usuario\r\n\t * @param withRoles roles del usuario\r\n\t * @returns \r\n\t */\r\n\tlogin(user: { username: string, password: string }, withRoles: UserRoleType[] = []): Observable<any> {\r\n\t\tthis._channel$.subscribe(ch => this.channel = ch);\r\n\t\tthis.channels$.subscribe(ch => this.channels = ch);\r\n\t\tthis._loggingInSubject.next(true);\r\n\t\tuser = {...user, ...this.loginExtraData() }\r\n\t\treturn this._connection.post(this.tokenApi(), user).pipe(\r\n\t\t\tmap((res: any) => {\r\n\t\t\t\tif (this.channelAccessPermission({ ...user, ...res }) && this.isAllowedRole(withRoles, res.type)) {\r\n\t\t\t\t\tthis.doLoginUser({ ...user, ...res });\r\n\t\t\t\t\treturn 'ok';\r\n\t\t\t\t}\r\n\t\t\t\treturn 'error';\r\n\t\t\t}),\r\n\t\t\tcatchError((error: any) => {\r\n\t\t\t\tthis._loggingInSubject.next(false);\r\n\t\t\t\treturn of(error.toString());\r\n\t\t\t})\r\n\t\t)\r\n\t}\r\n\t/**\r\n\t * Controla que el usuario logueado tenga permisos \r\n\t * para el canal actual de la aplicación.\r\n\t * @param res \r\n\t * @returns \r\n\t */\r\n\tprivate channelAccessPermission(res: any) {\r\n\t\t//console.log('channelAccess', res);\r\n\t\tthis.channelsUserSubject.next([]);\r\n\r\n\t\t/* No authorized channels */\r\n\t\tif (res.channels?.length == 0) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\t/* Some authorized channel(s) including current channel */\r\n\t\tif (res.channels.find((userchannel: any) => userchannel.code === this.channel.code)) {\r\n\t\t\t/* Multiple authorized channels including current channel */\r\n\t\t\tif (res.channels?.length > 1 && this._activeChannelChange)\r\n\t\t\t\tthis.channelsUserSubject.next(res.channels)\r\n\t\t\treturn true\r\n\t\t}\r\n\t\t/* One authorized channel not including current channel */\r\n\t\tif (res.channels?.length == 1 && this._activeChannelChange) {\r\n\t\t\tdelete res.password\r\n\t\t\tthis.channelAccess(res.channels[0], res)\r\n\t\t\treturn true\r\n\t\t}\r\n\t\t/* Multiple authorized channels not including current channel */\r\n\t\tif (this._activeChannelChange) {\r\n\t\t\tthis.channelsUserSubject.next(res.channels)\r\n\t\t\treturn true\r\n\t\t}\r\n\t\treturn false\r\n\t}\r\n\t/**\r\n\t * Controla el acceso al canal, de ser otro nuevo cambia los valores.\r\n\t * @param channel \r\n\t * @param user \r\n\t */\r\n\tchannelAccess(channel: any, user = null) {\r\n\t\tif (this.window?.location.hostname != channel.hostname) {\r\n\t\t\tlet encoded = btoa(JSON.stringify(user != null ? user : this._user))\r\n\t\t\tthis.window?.location.replace(`${this.window?.location.protocol}//${channel.hostname}/auth/redirect/${encoded}`)\r\n\t\t} else {\r\n\t\t\tthis._constants.modifyChannelConfig(channel)\r\n\t\t\tthis.window?.location.reload()\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Controla que el rol del usuario sea un rol permitido por la aplicación.\r\n\t * @param allowedRoles roles que permite la aplicación.\r\n\t * @param role rol del usuarios\r\n\t * @returns \r\n\t */\r\n\tprivate isAllowedRole(allowedRoles: UserRoleType[], role: string) {\r\n\t\treturn allowedRoles.length\r\n\t\t\t? allowedRoles.includes(role as UserRoleType)\r\n\t\t\t: true\r\n\t}\r\n\t/**\r\n\t * Tras un logueo exitoso, guarda los datos necesarios en el storage y demás\r\n\t * configuraciones necesarias.\r\n\t * @param tokens \r\n\t */\r\n\tprivate doLoginUser(tokens: any) {\r\n\t\tthis._user = new User()\r\n\t\tthis._user.initilized(tokens)\r\n\t\t\r\n\t\tthis.forceChannelsForSeller(tokens)\r\n\t\t//Channel\r\n\t\tconst userJsonify = this._user.jsonify()\r\n\t\tthis._localStorage.setItem(this.USER, JSON.stringify(userJsonify))\r\n\t\tthis._localStorage.setItem(this.EXPIRATES_IN, moment(tokens.expire_in).add(1, 'h').format());\r\n\t\tthis._localStorage.setItem(this.REFRESH_TOKEN, moment(tokens.expire_in).add(1, 'h').format());\r\n\t\tthis._localStorage.setItem(this.JWT_TOKEN, tokens.token);\r\n\t\tthis._authStorage.setAuthToken(tokens.token)\r\n\t\tthis._tokenSignal.set(tokens.token);\r\n\t\tthis._localStorage.setItem(this.MAIL, tokens.username);\r\n\t\t//Observables\r\n\t\tthis._userInSubject.next(this._user);\r\n\t\tthis._loggedInSubject.next(true);\r\n\t\tthis._loggingInSubject.next(false);\r\n\t}\r\n\t/**\r\n\t * Cambia la funcion que se encarga de resolver hacia donde se redirige el frontend\r\n\t * tras una acción\r\n\t * @param resolverFunction \r\n\t */\r\n\tpublic setHomeResolver(resolverFunction: any) { this._homeResolver = resolverFunction }\r\n\t/**\r\n\t * Obtiene la funcion que se encarga de resolver hacia donde se redirige el frontend.\r\n\t * @returns \r\n\t */\r\n\tpublic getHomeResolver() { return this._homeResolver }\r\n\t/**\r\n\t * Obtiene el token del storage y lo guarda en la signal.\r\n\t */\r\n\tpublic loadTokenFromStorage() {\r\n\t\tconst token = this._localStorage.getItem(this.JWT_TOKEN);\r\n\t\tif (token) {\r\n\t\t\tthis._tokenSignal.set(token);\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Desloguea al usuario.\r\n\t */\r\n\tpublic logout() {\r\n\t\tthis.doLogoutUser();\r\n\t}\r\n\t/**\r\n\t * Retorna si hay un usuario logueado o no.\r\n\t * @returns \r\n\t */\r\n\tpublic isAuthenticated(): boolean {\r\n\t\t//console.log(\"isAuthenticated\",this.isTokenExpired(), this._tokenSignal() );\r\n\t\tif (this.isTokenExpired()) {\r\n\t\t\tthis.doLogoutUser()\r\n\t\t}\r\n\t\tthis.getCurrentUserAsUser()\r\n\t\tthis._userInSubject.next(this._user);\r\n\t\t//console.log(this.getToken(), !this.isTokenExpired() , this._user != null);\r\n\t\treturn this.getToken() && !this.isTokenExpired() && this._user != null;\r\n\t}\r\n\t/**\r\n\t * Retorna el token de usuario\r\n\t * @returns \r\n\t */\r\n\tpublic getToken(): any {\r\n\t\treturn this._tokenSignal();\r\n\t}\r\n\t/**\r\n\t * Limpia el storage y las configuraciones internas\r\n\t */\r\n\tpublic doLogoutUser() {\r\n\t\tthis._user = null\r\n\t\tthis._localStorage.removeItem(this.USER);\r\n\t\tthis._localStorage.removeItem(this.EXPIRATES_IN);\r\n\t\tthis._localStorage.removeItem(this.JWT_TOKEN);\r\n\t\tthis._authStorage.setAuthToken(null);\r\n\t\tthis._localStorage.removeItem(this.REFRESH_TOKEN);\r\n\t\tthis._localStorage.removeItem('cart_token');\r\n\t\tthis._localStorage.removeItem(this.MAIL);\r\n\t\tthis._localStorage.removeItem(this.CHANNEL);\r\n\t\tthis._localStorage.removeItem(this.CHANNELSELLER);\r\n\t\tthis._localStorage.removeItem(this.LOCALE);\r\n\t\tthis._localStorage.removeItem(this.CUSTOMER);\r\n\t\tthis._localStorage.removeItem('MASTER_CHANNEL');\r\n\t\tthis._loggedInSubject.next(false);\r\n\t\tthis._userInSubject.next(this._user);\r\n\t\tthis.channelsUserSubject.next([])\r\n\t\tthis._tokenSignal.set(null)\r\n\t}\r\n\t/**\r\n\t * Devuelve `true`si el token expiro, `false` caso contrario.\r\n\t * @returns \r\n\t */\r\n\tprivate isTokenExpired() {\r\n\t\tconst fecha_expiracion = this.getExpiratesAt();\r\n\t\tconst result = moment() >= moment(fecha_expiracion);\r\n\t\treturn result;\r\n\t}\r\n\t/**\r\n\t * Obtiene la fecha de expiración del token.\r\n\t * @returns \r\n\t */\r\n\tprivate getExpiratesAt() {\r\n\t\treturn this._localStorage.getItem(this.EXPIRATES_IN);\r\n\t}\r\n\t/**\r\n\t * Obtiene al usuario actual y lo convierte en una instancia de `User`\r\n\t * @returns \r\n\t */\r\n\tprivate getCurrentUserAsUser(): User | null {\r\n\t\tthis._user = new User();\r\n\t\tif (!this.loadUserFromStorage()) {\r\n\t\t\tthis._user = null\r\n\t\t}\r\n\t\telse if (this._user?.channels.find((userchannel: any) => userchannel?.code === this._apiConsts.CHANNEL)) {\r\n\t\t\treturn this._user;\r\n\t\t} else {\r\n\t\t\tthis.logout()\r\n\t\t}\r\n\t\treturn this._user;\r\n\t}\r\n\t/**\r\n\t * Obtiene el usuario del storage.\r\n\t * @param key \r\n\t * @returns \r\n\t */\r\n\tprivate loadUserFromStorage(key = this.USER) {\r\n\t\tif (this._localStorage.getItem(key)) {\r\n\t\t\tthis._user = JSON.parse(this._localStorage.getItem(key));\r\n\t\t\treturn true\r\n\t\t}\r\n\t\treturn false\r\n\t}\r\n\t/**\r\n\t * Envia la solicitud para cambiar la contraseña.\r\n\t * @param email email del solicitante.\r\n\t * @returns \r\n\t */\r\n\trecoverPassword(email: string) {\r\n\t\treturn this._connection.put(this.recoverPasswordApi(), { email });\r\n\t}\r\n\t/**\r\n\t * Para confirmar el registro de usuario.\r\n\t * @param token \r\n\t * @returns \r\n\t */\r\n\tconfirmAccount(token: string) {\r\n\t\treturn this._connection.get(this.confirmAccountApi(token));\r\n\t}\r\n\t/**\r\n\t * Para registrar a un usuario común\r\n\t * @param data \r\n\t * @returns \r\n\t */\r\n\tsingUp(data: any) {\r\n\t\treturn this._connection.post(this.registerApi(), data);\r\n\t}\r\n\t/**\r\n\t * Para registrar a un usuario mayorista.\r\n\t * @param data \r\n\t * @returns \r\n\t */\r\n\tsignUpWholesaler(data: any) {\r\n\t\treturn this._connection.post(this.registerWholesalerApi(),data);\r\n\t}\r\n\t/**\r\n\t * Chequea si un usuario esta habilitado a comprar o no.\r\n\t * @returns \r\n\t */\r\n\tisAbleToBuy():boolean {\r\n\t\tconst currentUser = this.getUserProfileAsUser() as User;\r\n\t\tconst isSeller = currentUser.typeUser && currentUser.typeUser == 'seller' || false\r\n\t\treturn !isSeller || !this.getCustomer();\r\n\t}\r\n\t/**\r\n\t * Retorna un usuario de tipo cliente.\r\n\t * @returns \r\n\t */\r\n\tgetCustomer() {\r\n\t\treturn this._customer || JSON.parse(this._localStorage.getItem(this.CUSTOMER))\r\n\t}\r\n\t/**\r\n\t * Devuelve el usuario actual logueado.\r\n\t * @returns \r\n\t */\r\n\tgetUserProfileAsUser(): User {\r\n return this._user! as User || this.getCurrentUserAsUser();\r\n }\r\n\t/**\r\n\t * Agrega data extra al objecto de Usuario.\r\n\t * @returns \r\n\t */\r\n\tloginExtraData = () => {\r\n return {\r\n client_id: 'demo_client',\r\n client_secret: 'secret_demo_client',\r\n grant_type: 'password'\r\n }\r\n }\r\n\t/* Please remove this ASAP - Needs *channels* array in user object ALWAYS */\r\n private forceChannelsForSeller(tokens:any){\r\n if (UserRoleType.SELLER == tokens.type as UserRoleType)\r\n this.channels?.length\r\n ? this._user!.setChannels(...this.channels)\r\n : this._user!.setChannels(this.channel)\r\n }\r\n\r\n\t /**\r\n * Carga el cliente con el que se realizaran pedidos. Si recibe el valor null\r\n * se vuelve a cargar el vendedor para su uso. \r\n * @param customer \r\n */\r\n\t public setCustomer(customer:any){\r\n let refreshPage = false\r\n this._customer = customer\r\n this._localStorage.setItem(this.CUSTOMER, JSON.stringify(customer))\r\n \r\n let sameChannel = customer ? this.sameChannel(customer.channels[0].code, customer.channels[0].locales.code) : null\r\n \r\n if (customer) {\r\n if(!sameChannel){\r\n !this.localStorage?.getItem(this.CHANNELSELLER) ?\r\n this.localStorage?.setItem(this.CHANNELSELLER, JSON.stringify({\r\n channel: this._apiConsts.CHANNEL,\r\n locale: this._apiConsts.LOCALE\r\n })) : null;\r\n this.changeChannel({\r\n channel: customer.channels[0].code,\r\n locale: customer.channels[0].locales.code\r\n })\r\n refreshPage = true\r\n }\r\n } else {\r\n let res = JSON.parse(this._localStorage.getItem(this.CHANNELSELLER))\r\n if(res){\r\n if(!this.sameChannel(res.channel, res.locale)){\r\n this.changeChannel(res)\r\n refreshPage = true\r\n }\r\n this.localStorage?.removeItem(this.CHANNELSELLER);\r\n }\r\n }\r\n //this._cartService.clearAndResetCustomerCart()\r\n refreshPage ? location.href = location.href : null\r\n }\r\n\r\n\t/**\r\n * Comprueba si los valores del canal actual son iguales a los ingresado por parametros.\r\n * @param {string} channel Nombre del canal\r\n * @param {string} locale Locale del canal\r\n * @returns {boolean} True si es el mismo canal, False caso contrario.\r\n */\r\n private sameChannel = (channel:string, locale:string):boolean => (channel == this._apiConsts.CHANNEL) && (locale == this._apiConsts.LOCALE)\r\n\r\n\t/**\r\n * Cambia de canal\r\n * @param channelConfig debe ser un objeto que contenga al menos las keys channel y locale.\r\n */\r\n private changeChannel = (channelConfig:any) => {\r\n this._constants.modifyChannelConfig({\r\n channel: channelConfig.channel,\r\n locale: channelConfig.locale\r\n })\r\n }\r\n}\r\n","import { EnvironmentInjector, inject, Injectable, runInInjectionContext } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { Filter, FilterFactory } from '../classes';\r\nimport { DefaultFilter, FilterElement, FilterType, PaginationSettings } from '../interfaces';\r\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FiltersService {\r\n private _apiConsts: ApiConstantsService = inject(ApiConstantsService);\r\n private _consts: CoreConstantsService = inject(CoreConstantsService);\r\n private _filtersSubject: BehaviorSubject<Filter[]> = new BehaviorSubject<Filter[]>([]);\r\n public filters$: Observable<Filter[]> = this._filtersSubject.asObservable();\r\n\r\n private _apiUrlSubject: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n public apiUrl$: Observable<string> = this._apiUrlSubject.asObservable();\r\n\r\n private _readySubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n public ready$: Observable<boolean> = this._readySubject.asObservable();\r\n\r\n private environmentInjector = inject(EnvironmentInjector)\r\n\r\n private _optionsFilters: FilterType[] = ['all'];\r\n private _defaultFilters: DefaultFilter[] = [];\r\n\r\n private _paginationSettings: PaginationSettings = {\r\n value:'',\r\n type:'',\r\n limit:0\r\n };\r\n\r\n constructor(){\r\n //this._defaultFilters = this._consts.getDefaultFilters()\r\n }\r\n\r\n //API URL\r\n /**\r\n * Retorna la url para el filtrado\r\n * @param filters \r\n * @returns \r\n */\r\n productsFilterApi(filters = '') { return 'shop-api/' + this._apiConsts.CHANNEL + '/product-search/' + '?locale=' + this._apiConsts.LOCALE + filters };\r\n /**\r\n * Arma los filtros y retorna la url completa con los filtros aplicados.\r\n * @param search_value valor a buscar\r\n * @returns \r\n */\r\n generateFinalApi(search_value?: string) {\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 \r\n //console.log(\"extra_params\",extra_params);\r\n return this.productsFilterApi(extra_params);\r\n }\r\n\r\n private isUpdated(paginationSettings: PaginationSettings){\r\n const keys:string[] = Object.keys(paginationSettings);\r\n let change:boolean = false;\r\n keys.forEach((key:string) => { \r\n const value = (paginationSettings as Record<string, any>)[key]; \r\n const value2 = (this._paginationSettings as Record<string, any>)[key];\r\n if (value != value2) change = true; \r\n })\r\n if (change) this._paginationSettings = paginationSettings;\r\n return change;\r\n }\r\n /**\r\n * Configura los filtros que seran aplicados en el frontend.\r\n * @param paginationSettings \r\n */\r\n setFilters(paginationSettings: PaginationSettings) {\r\n let final_filters: Filter[] = [];\r\n if (this._optionsFilters?.includes('all')) this._optionsFilters = ['attributes', 'categories', 'dynamics', 'sort'];\r\n runInInjectionContext(this.environmentInjector, () => {\r\n const filterFactory = new FilterFactory();\r\n this._optionsFilters?.forEach(filter => final_filters.push(filterFactory.create(filter, paginationSettings)));\r\n })\r\n this._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 * Obtengo filtros especificos según el tipo.\r\n * @param types \r\n * @returns \r\n */\r\n getSpecificFilters(types: FilterType[]): Filter[] {\r\n const filters: Filter[] = this._filtersSubject.value.filter(filter => types.includes(filter.type()))\r\n return filters;\r\n }\r\n /**\r\n * Aplica un filtro.\r\n * @param filterObj \r\n * @param filterElem \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 || filterElem.code);\r\n //console.log(index, final_filters)\r\n this._filtersSubject.next(final_filters);\r\n }\r\n /**\r\n * Actualiza los filtros.\r\n * @param paginationFilters \r\n */\r\n updateFilters(paginationFilters: any): void {\r\n const claves = Object.keys(paginationFilters)\r\n runInInjectionContext(this.environmentInjector, () => {\r\n const filterFactory = new FilterFactory();\r\n const filter:Filter[] = []\r\n /* claves.forEach((key:any) => {\r\n filter.push(filterFactory.create(key))\r\n paginationFilters[key].forEach((value:any) => {\r\n console.log(filter[0].createElement(value,paginationFilters[key]));\r\n })\r\n \r\n }) */\r\n this._filtersSubject.value.forEach((value:any) => {\r\n if(value.type() == \"attributes\") { \r\n //value.data = [];\r\n }\r\n })\r\n })\r\n }\r\n}\r\n","import { inject, Injectable, signal } from '@angular/core';\r\nimport { ConnectionService } from '../api';\r\nimport { BehaviorSubject, map, Observable, shareReplay, switchMap } from 'rxjs';\r\nimport { Pagination, Product } from '../interfaces';\r\nimport { FiltersService } from './filters.service';\r\nimport { Filter } from '../classes';\r\n/**\r\n * Servicio para manejar la paginación de los productos.\r\n * @class PaginationService\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class PaginationService {\r\n\r\n\tprivate _connectionService: ConnectionService = inject(ConnectionService);\r\n\tprivate _filtersService: FiltersService = inject(FiltersService)\r\n\tpublic paginationData$ = this._filtersService.filters$.pipe(\r\n\t\tshareReplay(1),\r\n\t\tswitchMap((filters) => {\r\n\t\t\tconst url = this.buildUrl(filters);\r\n\t\t\tconsole.log(\"pag\",url);\r\n\t\t\treturn this.getData(url);\r\n\t\t})\r\n\t)\r\n\r\n\tprivate _dataPagination: any = signal<Pagination>({\r\n\t\tattributes: [],\r\n\t\tcategory: [],\r\n\t\toptions: [],\r\n\t\tlimit: 0,\r\n\t\tpage: 0,\r\n\t\tpages: 0,\r\n\t\ttotal: 0,\r\n\t\titems: [],\r\n\t\tcalled: false\r\n\t});\r\n\r\n\tprivate _waiting: boolean = false;\r\n\tprivate _finished: boolean = false;\r\n\tprivate _apiUrl: string = '';\r\n\tprivate _start: boolean = false;\r\n\r\n\tprivate _nextProductsSubject: BehaviorSubject<Product[]> = new BehaviorSubject<Product[]>([]);\r\n\tpublic nextProducts$ = this._nextProductsSubject.asObservable();\r\n\r\n\tprivate _resetSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\tpublic reset$ = this._resetSubject.asObservable();\r\n\tconstructor() { }\r\n\r\n\t/**\r\n\t * Inicializa la configuración para el Servicio de Paginación.\r\n\t * @param apiUrl Url con los filtros aplicados. \r\n\t * @param limit limite de productos en cada petición.\r\n\t */\r\n\tinitialize(apiUrl: string, limit?: number) {\r\n\t\t//console.log(apiUrl)\r\n\t\tthis._apiUrl = apiUrl;\r\n\t\tthis._dataPagination().limit = limit || this._dataPagination().limit || 10;\r\n\t\tthis._finished = false;\r\n\t\tthis._start = true;\r\n\t\tthis._nextProductsSubject.next([]);\r\n\t}\r\n\t/**\r\n\t * Obtengo los datos de la siguiente página.\r\n\t * @param next \r\n\t * @returns \r\n\t */\r\n\tgetNext(next?: any): boolean {\r\n\t\tthis._waiting = true;\r\n\t\tthis._nextProductsSubject.next([]);\r\n\t\tthis._apiUrl = this._apiUrl.replace('%20', ' ');// mas para cuando es un search value.\r\n\t\tlet nextProducts;\r\n\t\tif (this._start) {\r\n\t\t\tnextProducts = this._connectionService.get(this._apiUrl, { limit: this._dataPagination().limit, page: 1 })\r\n\t\t\tthis._start = false\r\n\t\t} else {\r\n\t\t\tnextProducts = this._connectionService.get(this._dataPagination().links.next.slice(1));\r\n\t\t}\r\n\r\n\t\t!this._finished && nextProducts.subscribe(\r\n\t\t\t(response: Pagination) => {\r\n\t\t\t\tresponse.links ? this.updatePageData(response) : this.finish(response)\r\n\t\t\t\tthis._nextProductsSubject.next(response.items);\r\n\t\t\t}\r\n\t\t)\r\n\t\treturn true;\r\n\t}\r\n\t/**\r\n\t * Actualiza los datos de la pagina.\r\n\t * @param response respuesta del backend o objecto del tipo `Pagination`.\r\n\t */\r\n\tupdatePageData(response: Pagination): void {\r\n\t\tthis._dataPagination.set({ ...response, called: true })\r\n\t\tthis._finished = (response.page == response.pages)\r\n\t\tthis._waiting = false;\r\n\t}\r\n\t/**\r\n\t * Marca el final de las paginas, es decir cuando ya no queda mas elementos que mostrar.\r\n\t * @param response \r\n\t */\r\n\tfinish(response: Pagination): void {\r\n\t\tthis._finished = true;\r\n\t\tthis._waiting = false;\r\n\t}\r\n\t/**\r\n\t * Obtengo los productos de la pagina cargada actual. \r\n\t * @returns \r\n\t */\r\n\tpublic getNextProducts(): Product[] {\r\n\t\treturn this._nextProductsSubject.value;\r\n\t}\r\n\t/**\r\n\t * Devuelve si esta esperando o no la petición al backend.\r\n\t * @returns \r\n\t */\r\n\tpublic getWaiting(): boolean { return this._waiting; }\r\n\t/**\r\n\t * Setea la variable waiting.\r\n\t * @param value \r\n\t */\r\n\tpublic setWaiting(value: boolean): void { this._waiting = value }\r\n\t/**\r\n\t * Getter para la variable `_finished`.\r\n\t * @returns \r\n\t */\r\n\tpublic getFinished(): boolean { return this._finished; }\r\n\t/**\r\n\t * Devuelve el total de Items.\r\n\t * @returns \r\n\t */\r\n\tpublic getTotalItems(): number {\r\n\t\treturn this._dataPagination().limit * this._dataPagination().page;\r\n\t}\r\n\t/**\r\n\t * Obtengo un objecto con los datos de los filtros resultantes.\r\n\t * @returns \r\n\t */\r\n\tpublic getFiltersPagination(): any {\r\n\t\treturn {\r\n\t\t\t\"categories\": this._dataPagination().category,\r\n\t\t\t\"attributes\": this._dataPagination().attributes,\r\n\t\t\t\"options\": this._dataPagination().options\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Para contruiste la url en base a los filtros aplicados.\r\n\t * @param filters \r\n\t * @returns \r\n\t */\r\n\tpublic buildUrl(filters: Filter[]) {\r\n\t\treturn this._filtersService.generateFinalApi();\r\n\t}\r\n\t/**\r\n\t * Devuelve un observable de los productos que devolvio la última página obtenida.\r\n\t * @param url \r\n\t * @returns \r\n\t */\r\n\tpublic getData(url: string): Observable<any> {\r\n\t\tthis._resetSubject.next(true);\r\n\t\tthis._nextProductsSubject.next([]);\r\n\t\tthis._connectionService.get(url, { limit: 10, page: 1 }).pipe(\r\n\t\t\tmap(res =>{ \r\n\t\t\t\t//console.log(res)\r\n\t\t\t\tthis._nextProductsSubject.next(res.items);\r\n\t\t\t\tres.links ? this.updatePageData(res) : this.finish(res)\r\n\t\t\t})).subscribe();\r\n\r\n\t\treturn this.nextProducts$;\r\n\t}\r\n}\r\n\r\n","import { EnvironmentInjector, inject, Injectable, runInInjectionContext, signal } from '@angular/core';\r\nimport { BehaviorSubject, map, Observable, ReplaySubject, shareReplay, switchMap } from 'rxjs';\r\nimport { DefaultFilter, FilterElement, FilterType, IFilter, Options, PaginationSettings, ParamsProductsWithUniqueVariant, Product } from '../interfaces';\r\nimport { ConnectionService } from '../api';\r\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\r\nimport { OptionsService } from './options.service';\r\nimport { PaginationService } from './pagination.service';\r\nimport { Filter, FilterFactory } from '../classes';\r\nimport { FiltersService } from './filters.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ProductsService {\r\n private _connection: ConnectionService = inject(ConnectionService);\r\n private _apiConsts: ApiConstantsService = inject(ApiConstantsService);\r\n private _optionsService: OptionsService = inject(OptionsService);\r\n private _paginationService: PaginationService = inject(PaginationService);\r\n private _consts: CoreConstantsService = inject(CoreConstantsService);\r\n\r\n private _productsSubject: BehaviorSubject<Product[]> = new BehaviorSubject<Product[]>([])\r\n public products$: Observable<Product[]> = this._productsSubject.asObservable();\r\n private _filtersService: FiltersService = inject(FiltersService)\r\n\r\n private searchValue = signal<string>('');\r\n\r\n constructor() {\r\n this._paginationService.reset$.subscribe(res => {\r\n this._productsSubject.next([])\r\n })\r\n this._paginationService.paginationData$.subscribe(\r\n products => {\r\n const productsWithUniqueVariant = this._consts.getProductWithUniqueVariant();\r\n if (productsWithUniqueVariant)\r\n products = this.getProductsWithUniqueVariant(products, this.getObjectWithVariant())\r\n const currentProducts = this._productsSubject.value;\r\n this._productsSubject.next([...currentProducts, ...products]);\r\n }\r\n )\r\n }\r\n\r\n //API URL\r\n private _shopApiUrl = this._apiConsts.SHOP_API_URL;\r\n productByCodeApi(code: string, variant: boolean) { return this._shopApiUrl + this._apiConsts.CHANNEL + '/products/by-code/' + (variant ? 'variant/' : '') + code + '?locale=' + this._apiConsts.LOCALE; }\r\n\r\n /**\r\n * Setea los filtros para obtener los productos.\r\n * @param paginationSettings \r\n * @param searchValue \r\n */\r\n getProductsForFilter(paginationSettings?: PaginationSettings, searchValue?: any): any {\r\n searchValue ? this.searchValue.set(searchValue) : this.searchValue.set('');\r\n paginationSettings && this._filtersService.setFilters(paginationSettings)\r\n }\r\n /**\r\n * Actualiza los productos con los de la siguiente pagina.\r\n */\r\n updateProducts() {\r\n if (!this._paginationService.getWaiting()) {\r\n this._paginationService.getNext()\r\n }\r\n }\r\n /**\r\n * Devuelve el producto por codigo.\r\n * @param code Codigo del producto\r\n * @param variant Para indicar si es variante o no.\r\n * @returns \r\n */\r\n getProductByCode(code: string, variant: boolean): Observable<Product> {\r\n return this._connection.get(this.productByCodeApi(code, variant));\r\n }\r\n\r\n /**\r\n * 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 * @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 getProductsWithUniqueVariant = (products: Product[], 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: any[] = [];\r\n products.forEach((product: any) => {\r\n let variants = [...product?.variants];\r\n let option = product.options.find((opt: any) => opt.type.toLowerCase() === withOption.type?.toLowerCase());\r\n if (option) {\r\n option.values.forEach((optionValue: any) => {\r\n let modified_product = JSON.parse(JSON.stringify(product));\r\n modified_product.options.find((option: any) => 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: any) => (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 //console.log(\"---\",variantAux);\r\n variantAux && productsUniqueVariant.push(this.productWithVariantValues(modified_product, variantAux, optionValue));\r\n })\r\n } else {\r\n /**\r\n * se modifica el caso para cuando se toma el primer `option` del producto para\r\n * armar la lista de productos con variantes.\r\n */\r\n if (withOption.defaultFirstOption && product.options?.length) {\r\n let firstOptions = product.options[0]\r\n product.options[0].values.forEach((optionValue: any) => {\r\n\r\n let modified_product = JSON.parse(JSON.stringify(product));\r\n modified_product.options.find((option: Options) => option.type == firstOptions.type).values = [{ code: optionValue.code, name: optionValue.name }];\r\n\r\n let variantAux = variants.find(variant => {\r\n return variant.options.find((elem: any) => elem[firstOptions.code] == optionValue.code)\r\n })\r\n\r\n if (variantAux && variantAux.images.length == 0) {\r\n variantAux.images = product.picturesdefault\r\n }\r\n\r\n if (withOption.checkIfStock) {\r\n (variantAux && variantAux.stock > 0) ? productsUniqueVariant.push(this.productWithVariantValues(modified_product, variantAux, optionValue)) : null;\r\n } else {\r\n variantAux && productsUniqueVariant.push(this.productWithVariantValues(modified_product, variantAux, optionValue))\r\n }\r\n\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: Product, variant: any, optionValue: any) => {\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.price = variant.price.toString() || '0';\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 private getObjectWithVariant = (): ParamsProductsWithUniqueVariant => {\r\n return this._consts.getParamsProductsWithUniqueVariant()\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { Storage } from '../interfaces';\r\nimport { StorageMap, LocalStorage } from '@ngx-pwa/local-storage';\r\nimport { map, Observable } from 'rxjs';\r\n/**\r\n * Adapter usado para storagear los datos.\r\n * @class NgxLocalStorageService\r\n * @implements {Storage}\r\n */\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class NgxLocalStorageService implements Storage {\r\n\t/**\r\n\t * Servicio usado para guardar los datos en el localstorage.\r\n\t */\r\n\tprivate _storage: LocalStorage = inject(LocalStorage);\r\n\r\n\tconstructor() { }\r\n\r\n\tprivate getItemPromise(key: any): Promise<string | null> {\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tthis._storage.getItem(key).subscribe({\r\n\t\t\t\tnext: (data: any) => resolve(data),\r\n\t\t\t\terror: (err) => reject(err),\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Obtiene el item del Storage\r\n\t * @param key Clave para acceder al valor\r\n\t * @returns \r\n\t */\r\n\tgetItem(key: string): Observable<any> {\r\n\t\treturn this._storage.getItem(key);\r\n\t}\r\n\t/**\r\n\t * Guarda un dato en el storage.\r\n\t * @param key Clave que se asocia al valor\r\n\t * @param value Valor a guardar\r\n\t * @param metadata Opciones extra que puede necesitar el servicio.\r\n\t */\r\n\tsetItem(key: string, value: any, metadata: any = { path: '/' }) {\r\n\t\tthis._storage.setItem(key, value).subscribe(() => { });\r\n\t}\r\n\t/**\r\n\t * Remueve el item del storage.\r\n\t * @param key Clave del item del storage a eliminar.\r\n\t * @param metadata Opciones extra que puede necesitar el servicio.\r\n\t */\r\n\tremoveItem(key: string, metadata?: any): void {\r\n\t\tthis._storage.removeItem(key).subscribe(() => { });\r\n\t}\r\n\t/**\r\n\t * Limpia el Storage.\r\n\t */\r\n\tclear(): void {\r\n\t\tthis._storage.clear().subscribe(() => { });\r\n\t}\r\n\tkey(index: number): string | null {\r\n\t\tthrow new Error('Method not implemented.');\r\n\t}\r\n\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BalanceCustomer, CartItem, ICoupon, Product } from '../interfaces';\r\nimport { AuthService } from './auth.service';\r\nimport { ToastService } from './toast.service';\r\nimport { ConnectionService } from '../api';\r\nimport { ApiConstantsService, CoreConstantsService } from '../constants';\r\nimport { BehaviorSubject, combineLatest, firstValueFrom, map, Observable } from 'rxjs';\r\nimport { AnalyticsService } from './analytics';\r\nimport { LocalStorageService } from './local-storage.service';\r\nimport { ChannelService } from './channel.service';\r\nimport { NgxLocalStorageService } from './ngx-local-storage.service';\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CartService {\r\n\tprivate _authService: AuthService = inject(AuthService);\r\n\tprivate _toastService: ToastService = inject(ToastService);\r\n\tprivate _connection: ConnectionService = inject(ConnectionService);\r\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\r\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\r\n\tprivate _localStorage: LocalStorageService = inject(LocalStorageService);\r\n\tprivate _channelService: ChannelService = inject(ChannelService);\r\n\tprivate _consts: CoreConstantsService = inject(CoreConstantsService);\r\n\tprivate _storage: NgxLocalStorageService = inject(NgxLocalStorageService);\r\n\r\n\tprivate _cartSubject: BehaviorSubject<any> = new BehaviorSubject(null);\r\n\tprivate _promotionsSubject: BehaviorSubject<any> = new BehaviorSubject([]);\r\n\tprivate _couponSubject: BehaviorSubject<any> = new BehaviorSubject(null);\r\n\tprivate _cartItemsSubject: BehaviorSubject<CartItem[]> = new BehaviorSubject<CartItem[]>([])\r\n\tprivate _requestInProcess: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n\tprivate _balanceCustomerSubject: BehaviorSubject<BalanceCustomer> = new BehaviorSubject<BalanceCustomer>({\r\n allowAnyPaymentMethod: false,\r\n allowExceedBalance: false,\r\n creditAmount: 0,\r\n showMax: false,\r\n showPrice: false,\r\n remainingCredits: 0,\r\n });\r\n\r\n\tprivate readonly CART_KEY: string = 'cart';\r\n\tprivate readonly CART_TOKEN_KEY: string = 'cart_token';\r\n\r\n\tprivate _items: any[] = [];\r\n\tprivate _count: number = 0;\r\n\tpublic cartToken: string | null = '';\r\n\tpublic channelConfig: any = {};\r\n\tprivate _locale = \"\";\r\n\tpublic cartItems$ = this._cartItemsSubject.asObservable().pipe(map(items => this.switchPriceInCartItem(items)))\r\n\tpublic coupon$: Observable<any> = this._couponSubject.asObservable();\r\n\tpublic cart$: Observable<any> = this._cartSubject.asObservable();\r\n\tpublic loading$: Observable<boolean> = this._requestInProcess.asObservable();\r\n\tprivate _haveToUpdate = true;\r\n\r\n\t//API URL\r\n\tprivate _cartBaseUrl: string = `${this._apiConsts.SHOP_API_URL}${this._apiConsts.CHANNEL}/carts`;\r\n\r\n\tpublic updateItemQuantityApi(item_id: any) { return this._cartBaseUrl + '/' + this.cartToken + '/items/' + item_id + '?locale=' + this._apiConsts.LOCALE; }\r\n\tpublic addItemApi(): string { return this._cartBaseUrl + '/' + this.cartToken + '/items?locale=' + this._apiConsts.LOCALE }\r\n\tpublic cartItemsApi(): string { return this._cartBaseUrl + '?locale=' + this._apiConsts.LOCALE }\r\n\tpublic deleteItemApi(item_id: string) { return this._cartBaseUrl + '/' + this.cartToken + '/items/' + item_id + '?locale=' + this._apiConsts.LOCALE; }\r\n\tpublic couponApi() { return this._cartBaseUrl + '/' + this.cartToken + '/coupon' };\r\n\r\n\tconstructor() {\r\n\t\tthis._requestInProcess.next(true);\r\n\t\tthis.cartToken = this._localStorage.getItem(this.CART_TOKEN_KEY) || null;\r\n\t\tthis.initializeDataCart();\r\n\t\tthis._channelService.channel$.subscribe(res => this.channelConfig = res)\r\n\t}\r\n\t/**\r\n\t * Inicializa el carrito con los datos del local storage en caso de que existan o no.\r\n\t */\r\n\tprivate initializeDataCart() {\r\n\t\tcombineLatest([this._authService.loggedIn$, this._storage.getItem(this.CART_KEY)]).subscribe({\r\n\t\t\tnext: ([loggedIn, token]) => {\r\n\t\t\t\t//console.log(loggedIn, token);\r\n\t\t\t\tthis._items = token || [];\r\n\t\t\t\tthis.getCart()\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\t/**\r\n\t * Obtiene el carrito desde el backend y lo inicializa. \r\n\t * Si existe el cartToken y hay items en el carrito, envía el token como parámetro.\r\n\t */\r\n\tprivate getCart() {\r\n\t\t//console.warn(this._items, this._items.length, this.cartToken)\r\n\t\tfirstValueFrom(\r\n\t\t\tthis._connection.post(this.cartItemsApi(), ((this.cartToken && this._items.length >= 1) && { token: this.cartToken }))\r\n\t\t).then((res: any) => {\r\n\t\t\t//console.log(res)\t\r\n\t\t\tthis.initializeCart(res)\r\n\t\t})\r\n\t}\r\n\t/**\r\n\t * Configura el carrito con los parametros iniciales.\r\n\t * @param response \r\n\t * @returns \r\n\t */\r\n\tinitializeCart(response: any): any {\r\n\t\tthis.cartToken = response.tokenValue;\r\n\t\tthis._localStorage.setItem(this.CART_TOKEN_KEY, this.cartToken);\r\n\t\tthis._locale = response.locale;\r\n\r\n\t\tthis.updateCartObj(response, false);\r\n\t\tthis.updateCartItems(this.transformItems(response.items));\r\n\t\tthis._requestInProcess.next(false);\r\n\t\treturn true;\r\n\t}\r\n\t/**\r\n\t * Actualiza los items del carrito.\r\n\t * @param items \r\n\t */\r\n\tupdateCartItems(items: any[]) {\r\n\t\tthis._items = items;\r\n\t\tthis._count = items.length;\r\n\t\tthis._cartItemsSubject.next(this._items);\r\n\t\tthis.updateLocalCart();\r\n\t\tthis._requestInProcess.next(false);\r\n\t}\r\n\t/**\r\n\t * Agrega un producto al carrito con la cantidad deseada. \r\n\t * @param product Producto a agregar\r\n\t * @param quantity Cantidad \r\n\t * @param variantId Id de la variante\r\n\t * @returns \r\n\t */\r\n\taddToCart(product: Product, quantity: number, variantId: string) {\r\n\t\t//console.log(product);\r\n\t\tif (!this._authService.isAbleToBuy()) {\r\n\t\t\tthis._toastService.show('must-select-customer')\r\n\t\t\treturn\r\n\t\t}\r\n\t\tthis._requestInProcess.next(true);\r\n\t\tlet added = this.addIfAllreadyExists(product, variantId, quantity);\r\n\r\n\t\tif (!added) {\r\n\t\t\tfirstValueFrom(\r\n\t\t\t\tthis._connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variantId }))\r\n\t\t\t\t.then(\r\n\t\t\t\t\tres => {\r\n\t\t\t\t\t\t// Manejar la respuesta HTTP exitosa (código 200)\r\n\t\t\t\t\t\tthis.appendToCart(res);\r\n\t\t\t\t\t\tthis._toastService.show('product-added');\r\n\t\t\t\t\t},\r\n\t\t\t\t\terr => {\r\n\t\t\t\t\t\t// Manejar el error de la llamada HTTP (código 500 u otro error)\r\n\t\t\t\t\t\tif (err.status === 500) {\r\n\t\t\t\t\t\t\t// Código de error 500 (timeout)\r\n\t\t\t\t\t\t\tthis.handleError(err);\r\n\t\t\t\t\t\t\tthis._toastService.show('cart-error');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Otro código de error\r\n\t\t\t\t\t\t\tthis.handleError(err);\r\n\t\t\t\t\t\t\tthis._toastService.show('error-server');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Actualiza el carrito agregando los nuevos items.\r\n\t * @param cart \r\n\t */\r\n\tappendToCart(cart: any) {\r\n\t\tthis.updateCartObj(cart);\r\n\t\tthis._items = this.transformItems(cart.items);\r\n\t\tthis._count = this._items.length;\r\n\t\tthis._requestInProcess.next(false);\r\n\t\tthis.updateLocalCart();\r\n\t\tthis._cartItemsSubject.next(this._items);\r\n\t}\r\n\t/**\r\n\t * Mapea los items del carrito para darle un mejor formato similar a la interfaz `CartItem`.\r\n\t * @param items \r\n\t * @returns \r\n\t */\r\n\ttransformItems(items: any): any[] {\r\n\t\treturn items.map((item: any) => {\r\n\t\t\treturn {\r\n\t\t\t\tproduct: item.product,\r\n\t\t\t\tvariant_id: item.product.variants[0].code,\r\n\t\t\t\tlot: item.orderItemLot,\r\n\t\t\t\tquantity: item.quantity,\r\n\t\t\t\titem_id: item.id,\r\n\t\t\t\ttotal: item.total\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t/**\r\n\t * Chequea si el producto ya existe en el carrito de compras.\r\n\t * @param product \r\n\t * @param variantId \r\n\t * @param quantityAdd Cantidad a agregar. Por defecto es 1.\r\n\t */\r\n\taddIfAllreadyExists(product: Product, variantId: string, quantityAdd: number = 1) {\r\n\t\treturn this._items.find((item: any, index) => {\r\n\t\t\tif (item.product.id == product.id && item.variant_id == variantId) {\r\n\t\t\t\tthis.updateItemQuantity(item, this.findItem(product.id).quantity + quantityAdd);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t})\r\n\t}\r\n\t/**\r\n\t * Obtiene la cantidad de un producto del item del carrito \r\n\t * @param codeVariant codigo de la variante.\r\n\t * @returns la cantidad o `0` en su defecto.\r\n\t */\r\n\tgetCountFromItemInCart(codeVariant: any): number {\r\n\t\treturn this._items.find(item => item.variant_id == codeVariant)?.quantity || 0;\r\n\t}\r\n\t/**\r\n\t * Obtiene un observable con la cantidad de items en el carrito.\r\n\t */\r\n\tgetCountCartItems(): Observable<number> {\r\n\t\treturn this.cartItems$.pipe(map((cartItems) => cartItems?.length));\r\n\t}\r\n\t/**\r\n\t * Mapea los productos en el carrito para cambiar el precio obteniendo de la variante y seleccionando si es\r\n\t * precio de oferta o el precio normal.\r\n\t * @param items \r\n\t * @returns \r\n\t */\r\n\tprivate switchPriceInCartItem = (items: any[]) => {\r\n\t\treturn items.map(\r\n\t\t\titem => {\r\n\t\t\t\tif (item.product) {\r\n\t\t\t\t\titem.product.price = item.product.variants[0].saleprice ? item.product.variants[0].saleprice : item.product.variants[0].price;\r\n\t\t\t\t}\r\n\t\t\t\treturn item\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n\t/**\r\n\t * Actualiza la cantidad de un producto existente en el carrito.\r\n\t * @param item el item a actualizar.\r\n\t * @param quantity la cantidad nueva.\r\n\t */\r\n\tupdateItemQuantity(item: CartItem, quantity: number) {\r\n\t\tif (this.validateQuantity(item, quantity)) {\r\n\t\t\tfirstValueFrom(\r\n\t\t\t\tthis._connection.put(this.updateItemQuantityApi(this.findItemByIdVariant(item.variant_id)), { 'quantity': Number(quantity) })).then(\r\n\t\t\t\t\tres => this.updateCartObj(res) && this.updateCartItemQuantity(item.variant_id, Number(quantity)),\r\n\t\t\t\t\terr => this.handleError(err)\r\n\t\t\t\t)\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Maneja el error en caso de que no se pueda agregar al carrito el producto.\r\n\t * @param err \r\n\t */\r\n\thandleError(err: any): void {\r\n\t\tthis._toastService.show('operation-error-param');\r\n\t\tthis._requestInProcess.next(false);\r\n\t}\r\n\t/**\r\n\t * Actualiza la cantidad del item del producto del carrito.\r\n\t * @param variantId ID de la variante para buscar el item.\r\n\t * @param quantity Nueva cantidad. \r\n\t */\r\n\tupdateCartItemQuantity(variantId: any, quantity: number): void {\r\n\t\t//console.log(\"updateCartItemQuantity\", this._items, variantId)\r\n\t\tlet newQuantity = this._items.find(item => item.variant_id == variantId).quantity = quantity;\r\n\t\tthis._cartItemsSubject.next(this._items);\r\n\t\tthis._requestInProcess.next(false);\r\n\t\tthis.updateLocalCart();\r\n\t\tthis._toastService.show('product-updated', { quantity: newQuantity });\r\n\t}\r\n\t/**\r\n\t * Actualiza los datos del carrito en el localStorage. \r\n\t */\r\n\tupdateLocalCart() {\r\n\t\tthis._storage.setItem(this.CART_KEY, this._items)\r\n\t}\r\n\t/**\r\n\t * Actualiza el carrito. Emite evento de analitics. \r\n\t * Actualiza todo lo relacionado al cupón.\r\n\t * @param cart Respuesta producida por el enpoint con información del carrito.\r\n\t * @param emitEvent \r\n\t * @returns \r\n\t */\r\n\tupdateCartObj(cart: any, emitEvent = true): boolean {\r\n\t\tthis._cartSubject.next(cart);\r\n\t\temitEvent && this._analyticsService.callEvent('add_to_cart', cart);\r\n\t\t//this._promotionsSubject.next(this.orderUtils.getPromotions(cart, true));\r\n\r\n\t\tcart.couponCode\r\n\t\t\t? this.formatCoupon(cart)\r\n\t\t\t: this._couponSubject.next(null);\r\n\t\treturn true;\r\n\t}\r\n\t/**\r\n\t * Aplicar un mejor formato a los datos de los cupones aplicados.\r\n\t * @param cart \r\n\t */\r\n\tformatCoupon(cart: any) {\r\n\t\tlet current_coupon = this._couponSubject.value;\r\n\t\tlet coupon: ICoupon = { code: cart.couponCode };\r\n\t\ttry {\r\n\t\t\tconst key = Object.keys(cart.cartDiscounts)[0];\r\n\t\t\tcoupon = {\r\n\t\t\t\t...coupon,\r\n\t\t\t\tamount: (cart.cartDiscounts && cart.cartDiscounts[key].amount.current) || 0,\r\n\t\t\t\tname: (cart.cartDiscounts && cart.cartDiscounts[key].name) || 'no-name'\r\n\t\t\t};\r\n\t\t} catch (e) { }\r\n\t\t(coupon != current_coupon) && this._couponSubject.next(coupon);\r\n\t\t//console.log(coupon);\r\n\t}\r\n\t/**\r\n\t * Retorna el ID del item del carrito.\r\n\t * @param variant_id Id de la variante utilizada para buscar el item.\r\n\t * @returns \r\n\t */\r\n\tfindItemByIdVariant(variant_id: any): any {\r\n\t\treturn this._items.find(item => item.variant_id == variant_id)!.item_id\r\n\t}\r\n\t/**\r\n\t * Valida la cantidad para saber si se puede actualizar o no.\r\n\t * @param item item del carrito\r\n\t * @param quantity cantidad a agregar\r\n\t * @returns \r\n\t */\r\n\tvalidateQuantity(item: any, quantity: any) {\r\n\t\tif ((this.getCountFromItemInCart(item.productCode) + quantity) > item.product.variants[0].maximumItemsQuantity) {\r\n\t\t\tthis._toastService.show('maximum-items-quantity', { quantity: item.product.variants[0].maximumItemsQuantity })\r\n\t\t\treturn false\r\n\t\t}\r\n\t\tif ((this.getCountFromItemInCart(item.productCode) + quantity) < item.product.variants[0].minimumItemsQuantity) {\r\n\t\t\tthis._toastService.show('minimum-items-quantity', { quantity: item.product.variants[0].minimumItemsQuantity })\r\n\t\t\treturn false\r\n\t\t}\r\n\t\treturn true\r\n\t}\r\n\t/**\r\n\t * Busca un producto a través de su ID en los items del carrito.\r\n\t * @param product_id \r\n\t * @returns\r\n\t */\r\n\tfindItem(product_id: any): any { return this._items.find((item: any) => item.product.id == product_id) }\r\n\t/**\r\n\t * Elimina un item del carrito en el backend.\r\n\t * @param item item a eliminar\r\n\t * @param toast indica si se dispara un toast o no. Por defecto en `true`.\r\n\t */\r\n\tdeleteCartItem(item: any, toast: boolean = true) {\r\n\t\tlet idItemSearched = this.findItemByIdVariant(item.variant_id)\r\n\t\t//console.log(idItemSearched)\r\n\t\tthis._requestInProcess.next(true);\r\n\t\tfirstValueFrom(this._connection.delete(this.deleteItemApi(idItemSearched))).then(\r\n\t\t\tres => {\r\n\t\t\t\tthis.removeCartItem(res, item, toast);\r\n\t\t\t\tthis._requestInProcess.next(false);\r\n\t\t\t},\r\n\t\t\terr => {\r\n\t\t\t\tthis.handleError(err);\r\n\t\t\t\tthis._requestInProcess.next(false);\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n\t/**\r\n\t * Elimina un item en carrito de forma local. \r\n\t * @param cart Carrito, es decir, respuesta del backend.\r\n\t * @param product producto a eliminar\r\n\t * @param toast {boolean} para indicar si se dispara un toast o no. \r\n\t */\r\n\tremoveCartItem(cart: any, product: any, toast: boolean) {\r\n\t\tthis.updateCartObj(cart, false);\r\n\t\tthis._items.splice(this._items.findIndex(value => value.item_id === product.item_id), 1);\r\n\t\tthis._cartItemsSubject.next(this._items);\r\n\t\ttoast && this._requestInProcess.next(false);\r\n\t\ttoast && this._toastService.show('product-removed');\r\n\t\tthis.updateLocalCart();\r\n\t\tthis._analyticsService.callEvent('remove_from_cart', { ...product, currency: this._consts.currency.code })\r\n\t}\r\n\t/**\r\n\t * Agrega un cupon al carrito.\r\n\t * @param value Codigo del cupón.\r\n\t */\r\n\taddCoupon(value: string) {\r\n\t\tfirstValueFrom(this._connection.put(this.couponApi(), { coupon: value })).then(\r\n\t\t\tres => {\r\n\t\t\t\t//console.log(res)\r\n\t\t\t\tthis.updateCartObj(res)\r\n\t\t\t\tthis._toastService.show('Cupon aplicado')\r\n\t\t\t},\r\n\t\t\terr => {\r\n\t\t\t\t//console.error(err) \r\n\t\t\t\tthis._toastService.show('invalid-coupon')\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n\t/**\r\n\t * Elimina un cupón del carrito. \r\n\t */\r\n\tremoveCoupon() {\r\n\t\tfirstValueFrom(this._connection.delete(this.couponApi())).then(\r\n\t\t\tres => {\r\n\t\t\t\t//console.log(res)\r\n\t\t\t\tthis.updateCartObj(res)\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n\t/**\r\n\t * Retorna un observable con el subtotal del carrito.\r\n\t * @returns \r\n\t */\r\n\tgetSubTotalAmount(): Observable<number> {\r\n\t\treturn this.cart$.pipe(map((cart) => cart?.totals?.items));\r\n\t}\r\n\t/**\r\n\t * Retorna un observable con el total del monto de las promociones aplicadas.\r\n\t * @returns \r\n\t */\r\n\tgetTotalPromotionAmount(): Observable<number> {\r\n\t\treturn this.cart$.pipe(map((cart) => cart?.totals?.promotion));\r\n\t}\r\n\t/**\r\n\t * Retorna un observable con el monto de los impuestos aplicados.\r\n\t * @returns \r\n\t */\r\n\tgetTaxesAmount(): Observable<number> {\r\n\t\treturn this.cart$.pipe(map((cart) => cart?.totals?.taxes > 0 ? cart?.totals?.taxes : 0));\r\n\t}\r\n\t/**\r\n\t * Retorna un observable con el monto total del carrito.\r\n\t * @returns \r\n\t */\r\n\tgetTotalAmount() {\r\n\t\treturn this.cart$.pipe(map((cart) => cart?.totals?.total));\r\n\t}\r\n\t/**\r\n\t * Retorna el token del carrito.\r\n\t * @returns \r\n\t */\r\n\tgetCartToken() {\r\n\t\treturn this.cartToken;\r\n\t}\r\n\tchangeHaveToUpdate = (value: any) => this._haveToUpdate = value;\r\n\tclearAndResetCustomerCart() {\r\n\t\tconsole.log(\"Clearing and reseting...\")\r\n\t\tthis.resetCart(this.getCartByCustomer)\r\n\t}\r\n\r\n\tprivate getCartByCustomer = async () =>\r\n\t\tthis._connection.post(this.cartItemsApi()).subscribe(\r\n\t\t\tres => this.initializeCart(res)\r\n\t\t)\r\n\tprivate resetCart = (fn?: any) => {\r\n\t\tthis._items = [];\r\n\t\tthis._cartSubject.next(null);\r\n\t\tthis.updateBalanceAttributes(null);\r\n\t\tthis.cartToken = null;\r\n\t\tthis._cartItemsSubject.next([]);\r\n\t\tthis._count = 0;\r\n\t\tthis._localStorage.setItem(this.CART_KEY, \"[]\");\r\n\t\tthis._localStorage.removeItem(this.CART_TOKEN_KEY);\r\n\t\tfn && fn();\r\n\t}\r\n\tclearAndResetCart() {\r\n this.resetCart(() => this.getCart);\r\n }\r\n\r\n\tpublic updateBalanceAttributes(cartData: any) {\r\n const balanceData = {\r\n allowAnyPaymentMethod: cartData?.allowAnyPaymentMethod ?? false,\r\n allowExceedBalance: cartData?.allowExceedBalance ?? false,\r\n creditAmount: cartData?.creditAmount ?? null,\r\n showMax: cartData?.showMax ?? false,\r\n showPrice: cartData?.showPrice ?? false,\r\n remainingCredits: cartData?.creditAmount && cartData?.creditAmount >= cartData?.totals.total\r\n ? cartData?.creditAmount - cartData?.totals.total\r\n : 0,\r\n };\r\n\r\n this._balanceCustomerSubject.next(balanceData);\r\n\t\tconsole.log(balanceData)\r\n }\r\n\taddToLot(product: Product, quantity: number, variant_id: any, id?: number, order_item_id?: any, lot_quantity?: any, unit_price?: any, unit_total?: any, ajustement_total?: any, total_lot?: number, lot_status?: string, date_request?: string, notes?: string, shipping_address_id?: number, shipping_address_name?: string, action?: string){\r\n if (!this._authService.isAbleToBuy()) {\r\n this._toastService.show('must-select-customer')\r\n return\r\n }\r\n\r\n let added = '';\r\n !added && this._connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variant_id, id: id || '', order_item_id: order_item_id || '', lot_quantity: lot_quantity || '', unit_price: unit_price || '', unit_total: unit_total || '', ajustement_total: ajustement_total || '', total_lot: total_lot || '', lot_status: lot_status || '', date_request: date_request || '', notes: notes || '', shipping_address_id: shipping_address_id || '', shipping_address_name: shipping_address_name || '', action: action || 'newlot' })\r\n .subscribe({\r\n\t\t\t\tnext: (res) => this.appendToCart(res),\r\n\t\t\t\terror: (err) => this.handleError(err)\r\n\t\t\t});\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ProductsService } from './products.service';\r\nimport { BehaviorSubject, firstValueFrom } from 'rxjs';\r\nimport { Options, OptionValue, Product } from '../interfaces';\r\nimport { ToastService } from './toast.service';\r\nimport { CartService } from './cart.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class ProductDetailService {\r\n\tprivate _productsService: ProductsService = inject(ProductsService);\r\n\tprivate _toastService: ToastService = inject(ToastService);\r\n\tprivate _cartService: CartService = inject(CartService);\r\n\r\n\tprivate _productSubject = new BehaviorSubject<Product | null>({});\r\n\tprivate _optionsSubject = new BehaviorSubject<any>({});\r\n\tprivate _associatedDataSubject = new BehaviorSubject<any>({ price: '', stock: 0, picture: '' });\r\n\r\n\tpublic product$ = this._productSubject.asObservable();\r\n\tpublic options$ = this._optionsSubject.asObservable();\r\n\tpublic associatedData$ = this._associatedDataSubject.asObservable();\r\n\r\n\tprivate variants: any[] = []\r\n\r\n\tconstructor() { }\r\n\t/**\r\n\t * Obtengo el producto a traves de su codigo e inicializo la configuración\r\n\t * del Servicio.\r\n\t * @param code \r\n\t * @param variant \r\n\t */\r\n\tloadProduct(code: string, variant: boolean = false) {\r\n\t\tfirstValueFrom(this._productsService.getProductByCode(code, variant))\r\n\t\t\t.then(res => {\r\n\t\t\t\tvariant ? this.initialize(res, code) : this.initialize(res)\r\n\t\t\t})\r\n\t\t\t.catch(err => { console.log(err); this._productSubject.next(null) });\r\n\t}\r\n\t/**\r\n\t * Carga el producto en el observable y la configuración de las variantes.\r\n\t * @param product \r\n\t * @param variantCode \r\n\t */\r\n\tprivate initialize(product: Product, variantCode?: string) {\r\n\t\tthis._productSubject.next(product);\r\n\t\tconst aux: Product['options'] = product.options || [];\r\n\t\tconst options = aux?.map(option => this.toOption(option))\r\n\t\tthis._optionsSubject.next(options);\r\n\t\tvariantCode ? this.updateVariants(variantCode) : this.updateVariants();\r\n\t\tthis.variants.length && this.generateAssociatedDataFromVariants();\r\n\t}\r\n\t/**\r\n\t * Formate los datos para las opciones del producto.\r\n\t * @param option \r\n\t * @returns \r\n\t */\r\n\tprivate toOption(option: Options) {\r\n\t\treturn {\r\n\t\t\tname: option.label,\r\n\t\t\tcode: option.code,\r\n\t\t\ttype: option.type,\r\n\t\t\tvalues: option.values.map((value: any) => ({ name: value.code, description: value.name, image: value.image, mobileImage: value.mobileImage, selected: false }))\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Cambia las opciones, obtiene el producto asociado a la opcion elegida.\r\n\t */\r\n\tsetOption(optionCode: any, optionValue: any) {\r\n\t\tconst options = this._optionsSubject.value;\r\n\t\tconst option = options.find((element: any) => element.code == optionCode).values.find((value: any) => value.name == optionValue);\r\n\t\toption.selected = !option.selected;\r\n\t\toptions.find((element: any) => element.code == optionCode).values.forEach(\r\n\t\t\t(value: any) => { if (value.name != option.name) value.selected = false }\r\n\t\t);\r\n\t\tthis._optionsSubject.next(options);\r\n\t\tthis.updateVariants();\r\n\t\tthis.variants.length > 0 ? this.generateAssociatedDataFromVariants() : this._toastService.show('selection-not-available')\r\n\t}\r\n\t/**\r\n\t * Actualiza el observable de `associatedData` el cual se utiliza para mostrar los datos\r\n\t * en el frontend segun el producto y/o variante elegida.\r\n\t * Obtiene los datos de la variante y los formatea.\r\n\t */\r\n\tgenerateAssociatedDataFromVariants() {\r\n\t\tlet associated: any = {};\r\n\t\tif (this.variants.length == 1) {\r\n\t\t\tconst variant = this.variants[0];\r\n\t\t\tconsole.log(variant)\r\n\t\t\tassociated.stock = variant.stock\r\n\t\t\tassociated.price = variant.price.toString();\r\n\t\t\tassociated.saleprice = variant.saleprice && variant.saleprice.toString() || undefined;\r\n\t\t\tassociated.discount = variant?.discount || undefined;\r\n\t\t\tassociated.properties = variant.properties ? this.beautifyProperties(variant.properties) : undefined;\r\n\t\t\tassociated.uniqueExternalCode = variant?.uniqueExternalCode || undefined;\r\n\t\t\tassociated.multipleQuantity = variant?.multipleQuantity || undefined;\r\n\t\t} else {\r\n\t\t\tassociated.price = this.createPrice()\r\n\t\t\tassociated.saleprice = this.createSalePrice()\r\n\t\t\tassociated.stock = (this.variants.map(variant => variant.stock)).reduce((a, b) => a + b)\r\n\t\t\tassociated.discount = this.createDiscount()\r\n\t\t}\r\n\r\n\t\t('images' in this.variants[0] && this.variants[0].images.length > 0)\r\n\t\t\t? associated.picture = this.variants[0].images[0]\r\n\t\t\t: associated.picture = (this._associatedDataSubject.value?.picture || (this._productSubject.value && this._productSubject.value?.picturesdefault?.[0] || []));\r\n\r\n\t\tassociated.maximumAmount = this.variants[0]?.maximumAmount || 0\r\n\t\tassociated.minimumAmount = this.variants[0]?.minimumAmount || 0\r\n\r\n\t\tassociated.maximumItemsQuantity = this.variants[0]?.stock > 0 && 'maximumItemsQuantity' in this.variants[0] ? this.variants[0]?.maximumItemsQuantity : this.variants[0]?.stock\r\n\t\tassociated.minimumItemsQuantity = this.variants[0]?.stock > 0 && 'minimumItemsQuantity' in this.variants[0]\r\n\t\t\t&& this.variants[0]?.minimumItemsQuantity > 0 ? this.variants[0]?.minimumItemsQuantity\r\n\t\t\t: (this.variants[0]?.multipleQuantity ? this.variants[0]?.multipleQuantity : 1)\r\n\r\n\t\tassociated.finalConsumer = {\r\n\t\t\tfinalConsumerPrice: this.variants[0]?.final_consumer_price,\r\n\t\t\toriginalFinalConsumerPrice: this.variants[0]?.original_final_consumer_price,\r\n\t\t}\r\n\t\tassociated.taxes = {\r\n\t\t\ttaxIncluded: this.variants[0]?.taxIncluded,\r\n\t\t\ttaxCategory: this.variants[0]?.taxCategory,\r\n\t\t}\r\n\t\t//console.log(associated)\r\n\t\tthis._associatedDataSubject.next(associated);\r\n\t}\r\n\t/**\r\n\t * Mejora los datos de las `properties`.\r\n\t * @param properties \r\n\t * @returns \r\n\t */\r\n\tbeautifyProperties(properties: any): any {\r\n\t\tlet beautifyData: any = [];\r\n\t\tproperties.forEach((prop: any) => {\r\n\t\t\tfor (let key in prop) {\r\n\t\t\t\tbeautifyData.push({ name: key, value: prop[key] })\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn beautifyData\r\n\t}\r\n\t/**\r\n\t * Devuelve un descuento en caso de existir.\r\n\t * @returns \r\n\t */\r\n\tcreateDiscount(): any {\r\n\t\tlet allDiscounts: string = '';\r\n\t\tthis.variants.forEach(variant => {\r\n\t\t\tvariant.discount && (allDiscounts += ', ' + variant.discount);\r\n\t\t})\r\n\t\tif (allDiscounts == '') return undefined;\r\n\t\treturn allDiscounts;\r\n\t}\r\n\t/**\r\n\t * Devuelve el precio de venta.\r\n\t * @returns \r\n\t */\r\n\tcreateSalePrice(): any {\r\n\t\tlet minPrice: number = 0;\r\n\t\tlet maxPrice: number = 0;\r\n\t\tlet allPrices: any = this.variants.map(v => v.saleprice).filter(e => e !== undefined);\r\n\t\tif (allPrices.length == 0) {\r\n\t\t\treturn undefined\r\n\t\t}\r\n\t\tminPrice = allPrices.reduce((a: number, b: number) => Math.min(a, b));\r\n\t\tmaxPrice = allPrices.reduce((a: number, b: number) => Math.max(a, b));\r\n\t\treturn minPrice == maxPrice ? maxPrice.toString() : minPrice + ' - ' + maxPrice;\r\n\t}\r\n\t/**\r\n\t * Devuelve el precio o los precios en caso de tener varias variantes con distintos precios.\r\n\t * @returns \r\n\t */\r\n\tcreatePrice(): any {\r\n\t\tlet minPrice: number = 0;\r\n\t\tlet maxPrice: number = 0;\r\n\t\tlet allPrice: any = this.variants.map(v => v.price)\r\n\t\tminPrice = allPrice.reduce((a: number, b: number) => Math.min(a, b));\r\n\t\tmaxPrice = allPrice.reduce((a: number, b: number) => Math.max(a, b));\r\n\t\treturn minPrice == maxPrice ? maxPrice.toString() : minPrice + ' - ' + maxPrice;\r\n\t}\r\n\t/**\r\n\t * Actualiza las variantes.\r\n\t * @param code \r\n\t */\r\n\tupdateVariants = (code?: string) => {\r\n\t\tlet variants = this._productSubject.value?.variants\r\n\t\t//console.log(variants)\r\n\t\tif (!code) {\r\n\t\t\tthis._optionsSubject.value.forEach((option: any) => {\r\n\t\t\t\toption.values.forEach((value: any) => {\r\n\t\t\t\t\tif (value.selected) {\r\n\t\t\t\t\t\tvariants = variants?.filter(variant => {\r\n\t\t\t\t\t\t\treturn variant.options.some((variantOption: any) => {\r\n\t\t\t\t\t\t\t\treturn (option.code in variantOption && variantOption[option.code] == value.name);\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tvariants = variants?.filter(variant => variant.code == code);\r\n\t\t}\r\n\t\tthis.variants = variants || [];\r\n\t\tcode && this.updateOptions();\r\n\t}\r\n\t/**\r\n\t * Actualiza las opciones\r\n\t */\r\n\tprivate updateOptions = () => {\r\n\t\tlet { options } = this.variants.length && this.variants[0];\r\n\t\toptions && options.forEach((option: any) => Object.keys(option).forEach(key => this.setOption(key, option[key])))\r\n\t}\r\n\t/**\r\n\t * Agrega el producto al carrito.\r\n\t * @param quantity Cantidad del producto a agregar\r\n\t * @param variantCode Codigo de la variante.\r\n\t * @returns \r\n\t */\r\n\taddToCart(quantity: number, variantCode?: string){\r\n\r\n\t\tif(!this.variants.length){\r\n\t\t\tthis._toastService.show('cant-buy')\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet productSelected = JSON.parse(JSON.stringify((this._productSubject.getValue())));\r\n\r\n\t\tlet variant:any;\r\n\r\n\t\tswitch(this.variants.length){\r\n\t\t\tcase 0:\r\n\t\t\t\tthis._toastService.show('no-variants');\r\n\t\t\t\tbreak;\r\n\t\t\tcase 1:\r\n\t\t\t\tthis._associatedDataSubject.value.stock == 0\r\n\t\t\t\t\t? this._toastService.show('out-of-stock')\r\n\t\t\t\t\t: variant = this.variants[0]\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tif(variantCode){\r\n\t\t\t\t\tvariant = this.variants.find( variant => variant.code === variantCode)\r\n\t\t\t\t\tif(variant.stock == 0){\r\n\t\t\t\t\t\tthis._toastService.show('out-of-stock')\r\n\t\t\t\t\t\tvariant = undefined\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._toastService.show('variants-left')\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif(!variant) return;\r\n\t\tif(!this.validateQuantity(quantity)) return;\r\n\r\n\t\t//agregar al servicio del carrito\r\n\t\tthis._cartService.addToCart(this.makeAffordableProduct(productSelected), quantity, variant.code);\r\n\t}\r\n\t/**\r\n\t * Genera un producto para hacer mas facíl el envio del elemento al backend.\r\n\t * @param productSelected \r\n\t * @returns \r\n\t */\r\n\tprivate makeAffordableProduct(productSelected: Product) {\r\n productSelected.price = parseFloat(this._associatedDataSubject.value.price);\r\n productSelected.saleprice = parseFloat(this._associatedDataSubject.value.price);\r\n\t\tproductSelected.options = [];\r\n this.variants[0].options.forEach((option:any) => productSelected.options = { ...productSelected.options, ...option })\r\n return productSelected;\r\n }\r\n\t/**\r\n\t * Valida la cantidad que se quiere agregar de un producto.\r\n\t * Revisa que no supere el stock, el maximo de items que se puede agregar\r\n\t * asi como el minimo.\r\n\t * @param quantity \r\n\t * @returns \r\n\t */\r\n\tprivate validateQuantity = (quantity: number) => {\r\n const actualQuantity = this._cartService.getCountFromItemInCart(this.variants[0].code);\r\n const asociatedData = this._associatedDataSubject.value;\r\n if ((actualQuantity + quantity) > asociatedData.maximumItemsQuantity) {\r\n this._toastService.show('maximum-items-quantity', { quantity: asociatedData.maximumItemsQuantity })\r\n return false;\r\n }\r\n if ((actualQuantity + quantity) < asociatedData.minimumItemsQuantity) {\r\n this._toastService.show('minimum-items-quantity', { quantity: asociatedData.minimumItemsQuantity })\r\n return false;\r\n }\r\n return true\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CheckoutData, CheckoutDataType } from '../interfaces';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class OrderUtilityService {\r\n\r\n\tconstructor() { }\r\n\t/**\r\n\t * @param cart Objeto carrito o orden, indistintamente, ya que poseen el mismo formato\r\n\t * @param forCart Si la solicitud de promociones proviene del carrito, suprime el subtotal y el total\r\n\t * @description Devuelve un listado con todas las promociones que posee el carro/orden\r\n\t */\r\n\tgetPromotions = (cart: any, forCart: boolean = false): CheckoutData[] | undefined => {\r\n\t\tif (cart.checkoutState && cart.checkoutState == \"completed\") return;\r\n\t\tlet new_state: CheckoutData[] = [];\r\n\t\tlet subtotal: CheckoutData = { type: 'subtotal', name: 'subtotal', amount: cart.totals.items };\r\n\t\tlet total: CheckoutData = { type: 'total', name: 'total', amount: cart.totals.total };\r\n\t\t!forCart && new_state.push(subtotal);\r\n\t\t\r\n\t\tfor (let index = 0; index < cart.cartDiscounts.length; index++) {\r\n\t\t\tcart.cartDiscounts[index].type = this.formatType(cart.cartDiscounts[index].type);\r\n\t\t\tnew_state.push({\r\n\t\t\t\ttype: cart.cartDiscounts[index].type,\r\n\t\t\t\tname: (cart.cartDiscounts[index].type != 'coupon') ? cart.cartDiscounts[index].name : 'coupon',\r\n\t\t\t\tamount: this.getAmount(cart.cartDiscounts[index], cart)\r\n\t\t\t});\r\n\r\n\t\t}\r\n\r\n\t\t!forCart && new_state.push(total);\r\n\t\treturn new_state;\r\n\t}\r\n\r\n\tgetAmount(discount:any, cart:any): number{\r\n\t\tif (discount.type != 'shipment') return discount.amount;\r\n\t\treturn cart.totals.shipping;\r\n\t}\r\n\r\n\tformatType(type: string): CheckoutDataType | string{\r\n\t\tlet result;\r\n\t\tswitch (type) {\r\n\t\t\tcase 'order_promotion': result = 'discount'; break;\r\n\t\t\tcase 'order_shipping_promotion': result = 'shipment'; break;\r\n\t\t\tcase 'order_coupon_promotion': result = 'coupon'; break;\r\n\t\t\tcase 'order_unit_promotion': result = 'discount'; break;\r\n\t\t}\r\n\t\t!result && (result = type.includes('promotion') || type.includes('discount') ? 'discount' : type)\r\n\t\treturn result || type;\r\n\t}\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, firstValueFrom, Observable, ReplaySubject } from 'rxjs';\r\nimport { CartService } from './cart.service';\r\nimport { CheckoutData, IStep, StepType } from '../interfaces';\r\nimport { ConnectionService } from '../api';\r\nimport { AnalyticsService } from './analytics';\r\nimport { ApiConstantsService } from '../constants';\r\nimport { Step, User } from '../classes';\r\nimport { AuthService } from './auth.service';\r\nimport { OrderUtilityService } from './order-utility.service';\r\nimport { Router } from '@angular/router';\r\nimport { ToastService } from './toast.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class CheckoutService {\r\n\r\n\tprivate _cartService: CartService = inject(CartService);\r\n\tprivate _connection: ConnectionService = inject(ConnectionService);\r\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\r\n\tprivate _consts: ApiConstantsService = inject(ApiConstantsService);\r\n\tprivate _authService: AuthService = inject(AuthService);\r\n\tprivate _orderUtilityService: OrderUtilityService = inject(OrderUtilityService);\r\n\tprivate _router: Router = inject(Router);\r\n\tprivate _toastService: ToastService = inject(ToastService);\r\n\r\n\tprivate _canCheckoutSubject = new ReplaySubject<boolean>();\r\n\tprivate _stateSubject = new BehaviorSubject<Step[]>([])\r\n\tprivate _lastStepSubject = new BehaviorSubject<boolean>(false);\r\n\tprivate _loadingSubject = new BehaviorSubject<boolean>(false);\r\n\tprivate _orderSubject = new BehaviorSubject<any>(null);\r\n\tprivate _associatedDataSubject = new BehaviorSubject<CheckoutData[] | null>(null);\r\n\tprivate _loadingStepSubject = new BehaviorSubject<boolean>(false);\r\n\r\n\tpublic canCheckout$: Observable<boolean> = this._canCheckoutSubject.asObservable();\r\n\tpublic state$: Observable<any> = this._stateSubject.asObservable();\r\n\tpublic isLastStep$: Observable<boolean> = this._lastStepSubject.asObservable();\r\n\tpublic associatedData$: Observable<any> = this._associatedDataSubject.asObservable();\r\n\tpublic order$: Observable<any> = this._orderSubject.asObservable();\r\n\tpublic loadingStep$:Observable<boolean> = this._loadingStepSubject.asObservable();\r\n\r\n\tpublic total: any;\r\n\tprivate cartLocal: any;\r\n\tprivate checkoutData: any = {};\r\n\tprivate order: any;\r\n\r\n\t//API Methods\r\n\tbaseApi = () => 'shop-api/' + this._consts.CHANNEL + '/checkout/' + this._cartService.getCartToken();\r\n\tgetHasPurchaseConditions() { return 'shop-api/' + this._consts.CHANNEL + '/carts/' + this._cartService.getCartToken() + '/has_purchase_conditions' };\r\n\tcompleteApi() { return this.baseApi() + '/complete' };\r\n\r\n\r\n\tconstructor() {\r\n\t\tcombineLatest([this._cartService.cartItems$, this._cartService.loading$]).subscribe(([items, loading]) => {\r\n\t\t\tif (!loading && items.length > 0) {\r\n\t\t\t\tthis._canCheckoutSubject.next(true);\r\n\t\t\t\tthis._cartService.getTotalAmount().subscribe((res: any) => {\r\n\t\t\t\t\tthis.total = res;\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t})\r\n\t\tthis._cartService.cart$.subscribe(cart => cart && (this.cartLocal = cart) && this.updateAsociatedData(cart));\r\n\t\tthis.order$.subscribe(order => order && this.updateAsociatedData(order))\r\n\t}\r\n\r\n\tsetSteps(steps: IStep[]) {\r\n\t\tlet final_steps: Step[] = [];\r\n\t\tsteps.forEach((step, i) => final_steps.push(new Step(step.name, step.priority || (i + 1), step.label, step.state)));\r\n\t\tthis._stateSubject.next(final_steps);\r\n\t\tif (final_steps.length == 1) {\r\n\t\t\tthis._lastStepSubject.next(true);\r\n\t\t}\r\n\t\tconsole.log(final_steps);\r\n\t\tfirstValueFrom(this._connection.get(this.getHasPurchaseConditions())).then(\r\n\t\t\tres => {\r\n\t\t\t\tthis._analyticsService.callEvent('checkout_init', { ...this.cartLocal, currency: this.cartLocal?.currency, value: this.cartLocal?.total })\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n\r\n\tnext() {\r\n\t\tthis._loadingStepSubject.next(true);\r\n\t\tconst steps = this._stateSubject.getValue()\r\n\t\tconst readyStep = steps.findIndex(step => step.state === 'ready');\r\n\t\tif (steps[readyStep + 1]) {\r\n\t\t\tsteps[readyStep].state = 'doing'\r\n\t\t\tsteps[readyStep + 1].state = 'ready';\r\n\t\t\tif (!steps[readyStep + 2]) this._lastStepSubject.next(true);\r\n\t\t\tthis._loadingStepSubject.next(false)\r\n\t\t} else {\r\n\t\t\tthis.complete().then(\r\n\t\t\t\tres => {\r\n\t\t\t\t\tif (res.ok) {\r\n\t\t\t\t\t\tthis._router.navigate(['checkout/order_success'])\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis._toastService.show('operation-error')\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._loadingStepSubject.next(false)\r\n\t\t\t\t},\r\n\t\t\t\terr => {\r\n\t\t\t\t\tconsole.log(err)\r\n\t\t\t\t\tthis._loadingStepSubject.next(false)\r\n\t\t\t\t\tthis._toastService.show('operation-error')\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t}\r\n\t}\r\n\r\n\tback() {\r\n\t\tconst steps = this._stateSubject.getValue()\r\n\t\tconst readyStep = steps.findIndex(step => step.state === 'ready');\r\n\t\tthis._lastStepSubject.next(false);\r\n\t\tif (steps[readyStep - 1]) {\r\n\t\t\tsteps[readyStep].state = 'pending'\r\n\t\t\tsteps[readyStep - 1].state = 'ready';\r\n\t\t}\r\n\t}\r\n\r\n\tsetOrder = (order: any) => { this.order = order, this._orderSubject.next(order) };\r\n\t//getOrder = () => this.order || this.orderSubject.value;\r\n\r\n\tprivate completeOrder = () => firstValueFrom(this._connection.put(this.completeApi(), { email: this.checkoutData.email, notes: this.checkoutData.notes || '' }));\r\n\r\n\tcomplete = async () => {\r\n\t\ttry {\r\n\t\t\tthis._loadingSubject.next(true);\r\n\t\t\tlet result = await this.completeOrder();\r\n\t\t\t\r\n\t\t\tif (result && result.error) {\r\n\t\t\t\tthis._cartService.changeHaveToUpdate(false);\r\n\t\t\t\tthis._loadingSubject.next(false);\r\n\t\t\t\treturn ({ ok: false, require_login: true, message: 'not-completed' });\r\n\t\t\t}\r\n\r\n\t\t\tthis.setOrder(result);\r\n\t\t\tthis._analyticsService.callEvent('purchase', { ...result, currency: result.currency, value: result.total });\r\n\t\t\tthis._cartService.clearAndResetCart();\r\n\t\t\tthis._canCheckoutSubject.next(false);\r\n\t\t\t//this._onReadySubject.next(false);\r\n\t\t\tthis._loadingSubject.next(false);\r\n\r\n\t\t\treturn ({ ok: true, require_login: false, message: '' });\r\n\t\t} catch (error) {\r\n\t\t\tthis._loadingSubject.next(false);\r\n\t\t\tconsole.error('Error in complete:', error);\r\n\r\n\t\t\treturn { ok: false, require_login: false, message: 'An error occurred' };\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tupdateAsociatedData = (cart: any) => {\r\n\t\tlet result = this._orderUtilityService.getPromotions(cart);\r\n\t\tconst userProfile: User = User.fromJson(this._authService.getUserProfileAsUser());\r\n\t\tif (result) {\r\n\t\t\tif (userProfile.isWholesaler() && cart.totals.taxes != 0) {\r\n\t\t\t\tlet total = { ...result[result.length - 1] };\r\n\t\t\t\tresult[result.length - 1] = {\r\n\t\t\t\t\ttype: 'taxes',\r\n\t\t\t\t\tname: 'taxes',\r\n\t\t\t\t\tamount: cart.totals.taxes\r\n\t\t\t\t}\r\n\t\t\t\tresult.push(total);\r\n\t\t\t}\r\n\t\t\tlet shipment = result?.find((promotion: any) => promotion.type == \"shipment\");\r\n\t\t\tif (!shipment && cart.totals.shipping != 0) {\r\n\r\n\t\t\t\tif (result?.length && !result.find((item: any) => item.type === \"shipment\")) {\r\n\t\t\t\t\tlet total = { ...result[result.length - 1] };\r\n\t\t\t\t\tresult[result.length - 1] = {\r\n\t\t\t\t\t\ttype: 'shipment',\r\n\t\t\t\t\t\tname: 'shipment',\r\n\t\t\t\t\t\tamount: cart.totals.shipping\r\n\t\t\t\t\t}\r\n\t\t\t\t\tresult.push(total);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis._associatedDataSubject.next(result);\r\n\t\t}\r\n\t}\r\n\r\n\tgetStepData = (step_name: StepType) => {\r\n\t\tlet step_result = this._stateSubject.getValue().find(step => step.name == step_name);\r\n\t\treturn (step_result && step_result.data);\r\n\t}\r\n\r\n\tsetStepData = (step_name: StepType, data: any) => {\r\n\t\tlet step = this._stateSubject.getValue().find(step => step.name == step_name);\r\n\t\tstep?.ready(data);\r\n\t\t/* if (data) {\r\n\t\t\tthis._orderSubject.next(data);\r\n\t\t\tthis.total = data.totals.total;\r\n\t\t} */\r\n\t}\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ApiConstantsService } from '../constants';\r\nimport { CartService } from './cart.service';\r\nimport { ConnectionService } from '../api';\r\nimport { firstValueFrom, map, Observable } from 'rxjs';\r\nimport { AnalyticsService } from './analytics';\r\nimport { Validators } from '@angular/forms';\r\nimport { CheckoutService } from './checkout.service';\r\n\r\ntype typeForms = 'EUR' | 'ARG';\r\ntype typeSelectAddress = 'ONLY_LOAD_ADDRESS' | 'ONLY_ADDRESS_SELECTION' | 'LOAD_ADDRESS_AND_SELECTION';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class AddressingService {\r\n\r\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\r\n\tprivate _cartService: CartService = inject(CartService);\r\n\tprivate _connection: ConnectionService = inject(ConnectionService);\r\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\r\n private _checkoutService: CheckoutService = inject(CheckoutService);\r\n\r\n\tpublic typeForms: typeForms = 'ARG';\r\n\tpublic modeSelectAddress: typeSelectAddress = 'LOAD_ADDRESS_AND_SELECTION';\r\n\tpublic countriesList:any = [];\r\n\tpublic documentTypes:any = [];\r\n\tpublic provinceList:any = [];\r\n\r\n\t//API URL\r\n\tbaseApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/' + 'checkout/' + this._cartService.getCartToken(); }\r\n\tcountriesApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/countries'; }\r\n\tzonesApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/zones'; }\r\n\tprovincesApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/provinces'; }\r\n\tputAddressApi() { return this.baseApi() + '/address'; }\r\n\taddressBookApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/address-book'; }\r\n\theadquarterApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/checkout/' + this._cartService.getCartToken() + '/headquarter'; }\r\n\r\n\tconstructor() {\r\n\t\tthis.getAddressingData().then((res: any) => {\r\n\t\t\tif (res) {\r\n\t\t\t\tthis.documentTypes = (res.find((paises: any) => this._apiConsts.LOCALE.toLocaleLowerCase().includes(paises.code.toLocaleLowerCase())))?.documentTypes || []\r\n\t\t\t\tthis.provinceList = (res.find((paises: any) => this._apiConsts.LOCALE.toLocaleLowerCase().includes(paises.code.toLocaleLowerCase())))?.provinces || []\r\n\t\t\t\tthis.countriesList = res\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetAddressingData() {\r\n\t\treturn firstValueFrom(this._connection.get(this.countriesApi()).pipe(map(res => res?._embedded?.items)));\r\n\t}\r\n\tgetAddressBook(): Observable<any> {\r\n\t\treturn this._connection.get(this.addressBookApi()).pipe(map(res => res?.length && res.map((address: any) => { return address && { ...address, selected: address.default } }) || null))\r\n\t}\r\n\tsetHeadquarter(sede:any): Promise<any>{\r\n\t\treturn firstValueFrom(this._connection.put(this.headquarterApi(), sede.selected)\r\n .pipe(map(order => {\r\n if (order && order.error) {\r\n this._cartService.changeHaveToUpdate(false);\r\n return false;\r\n }\r\n this._checkoutService.setStepData('address',sede);\r\n this._analyticsService.callEvent('payment_info', order);\r\n return order;\r\n }))).then(\r\n res => res,\r\n err => {\r\n return new Promise((resolve, reject) => reject(new Error(err.error)))\r\n }\r\n ).catch(err => console.error(err))\r\n\t}\r\n\r\n\tgetTypeForm = () => {\r\n let formsTypeCofig = [\r\n {\r\n code: 'EUR',\r\n configForm: {\r\n formAddres: {\r\n firstName: ['', [Validators.required]],\r\n lastName: ['', [Validators.required]],\r\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\r\n email: ['', [Validators.required, Validators.email]],\r\n documentType: ['', []],\r\n documentNumber: ['', []],\r\n street: ['', [Validators.required, Validators.maxLength(50)]],\r\n countryCode: [null, [Validators.required]],\r\n city: ['', Validators.required],\r\n provinceCode: [null, [Validators.required]],\r\n postcode: ['', Validators.required],\r\n terms: [null, Validators.required],\r\n notes: ['']\r\n },\r\n formBilling: {\r\n firstName: ['', [Validators.required]],\r\n lastName: ['', [Validators.required]],\r\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\r\n email: ['', [Validators.required, Validators.email]],\r\n documentType: ['', []],\r\n documentNumber: ['', []],\r\n street: ['', [Validators.required, Validators.maxLength(50)]],\r\n countryCode: [null, [Validators.required]],\r\n city: ['', Validators.required],\r\n provinceCode: [null, [Validators.required]],\r\n postcode: ['', Validators.required],\r\n notes: ['']\r\n }\r\n },\r\n viewForms: {\r\n firstName: { enabled: true, required: true, values: [] },\r\n lastName: { enabled: true, required: true, values: [] },\r\n phoneNumber: { enabled: true, required: true, values: [] },\r\n email: { enabled: true, required: true, values: [] },\r\n documentType: { enabled: true, required: false, values: this.documentTypes },\r\n documentNumber: { enabled: true, required: false, values: [] },\r\n street: { enabled: true, required: true, values: [] },\r\n countryCode: { enabled: true, required: true, values: [] },\r\n city: { enabled: true, required: true, values: [] },\r\n provinceCode: { enabled: true, required: true, values: [] },\r\n postcode: { enabled: true, required: true, values: [] },\r\n terms: { enabled: true, required: true, values: [] },\r\n notes: { enabled: true, required: false, values: [] }\r\n }\r\n },\r\n {\r\n code: 'ARG',\r\n configForm: {\r\n formAddres: {\r\n firstName: ['', [Validators.required]],\r\n lastName: ['', [Validators.required]],\r\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\r\n email: ['', [Validators.required, Validators.email]],\r\n documentType: ['', [Validators.required]],\r\n documentNumber: ['', [Validators.required]],\r\n street: ['', [Validators.required, Validators.maxLength(50)]],\r\n countryCode: [null, [Validators.required]],\r\n city: ['', Validators.required],\r\n provinceCode: [null, [Validators.required]],\r\n postcode: ['', Validators.required],\r\n notes: ['']\r\n },\r\n formBilling: {\r\n firstName: ['', [Validators.required]],\r\n lastName: ['', [Validators.required]],\r\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\r\n email: ['', [Validators.required, Validators.email]],\r\n documentType: ['', [Validators.required]],\r\n documentNumber: ['', [Validators.required]],\r\n street: ['', [Validators.required, Validators.maxLength(50)]],\r\n countryCode: [null, [Validators.required]],\r\n city: ['', Validators.required],\r\n provinceCode: [null, [Validators.required]],\r\n postcode: ['', Validators.required],\r\n notes: ['']\r\n }\r\n },\r\n viewForms: {\r\n firstName: { enabled: true, required: true, values: [] },\r\n lastName: { enabled: true, required: true, values: [] },\r\n phoneNumber: { enabled: true, required: true, values: [] },\r\n email: { enabled: true, required: true, values: [] },\r\n documentType: { enabled: true, required: true, values: this.documentTypes},\r\n documentNumber: { enabled: true, required: true, values: [] },\r\n street: { enabled: true, required: true, values: [] },\r\n countryCode: { enabled: true, required: true, values: [] },\r\n city: { enabled: true, required: true, values: [] },\r\n provinceCode: { enabled: true, required: true, values: [] },\r\n postcode: { enabled: true, required: true, values: [] },\r\n terms: { enabled: false, required: false, values: [] },\r\n notes: { enabled: true, required: false, values: [] }\r\n }\r\n }\r\n ]\r\n return formsTypeCofig.find(ct => ct.code == this.typeForms);\r\n }\r\n\r\n\tsetAddress = (user_data: any) => {\r\n user_data.locale = this._apiConsts.LOCALE;\r\n\r\n // se modifica el código postal para castearlo a String antes de enviarlo\r\n user_data.shippingAddress.postcode = user_data.shippingAddress.postcode.toString();\r\n \r\n return firstValueFrom(this._connection.put(this.putAddressApi(), user_data).pipe(map(order => {\r\n if (order && order.error) {\r\n this._cartService.changeHaveToUpdate(false);\r\n return false;\r\n }\r\n \r\n this._checkoutService.setStepData('address',user_data);\r\n this._analyticsService.callEvent('payment_info', order);\r\n return order;\r\n }))).then(\r\n res => res,\r\n err => {\r\n return new Promise((resolve, reject) => reject(new Error(err.error)))\r\n }\r\n ).catch(err => console.error(err))\r\n }\r\n\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, firstValueFrom } from 'rxjs';\r\nimport { ApiConstantsService } from '../constants';\r\nimport { ConnectionService } from '../api';\r\nimport { Store } from '../interfaces/store';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class StoresService {\r\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\r\n\tprivate _connection: ConnectionService = inject(ConnectionService);\r\n\r\n\tprivate _storesSubject = new BehaviorSubject<Store[] | null>([]);\r\n\tpublic stores = this._storesSubject.asObservable();\r\n\r\n\tgetAllStoresApi = () => 'shop-api/' + this._apiConsts.CHANNEL + '/stores';\r\n\r\n\tconstructor() {\r\n\t\tfirstValueFrom(this._connection.get(this.getAllStoresApi())).then(\r\n\t\t\tres => {\r\n\t\t\t\tres.length && this._storesSubject.next(res);\r\n\t\t\t\t!res.length && this._storesSubject.next(null);\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, firstValueFrom, Observable, Subscription } from 'rxjs';\r\nimport { CheckoutService } from './checkout.service';\r\nimport { CheckoutProcessState } from '../interfaces';\r\nimport { ConnectionService } from '../api';\r\nimport { ApiConstantsService } from '../constants';\r\nimport { CartService } from './cart.service';\r\nimport { StoresService } from './stores.service';\r\nimport { AnalyticsService } from './analytics';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ShipmentService {\r\n private _checkoutService: CheckoutService = inject(CheckoutService);\r\n private _connection: ConnectionService = inject(ConnectionService);\r\n private _apiConsts: ApiConstantsService = inject(ApiConstantsService);\r\n private _cartService: CartService = inject(CartService);\r\n private _storesService: StoresService = inject(StoresService);\r\n private _analyticsService: AnalyticsService = inject(AnalyticsService);\r\n\r\n private _methodsSubject = new BehaviorSubject<any>([]);\r\n private _costsSubject = new BehaviorSubject<any>([]);\r\n private _stateSubject = new BehaviorSubject<CheckoutProcessState>({ doing: false, ok: false, data: null });\r\n\r\n public methods$: Observable<any> = this._methodsSubject.asObservable();\r\n public costs$: Observable<any[]> = this._costsSubject.asObservable();\r\n public state$: Observable<any> = this._stateSubject.asObservable();\r\n public buttonsDisabled: boolean = false;\r\n public order: any;\r\n private _subscription: Subscription | null = null;\r\n\r\n //API URL\r\n private baseApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/' + 'checkout/' + this._cartService.getCartToken(); }\r\n\r\n public shipmentMethodsApi() { return this.baseApi() + '/shipping' };\r\n public putShipmentApi() { return this.baseApi() + '/shipping/' + this._stateSubject.getValue().data.method };\r\n public putContractApi = () => 'shop-api/' + this._apiConsts.CHANNEL + '/checkout/' + this._cartService.getCartToken() + '/shipping-contract';\r\n public calculatedCostsApi = () => 'shop-api/' + this._apiConsts.CHANNEL + '/carts/' + this._cartService.getCartToken() + '/multiple-estimated-shipping-cost';\r\n\r\n\r\n constructor() { }\r\n\r\n setMethod(method: any): Promise<any> {\r\n // Deshabilitar todos los botones\r\n //this.buttonsDisabled = true;\r\n\r\n this._costsSubject.next([]);\r\n this._stateSubject.next({ doing: true, ok: false, data: { method } });\r\n\r\n return this.putShipment().then(\r\n (res: any) => {\r\n this._checkoutService.updateAsociatedData(res);\r\n this.order = res;\r\n return this.getCalculatedCosts()\r\n }).then(\r\n (res: any) => {\r\n this.modifyCostsResponse(res, this.getUserData().shippingAddress.postcode, method)\r\n return { success: true, order: this.order };\r\n }).then(\r\n (res:any) => {\r\n const firstContract = this._costsSubject.getValue();\r\n this.setContract(firstContract);\r\n return { success: true, order: this.order };\r\n }\r\n ).catch((error) => {\r\n console.log(error)\r\n return { success: false, error: error };\r\n })\r\n }\r\n\r\n private putShipment() {\r\n return firstValueFrom(this._connection.put(this.putShipmentApi(), { method: this._stateSubject.getValue().data.method }));\r\n }\r\n\r\n getCalculatedCosts() { return firstValueFrom(this._connection.get(this.calculatedCostsApi())) };\r\n\r\n getShipmentMethods = () => {\r\n firstValueFrom(this._connection.getErrorNotHandler(this.shipmentMethodsApi())).then(\r\n res => {\r\n this._methodsSubject.next(this.responseToList(res))\r\n },\r\n err => {\r\n this._methodsSubject.next([])\r\n }\r\n ).catch(err => {\r\n this._methodsSubject.next([])\r\n })\r\n }\r\n responseToList(response: any) {\r\n return (response.shipments && response.shipments.length > 0) && Object.keys(response.shipments[0].methods).map(key => response.shipments[0].methods[key]);\r\n }\r\n\r\n restartStep() {\r\n throw new Error('Method not implemented.');\r\n }\r\n /**\r\n * Obtener información obtenida en el paso de datos asociados al usuario y a la facturación\r\n */\r\n getUserData = () => this._checkoutService.getStepData('address');\r\n // UTILS\r\n\r\n /**\r\n * @param response De api de solicitud de costos por metodo de envío seleccionado\r\n * @param post_code Indicado en el paso de Addressing (datos personales y de facturación)\r\n * @param method Metodo de envío seleccionado\r\n */\r\n modifyCostsResponse(response: any, post_code: any, method: any) {\r\n response = response.multiplePrices;\r\n let branch_delivery = response.findIndex((submethod: any) => submethod.name == 'branch_delivery');\r\n if (branch_delivery != -1) {\r\n response[branch_delivery].contracts = response[branch_delivery].contracts.map(\r\n (contract: any) => {\r\n let branch_property = contract.branch_property || {};\r\n let address_data = branch_property.address || {};\r\n return {\r\n contract: 'branch_delivery',\r\n name: contract.name,\r\n price: contract.price,\r\n ...address_data,\r\n ...branch_property,\r\n computed: (address_data.street || '') + ' N° ' + (address_data.number || '')\r\n };\r\n });\r\n this._costsSubject.next(response);\r\n }\r\n if (method.includes('pickup_store')) {\r\n let final_method_data = response;\r\n this._subscription = this._storesService.stores.subscribe((stores: any) => {\r\n if (stores.length) {\r\n final_method_data.forEach((pickup_store: any) => {\r\n pickup_store.contracts.forEach((contract: any) => {\r\n const current_store = stores.find((store: any) => store.code == contract.name);\r\n if (!current_store) contract.detail = 'Sin información';\r\n else contract.detail = current_store.name + ' - ' + current_store.address;\r\n return contract;\r\n })\r\n })\r\n this._costsSubject.next(final_method_data);\r\n }\r\n })\r\n } else {\r\n this._costsSubject.next(response);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this._subscription && this._subscription.unsubscribe();\r\n }\r\n\r\n setContract(contract: any){\r\n const data = { ...contract, ...this.additionalParamsForContract(contract) };\r\n return firstValueFrom(this._connection.put(this.putContractApi(), data)).then(\r\n order => {\r\n this._analyticsService.callEvent('shipping_info', order);\r\n this._checkoutService.updateAsociatedData(order);\r\n return this._checkoutService.setStepData('shipment',order);},\r\n err => {\r\n return new Promise((resolve, reject) => reject(new Error(err.error)))\r\n }\r\n ).catch(err => console.error(err))\r\n }\r\n additionalParamsForContract(contract:any){\r\n return {\r\n shipping_method_contract:\r\n contract.shipping_method_contract\r\n ? contract.shipping_method_contract\r\n : contract.contract + '_' + contract.name,\r\n shipping_method_branch_code:\r\n contract.shipping_method_branch_code\r\n ? contract.shipping_method_branch_code\r\n : (contract.contract && contract.contract == \"branch_delivery\") ? contract.number : contract.name\r\n }\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, firstValueFrom, map } from 'rxjs';\r\nimport { ConnectionService } from '../api';\r\nimport { ToastService } from './toast.service';\r\nimport { ApiConstantsService } from '../constants';\r\nimport { CartService } from './cart.service';\r\nimport { AnalyticsService } from './analytics';\r\nimport { CheckoutService } from './checkout.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class PaymentService {\r\n\r\n\tprivate _connectionService: ConnectionService = inject(ConnectionService);\r\n\tprivate _toastService: ToastService = inject(ToastService);\r\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService);\r\n\tprivate _cartService: CartService = inject(CartService);\r\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\r\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService);\r\n\r\n\tprivate paymentMethodsSubject = new BehaviorSubject<any[]>([]);\r\n\tpublic methods$ = this.paymentMethodsSubject.asObservable();\r\n\r\n\t//API URL\r\n\tbaseApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/' + 'checkout/' + this._cartService.getCartToken(); }\r\n\tgetPaymentMethodsApi() { return this.baseApi() + '/payment'; }\r\n\tputPaymentApi(method: string) { return this.baseApi() + '/payment/' + method; }\r\n\tgetPreferenceApi (){ return 'shop-api/' + this._apiConsts.CHANNEL + '/mercado-pago/' + this._cartService.getCartToken() + '/preference'; }\r\n\r\n\tconstructor() {\r\n\t\tthis.getPaymentMethods();\r\n\t}\r\n\r\n\tgetPaymentMethods() {\r\n\t\treturn firstValueFrom(this._connectionService.get(this.getPaymentMethodsApi())).then(\r\n\t\t\tres => res.payments?.length && this.paymentMethodsSubject.next(Object.keys(res.payments[0].methods).map(key => res.payments[0].methods[key])),\r\n\t\t\terr => this._toastService.show('operation-error')\r\n\t\t);\r\n\t}\r\n\r\n\tputPayment(method: any) {\r\n\t\treturn firstValueFrom(this._connectionService\r\n\t\t\t.put(this.putPaymentApi(method), { method })).then(\r\n\t\t\t\tres => {\r\n\t\t\t\t\tthis._analyticsService.callEvent('add_payment_info', res);\r\n\t\t\t\t\treturn res\r\n\t\t\t\t},\r\n\t\t\t\terr => {\r\n\t\t\t\t\treturn new Promise((resolve, reject) => reject(new Error(err.error)))\r\n\t\t\t\t}\r\n\t\t\t).catch(err => console.error(err))\r\n\t}\r\n\r\n\tgetPreference(shipment_data:any){\r\n\t\treturn firstValueFrom(this._connectionService.post(this.getPreferenceApi(), shipment_data).pipe(map(res => (res.preference || res))));\r\n\t}\r\n\r\n\tsetPayment(data:any) {\r\n\t\treturn this._checkoutService.setStepData('payment',data);\r\n\t}\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TestService {\r\n\r\n constructor() {\r\n console.log('hola');\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ConnectionService } from '../api';\r\nimport { BehaviorSubject, map } from 'rxjs';\r\nimport { ApiConstantsService } from '../constants';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class OrdersService {\r\n\tprivate _connection:ConnectionService = inject(ConnectionService);\r\n\tprivate _apiConsts:ApiConstantsService = inject(ApiConstantsService);\r\n\r\n\tprivate _ordersSubject: BehaviorSubject<any> = new BehaviorSubject(null);\r\n\tprivate _errorSubject: BehaviorSubject<any> = new BehaviorSubject(null);\r\n\r\n\tpublic orders$ = this._ordersSubject.asObservable();\r\n\r\n\tpublic loading:boolean = false;\r\n\r\n\t//API URL\r\n\tordersListapi(){ return `shop-api/${this._apiConsts.CHANNEL}/orders`};\r\n\r\n\tupdateOrders() {\r\n\t\tthis.loading = true;\r\n this._connection.get(this.ordersListapi())\r\n .pipe(\r\n map(res => {\r\n let orders = this.mapOrdersAndAddInfo(res);\r\n return orders;\r\n })\r\n )\r\n .subscribe({\r\n next: (response) => {\r\n this._ordersSubject.next(response);\r\n this.loading = false;\r\n },\r\n error: (e) => {\r\n this._errorSubject.next({ message: 'unable-get-orders' });\r\n }\r\n\t\t\t})\r\n\r\n\t}\r\n\tmapOrdersAndAddInfo(orders:any){\r\n return orders.map((order:any) => {\r\n order.total = order.payments.reduce((a:any, b:any) => a + b.price.current, 0);\r\n return order;\r\n })\r\n\t}\r\n\r\n}\r\n","import { afterNextRender, afterRender, Component, inject } from '@angular/core';\r\nimport { AuthService, OptionsService, ParametersService } from '../../ec-services';\r\nimport { map, Observable } from 'rxjs';\r\nimport { CoreConstantsService } from '../../constants';\r\nimport { Attribute, Category, Parameter, Section } from '../../interfaces';\r\n/**\r\n * Para diferenciar los tipos de Menu\r\n */\r\ntype MenuType = \"category\" | \"attribute\" | \"section\"\r\n/**\r\n * Componente que sirve para abstraer la funcionalidad que comparten \r\n * el menú y el footer.\r\n * @class MenuEcComponent\r\n */\r\n@Component({\r\n\tselector: 'lib-footer-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplate: '<p>Menu and Footer Helper Component</p>'\r\n})\r\nexport class MenuEcComponent {\r\n\tprivate optionsService = inject(OptionsService)\r\n\tprivate parametersService = inject(ParametersService)\r\n\tprivate _authService: AuthService = inject(AuthService)\r\n\t/**\r\n\t * Constantes del core.\r\n\t */\r\n\tprivate consts = inject(CoreConstantsService)\r\n\r\n\t/**\r\n\t * Observable de categorias\r\n\t */\r\n\tpublic categories$: Observable<Category[]> = this.optionsService.getCategories()\r\n\t/**\r\n\t * Observable de secciones\r\n\t */\r\n\tpublic sections$: Observable<Section[]> = this.optionsService.getSections()\r\n\t/**\r\n\t * Observable de atributos\r\n\t */\r\n\tpublic attributes$: Observable<Attribute[]> = this.optionsService.getAttributes()\r\n\t/**\r\n\t * Observable de parametros\r\n\t */\r\n\tpublic parameters$: Observable<Parameter[] | null> = this.parametersService.getParameters()\r\n\t/**\r\n\t * Url para las imagenes guardades en el backend.\r\n\t */\r\n\tpublic mediaUrl = this.consts.mediaUrl()\r\n\t/**\r\n\t * Funcion para saber si existen un parametro. \r\n\t */\r\n\tpublic hasParams = this.parametersService.hasParams\r\n\r\n\tconstructor() {}\r\n\r\n\tprotected addChildren = (menuType: MenuType, code: string, item: any, stackPlace = 'end'): void => {\r\n\r\n\t}\r\n\r\n\t/* protected addChildren = (menuItems: any[], code: string, item: any, stackPlace = 'end') => {\r\n\t (stackPlace === 'start')\r\n\t\t? menuItems.find(item => item.code?.toLowerCase().includes(code))?.children.unshift(item)\r\n\t\t: menuItems.find(item => item.code?.toLowerCase().includes(code))?.children.push(item)\r\n \r\n\t} */\r\n\t/**\r\n\t * Actualiza las categorias agregando nuevas.\r\n\t * @param categories \r\n\t */\r\n\tprotected updateCategories(categories: Category[]) {\r\n\t\tthis.categories$ = this.categories$.pipe(map((data: Category[]) => {\r\n\t\t\treturn [...data, ...categories]\r\n\t\t}))\r\n\t}\r\n\t/**\r\n\t * Actualiza las secciones agregando nuevas.\r\n\t * @param sections \r\n\t */\r\n\tprotected updateSections(sections: Section[]) {\r\n\t\tthis.sections$ = this.sections$.pipe(map((data: Section[]) => {\r\n\t\t\treturn [...data, ...sections]\r\n\t\t}))\r\n\t}\r\n\t/**\r\n\t * Actualiza el menú de atributos agredando nuevos.\r\n\t * @param attributes \r\n\t */\r\n\tprotected updateAttributes(attributes: Attribute[]) {\r\n\t\tthis.attributes$ = this.attributes$.pipe(map((data: Attribute[]) => {\r\n\t\t\treturn [...data, ...attributes]\r\n\t\t}))\r\n\t}\r\n\r\n\tpublic isAuthenticated() {\r\n\t\treturn this._authService.isAuthenticated();\r\n\t}\r\n\r\n\tpublic logout() {\r\n\t\tthis._authService.logout();\r\n\t}\r\n}","import { afterNextRender, Component, inject } from \"@angular/core\";\r\nimport { ApiConstantsService, CoreConstantsService } from \"../../constants\";\r\nimport { SwiperOptions } from \"swiper/types\";\r\n/**\r\n * Componente para abstraer la funcionalidad de los componentes\r\n * y que puedan heredarla.\r\n * @export\r\n * @class BlockEcComponent\r\n */\r\n@Component({\r\n\tselector: 'lib-block-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplate: '<p>Block Helper Component</p>'\r\n})\r\nexport class BlockEcComponent {\r\n /**\r\n * Constantes del core\r\n */\r\n private consts = inject(CoreConstantsService)\r\n /**\r\n * Constantes de la API\r\n */\r\n protected apiConsts = inject(ApiConstantsService)\r\n /**\r\n * Url para las imagenes\r\n */\r\n public mediaUrl = this.consts.mediaUrl()\r\n /**\r\n * Url para las imagenes de los banners\r\n */\r\n public mediaBannerUrl = this.consts.mediaBannerUrl()\r\n /**\r\n * Si la vista es mobile o no.\r\n */\r\n public mobileScreen:boolean = this.consts.mobileScreen(); \r\n \r\n constructor(){}\r\n /**\r\n * Esta función separa el código del bloque y se queda con el elemento en la posicion uno para usarlo como clase CSS. \r\n * La idea es que el código del bloque mantenga un formato similar a **BLOQUE-[nombre]-[extra]...** entonces esta función \r\n * se quedaria con lo que contiene **nombre** para usarlo como nombre de clase css.\r\n * @param code Código del bloque.\r\n * @returns {string}\r\n */\r\n trimClassBlock (code:string):string {\r\n return (code.split('-').length > 1) ? code.split('-')[1].toLowerCase() : ''\r\n }\r\n /**\r\n * Obtiene la imagen del banner dependiendo de si es para mobile o desktop\r\n * @param banner \r\n * @returns \r\n */\r\n getBannerImage(banner: any):string {\r\n return (this.mobileScreen && banner.translations[this.apiConsts.LOCALE].mobileImageName && banner.translations[this.apiConsts.LOCALE].mobileImageName != '')\r\n ? banner.translations[this.apiConsts.LOCALE].mobileImageName\r\n : banner.translations[this.apiConsts.LOCALE].imageName;\r\n }\r\n\r\n /**\r\n * Obtiene la imagen del banner dependiendo de si es para mobile o desktop.\r\n * Le suma el path para las url del banner.\r\n * @param banner \r\n * @returns \r\n */\r\n getImage(banner: any): string {\r\n return this.mediaBannerUrl +\r\n (this.mobileScreen && banner.translations[this.apiConsts.LOCALE].mobileImageName && banner.translations[this.apiConsts.LOCALE].mobileImageName != '')\r\n ? banner.translations[this.apiConsts.LOCALE].mobileImageName\r\n : banner.translations[this.apiConsts.LOCALE].imageName\r\n }\r\n /**\r\n * Retorna la configuración base para el carrusel.\r\n * Más detalles: {@link https://swiperjs.com/types/interfaces/types_swiper_options.SwiperOptions}\r\n * @returns {SwiperOptions}\r\n * \r\n */\r\n swiperOptions():SwiperOptions {\r\n return {\r\n slidesPerView: 1,\r\n autoplay: true,\r\n loop: true,\r\n speed: 1050,\r\n pagination: true,\r\n navigation: false,\r\n autoHeight: true,\r\n breakpoints: {\r\n 0: {\r\n slidesPerView: 1\r\n },\r\n 576:{\r\n slidesPerView: 1 \r\n },\r\n 768: {\r\n slidesPerView: 1,\r\n },\r\n 992: {\r\n slidesPerView: 1,\r\n },\r\n 1200: {\r\n slidesPerView: 1,\r\n }\r\n }\r\n }\r\n }\r\n\r\n}","import { Component} from '@angular/core';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { MenuEcComponent } from '../abstractions-components';\r\n/**\r\n * Componente que se encarga de manejar la funcionalidad del Footer.\r\n * @extends {MenuEcComponent}\r\n */\r\n@Component({\r\n\tselector: 'lib-footer-ec',\r\n\tstandalone: true,\r\n\timports: [AsyncPipe],\r\n\ttemplateUrl: './footer-ec.component.html',\r\n\tstyleUrl: './footer-ec.component.scss'\r\n})\r\nexport class FooterEcComponent extends MenuEcComponent{\r\n\r\n}\r\n\r\n","<p>footer-ec works!</p>\r\n","import { afterNextRender, Component, inject, Injector, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport { MenuEcComponent } from '../abstractions-components';\r\nimport { CartService, TestService, ToastService } from '../../ec-services';\r\nimport { Observable } from 'rxjs';\r\nimport { AuthService } from '../../ec-services';\r\n/**\r\n * Componente que se encarga de manejar la funcionalidad del Header.\r\n */\r\n@Component({\r\n\tselector: 'lib-header-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplateUrl: './header-ec.component.html',\r\n\tstyleUrl: './header-ec.component.scss'\r\n})\r\nexport class HeaderEcComponent extends MenuEcComponent {\r\n\tpublic _cartService: CartService = inject(CartService);\r\n\tpublic authService: AuthService = inject(AuthService);\r\n\tpublic count$: Observable<number> = this._cartService.getCountCartItems();\r\n\t\r\n}\r\n","<p>header-ec works!</p>\r\n","import { Component, inject } from '@angular/core';\r\nimport { CoreConstantsService } from '../../constants';\r\nimport { BlocksService } from '../../ec-services';\r\n/**\r\n * Componente que se encarga de manejar el Home de la aplicación.\r\n */\r\n@Component({\r\n selector: 'lib-home-ec',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './home-ec.component.html',\r\n styleUrl: './home-ec.component.scss'\r\n})\r\nexport class HomeEcComponent {\r\n\r\n}\r\n","<p>home-ec works!</p>\r\n","import { afterNextRender, afterRender, Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, OnInit, PLATFORM_ID, signal } from '@angular/core';\r\nimport { IBlock } from '../../../interfaces';\r\nimport { BlockEcComponent } from '../../abstractions-components';\r\nimport { register, SwiperContainer } from 'swiper/element/bundle';\r\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\r\nimport { RouterLink } from '@angular/router';\r\nimport { AnalyticsService } from '../../../ec-services';\r\n\r\nregister();\r\n/**\r\n * Componente para manejar los banners de tipo full\r\n * @extends {BlockEcComponent}\r\n * @implements {OnInit}\r\n * @class BlockBannerFullEcComponent\r\n */\r\n@Component({\r\n\tselector: 'app-block-banner-full-ec',\r\n\tstandalone: true,\r\n\timports: [CommonModule, RouterLink],\r\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n\ttemplateUrl: './block-banner-full-ec.component.html',\r\n\tstyleUrl: './block-banner-full-ec.component.scss'\r\n})\r\nexport class BlockBannerFullEcComponent extends BlockEcComponent implements OnInit {\r\n\t/**\r\n\t * Banners tipo full\r\n\t */\r\n\t@Input({\r\n\t\trequired: true\r\n\t}) banners: any;\r\n\t/**\r\n\t * Datos del bloque que contiene a los banners\r\n\t */\r\n\t@Input({ required: true }) meta: any;\r\n\t/**\r\n\t * Servicio para Analytics\r\n\t */\r\n\tprivate analyticsService = inject(AnalyticsService)\r\n\t/**\r\n\t * Signal utlizado para guarda el contenedor del carrusel\r\n\t */\r\n\tswiperElement = signal<SwiperContainer | null>(null)\r\n\t/**\r\n\t * Método original en: {@link BlockEcComponent}\r\n\t * @param banner \r\n\t * @returns \r\n\t */\r\n\tpublic override getImage = (banner: any) => this.getBannerImage(banner);\r\n\t/**\r\n\t * Se mappea los banners para sumarle el objeto de translations y que\r\n\t * sean mas amigables para su uso.\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tthis.banners = this.banners.map((banner: any) => { return { ...banner, ...banner.translations[this.apiConsts.LOCALE] } })\r\n\t}\r\n\tprivate document?: Document;\r\n\tprivate platformId: any = inject(PLATFORM_ID)\r\n\r\n\t/**\r\n\t * Ejecuta el método `afterNextRender`para cargar las configuraciones necesarias \r\n\t * para el carrusel del banners. Esto debe ser asi debido a que ya debe estar presente\r\n\t * en el Dom el element `<swiper-container>` para poder configurarlo.\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper()\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tthis.document = document\r\n\t\t}\r\n\t\tafterNextRender(() => {\r\n\t\t\tconst swiperElemConstructor = this.document?.querySelector('#' + this.meta?.code)\r\n\t\t\tObject.assign(swiperElemConstructor!, this.swiperOptions())\r\n\t\t\tthis.swiperElement.set(swiperElemConstructor as SwiperContainer)\r\n\t\t\tthis.swiperElement()?.initialize();\r\n\t\t})\r\n\t}\r\n\t/**\r\n\t * Aplica el evento `select_promotion` junto con el banner que interactua.\r\n\t * @param banner \r\n\t */\r\n\tselectPromotion(banner: any): void {\r\n\t\tthis.analyticsService.callEvent('select_promotion', banner)\r\n\t}\r\n}\r\n","@if(banners.length > 0) {\r\n <section [ngClass]=\"trimClassBlock(meta?.code)+' container-fluid px-0'\"\r\n [style.background-color]=\"meta.styles?.backgroundColor\"\r\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\r\n\r\n @if (banners.length == 1) {\r\n <!-- si es formato fijo -->\r\n <div class=\"row justify-content-center\">\r\n @let banner = banners[0];\r\n @if(!banners.styles?.button?.text){\r\n <!-- banner sin boton -->\r\n <a [href]=\"banner.url\" >\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#fff' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </a>\r\n }@else {\r\n <!-- banner fijo con boton -->\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p \r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\"\r\n [class]=\"'item-button-full btn btn-light '\">\r\n {{banner.styles.button.text}}\r\n </a> \r\n }\r\n \r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }@else {\r\n <!-- si es carrousel -->\r\n <!-- @if(swiperElement() != null){ -->\r\n <swiper-container init=\"false\" [id]=\"meta?.code\">\r\n @for (banner of banners; track $index) {\r\n <swiper-slide>\r\n <div class=\"item\">\r\n @if (!banner.styles?.button?.text) {\r\n <!-- banner sin boton -->\r\n @if(banner.url){\r\n <a [href]=\"banner.url\" class=\"\">\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n </a>\r\n }@else {\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n }\r\n }@else {\r\n <!-- banner con boton -->\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" />\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\" [class]=\"'item-button-full btn btn-light'\">\r\n {{banner.styles.button.text}}\r\n </a>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </swiper-slide>\r\n }\r\n </swiper-container>\r\n <!-- } -->\r\n \r\n }\r\n </section>\r\n}","import { AsyncPipe, CommonModule, isPlatformBrowser } from '@angular/common';\r\nimport { afterNextRender, Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, PLATFORM_ID, signal } from '@angular/core';\r\nimport { BlockEcComponent } from '../../abstractions-components';\r\nimport { AnalyticsService } from '../../../ec-services';\r\nimport { register, SwiperContainer } from 'swiper/element';\r\nimport { SwiperOptions } from 'swiper/types';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nregister()\r\n/**\r\n * Componente para manejar los banner de tipo box.\r\n * @class BlockBannerBoxEcComponent\r\n * @extends {BlockEcComponent}\r\n */\r\n@Component({\r\n\tselector: 'app-block-banner-box-ec',\r\n\tstandalone: true,\r\n\timports: [CommonModule, RouterModule],\r\n\ttemplateUrl: './block-banner-box-ec.component.html',\r\n\tstyleUrl: './block-banner-box-ec.component.scss',\r\n\tschemas:[CUSTOM_ELEMENTS_SCHEMA]\r\n})\r\nexport class BlockBannerBoxEcComponent extends BlockEcComponent {\r\n\t/**\r\n\t * Banners de tipo Box.\r\n\t */\r\n\t@Input({\r\n\t\trequired: true\r\n\t}) banners: any;\r\n\t/**\r\n\t * Datos del bloque que contiene a los banners\r\n\t */\r\n\t@Input({ required: true }) meta: any;\r\n\t/**\r\n\t * Servicio para Analytics\r\n\t */\r\n\tprivate analyticsService = inject(AnalyticsService)\r\n\t/**\r\n\t * Signal utlizado para guarda el contenedor del carrusel\r\n\t */\r\n\tswiperElement = signal<SwiperContainer | null>(null)\r\n\t\r\n\tprivate document?: Document;\r\n\tprivate platformId: any = inject(PLATFORM_ID)\r\n\t\r\n\t/**\r\n\t * Ejecuta el método `afterNextRender`para cargar las configuraciones necesarias \r\n\t * para el carrusel del banners. Esto debe ser asi debido a que ya debe estar presente\r\n\t * en el Dom el element `<swiper-container>` para poder configurarlo.\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper()\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tthis.document = document\r\n\t\t}\r\n\t\tafterNextRender(() => {\r\n\t\t\tconst swiperElemConstructor = this.document?.querySelector('#'+this.meta?.code)\r\n\t\t\tObject.assign(swiperElemConstructor!, this.swiperOptions())\r\n\t\t\tthis.swiperElement.set(swiperElemConstructor as SwiperContainer)\r\n\t\t\t//swiperElemConstructor?.initialize();\r\n\t\t\tthis.swiperElement()?.initialize();\r\n\t\t})\r\n\t}\r\n\t/**\r\n\t * Método original en: {@link BlockEcComponent}\r\n\t */\r\n\toverride swiperOptions ():SwiperOptions {\r\n\t\treturn {\r\n slidesPerView: 1,\r\n autoplay: true,\r\n loop: true,\r\n speed: 1050,\r\n pagination: false,\r\n navigation: true,\r\n autoHeight: true,\r\n breakpoints: {\r\n 0: {\r\n slidesPerView: 1\r\n },\r\n 576:{\r\n slidesPerView: 2 \r\n },\r\n 768: {\r\n slidesPerView: 4,\r\n },\r\n 992: {\r\n slidesPerView: 5,\r\n },\r\n 1200: {\r\n slidesPerView: 5,\r\n }\r\n }\r\n }\r\n\t}\r\n\t/**\r\n\t * Aplica el evento `select_promotion` junto con el banner que interactua.\r\n\t * @param banner \r\n\t */\r\n\tselectPromotion(banner: any): void {\r\n\t\tthis.analyticsService.callEvent('select_promotion', banner)\r\n\t}\r\n\r\n\tredirectRoute(url: string): void {\r\n\t\t// this.router.navigate(['/collection/categories'])\r\n\t }\r\n}\r\n","@if(banners.length){\r\n <section [ngClass]=\"trimClassBlock(meta.code) + ' container-fluid'\" \r\n [style.background-color]=\"meta.styles?.backgroundColor\"\r\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\r\n\r\n <div class=\"block-boxes\" style=\"background-color: white;\">\r\n @if(meta.name){\r\n <div class=\"row\">\r\n a\r\n <div class=\"col-12 mt-4\">\r\n <h2 class=\"font-weight-normal font-gd\">\r\n <span>{{meta.name}}</span>\r\n </h2>\r\n </div>\r\n </div> \r\n }\r\n \r\n @if(meta.styles && meta.styles.carrousel == false){\r\n <!-- Si es formato fijo -->\r\n <div class=\"banner-content\">\r\n <div class=\"row g-0\">\r\n @for (banner of banners; track $index) {\r\n <div [ngClass]=\"'item '+'col-md-6 '+'col-lg-'+(12/banners.length) \" [id]=\"$index\">\r\n <img class=\"img-fluid\" [src]=\" mediaBannerUrl+getImage(banner)\" alt=\"\" />\r\n <div class=\"position-absolute w-100 top-0 start-0 h-100\">\r\n <h2 [ngClass]=\"'item-title px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000'\">\r\n {{banner.title}}\r\n </h2>\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </div>\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\" [class]=\"'item-button btn btn-light'\">\r\n {{banner.styles.button.text}}\r\n </a>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }@else {\r\n <!-- Si es Carrousel -->\r\n <swiper-container init=\"false\" [id]=\"meta?.code\">\r\n @for (banner of banners; track $index) {\r\n <!-- Si es de Categorias -->\r\n @if (banner.taxons[0]) {\r\n <swiper-slide>\r\n\r\n <a class=\"banner-content carrousel item\" (click)='redirectRoute(banner.taxons[0].slug)' [routerLink]=\"['/collection/categories/', banner.taxons[0].slug]\" routerLinkActive=\"router-link-active\" style=\"text-decoration: none; cursor: pointer; background-color: white;\">\r\n <div class=\"image-container\">\r\n <img [src]=\"mediaBannerUrl+getImage(banner)\" alt=\"Banner Image\" class=\"banner-image\">\r\n </div>\r\n @if(banner.title){\r\n <h2 [class]=\"'box-text item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n style=\"color:#fff\">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.taxons && banner.taxons.length){\r\n <h5 class=\"item-subtitle-full item-position-vertical-center text-center box-text\">\r\n {{banner.translations.es_AR.title}}\r\n </h5>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'box-text px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </a>\r\n </swiper-slide>\r\n } @else {\r\n <swiper-slide>\r\n\r\n <a class=\"banner-content carrousel item\" style=\"cursor: pointer;\">\r\n <div class=\"image-container\">\r\n <img [src]=\"mediaBannerUrl+getImage(banner)\" alt=\"Banner Image\" class=\"banner-image\">\r\n </div>\r\n @if(banner.title){\r\n <h2 [class]=\"'box-text item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n style=\"color:#fff\">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.taxons && banner.taxons.length){\r\n <h5 class=\"item-subtitle-full item-position-vertical-center text-center box-text\">\r\n {{banner.translations.es_AR.title}}\r\n </h5>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'box-text px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </a>\r\n </swiper-slide>\r\n }\r\n \r\n }\r\n </swiper-container> \r\n }\r\n </div>\r\n\r\n </section>\r\n}","import { Component, inject, Input, OnInit } from '@angular/core';\r\nimport { BlockEcComponent } from '../../abstractions-components';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n/**\r\n * Componente para manejar los Bloques de tipo HTML\r\n * @extends {BlockEcComponent}\r\n * @implements {OnInit}\r\n */\r\n@Component({\r\n\tselector: 'app-block-html-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplateUrl: './block-html-ec.component.html',\r\n\tstyleUrl: './block-html-ec.component.scss'\r\n})\r\nexport class BlockHtmlEcComponent extends BlockEcComponent implements OnInit {\r\n\t/**\r\n\t * Contenido html para sanitizar.\r\n\t */\r\n\t@Input({\r\n\t\trequired: true,\r\n\t}) html_content: any;\r\n\t/**\r\n\t * Sanitizador de Dom elements\r\n\t */\r\n\tprotected sanitizer: DomSanitizer = inject(DomSanitizer)\r\n\t/**\r\n\t * Se pasa el contenido de html por es sanitizador. \r\n\t */\r\n\tngOnInit(): void {\r\n\t\tthis.html_content = this.sanitizer.bypassSecurityTrustHtml(this.html_content);\r\n\t}\r\n}\r\n","<div [innerHTML]=\"html_content\"></div>\r\n","import { inject, Pipe, PipeTransform, Input } from '@angular/core';\r\nimport { CurrencyService } from '../ec-services';\r\nimport { CoreConstantsService } from '../constants';\r\n/**\r\n * Formatea el precio de un producto.\r\n * @implements {PipeTransform}\r\n */\r\n@Pipe({\r\n\tname: 'ecCurrencySymbol',\r\n\tstandalone: true,\r\n})\r\nexport class EcCurrencySymbolPipe implements PipeTransform {\r\n\t/**\r\n\t * Contiene el valor de la moneda actual\r\n\t */\r\n\tprivate currency: any;\r\n\t/**\r\n\t * Servicio de Currency (para manejar la moneda)\r\n\t */\r\n\tprivate currencyService: CurrencyService = inject(CurrencyService)\r\n\t/**\r\n\t * Constantes del core\r\n\t */\r\n\tprivate consts: CoreConstantsService = inject(CoreConstantsService)\r\n\r\n\tbanner:any;\r\n @Input()\r\n set ecAddActionRedirect(value: any) {\r\n this.banner = value;\r\n }\r\n\tconstructor() {\r\n\t\tthis.currencyService.currency$.subscribe(res => this.currency = res)\r\n\t}\r\n\t/**\r\n\t * Transforma el valor pasado y devuelve un string con los formatos aplicados\r\n\t * @param value Precio del producto\r\n\t * @returns \r\n\t */\r\n\ttransform(value: any): string {\r\n\t\tconst formatter = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'USD' });\r\n\t\tlet valueTransform = ''\r\n\t\tif (value) {\r\n\t\t\tvalue = this.currencyService.calculateConvetibility(value, this.currency.ratio).toString()\r\n\t\t\tvalueTransform = this.changeSymbolTransform(formatter.format(value)?.toString())\r\n\t\t}\r\n\t\treturn valueTransform;\r\n\t}\r\n\t/**\r\n\t * Genera el precio formateado con el simbolo y lo que las configuraciones requieran.\r\n\t * @param valor \r\n\t * @returns \r\n\t */\r\n\tchangeSymbolTransform(valor: any) {\r\n\t\ttry {\r\n\t\t\treturn this.positionSymbol(this.checkingWithoutDecimals(this.clearSymbol(valor)))\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Errores en custom pipe -> ', error);\r\n\t\t\treturn valor\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Limpia el simbolo de peso para obtener solo el número.\r\n\t * @param value \r\n\t * @returns \r\n\t */\r\n\tclearSymbol(value: any) { return value.replace('$', '') }\r\n\t/**\r\n\t * Aplica el simbolo de la moneda, segun la configuración, del lado derecho o del lado izquierdo.\r\n\t * @param value \r\n\t * @returns \r\n\t */\r\n\tpositionSymbol(value: any) {\r\n\t\treturn this.consts.currency.position && this.consts?.currency.position.toUpperCase() == 'LEFT'\r\n\t\t\t? `${this.currency.symbol} ${value?.trim()}`\r\n\t\t\t: `${value?.trim()} ${this.currency.symbol}`\r\n\r\n\t}\r\n\t/**\r\n\t * Si el parametro `withoutDecimal` de currency es `true` le saca los decimales, \r\n\t * de lo contrario se los agrega formateados.\r\n\t * @param value \r\n\t * @returns \r\n\t */\r\n\tcheckingWithoutDecimals(value: string) {\r\n\t\tif (this.consts?.currency.withoutDecimal) {\r\n\t\t\tlet val = value?.split(',');\r\n\t\t\treturn val[0]\r\n\t\t\t//?.trim() == \"00\" && value.trim().slice(0, value.trim().length - 3) || value\r\n\t\t} else {\r\n\t\t\tlet val = value?.split(',');\r\n\t\t\t(val[1] && val[1].length > 2) ? val[1] = val[1].slice(0, 2) : val[1] = \"00\"\r\n\t\t\tvalue = val[0] + ',' + val[1];\r\n\t\t\treturn value\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { EcCurrencySymbolPipe } from \"../../../ec-pipe/ec-currency-symbol.pipe\";\r\n/**\r\n * Componente para manejar la vista del precio de un producto.\r\n */\r\n@Component({\r\n selector: 'app-price-ec',\r\n standalone: true,\r\n imports: [EcCurrencySymbolPipe],\r\n templateUrl: './price-ec.component.html',\r\n styleUrl: './price-ec.component.scss'\r\n})\r\nexport class PriceEcComponent {\r\n /**\r\n * Precio de un producto.\r\n */\r\n\t@Input() price: any;\r\n /**\r\n * Precio de venta de un producto.\r\n */\r\n\t@Input() saleprice: any;\r\n}\r\n","@if(saleprice){\r\n <!--With saleprice-->\r\n <div class=\"\">\r\n @if(price && price.split(' - ').length > 1){\r\n <div class=\"price text-center p-0 mx-0 mx-md-3\">\r\n <del class=\"text-center price\">\r\n {{ price.split(' - ')[0] | ecCurrencySymbol }}\r\n {{ price.split(' - ')[1] | ecCurrencySymbol }}\r\n </del>\r\n </div>\r\n }@else {\r\n <!--Simple Price Del-->\r\n <div class=\" text-center delete p-0 mx-0 mx-md-3\">\r\n <del class=\" text-center delete\">\r\n {{ price | ecCurrencySymbol }}</del>\r\n </div>\r\n }\r\n @if(saleprice && saleprice.split(' - ').length > 1){\r\n <div class=\"\">\r\n {{\r\n saleprice.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n saleprice.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n } @else {\r\n <!--Simple saleprice-->\r\n <div class=\"text-center price p-0 mx-0 mx-md-3\">\r\n {{ saleprice | ecCurrencySymbol }}\r\n </div>\r\n }\r\n</div> \r\n}@else {\r\n <!--Only Price-->\r\n @if(price && price.split(' - ').length > 1){\r\n <div class=\"price\">\r\n {{ price.split(' - ')[0] | ecCurrencySymbol }} -\r\n {{ price.split(' - ')[1] | ecCurrencySymbol }}\r\n </div> \r\n } @else {\r\n <!--Simple price-->\r\n <div class=\"text-center price p-0 mx-0 mx-md-3\">\r\n {{ price | ecCurrencySymbol }}\r\n </div>\r\n }\r\n}","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\r\nimport { Product } from '../../interfaces';\r\nimport { CoreConstantsService } from '../../constants';\r\nimport { AnalyticsService } from '../../ec-services';\r\nimport { Router, RouterLink } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PriceEcComponent } from \"../widgets-ec/price-ec/price-ec.component\";\r\n/**\r\n * Componente que se encarga de manejar un producto.\r\n * @class ProductEcComponent\r\n */\r\n@Component({\r\n\tselector: 'app-product-ec',\r\n\tstandalone: true,\r\n\timports: [CommonModule, PriceEcComponent, RouterLink],\r\n\ttemplateUrl: './product-ec.component.html',\r\n\tstyleUrl: './product-ec.component.scss'\r\n})\r\nexport class ProductEcComponent implements OnInit {\r\n\t/**\r\n\t * Datos del producto.\r\n\t */\r\n\t@Input({\r\n\t\trequired: true\r\n\t})\r\n\tproduct!: Product;\r\n\t/**\r\n\t * Se usa para saber si el producto es de tipo Box o no y definir la vista adecuada.\r\n\t */\r\n\t@Input() isProductBox:boolean = true;\r\n\t/**\r\n\t * Constantes del core\r\n\t */\r\n\t@Output() loaded = new EventEmitter<number>();\r\n\r\n\tngOnInit() {\r\n\t this.loaded.emit(this.product.id);\r\n\t}\r\n\tprivate consts:CoreConstantsService = inject(CoreConstantsService)\r\n\tprivate analyticsService: AnalyticsService = inject(AnalyticsService)\r\n\tprivate router:Router = inject(Router)\r\n\t/**\r\n\t * URL para las imagenes del producto.\r\n\t */\r\n\tpublic mediaUrl:string = this.consts.mediaUrl()\r\n}\r\n","@if(isProductBox){\r\n <div class=\"position-relative h-100\">\r\n <div class=\"marcas position-absolute w-100\">\r\n <span>20 %OFF</span>\r\n </div>\r\n <div>\r\n @if(product.picturesdefault){\r\n <img [src]=\"mediaUrl+product.picturesdefault[0]\" class=\"img-fluid mx-auto\" />\r\n }\r\n </div>\r\n <div class=\"d-flex flex-column justify-center align-items-center\">\r\n <h6 class=\"productName text-center\">{{product.name}}aa</h6> \r\n <p class=\"productID\">{{product.id}}</p>\r\n @if(product.shortdetails){\r\n <div class=\"shortdetails\" [innerHTML]=\"product.shortdetails\"></div>\r\n }\r\n @if(product.currentOption && product.currentOption.name){\r\n <p class=\"currentOption\" >{{product.currentOption.name}}</p>\r\n }\r\n </div>\r\n <div class=\"d-flex flex-column justify-center alig-items-center\">\r\n @if(true){\r\n <!--Servicio de auth para controlar si esta logueado o no-->\r\n <app-price-ec [price]=\"product.price\" [saleprice]=\"product.saleprice\" class=\"\" />\r\n }\r\n <button class=\"btn btn-primary\" routerLink=\"{{'/product/' + product.id}}\">Ver Producto</button>\r\n </div>\r\n </div>\r\n} @else {\r\n \r\n}\r\n","import { afterNextRender, Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, PLATFORM_ID, signal, TemplateRef } from '@angular/core';\r\nimport { BlockEcComponent } from '../../abstractions-components';\r\nimport { SwiperOptions } from 'swiper/types';\r\nimport { AnalyticsService } from '../../../ec-services';\r\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\r\n// import function to register Swiper custom elements\r\nimport { register, SwiperContainer } from 'swiper/element/bundle';\r\nimport { ProductEcComponent } from \"../../product-ec/product-ec.component\";\r\n\r\nregister()\r\n/**\r\n * Componen para manejar los bloques de productos.\r\n * @extends {BlockEcComponent}\r\n * @class BlockProductsEcComponent\r\n */\r\n@Component({\r\n\tselector: 'app-block-products-ec',\r\n\tstandalone: true,\r\n\timports: [CommonModule, ProductEcComponent],\r\n\ttemplateUrl: './block-products-ec.component.html',\r\n\tstyleUrl: './block-products-ec.component.scss',\r\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA]\r\n})\r\nexport class BlockProductsEcComponent extends BlockEcComponent {\r\n\t/**\r\n\t * Servicio de Analytics\r\n\t */\r\n\tprivate analyticsService: AnalyticsService = inject(AnalyticsService)\r\n\t/**\r\n\t * Signal utlizado para guarda el contenedor del carrusel\r\n\t */\r\n\tswiperElement = signal<SwiperContainer | null>(null)\r\n\t/**\r\n\t * Input que recibe un template para el producto.\r\n\t */\r\n\t@Input() appProduct: TemplateRef<any> | undefined;\r\n\t/**\r\n\t * Colección de productos.\r\n\t */\r\n\t@Input({\r\n\t\trequired: true\r\n\t}) products: any; // Product[];\r\n\t/**\r\n\t * Bloque principal que contiene los productos\r\n\t */\r\n\t@Input({\r\n\t\trequired: true\r\n\t}) meta: any;\r\n\t/**\r\n\t * Método original en: {@link BlockEcComponent}\r\n\t */\r\n\toverride swiperOptions = (): SwiperOptions => {\r\n\t\treturn {\r\n\t\t\tnavigation: true,\r\n\t\t\tbreakpoints: {\r\n\t\t\t\t0: {\r\n\t\t\t\t\tslidesPerView: 1\r\n\t\t\t\t},\r\n\t\t\t\t576: {\r\n\t\t\t\t\tslidesPerView: 2\r\n\t\t\t\t},\r\n\t\t\t\t768: {\r\n\t\t\t\t\tslidesPerView: 4,\r\n\t\t\t\t},\r\n\t\t\t\t992: {\r\n\t\t\t\t\tslidesPerView: 4,\r\n\t\t\t\t},\r\n\t\t\t\t1200: {\r\n\t\t\t\t\tslidesPerView: 4,\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tprivate document?: Document;\r\n\tprivate platformId: any = inject(PLATFORM_ID)\r\n\r\n\t/**\r\n\t * Ejecuta el método `afterNextRender`para cargar las configuraciones necesarias \r\n\t * para el carrusel del banners. Esto debe ser asi debido a que ya debe estar presente\r\n\t * en el Dom el element `<swiper-container>` para poder configurarlo.\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper()\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tthis.document = document\r\n\t\t}\r\n\t\tafterNextRender(() => {\r\n\t\t\tconst swiperElemConstructor = this.document?.querySelector('#' + this.meta?.code)\r\n\t\t\tif (swiperElemConstructor) {\r\n\t\t\t\tObject.assign(swiperElemConstructor!, this.swiperOptions())\r\n\t\t\t\tthis.swiperElement.set(swiperElemConstructor as SwiperContainer)\r\n\t\t\t\tthis.swiperElement()?.initialize();\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\t/**\r\n\t * Aplica el evento `select_promotion` junto con el banner que interactua.\r\n\t * @param banner \r\n\t */\r\n\tselectPromotion(item: any): void {\r\n\t\tthis.analyticsService.callEvent('select_promotion', item)\r\n\t}\r\n}\r\n","<section [ngClass]=\"trimClassBlock(meta.code) + ' container-fluid'\">\r\n\r\n <div class=\"blockProduct block-product\">\r\n @if(meta.name){\r\n <div class=\"row\">\r\n <div class=\"col-12 mt-4\">\r\n <h2 class=\"font-weight-normal font-gd\">\r\n <span>{{meta.name}}</span>\r\n </h2>\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n @if(meta.styles && meta.styles.carrousel == false){\r\n <div class=\"row \">\r\n @for (product of products; track $index) {\r\n <div [class]=\"'item '+ ' col-'+ (meta.styles.items?.sm) + ' col-md-' + (meta.styles.items?.md) + ' col-lg-' + (meta.styles.items?.lg) + ' px-2'\" [id]=\"$index\">\r\n <!-- verifica que si vienen un template para un custom appProduct llamado \"appProduct\" con un objeto \"product\"- sino usa por defecto el del core -->\r\n <ng-container *ngTemplateOutlet=\"appProduct ? appProduct : defaultAppProduct; context: {product:product}\"></ng-container> \r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <swiper-container init=\"false\" [id]=\"meta?.code\">\r\n @for (product of products; track $index) {\r\n <swiper-slide>\r\n <ng-container *ngTemplateOutlet=\"appProduct ? appProduct : defaultAppProduct; context: {product:product}\"></ng-container> \r\n </swiper-slide>\r\n }\r\n </swiper-container>\r\n }\r\n </div>\r\n</section>\r\n\r\n\r\n<!-- componente por defecto (tomara como producto el contexto pasado como \"product\") -->\r\n<ng-template #defaultAppProduct let-product=\"product\" > \r\n <app-product-ec [product]=\"product\"></app-product-ec>\r\n</ng-template>\r\n","import { Component, inject, Input, signal } from '@angular/core';\r\nimport { FormService, ToastService } from '../../../ec-services';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Component({\r\n\tselector: 'app-block-newsletter-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplateUrl: './block-newsletter-ec.component.html',\r\n\tstyleUrl: './block-newsletter-ec.component.scss'\r\n})\r\nexport class BlockNewsletterEcComponent {\r\n\t@Input({ required:true }) block:any;\r\n\t@Input() success_message:string | undefined;\r\n\t@Input() subject:string | undefined;\r\n\r\n\tprivate _contactFormService: FormService = inject(FormService)\r\n\tprivate _toastService:ToastService = inject(ToastService)\r\n\tprivate _formBuilder:FormBuilder = inject(FormBuilder)\r\n public newsletter_form!: FormGroup;\r\n\tpublic loading:boolean = false;\r\n\r\n constructor() {\r\n // Llamar al constructor de la clase padre\r\n \r\n this.newsletter_form = this._formBuilder.group({\r\n name: ['', []],\r\n email: ['', Validators.required],\r\n telephone: ['', []],\r\n subject: ['', []],\r\n body: ['', []],\r\n attachment: [''],\r\n captcha: ['', []],\r\n terms: ['', Validators.required]\r\n });\r\n }\r\n\r\n\tonSubmit(e:any):void{\r\n\t\tthis.loading = true;\r\n\t\te.preventDefault();\r\n\t\tthis.sendForm(this.newsletter_form, 'inquiry-sent');\r\n\t}\r\n\r\n\tsendForm(form:any, success_message:string){\r\n if (form.valid && (form.value.email.includes('@'))) {\r\n const formData = new FormData();\r\n formData.append('mailText', form.value.body)\r\n formData.append('form_code', this.block.code)\r\n this.sendValue('name') && formData.append('name', this.newsletter_form.get('name')?.value)\r\n this.sendValue('email') && formData.append('email', this.newsletter_form.get('email')?.value)\r\n this.sendValue('telephone') && formData.append('telephone', this.newsletter_form.get('telephone')?.value)\r\n this.sendValue('subject') && formData.append('subject', this.newsletter_form.get('subject')?.value)\r\n this.sendValue('body') && formData.append('body', this.newsletter_form.get('body')?.value)\r\n this.sendValue('attachments') && formData.append('attachment', this.newsletter_form.get('attachment')?.value)\r\n\t\t\tfirstValueFrom(this._contactFormService.sendResponse(formData)).then(\r\n (res:any) => {\r\n this.newsletter_form.reset()\r\n this._toastService.show(this.success_message || success_message);\r\n this.loading = false\r\n\r\n },\r\n (err:any) => {\r\n this._toastService.error('inquiry-error');\r\n this.loading = false\r\n }\r\n );\r\n } else {\r\n this._toastService.error('invalid-form');\r\n this.loading = false\r\n }\r\n }\r\n\r\n\tsendValue(key:any){\r\n try {\r\n let keysearch = key[0].toUpperCase() + key.slice(1).toLowerCase();\r\n return this.block && this.block['send' + keysearch] || false\r\n } catch (error) {\r\n console.error(error);\r\n return false\r\n }\r\n }\r\n\r\n \r\n toastNewsletterForm = (e: Event) => {\r\n e.preventDefault();\r\n this.sendForm(this.newsletter_form, 'newsletter-thanks');\r\n }\r\n\r\n}\r\n","<p>block-newsletter-ec works!</p>\r\n","import { Component } from '@angular/core';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n\tselector: 'app-loading-full-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplateUrl: './loading-full-ec.component.html',\r\n\tstyleUrl: './loading-full-ec.component.scss'\r\n})\r\nexport class LoadingFullEcComponent {\r\n\r\n}\r\n","<div [class]=\"'d-flex w-100'\">\r\n <div class=\"w-100 h-100 d-flex flex-row justify-content-center align-items-center\">\r\n <div class=\"spinner-border text-dark spinner-color\" id=\"loading\" role=\"status\">\r\n <span class=\"visually-hidden\">{{ 'loading' }}</span><!-- | translate -->\r\n </div>\r\n </div>\r\n</div>","import { Component } from '@angular/core';\r\nimport { LoadingFullEcComponent } from '../loading-full-ec/loading-full-ec.component';\r\n\r\n@Component({\r\n selector: 'app-loading-section-ec',\r\n standalone: true,\r\n imports: [LoadingFullEcComponent],\r\n templateUrl: './loading-section-ec.component.html',\r\n styleUrl: './loading-section-ec.component.scss'\r\n})\r\nexport class LoadingSectionEcComponent {\r\n\r\n}\r\n","<div id=\"sectionLoading\" class=\"d-flex flex-column position-absolute top-0 opacity-75 bg-white w-100 h-100 justify-content-center align-items-center\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'app-loading-inline-ec',\r\n standalone: true,\r\n imports: [TranslateModule],\r\n templateUrl: './loading-inline-ec.component.html',\r\n styleUrl: './loading-inline-ec.component.scss'\r\n})\r\nexport class LoadingInlineEcComponent {\r\n @Input() type:'border' | 'grow' = 'border';\r\n}\r\n","<div class=\"loading-inline-container\">\r\n <div [class]=\"'spinner-'+type+' text-dark spinner-colo'\" id=\"loading\" role=\"status\">\r\n <span class=\"visually-hidden\">{{ 'loading' | translate }}</span>\r\n </div>\r\n</div>\r\n","import { Component, forwardRef, inject, Input, OnInit, Signal } from '@angular/core';\r\nimport { LoadingFullEcComponent } from \"../loading/loading-full-ec/loading-full-ec.component\";\r\nimport { RecaptchaModule} from \"ng-recaptcha-2\";\r\nimport { ReCaptchaService } from '../../../ec-services';\r\nimport { ControlValueAccessor, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n\tselector: 're-captcha-ec',\r\n\tstandalone: true,\r\n\timports: [LoadingFullEcComponent, RecaptchaModule, ReactiveFormsModule],\r\n\ttemplateUrl: './re-captcha-ec.component.html',\r\n\tstyleUrl: './re-captcha-ec.component.scss',\r\n\tproviders:[\r\n\t\t{\r\n\t\t\tprovide:NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => ReCaptchaEcComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n\r\n})\r\nexport class ReCaptchaEcComponent implements OnInit, ControlValueAccessor {\r\n\t/**\r\n\t * Formulario que contiene al captcha.\r\n\t \r\n\t@Input({required: true}) form!:any;*/\r\n\t/**\r\n\t * Clave para el captcha.\r\n\t */\r\n\t@Input() siteKey:string | undefined;\r\n\r\n\tprivate _recaptchaService: ReCaptchaService = inject(ReCaptchaService);\r\n\r\n\tpublic captcha:any;\r\n\r\n\tprivate onChange!:(value:string) => void;\r\n\tprivate onTouched!:() => void;\r\n\r\n\tngOnInit():void {\r\n\t\tthis._recaptchaService.recaptcha$.subscribe( res => {\r\n\t\t\tconsole.log('recaptcha', res);\r\n\t\t\tthis.captcha = res;\r\n\t\t\tthis.updateSiteKey();\r\n\t\t})\r\n\t}\r\n\t\r\n\tupdateSiteKey() {\r\n\t\tif(this.siteKey) this.captcha.siteKey = this.siteKey;;\r\n\t}\r\n\r\n\tresolved(captchaResponse:any){\r\n\t\t//this.form['recaptcha'] = captchaResponse;\r\n\t\tthis.onChange(captchaResponse);\r\n\t\tthis.onTouched();\r\n\t}\r\n\r\n\twriteValue(obj: any): void {\r\n\t\t//throw new Error('Method not implemented.');\r\n\t}\r\n\tregisterOnChange(fn: any): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\tregisterOnTouched(fn: any): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\tsetDisabledState?(isDisabled: boolean): void {\r\n\t\t//throw new Error('Method not implemented.');\r\n\t}\r\n\r\n}\r\n","@if(captcha.siteKey){\r\n <re-captcha (resolved)=\"resolved($event)\" siteKey=\"{{captcha.siteKey}}\">\r\n </re-captcha>\r\n}@else {\r\n <app-loading-full-ec></app-loading-full-ec>\r\n}","import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { afterNextRender, afterRender, Component, ElementRef, inject, Input, OnInit, PLATFORM_ID, ViewChild } from '@angular/core';\r\n\r\ninterface Size2D { width: number; height: number; }\r\ntype Point2D = { x: number, y: number } | null;\r\n\r\n@Component({\r\n\tselector: '[app-magnizoom-ec]',\r\n\tstandalone: true,\r\n\timports: [CommonModule],\r\n\ttemplateUrl: './magnizoom-ec.component.html',\r\n\tstyleUrl: './magnizoom-ec.component.scss'\r\n})\r\nexport class MagnizoomEcComponent implements OnInit {\r\n\tprivate document:Document | null = null;\r\n private platformId = inject(PLATFORM_ID);\r\n\r\n\tprivate imageSrc:string='';\r\n @Input() set ImageSrc(value:string) { \r\n this.imageSrc = value; \r\n this.loadImage(this.imageSrc); \r\n }\r\n @Input() zoomMode: 'LENS' | 'COVER' = 'COVER';\r\n @Input() minZoomFactor = 1.2;\r\n @Input() maxZoomFactor = 3;\r\n\r\n @Input()\r\n\timageStyle!: { [x: string]: any; };\r\n @Input() imageClass: any;\r\n\r\n @ViewChild('mainCanvas', { static: true }) mainCanvasRef!: ElementRef;\r\n\r\n canvas!: HTMLCanvasElement;\r\n context!: CanvasRenderingContext2D | null;\r\n image!: HTMLImageElement;\r\n\r\n mousePosition: Point2D = null;\r\n lensSize: Size2D = { width: 400, height: 300 };\r\n zoomFactor = 2;\r\n\r\n get canvasWidth() { return this.image && this.image.width || 800; }\r\n get canvasHeight() { return this.image && this.image.height || 600; }\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.document = inject(DOCUMENT); // Solo se inyecta en el navegador\r\n }\r\n\t\tafterRender(()=> {\r\n\t\t\tthis.initContext();\r\n\t\t\tthis.loadImage(this.imageSrc);\r\n\t\t})\r\n\t }\r\n \r\n ngOnInit() {\r\n /* this.initContext();\r\n this.loadImage(this.imageSrc); */\r\n }\r\n\r\n initContext() {\r\n \r\n this.canvas = (this.mainCanvasRef.nativeElement as HTMLCanvasElement);\r\n this.context = this.canvas.getContext('2d');\r\n }\r\n\r\n loadImage(src: string) {\r\n\t\tif(this.document){\r\n\t\t\tthis.image = this.document.createElement('img');\r\n\t\t\tthis.image.onload = () => {\r\n\t\t\t\tthis.lensSize = { width: this.image.width / 2, height: this.image.height / 2 };\r\n\t\t\t\tsetTimeout(() => this.render());\r\n\t\t\t};\r\n\t\t\tthis.image.src = src;\r\n\t\t}\r\n }\r\n\r\n render() {\r\n\t\tif(this.context){\r\n\t\t\tthis.context.clearRect(0, 0, this.canvasWidth, this.canvasHeight); // clear canvas\r\n\t\t\tthis.context.lineWidth = 1; // border width\r\n\t\t\tthis.context.drawImage(this.image, 0, 0); // bg image\r\n\r\n\t\t\tif (this.mousePosition) {\r\n\t\t\t\tswitch (this.zoomMode) {\r\n\t\t\t\t\tcase 'LENS': this.renderLensMode(); break;\r\n\t\t\t\t\tcase 'COVER': this.renderCoverMode(); break;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n }\r\n\r\n renderLensMode() {\r\n\t\tif(this.context){\r\n this.context.lineWidth = 5; // border width\r\n const zoomRect = this.getZoomRect();\r\n this.context.fillRect(zoomRect.x, zoomRect.y, zoomRect.w, zoomRect.h); // bg (clear)\r\n const clippingRect = this.getClippingRect();\r\n // zoom image\r\n this.context.drawImage(\r\n this.image,\r\n clippingRect.x, clippingRect.y, clippingRect.w, clippingRect.h,\r\n zoomRect.x, zoomRect.y, zoomRect.w, zoomRect.h\r\n );\r\n this.context.strokeRect(zoomRect.x, zoomRect.y, zoomRect.w, zoomRect.h); // border\r\n\t}\r\n\t}\r\n\r\n renderCoverMode() {\r\n const covertRect = this.getCoverRect();\r\n this.context && this.context.drawImage(\r\n this.image,\r\n covertRect.x, covertRect.y, covertRect.w, covertRect.h,\r\n 0, 0, this.canvasWidth, this.canvasHeight\r\n ); // cover image\r\n }\r\n\r\n getZoomRect() {\r\n const w = this.lensSize.width;\r\n const h = this.lensSize.height;\r\n const x = this.mousePosition!.x - (w / 2);\r\n const y = this.mousePosition!.y - (h / 2);\r\n return this.clampRect(x, y, w, h);\r\n }\r\n\r\n getClippingRect() {\r\n const w = this.lensSize.width / this.zoomFactor;\r\n const h = this.lensSize.height / this.zoomFactor;\r\n const x = this.mousePosition!.x - (w / 2);\r\n const y = this.mousePosition!.y - (h / 2);\r\n return this.clampRect(x, y, w, h);\r\n }\r\n\r\n getCoverRect() {\r\n const w = this.canvasWidth / this.zoomFactor;\r\n const h = this.canvasHeight / this.zoomFactor;\r\n // const x = this.mousePosition.x - (w / 2);\r\n // const y = this.mousePosition.y - (h / 2);\r\n const x = this.mousePosition!.x - this.mousePosition!.x / this.zoomFactor;\r\n const y = this.mousePosition!.y - this.mousePosition!.y / this.zoomFactor;\r\n return this.clampRect(x, y, w, h);\r\n }\r\n\r\n clampRect(x: number, y: number, w: number, h: number) {\r\n if (x <= 0) { x = 0; }\r\n if (x + w >= this.canvasWidth) { x = this.canvasWidth - w; }\r\n if (y < 0) { y = 0; }\r\n if (y + h >= this.canvasHeight) { y = this.canvasHeight - h; }\r\n return { x, y, w, h };\r\n }\r\n\r\n calculateMousePosition(clientX: number, clientY: number) {\r\n const boundingRect = this.canvas.getBoundingClientRect();\r\n const viewToModelX = this.canvasWidth / boundingRect.width;\r\n const viewToModelY = this.canvasHeight / boundingRect.height;\r\n const x = (clientX - boundingRect.left) * viewToModelX;\r\n const y = (clientY - boundingRect.top) * viewToModelY;\r\n this.mousePosition = { x, y };\r\n }\r\n\r\n onMouseLeave(event: MouseEvent) {\r\n this.mousePosition = null;\r\n this.render();\r\n }\r\n\r\n onMouseEnterOrMove(event: MouseEvent) {\r\n this.calculateMousePosition(event.clientX, event.clientY);\r\n this.render();\r\n }\r\n\r\n onMouseScroll(event: WheelEvent) {\r\n let newZoomFactor = this.zoomFactor;\r\n newZoomFactor -= event.deltaY / 1000;\r\n if (newZoomFactor < this.minZoomFactor) { newZoomFactor = this.minZoomFactor; }\r\n if (newZoomFactor > this.maxZoomFactor) { newZoomFactor = this.maxZoomFactor; }\r\n if (this.zoomFactor !== newZoomFactor) {\r\n this.zoomFactor = newZoomFactor;\r\n this.render();\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n}\r\n","<canvas #mainCanvas\r\n class=\"main-canvas\"\r\n [ngClass]=\"imageClass\"\r\n [ngStyle]=\"imageStyle\"\r\n [width]=\"canvasWidth\"\r\n [height]=\"canvasHeight\"\r\n (mouseleave)=\"onMouseLeave($event)\"\r\n (mouseenter)=\"onMouseEnterOrMove($event)\"\r\n (mousemove)=\"onMouseEnterOrMove($event)\"\r\n (wheel)=\"onMouseScroll($event)\">\r\n</canvas>\r\n","import { Component, inject, Input, signal } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators} from '@angular/forms';\r\nimport { BlocksService, FormService, ToastService } from '../../../ec-services';\r\nimport { Router } from '@angular/router';\r\nimport { BlockEcComponent } from '../../abstractions-components';\r\nimport { LoadingSectionEcComponent, ReCaptchaEcComponent } from '../../widgets-ec';\r\nimport { JsonPipe } from '@angular/common';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Component({\r\n\tselector: 'app-block-form-contact-ec',\r\n\tstandalone: true,\r\n\timports: [ReactiveFormsModule, LoadingSectionEcComponent, ReCaptchaEcComponent],\r\n\ttemplateUrl: './block-form-contact-ec.component.html',\r\n\tstyleUrl: './block-form-contact-ec.component.scss'\r\n})\r\nexport class BlockFormContactEcComponent extends BlockEcComponent {\r\n\t@Input({ required:true }) block:any;\r\n\t@Input() success_message:string | undefined;\r\n\t@Input() redirect:boolean = true;\r\n\t@Input() subject:string | undefined;\r\n\r\n\tprivate _contactFormService: FormService = inject(FormService)\r\n\tprivate _toastService:ToastService = inject(ToastService)\r\n\tprivate _formBuilder:FormBuilder = inject(FormBuilder)\r\n\tprivate _router:Router = inject(Router)\r\n\t\r\n\tprotected form_data:any = new FormData();\r\n\r\n\tpublic loading:boolean = false;\r\n\r\n\tpublic form = signal<FormGroup>(\r\n\t\tthis._formBuilder.group({\r\n\t\t\tname: ['', []],\r\n email: ['', Validators.required],\r\n telephone: ['', []],\r\n subject: ['', []],\r\n body: ['', []],\r\n attachment: [''],\r\n recaptcha: [null, Validators.required], //testear este cambio de nombre\r\n\t\t})\r\n )\r\n\r\n\tonSubmit(e:any):void{\r\n\t\tthis.loading = true;\r\n\t\te.preventDefault();\r\n\t\tthis.sendForm(this.form(), 'inquiry-sent');\r\n\t}\r\n\r\n\tsendForm(form:any, success_message:string){\r\n if (form.valid && (form.value.email.includes('@'))) {\r\n const formData = new FormData();\r\n formData.append('mailText', form.value.body)\r\n formData.append('form_code', this.block.code)\r\n this.sendValue('name') && formData.append('name', this.form().get('name')?.value)\r\n this.sendValue('email') && formData.append('email', this.form().get('email')?.value)\r\n this.sendValue('telephone') && formData.append('telephone', this.form().get('telephone')?.value)\r\n this.sendValue('subject') && formData.append('subject', this.form().get('subject')?.value)\r\n this.sendValue('body') && formData.append('body', this.form().get('body')?.value)\r\n this.sendValue('attachments') && formData.append('attachment', this.form().get('attachment')?.value)\r\n\t\t\tfirstValueFrom(this._contactFormService.sendResponse(formData)).then(\r\n (res:any) => {\r\n this.form().reset()\r\n this._toastService.show(this.success_message || success_message);\r\n this.loading = false\r\n this.redirect && this._router.navigateByUrl('/home');\r\n\r\n },\r\n (err:any) => {\r\n this._toastService.error('inquiry-error');\r\n this.loading = false\r\n }\r\n );\r\n } else {\r\n this._toastService.error('invalid-form');\r\n this.loading = false\r\n }\r\n }\r\n\r\n\tsendValue(key:any){\r\n try {\r\n let keysearch = key[0].toUpperCase() + key.slice(1).toLowerCase();\r\n return this.block && this.block['send' + keysearch] || false\r\n } catch (error) {\r\n console.error(error);\r\n return false\r\n }\r\n }\r\n}\r\n","@if(block){\r\n<div [class]=\"trimClassBlock(block.code) + ' container-fluid'\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12 col-md-12\">\r\n <div class=\"row w-100 m-auto\">\r\n <h5>{{block.name || 'Dejanos tu consulta'}}</h5>\r\n <p class=\"w-100\">{{ block.description || 'Completa el siguiente formulario y responderemos tu consulta a la brevedad' }}</p>\r\n </div>\r\n <form [formGroup]=\"form()\" (submit)=\"onSubmit($event)\" class=\"position-relative\" ><!-- (submit)=\"toastCompleteForm($event)\" -->\r\n @if(block.sendName){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"nombre\">Nombre</label>\r\n <input formControlName=\"name\" type=\"text\"\r\n class=\"form-control form-control-sm required\" id=\"nombre\" placeholder=\"Nombre\">\r\n </div>\r\n }\r\n @if(block.sendEmail){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"mail\">Email</label>\r\n <input formControlName=\"email\" type=\"email\"\r\n class=\"form-control form-control-sm required\" id=\"mail\" placeholder=\"Email\">\r\n </div>\r\n }\r\n @if(block.sendTelephone){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"telefono\">Teléfono</label>\r\n <input formControlName=\"telephone\" type=\"text\"\r\n class=\"form-control form-control-sm required\" id=\"telefono\" placeholder=\"Teléfono\">\r\n </div>\r\n }\r\n @if(block.sendSubject){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"subject\">Asunto</label>\r\n <input formControlName=\"subject\" type=\"text\"\r\n class=\"form-control form-control-sm required\" id=\"subject\" placeholder=\"Asunto\">\r\n </div>\r\n }\r\n @if(block.sendBody){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"mensaje\">Mensaje</label>\r\n <textarea formControlName=\"body\" name=\"mensaje\" id=\"mensaje \" cols=\"30\"\r\n rows=\"5\" placeholder=\"Dejanos tu mensaje\"\r\n class=\"form-control form-control-sm required\"></textarea>\r\n </div>\r\n }\r\n <div class=\"boxContenidoCapcha mb-3\">\r\n <div class=\"contenedorCaptcha\">\r\n <re-captcha-ec formControlName=\"recaptcha\"></re-captcha-ec>\r\n </div>\r\n </div>\r\n\r\n <button type=\"submit\" class=\"btn btn-dark text-uppercase px-5\"\r\n [disabled]=\"form().invalid\">ENVIAR</button>\r\n @if(loading){\r\n <app-loading-section-ec />\r\n }\r\n </form>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n}","import { Component, inject, Input, OnInit, TemplateRef } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BlocksService } from '../../ec-services';\r\nimport { AsyncPipe, JsonPipe } from '@angular/common';\r\nimport { IBlock } from '../../interfaces';\r\nimport { BlockBannerFullEcComponent } from './block-banner-full-ec/block-banner-full-ec.component';\r\nimport { BlockBannerBoxEcComponent } from \"./block-banner-box-ec/block-banner-box-ec.component\";\r\nimport { BlockHtmlEcComponent } from \"./block-html-ec/block-html-ec.component\";\r\nimport { ApiConstantsService } from '../../constants';\r\nimport { BlockProductsEcComponent } from \"./block-products-ec/block-products-ec.component\";\r\nimport { BlockNewsletterEcComponent } from \"./block-newsletter-ec/block-newsletter-ec.component\";\r\nimport { BlockFormContactEcComponent } from \"./block-form-contact-ec/block-form-contact-ec.component\";\r\n/**\r\n * Componente que es utilizado para manejar los distintos tipos\r\n * de bloques y distribuirlos por la aplicación.\r\n * @implements {OnInit}\r\n * @class BlocksEcComponent\r\n */\r\n@Component({\r\n\tselector: 'app-blocks-ec',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tAsyncPipe,\r\n\t\tJsonPipe,\r\n\t\tBlockBannerFullEcComponent,\r\n\t\tBlockBannerBoxEcComponent,\r\n\t\tBlockHtmlEcComponent,\r\n\t\tBlockProductsEcComponent,\r\n\t\tBlockNewsletterEcComponent,\r\n\t\tBlockFormContactEcComponent\r\n\t],\r\n\ttemplateUrl: './blocks-ec.component.html',\r\n\tstyleUrl: './blocks-ec.component.scss'\r\n})\r\nexport class BlocksEcComponent implements OnInit {\r\n\t/**\r\n\t * Servicio de Bloques\r\n\t */\r\n\tprivate _blocksService = inject(BlocksService);\r\n\t/**\tprivate _blocksService = inject(BlocksService);\r\n\r\n\t * Constantes de la API\r\n\t */\r\n\tprivate _apiConstants = inject(ApiConstantsService);\r\n\t/**\r\n\t * Observable de bloques\r\n\t */\r\n\tpublic blocks$: Observable<IBlock[]> | undefined;\r\n\t/**\r\n\t * Nombre de la sección que alberga a los bloques.\r\n\t */\r\n\tprivate _strsection: string | null = null;\r\n\t/**\r\n\t * Colección de Templates para reemplazar en los distintos tipos\r\n\t * de bloque por bloques locales generados en el frontend.\r\n\t */\r\n\t@Input() templates!: TemplateRef<any>;\r\n\t/**\r\n\t * Indicador para cuando se esten cargando los bloques.\r\n\t */\r\n\t@Input() show_loading: boolean = false;\r\n\t/**\r\n\t * Nombre de la sección del bloque. \r\n\t */\r\n\t@Input({\r\n\t\trequired: true,\r\n\t}) set section(value: string | null) {\r\n\t\tthis._strsection = value;\r\n\t\tthis.loadBlocks();\r\n\t}\r\n\t@Input() blockFilters: string[] | null = null;\r\n\tconstructor() { }\r\n\r\n\tngOnInit(): void { }\r\n\t/**\r\n\t * Obtiene el contenido html de un bloque, este método es usado cuando el bloque es de tipo **HTML**\r\n\t * @param block \r\n\t * @returns \r\n\t */\r\n\tgetHTMLContent = (block: IBlock) => block.translations && block.translations[this._apiConstants.LOCALE].content;\r\n\r\n\tisNewsletter(block: any): boolean { return block.contactForm.code.includes('news') };\r\n\r\n\tshowBlock = (block: IBlock) => this.blockFilters ? this.blockFilters.includes(block.code) : true\r\n\r\n\t/**\r\n * Carga los bloques de la sección actual.\r\n */\r\n\tprivate loadBlocks(): void {\r\n\t\tif (this._strsection) {\r\n\t\t\tthis.blocks$ = this._blocksService.getBlocks(this._strsection);\r\n\t\t}\r\n\t}\r\n}\t\r\n","@if(blocks$ | async; as blocks){\r\n @if(blocks.length > 0){\r\n <div class=\"container-fluid px-0\">\r\n <div class=\"row\">\r\n @for (block of blocks; track $index) {\r\n @switch (block.contentType) {\r\n @case ('banner') {\r\n @switch(block.design){\r\n @case ('full') {\r\n <app-block-banner-full-ec [banners]=\"block.banners\" [meta]=\"block\" />\r\n }\r\n @case ('boxes') {\r\n <app-block-banner-box-ec [banners]=\"block.banners\" [meta]=\"block\"/>\r\n }\r\n }\r\n }\r\n @case ('html') {\r\n @if(showBlock(block)){\r\n <app-block-html-ec [html_content]=\"getHTMLContent(block)\" />\r\n }\r\n }\r\n @case ('products') {\r\n <app-block-products-ec [products]=\"block.products?.items\" [meta]=\"block\" />\r\n }\r\n @case ('contact_form') {\r\n @if(isNewsletter(block)){\r\n <app-block-newsletter-ec [block]=\"block.contactForm\" />\r\n } @else {\r\n <app-block-form-contact-ec [block]=\"block.contactForm\" />\r\n }\r\n }\r\n }\r\n }\r\n </div>\r\n </div>\r\n }@else {\r\n <p>Loading... 2</p>\r\n }\r\n}@else {\r\n<p>Loading...</p>\r\n}","import { afterNextRender, Component, HostListener, inject, Input, OnInit, PLATFORM_ID, signal } from '@angular/core';\r\nimport { DefaultFilter, FilterType, PaginationSettings, Product } from '../../interfaces';\r\nimport { AuthService, FiltersService, OptionsService, ProductsService } from '../../ec-services';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { CoreConstantsService } from '../../constants';\r\nimport { combineLatest, forkJoin, map, Observable, take } from 'rxjs';\r\nimport { Filter } from '../../classes';\r\nimport { InfiniteScrollDirective } from \"ngx-infinite-scroll\";\r\nimport { isPlatformBrowser } from '@angular/common';\r\n@Component({\r\n\tselector: 'lib-collection-ec',\r\n\tstandalone: true,\r\n\timports: [InfiniteScrollDirective],\r\n\ttemplateUrl: './collection-ec.component.html',\r\n\tstyleUrl: './collection-ec.component.scss'\r\n})\r\nexport class CollectionEcComponent implements OnInit {\r\n\r\n\tprotected _productsService: ProductsService = inject(ProductsService)\r\n\tprotected _activeRoute: ActivatedRoute = inject(ActivatedRoute)\r\n\tprotected _optionsService: OptionsService = inject(OptionsService)\r\n\r\n\tpublic params$ = this._activeRoute.params\r\n\t//public ready = this._optionsService.ready\r\n\tpublic queryParams$ = this._activeRoute.queryParams\r\n\tpublic products$ = this._productsService.products$\r\n\t//public products$ = []\r\n\r\n\tpublic authService: AuthService = inject(AuthService)\r\n\tpublic constanst: CoreConstantsService = inject(CoreConstantsService)\r\n\r\n\tpublic products: Product[] = [];\r\n\tpublic defaultFilters: DefaultFilter[] = [];\r\n\tpublic loading:Boolean = false;\r\n\tpublic countProducts = signal<number>(0)\r\n\tprivate loaded = false;\r\n\r\n\t@Input() optionsFilters: FilterType[] = ['all'];\r\n\r\n\tfilters_sort:Filter[] = [];\r\n\r\n\tprivate _filtersService: FiltersService = inject(FiltersService)\r\n public filters$: Observable<Filter[]> = this._filtersService.filters$;\r\n\tpublic ready$: Observable<boolean> = this._filtersService.ready$;\r\n\r\n\tprivate window?:Window;\r\n\r\n\tngOnInit(): void {\r\n\t \tthis.getProducts();\r\n\t\tthis.window?.scroll(0, 0)\r\n\t}\r\n\r\n\t//protected readonly questions = signal<Question[]>([]);\r\n\tprivate total = 0;\r\n\tprivate platformId: any = inject(PLATFORM_ID)\r\n\r\n\tconstructor() {\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tthis.window = window\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\tgetProducts(): void {\r\n\t\tcombineLatest([this.params$, this.queryParams$]).subscribe({\r\n\t\t\tnext: ([params, queryParams]) => {\r\n\t\t\t\tconst paginationSettings:PaginationSettings = {\r\n\t\t\t\t\tlatest:true,\r\n\t\t\t\t\tlimit:10,\r\n\t\t\t\t\ttype: params['type'] || null,\r\n\t\t\t\t\tvalue: params['value'] || null\r\n\t\t\t\t}\r\n\t\t\t\t//console.log(ready,\"actualizar\")\r\n\t\t\t\tconsole.log(params['type'], params['value'])\r\n\t\t\t\t/* console.log(paginationSettings) */\r\n\t\t\t\tthis._productsService.getProductsForFilter(paginationSettings, queryParams[\"search\"]);\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tonScroll() {\r\n\t\tthis.loading = true;\r\n this._productsService.updateProducts()\r\n\t }\r\n\r\n}\r\n","<section class=\"container-xl mb-5\">\r\n <div class=\"row m-0 p-0\">\r\n <div class=\"d-none d-lg-block col-3\">\r\n <!--Filtros-->\r\n </div>\r\n\r\n <div class=\"col-12 col-lg-9 mt-2 p-0\">\r\n <div class=\"container\">\r\n <!-- @for(['a', 'b', 'c', 'd'] as product){\r\n\r\n } -->\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</section>\r\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\r\nimport { FiltersService } from '../../ec-services';\r\nimport { Filter } from '../../classes';\r\nimport { FilterElement } from '../../interfaces';\r\n//import { FilterElement } from ';\r\n\r\n@Component({\r\n\tselector: 'app-filters-sort-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplateUrl: './filters-sort-ec.component.html',\r\n\tstyleUrl: './filters-sort-ec.component.scss'\r\n})\r\nexport class FiltersSortEcComponent {\r\n\tprivate _filtersService: FiltersService = inject(FiltersService);\r\n\tpublic filters: Filter[] = [];\r\n\tpublic filter$ = this._filtersService.filters$;\r\n\t//@Input() filters: Filter[] = [];\r\n\t@Output() changeFilter = new EventEmitter();\r\n\r\n\tconstructor() {\r\n\t\tthis.filter$.subscribe( res => {\r\n\t\t\tthis.filters = this._filtersService.getSpecificFilters(['sort'])\r\n\t\t\t//console.log(this.filters);\r\n\t\t})\r\n\t}\r\n\r\n\t/*Obtiene el filtro elegido en el select, lo pasa al setSelect\r\n para que se marque seleccionado*/\r\n onSelect(event:any,filter:FilterElement[]){\r\n //console.log(filter)\r\n const selectedOption = filter\r\n .flatMap(category => category.children)\r\n .filter(option => option?.code === event.target.value)\r\n .pop()\r\n selectedOption && this._filtersService.setFilterSelected(this.filters[0], selectedOption)\r\n }\r\n\r\n /* Retornar los filtros autorizados para el usuario logueado */\r\n /* filtersNotAuth = (filters, ...code) => {\r\n //console.log(this.filters)\r\n if (!this.authService.isAuthenticated()) {\r\n filters = filters.filter(attr => code.indexOf(attr['code']) >= 0)\r\n this.filters[0].data = filters\r\n }\r\n return filters\r\n } */\r\n\r\n}\r\n","<p>filters-sort works!</p>\r\n","import { Component, EventEmitter, inject, Input, Output, signal } from '@angular/core';\r\nimport { LoadingSectionEcComponent } from '../../widgets-ec';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { Router, RouterLink } from '@angular/router';\r\nimport { AuthService, ToastService } from '../../../ec-services';\r\nimport { UserRoleType } from '../../../interfaces';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { JsonPipe } from '@angular/common';\r\n\r\n@Component({\r\n\tselector: 'app-login-form-ec',\r\n\tstandalone: true,\r\n\timports: [LoadingSectionEcComponent, ReactiveFormsModule, RouterLink, JsonPipe],\r\n\ttemplateUrl: './login-form-ec.component.html',\r\n\tstyleUrl: './login-form-ec.component.scss'\r\n})\r\nexport class LoginFormEcComponent {\r\n\tprivate _authService:AuthService = inject(AuthService);\r\n\tprivate _formBuilder:FormBuilder = inject(FormBuilder);\r\n\tprivate _toastService:ToastService = inject(ToastService);\r\n\tprivate _router:Router = inject(Router);\r\n\t/**\r\n\t * Parametro para indicar si tras loguear\r\n\t * debe redireccionar o no.\r\n\t */\r\n\t@Input() redirect:boolean = true;\r\n\t/**\r\n\t * Parametro para indicar a donde redireccionar.\r\n\t */\r\n\t@Input() redirectTo:string = '/';\r\n\t@Output() ready = new EventEmitter();\r\n\t/**\r\n\t * Muestra si esta cargando o no.\r\n\t */\r\n\tpublic loading: boolean = false;\r\n\tpublic loggedIn: boolean = false;\r\n\t/**\r\n\t * Signal que guarda el formulario de login.\r\n\t */\r\n\tpublic loginForm: any = signal<FormGroup>(\r\n\t\tthis._formBuilder.group({\r\n\t\t\tusername: ['', Validators.required],\r\n\t\t\tpassword: ['', Validators.required]\r\n\t\t})\r\n\t);\r\n\t/**\r\n\t * Loguea al usuario en la plataforma.\r\n\t * @param $event \r\n\t * @param withRoles \r\n\t * @returns \r\n\t */\r\n\tpublic login($event: Event, withRoles: UserRoleType[] = []){\r\n\t\t$event.preventDefault();\r\n\t\tthis.loading = true;\r\n\t\tif(!this.loginForm().valid){\r\n\t\t\tthis._toastService.show('login-form-incomplete')\r\n\t\t\tthis.loading = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tfirstValueFrom(this._authService.login(this.loginForm().value, withRoles)).then(\r\n\t\t\t(res:any) => {\r\n\t\t\t\tconsole.log(res);\r\n\t\t\t\tif(res == 'ok'){\r\n\t\t\t\t\tthis.ready.emit(this.loginForm().value.username);\r\n\t\t\t\t\tthis.loggedIn = true;\r\n\t\t\t\t\tthis.redirect && this.redirectHome();\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif(res == 'error'){\r\n\t\t\t\t\t\tthis._toastService.error('invalid-credentials')\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t},\r\n\t\t\t(err:any) => {\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n\t/**\r\n\t * Si el servicio de auth tiene configurado a donde volver, se ejecutar ese caso.\r\n\t * De lo contrario redirige al contenido de la variable `redirectTo`.\r\n\t */\r\n\tredirectHome(){\r\n const resolverFunction = this._authService.getHomeResolver()\r\n resolverFunction\r\n ? resolverFunction()\r\n : this._router.navigateByUrl(this.redirectTo)\r\n }\r\n\r\n}\r\n","<div class=\"d-flex flex-column position-relative\">\r\n <h1 class=\"right-line ff-ubuntu-light mb-2\"><span>Ingresar</span></h1>\r\n <p class=\"ff-ubuntu-light font-sm pr-4\">\r\n Si ya estás registrado. Ingresa en tu cuenta con tu email y la\r\n contraseña adecuada.\r\n </p>\r\n <div class=\"w-md-50 w-100 text-center\">\r\n <form [formGroup]=\"loginForm()\" (submit)=\"login($event)\">\r\n <input class=\"form-control mb-4 radius-0\" type=\"email\" formControlName=\"username\"\r\n placeholder=\"Correo Electrónico\">\r\n <input class=\"form-control mb-4 radius-0\" type=\"password\" formControlName=\"password\"\r\n placeholder=\"Contraseña\">\r\n\r\n <div class=\"row d-flex flex-column\">\r\n <div class=\"col-12\">\r\n <button type=\"submit\"\r\n class=\"bg-gray border-0 px-4 py-2 color-white ff-ubuntu-light\">INGRESAR</button>\r\n </div>\r\n <div class=\"col-12 d-flex justify-content-center align-items-center\">\r\n <a [routerLink]=\"'/auth/forgot-password'\" class=\"font-md ff-ubuntu-light\">\r\n ¿Olvidó su contraseña?\r\n </a>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n @if(loading){\r\n <app-loading-section-ec></app-loading-section-ec>\r\n }\r\n</div>","import { Component } from '@angular/core';\r\nimport { LoginFormEcComponent } from \"./login-form-ec/login-form-ec.component\";\r\n\r\n@Component({\r\n selector: 'app-auth-ec',\r\n standalone: true,\r\n imports: [LoginFormEcComponent],\r\n templateUrl: './auth-ec.component.html',\r\n styleUrl: './auth-ec.component.scss'\r\n})\r\nexport class AuthEcComponent {\r\n\r\n}\r\n","<div class=\"container-xl\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 col-12\">\r\n <app-login-form-ec />\r\n </div>\r\n <div class=\"col-md-6 col-12\">\r\n \r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, inject, signal } from '@angular/core';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { LoadingInlineEcComponent } from \"../../widgets-ec/loading\";\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { AuthService, ToastService } from '../../../ec-services';\r\n\r\n@Component({\r\n\tselector: 'app-forgot-password-ec',\r\n\tstandalone: true,\r\n\timports: [TranslateModule, ReactiveFormsModule, LoadingInlineEcComponent],\r\n\ttemplateUrl: './forgot-password-ec.component.html',\r\n\tstyleUrl: './forgot-password-ec.component.scss'\r\n})\r\nexport class ForgotPasswordEcComponent {\r\n\tprivate _formBuilder: FormBuilder = inject(FormBuilder);\r\n\tprivate _authService: AuthService = inject(AuthService);\r\n\tprivate _toastService: ToastService = inject(ToastService);\r\n\t/**\r\n\t * Para indicarle a la vista que se realizo con exito la petición\r\n\t */\r\n\tpublic ready: boolean = false;\r\n\t/**\r\n\t * Para mostrar el spinner.\r\n\t */\r\n\tpublic loading: boolean = false;\r\n\r\n\t/**\r\n\t * Contiene el formulario.\r\n\t */\r\n\tpublic form:FormGroup;\r\n\r\n\tconstructor(){\r\n\t\tthis.form = this._formBuilder.group({\r\n\t\t\temail: ['', [Validators.required, Validators.email]],\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Genera una petición al backend para recuperar la contraseña.\r\n\t * @param event \r\n\t */\r\n\trecoverPassword = (event:Event) => {\r\n\t\tevent.preventDefault();\r\n\t\tthis.loading = true;\r\n\t\tfirstValueFrom(this._authService.recoverPassword(this.form.value.email))\r\n\t\t\t.then((res:any) => {\r\n\t\t\t\tthis.ready = true\r\n\t\t\t}).catch((res:any) => {\r\n\t\t\t\t(!res || res.error)\r\n\t\t\t\t? this._toastService.show('non-existent-email')\r\n\t\t\t\t: this._toastService.show(res.error);\r\n\t\t\t}).finally(() => this.loading = false)\r\n\t}\r\n}\r\n","<div class=\"container\" id=\"passReset\">\r\n @if(!ready){\r\n <div>\r\n <form [formGroup]=\"form\" (submit)=\"recoverPassword($event)\" class=\"row justify-content-center\">\r\n <div class=\"col-12 col-md-10 text-center\">\r\n <h3>{{ 'set-forgot-email' | translate }}</h3>\r\n <div class=\"element-container\">\r\n <input type=\"email\" class=\"form-control\" formControlName=\"email\" />\r\n </div>\r\n <button class=\"btn btn-primary btn-passreset my-2\" type=\"submit\" [disabled]=\"form.invalid\">{{ 'recover-password' | translate\r\n }}</button>\r\n @if(loading)\r\n {\r\n <app-loading-inline-ec />\r\n }\r\n </div>\r\n </form>\r\n </div>\r\n } @else {\r\n <div class=\"row d-flex justify-content-center\">\r\n <div class=\"col-12 col-md-8\">\r\n <div class=\"element-container text-center\">\r\n <h3>{{ 'mail-sent' | translate }}</h3>\r\n </div>\r\n <div class=\"element-container text-center\">\r\n <h5 class=\"center-text\">{{ 'check-your-email' | translate }}</h5>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>","import { UpperCasePipe } from '@angular/common';\r\nimport { Component, inject, OnInit } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { AuthService } from '../../../ec-services';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Component({\r\n\tselector: 'app-confirm-account-ec',\r\n\tstandalone: true,\r\n\timports: [TranslateModule, UpperCasePipe],\r\n\ttemplateUrl: './confirm-account-ec.component.html',\r\n\tstyleUrl: './confirm-account-ec.component.scss'\r\n})\r\nexport class ConfirmAccountEcComponent implements OnInit {\r\n\r\n\tprivate _authService: AuthService = inject(AuthService)\r\n\tprivate _activedRoute: ActivatedRoute = inject(ActivatedRoute)\r\n\r\n\tpublic ok:boolean = false;\r\n\tpublic error:boolean = false;\r\n\r\n\tngOnInit(): void {\r\n\t\tconst token = this._activedRoute.snapshot.queryParams['token'];\r\n\t\tfirstValueFrom(this._authService.confirmAccount(token))\r\n\t\t\t.then( res => {\r\n\t\t\t\tthis.ok = true;\r\n\t\t\t}).catch( res => {\r\n\t\t\t\tthis.error = true;\r\n\t\t\t});\r\n\t}\r\n\r\n\r\n}\r\n","<div class=\"mt-5 mb-5\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 col-12 text-center\">\r\n <h4 class=\"confirm-title text-white py-3 text-uppercase d-inline-block\">\r\n {{ ('thanks-for-register' | translate) | uppercase }}</h4>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"row\">\r\n <div class=\"col-md-12 col-12 text-center\">\r\n <h4>{{ 'thanks-for-register-detail' | translate }}</h4>\r\n <a routerLink=\"/auth/login\">\r\n <button class=\"btn btn-primary my-4\" type=\"button\">{{ 'login' | translate |\r\n uppercase }}</button>\r\n </a>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\r\nimport { AnalyticsService, AuthService, ToastService } from '../../../ec-services';\r\nimport { Router } from '@angular/router';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { LoadingSectionEcComponent } from \"../../widgets-ec/loading\";\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Component({\r\n\tselector: 'app-register-form-ec',\r\n\tstandalone: true,\r\n\timports: [ReactiveFormsModule, LoadingSectionEcComponent],\r\n\ttemplateUrl: './register-form-ec.component.html',\r\n\tstyleUrls: ['./register-form-ec.component.scss']\r\n})\r\nexport class RegisterFormEcComponent {\r\n\tprivate _authService: AuthService = inject(AuthService);\r\n\tprivate _toastService: ToastService = inject(ToastService);\r\n\tprivate _router: Router = inject(Router);\r\n\tprivate _analyticsService: AnalyticsService = inject(AnalyticsService);\r\n\tprivate _formBuilder: FormBuilder = inject(FormBuilder);\r\n\t /**\r\n * Indica si debe redireccionar o se queda en la misma pantalla\r\n */\r\n\t@Input() redirect:boolean = true;\r\n\t/**\r\n * Para que se puede capturar el estado de la petición de registro.\r\n */\r\n\t@Output() ready = new EventEmitter();\r\n\t/**\r\n\t * Contiene el formulario de registro.\r\n\t */\r\n\tpublic form: FormGroup;\r\n\t/**\r\n\t * Para indicar que se esta procesando la solicitud de registro.\r\n\t */\r\n\tpublic loading: boolean = false;\r\n\t/**\r\n\t * Para indicar el exito de la solicitud de registro.\r\n\t */\r\n\tpublic success: boolean = false;\r\n\r\n\tconstructor() {\r\n\t\tthis.form = this._formBuilder.group({\r\n\t\t\tfirstName: ['', Validators.required],\r\n\t\t\tlastName: ['', Validators.required],\r\n\t\t\temail: ['', [Validators.required, Validators.email]],\r\n\t\t\tplainPassword: ['', Validators.required],\r\n\t\t\tplainPassword2: ['', Validators.required],\r\n\t\t\tnewsletter: [false],\r\n\t\t\tterms: ['', Validators.required],\r\n\t\t});\r\n\t}\r\n\t/**\r\n\t * Registra un usuario.\r\n\t * @param event \r\n\t * @returns \r\n\t */\r\n\tregister(event: Event){\r\n\t\tevent.preventDefault();\r\n\t\tthis.loading = true;\r\n\t\tif (!this.form.valid) {\r\n this._toastService.show('fields-incomplete');\r\n this.loading = false\r\n return;\r\n };\r\n\t\tif (this.form.value.plainPassword != this.form.value.plainPassword2) {\r\n this._toastService.show('mismatched-password');\r\n this.loading = false\r\n return;\r\n }\r\n\t\tif(this.form.valid){\r\n\t\t\tfirstValueFrom(this._authService.singUp(this.form.value)).then(\r\n\t\t\t\tres => {\r\n\t\t\t\t\tthis.loading = false\r\n\t\t\t\t\tthis._toastService.success('register-ok')\r\n\t\t\t\t\tthis._analyticsService.callEvent('sign_up', {\r\n\t\t\t\t\t\tfirstName: this.form.value.firstName,\r\n\t\t\t\t\t\tlastName: this.form.value.lastName,\r\n\t\t\t\t\t\temail: this.form.value.email\r\n\t\t\t\t\t})\r\n\t\t\t\t\tthis.success = true\r\n\t\t\t\t\tthis.ready.emit(true)\r\n\t\t\t\t\tif(this.redirect){\r\n\t\t\t\t\t\tthis._router.navigateByUrl('home')\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\terr => {\r\n\t\t\t\t\tthis.loading = false\r\n\t\t\t\t\tif(err.status == 400){\r\n\t\t\t\t\t\tthis._toastService.show('email-already-registered')\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis._toastService.error('email-register-error')\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t} else {\r\n\t\t\tthis._toastService.show('invalid-form')\r\n\t\t\tthis.loading = false\r\n\t\t}\r\n\t}\r\n\r\n}\r\n","<div class=\"w-100 pl-md-5 position-relative\" id=\"register\">\r\n <div class=\"py-2\">\r\n <h5>CREAR CUENTA</h5>\r\n </div>\r\n <form id=\"registro\" [formGroup]=\"form\" (submit)=\"register($event)\">\r\n <div class=\"form-group\">\r\n <label for=\"\" class=\"form-label\">NOMBRE</label>\r\n <input formControlName=\"firstName\" class=\"form-control rounded-0\" type=\"text\" placeholder=\"Nombre\">\r\n </div>\r\n <div class=\"form-group\">\r\n <label for=\"\" class=\"form-label\">APELLIDO</label>\r\n <input formControlName=\"lastName\" class=\"form-control rounded-0\" type=\"text\" placeholder=\"Apellido\">\r\n </div>\r\n <div class=\"form-group\">\r\n <label for=\"\" class=\"\">CORREO ELECTRONICO</label>\r\n <input formControlName=\"email\" email required class=\"form-control rounded-0\" type=\"email\"\r\n placeholder=\"Correo electrónico\">\r\n </div>\r\n <div class=\"form-group\">\r\n <label for=\"\" class=\"form-label\">CONTRASEÑA</label>\r\n <input formControlName=\"plainPassword\" required class=\"form-control rounded-0\" type=\"password\"\r\n placeholder=\"Contraseña\">\r\n </div>\r\n <div class=\"form-group\">\r\n <label for=\"\" class=\"form-label\">REPETIR CONTRASEÑA</label>\r\n <input formControlName=\"plainPassword2\" required class=\"form-control rounded-0\" type=\"password\"\r\n placeholder=\"Repetir contraseña\">\r\n </div>\r\n\r\n <div class=\"custom-control d-flex flex-row form-check custom-checkbox mr-sm-2 mt-4 mb-2\">\r\n <input type=\"checkbox\" formControlName=\"terms\" required class=\"custom-control-input form-check-input\" name=\"Color2\"\r\n id=\"Color2\">\r\n <label class=\"custom-control-label ff-ubuntu-light font-sm form-check-label\" for=\"Color2\"> He\r\n leído y acepto las políticas de privacidad y los términos y\r\n condiciones</label>\r\n </div>\r\n\r\n <div class=\"custom-control d-flex flex-row form-check custom-checkbox mr-sm-2 mb-4\">\r\n <input type=\"checkbox\" formControlName=\"newsletter\" class=\"custom-control-input form-check-input\" name=\"Color3\" id=\"Color3\">\r\n <label class=\"custom-control-label form-check-label ff-ubuntu-light font-sm\" for=\"Color3\">\r\n Suscripción al Newsletter</label>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <button [disabled]=\"form.invalid\" type=\"submit\"\r\n class=\"btn btn-primary px-5 py-2 h-fit\">CREAR</button>\r\n </div>\r\n </div>\r\n </form>\r\n @if(loading){\r\n <app-loading-section-ec />\r\n }\r\n \r\n</div>\r\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\r\nimport { LoadingSectionEcComponent } from \"../../widgets-ec/loading\";\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { AuthService, FormService, ToastService } from '../../../ec-services';\r\nimport { AsyncPipe, JsonPipe } from '@angular/common';\r\nimport { Router, RouterLink } from '@angular/router';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-register-wholesaler-form-ec',\r\n standalone: true,\r\n imports: [LoadingSectionEcComponent, ReactiveFormsModule, TranslateModule, AsyncPipe, JsonPipe, RouterLink],\r\n templateUrl: './register-wholesaler-form-ec.component.html',\r\n styleUrl: './register-wholesaler-form-ec.component.scss'\r\n})\r\nexport class RegisterWholesalerFormEcComponent {\r\n private _formBuilder: FormBuilder = inject(FormBuilder)\r\n private _formService: FormService = inject(FormService)\r\n private _toastService: ToastService = inject(ToastService)\r\n private _authService: AuthService = inject(AuthService)\r\n private _router: Router = inject(Router)\r\n /**\r\n * Indica si debe redireccionar o se queda en la misma pantalla\r\n */\r\n @Input() redirect: boolean = true;\r\n /**\r\n * Para que se puede capturar el estado de la petición de registro.\r\n */\r\n @Output() ready = new EventEmitter();\r\n /**\r\n * Contiene los paises y sus datos\r\n */\r\n public countries$ = this._formService.getCountriesData();\r\n /**\r\n * Contiene las provincias\r\n */\r\n public provinces$ = this._formService.provinces$;\r\n /**\r\n * Contiene los tipos de documentos.\r\n */\r\n public documentTypes$ = this._formService.documentTypes$;\r\n /**\r\n * Contiene el formulario de registro.\r\n */\r\n public form: FormGroup;\r\n /**\r\n * Para indicar cuando se esta procesando el registro.\r\n */\r\n public loading: boolean = false;\r\n /**\r\n * Para indicar cuando se proceso con exito el registro.\r\n */\r\n public success: boolean = false;\r\n\r\n constructor() {\r\n this.form = this._formBuilder.group({\r\n firstName: ['', [Validators.required]],\r\n lastName: ['', [Validators.required]],\r\n documentType: [null, [Validators.required]],\r\n documentNumber: ['', [Validators.required]],\r\n email: ['', [Validators.required, Validators.email]],\r\n plainPassword: [''],\r\n plainPassword2: ['', []],\r\n countryCode: [null, Validators.required],\r\n street: [null, [Validators.maxLength(50)]],\r\n city: ['', Validators.required],\r\n postcode: ['', Validators.required],\r\n provinceName: ['', Validators.required],\r\n provinceCode: [null, Validators.required],\r\n companyName: ['', [Validators.required]],\r\n phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],\r\n gender: [null, []],\r\n birthday: [null, [Validators.maxLength(11)]],\r\n taxIdentification: ['', Validators.required],\r\n comments: ['', []],\r\n contactFirstName: ['', []],\r\n contactLastName: ['', []],\r\n contactCompanyPosition: ['', []],\r\n contactEmail: ['', []],\r\n contactDocumentType: ['', []],\r\n contactDocumentNumber: ['', []],\r\n subscribedToNewsletter: [false],\r\n terms: [true, Validators.required],\r\n });\r\n }\r\n /**\r\n * Registra un usuario.\r\n * @param event \r\n * @returns \r\n */\r\n register(event: Event) {\r\n event.preventDefault()\r\n this.loading = true;\r\n if (!this.form.valid) {\r\n this._toastService.show('fields-incomplete');\r\n this.loading = false\r\n return;\r\n };\r\n if (this.form.valid) {\r\n firstValueFrom(this._authService.signUpWholesaler(this.form.value)).then(\r\n (res: any) => {\r\n this.loading = false;\r\n this._toastService.show('register-ok');\r\n this.success = true;\r\n this.ready.emit(true);\r\n if (this.redirect) {\r\n this._router.navigateByUrl('home')\r\n }\r\n },\r\n (error: any) => {\r\n this.loading = false;\r\n if (error.status == 400) {\r\n this._toastService.show('email-already-registered');\r\n } else {\r\n this._toastService.show('email-register-error');\r\n }\r\n }\r\n )\r\n } else {\r\n this._toastService.show('invalid-form');\r\n this.loading = false;\r\n }\r\n }\r\n /**\r\n * Captura el evento de cuando cambia un pais en el `<select>`\r\n * @param event \r\n */\r\n onCountrySelected = (event: any) => {\r\n const { value } = event.target;\r\n //$('#selectOpPais').attr('disabled', true);\r\n this.form.controls['countryCode'].setValue(value);\r\n this.form.controls['provinceCode'].setValue('null');\r\n //value != '' && this.provincesSubject.next(this.countriesSubject.value.find(country => country.code == value).provinces);\r\n if (value != '' || value != 'null') {\r\n this._formService.onCountrySelected(value);\r\n }\r\n }\r\n /**\r\n * Captura el evento de cuando cambia una provincia/estado en el `<select>`\r\n * @param event \r\n * @param provinces lista de provincias para obtener el nombre de la seleccionada.\r\n */\r\n onProvincesSelected = (event: any, provinces: any) => {\r\n const { value } = event.target;\r\n this.form.controls['provinceName'].setValue(provinces.find((province: any) => province.code == value).name);\r\n }\r\n\r\n}\r\n","<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"\">\r\n <div class=\"pt-5 pb-3 border-bottom\">\r\n <h3 class=\"my-auto mx-2 text-left w-fit bold text-beige1 white-space-md-nowrap\">CREAR CUENTA\r\n MAYORISTA</h3>\r\n </div>\r\n <div class=\" py-3\">\r\n <p>Si todavia no tienes una cuenta de grandes consumidores en nuestra plataforma, registrate\r\n ingresando estos\r\n datos:</p>\r\n </div>\r\n <form [formGroup]=\"form\" (submit)=\"register($event)\" class=\"position-relative\">\r\n <div class=\"row w-100 mx-auto d-flex justify-content-center px-0 py-3\">\r\n\r\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">Nombre</label>\r\n <input type=\"text\" id=\"\" placeholder=\"Nombre\" required name=\"firstName\"\r\n formControlName=\"firstName\"\r\n [class]=\"form.controls['firstName'].touched ? (form.controls['firstName'].valid && form.controls['firstName'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">El nombre es un campo obligatorio.</span>\r\n </div>\r\n </div>\r\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">Apellidos</label>\r\n <input type=\"text\" id=\"\" placeholder=\"Apellido\" required name=\"lastName\"\r\n formControlName=\"lastName\"\r\n [class]=\"form.controls['lastName'].touched ? (form.controls['lastName'].valid && form.controls['lastName'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">El apellido es un campo obligatorio.</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">Email</label>\r\n <input type=\"email\" id=\"\" placeholder=\"Email\" email required name=\"email\"\r\n formControlName=\"email\"\r\n [class]=\"form.controls['email'].touched ? (form.controls['email'].valid && form.controls['email'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">El email no posee un formato correcto.</span>\r\n </div>\r\n </div>\r\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">Contraseña</label>\r\n <input type=\"password\" id=\"\" placeholder=\"Contraseña\" required name=\"plainPassword\"\r\n formControlName=\"plainPassword\"\r\n [class]=\"form.controls['plainPassword'].touched ? (form.controls['plainPassword'].valid && form.controls['plainPassword'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">La contraseña es un campo obligatorio.</span>\r\n </div>\r\n </div>\r\n @if(documentTypes$ | async; as documentTypes){\r\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">{{'document-type'|translate}}</label>\r\n <select name=\"documentType\" formControlName=\"documentType\" required\r\n [class]=\"form.controls['documentType'].touched ? (form.controls['documentType'].valid && form.controls['documentType'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <option [value]=\"null\" id=\"selectDocumentType\" disabled>Seleccione un tipo</option>\r\n @for (type of documentTypes; track $index) {\r\n <option [value]=\"type.code\">{{ type.name }}</option>\r\n }\r\n </select>\r\n <span class=\"invalid-feedback\">{{'document-type-help'|translate}}</span>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">{{'document-number'|translate}}</label>\r\n <input type=\"text\" id=\"\" placeholder=\"{{'document-number'|translate}}\" required\r\n name=\"documentNumber\" formControlName=\"documentNumber\"\r\n [class]=\"form.controls['documentNumber'].touched ? (form.controls['documentNumber'].valid && form.controls['documentNumber'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">{{'document-type-help'|translate}}</span>\r\n </div>\r\n </div>\r\n\r\n @if(countries$ | async; as countries ){\r\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">{{'country'|translate}}</label>\r\n <select name=\"countryCode\" formControlName=\"countryCode\" required (change)=\"onCountrySelected($event)\"\r\n [class]=\"form.controls['countryCode'].touched ? (form.controls['countryCode'].valid && form.controls['countryCode'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <option [value]=\"null\" id=\"selectOpPais\" disabled>Seleccione un pais</option>\r\n @for (country of countries; track $index) {\r\n <option [value]=\"country.code\"> {{ country.name }}</option>\r\n }\r\n </select>\r\n <span class=\"invalid-feedback\">{{'country-help'|translate}}</span>\r\n </div>\r\n </div>\r\n }\r\n @if(provinces$ |async ; as provinces){\r\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">{{'state'|translate}}</label>\r\n <select name=\"provinceCode\" formControlName=\"provinceCode\" required (change)=\"onProvincesSelected($event, provinces)\"\r\n [class]=\"form.controls['provinceCode'].touched ? (form.controls['provinceCode'].valid && form.controls['provinceCode'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <option [value]=\"null\" id=\"selectOpProvincia\" disabled>Seleccione una provincia\r\n </option>\r\n @for (province of provinces; track $index) {\r\n <option [value]=\"province.code\">{{ province.name }}</option>\r\n }\r\n </select>\r\n <span class=\"invalid-feedback\">{{'state-help'|translate}}</span>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">{{'address'|translate}}</label>\r\n <input placeholder=\"{{'address'|translate}}\" required type=\"text\" name=\"street\"\r\n formControlName=\"street\"\r\n [class]=\"form.controls['street'].touched ? (form.controls['street'].valid && form.controls['street'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">{{'address-help1'|translate}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">{{'town-city'|translate}}</label>\r\n <input placeholder=\"{{'town-city'|translate}}\" required type=\"text\" name=\"city\"\r\n formControlName=\"city\"\r\n [class]=\"form.controls['city'].touched ? (form.controls['city'].valid && form.controls['city'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">{{'town-city-help'|translate}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-6 px-0 pl-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">{{'postal-code'|translate}}</label>\r\n <input placeholder=\"{{'postal-code'|translate}}\" required type=\"text\" name=\"postcode\"\r\n formControlName=\"postcode\"\r\n [class]=\"form.controls['postcode'].touched ? (form.controls['postcode'].valid && form.controls['postcode'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">{{'postal-code-help'|translate}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">Nombre compañía</label>\r\n <input type=\"text\" id=\"\" placeholder=\"Nombre compañía\" required name=\"companyName\"\r\n formControlName=\"companyName\"\r\n [class]=\"form.controls['companyName'].touched ? (form.controls['companyName'].valid && form.controls['companyName'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">El nombre compañía es un campo obligatorio.</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">{{'phone'|translate}}</label>\r\n <input type=\"text\" id=\"\" placeholder=\"{{'phone'|translate}}\" required name=\"phoneNumber\"\r\n formControlName=\"phoneNumber\"\r\n [class]=\"form.controls['phoneNumber'].touched ? (form.controls['phoneNumber'].valid && form.controls['phoneNumber'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">El numero de telefono es un campo obligatorio.</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">Sexo</label>\r\n <select required name=\"gender\" formControlName=\"gender\"\r\n [class]=\"form.controls['gender'].touched ? (form.controls['gender'].valid && form.controls['gender'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <option value=\"null\" id=\"selectOpSexo\">Sexo</option>\r\n <option value=\"u\">Desconocido</option>\r\n <option value=\"s\">Femenino</option>\r\n <option value=\"m\">Masculino</option>\r\n </select>\r\n <span class=\"invalid-feedback\">El sexo es un campo obligatorio.</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">Fecha creacion</label>\r\n <input type=\"date\" id=\"\" placeholder=\"Fecha creacion\" required name=\"birthday\"\r\n formControlName=\"birthday\"\r\n [class]=\"form.controls['birthday'].touched ? (form.controls['birthday'].valid && form.controls['birthday'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">La fecha de creacion es un campo obligatorio.</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-6 px-0 pr-md-1\">\r\n <div class=\"form-group\">\r\n <label for=\"\">Identificacion</label>\r\n <input type=\"text\" id=\"\" placeholder=\"Identificacion\" required name=\"taxIdentification\"\r\n formControlName=\"taxIdentification\"\r\n [class]=\"form.controls['taxIdentification'].touched ? (form.controls['taxIdentification'].valid && form.controls['taxIdentification'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'\">\r\n <span class=\"invalid-feedback\">La identificacion de la compañía es un campo\r\n obligatorio.</span>\r\n </div>\r\n </div>\r\n <div class=\"col-12 col-md-6 px-0 py-4 pl-md-1 \">\r\n <div class=\"form-check py-2\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"terms\" name=\"terms\"\r\n formControlName=\"terms\" type=\"checkbox\">\r\n <label for=\"terms\" class=\"form-check-label\">Acepto los <a\r\n [routerLink]=\"['/section/terminos-y-condiciones']\"\r\n routerLinkActive=\"router-link-active\" class=\"text-primary\">términos y\r\n condiciones *</a></label>\r\n </div>\r\n </div>\r\n <div class=\"col-12 col-md-6 px-0 py-4 pl-md-1\">\r\n <div class=\"form-check py-2\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"defaultCheck2\"\r\n name=\"subscribedToNewsletter\" formControlName=\"subscribedToNewsletter\"\r\n type=\"checkbox\">\r\n <label class=\"form-check-label\" for=\"defaultCheck2\">\r\n Suscripción al newsletter\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"col-12 col-md-6 px-0 py-4 pr-md-1 d-flex justify-content-md-start order-2 order-md-1\">\r\n\r\n <button type=\"submit\" role=\"button\" [disabled]=\"form.invalid\"\r\n class=\"btn btn-primary rounded-0 px-5 py-2 w-100 w-md-auto h-fit\">REGISTRATE</button>\r\n </div>\r\n\r\n </div>\r\n <pre>{{form.value | json}}</pre>\r\n @if(loading){\r\n <app-loading-section-ec />\r\n }\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component, inject } from '@angular/core';\r\nimport { FiltersService } from '../../ec-services';\r\nimport { Filter } from '../../classes';\r\nimport { FilterElement, FilterType } from '../../interfaces';\r\n\r\n@Component({\r\n\tselector: 'lib-filters-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplateUrl: './filters-ec.component.html',\r\n\tstyleUrl: './filters-ec.component.scss'\r\n})\r\nexport class FiltersEcComponent {\r\n\tprivate _filtersService: FiltersService = inject(FiltersService);\r\n\tpublic filters: Filter[] = [];\r\n\tpublic filter$ = this._filtersService.filters$;\r\n\r\n\tconstructor() {\r\n\t\tthis.filter$.subscribe( res => {\r\n\t\t\tthis.filters = this._filtersService.getSpecificFilters(['attributes', 'categories', 'dynamics'])\r\n\t\t})\r\n\t}\r\n\r\n\tgetSpecificFilter(type:FilterType): Filter | null{\r\n\t\tconst filter = this.filters.find(filter => filter.type() === type)\r\n\t\treturn filter || null;\r\n\t}\r\n\r\n\t/*Obtiene el filtro elegido en el select, lo pasa al setSelect\r\n para que se marque seleccionado*/\r\n onSelect(event:any,filter:FilterElement[] | null){\r\n console.log(filter)\r\n /* const selectedOption = filter\r\n .flatMap(category => category.children)\r\n .filter(option => option?.code === event.target.value)\r\n .pop()\r\n selectedOption && this._filtersService.setFilterSelected(this.filters[0], selectedOption) */\r\n }\r\n\r\n\tsetSelected(filter:Filter | null, selected:FilterElement){\r\n\t\tconsole.log(\"set\",filter);\r\n\t\tfilter && this._filtersService.setFilterSelected(filter, selected)\r\n\t}\r\n\r\n}\r\n","<p>filters-ec works!</p>\r\n","import { Component, inject, WritableSignal, signal, PLATFORM_ID, Inject } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { Meta, Title } from '@angular/platform-browser';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { ProductDetailService, ProductsService, ToastService } from '../../ec-services';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { CoreConstantsService } from '../../constants';\r\nimport { Observable } from 'rxjs';\r\nimport { Product } from '../../interfaces';\r\nimport * as he from 'he';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'app-product-detail-ec',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './product-detail-ec.component.html',\r\n styleUrls: ['./product-detail-ec.component.scss']\r\n})\r\nexport class ProductDetailEcComponent {\r\n private _productDetailService: ProductDetailService = inject(ProductDetailService);\r\n private _productService: ProductsService = inject(ProductsService);\r\n private _activedRoute: ActivatedRoute = inject(ActivatedRoute);\r\n private _domSanitizer: DomSanitizer = inject(DomSanitizer);\r\n private _consts: CoreConstantsService = inject(CoreConstantsService);\r\n private _toastService: ToastService = inject(ToastService);\r\n private _meta: Meta = inject(Meta);\r\n private _title: Title = inject(Title);\r\n private _location: Location = inject(Location);\r\n public product$: Observable<Product | null> = this._productDetailService.product$;\r\n public options$: Observable<any> = this._productDetailService.options$;\r\n public data$: Observable<any> = this._productDetailService.associatedData$;\r\n public mediaUrl = this._consts.mediaUrl();\r\n public code: string = '';\r\n\r\n public quantity: WritableSignal<number> = signal(1);\r\n\r\n constructor() {\r\n this._activedRoute.params.subscribe(queryParams => {\r\n this.code = queryParams[\"id\"];\r\n this._productDetailService.loadProduct(this.code);\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.product$.subscribe(product => {\r\n if (product) {\r\n this.updateMetaTags(product);\r\n }\r\n });\r\n }\r\n\r\n updateMetaTags(product: Product) {\r\n\tconst descripcionLimpia = he.decode(product.description || '').replace(/<[^>]*>/g, ' ').replace(/\\s+/g, ' ').trim();\r\n const currentUrl =this._consts.url() + this._location.path(true); // `true` incluye el query string\r\n\r\n\r\n\r\n this._meta.updateTag({ property: 'og:title', content: product.name || '' });\r\n this._meta.updateTag({ property: 'og:description', content: descripcionLimpia || '' });\r\n this._meta.updateTag({ property: 'og:image', content: this._consts.mediaUrl(Array.isArray(product.picturesdefault) ? product.picturesdefault[0] : product.picturesdefault) || '' });\r\n this._meta.updateTag({ property: 'og:url', content: currentUrl });\r\n }\r\n\r\n sanitizedHtml(html: string) {\r\n return this._domSanitizer.bypassSecurityTrustHtml(html);\r\n }\r\n\r\n addToCart() {\r\n this.quantity() > 0 && this._productDetailService.addToCart(this.quantity());\r\n }\r\n\r\n plus(stock?: number, multipleQuantity?: number) {\r\n if (multipleQuantity && multipleQuantity > 0) {\r\n stock ? (this.quantity() < stock\r\n ? this.quantity.update(value => value + multipleQuantity)\r\n : this._toastService.show('out-of-stock-actually'))\r\n : this.quantity.update(value => value + multipleQuantity)\r\n } else {\r\n stock ? (this.quantity() < stock\r\n ? this.quantity.update(value => value + 1)\r\n : this._toastService.show('out-of-stock-actually'))\r\n : this.quantity.update(value => value + 1)\r\n }\r\n }\r\n\r\n less(multipleQuantity?: any) {\r\n if (multipleQuantity && multipleQuantity > 0) {\r\n this.quantity() > multipleQuantity ? this.quantity.update(value => value - multipleQuantity) : null;\r\n } else {\r\n this.quantity() > 1 ? this.quantity.update(value => value - 1) : null;\r\n }\r\n }\r\n\r\n checkStock(stock: number) {\r\n if (this.quantity() >= stock)\r\n this.quantity.set(stock);\r\n }\r\n}\r\n","","import { Component, inject, Input } from '@angular/core';\r\nimport { ProductDetailService } from '../../ec-services';\r\nimport { AsyncPipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-variants-ec',\r\n standalone: true,\r\n imports: [AsyncPipe],\r\n templateUrl: './variants-ec.component.html',\r\n styleUrl: './variants-ec.component.scss'\r\n})\r\nexport class VariantsEcComponent {\r\n\tprivate _productDetailsService: ProductDetailService = inject(ProductDetailService);\r\n\tpublic options$ = this._productDetailsService.options$;\r\n\t\r\n\tsetOption(optionCode:any, optionValue:any) {\r\n this._productDetailsService.setOption(optionCode, optionValue);\r\n }\r\n\t\r\n}\r\n","@if(options$ | async; as options){\r\n @if(options && options.length){\r\n @for(option of options; track $index){\r\n @switch (option.type) {\r\n @case ('color') {\r\n <h5>Colores disponibles</h5>\r\n <div class=\"row w-100 mx-auto pb-3 mb-3\">\r\n @for(value of option.values; track $index; let x = $index){\r\n <a role=\"button\" [title]=\"value.description\" (click)=\"setOption(option.code, value.name)\"\r\n [class]=\"'item m-1 circle ' + (value.selected ? 'shadow' : '')\" [id]=\"x + value.name\"\r\n [style.background]=\"'#' + value.name\" [style.box-shadow]=\"(value.selected ? '0px 0px 0px 2px #000' : 'none')\">\r\n </a>\r\n }\r\n </div>\r\n }\r\n @case ('size') {\r\n\r\n }\r\n @default {\r\n\r\n }\r\n }\r\n }\r\n } @else {\r\n <p>loading</p>\r\n }\r\n}\r\n\r\n<!-- <div *ngIf=\"(options$ | async) as options\">\r\n <div *ngIf=\"options && options.length; else loading\">\r\n <div *ngFor=\"let option of options; let i = index\">\r\n\r\n <div [ngSwitch]=\"option.type\">\r\n <div *ngSwitchCase=\"'color'\">\r\n <h5>Colores disponibles</h5>\r\n <div class=\"row w-100 mx-auto pb-3 mb-3\">\r\n <a *ngFor=\"let value of option.values; let x = index\" role=\"button\"\r\n (click)=\"setOption(option.code, value.name)\" [class]=\"'item m-1 ' + (value.selected ? 'shadow' : '')\"\r\n [id]=\"x + value.name\"\r\n [style.background]=\"'#' + value.name\"\r\n [style.box-shadow]=\"(value.selected ? '0px 0px 0px 2px #000' : 'none')\">\r\n </a>\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'size'\">\r\n <h5>Talles displonibles</h5>\r\n <div class=\"row w-100 mx-auto pb-3\">\r\n <a *ngFor=\"let value of option.values; let x = index\" role=\"buttom\"\r\n (click)=\"setOption(option.code, value.name)\"\r\n [id]=\"x + value.name\"\r\n [class]=\"'btn item m-1 ' + (value.selected ? 'selected-size' : 'unselected-size')\">\r\n {{ value.name }}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #loading>\r\n <div class=\"loading-container\">\r\n <div id=\"loading\"></div>\r\n </div>\r\n</ng-template> -->","import { Component, inject } from '@angular/core';\r\nimport { FiltersService, OptionsService } from '../../ec-services';\r\nimport { Filter } from '../../classes';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport { TranslateModule, TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n\tselector: 'app-breadcrumb-ec',\r\n\tstandalone: true,\r\n\timports: [RouterLink, RouterLinkActive, TitleCasePipe, TranslateModule],\r\n\ttemplateUrl: './breadcrumb-ec.component.html',\r\n\tstyleUrl: './breadcrumb-ec.component.scss'\r\n})\r\nexport class BreadcrumbEcComponent {\r\n\tprivate _filtersService: FiltersService = inject(FiltersService);\r\n\tprivate _optionsService: OptionsService = inject(OptionsService);\r\n\tpublic breadcrumb:any [] = [];\r\n\t\r\n\tconstructor(){\r\n\t\tthis._filtersService.filters$.subscribe(res => {\r\n\t\t\tthis.breadcrumb = this.generateBreadcrumb(res);\r\n\t\t})\r\n\t}\r\n\r\n\tgenerateBreadcrumb(filters:Filter[]){\r\n\t\treturn this._optionsService.getBreadcrumbByFilters(filters);\r\n\t}\r\n\t\r\n}\r\n","<nav aria-label=\"breadcrumb\">\r\n <ol class=\"breadcrumb\">\r\n <li class=\"breadcrumb-item\"><a routerLink=\"/home\">Home</a></li>\r\n @for (crumb of breadcrumb; track $index) {\r\n @if(breadcrumb.length === $index+1){\r\n <li class=\"breadcrumb-item active\" aria-current=\"page\">\r\n {{\r\n crumb.title | translate | titlecase\r\n }}\r\n </li>\r\n }@else {\r\n <li class=\"breadcrumb-item\">\r\n <a [routerLink]=\"'/'+crumb.path\">{{\r\n crumb.title | translate | titlecase\r\n }}</a>\r\n </li>\r\n }\r\n }\r\n </ol>\r\n</nav>","import { Component, inject } from '@angular/core';\r\nimport { CartService, ToastService } from '../../ec-services';\r\nimport { CoreConstantsService } from '../../constants';\r\n\r\n@Component({\r\n\tselector: 'lib-cart-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplateUrl: './cart-ec.component.html',\r\n\tstyleUrl: './cart-ec.component.scss'\r\n})\r\nexport class CartEcComponent {\r\n\tprivate _cartService: CartService = inject(CartService);\r\n\r\n\tpublic cartItems$ = this._cartService.cartItems$;\r\n\tpublic subTotalAmount$ = this._cartService.getSubTotalAmount();\r\n\tpublic totalPromotionAmount$ = this._cartService.getTotalPromotionAmount();\r\n\tpublic taxesAmount$ = this._cartService.getTaxesAmount();\r\n\tpublic totalAmount$ = this._cartService.getTotalAmount();\r\n\tremoveCoupon(){\r\n\t\tthis._cartService.removeCoupon()\r\n\t}\r\n\r\n}\r\n","<p>cart-ec works!</p>\r\n","import { Component, inject, Input, OnInit } from '@angular/core';\r\nimport { CoreConstantsService } from '../../../constants';\r\nimport { CartService, ToastService } from '../../../ec-services';\r\n\r\n@Component({\r\n\tselector: 'lib-cart-item-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplateUrl: './cart-item-ec.component.html',\r\n\tstyleUrl: './cart-item-ec.component.scss'\r\n})\r\nexport class CartItemEcComponent implements OnInit {\r\n\t@Input({\r\n\t\trequired: true\r\n\t}) item: any;\r\n\r\n\tprivate _cartService: CartService = inject(CartService);\r\n\tprivate _toastService: ToastService = inject(ToastService);\r\n\r\n\tprivate _constants: CoreConstantsService = inject(CoreConstantsService);\r\n\tpublic mediaUrl = this._constants.mediaUrl();\r\n\tpublic quantity = 0;\r\n\r\n\tngOnInit() {\r\n\t\tthis.quantity = this.item.quantity\r\n\t}\r\n\r\n\tupdateQuantity(stock: number) {\r\n\t\tif (this.quantity > 0 && this.quantity <= stock) {\r\n\t\t\tthis._cartService.updateItemQuantity(this.item, this.quantity)\r\n\t\t} else {\r\n\t\t\tthis.quantity = this.item.quantity\r\n\t\t\tthis._toastService.show('out-of-stock-actually');\r\n\t\t}\r\n\t}\r\n\r\n\tless(stock: number, value: number = 1) {\r\n\t\tlet quantity = this.item.quantity - value;\r\n\t\tquantity > 0 && quantity <= stock ? this._cartService.updateItemQuantity(this.item, quantity) : this._toastService.show('out-of-stock-actually');\r\n\r\n\t}\r\n\r\n\tplus(stock: number, value: number = 1) {\r\n\t\tlet quantity = this.item.quantity + value;\r\n\t\tquantity > 0 && quantity <= stock ? this._cartService.updateItemQuantity(this.item, quantity) : this._toastService.show('out-of-stock-actually');\r\n\t}\r\n\r\n\tdeleteCartItem(){\r\n\t\tthis._cartService.deleteCartItem(this.item)\r\n\t}\r\n}\r\n","<p>cart-item-ec works!</p>\r\n","import { Component, inject } from '@angular/core';\r\nimport { CartService } from '../../ec-services';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n\tselector: 'app-coupon-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplateUrl: './coupon-ec.component.html',\r\n\tstyleUrl: './coupon-ec.component.scss'\r\n})\r\nexport class CouponEcComponent {\r\n\tprivate _cartService: CartService = inject(CartService);\r\n\tpublic coupon$: Observable<any> = this._cartService.coupon$\r\n\tpublic couponValue: string = \"\";\r\n\r\n\taddCoupon(){\r\n\t\tthis.validCoupon() && this._cartService.addCoupon(this.couponValue)\r\n\t}\r\n\r\n\tvalidCoupon(): boolean {\r\n\t\tif(this.couponValue){\r\n\t\t\treturn /^([A-Za-z\\-0-9]*)\\w+$/.test(this.couponValue);\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tremoveCoupon(){\r\n\t\tthis._cartService.removeCoupon()\r\n\t}\r\n}\r\n","<p>coupon-ec works!</p>\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { RouterLink } from '@angular/router';\r\nimport { LoginFormEcComponent } from '../../auth-ec';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { AddressingService, AnalyticsService, AuthService, CartService, ChannelService, CheckoutService, FormService, ParametersService, ToastService } from '../../../ec-services';\r\nimport { AsyncPipe, JsonPipe, TitleCasePipe } from '@angular/common';\r\nimport { ApiConstantsService } from '../../../constants';\r\nimport { LoadingFullEcComponent } from '../../widgets-ec';\r\nimport { BehaviorSubject, filter, firstValueFrom } from 'rxjs';\r\nimport { ConnectionService } from '../../../api';\r\nimport { InputEcComponent } from './input-ec/input-ec.component';\r\nimport { BlocksEcComponent } from \"../../blocks-ec/blocks-ec.component\";\r\n\r\n@Component({\r\n selector: 'app-dataform-ec',\r\n standalone: true,\r\n imports: [\r\n RouterLink,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n LoginFormEcComponent,\r\n TranslateModule,\r\n AsyncPipe,\r\n TitleCasePipe,\r\n LoadingFullEcComponent,\r\n JsonPipe,\r\n BlocksEcComponent\r\n],\r\n templateUrl: './dataform-ec.component.html',\r\n styleUrl: './dataform-ec.component.scss'\r\n})\r\nexport class DataformEcComponent implements OnInit {\r\n\r\n private _channelService: ChannelService = inject(ChannelService);\r\n private _authService: AuthService = inject(AuthService);\r\n private _paramsService: ParametersService = inject(ParametersService);\r\n private _apiConsts: ApiConstantsService = inject(ApiConstantsService);\r\n private _addressingService: AddressingService = inject(AddressingService);\r\n private _cartService: CartService = inject(CartService);\r\n private _toastService: ToastService = inject(ToastService);\r\n private _formService: FormService = inject(FormService);\r\n private _checkoutService: CheckoutService = inject(CheckoutService);\r\n private _formBuilder: FormBuilder = inject(FormBuilder);\r\n\r\n public modeSelectAddress = this._addressingService.modeSelectAddress;\r\n public cartItems: any = []\r\n\r\n public channel$ = this._channelService.channel$;\r\n public countries$ = this._formService.getCountriesData();\r\n public provinces$ = this._formService.provinces$;\r\n public documentTypes$ = this._formService.documentTypes$;\r\n public isLastStep$ = this._checkoutService.isLastStep$;\r\n public loadingStep$ = this._checkoutService.loadingStep$;\r\n \r\n public selectAddress: boolean = false;\r\n public params: any;\r\n public addressBook: any = [];\r\n public addressBookSelected = { id: 0, notes: \"\" }\r\n public form_ready: boolean = false;\r\n public loading: boolean = false;\r\n public allready_data: boolean = false;\r\n public require_login: boolean = false;\r\n public checkoutForm: FormGroup;\r\n public checkoutFormFacturacion: FormGroup;\r\n public getTypeForm: any = this._addressingService.getTypeForm;\r\n public isLastOne: boolean = false;\r\n public loadingStep: boolean = false;\r\n\r\n private readonly postalCodePattern = '^[0-9][0-9]*$';\r\n\r\n protected countriesFacturacionSubject = new BehaviorSubject<any[]>([]);\r\n protected provincesFacturacionSubject = new BehaviorSubject<any[]>([]);\r\n protected documentTypesFacturacionSubject = new BehaviorSubject<any[]>([]);\r\n\r\n public countriesFacturacion$ = this.countriesFacturacionSubject.asObservable();\r\n public provincesFacturacion$ = this.provincesFacturacionSubject.asObservable();\r\n public documentTypesFacturacion$ = this.documentTypesFacturacionSubject.asObservable();\r\n\r\n public viewDataFacturacion: boolean = true;\r\n public validado = false;\r\n\r\n constructor() {\r\n this.checkoutForm = this._formBuilder.group({\r\n ...this._addressingService.getTypeForm()?.configForm.formAddres,\r\n postcode: ['', [Validators.required, Validators.pattern(this.postalCodePattern)]]\r\n })\r\n this.checkoutForm.statusChanges\r\n .pipe(\r\n filter(() => { this.onFormChange(); return this.checkoutForm.valid }))\r\n .subscribe(() => this.onFormValid());\r\n\r\n this.checkoutFormFacturacion = this._formBuilder.group({\r\n ...this._addressingService.getTypeForm()?.configForm.formBilling,\r\n postcode: ['', [Validators.required, Validators.pattern(this.postalCodePattern)]] // Se agrega para que sólo acepte códigos postales mayores que cero\r\n });\r\n this.checkoutFormFacturacion.statusChanges\r\n .pipe(\r\n filter(() => { this.onFormChange(); return this.checkoutFormFacturacion.valid }))\r\n .subscribe(() => this.onFormValid());\r\n this.isLastStep$.subscribe( res => this.isLastOne = res);\r\n this.loadingStep$.subscribe( res => this.loadingStep = res);\r\n }\r\n\r\n ngOnInit(): void {\r\n this._paramsService.getParameters().subscribe(params => this.params = params);\r\n this._cartService.cartItems$.subscribe(items => this.cartItems = items);\r\n\r\n this._authService.isAuthenticated() && this.checkoutForm.controls['email'].setValue(this._authService.getUserProfileAsUser()?.email); //--> esto es momentaneo hasta que empiece a trabajar con Seller y Customer. \r\n this._authService.isAuthenticated() && this.checkoutForm.get('email')?.disable({ onlySelf: true });\r\n (this._addressingService.modeSelectAddress == 'LOAD_ADDRESS_AND_SELECTION' || this._addressingService.modeSelectAddress == 'ONLY_ADDRESS_SELECTION')\r\n && firstValueFrom(this._addressingService.getAddressBook()).then(res => {\r\n this.addressBook = res && res || null\r\n this.addressBook == null && this.setMode('carga')\r\n }\r\n ).catch(err => console.error(err.error.message))\r\n\r\n }\r\n\r\n isAuthenticated(): boolean {\r\n return this._authService.isAuthenticated()\r\n }\r\n\r\n getMode() {\r\n switch (this.modeSelectAddress) {\r\n case 'ONLY_LOAD_ADDRESS':\r\n return true\r\n case 'ONLY_ADDRESS_SELECTION':\r\n if (this._authService.isAuthenticated()) {\r\n return false\r\n }\r\n return true\r\n case 'LOAD_ADDRESS_AND_SELECTION':\r\n if (this._authService.isAuthenticated()) {\r\n return this.selectAddress\r\n }\r\n return true\r\n }\r\n }\r\n\r\n setMode(mode: string) {\r\n this.selectAddress = mode == \"carga\"\r\n }\r\n\r\n getParamByChannelAndLanguage(nameParam: string) {\r\n return this._paramsService.hasParams(this.params, nameParam + this._apiConsts.CHANNEL + '_' + this._apiConsts.LOCALE.split('_')[0])\r\n }\r\n\r\n setSelectAddress(addressSelect: any) {\r\n this.addressBook.map((address: any) => address.selected = address.id === addressSelect.id)\r\n this.addressBookSelected.id = this.addressBook.find((address: any) => address.selected).id || 0\r\n }\r\n onSelectAddress(items:any){\r\n this.loading = true;\r\n let addressSelected = this.addressBook.find((address:any) => address.selected)\r\n if (addressSelected) {\r\n try {\r\n if (!this.addressBookSelected.id) {\r\n this.addressBookSelected.id = addressSelected.id || 0\r\n }\r\n const request = {\r\n selected: this.addressBookSelected,\r\n shippingAddress: addressSelected\r\n }\r\n this._addressingService.setHeadquarter(request).then(\r\n res => {\r\n if(this._cartService.channelConfig.applyOrderLot){\r\n items.forEach((item:any) => {\r\n if(!item.lot[0]){\r\n this._cartService.addToLot(item.product,0,item.variant_id,0,item.item_id,item.quantity,item.product.price,item.quantity,item.discount,item.product.price*item.quantity,'new','','',0,res.shippingAddress.city + ' - ' + res.shippingAddress.street, 'newlot'); \r\n }\r\n })\r\n }\r\n this.form_ready = true;\r\n this.allready_data = true;\r\n this.next();\r\n }\r\n ).catch(err => this._toastService.show('operation-error'));\r\n\r\n } catch (e) { this._toastService.show('operation-error') }\r\n } else {\r\n this.showError('invalid-form')\r\n }\r\n this.loading = false;\r\n }\r\n\r\n onInputChange = () => this.form_ready = false;\r\n\r\n getCountry(code: any) { return this._addressingService.countriesList.find((countries: any) => countries.code.toLocaleLowerCase().includes(code.toLocaleLowerCase()))?.name || \"\" }\r\n\r\n getProvince(code: any) { return this._addressingService.provinceList.find((ct: any) => ct.code == code)?.name || \"\" }\r\n\r\n getDocumentType(code: any) { return this._addressingService.documentTypes.find((dt: any) => dt.code == code)?.name || \"\" }\r\n\r\n getLabelNotesParam() { return this._paramsService.hasParams(this.params, 'label_notes_' + this._apiConsts.CHANNEL + '_' + this._apiConsts.LOCALE.split('_')[0]) }\r\n\r\n verifyValidate($event:any) { \r\n if (this.checkoutForm.valid) {\r\n // Aca debo resolver el formulario y una vez este todo ok debo avisar al observable de\r\n // los steps.\r\n this.emitResult();\r\n } else\r\n this.showError('invalid-form');\r\n }\r\n showError = (error_message: any) => { this._toastService.show(error_message); return true; }\r\n\r\n protected emitResult = async () => {\r\n this.loading = true;\r\n let data: any = { shippingAddress: { ...this.checkoutForm.getRawValue(), phoneNumber: this.checkoutForm.value.phoneNumber.toString() }, notes: (this.checkoutForm.getRawValue()).notes };\r\n if (!this.viewDataFacturacion && this.checkoutFormFacturacion.valid) data = { ...data, notes: data.notes, billingAddress: this.checkoutFormFacturacion.getRawValue() };\r\n try {\r\n let result = await this._addressingService.setAddress(data);\r\n\r\n if (result === false) {\r\n this.require_login = true;\r\n this._toastService.show('El email ya está registrado, inicie sesión.')\r\n }\r\n else if (result !== false && result !== undefined) {\r\n //Ojo que lo edito, no hizo una compra nueva, atenti a esto.\r\n this.form_ready = true\r\n this.allready_data = true\r\n this.next()\r\n }\r\n\r\n } catch (e) { this._toastService.show('operation-error') }\r\n this.loading = false;\r\n }\r\n\r\n protected onFormChange() {\r\n if (this.checkoutForm.valid) {\r\n if (!this.viewDataFacturacion && this.checkoutFormFacturacion.valid) {\r\n this.validado = true\r\n return\r\n }\r\n if (this.viewDataFacturacion && this.checkoutForm.valid) {\r\n this.validado = true\r\n return\r\n }\r\n }\r\n this.validado = false\r\n }\r\n\r\n onFormValid = () => {\r\n }\r\n\r\n /**\r\n * Captura el evento de cuando cambia un pais en el `<select>`\r\n * @param event \r\n */\r\n onCountrySelected = (event: any, billing:boolean = false) => {\r\n const { value } = event.target;\r\n //$('#selectOpPais').attr('disabled', true);\r\n const form = billing ? this.checkoutFormFacturacion : this.checkoutForm;\r\n form.controls['countryCode'].setValue(value);\r\n form.controls['provinceCode'].setValue('null');\r\n //value != '' && this.provincesSubject.next(this.countriesSubject.value.find(country => country.code == value).provinces);\r\n if (value != '' || value != 'null') {\r\n this._formService.onCountrySelected(value);\r\n }\r\n }\r\n /**\r\n * Captura el evento de cuando cambia una provincia/estado en el `<select>`\r\n * @param event \r\n * @param provinces lista de provincias para obtener el nombre de la seleccionada.\r\n */\r\n onProvincesSelected(event: any, provinces: any, billing:boolean = false){\r\n const { value } = event.target;\r\n const form = billing ? this.checkoutFormFacturacion : this.checkoutForm;\r\n return form.controls['provinceCode'].setValue(value == 'null' ? null : value);\r\n /* return form.controls['provinceName'].setValue(provinces.find((province: any) => province.code == value).name); */\r\n }\r\n onDocumentTypesSelected(event: any, billing:boolean = false) {\r\n const { value } = event.target\r\n const form = billing ? this.checkoutFormFacturacion : this.checkoutForm;\r\n return form.controls['documentType'].setValue(value == '' ? '' : value);\r\n }\r\n showFormFacturacion = () => {\r\n this.viewDataFacturacion = !this.viewDataFacturacion\r\n if (!this.viewDataFacturacion) {\r\n this.countriesFacturacion$.subscribe(res => {\r\n if (res && res.length > 0) {\r\n this.checkoutFormFacturacion.controls['countryCode'].setValue(res[0].code)\r\n // Provincia\r\n this.checkoutFormFacturacion.controls['provinceCode'].setValue(\r\n res[0]?.provinces[0].code\r\n )\r\n this.provincesFacturacionSubject.next(res[0]?.provinces)\r\n // Documento\r\n this.checkoutFormFacturacion.controls['documentType'].setValue(res[0]?.documentTypes[0].code)\r\n this.documentTypesFacturacionSubject.next(res[0]?.documentTypes)\r\n }\r\n })\r\n }\r\n this.onFormChange()\r\n return this.viewDataFacturacion\r\n }\r\n\r\n next(){\r\n\t\tthis._checkoutService.next()\r\n\t}\r\n \r\n}\r\n","@if(channel$ | async; as channelConfig){\r\n @if(channelConfig.channelType != 'b2b' || (channelConfig.channelType == 'b2b' && isAuthenticated())){\r\n @if( modeSelectAddress == 'LOAD_ADDRESS_AND_SELECTION' && isAuthenticated() && this.addressBook != null){\r\n <!--Selector de modos-->\r\n <div class=\"container card p-4 mb-3\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12 col-md-10 col-lg-8 text-center\">\r\n <div class=\"btn-group btn-group-toggle\" data-bs-toggle=\"buttons\">\r\n <label [class]=\"'btn btn-outline-secondary ' + (!getMode() ? 'active' : '')\">\r\n <input type=\"radio\" name=\"options\" id=\"option1\" autocomplete=\"off\" checked\r\n (change)=\"setMode('seleccion')\"> {{'select-address' | translate | titlecase}}\r\n </label>\r\n @if(!getParamByChannelAndLanguage('btn_new_address_')){\r\n <label [class]=\"'btn btn-outline-secondary ' + (getMode() ? 'active' : '')\">\r\n <input type=\"radio\" name=\"options\" id=\"option2\" autocomplete=\"off\" (change)=\"setMode('carga')\">\r\n {{ 'new-address' | translate | titlecase}}\r\n </label>\r\n }\r\n @if(getParamByChannelAndLanguage('btn_new_address_'); as param){\r\n <label [class]=\"'btn btn-outline-secondary ' + (selectAddress ? 'active' : '')\">\r\n <input type=\"radio\" name=\"options\" id=\"option2\" autocomplete=\"off\" (change)=\"setMode('carga')\">\r\n {{ param.value}}\r\n </label>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if(getMode()){\r\n @if(!require_login){\r\n <div>\r\n @if(modeSelectAddress == 'ONLY_LOAD_ADDRESS'){\r\n <div class=\"checkout-title my-2\">\r\n <h3>{{'billing-details'|translate}}</h3>\r\n </div>\r\n }\r\n <!--Formulario-->\r\n <form [formGroup]=\"checkoutForm\" (submit)=\"verifyValidate($event)\"> <!-- //this.cartService.items -->\r\n <div class=\"row mt-2\"><!--Fila 1-->\r\n\r\n @if(getTypeForm().viewForms.firstName.enabled){\r\n <div class=\"form-group col-12 col-md-6\">\r\n <!--Si es required-->\r\n <label class=\"form-label\">{{'first-name'|translate}}\r\n @if(getTypeForm().viewForms.firstName.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n <!--Input-->\r\n <input class=\"form-control\" type=\"text\" name=\"firstName\" formControlName=\"firstName\" value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutForm.controls['firstName'].touched &&\r\n checkoutForm.controls['firstName'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'first-name-help1'|translate}}</span>\r\n </div>\r\n }\r\n <!--Error info-->\r\n @if(checkoutForm.controls['firstName'].touched &&\r\n checkoutForm.controls['firstName'].errors?.['pattern']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'first-name-help2'|translate}}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n @if(getTypeForm().viewForms.lastName.enabled){\r\n <div class=\"form-group col-12 col-md-6\">\r\n <label class=\"form-label\">{{'last-name'|translate}}\r\n @if(getTypeForm().viewForms.lastName.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n <input class=\"form-control\" type=\"text\" name=\"lastName\" formControlName=\"lastName\" value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutForm.controls['lastName'].touched &&\r\n checkoutForm.controls['lastName'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'last-name-help1'|translate}}</span>\r\n </div>\r\n }\r\n @if(checkoutForm.controls['lastName'].touched && checkoutForm.controls['lastName'].errors?.['pattern']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'last-name-help2'|translate}}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row mt-2\"><!--Fila 2-->\r\n @if(getTypeForm().viewForms.phoneNumber.enabled){\r\n <div class=\"form-group col-12 col-md-6\">\r\n <label class=\"form-label\">{{'phone'|translate}}\r\n @if(getTypeForm().viewForms.phoneNumber.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"phoneNumber\"\r\n formControlName='phoneNumber' value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutForm.controls['phoneNumber'].touched &&\r\n checkoutForm.controls['phoneNumber'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'phone-help1'|translate}}\r\n </span>\r\n </div>\r\n }\r\n @if(checkoutForm.controls['phoneNumber'].touched &&\r\n checkoutForm.controls['phoneNumber'].errors?.['pattern']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'phone-help2'|translate}}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n @if(getTypeForm().viewForms.email.enabled){\r\n <div class=\"form-group col-12 col-md-6\">\r\n <label class=\"form-label\">{{'email-address'|translate}}\r\n @if(getTypeForm().viewForms.email.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <input class=\"form-control\" type=\"email\" name=\"email\" formControlName='email' value=\"\" placeholder=\"\"\r\n autocomplete=\"off\">\r\n @if(checkoutForm.controls['email'].touched && checkoutForm.controls['email'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'email-address-help1'|translate}}\r\n </span>\r\n </div>\r\n }\r\n @if(checkoutForm.controls['email'].touched && checkoutForm.controls['email'].errors?.['email']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'email-address-help2'|translate}}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row mt-2\"><!--Fila 3-->\r\n @if(getTypeForm().viewForms.countryCode.enabled){\r\n @if(countries$ | async; as countries){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"form-label\">{{'country'|translate}}\r\n @if(getTypeForm().viewForms.countryCode.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <select class=\"form-select\" name=\"countryCode\" formControlName='countryCode'\r\n (change)=\"onCountrySelected($event)\">\r\n @for(country of countries; track $index){\r\n <option [value]=\"country.code\">{{ country.name }}</option>\r\n }\r\n </select>\r\n @if(checkoutForm.controls['countryCode'].touched &&\r\n checkoutForm.controls['countryCode'].errors?.['required']){\r\n <div class=\"text text-danger\">\r\n {{'country-help'|translate}}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n @if(getTypeForm().viewForms.provinceCode.enabled){\r\n @if(provinces$ | async; as provinces){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"form-label\">{{'state'|translate}}\r\n @if(getTypeForm().viewForms.provinceCode.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <select class=\"form-select\" name=\"provinceCode\" (change)=\"onProvincesSelected($event, provinces)\"\r\n formControlName='provinceCode'>\r\n @for(province of provinces; track $index){\r\n <option [value]=\"province.code\">{{ province.name }}\r\n </option>\r\n }\r\n </select>\r\n @if(checkoutForm.controls['provinceCode'].touched &&\r\n checkoutForm.controls['provinceCode'].errors?.['required']){\r\n <div class=\"text text-danger\">\r\n {{'state-help'|translate}}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n @if(getTypeForm().viewForms.city.enabled){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"form-label\">{{'town-city'|translate}}\r\n @if(getTypeForm().viewForms.city.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"city\" formControlName='city'\r\n value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutForm.controls['city'].touched && checkoutForm.controls['city'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'town-city-help'|translate}}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row mt-df\"><!--Fila 4-->\r\n @if(getTypeForm().viewForms.street.enabled){\r\n <div class=\"form-group col-12 col-md-8\">\r\n <label class=\"field-label\">{{'address'|translate}}\r\n @if(getTypeForm().viewForms.street.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"street\"\r\n formControlName='street' value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutForm.controls['street'].touched && checkoutForm.controls['street'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'address-help1'|translate}}</span>\r\n </div>\r\n }\r\n @if(checkoutForm.controls['street'].touched && checkoutForm.controls['street'].errors?.['maxlength']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'address-help2'|translate}}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- form dirección -->\r\n @if(getTypeForm().viewForms.postcode.enabled){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"field-label\">{{'postal-code'|translate}}\r\n @if(getTypeForm().viewForms.postcode.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"postcode\"\r\n formControlName='postcode' value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutForm.controls['postcode'].touched &&\r\n checkoutForm.controls['postcode'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'postal-code-help'|translate}}</span>\r\n </div>\r\n }\r\n @if(checkoutForm.controls['postcode'].touched && checkoutForm.controls['postcode'].errors?.['pattern']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\"> {{'postal-code-pattern-error' | translate}} </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row mt-df\"><!--Fila 5-->\r\n @if(getTypeForm().viewForms.documentType.enabled){\r\n @if(documentTypes$ | async; as documentTypes){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"field-label\">{{'document-type'|translate}}\r\n @if(getTypeForm().viewForms.documentType.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <select name=\"documentType\" class=\"form-select\" (change)=\"onDocumentTypesSelected($event)\"\r\n formControlName='documentType'>\r\n <!-- <option [value]=\"''\" selected>{{'document-type'|translate}}</option>\r\n --> @for(item of documentTypes; track $index){\r\n <option [value]=\"item.code\">{{item.name}}</option>\r\n }\r\n </select>\r\n @if(checkoutForm.controls['documentType'].touched &&\r\n checkoutForm.controls['documentType'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'type-document-help'|translate}}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n @if(getTypeForm().viewForms.documentNumber.enabled){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"field-label\">{{'document-number'|translate}}\r\n @if(getTypeForm().viewForms.documentNumber.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" [type]=\"'text'\" name=\"documentNumber\"\r\n formControlName='documentNumber' min=\"1\" max=\"99999999999\" value=\"\" placeholder=\"\"\r\n autocomplete=\"off\">\r\n @if(checkoutForm.controls['documentNumber'].touched &&\r\n checkoutForm.controls['documentNumber'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'document-number-help'|translate}}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row mt-df\"><!--Fila 6-->\r\n @if(getTypeForm().viewForms.notes.enabled){\r\n <div class=\"form-group col-12 col-md-12\">\r\n @if(!getLabelNotesParam()){\r\n <label class=\"field-label\">{{'notes'|translate}}\r\n @if(getTypeForm().viewForms.notes.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n }\r\n @if(getLabelNotesParam(); as labelnotes){\r\n <label class=\"field-label\" [innerHTML]=\"labelnotes.value\">\r\n @if(getTypeForm().viewForms.notes.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n }\r\n\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\" formControlName='notes'\r\n value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row mt-df\"><!--Fila 7-->\r\n <div class=\"form-group col-12 col-md-12\">\r\n <label for=\"formFact\"><b>{{ 'same-billing-address' | translate }}</b> <input type=\"checkbox\"\r\n class=\"ms-2\" [checked]=\"viewDataFacturacion\" (change)=\"showFormFacturacion()\"\r\n id=\"formFact\"></label>\r\n </div>\r\n </div>\r\n <div class=\"row mt-df\">\r\n <div class=\"col-12\">\r\n <p>\r\n <label class=\"required text-underline text-danger\">* {{ 'required-fields' | translate }}</label>\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"row mt-df\">\r\n @if(getTypeForm().viewForms.terms.enabled){\r\n <div class=\"form-group col-12 col-md-12\">\r\n @if(getTypeForm().viewForms.terms.required){\r\n <span class=\"required\">*</span>\r\n }\r\n <label class=\"\" for=\"\"> {{ 'accept-terms' | translate }} <input class=\"ms-2\" name=\"terms\"\r\n formControlName='terms' type=\"checkbox\" required (change)=\"onInputChange()\" /> </label><br />\r\n <button type=\"button\" class=\"btn btn-primary\" data-bs-toggle=\"modal\"\r\n data-bs-target=\"#terminos-y-condiciones\">\r\n {{ 'whats-this' | translate }}\r\n </button>\r\n @if(checkoutForm.controls['terms'].touched && !checkoutForm.controls['terms'].value){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{ 'must-accept-terms' | translate }}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if(!viewDataFacturacion){\r\n <!--Formulario de Facturación-->\r\n <div class=\"card\">\r\n <div class=\"card-header text-center\">\r\n <h2>{{ 'billing-data' | translate }}</h2>\r\n </div>\r\n <div class=\"card-body\">\r\n <form [formGroup]=\"checkoutFormFacturacion\">\r\n <div class=\"row mt-2\"><!--Fila 1-->\r\n\r\n @if(getTypeForm().viewForms.firstName.enabled){\r\n <div class=\"form-group col-12 col-md-6\">\r\n <!--Si es required-->\r\n <label class=\"form-label\">{{'first-name'|translate}}\r\n @if(getTypeForm().viewForms.firstName.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n <!--Input-->\r\n <input class=\"form-control\" type=\"text\" name=\"firstName\" formControlName=\"firstName\"\r\n value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutFormFacturacion.controls['firstName'].touched &&\r\n checkoutFormFacturacion.controls['firstName'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'first-name-help1'|translate}}</span>\r\n </div>\r\n }\r\n <!--Error info-->\r\n @if(checkoutFormFacturacion.controls['firstName'].touched &&\r\n checkoutFormFacturacion.controls['firstName'].errors?.['pattern']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'first-name-help2'|translate}}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n @if(getTypeForm().viewForms.lastName.enabled){\r\n <div class=\"form-group col-12 col-md-6\">\r\n <label class=\"form-label\">{{'last-name'|translate}}\r\n @if(getTypeForm().viewForms.lastName.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n <input class=\"form-control\" type=\"text\" name=\"lastName\" formControlName=\"lastName\" value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutFormFacturacion.controls['lastName'].touched &&\r\n checkoutFormFacturacion.controls['lastName'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'last-name-help1'|translate}}</span>\r\n </div>\r\n }\r\n @if(checkoutFormFacturacion.controls['lastName'].touched &&\r\n checkoutFormFacturacion.controls['lastName'].errors?.['pattern']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'last-name-help2'|translate}}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row mt-2\"><!--Fila 2-->\r\n @if(getTypeForm().viewForms.phoneNumber.enabled){\r\n <div class=\"form-group col-12 col-md-6\">\r\n <label class=\"form-label\">{{'phone'|translate}}\r\n @if(getTypeForm().viewForms.phoneNumber.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"phoneNumber\"\r\n formControlName='phoneNumber' value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutFormFacturacion.controls['phoneNumber'].touched &&\r\n checkoutFormFacturacion.controls['phoneNumber'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'phone-help1'|translate}}\r\n </span>\r\n </div>\r\n }\r\n @if(checkoutFormFacturacion.controls['phoneNumber'].touched &&\r\n checkoutFormFacturacion.controls['phoneNumber'].errors?.['pattern']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'phone-help2'|translate}}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n @if(getTypeForm().viewForms.email.enabled){\r\n <div class=\"form-group col-12 col-md-6\">\r\n <label class=\"form-label\">{{'email-address'|translate}}\r\n @if(getTypeForm().viewForms.email.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <input class=\"form-control\" type=\"email\" name=\"email\" formControlName='email' value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutFormFacturacion.controls['email'].touched &&\r\n checkoutFormFacturacion.controls['email'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'email-address-help1'|translate}}\r\n </span>\r\n </div>\r\n }\r\n @if(checkoutFormFacturacion.controls['email'].touched &&\r\n checkoutFormFacturacion.controls['email'].errors?.['email']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'email-address-help2'|translate}}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row mt-2\"><!--Fila 3-->\r\n @if(getTypeForm().viewForms.countryCode.enabled){\r\n @if(countries$ | async; as countries){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"form-label\">{{'country'|translate}}\r\n @if(getTypeForm().viewForms.countryCode.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <select class=\"form-select\" name=\"countryCode\" formControlName='countryCode'\r\n (change)=\"onCountrySelected($event, true)\">\r\n @for(country of countries; track $index){\r\n <option [value]=\"country.code\">{{ country.name }}</option>\r\n }\r\n </select>\r\n @if(checkoutFormFacturacion.controls['countryCode'].touched &&\r\n checkoutFormFacturacion.controls['countryCode'].errors?.['required']){\r\n <div class=\"text text-danger\">\r\n {{'country-help'|translate}}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n @if(getTypeForm().viewForms.provinceCode.enabled){\r\n @if(provinces$ | async; as provinces){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"form-label\">{{'state'|translate}}\r\n @if(getTypeForm().viewForms.provinceCode.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <select class=\"form-select\" name=\"provinceCode\"\r\n (change)=\"onProvincesSelected($event, provinces, true)\" formControlName='provinceCode'>\r\n @for(province of provinces; track $index){\r\n <option [value]=\"province.code\">{{ province.name }}\r\n </option>\r\n }\r\n </select>\r\n @if(checkoutFormFacturacion.controls['provinceCode'].touched &&\r\n checkoutFormFacturacion.controls['provinceCode'].errors?.['required']){\r\n <div class=\"text text-danger\">\r\n {{'state-help'|translate}}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n @if(getTypeForm().viewForms.city.enabled){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"form-label\">{{'town-city'|translate}}\r\n @if(getTypeForm().viewForms.city.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"city\"\r\n formControlName='city' value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutFormFacturacion.controls['city'].touched &&\r\n checkoutFormFacturacion.controls['city'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'town-city-help'|translate}}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row mt-df\"><!--Fila 4-->\r\n @if(getTypeForm().viewForms.street.enabled){\r\n <div class=\"form-group col-12 col-md-8\">\r\n <label class=\"field-label\">{{'address'|translate}}\r\n @if(getTypeForm().viewForms.street.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"street\"\r\n formControlName='street' value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutFormFacturacion.controls['street'].touched &&\r\n checkoutFormFacturacion.controls['street'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'address-help1'|translate}}</span>\r\n </div>\r\n }\r\n @if(checkoutFormFacturacion.controls['street'].touched &&\r\n checkoutFormFacturacion.controls['street'].errors?.['maxlength']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'address-help2'|translate}}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- form dirección -->\r\n @if(getTypeForm().viewForms.postcode.enabled){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"field-label\">{{'postal-code'|translate}}\r\n @if(getTypeForm().viewForms.postcode.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"postcode\"\r\n formControlName='postcode' value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n @if(checkoutFormFacturacion.controls['postcode'].touched &&\r\n checkoutFormFacturacion.controls['postcode'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">{{'postal-code-help'|translate}}</span>\r\n </div>\r\n }\r\n @if(checkoutFormFacturacion.controls['postcode'].touched &&\r\n checkoutFormFacturacion.controls['postcode'].errors?.['pattern']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\"> {{'postal-code-pattern-error' | translate}} </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row mt-df\"><!--Fila 5-->\r\n @if(getTypeForm().viewForms.documentType.enabled){\r\n @if(documentTypes$ | async; as documentTypes){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"field-label\">{{'document-type'|translate}}\r\n @if(getTypeForm().viewForms.documentType.required){\r\n <span class=\"required\">*</span>\r\n }</label>\r\n <select name=\"documentType\" class=\"form-select\" (change)=\"onDocumentTypesSelected($event, true)\"\r\n formControlName='documentType'>\r\n <!-- <option [value]=\"''\" selected>{{'document-type'|translate}}</option>\r\n --> @for(item of documentTypes; track $index){\r\n <option [value]=\"item.code\">{{item.name}}</option>\r\n }\r\n </select>\r\n @if(checkoutFormFacturacion.controls['documentType'].touched &&\r\n checkoutFormFacturacion.controls['documentType'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'type-document-help'|translate}}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n @if(getTypeForm().viewForms.documentNumber.enabled){\r\n <div class=\"form-group col-12 col-md-4\">\r\n <label class=\"field-label\">{{'document-number'|translate}}\r\n @if(getTypeForm().viewForms.documentNumber.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" [type]=\"'text'\" name=\"documentNumber\"\r\n formControlName='documentNumber' min=\"1\" max=\"99999999999\" value=\"\" placeholder=\"\"\r\n autocomplete=\"off\">\r\n @if(checkoutFormFacturacion.controls['documentNumber'].touched &&\r\n checkoutFormFacturacion.controls['documentNumber'].errors?.['required']){\r\n <div class=\"text-danger-container\">\r\n <span class=\"text-danger\">\r\n {{'document-number-help'|translate}}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row mt-df\"><!--Fila 6-->\r\n @if(getTypeForm().viewForms.notes.enabled){\r\n <div class=\"form-group col-12 col-md-12\">\r\n @if(!getLabelNotesParam()){\r\n <label class=\"field-label\">{{'notes'|translate}}\r\n @if(getTypeForm().viewForms.notes.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n }\r\n @if(getLabelNotesParam(); as labelnotes){\r\n <label class=\"field-label\" [innerHTML]=\"labelnotes.value\">\r\n @if(getTypeForm().viewForms.notes.required){\r\n <span class=\"required\">*</span>\r\n }\r\n </label>\r\n }\r\n\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\"\r\n formControlName='notes' value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n </div>\r\n }\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"row d-flex flex-row\">\r\n <div class=\"col-12 d-flex justify-content-end\">\r\n <button type=\"submit\" class=\"btn btn-primary text-white\" [disabled]=\"checkoutForm.invalid\">{{(isLastOne\r\n ? 'finish-checkout' : (allready_data ? 'update' :\r\n 'ready-form')) | translate}}\r\n <!-- {{(allready_data ? 'update' : (isLastOne ? 'finish-checkout' : 'ready-form')) | translate}} -->\r\n </button>\r\n </div>\r\n </div>\r\n @if(loading){\r\n <div class=\"d-flex flex-column justify-content-center align-items-center\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n }\r\n\r\n </form>\r\n </div>\r\n } @else {\r\n <div id=\"loginCheckout\">\r\n @if(require_login){\r\n <div class=\"d-flex flex-column justify-content-center align-items-center\">\r\n <div class=\"col-12\">\r\n <app-login-form-ec (ready)=\"verifyValidate($event)\" [redirect]=\"false\" [title]=\"'need-login'\">\r\n </app-login-form-ec>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n } @else {\r\n @if(modeSelectAddress == 'ONLY_ADDRESS_SELECTION'){\r\n <div class=\"checkout-title my-2\">\r\n <h3>{{'address-selection'|translate}}</h3>\r\n </div>\r\n }\r\n\r\n @if(this.addressBook){\r\n @if(this.addressBook?.length){\r\n <div class=\"container\">\r\n <div class=\"row\">\r\n @for(item of addressBook; track $index; let i = $index){\r\n <div class=\"col-sm-6 col-12 my-3\">\r\n <div class=\"card p-3\">\r\n <input class=\"ms-1 mt-3 form-check-input input-size-lg\" type=\"radio\" [name]=\"'n-'+i\" [id]=\"i\"\r\n [checked]=\"item.selected\" (click)=\"setSelectAddress(item)\" (change)=\"onInputChange()\">\r\n <div class=\"ms-5\">\r\n <h4 class=\"card-title\">\r\n <strong>{{'address'|translate}}</strong><br>\r\n <span class=\"text-uppercase h3\">{{item.street}}</span>\r\n </h4>\r\n <div class=\"row\">\r\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\r\n <strong>{{'country'|translate}}</strong> {{getCountry(item.countryCode)}}\r\n </h5>\r\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\r\n <strong>{{'state'|translate}}</strong> {{getProvince(item.provinceCode)}}\r\n </h5>\r\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\r\n <strong>{{'town-city'|translate}}</strong> {{item.city}}\r\n </h5>\r\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\r\n <strong>{{'postal-code'|translate}}</strong> {{item.postcode}}\r\n </h5>\r\n </div>\r\n <div class=\"row px-3\">\r\n <div class=\"card p-2 bg-light w-100\">\r\n <div class=\"card-body\">\r\n <h5 class=\"card-title\">{{'address-contact'|translate}}</h5>\r\n <h6 class=\"card-subtitle mb-2 text-muted\">\r\n <strong>{{'first-name'|translate}}</strong>\r\n {{item.addressContact.firstName}}\r\n </h6>\r\n <h6 class=\"card-subtitle mb-2 text-muted\">\r\n <strong>{{'last-name'|translate}}</strong>\r\n {{item.addressContact.lastName}}\r\n </h6>\r\n <h6 class=\"card-subtitle mb-2 text-muted\">\r\n <strong>{{'document-type'|translate}}</strong>\r\n {{getDocumentType(item.addressContact.documentType)}}\r\n </h6>\r\n <h6 class=\"card-subtitle mb-2 text-muted\">\r\n <strong>{{'document-number'|translate}}</strong>\r\n {{item.addressContact.documentNumber}}\r\n </h6>\r\n <h6 class=\"card-subtitle mb-2 text-muted\">\r\n <strong>{{'email-address'|translate}}</strong>\r\n {{item.addressContact.email}}\r\n </h6>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"w-100\">\r\n <div class=\"row mt-df\">\r\n <div class=\"form-group col-12 col-md-12\">\r\n @if(!getLabelNotesParam()){\r\n <label class=\"form-label\">{{'notes'|translate}}</label>\r\n }\r\n @if(getLabelNotesParam(); as labelnotes){\r\n <label class=\"form-label\" [innerHTML]=\"labelnotes.value\"></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\"\r\n [(ngModel)]=\"this.addressBookSelected.notes\" #ctrl=\"ngModel\" value=\"\" placeholder=\"\"\r\n autocomplete=\"off\">\r\n }\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row d-flex flex-row\">\r\n <div class=\"col-12 d-flex justify-content-end\">\r\n <button (click)=\"onSelectAddress(cartItems)\" class=\"btn btn-primary text-white\" [disabled]=\"loadingStep\">{{(isLastOne\r\n ? 'finish-checkout' : (allready_data ? 'update' :\r\n 'ready-form')) | translate}}\r\n <!-- {{(allready_data ? 'update' : (isLastOne ? 'finish-checkout' : 'ready-form')) | translate}} -->\r\n </button>\r\n \r\n </div>\r\n </div>\r\n @if(loading){\r\n <div class=\"d-flex flex-column jusitfy-content-center align-items-center\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-12 text-center my-2\">\r\n <div class=\"d-flex flex-column justify-content-center align-items-center\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-12 text-center my-2\">\r\n <h4> {{'address-book-not-result' | translate }} </h4>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n }\r\n\r\n }\r\n @else {\r\n <div class=\"container\">\r\n <p>Por favor <a [routerLink]=\"['/auth/login']\"> Inicie Sesión</a></p>\r\n </div>\r\n }\r\n}\r\n@if(getTypeForm().viewForms.terms.enabled){\r\n<div class=\"modal fade\" id=\"terminos-y-condiciones\" tabindex=\"-1\" aria-labelledby=\"modalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-xl modal-dialog-scrollable\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"modalLabel\">Términos y condiciones</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <app-blocks-ec [section]=\"'terminos-y-condiciones'\" />\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n}","import { afterNextRender, Component, inject, OnInit } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { LoadingFullEcComponent } from '../../widgets-ec';\r\nimport { AsyncPipe, JsonPipe } from '@angular/common';\r\nimport { CheckoutService, ShipmentService } from '../../../ec-services';\r\nimport { EcCurrencySymbolPipe } from '../../../ec-pipe';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n\tselector: 'app-shipment-ec',\r\n\tstandalone: true,\r\n\ttemplateUrl: './shipment-ec.component.html',\r\n\tstyleUrls: ['./shipment-ec.component.scss'],\r\n\timports: [LoadingFullEcComponent, TranslateModule, AsyncPipe, EcCurrencySymbolPipe, JsonPipe]\r\n})\r\nexport class ShipmentEcComponent implements OnInit {\r\n\r\n\tprivate _shipmentService: ShipmentService = inject(ShipmentService)\r\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService)\r\n\r\n\tpublic methods$ = this._shipmentService.methods$;\r\n\tpublic isLastStep$ = this._checkoutService.isLastStep$;\r\n\tpublic state$ = this._shipmentService.state$;\r\n\r\n\tprivate _hiddenMethods: string[] = ['UPS']\r\n\tpublic buttonsDisabled: boolean = false\r\n\tpublic methodSelect: any;\r\n\tpublic loadingInternal: boolean = false\r\n\tpublic moreInfoInMethod: boolean = false;\r\n\tpublic costos: any = null\r\n\tpublic costs$: Observable<any[]> = this._shipmentService.costs$;\r\n\tpublic isLastOne: boolean = false;\r\n\tpublic enabledConfirmButton: boolean = false\r\n\t\r\n\tconstructor() {\r\n\t\tthis.isLastStep$.subscribe(res => this.isLastOne = res);\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t\tthis._shipmentService.getShipmentMethods();\r\n\t\tthis._checkoutService.associatedData$.subscribe(data => {\r\n\t\t\tthis.costos = data && data.find((value: any) => value.type == \"shipment\") || null\r\n\t\t})\r\n\t\tthis.state$.subscribe(res => {\r\n\t\t\tif(res.data){\r\n\t\t\t\tthis.methodSelect = res.data.method\r\n\t\t\t}\r\n\t\t})\r\n\t\tthis.moreInfoInMethod = true //ShipmentService.moreInfoInMethod;\r\n\t}\r\n\r\n\tfilterMethods(methods: any) {\r\n\t\treturn methods.filter((method: any) => !this._hiddenMethods.includes(method.name))\r\n\t}\r\n\r\n\tsetMethod(method: any) {\r\n\t\tthis.methodSelect = method;\r\n\t\tthis.loadingInternal = true;\r\n\r\n\t\t// Deshabilitar todos los botones\r\n\t\tthis.buttonsDisabled = true;\r\n\t\tthis.enabledConfirmButton = false;\r\n\r\n\t\t// setTimeout(() => {\r\n\t\tthis._shipmentService.setMethod(method.code).then(res => {\r\n\t\t\tthis.loadingInternal = false;\r\n\t\t\tthis.enabledConfirmButton = true;\r\n\t\t\t// Habilitar todos los botones\r\n\t\t\tthis.buttonsDisabled = false;\r\n\t\t}).catch(error => {\r\n\t\t\t// En caso de error, también habilitar los botones\r\n\t\t\tthis.loadingInternal = false;\r\n\t\t\tthis.buttonsDisabled = false;\r\n\t\t\tconsole.error(\"Error:\", error);\r\n\t\t});\r\n\t}\r\n\r\n\tvalidName(name: any) {\r\n\t\treturn isNaN(name);\r\n\t}\r\n\temitResult = (method_name: string, contract_data: any) => {\r\n\t\t\r\n\t\tcontract_data = {\r\n\t\t\t...contract_data,\r\n\t\t\tshipping_method_contract: method_name + '_' + contract_data.name,\r\n\t\t\tshipping_method_branch_code: method_name == \"branch_delivery\" ? contract_data.sucursal_id : contract_data.name,\r\n\t\t}\r\n\t\t//console.log(\"emitResult\", contract_data);\r\n\t\tthis._shipmentService.setContract(contract_data);\r\n\t}\r\n\tverifyValidate(costs: any[], contract: any, data: any) {\r\n\t\ttry {\r\n\t\t\tcosts.forEach((cost: any) => cost.contracts.forEach((co: any) => co.selected = false))\r\n\t\t\tcosts.find((cost: any) => cost.name == contract).contracts.find((contra: any) => contra.name == data.name).selected = true\r\n\t\t} catch (error) {\r\n\t\t\tconsole.log(\"error al buscar contrato\", error);\r\n\t\t}\r\n\t\tthis.emitResult(contract, data);\r\n\t}\r\n\r\n\tgoBack() {\r\n\t\tthis._checkoutService.back();\r\n\t}\r\n\tnext() {\r\n\t\tthis._checkoutService.next()\r\n\t}\r\n}\r\n","<div class=\"container-fluid\">\r\n\t<div class=\"col-12\">\r\n\t\t<div class=\"card text-center\">\r\n\t\t\t<div class=\"card-header text-dark\">\r\n\t\t\t\t<h4>{{ 'select-method' | translate }}</h4>\r\n\t\t\t\t@if(methods$ | async; as methods){\r\n\t\t\t\t\t<div class=\"btn-toolbar justify-content-center\" role=\"toolbar\" aria-label=\"Envios toolbar\">\r\n\t\t\t\t\t\t<div class=\"\" role=\"group\" aria-label=\"Grupo botones envio\">\r\n\t\t\t\t\t\t\t<div class=\"d-flex align-content-start justify-content-center flex-wrap\">\r\n\t\t\t\t\t\t\t\t@for(method of filterMethods(methods); track $index){\r\n\t\t\t\t\t\t\t\t<button [disabled]=\"buttonsDisabled\" type=\"button\"\r\n\t\t\t\t\t\t\t\t\t[class]=\"'btn btn-outline-secondary mx-1 mb-1 '+(methodSelect && methodSelect == method.code ? 'active' :'')\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"setMethod(method)\">\r\n\t\t\t\t\t\t\t\t\t{{ method.name | translate }}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}@else {\r\n\t\t\t\t\t<div class=\"d-flex flex-row w-100 justify-content-center mt-2\">\r\n\t\t\t\t\t\t<h5 class=\"text-secondary\">{{'no-shipment-methods'|translate}}</h5>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t\t<div class=\"card-body\">\r\n\t\t\t\t@if(moreInfoInMethod && methodSelect && methodSelect.description){\r\n <div class=\"row justify-content-center mb-2\">\r\n <div class=\"col-12 col-md-6 col-lg-4 d-flex flex-column mb-2\" [id]=\"methodSelect.code\">\r\n @for(line of methodSelect.description.split('\\r\\n'); track $index; let i=$index){\r\n <span [id]=\"methodSelect.code+'-'+i\" [class]=\"'line-'+i\">{{line}}</span>\r\n\t\t\t\t\t }\r\n </div>\r\n </div>}\r\n\t\t\t\t@if(costs$ | async; as costs){\r\n<!-- \t\t\t\t @if(costs){ -->\r\n <div class=\"row justify-content-center\">\r\n @if(!loadingInternal){\r\n\t\t\t\t\t\t@for(cost of costs; track $index; let y = $index){\r\n <div class=\"col-auto text-dark\">\r\n\t\t\t\t\t\t\t@if(cost.contracts.length > 0){\r\n\t\t\t\t\t\t\t\t@if(costs.length > 1){\r\n\t\t\t\t\t\t\t\t\t<span><b>{{ cost.name | translate }}</b></span>\r\n\t\t\t\t\t\t\t\t\t<hr />\r\n\t\t\t\t\t\t\t\t}@else{\r\n\t\t\t\t\t\t\t\t\t<span><b>{{ methodSelect.name | translate }}</b></span>\r\n\t\t\t\t\t\t\t\t\t<hr />\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t@for(contract of cost.contracts; track $index; let i = $index){\r\n <div class=\"option\">\r\n <div class=\"form-check current-contract\">\r\n <input class=\"form-check-input\" [checked]=\"(y === 0 && i === 0) ? true : contract.selected\" type=\"radio\" name=\"card\" [id]=\"cost.name + i\"\r\n value=\"dark\" (click)=\"verifyValidate(costs,cost.name, contract)\">\r\n <label class=\"form-check-label\" [for]=\"cost.name + i\" aria-label=\"Dark grey\">\r\n @if(validName(contract.name)){\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n [class]=\"(cost.name == 'home_delivery') ? 'shipment-contractname home_delivery' : 'shipment-contractname' \">\r\n\t\t\t\t\t\t\t\t\t\t\t\t{{ contract.name | translate }}\r\n\t\t\t\t\t\t\t\t\t\t\t</span>}\r\n\t\t\t\t\t\t\t\t\t\t\t@if(contract.computed){\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span><br class=\"shipment-contractname\">{{ contract.computed | translate }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<br class=\"shipment-contractname\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t@if(contract.detail){\r\n <div class=\"contract-detail\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t@for(line of contract.detail.split(' - '); track $index; let i = $index){\r\n <div [class]=\"'contrat-item-'+i\">\r\n @if(i == 0){<span><b>{{ line }}</b></span>}\r\n @if(i > 0){<span class=\"inside-detail\">{{ line }}</span>}\r\n </div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n </div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t@if(contract.price > 0){\r\n <span [class]=\"'inside-detail ' + ( costos?.amount == 0 ? ' free ' : '') \">\r\n @if(!contract.computed){<br class=\"shipment-contractname\">}\r\n {{ ('price'|translate) + ': ' + (contract.price | ecCurrencySymbol) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n <br>\r\n </label>\r\n </div>\r\n </div>\r\n\t\t\t\t\t\t\t\t}\r\n \r\n\t\t\t\t\t\t\t}\r\n </div>\r\n\t\t\t\t\t\t}\r\n }@else {\r\n\t\t\t\t\t\t<app-loading-full-ec></app-loading-full-ec>\r\n\t\t\t\t\t}\r\n </div>\r\n\t\t\t\t}\r\n\t\t\t\t\r\n </div>\r\n\r\n\t\t</div>\r\n\t\t<div class=\"row d-flex flex-row\">\r\n\t\t\t<div class=\"col-12 d-flex justify-content-between\">\r\n\t\t\t\t<button class=\"btn btn-primary text-white\" (click)=\"goBack()\">{{'back'|translate}}</button>\r\n\t\t\t\t<button type=\"submit\" (click)=\"next()\" [disabled]=\"!enabledConfirmButton\" class=\"btn btn-primary text-white\">{{(isLastOne\r\n\t\t\t\t\t? 'finish-checkout' :'ready-form') | translate}}\r\n\t\t\t\t\t<!-- {{(allready_data ? 'update' : (isLastOne ? 'finish-checkout' : 'ready-form')) | translate}} -->\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n</div>","import { Component, EventEmitter, inject, Input, OnInit, Output, PLATFORM_ID } from '@angular/core';\r\nimport { PaymentService, ToastService } from '../../../../../ec-services';\r\nimport { LoadingFullEcComponent } from '../../../../widgets-ec';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n@Component({\r\n\tselector: 'app-mp-redirect-ec',\r\n\tstandalone: true,\r\n\ttemplateUrl: './mp-redirect-ec.component.html',\r\n\tstyleUrls: ['./mp-redirect-ec.component.scss'],\r\n\timports: [LoadingFullEcComponent]\r\n})\r\nexport class MpRedirectEcComponent implements OnInit {\r\n\r\n\tprivate _paymentService: PaymentService = inject(PaymentService)\r\n\tprivate _toastService: ToastService = inject(ToastService)\r\n\r\n\t@Input() method = null;\r\n\t@Input() total_amount = 0;\r\n\t@Input() allData: any;\r\n\t@Output() ready = new EventEmitter();\r\n\r\n\tprotected preference: any;\r\n\r\n\tpublic loading = false;\r\n\tpublic url: any;\r\n\tpublic closeModal = ''\r\n\tpublic ventana: any;\r\n\tpublic window?: Window;\r\n\tpublic localStorage?:Storage;\r\n\r\n\tprivate platformId: any = inject(PLATFORM_ID)\r\n\r\n\tconstructor() {\r\n\t\tif (isPlatformBrowser(this.platformId)) {\r\n\t\t\tthis.window = window\r\n\t\t\tthis.localStorage = localStorage\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t\tthis.getPreference()\r\n\t}\r\n\tclickClose = () => {\r\n\t\t/* this.closeModal = 'cancel'\r\n\t\t this.ventana?.close() */\r\n\t}\r\n\r\n\tiniciar = () => {\r\n\t\tthis.closeModal = ''\r\n\t\tthis.clearStorageState()\r\n\t\tthis.ventana = this.window?.open(this.url)\r\n\t\tthis.callState()\r\n\t}\r\n\r\n\tcallState = () => {\r\n\t\tlet state = this.closeModal != '' ? this.closeModal : this.localStorage?.getItem('state')\r\n\t\t!state && this.ventana.closed && (state = 'cancel')\r\n\t\tthis.loading = true\r\n\t\tstate && console.log(state);\r\n\t\tif (state) {\r\n\t\t\tthis.loading = false\r\n\t\t\tthis.localStorage?.removeItem('state')\r\n\t\t\tif (state == 'success') {\r\n\t\t\t\tthis.ventana?.close()\r\n\t\t\t\tthis.ready.emit(true)\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tif (state == 'pending') {\r\n\t\t\t\tthis.ventana?.close()\r\n\t\t\t\tthis.ready.emit(true)\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tif (state == 'failure') {\r\n\t\t\t\tthis.ventana?.close()\r\n\t\t\t\tthis.processError('')\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tif (state == 'cancel') {\r\n\t\t\t\tthis.ventana?.close()\r\n\t\t\t\tthis.processError('Se cancelo el pago con mercado pago')\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tthis.ventana?.close()\r\n\t\t\tthis.processError('')\r\n\t\t\treturn\r\n\t\t}\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.callState()\r\n\t\t}, 5000);\r\n\r\n\t}\r\n\tprocessError = (err: any) => {\r\n\t\tthis._toastService.show(err != '' ? err : 'payment-error');\r\n\t\tconsole.log(\"ERROR ENVIO BACK \", err);\r\n\t}\r\n\tclearStorageState = () => {\r\n\t\tsessionStorage.removeItem('state')\r\n\t\tthis.localStorage?.removeItem('state')\r\n\t}\r\n\r\n\tgetPreference = () =>\r\n\t\tthis._paymentService.getPreference(this.allData).then(\r\n\t\t\tres => {\r\n\t\t\t\tthis.preference = res;\r\n\t\t\t\tthis.url = this.preference.init_point\r\n\t\t\t\tthis.renderMP(this.preference);\r\n\t\t\t},\r\n\t\t\terr => this.setError('operation-error')\r\n\t\t);\r\n\tsetError = (message: any) => {\r\n\t\t//this.error = message;\r\n\t}\r\n\trenderMP = (preference: any) => {\r\n\t\tthis.window?.addEventListener(\"message\", (event: any) => {\r\n\t\t\tif (event.origin !== 'https://www.mercadopago.com.ar' || !event.data.type) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tlet dataType = event.data.type;\r\n\t\t\tif (dataType === 'submit') {\r\n\t\t\t\tconst paymentData = event.data.value;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","<div class=\"text-center\">\r\n\t@if(url){\r\n\t\t@if(!loading){\r\n\t\t\t<button (click)=\"iniciar()\" class=\"btn btn-outline-primary rounded-0 comprar mt-3\">Pagar</button>\r\n\t\t} @else {\r\n\t\t\t<div class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\r\n\t\t\t\t<h3>Procesando el pago por mercado pago</h3>\r\n\t\t\t\t<h5>Recuerde hacer click en \"Volver al sitio\" desde mercado pago para finalizar la compra.</h5>\r\n\t\t\t\t<app-loading-full-ec></app-loading-full-ec>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"container-fluid\">\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div class=\"col-5\">\r\n\t\t\t\t\t\t<hr>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-2 text-center\">\r\n\t\t\t\t\t\t<label for=\"\">o</label>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-5\">\r\n\t\t\t\t\t\t<hr>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\r\n\t\t\t\t<button (click)=\"clickClose()\" class=\"btn btn-outline-secondary\">Cancelar pago</button>\r\n\t\t\t</div>\r\n\t\t}\r\n\t} @else{\r\n\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\r\n\t\t<app-loading-full-ec></app-loading-full-ec>\r\n\t</div>\r\n\t}\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { LoadingFullEcComponent, LoadingInlineEcComponent } from '../../../../widgets-ec';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { AsyncPipe } from '@angular/common';\r\n\r\n@Component({\r\n\tselector: 'app-bank-transfer-ec',\r\n\tstandalone: true,\r\n\ttemplateUrl: './bank-transfer-ec.component.html',\r\n\tstyleUrls: ['./bank-transfer-ec.component.scss'],\r\n\timports: [LoadingInlineEcComponent, TranslateModule, AsyncPipe],\r\n})\r\nexport class BankTransferEcComponent implements OnInit {\r\n\t\r\n\t@Input({\r\n\t\trequired: true,\r\n\t}) method: any;\r\n\t@Input() verifyValidate:any;\r\n\t@Input() setLoading:any;\r\n\t\r\n\tconstructor() { }\r\n\r\n\tngOnInit() {\r\n\t}\r\n\r\n}\r\n","<div class=\"row px-0 description-cont\">\r\n\r\n @for(line of method.description.split('\\r\\n');track $index; let i=$index){\r\n <p [id]=\"'faqs-'+i\" [class]=\"'qt px-5 m-0 line-'+i\">{{ line }}</p>\r\n }\r\n</div>\r\n@if(method.instructions){\r\n <hr />\r\n <div class=\"row px-0 instructions-cont mb-1\">\r\n <h5 class=\"instructions-title\">{{ ('instructions' | translate) }}</h5>\r\n @for(line of method.instructions.split('\\r\\n'); track $index; let i=$index){\r\n <p [class]=\"'px-5 m-0 instructions-text line-'+i \">{{ line }}</p>\r\n }\r\n</div>\r\n}\r\n\r\n<div class=\"end-button\">\r\n <button class=\"btn btn-outline-primary\" (click)=\"setLoading() && verifyValidate()\">{{\r\n ('pay-with-transfer'\r\n | translate) }}</button>\r\n</div>\r\n<!-- @if(loading$ | async; as loading){\r\n @if(loading){\r\n <div class=\"mt-2\">\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n </div>\r\n }\r\n} -->","import { Component, Input, OnInit } from '@angular/core';\r\nimport { LoadingInlineEcComponent } from '../../../../widgets-ec';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\n@Component({\r\n\tselector: 'app-offline-ec',\r\n\tstandalone: true,\r\n\ttemplateUrl: './offline-ec.component.html',\r\n\tstyleUrls: ['./offline-ec.component.scss'],\r\n\timports: [\r\n\t\tLoadingInlineEcComponent,\r\n\t\tTranslateModule\r\n\t]\r\n})\r\nexport class OfflineEcComponent implements OnInit {\r\n\t@Input({\r\n\t\trequired: true,\r\n\t}) method: any;\r\n\t@Input() verifyValidate: any;\r\n\t@Input() setLoading: any;\r\n\tconstructor() { }\r\n\r\n\tngOnInit() {\r\n\t}\r\n\r\n}\r\n","<p id=\"faqs\" class=\"qt px-5\">{{ method.description }}</p>\r\n<p class=\"px-5\">{{ method.instructions }}</p>\r\n<div class=\"end-button\">\r\n\t<button class=\"btn btn-outline-primary\" (click)=\"setLoading() && verifyValidate()\">{{\r\n\t\t('pay-with-offline'| translate) }}</button>\r\n</div>\r\n<!-- @if(loading$ | async; as loading){\r\n @if(loading){\r\n <div class=\"mt-2\">\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n </div>\r\n }\r\n} -->","import { AsyncPipe } from '@angular/common';\r\nimport { Component, inject, OnInit } from '@angular/core';\r\nimport { CheckoutService, PaymentService } from '../../../ec-services';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { LoadingInlineEcComponent } from '../../widgets-ec';\r\nimport { MpRedirectEcComponent, OfflineEcComponent } from './payment-methods';\r\nimport { BankTransferEcComponent } from './payment-methods/bank-transfer-ec/bank-transfer-ec.component';\r\n\r\n@Component({\r\n\tselector: 'app-payment-ec',\r\n\tstandalone: true,\r\n\ttemplateUrl: './payment-ec.component.html',\r\n\tstyleUrls: ['./payment-ec.component.scss'],\r\n\timports: [AsyncPipe,\r\n\t\tTranslateModule,\r\n\t\tLoadingInlineEcComponent,\r\n\t\tMpRedirectEcComponent,\r\n\t\tBankTransferEcComponent,\r\n\t\tOfflineEcComponent\r\n\t]\r\n})\r\nexport class PaymentEcComponent implements OnInit {\r\n\r\n\tprivate _paymentService: PaymentService = inject(PaymentService)\r\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService)\r\n\r\n\tprivate _methodDataSubject = new BehaviorSubject<any>(null);\r\n\tprivate _loadingSubject = new BehaviorSubject<boolean>(false);\r\n\r\n\tpublic methods$ = this._paymentService.methods$;\r\n\tpublic loading$ = this._loadingSubject.asObservable();\r\n\tpublic methodData$ = this._methodDataSubject.asObservable();\r\n\r\n\tpublic loadingInternal: boolean = false;\r\n\r\n\tconstructor() { }\r\n\r\n\tngOnInit() {\r\n\t}\r\n\tsetActive($event: any) {\r\n\t\tconst parent = $event.target.parentElement.children;\r\n\t\tfor (const button of parent) {\r\n\t\t\tif (button.classList.contains('active')) {\r\n\t\t\t\tbutton.classList.remove('active')\r\n\t\t\t}\r\n\t\t}\r\n\t\t$event.target.classList.add(\"active\")\r\n\t}\r\n\tasync setMethod(method: any) {\r\n\t\tthis._methodDataSubject.next(null);\r\n\t\tlet result = await this._paymentService.putPayment(method.code);\r\n\t\tthis._methodDataSubject.next(method);\r\n\t}\r\n\r\n\t//Funciones para chequear el metodo de pago.\r\n\tisRedirectRedsys = (code: string) => !!code?.toLowerCase().includes('redsys_redirect')\r\n\tisRedirectCecaBank = (code: string) => !!code?.toLowerCase().includes('ceca_bank_redirect')\r\n\tisMP = (code: string) => {\r\n\t\tconst lowerCode = code?.toLowerCase() || '';\r\n\t\treturn lowerCode.includes('mercado_pago') && !lowerCode.includes('credit');\r\n\t}\r\n\tisMPTarjetaDeCredito = (code: string) => !!code?.toLowerCase().includes('credit')\r\n\tisMethodOffline = (code: string) => !!code?.toLowerCase().includes('offline')\r\n\tisPeyPalExpress = (code: string) => {\r\n\t\tconst lowerCode = code?.toLowerCase() || '';\r\n\t\treturn lowerCode.includes('paypal') && lowerCode.includes('express');\r\n\t}\r\n\tisMobbex = (code: string) => !!code?.toLowerCase().includes('mobbex')\r\n\tisBancard = (code: string) => !!code?.toLowerCase().includes('bancard')\r\n\tisDecidir = (code: string) => !!code?.toLowerCase().includes('decidir')\r\n\tisCulqi = (code: string) => !!code?.toLowerCase().includes('culqi')\r\n\tisBankTransfer = (code: string) => !!code?.toLowerCase().includes('bank_transfer')\r\n\tisCatastro = (code: string) => !!code?.toLowerCase().includes('catastro')\r\n\tisBamboo = (code: string) => !!code?.toLowerCase().includes('bamboo')\r\n\r\n\tallData(): any {\r\n\t\tthrow new Error('Method not implemented.');\r\n\t}\r\n\temitResult = async () => {\r\n\t\tthis._paymentService.setPayment(this._methodDataSubject.getValue())\r\n\t\tthis.setLoading(false)\r\n\t\tthis.next()\r\n\t}\r\n\r\n\tpublic setLoading = (estado = true) => {\r\n\t\tthis._loadingSubject.next(estado);\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic verifyValidate = ($event:any) => {\r\n\t\tthis.setLoading(true)\r\n\t\tsetTimeout(() => this.emitResult(), 1000);\r\n\t}\r\n\r\n\tpublic next = () => {\r\n\t\tthis._checkoutService.next()\r\n\t}\r\n\r\n\tpublic goBack = () => {\r\n\t\tthis._checkoutService.back()\r\n\t}\r\n}\r\n","@if(methods$ | async; as methods){\r\n<div class=\"container-fluid\">\r\n\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-12\">\r\n\t\t\t<div class=\"card \">\r\n\t\t\t\t<div class=\"card-header text-dark text-center\">\r\n\t\t\t\t\t<h4>{{ 'select-method' | translate }}</h4>\r\n\t\t\t\t\t<div class=\"btn-toolbar justify-content-center\" role=\"toolbar\" aria-label=\"Envios toolbar\">\r\n\t\t\t\t\t\t<div class=\"\" role=\"group\" aria-label=\"Grupo botones envio\">\r\n\t\t\t\t\t\t\t<div class=\"d-flex align-content-start justify-content-center flex-wrap\">\r\n\t\t\t\t\t\t\t\t@for (method of methods; track $index; let x = $index) {\r\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-outline-secondary mx-1 mb-1\"(click)=\"setMethod(method) ; setActive($event)\">\r\n\t\t\t\t\t\t\t\t\t{{ method.name | translate }}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"card-body text-center\">\r\n\t\t\t\t\t@if(methodData$ | async; as method){\r\n\t\t\t\t\t<div class=\"row justify-content-center\">\r\n\t\t\t\t\t\t@if(!loadingInternal){\r\n\t\t\t\t\t\t\t@if(isMP(method.code)){\r\n\t\t\t\t\t\t\t\t<div class=\"method-container text-dark\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t\t<p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\r\n\t\t\t\t\t\t\t\t\t\t\t<p class=\"px-5\">{{ method.instructions }}</p>\r\n\t\t\t\t\t\t\t\t\t\t<app-mp-redirect-ec (ready)=\"verifyValidate($event)\" \t[method]=\"method\"></app-mp-redirect-ec>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t<!-- <div class=\"method-container text-dark text-left\" *ngIf=\"isMPTarjetaDeCredito(method.code)\">\r\n\t\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t<p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\r\n\t\t\t\t\t\t\t\t\t\t<p class=\"px-5\">{{ method.instructions }}</p>\r\n\t\t\t\t\t\t\t\t\t\t<div app-mp-credit-ec (ready)=\"verifyValidate()\" [public_key]=\"getPK(method)\"\r\n\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [total_amount]=\"total_amount\">\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isRedirectRedsys(method.code)\">\r\n\t\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"!method.code.includes('bizum') && !method.code.includes('_out_')\">\r\n\t\t\t\t\t\t\t\t\t\t\t<app-redsys-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\">\r\n\t\t\t\t\t\t\t\t\t\t\t</app-redsys-redirect-ec>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"method.code.includes('bizum') || method.code.includes('_out_')\">\r\n\t\t\t\t\t\t\t\t\t\t\t<app-redsys-redirect-out-ec (ready)=\"verifyValidate($event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[method]=\"method\" [user_data]=\"allData()\">\r\n\t\t\t\t\t\t\t\t\t\t\t</app-redsys-redirect-out-ec>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isRedirectCecaBank(method.code)\">\r\n\t\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t<app-ceca-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\">\r\n\t\t\t\t\t\t\t\t\t\t</app-ceca-redirect-ec>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isPeyPalExpress(method.code)\">\r\n\t\t\t\t\t\t\t\t<div class=\"container\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t\t<app-paypal-express-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [total_amount]=\"total_amount\">\r\n\t\t\t\t\t\t\t\t\t\t\t</app-paypal-express-ec>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isMobbex(method.code)\">\r\n\t\t\t\t\t\t\t\t<div class=\"container\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t\t<app-mobbex-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[total_amount]=\"total_amount\">\r\n\t\t\t\t\t\t\t\t\t\t\t</app-mobbex-ec>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isBancard(method.code)\">\r\n\t\t\t\t\t\t\t\t<div class=\"container\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t\t<app-bancard-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[total_amount]=\"total_amount\">\r\n\t\t\t\t\t\t\t\t\t\t\t</app-bancard-ec>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isDecidir(method.code)\">\r\n\t\t\t\t\t\t\t\t<div class=\"container\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t\t<app-decidir-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[total_amount]=\"total_amount\">\r\n\t\t\t\t\t\t\t\t\t\t\t</app-decidir-ec>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div> -->\r\n\t\t\t\t\t\t\t@if(isMethodOffline(method.code)){\r\n\t\t\t\t\t\t\t<div class=\"method-container text-dark\">\r\n\t\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t<app-offline-ec \r\n\t\t\t\t\t\t\t\t\t\t[method]=\"method\" \r\n\t\t\t\t\t\t\t\t\t\t[verifyValidate]= \"verifyValidate\"\r\n\t\t\t\t\t\t\t\t\t\t[setLoading] = \"setLoading\" />\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<!--\r\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isCulqi(method.code)\">\r\n\t\t\t\t\t\t\t\t<div class=\"container\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t\t<app-culqi-ec [apiKey]=\"getPKCulqi(method)\" [method]=\"method\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[amount]=\"total_amount\" [customStyle]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(ready)=\"verifyValidate()\"></app-culqi-ec>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isCatastro(method.code)\">\r\n\t\t\t\t\t\t\t\t<div class=\"container\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t\t<app-bancard-catastro-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[total_amount]=\"total_amount\"></app-bancard-catastro-ec>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"method-container text-dark text-start\" *ngIf=\"isBamboo(method.code)\">\r\n\t\t\t\t\t\t\t\t<div class=\"container\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"row justify-content-center\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t\t<app-bamboo-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[total_amount]=\"total_amount\"></app-bamboo-ec>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div> -->\r\n\t\t\t\t\t\t\t@if(isBankTransfer(method.code)){\r\n\t\t\t\t\t\t\t\t<div class=\"method-container text-dark\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t\t\t\t\t\t<app-bank-transfer-ec \r\n\t\t\t\t\t\t\t\t\t\t\t\t[method]=\"method\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t[verifyValidate]= \"verifyValidate\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[setLoading] = \"setLoading\" />\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t<app-loading-inline-ec></app-loading-inline-ec>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"row d-flex flex-row\">\r\n\t\t\t\t<div class=\"col-12 d-flex justify-content-between\">\r\n\t\t\t\t\t<button class=\"btn btn-primary text-white\" (click)=\"goBack()\">{{'back'|translate}}</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n}","import { Component, inject, Input } from '@angular/core';\r\nimport { IStep } from '../../../interfaces';\r\nimport { CheckoutService } from '../../../ec-services';\r\nimport { Step } from '../../../classes';\r\nimport { DataformEcComponent } from '../dataform-ec/dataform-ec.component';\r\nimport { ShipmentEcComponent } from '../shipment-ec/shipment-ec.component';\r\nimport { PaymentEcComponent } from '../payment-ec/payment-ec.component';\r\n\r\n@Component({\r\n\tselector: 'app-step-container-ec',\r\n\tstandalone: true,\r\n\timports: [\r\n\t\tDataformEcComponent,\r\n\t\tShipmentEcComponent,\r\n\t\tPaymentEcComponent\r\n\t],\r\n\ttemplateUrl: './step-container-ec.component.html',\r\n\tstyleUrl: './step-container-ec.component.scss'\r\n})\r\nexport class StepContainerEcComponent {\r\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService);\r\n\r\n\t@Input({\r\n\t\trequired: true,\r\n\t}) steps!: Step[];\r\n\t\r\n\tconstructor(){\r\n\t\tconsole.log('step-container-ec');\r\n\t}\r\n\r\n\tnext(){\r\n\t\tthis._checkoutService.next()\r\n\t}\r\n\r\n\tback() {\r\n\t\tthis._checkoutService.back()\r\n\t}\r\n\r\n}\r\n","<div>\r\n @for(step of steps; track $index; let x=$index){\r\n <div [id]=\"'test-l-'+step.priority\" class=\"content\">\r\n <!-- <app-step-ec [step_id]=\"step.step\" [id_step]=\"x+1\" [previousStep]=\"steps[x-1] ? steps[x-1].name : step.name\" [nextStep]=\"steps[x+1] ? next : endCheckout\" [goBack]=\"goBack\" [lastStep]=\"steps[x+1] ? false : true\">\r\n </app-step-ec> -->\r\n @switch (step.name) {\r\n @case ('address') {\r\n @if(step.state == 'ready') {\r\n <app-dataform-ec />\r\n }\r\n }\r\n @case ('payment') {\r\n @if(step.state == 'ready') {\r\n <app-payment-ec />\r\n }\r\n }\r\n @case ('shipment') {\r\n @if(step.state == 'ready') {\r\n <app-shipment-ec />\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n <!-- <div class=\"row d-flex flex-row\">\r\n <div class=\"col-6 d-flex justify-content-start\">\r\n <button type=\"button\" class=\"btn btn-primary text-white\" (click)=\"back()\">Anterior</button>\r\n </div>\r\n <div class=\"col-6 d-flex justify-content-end\">\r\n <button type=\"button\" class=\"btn btn-primary text-white\" (click)=\"next()\">Siguiente</button>\r\n </div>\r\n </div> -->\r\n</div>\r\n","import { Component, inject } from '@angular/core';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { EcCurrencySymbolPipe } from '../../../ec-pipe';\r\nimport { CheckoutService } from '../../../ec-services';\r\nimport { AsyncPipe } from '@angular/common';\r\n@Component({\r\n selector: 'app-detail-checkout-block-ec',\r\n standalone: true,\r\n imports: [TranslateModule, EcCurrencySymbolPipe, AsyncPipe],\r\n templateUrl: './detail-checkout-block-ec.component.html',\r\n styleUrl: './detail-checkout-block-ec.component.scss'\r\n})\r\nexport class DetailCheckoutBlockEcComponent {\r\n private _checkoutService: CheckoutService = inject(CheckoutService);\r\n\r\n public data$ = this._checkoutService.associatedData$;\r\n public data: any = null\r\n getIcon = (data_type: string) => {\r\n\r\n switch (data_type) {\r\n case 'coupon': return 'fas fa-ticket-alt fa-3x';\r\n case 'discount': return 'fas fa-tags fa-3x';\r\n case 'shipment': return 'fas fa-shipping-fast fa-3x';\r\n case 'subtotal': return 'fas fa-boxes fa-3x';\r\n case 'taxes': return 'fas fa-file-invoice-dollar fa-3x';\r\n case 'total': return 'fas fa-shopping-basket fa-3x';\r\n default: return 'fas fa-tags fa-3x';\r\n }\r\n\r\n }\r\n constructor() {\r\n this._checkoutService.associatedData$.subscribe(data => {\r\n this.data = data.filter((value: any, i: number) => this.checkData(value, i));\r\n }\r\n );\r\n }\r\n\r\n private checkData(data: any, index: number) {\r\n switch (data.type) {\r\n case 'discount':\r\n return (data.amount != 0 && index === 1)\r\n case 'coupon':\r\n return (data.amount != 0 && index === 1)\r\n default:\r\n return true\r\n }\r\n }\r\n}\r\n","@if(data$ | async; as datos){\r\n <div id=\"appDetailCheckoutBlockEc\" class=\"d-flex flex-row w-100 justify-content-center flex-wrap\">\r\n @for(item of data; track $index; let i = $index){\r\n <div class=\"d-flex flex-column justify-content-center mx-sm-3 mx-2 text-center mb-4 resumen\">\r\n <i ngClass=\"mb-2 colorIconoCheckout\" [class]=\"getIcon(item.type)\"></i>\r\n <strong class=\"text-center w-100 font-brandon font-md mb-1\">{{ item.type | translate }}</strong>\r\n <span class=\"text-center w-100 font-brandon font-md text-gray\">{{ (item.amount != 0 ) ? (item.amount |\r\n ecCurrencySymbol) : ('free' | translate) }}</span>\r\n </div>\r\n }\r\n </div>\r\n}","import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, OnInit } from '@angular/core';\r\nimport { ChannelService, CheckoutService } from '../../ec-services';\r\nimport { IStep, Step, StepType } from '../../interfaces';\r\nimport { take } from 'rxjs';\r\nimport { AsyncPipe, JsonPipe } from '@angular/common';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { StepContainerEcComponent } from './step-container-ec/step-container-ec.component';\r\nimport { DetailCheckoutBlockEcComponent } from './detail-checkout-block-ec/detail-checkout-block-ec.component';\r\n\r\n@Component({\r\n\tselector: 'lib-checkout-ec',\r\n\tstandalone: true,\r\n\timports: [AsyncPipe, TranslateModule, StepContainerEcComponent, DetailCheckoutBlockEcComponent],\r\n\ttemplateUrl: './checkout-ec.component.html',\r\n\tstyleUrl: './checkout-ec.component.scss',\r\n\tschemas:[CUSTOM_ELEMENTS_SCHEMA]\r\n})\r\nexport class CheckoutEcComponent implements OnInit {\r\n\tprivate _channelService: ChannelService = inject(ChannelService);\r\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService);\r\n\r\n\tpublic readonly ADDRESS: StepType = 'address';\r\n\tpublic readonly SHIPMENT: StepType = 'shipment';\r\n\tpublic readonly PAYMENT: StepType = 'payment';\r\n\r\n\t//public loading$ = this._checkoutService\r\n\t//public canCheckout$ = this._checkoutService.canCheckout$\r\n\tpublic state$ = this._checkoutService.state$;\r\n\r\n\tpublic channel: any;\r\n\t//public steps: Step[] = [];\r\n\tpublic subCan:any;\r\n\tpublic canCheckout: boolean = false;\r\n\r\n\tconstructor() {\r\n\t\t//console.log(\"constructo.....\");\r\n\t\tthis._channelService.channel$.subscribe(\r\n\t\t\t(res: any) => {\r\n\t\t\t\t//console.log(\"construct\")\r\n\t\t\t\tthis.channel = res;\r\n\t\t\t\t//this.initializeSteps();\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n\tngOnInit(): void {\r\n\t\tthis.subCan = this._checkoutService.canCheckout$.pipe(take(1)).subscribe(contain_items => {\r\n if (contain_items) this.initializeCheckout();\r\n else this.canCheckout = false;\r\n })\r\n\t}\r\n\tinitializeCheckout() {\r\n\t\tthis.canCheckout = true;\r\n\t\tthis.initializeSteps();\r\n\r\n\t}\r\n\tinitializeSteps() {\r\n\t\tlet steps: IStep[] = [];\r\n\t\t//El paso de elegir dirección siempre esta\r\n\t\tsteps.push({ name: this.ADDRESS, label: 'billing-details', state:'ready' })\r\n\t\t//El paso de elegir metodo de envio\r\n\t\tthis.channel?.isSkippingShippingStepAllowed ? null : steps.push({ name: this.SHIPMENT, label:'shipment-method' });\r\n\t\t//El paso de elegir metodo de pago\r\n\t\tthis.channel?.isSkippingPaymentStepAllowed ? null : steps.push({ name: this.PAYMENT, label: 'payment'});\r\n\t\tthis._checkoutService.setSteps(steps)\r\n\t}\r\n\r\n}\r\n","<main class=\"py-4\" id=\"appCheckoutEc\">\r\n @if(canCheckout){\r\n <app-detail-checkout-block-ec></app-detail-checkout-block-ec>\r\n <div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 col-12\">\r\n @if(state$ | async; as steps){ \r\n <div id=\"stepper\" class=\"bs-stepper\">\r\n <div class=\"mb-3 row d-flex justify-content-center position-relative stepperContainer\">\r\n @for(step of steps; track $index; let x=$index){\r\n <div [class]=\"'d-flex flex-column justify-content-center align-items-center px-0 col-2'\">\r\n <div [class]=\"'step d-inline-flex align-items-center'\" [attr.data-target]=\"'#test-l-'+step.step\">\r\n <span\r\n [class]=\"'px-2 rounded-circle text-white font-bold bs-stepper-number ' + (step.state == 'ready' ? 'bg-primary' : 'bg-secondary') \">{{x+1}}</span>\r\n <span class=\"bs-stepper-label\">{{ step.label |translate}}</span>\r\n </div>\r\n \r\n </div>\r\n @if(x < steps.length-1){\r\n <div class=\"col-3 d-flex align-items-center\"><hr [class]=\"'w-100 line ' + (step.state == 'doing' ? 'line-active' : 'line-default')\" ></div>\r\n }\r\n }\r\n </div>\r\n <!-- CONTENT -->\r\n <div class=\"bs-stepper-content margin-bottom-i\">\r\n <app-step-container-ec [steps]=\"steps\" />\r\n </div>\r\n </div>\r\n } \r\n </div>\r\n <!--@if(loading$ | async; as load){\r\n <div class=\"col-md-12 col-12\">\r\n <div *ngIf=\"load\" class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n <h5>{{ 'processing-payment' | translate }}</h5> \r\n </div>\r\n </div>\r\n }-->\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"wrap\">\r\n <!-- <div *ngIf=\"(loading$ | async) as load\">\r\n <app-loading-full-ec *ngIf=\"canCheckout\"></app-loading-full-ec>\r\n </div>\r\n <section id=\"cart\" *ngIf=\"!canCheckout\">\r\n <section id=\"cart bg-white h-50\">\r\n <div class=\"d-flex flex-column justify-content-center align-items-center text-center\">\r\n <h4>{{ 'empty-cart' | translate }}</h4>\r\n <h5>{{ 'empty-cart-detail' | translate }}</h5>\r\n </div>\r\n </section>\r\n </section> -->\r\n </div>\r\n }\r\n</main>\r\n","import { Component, inject, OnInit, TemplateRef } from '@angular/core';\r\nimport { LoadingFullEcComponent } from '../../widgets-ec';\r\nimport { BlocksEcComponent } from '../../blocks-ec';\r\nimport { ApiConstantsService } from '../../../constants';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { CommonModule, UpperCasePipe } from '@angular/common';\r\nimport { BlocksService, CartService, CheckoutService } from '../../../ec-services';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n\r\n@Component({\r\n\tselector: 'app-order-success-ec',\r\n\tstandalone: true,\r\n\ttemplateUrl: './success-ec.component.html',\r\n\tstyleUrls: ['./success-ec.component.scss'],\r\n\timports: [BlocksEcComponent, LoadingFullEcComponent, TranslateModule, UpperCasePipe, CommonModule]\r\n})\r\nexport class SuccessEcComponent implements OnInit {\r\n\tprivate _apiConsts: ApiConstantsService = inject(ApiConstantsService)\r\n\tprivate _cartService: CartService = inject(CartService)\r\n\tprivate _router: Router = inject(Router)\r\n\tprivate _activatedRoute: ActivatedRoute = inject(ActivatedRoute)\r\n\tprivate _checkoutService: CheckoutService = inject(CheckoutService)\r\n\tprivate _blocksService: BlocksService = inject(BlocksService);\r\n\r\n\r\n\tpublic locale = this._apiConsts.LOCALE;\r\n\r\n\tpublic orderDetails = {};\r\n\tpublic params: any = {};\r\n\tpublic from_mp = true;\r\n\tpublic payments: any;\r\n\tpublic blocks: any;\r\n\r\n\t/**\r\n * @description variable para recibir un template en caso de que se quiera cambiar la informacion por defecto.\r\n */\r\n public notInfoToMethodTemplate:TemplateRef<any> | null = null;\r\n\r\n\tconstructor() { }\r\n\r\n\tngOnInit() {\r\n\t\tthis._checkoutService.order$.subscribe(\r\n res => {\r\n //console.log('LO QUE LLEGA EN ORDEN', res);\r\n res?.number ? this.params = {\r\n external_reference: res.number,\r\n } : null\r\n //this.payments = [{method:{code:'bank_transsfer'}}]\r\n this.payments = res?.payments ? res.payments : null\r\n },\r\n );\r\n \r\n this._blocksService.getBlocks('info_metodo_pago')\r\n this._blocksService.blocks$.subscribe(res => this.blocks = res)\r\n\t}\r\n\r\n\t/**\r\n\t\t * @description Chequea si existe un bloque recibido por parametro.\r\n\t\t * @param codeBlock codigo del bloque.\r\n\t\t * @returns el bloque si lo encontro.\r\n\t\t */\r\n\tcontainsBlock(codeBlock: string): any { return this.blocks.find((block:any) => block.code == codeBlock) }\r\n\r\n}\r\n","<div id=\"container\" class=\"flex-center generalContainer container-xl\">\r\n\t@if(payments && payments[0].method.code){\r\n\t<div class=\"Main card my-2\">\r\n\t\t@if(this.blocks && this.blocks.length > 0){ \r\n\t\t\t@if(containsBlock(this.payments[0].method.code); as bloque) {\r\n\t\t\t\t<div class=\"wrap my-4 card-body\" [id]=\"bloque.code\">\r\n\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t<div class=\"col-md-12 col-12\">\r\n\t\t\t\t\t\t\t<h5 [class]=\"bloque.code+'-title'\">{{ (bloque?.translations[locale]?.name ?\r\n\t\t\t\t\t\t\t\tbloque.translations[locale].name :\r\n\t\t\t\t\t\t\t\t'thanks-for-buying') | translate\r\n\t\t\t\t\t\t\t\t| uppercase }}</h5>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t<div class=\"col-md-12 col-12 text-start\">\r\n\t\t\t\t\t\t\t<app-blocks-ec [section]=\"'info_metodo_pago'\" [blockFilters]=\"payments[0].method.code\">\r\n\t\t\t\t\t\t\t</app-blocks-ec>\r\n\t\t\t\t\t\t\t<div class=\"d-flex flex-column details\">\r\n\t\t\t\t\t\t\t\t<p class=\"card-text\">{{ ('number' | translate) + ': ' + params.external_reference }}</p>\r\n\t\t\t\t\t\t\t\t<p class=\"card-text\">{{((params.payment_status || 'pending') | translate)}}</p>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}@else {\r\n\t\t\t\t<ng-container *ngTemplateOutlet=\"notInfoToMethodTemplate ? notInfoToMethodTemplate : notInfoToMethod; context: { $implicit: params }\"></ng-container>\r\n\t\t\t}\r\n\t\t} @else{\r\n\t\t\t<ng-container *ngTemplateOutlet=\"notInfoToMethodTemplate ? notInfoToMethodTemplate : notInfoToMethod; context: { $implicit: params }\"></ng-container>\r\n\t}\r\n\t</div>\r\n\t} @else {\r\n\t\t<app-loading-full-ec></app-loading-full-ec>\t\r\n\t}\r\n</div>\r\n\r\n<ng-template #notInfoToMethod let-params>\r\n\r\n\t<div class=\"wrap my-4 card-body\">\r\n\t\t<div class=\"row\">\r\n\t\t\t<div class=\"col-md-12 col-12\">\r\n\t\t\t\t<h5 class=\"card-title titpage center-block text-center\">\r\n\t\t\t\t\t{{ 'thanks-for-buying' | translate | uppercase }}\r\n\t\t\t\t</h5>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"row\">\r\n\t\t\t<div class=\"col-md-12 col-12 text-center py-3\">\r\n\t\t\t\t<h4 class=\"thanks-details\">{{ 'thanks-details' | translate }}</h4>\r\n\t\t\t\t<h5 class=\"number\">{{ ('number' | translate) + ': ' + params.external_reference }}</h5>\r\n\t\t\t\t<h5 class=\"pending\">{{ ((params.payment_status || 'pending') | translate) }}</h5>\r\n\t\t\t\t<!-- <h5 *ngIf=\"!from_mp\">{{ ('will_contact' | translate) }}</h5> -->\r\n\r\n\t\t\t\t<!-- <a routerLink=\"/collection\"><button class=\"comprar\">{{ 'continue-shopping' | translate }}</button></a> -->\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</ng-template>","import { Component, inject, OnInit } from '@angular/core';\r\nimport { OrdersService } from '../../../ec-services';\r\nimport { filter } from 'rxjs';\r\nimport { LoadingFullEcComponent } from '../../widgets-ec';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport moment from 'moment';\r\nimport { Router } from '@angular/router';\r\nimport { EcCurrencySymbolPipe } from '../../../ec-pipe';\r\n\r\n@Component({\r\n\tselector: 'app-orders-ec',\r\n\tstandalone: true,\r\n\timports: [LoadingFullEcComponent, TranslateModule, TitleCasePipe, EcCurrencySymbolPipe],\r\n\ttemplateUrl: './orders-list-ec.component.html',\r\n\tstyleUrl: './orders-list-ec.component.scss'\r\n})\r\nexport class OrdersListEcComponent implements OnInit {\r\n\r\n\tprivate _ordersService: OrdersService = inject(OrdersService);\r\n\tprivate _router: Router = inject(Router);\r\n\r\n\tpublic loading: boolean = false;\r\n\tpublic orders: any[] = [];\r\n\tprivate error: string = \"\";\r\n\tpublic sortValue: any;\r\n public showPrice: boolean = false;\r\n public creditAmountConfigured: boolean = false;\r\n\r\n\t/**\r\n\t * @description name -> nombre de clave de valuesToSort; asc -> true: ascendente, false: descendente\r\n\t */\r\n\tpublic currentSort: any = { name: '', asc: true }\r\n\t/**\r\n\t * @description true -> ordena de forma ascendente | false -> ordena de forma decreciente\r\n\t */\r\n\tpublic valuesToSort: any = {\r\n\t\tnumber: { asc: true, attribute: 'number' },\r\n\t\tpaymentState: { asc: true, attribute: 'state' },\r\n\t\tmethod: { asc: true, attribute: 'method', subAttribute: 'name' },\r\n\t\tmethodState: { asc: true, attribute: 'state' },\r\n\t\tdate: { asc: true, attribute: 'checkoutCompletedAt' },\r\n\t\ttotal: { asc: true, attribute: 'total' }\r\n\t};\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.loading = true;\r\n\t\tthis._ordersService.updateOrders();\r\n\t\tthis._ordersService.orders$.pipe(filter(or => or)).subscribe({\r\n\t\t\tnext: (orders) => {\r\n\t\t\t\tthis.orders = this.sortedByNewest(orders);\r\n\t\t\t\tthis.loading = false\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\tthis.loading = false\r\n\t\t\t\tthis.error = 'orders-error';\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tsortedByNewest(orders: any) {\r\n\t\treturn orders && orders.length && orders.sort((anOrder: any, otherOrder: any) => anOrder.number > otherOrder.number ? -1 : 1)\r\n\t}\r\n\r\n\t/**\r\n\t* @description Ordena la lista de ordenes\r\n\t* @param value recibe una valor que debe coincidir con las claves de la variable valuesToSort\r\n\t*/\r\n\tsortOrders(value: any) {\r\n\t\tthis.sortValue = value\r\n\t\tthis.setCurrentSort(this.sortValue, this.valuesToSort[this.sortValue].asc)\r\n\t\tconst comparator =\r\n\t\t\t(this.valuesToSort[this.sortValue].asc)\r\n\t\t\t\t? [-1, 1]\r\n\t\t\t\t: [1, -1]\r\n\t\tthis.valuesToSort[this.sortValue].asc = !this.valuesToSort[this.sortValue].asc\r\n\t\t\r\n\t\t\tlet typeValue\r\n\t\tif (this.orders.length > 0) {\r\n\t\t\ttypeValue = typeof (this.orders[0])\r\n\t\t}\r\n\t\tlet sortFunction = this.getSortFunction(this.sortValue)\r\n\t\tthis.orders =\r\n\t\t\tthis.sortValue\r\n\t\t\t\t? this.orders.sort((aOrders, otherOrders) => sortFunction(aOrders, otherOrders, this.valuesToSort[this.sortValue], comparator))\r\n\t\t\t\t: this.orders\r\n\t}\r\n\r\n\t/**\r\n\t * @description funcion utilizada para desempate.\r\n\t * @param aOrders\r\n\t * @param otherOrders\r\n\t * @param comparator\r\n\t * @returns\r\n\t */\r\n\tprivate tieBreaker(aOrders: any, otherOrders: any, comparator: any) {\r\n\t\treturn aOrders.number.toLowerCase() < otherOrders.number.toLowerCase() ? comparator[0] : comparator[1]\r\n\t}\r\n\t/**\r\n\t * @description cambia los valores de la variable currentSort\r\n\t * @param name\r\n\t * @param asc\r\n\t */\r\n\tprivate setCurrentSort(name: string, asc: boolean) {\r\n\t\tthis.currentSort.name = name;\r\n\t\tthis.currentSort.asc = asc\r\n\t}\r\n\t/**\r\n\t * @description retorna la funcion que se debe utilizar para el sort del arreglo\r\n\t * @param value parametro que indica el tipo de funcion que debe retornar\r\n\t * @returns funcion para utilizar en la busqueda\r\n\t */\r\n\tprivate getSortFunction(value: any): Function {\r\n\t\tswitch (value) {\r\n\t\t\tcase 'paymentState':\r\n\t\t\t\treturn this.sortPaymentState.bind(this);\r\n\t\t\tcase 'method':\r\n\t\t\t\treturn this.sortShipments.bind(this);\r\n\t\t\tcase 'methodState':\r\n\t\t\t\treturn this.sortShipments.bind(this);\r\n\t\t\tcase 'total':\r\n\t\t\t\treturn this.sortNumber.bind(this);\r\n\t\t\tdefault:\r\n\t\t\t\treturn this.sortText.bind(this);\r\n\t\t}\r\n\t}\r\n\r\n\t/* Funciones para ordernar */\r\n\tprivate sortPaymentState(aOrders: any, otherOrders: any, data: any, comparator: any) {\r\n\t\treturn (aOrders.payments[0][data.attribute] == otherOrders.payments[0][data.attribute])\r\n\t\t\t? this.tieBreaker(aOrders, otherOrders, comparator)\r\n\t\t\t: String(aOrders.payments[0][data.attribute]).toLowerCase() < String(otherOrders.payments[0][data.attribute]).toLowerCase() ? comparator[0] : comparator[1]\r\n\t}\r\n\r\n\tprivate sortShipments(aOrders: any, otherOrders: any, data: any, comparator: any) {\r\n\t\tif (data.subAttribute) {\r\n\t\t\treturn (aOrders.shipments[0][data.attribute][data.subAttribute] == otherOrders.shipments[0][data.attribute][data.subAttribute])\r\n\t\t\t\t? this.tieBreaker(aOrders, otherOrders, comparator)\r\n\t\t\t\t: String(aOrders.shipments[0][data.attribute][data.subAttribute]).toLowerCase() < String(otherOrders.shipments[0][data.attribute][data.subAttribute]).toLowerCase() ? comparator[0] : comparator[1]\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn (aOrders.shipments[0][data.attribute] == otherOrders.shipments[0][data.attribute])\r\n\t\t\t\t? this.tieBreaker(aOrders, otherOrders, comparator)\r\n\t\t\t\t: String(aOrders.shipments[0][data.attribute]).toLowerCase() < String(otherOrders.shipments[0][data.attribute]).toLowerCase() ? comparator[0] : comparator[1]\r\n\t\t}\r\n\t}\r\n\r\n\tprivate sortNumber(aOrders: any, otherOrders: any, data: any, comparator: any) {\r\n\t\treturn aOrders[data.attribute] < otherOrders[data.attribute] ? comparator[0] : comparator[1]\r\n\t}\r\n\r\n\tprivate sortText(aOrders: any, otherOrders: any, data: any, comparator: any) {\r\n\t\treturn (aOrders[data.attribute] == otherOrders[data.attribute])\r\n\t\t\t? aOrders.number.toLowerCase() < otherOrders.number.toLowerCase() ? comparator[0] : comparator[1]\r\n\t\t\t: String(aOrders[data.attribute]).toLowerCase() < String(otherOrders[data.attribute]).toLowerCase() ? comparator[0] : comparator[1]\r\n\t}\r\n\r\n\ttoDate(date:any, format:any){ return moment(date).format(!format && 'DD/MM/YYYY, h:mm:ss a' || format)}\r\n\r\n\tgoToOrder(order:any){\r\n //this._ordersService.setSelectedOrder(order);\r\n //this._router.navigateByUrl((`account/orders/${order.number}`))\r\n }\r\n}\r\n","<div class=\"container-fluid\" id=\"ordersEcComponent\">\r\n @if(!loading){\r\n <section id=\"orders\" class=\"w-100\">\r\n @if(orders && orders.length){\r\n <div class=\"row mb-1 border-bottom\">\r\n <div class=\"col-lg-2 col-12\">\r\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'number' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\r\n (click)=\"sortOrders('number')\">{{ 'order' | translate }}:</p>\r\n </div>\r\n <div class=\"col-lg-2 col-12\">\r\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'paymentState' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\r\n (click)=\"sortOrders('paymentState')\">{{ 'payment-state' | translate }}:</p>\r\n </div>\r\n <div class=\"col-lg-2 col-12\">\r\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'method' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\r\n (click)=\"sortOrders('method')\">{{ 'shipment-method' | translate }}:</p>\r\n </div>\r\n <div class=\"col-lg-2 col-12 \">\r\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'methodState' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\r\n (click)=\"sortOrders('methodState')\">\r\n {{ 'shipment-state' | translate }}:</p>\r\n </div>\r\n <div class=\"col-lg-2 col-12\">\r\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'date' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\r\n (click)=\"sortOrders('date')\">{{ 'date' | translate }}:</p>\r\n </div>\r\n <div class=\"col-lg-2 col-12\">\r\n <p [class]=\"'st dropdown-toggle cursor-pointer my-2 '+ (currentSort.name == 'total' ? 'applied ' + (!currentSort.asc ? 'asc' : 'desc') : '')\"\r\n (click)=\"sortOrders('total')\">{{ 'total' | translate }}:</p>\r\n </div>\r\n </div>\r\n @for(order of orders; track $index){\r\n <div class=\"row item border-bottom py-2\">\r\n <div class=\"col-lg-2 col-12\">\r\n <h5 class=\"fw-bold\">\r\n {{ order.number }}\r\n </h5>\r\n </div>\r\n <div class=\"col-lg-2 col-12\">\r\n @if(order.payments && order.payments.length > 0){\r\n <p class=\"price\">\r\n {{ order.payments[0].state | translate | titlecase }}\r\n </p>\r\n }\r\n </div>\r\n <div class=\"col-lg-2 col-12\">\r\n <p class=\"price\">\r\n {{ order.shipments[0].method.name }}\r\n </p>\r\n </div>\r\n <div class=\"col-lg-2 col-12\">\r\n <p class=\"price\">\r\n {{ order.shipments[0].state | translate | titlecase }}\r\n </p>\r\n <!-- ACA DEBERIA IR EL LINK DE SEGUIMIENTO -->\r\n <!-- <button class=\"btn btn-outline-dark btnLogout px-3 py-1 font-size-10 w-auto btn-sm\">Ver seguimiento</button> -->\r\n @if(order.tracking){\r\n <a [href]=\"order.tracking\"\r\n class=\"btn btn-outline-dark btnLogout px-3 py-1 font-size-10 w-auto btn-sm\">Ver seguimiento</a>\r\n }\r\n </div>\r\n <div class=\"col-lg-2 col-12\">\r\n <p class=\"price\">\r\n {{ toDate(order.checkoutCompletedAt, 'DD/MM/YYYY') | translate }}<br>\r\n {{ toDate(order.checkoutCompletedAt, 'h:mm:ss a') | translate }}\r\n </p>\r\n </div>\r\n <div class=\"col-lg-2 col-12 d-flex\">\r\n @if(creditAmountConfigured ? showPrice : true){\r\n <h5 class=\"fw-bold text-nowrap\">\r\n {{ (order.totals.total) | ecCurrencySymbol }}\r\n </h5>\r\n }\r\n <!-- <button class=\"btn px-0 w-100 btdetalle\" (click)=\"goToOrder(order)\">{{\r\n 'see-order' | translate }}</button> -->\r\n <button class=\"btn px-0 w-100 btdetalle\" (click)=\"goToOrder(order)\">\r\n <i class=\"bi bi-box-arrow-in-right\"></i></button>\r\n </div>\r\n </div>\r\n }\r\n }@else {\r\n <div class=\"w-100 h-50\">\r\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\r\n <h5>{{ 'no-orders' | translate }}</h5>\r\n </div>\r\n </div>\r\n }\r\n </section>\r\n }@else {\r\n <div class=\"w-100 h-50 py-5\">\r\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n\r\n<ng-template #errorView>\r\n <div class=\"w-100 h-50\">\r\n <div class=\"d-flex flex-row justify-content-center align-items-center text-center\">\r\n <h4>{{ 'orders-error' | translate }}</h4>\r\n </div>\r\n </div>\r\n</ng-template>\r\n","import { Component, inject } from '@angular/core';\r\nimport { OrderEcComponent } from './order-ec/order-ec.component';\r\nimport { AuthService, ParametersService } from '../../ec-services';\r\nimport { Router } from '@angular/router';\r\nimport { OrdersListEcComponent } from './orders-list-ec/orders-list-ec.component';\r\n\r\n@Component({\r\n\tselector: 'lib-account-ec',\r\n\tstandalone: true,\r\n\timports: [OrdersListEcComponent],\r\n\ttemplateUrl: './account-ec.component.html',\r\n\tstyleUrl: './account-ec.component.scss'\r\n})\r\nexport class AccountEcComponent {\r\n\tprivate _authService: AuthService = inject(AuthService)\r\n\tprivate _router: Router = inject(Router)\r\n\tprivate _paramsService: ParametersService = inject(ParametersService)\r\n\tpublic params$: any = this._paramsService.getParameters()\r\n\t\r\n\tlogout = (path:string = '/home') => {\r\n this._authService.logout();\r\n this._router.navigateByUrl(path);\r\n }\r\n}\r\n","<section class=\"perfil mt-0\" id=\"accountEcComponent\">\r\n <div class=\"container row w-100 mx-auto py-md-3\">\r\n <div class=\"col-12 py-3\">\r\n <div class=\"row w-100 mx-auto border-bottom justify-content-between align-items-center py-3\">\r\n <h3 class=\"text-black w-auto\">MIS PEDIDOS</h3>\r\n <button class=\"btn btn-outline-dark px-3 py-1 font-size-10 w-auto\" (click)=\"logout()\">CERRAR\r\n SESIÓN</button>\r\n </div>\r\n <app-orders-ec></app-orders-ec>\r\n </div>\r\n </div>\r\n</section>\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { OrdersService } from '../../../ec-services';\r\n\r\n@Component({\r\n\tselector: 'app-order-ec',\r\n\tstandalone: true,\r\n\timports: [],\r\n\ttemplateUrl: './order-ec.component.html',\r\n\tstyleUrl: './order-ec.component.scss'\r\n})\r\nexport class OrderEcComponent implements OnInit {\r\n\r\n\tprivate _orderService: OrdersService = inject(OrdersService);\r\n\r\n\tngOnInit(): void {\r\n\t\tthrow new Error('Method not implemented.');\r\n\t}\r\n}\r\n","<p>order-ec works!</p>\r\n","//Types\r\nexport * from './types';\r\n//Interfaces\r\nexport * from './connection';\r\nexport * from './environment';\r\nexport * from './options';\r\nexport * from './parameter';\r\nexport * from './blocks';\r\nexport * from './product';\r\nexport * from './analytics';\r\nexport * from './currency';\r\nexport * from './deserializable';\r\nexport * from './storage';\r\nexport * from './filter';\r\nexport * from './pagination';\r\nexport * from './coupon';\r\nexport * from './step';\r\nexport * from './checkout';","import { inject, Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';\r\nimport { AuthService } from '../ec-services';\r\n/**\r\n * Guarda que controla que el usuario este logueado a no.\r\n * @param route \r\n * @param state \r\n * @returns \r\n */\r\nexport const authGuard: CanActivateFn = (route:ActivatedRouteSnapshot, state) => {\r\n\tconst authService = inject(AuthService)\r\n\tconst router = inject(Router);\r\n\tconst redirectTo = route.data[\"redirectTo\"] || '/'\r\n\r\n\tif(!authService.isAuthenticated())\r\n\t\trouter.navigateByUrl(redirectTo)\r\n\r\n\treturn authService.isAuthenticated();\r\n};\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpHandlerFn, HttpInterceptor, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\r\nimport { inject, Injectable, Injector } from '@angular/core';\r\nimport { AuthService, AuthStorageService } from '../ec-services';\r\nimport { ApiConstantsService } from '../constants';\r\nimport { catchError, Observable, of, throwError } from 'rxjs';\r\n\r\nconst handleErrors: any = (err: HttpErrorResponse): Observable<HttpEvent<unknown>> => {\r\n\t\r\n\tif (err.status === 403) {\r\n\t\tinject(AuthService).doLogoutUser()\r\n\t\treturn throwError(() => err)\r\n\t}\r\n\tif (err.status === 450 || err.status === 401) {\r\n\t\t//this.injector.get(ErrorHandlerService).handlerErrorResponse(err.error)\r\n\t\treturn throwError(() => err)\r\n\t}\r\n\treturn throwError(() => err)\r\n}\r\n\r\n\r\nexport const authInterceptor: HttpInterceptorFn = (req: HttpRequest<unknown>, next: HttpHandlerFn): Observable<HttpEvent<unknown>> => {\r\n\tconst constants = inject(ApiConstantsService); \r\n const authTokenService = inject(AuthStorageService); // Servicio más sencillo para obtener el token.\r\n const authToken = authTokenService.getAuthToken();\r\n\t\r\n\tif(authToken && req.url.includes(constants.getUrlBase()) && !req.url.includes('shop-api/login-check')){\r\n\t\tlet headers = {\r\n\t\t\tsetHeaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\tAuthorization: `Bearer ${authToken}`\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(req.url.includes('contact-form/response')){\r\n\t\t\tdelete (headers as any).setHeaders['Content-Type']\r\n\t\t}\r\n\t\tlet authReq:HttpRequest<any> = req.clone(headers)\r\n\r\n\t\treturn next(authReq)\r\n\t}\r\n\r\n\treturn next(req)\r\n};","/*\r\n * Public API Surface of ng-easycommerce\r\n */\r\n\r\n//Components\r\nexport * from './lib/ec-components';\r\n\r\n//Providers\r\nexport * from './lib/providers';\r\n\r\n//Interfaces\r\nexport * from './lib/interfaces';\r\n\r\n//Guards\r\nexport * from './lib/ec-guards';\r\n\r\n//Constants\r\nexport * from './lib/constants/core.constants.service';\r\n\r\n//Pipe\r\nexport * from './lib/ec-pipe';\r\n\r\n//Interceptors\r\nexport * from './lib/interceptors';\r\n\r\n//Services\r\nexport * from './lib/ec-services';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["register","i1","i2"],"mappings":"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"}
|