ng-easycommerce-v18 0.0.1
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/.editorconfig +16 -0
- package/README.md +27 -0
- package/angular.json +48 -0
- package/package.json +58 -0
- package/projects/ng-easycommerce/README.md +24 -0
- package/projects/ng-easycommerce/ng-package.json +7 -0
- package/projects/ng-easycommerce/package.json +12 -0
- package/projects/ng-easycommerce/src/lib/api/connection.service.ts +79 -0
- package/projects/ng-easycommerce/src/lib/api/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/ct.json +274 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/en.json +380 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/es.json +387 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/fr.json +266 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/gl.json +274 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/pr.json +274 -0
- package/projects/ng-easycommerce/src/lib/assets/recaptcha/recaptcha-site-keys.json +4 -0
- package/projects/ng-easycommerce/src/lib/assets/recaptcha/recaptcha-sites-prod.json +39 -0
- package/projects/ng-easycommerce/src/lib/assets/recaptcha/recaptcha-sites.json +53 -0
- package/projects/ng-easycommerce/src/lib/classes/checkout/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/classes/checkout/steps.ts +37 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/attributes-filter.ts +74 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/category-filter.ts +57 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/dynamics-filter.ts +57 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/filter-factory.ts +23 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/filter.ts +89 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/index.ts +6 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/sort-filter.ts +93 -0
- package/projects/ng-easycommerce/src/lib/classes/index.ts +3 -0
- package/projects/ng-easycommerce/src/lib/classes/user.ts +68 -0
- package/projects/ng-easycommerce/src/lib/constants/api.constants.service.ts +69 -0
- package/projects/ng-easycommerce/src/lib/constants/core.constants.service.ts +210 -0
- package/projects/ng-easycommerce/src/lib/constants/index.ts +2 -0
- package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/block-ec.component.ts +107 -0
- package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/index.ts +2 -0
- package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/menu-ec.component.ts +102 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.html +10 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.ts +13 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.html +19 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.ts +34 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.html +31 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.ts +55 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/index.ts +6 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.html +30 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.ts +92 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.html +55 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.ts +102 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.html +233 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.ts +149 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.html +113 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.scss +12 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.ts +100 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.html +111 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.ts +77 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.html +62 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.ts +89 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.ts +33 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.ts +81 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.html +40 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.ts +97 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.html +41 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.ts +86 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/index.ts +4 -0
- package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.html +20 -0
- package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.ts +30 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.ts +24 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.ts +51 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/index.ts +2 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.html +56 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.scss +38 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.ts +67 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.html +836 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.ts +302 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.html +32 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.ts +52 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.html +12 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.ts +48 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.html +195 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.ts +103 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.html +28 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.ts +26 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.ts +3 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.html +33 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.ts +116 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.html +13 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.ts +26 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.html +111 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.ts +111 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.html +33 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.ts +39 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.html +59 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.ts +65 -0
- package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.html +16 -0
- package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.ts +83 -0
- package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.ts +32 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.ts +45 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.ts +49 -0
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.spec.ts +23 -0
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.ts +18 -0
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.spec.ts +23 -0
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.ts +22 -0
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.spec.ts +23 -0
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.ts +16 -0
- package/projects/ng-easycommerce/src/lib/ec-components/index.ts +17 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.html +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.ts +82 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.html +31 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.ts +46 -0
- package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.html +65 -0
- package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.scss +8 -0
- package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.ts +20 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/index.ts +4 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/index.ts +3 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.html +7 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.ts +13 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.html +5 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.ts +13 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.html +3 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.ts +13 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.html +11 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.ts +177 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.html +47 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.ts +22 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.html +6 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.ts +70 -0
- package/projects/ng-easycommerce/src/lib/ec-guards/auth.guard.ts +19 -0
- package/projects/ng-easycommerce/src/lib/ec-guards/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/ec-pipe/ec-currency-symbol.pipe.ts +99 -0
- package/projects/ng-easycommerce/src/lib/ec-pipe/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/ec-services/addressing.service.ts +199 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/analytics.service.ts +76 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/doppler.service.ts +38 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/facebook-pixel.service.ts +214 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/google-analytics.service.ts +284 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/gtm.service.ts +413 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/index.ts +6 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/metricool-pixel.service.ts +46 -0
- package/projects/ng-easycommerce/src/lib/ec-services/auth.service.ts +438 -0
- package/projects/ng-easycommerce/src/lib/ec-services/auth.storage.service.ts +54 -0
- package/projects/ng-easycommerce/src/lib/ec-services/blocks-repository.service.ts +67 -0
- package/projects/ng-easycommerce/src/lib/ec-services/blocks.service.ts +48 -0
- package/projects/ng-easycommerce/src/lib/ec-services/cart.service.ts +492 -0
- package/projects/ng-easycommerce/src/lib/ec-services/channel.service.ts +81 -0
- package/projects/ng-easycommerce/src/lib/ec-services/checkout.service.ts +196 -0
- package/projects/ng-easycommerce/src/lib/ec-services/currency.service.ts +179 -0
- package/projects/ng-easycommerce/src/lib/ec-services/filters.service.ts +133 -0
- package/projects/ng-easycommerce/src/lib/ec-services/form.service.ts +82 -0
- package/projects/ng-easycommerce/src/lib/ec-services/index.ts +24 -0
- package/projects/ng-easycommerce/src/lib/ec-services/local-storage.service.ts +54 -0
- package/projects/ng-easycommerce/src/lib/ec-services/ngx-local-storage.service.ts +66 -0
- package/projects/ng-easycommerce/src/lib/ec-services/options.service.ts +274 -0
- package/projects/ng-easycommerce/src/lib/ec-services/order-utility.service.ts +52 -0
- package/projects/ng-easycommerce/src/lib/ec-services/pagination.service.ts +172 -0
- package/projects/ng-easycommerce/src/lib/ec-services/parameters.service.ts +67 -0
- package/projects/ng-easycommerce/src/lib/ec-services/payment.service.ts +63 -0
- package/projects/ng-easycommerce/src/lib/ec-services/product-detail.service.ts +288 -0
- package/projects/ng-easycommerce/src/lib/ec-services/products.service.ts +162 -0
- package/projects/ng-easycommerce/src/lib/ec-services/re-captcha.service.ts +126 -0
- package/projects/ng-easycommerce/src/lib/ec-services/shipment.service.ts +174 -0
- package/projects/ng-easycommerce/src/lib/ec-services/stores.service.ts +27 -0
- package/projects/ng-easycommerce/src/lib/ec-services/toast.service.ts +84 -0
- package/projects/ng-easycommerce/src/lib/interceptors/auth.interceptor.ts +43 -0
- package/projects/ng-easycommerce/src/lib/interceptors/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/interfaces/analytics/event-key.ts +14 -0
- package/projects/ng-easycommerce/src/lib/interfaces/analytics/facebook-pixel-data.ts +5 -0
- package/projects/ng-easycommerce/src/lib/interfaces/analytics/gtm-config.ts +6 -0
- package/projects/ng-easycommerce/src/lib/interfaces/analytics/index.ts +3 -0
- package/projects/ng-easycommerce/src/lib/interfaces/blocks.ts +56 -0
- package/projects/ng-easycommerce/src/lib/interfaces/checkout.ts +14 -0
- package/projects/ng-easycommerce/src/lib/interfaces/connection.ts +8 -0
- package/projects/ng-easycommerce/src/lib/interfaces/coupon.ts +5 -0
- package/projects/ng-easycommerce/src/lib/interfaces/currency.ts +10 -0
- package/projects/ng-easycommerce/src/lib/interfaces/deserializable.ts +3 -0
- package/projects/ng-easycommerce/src/lib/interfaces/environment.ts +6 -0
- package/projects/ng-easycommerce/src/lib/interfaces/filter.ts +59 -0
- package/projects/ng-easycommerce/src/lib/interfaces/index.ts +18 -0
- package/projects/ng-easycommerce/src/lib/interfaces/options.ts +28 -0
- package/projects/ng-easycommerce/src/lib/interfaces/pagination.ts +27 -0
- package/projects/ng-easycommerce/src/lib/interfaces/parameter.ts +15 -0
- package/projects/ng-easycommerce/src/lib/interfaces/product.ts +81 -0
- package/projects/ng-easycommerce/src/lib/interfaces/step.ts +19 -0
- package/projects/ng-easycommerce/src/lib/interfaces/storage.ts +7 -0
- package/projects/ng-easycommerce/src/lib/interfaces/store.ts +17 -0
- package/projects/ng-easycommerce/src/lib/interfaces/types/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/interfaces/types/user.type.ts +5 -0
- package/projects/ng-easycommerce/src/lib/providers/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/providers/provideEnvironment.ts +24 -0
- package/projects/ng-easycommerce/src/lib/stores/currency.store.ts +20 -0
- package/projects/ng-easycommerce/src/lib/stores/index.ts +1 -0
- package/projects/ng-easycommerce/src/public-api.ts +24 -0
- package/projects/ng-easycommerce/tsconfig.lib.json +15 -0
- package/projects/ng-easycommerce/tsconfig.lib.prod.json +11 -0
- package/projects/ng-easycommerce/tsconfig.spec.json +15 -0
- package/tsconfig.doc.json +4 -0
- package/tsconfig.json +37 -0
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { BalanceCustomer, CartItem, ICoupon, Product } from '../interfaces';
|
|
3
|
+
import { AuthService } from './auth.service';
|
|
4
|
+
import { ToastService } from './toast.service';
|
|
5
|
+
import { ConnectionService } from '../api';
|
|
6
|
+
import { ApiConstantsService, CoreConstantsService } from '../constants';
|
|
7
|
+
import { BehaviorSubject, combineLatest, firstValueFrom, map, Observable } from 'rxjs';
|
|
8
|
+
import { AnalyticsService } from './analytics';
|
|
9
|
+
import { LocalStorageService } from './local-storage.service';
|
|
10
|
+
import { ChannelService } from './channel.service';
|
|
11
|
+
import { NgxLocalStorageService } from './ngx-local-storage.service';
|
|
12
|
+
@Injectable({
|
|
13
|
+
providedIn: 'root'
|
|
14
|
+
})
|
|
15
|
+
export class CartService {
|
|
16
|
+
private _authService: AuthService = inject(AuthService);
|
|
17
|
+
private _toastService: ToastService = inject(ToastService);
|
|
18
|
+
private _connection: ConnectionService = inject(ConnectionService);
|
|
19
|
+
private _apiConsts: ApiConstantsService = inject(ApiConstantsService);
|
|
20
|
+
private _analyticsService: AnalyticsService = inject(AnalyticsService);
|
|
21
|
+
private _localStorage: LocalStorageService = inject(LocalStorageService);
|
|
22
|
+
private _channelService: ChannelService = inject(ChannelService);
|
|
23
|
+
private _consts: CoreConstantsService = inject(CoreConstantsService);
|
|
24
|
+
private _storage: NgxLocalStorageService = inject(NgxLocalStorageService);
|
|
25
|
+
|
|
26
|
+
private _cartSubject: BehaviorSubject<any> = new BehaviorSubject(null);
|
|
27
|
+
private _promotionsSubject: BehaviorSubject<any> = new BehaviorSubject([]);
|
|
28
|
+
private _couponSubject: BehaviorSubject<any> = new BehaviorSubject(null);
|
|
29
|
+
private _cartItemsSubject: BehaviorSubject<CartItem[]> = new BehaviorSubject<CartItem[]>([])
|
|
30
|
+
private _requestInProcess: BehaviorSubject<boolean> = new BehaviorSubject(false);
|
|
31
|
+
private _balanceCustomerSubject: BehaviorSubject<BalanceCustomer> = new BehaviorSubject<BalanceCustomer>({
|
|
32
|
+
allowAnyPaymentMethod: false,
|
|
33
|
+
allowExceedBalance: false,
|
|
34
|
+
creditAmount: 0,
|
|
35
|
+
showMax: false,
|
|
36
|
+
showPrice: false,
|
|
37
|
+
remainingCredits: 0,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
private readonly CART_KEY: string = 'cart';
|
|
41
|
+
private readonly CART_TOKEN_KEY: string = 'cart_token';
|
|
42
|
+
|
|
43
|
+
private _items: any[] = [];
|
|
44
|
+
private _count: number = 0;
|
|
45
|
+
public cartToken: string | null = '';
|
|
46
|
+
public channelConfig: any = {};
|
|
47
|
+
private _locale = "";
|
|
48
|
+
public cartItems$ = this._cartItemsSubject.asObservable().pipe(map(items => this.switchPriceInCartItem(items)))
|
|
49
|
+
public coupon$: Observable<any> = this._couponSubject.asObservable();
|
|
50
|
+
public cart$: Observable<any> = this._cartSubject.asObservable();
|
|
51
|
+
public loading$: Observable<boolean> = this._requestInProcess.asObservable();
|
|
52
|
+
private _haveToUpdate = true;
|
|
53
|
+
|
|
54
|
+
//API URL
|
|
55
|
+
private _cartBaseUrl: string = `${this._apiConsts.SHOP_API_URL}${this._apiConsts.CHANNEL}/carts`;
|
|
56
|
+
|
|
57
|
+
public updateItemQuantityApi(item_id: any) { return this._cartBaseUrl + '/' + this.cartToken + '/items/' + item_id + '?locale=' + this._apiConsts.LOCALE; }
|
|
58
|
+
public addItemApi(): string { return this._cartBaseUrl + '/' + this.cartToken + '/items?locale=' + this._apiConsts.LOCALE }
|
|
59
|
+
public cartItemsApi(): string { return this._cartBaseUrl + '?locale=' + this._apiConsts.LOCALE }
|
|
60
|
+
public deleteItemApi(item_id: string) { return this._cartBaseUrl + '/' + this.cartToken + '/items/' + item_id + '?locale=' + this._apiConsts.LOCALE; }
|
|
61
|
+
public couponApi() { return this._cartBaseUrl + '/' + this.cartToken + '/coupon' };
|
|
62
|
+
|
|
63
|
+
constructor() {
|
|
64
|
+
this._requestInProcess.next(true);
|
|
65
|
+
this.cartToken = this._localStorage.getItem(this.CART_TOKEN_KEY) || null;
|
|
66
|
+
this.initializeDataCart();
|
|
67
|
+
this._channelService.channel$.subscribe(res => this.channelConfig = res)
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Inicializa el carrito con los datos del local storage en caso de que existan o no.
|
|
71
|
+
*/
|
|
72
|
+
private initializeDataCart() {
|
|
73
|
+
combineLatest([this._authService.loggedIn$, this._storage.getItem(this.CART_KEY)]).subscribe({
|
|
74
|
+
next: ([loggedIn, token]) => {
|
|
75
|
+
//console.log(loggedIn, token);
|
|
76
|
+
this._items = token || [];
|
|
77
|
+
this.getCart()
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Obtiene el carrito desde el backend y lo inicializa.
|
|
83
|
+
* Si existe el cartToken y hay items en el carrito, envía el token como parámetro.
|
|
84
|
+
*/
|
|
85
|
+
private getCart() {
|
|
86
|
+
//console.warn(this._items, this._items.length, this.cartToken)
|
|
87
|
+
firstValueFrom(
|
|
88
|
+
this._connection.post(this.cartItemsApi(), ((this.cartToken && this._items.length >= 1) && { token: this.cartToken }))
|
|
89
|
+
).then((res: any) => {
|
|
90
|
+
//console.log(res)
|
|
91
|
+
this.initializeCart(res)
|
|
92
|
+
})
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Configura el carrito con los parametros iniciales.
|
|
96
|
+
* @param response
|
|
97
|
+
* @returns
|
|
98
|
+
*/
|
|
99
|
+
initializeCart(response: any): any {
|
|
100
|
+
this.cartToken = response.tokenValue;
|
|
101
|
+
this._localStorage.setItem(this.CART_TOKEN_KEY, this.cartToken);
|
|
102
|
+
this._locale = response.locale;
|
|
103
|
+
|
|
104
|
+
this.updateCartObj(response, false);
|
|
105
|
+
this.updateCartItems(this.transformItems(response.items));
|
|
106
|
+
this._requestInProcess.next(false);
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Actualiza los items del carrito.
|
|
111
|
+
* @param items
|
|
112
|
+
*/
|
|
113
|
+
updateCartItems(items: any[]) {
|
|
114
|
+
this._items = items;
|
|
115
|
+
this._count = items.length;
|
|
116
|
+
this._cartItemsSubject.next(this._items);
|
|
117
|
+
this.updateLocalCart();
|
|
118
|
+
this._requestInProcess.next(false);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Agrega un producto al carrito con la cantidad deseada.
|
|
122
|
+
* @param product Producto a agregar
|
|
123
|
+
* @param quantity Cantidad
|
|
124
|
+
* @param variantId Id de la variante
|
|
125
|
+
* @returns
|
|
126
|
+
*/
|
|
127
|
+
addToCart(product: Product, quantity: number, variantId: string) {
|
|
128
|
+
//console.log(product);
|
|
129
|
+
if (!this._authService.isAbleToBuy()) {
|
|
130
|
+
this._toastService.show('must-select-customer')
|
|
131
|
+
return
|
|
132
|
+
}
|
|
133
|
+
this._requestInProcess.next(true);
|
|
134
|
+
let added = this.addIfAllreadyExists(product, variantId, quantity);
|
|
135
|
+
|
|
136
|
+
if (!added) {
|
|
137
|
+
firstValueFrom(
|
|
138
|
+
this._connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variantId }))
|
|
139
|
+
.then(
|
|
140
|
+
res => {
|
|
141
|
+
// Manejar la respuesta HTTP exitosa (código 200)
|
|
142
|
+
this.appendToCart(res);
|
|
143
|
+
this._toastService.show('product-added');
|
|
144
|
+
},
|
|
145
|
+
err => {
|
|
146
|
+
// Manejar el error de la llamada HTTP (código 500 u otro error)
|
|
147
|
+
if (err.status === 500) {
|
|
148
|
+
// Código de error 500 (timeout)
|
|
149
|
+
this.handleError(err);
|
|
150
|
+
this._toastService.show('cart-error');
|
|
151
|
+
} else {
|
|
152
|
+
// Otro código de error
|
|
153
|
+
this.handleError(err);
|
|
154
|
+
this._toastService.show('error-server');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Actualiza el carrito agregando los nuevos items.
|
|
162
|
+
* @param cart
|
|
163
|
+
*/
|
|
164
|
+
appendToCart(cart: any) {
|
|
165
|
+
this.updateCartObj(cart);
|
|
166
|
+
this._items = this.transformItems(cart.items);
|
|
167
|
+
this._count = this._items.length;
|
|
168
|
+
this._requestInProcess.next(false);
|
|
169
|
+
this.updateLocalCart();
|
|
170
|
+
this._cartItemsSubject.next(this._items);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Mapea los items del carrito para darle un mejor formato similar a la interfaz `CartItem`.
|
|
174
|
+
* @param items
|
|
175
|
+
* @returns
|
|
176
|
+
*/
|
|
177
|
+
transformItems(items: any): any[] {
|
|
178
|
+
return items.map((item: any) => {
|
|
179
|
+
return {
|
|
180
|
+
product: item.product,
|
|
181
|
+
variant_id: item.product.variants[0].code,
|
|
182
|
+
lot: item.orderItemLot,
|
|
183
|
+
quantity: item.quantity,
|
|
184
|
+
item_id: item.id,
|
|
185
|
+
total: item.total
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Chequea si el producto ya existe en el carrito de compras.
|
|
191
|
+
* @param product
|
|
192
|
+
* @param variantId
|
|
193
|
+
* @param quantityAdd Cantidad a agregar. Por defecto es 1.
|
|
194
|
+
*/
|
|
195
|
+
addIfAllreadyExists(product: Product, variantId: string, quantityAdd: number = 1) {
|
|
196
|
+
return this._items.find((item: any, index) => {
|
|
197
|
+
if (item.product.id == product.id && item.variant_id == variantId) {
|
|
198
|
+
this.updateItemQuantity(item, this.findItem(product.id).quantity + quantityAdd);
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
return false;
|
|
202
|
+
})
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Obtiene la cantidad de un producto del item del carrito
|
|
206
|
+
* @param codeVariant codigo de la variante.
|
|
207
|
+
* @returns la cantidad o `0` en su defecto.
|
|
208
|
+
*/
|
|
209
|
+
getCountFromItemInCart(codeVariant: any): number {
|
|
210
|
+
return this._items.find(item => item.variant_id == codeVariant)?.quantity || 0;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Obtiene un observable con la cantidad de items en el carrito.
|
|
214
|
+
*/
|
|
215
|
+
getCountCartItems(): Observable<number> {
|
|
216
|
+
return this.cartItems$.pipe(map((cartItems) => cartItems?.length));
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Mapea los productos en el carrito para cambiar el precio obteniendo de la variante y seleccionando si es
|
|
220
|
+
* precio de oferta o el precio normal.
|
|
221
|
+
* @param items
|
|
222
|
+
* @returns
|
|
223
|
+
*/
|
|
224
|
+
private switchPriceInCartItem = (items: any[]) => {
|
|
225
|
+
return items.map(
|
|
226
|
+
item => {
|
|
227
|
+
if (item.product) {
|
|
228
|
+
item.product.price = item.product.variants[0].saleprice ? item.product.variants[0].saleprice : item.product.variants[0].price;
|
|
229
|
+
}
|
|
230
|
+
return item
|
|
231
|
+
}
|
|
232
|
+
)
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Actualiza la cantidad de un producto existente en el carrito.
|
|
236
|
+
* @param item el item a actualizar.
|
|
237
|
+
* @param quantity la cantidad nueva.
|
|
238
|
+
*/
|
|
239
|
+
updateItemQuantity(item: CartItem, quantity: number) {
|
|
240
|
+
if (this.validateQuantity(item, quantity)) {
|
|
241
|
+
firstValueFrom(
|
|
242
|
+
this._connection.put(this.updateItemQuantityApi(this.findItemByIdVariant(item.variant_id)), { 'quantity': Number(quantity) })).then(
|
|
243
|
+
res => this.updateCartObj(res) && this.updateCartItemQuantity(item.variant_id, Number(quantity)),
|
|
244
|
+
err => this.handleError(err)
|
|
245
|
+
)
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Maneja el error en caso de que no se pueda agregar al carrito el producto.
|
|
250
|
+
* @param err
|
|
251
|
+
*/
|
|
252
|
+
handleError(err: any): void {
|
|
253
|
+
this._toastService.show('operation-error-param');
|
|
254
|
+
this._requestInProcess.next(false);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Actualiza la cantidad del item del producto del carrito.
|
|
258
|
+
* @param variantId ID de la variante para buscar el item.
|
|
259
|
+
* @param quantity Nueva cantidad.
|
|
260
|
+
*/
|
|
261
|
+
updateCartItemQuantity(variantId: any, quantity: number): void {
|
|
262
|
+
//console.log("updateCartItemQuantity", this._items, variantId)
|
|
263
|
+
let newQuantity = this._items.find(item => item.variant_id == variantId).quantity = quantity;
|
|
264
|
+
this._cartItemsSubject.next(this._items);
|
|
265
|
+
this._requestInProcess.next(false);
|
|
266
|
+
this.updateLocalCart();
|
|
267
|
+
this._toastService.show('product-updated', { quantity: newQuantity });
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Actualiza los datos del carrito en el localStorage.
|
|
271
|
+
*/
|
|
272
|
+
updateLocalCart() {
|
|
273
|
+
this._storage.setItem(this.CART_KEY, this._items)
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Actualiza el carrito. Emite evento de analitics.
|
|
277
|
+
* Actualiza todo lo relacionado al cupón.
|
|
278
|
+
* @param cart Respuesta producida por el enpoint con información del carrito.
|
|
279
|
+
* @param emitEvent
|
|
280
|
+
* @returns
|
|
281
|
+
*/
|
|
282
|
+
updateCartObj(cart: any, emitEvent = true): boolean {
|
|
283
|
+
this._cartSubject.next(cart);
|
|
284
|
+
emitEvent && this._analyticsService.callEvent('add_to_cart', cart);
|
|
285
|
+
//this._promotionsSubject.next(this.orderUtils.getPromotions(cart, true));
|
|
286
|
+
|
|
287
|
+
cart.couponCode
|
|
288
|
+
? this.formatCoupon(cart)
|
|
289
|
+
: this._couponSubject.next(null);
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Aplicar un mejor formato a los datos de los cupones aplicados.
|
|
294
|
+
* @param cart
|
|
295
|
+
*/
|
|
296
|
+
formatCoupon(cart: any) {
|
|
297
|
+
let current_coupon = this._couponSubject.value;
|
|
298
|
+
let coupon: ICoupon = { code: cart.couponCode };
|
|
299
|
+
try {
|
|
300
|
+
const key = Object.keys(cart.cartDiscounts)[0];
|
|
301
|
+
coupon = {
|
|
302
|
+
...coupon,
|
|
303
|
+
amount: (cart.cartDiscounts && cart.cartDiscounts[key].amount.current) || 0,
|
|
304
|
+
name: (cart.cartDiscounts && cart.cartDiscounts[key].name) || 'no-name'
|
|
305
|
+
};
|
|
306
|
+
} catch (e) { }
|
|
307
|
+
(coupon != current_coupon) && this._couponSubject.next(coupon);
|
|
308
|
+
//console.log(coupon);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Retorna el ID del item del carrito.
|
|
312
|
+
* @param variant_id Id de la variante utilizada para buscar el item.
|
|
313
|
+
* @returns
|
|
314
|
+
*/
|
|
315
|
+
findItemByIdVariant(variant_id: any): any {
|
|
316
|
+
return this._items.find(item => item.variant_id == variant_id)!.item_id
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Valida la cantidad para saber si se puede actualizar o no.
|
|
320
|
+
* @param item item del carrito
|
|
321
|
+
* @param quantity cantidad a agregar
|
|
322
|
+
* @returns
|
|
323
|
+
*/
|
|
324
|
+
validateQuantity(item: any, quantity: any) {
|
|
325
|
+
if ((this.getCountFromItemInCart(item.productCode) + quantity) > item.product.variants[0].maximumItemsQuantity) {
|
|
326
|
+
this._toastService.show('maximum-items-quantity', { quantity: item.product.variants[0].maximumItemsQuantity })
|
|
327
|
+
return false
|
|
328
|
+
}
|
|
329
|
+
if ((this.getCountFromItemInCart(item.productCode) + quantity) < item.product.variants[0].minimumItemsQuantity) {
|
|
330
|
+
this._toastService.show('minimum-items-quantity', { quantity: item.product.variants[0].minimumItemsQuantity })
|
|
331
|
+
return false
|
|
332
|
+
}
|
|
333
|
+
return true
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Busca un producto a través de su ID en los items del carrito.
|
|
337
|
+
* @param product_id
|
|
338
|
+
* @returns
|
|
339
|
+
*/
|
|
340
|
+
findItem(product_id: any): any { return this._items.find((item: any) => item.product.id == product_id) }
|
|
341
|
+
/**
|
|
342
|
+
* Elimina un item del carrito en el backend.
|
|
343
|
+
* @param item item a eliminar
|
|
344
|
+
* @param toast indica si se dispara un toast o no. Por defecto en `true`.
|
|
345
|
+
*/
|
|
346
|
+
deleteCartItem(item: any, toast: boolean = true) {
|
|
347
|
+
let idItemSearched = this.findItemByIdVariant(item.variant_id)
|
|
348
|
+
//console.log(idItemSearched)
|
|
349
|
+
this._requestInProcess.next(true);
|
|
350
|
+
firstValueFrom(this._connection.delete(this.deleteItemApi(idItemSearched))).then(
|
|
351
|
+
res => {
|
|
352
|
+
this.removeCartItem(res, item, toast);
|
|
353
|
+
this._requestInProcess.next(false);
|
|
354
|
+
},
|
|
355
|
+
err => {
|
|
356
|
+
this.handleError(err);
|
|
357
|
+
this._requestInProcess.next(false);
|
|
358
|
+
}
|
|
359
|
+
)
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Elimina un item en carrito de forma local.
|
|
363
|
+
* @param cart Carrito, es decir, respuesta del backend.
|
|
364
|
+
* @param product producto a eliminar
|
|
365
|
+
* @param toast {boolean} para indicar si se dispara un toast o no.
|
|
366
|
+
*/
|
|
367
|
+
removeCartItem(cart: any, product: any, toast: boolean) {
|
|
368
|
+
this.updateCartObj(cart, false);
|
|
369
|
+
this._items.splice(this._items.findIndex(value => value.item_id === product.item_id), 1);
|
|
370
|
+
this._cartItemsSubject.next(this._items);
|
|
371
|
+
toast && this._requestInProcess.next(false);
|
|
372
|
+
toast && this._toastService.show('product-removed');
|
|
373
|
+
this.updateLocalCart();
|
|
374
|
+
this._analyticsService.callEvent('remove_from_cart', { ...product, currency: this._consts.currency.code })
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Agrega un cupon al carrito.
|
|
378
|
+
* @param value Codigo del cupón.
|
|
379
|
+
*/
|
|
380
|
+
addCoupon(value: string) {
|
|
381
|
+
firstValueFrom(this._connection.put(this.couponApi(), { coupon: value })).then(
|
|
382
|
+
res => {
|
|
383
|
+
//console.log(res)
|
|
384
|
+
this.updateCartObj(res)
|
|
385
|
+
this._toastService.show('Cupon aplicado')
|
|
386
|
+
},
|
|
387
|
+
err => {
|
|
388
|
+
//console.error(err)
|
|
389
|
+
this._toastService.show('invalid-coupon')
|
|
390
|
+
}
|
|
391
|
+
)
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Elimina un cupón del carrito.
|
|
395
|
+
*/
|
|
396
|
+
removeCoupon() {
|
|
397
|
+
firstValueFrom(this._connection.delete(this.couponApi())).then(
|
|
398
|
+
res => {
|
|
399
|
+
//console.log(res)
|
|
400
|
+
this.updateCartObj(res)
|
|
401
|
+
}
|
|
402
|
+
)
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Retorna un observable con el subtotal del carrito.
|
|
406
|
+
* @returns
|
|
407
|
+
*/
|
|
408
|
+
getSubTotalAmount(): Observable<number> {
|
|
409
|
+
return this.cart$.pipe(map((cart) => cart?.totals?.items));
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Retorna un observable con el total del monto de las promociones aplicadas.
|
|
413
|
+
* @returns
|
|
414
|
+
*/
|
|
415
|
+
getTotalPromotionAmount(): Observable<number> {
|
|
416
|
+
return this.cart$.pipe(map((cart) => cart?.totals?.promotion));
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Retorna un observable con el monto de los impuestos aplicados.
|
|
420
|
+
* @returns
|
|
421
|
+
*/
|
|
422
|
+
getTaxesAmount(): Observable<number> {
|
|
423
|
+
return this.cart$.pipe(map((cart) => cart?.totals?.taxes > 0 ? cart?.totals?.taxes : 0));
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Retorna un observable con el monto total del carrito.
|
|
427
|
+
* @returns
|
|
428
|
+
*/
|
|
429
|
+
getTotalAmount() {
|
|
430
|
+
return this.cart$.pipe(map((cart) => cart?.totals?.total));
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Retorna el token del carrito.
|
|
434
|
+
* @returns
|
|
435
|
+
*/
|
|
436
|
+
getCartToken() {
|
|
437
|
+
return this.cartToken;
|
|
438
|
+
}
|
|
439
|
+
changeHaveToUpdate = (value: any) => this._haveToUpdate = value;
|
|
440
|
+
clearAndResetCustomerCart() {
|
|
441
|
+
console.log("Clearing and reseting...")
|
|
442
|
+
this.resetCart(this.getCartByCustomer)
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
private getCartByCustomer = async () =>
|
|
446
|
+
this._connection.post(this.cartItemsApi()).subscribe(
|
|
447
|
+
res => this.initializeCart(res)
|
|
448
|
+
)
|
|
449
|
+
private resetCart = (fn?: any) => {
|
|
450
|
+
this._items = [];
|
|
451
|
+
this._cartSubject.next(null);
|
|
452
|
+
this.updateBalanceAttributes(null);
|
|
453
|
+
this.cartToken = null;
|
|
454
|
+
this._cartItemsSubject.next([]);
|
|
455
|
+
this._count = 0;
|
|
456
|
+
this._localStorage.setItem(this.CART_KEY, "[]");
|
|
457
|
+
this._localStorage.removeItem(this.CART_TOKEN_KEY);
|
|
458
|
+
fn && fn();
|
|
459
|
+
}
|
|
460
|
+
clearAndResetCart() {
|
|
461
|
+
this.resetCart(() => this.getCart);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
public updateBalanceAttributes(cartData: any) {
|
|
465
|
+
const balanceData = {
|
|
466
|
+
allowAnyPaymentMethod: cartData?.allowAnyPaymentMethod ?? false,
|
|
467
|
+
allowExceedBalance: cartData?.allowExceedBalance ?? false,
|
|
468
|
+
creditAmount: cartData?.creditAmount ?? null,
|
|
469
|
+
showMax: cartData?.showMax ?? false,
|
|
470
|
+
showPrice: cartData?.showPrice ?? false,
|
|
471
|
+
remainingCredits: cartData?.creditAmount && cartData?.creditAmount >= cartData?.totals.total
|
|
472
|
+
? cartData?.creditAmount - cartData?.totals.total
|
|
473
|
+
: 0,
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
this._balanceCustomerSubject.next(balanceData);
|
|
477
|
+
console.log(balanceData)
|
|
478
|
+
}
|
|
479
|
+
addToLot(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){
|
|
480
|
+
if (!this._authService.isAbleToBuy()) {
|
|
481
|
+
this._toastService.show('must-select-customer')
|
|
482
|
+
return
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
let added = '';
|
|
486
|
+
!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' })
|
|
487
|
+
.subscribe({
|
|
488
|
+
next: (res) => this.appendToCart(res),
|
|
489
|
+
error: (err) => this.handleError(err)
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { ApiConstantsService, CoreConstantsService } from '../constants';
|
|
3
|
+
import { ConnectionService } from '../api';
|
|
4
|
+
import { map, Observable, ReplaySubject, shareReplay } from 'rxjs';
|
|
5
|
+
/**
|
|
6
|
+
* Servicio para manejar los canales de la aplicación
|
|
7
|
+
* @class ChannelService
|
|
8
|
+
*/
|
|
9
|
+
@Injectable({
|
|
10
|
+
providedIn: 'root'
|
|
11
|
+
})
|
|
12
|
+
export class ChannelService {
|
|
13
|
+
/**
|
|
14
|
+
* Constantes de la API
|
|
15
|
+
*/
|
|
16
|
+
private apiConsts: ApiConstantsService = inject(ApiConstantsService);
|
|
17
|
+
/**
|
|
18
|
+
* Constantes del core
|
|
19
|
+
*/
|
|
20
|
+
private consts: CoreConstantsService = inject(CoreConstantsService)
|
|
21
|
+
/**
|
|
22
|
+
* Maneja las peticiones a la API
|
|
23
|
+
*/
|
|
24
|
+
private connection: ConnectionService = inject(ConnectionService)
|
|
25
|
+
/**
|
|
26
|
+
* Subject para manejar los cambios en los canales.
|
|
27
|
+
*/
|
|
28
|
+
private channelSubject = new ReplaySubject<any>()
|
|
29
|
+
/**
|
|
30
|
+
* Observable de canales.
|
|
31
|
+
*/
|
|
32
|
+
public channel$: Observable<any> = this.channelSubject.asObservable()
|
|
33
|
+
/**
|
|
34
|
+
* Almacena el canal activo en la aplicación.
|
|
35
|
+
*/
|
|
36
|
+
public activeChannel: any;
|
|
37
|
+
/**
|
|
38
|
+
* Almacena el tipo de canal.
|
|
39
|
+
*/
|
|
40
|
+
public channelType: any;
|
|
41
|
+
|
|
42
|
+
//API URL
|
|
43
|
+
/**
|
|
44
|
+
* Devuelve la url para obtener los datos de un canal.
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
47
|
+
private channelApi() { return `${this.apiConsts.SHOP_API_URL}${this.apiConsts.CHANNEL}/channel`; }
|
|
48
|
+
|
|
49
|
+
constructor() { }
|
|
50
|
+
/**
|
|
51
|
+
* Obtiene el canal de la API
|
|
52
|
+
* @returns Observable con el canal.
|
|
53
|
+
*/
|
|
54
|
+
public getChannel = (): Observable<any> => {
|
|
55
|
+
this.connection.get(this.channelApi()).pipe(
|
|
56
|
+
shareReplay(1),
|
|
57
|
+
map((response: any) => {
|
|
58
|
+
this.setChannelInfo(response);
|
|
59
|
+
this.channelSubject.next(response);
|
|
60
|
+
this.channelType = response.type;
|
|
61
|
+
return response
|
|
62
|
+
}),
|
|
63
|
+
).subscribe()
|
|
64
|
+
return this.channel$;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Cambia la configuración del canal con un canal nuevo.
|
|
68
|
+
* @param channelObj
|
|
69
|
+
*/
|
|
70
|
+
public setChannelInfo(channelObj: any) {
|
|
71
|
+
this.apiConsts.setChannel(channelObj.code)
|
|
72
|
+
this.consts.setCurrency(channelObj.baseCurrency)
|
|
73
|
+
this.activeChannel = channelObj
|
|
74
|
+
//this.injector.get(AddressingService).setTypeSelectAddress(channelObj.headquarterSelectionOnly || 'LOAD_ADDRESS_AND_SELECTION')
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Devuelve el canal activo en la aplicación.
|
|
78
|
+
* @returns
|
|
79
|
+
*/
|
|
80
|
+
public getActiveChannel() { return this.activeChannel; }
|
|
81
|
+
}
|