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,284 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';
|
|
3
|
+
import { AnalyticEventKey } from '../../interfaces';
|
|
4
|
+
import { NavigationEnd, Router } from '@angular/router';
|
|
5
|
+
import { filter } from 'rxjs';
|
|
6
|
+
/**
|
|
7
|
+
* Funcion que sera dada por el script que se inserta en el inicializador de Google Analytics.
|
|
8
|
+
*/
|
|
9
|
+
declare var gtag: Function;
|
|
10
|
+
declare var dataLayer: any[];
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Servicio encargado de manejar el analytics de google.
|
|
14
|
+
* @class GoogleAnalyticsService
|
|
15
|
+
*/
|
|
16
|
+
@Injectable({
|
|
17
|
+
providedIn: 'root'
|
|
18
|
+
})
|
|
19
|
+
export class GoogleAnalyticsService {
|
|
20
|
+
/**
|
|
21
|
+
* Se encarga de crear el elemento HTML con las configuraciones para
|
|
22
|
+
* que se pueda ejecutar el servicio.
|
|
23
|
+
*/
|
|
24
|
+
private renderer: Renderer2;
|
|
25
|
+
/**
|
|
26
|
+
* Indica cuando el servicio esta habilitado.
|
|
27
|
+
*/
|
|
28
|
+
private enabled: boolean = false;
|
|
29
|
+
|
|
30
|
+
private rendererFactory: RendererFactory2 = inject(RendererFactory2);
|
|
31
|
+
private document: any = inject(DOCUMENT);
|
|
32
|
+
/**
|
|
33
|
+
* Servicio de ruteo de angular.
|
|
34
|
+
*/
|
|
35
|
+
private router:Router = inject(Router);
|
|
36
|
+
|
|
37
|
+
constructor() {
|
|
38
|
+
this.renderer = this.rendererFactory.createRenderer(null, null);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Inicializa el Servicio de analytics con sus configuraciones.
|
|
42
|
+
* @param gtm_id id provisto por Google Tag Manager.
|
|
43
|
+
*/
|
|
44
|
+
initialize(gtm_id: string) {
|
|
45
|
+
if (!document.getElementById('google_tag_manager')) {
|
|
46
|
+
console.log('hay elemento')
|
|
47
|
+
const declaration = this.renderer.createElement('script');
|
|
48
|
+
declaration.async = true;
|
|
49
|
+
declaration.id = 'google_tag_manager';
|
|
50
|
+
declaration.src = `https://www.googletagmanager.com/gtag/js?id=${gtm_id}`;
|
|
51
|
+
const initialization = this.renderer.createElement('script');
|
|
52
|
+
initialization.text = `window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '${gtm_id}')`;
|
|
53
|
+
this.renderer.appendChild(this.document.head, initialization);
|
|
54
|
+
this.renderer.appendChild(this.document.head, declaration);
|
|
55
|
+
this.enabled = true;
|
|
56
|
+
}
|
|
57
|
+
setTimeout(() => this.startListeningPageViews(gtm_id), 1000);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
*
|
|
61
|
+
* @param gtm_id
|
|
62
|
+
*/
|
|
63
|
+
private startListeningPageViews(gtm_id:any){
|
|
64
|
+
this.router.events.pipe(
|
|
65
|
+
filter(event => event instanceof NavigationEnd)
|
|
66
|
+
).subscribe((event: NavigationEnd) => {
|
|
67
|
+
gtag('config', gtm_id, {
|
|
68
|
+
'page_path': event.urlAfterRedirects
|
|
69
|
+
})
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Ejecuta el evento pasado por parametro.
|
|
74
|
+
* @param event_name Nombre del evento.
|
|
75
|
+
* @param data Data extra para agregar al evento.
|
|
76
|
+
* @returns
|
|
77
|
+
*/
|
|
78
|
+
callEvent(event_name: AnalyticEventKey, data = {}){
|
|
79
|
+
if (!this.enabled) return;
|
|
80
|
+
let event = this.translateEventName(event_name);
|
|
81
|
+
event && gtag('event', this.translateEventName(event_name), this.evalEvent(event_name, data));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Traduce el evento recibido y devuelve el nombre de la función que lo va a tratar.
|
|
85
|
+
* @param event_name
|
|
86
|
+
* @returns
|
|
87
|
+
*/
|
|
88
|
+
translateEventName(event_name: AnalyticEventKey){
|
|
89
|
+
switch (event_name) {
|
|
90
|
+
case 'view_item': return 'view_item';
|
|
91
|
+
case 'view_item_list': return 'view_item_list';
|
|
92
|
+
case 'checkout_init': return 'begin_checkout';
|
|
93
|
+
case 'shipping_info': return 'add_shipping_info';
|
|
94
|
+
case 'add_payment_info': return 'add_payment_info';
|
|
95
|
+
case 'purchase': return 'purchase';
|
|
96
|
+
case 'add_to_cart': return 'add_to_cart';
|
|
97
|
+
case 'remove_from_cart': return 'remove_from_cart';
|
|
98
|
+
case 'sign_up': return 'sign_up';
|
|
99
|
+
default: return null;
|
|
100
|
+
//default: return event_name;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Evalua el evento y devuelve los datos de las funciones relacionadas.
|
|
105
|
+
* @param event_name Nombre del evento
|
|
106
|
+
* @param data Data extra para agregar al evento
|
|
107
|
+
* @returns
|
|
108
|
+
*/
|
|
109
|
+
evalEvent(event_name:AnalyticEventKey, data:any){
|
|
110
|
+
switch (event_name) {
|
|
111
|
+
case 'view_item': return this.toViewItem(data);
|
|
112
|
+
case 'view_item_list': return this.toViewItemList(data);
|
|
113
|
+
case 'checkout_init': return this.toCheckoutInit(data);
|
|
114
|
+
case 'shipping_info': return this.toShippingInfo(data);
|
|
115
|
+
case 'add_payment_info': return this.toPaymentInfo(data);
|
|
116
|
+
case 'purchase': return this.toPurchase(data);
|
|
117
|
+
case 'add_to_cart': return this.toAddToCart(data);
|
|
118
|
+
case 'remove_from_cart': return this.toRemoveToCart(data);
|
|
119
|
+
case 'sign_up': return this.toSignUp(data);
|
|
120
|
+
default: return data;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Evento que se dispara cuando se quiere comprar un producto.
|
|
125
|
+
* @param data
|
|
126
|
+
* @returns
|
|
127
|
+
*/
|
|
128
|
+
private toPurchase(data:any){
|
|
129
|
+
return {
|
|
130
|
+
coupon: this.toCartDiscount(data),
|
|
131
|
+
currency: data.currency,
|
|
132
|
+
shipping: data.totals.shipping,
|
|
133
|
+
tax: data.totals.taxes,
|
|
134
|
+
value: data.totals.total,
|
|
135
|
+
transaction_id: data.number,
|
|
136
|
+
items: data.items.map((item:any) => ({
|
|
137
|
+
id: item.product.id,
|
|
138
|
+
name: item.product.name,
|
|
139
|
+
category: item.product.category,
|
|
140
|
+
price: item.total,
|
|
141
|
+
quantity: item.quantity
|
|
142
|
+
}))
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Evento que se dispara cuando se inicializa en checkout.
|
|
147
|
+
* @param data
|
|
148
|
+
* @returns
|
|
149
|
+
*/
|
|
150
|
+
private toCheckoutInit(data:any){
|
|
151
|
+
return {
|
|
152
|
+
coupon: this.toCartDiscount(data),
|
|
153
|
+
currency: data.currency || "USD",
|
|
154
|
+
items: data.items.map((item:any) => ({
|
|
155
|
+
id: item.product.id,
|
|
156
|
+
name: item.product.name,
|
|
157
|
+
category: item.product.category,
|
|
158
|
+
price: item.total,
|
|
159
|
+
quantity: item.quantity
|
|
160
|
+
})),
|
|
161
|
+
value: data.totals?.total || 0,
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Evento que se dispara con los descuentos en el carrito.
|
|
166
|
+
* @param data
|
|
167
|
+
* @returns
|
|
168
|
+
*/
|
|
169
|
+
private toCartDiscount(data:any){
|
|
170
|
+
let strDiscount = ''
|
|
171
|
+
strDiscount = data.cartDiscounts.map((itemDiscount:any) => itemDiscount?.type).join()
|
|
172
|
+
return strDiscount == '' ? 'not-discount' : strDiscount
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Evento que se dispara cuando se agrega un producto al carrito.
|
|
176
|
+
* @param data
|
|
177
|
+
* @returns
|
|
178
|
+
*/
|
|
179
|
+
private toAddToCart(data:any){
|
|
180
|
+
let lastProduct = data.items?.length && data.items[data.items.length - 1]
|
|
181
|
+
return {
|
|
182
|
+
currency: data.currency || "USD",
|
|
183
|
+
items: [this.toItem({ quantity: lastProduct.quantity, ...lastProduct.product })],
|
|
184
|
+
value: lastProduct.total || 0,
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Cambia la variable **enabled** a `false`
|
|
189
|
+
* @returns
|
|
190
|
+
*/
|
|
191
|
+
disable() {this.enabled = false; }
|
|
192
|
+
/**
|
|
193
|
+
* Evento que se dispara cuando se interactua a las vista del producto.
|
|
194
|
+
* @param product
|
|
195
|
+
* @returns
|
|
196
|
+
*/
|
|
197
|
+
private toViewItem(product:any){
|
|
198
|
+
return {
|
|
199
|
+
currency: product.currency,
|
|
200
|
+
items: [this.toItem(product)],
|
|
201
|
+
value: product.variants[0]?.saleprice || product.variants[0]?.price,
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Evento que se dispara cuando se interactua con el listado de productos.
|
|
206
|
+
* @param data
|
|
207
|
+
* @returns
|
|
208
|
+
*/
|
|
209
|
+
private toViewItemList(data:any){
|
|
210
|
+
return {
|
|
211
|
+
items: data.products.map((product:any) => this.toItem(product)),
|
|
212
|
+
item_list_name: data.item_list_name || 'Collection',
|
|
213
|
+
item_list_id: data.item_list_id || 'collection'
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Evento que se dispara cuando se quita un item del carrito.
|
|
218
|
+
* @param product
|
|
219
|
+
* @returns
|
|
220
|
+
*/
|
|
221
|
+
private toRemoveToCart(product:any){
|
|
222
|
+
let productParam = product.product
|
|
223
|
+
return {
|
|
224
|
+
currency: product.currency || "USD",
|
|
225
|
+
items: [this.toItem({ quantity: product.quantity, ...productParam })],
|
|
226
|
+
value: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
private toItem = (product:any) => ({
|
|
231
|
+
item_name: product.name,
|
|
232
|
+
item_id: product.id,
|
|
233
|
+
item_brand: product.attributes?.length ? product.attributes[0].name : '',
|
|
234
|
+
item_category: product.category,
|
|
235
|
+
price: product.variants[0]?.saleprice || product.variants[0]?.price,
|
|
236
|
+
quantity: product.quantity || 1,
|
|
237
|
+
})
|
|
238
|
+
/**
|
|
239
|
+
* Evento que se dispara cuando se consulta la información de pago.
|
|
240
|
+
* @param data
|
|
241
|
+
* @returns
|
|
242
|
+
*/
|
|
243
|
+
private toPaymentInfo(data:any){
|
|
244
|
+
return {
|
|
245
|
+
coupon: this.toCartDiscount(data),
|
|
246
|
+
currency: data.currency || "USD",
|
|
247
|
+
items: data.items.map((item:any) => ({
|
|
248
|
+
id: item.product.id,
|
|
249
|
+
name: item.product.name,
|
|
250
|
+
category: item.product.category,
|
|
251
|
+
price: item.total,
|
|
252
|
+
quantity: item.quantity
|
|
253
|
+
})),
|
|
254
|
+
payment_type: data.payments[0]?.method?.code || 'not-payments',
|
|
255
|
+
value: data.totals?.total || 0,
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Evento que se dispara cuando se interactua con los métodos de envío.
|
|
260
|
+
* @param data
|
|
261
|
+
* @returns
|
|
262
|
+
*/
|
|
263
|
+
private toShippingInfo(data:any){
|
|
264
|
+
return {
|
|
265
|
+
coupon: this.toCartDiscount(data),
|
|
266
|
+
currency: data.currency || "USD",
|
|
267
|
+
items: data.items.map((item:any) => ({
|
|
268
|
+
id: item.product.id,
|
|
269
|
+
name: item.product.name,
|
|
270
|
+
category: item.product.category,
|
|
271
|
+
price: item.total,
|
|
272
|
+
quantity: item.quantity
|
|
273
|
+
})),
|
|
274
|
+
shipping_tier: data.shipments[0]?.method?.code || 'not-shipping',
|
|
275
|
+
value: data.totals?.total || 0,
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
private toSignUp(data:any){
|
|
280
|
+
return {
|
|
281
|
+
...data
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import { afterRender, inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';
|
|
2
|
+
import { AnalyticEventKey, GoogleTagManagerConfig } from '../../interfaces';
|
|
3
|
+
import { NavigationEnd, Router } from '@angular/router';
|
|
4
|
+
import { DOCUMENT } from '@angular/common';
|
|
5
|
+
/**
|
|
6
|
+
* Servicio que se encarga de manejar el analytics de GTM.
|
|
7
|
+
*/
|
|
8
|
+
@Injectable({
|
|
9
|
+
providedIn: 'root'
|
|
10
|
+
})
|
|
11
|
+
export class GTMService {
|
|
12
|
+
/**
|
|
13
|
+
* Indica si se esta cargando el servicio.
|
|
14
|
+
*/
|
|
15
|
+
private isLoaded: boolean = false;
|
|
16
|
+
/**
|
|
17
|
+
* Indica cuando el servicio esta habilitado.
|
|
18
|
+
*/
|
|
19
|
+
private enabled: boolean = false;
|
|
20
|
+
/**
|
|
21
|
+
* Se encarga de crear el elemento HTML con las configuraciones para
|
|
22
|
+
* que se pueda ejecutar el servicio.
|
|
23
|
+
*/
|
|
24
|
+
private renderer: Renderer2;
|
|
25
|
+
/**
|
|
26
|
+
* Almacena el objecto window del navegador.
|
|
27
|
+
*/
|
|
28
|
+
private window: any;
|
|
29
|
+
|
|
30
|
+
private rendererFactory: RendererFactory2 = inject(RendererFactory2);
|
|
31
|
+
private document: any = inject(DOCUMENT);
|
|
32
|
+
/**
|
|
33
|
+
* Servicio de ruteo de angular.
|
|
34
|
+
*/
|
|
35
|
+
private router: Router = inject(Router);
|
|
36
|
+
/**
|
|
37
|
+
* Configuración de Google Tag Manager.
|
|
38
|
+
*/
|
|
39
|
+
private config: GoogleTagManagerConfig = { id: null }
|
|
40
|
+
|
|
41
|
+
constructor() {
|
|
42
|
+
this.renderer = this.rendererFactory.createRenderer(null, null);
|
|
43
|
+
afterRender(() => {
|
|
44
|
+
this.window = window;
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Obtiene el dataLayer del objecto window
|
|
49
|
+
* @returns
|
|
50
|
+
*/
|
|
51
|
+
public getDataLayer(): any[] {
|
|
52
|
+
const window = this.window;
|
|
53
|
+
window.dataLayer = window.dataLayer || [];
|
|
54
|
+
return window.dataLayer;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Agrega datos al dataLayer.
|
|
58
|
+
* @param obj
|
|
59
|
+
*/
|
|
60
|
+
private pushOnDataLayer(obj: object): void {
|
|
61
|
+
const dataLayer = this.getDataLayer();
|
|
62
|
+
dataLayer.push(obj);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Agrega el script de GTM para que empiece a capturar eventos.
|
|
66
|
+
* @returns
|
|
67
|
+
*/
|
|
68
|
+
public addGtmToDom(): Promise<boolean> {
|
|
69
|
+
return new Promise(
|
|
70
|
+
(resolve, reject) => {
|
|
71
|
+
if (this.isLoaded) {
|
|
72
|
+
return resolve(this.isLoaded);
|
|
73
|
+
}
|
|
74
|
+
//const doc = this.browserGlobals.documentRef();
|
|
75
|
+
this.pushOnDataLayer({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
|
|
76
|
+
|
|
77
|
+
const gtmScript = this.document.createElement('script') //doc.createElement('script');
|
|
78
|
+
gtmScript.id = 'GTMscript';
|
|
79
|
+
gtmScript.async = true;
|
|
80
|
+
gtmScript.src = this.applyGtmQueryParams(this.config["gtm_resource_path"] ? this.config["gtm_resource_path"] : 'https://www.googletagmanager.com/gtm.js');
|
|
81
|
+
gtmScript.addEventListener('load', () => {
|
|
82
|
+
return resolve(this.isLoaded = true);
|
|
83
|
+
});
|
|
84
|
+
gtmScript.addEventListener('error', () => {
|
|
85
|
+
return reject(false);
|
|
86
|
+
});
|
|
87
|
+
this.document.head.insertBefore(gtmScript, this.document.head.firstChild);
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private applyGtmQueryParams(url: string): string {
|
|
93
|
+
if (url.indexOf('?') === -1) {
|
|
94
|
+
url += '?';
|
|
95
|
+
}
|
|
96
|
+
return (url + Object.keys(this.config).filter((k) => this.config[k]).map((k) => `${k}=${this.config[k]
|
|
97
|
+
}`).join('&'));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Inicializa el Servicio de analytics con sus configuraciones.
|
|
101
|
+
* @param config Configuraciones de Google Tag Manager
|
|
102
|
+
*/
|
|
103
|
+
public initialize(config: GoogleTagManagerConfig) {
|
|
104
|
+
this.config = config || this.config;
|
|
105
|
+
this.addGtmToDom().then(() => {
|
|
106
|
+
this.router.events.forEach(item => {
|
|
107
|
+
if (item instanceof NavigationEnd) {
|
|
108
|
+
const gtmTag = {
|
|
109
|
+
event: 'page',
|
|
110
|
+
pageName: item.url
|
|
111
|
+
};
|
|
112
|
+
this.pushTag(gtmTag);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
})
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
public pushTag(item: object): Promise<void> {
|
|
119
|
+
return new Promise<void>((resolve, reject) => {
|
|
120
|
+
if (!this.isLoaded) {
|
|
121
|
+
this.addGtmToDom().then(() => {
|
|
122
|
+
this.pushOnDataLayer(item);
|
|
123
|
+
return resolve();
|
|
124
|
+
}).catch(() => reject());
|
|
125
|
+
} else {
|
|
126
|
+
this.pushOnDataLayer(item);
|
|
127
|
+
return resolve();
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Ejecuta el evento pasado por parametro.
|
|
133
|
+
* @param event_name Nombre del evento.
|
|
134
|
+
* @param data Data extra para agregar al evento.
|
|
135
|
+
* @returns
|
|
136
|
+
*/
|
|
137
|
+
callEvent(event_name: AnalyticEventKey, data = {}) {
|
|
138
|
+
if (!this.isLoaded) return;
|
|
139
|
+
let event = this.translateEventName(event_name);
|
|
140
|
+
event && this.pushTag({ ecommerce: null })
|
|
141
|
+
event && this.pushTag({ 'event': this.translateEventName(event_name), ecommerce: this.evalEvent(event_name, data) })
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Traduce el evento recibido y devuelve el nombre de la función que lo va a tratar.
|
|
145
|
+
* @param event_name
|
|
146
|
+
* @returns
|
|
147
|
+
*/
|
|
148
|
+
translateEventName(event_name: AnalyticEventKey) {
|
|
149
|
+
switch (event_name) {
|
|
150
|
+
case 'view_item': return 'view_item';
|
|
151
|
+
case 'view_item_list': return 'view_item_list';
|
|
152
|
+
case 'checkout_init': return 'begin_checkout';
|
|
153
|
+
case 'shipping_info': return 'add_shipping_info';
|
|
154
|
+
case 'add_payment_info': return 'add_payment_info';
|
|
155
|
+
case 'purchase': return 'purchase';
|
|
156
|
+
case 'add_to_cart': return 'add_to_cart';
|
|
157
|
+
case 'remove_from_cart': return 'remove_from_cart';
|
|
158
|
+
case 'sign_up': return 'sign_up';
|
|
159
|
+
case 'select_promotion': return 'select_promotion';
|
|
160
|
+
case 'select_item': return 'select_item';
|
|
161
|
+
default: return null;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Evalua el evento y devuelve los datos de las funciones relacionadas.
|
|
166
|
+
* @param event_name Nombre del evento
|
|
167
|
+
* @param data Data extra para agregar al evento
|
|
168
|
+
* @returns
|
|
169
|
+
*/
|
|
170
|
+
evalEvent(event_name: AnalyticEventKey, data: any) {
|
|
171
|
+
switch (event_name) {
|
|
172
|
+
case 'view_item': return this.toViewItem(data);
|
|
173
|
+
case 'view_item_list': return this.toViewItemList(data);
|
|
174
|
+
case 'checkout_init': return this.toCheckoutInit(data);
|
|
175
|
+
case 'shipping_info': return this.toShippingInfo(data);
|
|
176
|
+
case 'add_payment_info': return this.toPaymentInfo(data);
|
|
177
|
+
case 'purchase': return this.toPurchase(data);
|
|
178
|
+
case 'add_to_cart': return this.toAddToCart(data);
|
|
179
|
+
case 'remove_from_cart': return this.toRemoveToCart(data);
|
|
180
|
+
case 'sign_up': return this.toSignUp(data);
|
|
181
|
+
case 'select_promotion': return this.toSelectPromotion(data);
|
|
182
|
+
case 'select_item': return this.toSelectItem(data);
|
|
183
|
+
default: return data;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Evento que se dispara cuando se quiere comprar un producto.
|
|
188
|
+
* @param data
|
|
189
|
+
* @returns
|
|
190
|
+
*/
|
|
191
|
+
private toPurchase(data: any) {
|
|
192
|
+
return {
|
|
193
|
+
coupon: this.toCartDiscount(data),
|
|
194
|
+
currency: data.currency,
|
|
195
|
+
shipping: data.totals.shipping,
|
|
196
|
+
tax: data.totals.taxes,
|
|
197
|
+
value: data.totals.total,
|
|
198
|
+
transaction_id: data.number,
|
|
199
|
+
countItems: data.items?.length || 0,
|
|
200
|
+
items: data.items.map((item: any) => ({
|
|
201
|
+
item_id: item.product.id,
|
|
202
|
+
item_name: item.product.name,
|
|
203
|
+
//coupon:'',
|
|
204
|
+
discount: item.product.discount || 0,
|
|
205
|
+
//index:'',
|
|
206
|
+
item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',
|
|
207
|
+
item_category: item.product.category,
|
|
208
|
+
item_variant: item.product.variants[0]?.code || '',
|
|
209
|
+
//location_id: '',
|
|
210
|
+
price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,
|
|
211
|
+
quantity: item.quantity || 1,
|
|
212
|
+
}))
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Evento que se dispara cuando se inicializa en checkout.
|
|
217
|
+
* @param data
|
|
218
|
+
* @returns
|
|
219
|
+
*/
|
|
220
|
+
private toCheckoutInit(data: any) {
|
|
221
|
+
return {
|
|
222
|
+
coupon: this.toCartDiscount(data),
|
|
223
|
+
currency: data.currency || "USD",
|
|
224
|
+
items: data.items.map((item: any) => ({
|
|
225
|
+
item_id: item.product.id,
|
|
226
|
+
item_name: item.product.name,
|
|
227
|
+
//coupon:'',
|
|
228
|
+
discount: item.product.discount || 0,
|
|
229
|
+
//index:'',
|
|
230
|
+
item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',
|
|
231
|
+
item_category: item.product.category,
|
|
232
|
+
//item_list_id: '',
|
|
233
|
+
//item_list_name: '',
|
|
234
|
+
item_variant: item.product.variants[0]?.code || '',
|
|
235
|
+
//location_id: '',
|
|
236
|
+
price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,
|
|
237
|
+
quantity: item.quantity || 1,
|
|
238
|
+
})),
|
|
239
|
+
value: data.totals?.total || 0,
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Evento que se dispara con los descuentos en el carrito.
|
|
244
|
+
* @param data
|
|
245
|
+
* @returns
|
|
246
|
+
*/
|
|
247
|
+
private toCartDiscount(data: any) {
|
|
248
|
+
let strDiscount = ''
|
|
249
|
+
strDiscount = data.cartDiscounts.map((itemDiscount: any) => itemDiscount?.type).join()
|
|
250
|
+
return strDiscount == '' ? 'not-discount' : strDiscount
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Evento que se dispara cuando se agrega un producto al carrito.
|
|
254
|
+
* @param data
|
|
255
|
+
* @returns
|
|
256
|
+
*/
|
|
257
|
+
private toAddToCart(data: any) {
|
|
258
|
+
let lastProduct = data.items?.length && data.items[data.items.length - 1]
|
|
259
|
+
return {
|
|
260
|
+
currency: data.currency || "USD",
|
|
261
|
+
items: [this.toItem({ quantity: lastProduct.quantity, ...lastProduct.product })],
|
|
262
|
+
value: lastProduct.total || 0,
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Cambia la variable **enabled** a `false`
|
|
267
|
+
* @returns
|
|
268
|
+
*/
|
|
269
|
+
disable() { this.enabled = false }
|
|
270
|
+
/**
|
|
271
|
+
* Evento que se dispara cuando se interactua a las vista del producto.
|
|
272
|
+
* @param product
|
|
273
|
+
* @returns
|
|
274
|
+
*/
|
|
275
|
+
private toViewItem(product: any) {
|
|
276
|
+
return {
|
|
277
|
+
currency: product.currency,
|
|
278
|
+
value: product.price,
|
|
279
|
+
items: [this.toItem(product)]
|
|
280
|
+
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Evento que se dispara cuando se interactua con el listado de productos.
|
|
285
|
+
* @param data
|
|
286
|
+
* @returns
|
|
287
|
+
*/
|
|
288
|
+
private toViewItemList(data: any) {
|
|
289
|
+
return {
|
|
290
|
+
items: data.products.map((product: any) => this.toItem(product)),
|
|
291
|
+
item_list_name: data.item_list_name || 'Collection',
|
|
292
|
+
item_list_id: data.item_list_id || 0
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Evento que se dispara cuando se quita un item del carrito.
|
|
299
|
+
* @param product
|
|
300
|
+
* @returns
|
|
301
|
+
*/
|
|
302
|
+
private toRemoveToCart(product: any) {
|
|
303
|
+
let productParam = product.product
|
|
304
|
+
return {
|
|
305
|
+
currency: product.currency || "USD",
|
|
306
|
+
items: [this.toItem({ quantity: product.quantity, ...productParam })],
|
|
307
|
+
value: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
private toItem = (product: any) => ({
|
|
312
|
+
item_id: product.id,
|
|
313
|
+
item_name: product.name,
|
|
314
|
+
//coupon:'',
|
|
315
|
+
discount: product.discount || 0,
|
|
316
|
+
//index:'',
|
|
317
|
+
item_brand: product.attributes?.length ? product.attributes[0].name : '',
|
|
318
|
+
item_category: product.category,
|
|
319
|
+
//item_list_id: '',
|
|
320
|
+
//item_list_name: '',
|
|
321
|
+
item_variant: product.variants[0]?.code || '',
|
|
322
|
+
//location_id: '',
|
|
323
|
+
price: product.variants[0]?.saleprice || product.variants[0]?.price,
|
|
324
|
+
quantity: product.quantity || 1,
|
|
325
|
+
})
|
|
326
|
+
/**
|
|
327
|
+
* Evento que se dispara cuando se consulta la información de pago.
|
|
328
|
+
* @param data
|
|
329
|
+
* @returns
|
|
330
|
+
*/
|
|
331
|
+
private toPaymentInfo(data: any) {
|
|
332
|
+
return {
|
|
333
|
+
coupon: this.toCartDiscount(data),
|
|
334
|
+
currency: data.currency || "USD",
|
|
335
|
+
payment_type: data.payments[0]?.method?.code || 'not-payments',
|
|
336
|
+
value: data.totals?.total || 0,
|
|
337
|
+
items: data.items.map((item: any) => ({
|
|
338
|
+
item_id: item.product.id,
|
|
339
|
+
item_name: item.product.name,
|
|
340
|
+
//coupon:'',
|
|
341
|
+
discount: item.product.discount || 0,
|
|
342
|
+
//index:'',
|
|
343
|
+
item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',
|
|
344
|
+
item_category: item.product.category,
|
|
345
|
+
//item_list_id: '',
|
|
346
|
+
//item_list_name: '',
|
|
347
|
+
item_variant: item.product.variants[0]?.code || '',
|
|
348
|
+
//location_id: '',
|
|
349
|
+
price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,
|
|
350
|
+
quantity: item.quantity || 1,
|
|
351
|
+
})),
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Evento que se dispara cuando se interactua con los métodos de envío.
|
|
356
|
+
* @param data
|
|
357
|
+
* @returns
|
|
358
|
+
*/
|
|
359
|
+
private toShippingInfo(data: any) {
|
|
360
|
+
return {
|
|
361
|
+
coupon: this.toCartDiscount(data),
|
|
362
|
+
currency: data.currency || "USD",
|
|
363
|
+
shipping_tier: data.shipments[0]?.method?.code || 'not-shipping',
|
|
364
|
+
value: data.totals?.total || 0,
|
|
365
|
+
items: data.items.map((item: any) => ({
|
|
366
|
+
item_id: item.product.id,
|
|
367
|
+
item_name: item.product.name,
|
|
368
|
+
//coupon:'',
|
|
369
|
+
discount: item.product.discount || 0,
|
|
370
|
+
//index:'',
|
|
371
|
+
item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',
|
|
372
|
+
item_category: item.product.category,
|
|
373
|
+
//item_list_id: '',
|
|
374
|
+
//item_list_name: '',
|
|
375
|
+
item_variant: item.product.variants[0]?.code || '',
|
|
376
|
+
//location_id: '',
|
|
377
|
+
price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,
|
|
378
|
+
quantity: item.quantity || 1,
|
|
379
|
+
})),
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
private toSignUp(data: any) {
|
|
384
|
+
return {
|
|
385
|
+
...data
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Evento que se dispara cuando se interactua con una promoción.
|
|
390
|
+
* @param data
|
|
391
|
+
* @returns
|
|
392
|
+
*/
|
|
393
|
+
private toSelectPromotion(data: any) {
|
|
394
|
+
console.log(data);
|
|
395
|
+
return {
|
|
396
|
+
promotion_id: data.id || '',
|
|
397
|
+
promotion_name: data.code || data.name,
|
|
398
|
+
promotion_title: data.subtitle,
|
|
399
|
+
location_id: data.priority || 0
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Evento que se disapra cuando se interactua al seleccionar un item.
|
|
404
|
+
* @param data
|
|
405
|
+
* @returns
|
|
406
|
+
*/
|
|
407
|
+
private toSelectItem(data: any) {
|
|
408
|
+
console.log(data);
|
|
409
|
+
return {
|
|
410
|
+
items: this.toItem(data)
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|