ng-easycommerce 0.0.0
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 +57 -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,66 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { CookieService } from 'ngx-cookie-service';
|
|
3
|
+
import { Storage } from '../interfaces';
|
|
4
|
+
import { StorageMap, LocalStorage } from '@ngx-pwa/local-storage';
|
|
5
|
+
import { map, Observable } from 'rxjs';
|
|
6
|
+
/**
|
|
7
|
+
* Adapter usado para storagear los datos.
|
|
8
|
+
* @class NgxLocalStorageService
|
|
9
|
+
* @implements {Storage}
|
|
10
|
+
*/
|
|
11
|
+
@Injectable({
|
|
12
|
+
providedIn: 'root'
|
|
13
|
+
})
|
|
14
|
+
export class NgxLocalStorageService implements Storage {
|
|
15
|
+
/**
|
|
16
|
+
* Servicio usado para guardar los datos en el localstorage.
|
|
17
|
+
*/
|
|
18
|
+
private _storage: LocalStorage = inject(LocalStorage);
|
|
19
|
+
|
|
20
|
+
constructor() { }
|
|
21
|
+
|
|
22
|
+
private getItemPromise(key: any): Promise<string | null> {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
this._storage.getItem(key).subscribe({
|
|
25
|
+
next: (data: any) => resolve(data),
|
|
26
|
+
error: (err) => reject(err),
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Obtiene el item del Storage
|
|
33
|
+
* @param key Clave para acceder al valor
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
getItem(key: string): Observable<any> {
|
|
37
|
+
return this._storage.getItem(key);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Guarda un dato en el storage.
|
|
41
|
+
* @param key Clave que se asocia al valor
|
|
42
|
+
* @param value Valor a guardar
|
|
43
|
+
* @param metadata Opciones extra que puede necesitar el servicio.
|
|
44
|
+
*/
|
|
45
|
+
setItem(key: string, value: any, metadata: any = { path: '/' }) {
|
|
46
|
+
this._storage.setItem(key, value).subscribe(() => { });
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Remueve el item del storage.
|
|
50
|
+
* @param key Clave del item del storage a eliminar.
|
|
51
|
+
* @param metadata Opciones extra que puede necesitar el servicio.
|
|
52
|
+
*/
|
|
53
|
+
removeItem(key: string, metadata?: any): void {
|
|
54
|
+
this._storage.removeItem(key).subscribe(() => { });
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Limpia el Storage.
|
|
58
|
+
*/
|
|
59
|
+
clear(): void {
|
|
60
|
+
this._storage.clear().subscribe(() => { });
|
|
61
|
+
}
|
|
62
|
+
key(index: number): string | null {
|
|
63
|
+
throw new Error('Method not implemented.');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { ConnectionService } from '../api';
|
|
3
|
+
import { BehaviorSubject, catchError, map, Observable, of, shareReplay, take } from 'rxjs';
|
|
4
|
+
import { ApiConstantsService, CoreConstantsService } from '../constants';
|
|
5
|
+
import { Attribute, Category, Section } from '../interfaces';
|
|
6
|
+
import { Filter } from '../classes';
|
|
7
|
+
/**
|
|
8
|
+
* Este servicio permite maneja las Categorias, Secciones y Atributos como menues
|
|
9
|
+
* para la aplicación.
|
|
10
|
+
*/
|
|
11
|
+
@Injectable({
|
|
12
|
+
providedIn: 'root'
|
|
13
|
+
})
|
|
14
|
+
export class OptionsService {
|
|
15
|
+
/**
|
|
16
|
+
* Maneja las peticiones a la API
|
|
17
|
+
*/
|
|
18
|
+
private connection = inject(ConnectionService);
|
|
19
|
+
/**
|
|
20
|
+
* Constantes del core
|
|
21
|
+
*/
|
|
22
|
+
private constants = inject(CoreConstantsService);
|
|
23
|
+
/**
|
|
24
|
+
* Constantes de la API
|
|
25
|
+
*/
|
|
26
|
+
private apiConstants = inject(ApiConstantsService);
|
|
27
|
+
/**
|
|
28
|
+
* Maneja los cambios en las categorias
|
|
29
|
+
*/
|
|
30
|
+
private categoriesSubject = new BehaviorSubject<Category[]>([]);
|
|
31
|
+
private categories$: Observable<Category[]> = this.categoriesSubject.asObservable();
|
|
32
|
+
/**
|
|
33
|
+
* Maneja los cambios en las secciones
|
|
34
|
+
*/
|
|
35
|
+
private sectionsSubject = new BehaviorSubject<Section[]>([]);
|
|
36
|
+
private sections$: Observable<Section[]> = this.sectionsSubject.asObservable();
|
|
37
|
+
/**
|
|
38
|
+
* Maneja los cambios en los atributos
|
|
39
|
+
*/
|
|
40
|
+
private attributesSubject = new BehaviorSubject<Attribute[]>([]);
|
|
41
|
+
private attributes$:Observable<Attribute[]> = this.attributesSubject.asObservable();
|
|
42
|
+
|
|
43
|
+
//API URLS
|
|
44
|
+
private readonly SHOP_CHANNEL_API = `${this.apiConstants.SHOP_API_URL}${this.apiConstants.CHANNEL}/`;
|
|
45
|
+
private readonly CMS_CHANNEL_API = `${this.apiConstants.CMS_URL}${this.apiConstants.CHANNEL}/`;
|
|
46
|
+
/**
|
|
47
|
+
* Devuelve la URL para obtener las categorias.
|
|
48
|
+
* @returns
|
|
49
|
+
*/
|
|
50
|
+
private taxonsApi() { return `${this.SHOP_CHANNEL_API}taxons/?locale=${this.apiConstants.LOCALE}` };
|
|
51
|
+
/**
|
|
52
|
+
* Devuelve la URL para obtener las secciones
|
|
53
|
+
* @returns
|
|
54
|
+
*/
|
|
55
|
+
private sectionsApi() { return `${this.CMS_CHANNEL_API}sections/?locale=${this.apiConstants.LOCALE}` };
|
|
56
|
+
/**
|
|
57
|
+
* Devuelve la URL para obtener los atributos. Se le puede aplicar flitros.
|
|
58
|
+
* @param filter
|
|
59
|
+
* @returns
|
|
60
|
+
*/
|
|
61
|
+
private attributesApi(filter = '') { return `${this.SHOP_CHANNEL_API}product-search/attributes/?locale=${this.apiConstants.LOCALE}&limit=1&page=1${filter}` };
|
|
62
|
+
|
|
63
|
+
constructor() { }
|
|
64
|
+
/**
|
|
65
|
+
* Obtiene las categorias del backend. Y los mapea para que sea mas amigable el manejo como menú.
|
|
66
|
+
* @returns
|
|
67
|
+
*/
|
|
68
|
+
public getCategories(): Observable<Category[]> {
|
|
69
|
+
if(this.categoriesSubject.getValue().length === 0){
|
|
70
|
+
this.connection.get(this.taxonsApi()).pipe(
|
|
71
|
+
shareReplay(1),
|
|
72
|
+
map((response: Category[]) => {
|
|
73
|
+
const categories = this.appendPaths(true,response)
|
|
74
|
+
this.categoriesSubject.next(categories)
|
|
75
|
+
return categories
|
|
76
|
+
}),
|
|
77
|
+
catchError((error:any)=> {
|
|
78
|
+
console.log(`Error: ${error}`)
|
|
79
|
+
this.categoriesSubject.next([])
|
|
80
|
+
return of([])
|
|
81
|
+
})
|
|
82
|
+
).subscribe();
|
|
83
|
+
}
|
|
84
|
+
return this.categories$;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Obtiene las secciones del backend. Y los mapea para que sea mas amigable el manejo como menú.
|
|
88
|
+
* @returns
|
|
89
|
+
*/
|
|
90
|
+
public getSections(): Observable<Section[]> {
|
|
91
|
+
if (this.sectionsSubject.getValue().length === 0) {
|
|
92
|
+
this.connection.get(this.sectionsApi()).pipe(
|
|
93
|
+
shareReplay(1),
|
|
94
|
+
map((response: Section[]) => {
|
|
95
|
+
let sections = response.filter((section: Section) => section.code != 'home')
|
|
96
|
+
sections = sections.map((section: Section) => this.appendSection(section))
|
|
97
|
+
this.sectionsSubject.next(sections)
|
|
98
|
+
return sections
|
|
99
|
+
})).subscribe()
|
|
100
|
+
}
|
|
101
|
+
return this.sections$;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Obtiene los atributos del backend. Y los mapea para que sea mas amigable el manejo como menú.
|
|
105
|
+
* @param params
|
|
106
|
+
* @returns
|
|
107
|
+
*/
|
|
108
|
+
public getAttributes(params?: any): Observable<Attribute[]> {
|
|
109
|
+
if (this.attributesSubject.getValue().length === 0) {
|
|
110
|
+
this.connection.get(this.attributesApi(params)).pipe(
|
|
111
|
+
shareReplay(1),
|
|
112
|
+
map((response: any | Attribute) => {
|
|
113
|
+
const attributes = this.appendPaths(false, (response.attributes[0] || response))
|
|
114
|
+
this.attributesSubject.next(attributes)
|
|
115
|
+
return attributes
|
|
116
|
+
}
|
|
117
|
+
)).subscribe()
|
|
118
|
+
}
|
|
119
|
+
return this.attributes$;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
// HELPERS
|
|
124
|
+
private slugify = (text: string) => this.removeAccents(text.toLowerCase().replace(/ & /g, ' ').replace(/ /g, '-').replace(/\//g, '-').replace(/ñ/g, 'n'));
|
|
125
|
+
/**
|
|
126
|
+
* Elimina los acentos
|
|
127
|
+
* @param str
|
|
128
|
+
* @returns
|
|
129
|
+
*/
|
|
130
|
+
private removeAccents(str: string){
|
|
131
|
+
return str.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Realiza un mapeo de los datos para darle un formato mas entendible a la
|
|
135
|
+
* hora de usar como un menú.
|
|
136
|
+
* @param isCategory Utilizado para diferenciar si es categoría o atributo.
|
|
137
|
+
* @param response Respuesta que obtiene del backend con los datos a mapear.
|
|
138
|
+
* @returns
|
|
139
|
+
*/
|
|
140
|
+
public appendPaths(isCategory: boolean, response: any) {
|
|
141
|
+
const result = response.map((subelement: any) => {
|
|
142
|
+
if (!subelement.children || subelement.children.length == 0) {
|
|
143
|
+
subelement.children = [];
|
|
144
|
+
subelement.path = isCategory ? this.constants.PRODUCT_LIST_ROUTE + 'categories/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name))
|
|
145
|
+
: this.constants.PRODUCT_LIST_ROUTE + 'attributes/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name));
|
|
146
|
+
} else if (subelement.children) {
|
|
147
|
+
subelement.slug = subelement.slug || this.slugify(subelement.name);
|
|
148
|
+
subelement.children = this.appendPaths(isCategory, subelement.children);
|
|
149
|
+
}
|
|
150
|
+
isCategory ? subelement.path = this.constants.PRODUCT_LIST_ROUTE + 'categories/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name))
|
|
151
|
+
: subelement.path = this.constants.PRODUCT_LIST_ROUTE + 'attributes/' + this.slugify((subelement.slug ? this.slugify(subelement.slug) : subelement.name));
|
|
152
|
+
return subelement;
|
|
153
|
+
});
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Genera un mapeo de secciones para que queden mas amigables a la hora de manejar como menú.
|
|
158
|
+
* @param section
|
|
159
|
+
* @returns
|
|
160
|
+
*/
|
|
161
|
+
private appendSection(section:any) {
|
|
162
|
+
let data: any = {};
|
|
163
|
+
if (section.pages?.length) {
|
|
164
|
+
data.type = 'sub';
|
|
165
|
+
data.children = section.pages.map((page:any) => {
|
|
166
|
+
return {
|
|
167
|
+
code: page.code,
|
|
168
|
+
name: page.name,
|
|
169
|
+
type: 'link',
|
|
170
|
+
path: this.constants.SECTIONS_ROUTE + (page.slug ? page.slug : page.code),
|
|
171
|
+
// path: this.constants.SECTIONS_ROUTE + page.slug,
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
//data.title = section.name;
|
|
175
|
+
data.name = section.name;
|
|
176
|
+
data.path = this.constants.SECTIONS_ROUTE + (section.slug ? section.slug : section.code);
|
|
177
|
+
data.code = section.code;
|
|
178
|
+
} else {
|
|
179
|
+
data.code = section.code;
|
|
180
|
+
//data.title = section.name;
|
|
181
|
+
data.name = section.name;
|
|
182
|
+
data.type = 'link';
|
|
183
|
+
data.children = [];
|
|
184
|
+
data.path = this.constants.SECTIONS_ROUTE + (section.slug ? section.slug : section.code);
|
|
185
|
+
}
|
|
186
|
+
return data;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Mapea los elementos para darle un formato mas amigable para los menúes y filtros.
|
|
190
|
+
* @param elements categorias | atributos
|
|
191
|
+
* @returns
|
|
192
|
+
*/
|
|
193
|
+
public generateMenu = (elements:any) => {
|
|
194
|
+
return elements.map( (element: any) => {
|
|
195
|
+
if (element.children && element.children.length == 0) {
|
|
196
|
+
return {
|
|
197
|
+
...element,
|
|
198
|
+
title: element.name,
|
|
199
|
+
path: element.path,
|
|
200
|
+
type: 'link',
|
|
201
|
+
}
|
|
202
|
+
}else{
|
|
203
|
+
return {
|
|
204
|
+
...element,
|
|
205
|
+
title: element.name,
|
|
206
|
+
type: 'sub',
|
|
207
|
+
path: element.path,
|
|
208
|
+
children : ( element.children ? this.generateMenu(element.children) : [])
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
})
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Devuelve los elementos del breadcrumb.
|
|
215
|
+
* @param code
|
|
216
|
+
* @returns
|
|
217
|
+
*/
|
|
218
|
+
getBreadcrumb = (code:any) => {
|
|
219
|
+
if (!code) return null;
|
|
220
|
+
let breadcrumb = this.generateBreadcrumb(code, this.generateMenu(this.categoriesSubject.value), []);
|
|
221
|
+
if (!breadcrumb || !breadcrumb.length) breadcrumb = this.generateBreadcrumb(code, this.generateMenu(this.attributesSubject.value), []);
|
|
222
|
+
return (breadcrumb && breadcrumb.length) && breadcrumb.reverse();
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Genera los breadcrumbs en base a los filtros aplicados.
|
|
226
|
+
* @param filters
|
|
227
|
+
* @returns
|
|
228
|
+
*/
|
|
229
|
+
getBreadcrumbByFilters = (filters: Filter[]) => {
|
|
230
|
+
let final_result:any[] = [];
|
|
231
|
+
filters.forEach(filter => {
|
|
232
|
+
let result = filter.getSelectedList();
|
|
233
|
+
if (!result || !result.length) return;
|
|
234
|
+
|
|
235
|
+
if (filter.type() == 'categories') final_result.unshift(...this.generateBreadcrumb(result[0], filter.data, []).reverse());
|
|
236
|
+
else result.forEach(
|
|
237
|
+
(code:any) => {
|
|
238
|
+
let breadcrumb = this.generateBreadcrumb(code, filter.data, [])
|
|
239
|
+
breadcrumb.length && final_result.push(breadcrumb[0]);
|
|
240
|
+
}
|
|
241
|
+
);
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
return final_result;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Genera el listado de breadcrumb.
|
|
248
|
+
* @param code
|
|
249
|
+
* @param elements filtros actuales en el frontend
|
|
250
|
+
* @param result datos a actualizar con el nuevo listado de breadcrumb
|
|
251
|
+
* @returns
|
|
252
|
+
*/
|
|
253
|
+
private generateBreadcrumb = (code:string, elements:any, result:any) => {
|
|
254
|
+
let element = elements.find((elem:any) => elem.code == code);
|
|
255
|
+
if (element) {
|
|
256
|
+
result.push(element);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
elements.some((elem:any) => {
|
|
260
|
+
if (elem.children && elem.children.length) {
|
|
261
|
+
const length = result.length;
|
|
262
|
+
let new_result = this.generateBreadcrumb(code, elem.children, result);
|
|
263
|
+
if (new_result.length > length) {
|
|
264
|
+
result = new_result;
|
|
265
|
+
result.push(elem);
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return false;
|
|
270
|
+
})
|
|
271
|
+
}
|
|
272
|
+
return result;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { CheckoutData, CheckoutDataType } from '../interfaces';
|
|
3
|
+
|
|
4
|
+
@Injectable({
|
|
5
|
+
providedIn: 'root'
|
|
6
|
+
})
|
|
7
|
+
export class OrderUtilityService {
|
|
8
|
+
|
|
9
|
+
constructor() { }
|
|
10
|
+
/**
|
|
11
|
+
* @param cart Objeto carrito o orden, indistintamente, ya que poseen el mismo formato
|
|
12
|
+
* @param forCart Si la solicitud de promociones proviene del carrito, suprime el subtotal y el total
|
|
13
|
+
* @description Devuelve un listado con todas las promociones que posee el carro/orden
|
|
14
|
+
*/
|
|
15
|
+
getPromotions = (cart: any, forCart: boolean = false): CheckoutData[] | undefined => {
|
|
16
|
+
if (cart.checkoutState && cart.checkoutState == "completed") return;
|
|
17
|
+
let new_state: CheckoutData[] = [];
|
|
18
|
+
let subtotal: CheckoutData = { type: 'subtotal', name: 'subtotal', amount: cart.totals.items };
|
|
19
|
+
let total: CheckoutData = { type: 'total', name: 'total', amount: cart.totals.total };
|
|
20
|
+
!forCart && new_state.push(subtotal);
|
|
21
|
+
|
|
22
|
+
for (let index = 0; index < cart.cartDiscounts.length; index++) {
|
|
23
|
+
cart.cartDiscounts[index].type = this.formatType(cart.cartDiscounts[index].type);
|
|
24
|
+
new_state.push({
|
|
25
|
+
type: cart.cartDiscounts[index].type,
|
|
26
|
+
name: (cart.cartDiscounts[index].type != 'coupon') ? cart.cartDiscounts[index].name : 'coupon',
|
|
27
|
+
amount: this.getAmount(cart.cartDiscounts[index], cart)
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
!forCart && new_state.push(total);
|
|
33
|
+
return new_state;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
getAmount(discount:any, cart:any): number{
|
|
37
|
+
if (discount.type != 'shipment') return discount.amount;
|
|
38
|
+
return cart.totals.shipping;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
formatType(type: string): CheckoutDataType | string{
|
|
42
|
+
let result;
|
|
43
|
+
switch (type) {
|
|
44
|
+
case 'order_promotion': result = 'discount'; break;
|
|
45
|
+
case 'order_shipping_promotion': result = 'shipment'; break;
|
|
46
|
+
case 'order_coupon_promotion': result = 'coupon'; break;
|
|
47
|
+
case 'order_unit_promotion': result = 'discount'; break;
|
|
48
|
+
}
|
|
49
|
+
!result && (result = type.includes('promotion') || type.includes('discount') ? 'discount' : type)
|
|
50
|
+
return result || type;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { inject, Injectable, signal } from '@angular/core';
|
|
2
|
+
import { ConnectionService } from '../api';
|
|
3
|
+
import { BehaviorSubject, map, Observable, shareReplay, switchMap } from 'rxjs';
|
|
4
|
+
import { Pagination, Product } from '../interfaces';
|
|
5
|
+
import { FiltersService } from './filters.service';
|
|
6
|
+
import { Filter } from '../classes';
|
|
7
|
+
/**
|
|
8
|
+
* Servicio para manejar la paginación de los productos.
|
|
9
|
+
* @class PaginationService
|
|
10
|
+
*/
|
|
11
|
+
@Injectable({
|
|
12
|
+
providedIn: 'root'
|
|
13
|
+
})
|
|
14
|
+
export class PaginationService {
|
|
15
|
+
|
|
16
|
+
private _connectionService: ConnectionService = inject(ConnectionService);
|
|
17
|
+
private _filtersService: FiltersService = inject(FiltersService)
|
|
18
|
+
public paginationData$ = this._filtersService.filters$.pipe(
|
|
19
|
+
shareReplay(1),
|
|
20
|
+
switchMap((filters) => {
|
|
21
|
+
const url = this.buildUrl(filters);
|
|
22
|
+
console.log("pag",url);
|
|
23
|
+
return this.getData(url);
|
|
24
|
+
})
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
private _dataPagination: any = signal<Pagination>({
|
|
28
|
+
attributes: [],
|
|
29
|
+
category: [],
|
|
30
|
+
options: [],
|
|
31
|
+
limit: 0,
|
|
32
|
+
page: 0,
|
|
33
|
+
pages: 0,
|
|
34
|
+
total: 0,
|
|
35
|
+
items: [],
|
|
36
|
+
called: false
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
private _waiting: boolean = false;
|
|
40
|
+
private _finished: boolean = false;
|
|
41
|
+
private _apiUrl: string = '';
|
|
42
|
+
private _start: boolean = false;
|
|
43
|
+
|
|
44
|
+
private _nextProductsSubject: BehaviorSubject<Product[]> = new BehaviorSubject<Product[]>([]);
|
|
45
|
+
public nextProducts$ = this._nextProductsSubject.asObservable();
|
|
46
|
+
|
|
47
|
+
private _resetSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
|
|
48
|
+
public reset$ = this._resetSubject.asObservable();
|
|
49
|
+
constructor() { }
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Inicializa la configuración para el Servicio de Paginación.
|
|
53
|
+
* @param apiUrl Url con los filtros aplicados.
|
|
54
|
+
* @param limit limite de productos en cada petición.
|
|
55
|
+
*/
|
|
56
|
+
initialize(apiUrl: string, limit?: number) {
|
|
57
|
+
//console.log(apiUrl)
|
|
58
|
+
this._apiUrl = apiUrl;
|
|
59
|
+
this._dataPagination().limit = limit || this._dataPagination().limit || 10;
|
|
60
|
+
this._finished = false;
|
|
61
|
+
this._start = true;
|
|
62
|
+
this._nextProductsSubject.next([]);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Obtengo los datos de la siguiente página.
|
|
66
|
+
* @param next
|
|
67
|
+
* @returns
|
|
68
|
+
*/
|
|
69
|
+
getNext(next?: any): boolean {
|
|
70
|
+
this._waiting = true;
|
|
71
|
+
this._nextProductsSubject.next([]);
|
|
72
|
+
this._apiUrl = this._apiUrl.replace('%20', ' ');// mas para cuando es un search value.
|
|
73
|
+
let nextProducts;
|
|
74
|
+
if (this._start) {
|
|
75
|
+
nextProducts = this._connectionService.get(this._apiUrl, { limit: this._dataPagination().limit, page: 1 })
|
|
76
|
+
this._start = false
|
|
77
|
+
} else {
|
|
78
|
+
nextProducts = this._connectionService.get(this._dataPagination().links.next.slice(1));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
!this._finished && nextProducts.subscribe(
|
|
82
|
+
(response: Pagination) => {
|
|
83
|
+
response.links ? this.updatePageData(response) : this.finish(response)
|
|
84
|
+
this._nextProductsSubject.next(response.items);
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Actualiza los datos de la pagina.
|
|
91
|
+
* @param response respuesta del backend o objecto del tipo `Pagination`.
|
|
92
|
+
*/
|
|
93
|
+
updatePageData(response: Pagination): void {
|
|
94
|
+
this._dataPagination.set({ ...response, called: true })
|
|
95
|
+
this._finished = (response.page == response.pages)
|
|
96
|
+
this._waiting = false;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Marca el final de las paginas, es decir cuando ya no queda mas elementos que mostrar.
|
|
100
|
+
* @param response
|
|
101
|
+
*/
|
|
102
|
+
finish(response: Pagination): void {
|
|
103
|
+
this._finished = true;
|
|
104
|
+
this._waiting = false;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Obtengo los productos de la pagina cargada actual.
|
|
108
|
+
* @returns
|
|
109
|
+
*/
|
|
110
|
+
public getNextProducts(): Product[] {
|
|
111
|
+
return this._nextProductsSubject.value;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Devuelve si esta esperando o no la petición al backend.
|
|
115
|
+
* @returns
|
|
116
|
+
*/
|
|
117
|
+
public getWaiting(): boolean { return this._waiting; }
|
|
118
|
+
/**
|
|
119
|
+
* Setea la variable waiting.
|
|
120
|
+
* @param value
|
|
121
|
+
*/
|
|
122
|
+
public setWaiting(value: boolean): void { this._waiting = value }
|
|
123
|
+
/**
|
|
124
|
+
* Getter para la variable `_finished`.
|
|
125
|
+
* @returns
|
|
126
|
+
*/
|
|
127
|
+
public getFinished(): boolean { return this._finished; }
|
|
128
|
+
/**
|
|
129
|
+
* Devuelve el total de Items.
|
|
130
|
+
* @returns
|
|
131
|
+
*/
|
|
132
|
+
public getTotalItems(): number {
|
|
133
|
+
return this._dataPagination().limit * this._dataPagination().page;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Obtengo un objecto con los datos de los filtros resultantes.
|
|
137
|
+
* @returns
|
|
138
|
+
*/
|
|
139
|
+
public getFiltersPagination(): any {
|
|
140
|
+
return {
|
|
141
|
+
"categories": this._dataPagination().category,
|
|
142
|
+
"attributes": this._dataPagination().attributes,
|
|
143
|
+
"options": this._dataPagination().options
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Para contruiste la url en base a los filtros aplicados.
|
|
148
|
+
* @param filters
|
|
149
|
+
* @returns
|
|
150
|
+
*/
|
|
151
|
+
public buildUrl(filters: Filter[]) {
|
|
152
|
+
return this._filtersService.generateFinalApi();
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Devuelve un observable de los productos que devolvio la última página obtenida.
|
|
156
|
+
* @param url
|
|
157
|
+
* @returns
|
|
158
|
+
*/
|
|
159
|
+
public getData(url: string): Observable<any> {
|
|
160
|
+
this._resetSubject.next(true);
|
|
161
|
+
this._nextProductsSubject.next([]);
|
|
162
|
+
this._connectionService.get(url, { limit: 10, page: 1 }).pipe(
|
|
163
|
+
map(res =>{
|
|
164
|
+
//console.log(res)
|
|
165
|
+
this._nextProductsSubject.next(res.items);
|
|
166
|
+
res.links ? this.updatePageData(res) : this.finish(res)
|
|
167
|
+
})).subscribe();
|
|
168
|
+
|
|
169
|
+
return this.nextProducts$;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { ApiConstantsService } from '../constants';
|
|
3
|
+
import { ConnectionService } from '../api';
|
|
4
|
+
import { BehaviorSubject, catchError, map, Observable, of, shareReplay } from 'rxjs';
|
|
5
|
+
import { Parameter } from '../interfaces';
|
|
6
|
+
/**
|
|
7
|
+
* Servicio que maneja los parametros de la aplicación.
|
|
8
|
+
*/
|
|
9
|
+
@Injectable({
|
|
10
|
+
providedIn: 'root'
|
|
11
|
+
})
|
|
12
|
+
export class ParametersService {
|
|
13
|
+
/**
|
|
14
|
+
* Constantes de la API
|
|
15
|
+
*/
|
|
16
|
+
private apiConstants = inject(ApiConstantsService)
|
|
17
|
+
/**
|
|
18
|
+
* Maneja las peticiones a la API
|
|
19
|
+
*/
|
|
20
|
+
private connection = inject(ConnectionService)
|
|
21
|
+
|
|
22
|
+
//API URLS
|
|
23
|
+
/**
|
|
24
|
+
* Devuelve la URL para obtener todos los parametros.
|
|
25
|
+
* @returns
|
|
26
|
+
*/
|
|
27
|
+
private getAllParametersAPI() { return `${this.apiConstants.SHOP_API_URL}${this.apiConstants.CHANNEL}/parameters` }
|
|
28
|
+
|
|
29
|
+
//OBSERVABLES
|
|
30
|
+
/**
|
|
31
|
+
* Subject para manejar los cambios en los datos de los parametros
|
|
32
|
+
*/
|
|
33
|
+
private parametersSubject = new BehaviorSubject<Parameter[] | null>(null);
|
|
34
|
+
private parameters$: Observable<Parameter[] | null> = this.parametersSubject.asObservable();
|
|
35
|
+
|
|
36
|
+
//METHODS
|
|
37
|
+
/**
|
|
38
|
+
* Obtiene los parámetros del backend.
|
|
39
|
+
* @returns
|
|
40
|
+
*/
|
|
41
|
+
public getParameters(): Observable<Parameter[] | null> {
|
|
42
|
+
if (this.parametersSubject.getValue() === null) {
|
|
43
|
+
this.connection.get(this.getAllParametersAPI()).pipe(
|
|
44
|
+
shareReplay(1),
|
|
45
|
+
map((response: Parameter[]) => {
|
|
46
|
+
this.parametersSubject.next(response)
|
|
47
|
+
return response
|
|
48
|
+
}), catchError((error: any) => {
|
|
49
|
+
console.log(`Error: ${error}`)
|
|
50
|
+
this.parametersSubject.next([])
|
|
51
|
+
return of([])
|
|
52
|
+
})
|
|
53
|
+
).subscribe();
|
|
54
|
+
}
|
|
55
|
+
return this.parameters$
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Comprueba si el código de un parámetro existe en la lista de parámetros.
|
|
59
|
+
* @param params Lista de parámetros
|
|
60
|
+
* @param code Código del parámetro a buscar
|
|
61
|
+
* @returns El objeto con los datos del parámetro encontrado, sino retorna `null`
|
|
62
|
+
*/
|
|
63
|
+
public hasParams(params: any, code: string): any { return params && params.find((param: any) => param.code?.toLowerCase().includes(code.toLowerCase())) }
|
|
64
|
+
|
|
65
|
+
constructor() { }
|
|
66
|
+
|
|
67
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, firstValueFrom, map } from 'rxjs';
|
|
3
|
+
import { ConnectionService } from '../api';
|
|
4
|
+
import { ToastService } from './toast.service';
|
|
5
|
+
import { ApiConstantsService } from '../constants';
|
|
6
|
+
import { CartService } from './cart.service';
|
|
7
|
+
import { AnalyticsService } from './analytics';
|
|
8
|
+
import { CheckoutService } from './checkout.service';
|
|
9
|
+
|
|
10
|
+
@Injectable({
|
|
11
|
+
providedIn: 'root'
|
|
12
|
+
})
|
|
13
|
+
export class PaymentService {
|
|
14
|
+
|
|
15
|
+
private _connectionService: ConnectionService = inject(ConnectionService);
|
|
16
|
+
private _toastService: ToastService = inject(ToastService);
|
|
17
|
+
private _apiConsts: ApiConstantsService = inject(ApiConstantsService);
|
|
18
|
+
private _cartService: CartService = inject(CartService);
|
|
19
|
+
private _analyticsService: AnalyticsService = inject(AnalyticsService);
|
|
20
|
+
private _checkoutService: CheckoutService = inject(CheckoutService);
|
|
21
|
+
|
|
22
|
+
private paymentMethodsSubject = new BehaviorSubject<any[]>([]);
|
|
23
|
+
public methods$ = this.paymentMethodsSubject.asObservable();
|
|
24
|
+
|
|
25
|
+
//API URL
|
|
26
|
+
baseApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/' + 'checkout/' + this._cartService.getCartToken(); }
|
|
27
|
+
getPaymentMethodsApi() { return this.baseApi() + '/payment'; }
|
|
28
|
+
putPaymentApi(method: string) { return this.baseApi() + '/payment/' + method; }
|
|
29
|
+
getPreferenceApi (){ return 'shop-api/' + this._apiConsts.CHANNEL + '/mercado-pago/' + this._cartService.getCartToken() + '/preference'; }
|
|
30
|
+
|
|
31
|
+
constructor() {
|
|
32
|
+
this.getPaymentMethods();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
getPaymentMethods() {
|
|
36
|
+
return firstValueFrom(this._connectionService.get(this.getPaymentMethodsApi())).then(
|
|
37
|
+
res => res.payments?.length && this.paymentMethodsSubject.next(Object.keys(res.payments[0].methods).map(key => res.payments[0].methods[key])),
|
|
38
|
+
err => this._toastService.show('operation-error')
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
putPayment(method: any) {
|
|
43
|
+
return firstValueFrom(this._connectionService
|
|
44
|
+
.put(this.putPaymentApi(method), { method })).then(
|
|
45
|
+
res => {
|
|
46
|
+
this._analyticsService.callEvent('add_payment_info', res);
|
|
47
|
+
return res
|
|
48
|
+
},
|
|
49
|
+
err => {
|
|
50
|
+
return new Promise((resolve, reject) => reject(new Error(err.error)))
|
|
51
|
+
}
|
|
52
|
+
).catch(err => console.error(err))
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
getPreference(shipment_data:any){
|
|
56
|
+
return firstValueFrom(this._connectionService.post(this.getPreferenceApi(), shipment_data).pipe(map(res => (res.preference || res))));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
setPayment(data:any) {
|
|
60
|
+
return this._checkoutService.setStepData('payment',data);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
}
|