ng-easycommerce 0.0.593 → 0.0.595
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/README.md +915 -910
- package/assets/bamboo.html +145 -145
- package/assets/bancardCatastro.html +49 -49
- package/assets/bancardFrameBase.html +104 -104
- package/assets/cecaFrameRedirectBase.html +172 -172
- package/assets/decidirFormEc.html +516 -516
- package/assets/docs/COOKIES.md +158 -158
- package/assets/docs/Parametros-Frontend.md +56 -56
- package/assets/ec-i18n/ct.json +282 -282
- package/assets/ec-i18n/en.json +3 -1
- package/assets/ec-i18n/es.json +393 -391
- package/assets/ec-i18n/fr.json +0 -0
- package/assets/ec-i18n/gl.json +282 -282
- package/assets/ec-i18n/pr.json +282 -282
- package/assets/images/whatsapp.png +0 -0
- package/assets/mpFrameRedirectBase.html +114 -114
- package/assets/recaptcha/recaptcha-site-keys.json +3 -3
- package/assets/recaptcha/recaptcha-sites-prod.json +38 -38
- package/assets/recaptcha/recaptcha-sites.json +52 -52
- package/assets/redirect.html +62 -62
- package/assets/redsysAuthVdosBase.html +78 -78
- package/assets/redsysAuthVunoBase.html +84 -84
- package/assets/redsysFrameRedirectBase.html +102 -102
- package/assets/redsysFrameRedirectOutBase.html +102 -102
- package/assets/redsysFrameSendBase.html +71 -71
- package/assets/redsysProBase.html +399 -399
- package/assets/redsysStateBase.html +63 -63
- package/assets/scss/_colors.scss +17 -17
- package/assets/scss/_styles.scss +22 -22
- package/assets/svg/chevron-left-black.svg +61 -61
- package/assets/svg/chevron-right-black.svg +61 -61
- package/bundles/ng-easycommerce.umd.js +19241 -19232
- package/bundles/ng-easycommerce.umd.js.map +1 -1
- package/bundles/ng-easycommerce.umd.min.js +1 -1
- package/bundles/ng-easycommerce.umd.min.js.map +1 -1
- package/esm2015/lib/api/connection.service.js +77 -77
- package/esm2015/lib/classes/checkout/step-service.js +39 -39
- package/esm2015/lib/classes/checkout/step.js +22 -22
- package/esm2015/lib/classes/checkout-process-state.js +2 -2
- package/esm2015/lib/classes/component-helper.js +14 -14
- package/esm2015/lib/classes/filters/AttributesFilter.js +61 -61
- package/esm2015/lib/classes/filters/CategoryFilter.js +54 -54
- package/esm2015/lib/classes/filters/DinamycsFilter.js +58 -58
- package/esm2015/lib/classes/filters/Filter.js +75 -75
- package/esm2015/lib/classes/filters/PriceRangeFilter.js +51 -51
- package/esm2015/lib/classes/filters/SortFilter.js +79 -79
- package/esm2015/lib/classes/user-role-type.js +1 -1
- package/esm2015/lib/classes/user.js +108 -108
- package/esm2015/lib/core.consts.js +402 -402
- package/esm2015/lib/ec-component/account-ec/account-ec.component.js +45 -45
- package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +112 -112
- package/esm2015/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.js +188 -188
- package/esm2015/lib/ec-component/auth-ec/auth-ec.component.js +115 -115
- package/esm2015/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.js +44 -44
- package/esm2015/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.js +58 -58
- package/esm2015/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.js +108 -108
- package/esm2015/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.js +166 -166
- package/esm2015/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.js +165 -165
- package/esm2015/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +78 -78
- package/esm2015/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.js +138 -138
- package/esm2015/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.js +110 -110
- package/esm2015/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.js +138 -138
- package/esm2015/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.js +38 -38
- package/esm2015/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.js +152 -152
- package/esm2015/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.js +119 -119
- package/esm2015/lib/ec-component/blocks-ec/blocks-ec.component.js +70 -70
- package/esm2015/lib/ec-component/build-your-ec/build-your-ec.component.js +305 -305
- package/esm2015/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.js +85 -85
- package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +383 -383
- package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +146 -146
- package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +354 -354
- package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +78 -78
- package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +127 -127
- package/esm2015/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +112 -112
- package/esm2015/lib/ec-component/checkout-ec/step-ec/step-ec.component.js +53 -53
- package/esm2015/lib/ec-component/checkout-ec/success-ec/success-ec.component.js +65 -65
- package/esm2015/lib/ec-component/checkout-error-ec/checkout-error-ec.component.js +80 -80
- package/esm2015/lib/ec-component/collection-ec/collection-ec.component.js +220 -220
- package/esm2015/lib/ec-component/compared-products-ec/compared-products-ec.component.js +186 -186
- package/esm2015/lib/ec-component/cookies-ec/cookies-ec.component.js +109 -109
- package/esm2015/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.js +32 -32
- package/esm2015/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.js +34 -34
- package/esm2015/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.js +34 -34
- package/esm2015/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.js +35 -35
- package/esm2015/lib/ec-component/coupon-ec/coupon-ec.component.js +53 -53
- package/esm2015/lib/ec-component/faqs-content-ec/faqs-content-ec.component.js +49 -49
- package/esm2015/lib/ec-component/filters-ec/filters-ec.component.js +152 -152
- package/esm2015/lib/ec-component/filters-top-ec/filters-top-ec.component.js +102 -102
- package/esm2015/lib/ec-component/footer-ec/footer-ec.component.js +80 -80
- package/esm2015/lib/ec-component/header-ec/header-ec.component.js +186 -186
- package/esm2015/lib/ec-component/home-ec/home-ec.component.js +37 -37
- package/esm2015/lib/ec-component/index.js +241 -241
- package/esm2015/lib/ec-component/login-ec/login-ec.component.js +102 -102
- package/esm2015/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.js +90 -90
- package/esm2015/lib/ec-component/password-reset-ec/password-reset-ec.component.js +103 -103
- package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +165 -165
- package/esm2015/lib/ec-component/product-ec/product-ec.component.js +123 -123
- package/esm2015/lib/ec-component/related-products-ec/related-products-ec.component.js +94 -94
- package/esm2015/lib/ec-component/reviews-ec/reviews-ec.component.js +69 -69
- package/esm2015/lib/ec-component/reviews-form-ec/reviews-form-ec.component.js +138 -138
- package/esm2015/lib/ec-component/section-container-ec/section-container-ec.component.js +86 -86
- package/esm2015/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.js +130 -130
- package/esm2015/lib/ec-component/share-block-ec/share-block-ec.component.js +149 -149
- package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +117 -117
- package/esm2015/lib/ec-component/stores-ec/stores-ec.component.js +192 -192
- package/esm2015/lib/ec-component/variants-ec/variants-ec.component.js +56 -56
- package/esm2015/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.js +205 -205
- package/esm2015/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.js +296 -296
- package/esm2015/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.js +154 -154
- package/esm2015/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.js +144 -144
- package/esm2015/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.js +49 -49
- package/esm2015/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.js +133 -133
- package/esm2015/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.js +152 -152
- package/esm2015/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.js +175 -175
- package/esm2015/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.js +30 -30
- package/esm2015/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.js +26 -26
- package/esm2015/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.js +21 -21
- package/esm2015/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.js +156 -156
- package/esm2015/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.js +368 -368
- package/esm2015/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.js +151 -151
- package/esm2015/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +178 -178
- package/esm2015/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +44 -44
- package/esm2015/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.js +83 -83
- package/esm2015/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.js +50 -50
- package/esm2015/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.js +90 -90
- package/esm2015/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.js +143 -143
- package/esm2015/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.js +128 -128
- package/esm2015/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.js +145 -145
- package/esm2015/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.js +167 -167
- package/esm2015/lib/ec-directive/add-action-redirect.directive.js +85 -85
- package/esm2015/lib/ec-directive/auth-wholesaler.directive.js +54 -54
- package/esm2015/lib/ec-directive/index.js +36 -36
- package/esm2015/lib/ec-directive/product-mini-standard.directive.js +65 -65
- package/esm2015/lib/ec-directive/product-off.directive.js +144 -144
- package/esm2015/lib/ec-directive/product-stock.directive.js +75 -75
- package/esm2015/lib/ec-directive/reload-view.directive.js +34 -34
- package/esm2015/lib/ec-pipe/ec-currency-symbol.pipe.js +72 -72
- package/esm2015/lib/ec-pipe/ec-sanitizer-html.pipe.js +26 -26
- package/esm2015/lib/ec-pipe/ec-sanitizer-url.pipe.js +26 -26
- package/esm2015/lib/ec-pipe/index.js +13 -13
- package/esm2015/lib/guards/able-buyer-guard.service.js +36 -36
- package/esm2015/lib/guards/auth-guard.service.js +36 -36
- package/esm2015/lib/guards/checkout-ready.service.js +36 -36
- package/esm2015/lib/guards/loggedin-guard.service.js +36 -36
- package/esm2015/lib/guards/user-role-guard.service.js +38 -38
- package/esm2015/lib/interceptors/auth.interceptor.js +55 -55
- package/esm2015/lib/interceptors/customer.interceptor.js +48 -48
- package/esm2015/lib/interfaces/Script.js +1 -1
- package/esm2015/lib/interfaces/analytics/event-key.model.js +1 -1
- package/esm2015/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.js +1 -1
- package/esm2015/lib/interfaces/analytics/gtm-config.js +1 -1
- package/esm2015/lib/interfaces/analytics/metricool-pixel.js +1 -1
- package/esm2015/lib/interfaces/block.js +1 -1
- package/esm2015/lib/interfaces/cart/cart-affordable.js +1 -1
- package/esm2015/lib/interfaces/checkout/checkout-error.js +1 -1
- package/esm2015/lib/interfaces/checkout-data.js +1 -1
- package/esm2015/lib/interfaces/choose-options/filter-option.js +6 -6
- package/esm2015/lib/interfaces/choose-options/options-of-product-list.js +1 -1
- package/esm2015/lib/interfaces/cookies.js +1 -1
- package/esm2015/lib/interfaces/core.interfaces.js +1 -1
- package/esm2015/lib/interfaces/coupon.js +1 -1
- package/esm2015/lib/interfaces/deserializable.js +1 -1
- package/esm2015/lib/interfaces/faqs.js +1 -1
- package/esm2015/lib/interfaces/filter.js +1 -1
- package/esm2015/lib/interfaces/filterStep.js +1 -1
- package/esm2015/lib/interfaces/observable-error.interface.js +1 -1
- package/esm2015/lib/interfaces/paginate.js +1 -1
- package/esm2015/lib/interfaces/parameters.js +1 -1
- package/esm2015/lib/interfaces/selection.js +4 -4
- package/esm2015/lib/interfaces/step.js +1 -1
- package/esm2015/lib/interfaces/store.js +1 -1
- package/esm2015/lib/ng-easycommerce.module.js +179 -179
- package/esm2015/lib/pipes/order-by.pipe.js +101 -101
- package/esm2015/lib/services/account/orders.service.js +102 -102
- package/esm2015/lib/services/analytics.service.js +57 -57
- package/esm2015/lib/services/auth.service.js +339 -339
- package/esm2015/lib/services/banner.service.js +72 -72
- package/esm2015/lib/services/blocks/blocks-repository.service.js +62 -62
- package/esm2015/lib/services/blocks/blocks.service.js +71 -71
- package/esm2015/lib/services/captcha.service.js +130 -130
- package/esm2015/lib/services/cart.service.js +572 -563
- package/esm2015/lib/services/channel-config.service.js +105 -105
- package/esm2015/lib/services/checkout/addressing.service.js +222 -222
- package/esm2015/lib/services/checkout/checkout.service.js +233 -235
- package/esm2015/lib/services/checkout/error-handler.service.js +81 -81
- package/esm2015/lib/services/checkout/payment.service.js +77 -77
- package/esm2015/lib/services/checkout/shipment.service.js +183 -183
- package/esm2015/lib/services/concatenated-associations.service.js +120 -120
- package/esm2015/lib/services/cookies.service.js +208 -208
- package/esm2015/lib/services/currency.service.js +161 -161
- package/esm2015/lib/services/dataform.service.js +46 -46
- package/esm2015/lib/services/filters.service.js +122 -122
- package/esm2015/lib/services/gift-card.service.js +61 -61
- package/esm2015/lib/services/ip-address.service.js +34 -34
- package/esm2015/lib/services/options.service.js +275 -275
- package/esm2015/lib/services/pagination.service.js +73 -73
- package/esm2015/lib/services/parameters.service.js +72 -72
- package/esm2015/lib/services/products/product-detail.service.js +429 -429
- package/esm2015/lib/services/products/products.service.js +287 -287
- package/esm2015/lib/services/reviews.service.js +107 -107
- package/esm2015/lib/services/stores.service.js +37 -37
- package/esm2015/lib/services/windows.service.js +52 -52
- package/esm2015/lib/services/wishlist.service.js +70 -70
- package/esm2015/lib/strategies/standard.strategy.js +43 -43
- package/esm2015/lib/utils/analytics/doppler.service.js +37 -37
- package/esm2015/lib/utils/analytics/facebook-pixel.service.js +141 -141
- package/esm2015/lib/utils/analytics/google-analytics.service.js +265 -265
- package/esm2015/lib/utils/analytics/gtm.service.js +341 -341
- package/esm2015/lib/utils/analytics/metricool-pixel.service.js +48 -48
- package/esm2015/lib/utils/options-of-product-list-data.service.js +96 -96
- package/esm2015/lib/utils/order-util.service.js +72 -72
- package/esm2015/lib/utils/payment-utils.service.js +35 -35
- package/esm2015/lib/utils/shipment-transformer.service.js +66 -66
- package/esm2015/lib/utils/toast.service.js +42 -42
- package/esm2015/lib/utils/utils.service.js +20 -20
- package/esm2015/ng-easycommerce.js +33 -33
- package/esm2015/public-api.js +146 -146
- package/esm5/lib/api/connection.service.js +90 -90
- package/esm5/lib/classes/checkout/step-service.js +74 -74
- package/esm5/lib/classes/checkout/step.js +25 -25
- package/esm5/lib/classes/checkout-process-state.js +2 -2
- package/esm5/lib/classes/component-helper.js +18 -18
- package/esm5/lib/classes/filters/AttributesFilter.js +79 -79
- package/esm5/lib/classes/filters/CategoryFilter.js +72 -72
- package/esm5/lib/classes/filters/DinamycsFilter.js +76 -76
- package/esm5/lib/classes/filters/Filter.js +78 -78
- package/esm5/lib/classes/filters/PriceRangeFilter.js +68 -68
- package/esm5/lib/classes/filters/SortFilter.js +97 -97
- package/esm5/lib/classes/user-role-type.js +1 -1
- package/esm5/lib/classes/user.js +120 -120
- package/esm5/lib/core.consts.js +422 -422
- package/esm5/lib/ec-component/account-ec/account-ec.component.js +62 -62
- package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +166 -166
- package/esm5/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.js +205 -205
- package/esm5/lib/ec-component/auth-ec/auth-ec.component.js +132 -132
- package/esm5/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.js +60 -60
- package/esm5/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.js +74 -74
- package/esm5/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.js +125 -125
- package/esm5/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.js +183 -183
- package/esm5/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.js +182 -182
- package/esm5/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +106 -106
- package/esm5/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.js +166 -166
- package/esm5/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.js +138 -138
- package/esm5/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.js +165 -165
- package/esm5/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.js +54 -54
- package/esm5/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.js +180 -180
- package/esm5/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.js +146 -146
- package/esm5/lib/ec-component/blocks-ec/blocks-ec.component.js +90 -90
- package/esm5/lib/ec-component/build-your-ec/build-your-ec.component.js +327 -327
- package/esm5/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.js +112 -112
- package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +467 -467
- package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +163 -163
- package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +439 -439
- package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +95 -95
- package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +217 -217
- package/esm5/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +162 -162
- package/esm5/lib/ec-component/checkout-ec/step-ec/step-ec.component.js +69 -69
- package/esm5/lib/ec-component/checkout-ec/success-ec/success-ec.component.js +82 -82
- package/esm5/lib/ec-component/checkout-error-ec/checkout-error-ec.component.js +97 -97
- package/esm5/lib/ec-component/collection-ec/collection-ec.component.js +261 -261
- package/esm5/lib/ec-component/compared-products-ec/compared-products-ec.component.js +209 -209
- package/esm5/lib/ec-component/cookies-ec/cookies-ec.component.js +126 -126
- package/esm5/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.js +34 -34
- package/esm5/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.js +36 -36
- package/esm5/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.js +36 -36
- package/esm5/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.js +37 -37
- package/esm5/lib/ec-component/coupon-ec/coupon-ec.component.js +71 -71
- package/esm5/lib/ec-component/faqs-content-ec/faqs-content-ec.component.js +66 -66
- package/esm5/lib/ec-component/filters-ec/filters-ec.component.js +168 -168
- package/esm5/lib/ec-component/filters-top-ec/filters-top-ec.component.js +118 -118
- package/esm5/lib/ec-component/footer-ec/footer-ec.component.js +109 -109
- package/esm5/lib/ec-component/header-ec/header-ec.component.js +245 -245
- package/esm5/lib/ec-component/home-ec/home-ec.component.js +53 -53
- package/esm5/lib/ec-component/index.js +241 -241
- package/esm5/lib/ec-component/login-ec/login-ec.component.js +118 -118
- package/esm5/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.js +106 -106
- package/esm5/lib/ec-component/password-reset-ec/password-reset-ec.component.js +119 -119
- package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +192 -192
- package/esm5/lib/ec-component/product-ec/product-ec.component.js +141 -141
- package/esm5/lib/ec-component/related-products-ec/related-products-ec.component.js +111 -111
- package/esm5/lib/ec-component/reviews-ec/reviews-ec.component.js +85 -85
- package/esm5/lib/ec-component/reviews-form-ec/reviews-form-ec.component.js +155 -155
- package/esm5/lib/ec-component/section-container-ec/section-container-ec.component.js +103 -103
- package/esm5/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.js +149 -149
- package/esm5/lib/ec-component/share-block-ec/share-block-ec.component.js +166 -166
- package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +120 -120
- package/esm5/lib/ec-component/stores-ec/stores-ec.component.js +214 -214
- package/esm5/lib/ec-component/variants-ec/variants-ec.component.js +72 -72
- package/esm5/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.js +221 -221
- package/esm5/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.js +313 -313
- package/esm5/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.js +170 -170
- package/esm5/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.js +160 -160
- package/esm5/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.js +83 -83
- package/esm5/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.js +149 -149
- package/esm5/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.js +156 -156
- package/esm5/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.js +192 -192
- package/esm5/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.js +46 -46
- package/esm5/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.js +42 -42
- package/esm5/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.js +23 -23
- package/esm5/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.js +174 -174
- package/esm5/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.js +396 -396
- package/esm5/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.js +167 -167
- package/esm5/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +231 -231
- package/esm5/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +60 -60
- package/esm5/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.js +100 -100
- package/esm5/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.js +53 -53
- package/esm5/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.js +124 -124
- package/esm5/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.js +159 -159
- package/esm5/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.js +144 -144
- package/esm5/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.js +162 -162
- package/esm5/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.js +181 -181
- package/esm5/lib/ec-directive/add-action-redirect.directive.js +104 -104
- package/esm5/lib/ec-directive/auth-wholesaler.directive.js +60 -60
- package/esm5/lib/ec-directive/index.js +36 -36
- package/esm5/lib/ec-directive/product-mini-standard.directive.js +72 -72
- package/esm5/lib/ec-directive/product-off.directive.js +163 -163
- package/esm5/lib/ec-directive/product-stock.directive.js +81 -81
- package/esm5/lib/ec-directive/reload-view.directive.js +35 -35
- package/esm5/lib/ec-pipe/ec-currency-symbol.pipe.js +74 -74
- package/esm5/lib/ec-pipe/ec-sanitizer-html.pipe.js +27 -27
- package/esm5/lib/ec-pipe/ec-sanitizer-url.pipe.js +27 -27
- package/esm5/lib/ec-pipe/index.js +13 -13
- package/esm5/lib/guards/able-buyer-guard.service.js +37 -37
- package/esm5/lib/guards/auth-guard.service.js +37 -37
- package/esm5/lib/guards/checkout-ready.service.js +37 -37
- package/esm5/lib/guards/loggedin-guard.service.js +37 -37
- package/esm5/lib/guards/user-role-guard.service.js +39 -39
- package/esm5/lib/interceptors/auth.interceptor.js +57 -57
- package/esm5/lib/interceptors/customer.interceptor.js +50 -50
- package/esm5/lib/interfaces/Script.js +1 -1
- package/esm5/lib/interfaces/analytics/event-key.model.js +1 -1
- package/esm5/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.js +1 -1
- package/esm5/lib/interfaces/analytics/gtm-config.js +1 -1
- package/esm5/lib/interfaces/analytics/metricool-pixel.js +1 -1
- package/esm5/lib/interfaces/block.js +1 -1
- package/esm5/lib/interfaces/cart/cart-affordable.js +1 -1
- package/esm5/lib/interfaces/checkout/checkout-error.js +1 -1
- package/esm5/lib/interfaces/checkout-data.js +1 -1
- package/esm5/lib/interfaces/choose-options/filter-option.js +6 -6
- package/esm5/lib/interfaces/choose-options/options-of-product-list.js +1 -1
- package/esm5/lib/interfaces/cookies.js +1 -1
- package/esm5/lib/interfaces/core.interfaces.js +1 -1
- package/esm5/lib/interfaces/coupon.js +1 -1
- package/esm5/lib/interfaces/deserializable.js +1 -1
- package/esm5/lib/interfaces/faqs.js +1 -1
- package/esm5/lib/interfaces/filter.js +1 -1
- package/esm5/lib/interfaces/filterStep.js +1 -1
- package/esm5/lib/interfaces/observable-error.interface.js +1 -1
- package/esm5/lib/interfaces/paginate.js +1 -1
- package/esm5/lib/interfaces/parameters.js +1 -1
- package/esm5/lib/interfaces/selection.js +4 -4
- package/esm5/lib/interfaces/step.js +1 -1
- package/esm5/lib/interfaces/store.js +1 -1
- package/esm5/lib/ng-easycommerce.module.js +183 -183
- package/esm5/lib/pipes/order-by.pipe.js +106 -106
- package/esm5/lib/services/account/orders.service.js +120 -120
- package/esm5/lib/services/analytics.service.js +60 -60
- package/esm5/lib/services/auth.service.js +413 -413
- package/esm5/lib/services/banner.service.js +81 -81
- package/esm5/lib/services/blocks/blocks-repository.service.js +94 -94
- package/esm5/lib/services/blocks/blocks.service.js +79 -79
- package/esm5/lib/services/captcha.service.js +132 -132
- package/esm5/lib/services/cart.service.js +701 -690
- package/esm5/lib/services/channel-config.service.js +107 -107
- package/esm5/lib/services/checkout/addressing.service.js +280 -280
- package/esm5/lib/services/checkout/checkout.service.js +316 -318
- package/esm5/lib/services/checkout/error-handler.service.js +83 -83
- package/esm5/lib/services/checkout/payment.service.js +125 -125
- package/esm5/lib/services/checkout/shipment.service.js +265 -265
- package/esm5/lib/services/concatenated-associations.service.js +162 -162
- package/esm5/lib/services/cookies.service.js +222 -222
- package/esm5/lib/services/currency.service.js +205 -205
- package/esm5/lib/services/dataform.service.js +48 -48
- package/esm5/lib/services/filters.service.js +125 -125
- package/esm5/lib/services/gift-card.service.js +63 -63
- package/esm5/lib/services/ip-address.service.js +35 -35
- package/esm5/lib/services/options.service.js +376 -376
- package/esm5/lib/services/pagination.service.js +79 -79
- package/esm5/lib/services/parameters.service.js +74 -74
- package/esm5/lib/services/products/product-detail.service.js +494 -494
- package/esm5/lib/services/products/products.service.js +345 -345
- package/esm5/lib/services/reviews.service.js +116 -116
- package/esm5/lib/services/stores.service.js +39 -39
- package/esm5/lib/services/windows.service.js +79 -79
- package/esm5/lib/services/wishlist.service.js +71 -71
- package/esm5/lib/strategies/standard.strategy.js +44 -44
- package/esm5/lib/utils/analytics/doppler.service.js +39 -39
- package/esm5/lib/utils/analytics/facebook-pixel.service.js +145 -145
- package/esm5/lib/utils/analytics/google-analytics.service.js +280 -280
- package/esm5/lib/utils/analytics/gtm.service.js +358 -358
- package/esm5/lib/utils/analytics/metricool-pixel.service.js +40 -40
- package/esm5/lib/utils/options-of-product-list-data.service.js +98 -98
- package/esm5/lib/utils/order-util.service.js +75 -75
- package/esm5/lib/utils/payment-utils.service.js +37 -37
- package/esm5/lib/utils/shipment-transformer.service.js +78 -78
- package/esm5/lib/utils/toast.service.js +61 -61
- package/esm5/lib/utils/utils.service.js +22 -22
- package/esm5/ng-easycommerce.js +33 -33
- package/esm5/public-api.js +146 -146
- package/fesm2015/ng-easycommerce.js +16252 -16245
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +19245 -19236
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/api/connection.service.d.ts +28 -28
- package/lib/classes/checkout/step-service.d.ts +28 -28
- package/lib/classes/checkout/step.d.ts +14 -14
- package/lib/classes/checkout-process-state.d.ts +12 -12
- package/lib/classes/component-helper.d.ts +8 -8
- package/lib/classes/filters/AttributesFilter.d.ts +18 -18
- package/lib/classes/filters/CategoryFilter.d.ts +17 -17
- package/lib/classes/filters/DinamycsFilter.d.ts +15 -15
- package/lib/classes/filters/Filter.d.ts +19 -19
- package/lib/classes/filters/PriceRangeFilter.d.ts +18 -18
- package/lib/classes/filters/SortFilter.d.ts +15 -15
- package/lib/classes/user-role-type.d.ts +5 -5
- package/lib/classes/user.d.ts +68 -68
- package/lib/core.consts.d.ts +211 -211
- package/lib/ec-component/account-ec/account-ec.component.d.ts +13 -13
- package/lib/ec-component/account-ec/order-ec/order-ec.component.d.ts +31 -31
- package/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.d.ts +82 -82
- package/lib/ec-component/auth-ec/auth-ec.component.d.ts +35 -35
- package/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.d.ts +13 -13
- package/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.d.ts +16 -16
- package/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.d.ts +26 -26
- package/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.d.ts +34 -34
- package/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.d.ts +42 -42
- package/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.d.ts +23 -23
- package/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.d.ts +34 -34
- package/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.d.ts +27 -27
- package/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.d.ts +34 -34
- package/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.d.ts +10 -10
- package/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.d.ts +40 -40
- package/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.d.ts +25 -25
- package/lib/ec-component/blocks-ec/blocks-ec.component.d.ts +24 -24
- package/lib/ec-component/build-your-ec/build-your-ec.component.d.ts +122 -122
- package/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.d.ts +41 -41
- package/lib/ec-component/cart-ec/cart-ec.component.d.ts +52 -52
- package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +42 -42
- package/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.d.ts +92 -92
- package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +20 -20
- package/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.d.ts +51 -51
- package/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.d.ts +34 -34
- package/lib/ec-component/checkout-ec/step-ec/step-ec.component.d.ts +18 -18
- package/lib/ec-component/checkout-ec/success-ec/success-ec.component.d.ts +32 -32
- package/lib/ec-component/checkout-error-ec/checkout-error-ec.component.d.ts +25 -25
- package/lib/ec-component/collection-ec/collection-ec.component.d.ts +67 -67
- package/lib/ec-component/compared-products-ec/compared-products-ec.component.d.ts +70 -70
- package/lib/ec-component/cookies-ec/cookies-ec.component.d.ts +44 -44
- package/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.d.ts +10 -10
- package/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.d.ts +8 -8
- package/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.d.ts +9 -9
- package/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.d.ts +9 -9
- package/lib/ec-component/coupon-ec/coupon-ec.component.d.ts +17 -17
- package/lib/ec-component/faqs-content-ec/faqs-content-ec.component.d.ts +15 -15
- package/lib/ec-component/filters-ec/filters-ec.component.d.ts +33 -33
- package/lib/ec-component/filters-top-ec/filters-top-ec.component.d.ts +23 -23
- package/lib/ec-component/footer-ec/footer-ec.component.d.ts +30 -30
- package/lib/ec-component/header-ec/header-ec.component.d.ts +65 -65
- package/lib/ec-component/home-ec/home-ec.component.d.ts +13 -13
- package/lib/ec-component/index.d.ts +80 -80
- package/lib/ec-component/login-ec/login-ec.component.d.ts +26 -26
- package/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.d.ts +28 -28
- package/lib/ec-component/password-reset-ec/password-reset-ec.component.d.ts +27 -27
- package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +58 -58
- package/lib/ec-component/product-ec/product-ec.component.d.ts +46 -46
- package/lib/ec-component/related-products-ec/related-products-ec.component.d.ts +22 -22
- package/lib/ec-component/reviews-ec/reviews-ec.component.d.ts +29 -29
- package/lib/ec-component/reviews-form-ec/reviews-form-ec.component.d.ts +61 -61
- package/lib/ec-component/section-container-ec/section-container-ec.component.d.ts +22 -22
- package/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.d.ts +37 -37
- package/lib/ec-component/share-block-ec/share-block-ec.component.d.ts +26 -26
- package/lib/ec-component/sidebar-ec/sidebar-ec.component.d.ts +23 -23
- package/lib/ec-component/stores-ec/stores-ec.component.d.ts +54 -54
- package/lib/ec-component/variants-ec/variants-ec.component.d.ts +14 -14
- package/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.d.ts +60 -60
- package/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.d.ts +105 -105
- package/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.d.ts +46 -46
- package/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.d.ts +44 -44
- package/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.d.ts +14 -14
- package/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.d.ts +38 -38
- package/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.d.ts +38 -38
- package/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.d.ts +53 -53
- package/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.d.ts +6 -6
- package/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.d.ts +5 -5
- package/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.d.ts +5 -5
- package/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.d.ts +43 -43
- package/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.d.ts +64 -64
- package/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.d.ts +46 -46
- package/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.d.ts +41 -41
- package/lib/ec-component/widgets-ec/price-ec/price-ec.component.d.ts +12 -12
- package/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.d.ts +28 -28
- package/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.d.ts +24 -24
- package/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.d.ts +14 -14
- package/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.d.ts +44 -44
- package/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.d.ts +38 -38
- package/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.d.ts +42 -42
- package/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.d.ts +66 -66
- package/lib/ec-directive/add-action-redirect.directive.d.ts +26 -26
- package/lib/ec-directive/auth-wholesaler.directive.d.ts +17 -17
- package/lib/ec-directive/index.d.ts +6 -6
- package/lib/ec-directive/product-mini-standard.directive.d.ts +19 -19
- package/lib/ec-directive/product-off.directive.d.ts +22 -22
- package/lib/ec-directive/product-stock.directive.d.ts +15 -15
- package/lib/ec-directive/reload-view.directive.d.ts +8 -8
- package/lib/ec-pipe/ec-currency-symbol.pipe.d.ts +19 -19
- package/lib/ec-pipe/ec-sanitizer-html.pipe.d.ts +7 -7
- package/lib/ec-pipe/ec-sanitizer-url.pipe.d.ts +7 -7
- package/lib/ec-pipe/index.d.ts +4 -4
- package/lib/guards/able-buyer-guard.service.d.ts +8 -8
- package/lib/guards/auth-guard.service.d.ts +8 -8
- package/lib/guards/checkout-ready.service.d.ts +8 -8
- package/lib/guards/loggedin-guard.service.d.ts +8 -8
- package/lib/guards/user-role-guard.service.d.ts +8 -8
- package/lib/interceptors/auth.interceptor.d.ts +9 -9
- package/lib/interceptors/customer.interceptor.d.ts +9 -9
- package/lib/interfaces/Script.d.ts +5 -5
- package/lib/interfaces/analytics/event-key.model.d.ts +1 -1
- package/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.d.ts +5 -5
- package/lib/interfaces/analytics/gtm-config.d.ts +6 -6
- package/lib/interfaces/analytics/metricool-pixel.d.ts +3 -3
- package/lib/interfaces/block.d.ts +33 -33
- package/lib/interfaces/cart/cart-affordable.d.ts +8 -8
- package/lib/interfaces/cart-item.d.ts +8 -8
- package/lib/interfaces/checkout/checkout-error.d.ts +7 -7
- package/lib/interfaces/checkout-data.d.ts +6 -6
- package/lib/interfaces/choose-options/filter-option.d.ts +16 -16
- package/lib/interfaces/choose-options/options-of-product-list.d.ts +5 -5
- package/lib/interfaces/cookies.d.ts +49 -49
- package/lib/interfaces/core.interfaces.d.ts +4 -4
- package/lib/interfaces/coupon.d.ts +5 -5
- package/lib/interfaces/currencyConfig.d.ts +10 -10
- package/lib/interfaces/deserializable.d.ts +3 -3
- package/lib/interfaces/faqs.d.ts +12 -12
- package/lib/interfaces/filter.d.ts +51 -51
- package/lib/interfaces/filterStep.d.ts +29 -29
- package/lib/interfaces/navbar-items.d.ts +9 -9
- package/lib/interfaces/observable-error.interface.d.ts +5 -5
- package/lib/interfaces/paginate.d.ts +1 -1
- package/lib/interfaces/parameters.d.ts +10 -10
- package/lib/interfaces/paramsInterfaces/paramsProductsWithUniqueVariant.d.ts +6 -6
- package/lib/interfaces/product.d.ts +46 -46
- package/lib/interfaces/selection.d.ts +10 -10
- package/lib/interfaces/step.d.ts +8 -8
- package/lib/interfaces/store.d.ts +17 -17
- package/lib/ng-easycommerce.module.d.ts +5 -5
- package/lib/pipes/order-by.pipe.d.ts +5 -5
- package/lib/services/account/orders.service.d.ts +29 -29
- package/lib/services/analytics.service.d.ts +21 -21
- package/lib/services/auth.service.d.ts +116 -116
- package/lib/services/banner.service.d.ts +26 -26
- package/lib/services/blocks/blocks-repository.service.d.ts +19 -19
- package/lib/services/blocks/blocks.service.d.ts +25 -25
- package/lib/services/captcha.service.d.ts +76 -76
- package/lib/services/cart.service.d.ts +139 -139
- package/lib/services/channel-config.service.d.ts +35 -35
- package/lib/services/checkout/addressing.service.d.ts +239 -239
- package/lib/services/checkout/checkout.service.d.ts +71 -71
- package/lib/services/checkout/error-handler.service.d.ts +19 -19
- package/lib/services/checkout/payment.service.d.ts +32 -32
- package/lib/services/checkout/shipment.service.d.ts +58 -58
- package/lib/services/concatenated-associations.service.d.ts +57 -57
- package/lib/services/cookies.service.d.ts +66 -66
- package/lib/services/currency.service.d.ts +65 -65
- package/lib/services/dataform.service.d.ts +13 -13
- package/lib/services/filters.service.d.ts +48 -48
- package/lib/services/gift-card.service.d.ts +19 -19
- package/lib/services/ip-address.service.d.ts +10 -10
- package/lib/services/options.service.d.ts +61 -61
- package/lib/services/pagination.service.d.ts +30 -30
- package/lib/services/parameters.service.d.ts +18 -18
- package/lib/services/products/product-detail.service.d.ts +115 -115
- package/lib/services/products/products.service.d.ts +101 -101
- package/lib/services/reviews.service.d.ts +71 -71
- package/lib/services/stores.service.d.ts +11 -11
- package/lib/services/windows.service.d.ts +13 -13
- package/lib/services/wishlist.service.d.ts +13 -13
- package/lib/strategies/standard.strategy.d.ts +12 -12
- package/lib/utils/analytics/doppler.service.d.ts +9 -9
- package/lib/utils/analytics/facebook-pixel.service.d.ts +23 -23
- package/lib/utils/analytics/google-analytics.service.d.ts +30 -30
- package/lib/utils/analytics/gtm.service.d.ts +34 -34
- package/lib/utils/analytics/metricool-pixel.service.d.ts +9 -9
- package/lib/utils/options-of-product-list-data.service.d.ts +5 -5
- package/lib/utils/order-util.service.d.ts +12 -12
- package/lib/utils/payment-utils.service.d.ts +5 -5
- package/lib/utils/shipment-transformer.service.d.ts +8 -8
- package/lib/utils/toast.service.d.ts +15 -15
- package/lib/utils/utils.service.d.ts +4 -4
- package/ng-easycommerce.d.ts +33 -33
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +144 -144
|
@@ -1,354 +1,354 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
|
-
import { Component, Input } from '@angular/core';
|
|
17
|
-
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
|
18
|
-
import { BehaviorSubject } from 'rxjs';
|
|
19
|
-
import { filter } from 'rxjs/operators';
|
|
20
|
-
import { ComponentHelper } from '../../../classes/component-helper';
|
|
21
|
-
import { AuthService } from '../../../services/auth.service';
|
|
22
|
-
import { CartService } from '../../../services/cart.service';
|
|
23
|
-
import { AddressingService } from '../../../services/checkout/addressing.service';
|
|
24
|
-
import { ToastService } from '../../../utils/toast.service';
|
|
25
|
-
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
26
|
-
import { Constants } from '../../../core.consts';
|
|
27
|
-
import { ParametersService } from '../../../services/parameters.service';
|
|
28
|
-
import { ChannelConfigService } from '../../../services/channel-config.service';
|
|
29
|
-
let DataFormEcComponent = class DataFormEcComponent extends ComponentHelper {
|
|
30
|
-
constructor(authService, fb, toast, addressingService, cartService, modalService, paramsService, consts, channelConfig) {
|
|
31
|
-
super();
|
|
32
|
-
this.authService = authService;
|
|
33
|
-
this.fb = fb;
|
|
34
|
-
this.toast = toast;
|
|
35
|
-
this.addressingService = addressingService;
|
|
36
|
-
this.cartService = cartService;
|
|
37
|
-
this.modalService = modalService;
|
|
38
|
-
this.paramsService = paramsService;
|
|
39
|
-
this.consts = consts;
|
|
40
|
-
this.channelConfig = channelConfig;
|
|
41
|
-
this.isLastOne = false;
|
|
42
|
-
this.countriesSubject = new BehaviorSubject([]);
|
|
43
|
-
this.provincesSubject = new BehaviorSubject([]);
|
|
44
|
-
this.documentTypesSubject = new BehaviorSubject([]);
|
|
45
|
-
this.countriesFacturacionSubject = new BehaviorSubject([]);
|
|
46
|
-
this.provincesFacturacionSubject = new BehaviorSubject([]);
|
|
47
|
-
this.documentTypesFacturacionSubject = new BehaviorSubject([]);
|
|
48
|
-
this.countries$ = this.countriesSubject.asObservable();
|
|
49
|
-
this.provinces$ = this.provincesSubject.asObservable();
|
|
50
|
-
this.documentTypes$ = this.documentTypesSubject.asObservable();
|
|
51
|
-
this.countriesFacturacion$ = this.countriesFacturacionSubject.asObservable();
|
|
52
|
-
this.provincesFacturacion$ = this.provincesFacturacionSubject.asObservable();
|
|
53
|
-
this.documentTypesFacturacion$ = this.documentTypesFacturacionSubject.asObservable();
|
|
54
|
-
this.require_login = false;
|
|
55
|
-
this.loading = false;
|
|
56
|
-
this.form_ready = false;
|
|
57
|
-
this.allready_data = false;
|
|
58
|
-
this.addressBook = [];
|
|
59
|
-
this.addressBookSelected = { id: 0, notes: "" };
|
|
60
|
-
this.finish = false; //Esta variable se usa para mostrar el boton de finalizar.
|
|
61
|
-
this.validado = false;
|
|
62
|
-
this.viewDataFacturacion = true;
|
|
63
|
-
this.params = {};
|
|
64
|
-
this.selectAddres = false;
|
|
65
|
-
this.postalCodePattern = '^[0-9][0-9]*$';
|
|
66
|
-
/**
|
|
67
|
-
* @description filtra los paises de acuerdo al a los codigos retornados en la funcion getCountries.
|
|
68
|
-
* Casos de usos: Si getCountries es vacio, retorna el arreglo que ingresa por parametro.
|
|
69
|
-
* Si getCountries contiene valores que no coinciden, retorna el arreglo que ingresa por parametro.
|
|
70
|
-
* De lo contrario retorna los valores filtrados.
|
|
71
|
-
* @param countries Arreglo que contiene los countries recibidos en la subscripcion del observable.
|
|
72
|
-
* @returns un arreglo de countries.
|
|
73
|
-
*/
|
|
74
|
-
this.filterCountryByCode = (countries) => {
|
|
75
|
-
if (this.consts.getCountries().length > 0) {
|
|
76
|
-
let countriesFiltered = countries.filter(elem => this.consts.getCountries().includes(elem.code));
|
|
77
|
-
if (countriesFiltered.length > 0) {
|
|
78
|
-
return countriesFiltered;
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
console.error('El/los codigo/s ingresado/s no coinciden con los provistos desde el backend');
|
|
82
|
-
return countries;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
return countries;
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
this.showFormFacturacion = () => {
|
|
90
|
-
this.viewDataFacturacion = !this.viewDataFacturacion;
|
|
91
|
-
if (!this.viewDataFacturacion) {
|
|
92
|
-
this.countriesFacturacion$.subscribe(res => {
|
|
93
|
-
var _a, _b, _c, _d;
|
|
94
|
-
if (res && res.length > 0) {
|
|
95
|
-
this.checkoutFormFacturacion.controls['countryCode'].setValue(res[0].code);
|
|
96
|
-
// Provincia
|
|
97
|
-
this.checkoutFormFacturacion.controls['provinceCode'].setValue((_a = res[0]) === null || _a === void 0 ? void 0 : _a.provinces[0].code);
|
|
98
|
-
this.provincesFacturacionSubject.next((_b = res[0]) === null || _b === void 0 ? void 0 : _b.provinces);
|
|
99
|
-
// Documento
|
|
100
|
-
this.checkoutFormFacturacion.controls['documentType'].setValue((_c = res[0]) === null || _c === void 0 ? void 0 : _c.documentTypes[0].code);
|
|
101
|
-
this.documentTypesFacturacionSubject.next((_d = res[0]) === null || _d === void 0 ? void 0 : _d.documentTypes);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
this.onFormChange();
|
|
106
|
-
return this.viewDataFacturacion;
|
|
107
|
-
};
|
|
108
|
-
this.onFormValid = () => {
|
|
109
|
-
};
|
|
110
|
-
this.onInputChange = () => this.form_ready = false;
|
|
111
|
-
this.onCountrySelected = (value) => {
|
|
112
|
-
this.checkoutForm.controls['countryCode'].setValue(value == 'null' ? null : value);
|
|
113
|
-
this.checkoutForm.controls['provinceCode'].setValue(null);
|
|
114
|
-
this.checkoutForm.controls['documentType'].setValue('');
|
|
115
|
-
//Provinces
|
|
116
|
-
let provinces = value && value != 'null' ?
|
|
117
|
-
this.countriesSubject.value.find(country => country.code == value).provinces
|
|
118
|
-
:
|
|
119
|
-
[];
|
|
120
|
-
this.provincesSubject.next(provinces);
|
|
121
|
-
this.checkoutForm.controls['provinceCode'].setValue(provinces[0].code);
|
|
122
|
-
//Document types
|
|
123
|
-
let documentTypes = value && value != 'null' ?
|
|
124
|
-
this.countriesSubject.value.find(country => country.code == value).documentTypes
|
|
125
|
-
:
|
|
126
|
-
[];
|
|
127
|
-
this.documentTypesSubject.next(documentTypes);
|
|
128
|
-
this.checkoutForm.controls['documentType'].setValue(documentTypes[0].code);
|
|
129
|
-
};
|
|
130
|
-
this.onCountrySelectedFacturacion = (value) => {
|
|
131
|
-
this.checkoutFormFacturacion.controls['countryCode'].setValue(value == 'null' ? null : value);
|
|
132
|
-
this.checkoutFormFacturacion.controls['provinceCode'].setValue(null);
|
|
133
|
-
this.checkoutFormFacturacion.controls['documentType'].setValue('');
|
|
134
|
-
//Provinces
|
|
135
|
-
let provinces = value && value != 'null' ?
|
|
136
|
-
this.countriesFacturacionSubject.value.find(country => country.code == value).provinces
|
|
137
|
-
:
|
|
138
|
-
[];
|
|
139
|
-
this.provincesFacturacionSubject.next(provinces);
|
|
140
|
-
this.checkoutFormFacturacion.controls['provinceCode'].setValue(provinces[0].code);
|
|
141
|
-
//Document types
|
|
142
|
-
let documentTypes = value && value != 'null' ?
|
|
143
|
-
this.countriesFacturacionSubject.value.find(country => country.code == value).documentTypes
|
|
144
|
-
:
|
|
145
|
-
[];
|
|
146
|
-
this.documentTypesFacturacionSubject.next(documentTypes);
|
|
147
|
-
this.checkoutFormFacturacion.controls['documentType'].setValue(documentTypes[0].code);
|
|
148
|
-
};
|
|
149
|
-
this.onProvincesSelected = (value) => this.checkoutForm.controls['provinceCode'].setValue(value == 'null' ? null : value);
|
|
150
|
-
this.onProvincesSelectedFacturacion = (value) => this.checkoutFormFacturacion.controls['provinceCode'].setValue(value == 'null' ? null : value);
|
|
151
|
-
this.onDocumentTypesSelected = (value) => this.checkoutForm.controls['documentType'].setValue(value == '' ? '' : value);
|
|
152
|
-
this.onDocumentTypesSelectedFacturacion = (value) => this.checkoutForm.controls['documentType'].setValue(value == '' ? '' : value);
|
|
153
|
-
this.verifyValidate = (e, items) => __awaiter(this, void 0, void 0, function* () {
|
|
154
|
-
//console.log("Verifying: ", e)
|
|
155
|
-
this.require_login = false;
|
|
156
|
-
if (e) {
|
|
157
|
-
this.checkoutForm.controls['email'].setValue(e);
|
|
158
|
-
this.authService.isAuthenticated() && this.checkoutForm.get('email').disable({ onlySelf: true });
|
|
159
|
-
}
|
|
160
|
-
if (this.checkoutForm.valid) {
|
|
161
|
-
// if (this.cartService.channelConfig.applyOrderLot){
|
|
162
|
-
// items.forEach(item => {
|
|
163
|
-
// if (!item.lot[0]){
|
|
164
|
-
// // console.log(this.checkoutForm.controls['city']['value'])
|
|
165
|
-
// this.cartService.addToLot(item.product,0,item.variant_id,0,item.item_id,item.quantity,item.product.price,item.quantity,item.discount,item.product.price*item.quantity,'new','','',0,this.checkoutForm.controls['city']['value']+ ' - ' + this.checkoutForm.controls['street']['value'], 'newlot');
|
|
166
|
-
// }
|
|
167
|
-
// });
|
|
168
|
-
// }
|
|
169
|
-
this.emitResult();
|
|
170
|
-
}
|
|
171
|
-
else
|
|
172
|
-
this.showError('invalid-form');
|
|
173
|
-
});
|
|
174
|
-
this.showError = (error_message) => { this.toast.show(error_message); return true; };
|
|
175
|
-
this.emitResult = () => __awaiter(this, void 0, void 0, function* () {
|
|
176
|
-
this.loading = true;
|
|
177
|
-
let data = { shippingAddress: Object.assign(Object.assign({}, this.checkoutForm.getRawValue()), { phoneNumber: this.checkoutForm.value.phoneNumber.toString() }), notes: (this.checkoutForm.getRawValue()).notes };
|
|
178
|
-
if (!this.viewDataFacturacion && this.checkoutFormFacturacion.valid)
|
|
179
|
-
data = Object.assign(Object.assign({}, data), { notes: data.notes, billingAddress: this.checkoutFormFacturacion.getRawValue() });
|
|
180
|
-
try {
|
|
181
|
-
let result = yield this.addressingService.setAddress(data);
|
|
182
|
-
if (result === false) {
|
|
183
|
-
this.require_login = true;
|
|
184
|
-
this.toast.show('El email ya está registrado, inicie sesión.');
|
|
185
|
-
}
|
|
186
|
-
else if (result !== false && result !== undefined) {
|
|
187
|
-
this.form_ready = true;
|
|
188
|
-
this.allready_data = true;
|
|
189
|
-
this.nextStep();
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
catch (e) {
|
|
193
|
-
this.toast.show('operation-error');
|
|
194
|
-
}
|
|
195
|
-
this.loading = false;
|
|
196
|
-
});
|
|
197
|
-
this.setSelectAddress = (addressSelect) => {
|
|
198
|
-
this.addressBook.map(address => address.selected = address.id === addressSelect.id);
|
|
199
|
-
this.addressBookSelected.id = this.addressBook.find(address => address.selected).id || 0;
|
|
200
|
-
};
|
|
201
|
-
this.selectAddress = (items) => __awaiter(this, void 0, void 0, function* () {
|
|
202
|
-
this.loading = true;
|
|
203
|
-
let addressSelected = this.addressBook.find(address => address.selected);
|
|
204
|
-
if (addressSelected) {
|
|
205
|
-
try {
|
|
206
|
-
if (!this.addressBookSelected.id) {
|
|
207
|
-
this.addressBookSelected.id = addressSelected.id || 0;
|
|
208
|
-
}
|
|
209
|
-
const request = {
|
|
210
|
-
selected: this.addressBookSelected,
|
|
211
|
-
shippingAddress: addressSelected
|
|
212
|
-
};
|
|
213
|
-
const resultSede = yield this.addressingService.setHeadquarter(request);
|
|
214
|
-
if (resultSede) {
|
|
215
|
-
if (this.cartService.channelConfig.applyOrderLot) {
|
|
216
|
-
items.forEach(item => {
|
|
217
|
-
if (!item.lot[0]) {
|
|
218
|
-
// console.log(item)
|
|
219
|
-
this.cartService.addToLot(item.product, 0, item.variant_id, 0, item.item_id, item.quantity, item.product.price, item.quantity, item.discount, item.product.price * item.quantity, 'new', '', '', 0, resultSede.shippingAddress.city + ' - ' + resultSede.shippingAddress.street, 'newlot');
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
this.form_ready = true;
|
|
224
|
-
this.allready_data = true;
|
|
225
|
-
this.nextStep();
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
this.toast.show('operation-error');
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
catch (e) {
|
|
232
|
-
this.toast.show('operation-error');
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
this.showError('invalid-form');
|
|
237
|
-
}
|
|
238
|
-
this.loading = false;
|
|
239
|
-
});
|
|
240
|
-
this.getMode = () => {
|
|
241
|
-
switch (this.addressingService.modeSelectAddress) {
|
|
242
|
-
case 'ONLY_LOAD_ADDRESS':
|
|
243
|
-
return true;
|
|
244
|
-
case 'ONLY_ADDRESS_SELECTION':
|
|
245
|
-
if (this.authService.isAuthenticated()) {
|
|
246
|
-
return false;
|
|
247
|
-
}
|
|
248
|
-
return true;
|
|
249
|
-
case 'LOAD_ADDRESS_AND_SELECTION':
|
|
250
|
-
if (this.authService.isAuthenticated()) {
|
|
251
|
-
return this.selectAddres;
|
|
252
|
-
}
|
|
253
|
-
return true;
|
|
254
|
-
}
|
|
255
|
-
};
|
|
256
|
-
this.setMode = (mode) => this.selectAddres = mode == "carga";
|
|
257
|
-
this.getCountry = (code) => { var _a; return ((_a = this.addressingService.countriesList.find(paises => paises.code.toLocaleLowerCase().includes(code.toLocaleLowerCase()))) === null || _a === void 0 ? void 0 : _a.name) || ""; };
|
|
258
|
-
this.getProvince = (code) => { var _a; return ((_a = this.addressingService.provinceList.find(ct => ct.code == code)) === null || _a === void 0 ? void 0 : _a.name) || ""; };
|
|
259
|
-
this.getDocumentType = (code) => { var _a; return ((_a = this.addressingService.documentTypes.find(dt => dt.code == code)) === null || _a === void 0 ? void 0 : _a.name) || ""; };
|
|
260
|
-
this.getLabelNotesParam = () => this.hasParams(this.params, 'label_notes_' + this.consts.getChannel() + '_' + this.consts.getLocale().split('_')[0]);
|
|
261
|
-
this.getParamByChannelAndLanguage = (nameParam) => this.hasParams(this.params, nameParam + this.consts.getChannel() + '_' + this.consts.getLocale().split('_')[0]);
|
|
262
|
-
this.ecOnConstruct();
|
|
263
|
-
this.checkoutForm = this.fb.group(Object.assign(Object.assign({}, this.addressingService.getTypeForm().configForm.formAddres), { postcode: ['', [Validators.required, Validators.pattern(this.postalCodePattern)]] // Se agrega para que sólo acepte códigos postales mayores que cero
|
|
264
|
-
}));
|
|
265
|
-
this.checkoutForm.statusChanges
|
|
266
|
-
.pipe(filter(() => { this.onFormChange(); return this.checkoutForm.valid; }))
|
|
267
|
-
.subscribe(() => this.onFormValid());
|
|
268
|
-
this.checkoutFormFacturacion = this.fb.group(Object.assign(Object.assign({}, this.addressingService.getTypeForm().configForm.formBilling), { postcode: ['', [Validators.required, Validators.pattern(this.postalCodePattern)]] // Se agrega para que sólo acepte códigos postales mayores que cero
|
|
269
|
-
}));
|
|
270
|
-
this.checkoutFormFacturacion.statusChanges
|
|
271
|
-
.pipe(filter(() => { this.onFormChange(); return this.checkoutFormFacturacion.valid; }))
|
|
272
|
-
.subscribe(() => this.onFormValid());
|
|
273
|
-
}
|
|
274
|
-
ngOnInit() {
|
|
275
|
-
var _a;
|
|
276
|
-
this.paramsService.parameters.subscribe(res => this.params = res);
|
|
277
|
-
this.addressingService.initialize(this.step_id);
|
|
278
|
-
const localEmail = localStorage.getItem('mail');
|
|
279
|
-
this.authService.isAuthenticated() && this.checkoutForm.controls['email'].setValue(((_a = this.authService.getCustomer()) === null || _a === void 0 ? void 0 : _a.email) || localEmail);
|
|
280
|
-
this.authService.isAuthenticated() && this.checkoutForm.get('email').disable({ onlySelf: true });
|
|
281
|
-
this.addressingService.getAddressingData().then(res => {
|
|
282
|
-
let countries = this.filterCountryByCode(res);
|
|
283
|
-
this.countriesSubject.next(countries);
|
|
284
|
-
this.countriesFacturacionSubject.next(countries);
|
|
285
|
-
});
|
|
286
|
-
(this.addressingService.modeSelectAddress == 'LOAD_ADDRESS_AND_SELECTION' || this.addressingService.modeSelectAddress == 'ONLY_ADDRESS_SELECTION')
|
|
287
|
-
&& this.addressingService.getAddressBook().then(res => {
|
|
288
|
-
this.addressBook = res && res || null;
|
|
289
|
-
this.addressBook == null && this.setMode('carga');
|
|
290
|
-
});
|
|
291
|
-
this.countries$.subscribe(res => {
|
|
292
|
-
var _a, _b, _c, _d;
|
|
293
|
-
if (res && res.length > 0) {
|
|
294
|
-
this.checkoutForm.controls['countryCode'].setValue(res[0].code);
|
|
295
|
-
// Provincia
|
|
296
|
-
this.checkoutForm.controls['provinceCode'].setValue((_a = res[0]) === null || _a === void 0 ? void 0 : _a.provinces[0].code);
|
|
297
|
-
this.provincesSubject.next((_b = res[0]) === null || _b === void 0 ? void 0 : _b.provinces);
|
|
298
|
-
// Documento
|
|
299
|
-
this.checkoutForm.controls['documentType'].setValue((_c = res[0]) === null || _c === void 0 ? void 0 : _c.documentTypes[0].code);
|
|
300
|
-
this.documentTypesSubject.next((_d = res[0]) === null || _d === void 0 ? void 0 : _d.documentTypes);
|
|
301
|
-
}
|
|
302
|
-
});
|
|
303
|
-
this.ecOnInit();
|
|
304
|
-
}
|
|
305
|
-
onFormChange() {
|
|
306
|
-
if (this.checkoutForm.valid) {
|
|
307
|
-
if (!this.viewDataFacturacion && this.checkoutFormFacturacion.valid) {
|
|
308
|
-
this.validado = true;
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
311
|
-
if (this.viewDataFacturacion && this.checkoutForm.valid) {
|
|
312
|
-
this.validado = true;
|
|
313
|
-
return;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
this.validado = false;
|
|
317
|
-
}
|
|
318
|
-
openModal(template) {
|
|
319
|
-
this.modalRef = this.modalService.show(template, { class: 'modal-lg ', keyboard: false, backdrop: 'static' });
|
|
320
|
-
}
|
|
321
|
-
prueba(x) {
|
|
322
|
-
console.log(x);
|
|
323
|
-
}
|
|
324
|
-
};
|
|
325
|
-
DataFormEcComponent.ctorParameters = () => [
|
|
326
|
-
{ type: AuthService },
|
|
327
|
-
{ type: FormBuilder },
|
|
328
|
-
{ type: ToastService },
|
|
329
|
-
{ type: AddressingService },
|
|
330
|
-
{ type: CartService },
|
|
331
|
-
{ type: BsModalService },
|
|
332
|
-
{ type: ParametersService },
|
|
333
|
-
{ type: Constants },
|
|
334
|
-
{ type: ChannelConfigService }
|
|
335
|
-
];
|
|
336
|
-
__decorate([
|
|
337
|
-
Input()
|
|
338
|
-
], DataFormEcComponent.prototype, "step_id", void 0);
|
|
339
|
-
__decorate([
|
|
340
|
-
Input()
|
|
341
|
-
], DataFormEcComponent.prototype, "isLastOne", void 0);
|
|
342
|
-
__decorate([
|
|
343
|
-
Input()
|
|
344
|
-
], DataFormEcComponent.prototype, "nextStep", void 0);
|
|
345
|
-
DataFormEcComponent = __decorate([
|
|
346
|
-
Component({
|
|
347
|
-
selector: 'app-dataform-ec',
|
|
348
|
-
template: "<ng-container *ngIf=\"this.channelConfig.channelType != 'b2b' || (this.channelConfig.channelType == 'b2b' && authService.isAuthenticated()); else pleaseLogin\">\r\n<ng-container *ngIf=\"this.addressingService.modeSelectAddress == 'LOAD_ADDRESS_AND_SELECTION' && this.authService.isAuthenticated() && this.addressBook != null\">\r\n <div class=\"container card p-4 mb-3\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12 col-md-10 col-lg-8 text-center\">\r\n <div class=\"btn-group btn-group-toggle\" data-bs-toggle=\"buttons\">\r\n <label [class]=\"'btn btn-outline-secondary ' + (!getMode() ? 'active' : '')\">\r\n <input type=\"radio\" name=\"options\" id=\"option1\" autocomplete=\"off\" checked\r\n (change)=\"setMode('seleccion')\"> {{'select-address' | translate | titlecase}}\r\n </label>\r\n\r\n <label [class]=\"'btn btn-outline-secondary ' + (getMode() ? 'active' : '')\" *ngIf=\"!getParamByChannelAndLanguage('btn_new_address_')\">\r\n <input type=\"radio\" name=\"options\" id=\"option2\" autocomplete=\"off\" (change)=\"setMode('carga')\">\r\n {{ 'new-address' | translate | titlecase}}\r\n </label>\r\n\r\n <label [class]=\"'btn btn-outline-secondary ' + (selectAddress ? 'active' : '')\" *ngIf=\"getParamByChannelAndLanguage('btn_new_address_') as param\">\r\n <input type=\"radio\" name=\"options\" id=\"option2\" autocomplete=\"off\" (change)=\"setMode('carga')\">\r\n {{ param.value}}\r\n </label>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"getMode(); else addressSelection\">\r\n <div *ngIf=\"!require_login; else requireLoginView\">\r\n\r\n <ng-container *ngIf=\"this.addressingService.modeSelectAddress == 'ONLY_LOAD_ADDRESS'\">\r\n <div class=\"checkout-title my-2\">\r\n <h3>{{'billing-details'|translate}}</h3>\r\n </div>\r\n </ng-container>\r\n\r\n <form (submit)=\"verifyValidate(false,this.cartService.items)\">\r\n <div class=\"row mt-df\"><!--Fila 1-->\r\n <div class=\"form-group col-12 col-md-6\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.firstName.enabled\">\r\n <label class=\"field-label\">{{'first-name'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.firstName.required\"\r\n class=\"required\">*</span></label>\r\n <input class=\"form-control\" type=\"text\" name=\"firstName\"\r\n [formControl]=\"checkoutForm.controls['firstName']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.firstName.touched && checkoutForm.controls.firstName.errors?.required\">\r\n <span class=\"text-danger\">{{'first-name-help1'|translate}}</span>\r\n\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.firstName.touched && checkoutForm.controls.firstName.errors?.pattern\">\r\n <span class=\"text-danger\">\r\n {{'first-name-help2'|translate}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"form-group col-12 col-md-6\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.lastName.enabled\">\r\n <label class=\"field-label\">{{'last-name'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.lastName.required\"\r\n class=\"required\">*</span></label>\r\n <input class=\"form-control\" type=\"text\" name=\"lastName\"\r\n [formControl]=\"checkoutForm.controls['lastName']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.lastName.touched && checkoutForm.controls.lastName.errors?.required\">\r\n <span class=\"text-danger\">{{'last-name-help1'|translate}}</span>\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.lastName.touched && checkoutForm.controls.lastName.errors?.pattern\">\r\n <span class=\"text-danger\">{{'last-name-help2'|translate}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row mt-df\"><!--Fila 2-->\r\n <div class=\"form-group col-12 col-md-6\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.phoneNumber.enabled\">\r\n <label class=\"field-label\">{{'phone'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.phoneNumber.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"phoneNumber\"\r\n [formControl]=\"checkoutForm.controls['phoneNumber']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.phoneNumber.touched && checkoutForm.controls.phoneNumber.errors?.required\">\r\n <span class=\"text-danger\">\r\n\r\n {{'phone-help1'|translate}}\r\n </span>\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.phoneNumber.touched && checkoutForm.controls.phoneNumber.errors?.pattern\">\r\n <span class=\"text-danger\">\r\n {{'phone-help2'|translate}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"form-group col-12 col-md-6\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.email.enabled\">\r\n <label class=\"field-label\">{{'email-address'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.email.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"email\" name=\"email\"\r\n [formControl]=\"checkoutForm.controls['email']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.email.touched && checkoutForm.controls.email.errors?.required\">\r\n <span class=\"text-danger\">\r\n {{'email-address-help1'|translate}}\r\n </span>\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.email.touched && checkoutForm.controls.email.errors?.email\">\r\n <span class=\"text-danger\">\r\n {{'email-address-help2'|translate}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-df\"><!--Fila 3-->\r\n <ng-container *ngIf=\"this.addressingService.getTypeForm().viewForms.countryCode.enabled\">\r\n <div class=\"form-group col-12 col-md-4\" *ngIf=\"(countries$ | async) as countries\">\r\n <label class=\"field-label\">{{'country'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.countryCode.required\"\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select\" name=\"countryCode\"\r\n [formControl]=\"checkoutForm.controls['countryCode']\"\r\n (change)=\"onCountrySelected($event.target.value)\">\r\n <!-- <option selected [value]=\"countries[0].code\">{{ 'choose-country' | translate }}</option> -->\r\n <option *ngFor=\"let country of countries\" [value]=\"country.code\">{{ country.name }}</option>\r\n </select>\r\n <div *ngIf=\"checkoutForm.controls.countryCode.touched && checkoutForm.controls.countryCode.errors?.required\"\r\n class=\"text text-danger\">\r\n {{'country-help'|translate}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"this.addressingService.getTypeForm().viewForms.provinceCode.enabled\">\r\n <div class=\"form-group col-12 col-md-4\" *ngIf=\"(provinces$ | async) as provinces\">\r\n <label class=\"field-label\">{{'state'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.provinceCode.required\"\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select\" name=\"provinceCode\"\r\n (change)=\"onProvincesSelected($event.target.value)\"\r\n [formControl]=\"checkoutForm.controls['provinceCode']\">\r\n<!-- <option selected [value]=\"null\">{{ 'choose-province' | translate }}</option>\r\n --> <option *ngFor=\"let province of provinces\" [value]=\"province.code\">{{ province.name }}\r\n </option>\r\n </select>\r\n <div *ngIf=\"checkoutForm.controls.provinceCode.touched && checkoutForm.controls.provinceCode.errors?.required\"\r\n class=\"text text-danger\">\r\n {{'state-help'|translate}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"form-group col-12 col-md-4\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.city.enabled\">\r\n <label class=\"field-label\">{{'town-city'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.city.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"city\"\r\n [formControl]=\"checkoutForm.controls['city']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.city.touched && checkoutForm.controls.city.errors?.required\">\r\n <span class=\"text-danger\">{{'town-city-help'|translate}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-df\"><!--Fila 4-->\r\n <div class=\"form-group col-12 col-md-8\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.street.enabled\">\r\n <label class=\"field-label\">{{'address'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.street.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"street\"\r\n [formControl]=\"checkoutForm.controls['street']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.street.touched && checkoutForm.controls.street.errors?.required\">\r\n <span class=\"text-danger\">{{'address-help1'|translate}}</span>\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.street.touched && checkoutForm.controls.street.errors?.maxlength\">\r\n <span class=\"text-danger\">{{'address-help2'|translate}}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- form direcci\u00F3n -->\r\n <div class=\"form-group col-12 col-md-4\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.postcode.enabled\">\r\n <label class=\"field-label\">{{'postal-code'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.postcode.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"postcode\"\r\n [formControl]=\"checkoutForm.controls['postcode']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.postcode.touched && checkoutForm.controls.postcode.errors?.required\">\r\n <span class=\"text-danger\">{{'postal-code-help'|translate}}</span>\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.postcode.touched && checkoutForm.controls.postcode.errors?.pattern\">\r\n <span class=\"text-danger\"> {{'postal-code-pattern-error' | translate}} </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-df\"><!--Fila 5-->\r\n <ng-container *ngIf=\"this.addressingService.getTypeForm().viewForms.documentType.enabled\">\r\n <div class=\"form-group col-12 col-md-4\" *ngIf=\"(documentTypes$ | async) as documentTypes\">\r\n <label class=\"field-label\">{{'document-type'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentType.required\"\r\n class=\"required\">*</span></label>\r\n <select name=\"documentType\" class=\"form-select\"\r\n (change)=\"onDocumentTypesSelected($event.target.value)\"\r\n [formControl]=\"checkoutForm.controls['documentType']\">\r\n<!-- <option [value]=\"''\" selected>{{'document-type'|translate}}</option>\r\n --> <option *ngFor=\"let item of documentTypes\" [value]=\"item.code\">{{item.name}}</option>\r\n </select>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.documentType.touched && checkoutForm.controls.documentType.errors?.required\">\r\n <span class=\"text-danger\">\r\n {{'type-document-help'|translate}}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"form-group col-12 col-md-4\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentNumber.enabled\">\r\n <label class=\"field-label\">{{'document-number'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentNumber.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\"\r\n [type]=\"'text'\" name=\"documentNumber\"\r\n [formControl]=\"checkoutForm.controls['documentNumber']\" min=\"1\" max=\"99999999999\" value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.documentNumber.touched && checkoutForm.controls.documentNumber.errors?.required\">\r\n <span class=\"text-danger\">\r\n {{'document-number-help'|translate}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-df\"><!--Fila 6-->\r\n <div class=\"form-group col-12 col-md-12\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.enabled\">\r\n\r\n <label class=\"field-label\" *ngIf=\"!getLabelNotesParam()\">{{'notes'|translate}} <span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\"\r\n class=\"required\">*</span></label>\r\n <label class=\"field-label\" *ngIf=\"getLabelNotesParam() as labelnotes\" [innerHTML]=\"labelnotes.value\"><span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\"\r\n class=\"required\">*</span></label>\r\n\r\n <!-- <label class=\"field-label\">{{'notes'|translate}}<span *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\" class=\"required\">*</span></label> -->\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\"\r\n [formControl]=\"checkoutForm.controls['notes']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n </div>\r\n </div>\r\n <div class=\"row mt-df\"><!--Fila 7-->\r\n <div class=\"form-group col-12 col-md-12\">\r\n <label for=\"formFact\"><b>{{ 'same-billing-address' | translate }}</b> <input type=\"checkbox\"\r\n class=\"ms-2\" [checked]=\"viewDataFacturacion\" (change)=\"showFormFacturacion()\"\r\n id=\"formFact\"></label>\r\n </div>\r\n </div>\r\n <div class=\"row mt-df\">\r\n <div class=\"col-12\">\r\n <p>\r\n <!-- <span class=\"required\"></span> -->\r\n <label class=\"required text-underline\">* {{ 'required-fields' | translate }}</label>\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"row mt-df\">\r\n <div class=\"form-group col-12 col-md-12\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.terms.enabled\">\r\n <span *ngIf=\"this.addressingService.getTypeForm().viewForms.terms.required\"\r\n class=\"required\">*</span>\r\n <label class=\"\" for=\"\"> {{ 'accept-terms' | translate }} <input class=\"ms-2\" name=\"terms\"\r\n [formControl]=\"checkoutForm.controls['terms']\" type=\"checkbox\" required\r\n (change)=\"onInputChange()\" /> </label><br />\r\n <a (click)=\"openModal(template)\" role=\"button\" class=\"ms-3 nota-input text-dark\">{{ 'whats-this' |\r\n translate }}</a>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutForm.controls.terms.touched && !checkoutForm.controls.terms.value\">\r\n <span class=\"text-danger\">{{ 'must-accept-terms' | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"viewDataFacturacion ; else datosFormFacturacion\"> </div>\r\n <div class=\"checkout-btn-unique text-end\">\r\n <button type=\"submit\" [disabled]=\"!validado\" class=\"btn valid-btn mt-2\">\r\n {{(isLastOne ? 'finish-checkout' : (allready_data ? 'update' :\r\n 'ready-form')) | translate}}</button>\r\n\r\n\r\n </div>\r\n <div *ngIf=\"loading\" class=\"d-flex flex-column jusitfy-content-center align-items-center\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n </form>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #addressSelection>\r\n\r\n <ng-container *ngIf=\"this.addressingService.modeSelectAddress == 'ONLY_ADDRESS_SELECTION'\">\r\n <div class=\"checkout-title my-2\">\r\n <h3>{{'address-selection'|translate}}</h3>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"this.addressBook; else addressBookNotResult\">\r\n\r\n <ng-container *ngIf=\"this.addressBook?.length ;else addressBookLoading\">\r\n <div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-6 col-12 my-3\" *ngFor=\"let item of addressBook; let i = index\">\r\n <div class=\"card p-3\">\r\n <input class=\"ms-1 mt-3 form-check-input input-size-lg\" type=\"radio\" [name]=\"'n-'+i\" [id]=\"i\"\r\n [checked]=\"item.selected\" (click)=\"setSelectAddress(item)\" (change)=\"onInputChange()\">\r\n <div class=\"ms-5\">\r\n <h4 class=\"card-title\">\r\n <strong>{{'address'|translate}}</strong><br>\r\n <span class=\"text-uppercase h3\">{{item.street}}</span>\r\n </h4>\r\n <div class=\"row\">\r\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\r\n <strong>{{'country'|translate}}</strong> {{getCountry(item.countryCode)}}\r\n </h5>\r\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\r\n <strong>{{'state'|translate}}</strong> {{getProvince(item.provinceCode)}}\r\n </h5>\r\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\r\n <strong>{{'town-city'|translate}}</strong> {{item.city}}\r\n </h5>\r\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\r\n <strong>{{'postal-code'|translate}}</strong> {{item.postcode}}\r\n </h5>\r\n </div>\r\n <div class=\"row px-3\">\r\n <div class=\"card p-2 bg-light w-100\">\r\n <div class=\"card-body\">\r\n <h5 class=\"card-title\">{{'address-contact'|translate}}</h5>\r\n <h6 class=\"card-subtitle mb-2 text-muted\">\r\n <strong>{{'first-name'|translate}}</strong>\r\n {{item.addressContact.firstName}}\r\n </h6>\r\n <h6 class=\"card-subtitle mb-2 text-muted\">\r\n <strong>{{'last-name'|translate}}</strong> {{item.addressContact.lastName}}\r\n </h6>\r\n <h6 class=\"card-subtitle mb-2 text-muted\">\r\n <strong>{{'document-type'|translate}}</strong>\r\n {{getDocumentType(item.addressContact.documentType)}}\r\n </h6>\r\n <h6 class=\"card-subtitle mb-2 text-muted\">\r\n <strong>{{'document-number'|translate}}</strong>\r\n {{item.addressContact.documentNumber}}\r\n </h6>\r\n <h6 class=\"card-subtitle mb-2 text-muted\">\r\n <strong>{{'email-address'|translate}}</strong> {{item.addressContact.email}}\r\n </h6>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"w-100\">\r\n <div class=\"row mt-df\">\r\n <div class=\"form-group col-12 col-md-12\">\r\n <label class=\"field-label\" *ngIf=\"!getLabelNotesParam()\">{{'notes'|translate}}</label>\r\n <label class=\"field-label\"\r\n *ngIf=\"getLabelNotesParam() as labelnotes\" [innerHTML]=\"labelnotes.value\"></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\"\r\n [(ngModel)]=\"this.addressBookSelected.notes\" #ctrl=\"ngModel\" value=\"\" placeholder=\"\"\r\n autocomplete=\"off\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"checkout-btn-unique text-end\">\r\n <button (click)=\"selectAddress(this.cartService.items)\" class=\"btn valid-btn mt-2\">\r\n {{(isLastOne ? 'finish-checkout' : (allready_data ? 'update' :\r\n 'ready-form')) | translate}}\r\n </button>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"d-flex flex-column jusitfy-content-center align-items-center\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n</ng-template>\r\n\r\n\r\n<ng-template #requireLoginView>\r\n <div id=\"loginCheckout\">\r\n <div class=\"d-flex flex-column jusitfy-content-center align-items-center\" *ngIf=\"require_login\">\r\n <div class=\"col-12\">\r\n <app-login-form-ec (ready)=\"verifyValidate($event)\" [redirect]=\"false\" [title]=\"'need-login'\">\r\n </app-login-form-ec>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n\r\n<ng-template #datosFormFacturacion>\r\n <div class=\"container-fluid px-0 px-md-2\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card \">\r\n <div class=\"card-header text-dark text-center\">\r\n <h3>{{'billing-data'|translate}}</h3>\r\n </div>\r\n <div class=\"card-body\">\r\n <form (submit)=\"verifyValidate()\">\r\n <div class=\"row mt-df\">\r\n <!--Fila 1-->\r\n <div class=\"form-group col-12 col-md-6\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.firstName.enabled\">\r\n <label class=\"field-label\">{{'first-name'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.firstName.required\"\r\n class=\"required\">*</span></label>\r\n <input class=\"form-control\" type=\"text\" name=\"firstName\"\r\n [formControl]=\"checkoutFormFacturacion.controls['firstName']\" value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.firstName.touched && checkoutFormFacturacion.controls.firstName.errors?.required\">\r\n <span class=\"text-danger\">{{'first-name-help1'|translate}}</span>\r\n\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.firstName.touched && checkoutFormFacturacion.controls.firstName.errors?.pattern\">\r\n <span class=\"text-danger\">\r\n {{'first-name-help2'|translate}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"form-group col-12 col-md-6\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.lastName.enabled\">\r\n <label class=\"field-label\">{{'last-name'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.lastName.required\"\r\n class=\"required\">*</span></label>\r\n <input class=\"form-control\" type=\"text\" name=\"lastName\"\r\n [formControl]=\"checkoutFormFacturacion.controls['lastName']\" value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.lastName.touched && checkoutFormFacturacion.controls.lastName.errors?.required\">\r\n <span class=\"text-danger\">{{'last-name-help1'|translate}}</span>\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.lastName.touched && checkoutFormFacturacion.controls.lastName.errors?.pattern\">\r\n <span class=\"text-danger\">{{'last-name-help2'|translate}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row mt-df\">\r\n <!--Fila 2-->\r\n <div class=\"form-group col-12 col-md-6\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.phoneNumber.enabled\">\r\n <label class=\"field-label\">{{'phone'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.phoneNumber.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\"\r\n name=\"phoneNumber\"\r\n [formControl]=\"checkoutFormFacturacion.controls['phoneNumber']\" value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.phoneNumber.touched && checkoutFormFacturacion.controls.phoneNumber.errors?.required\">\r\n <span class=\"text-danger\">\r\n {{'phone-help1'|translate}}\r\n </span>\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.phoneNumber.touched && checkoutFormFacturacion.controls.phoneNumber.errors?.pattern\">\r\n <span class=\"text-danger\">\r\n {{'phone-help2'|translate}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"form-group col-12 col-md-6\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.email.enabled\">\r\n <label class=\"field-label\">{{'email-address'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.email.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"email\" name=\"email\"\r\n [formControl]=\"checkoutFormFacturacion.controls['email']\" value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.email.touched && checkoutFormFacturacion.controls.email.errors?.required\">\r\n <span class=\"text-danger\">\r\n {{'email-address-help1'|translate}}\r\n </span>\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.email.touched && checkoutFormFacturacion.controls.email.errors?.email\">\r\n <span class=\"text-danger\">\r\n {{'email-address-help2'|translate}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row mt-df\">\r\n <!--Fila 3-->\r\n\r\n <ng-container\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.countryCode.enabled\">\r\n\r\n <div class=\"form-group col-12 col-md-4\"\r\n *ngIf=\"(countriesFacturacion$ | async) as countries\">\r\n <label class=\"field-label\">{{'country'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.countryCode.required\"\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select\" name=\"countryCode\"\r\n [formControl]=\"checkoutFormFacturacion.controls['countryCode']\"\r\n (change)=\"onCountrySelectedFacturacion($event.target.value)\">\r\n <!-- <option selected [value]=\"null\">{{ 'choose-country' | translate }}</option> -->\r\n <option *ngFor=\"let country of countries\" [value]=\"country.code\">\r\n {{ country.name }}</option>\r\n </select>\r\n <div *ngIf=\"checkoutFormFacturacion.controls.countryCode.touched && checkoutFormFacturacion.controls.countryCode.errors?.required\"\r\n class=\"text text-danger\">\r\n {{'country-help'|translate}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.provinceCode.enabled\">\r\n\r\n <div class=\"form-group col-12 col-md-4\"\r\n *ngIf=\"(provincesFacturacion$ | async) as provinces\">\r\n <label class=\"field-label\">{{'state'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.provinceCode.required\"\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select\" name=\"provinceCode\"\r\n (change)=\"onProvincesSelectedFacturacion($event.target.value)\"\r\n [formControl]=\"checkoutFormFacturacion.controls['provinceCode']\">\r\n <!-- <option selected [value]=\"null\">{{ 'choose-province' | translate }}</option> -->\r\n <option *ngFor=\"let province of provinces\" [value]=\"province.code\">\r\n {{ province.name }}\r\n </option>\r\n </select>\r\n <div *ngIf=\"checkoutFormFacturacion.controls.provinceCode.touched && checkoutFormFacturacion.controls.provinceCode.errors?.required\"\r\n class=\"text text-danger\">\r\n {{'state-help'|translate}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"form-group col-12 col-md-4\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.city.enabled\">\r\n <label class=\"field-label\">{{'town-city'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.city.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"city\"\r\n [formControl]=\"checkoutFormFacturacion.controls['city']\" value=\"\" placeholder=\"\"\r\n autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.city.touched && checkoutFormFacturacion.controls.city.errors?.required\">\r\n <span class=\"text-danger\">{{'town-city-help'|translate}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row mt-df\">\r\n <!--Fila 4-->\r\n <div class=\"form-group col-12 col-md-8\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.street.enabled\">\r\n <label class=\"field-label\">{{'address'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.street.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"street\"\r\n [formControl]=\"checkoutFormFacturacion.controls['street']\" value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.street.touched && checkoutFormFacturacion.controls.street.errors?.required\">\r\n <span class=\"text-danger\">{{'address-help1'|translate}}</span>\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.street.touched && checkoutFormFacturacion.controls.street.errors?.maxlength\">\r\n <span class=\"text-danger\">{{'address-help2'|translate}}</span>\r\n </div>\r\n </div>\r\n <div class=\"form-group col-12 col-md-4\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.postcode.enabled\">\r\n <label class=\"field-label\">{{'postal-code'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.postcode.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"postcode\"\r\n [formControl]=\"checkoutFormFacturacion.controls['postcode']\" value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.postcode.touched && checkoutFormFacturacion.controls.postcode.errors?.required\">\r\n <span class=\"text-danger\">{{'postal-code-help'|translate}}</span>\r\n </div>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.postcode.touched && checkoutFormFacturacion.controls.postcode.errors?.pattern\">\r\n <span class=\"text-danger\">{{'postal-code-pattern-error'|translate}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row mt-df\">\r\n <!--Fila 5-->\r\n <ng-container *ngIf=\"this.addressingService.getTypeForm().viewForms.documentType.enabled\">\r\n <div class=\"form-group col-12 col-md-4\" *ngIf=\"(documentTypesFacturacion$ | async) as documentTypes\">\r\n <label class=\"field-label\">{{'document-type'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentType.required\"\r\n class=\"required\">*</span></label>\r\n <select name=\"documentType\" class=\"form-select\"\r\n [formControl]=\"checkoutFormFacturacion.controls['documentType']\">\r\n <!-- <option [value]=\"''\" selected>{{'document-type'|translate}}</option> -->\r\n <option\r\n *ngFor=\"let item of documentTypes\"\r\n [value]=\"item.code\">{{item.name}}</option>\r\n </select>\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.documentType.touched && checkoutFormFacturacion.controls.documentType.errors?.required\">\r\n <span class=\"text-danger\">\r\n {{'type-document-help'|translate}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"form-group col-12 col-md-4\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentNumber.enabled\">\r\n <label class=\"field-label\">{{'document-number'|translate}}<span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentNumber.required\"\r\n class=\"required\">*</span></label>\r\n <input (change)=\"onInputChange()\" class=\"form-control\"\r\n [type]=\"(this.addressingService.typeForms == 'EUR' ? 'text' : 'number') \"\r\n name=\"documentNumber\"\r\n [formControl]=\"checkoutFormFacturacion.controls['documentNumber']\" min=\"1\"\r\n max=\"99999999999\" value=\"\" placeholder=\"\" autocomplete=\"off\">\r\n <div class=\"text-danger-container\"\r\n *ngIf=\"checkoutFormFacturacion.controls.documentNumber.touched && checkoutFormFacturacion.controls.documentNumber.errors?.required\">\r\n <span class=\"text-danger\">\r\n {{'document-number-help'|translate}}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"row mt-df\">\r\n <div class=\"form-group col-12 col-md-12\"\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.enabled\">\r\n <label class=\"field-label\" *ngIf=\"!getLabelNotesParam()\">{{'notes'|translate}} <span\r\n *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\"\r\n class=\"required\">*</span></label>\r\n <label class=\"field-label\" *ngIf=\"getLabelNotesParam() as labelNotesHtml\">\r\n <div [innerHTML]=\"labelNotesHtml\"></div>\r\n <span *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\" class=\"required\">*</span>\r\n </label>\r\n\r\n <!-- <label class=\"field-label\">{{'notes'|translate}}<span *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\" class=\"required\">*</span></label> -->\r\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\"\r\n [formControl]=\"checkoutFormFacturacion.controls['notes']\" value=\"\"\r\n placeholder=\"\" autocomplete=\"off\">\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n\r\n<ng-template #template>\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body scrol-if\">\r\n <app-section-container-ec [name]=\"'terminos-y-condiciones'\"> </app-section-container-ec>\r\n </div>\r\n\r\n</ng-template>\r\n\r\n\r\n<ng-template #addressBookNotResult>\r\n <div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-12 text-center my-2\">\r\n <h4> {{'address-book-not-result' | translate }} </h4>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #addressBookLoading>\r\n <div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-12 text-center my-2\">\r\n <div class=\"d-flex flex-column jusitfy-content-center align-items-center\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n</ng-container>\r\n\r\n<ng-template #pleaseLogin>\r\n <div class=\"container\">\r\n <p>Por favor <a [routerLink]=\"['/auth/login']\" > Inicie Sesi\u00F3n</a></p>\r\n </div>\r\n</ng-template>",
|
|
349
|
-
providers: [BsModalService],
|
|
350
|
-
styles: [".mt-df{margin:10px auto 0}.btn.btn-outline-secondary.active,.btn.btn-outline-secondary:hover{color:#fff!important}.required{color:red}.field-label{color:#000}.btn.valid-btn{background-color:#000;color:#fff;margin-right:-3px;margin-bottom:10px}label{color:#000}.input-size-lg{width:1.8rem;height:1.8rem}"]
|
|
351
|
-
})
|
|
352
|
-
], DataFormEcComponent);
|
|
353
|
-
export { DataFormEcComponent };
|
|
354
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWZvcm0tZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9jaGVja291dC1lYy9kYXRhZm9ybS1lYy9kYXRhZm9ybS1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBd0IsS0FBSyxFQUFrQyxNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTywwQ0FBMEMsQ0FBQztBQVFqRixJQUFhLG1CQUFtQixHQUFoQyxNQUFhLG1CQUFvQixTQUFRLGVBQWU7SUF1Q3BELFlBQW1CLFdBQXdCLEVBQ2hDLEVBQWUsRUFDZixLQUFtQixFQUNuQixpQkFBb0MsRUFDcEMsV0FBd0IsRUFDdkIsWUFBNEIsRUFDN0IsYUFBZ0MsRUFDaEMsTUFBaUIsRUFDakIsYUFBbUM7UUFDMUMsS0FBSyxFQUFFLENBQUM7UUFUTyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNoQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3ZCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUM3QixrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUE1Q3JDLGNBQVMsR0FBVyxLQUFLLENBQUM7UUFHekIscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEQseUJBQW9CLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7UUFDdEQsZ0NBQTJCLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0QsZ0NBQTJCLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0Qsb0NBQStCLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7UUFFcEUsZUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsRCxlQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xELG1CQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFELDBCQUFxQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4RSwwQkFBcUIsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEUsOEJBQXlCLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWhGLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBR3RCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQix3QkFBbUIsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFBO1FBQzFDLFdBQU0sR0FBVyxLQUFLLENBQUMsQ0FBQywwREFBMEQ7UUFFbEYsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQix3QkFBbUIsR0FBWSxJQUFJLENBQUM7UUFHcEMsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUNqQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUU3QixzQkFBaUIsR0FBRyxlQUFlLENBQUM7UUFvRTNDOzs7Ozs7O1dBT0c7UUFDSyx3QkFBbUIsR0FBRyxDQUFDLFNBQWUsRUFBRSxFQUFFO1lBQy9DLElBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO2dCQUNyQyxJQUFJLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtnQkFDakcsSUFBRyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO29CQUM1QixPQUFPLGlCQUFpQixDQUFBO2lCQUMzQjtxQkFBSTtvQkFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUE7b0JBQzVGLE9BQU8sU0FBUyxDQUFBO2lCQUNuQjthQUVKO2lCQUFJO2dCQUNELE9BQU8sU0FBUyxDQUFBO2FBQ25CO1FBQ0osQ0FBQyxDQUFBO1FBRUYsd0JBQW1CLEdBQUcsR0FBRyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQTtZQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUMzQixJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFOztvQkFDdkMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTt3QkFFMUUsWUFBWTt3QkFDWixJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsT0FDMUQsR0FBRyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FDNUIsQ0FBQTt3QkFDRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxPQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsMENBQUUsU0FBUyxDQUFDLENBQUE7d0JBRXhELFlBQVk7d0JBQ1osSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLE9BQUMsR0FBRyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO3dCQUM3RixJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxPQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsMENBQUUsYUFBYSxDQUFDLENBQUE7cUJBQ25FO2dCQUNMLENBQUMsQ0FBQyxDQUFBO2FBQ0w7WUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7WUFDbkIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUE7UUFDbkMsQ0FBQyxDQUFBO1FBRUQsZ0JBQVcsR0FBRyxHQUFHLEVBQUU7UUFDbkIsQ0FBQyxDQUFBO1FBZ0JELGtCQUFhLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFOUMsc0JBQWlCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXhELFdBQVc7WUFDWCxJQUFJLFNBQVMsR0FBRyxLQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsU0FBUztnQkFDNUUsQ0FBQztvQkFDRCxFQUFFLENBQUE7WUFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFdEUsZ0JBQWdCO1lBQ2hCLElBQUksYUFBYSxHQUFHLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxhQUFhO2dCQUNoRixDQUFDO29CQUNELEVBQUUsQ0FBQTtZQUNOLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU5RSxDQUFDLENBQUE7UUFFRCxpQ0FBNEIsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFbkUsV0FBVztZQUNYLElBQUksU0FBUyxHQUFHLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxTQUFTO2dCQUN2RixDQUFDO29CQUNELEVBQUUsQ0FBQTtZQUNOLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRWpGLGdCQUFnQjtZQUNoQixJQUFJLGFBQWEsR0FBRyxLQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsYUFBYTtnQkFDM0YsQ0FBQztvQkFDRCxFQUFFLENBQUE7WUFDTixJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN6RixDQUFDLENBQUE7UUFFRCx3QkFBbUIsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckgsbUNBQThCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0ksNEJBQXVCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5ILHVDQUFrQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5SCxtQkFBYyxHQUFHLENBQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hDLCtCQUErQjtZQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsRUFBRTtnQkFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFFcEc7WUFDRCxJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO2dCQUMxQixxREFBcUQ7Z0JBQ3JELDJCQUEyQjtnQkFDM0IsMkJBQTJCO2dCQUMzQixzRUFBc0U7Z0JBQ3RFLDhTQUE4UztnQkFDOVMsVUFBVTtnQkFDVixRQUFRO2dCQUNSLElBQUk7Z0JBQ0osSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ25COztnQkFDRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQSxDQUFBO1FBRUQsY0FBUyxHQUFHLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXJFLGVBQVUsR0FBRyxHQUFTLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxJQUFJLEdBQVEsRUFBRSxlQUFlLGtDQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsR0FBRSxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN6TCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLO2dCQUFFLElBQUksbUNBQVEsSUFBSSxLQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLEdBQUUsQ0FBQztZQUN2SyxJQUFJO2dCQUNBLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFM0QsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFDO29CQUNqQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBQTtpQkFFOUQ7cUJBQ0MsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7b0JBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO29CQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtvQkFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO2lCQUNsQjthQUVKO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTthQUFFO1lBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUMsQ0FBQSxDQUFBO1FBTUQscUJBQWdCLEdBQUcsQ0FBQyxhQUFrQixFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEtBQUssYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ25GLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUM1RixDQUFDLENBQUE7UUFFRCxrQkFBYSxHQUFHLENBQU8sS0FBSyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDeEUsSUFBSSxlQUFlLEVBQUU7Z0JBQ2pCLElBQUk7b0JBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUU7d0JBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7cUJBQ3hEO29CQUNELE1BQU0sT0FBTyxHQUFHO3dCQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CO3dCQUNsQyxlQUFlLEVBQUUsZUFBZTtxQkFDbkMsQ0FBQTtvQkFDRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3hFLElBQUksVUFBVSxFQUFFO3dCQUNaLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFDOzRCQUM1QyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dDQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQztvQ0FDZCxvQkFBb0I7b0NBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lDQUM3UTs0QkFDTCxDQUFDLENBQUMsQ0FBQzt5QkFDUjt3QkFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtxQkFDbEI7eUJBQU07d0JBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtxQkFDckM7aUJBQ0o7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtpQkFBRTthQUNyRDtpQkFBTTtnQkFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFBO2FBQ2pDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFBLENBQUE7UUFFRCxZQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ1gsUUFBUSxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzlDLEtBQUssbUJBQW1CO29CQUNwQixPQUFPLElBQUksQ0FBQTtnQkFDZixLQUFLLHdCQUF3QjtvQkFDekIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxFQUFFO3dCQUNwQyxPQUFPLEtBQUssQ0FBQTtxQkFDZjtvQkFDRCxPQUFPLElBQUksQ0FBQTtnQkFDZixLQUFLLDRCQUE0QjtvQkFDN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxFQUFFO3dCQUNwQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUE7cUJBQzNCO29CQUNELE9BQU8sSUFBSSxDQUFBO2FBQ2xCO1FBQ0wsQ0FBQyxDQUFBO1FBS0QsWUFBTyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksSUFBSSxPQUFPLENBQUE7UUFFdkQsZUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBQyxPQUFBLE9BQUEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsMENBQUUsSUFBSSxLQUFJLEVBQUUsQ0FBQSxFQUFBLENBQUE7UUFFMUosZ0JBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLFdBQUMsT0FBQSxPQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsMENBQUUsSUFBSSxLQUFJLEVBQUUsQ0FBQSxFQUFBLENBQUE7UUFFbkcsb0JBQWUsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLFdBQUMsT0FBQSxPQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsMENBQUUsSUFBSSxLQUFJLEVBQUUsQ0FBQSxFQUFBLENBQUE7UUFFeEcsdUJBQWtCLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRS9JLGlDQUE0QixHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUF0U3pKLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxpQ0FDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQzdELFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsbUVBQW1FO1lBQ3ZKLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWE7YUFDMUIsSUFBSSxDQUNELE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssaUNBQ3JDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxLQUM5RCxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLG1FQUFtRTtZQUN2SixDQUFDO1FBQ0gsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWE7YUFDckMsSUFBSSxDQUNELE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFFBQVE7O1FBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsMENBQUUsS0FBSyxLQUFJLFVBQVUsQ0FBQyxDQUFDO1FBQ3hJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFFSCxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsSUFBSSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLElBQUksd0JBQXdCLENBQUM7ZUFDM0ksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQTtnQkFDckMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUFDLENBQUMsQ0FDdEQsQ0FBQTtRQUVMLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFOztZQUM1QixJQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFFL0QsWUFBWTtnQkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLE9BQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsMENBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQzVCLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksT0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDBDQUFFLFNBQVMsQ0FBQyxDQUFBO2dCQUU3QyxZQUFZO2dCQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsT0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDBDQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ2xGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLE9BQUMsR0FBRyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxhQUFhLENBQUMsQ0FBQTthQUN4RDtRQUNMLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2xCLENBQUM7SUFrRFEsWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRTtnQkFDakUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLE9BQU07YUFDVDtZQUNELElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtnQkFDcEIsT0FBTTthQUNUO1NBQ0o7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtJQUN6QixDQUFDO0lBdUdELFNBQVMsQ0FBQyxRQUEwQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBMERELE1BQU0sQ0FBQyxDQUFDO1FBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0NBYUosQ0FBQTs7WUFqVG1DLFdBQVc7WUFDNUIsV0FBVztZQUNSLFlBQVk7WUFDQSxpQkFBaUI7WUFDdkIsV0FBVztZQUNULGNBQWM7WUFDZCxpQkFBaUI7WUFDeEIsU0FBUztZQUNGLG9CQUFvQjs7QUE3Q3JDO0lBQVIsS0FBSyxFQUFFO29EQUFTO0FBQ1I7SUFBUixLQUFLLEVBQUU7c0RBQTJCO0FBQzFCO0lBQVIsS0FBSyxFQUFFO3FEQUFtQjtBQUpsQixtQkFBbUI7SUFOL0IsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQixxMGpEQUF5QztRQUV6QyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7O0tBQzlCLENBQUM7R0FDVyxtQkFBbUIsQ0F3Vi9CO1NBeFZZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkZHJlc3NpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvYWRkcmVzc2luZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XHJcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsL2JzLW1vZGFsLXJlZi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29yZS5jb25zdHMnO1xyXG5pbXBvcnQgeyBhZGQgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Nocm9ub3MnO1xyXG5pbXBvcnQgeyBQYXJhbWV0ZXJzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhcmFtZXRlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAgJy4uLy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1kYXRhZm9ybS1lYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJ2RhdGFmb3JtLWVjLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWydkYXRhZm9ybS1lYy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQnNNb2RhbFNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhRm9ybUVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBASW5wdXQoKSBzdGVwX2lkO1xyXG4gICAgQElucHV0KCkgaXNMYXN0T25lOmJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIG5leHRTdGVwOkZ1bmN0aW9uO1xyXG5cclxuICAgIHByb3RlY3RlZCBjb3VudHJpZXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG4gICAgcHJvdGVjdGVkIHByb3ZpbmNlc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XHJcbiAgICBwcm90ZWN0ZWQgZG9jdW1lbnRUeXBlc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XHJcbiAgICBwcm90ZWN0ZWQgY291bnRyaWVzRmFjdHVyYWNpb25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG4gICAgcHJvdGVjdGVkIHByb3ZpbmNlc0ZhY3R1cmFjaW9uU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcclxuICAgIHByb3RlY3RlZCBkb2N1bWVudFR5cGVzRmFjdHVyYWNpb25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG5cclxuICAgIHB1YmxpYyBjb3VudHJpZXMkID0gdGhpcy5jb3VudHJpZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIHByb3ZpbmNlcyQgPSB0aGlzLnByb3ZpbmNlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgZG9jdW1lbnRUeXBlcyQgPSB0aGlzLmRvY3VtZW50VHlwZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGNvdW50cmllc0ZhY3R1cmFjaW9uJCA9IHRoaXMuY291bnRyaWVzRmFjdHVyYWNpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIHByb3ZpbmNlc0ZhY3R1cmFjaW9uJCA9IHRoaXMucHJvdmluY2VzRmFjdHVyYWNpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGRvY3VtZW50VHlwZXNGYWN0dXJhY2lvbiQgPSB0aGlzLmRvY3VtZW50VHlwZXNGYWN0dXJhY2lvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHVibGljIHJlcXVpcmVfbG9naW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjaGVja291dEZvcm06IEZvcm1Hcm91cDtcclxuICAgIHB1YmxpYyBjaGVja291dEZvcm1GYWN0dXJhY2lvbjogRm9ybUdyb3VwO1xyXG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBmb3JtX3JlYWR5ID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgYWxscmVhZHlfZGF0YSA9IGZhbHNlO1xyXG4gICAgcHVibGljIGFkZHJlc3NCb29rID0gW107XHJcbiAgICBwdWJsaWMgYWRkcmVzc0Jvb2tTZWxlY3RlZCA9IHsgaWQ6IDAsIG5vdGVzOiBcIlwiIH1cclxuICAgIHB1YmxpYyBmaW5pc2g6Ym9vbGVhbiA9IGZhbHNlOyAvL0VzdGEgdmFyaWFibGUgc2UgdXNhIHBhcmEgbW9zdHJhciBlbCBib3RvbiBkZSBmaW5hbGl6YXIuXHJcblxyXG4gICAgcHVibGljIHZhbGlkYWRvID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdmlld0RhdGFGYWN0dXJhY2lvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHVibGljIG1vZGFsUmVmOiBCc01vZGFsUmVmIHwgbnVsbDtcclxuICAgIHB1YmxpYyBwYXJhbXM6IGFueSA9IHt9O1xyXG4gICAgcHVibGljIHNlbGVjdEFkZHJlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgcG9zdGFsQ29kZVBhdHRlcm4gPSAnXlswLTldWzAtOV0qJCc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHB1YmxpYyB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhZGRyZXNzaW5nU2VydmljZTogQWRkcmVzc2luZ1NlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHBhcmFtc1NlcnZpY2U6IFBhcmFtZXRlcnNTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBjb25zdHM6IENvbnN0YW50cyxcclxuICAgICAgICBwdWJsaWMgY2hhbm5lbENvbmZpZzogQ2hhbm5lbENvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXHJcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgLi4udGhpcy5hZGRyZXNzaW5nU2VydmljZS5nZXRUeXBlRm9ybSgpLmNvbmZpZ0Zvcm0uZm9ybUFkZHJlcyxcclxuICAgICAgICAgICAgcG9zdGNvZGU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBvc3RhbENvZGVQYXR0ZXJuKV1dIC8vIFNlIGFncmVnYSBwYXJhIHF1ZSBzw7NsbyBhY2VwdGUgY8OzZGlnb3MgcG9zdGFsZXMgbWF5b3JlcyBxdWUgY2Vyb1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtLnN0YXR1c0NoYW5nZXNcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4geyB0aGlzLm9uRm9ybUNoYW5nZSgpOyByZXR1cm4gdGhpcy5jaGVja291dEZvcm0udmFsaWQgfSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkZvcm1WYWxpZCgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm1GYWN0dXJhY2lvbiA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAuLi50aGlzLmFkZHJlc3NpbmdTZXJ2aWNlLmdldFR5cGVGb3JtKCkuY29uZmlnRm9ybS5mb3JtQmlsbGluZyxcclxuICAgICAgICAgICAgcG9zdGNvZGU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybih0aGlzLnBvc3RhbENvZGVQYXR0ZXJuKV1dIC8vIFNlIGFncmVnYSBwYXJhIHF1ZSBzw7NsbyBhY2VwdGUgY8OzZGlnb3MgcG9zdGFsZXMgbWF5b3JlcyBxdWUgY2Vyb1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24uc3RhdHVzQ2hhbmdlc1xyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7IHRoaXMub25Gb3JtQ2hhbmdlKCk7IHJldHVybiB0aGlzLmNoZWNrb3V0Rm9ybUZhY3R1cmFjaW9uLnZhbGlkIH0pKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Gb3JtVmFsaWQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXNTZXJ2aWNlLnBhcmFtZXRlcnMuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLnBhcmFtcyA9IHJlcyk7XHJcbiAgICAgICAgdGhpcy5hZGRyZXNzaW5nU2VydmljZS5pbml0aWFsaXplKHRoaXMuc3RlcF9pZCk7XHJcbiAgICAgICAgY29uc3QgbG9jYWxFbWFpbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtYWlsJylcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMuY2hlY2tvdXRGb3JtLmNvbnRyb2xzWydlbWFpbCddLnNldFZhbHVlKHRoaXMuYXV0aFNlcnZpY2UuZ2V0Q3VzdG9tZXIoKT8uZW1haWwgfHwgbG9jYWxFbWFpbCk7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLmNoZWNrb3V0Rm9ybS5nZXQoJ2VtYWlsJykuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xyXG4gICAgICAgIHRoaXMuYWRkcmVzc2luZ1NlcnZpY2UuZ2V0QWRkcmVzc2luZ0RhdGEoKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjb3VudHJpZXMgPSB0aGlzLmZpbHRlckNvdW50cnlCeUNvZGUocmVzKVxyXG4gICAgICAgICAgICB0aGlzLmNvdW50cmllc1N1YmplY3QubmV4dChjb3VudHJpZXMpO1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50cmllc0ZhY3R1cmFjaW9uU3ViamVjdC5uZXh0KGNvdW50cmllcyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICh0aGlzLmFkZHJlc3NpbmdTZXJ2aWNlLm1vZGVTZWxlY3RBZGRyZXNzID09ICdMT0FEX0FERFJFU1NfQU5EX1NFTEVDVElPTicgfHwgdGhpcy5hZGRyZXNzaW5nU2VydmljZS5tb2RlU2VsZWN0QWRkcmVzcyA9PSAnT05MWV9BRERSRVNTX1NFTEVDVElPTicpXHJcbiAgICAgICAgICAgICYmIHRoaXMuYWRkcmVzc2luZ1NlcnZpY2UuZ2V0QWRkcmVzc0Jvb2soKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NCb29rID0gcmVzICYmIHJlcyB8fCBudWxsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NCb29rID09IG51bGwgJiYgdGhpcy5zZXRNb2RlKCdjYXJnYScpIH1cclxuICAgICAgICAgICAgKVxyXG5cclxuICAgICAgICB0aGlzLmNvdW50cmllcyQuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcyAmJiByZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ2NvdW50cnlDb2RlJ10uc2V0VmFsdWUocmVzWzBdLmNvZGUpXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUHJvdmluY2lhXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1sncHJvdmluY2VDb2RlJ10uc2V0VmFsdWUoXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzWzBdPy5wcm92aW5jZXNbMF0uY29kZVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm92aW5jZXNTdWJqZWN0Lm5leHQocmVzWzBdPy5wcm92aW5jZXMpXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRG9jdW1lbnRvXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1snZG9jdW1lbnRUeXBlJ10uc2V0VmFsdWUocmVzWzBdPy5kb2N1bWVudFR5cGVzWzBdLmNvZGUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50VHlwZXNTdWJqZWN0Lm5leHQocmVzWzBdPy5kb2N1bWVudFR5cGVzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXHJcbiAgICAgfVxyXG4gICAgIC8qKlxyXG4gICAgICAqIEBkZXNjcmlwdGlvbiBmaWx0cmEgbG9zIHBhaXNlcyBkZSBhY3VlcmRvIGFsIGEgbG9zIGNvZGlnb3MgcmV0b3JuYWRvcyBlbiBsYSBmdW5jaW9uIGdldENvdW50cmllcy5cclxuICAgICAgKiBDYXNvcyBkZSB1c29zOiBTaSBnZXRDb3VudHJpZXMgZXMgdmFjaW8sIHJldG9ybmEgZWwgYXJyZWdsbyBxdWUgaW5ncmVzYSBwb3IgcGFyYW1ldHJvLlxyXG4gICAgICAqIFNpIGdldENvdW50cmllcyBjb250aWVuZSB2YWxvcmVzIHF1ZSBubyBjb2luY2lkZW4sIHJldG9ybmEgZWwgYXJyZWdsbyBxdWUgaW5ncmVzYSBwb3IgcGFyYW1ldHJvLlxyXG4gICAgICAqIERlIGxvIGNvbnRyYXJpbyByZXRvcm5hIGxvcyB2YWxvcmVzIGZpbHRyYWRvcy5cclxuICAgICAgKiBAcGFyYW0gY291bnRyaWVzIEFycmVnbG8gcXVlIGNvbnRpZW5lIGxvcyBjb3VudHJpZXMgcmVjaWJpZG9zIGVuIGxhIHN1YnNjcmlwY2lvbiBkZWwgb2JzZXJ2YWJsZS5cclxuICAgICAgKiBAcmV0dXJucyB1biBhcnJlZ2xvIGRlIGNvdW50cmllcy5cclxuICAgICAgKi9cclxuICAgICBwcml2YXRlIGZpbHRlckNvdW50cnlCeUNvZGUgPSAoY291bnRyaWVzOmFueVtdKSA9PiB7XHJcbiAgICAgICAgaWYodGhpcy5jb25zdHMuZ2V0Q291bnRyaWVzKCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGxldCBjb3VudHJpZXNGaWx0ZXJlZCA9IGNvdW50cmllcy5maWx0ZXIoIGVsZW0gPT4gdGhpcy5jb25zdHMuZ2V0Q291bnRyaWVzKCkuaW5jbHVkZXMoZWxlbS5jb2RlKSlcclxuICAgICAgICAgICAgaWYoY291bnRyaWVzRmlsdGVyZWQubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnRyaWVzRmlsdGVyZWRcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFbC9sb3MgY29kaWdvL3MgaW5ncmVzYWRvL3Mgbm8gY29pbmNpZGVuIGNvbiBsb3MgcHJvdmlzdG9zIGRlc2RlIGVsIGJhY2tlbmQnKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50cmllc1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gY291bnRyaWVzXHJcbiAgICAgICAgfVxyXG4gICAgIH1cclxuXHJcbiAgICBzaG93Rm9ybUZhY3R1cmFjaW9uID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudmlld0RhdGFGYWN0dXJhY2lvbiA9ICF0aGlzLnZpZXdEYXRhRmFjdHVyYWNpb25cclxuICAgICAgICBpZiAoIXRoaXMudmlld0RhdGFGYWN0dXJhY2lvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50cmllc0ZhY3R1cmFjaW9uJC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybUZhY3R1cmFjaW9uLmNvbnRyb2xzWydjb3VudHJ5Q29kZSddLnNldFZhbHVlKHJlc1swXS5jb2RlKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBQcm92aW5jaWFcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybUZhY3R1cmFjaW9uLmNvbnRyb2xzWydwcm92aW5jZUNvZGUnXS5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzWzBdPy5wcm92aW5jZXNbMF0uY29kZVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3ZpbmNlc0ZhY3R1cmFjaW9uU3ViamVjdC5uZXh0KHJlc1swXT8ucHJvdmluY2VzKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBEb2N1bWVudG9cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybUZhY3R1cmFjaW9uLmNvbnRyb2xzWydkb2N1bWVudFR5cGUnXS5zZXRWYWx1ZShyZXNbMF0/LmRvY3VtZW50VHlwZXNbMF0uY29kZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50VHlwZXNGYWN0dXJhY2lvblN1YmplY3QubmV4dChyZXNbMF0/LmRvY3VtZW50VHlwZXMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25Gb3JtQ2hhbmdlKClcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3RGF0YUZhY3R1cmFjaW9uXHJcbiAgICB9XHJcblxyXG4gICAgb25Gb3JtVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uRm9ybUNoYW5nZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja291dEZvcm0udmFsaWQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnZpZXdEYXRhRmFjdHVyYWNpb24gJiYgdGhpcy5jaGVja291dEZvcm1GYWN0dXJhY2lvbi52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGFkbyA9IHRydWVcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdEYXRhRmFjdHVyYWNpb24gJiYgdGhpcy5jaGVja291dEZvcm0udmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhZG8gPSB0cnVlXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbGlkYWRvID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBvbklucHV0Q2hhbmdlID0gKCkgPT4gdGhpcy5mb3JtX3JlYWR5ID0gZmFsc2U7XHJcblxyXG4gICAgb25Db3VudHJ5U2VsZWN0ZWQgPSAodmFsdWUpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1snY291bnRyeUNvZGUnXS5zZXRWYWx1ZSh2YWx1ZSA9PSAnbnVsbCcgPyBudWxsIDogdmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtLmNvbnRyb2xzWydwcm92aW5jZUNvZGUnXS5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1snZG9jdW1lbnRUeXBlJ10uc2V0VmFsdWUoJycpO1xyXG5cclxuICAgICAgICAvL1Byb3ZpbmNlc1xyXG4gICAgICAgIGxldCBwcm92aW5jZXMgPSB2YWx1ZSAmJiB2YWx1ZSAhPSAnbnVsbCcgP1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50cmllc1N1YmplY3QudmFsdWUuZmluZChjb3VudHJ5ID0+IGNvdW50cnkuY29kZSA9PSB2YWx1ZSkucHJvdmluY2VzXHJcbiAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgW11cclxuICAgICAgICB0aGlzLnByb3ZpbmNlc1N1YmplY3QubmV4dChwcm92aW5jZXMpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtLmNvbnRyb2xzWydwcm92aW5jZUNvZGUnXS5zZXRWYWx1ZShwcm92aW5jZXNbMF0uY29kZSlcclxuXHJcbiAgICAgICAgLy9Eb2N1bWVudCB0eXBlc1xyXG4gICAgICAgIGxldCBkb2N1bWVudFR5cGVzID0gdmFsdWUgJiYgdmFsdWUgIT0gJ251bGwnID9cclxuICAgICAgICAgICAgdGhpcy5jb3VudHJpZXNTdWJqZWN0LnZhbHVlLmZpbmQoY291bnRyeSA9PiBjb3VudHJ5LmNvZGUgPT0gdmFsdWUpLmRvY3VtZW50VHlwZXNcclxuICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRUeXBlc1N1YmplY3QubmV4dChkb2N1bWVudFR5cGVzKTtcclxuICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1snZG9jdW1lbnRUeXBlJ10uc2V0VmFsdWUoZG9jdW1lbnRUeXBlc1swXS5jb2RlKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbkNvdW50cnlTZWxlY3RlZEZhY3R1cmFjaW9uID0gKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm1GYWN0dXJhY2lvbi5jb250cm9sc1snY291bnRyeUNvZGUnXS5zZXRWYWx1ZSh2YWx1ZSA9PSAnbnVsbCcgPyBudWxsIDogdmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24uY29udHJvbHNbJ3Byb3ZpbmNlQ29kZSddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24uY29udHJvbHNbJ2RvY3VtZW50VHlwZSddLnNldFZhbHVlKCcnKTtcclxuXHJcbiAgICAgICAgLy9Qcm92aW5jZXNcclxuICAgICAgICBsZXQgcHJvdmluY2VzID0gdmFsdWUgJiYgdmFsdWUgIT0gJ251bGwnID9cclxuICAgICAgICAgICAgdGhpcy5jb3VudHJpZXNGYWN0dXJhY2lvblN1YmplY3QudmFsdWUuZmluZChjb3VudHJ5ID0+IGNvdW50cnkuY29kZSA9PSB2YWx1ZSkucHJvdmluY2VzXHJcbiAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgW11cclxuICAgICAgICB0aGlzLnByb3ZpbmNlc0ZhY3R1cmFjaW9uU3ViamVjdC5uZXh0KHByb3ZpbmNlcyk7XHJcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm1GYWN0dXJhY2lvbi5jb250cm9sc1sncHJvdmluY2VDb2RlJ10uc2V0VmFsdWUocHJvdmluY2VzWzBdLmNvZGUpXHJcblxyXG4gICAgICAgIC8vRG9jdW1lbnQgdHlwZXNcclxuICAgICAgICBsZXQgZG9jdW1lbnRUeXBlcyA9IHZhbHVlICYmIHZhbHVlICE9ICdudWxsJyA/XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRyaWVzRmFjdHVyYWNpb25TdWJqZWN0LnZhbHVlLmZpbmQoY291bnRyeSA9PiBjb3VudHJ5LmNvZGUgPT0gdmFsdWUpLmRvY3VtZW50VHlwZXNcclxuICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRUeXBlc0ZhY3R1cmFjaW9uU3ViamVjdC5uZXh0KGRvY3VtZW50VHlwZXMpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24uY29udHJvbHNbJ2RvY3VtZW50VHlwZSddLnNldFZhbHVlKGRvY3VtZW50VHlwZXNbMF0uY29kZSlcclxuICAgIH1cclxuXHJcbiAgICBvblByb3ZpbmNlc1NlbGVjdGVkID0gKHZhbHVlKSA9PiB0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1sncHJvdmluY2VDb2RlJ10uc2V0VmFsdWUodmFsdWUgPT0gJ251bGwnID8gbnVsbCA6IHZhbHVlKTtcclxuXHJcbiAgICBvblByb3ZpbmNlc1NlbGVjdGVkRmFjdHVyYWNpb24gPSAodmFsdWUpID0+IHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24uY29udHJvbHNbJ3Byb3ZpbmNlQ29kZSddLnNldFZhbHVlKHZhbHVlID09ICdudWxsJyA/IG51bGwgOiB2YWx1ZSk7XHJcblxyXG4gICAgb25Eb2N1bWVudFR5cGVzU2VsZWN0ZWQgPSAodmFsdWUpID0+IHRoaXMuY2hlY2tvdXRGb3JtLmNvbnRyb2xzWydkb2N1bWVudFR5cGUnXS5zZXRWYWx1ZSh2YWx1ZSA9PSAnJyA/ICcnIDogdmFsdWUpO1xyXG5cclxuICAgIG9uRG9jdW1lbnRUeXBlc1NlbGVjdGVkRmFjdHVyYWNpb24gPSAodmFsdWUpID0+IHRoaXMuY2hlY2tvdXRGb3JtLmNvbnRyb2xzWydkb2N1bWVudFR5cGUnXS5zZXRWYWx1ZSh2YWx1ZSA9PSAnJyA/ICcnIDogdmFsdWUpO1xyXG5cclxuICAgIHZlcmlmeVZhbGlkYXRlID0gYXN5bmMgKGUsIGl0ZW1zKSA9PiB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIlZlcmlmeWluZzogXCIsIGUpXHJcbiAgICAgICAgdGhpcy5yZXF1aXJlX2xvZ2luID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ2VtYWlsJ10uc2V0VmFsdWUoZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5jaGVja291dEZvcm0uZ2V0KCdlbWFpbCcpLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuY2hlY2tvdXRGb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgICAvLyBpZiAodGhpcy5jYXJ0U2VydmljZS5jaGFubmVsQ29uZmlnLmFwcGx5T3JkZXJMb3Qpe1xyXG4gICAgICAgICAgLy8gIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgICBpZiAoIWl0ZW0ubG90WzBdKXtcclxuICAgICAgICAgIC8vICAgICAgLy8gICAgY29uc29sZS5sb2codGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ2NpdHknXVsndmFsdWUnXSlcclxuICAgICAgICAgIC8vICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LDAsaXRlbS52YXJpYW50X2lkLDAsaXRlbS5pdGVtX2lkLGl0ZW0ucXVhbnRpdHksaXRlbS5wcm9kdWN0LnByaWNlLGl0ZW0ucXVhbnRpdHksaXRlbS5kaXNjb3VudCxpdGVtLnByb2R1Y3QucHJpY2UqaXRlbS5xdWFudGl0eSwnbmV3JywnJywnJywwLHRoaXMuY2hlY2tvdXRGb3JtLmNvbnRyb2xzWydjaXR5J11bJ3ZhbHVlJ10rICcgLSAnICsgdGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ3N0cmVldCddWyd2YWx1ZSddLCAnbmV3bG90Jyk7XHJcbiAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgdGhpcy5lbWl0UmVzdWx0KCk7XHJcbiAgICAgICAgfWVsc2VcclxuICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoJ2ludmFsaWQtZm9ybScpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvciA9IChlcnJvcl9tZXNzYWdlKSA9PiB7IHRoaXMudG9hc3Quc2hvdyhlcnJvcl9tZXNzYWdlKTsgcmV0dXJuIHRydWU7IH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZW1pdFJlc3VsdCA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGxldCBkYXRhOiBhbnkgPSB7IHNoaXBwaW5nQWRkcmVzczogeyAuLi50aGlzLmNoZWNrb3V0Rm9ybS5nZXRSYXdWYWx1ZSgpLCBwaG9uZU51bWJlcjogdGhpcy5jaGVja291dEZvcm0udmFsdWUucGhvbmVOdW1iZXIudG9TdHJpbmcoKSB9LCBub3RlczogKHRoaXMuY2hlY2tvdXRGb3JtLmdldFJhd1ZhbHVlKCkpLm5vdGVzIH07XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdEYXRhRmFjdHVyYWNpb24gJiYgdGhpcy5jaGVja291dEZvcm1GYWN0dXJhY2lvbi52YWxpZCkgZGF0YSA9IHsgLi4uZGF0YSwgbm90ZXM6IGRhdGEubm90ZXMsIGJpbGxpbmdBZGRyZXNzOiB0aGlzLmNoZWNrb3V0Rm9ybUZhY3R1cmFjaW9uLmdldFJhd1ZhbHVlKCkgfTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5hZGRyZXNzaW5nU2VydmljZS5zZXRBZGRyZXNzKGRhdGEpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1aXJlX2xvZ2luID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc2hvdygnRWwgZW1haWwgeWEgZXN0w6EgcmVnaXN0cmFkbywgaW5pY2llIHNlc2nDs24uJylcclxuXHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0ICE9PSBmYWxzZSAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtX3JlYWR5ID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxyZWFkeV9kYXRhID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0U3RlcCgpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB0aGlzLnRvYXN0LnNob3coJ29wZXJhdGlvbi1lcnJvcicpIH1cclxuICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb3Blbk1vZGFsKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIHsgY2xhc3M6ICdtb2RhbC1sZyAnLCBrZXlib2FyZDogZmFsc2UsIGJhY2tkcm9wOiAnc3RhdGljJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZWxlY3RBZGRyZXNzID0gKGFkZHJlc3NTZWxlY3Q6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWRkcmVzc0Jvb2subWFwKGFkZHJlc3MgPT4gYWRkcmVzcy5zZWxlY3RlZCA9IGFkZHJlc3MuaWQgPT09IGFkZHJlc3NTZWxlY3QuaWQpXHJcbiAgICAgICAgdGhpcy5hZGRyZXNzQm9va1NlbGVjdGVkLmlkID0gdGhpcy5hZGRyZXNzQm9vay5maW5kKGFkZHJlc3MgPT4gYWRkcmVzcy5zZWxlY3RlZCkuaWQgfHwgMFxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdEFkZHJlc3MgPSBhc3luYyAoaXRlbXMpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGxldCBhZGRyZXNzU2VsZWN0ZWQgPSB0aGlzLmFkZHJlc3NCb29rLmZpbmQoYWRkcmVzcyA9PiBhZGRyZXNzLnNlbGVjdGVkKVxyXG4gICAgICAgIGlmIChhZGRyZXNzU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRyZXNzQm9va1NlbGVjdGVkLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzQm9va1NlbGVjdGVkLmlkID0gYWRkcmVzc1NlbGVjdGVkLmlkIHx8IDBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuYWRkcmVzc0Jvb2tTZWxlY3RlZCxcclxuICAgICAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3M6IGFkZHJlc3NTZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0U2VkZSA9IGF3YWl0IHRoaXMuYWRkcmVzc2luZ1NlcnZpY2Uuc2V0SGVhZHF1YXJ0ZXIocmVxdWVzdCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0U2VkZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhcnRTZXJ2aWNlLmNoYW5uZWxDb25maWcuYXBwbHlPcmRlckxvdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0ubG90WzBdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsMCxpdGVtLnZhcmlhbnRfaWQsMCxpdGVtLml0ZW1faWQsaXRlbS5xdWFudGl0eSxpdGVtLnByb2R1Y3QucHJpY2UsaXRlbS5xdWFudGl0eSxpdGVtLmRpc2NvdW50LGl0ZW0ucHJvZHVjdC5wcmljZSppdGVtLnF1YW50aXR5LCduZXcnLCcnLCcnLDAscmVzdWx0U2VkZS5zaGlwcGluZ0FkZHJlc3MuY2l0eSArICcgLSAnICsgcmVzdWx0U2VkZS5zaGlwcGluZ0FkZHJlc3Muc3RyZWV0LCAnbmV3bG90Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtX3JlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbHJlYWR5X2RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFN0ZXAoKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnNob3coJ29wZXJhdGlvbi1lcnJvcicpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgdGhpcy50b2FzdC5zaG93KCdvcGVyYXRpb24tZXJyb3InKSB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoJ2ludmFsaWQtZm9ybScpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1vZGUgPSAoKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmFkZHJlc3NpbmdTZXJ2aWNlLm1vZGVTZWxlY3RBZGRyZXNzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ09OTFlfTE9BRF9BRERSRVNTJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIGNhc2UgJ09OTFlfQUREUkVTU19TRUxFQ1RJT04nOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIGNhc2UgJ0xPQURfQUREUkVTU19BTkRfU0VMRUNUSU9OJzpcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QWRkcmVzXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHBydWViYSh4KXtcclxuICAgICAgICBjb25zb2xlLmxvZyh4KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRNb2RlID0gKG1vZGUpID0+IHRoaXMuc2VsZWN0QWRkcmVzID0gbW9kZSA9PSBcImNhcmdhXCJcclxuXHJcbiAgICBnZXRDb3VudHJ5ID0gKGNvZGUpID0+IHRoaXMuYWRkcmVzc2luZ1NlcnZpY2UuY291bnRyaWVzTGlzdC5maW5kKHBhaXNlcyA9PiBwYWlzZXMuY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKSkpPy5uYW1lIHx8IFwiXCJcclxuXHJcbiAgICBnZXRQcm92aW5jZSA9IChjb2RlKSA9PiB0aGlzLmFkZHJlc3NpbmdTZXJ2aWNlLnByb3ZpbmNlTGlzdC5maW5kKGN0ID0+IGN0LmNvZGUgPT0gY29kZSk/Lm5hbWUgfHwgXCJcIlxyXG5cclxuICAgIGdldERvY3VtZW50VHlwZSA9IChjb2RlKSA9PiB0aGlzLmFkZHJlc3NpbmdTZXJ2aWNlLmRvY3VtZW50VHlwZXMuZmluZChkdCA9PiBkdC5jb2RlID09IGNvZGUpPy5uYW1lIHx8IFwiXCJcclxuXHJcbiAgICBnZXRMYWJlbE5vdGVzUGFyYW0gPSAoKSA9PiB0aGlzLmhhc1BhcmFtcyh0aGlzLnBhcmFtcywgJ2xhYmVsX25vdGVzXycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnXycgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKS5zcGxpdCgnXycpWzBdKVxyXG5cclxuICAgIGdldFBhcmFtQnlDaGFubmVsQW5kTGFuZ3VhZ2UgPSAobmFtZVBhcmFtKSA9PiB0aGlzLmhhc1BhcmFtcyh0aGlzLnBhcmFtcywgbmFtZVBhcmFtICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJ18nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCkuc3BsaXQoJ18nKVswXSlcclxufVxyXG4iXX0=
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
import { Component, Input } from '@angular/core';
|
|
17
|
+
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
|
18
|
+
import { BehaviorSubject } from 'rxjs';
|
|
19
|
+
import { filter } from 'rxjs/operators';
|
|
20
|
+
import { ComponentHelper } from '../../../classes/component-helper';
|
|
21
|
+
import { AuthService } from '../../../services/auth.service';
|
|
22
|
+
import { CartService } from '../../../services/cart.service';
|
|
23
|
+
import { AddressingService } from '../../../services/checkout/addressing.service';
|
|
24
|
+
import { ToastService } from '../../../utils/toast.service';
|
|
25
|
+
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
26
|
+
import { Constants } from '../../../core.consts';
|
|
27
|
+
import { ParametersService } from '../../../services/parameters.service';
|
|
28
|
+
import { ChannelConfigService } from '../../../services/channel-config.service';
|
|
29
|
+
let DataFormEcComponent = class DataFormEcComponent extends ComponentHelper {
|
|
30
|
+
constructor(authService, fb, toast, addressingService, cartService, modalService, paramsService, consts, channelConfig) {
|
|
31
|
+
super();
|
|
32
|
+
this.authService = authService;
|
|
33
|
+
this.fb = fb;
|
|
34
|
+
this.toast = toast;
|
|
35
|
+
this.addressingService = addressingService;
|
|
36
|
+
this.cartService = cartService;
|
|
37
|
+
this.modalService = modalService;
|
|
38
|
+
this.paramsService = paramsService;
|
|
39
|
+
this.consts = consts;
|
|
40
|
+
this.channelConfig = channelConfig;
|
|
41
|
+
this.isLastOne = false;
|
|
42
|
+
this.countriesSubject = new BehaviorSubject([]);
|
|
43
|
+
this.provincesSubject = new BehaviorSubject([]);
|
|
44
|
+
this.documentTypesSubject = new BehaviorSubject([]);
|
|
45
|
+
this.countriesFacturacionSubject = new BehaviorSubject([]);
|
|
46
|
+
this.provincesFacturacionSubject = new BehaviorSubject([]);
|
|
47
|
+
this.documentTypesFacturacionSubject = new BehaviorSubject([]);
|
|
48
|
+
this.countries$ = this.countriesSubject.asObservable();
|
|
49
|
+
this.provinces$ = this.provincesSubject.asObservable();
|
|
50
|
+
this.documentTypes$ = this.documentTypesSubject.asObservable();
|
|
51
|
+
this.countriesFacturacion$ = this.countriesFacturacionSubject.asObservable();
|
|
52
|
+
this.provincesFacturacion$ = this.provincesFacturacionSubject.asObservable();
|
|
53
|
+
this.documentTypesFacturacion$ = this.documentTypesFacturacionSubject.asObservable();
|
|
54
|
+
this.require_login = false;
|
|
55
|
+
this.loading = false;
|
|
56
|
+
this.form_ready = false;
|
|
57
|
+
this.allready_data = false;
|
|
58
|
+
this.addressBook = [];
|
|
59
|
+
this.addressBookSelected = { id: 0, notes: "" };
|
|
60
|
+
this.finish = false; //Esta variable se usa para mostrar el boton de finalizar.
|
|
61
|
+
this.validado = false;
|
|
62
|
+
this.viewDataFacturacion = true;
|
|
63
|
+
this.params = {};
|
|
64
|
+
this.selectAddres = false;
|
|
65
|
+
this.postalCodePattern = '^[0-9][0-9]*$';
|
|
66
|
+
/**
|
|
67
|
+
* @description filtra los paises de acuerdo al a los codigos retornados en la funcion getCountries.
|
|
68
|
+
* Casos de usos: Si getCountries es vacio, retorna el arreglo que ingresa por parametro.
|
|
69
|
+
* Si getCountries contiene valores que no coinciden, retorna el arreglo que ingresa por parametro.
|
|
70
|
+
* De lo contrario retorna los valores filtrados.
|
|
71
|
+
* @param countries Arreglo que contiene los countries recibidos en la subscripcion del observable.
|
|
72
|
+
* @returns un arreglo de countries.
|
|
73
|
+
*/
|
|
74
|
+
this.filterCountryByCode = (countries) => {
|
|
75
|
+
if (this.consts.getCountries().length > 0) {
|
|
76
|
+
let countriesFiltered = countries.filter(elem => this.consts.getCountries().includes(elem.code));
|
|
77
|
+
if (countriesFiltered.length > 0) {
|
|
78
|
+
return countriesFiltered;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.error('El/los codigo/s ingresado/s no coinciden con los provistos desde el backend');
|
|
82
|
+
return countries;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
return countries;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
this.showFormFacturacion = () => {
|
|
90
|
+
this.viewDataFacturacion = !this.viewDataFacturacion;
|
|
91
|
+
if (!this.viewDataFacturacion) {
|
|
92
|
+
this.countriesFacturacion$.subscribe(res => {
|
|
93
|
+
var _a, _b, _c, _d;
|
|
94
|
+
if (res && res.length > 0) {
|
|
95
|
+
this.checkoutFormFacturacion.controls['countryCode'].setValue(res[0].code);
|
|
96
|
+
// Provincia
|
|
97
|
+
this.checkoutFormFacturacion.controls['provinceCode'].setValue((_a = res[0]) === null || _a === void 0 ? void 0 : _a.provinces[0].code);
|
|
98
|
+
this.provincesFacturacionSubject.next((_b = res[0]) === null || _b === void 0 ? void 0 : _b.provinces);
|
|
99
|
+
// Documento
|
|
100
|
+
this.checkoutFormFacturacion.controls['documentType'].setValue((_c = res[0]) === null || _c === void 0 ? void 0 : _c.documentTypes[0].code);
|
|
101
|
+
this.documentTypesFacturacionSubject.next((_d = res[0]) === null || _d === void 0 ? void 0 : _d.documentTypes);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
this.onFormChange();
|
|
106
|
+
return this.viewDataFacturacion;
|
|
107
|
+
};
|
|
108
|
+
this.onFormValid = () => {
|
|
109
|
+
};
|
|
110
|
+
this.onInputChange = () => this.form_ready = false;
|
|
111
|
+
this.onCountrySelected = (value) => {
|
|
112
|
+
this.checkoutForm.controls['countryCode'].setValue(value == 'null' ? null : value);
|
|
113
|
+
this.checkoutForm.controls['provinceCode'].setValue(null);
|
|
114
|
+
this.checkoutForm.controls['documentType'].setValue('');
|
|
115
|
+
//Provinces
|
|
116
|
+
let provinces = value && value != 'null' ?
|
|
117
|
+
this.countriesSubject.value.find(country => country.code == value).provinces
|
|
118
|
+
:
|
|
119
|
+
[];
|
|
120
|
+
this.provincesSubject.next(provinces);
|
|
121
|
+
this.checkoutForm.controls['provinceCode'].setValue(provinces[0].code);
|
|
122
|
+
//Document types
|
|
123
|
+
let documentTypes = value && value != 'null' ?
|
|
124
|
+
this.countriesSubject.value.find(country => country.code == value).documentTypes
|
|
125
|
+
:
|
|
126
|
+
[];
|
|
127
|
+
this.documentTypesSubject.next(documentTypes);
|
|
128
|
+
this.checkoutForm.controls['documentType'].setValue(documentTypes[0].code);
|
|
129
|
+
};
|
|
130
|
+
this.onCountrySelectedFacturacion = (value) => {
|
|
131
|
+
this.checkoutFormFacturacion.controls['countryCode'].setValue(value == 'null' ? null : value);
|
|
132
|
+
this.checkoutFormFacturacion.controls['provinceCode'].setValue(null);
|
|
133
|
+
this.checkoutFormFacturacion.controls['documentType'].setValue('');
|
|
134
|
+
//Provinces
|
|
135
|
+
let provinces = value && value != 'null' ?
|
|
136
|
+
this.countriesFacturacionSubject.value.find(country => country.code == value).provinces
|
|
137
|
+
:
|
|
138
|
+
[];
|
|
139
|
+
this.provincesFacturacionSubject.next(provinces);
|
|
140
|
+
this.checkoutFormFacturacion.controls['provinceCode'].setValue(provinces[0].code);
|
|
141
|
+
//Document types
|
|
142
|
+
let documentTypes = value && value != 'null' ?
|
|
143
|
+
this.countriesFacturacionSubject.value.find(country => country.code == value).documentTypes
|
|
144
|
+
:
|
|
145
|
+
[];
|
|
146
|
+
this.documentTypesFacturacionSubject.next(documentTypes);
|
|
147
|
+
this.checkoutFormFacturacion.controls['documentType'].setValue(documentTypes[0].code);
|
|
148
|
+
};
|
|
149
|
+
this.onProvincesSelected = (value) => this.checkoutForm.controls['provinceCode'].setValue(value == 'null' ? null : value);
|
|
150
|
+
this.onProvincesSelectedFacturacion = (value) => this.checkoutFormFacturacion.controls['provinceCode'].setValue(value == 'null' ? null : value);
|
|
151
|
+
this.onDocumentTypesSelected = (value) => this.checkoutForm.controls['documentType'].setValue(value == '' ? '' : value);
|
|
152
|
+
this.onDocumentTypesSelectedFacturacion = (value) => this.checkoutForm.controls['documentType'].setValue(value == '' ? '' : value);
|
|
153
|
+
this.verifyValidate = (e, items) => __awaiter(this, void 0, void 0, function* () {
|
|
154
|
+
//console.log("Verifying: ", e)
|
|
155
|
+
this.require_login = false;
|
|
156
|
+
if (e) {
|
|
157
|
+
this.checkoutForm.controls['email'].setValue(e);
|
|
158
|
+
this.authService.isAuthenticated() && this.checkoutForm.get('email').disable({ onlySelf: true });
|
|
159
|
+
}
|
|
160
|
+
if (this.checkoutForm.valid) {
|
|
161
|
+
// if (this.cartService.channelConfig.applyOrderLot){
|
|
162
|
+
// items.forEach(item => {
|
|
163
|
+
// if (!item.lot[0]){
|
|
164
|
+
// // console.log(this.checkoutForm.controls['city']['value'])
|
|
165
|
+
// this.cartService.addToLot(item.product,0,item.variant_id,0,item.item_id,item.quantity,item.product.price,item.quantity,item.discount,item.product.price*item.quantity,'new','','',0,this.checkoutForm.controls['city']['value']+ ' - ' + this.checkoutForm.controls['street']['value'], 'newlot');
|
|
166
|
+
// }
|
|
167
|
+
// });
|
|
168
|
+
// }
|
|
169
|
+
this.emitResult();
|
|
170
|
+
}
|
|
171
|
+
else
|
|
172
|
+
this.showError('invalid-form');
|
|
173
|
+
});
|
|
174
|
+
this.showError = (error_message) => { this.toast.show(error_message); return true; };
|
|
175
|
+
this.emitResult = () => __awaiter(this, void 0, void 0, function* () {
|
|
176
|
+
this.loading = true;
|
|
177
|
+
let data = { shippingAddress: Object.assign(Object.assign({}, this.checkoutForm.getRawValue()), { phoneNumber: this.checkoutForm.value.phoneNumber.toString() }), notes: (this.checkoutForm.getRawValue()).notes };
|
|
178
|
+
if (!this.viewDataFacturacion && this.checkoutFormFacturacion.valid)
|
|
179
|
+
data = Object.assign(Object.assign({}, data), { notes: data.notes, billingAddress: this.checkoutFormFacturacion.getRawValue() });
|
|
180
|
+
try {
|
|
181
|
+
let result = yield this.addressingService.setAddress(data);
|
|
182
|
+
if (result === false) {
|
|
183
|
+
this.require_login = true;
|
|
184
|
+
this.toast.show('El email ya está registrado, inicie sesión.');
|
|
185
|
+
}
|
|
186
|
+
else if (result !== false && result !== undefined) {
|
|
187
|
+
this.form_ready = true;
|
|
188
|
+
this.allready_data = true;
|
|
189
|
+
this.nextStep();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch (e) {
|
|
193
|
+
this.toast.show('operation-error');
|
|
194
|
+
}
|
|
195
|
+
this.loading = false;
|
|
196
|
+
});
|
|
197
|
+
this.setSelectAddress = (addressSelect) => {
|
|
198
|
+
this.addressBook.map(address => address.selected = address.id === addressSelect.id);
|
|
199
|
+
this.addressBookSelected.id = this.addressBook.find(address => address.selected).id || 0;
|
|
200
|
+
};
|
|
201
|
+
this.selectAddress = (items) => __awaiter(this, void 0, void 0, function* () {
|
|
202
|
+
this.loading = true;
|
|
203
|
+
let addressSelected = this.addressBook.find(address => address.selected);
|
|
204
|
+
if (addressSelected) {
|
|
205
|
+
try {
|
|
206
|
+
if (!this.addressBookSelected.id) {
|
|
207
|
+
this.addressBookSelected.id = addressSelected.id || 0;
|
|
208
|
+
}
|
|
209
|
+
const request = {
|
|
210
|
+
selected: this.addressBookSelected,
|
|
211
|
+
shippingAddress: addressSelected
|
|
212
|
+
};
|
|
213
|
+
const resultSede = yield this.addressingService.setHeadquarter(request);
|
|
214
|
+
if (resultSede) {
|
|
215
|
+
if (this.cartService.channelConfig.applyOrderLot) {
|
|
216
|
+
items.forEach(item => {
|
|
217
|
+
if (!item.lot[0]) {
|
|
218
|
+
// console.log(item)
|
|
219
|
+
this.cartService.addToLot(item.product, 0, item.variant_id, 0, item.item_id, item.quantity, item.product.price, item.quantity, item.discount, item.product.price * item.quantity, 'new', '', '', 0, resultSede.shippingAddress.city + ' - ' + resultSede.shippingAddress.street, 'newlot');
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
this.form_ready = true;
|
|
224
|
+
this.allready_data = true;
|
|
225
|
+
this.nextStep();
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
this.toast.show('operation-error');
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (e) {
|
|
232
|
+
this.toast.show('operation-error');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
this.showError('invalid-form');
|
|
237
|
+
}
|
|
238
|
+
this.loading = false;
|
|
239
|
+
});
|
|
240
|
+
this.getMode = () => {
|
|
241
|
+
switch (this.addressingService.modeSelectAddress) {
|
|
242
|
+
case 'ONLY_LOAD_ADDRESS':
|
|
243
|
+
return true;
|
|
244
|
+
case 'ONLY_ADDRESS_SELECTION':
|
|
245
|
+
if (this.authService.isAuthenticated()) {
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
return true;
|
|
249
|
+
case 'LOAD_ADDRESS_AND_SELECTION':
|
|
250
|
+
if (this.authService.isAuthenticated()) {
|
|
251
|
+
return this.selectAddres;
|
|
252
|
+
}
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
this.setMode = (mode) => this.selectAddres = mode == "carga";
|
|
257
|
+
this.getCountry = (code) => { var _a; return ((_a = this.addressingService.countriesList.find(paises => paises.code.toLocaleLowerCase().includes(code.toLocaleLowerCase()))) === null || _a === void 0 ? void 0 : _a.name) || ""; };
|
|
258
|
+
this.getProvince = (code) => { var _a; return ((_a = this.addressingService.provinceList.find(ct => ct.code == code)) === null || _a === void 0 ? void 0 : _a.name) || ""; };
|
|
259
|
+
this.getDocumentType = (code) => { var _a; return ((_a = this.addressingService.documentTypes.find(dt => dt.code == code)) === null || _a === void 0 ? void 0 : _a.name) || ""; };
|
|
260
|
+
this.getLabelNotesParam = () => this.hasParams(this.params, 'label_notes_' + this.consts.getChannel() + '_' + this.consts.getLocale().split('_')[0]);
|
|
261
|
+
this.getParamByChannelAndLanguage = (nameParam) => this.hasParams(this.params, nameParam + this.consts.getChannel() + '_' + this.consts.getLocale().split('_')[0]);
|
|
262
|
+
this.ecOnConstruct();
|
|
263
|
+
this.checkoutForm = this.fb.group(Object.assign(Object.assign({}, this.addressingService.getTypeForm().configForm.formAddres), { postcode: ['', [Validators.required, Validators.pattern(this.postalCodePattern)]] // Se agrega para que sólo acepte códigos postales mayores que cero
|
|
264
|
+
}));
|
|
265
|
+
this.checkoutForm.statusChanges
|
|
266
|
+
.pipe(filter(() => { this.onFormChange(); return this.checkoutForm.valid; }))
|
|
267
|
+
.subscribe(() => this.onFormValid());
|
|
268
|
+
this.checkoutFormFacturacion = this.fb.group(Object.assign(Object.assign({}, this.addressingService.getTypeForm().configForm.formBilling), { postcode: ['', [Validators.required, Validators.pattern(this.postalCodePattern)]] // Se agrega para que sólo acepte códigos postales mayores que cero
|
|
269
|
+
}));
|
|
270
|
+
this.checkoutFormFacturacion.statusChanges
|
|
271
|
+
.pipe(filter(() => { this.onFormChange(); return this.checkoutFormFacturacion.valid; }))
|
|
272
|
+
.subscribe(() => this.onFormValid());
|
|
273
|
+
}
|
|
274
|
+
ngOnInit() {
|
|
275
|
+
var _a;
|
|
276
|
+
this.paramsService.parameters.subscribe(res => this.params = res);
|
|
277
|
+
this.addressingService.initialize(this.step_id);
|
|
278
|
+
const localEmail = localStorage.getItem('mail');
|
|
279
|
+
this.authService.isAuthenticated() && this.checkoutForm.controls['email'].setValue(((_a = this.authService.getCustomer()) === null || _a === void 0 ? void 0 : _a.email) || localEmail);
|
|
280
|
+
this.authService.isAuthenticated() && this.checkoutForm.get('email').disable({ onlySelf: true });
|
|
281
|
+
this.addressingService.getAddressingData().then(res => {
|
|
282
|
+
let countries = this.filterCountryByCode(res);
|
|
283
|
+
this.countriesSubject.next(countries);
|
|
284
|
+
this.countriesFacturacionSubject.next(countries);
|
|
285
|
+
});
|
|
286
|
+
(this.addressingService.modeSelectAddress == 'LOAD_ADDRESS_AND_SELECTION' || this.addressingService.modeSelectAddress == 'ONLY_ADDRESS_SELECTION')
|
|
287
|
+
&& this.addressingService.getAddressBook().then(res => {
|
|
288
|
+
this.addressBook = res && res || null;
|
|
289
|
+
this.addressBook == null && this.setMode('carga');
|
|
290
|
+
});
|
|
291
|
+
this.countries$.subscribe(res => {
|
|
292
|
+
var _a, _b, _c, _d;
|
|
293
|
+
if (res && res.length > 0) {
|
|
294
|
+
this.checkoutForm.controls['countryCode'].setValue(res[0].code);
|
|
295
|
+
// Provincia
|
|
296
|
+
this.checkoutForm.controls['provinceCode'].setValue((_a = res[0]) === null || _a === void 0 ? void 0 : _a.provinces[0].code);
|
|
297
|
+
this.provincesSubject.next((_b = res[0]) === null || _b === void 0 ? void 0 : _b.provinces);
|
|
298
|
+
// Documento
|
|
299
|
+
this.checkoutForm.controls['documentType'].setValue((_c = res[0]) === null || _c === void 0 ? void 0 : _c.documentTypes[0].code);
|
|
300
|
+
this.documentTypesSubject.next((_d = res[0]) === null || _d === void 0 ? void 0 : _d.documentTypes);
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
this.ecOnInit();
|
|
304
|
+
}
|
|
305
|
+
onFormChange() {
|
|
306
|
+
if (this.checkoutForm.valid) {
|
|
307
|
+
if (!this.viewDataFacturacion && this.checkoutFormFacturacion.valid) {
|
|
308
|
+
this.validado = true;
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
if (this.viewDataFacturacion && this.checkoutForm.valid) {
|
|
312
|
+
this.validado = true;
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
this.validado = false;
|
|
317
|
+
}
|
|
318
|
+
openModal(template) {
|
|
319
|
+
this.modalRef = this.modalService.show(template, { class: 'modal-lg ', keyboard: false, backdrop: 'static' });
|
|
320
|
+
}
|
|
321
|
+
prueba(x) {
|
|
322
|
+
console.log(x);
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
DataFormEcComponent.ctorParameters = () => [
|
|
326
|
+
{ type: AuthService },
|
|
327
|
+
{ type: FormBuilder },
|
|
328
|
+
{ type: ToastService },
|
|
329
|
+
{ type: AddressingService },
|
|
330
|
+
{ type: CartService },
|
|
331
|
+
{ type: BsModalService },
|
|
332
|
+
{ type: ParametersService },
|
|
333
|
+
{ type: Constants },
|
|
334
|
+
{ type: ChannelConfigService }
|
|
335
|
+
];
|
|
336
|
+
__decorate([
|
|
337
|
+
Input()
|
|
338
|
+
], DataFormEcComponent.prototype, "step_id", void 0);
|
|
339
|
+
__decorate([
|
|
340
|
+
Input()
|
|
341
|
+
], DataFormEcComponent.prototype, "isLastOne", void 0);
|
|
342
|
+
__decorate([
|
|
343
|
+
Input()
|
|
344
|
+
], DataFormEcComponent.prototype, "nextStep", void 0);
|
|
345
|
+
DataFormEcComponent = __decorate([
|
|
346
|
+
Component({
|
|
347
|
+
selector: 'app-dataform-ec',
|
|
348
|
+
template: "<ng-container *ngIf=\"this.channelConfig.channelType != 'b2b' || (this.channelConfig.channelType == 'b2b' && authService.isAuthenticated()); else pleaseLogin\">\n<ng-container *ngIf=\"this.addressingService.modeSelectAddress == 'LOAD_ADDRESS_AND_SELECTION' && this.authService.isAuthenticated() && this.addressBook != null\">\n <div class=\"container card p-4 mb-3\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12 col-md-10 col-lg-8 text-center\">\n <div class=\"btn-group btn-group-toggle\" data-bs-toggle=\"buttons\">\n <label [class]=\"'btn btn-outline-secondary ' + (!getMode() ? 'active' : '')\">\n <input type=\"radio\" name=\"options\" id=\"option1\" autocomplete=\"off\" checked\n (change)=\"setMode('seleccion')\"> {{'select-address' | translate | titlecase}}\n </label>\n\n <label [class]=\"'btn btn-outline-secondary ' + (getMode() ? 'active' : '')\" *ngIf=\"!getParamByChannelAndLanguage('btn_new_address_')\">\n <input type=\"radio\" name=\"options\" id=\"option2\" autocomplete=\"off\" (change)=\"setMode('carga')\">\n {{ 'new-address' | translate | titlecase}}\n </label>\n\n <label [class]=\"'btn btn-outline-secondary ' + (selectAddress ? 'active' : '')\" *ngIf=\"getParamByChannelAndLanguage('btn_new_address_') as param\">\n <input type=\"radio\" name=\"options\" id=\"option2\" autocomplete=\"off\" (change)=\"setMode('carga')\">\n {{ param.value}}\n </label>\n\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"getMode(); else addressSelection\">\n <div *ngIf=\"!require_login; else requireLoginView\">\n\n <ng-container *ngIf=\"this.addressingService.modeSelectAddress == 'ONLY_LOAD_ADDRESS'\">\n <div class=\"checkout-title my-2\">\n <h3>{{'billing-details'|translate}}</h3>\n </div>\n </ng-container>\n\n <form (submit)=\"verifyValidate(false,this.cartService.items)\">\n <div class=\"row mt-df\"><!--Fila 1-->\n <div class=\"form-group col-12 col-md-6\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.firstName.enabled\">\n <label class=\"field-label\">{{'first-name'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.firstName.required\"\n class=\"required\">*</span></label>\n <input class=\"form-control\" type=\"text\" name=\"firstName\"\n [formControl]=\"checkoutForm.controls['firstName']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.firstName.touched && checkoutForm.controls.firstName.errors?.required\">\n <span class=\"text-danger\">{{'first-name-help1'|translate}}</span>\n\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.firstName.touched && checkoutForm.controls.firstName.errors?.pattern\">\n <span class=\"text-danger\">\n {{'first-name-help2'|translate}}\n </span>\n </div>\n </div>\n <div class=\"form-group col-12 col-md-6\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.lastName.enabled\">\n <label class=\"field-label\">{{'last-name'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.lastName.required\"\n class=\"required\">*</span></label>\n <input class=\"form-control\" type=\"text\" name=\"lastName\"\n [formControl]=\"checkoutForm.controls['lastName']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.lastName.touched && checkoutForm.controls.lastName.errors?.required\">\n <span class=\"text-danger\">{{'last-name-help1'|translate}}</span>\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.lastName.touched && checkoutForm.controls.lastName.errors?.pattern\">\n <span class=\"text-danger\">{{'last-name-help2'|translate}}</span>\n </div>\n </div>\n </div>\n <div class=\"row mt-df\"><!--Fila 2-->\n <div class=\"form-group col-12 col-md-6\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.phoneNumber.enabled\">\n <label class=\"field-label\">{{'phone'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.phoneNumber.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"phoneNumber\"\n [formControl]=\"checkoutForm.controls['phoneNumber']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.phoneNumber.touched && checkoutForm.controls.phoneNumber.errors?.required\">\n <span class=\"text-danger\">\n\n {{'phone-help1'|translate}}\n </span>\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.phoneNumber.touched && checkoutForm.controls.phoneNumber.errors?.pattern\">\n <span class=\"text-danger\">\n {{'phone-help2'|translate}}\n </span>\n </div>\n </div>\n <div class=\"form-group col-12 col-md-6\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.email.enabled\">\n <label class=\"field-label\">{{'email-address'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.email.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"email\" name=\"email\"\n [formControl]=\"checkoutForm.controls['email']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.email.touched && checkoutForm.controls.email.errors?.required\">\n <span class=\"text-danger\">\n {{'email-address-help1'|translate}}\n </span>\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.email.touched && checkoutForm.controls.email.errors?.email\">\n <span class=\"text-danger\">\n {{'email-address-help2'|translate}}\n </span>\n </div>\n </div>\n </div>\n\n <div class=\"row mt-df\"><!--Fila 3-->\n <ng-container *ngIf=\"this.addressingService.getTypeForm().viewForms.countryCode.enabled\">\n <div class=\"form-group col-12 col-md-4\" *ngIf=\"(countries$ | async) as countries\">\n <label class=\"field-label\">{{'country'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.countryCode.required\"\n class=\"required\">*</span></label>\n <select class=\"form-select\" name=\"countryCode\"\n [formControl]=\"checkoutForm.controls['countryCode']\"\n (change)=\"onCountrySelected($event.target.value)\">\n <!-- <option selected [value]=\"countries[0].code\">{{ 'choose-country' | translate }}</option> -->\n <option *ngFor=\"let country of countries\" [value]=\"country.code\">{{ country.name }}</option>\n </select>\n <div *ngIf=\"checkoutForm.controls.countryCode.touched && checkoutForm.controls.countryCode.errors?.required\"\n class=\"text text-danger\">\n {{'country-help'|translate}}\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"this.addressingService.getTypeForm().viewForms.provinceCode.enabled\">\n <div class=\"form-group col-12 col-md-4\" *ngIf=\"(provinces$ | async) as provinces\">\n <label class=\"field-label\">{{'state'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.provinceCode.required\"\n class=\"required\">*</span></label>\n <select class=\"form-select\" name=\"provinceCode\"\n (change)=\"onProvincesSelected($event.target.value)\"\n [formControl]=\"checkoutForm.controls['provinceCode']\">\n<!-- <option selected [value]=\"null\">{{ 'choose-province' | translate }}</option>\n --> <option *ngFor=\"let province of provinces\" [value]=\"province.code\">{{ province.name }}\n </option>\n </select>\n <div *ngIf=\"checkoutForm.controls.provinceCode.touched && checkoutForm.controls.provinceCode.errors?.required\"\n class=\"text text-danger\">\n {{'state-help'|translate}}\n </div>\n </div>\n </ng-container>\n <div class=\"form-group col-12 col-md-4\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.city.enabled\">\n <label class=\"field-label\">{{'town-city'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.city.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"city\"\n [formControl]=\"checkoutForm.controls['city']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.city.touched && checkoutForm.controls.city.errors?.required\">\n <span class=\"text-danger\">{{'town-city-help'|translate}}</span>\n </div>\n </div>\n </div>\n\n <div class=\"row mt-df\"><!--Fila 4-->\n <div class=\"form-group col-12 col-md-8\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.street.enabled\">\n <label class=\"field-label\">{{'address'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.street.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"street\"\n [formControl]=\"checkoutForm.controls['street']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.street.touched && checkoutForm.controls.street.errors?.required\">\n <span class=\"text-danger\">{{'address-help1'|translate}}</span>\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.street.touched && checkoutForm.controls.street.errors?.maxlength\">\n <span class=\"text-danger\">{{'address-help2'|translate}}</span>\n </div>\n </div>\n\n <!-- form direcci\u00F3n -->\n <div class=\"form-group col-12 col-md-4\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.postcode.enabled\">\n <label class=\"field-label\">{{'postal-code'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.postcode.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"postcode\"\n [formControl]=\"checkoutForm.controls['postcode']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.postcode.touched && checkoutForm.controls.postcode.errors?.required\">\n <span class=\"text-danger\">{{'postal-code-help'|translate}}</span>\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.postcode.touched && checkoutForm.controls.postcode.errors?.pattern\">\n <span class=\"text-danger\"> {{'postal-code-pattern-error' | translate}} </span>\n </div>\n </div>\n </div>\n\n <div class=\"row mt-df\"><!--Fila 5-->\n <ng-container *ngIf=\"this.addressingService.getTypeForm().viewForms.documentType.enabled\">\n <div class=\"form-group col-12 col-md-4\" *ngIf=\"(documentTypes$ | async) as documentTypes\">\n <label class=\"field-label\">{{'document-type'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentType.required\"\n class=\"required\">*</span></label>\n <select name=\"documentType\" class=\"form-select\"\n (change)=\"onDocumentTypesSelected($event.target.value)\"\n [formControl]=\"checkoutForm.controls['documentType']\">\n<!-- <option [value]=\"''\" selected>{{'document-type'|translate}}</option>\n --> <option *ngFor=\"let item of documentTypes\" [value]=\"item.code\">{{item.name}}</option>\n </select>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.documentType.touched && checkoutForm.controls.documentType.errors?.required\">\n <span class=\"text-danger\">\n {{'type-document-help'|translate}}\n </span>\n </div>\n </div>\n </ng-container>\n <div class=\"form-group col-12 col-md-4\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentNumber.enabled\">\n <label class=\"field-label\">{{'document-number'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentNumber.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\"\n [type]=\"'text'\" name=\"documentNumber\"\n [formControl]=\"checkoutForm.controls['documentNumber']\" min=\"1\" max=\"99999999999\" value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.documentNumber.touched && checkoutForm.controls.documentNumber.errors?.required\">\n <span class=\"text-danger\">\n {{'document-number-help'|translate}}\n </span>\n </div>\n </div>\n </div>\n\n <div class=\"row mt-df\"><!--Fila 6-->\n <div class=\"form-group col-12 col-md-12\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.enabled\">\n\n <label class=\"field-label\" *ngIf=\"!getLabelNotesParam()\">{{'notes'|translate}} <span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\"\n class=\"required\">*</span></label>\n <label class=\"field-label\" *ngIf=\"getLabelNotesParam() as labelnotes\" [innerHTML]=\"labelnotes.value\"><span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\"\n class=\"required\">*</span></label>\n\n <!-- <label class=\"field-label\">{{'notes'|translate}}<span *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\" class=\"required\">*</span></label> -->\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\"\n [formControl]=\"checkoutForm.controls['notes']\" value=\"\" placeholder=\"\" autocomplete=\"off\">\n </div>\n </div>\n <div class=\"row mt-df\"><!--Fila 7-->\n <div class=\"form-group col-12 col-md-12\">\n <label for=\"formFact\"><b>{{ 'same-billing-address' | translate }}</b> <input type=\"checkbox\"\n class=\"ms-2\" [checked]=\"viewDataFacturacion\" (change)=\"showFormFacturacion()\"\n id=\"formFact\"></label>\n </div>\n </div>\n <div class=\"row mt-df\">\n <div class=\"col-12\">\n <p>\n <!-- <span class=\"required\"></span> -->\n <label class=\"required text-underline\">* {{ 'required-fields' | translate }}</label>\n </p>\n </div>\n </div>\n <div class=\"row mt-df\">\n <div class=\"form-group col-12 col-md-12\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.terms.enabled\">\n <span *ngIf=\"this.addressingService.getTypeForm().viewForms.terms.required\"\n class=\"required\">*</span>\n <label class=\"\" for=\"\"> {{ 'accept-terms' | translate }} <input class=\"ms-2\" name=\"terms\"\n [formControl]=\"checkoutForm.controls['terms']\" type=\"checkbox\" required\n (change)=\"onInputChange()\" /> </label><br />\n <a (click)=\"openModal(template)\" role=\"button\" class=\"ms-3 nota-input text-dark\">{{ 'whats-this' |\n translate }}</a>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutForm.controls.terms.touched && !checkoutForm.controls.terms.value\">\n <span class=\"text-danger\">{{ 'must-accept-terms' | translate }}</span>\n </div>\n </div>\n </div>\n <div class=\"row\" *ngIf=\"viewDataFacturacion ; else datosFormFacturacion\"> </div>\n <div class=\"checkout-btn-unique text-end\">\n <button type=\"submit\" [disabled]=\"!validado\" class=\"btn valid-btn mt-2\">\n {{(isLastOne ? 'finish-checkout' : (allready_data ? 'update' :\n 'ready-form')) | translate}}</button>\n\n\n </div>\n <div *ngIf=\"loading\" class=\"d-flex flex-column jusitfy-content-center align-items-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </form>\n </div>\n</ng-container>\n\n<ng-template #addressSelection>\n\n <ng-container *ngIf=\"this.addressingService.modeSelectAddress == 'ONLY_ADDRESS_SELECTION'\">\n <div class=\"checkout-title my-2\">\n <h3>{{'address-selection'|translate}}</h3>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"this.addressBook; else addressBookNotResult\">\n\n <ng-container *ngIf=\"this.addressBook?.length ;else addressBookLoading\">\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-sm-6 col-12 my-3\" *ngFor=\"let item of addressBook; let i = index\">\n <div class=\"card p-3\">\n <input class=\"ms-1 mt-3 form-check-input input-size-lg\" type=\"radio\" [name]=\"'n-'+i\" [id]=\"i\"\n [checked]=\"item.selected\" (click)=\"setSelectAddress(item)\" (change)=\"onInputChange()\">\n <div class=\"ms-5\">\n <h4 class=\"card-title\">\n <strong>{{'address'|translate}}</strong><br>\n <span class=\"text-uppercase h3\">{{item.street}}</span>\n </h4>\n <div class=\"row\">\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\n <strong>{{'country'|translate}}</strong> {{getCountry(item.countryCode)}}\n </h5>\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\n <strong>{{'state'|translate}}</strong> {{getProvince(item.provinceCode)}}\n </h5>\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\n <strong>{{'town-city'|translate}}</strong> {{item.city}}\n </h5>\n <h5 class=\"card-subtitle mb-2 text-muted col-auto\">\n <strong>{{'postal-code'|translate}}</strong> {{item.postcode}}\n </h5>\n </div>\n <div class=\"row px-3\">\n <div class=\"card p-2 bg-light w-100\">\n <div class=\"card-body\">\n <h5 class=\"card-title\">{{'address-contact'|translate}}</h5>\n <h6 class=\"card-subtitle mb-2 text-muted\">\n <strong>{{'first-name'|translate}}</strong>\n {{item.addressContact.firstName}}\n </h6>\n <h6 class=\"card-subtitle mb-2 text-muted\">\n <strong>{{'last-name'|translate}}</strong> {{item.addressContact.lastName}}\n </h6>\n <h6 class=\"card-subtitle mb-2 text-muted\">\n <strong>{{'document-type'|translate}}</strong>\n {{getDocumentType(item.addressContact.documentType)}}\n </h6>\n <h6 class=\"card-subtitle mb-2 text-muted\">\n <strong>{{'document-number'|translate}}</strong>\n {{item.addressContact.documentNumber}}\n </h6>\n <h6 class=\"card-subtitle mb-2 text-muted\">\n <strong>{{'email-address'|translate}}</strong> {{item.addressContact.email}}\n </h6>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n <div class=\"w-100\">\n <div class=\"row mt-df\">\n <div class=\"form-group col-12 col-md-12\">\n <label class=\"field-label\" *ngIf=\"!getLabelNotesParam()\">{{'notes'|translate}}</label>\n <label class=\"field-label\"\n *ngIf=\"getLabelNotesParam() as labelnotes\" [innerHTML]=\"labelnotes.value\"></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\"\n [(ngModel)]=\"this.addressBookSelected.notes\" #ctrl=\"ngModel\" value=\"\" placeholder=\"\"\n autocomplete=\"off\">\n </div>\n </div>\n </div>\n <div class=\"checkout-btn-unique text-end\">\n <button (click)=\"selectAddress(this.cartService.items)\" class=\"btn valid-btn mt-2\">\n {{(isLastOne ? 'finish-checkout' : (allready_data ? 'update' :\n 'ready-form')) | translate}}\n </button>\n </div>\n <div *ngIf=\"loading\" class=\"d-flex flex-column jusitfy-content-center align-items-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n</ng-template>\n\n\n<ng-template #requireLoginView>\n <div id=\"loginCheckout\">\n <div class=\"d-flex flex-column jusitfy-content-center align-items-center\" *ngIf=\"require_login\">\n <div class=\"col-12\">\n <app-login-form-ec (ready)=\"verifyValidate($event)\" [redirect]=\"false\" [title]=\"'need-login'\">\n </app-login-form-ec>\n </div>\n </div>\n </div>\n</ng-template>\n\n\n\n<ng-template #datosFormFacturacion>\n <div class=\"container-fluid px-0 px-md-2\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"card \">\n <div class=\"card-header text-dark text-center\">\n <h3>{{'billing-data'|translate}}</h3>\n </div>\n <div class=\"card-body\">\n <form (submit)=\"verifyValidate()\">\n <div class=\"row mt-df\">\n <!--Fila 1-->\n <div class=\"form-group col-12 col-md-6\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.firstName.enabled\">\n <label class=\"field-label\">{{'first-name'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.firstName.required\"\n class=\"required\">*</span></label>\n <input class=\"form-control\" type=\"text\" name=\"firstName\"\n [formControl]=\"checkoutFormFacturacion.controls['firstName']\" value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.firstName.touched && checkoutFormFacturacion.controls.firstName.errors?.required\">\n <span class=\"text-danger\">{{'first-name-help1'|translate}}</span>\n\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.firstName.touched && checkoutFormFacturacion.controls.firstName.errors?.pattern\">\n <span class=\"text-danger\">\n {{'first-name-help2'|translate}}\n </span>\n </div>\n </div>\n <div class=\"form-group col-12 col-md-6\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.lastName.enabled\">\n <label class=\"field-label\">{{'last-name'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.lastName.required\"\n class=\"required\">*</span></label>\n <input class=\"form-control\" type=\"text\" name=\"lastName\"\n [formControl]=\"checkoutFormFacturacion.controls['lastName']\" value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.lastName.touched && checkoutFormFacturacion.controls.lastName.errors?.required\">\n <span class=\"text-danger\">{{'last-name-help1'|translate}}</span>\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.lastName.touched && checkoutFormFacturacion.controls.lastName.errors?.pattern\">\n <span class=\"text-danger\">{{'last-name-help2'|translate}}</span>\n </div>\n </div>\n </div>\n <div class=\"row mt-df\">\n <!--Fila 2-->\n <div class=\"form-group col-12 col-md-6\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.phoneNumber.enabled\">\n <label class=\"field-label\">{{'phone'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.phoneNumber.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\"\n name=\"phoneNumber\"\n [formControl]=\"checkoutFormFacturacion.controls['phoneNumber']\" value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.phoneNumber.touched && checkoutFormFacturacion.controls.phoneNumber.errors?.required\">\n <span class=\"text-danger\">\n {{'phone-help1'|translate}}\n </span>\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.phoneNumber.touched && checkoutFormFacturacion.controls.phoneNumber.errors?.pattern\">\n <span class=\"text-danger\">\n {{'phone-help2'|translate}}\n </span>\n </div>\n </div>\n <div class=\"form-group col-12 col-md-6\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.email.enabled\">\n <label class=\"field-label\">{{'email-address'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.email.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"email\" name=\"email\"\n [formControl]=\"checkoutFormFacturacion.controls['email']\" value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.email.touched && checkoutFormFacturacion.controls.email.errors?.required\">\n <span class=\"text-danger\">\n {{'email-address-help1'|translate}}\n </span>\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.email.touched && checkoutFormFacturacion.controls.email.errors?.email\">\n <span class=\"text-danger\">\n {{'email-address-help2'|translate}}\n </span>\n </div>\n </div>\n </div>\n <div class=\"row mt-df\">\n <!--Fila 3-->\n\n <ng-container\n *ngIf=\"this.addressingService.getTypeForm().viewForms.countryCode.enabled\">\n\n <div class=\"form-group col-12 col-md-4\"\n *ngIf=\"(countriesFacturacion$ | async) as countries\">\n <label class=\"field-label\">{{'country'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.countryCode.required\"\n class=\"required\">*</span></label>\n <select class=\"form-select\" name=\"countryCode\"\n [formControl]=\"checkoutFormFacturacion.controls['countryCode']\"\n (change)=\"onCountrySelectedFacturacion($event.target.value)\">\n <!-- <option selected [value]=\"null\">{{ 'choose-country' | translate }}</option> -->\n <option *ngFor=\"let country of countries\" [value]=\"country.code\">\n {{ country.name }}</option>\n </select>\n <div *ngIf=\"checkoutFormFacturacion.controls.countryCode.touched && checkoutFormFacturacion.controls.countryCode.errors?.required\"\n class=\"text text-danger\">\n {{'country-help'|translate}}\n </div>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"this.addressingService.getTypeForm().viewForms.provinceCode.enabled\">\n\n <div class=\"form-group col-12 col-md-4\"\n *ngIf=\"(provincesFacturacion$ | async) as provinces\">\n <label class=\"field-label\">{{'state'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.provinceCode.required\"\n class=\"required\">*</span></label>\n <select class=\"form-select\" name=\"provinceCode\"\n (change)=\"onProvincesSelectedFacturacion($event.target.value)\"\n [formControl]=\"checkoutFormFacturacion.controls['provinceCode']\">\n <!-- <option selected [value]=\"null\">{{ 'choose-province' | translate }}</option> -->\n <option *ngFor=\"let province of provinces\" [value]=\"province.code\">\n {{ province.name }}\n </option>\n </select>\n <div *ngIf=\"checkoutFormFacturacion.controls.provinceCode.touched && checkoutFormFacturacion.controls.provinceCode.errors?.required\"\n class=\"text text-danger\">\n {{'state-help'|translate}}\n </div>\n </div>\n </ng-container>\n <div class=\"form-group col-12 col-md-4\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.city.enabled\">\n <label class=\"field-label\">{{'town-city'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.city.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"city\"\n [formControl]=\"checkoutFormFacturacion.controls['city']\" value=\"\" placeholder=\"\"\n autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.city.touched && checkoutFormFacturacion.controls.city.errors?.required\">\n <span class=\"text-danger\">{{'town-city-help'|translate}}</span>\n </div>\n </div>\n </div>\n <div class=\"row mt-df\">\n <!--Fila 4-->\n <div class=\"form-group col-12 col-md-8\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.street.enabled\">\n <label class=\"field-label\">{{'address'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.street.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"street\"\n [formControl]=\"checkoutFormFacturacion.controls['street']\" value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.street.touched && checkoutFormFacturacion.controls.street.errors?.required\">\n <span class=\"text-danger\">{{'address-help1'|translate}}</span>\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.street.touched && checkoutFormFacturacion.controls.street.errors?.maxlength\">\n <span class=\"text-danger\">{{'address-help2'|translate}}</span>\n </div>\n </div>\n <div class=\"form-group col-12 col-md-4\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.postcode.enabled\">\n <label class=\"field-label\">{{'postal-code'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.postcode.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"postcode\"\n [formControl]=\"checkoutFormFacturacion.controls['postcode']\" value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.postcode.touched && checkoutFormFacturacion.controls.postcode.errors?.required\">\n <span class=\"text-danger\">{{'postal-code-help'|translate}}</span>\n </div>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.postcode.touched && checkoutFormFacturacion.controls.postcode.errors?.pattern\">\n <span class=\"text-danger\">{{'postal-code-pattern-error'|translate}}</span>\n </div>\n </div>\n </div>\n <div class=\"row mt-df\">\n <!--Fila 5-->\n <ng-container *ngIf=\"this.addressingService.getTypeForm().viewForms.documentType.enabled\">\n <div class=\"form-group col-12 col-md-4\" *ngIf=\"(documentTypesFacturacion$ | async) as documentTypes\">\n <label class=\"field-label\">{{'document-type'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentType.required\"\n class=\"required\">*</span></label>\n <select name=\"documentType\" class=\"form-select\"\n [formControl]=\"checkoutFormFacturacion.controls['documentType']\">\n <!-- <option [value]=\"''\" selected>{{'document-type'|translate}}</option> -->\n <option\n *ngFor=\"let item of documentTypes\"\n [value]=\"item.code\">{{item.name}}</option>\n </select>\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.documentType.touched && checkoutFormFacturacion.controls.documentType.errors?.required\">\n <span class=\"text-danger\">\n {{'type-document-help'|translate}}\n </span>\n </div>\n </div>\n <div class=\"form-group col-12 col-md-4\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentNumber.enabled\">\n <label class=\"field-label\">{{'document-number'|translate}}<span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.documentNumber.required\"\n class=\"required\">*</span></label>\n <input (change)=\"onInputChange()\" class=\"form-control\"\n [type]=\"(this.addressingService.typeForms == 'EUR' ? 'text' : 'number') \"\n name=\"documentNumber\"\n [formControl]=\"checkoutFormFacturacion.controls['documentNumber']\" min=\"1\"\n max=\"99999999999\" value=\"\" placeholder=\"\" autocomplete=\"off\">\n <div class=\"text-danger-container\"\n *ngIf=\"checkoutFormFacturacion.controls.documentNumber.touched && checkoutFormFacturacion.controls.documentNumber.errors?.required\">\n <span class=\"text-danger\">\n {{'document-number-help'|translate}}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"row mt-df\">\n <div class=\"form-group col-12 col-md-12\"\n *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.enabled\">\n <label class=\"field-label\" *ngIf=\"!getLabelNotesParam()\">{{'notes'|translate}} <span\n *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\"\n class=\"required\">*</span></label>\n <label class=\"field-label\" *ngIf=\"getLabelNotesParam() as labelNotesHtml\">\n <div [innerHTML]=\"labelNotesHtml\"></div>\n <span *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\" class=\"required\">*</span>\n </label>\n\n <!-- <label class=\"field-label\">{{'notes'|translate}}<span *ngIf=\"this.addressingService.getTypeForm().viewForms.notes.required\" class=\"required\">*</span></label> -->\n <input (change)=\"onInputChange()\" class=\"form-control\" type=\"text\" name=\"notes\"\n [formControl]=\"checkoutFormFacturacion.controls['notes']\" value=\"\"\n placeholder=\"\" autocomplete=\"off\">\n </div>\n </div>\n </form>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n\n\n<ng-template #template>\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\n </button>\n </div>\n </div>\n\n <div class=\"modal-body scrol-if\">\n <app-section-container-ec [name]=\"'terminos-y-condiciones'\"> </app-section-container-ec>\n </div>\n\n</ng-template>\n\n\n<ng-template #addressBookNotResult>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12 text-center my-2\">\n <h4> {{'address-book-not-result' | translate }} </h4>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #addressBookLoading>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-12 text-center my-2\">\n <div class=\"d-flex flex-column jusitfy-content-center align-items-center\">\n <app-loading-full-ec></app-loading-full-ec>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n</ng-container>\n\n<ng-template #pleaseLogin>\n <div class=\"container\">\n <p>Por favor <a [routerLink]=\"['/auth/login']\" > Inicie Sesi\u00F3n</a></p>\n </div>\n</ng-template>",
|
|
349
|
+
providers: [BsModalService],
|
|
350
|
+
styles: [".mt-df{margin:10px auto 0}.btn.btn-outline-secondary.active,.btn.btn-outline-secondary:hover{color:#fff!important}.required{color:red}.field-label{color:#000}.btn.valid-btn{background-color:#000;color:#fff;margin-right:-3px;margin-bottom:10px}label{color:#000}.input-size-lg{width:1.8rem;height:1.8rem}"]
|
|
351
|
+
})
|
|
352
|
+
], DataFormEcComponent);
|
|
353
|
+
export { DataFormEcComponent };
|
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWZvcm0tZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9jaGVja291dC1lYy9kYXRhZm9ybS1lYy9kYXRhZm9ybS1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBd0IsS0FBSyxFQUFrQyxNQUFNLGVBQWUsQ0FBQztBQUN2RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTywwQ0FBMEMsQ0FBQztBQVFqRixJQUFhLG1CQUFtQixHQUFoQyxNQUFhLG1CQUFvQixTQUFRLGVBQWU7SUF1Q3BELFlBQW1CLFdBQXdCLEVBQ2hDLEVBQWUsRUFDZixLQUFtQixFQUNuQixpQkFBb0MsRUFDcEMs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LENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtJQUN6QixDQUFDO0lBdUdELFNBQVMsQ0FBQyxRQUEwQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBMERELE1BQU0sQ0FBQyxDQUFDO1FBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0NBYUosQ0FBQTs7WUFqVG1DLFdBQVc7WUFDNUIsV0FBVztZQUNSLFlBQVk7WUFDQSxpQkFBaUI7WUFDdkIsV0FBVztZQUNULGNBQWM7WUFDZCxpQkFBaUI7WUFDeEIsU0FBUztZQUNGLG9CQUFvQjs7QUE3Q3JDO0lBQVIsS0FBSyxFQUFFO29EQUFTO0FBQ1I7SUFBUixLQUFLLEVBQUU7c0RBQTJCO0FBQzFCO0lBQVIsS0FBSyxFQUFFO3FEQUFtQjtBQUpsQixtQkFBbUI7SUFOL0IsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQiw2NmdEQUF5QztRQUV6QyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7O0tBQzlCLENBQUM7R0FDVyxtQkFBbUIsQ0F3Vi9CO1NBeFZZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlcic7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBBZGRyZXNzaW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NoZWNrb3V0L2FkZHJlc3Npbmcuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbC9icy1tb2RhbC1yZWYuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi8uLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBhZGQgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Nocm9ub3MnO1xuaW1wb3J0IHsgUGFyYW1ldGVyc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYXJhbWV0ZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICAnLi4vLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWRhdGFmb3JtLWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2RhdGFmb3JtLWVjLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnZGF0YWZvcm0tZWMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtCc01vZGFsU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YUZvcm1FY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKSBzdGVwX2lkO1xuICAgIEBJbnB1dCgpIGlzTGFzdE9uZTpib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgbmV4dFN0ZXA6RnVuY3Rpb247XG5cbiAgICBwcm90ZWN0ZWQgY291bnRyaWVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgICBwcm90ZWN0ZWQgcHJvdmluY2VzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgICBwcm90ZWN0ZWQgZG9jdW1lbnRUeXBlc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gICAgcHJvdGVjdGVkIGNvdW50cmllc0ZhY3R1cmFjaW9uU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgICBwcm90ZWN0ZWQgcHJvdmluY2VzRmFjdHVyYWNpb25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICAgIHByb3RlY3RlZCBkb2N1bWVudFR5cGVzRmFjdHVyYWNpb25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuXG4gICAgcHVibGljIGNvdW50cmllcyQgPSB0aGlzLmNvdW50cmllc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIHByb3ZpbmNlcyQgPSB0aGlzLnByb3ZpbmNlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGRvY3VtZW50VHlwZXMkID0gdGhpcy5kb2N1bWVudFR5cGVzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgY291bnRyaWVzRmFjdHVyYWNpb24kID0gdGhpcy5jb3VudHJpZXNGYWN0dXJhY2lvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIHByb3ZpbmNlc0ZhY3R1cmFjaW9uJCA9IHRoaXMucHJvdmluY2VzRmFjdHVyYWNpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBkb2N1bWVudFR5cGVzRmFjdHVyYWNpb24kID0gdGhpcy5kb2N1bWVudFR5cGVzRmFjdHVyYWNpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHVibGljIHJlcXVpcmVfbG9naW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgY2hlY2tvdXRGb3JtOiBGb3JtR3JvdXA7XG4gICAgcHVibGljIGNoZWNrb3V0Rm9ybUZhY3R1cmFjaW9uOiBGb3JtR3JvdXA7XG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgICBwdWJsaWMgZm9ybV9yZWFkeSA9IGZhbHNlO1xuICAgIHB1YmxpYyBhbGxyZWFkeV9kYXRhID0gZmFsc2U7XG4gICAgcHVibGljIGFkZHJlc3NCb29rID0gW107XG4gICAgcHVibGljIGFkZHJlc3NCb29rU2VsZWN0ZWQgPSB7IGlkOiAwLCBub3RlczogXCJcIiB9XG4gICAgcHVibGljIGZpbmlzaDpib29sZWFuID0gZmFsc2U7IC8vRXN0YSB2YXJpYWJsZSBzZSB1c2EgcGFyYSBtb3N0cmFyIGVsIGJvdG9uIGRlIGZpbmFsaXphci5cblxuICAgIHB1YmxpYyB2YWxpZGFkbyA9IGZhbHNlO1xuICAgIHB1YmxpYyB2aWV3RGF0YUZhY3R1cmFjaW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBtb2RhbFJlZjogQnNNb2RhbFJlZiB8IG51bGw7XG4gICAgcHVibGljIHBhcmFtczogYW55ID0ge307XG4gICAgcHVibGljIHNlbGVjdEFkZHJlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBwb3N0YWxDb2RlUGF0dGVybiA9ICdeWzAtOV1bMC05XSokJztcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHB1YmxpYyB0b2FzdDogVG9hc3RTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYWRkcmVzc2luZ1NlcnZpY2U6IEFkZHJlc3NpbmdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBwYXJhbXNTZXJ2aWNlOiBQYXJhbWV0ZXJzU2VydmljZSxcbiAgICAgICAgcHVibGljIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwdWJsaWMgY2hhbm5lbENvbmZpZzogQ2hhbm5lbENvbmZpZ1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIC4uLnRoaXMuYWRkcmVzc2luZ1NlcnZpY2UuZ2V0VHlwZUZvcm0oKS5jb25maWdGb3JtLmZvcm1BZGRyZXMsXG4gICAgICAgICAgICBwb3N0Y29kZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucG9zdGFsQ29kZVBhdHRlcm4pXV0gLy8gU2UgYWdyZWdhIHBhcmEgcXVlIHPDs2xvIGFjZXB0ZSBjw7NkaWdvcyBwb3N0YWxlcyBtYXlvcmVzIHF1ZSBjZXJvXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybS5zdGF0dXNDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4geyB0aGlzLm9uRm9ybUNoYW5nZSgpOyByZXR1cm4gdGhpcy5jaGVja291dEZvcm0udmFsaWQgfSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Gb3JtVmFsaWQoKSk7XG5cbiAgICAgICAgdGhpcy5jaGVja291dEZvcm1GYWN0dXJhY2lvbiA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgLi4udGhpcy5hZGRyZXNzaW5nU2VydmljZS5nZXRUeXBlRm9ybSgpLmNvbmZpZ0Zvcm0uZm9ybUJpbGxpbmcsXG4gICAgICAgICAgICBwb3N0Y29kZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMucG9zdGFsQ29kZVBhdHRlcm4pXV0gLy8gU2UgYWdyZWdhIHBhcmEgcXVlIHPDs2xvIGFjZXB0ZSBjw7NkaWdvcyBwb3N0YWxlcyBtYXlvcmVzIHF1ZSBjZXJvXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybUZhY3R1cmFjaW9uLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7IHRoaXMub25Gb3JtQ2hhbmdlKCk7IHJldHVybiB0aGlzLmNoZWNrb3V0Rm9ybUZhY3R1cmFjaW9uLnZhbGlkIH0pKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRm9ybVZhbGlkKCkpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnBhcmFtc1NlcnZpY2UucGFyYW1ldGVycy5zdWJzY3JpYmUocmVzID0+IHRoaXMucGFyYW1zID0gcmVzKTtcbiAgICAgICAgdGhpcy5hZGRyZXNzaW5nU2VydmljZS5pbml0aWFsaXplKHRoaXMuc3RlcF9pZCk7XG4gICAgICAgIGNvbnN0IGxvY2FsRW1haWwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWFpbCcpXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ2VtYWlsJ10uc2V0VmFsdWUodGhpcy5hdXRoU2VydmljZS5nZXRDdXN0b21lcigpPy5lbWFpbCB8fCBsb2NhbEVtYWlsKTtcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLmNoZWNrb3V0Rm9ybS5nZXQoJ2VtYWlsJykuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICB0aGlzLmFkZHJlc3NpbmdTZXJ2aWNlLmdldEFkZHJlc3NpbmdEYXRhKCkudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgbGV0IGNvdW50cmllcyA9IHRoaXMuZmlsdGVyQ291bnRyeUJ5Q29kZShyZXMpXG4gICAgICAgICAgICB0aGlzLmNvdW50cmllc1N1YmplY3QubmV4dChjb3VudHJpZXMpO1xuICAgICAgICAgICAgdGhpcy5jb3VudHJpZXNGYWN0dXJhY2lvblN1YmplY3QubmV4dChjb3VudHJpZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICAodGhpcy5hZGRyZXNzaW5nU2VydmljZS5tb2RlU2VsZWN0QWRkcmVzcyA9PSAnTE9BRF9BRERSRVNTX0FORF9TRUxFQ1RJT04nIHx8IHRoaXMuYWRkcmVzc2luZ1NlcnZpY2UubW9kZVNlbGVjdEFkZHJlc3MgPT0gJ09OTFlfQUREUkVTU19TRUxFQ1RJT04nKVxuICAgICAgICAgICAgJiYgdGhpcy5hZGRyZXNzaW5nU2VydmljZS5nZXRBZGRyZXNzQm9vaygpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NCb29rID0gcmVzICYmIHJlcyB8fCBudWxsXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzQm9vayA9PSBudWxsICYmIHRoaXMuc2V0TW9kZSgnY2FyZ2EnKSB9XG4gICAgICAgICAgICApXG5cbiAgICAgICAgdGhpcy5jb3VudHJpZXMkLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgaWYocmVzICYmIHJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ2NvdW50cnlDb2RlJ10uc2V0VmFsdWUocmVzWzBdLmNvZGUpXG5cbiAgICAgICAgICAgICAgICAvLyBQcm92aW5jaWFcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1sncHJvdmluY2VDb2RlJ10uc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIHJlc1swXT8ucHJvdmluY2VzWzBdLmNvZGVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgdGhpcy5wcm92aW5jZXNTdWJqZWN0Lm5leHQocmVzWzBdPy5wcm92aW5jZXMpXG5cbiAgICAgICAgICAgICAgICAvLyBEb2N1bWVudG9cbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1snZG9jdW1lbnRUeXBlJ10uc2V0VmFsdWUocmVzWzBdPy5kb2N1bWVudFR5cGVzWzBdLmNvZGUpXG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudFR5cGVzU3ViamVjdC5uZXh0KHJlc1swXT8uZG9jdW1lbnRUeXBlcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLmVjT25Jbml0KClcbiAgICAgfVxuICAgICAvKipcbiAgICAgICogQGRlc2NyaXB0aW9uIGZpbHRyYSBsb3MgcGFpc2VzIGRlIGFjdWVyZG8gYWwgYSBsb3MgY29kaWdvcyByZXRvcm5hZG9zIGVuIGxhIGZ1bmNpb24gZ2V0Q291bnRyaWVzLlxuICAgICAgKiBDYXNvcyBkZSB1c29zOiBTaSBnZXRDb3VudHJpZXMgZXMgdmFjaW8sIHJldG9ybmEgZWwgYXJyZWdsbyBxdWUgaW5ncmVzYSBwb3IgcGFyYW1ldHJvLlxuICAgICAgKiBTaSBnZXRDb3VudHJpZXMgY29udGllbmUgdmFsb3JlcyBxdWUgbm8gY29pbmNpZGVuLCByZXRvcm5hIGVsIGFycmVnbG8gcXVlIGluZ3Jlc2EgcG9yIHBhcmFtZXRyby5cbiAgICAgICogRGUgbG8gY29udHJhcmlvIHJldG9ybmEgbG9zIHZhbG9yZXMgZmlsdHJhZG9zLlxuICAgICAgKiBAcGFyYW0gY291bnRyaWVzIEFycmVnbG8gcXVlIGNvbnRpZW5lIGxvcyBjb3VudHJpZXMgcmVjaWJpZG9zIGVuIGxhIHN1YnNjcmlwY2lvbiBkZWwgb2JzZXJ2YWJsZS5cbiAgICAgICogQHJldHVybnMgdW4gYXJyZWdsbyBkZSBjb3VudHJpZXMuXG4gICAgICAqL1xuICAgICBwcml2YXRlIGZpbHRlckNvdW50cnlCeUNvZGUgPSAoY291bnRyaWVzOmFueVtdKSA9PiB7XG4gICAgICAgIGlmKHRoaXMuY29uc3RzLmdldENvdW50cmllcygpLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgbGV0IGNvdW50cmllc0ZpbHRlcmVkID0gY291bnRyaWVzLmZpbHRlciggZWxlbSA9PiB0aGlzLmNvbnN0cy5nZXRDb3VudHJpZXMoKS5pbmNsdWRlcyhlbGVtLmNvZGUpKVxuICAgICAgICAgICAgaWYoY291bnRyaWVzRmlsdGVyZWQubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50cmllc0ZpbHRlcmVkXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFbC9sb3MgY29kaWdvL3MgaW5ncmVzYWRvL3Mgbm8gY29pbmNpZGVuIGNvbiBsb3MgcHJvdmlzdG9zIGRlc2RlIGVsIGJhY2tlbmQnKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3VudHJpZXNcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiBjb3VudHJpZXNcbiAgICAgICAgfVxuICAgICB9XG5cbiAgICBzaG93Rm9ybUZhY3R1cmFjaW9uID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnZpZXdEYXRhRmFjdHVyYWNpb24gPSAhdGhpcy52aWV3RGF0YUZhY3R1cmFjaW9uXG4gICAgICAgIGlmICghdGhpcy52aWV3RGF0YUZhY3R1cmFjaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvdW50cmllc0ZhY3R1cmFjaW9uJC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24uY29udHJvbHNbJ2NvdW50cnlDb2RlJ10uc2V0VmFsdWUocmVzWzBdLmNvZGUpXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUHJvdmluY2lhXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24uY29udHJvbHNbJ3Byb3ZpbmNlQ29kZSddLnNldFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzWzBdPy5wcm92aW5jZXNbMF0uY29kZVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvdmluY2VzRmFjdHVyYWNpb25TdWJqZWN0Lm5leHQocmVzWzBdPy5wcm92aW5jZXMpXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRG9jdW1lbnRvXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24uY29udHJvbHNbJ2RvY3VtZW50VHlwZSddLnNldFZhbHVlKHJlc1swXT8uZG9jdW1lbnRUeXBlc1swXS5jb2RlKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50VHlwZXNGYWN0dXJhY2lvblN1YmplY3QubmV4dChyZXNbMF0/LmRvY3VtZW50VHlwZXMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRm9ybUNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdEYXRhRmFjdHVyYWNpb25cbiAgICB9XG5cbiAgICBvbkZvcm1WYWxpZCA9ICgpID0+IHtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Gb3JtQ2hhbmdlKCkge1xuICAgICAgICBpZiAodGhpcy5jaGVja291dEZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy52aWV3RGF0YUZhY3R1cmFjaW9uICYmIHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24udmFsaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYWRvID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudmlld0RhdGFGYWN0dXJhY2lvbiAmJiB0aGlzLmNoZWNrb3V0Rm9ybS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhZG8gPSB0cnVlXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZGFkbyA9IGZhbHNlXG4gICAgfVxuXG4gICAgb25JbnB1dENoYW5nZSA9ICgpID0+IHRoaXMuZm9ybV9yZWFkeSA9IGZhbHNlO1xuXG4gICAgb25Db3VudHJ5U2VsZWN0ZWQgPSAodmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ2NvdW50cnlDb2RlJ10uc2V0VmFsdWUodmFsdWUgPT0gJ251bGwnID8gbnVsbCA6IHZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ3Byb3ZpbmNlQ29kZSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1snZG9jdW1lbnRUeXBlJ10uc2V0VmFsdWUoJycpO1xuXG4gICAgICAgIC8vUHJvdmluY2VzXG4gICAgICAgIGxldCBwcm92aW5jZXMgPSB2YWx1ZSAmJiB2YWx1ZSAhPSAnbnVsbCcgP1xuICAgICAgICAgICAgdGhpcy5jb3VudHJpZXNTdWJqZWN0LnZhbHVlLmZpbmQoY291bnRyeSA9PiBjb3VudHJ5LmNvZGUgPT0gdmFsdWUpLnByb3ZpbmNlc1xuICAgICAgICAgICAgOlxuICAgICAgICAgICAgW11cbiAgICAgICAgdGhpcy5wcm92aW5jZXNTdWJqZWN0Lm5leHQocHJvdmluY2VzKTtcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ3Byb3ZpbmNlQ29kZSddLnNldFZhbHVlKHByb3ZpbmNlc1swXS5jb2RlKVxuXG4gICAgICAgIC8vRG9jdW1lbnQgdHlwZXNcbiAgICAgICAgbGV0IGRvY3VtZW50VHlwZXMgPSB2YWx1ZSAmJiB2YWx1ZSAhPSAnbnVsbCcgP1xuICAgICAgICAgICAgdGhpcy5jb3VudHJpZXNTdWJqZWN0LnZhbHVlLmZpbmQoY291bnRyeSA9PiBjb3VudHJ5LmNvZGUgPT0gdmFsdWUpLmRvY3VtZW50VHlwZXNcbiAgICAgICAgICAgIDpcbiAgICAgICAgICAgIFtdXG4gICAgICAgIHRoaXMuZG9jdW1lbnRUeXBlc1N1YmplY3QubmV4dChkb2N1bWVudFR5cGVzKTtcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ2RvY3VtZW50VHlwZSddLnNldFZhbHVlKGRvY3VtZW50VHlwZXNbMF0uY29kZSlcblxuICAgIH1cblxuICAgIG9uQ291bnRyeVNlbGVjdGVkRmFjdHVyYWNpb24gPSAodmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm1GYWN0dXJhY2lvbi5jb250cm9sc1snY291bnRyeUNvZGUnXS5zZXRWYWx1ZSh2YWx1ZSA9PSAnbnVsbCcgPyBudWxsIDogdmFsdWUpO1xuICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybUZhY3R1cmFjaW9uLmNvbnRyb2xzWydwcm92aW5jZUNvZGUnXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm1GYWN0dXJhY2lvbi5jb250cm9sc1snZG9jdW1lbnRUeXBlJ10uc2V0VmFsdWUoJycpO1xuXG4gICAgICAgIC8vUHJvdmluY2VzXG4gICAgICAgIGxldCBwcm92aW5jZXMgPSB2YWx1ZSAmJiB2YWx1ZSAhPSAnbnVsbCcgP1xuICAgICAgICAgICAgdGhpcy5jb3VudHJpZXNGYWN0dXJhY2lvblN1YmplY3QudmFsdWUuZmluZChjb3VudHJ5ID0+IGNvdW50cnkuY29kZSA9PSB2YWx1ZSkucHJvdmluY2VzXG4gICAgICAgICAgICA6XG4gICAgICAgICAgICBbXVxuICAgICAgICB0aGlzLnByb3ZpbmNlc0ZhY3R1cmFjaW9uU3ViamVjdC5uZXh0KHByb3ZpbmNlcyk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24uY29udHJvbHNbJ3Byb3ZpbmNlQ29kZSddLnNldFZhbHVlKHByb3ZpbmNlc1swXS5jb2RlKVxuXG4gICAgICAgIC8vRG9jdW1lbnQgdHlwZXNcbiAgICAgICAgbGV0IGRvY3VtZW50VHlwZXMgPSB2YWx1ZSAmJiB2YWx1ZSAhPSAnbnVsbCcgP1xuICAgICAgICAgICAgdGhpcy5jb3VudHJpZXNGYWN0dXJhY2lvblN1YmplY3QudmFsdWUuZmluZChjb3VudHJ5ID0+IGNvdW50cnkuY29kZSA9PSB2YWx1ZSkuZG9jdW1lbnRUeXBlc1xuICAgICAgICAgICAgOlxuICAgICAgICAgICAgW11cbiAgICAgICAgdGhpcy5kb2N1bWVudFR5cGVzRmFjdHVyYWNpb25TdWJqZWN0Lm5leHQoZG9jdW1lbnRUeXBlcyk7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24uY29udHJvbHNbJ2RvY3VtZW50VHlwZSddLnNldFZhbHVlKGRvY3VtZW50VHlwZXNbMF0uY29kZSlcbiAgICB9XG5cbiAgICBvblByb3ZpbmNlc1NlbGVjdGVkID0gKHZhbHVlKSA9PiB0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1sncHJvdmluY2VDb2RlJ10uc2V0VmFsdWUodmFsdWUgPT0gJ251bGwnID8gbnVsbCA6IHZhbHVlKTtcblxuICAgIG9uUHJvdmluY2VzU2VsZWN0ZWRGYWN0dXJhY2lvbiA9ICh2YWx1ZSkgPT4gdGhpcy5jaGVja291dEZvcm1GYWN0dXJhY2lvbi5jb250cm9sc1sncHJvdmluY2VDb2RlJ10uc2V0VmFsdWUodmFsdWUgPT0gJ251bGwnID8gbnVsbCA6IHZhbHVlKTtcblxuICAgIG9uRG9jdW1lbnRUeXBlc1NlbGVjdGVkID0gKHZhbHVlKSA9PiB0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1snZG9jdW1lbnRUeXBlJ10uc2V0VmFsdWUodmFsdWUgPT0gJycgPyAnJyA6IHZhbHVlKTtcblxuICAgIG9uRG9jdW1lbnRUeXBlc1NlbGVjdGVkRmFjdHVyYWNpb24gPSAodmFsdWUpID0+IHRoaXMuY2hlY2tvdXRGb3JtLmNvbnRyb2xzWydkb2N1bWVudFR5cGUnXS5zZXRWYWx1ZSh2YWx1ZSA9PSAnJyA/ICcnIDogdmFsdWUpO1xuXG4gICAgdmVyaWZ5VmFsaWRhdGUgPSBhc3luYyAoZSwgaXRlbXMpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIlZlcmlmeWluZzogXCIsIGUpXG4gICAgICAgIHRoaXMucmVxdWlyZV9sb2dpbiA9IGZhbHNlO1xuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ2VtYWlsJ10uc2V0VmFsdWUoZSk7XG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMuY2hlY2tvdXRGb3JtLmdldCgnZW1haWwnKS5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUgfSk7XG5cbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLmNoZWNrb3V0Rm9ybS52YWxpZCkge1xuICAgICAgICAgIC8vIGlmICh0aGlzLmNhcnRTZXJ2aWNlLmNoYW5uZWxDb25maWcuYXBwbHlPcmRlckxvdCl7XG4gICAgICAgICAgLy8gIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgaWYgKCFpdGVtLmxvdFswXSl7XG4gICAgICAgICAgLy8gICAgICAvLyAgICBjb25zb2xlLmxvZyh0aGlzLmNoZWNrb3V0Rm9ybS5jb250cm9sc1snY2l0eSddWyd2YWx1ZSddKVxuICAgICAgICAgIC8vICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LDAsaXRlbS52YXJpYW50X2lkLDAsaXRlbS5pdGVtX2lkLGl0ZW0ucXVhbnRpdHksaXRlbS5wcm9kdWN0LnByaWNlLGl0ZW0ucXVhbnRpdHksaXRlbS5kaXNjb3VudCxpdGVtLnByb2R1Y3QucHJpY2UqaXRlbS5xdWFudGl0eSwnbmV3JywnJywnJywwLHRoaXMuY2hlY2tvdXRGb3JtLmNvbnRyb2xzWydjaXR5J11bJ3ZhbHVlJ10rICcgLSAnICsgdGhpcy5jaGVja291dEZvcm0uY29udHJvbHNbJ3N0cmVldCddWyd2YWx1ZSddLCAnbmV3bG90Jyk7XG4gICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIHRoaXMuZW1pdFJlc3VsdCgpO1xuICAgICAgICB9ZWxzZVxuICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoJ2ludmFsaWQtZm9ybScpO1xuICAgIH1cblxuICAgIHNob3dFcnJvciA9IChlcnJvcl9tZXNzYWdlKSA9PiB7IHRoaXMudG9hc3Quc2hvdyhlcnJvcl9tZXNzYWdlKTsgcmV0dXJuIHRydWU7IH1cblxuICAgIHByb3RlY3RlZCBlbWl0UmVzdWx0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBsZXQgZGF0YTogYW55ID0geyBzaGlwcGluZ0FkZHJlc3M6IHsgLi4udGhpcy5jaGVja291dEZvcm0uZ2V0UmF3VmFsdWUoKSwgcGhvbmVOdW1iZXI6IHRoaXMuY2hlY2tvdXRGb3JtLnZhbHVlLnBob25lTnVtYmVyLnRvU3RyaW5nKCkgfSwgbm90ZXM6ICh0aGlzLmNoZWNrb3V0Rm9ybS5nZXRSYXdWYWx1ZSgpKS5ub3RlcyB9O1xuICAgICAgICBpZiAoIXRoaXMudmlld0RhdGFGYWN0dXJhY2lvbiAmJiB0aGlzLmNoZWNrb3V0Rm9ybUZhY3R1cmFjaW9uLnZhbGlkKSBkYXRhID0geyAuLi5kYXRhLCBub3RlczogZGF0YS5ub3RlcywgYmlsbGluZ0FkZHJlc3M6IHRoaXMuY2hlY2tvdXRGb3JtRmFjdHVyYWNpb24uZ2V0UmF3VmFsdWUoKSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWRkcmVzc2luZ1NlcnZpY2Uuc2V0QWRkcmVzcyhkYXRhKTtcblxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2Upe1xuICAgICAgICAgICAgICAgIHRoaXMucmVxdWlyZV9sb2dpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zaG93KCdFbCBlbWFpbCB5YSBlc3TDoSByZWdpc3RyYWRvLCBpbmljaWUgc2VzacOzbi4nKVxuXG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQgIT09IGZhbHNlICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtX3JlYWR5ID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHRoaXMuYWxscmVhZHlfZGF0YSA9IHRydWVcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRTdGVwKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGNhdGNoIChlKSB7IHRoaXMudG9hc3Quc2hvdygnb3BlcmF0aW9uLWVycm9yJykgfVxuICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb3Blbk1vZGFsKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCB7IGNsYXNzOiAnbW9kYWwtbGcgJywga2V5Ym9hcmQ6IGZhbHNlLCBiYWNrZHJvcDogJ3N0YXRpYycgfSk7XG4gICAgfVxuXG4gICAgc2V0U2VsZWN0QWRkcmVzcyA9IChhZGRyZXNzU2VsZWN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZGRyZXNzQm9vay5tYXAoYWRkcmVzcyA9PiBhZGRyZXNzLnNlbGVjdGVkID0gYWRkcmVzcy5pZCA9PT0gYWRkcmVzc1NlbGVjdC5pZClcbiAgICAgICAgdGhpcy5hZGRyZXNzQm9va1NlbGVjdGVkLmlkID0gdGhpcy5hZGRyZXNzQm9vay5maW5kKGFkZHJlc3MgPT4gYWRkcmVzcy5zZWxlY3RlZCkuaWQgfHwgMFxuICAgIH1cblxuICAgIHNlbGVjdEFkZHJlc3MgPSBhc3luYyAoaXRlbXMpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgbGV0IGFkZHJlc3NTZWxlY3RlZCA9IHRoaXMuYWRkcmVzc0Jvb2suZmluZChhZGRyZXNzID0+IGFkZHJlc3Muc2VsZWN0ZWQpXG4gICAgICAgIGlmIChhZGRyZXNzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZHJlc3NCb29rU2VsZWN0ZWQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzQm9va1NlbGVjdGVkLmlkID0gYWRkcmVzc1NlbGVjdGVkLmlkIHx8IDBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuYWRkcmVzc0Jvb2tTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgc2hpcHBpbmdBZGRyZXNzOiBhZGRyZXNzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0U2VkZSA9IGF3YWl0IHRoaXMuYWRkcmVzc2luZ1NlcnZpY2Uuc2V0SGVhZHF1YXJ0ZXIocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFNlZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FydFNlcnZpY2UuY2hhbm5lbENvbmZpZy5hcHBseU9yZGVyTG90KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLmxvdFswXSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsMCxpdGVtLnZhcmlhbnRfaWQsMCxpdGVtLml0ZW1faWQsaXRlbS5xdWFudGl0eSxpdGVtLnByb2R1Y3QucHJpY2UsaXRlbS5xdWFudGl0eSxpdGVtLmRpc2NvdW50LGl0ZW0ucHJvZHVjdC5wcmljZSppdGVtLnF1YW50aXR5LCduZXcnLCcnLCcnLDAscmVzdWx0U2VkZS5zaGlwcGluZ0FkZHJlc3MuY2l0eSArICcgLSAnICsgcmVzdWx0U2VkZS5zaGlwcGluZ0FkZHJlc3Muc3RyZWV0LCAnbmV3bG90Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybV9yZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxscmVhZHlfZGF0YSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFN0ZXAoKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc2hvdygnb3BlcmF0aW9uLWVycm9yJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IHRoaXMudG9hc3Quc2hvdygnb3BlcmF0aW9uLWVycm9yJykgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoJ2ludmFsaWQtZm9ybScpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0TW9kZSA9ICgpID0+IHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmFkZHJlc3NpbmdTZXJ2aWNlLm1vZGVTZWxlY3RBZGRyZXNzKSB7XG4gICAgICAgICAgICBjYXNlICdPTkxZX0xPQURfQUREUkVTUyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIGNhc2UgJ09OTFlfQUREUkVTU19TRUxFQ1RJT04nOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgY2FzZSAnTE9BRF9BRERSRVNTX0FORF9TRUxFQ1RJT04nOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdEFkZHJlc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgfVxuICAgIHBydWViYSh4KXtcbiAgICAgICAgY29uc29sZS5sb2coeCk7XG4gICAgfVxuXG4gICAgc2V0TW9kZSA9IChtb2RlKSA9PiB0aGlzLnNlbGVjdEFkZHJlcyA9IG1vZGUgPT0gXCJjYXJnYVwiXG5cbiAgICBnZXRDb3VudHJ5ID0gKGNvZGUpID0+IHRoaXMuYWRkcmVzc2luZ1NlcnZpY2UuY291bnRyaWVzTGlzdC5maW5kKHBhaXNlcyA9PiBwYWlzZXMuY29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKSkpPy5uYW1lIHx8IFwiXCJcblxuICAgIGdldFByb3ZpbmNlID0gKGNvZGUpID0+IHRoaXMuYWRkcmVzc2luZ1NlcnZpY2UucHJvdmluY2VMaXN0LmZpbmQoY3QgPT4gY3QuY29kZSA9PSBjb2RlKT8ubmFtZSB8fCBcIlwiXG5cbiAgICBnZXREb2N1bWVudFR5cGUgPSAoY29kZSkgPT4gdGhpcy5hZGRyZXNzaW5nU2VydmljZS5kb2N1bWVudFR5cGVzLmZpbmQoZHQgPT4gZHQuY29kZSA9PSBjb2RlKT8ubmFtZSB8fCBcIlwiXG5cbiAgICBnZXRMYWJlbE5vdGVzUGFyYW0gPSAoKSA9PiB0aGlzLmhhc1BhcmFtcyh0aGlzLnBhcmFtcywgJ2xhYmVsX25vdGVzXycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnXycgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKS5zcGxpdCgnXycpWzBdKVxuXG4gICAgZ2V0UGFyYW1CeUNoYW5uZWxBbmRMYW5ndWFnZSA9IChuYW1lUGFyYW0pID0+IHRoaXMuaGFzUGFyYW1zKHRoaXMucGFyYW1zLCBuYW1lUGFyYW0gKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnXycgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKS5zcGxpdCgnXycpWzBdKVxufVxuIl19
|