ng-easycommerce-v18 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +16 -0
- package/README.md +27 -0
- package/angular.json +48 -0
- package/package.json +58 -0
- package/projects/ng-easycommerce/README.md +24 -0
- package/projects/ng-easycommerce/ng-package.json +7 -0
- package/projects/ng-easycommerce/package.json +12 -0
- package/projects/ng-easycommerce/src/lib/api/connection.service.ts +79 -0
- package/projects/ng-easycommerce/src/lib/api/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/ct.json +274 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/en.json +380 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/es.json +387 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/fr.json +266 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/gl.json +274 -0
- package/projects/ng-easycommerce/src/lib/assets/ec-i18n/pr.json +274 -0
- package/projects/ng-easycommerce/src/lib/assets/recaptcha/recaptcha-site-keys.json +4 -0
- package/projects/ng-easycommerce/src/lib/assets/recaptcha/recaptcha-sites-prod.json +39 -0
- package/projects/ng-easycommerce/src/lib/assets/recaptcha/recaptcha-sites.json +53 -0
- package/projects/ng-easycommerce/src/lib/classes/checkout/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/classes/checkout/steps.ts +37 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/attributes-filter.ts +74 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/category-filter.ts +57 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/dynamics-filter.ts +57 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/filter-factory.ts +23 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/filter.ts +89 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/index.ts +6 -0
- package/projects/ng-easycommerce/src/lib/classes/filters/sort-filter.ts +93 -0
- package/projects/ng-easycommerce/src/lib/classes/index.ts +3 -0
- package/projects/ng-easycommerce/src/lib/classes/user.ts +68 -0
- package/projects/ng-easycommerce/src/lib/constants/api.constants.service.ts +69 -0
- package/projects/ng-easycommerce/src/lib/constants/core.constants.service.ts +210 -0
- package/projects/ng-easycommerce/src/lib/constants/index.ts +2 -0
- package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/block-ec.component.ts +107 -0
- package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/index.ts +2 -0
- package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/menu-ec.component.ts +102 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.html +10 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.ts +13 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.html +19 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.ts +34 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.html +31 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.ts +55 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/index.ts +6 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.html +30 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.ts +92 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.html +55 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.ts +102 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.html +233 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.ts +149 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.html +113 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.scss +12 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.ts +100 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.html +111 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.ts +77 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.html +62 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.ts +89 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.ts +33 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.ts +81 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.html +40 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.ts +97 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.html +41 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.ts +86 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/index.ts +4 -0
- package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.html +20 -0
- package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.ts +30 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.ts +24 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.ts +51 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/index.ts +2 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.html +56 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.scss +38 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.ts +67 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.html +836 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.ts +302 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.html +32 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.ts +52 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.html +12 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.ts +48 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.html +195 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.ts +103 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.html +28 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.ts +26 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.ts +3 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.html +33 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.ts +116 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.html +13 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.ts +26 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.html +111 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.ts +111 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.html +33 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.ts +39 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.html +59 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.ts +65 -0
- package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.html +16 -0
- package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.ts +83 -0
- package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.ts +32 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.ts +45 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.ts +49 -0
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.spec.ts +23 -0
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.ts +18 -0
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.spec.ts +23 -0
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.ts +22 -0
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.html +1 -0
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.spec.ts +23 -0
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.ts +16 -0
- package/projects/ng-easycommerce/src/lib/ec-components/index.ts +17 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.html +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.ts +82 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.html +31 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.ts +46 -0
- package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.html +65 -0
- package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.scss +8 -0
- package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.ts +20 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/index.ts +4 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/index.ts +3 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.html +7 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.ts +13 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.html +5 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.ts +13 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.html +3 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.ts +13 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.html +11 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.ts +177 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.html +47 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.ts +22 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.html +6 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.ts +70 -0
- package/projects/ng-easycommerce/src/lib/ec-guards/auth.guard.ts +19 -0
- package/projects/ng-easycommerce/src/lib/ec-guards/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/ec-pipe/ec-currency-symbol.pipe.ts +99 -0
- package/projects/ng-easycommerce/src/lib/ec-pipe/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/ec-services/addressing.service.ts +199 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/analytics.service.ts +76 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/doppler.service.ts +38 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/facebook-pixel.service.ts +214 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/google-analytics.service.ts +284 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/gtm.service.ts +413 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/index.ts +6 -0
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/metricool-pixel.service.ts +46 -0
- package/projects/ng-easycommerce/src/lib/ec-services/auth.service.ts +438 -0
- package/projects/ng-easycommerce/src/lib/ec-services/auth.storage.service.ts +54 -0
- package/projects/ng-easycommerce/src/lib/ec-services/blocks-repository.service.ts +67 -0
- package/projects/ng-easycommerce/src/lib/ec-services/blocks.service.ts +48 -0
- package/projects/ng-easycommerce/src/lib/ec-services/cart.service.ts +492 -0
- package/projects/ng-easycommerce/src/lib/ec-services/channel.service.ts +81 -0
- package/projects/ng-easycommerce/src/lib/ec-services/checkout.service.ts +196 -0
- package/projects/ng-easycommerce/src/lib/ec-services/currency.service.ts +179 -0
- package/projects/ng-easycommerce/src/lib/ec-services/filters.service.ts +133 -0
- package/projects/ng-easycommerce/src/lib/ec-services/form.service.ts +82 -0
- package/projects/ng-easycommerce/src/lib/ec-services/index.ts +24 -0
- package/projects/ng-easycommerce/src/lib/ec-services/local-storage.service.ts +54 -0
- package/projects/ng-easycommerce/src/lib/ec-services/ngx-local-storage.service.ts +66 -0
- package/projects/ng-easycommerce/src/lib/ec-services/options.service.ts +274 -0
- package/projects/ng-easycommerce/src/lib/ec-services/order-utility.service.ts +52 -0
- package/projects/ng-easycommerce/src/lib/ec-services/pagination.service.ts +172 -0
- package/projects/ng-easycommerce/src/lib/ec-services/parameters.service.ts +67 -0
- package/projects/ng-easycommerce/src/lib/ec-services/payment.service.ts +63 -0
- package/projects/ng-easycommerce/src/lib/ec-services/product-detail.service.ts +288 -0
- package/projects/ng-easycommerce/src/lib/ec-services/products.service.ts +162 -0
- package/projects/ng-easycommerce/src/lib/ec-services/re-captcha.service.ts +126 -0
- package/projects/ng-easycommerce/src/lib/ec-services/shipment.service.ts +174 -0
- package/projects/ng-easycommerce/src/lib/ec-services/stores.service.ts +27 -0
- package/projects/ng-easycommerce/src/lib/ec-services/toast.service.ts +84 -0
- package/projects/ng-easycommerce/src/lib/interceptors/auth.interceptor.ts +43 -0
- package/projects/ng-easycommerce/src/lib/interceptors/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/interfaces/analytics/event-key.ts +14 -0
- package/projects/ng-easycommerce/src/lib/interfaces/analytics/facebook-pixel-data.ts +5 -0
- package/projects/ng-easycommerce/src/lib/interfaces/analytics/gtm-config.ts +6 -0
- package/projects/ng-easycommerce/src/lib/interfaces/analytics/index.ts +3 -0
- package/projects/ng-easycommerce/src/lib/interfaces/blocks.ts +56 -0
- package/projects/ng-easycommerce/src/lib/interfaces/checkout.ts +14 -0
- package/projects/ng-easycommerce/src/lib/interfaces/connection.ts +8 -0
- package/projects/ng-easycommerce/src/lib/interfaces/coupon.ts +5 -0
- package/projects/ng-easycommerce/src/lib/interfaces/currency.ts +10 -0
- package/projects/ng-easycommerce/src/lib/interfaces/deserializable.ts +3 -0
- package/projects/ng-easycommerce/src/lib/interfaces/environment.ts +6 -0
- package/projects/ng-easycommerce/src/lib/interfaces/filter.ts +59 -0
- package/projects/ng-easycommerce/src/lib/interfaces/index.ts +18 -0
- package/projects/ng-easycommerce/src/lib/interfaces/options.ts +28 -0
- package/projects/ng-easycommerce/src/lib/interfaces/pagination.ts +27 -0
- package/projects/ng-easycommerce/src/lib/interfaces/parameter.ts +15 -0
- package/projects/ng-easycommerce/src/lib/interfaces/product.ts +81 -0
- package/projects/ng-easycommerce/src/lib/interfaces/step.ts +19 -0
- package/projects/ng-easycommerce/src/lib/interfaces/storage.ts +7 -0
- package/projects/ng-easycommerce/src/lib/interfaces/store.ts +17 -0
- package/projects/ng-easycommerce/src/lib/interfaces/types/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/interfaces/types/user.type.ts +5 -0
- package/projects/ng-easycommerce/src/lib/providers/index.ts +1 -0
- package/projects/ng-easycommerce/src/lib/providers/provideEnvironment.ts +24 -0
- package/projects/ng-easycommerce/src/lib/stores/currency.store.ts +20 -0
- package/projects/ng-easycommerce/src/lib/stores/index.ts +1 -0
- package/projects/ng-easycommerce/src/public-api.ts +24 -0
- package/projects/ng-easycommerce/tsconfig.lib.json +15 -0
- package/projects/ng-easycommerce/tsconfig.lib.prod.json +11 -0
- package/projects/ng-easycommerce/tsconfig.spec.json +15 -0
- package/tsconfig.doc.json +4 -0
- package/tsconfig.json +37 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Component, EventEmitter, inject, Input, Output, signal } from '@angular/core';
|
|
2
|
+
import { LoadingSectionEcComponent } from '../../widgets-ec';
|
|
3
|
+
import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
4
|
+
import { Router, RouterLink } from '@angular/router';
|
|
5
|
+
import { AuthService, ToastService } from '../../../ec-services';
|
|
6
|
+
import { UserRoleType } from '../../../interfaces';
|
|
7
|
+
import { firstValueFrom } from 'rxjs';
|
|
8
|
+
import { JsonPipe } from '@angular/common';
|
|
9
|
+
|
|
10
|
+
@Component({
|
|
11
|
+
selector: 'app-login-form-ec',
|
|
12
|
+
standalone: true,
|
|
13
|
+
imports: [LoadingSectionEcComponent, ReactiveFormsModule, RouterLink, JsonPipe],
|
|
14
|
+
templateUrl: './login-form-ec.component.html',
|
|
15
|
+
styleUrl: './login-form-ec.component.scss'
|
|
16
|
+
})
|
|
17
|
+
export class LoginFormEcComponent {
|
|
18
|
+
private _authService:AuthService = inject(AuthService);
|
|
19
|
+
private _formBuilder:FormBuilder = inject(FormBuilder);
|
|
20
|
+
private _toastService:ToastService = inject(ToastService);
|
|
21
|
+
private _router:Router = inject(Router);
|
|
22
|
+
/**
|
|
23
|
+
* Parametro para indicar si tras loguear
|
|
24
|
+
* debe redireccionar o no.
|
|
25
|
+
*/
|
|
26
|
+
@Input() redirect:boolean = true;
|
|
27
|
+
/**
|
|
28
|
+
* Parametro para indicar a donde redireccionar.
|
|
29
|
+
*/
|
|
30
|
+
@Input() redirectTo:string = '/';
|
|
31
|
+
@Output() ready = new EventEmitter();
|
|
32
|
+
/**
|
|
33
|
+
* Muestra si esta cargando o no.
|
|
34
|
+
*/
|
|
35
|
+
public loading: boolean = false;
|
|
36
|
+
public loggedIn: boolean = false;
|
|
37
|
+
/**
|
|
38
|
+
* Signal que guarda el formulario de login.
|
|
39
|
+
*/
|
|
40
|
+
public loginForm: any = signal<FormGroup>(
|
|
41
|
+
this._formBuilder.group({
|
|
42
|
+
username: ['', Validators.required],
|
|
43
|
+
password: ['', Validators.required]
|
|
44
|
+
})
|
|
45
|
+
);
|
|
46
|
+
/**
|
|
47
|
+
* Loguea al usuario en la plataforma.
|
|
48
|
+
* @param $event
|
|
49
|
+
* @param withRoles
|
|
50
|
+
* @returns
|
|
51
|
+
*/
|
|
52
|
+
public login($event: Event, withRoles: UserRoleType[] = []){
|
|
53
|
+
$event.preventDefault();
|
|
54
|
+
this.loading = true;
|
|
55
|
+
if(!this.loginForm().valid){
|
|
56
|
+
this._toastService.show('login-form-incomplete')
|
|
57
|
+
this.loading = false;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
firstValueFrom(this._authService.login(this.loginForm().value, withRoles)).then(
|
|
61
|
+
(res:any) => {
|
|
62
|
+
console.log(res);
|
|
63
|
+
if(res == 'ok'){
|
|
64
|
+
this.ready.emit(this.loginForm().value.username);
|
|
65
|
+
this.loggedIn = true;
|
|
66
|
+
this.redirect && this.redirectHome();
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
if(res == 'error'){
|
|
71
|
+
this._toastService.error('invalid-credentials')
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
this.loading = false;
|
|
75
|
+
},
|
|
76
|
+
(err:any) => {
|
|
77
|
+
this.loading = false;
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Si el servicio de auth tiene configurado a donde volver, se ejecutar ese caso.
|
|
83
|
+
* De lo contrario redirige al contenido de la variable `redirectTo`.
|
|
84
|
+
*/
|
|
85
|
+
redirectHome(){
|
|
86
|
+
const resolverFunction = this._authService.getHomeResolver()
|
|
87
|
+
resolverFunction
|
|
88
|
+
? resolverFunction()
|
|
89
|
+
: this._router.navigateByUrl(this.redirectTo)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<div class="w-100 pl-md-5 position-relative" id="register">
|
|
2
|
+
<div class="py-2">
|
|
3
|
+
<h5>CREAR CUENTA</h5>
|
|
4
|
+
</div>
|
|
5
|
+
<form id="registro" [formGroup]="form" (submit)="register($event)">
|
|
6
|
+
<div class="form-group">
|
|
7
|
+
<label for="" class="form-label">NOMBRE</label>
|
|
8
|
+
<input formControlName="firstName" class="form-control rounded-0" type="text" placeholder="Nombre">
|
|
9
|
+
</div>
|
|
10
|
+
<div class="form-group">
|
|
11
|
+
<label for="" class="form-label">APELLIDO</label>
|
|
12
|
+
<input formControlName="lastName" class="form-control rounded-0" type="text" placeholder="Apellido">
|
|
13
|
+
</div>
|
|
14
|
+
<div class="form-group">
|
|
15
|
+
<label for="" class="">CORREO ELECTRONICO</label>
|
|
16
|
+
<input formControlName="email" email required class="form-control rounded-0" type="email"
|
|
17
|
+
placeholder="Correo electrónico">
|
|
18
|
+
</div>
|
|
19
|
+
<div class="form-group">
|
|
20
|
+
<label for="" class="form-label">CONTRASEÑA</label>
|
|
21
|
+
<input formControlName="plainPassword" required class="form-control rounded-0" type="password"
|
|
22
|
+
placeholder="Contraseña">
|
|
23
|
+
</div>
|
|
24
|
+
<div class="form-group">
|
|
25
|
+
<label for="" class="form-label">REPETIR CONTRASEÑA</label>
|
|
26
|
+
<input formControlName="plainPassword2" required class="form-control rounded-0" type="password"
|
|
27
|
+
placeholder="Repetir contraseña">
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<div class="custom-control d-flex flex-row form-check custom-checkbox mr-sm-2 mt-4 mb-2">
|
|
31
|
+
<input type="checkbox" formControlName="terms" required class="custom-control-input form-check-input" name="Color2"
|
|
32
|
+
id="Color2">
|
|
33
|
+
<label class="custom-control-label ff-ubuntu-light font-sm form-check-label" for="Color2"> He
|
|
34
|
+
leído y acepto las políticas de privacidad y los términos y
|
|
35
|
+
condiciones</label>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div class="custom-control d-flex flex-row form-check custom-checkbox mr-sm-2 mb-4">
|
|
39
|
+
<input type="checkbox" formControlName="newsletter" class="custom-control-input form-check-input" name="Color3" id="Color3">
|
|
40
|
+
<label class="custom-control-label form-check-label ff-ubuntu-light font-sm" for="Color3">
|
|
41
|
+
Suscripción al Newsletter</label>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<div class="row">
|
|
45
|
+
<div class="col-12">
|
|
46
|
+
<button [disabled]="form.invalid" type="submit"
|
|
47
|
+
class="btn btn-primary px-5 py-2 h-fit">CREAR</button>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</form>
|
|
51
|
+
@if(loading){
|
|
52
|
+
<app-loading-section-ec />
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
</div>
|
|
File without changes
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';
|
|
2
|
+
import { AnalyticsService, AuthService, ToastService } from '../../../ec-services';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
5
|
+
import { LoadingSectionEcComponent } from "../../widgets-ec/loading";
|
|
6
|
+
import { firstValueFrom } from 'rxjs';
|
|
7
|
+
|
|
8
|
+
@Component({
|
|
9
|
+
selector: 'app-register-form-ec',
|
|
10
|
+
standalone: true,
|
|
11
|
+
imports: [ReactiveFormsModule, LoadingSectionEcComponent],
|
|
12
|
+
templateUrl: './register-form-ec.component.html',
|
|
13
|
+
styleUrls: ['./register-form-ec.component.scss']
|
|
14
|
+
})
|
|
15
|
+
export class RegisterFormEcComponent {
|
|
16
|
+
private _authService: AuthService = inject(AuthService);
|
|
17
|
+
private _toastService: ToastService = inject(ToastService);
|
|
18
|
+
private _router: Router = inject(Router);
|
|
19
|
+
private _analyticsService: AnalyticsService = inject(AnalyticsService);
|
|
20
|
+
private _formBuilder: FormBuilder = inject(FormBuilder);
|
|
21
|
+
/**
|
|
22
|
+
* Indica si debe redireccionar o se queda en la misma pantalla
|
|
23
|
+
*/
|
|
24
|
+
@Input() redirect:boolean = true;
|
|
25
|
+
/**
|
|
26
|
+
* Para que se puede capturar el estado de la petición de registro.
|
|
27
|
+
*/
|
|
28
|
+
@Output() ready = new EventEmitter();
|
|
29
|
+
/**
|
|
30
|
+
* Contiene el formulario de registro.
|
|
31
|
+
*/
|
|
32
|
+
public form: FormGroup;
|
|
33
|
+
/**
|
|
34
|
+
* Para indicar que se esta procesando la solicitud de registro.
|
|
35
|
+
*/
|
|
36
|
+
public loading: boolean = false;
|
|
37
|
+
/**
|
|
38
|
+
* Para indicar el exito de la solicitud de registro.
|
|
39
|
+
*/
|
|
40
|
+
public success: boolean = false;
|
|
41
|
+
|
|
42
|
+
constructor() {
|
|
43
|
+
this.form = this._formBuilder.group({
|
|
44
|
+
firstName: ['', Validators.required],
|
|
45
|
+
lastName: ['', Validators.required],
|
|
46
|
+
email: ['', [Validators.required, Validators.email]],
|
|
47
|
+
plainPassword: ['', Validators.required],
|
|
48
|
+
plainPassword2: ['', Validators.required],
|
|
49
|
+
newsletter: [false],
|
|
50
|
+
terms: ['', Validators.required],
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Registra un usuario.
|
|
55
|
+
* @param event
|
|
56
|
+
* @returns
|
|
57
|
+
*/
|
|
58
|
+
register(event: Event){
|
|
59
|
+
event.preventDefault();
|
|
60
|
+
this.loading = true;
|
|
61
|
+
if (!this.form.valid) {
|
|
62
|
+
this._toastService.show('fields-incomplete');
|
|
63
|
+
this.loading = false
|
|
64
|
+
return;
|
|
65
|
+
};
|
|
66
|
+
if (this.form.value.plainPassword != this.form.value.plainPassword2) {
|
|
67
|
+
this._toastService.show('mismatched-password');
|
|
68
|
+
this.loading = false
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if(this.form.valid){
|
|
72
|
+
firstValueFrom(this._authService.singUp(this.form.value)).then(
|
|
73
|
+
res => {
|
|
74
|
+
this.loading = false
|
|
75
|
+
this._toastService.success('register-ok')
|
|
76
|
+
this._analyticsService.callEvent('sign_up', {
|
|
77
|
+
firstName: this.form.value.firstName,
|
|
78
|
+
lastName: this.form.value.lastName,
|
|
79
|
+
email: this.form.value.email
|
|
80
|
+
})
|
|
81
|
+
this.success = true
|
|
82
|
+
this.ready.emit(true)
|
|
83
|
+
if(this.redirect){
|
|
84
|
+
this._router.navigateByUrl('home')
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
err => {
|
|
88
|
+
this.loading = false
|
|
89
|
+
if(err.status == 400){
|
|
90
|
+
this._toastService.show('email-already-registered')
|
|
91
|
+
} else {
|
|
92
|
+
this._toastService.error('email-register-error')
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
)
|
|
96
|
+
} else {
|
|
97
|
+
this._toastService.show('invalid-form')
|
|
98
|
+
this.loading = false
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
<div class="container">
|
|
2
|
+
<div class="row">
|
|
3
|
+
<div class="col-12">
|
|
4
|
+
<div class="">
|
|
5
|
+
<div class="pt-5 pb-3 border-bottom">
|
|
6
|
+
<h3 class="my-auto mx-2 text-left w-fit bold text-beige1 white-space-md-nowrap">CREAR CUENTA
|
|
7
|
+
MAYORISTA</h3>
|
|
8
|
+
</div>
|
|
9
|
+
<div class=" py-3">
|
|
10
|
+
<p>Si todavia no tienes una cuenta de grandes consumidores en nuestra plataforma, registrate
|
|
11
|
+
ingresando estos
|
|
12
|
+
datos:</p>
|
|
13
|
+
</div>
|
|
14
|
+
<form [formGroup]="form" (submit)="register($event)" class="position-relative">
|
|
15
|
+
<div class="row w-100 mx-auto d-flex justify-content-center px-0 py-3">
|
|
16
|
+
|
|
17
|
+
<div class="col-12 col-md-6 px-0 pr-md-1">
|
|
18
|
+
<div class="form-group">
|
|
19
|
+
<label for="">Nombre</label>
|
|
20
|
+
<input type="text" id="" placeholder="Nombre" required name="firstName"
|
|
21
|
+
formControlName="firstName"
|
|
22
|
+
[class]="form.controls['firstName'].touched ? (form.controls['firstName'].valid && form.controls['firstName'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
23
|
+
<span class="invalid-feedback">El nombre es un campo obligatorio.</span>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="col-12 col-md-6 px-0 pl-md-1">
|
|
27
|
+
<div class="form-group">
|
|
28
|
+
<label for="">Apellidos</label>
|
|
29
|
+
<input type="text" id="" placeholder="Apellido" required name="lastName"
|
|
30
|
+
formControlName="lastName"
|
|
31
|
+
[class]="form.controls['lastName'].touched ? (form.controls['lastName'].valid && form.controls['lastName'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
32
|
+
<span class="invalid-feedback">El apellido es un campo obligatorio.</span>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<div class="col-12 col-md-6 px-0 pr-md-1">
|
|
37
|
+
<div class="form-group">
|
|
38
|
+
<label for="">Email</label>
|
|
39
|
+
<input type="email" id="" placeholder="Email" email required name="email"
|
|
40
|
+
formControlName="email"
|
|
41
|
+
[class]="form.controls['email'].touched ? (form.controls['email'].valid && form.controls['email'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
42
|
+
<span class="invalid-feedback">El email no posee un formato correcto.</span>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="col-12 col-md-6 px-0 pl-md-1">
|
|
46
|
+
<div class="form-group">
|
|
47
|
+
<label for="">Contraseña</label>
|
|
48
|
+
<input type="password" id="" placeholder="Contraseña" required name="plainPassword"
|
|
49
|
+
formControlName="plainPassword"
|
|
50
|
+
[class]="form.controls['plainPassword'].touched ? (form.controls['plainPassword'].valid && form.controls['plainPassword'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
51
|
+
<span class="invalid-feedback">La contraseña es un campo obligatorio.</span>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
@if(documentTypes$ | async; as documentTypes){
|
|
55
|
+
<div class="col-12 col-md-6 px-0 pl-md-1">
|
|
56
|
+
<div class="form-group">
|
|
57
|
+
<label for="">{{'document-type'|translate}}</label>
|
|
58
|
+
<select name="documentType" formControlName="documentType" required
|
|
59
|
+
[class]="form.controls['documentType'].touched ? (form.controls['documentType'].valid && form.controls['documentType'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
60
|
+
<option [value]="null" id="selectDocumentType" disabled>Seleccione un tipo</option>
|
|
61
|
+
@for (type of documentTypes; track $index) {
|
|
62
|
+
<option [value]="type.code">{{ type.name }}</option>
|
|
63
|
+
}
|
|
64
|
+
</select>
|
|
65
|
+
<span class="invalid-feedback">{{'document-type-help'|translate}}</span>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
<div class="col-12 col-md-6 px-0 pl-md-1">
|
|
71
|
+
<div class="form-group">
|
|
72
|
+
<label for="">{{'document-number'|translate}}</label>
|
|
73
|
+
<input type="text" id="" placeholder="{{'document-number'|translate}}" required
|
|
74
|
+
name="documentNumber" formControlName="documentNumber"
|
|
75
|
+
[class]="form.controls['documentNumber'].touched ? (form.controls['documentNumber'].valid && form.controls['documentNumber'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
76
|
+
<span class="invalid-feedback">{{'document-type-help'|translate}}</span>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
@if(countries$ | async; as countries ){
|
|
81
|
+
<div class="col-12 col-md-6 px-0 pl-md-1">
|
|
82
|
+
<div class="form-group">
|
|
83
|
+
<label for="">{{'country'|translate}}</label>
|
|
84
|
+
<select name="countryCode" formControlName="countryCode" required (change)="onCountrySelected($event)"
|
|
85
|
+
[class]="form.controls['countryCode'].touched ? (form.controls['countryCode'].valid && form.controls['countryCode'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
86
|
+
<option [value]="null" id="selectOpPais" disabled>Seleccione un pais</option>
|
|
87
|
+
@for (country of countries; track $index) {
|
|
88
|
+
<option [value]="country.code"> {{ country.name }}</option>
|
|
89
|
+
}
|
|
90
|
+
</select>
|
|
91
|
+
<span class="invalid-feedback">{{'country-help'|translate}}</span>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
}
|
|
95
|
+
@if(provinces$ |async ; as provinces){
|
|
96
|
+
<div class="col-12 col-md-6 px-0 pl-md-1">
|
|
97
|
+
<div class="form-group">
|
|
98
|
+
<label for="">{{'state'|translate}}</label>
|
|
99
|
+
<select name="provinceCode" formControlName="provinceCode" required (change)="onProvincesSelected($event, provinces)"
|
|
100
|
+
[class]="form.controls['provinceCode'].touched ? (form.controls['provinceCode'].valid && form.controls['provinceCode'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
101
|
+
<option [value]="null" id="selectOpProvincia" disabled>Seleccione una provincia
|
|
102
|
+
</option>
|
|
103
|
+
@for (province of provinces; track $index) {
|
|
104
|
+
<option [value]="province.code">{{ province.name }}</option>
|
|
105
|
+
}
|
|
106
|
+
</select>
|
|
107
|
+
<span class="invalid-feedback">{{'state-help'|translate}}</span>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
<div class="col-12 col-md-6 px-0 pl-md-1">
|
|
113
|
+
<div class="form-group">
|
|
114
|
+
<label for="">{{'address'|translate}}</label>
|
|
115
|
+
<input placeholder="{{'address'|translate}}" required type="text" name="street"
|
|
116
|
+
formControlName="street"
|
|
117
|
+
[class]="form.controls['street'].touched ? (form.controls['street'].valid && form.controls['street'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
118
|
+
<span class="invalid-feedback">{{'address-help1'|translate}}</span>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
<div class="col-12 col-md-6 px-0 pl-md-1">
|
|
123
|
+
<div class="form-group">
|
|
124
|
+
<label for="">{{'town-city'|translate}}</label>
|
|
125
|
+
<input placeholder="{{'town-city'|translate}}" required type="text" name="city"
|
|
126
|
+
formControlName="city"
|
|
127
|
+
[class]="form.controls['city'].touched ? (form.controls['city'].valid && form.controls['city'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
128
|
+
<span class="invalid-feedback">{{'town-city-help'|translate}}</span>
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
|
|
132
|
+
<div class="col-12 col-md-6 px-0 pl-md-1">
|
|
133
|
+
<div class="form-group">
|
|
134
|
+
<label for="">{{'postal-code'|translate}}</label>
|
|
135
|
+
<input placeholder="{{'postal-code'|translate}}" required type="text" name="postcode"
|
|
136
|
+
formControlName="postcode"
|
|
137
|
+
[class]="form.controls['postcode'].touched ? (form.controls['postcode'].valid && form.controls['postcode'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
138
|
+
<span class="invalid-feedback">{{'postal-code-help'|translate}}</span>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
|
|
142
|
+
<div class="col-12 col-md-6 px-0 pr-md-1">
|
|
143
|
+
<div class="form-group">
|
|
144
|
+
<label for="">Nombre compañía</label>
|
|
145
|
+
<input type="text" id="" placeholder="Nombre compañía" required name="companyName"
|
|
146
|
+
formControlName="companyName"
|
|
147
|
+
[class]="form.controls['companyName'].touched ? (form.controls['companyName'].valid && form.controls['companyName'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
148
|
+
<span class="invalid-feedback">El nombre compañía es un campo obligatorio.</span>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
<div class="col-12 col-md-6 px-0 pr-md-1">
|
|
153
|
+
<div class="form-group">
|
|
154
|
+
<label for="">{{'phone'|translate}}</label>
|
|
155
|
+
<input type="text" id="" placeholder="{{'phone'|translate}}" required name="phoneNumber"
|
|
156
|
+
formControlName="phoneNumber"
|
|
157
|
+
[class]="form.controls['phoneNumber'].touched ? (form.controls['phoneNumber'].valid && form.controls['phoneNumber'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
158
|
+
<span class="invalid-feedback">El numero de telefono es un campo obligatorio.</span>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
|
|
162
|
+
<div class="col-12 col-md-6 px-0 pr-md-1">
|
|
163
|
+
<div class="form-group">
|
|
164
|
+
<label for="">Sexo</label>
|
|
165
|
+
<select required name="gender" formControlName="gender"
|
|
166
|
+
[class]="form.controls['gender'].touched ? (form.controls['gender'].valid && form.controls['gender'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
167
|
+
<option value="null" id="selectOpSexo">Sexo</option>
|
|
168
|
+
<option value="u">Desconocido</option>
|
|
169
|
+
<option value="s">Femenino</option>
|
|
170
|
+
<option value="m">Masculino</option>
|
|
171
|
+
</select>
|
|
172
|
+
<span class="invalid-feedback">El sexo es un campo obligatorio.</span>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
<div class="col-12 col-md-6 px-0 pr-md-1">
|
|
177
|
+
<div class="form-group">
|
|
178
|
+
<label for="">Fecha creacion</label>
|
|
179
|
+
<input type="date" id="" placeholder="Fecha creacion" required name="birthday"
|
|
180
|
+
formControlName="birthday"
|
|
181
|
+
[class]="form.controls['birthday'].touched ? (form.controls['birthday'].valid && form.controls['birthday'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
182
|
+
<span class="invalid-feedback">La fecha de creacion es un campo obligatorio.</span>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
|
|
186
|
+
<div class="col-12 col-md-6 px-0 pr-md-1">
|
|
187
|
+
<div class="form-group">
|
|
188
|
+
<label for="">Identificacion</label>
|
|
189
|
+
<input type="text" id="" placeholder="Identificacion" required name="taxIdentification"
|
|
190
|
+
formControlName="taxIdentification"
|
|
191
|
+
[class]="form.controls['taxIdentification'].touched ? (form.controls['taxIdentification'].valid && form.controls['taxIdentification'].touched) ? 'form-control rounded-0 is-valid' : 'form-control rounded-0 is-invalid' : 'form-control rounded-0'">
|
|
192
|
+
<span class="invalid-feedback">La identificacion de la compañía es un campo
|
|
193
|
+
obligatorio.</span>
|
|
194
|
+
</div>
|
|
195
|
+
</div>
|
|
196
|
+
<div class="col-12 col-md-6 px-0 py-4 pl-md-1 ">
|
|
197
|
+
<div class="form-check py-2">
|
|
198
|
+
<input class="form-check-input" type="checkbox" value="" id="terms" name="terms"
|
|
199
|
+
formControlName="terms" type="checkbox">
|
|
200
|
+
<label for="terms" class="form-check-label">Acepto los <a
|
|
201
|
+
[routerLink]="['/section/terminos-y-condiciones']"
|
|
202
|
+
routerLinkActive="router-link-active" class="text-primary">términos y
|
|
203
|
+
condiciones *</a></label>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
<div class="col-12 col-md-6 px-0 py-4 pl-md-1">
|
|
207
|
+
<div class="form-check py-2">
|
|
208
|
+
<input class="form-check-input" type="checkbox" value="" id="defaultCheck2"
|
|
209
|
+
name="subscribedToNewsletter" formControlName="subscribedToNewsletter"
|
|
210
|
+
type="checkbox">
|
|
211
|
+
<label class="form-check-label" for="defaultCheck2">
|
|
212
|
+
Suscripción al newsletter
|
|
213
|
+
</label>
|
|
214
|
+
</div>
|
|
215
|
+
</div>
|
|
216
|
+
|
|
217
|
+
<div
|
|
218
|
+
class="col-12 col-md-6 px-0 py-4 pr-md-1 d-flex justify-content-md-start order-2 order-md-1">
|
|
219
|
+
|
|
220
|
+
<button type="submit" role="button" [disabled]="form.invalid"
|
|
221
|
+
class="btn btn-primary rounded-0 px-5 py-2 w-100 w-md-auto h-fit">REGISTRATE</button>
|
|
222
|
+
</div>
|
|
223
|
+
|
|
224
|
+
</div>
|
|
225
|
+
<pre>{{form.value | json}}</pre>
|
|
226
|
+
@if(loading){
|
|
227
|
+
<app-loading-section-ec />
|
|
228
|
+
}
|
|
229
|
+
</form>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
</div>
|
|
File without changes
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
2
|
+
import { LoadingSectionEcComponent } from "../../widgets-ec/loading";
|
|
3
|
+
import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
4
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
5
|
+
import { AuthService, FormService, ToastService } from '../../../ec-services';
|
|
6
|
+
import { AsyncPipe, JsonPipe } from '@angular/common';
|
|
7
|
+
import { Router, RouterLink } from '@angular/router';
|
|
8
|
+
import { firstValueFrom } from 'rxjs';
|
|
9
|
+
|
|
10
|
+
@Component({
|
|
11
|
+
selector: 'app-register-wholesaler-form-ec',
|
|
12
|
+
standalone: true,
|
|
13
|
+
imports: [LoadingSectionEcComponent, ReactiveFormsModule, TranslateModule, AsyncPipe, JsonPipe, RouterLink],
|
|
14
|
+
templateUrl: './register-wholesaler-form-ec.component.html',
|
|
15
|
+
styleUrl: './register-wholesaler-form-ec.component.scss'
|
|
16
|
+
})
|
|
17
|
+
export class RegisterWholesalerFormEcComponent {
|
|
18
|
+
private _formBuilder: FormBuilder = inject(FormBuilder)
|
|
19
|
+
private _formService: FormService = inject(FormService)
|
|
20
|
+
private _toastService: ToastService = inject(ToastService)
|
|
21
|
+
private _authService: AuthService = inject(AuthService)
|
|
22
|
+
private _router: Router = inject(Router)
|
|
23
|
+
/**
|
|
24
|
+
* Indica si debe redireccionar o se queda en la misma pantalla
|
|
25
|
+
*/
|
|
26
|
+
@Input() redirect: boolean = true;
|
|
27
|
+
/**
|
|
28
|
+
* Para que se puede capturar el estado de la petición de registro.
|
|
29
|
+
*/
|
|
30
|
+
@Output() ready = new EventEmitter();
|
|
31
|
+
/**
|
|
32
|
+
* Contiene los paises y sus datos
|
|
33
|
+
*/
|
|
34
|
+
public countries$ = this._formService.getCountriesData();
|
|
35
|
+
/**
|
|
36
|
+
* Contiene las provincias
|
|
37
|
+
*/
|
|
38
|
+
public provinces$ = this._formService.provinces$;
|
|
39
|
+
/**
|
|
40
|
+
* Contiene los tipos de documentos.
|
|
41
|
+
*/
|
|
42
|
+
public documentTypes$ = this._formService.documentTypes$;
|
|
43
|
+
/**
|
|
44
|
+
* Contiene el formulario de registro.
|
|
45
|
+
*/
|
|
46
|
+
public form: FormGroup;
|
|
47
|
+
/**
|
|
48
|
+
* Para indicar cuando se esta procesando el registro.
|
|
49
|
+
*/
|
|
50
|
+
public loading: boolean = false;
|
|
51
|
+
/**
|
|
52
|
+
* Para indicar cuando se proceso con exito el registro.
|
|
53
|
+
*/
|
|
54
|
+
public success: boolean = false;
|
|
55
|
+
|
|
56
|
+
constructor() {
|
|
57
|
+
this.form = this._formBuilder.group({
|
|
58
|
+
firstName: ['', [Validators.required]],
|
|
59
|
+
lastName: ['', [Validators.required]],
|
|
60
|
+
documentType: [null, [Validators.required]],
|
|
61
|
+
documentNumber: ['', [Validators.required]],
|
|
62
|
+
email: ['', [Validators.required, Validators.email]],
|
|
63
|
+
plainPassword: [''],
|
|
64
|
+
plainPassword2: ['', []],
|
|
65
|
+
countryCode: [null, Validators.required],
|
|
66
|
+
street: [null, [Validators.maxLength(50)]],
|
|
67
|
+
city: ['', Validators.required],
|
|
68
|
+
postcode: ['', Validators.required],
|
|
69
|
+
provinceName: ['', Validators.required],
|
|
70
|
+
provinceCode: [null, Validators.required],
|
|
71
|
+
companyName: ['', [Validators.required]],
|
|
72
|
+
phoneNumber: ['', [Validators.required, Validators.pattern('[0-9]+')]],
|
|
73
|
+
gender: [null, []],
|
|
74
|
+
birthday: [null, [Validators.maxLength(11)]],
|
|
75
|
+
taxIdentification: ['', Validators.required],
|
|
76
|
+
comments: ['', []],
|
|
77
|
+
contactFirstName: ['', []],
|
|
78
|
+
contactLastName: ['', []],
|
|
79
|
+
contactCompanyPosition: ['', []],
|
|
80
|
+
contactEmail: ['', []],
|
|
81
|
+
contactDocumentType: ['', []],
|
|
82
|
+
contactDocumentNumber: ['', []],
|
|
83
|
+
subscribedToNewsletter: [false],
|
|
84
|
+
terms: [true, Validators.required],
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Registra un usuario.
|
|
89
|
+
* @param event
|
|
90
|
+
* @returns
|
|
91
|
+
*/
|
|
92
|
+
register(event: Event) {
|
|
93
|
+
event.preventDefault()
|
|
94
|
+
this.loading = true;
|
|
95
|
+
if (!this.form.valid) {
|
|
96
|
+
this._toastService.show('fields-incomplete');
|
|
97
|
+
this.loading = false
|
|
98
|
+
return;
|
|
99
|
+
};
|
|
100
|
+
if (this.form.valid) {
|
|
101
|
+
firstValueFrom(this._authService.signUpWholesaler(this.form.value)).then(
|
|
102
|
+
(res: any) => {
|
|
103
|
+
this.loading = false;
|
|
104
|
+
this._toastService.show('register-ok');
|
|
105
|
+
this.success = true;
|
|
106
|
+
this.ready.emit(true);
|
|
107
|
+
if (this.redirect) {
|
|
108
|
+
this._router.navigateByUrl('home')
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
(error: any) => {
|
|
112
|
+
this.loading = false;
|
|
113
|
+
if (error.status == 400) {
|
|
114
|
+
this._toastService.show('email-already-registered');
|
|
115
|
+
} else {
|
|
116
|
+
this._toastService.show('email-register-error');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
)
|
|
120
|
+
} else {
|
|
121
|
+
this._toastService.show('invalid-form');
|
|
122
|
+
this.loading = false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Captura el evento de cuando cambia un pais en el `<select>`
|
|
127
|
+
* @param event
|
|
128
|
+
*/
|
|
129
|
+
onCountrySelected = (event: any) => {
|
|
130
|
+
const { value } = event.target;
|
|
131
|
+
//$('#selectOpPais').attr('disabled', true);
|
|
132
|
+
this.form.controls['countryCode'].setValue(value);
|
|
133
|
+
this.form.controls['provinceCode'].setValue('null');
|
|
134
|
+
//value != '' && this.provincesSubject.next(this.countriesSubject.value.find(country => country.code == value).provinces);
|
|
135
|
+
if (value != '' || value != 'null') {
|
|
136
|
+
this._formService.onCountrySelected(value);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Captura el evento de cuando cambia una provincia/estado en el `<select>`
|
|
141
|
+
* @param event
|
|
142
|
+
* @param provinces lista de provincias para obtener el nombre de la seleccionada.
|
|
143
|
+
*/
|
|
144
|
+
onProvincesSelected = (event: any, provinces: any) => {
|
|
145
|
+
const { value } = event.target;
|
|
146
|
+
this.form.controls['provinceName'].setValue(provinces.find((province: any) => province.code == value).name);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
}
|