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.
Files changed (244) hide show
  1. package/.editorconfig +16 -0
  2. package/README.md +27 -0
  3. package/angular.json +48 -0
  4. package/package.json +57 -0
  5. package/projects/ng-easycommerce/README.md +24 -0
  6. package/projects/ng-easycommerce/ng-package.json +7 -0
  7. package/projects/ng-easycommerce/package.json +12 -0
  8. package/projects/ng-easycommerce/src/lib/api/connection.service.ts +79 -0
  9. package/projects/ng-easycommerce/src/lib/api/index.ts +1 -0
  10. package/projects/ng-easycommerce/src/lib/assets/ec-i18n/ct.json +274 -0
  11. package/projects/ng-easycommerce/src/lib/assets/ec-i18n/en.json +380 -0
  12. package/projects/ng-easycommerce/src/lib/assets/ec-i18n/es.json +387 -0
  13. package/projects/ng-easycommerce/src/lib/assets/ec-i18n/fr.json +266 -0
  14. package/projects/ng-easycommerce/src/lib/assets/ec-i18n/gl.json +274 -0
  15. package/projects/ng-easycommerce/src/lib/assets/ec-i18n/pr.json +274 -0
  16. package/projects/ng-easycommerce/src/lib/assets/recaptcha/recaptcha-site-keys.json +4 -0
  17. package/projects/ng-easycommerce/src/lib/assets/recaptcha/recaptcha-sites-prod.json +39 -0
  18. package/projects/ng-easycommerce/src/lib/assets/recaptcha/recaptcha-sites.json +53 -0
  19. package/projects/ng-easycommerce/src/lib/classes/checkout/index.ts +1 -0
  20. package/projects/ng-easycommerce/src/lib/classes/checkout/steps.ts +37 -0
  21. package/projects/ng-easycommerce/src/lib/classes/filters/attributes-filter.ts +74 -0
  22. package/projects/ng-easycommerce/src/lib/classes/filters/category-filter.ts +57 -0
  23. package/projects/ng-easycommerce/src/lib/classes/filters/dynamics-filter.ts +57 -0
  24. package/projects/ng-easycommerce/src/lib/classes/filters/filter-factory.ts +23 -0
  25. package/projects/ng-easycommerce/src/lib/classes/filters/filter.ts +89 -0
  26. package/projects/ng-easycommerce/src/lib/classes/filters/index.ts +6 -0
  27. package/projects/ng-easycommerce/src/lib/classes/filters/sort-filter.ts +93 -0
  28. package/projects/ng-easycommerce/src/lib/classes/index.ts +3 -0
  29. package/projects/ng-easycommerce/src/lib/classes/user.ts +68 -0
  30. package/projects/ng-easycommerce/src/lib/constants/api.constants.service.ts +69 -0
  31. package/projects/ng-easycommerce/src/lib/constants/core.constants.service.ts +210 -0
  32. package/projects/ng-easycommerce/src/lib/constants/index.ts +2 -0
  33. package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/block-ec.component.ts +107 -0
  34. package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/index.ts +2 -0
  35. package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/menu-ec.component.ts +102 -0
  36. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.html +10 -0
  37. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.scss +0 -0
  38. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.ts +13 -0
  39. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.html +19 -0
  40. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.scss +0 -0
  41. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.ts +34 -0
  42. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.html +31 -0
  43. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.scss +0 -0
  44. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.ts +55 -0
  45. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/index.ts +6 -0
  46. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.html +30 -0
  47. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.scss +0 -0
  48. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.ts +92 -0
  49. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.html +55 -0
  50. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.scss +0 -0
  51. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.ts +102 -0
  52. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.html +233 -0
  53. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.scss +0 -0
  54. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.ts +149 -0
  55. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.html +113 -0
  56. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.scss +12 -0
  57. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.ts +100 -0
  58. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.html +111 -0
  59. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.scss +0 -0
  60. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.ts +77 -0
  61. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.html +62 -0
  62. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.scss +0 -0
  63. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.ts +89 -0
  64. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.html +1 -0
  65. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.scss +0 -0
  66. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.ts +33 -0
  67. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.html +1 -0
  68. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.scss +0 -0
  69. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.ts +81 -0
  70. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.html +40 -0
  71. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.scss +0 -0
  72. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.ts +97 -0
  73. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.html +41 -0
  74. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.scss +0 -0
  75. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.ts +86 -0
  76. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/index.ts +4 -0
  77. package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.html +20 -0
  78. package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.scss +0 -0
  79. package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.ts +30 -0
  80. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.html +1 -0
  81. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.scss +0 -0
  82. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.ts +24 -0
  83. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.html +1 -0
  84. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.scss +0 -0
  85. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.ts +51 -0
  86. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/index.ts +2 -0
  87. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.html +56 -0
  88. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.scss +38 -0
  89. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.ts +67 -0
  90. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.html +836 -0
  91. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.scss +0 -0
  92. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.ts +302 -0
  93. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.html +32 -0
  94. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.scss +0 -0
  95. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.ts +52 -0
  96. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.html +12 -0
  97. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.scss +0 -0
  98. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.ts +48 -0
  99. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.html +195 -0
  100. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.scss +0 -0
  101. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.ts +103 -0
  102. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.html +28 -0
  103. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.scss +0 -0
  104. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.ts +26 -0
  105. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.ts +3 -0
  106. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.html +33 -0
  107. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.scss +0 -0
  108. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.ts +116 -0
  109. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.html +13 -0
  110. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.scss +0 -0
  111. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.ts +26 -0
  112. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.html +111 -0
  113. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.scss +0 -0
  114. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.ts +111 -0
  115. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.html +33 -0
  116. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.scss +0 -0
  117. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.ts +39 -0
  118. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.html +59 -0
  119. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.scss +0 -0
  120. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.ts +65 -0
  121. package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.html +16 -0
  122. package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.scss +0 -0
  123. package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.ts +83 -0
  124. package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.html +1 -0
  125. package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.scss +0 -0
  126. package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.ts +32 -0
  127. package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.html +1 -0
  128. package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.scss +0 -0
  129. package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.ts +45 -0
  130. package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.html +1 -0
  131. package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.scss +0 -0
  132. package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.ts +49 -0
  133. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.html +1 -0
  134. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.scss +0 -0
  135. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.spec.ts +23 -0
  136. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.ts +18 -0
  137. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.html +1 -0
  138. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.scss +0 -0
  139. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.spec.ts +23 -0
  140. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.ts +22 -0
  141. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.html +1 -0
  142. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.scss +0 -0
  143. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.spec.ts +23 -0
  144. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.ts +16 -0
  145. package/projects/ng-easycommerce/src/lib/ec-components/index.ts +17 -0
  146. package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.html +0 -0
  147. package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.scss +0 -0
  148. package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.ts +82 -0
  149. package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.html +31 -0
  150. package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.scss +0 -0
  151. package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.ts +46 -0
  152. package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.html +65 -0
  153. package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.scss +8 -0
  154. package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.ts +20 -0
  155. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/index.ts +4 -0
  156. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/index.ts +3 -0
  157. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.html +7 -0
  158. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.scss +0 -0
  159. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.ts +13 -0
  160. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.html +5 -0
  161. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.scss +0 -0
  162. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.ts +13 -0
  163. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.html +3 -0
  164. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.scss +0 -0
  165. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.ts +13 -0
  166. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.html +11 -0
  167. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.scss +0 -0
  168. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.ts +177 -0
  169. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.html +47 -0
  170. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.scss +0 -0
  171. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.ts +22 -0
  172. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.html +6 -0
  173. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.scss +0 -0
  174. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.ts +70 -0
  175. package/projects/ng-easycommerce/src/lib/ec-guards/auth.guard.ts +19 -0
  176. package/projects/ng-easycommerce/src/lib/ec-guards/index.ts +1 -0
  177. package/projects/ng-easycommerce/src/lib/ec-pipe/ec-currency-symbol.pipe.ts +99 -0
  178. package/projects/ng-easycommerce/src/lib/ec-pipe/index.ts +1 -0
  179. package/projects/ng-easycommerce/src/lib/ec-services/addressing.service.ts +199 -0
  180. package/projects/ng-easycommerce/src/lib/ec-services/analytics/analytics.service.ts +76 -0
  181. package/projects/ng-easycommerce/src/lib/ec-services/analytics/doppler.service.ts +38 -0
  182. package/projects/ng-easycommerce/src/lib/ec-services/analytics/facebook-pixel.service.ts +214 -0
  183. package/projects/ng-easycommerce/src/lib/ec-services/analytics/google-analytics.service.ts +284 -0
  184. package/projects/ng-easycommerce/src/lib/ec-services/analytics/gtm.service.ts +413 -0
  185. package/projects/ng-easycommerce/src/lib/ec-services/analytics/index.ts +6 -0
  186. package/projects/ng-easycommerce/src/lib/ec-services/analytics/metricool-pixel.service.ts +46 -0
  187. package/projects/ng-easycommerce/src/lib/ec-services/auth.service.ts +438 -0
  188. package/projects/ng-easycommerce/src/lib/ec-services/auth.storage.service.ts +54 -0
  189. package/projects/ng-easycommerce/src/lib/ec-services/blocks-repository.service.ts +67 -0
  190. package/projects/ng-easycommerce/src/lib/ec-services/blocks.service.ts +48 -0
  191. package/projects/ng-easycommerce/src/lib/ec-services/cart.service.ts +492 -0
  192. package/projects/ng-easycommerce/src/lib/ec-services/channel.service.ts +81 -0
  193. package/projects/ng-easycommerce/src/lib/ec-services/checkout.service.ts +196 -0
  194. package/projects/ng-easycommerce/src/lib/ec-services/currency.service.ts +179 -0
  195. package/projects/ng-easycommerce/src/lib/ec-services/filters.service.ts +133 -0
  196. package/projects/ng-easycommerce/src/lib/ec-services/form.service.ts +82 -0
  197. package/projects/ng-easycommerce/src/lib/ec-services/index.ts +24 -0
  198. package/projects/ng-easycommerce/src/lib/ec-services/local-storage.service.ts +54 -0
  199. package/projects/ng-easycommerce/src/lib/ec-services/ngx-local-storage.service.ts +66 -0
  200. package/projects/ng-easycommerce/src/lib/ec-services/options.service.ts +274 -0
  201. package/projects/ng-easycommerce/src/lib/ec-services/order-utility.service.ts +52 -0
  202. package/projects/ng-easycommerce/src/lib/ec-services/pagination.service.ts +172 -0
  203. package/projects/ng-easycommerce/src/lib/ec-services/parameters.service.ts +67 -0
  204. package/projects/ng-easycommerce/src/lib/ec-services/payment.service.ts +63 -0
  205. package/projects/ng-easycommerce/src/lib/ec-services/product-detail.service.ts +288 -0
  206. package/projects/ng-easycommerce/src/lib/ec-services/products.service.ts +162 -0
  207. package/projects/ng-easycommerce/src/lib/ec-services/re-captcha.service.ts +126 -0
  208. package/projects/ng-easycommerce/src/lib/ec-services/shipment.service.ts +174 -0
  209. package/projects/ng-easycommerce/src/lib/ec-services/stores.service.ts +27 -0
  210. package/projects/ng-easycommerce/src/lib/ec-services/toast.service.ts +84 -0
  211. package/projects/ng-easycommerce/src/lib/interceptors/auth.interceptor.ts +43 -0
  212. package/projects/ng-easycommerce/src/lib/interceptors/index.ts +1 -0
  213. package/projects/ng-easycommerce/src/lib/interfaces/analytics/event-key.ts +14 -0
  214. package/projects/ng-easycommerce/src/lib/interfaces/analytics/facebook-pixel-data.ts +5 -0
  215. package/projects/ng-easycommerce/src/lib/interfaces/analytics/gtm-config.ts +6 -0
  216. package/projects/ng-easycommerce/src/lib/interfaces/analytics/index.ts +3 -0
  217. package/projects/ng-easycommerce/src/lib/interfaces/blocks.ts +56 -0
  218. package/projects/ng-easycommerce/src/lib/interfaces/checkout.ts +14 -0
  219. package/projects/ng-easycommerce/src/lib/interfaces/connection.ts +8 -0
  220. package/projects/ng-easycommerce/src/lib/interfaces/coupon.ts +5 -0
  221. package/projects/ng-easycommerce/src/lib/interfaces/currency.ts +10 -0
  222. package/projects/ng-easycommerce/src/lib/interfaces/deserializable.ts +3 -0
  223. package/projects/ng-easycommerce/src/lib/interfaces/environment.ts +6 -0
  224. package/projects/ng-easycommerce/src/lib/interfaces/filter.ts +59 -0
  225. package/projects/ng-easycommerce/src/lib/interfaces/index.ts +18 -0
  226. package/projects/ng-easycommerce/src/lib/interfaces/options.ts +28 -0
  227. package/projects/ng-easycommerce/src/lib/interfaces/pagination.ts +27 -0
  228. package/projects/ng-easycommerce/src/lib/interfaces/parameter.ts +15 -0
  229. package/projects/ng-easycommerce/src/lib/interfaces/product.ts +81 -0
  230. package/projects/ng-easycommerce/src/lib/interfaces/step.ts +19 -0
  231. package/projects/ng-easycommerce/src/lib/interfaces/storage.ts +7 -0
  232. package/projects/ng-easycommerce/src/lib/interfaces/store.ts +17 -0
  233. package/projects/ng-easycommerce/src/lib/interfaces/types/index.ts +1 -0
  234. package/projects/ng-easycommerce/src/lib/interfaces/types/user.type.ts +5 -0
  235. package/projects/ng-easycommerce/src/lib/providers/index.ts +1 -0
  236. package/projects/ng-easycommerce/src/lib/providers/provideEnvironment.ts +24 -0
  237. package/projects/ng-easycommerce/src/lib/stores/currency.store.ts +20 -0
  238. package/projects/ng-easycommerce/src/lib/stores/index.ts +1 -0
  239. package/projects/ng-easycommerce/src/public-api.ts +24 -0
  240. package/projects/ng-easycommerce/tsconfig.lib.json +15 -0
  241. package/projects/ng-easycommerce/tsconfig.lib.prod.json +11 -0
  242. package/projects/ng-easycommerce/tsconfig.spec.json +15 -0
  243. package/tsconfig.doc.json +4 -0
  244. package/tsconfig.json +37 -0
