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