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