@@ -0,0 +1,99 @@
1
+ import { inject, Pipe, PipeTransform, Input } from '@angular/core';
2
+ import { CurrencyService } from '../ec-services';
3
+ import { CoreConstantsService } from '../constants';
4
+ /**
5
+ * Formatea el precio de un producto.
6
+ * @implements {PipeTransform}
7
+ */
8
+ @Pipe({
9
+ name: 'ecCurrencySymbol',
10
+ standalone: true,
11
+ })
12
+ export class EcCurrencySymbolPipe implements PipeTransform {
13
+ /**
14
+ * Contiene el valor de la moneda actual
15
+ */
16
+ private currency: any;
17
+ /**
18
+ * Servicio de Currency (para manejar la moneda)
19
+ */
20
+ private currencyService: CurrencyService = inject(CurrencyService)
21
+ /**
22
+ * Constantes del core
23
+ */
24
+ private consts: CoreConstantsService = inject(CoreConstantsService)
25
+
26
+ banner:any;
27
+ @Input()
28
+ set ecAddActionRedirect(value: any) {
29
+ this.banner = value;
30
+ }
31
+ constructor() {
32
+ this.currencyService.currency$.subscribe(res => this.currency = res)
33
+ }
34
+ /**
35
+ * Transforma el valor pasado y devuelve un string con los formatos aplicados
36
+ * @param value Precio del producto
37
+ * @returns
38
+ */
39
+ transform(value: any): string {
40
+ const formatter = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'USD' });
41
+ let valueTransform = ''
42
+ if (value) {
43
+ value = this.currencyService.calculateConvetibility(value, this.currency.ratio).toString()
44
+ valueTransform = this.changeSymbolTransform(formatter.format(value)?.toString())
45
+ }
46
+ return valueTransform;
47
+ }
48
+ /**
49
+ * Genera el precio formateado con el simbolo y lo que las configuraciones requieran.
50
+ * @param valor
51
+ * @returns
52
+ */
53
+ changeSymbolTransform(valor: any) {
54
+ try {
55
+ return this.positionSymbol(this.checkingWithoutDecimals(this.clearSymbol(valor)))
56
+ } catch (error) {
57
+ console.error('Errores en custom pipe -> ', error);
58
+ return valor
59
+ }
60
+ }
61
+ /**
62
+ * Limpia el simbolo de peso para obtener solo el número.
63
+ * @param value
64
+ * @returns
65
+ */
66
+ clearSymbol(value: any) { return value.replace('$', '') }
67
+ /**
68
+ * Aplica el simbolo de la moneda, segun la configuración, del lado derecho o del lado izquierdo.
69
+ * @param value
70
+ * @returns
71
+ */
72
+ positionSymbol(value: any) {
73
+ return this.consts.currency.position && this.consts?.currency.position.toUpperCase() == 'LEFT'
74
+ ? `${this.currency.symbol} ${value?.trim()}`
75
+ : `${value?.trim()} ${this.currency.symbol}`
76
+
77
+ }
78
+ /**
79
+ * Si el parametro `withoutDecimal` de currency es `true` le saca los decimales,
80
+ * de lo contrario se los agrega formateados.
81
+ * @param value
82
+ * @returns
83
+ */
84
+ checkingWithoutDecimals(value: string) {
85
+ if (this.consts?.currency.withoutDecimal) {
86
+ let val = value?.split(',');
87
+ return val[0]
88
+ //?.trim() == "00" && value.trim().slice(0, value.trim().length - 3) || value
89
+ } else {
90
+ let val = value?.split(',');
91
+ (val[1] && val[1].length > 2) ? val[1] = val[1].slice(0, 2) : val[1] = "00"
92
+ value = val[0] + ',' + val[1];
93
+ return value
94
+ }
95
+ }
96
+
97
+
98
+
99
+ }
@@ -0,0 +1 @@
1
+ export * from './ec-currency-symbol.pipe';
@@ -0,0 +1,199 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { ApiConstantsService } from '../constants';
3
+ import { CartService } from './cart.service';
4
+ import { ConnectionService } from '../api';
5
+ import { firstValueFrom, map, Observable } from 'rxjs';
6
+ import { AnalyticsService } from './analytics';
7
+ import { Validators } from '@angular/forms';
8
+ import { CheckoutService } from './checkout.service';
9
+
10
+ type typeForms = 'EUR' | 'ARG';
11
+ type typeSelectAddress = 'ONLY_LOAD_ADDRESS' | 'ONLY_ADDRESS_SELECTION' | 'LOAD_ADDRESS_AND_SELECTION';
12
+
13
+ @Injectable({
14
+ providedIn: 'root'
15
+ })
16
+ export class AddressingService {
17
+
18
+ private _apiConsts: ApiConstantsService = inject(ApiConstantsService);
19
+ private _cartService: CartService = inject(CartService);
20
+ private _connection: ConnectionService = inject(ConnectionService);
21
+ private _analyticsService: AnalyticsService = inject(AnalyticsService);
22
+ private _checkoutService: CheckoutService = inject(CheckoutService);
23
+
24
+ public typeForms: typeForms = 'ARG';
25
+ public modeSelectAddress: typeSelectAddress = 'LOAD_ADDRESS_AND_SELECTION';
26
+ public countriesList:any = [];
27
+ public documentTypes:any = [];
28
+ public provinceList:any = [];
29
+
30
+ //API URL
31
+ baseApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/' + 'checkout/' + this._cartService.getCartToken(); }
32
+ countriesApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/countries'; }
33
+ zonesApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/zones'; }
34
+ provincesApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/provinces'; }
35
+ putAddressApi() { return this.baseApi() + '/address'; }
36
+ addressBookApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/address-book'; }
37
+ headquarterApi() { return 'shop-api/' + this._apiConsts.CHANNEL + '/checkout/' + this._cartService.getCartToken() + '/headquarter'; }
38
+
39
+ constructor() {
40
+ this.getAddressingData().then((res: any) => {
41
+ if (res) {
42
+ this.documentTypes = (res.find((paises: any) => this._apiConsts.LOCALE.toLocaleLowerCase().includes(paises.code.toLocaleLowerCase())))?.documentTypes || []
43
+ this.provinceList = (res.find((paises: any) => this._apiConsts.LOCALE.toLocaleLowerCase().includes(paises.code.toLocaleLowerCase())))?.provinces || []
44
+ this.countriesList = res
45
+ }
46
+ })
47
+ }
48
+
49
+ getAddressingData() {
50
+ return firstValueFrom(this._connection.get(this.countriesApi()).pipe(map(res => res?._embedded?.items)));
51
+ }
52
+ getAddressBook(): Observable<any> {
53
+ return this._connection.get(this.addressBookApi()).pipe(map(res => res?.length && res.map((address: any) => { return address && { ...address, selected: address.default } }) || null))
54
+ }
55
+ setHeadquarter(sede:any): Promise<any>{
56
+ return firstValueFrom(this._connection.put(this.headquarterApi(), sede.selected)
57
+ .pipe(map(order => {
58
+ if (order && order.error) {
59
+ this._cartService.changeHaveToUpdate(false);
60
+ return false;
61
+ }
62
+ this._checkoutService.setStepData('address',sede);
63
+ this._analyticsService.callEvent('payment_info', order);
64
+ return order;
65
+ }))).then(
66
+ res => res,
67
+ err => {
68
+ return new Promise((resolve, reject) => reject(new Error(err.error)))
69
+ }
70
+ ).catch(err => console.error(err))
71
+ }
72
+
73
+ getTypeForm = () => {
74
+ let formsTypeCofig = [
75
+ {
76
+ code: 'EUR',
77
+ configForm: {
78
+ formAddres: {
79
+ firstName: ['', [Validators.required]],
80
+ lastName: ['', [Validators.required]],
81
+ phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],
82
+ email: ['', [Validators.required, Validators.email]],
83
+ documentType: ['', []],
84
+ documentNumber: ['', []],
85
+ street: ['', [Validators.required, Validators.maxLength(50)]],
86
+ countryCode: [null, [Validators.required]],
87
+ city: ['', Validators.required],
88
+ provinceCode: [null, [Validators.required]],
89
+ postcode: ['', Validators.required],
90
+ terms: [null, Validators.required],
91
+ notes: ['']
92
+ },
93
+ formBilling: {
94
+ firstName: ['', [Validators.required]],
95
+ lastName: ['', [Validators.required]],
96
+ phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],
97
+ email: ['', [Validators.required, Validators.email]],
98
+ documentType: ['', []],
99
+ documentNumber: ['', []],
100
+ street: ['', [Validators.required, Validators.maxLength(50)]],
101
+ countryCode: [null, [Validators.required]],
102
+ city: ['', Validators.required],
103
+ provinceCode: [null, [Validators.required]],
104
+ postcode: ['', Validators.required],
105
+ notes: ['']
106
+ }
107
+ },
108
+ viewForms: {
109
+ firstName: { enabled: true, required: true, values: [] },
110
+ lastName: { enabled: true, required: true, values: [] },
111
+ phoneNumber: { enabled: true, required: true, values: [] },
112
+ email: { enabled: true, required: true, values: [] },
113
+ documentType: { enabled: true, required: false, values: this.documentTypes },
114
+ documentNumber: { enabled: true, required: false, values: [] },
115
+ street: { enabled: true, required: true, values: [] },
116
+ countryCode: { enabled: true, required: true, values: [] },
117
+ city: { enabled: true, required: true, values: [] },
118
+ provinceCode: { enabled: true, required: true, values: [] },
119
+ postcode: { enabled: true, required: true, values: [] },
120
+ terms: { enabled: true, required: true, values: [] },
121
+ notes: { enabled: true, required: false, values: [] }
122
+ }
123
+ },
124
+ {
125
+ code: 'ARG',
126
+ configForm: {
127
+ formAddres: {
128
+ firstName: ['', [Validators.required]],
129
+ lastName: ['', [Validators.required]],
130
+ phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],
131
+ email: ['', [Validators.required, Validators.email]],
132
+ documentType: ['', [Validators.required]],
133
+ documentNumber: ['', [Validators.required]],
134
+ street: ['', [Validators.required, Validators.maxLength(50)]],
135
+ countryCode: [null, [Validators.required]],
136
+ city: ['', Validators.required],
137
+ provinceCode: [null, [Validators.required]],
138
+ postcode: ['', Validators.required],
139
+ notes: ['']
140
+ },
141
+ formBilling: {
142
+ firstName: ['', [Validators.required]],
143
+ lastName: ['', [Validators.required]],
144
+ phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],
145
+ email: ['', [Validators.required, Validators.email]],
146
+ documentType: ['', [Validators.required]],
147
+ documentNumber: ['', [Validators.required]],
148
+ street: ['', [Validators.required, Validators.maxLength(50)]],
149
+ countryCode: [null, [Validators.required]],
150
+ city: ['', Validators.required],
151
+ provinceCode: [null, [Validators.required]],
152
+ postcode: ['', Validators.required],
153
+ notes: ['']
154
+ }
155
+ },
156
+ viewForms: {
157
+ firstName: { enabled: true, required: true, values: [] },
158
+ lastName: { enabled: true, required: true, values: [] },
159
+ phoneNumber: { enabled: true, required: true, values: [] },
160
+ email: { enabled: true, required: true, values: [] },
161
+ documentType: { enabled: true, required: true, values: this.documentTypes},
162
+ documentNumber: { enabled: true, required: true, values: [] },
163
+ street: { enabled: true, required: true, values: [] },
164
+ countryCode: { enabled: true, required: true, values: [] },
165
+ city: { enabled: true, required: true, values: [] },
166
+ provinceCode: { enabled: true, required: true, values: [] },
167
+ postcode: { enabled: true, required: true, values: [] },
168
+ terms: { enabled: false, required: false, values: [] },
169
+ notes: { enabled: true, required: false, values: [] }
170
+ }
171
+ }
172
+ ]
173
+ return formsTypeCofig.find(ct => ct.code == this.typeForms);
174
+ }
175
+
176
+ setAddress = (user_data: any) => {
177
+ user_data.locale = this._apiConsts.LOCALE;
178
+
179
+ // se modifica el código postal para castearlo a String antes de enviarlo
180
+ user_data.shippingAddress.postcode = user_data.shippingAddress.postcode.toString();
181
+
182
+ return firstValueFrom(this._connection.put(this.putAddressApi(), user_data).pipe(map(order => {
183
+ if (order && order.error) {
184
+ this._cartService.changeHaveToUpdate(false);
185
+ return false;
186
+ }
187
+
188
+ this._checkoutService.setStepData('address',user_data);
189
+ this._analyticsService.callEvent('payment_info', order);
190
+ return order;
191
+ }))).then(
192
+ res => res,
193
+ err => {
194
+ return new Promise((resolve, reject) => reject(new Error(err.error)))
195
+ }
196
+ ).catch(err => console.error(err))
197
+ }
198
+
199
+ }
@@ -0,0 +1,76 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { AnalyticEventKey } from '../../interfaces';
3
+ import { FacebookPixelService } from './facebook-pixel.service';
4
+ import { GoogleAnalyticsService } from './google-analytics.service';
5
+ import { GTMService } from './gtm.service';
6
+ import { DopplerService } from './doppler.service';
7
+ import { MetricoolPixelService } from './metricool-pixel.service';
8
+ /**
9
+ * Servicio que se encarga de manejar todo lo referido con Analytics.
10
+ */
11
+ @Injectable({
12
+ providedIn: 'root'
13
+ })
14
+ export class AnalyticsService {
15
+ /**
16
+ * Guarda los distintos tipos de analytics.
17
+ */
18
+ private services: any[] = [];
19
+
20
+ private facebookAnalytics: any = inject(FacebookPixelService)
21
+ private googleAnalytics: any = inject(GoogleAnalyticsService)
22
+ private gtmAnalytics: any = inject(GTMService)
23
+ private metricoolAnalytics: any = inject(MetricoolPixelService)
24
+ private dopplerAnalytics: any = inject(DopplerService)
25
+
26
+ constructor() {
27
+ this.services.push(this.facebookAnalytics);
28
+ this.services.push(this.googleAnalytics);
29
+ this.services.push(this.gtmAnalytics);
30
+ }
31
+ /**
32
+ * Inicializa el servicio de analytics de Facebook.
33
+ * @param value Pixel Id
34
+ */
35
+ initializeFacebook(value: any){
36
+ this.facebookAnalytics.initialize(value);
37
+ }
38
+ /**
39
+ * Inicializa el servicio de analytics de google.
40
+ * @param value GTM Id
41
+ */
42
+ initializeGoogle(value: any){
43
+ this.googleAnalytics.initialize(value);
44
+ }
45
+ /**
46
+ * Inicializa el servicio de analytics de Google Tag Manager (GTM).
47
+ * @param value id de GTM
48
+ */
49
+ initializeGTM(value: any){
50
+ this.gtmAnalytics.initialize({ id: value });
51
+ }
52
+ /**
53
+ * Inicializa el servicio de analytics de Metricool
54
+ * @param value Pixel Hash
55
+ */
56
+ initializeMetricool(value: any){
57
+ this.metricoolAnalytics.initialize(value);
58
+ }
59
+ /**
60
+ * Inicializa el servicio de analytics de Doppler
61
+ * @param value Pixel src
62
+ */
63
+ initializeDoppler(value: any){
64
+ this.dopplerAnalytics.initialize(value);
65
+ }
66
+ /**
67
+ * Recorre los servicios cargados ejecutando un evento en especifico.
68
+ * @param event_name Nombre del evento a ejecutar.
69
+ * @param data Datos extras para agregar al evento.
70
+ */
71
+ callEvent(event_name: AnalyticEventKey, data: any = {}){
72
+ this.services.forEach(service => {
73
+ service.callEvent(event_name, data)
74
+ });
75
+ }
76
+ }
@@ -0,0 +1,38 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';
3
+ /**
4
+ * Servicio de Analytics de Doppler
5
+ */
6
+ @Injectable({
7
+ providedIn: 'root'
8
+ })
9
+ export class DopplerService {
10
+ /**
11
+ * Para indicar cuando se este cargando el servicio.
12
+ */
13
+ private isLoaded = false;
14
+
15
+ private rendererFactory: RendererFactory2 = inject(RendererFactory2)
16
+ private document: any = inject(DOCUMENT)
17
+ /**
18
+ * Se encarga de crear el elemento HTML con las configuraciones para
19
+ * que se pueda ejecutar el servicio.
20
+ */
21
+ private renderer: Renderer2;
22
+
23
+ constructor() {
24
+ this.renderer = this.rendererFactory.createRenderer(null, null);
25
+ }
26
+ /**
27
+ * Inicializa el Servicio de analytics con sus configuraciones.
28
+ * @param pixelSrc path que se usa en el atributo `src` del elemento html.
29
+ */
30
+ initialize = (pixelSrc: any) => {
31
+ this.isLoaded = true
32
+ let scriptInsert = this.renderer.createElement("script");
33
+ this.renderer.setAttribute(scriptInsert, 'type', 'text/javascript');
34
+ this.renderer.setAttribute(scriptInsert, 'async', 'async');
35
+ this.renderer.setAttribute(scriptInsert, 'src', pixelSrc);
36
+ this.renderer.appendChild(this.document.body, scriptInsert);
37
+ }
38
+ }
@@ -0,0 +1,214 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';
3
+ import { AnalyticEventKey, FacebookPixelData } from '../../interfaces';
4
+ /**
5
+ * Funcion que sera dada por el script que se inserta en el inicializador de Facebook Analytics.
6
+ *
7
+ * https://es-la.facebook.com/business/help/402791146561655?id=1205376682832142
8
+ *
9
+ * Relacionado con: {@link FacebookPixelService}
10
+ */
11
+ declare let fbq:Function;
12
+ /**
13
+ * Servicio que se encarga de manejar el Analytics de Facebook.
14
+ * @class FacebookPixelService
15
+ */
16
+ @Injectable({
17
+ providedIn: 'root'
18
+ })
19
+ export class FacebookPixelService {
20
+
21
+ private rendererFactory: RendererFactory2 = inject(RendererFactory2)
22
+ private document: any = inject(DOCUMENT)
23
+ /**
24
+ * Se encarga de crear el elemento HTML con las configuraciones para
25
+ * que se pueda ejecutar el servicio.
26
+ */
27
+ private renderer: Renderer2;
28
+ /**
29
+ * Indica cuando el servicio esta habilitado.
30
+ */
31
+ private enabled: boolean = false;
32
+
33
+ constructor() {
34
+ this.renderer = this.rendererFactory.createRenderer(null, null);
35
+ }
36
+ /**
37
+ * Inicializa el Servicio de analytics con sus configuraciones.
38
+ * @param pixel_id id provisto por Facebook Pixel.
39
+ */
40
+ initialize(pixel_id:any){
41
+ if (!this.document.getElementById('facebook_pixel')) {
42
+ let new_analityc_script = this.renderer.createElement('script');
43
+ new_analityc_script.id = "facebook_pixel"
44
+ new_analityc_script.type = 'text/javascript';
45
+ new_analityc_script.text = `!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', ${pixel_id});`;
46
+ this.renderer.appendChild(this.document.body, new_analityc_script);
47
+ this.enabled = true;
48
+ }
49
+ setTimeout(() => this.callEvent('initialize'), 1000);
50
+ }
51
+ /**
52
+ * Ejecuta el evento pasado por parametro.
53
+ * @param event_name Nombre del evento.
54
+ * @param data Data extra para agregar al evento.
55
+ * @returns
56
+ */
57
+ callEvent(event_name: AnalyticEventKey, data = {}){
58
+ if (!this.enabled) return;
59
+ let event = this.translateEventName(event_name);
60
+ event && fbq('track', this.translateEventName(event_name), this.evalEvent(event_name, data));
61
+ }
62
+ /**
63
+ * Traduce el evento recibido y devuelve el nombre de la función que lo va a tratar.
64
+ * @param event_name
65
+ * @returns
66
+ */
67
+ translateEventName(event_name: AnalyticEventKey){
68
+ switch (event_name) {
69
+ case 'initialize': return 'PageView';
70
+ case 'view_item': return 'ViewContent';
71
+ case 'checkout_init': return 'InitiateCheckout';
72
+ case 'payment_info': return 'AddPaymentInfo';
73
+ case 'purchase': return 'Purchase';
74
+ case 'add_to_cart': return 'AddToCart';
75
+ default: return null;
76
+ }
77
+ }
78
+ /**
79
+ * Evalua el evento y devuelve los datos de las funciones relacionadas.
80
+ * @param event_name Nombre del evento
81
+ * @param data Data extra para agregar al evento
82
+ * @returns
83
+ */
84
+ evalEvent(event_name: AnalyticEventKey, data:any){
85
+ switch (event_name) {
86
+ case 'initialize': return data;
87
+ case 'view_item': return this.toViewContent(data);
88
+ case 'checkout_init': return this.toCheckoutInit(data);
89
+ case 'payment_info': return this.toPaymentInfo(data);
90
+ case 'purchase': return this.toPurchase(data);
91
+ case 'add_to_cart': return this.toAddToCart(data);
92
+ default: return data;
93
+ }
94
+ }
95
+ /**
96
+ * Para ejecutar un evento propio.
97
+ * @param event_name Nombre de evento
98
+ * @param data Data extra para agregar al evento.
99
+ * @returns
100
+ */
101
+ callCustomEvent(event_name:AnalyticEventKey, data: FacebookPixelData = {}){
102
+ if (!this.enabled) return;
103
+ fbq('trackCustom', event_name, data);
104
+ }
105
+ /**
106
+ * Cambia la variable **enabled** a `false`
107
+ * @returns
108
+ */
109
+ disable(){this.enabled = false};
110
+ /**
111
+ * Cuando un evento interactua con el contenido de la vista del producto.
112
+ * @param data
113
+ * @returns
114
+ */
115
+ private toViewContent(data:any){
116
+ let lastProduct = data?.name || 'not-product'
117
+ return {
118
+ content_type: 'product',
119
+ content_name: lastProduct,
120
+ content_ids: [data.variants[0]?.code],
121
+ currency: data.currency || "USD",
122
+ value: data.variants[0]?.saleprice || data.variants[0]?.price,
123
+ //product_catalog_id: 'TEST'
124
+ }
125
+ }
126
+ /**
127
+ * Evento que se dispara cuando se quiere comprar un producto.
128
+ * @param data
129
+ * @returns
130
+ */
131
+ private toPurchase(data:any){
132
+ return {
133
+ currency: data.currency || "USD",
134
+ value: data.totals?.total || 0 ,
135
+ content_type: 'product_group',
136
+ contents: this.getContents(data),
137
+ //product_catalog_id: 'TEST'
138
+ }
139
+ }
140
+ /**
141
+ * Evento que se dispara cuando se inicializa en checkout.
142
+ * @param data
143
+ * @returns
144
+ */
145
+ private toCheckoutInit(data:any){
146
+ return {
147
+ //content_category : "inicio checkout",
148
+ content_type: 'product_group',
149
+ contents: this.getContents(data),
150
+ content_ids: this.getContentIds(data),
151
+ currency: data.currency || "USD",
152
+ num_items: data.items?.length || 0,
153
+ value: data.totals?.total || 0 ,
154
+ }
155
+ }
156
+ /**
157
+ * Evento que se dispara cuando se consulta la información de pago.
158
+ * @param data
159
+ * @returns
160
+ */
161
+ private toPaymentInfo(data:any){
162
+ return {
163
+ //content_category : "inicio checkout",
164
+ content_type: 'product_group',
165
+ contents: this.getContents(data),
166
+ content_ids: this.getContentIds(data),
167
+ currency: data.currency || "USD",
168
+ value: data.totals?.total || 0,
169
+ }
170
+ }
171
+ /**
172
+ * Evento que se dispara cuando se agrega un producto al carrito.
173
+ * @param data
174
+ * @returns
175
+ */
176
+ private toAddToCart(data:any){
177
+ let lastProduct = data.items?.length && data.items[data.items.length - 1]?.product?.name || 'not-product'
178
+ return {
179
+ content_name: lastProduct,
180
+ content_type: 'product',
181
+ contents: this.getContents(data),
182
+ content_ids: this.getContentIds(data),
183
+ currency: data.currency || "USD",
184
+ value: data.totals?.total || 0,
185
+ //product_catalog_id: 'TEST'
186
+
187
+ }
188
+ }
189
+ /**
190
+ * Mapeo de datos para obtener solo el ID del producto y la cantidad.
191
+ * @param data
192
+ * @returns
193
+ */
194
+ private getContents(data:any){
195
+ return data.items.map(
196
+ (item:any) => {
197
+ return {
198
+ id: item.product.variants[0]?.code,
199
+ quantity: item.quantity
200
+ }
201
+ }
202
+ )
203
+ }
204
+ /**
205
+ * Mapeo de datos para obtener solo el ID del producto.
206
+ * @param data
207
+ * @returns
208
+ */
209
+ private getContentIds(data:any){
210
+ return data.items.map(
211
+ (item:any) => item.product.variants[0]?.code
212
+ )
213
+ }
214
+ }