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,196 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, combineLatest, firstValueFrom, Observable, ReplaySubject } from 'rxjs';
|
|
3
|
+
import { CartService } from './cart.service';
|
|
4
|
+
import { CheckoutData, IStep, StepType } from '../interfaces';
|
|
5
|
+
import { ConnectionService } from '../api';
|
|
6
|
+
import { AnalyticsService } from './analytics';
|
|
7
|
+
import { ApiConstantsService } from '../constants';
|
|
8
|
+
import { Step, User } from '../classes';
|
|
9
|
+
import { AuthService } from './auth.service';
|
|
10
|
+
import { OrderUtilityService } from './order-utility.service';
|
|
11
|
+
import { Router } from '@angular/router';
|
|
12
|
+
import { ToastService } from './toast.service';
|
|
13
|
+
|
|
14
|
+
@Injectable({
|
|
15
|
+
providedIn: 'root'
|
|
16
|
+
})
|
|
17
|
+
export class CheckoutService {
|
|
18
|
+
|
|
19
|
+
private _cartService: CartService = inject(CartService);
|
|
20
|
+
private _connection: ConnectionService = inject(ConnectionService);
|
|
21
|
+
private _analyticsService: AnalyticsService = inject(AnalyticsService);
|
|
22
|
+
private _consts: ApiConstantsService = inject(ApiConstantsService);
|
|
23
|
+
private _authService: AuthService = inject(AuthService);
|
|
24
|
+
private _orderUtilityService: OrderUtilityService = inject(OrderUtilityService);
|
|
25
|
+
private _router: Router = inject(Router);
|
|
26
|
+
private _toastService: ToastService = inject(ToastService);
|
|
27
|
+
|
|
28
|
+
private _canCheckoutSubject = new ReplaySubject<boolean>();
|
|
29
|
+
private _stateSubject = new BehaviorSubject<Step[]>([])
|
|
30
|
+
private _lastStepSubject = new BehaviorSubject<boolean>(false);
|
|
31
|
+
private _loadingSubject = new BehaviorSubject<boolean>(false);
|
|
32
|
+
private _orderSubject = new BehaviorSubject<any>(null);
|
|
33
|
+
private _associatedDataSubject = new BehaviorSubject<CheckoutData[] | null>(null);
|
|
34
|
+
private _loadingStepSubject = new BehaviorSubject<boolean>(false);
|
|
35
|
+
|
|
36
|
+
public canCheckout$: Observable<boolean> = this._canCheckoutSubject.asObservable();
|
|
37
|
+
public state$: Observable<any> = this._stateSubject.asObservable();
|
|
38
|
+
public isLastStep$: Observable<boolean> = this._lastStepSubject.asObservable();
|
|
39
|
+
public associatedData$: Observable<any> = this._associatedDataSubject.asObservable();
|
|
40
|
+
public order$: Observable<any> = this._orderSubject.asObservable();
|
|
41
|
+
public loadingStep$:Observable<boolean> = this._loadingStepSubject.asObservable();
|
|
42
|
+
|
|
43
|
+
public total: any;
|
|
44
|
+
private cartLocal: any;
|
|
45
|
+
private checkoutData: any = {};
|
|
46
|
+
private order: any;
|
|
47
|
+
|
|
48
|
+
//API Methods
|
|
49
|
+
baseApi = () => 'shop-api/' + this._consts.CHANNEL + '/checkout/' + this._cartService.getCartToken();
|
|
50
|
+
getHasPurchaseConditions() { return 'shop-api/' + this._consts.CHANNEL + '/carts/' + this._cartService.getCartToken() + '/has_purchase_conditions' };
|
|
51
|
+
completeApi() { return this.baseApi() + '/complete' };
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
constructor() {
|
|
55
|
+
combineLatest([this._cartService.cartItems$, this._cartService.loading$]).subscribe(([items, loading]) => {
|
|
56
|
+
if (!loading && items.length > 0) {
|
|
57
|
+
this._canCheckoutSubject.next(true);
|
|
58
|
+
this._cartService.getTotalAmount().subscribe((res: any) => {
|
|
59
|
+
this.total = res;
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
this._cartService.cart$.subscribe(cart => cart && (this.cartLocal = cart) && this.updateAsociatedData(cart));
|
|
64
|
+
this.order$.subscribe(order => order && this.updateAsociatedData(order))
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
setSteps(steps: IStep[]) {
|
|
68
|
+
let final_steps: Step[] = [];
|
|
69
|
+
steps.forEach((step, i) => final_steps.push(new Step(step.name, step.priority || (i + 1), step.label, step.state)));
|
|
70
|
+
this._stateSubject.next(final_steps);
|
|
71
|
+
if (final_steps.length == 1) {
|
|
72
|
+
this._lastStepSubject.next(true);
|
|
73
|
+
}
|
|
74
|
+
console.log(final_steps);
|
|
75
|
+
firstValueFrom(this._connection.get(this.getHasPurchaseConditions())).then(
|
|
76
|
+
res => {
|
|
77
|
+
this._analyticsService.callEvent('checkout_init', { ...this.cartLocal, currency: this.cartLocal?.currency, value: this.cartLocal?.total })
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
next() {
|
|
83
|
+
this._loadingStepSubject.next(true);
|
|
84
|
+
const steps = this._stateSubject.getValue()
|
|
85
|
+
const readyStep = steps.findIndex(step => step.state === 'ready');
|
|
86
|
+
if (steps[readyStep + 1]) {
|
|
87
|
+
steps[readyStep].state = 'doing'
|
|
88
|
+
steps[readyStep + 1].state = 'ready';
|
|
89
|
+
if (!steps[readyStep + 2]) this._lastStepSubject.next(true);
|
|
90
|
+
this._loadingStepSubject.next(false)
|
|
91
|
+
} else {
|
|
92
|
+
this.complete().then(
|
|
93
|
+
res => {
|
|
94
|
+
if (res.ok) {
|
|
95
|
+
this._router.navigate(['checkout/order_success'])
|
|
96
|
+
} else {
|
|
97
|
+
this._toastService.show('operation-error')
|
|
98
|
+
}
|
|
99
|
+
this._loadingStepSubject.next(false)
|
|
100
|
+
},
|
|
101
|
+
err => {
|
|
102
|
+
console.log(err)
|
|
103
|
+
this._loadingStepSubject.next(false)
|
|
104
|
+
this._toastService.show('operation-error')
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
back() {
|
|
111
|
+
const steps = this._stateSubject.getValue()
|
|
112
|
+
const readyStep = steps.findIndex(step => step.state === 'ready');
|
|
113
|
+
this._lastStepSubject.next(false);
|
|
114
|
+
if (steps[readyStep - 1]) {
|
|
115
|
+
steps[readyStep].state = 'pending'
|
|
116
|
+
steps[readyStep - 1].state = 'ready';
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
setOrder = (order: any) => { this.order = order, this._orderSubject.next(order) };
|
|
121
|
+
//getOrder = () => this.order || this.orderSubject.value;
|
|
122
|
+
|
|
123
|
+
private completeOrder = () => firstValueFrom(this._connection.put(this.completeApi(), { email: this.checkoutData.email, notes: this.checkoutData.notes || '' }));
|
|
124
|
+
|
|
125
|
+
complete = async () => {
|
|
126
|
+
try {
|
|
127
|
+
this._loadingSubject.next(true);
|
|
128
|
+
let result = await this.completeOrder();
|
|
129
|
+
|
|
130
|
+
if (result && result.error) {
|
|
131
|
+
this._cartService.changeHaveToUpdate(false);
|
|
132
|
+
this._loadingSubject.next(false);
|
|
133
|
+
return ({ ok: false, require_login: true, message: 'not-completed' });
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
this.setOrder(result);
|
|
137
|
+
this._analyticsService.callEvent('purchase', { ...result, currency: result.currency, value: result.total });
|
|
138
|
+
this._cartService.clearAndResetCart();
|
|
139
|
+
this._canCheckoutSubject.next(false);
|
|
140
|
+
//this._onReadySubject.next(false);
|
|
141
|
+
this._loadingSubject.next(false);
|
|
142
|
+
|
|
143
|
+
return ({ ok: true, require_login: false, message: '' });
|
|
144
|
+
} catch (error) {
|
|
145
|
+
this._loadingSubject.next(false);
|
|
146
|
+
console.error('Error in complete:', error);
|
|
147
|
+
|
|
148
|
+
return { ok: false, require_login: false, message: 'An error occurred' };
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
updateAsociatedData = (cart: any) => {
|
|
154
|
+
let result = this._orderUtilityService.getPromotions(cart);
|
|
155
|
+
const userProfile: User = User.fromJson(this._authService.getUserProfileAsUser());
|
|
156
|
+
if (result) {
|
|
157
|
+
if (userProfile.isWholesaler() && cart.totals.taxes != 0) {
|
|
158
|
+
let total = { ...result[result.length - 1] };
|
|
159
|
+
result[result.length - 1] = {
|
|
160
|
+
type: 'taxes',
|
|
161
|
+
name: 'taxes',
|
|
162
|
+
amount: cart.totals.taxes
|
|
163
|
+
}
|
|
164
|
+
result.push(total);
|
|
165
|
+
}
|
|
166
|
+
let shipment = result?.find((promotion: any) => promotion.type == "shipment");
|
|
167
|
+
if (!shipment && cart.totals.shipping != 0) {
|
|
168
|
+
|
|
169
|
+
if (result?.length && !result.find((item: any) => item.type === "shipment")) {
|
|
170
|
+
let total = { ...result[result.length - 1] };
|
|
171
|
+
result[result.length - 1] = {
|
|
172
|
+
type: 'shipment',
|
|
173
|
+
name: 'shipment',
|
|
174
|
+
amount: cart.totals.shipping
|
|
175
|
+
}
|
|
176
|
+
result.push(total);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
this._associatedDataSubject.next(result);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
getStepData = (step_name: StepType) => {
|
|
184
|
+
let step_result = this._stateSubject.getValue().find(step => step.name == step_name);
|
|
185
|
+
return (step_result && step_result.data);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
setStepData = (step_name: StepType, data: any) => {
|
|
189
|
+
let step = this._stateSubject.getValue().find(step => step.name == step_name);
|
|
190
|
+
step?.ready(data);
|
|
191
|
+
/* if (data) {
|
|
192
|
+
this._orderSubject.next(data);
|
|
193
|
+
this.total = data.totals.total;
|
|
194
|
+
} */
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { ApiConstantsService, CoreConstantsService } from '../constants';
|
|
3
|
+
import { ConnectionService } from '../api';
|
|
4
|
+
import { BehaviorSubject, firstValueFrom, Observable } from 'rxjs';
|
|
5
|
+
import { CurrencyConfig } from '../interfaces';
|
|
6
|
+
import { ChannelService } from './channel.service';
|
|
7
|
+
import { CurrencyStore } from '../stores';
|
|
8
|
+
/**
|
|
9
|
+
* Servicio encargado de manejar todo lo que este relacionado a la moneda
|
|
10
|
+
* que maneja la aplicación.
|
|
11
|
+
*/
|
|
12
|
+
@Injectable({
|
|
13
|
+
providedIn: 'root'
|
|
14
|
+
})
|
|
15
|
+
export class CurrencyService {
|
|
16
|
+
/**
|
|
17
|
+
* Constantes de core
|
|
18
|
+
*/
|
|
19
|
+
private _consts: CoreConstantsService = inject(CoreConstantsService)
|
|
20
|
+
/**
|
|
21
|
+
* Constantes de la API
|
|
22
|
+
*/
|
|
23
|
+
private _apiConsts: ApiConstantsService = inject(ApiConstantsService)
|
|
24
|
+
/**
|
|
25
|
+
* Maneja las peticiones a la API
|
|
26
|
+
*/
|
|
27
|
+
private _connection: ConnectionService = inject(ConnectionService)
|
|
28
|
+
/**
|
|
29
|
+
* Servicio de canales
|
|
30
|
+
*/
|
|
31
|
+
private _channel: ChannelService = inject(ChannelService)
|
|
32
|
+
/**
|
|
33
|
+
* Contiene el canal activo de la API.
|
|
34
|
+
*/
|
|
35
|
+
private _channel$: Observable<any> = this._channel.getChannel();
|
|
36
|
+
/**
|
|
37
|
+
* Subject para manejar la moneda actual.
|
|
38
|
+
*/
|
|
39
|
+
private _currencySubject: BehaviorSubject<CurrencyConfig> = new BehaviorSubject({})
|
|
40
|
+
/**
|
|
41
|
+
* Subject para manejar la lista de monedas de la aplicación.
|
|
42
|
+
*/
|
|
43
|
+
private _currencyListSubject: BehaviorSubject<any> = new BehaviorSubject([])
|
|
44
|
+
/**
|
|
45
|
+
* Subject para indicar la actualización de un estado.
|
|
46
|
+
*/
|
|
47
|
+
private _updateSubject: BehaviorSubject<boolean> = new BehaviorSubject(false)
|
|
48
|
+
|
|
49
|
+
public currency$: Observable<CurrencyConfig> = this._currencySubject.asObservable()
|
|
50
|
+
public currencyList$: Observable<any[]> = this._currencyListSubject.asObservable()
|
|
51
|
+
public update$: Observable<boolean> = this._updateSubject.asObservable();
|
|
52
|
+
|
|
53
|
+
//API URL
|
|
54
|
+
/**
|
|
55
|
+
* Devuelve la URL para obtener lista de monedas de la aplicación.
|
|
56
|
+
* @returns
|
|
57
|
+
*/
|
|
58
|
+
private getCurrencyListApi() { return `${this._apiConsts.SHOP_API_URL}/currencies` };
|
|
59
|
+
/**
|
|
60
|
+
* Devuelve la URL para obtener la convertibilidad de una moneda.
|
|
61
|
+
* @param baseCurrency Moneda base
|
|
62
|
+
* @param targetCurrency Moneda destino
|
|
63
|
+
* @returns
|
|
64
|
+
*/
|
|
65
|
+
private getConvertibilityApi(baseCurrency: any, targetCurrency: any) { return `${this._apiConsts.SHOP_API_URL}/currencies?baseCurrency=${baseCurrency}&targetCurrency=${targetCurrency}` }
|
|
66
|
+
/**
|
|
67
|
+
* Store que guardara la moneda actual que maneja la aplicación.
|
|
68
|
+
*/
|
|
69
|
+
protected currencyStore = inject(CurrencyStore);
|
|
70
|
+
|
|
71
|
+
constructor() {
|
|
72
|
+
this._channel$.subscribe(channel => {
|
|
73
|
+
channel.applyCurrencyExchange ? this.loadCurrencyList() : this.loadDefaultCurrency(channel.baseCurrency);
|
|
74
|
+
})
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Se carga la moneda por defecto.
|
|
79
|
+
*/
|
|
80
|
+
private loadDefaultCurrency(currency: any) {
|
|
81
|
+
this._consts.setCurrency(currency);
|
|
82
|
+
this.load()
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Carga la lista de monedas/currencies.
|
|
87
|
+
*/
|
|
88
|
+
private async loadCurrencyList() {
|
|
89
|
+
await firstValueFrom(this._connection.get(this.getCurrencyListApi()))
|
|
90
|
+
.then(res => {
|
|
91
|
+
this._currencyListSubject.next(res)
|
|
92
|
+
this._consts.setCurrencyTypeConfig(res)
|
|
93
|
+
this.load()
|
|
94
|
+
})
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* calcula la convetibilidad del precio pasado por paramentro segun esta formula:
|
|
99
|
+
* **c = a * b** donde *c=moneda despues del cambio*, *a=valor que quiero cambiar* y *b=ratio de cambio*.
|
|
100
|
+
* @param price Precio a cambiar
|
|
101
|
+
* @param ratio Ratio de cambio
|
|
102
|
+
* @returns Si el ratio no es null, retorna el precio cambiado, sino retorna el precio sin cambios.
|
|
103
|
+
*/
|
|
104
|
+
public calculateConvetibility(price: number, ratio: number) {
|
|
105
|
+
return ratio ? price * ratio : price;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* genera la carga y configuración de la moneda elegida para la conversion.
|
|
110
|
+
* @param currency Moneda a convertir.
|
|
111
|
+
*/
|
|
112
|
+
private loadCurrency(currency: any) {
|
|
113
|
+
this._currencySubject.next(currency);
|
|
114
|
+
this._consts.setCurrency(currency.code);
|
|
115
|
+
let update = this._updateSubject.getValue()
|
|
116
|
+
this._updateSubject.next(!update)
|
|
117
|
+
this.currencyStore.add(this._consts.currency)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Genera la convertibilidad de la moneda base a la nueva. Si baseCurrency no tiene valor
|
|
122
|
+
* entonces utiliza la moneda base del canal.
|
|
123
|
+
* @param currency Objeto de la moneda destino.
|
|
124
|
+
* @param baseCurrency Codigo de la moneda base. *Ej: USD | ARS | EUR |...*
|
|
125
|
+
*/
|
|
126
|
+
async generateConvertibility(currency: any, baseCurrency?: string) {
|
|
127
|
+
if (!baseCurrency) {
|
|
128
|
+
try {
|
|
129
|
+
baseCurrency = await this._channel.getActiveChannel().baseCurrency;
|
|
130
|
+
} catch (error) {
|
|
131
|
+
//console.error(error)
|
|
132
|
+
baseCurrency = 'USD'
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
console.log("BC", baseCurrency);
|
|
136
|
+
if (currency.code == baseCurrency) {
|
|
137
|
+
this.loadCurrency(currency);
|
|
138
|
+
} else {
|
|
139
|
+
this.getConvertibility(baseCurrency, currency.code);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Obtiene la conversion desde la moneda base a la destino. Recibe un objeto de tipo CurrencyConfig.
|
|
145
|
+
* Si la conversion retorna resultado realiza el cambio, de lo contrario emite un mensaje de error.
|
|
146
|
+
* @param baseCurrency Codigo de la moneda base.
|
|
147
|
+
* @param targetCurrency Codigo de la moneda destino.
|
|
148
|
+
*/
|
|
149
|
+
private getConvertibility(baseCurrency: any, targetCurrency: any) {
|
|
150
|
+
this._connection.get(this.getConvertibilityApi(baseCurrency, targetCurrency))
|
|
151
|
+
.toPromise().then(
|
|
152
|
+
res => {
|
|
153
|
+
if (res) {
|
|
154
|
+
let tempCurrency = res[0]
|
|
155
|
+
this.loadCurrency(tempCurrency)
|
|
156
|
+
} else {
|
|
157
|
+
console.error('Error la variable res no contiene valor, asegurese de que esta conversión este configurada en el backoffice')
|
|
158
|
+
//this.toastr.show('error-convertibility')
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
err => {
|
|
162
|
+
console.log(err)
|
|
163
|
+
}
|
|
164
|
+
).catch(err => console.log(err))
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Carga la moneda, si hay una en el localstorage toma esa y realiza la conversion.
|
|
169
|
+
* de lo contrario solo setea en el observable currencySubject el valor por defecto cargado en las constantes.
|
|
170
|
+
*/
|
|
171
|
+
private load() {
|
|
172
|
+
let storeCurrency = this.currencyStore.currency();
|
|
173
|
+
if (storeCurrency && storeCurrency.code) {
|
|
174
|
+
this.generateConvertibility(storeCurrency)
|
|
175
|
+
} else {
|
|
176
|
+
this._currencySubject.next(this._consts.currency)
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { EnvironmentInjector, inject, Injectable, runInInjectionContext } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Observable } from 'rxjs';
|
|
3
|
+
import { Filter, FilterFactory } from '../classes';
|
|
4
|
+
import { DefaultFilter, FilterElement, FilterType, PaginationSettings } from '../interfaces';
|
|
5
|
+
import { ApiConstantsService, CoreConstantsService } from '../constants';
|
|
6
|
+
|
|
7
|
+
@Injectable({
|
|
8
|
+
providedIn: 'root'
|
|
9
|
+
})
|
|
10
|
+
export class FiltersService {
|
|
11
|
+
private _apiConsts: ApiConstantsService = inject(ApiConstantsService);
|
|
12
|
+
private _consts: CoreConstantsService = inject(CoreConstantsService);
|
|
13
|
+
private _filtersSubject: BehaviorSubject<Filter[]> = new BehaviorSubject<Filter[]>([]);
|
|
14
|
+
public filters$: Observable<Filter[]> = this._filtersSubject.asObservable();
|
|
15
|
+
|
|
16
|
+
private _apiUrlSubject: BehaviorSubject<string> = new BehaviorSubject<string>('');
|
|
17
|
+
public apiUrl$: Observable<string> = this._apiUrlSubject.asObservable();
|
|
18
|
+
|
|
19
|
+
private _readySubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
|
|
20
|
+
public ready$: Observable<boolean> = this._readySubject.asObservable();
|
|
21
|
+
|
|
22
|
+
private environmentInjector = inject(EnvironmentInjector)
|
|
23
|
+
|
|
24
|
+
private _optionsFilters: FilterType[] = ['all'];
|
|
25
|
+
private _defaultFilters: DefaultFilter[] = [];
|
|
26
|
+
|
|
27
|
+
private _paginationSettings: PaginationSettings = {
|
|
28
|
+
value:'',
|
|
29
|
+
type:'',
|
|
30
|
+
limit:0
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
constructor(){
|
|
34
|
+
//this._defaultFilters = this._consts.getDefaultFilters()
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//API URL
|
|
38
|
+
/**
|
|
39
|
+
* Retorna la url para el filtrado
|
|
40
|
+
* @param filters
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
productsFilterApi(filters = '') { return 'shop-api/' + this._apiConsts.CHANNEL + '/product-search/' + '?locale=' + this._apiConsts.LOCALE + filters };
|
|
44
|
+
/**
|
|
45
|
+
* Arma los filtros y retorna la url completa con los filtros aplicados.
|
|
46
|
+
* @param search_value valor a buscar
|
|
47
|
+
* @returns
|
|
48
|
+
*/
|
|
49
|
+
generateFinalApi(search_value?: string) {
|
|
50
|
+
let extra_params = '';
|
|
51
|
+
this._filtersSubject.value.forEach(filter => {
|
|
52
|
+
const extra = filter.toUrlParams();
|
|
53
|
+
extra.split('=')[1] != '' ? extra_params += extra : null;
|
|
54
|
+
})
|
|
55
|
+
if (search_value) extra_params += ('&criteria[search][type]=contains&criteria[search][value]=' + search_value);
|
|
56
|
+
|
|
57
|
+
//console.log("extra_params",extra_params);
|
|
58
|
+
return this.productsFilterApi(extra_params);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private isUpdated(paginationSettings: PaginationSettings){
|
|
62
|
+
const keys:string[] = Object.keys(paginationSettings);
|
|
63
|
+
let change:boolean = false;
|
|
64
|
+
keys.forEach((key:string) => {
|
|
65
|
+
const value = (paginationSettings as Record<string, any>)[key];
|
|
66
|
+
const value2 = (this._paginationSettings as Record<string, any>)[key];
|
|
67
|
+
if (value != value2) change = true;
|
|
68
|
+
})
|
|
69
|
+
if (change) this._paginationSettings = paginationSettings;
|
|
70
|
+
return change;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Configura los filtros que seran aplicados en el frontend.
|
|
74
|
+
* @param paginationSettings
|
|
75
|
+
*/
|
|
76
|
+
setFilters(paginationSettings: PaginationSettings) {
|
|
77
|
+
let final_filters: Filter[] = [];
|
|
78
|
+
if (this._optionsFilters?.includes('all')) this._optionsFilters = ['attributes', 'categories', 'dynamics', 'sort'];
|
|
79
|
+
runInInjectionContext(this.environmentInjector, () => {
|
|
80
|
+
const filterFactory = new FilterFactory();
|
|
81
|
+
this._optionsFilters?.forEach(filter => final_filters.push(filterFactory.create(filter, paginationSettings)));
|
|
82
|
+
})
|
|
83
|
+
this._defaultFilters?.forEach(filterDefault => {
|
|
84
|
+
let filter = final_filters.find(filter => filter.type() == filterDefault.filter_type);
|
|
85
|
+
filter && filterDefault.codes.forEach(value => filter.setSelected(value));
|
|
86
|
+
})
|
|
87
|
+
this._filtersSubject.next(final_filters);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Obtengo filtros especificos según el tipo.
|
|
91
|
+
* @param types
|
|
92
|
+
* @returns
|
|
93
|
+
*/
|
|
94
|
+
getSpecificFilters(types: FilterType[]): Filter[] {
|
|
95
|
+
const filters: Filter[] = this._filtersSubject.value.filter(filter => types.includes(filter.type()))
|
|
96
|
+
return filters;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Aplica un filtro.
|
|
100
|
+
* @param filterObj
|
|
101
|
+
* @param filterElem
|
|
102
|
+
*/
|
|
103
|
+
setFilterSelected(filterObj: Filter, filterElem: FilterElement) {
|
|
104
|
+
let final_filters: Filter[] = this._filtersSubject.value;
|
|
105
|
+
let index = final_filters.findIndex(filter => filter.type() == filterObj.type());
|
|
106
|
+
final_filters[index].setSelected(filterElem, filterElem.value || filterElem.code);
|
|
107
|
+
//console.log(index, final_filters)
|
|
108
|
+
this._filtersSubject.next(final_filters);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Actualiza los filtros.
|
|
112
|
+
* @param paginationFilters
|
|
113
|
+
*/
|
|
114
|
+
updateFilters(paginationFilters: any): void {
|
|
115
|
+
const claves = Object.keys(paginationFilters)
|
|
116
|
+
runInInjectionContext(this.environmentInjector, () => {
|
|
117
|
+
const filterFactory = new FilterFactory();
|
|
118
|
+
const filter:Filter[] = []
|
|
119
|
+
/* claves.forEach((key:any) => {
|
|
120
|
+
filter.push(filterFactory.create(key))
|
|
121
|
+
paginationFilters[key].forEach((value:any) => {
|
|
122
|
+
console.log(filter[0].createElement(value,paginationFilters[key]));
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
}) */
|
|
126
|
+
this._filtersSubject.value.forEach((value:any) => {
|
|
127
|
+
if(value.type() == "attributes") {
|
|
128
|
+
//value.data = [];
|
|
129
|
+
}
|
|
130
|
+
})
|
|
131
|
+
})
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { ApiConstantsService } from '../constants';
|
|
3
|
+
import { ConnectionService } from '../api';
|
|
4
|
+
import { BehaviorSubject, map, Observable, shareReplay } from 'rxjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Servicio encargado de manejar todo aquello relacionado con los formularios dentro de la aplicación.
|
|
8
|
+
*/
|
|
9
|
+
@Injectable({
|
|
10
|
+
providedIn: 'root'
|
|
11
|
+
})
|
|
12
|
+
export class FormService {
|
|
13
|
+
private apiConsts: ApiConstantsService = inject(ApiConstantsService)
|
|
14
|
+
private connection: ConnectionService = inject(ConnectionService)
|
|
15
|
+
|
|
16
|
+
protected countriesSubject = new BehaviorSubject<any[]>([]);
|
|
17
|
+
protected provincesSubject = new BehaviorSubject<any[]>([]);
|
|
18
|
+
protected documentTypesSubject = new BehaviorSubject<any[]>([]);
|
|
19
|
+
|
|
20
|
+
public countries$ = this.countriesSubject.asObservable();
|
|
21
|
+
public provinces$ = this.provincesSubject.asObservable();
|
|
22
|
+
public documentTypes$ = this.documentTypesSubject.asObservable();
|
|
23
|
+
|
|
24
|
+
//API URL
|
|
25
|
+
/**
|
|
26
|
+
* Retorna una url para enviar los datos de un formulario de contacto.
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
public contactFormResponseAPI() { return `${this.apiConsts.CMS_URL}${this.apiConsts.LOCALE}/contact-form/response` }
|
|
30
|
+
/**
|
|
31
|
+
* Retorna una url para el endpoint que obtinen los paises.
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
public countriesApi() { return 'shop-api/' + this.apiConsts.CHANNEL + '/countries' };
|
|
35
|
+
|
|
36
|
+
constructor() { }
|
|
37
|
+
/**
|
|
38
|
+
* Envia en formulario.
|
|
39
|
+
* @param response_obj
|
|
40
|
+
* @returns
|
|
41
|
+
*/
|
|
42
|
+
sendResponse(response_obj: any) {
|
|
43
|
+
return this.connection.post(this.contactFormResponseAPI(), this.prepareData(response_obj))
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Obtiene los paises y los guarda en un observable.
|
|
47
|
+
* @returns
|
|
48
|
+
*/
|
|
49
|
+
getCountriesData():Observable<any> {
|
|
50
|
+
this.connection.get(this.countriesApi()).pipe(
|
|
51
|
+
shareReplay(1),
|
|
52
|
+
map((response:any) => {
|
|
53
|
+
console.log(response);
|
|
54
|
+
const data = response._embedded.items;
|
|
55
|
+
this.countriesSubject.next(data)
|
|
56
|
+
const documentTypesLocale = data.find((res: any) => {
|
|
57
|
+
return res.code.toLocaleLowerCase() == this.apiConsts.LOCALE.toLocaleLowerCase().split('_')[1]
|
|
58
|
+
})
|
|
59
|
+
const documentTypesData = documentTypesLocale['documentTypes']
|
|
60
|
+
this.documentTypesSubject.next(documentTypesData)
|
|
61
|
+
})).subscribe();
|
|
62
|
+
|
|
63
|
+
return this.countries$;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Cambia la lista de provincias segun el codigo del país.
|
|
67
|
+
* @param code
|
|
68
|
+
*/
|
|
69
|
+
onCountrySelected = (code:string) => {
|
|
70
|
+
const provinces = this.countriesSubject.value.find(province => province.code == code).provinces;
|
|
71
|
+
this.provincesSubject.next(provinces);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Para el futuro, cuando haya que aplicar algun formato antes de enviar el formulario.
|
|
75
|
+
* @param response_obj
|
|
76
|
+
* @returns
|
|
77
|
+
*/
|
|
78
|
+
prepareData(response_obj: any) {
|
|
79
|
+
return response_obj
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export * from './options.service';
|
|
2
|
+
export * from './parameters.service';
|
|
3
|
+
export * from './blocks.service';
|
|
4
|
+
export * from './blocks-repository.service';
|
|
5
|
+
export * from './analytics';
|
|
6
|
+
export * from './currency.service';
|
|
7
|
+
export * from './channel.service';
|
|
8
|
+
export * from './toast.service';
|
|
9
|
+
export * from './re-captcha.service';
|
|
10
|
+
export * from './form.service';
|
|
11
|
+
export * from './auth.service';
|
|
12
|
+
export * from './local-storage.service';
|
|
13
|
+
export * from './products.service';
|
|
14
|
+
export * from './pagination.service';
|
|
15
|
+
export * from './filters.service';
|
|
16
|
+
export * from './product-detail.service';
|
|
17
|
+
export * from './cart.service';
|
|
18
|
+
export * from './ngx-local-storage.service';
|
|
19
|
+
export * from './checkout.service';
|
|
20
|
+
export * from './addressing.service';
|
|
21
|
+
export * from './auth.storage.service';
|
|
22
|
+
export * from './shipment.service';
|
|
23
|
+
export * from './order-utility.service';
|
|
24
|
+
export * from './payment.service';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { CookieService } from 'ngx-cookie-service';
|
|
3
|
+
import { Storage } from '../interfaces';
|
|
4
|
+
/**
|
|
5
|
+
* Adapter usado para storagear los datos.
|
|
6
|
+
* @class LocalStorageService
|
|
7
|
+
* @implements {Storage}
|
|
8
|
+
*/
|
|
9
|
+
@Injectable({
|
|
10
|
+
providedIn: 'root'
|
|
11
|
+
})
|
|
12
|
+
export class LocalStorageService implements Storage {
|
|
13
|
+
/**
|
|
14
|
+
* Servicio usado para guardar los datos en las cookies
|
|
15
|
+
*/
|
|
16
|
+
private _cookieService: CookieService = inject(CookieService);
|
|
17
|
+
|
|
18
|
+
constructor() { }
|
|
19
|
+
/**
|
|
20
|
+
* Obtiene el item del Storage
|
|
21
|
+
* @param key Clave para acceder al valor
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
getItem(key: string):string {
|
|
25
|
+
return this._cookieService.get(key);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Guarda un dato en el storage.
|
|
29
|
+
* @param key Clave que se asocia al valor
|
|
30
|
+
* @param value Valor a guardar
|
|
31
|
+
* @param metadata Opciones extra que puede necesitar el servicio.
|
|
32
|
+
*/
|
|
33
|
+
setItem(key: string, value: any, metadata:any = {path:'/'}) {
|
|
34
|
+
this._cookieService.set(key, value, metadata);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Remueve el item del storage.
|
|
38
|
+
* @param key Clave del item del storage a eliminar.
|
|
39
|
+
* @param metadata Opciones extra que puede necesitar el servicio.
|
|
40
|
+
*/
|
|
41
|
+
removeItem(key: string, metadata:any = '/'): void {
|
|
42
|
+
this._cookieService.delete(key, metadata);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Limpia el Storage.
|
|
46
|
+
*/
|
|
47
|
+
clear(): void {
|
|
48
|
+
this._cookieService.deleteAll();
|
|
49
|
+
}
|
|
50
|
+
key(index: number): string | null {
|
|
51
|
+
throw new Error('Method not implemented.');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
}
|