ng-easycommerce-v18 0.0.9 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/assets/ec-i18n/es.json +13 -1
  2. package/esm2022/lib/api/connection.service.mjs +6 -2
  3. package/esm2022/lib/constants/core.constants.service.mjs +2 -1
  4. package/esm2022/lib/ec-components/abstractions-components/menu-ec.component.mjs +4 -1
  5. package/esm2022/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.mjs +11 -6
  6. package/esm2022/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.mjs +5 -3
  7. package/esm2022/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.mjs +3 -2
  8. package/esm2022/lib/ec-components/cart-ec/cart-ec.component.mjs +13 -1
  9. package/esm2022/lib/ec-components/collection-ec/collection-ec.component.mjs +2 -2
  10. package/esm2022/lib/ec-components/coupon-ec/coupon-ec.component.mjs +3 -3
  11. package/esm2022/lib/ec-components/faqs-ec/faqs-ec.component.mjs +35 -0
  12. package/esm2022/lib/ec-components/filters-ec/filters-ec.component.mjs +11 -2
  13. package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +10 -8
  14. package/esm2022/lib/ec-components/index.mjs +6 -4
  15. package/esm2022/lib/ec-components/product-detail-ec/product-detail-ec.component.mjs +7 -1
  16. package/esm2022/lib/ec-components/related-products-ec/related-products-ec.component.mjs +43 -72
  17. package/esm2022/lib/ec-components/reviews-ec/reviews-ec.component.mjs +76 -0
  18. package/esm2022/lib/ec-components/reviews-form-ec/reviews-form-ec.component.mjs +135 -0
  19. package/esm2022/lib/ec-components/section-container-ec/section-container-ec.component.mjs +75 -0
  20. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/index.mjs +6 -0
  21. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-email-ec/share-email-ec.component.mjs +17 -0
  22. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-facebook-ec/share-facebook-ec.component.mjs +17 -0
  23. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-pinterest-ec/share-pinterest-ec.component.mjs +17 -0
  24. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-twitter-ec/share-twitter-ec.component.mjs +17 -0
  25. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-whatsapp-ec/share-whatsapp-ec.component.mjs +17 -0
  26. package/esm2022/lib/ec-components/share-ec/share-ec.component.mjs +124 -0
  27. package/esm2022/lib/ec-components/sidebar-ec/sidebar-ec.component.mjs +3 -3
  28. package/esm2022/lib/ec-components/widgets-ec/rating-ec/rating-ec.component.mjs +74 -0
  29. package/esm2022/lib/ec-services/auth.service.mjs +3 -3
  30. package/esm2022/lib/ec-services/cart.service.mjs +16 -1
  31. package/esm2022/lib/ec-services/filters.service.mjs +28 -13
  32. package/esm2022/lib/ec-services/options.service.mjs +30 -5
  33. package/esm2022/lib/ec-services/pagination.service.mjs +12 -5
  34. package/esm2022/lib/ec-services/products.service.mjs +4 -10
  35. package/esm2022/lib/ec-services/re-captcha.service.mjs +2 -2
  36. package/esm2022/lib/ec-services/reviews.service.mjs +98 -0
  37. package/esm2022/lib/interfaces/faqs.mjs +2 -0
  38. package/esm2022/lib/interfaces/filter.mjs +1 -1
  39. package/esm2022/lib/interfaces/index.mjs +2 -1
  40. package/fesm2022/ng-easycommerce-v18.mjs +830 -134
  41. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
  42. package/lib/api/connection.service.d.ts +1 -0
  43. package/lib/constants/core.constants.service.d.ts +1 -0
  44. package/lib/ec-components/abstractions-components/menu-ec.component.d.ts +1 -0
  45. package/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.d.ts +1 -0
  46. package/lib/ec-components/cart-ec/cart-ec.component.d.ts +3 -0
  47. package/lib/ec-components/faqs-ec/faqs-ec.component.d.ts +14 -0
  48. package/lib/ec-components/filters-ec/filters-ec.component.d.ts +3 -0
  49. package/lib/ec-components/header-ec/header-ec.component.d.ts +1 -1
  50. package/lib/ec-components/index.d.ts +5 -0
  51. package/lib/ec-components/product-detail-ec/product-detail-ec.component.d.ts +2 -0
  52. package/lib/ec-components/related-products-ec/related-products-ec.component.d.ts +21 -24
  53. package/lib/ec-components/reviews-ec/reviews-ec.component.d.ts +34 -0
  54. package/lib/ec-components/reviews-form-ec/reviews-form-ec.component.d.ts +64 -0
  55. package/lib/ec-components/section-container-ec/section-container-ec.component.d.ts +22 -0
  56. package/lib/ec-components/share-ec/share-buttons-ec/index.d.ts +5 -0
  57. package/lib/ec-components/share-ec/share-buttons-ec/share-email-ec/share-email-ec.component.d.ts +6 -0
  58. package/lib/ec-components/share-ec/share-buttons-ec/share-facebook-ec/share-facebook-ec.component.d.ts +6 -0
  59. package/lib/ec-components/share-ec/share-buttons-ec/share-pinterest-ec/share-pinterest-ec.component.d.ts +6 -0
  60. package/lib/ec-components/share-ec/share-buttons-ec/share-twitter-ec/share-twitter-ec.component.d.ts +6 -0
  61. package/lib/ec-components/share-ec/share-buttons-ec/share-whatsapp-ec/share-whatsapp-ec.component.d.ts +6 -0
  62. package/lib/ec-components/share-ec/share-ec.component.d.ts +27 -0
  63. package/lib/ec-components/widgets-ec/rating-ec/rating-ec.component.d.ts +31 -0
  64. package/lib/ec-services/cart.service.d.ts +1 -0
  65. package/lib/ec-services/filters.service.d.ts +3 -1
  66. package/lib/ec-services/options.service.d.ts +10 -5
  67. package/lib/ec-services/pagination.service.d.ts +1 -0
  68. package/lib/ec-services/products.service.d.ts +1 -1
  69. package/lib/ec-services/reviews.service.d.ts +74 -0
  70. package/lib/interfaces/faqs.d.ts +12 -0
  71. package/lib/interfaces/filter.d.ts +1 -0
  72. package/lib/interfaces/index.d.ts +1 -0
  73. package/package.json +1 -1
@@ -1,30 +1,32 @@
1
- import { Component, Input, inject, PLATFORM_ID, afterNextRender, signal } from '@angular/core';
2
- import { take } from 'rxjs/operators';
3
- import { ComponentHelper } from '../../classes/component-helper';
4
- import { isPlatformBrowser } from '@angular/common';
1
+ import { Component, inject, Input, CUSTOM_ELEMENTS_SCHEMA, signal, PLATFORM_ID, afterNextRender } from '@angular/core';
2
+ import { AnalyticsService, ProductsService } from '../../ec-services';
3
+ import { Router } from '@angular/router';
4
+ import { BehaviorSubject, take } from 'rxjs';
5
+ import { AsyncPipe, CommonModule, isPlatformBrowser } from '@angular/common';
6
+ import { ProductEcComponent } from '../product-ec/product-ec.component';
5
7
  import * as i0 from "@angular/core";
6
- import * as i1 from "../../ec-services/products.service";
7
- import * as i2 from "../../ec-services/analytics/analytics.service";
8
- import * as i3 from "../../constants/core.constants.service";
9
- import * as i4 from "@angular/router";
10
- export class RelatedProductsEcComponent extends ComponentHelper {
11
- productsService;
12
- analyticsService;
13
- consts;
14
- router;
8
+ export class RelatedProductsEcComponent {
9
+ _productsService = inject(ProductsService);
10
+ _analyticsService = inject(AnalyticsService);
11
+ _router = inject(Router);
15
12
  /**
16
- * Signal utlizado para guarda el contenedor del carrusel
17
- */
13
+ * Signal utlizado para guarda el contenedor del carrusel
14
+ */
18
15
  swiperElement = signal(null);
19
- relatedProducts = [];
20
- platformId = inject(PLATFORM_ID);
21
- product_id;
16
+ /**
17
+ * Input que recibe un template para el producto.
18
+ */
19
+ appProduct;
20
+ productID;
22
21
  document;
23
- name = null;
22
+ platformId = inject(PLATFORM_ID);
23
+ _relatedProductsSubject = new BehaviorSubject([]);
24
+ relatedProducts$ = this._relatedProductsSubject.asObservable();
24
25
  keywordsToCompare = ['compare', 'comparar', 'comparacion', 'comparación', 'compared'];
25
- swiperRelated = () => {
26
+ swiperRelatedOptions = () => {
26
27
  return {
27
28
  navigation: true,
29
+ loop: true,
28
30
  breakpoints: {
29
31
  0: {
30
32
  slidesPerView: 1
@@ -44,33 +46,30 @@ export class RelatedProductsEcComponent extends ComponentHelper {
44
46
  }
45
47
  };
46
48
  };
47
- constructor(productsService, analyticsService, consts, router) {
48
- super();
49
- this.productsService = productsService;
50
- this.analyticsService = analyticsService;
51
- this.consts = consts;
52
- this.router = router;
49
+ constructor() {
53
50
  if (isPlatformBrowser(this.platformId)) {
54
51
  this.document = document;
55
52
  }
56
53
  afterNextRender(() => {
57
- const swiperElemConstructor = this.document?.querySelector('#relatedProducts');
54
+ const swiperElemConstructor = this.document?.querySelector('#relatedProductsSwiper');
55
+ console.log('swiperElemConstructor', swiperElemConstructor);
58
56
  if (swiperElemConstructor) {
59
- Object.assign(swiperElemConstructor, this.swiperRelated());
57
+ Object.assign(swiperElemConstructor, this.swiperRelatedOptions());
60
58
  this.swiperElement.set(swiperElemConstructor);
61
59
  this.swiperElement()?.initialize();
62
60
  }
63
61
  });
64
- this.ecOnConstruct();
65
62
  }
66
63
  ngOnInit() {
67
- this.load(this.product_id);
68
- this.ecOnInit();
64
+ console.log(this.productID);
65
+ this.load(this.productID);
69
66
  }
70
67
  load(product_id) {
71
- this.productsService.getRelatedProducts(product_id.toString()).pipe(take(1)).subscribe(res => {
72
- this.relatedProducts = res.filter((elem) => !this.includeKeyword(elem.title.toLowerCase()));
73
- res.map((products) => this.analyticsService.callEvent('view_item_list', { products: products.items, item_list_name: products.title || 'Related Products', item_list_id: products.id || 'related-products' }));
68
+ this._productsService.getRelatedProducts(product_id).pipe(take(1)).subscribe(res => {
69
+ console.log('response', res);
70
+ const relatedProducts = res.filter((elem) => !this.includeKeyword(elem.title.toLowerCase()));
71
+ this._relatedProductsSubject.next(relatedProducts);
72
+ res.map((products) => this._analyticsService.callEvent('view_item_list', { products: products.items, item_list_name: products.title || 'Related Products', item_list_id: products.id || 'related-products' }));
74
73
  });
75
74
  }
76
75
  includeKeyword = (word) => {
@@ -80,46 +79,18 @@ export class RelatedProductsEcComponent extends ComponentHelper {
80
79
  });
81
80
  return result;
82
81
  };
83
- ngOnChanges(changes) {
84
- window.scroll({
85
- top: 0,
86
- left: 0,
87
- behavior: 'smooth'
88
- });
89
- this.load(changes['product_id'].currentValue);
90
- //this.doSomething(changes.categoryId.currentValue);
91
- // You can also use categoryId.previousValue and
92
- // categoryId.firstChange for comparing old and new values
93
- }
94
- customOptions = {
95
- loop: true,
96
- dots: false,
97
- navSpeed: 950,
98
- margin: 0,
99
- navText: ['', ''],
100
- nav: true,
101
- responsive: {
102
- 0: {
103
- items: 1,
104
- nav: true
105
- },
106
- 600: {
107
- items: 3,
108
- nav: true
109
- },
110
- 900: {
111
- items: 4,
112
- nav: true,
113
- }
114
- }
115
- };
116
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelatedProductsEcComponent, deps: [{ token: i1.ProductsService }, { token: i2.AnalyticsService }, { token: i3.CoreConstantsService }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component });
117
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RelatedProductsEcComponent, isStandalone: true, selector: "app-related-products-ec", inputs: { product_id: "product_id" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: " <!-- @for (products of relatedProducts; track $index) {\r\n<section class=\"destacados\" id=\"destacados\">\r\n <div class=\"container-fluid mx-auto py-5\">\r\n <div class=\"row mx-auto d-flex justify-content-start px-3 py-3\">\r\n <h3 class=\"my-auto mx-2 text-left w-fit bold text-beige1\">\r\n {{ products.title ? products.title : 'PRODUCTOS RECOMENDADOS' | uppercase}}\r\n </h3>\r\n </div>\r\n\r\n <owl-carousel-o [options]=\"customOptionsDestacados\" class=\"row mx-auto d-flex justify-content-center p-3 pb-1\">\r\n <ng-template carouselSlide *ngFor=\"let product of products.items\">\r\n <app-product-destacados [product]=\"product\" [isValorados]=\"false\"></app-product-destacados>\r\n </ng-template>\r\n </owl-carousel-o> \r\n\r\n <div class=\"row mx-auto d-flex justify-content-center pb-3 d-md-none\">\r\n <a routerLink=\"/collection\" role=\"button\"\r\n class=\"btn btn-dark bg-beige1 text-blanco bold rounded-pill px-5 py-2\">IR A LA TIENDA</a>\r\n </div>\r\n </div>\r\n</section>\r\n} -->\r\n", styles: [""] });
82
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelatedProductsEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
83
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RelatedProductsEcComponent, isStandalone: true, selector: "app-related-products-ec", inputs: { appProduct: "appProduct", productID: "productID" }, ngImport: i0, template: "\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
118
84
  }
119
85
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelatedProductsEcComponent, decorators: [{
120
86
  type: Component,
121
- args: [{ selector: 'app-related-products-ec', standalone: true, imports: [], template: " <!-- @for (products of relatedProducts; track $index) {\r\n<section class=\"destacados\" id=\"destacados\">\r\n <div class=\"container-fluid mx-auto py-5\">\r\n <div class=\"row mx-auto d-flex justify-content-start px-3 py-3\">\r\n <h3 class=\"my-auto mx-2 text-left w-fit bold text-beige1\">\r\n {{ products.title ? products.title : 'PRODUCTOS RECOMENDADOS' | uppercase}}\r\n </h3>\r\n </div>\r\n\r\n <owl-carousel-o [options]=\"customOptionsDestacados\" class=\"row mx-auto d-flex justify-content-center p-3 pb-1\">\r\n <ng-template carouselSlide *ngFor=\"let product of products.items\">\r\n <app-product-destacados [product]=\"product\" [isValorados]=\"false\"></app-product-destacados>\r\n </ng-template>\r\n </owl-carousel-o> \r\n\r\n <div class=\"row mx-auto d-flex justify-content-center pb-3 d-md-none\">\r\n <a routerLink=\"/collection\" role=\"button\"\r\n class=\"btn btn-dark bg-beige1 text-blanco bold rounded-pill px-5 py-2\">IR A LA TIENDA</a>\r\n </div>\r\n </div>\r\n</section>\r\n} -->\r\n" }]
122
- }], ctorParameters: () => [{ type: i1.ProductsService }, { type: i2.AnalyticsService }, { type: i3.CoreConstantsService }, { type: i4.Router }], propDecorators: { product_id: [{
87
+ args: [{ selector: 'app-related-products-ec', standalone: true, imports: [AsyncPipe, ProductEcComponent, CommonModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "\r\n" }]
88
+ }], ctorParameters: () => [], propDecorators: { appProduct: [{
123
89
  type: Input
90
+ }], productID: [{
91
+ type: Input,
92
+ args: [{
93
+ required: true
94
+ }]
124
95
  }] } });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRlZC1wcm9kdWN0cy1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9yZWxhdGVkLXByb2R1Y3RzLWVjL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcmVsYXRlZC1wcm9kdWN0cy1lYy9yZWxhdGVkLXByb2R1Y3RzLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFpQixNQUFNLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUlqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7O0FBV3BELE1BQU0sT0FBTywwQkFBMkIsU0FBUSxlQUFlO0lBbUNyQztJQUNWO0lBQ0Q7SUFDQTtJQXJDZDs7T0FFRztJQUNILGFBQWEsR0FBRyxNQUFNLENBQXlCLElBQUksQ0FBQyxDQUFBO0lBQzFDLGVBQWUsR0FBTyxFQUFFLENBQUM7SUFDeEIsVUFBVSxHQUFRLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNwQyxVQUFVLENBQU07SUFDakIsUUFBUSxDQUFZO0lBRXJCLElBQUksR0FBRyxJQUFJLENBQUM7SUFDWCxpQkFBaUIsR0FBWSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUVuRyxh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aW5qZWN0LCBQTEFURk9STV9JRCwgYWZ0ZXJOZXh0UmVuZGVyLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcclxuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29yZS5jb25zdGFudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcy9hbmFseXRpY3MvYW5hbHl0aWNzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcy9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTd2lwZXJPcHRpb25zIH0gZnJvbSAnc3dpcGVyL3R5cGVzJztcclxuaW1wb3J0IHsgU3dpcGVyQ29udGFpbmVyIH0gZnJvbSAnc3dpcGVyL2VsZW1lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1yZWxhdGVkLXByb2R1Y3RzLWVjJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbXSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZWxhdGVkLXByb2R1Y3RzLWVjLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVsYXRlZFByb2R1Y3RzRWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdC8qKlxyXG5cdCAqIFNpZ25hbCB1dGxpemFkbyBwYXJhIGd1YXJkYSBlbCBjb250ZW5lZG9yIGRlbCBjYXJydXNlbFxyXG5cdCAqL1xyXG5cdHN3aXBlckVsZW1lbnQgPSBzaWduYWw8U3dpcGVyQ29udGFpbmVyIHwgbnVsbD4obnVsbClcclxuICAgIHB1YmxpYyByZWxhdGVkUHJvZHVjdHM6YW55ID0gW107XHJcbiAgICBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSA9IGluamVjdChQTEFURk9STV9JRClcclxuICAgIEBJbnB1dCgpIHByb2R1Y3RfaWQ6IGFueTtcclxuICAgIHByaXZhdGUgZG9jdW1lbnQ/OiBEb2N1bWVudDtcclxuXHJcbiAgICBwdWJsaWMgbmFtZSA9IG51bGw7XHJcbiAgICBwcml2YXRlIGtleXdvcmRzVG9Db21wYXJlOnN0cmluZ1tdID0gWydjb21wYXJlJywgJ2NvbXBhcmFyJywgJ2NvbXBhcmFjaW9uJywgJ2NvbXBhcmFjacOzbicsICdjb21wYXJlZCddO1xyXG5cclxuICAgICAgICBzd2lwZXJSZWxhdGVkID0gKCk6IFN3aXBlck9wdGlvbnMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgMDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAxXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICA1NzY6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgNzY4OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDMsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICA5OTI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIDEyMDA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBjb25zdHM6IENvcmVDb25zdGFudHNTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuXHRcdFx0dGhpcy5kb2N1bWVudCA9IGRvY3VtZW50XHJcblx0XHR9XHJcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xyXG5cdFx0XHRjb25zdCBzd2lwZXJFbGVtQ29uc3RydWN0b3IgPSB0aGlzLmRvY3VtZW50Py5xdWVyeVNlbGVjdG9yKCcjcmVsYXRlZFByb2R1Y3RzJylcclxuXHRcdFx0aWYgKHN3aXBlckVsZW1Db25zdHJ1Y3Rvcikge1xyXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oc3dpcGVyRWxlbUNvbnN0cnVjdG9yISwgdGhpcy5zd2lwZXJSZWxhdGVkKCkpXHJcblx0XHRcdFx0dGhpcy5zd2lwZXJFbGVtZW50LnNldChzd2lwZXJFbGVtQ29uc3RydWN0b3IgYXMgU3dpcGVyQ29udGFpbmVyKVxyXG5cdFx0XHRcdHRoaXMuc3dpcGVyRWxlbWVudCgpPy5pbml0aWFsaXplKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pXHJcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmxvYWQodGhpcy5wcm9kdWN0X2lkKVxyXG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxyXG4gICAgfVxyXG5cclxuICAgIGxvYWQocHJvZHVjdF9pZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0c1NlcnZpY2UuZ2V0UmVsYXRlZFByb2R1Y3RzKHByb2R1Y3RfaWQudG9TdHJpbmcoKSkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0ZWRQcm9kdWN0cyA9IHJlcy5maWx0ZXIoKGVsZW06IGFueSkgPT4gIXRoaXMuaW5jbHVkZUtleXdvcmQoZWxlbS50aXRsZS50b0xvd2VyQ2FzZSgpKSlcclxuICAgICAgICAgICAgICAgIHJlcy5tYXAoKHByb2R1Y3RzOiBhbnkpID0+IHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3ZpZXdfaXRlbV9saXN0JywgeyBwcm9kdWN0czogcHJvZHVjdHMuaXRlbXMsIGl0ZW1fbGlzdF9uYW1lOiBwcm9kdWN0cy50aXRsZSB8fCAnUmVsYXRlZCBQcm9kdWN0cycsIGl0ZW1fbGlzdF9pZDogcHJvZHVjdHMuaWQgfHwgJ3JlbGF0ZWQtcHJvZHVjdHMnIH0pKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvL3JlcyA9PiByZXMuaXRlbXMgPyB0aGlzLnByb2R1Y3RzID0gcmVzLml0ZW1zIDogbnVsbFxyXG4gICAgICAgICAgICAvLyBlcnIgPT4gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3VuYWJsZS10by1mZXRjaC1wcm9kdWN0cycpXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGluY2x1ZGVLZXl3b3JkID0gKHdvcmQ6c3RyaW5nKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5rZXl3b3Jkc1RvQ29tcGFyZS5mb3JFYWNoKCBrZXl3b3JkID0+IHtcclxuICAgICAgICAgICAgd29yZC5pbmNsdWRlcyhrZXl3b3JkKSA/IHJlc3VsdCA9IHRydWUgOiBudWxsXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9XHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbCh7XHJcbiAgICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkKGNoYW5nZXNbJ3Byb2R1Y3RfaWQnXS5jdXJyZW50VmFsdWUpXHJcbiAgICAgICAgLy90aGlzLmRvU29tZXRoaW5nKGNoYW5nZXMuY2F0ZWdvcnlJZC5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIC8vIFlvdSBjYW4gYWxzbyB1c2UgY2F0ZWdvcnlJZC5wcmV2aW91c1ZhbHVlIGFuZCBcclxuICAgICAgICAvLyBjYXRlZ29yeUlkLmZpcnN0Q2hhbmdlIGZvciBjb21wYXJpbmcgb2xkIGFuZCBuZXcgdmFsdWVzXHJcblxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcHVibGljIGN1c3RvbU9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgICBsb29wOiB0cnVlLFxyXG4gICAgICAgIGRvdHM6IGZhbHNlLFxyXG4gICAgICAgIG5hdlNwZWVkOiA5NTAsXHJcbiAgICAgICAgbWFyZ2luOiAwLFxyXG4gICAgICAgIG5hdlRleHQ6IFsnJywgJyddLFxyXG4gICAgICAgIG5hdjogdHJ1ZSxcclxuICAgICAgICByZXNwb25zaXZlOiB7XHJcbiAgICAgICAgICAgIDA6IHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiAxLFxyXG4gICAgICAgICAgICAgICAgbmF2OiB0cnVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIDYwMDoge1xyXG4gICAgICAgICAgICAgICAgaXRlbXM6IDMsXHJcbiAgICAgICAgICAgICAgICBuYXY6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgOTAwOiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtczogNCxcclxuICAgICAgICAgICAgICAgIG5hdjogdHJ1ZSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBcclxufVxyXG4iLCIgIDwhLS0gQGZvciAocHJvZHVjdHMgb2YgcmVsYXRlZFByb2R1Y3RzOyB0cmFjayAkaW5kZXgpIHtcclxuPHNlY3Rpb24gY2xhc3M9XCJkZXN0YWNhZG9zXCIgaWQ9XCJkZXN0YWNhZG9zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIG14LWF1dG8gcHktNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXgtYXV0byBkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IHB4LTMgcHktM1wiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJteS1hdXRvIG14LTIgdGV4dC1sZWZ0IHctZml0IGJvbGQgdGV4dC1iZWlnZTFcIj5cclxuICAgICAgICAgICAgICAgIHt7IHByb2R1Y3RzLnRpdGxlID8gcHJvZHVjdHMudGl0bGUgOiAnUFJPRFVDVE9TIFJFQ09NRU5EQURPUycgfCB1cHBlcmNhc2V9fVxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgIDxvd2wtY2Fyb3VzZWwtbyBbb3B0aW9uc109XCJjdXN0b21PcHRpb25zRGVzdGFjYWRvc1wiIGNsYXNzPVwicm93IG14LWF1dG8gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0zICBwYi0xXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjYXJvdXNlbFNsaWRlICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIHByb2R1Y3RzLml0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXByb2R1Y3QtZGVzdGFjYWRvcyBbcHJvZHVjdF09XCJwcm9kdWN0XCIgW2lzVmFsb3JhZG9zXT1cImZhbHNlXCI+PC9hcHAtcHJvZHVjdC1kZXN0YWNhZG9zPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvb3dsLWNhcm91c2VsLW8+IFxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG14LWF1dG8gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgcGItMyBkLW1kLW5vbmVcIj5cclxuICAgICAgICAgICAgPGEgcm91dGVyTGluaz1cIi9jb2xsZWN0aW9uXCIgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFyayBiZy1iZWlnZTEgdGV4dC1ibGFuY28gYm9sZCByb3VuZGVkLXBpbGwgcHgtNSBweS0yXCI+SVIgQSBMQSBUSUVOREE8L2E+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG59IC0tPlxyXG4iXX0=
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRlZC1wcm9kdWN0cy1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9yZWxhdGVkLXByb2R1Y3RzLWVjL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcmVsYXRlZC1wcm9kdWN0cy1lYy9yZWxhdGVkLXByb2R1Y3RzLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBWXhFLE1BQU0sT0FBTywwQkFBMEI7SUFDM0IsZ0JBQWdCLEdBQW9CLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUMzRCxpQkFBaUIsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDOUQsT0FBTyxHQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN2Qzs7R0FFRDtJQUNILGFBQWEsR0FBRyxN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LEtBQUssSUFBSSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUN0TixDQUFDLENBQ0osQ0FBQTtJQUNMLENBQUM7SUFFRCxjQUFjLEdBQUcsQ0FBQyxJQUFXLEVBQUUsRUFBRTtRQUM3QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBRSxPQUFPLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDakQsQ0FBQyxDQUFDLENBQUE7UUFDRixPQUFPLE1BQU0sQ0FBQTtJQUNqQixDQUFDLENBQUE7d0dBbEZRLDBCQUEwQjs0RkFBMUIsMEJBQTBCLGlKQ2xCdkMsTUFDQSx5RERZNkMsWUFBWTs7NEZBSzVDLDBCQUEwQjtrQkFSdEMsU0FBUzsrQkFDSSx5QkFBeUIsY0FDdkIsSUFBSSxXQUNQLENBQUMsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxXQUc3QyxDQUFDLHNCQUFzQixDQUFDO3dEQWF4QixVQUFVO3NCQUFsQixLQUFLO2dCQUdILFNBQVM7c0JBRlgsS0FBSzt1QkFBQzt3QkFDSCxRQUFRLEVBQUUsSUFBSTtxQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIFRlbXBsYXRlUmVmLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBzaWduYWwsIFBMQVRGT1JNX0lELCBhZnRlck5leHRSZW5kZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSwgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXN5bmNQaXBlLCBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBQcm9kdWN0RWNDb21wb25lbnQgfSBmcm9tICcuLi9wcm9kdWN0LWVjL3Byb2R1Y3QtZWMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3dpcGVyQ29udGFpbmVyIH0gZnJvbSAnc3dpcGVyL2VsZW1lbnQnO1xyXG5pbXBvcnQgeyBTd2lwZXJPcHRpb25zIH0gZnJvbSAnc3dpcGVyL3R5cGVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtcmVsYXRlZC1wcm9kdWN0cy1lYycsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0FzeW5jUGlwZSwgUHJvZHVjdEVjQ29tcG9uZW50LCBDb21tb25Nb2R1bGVdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50LnNjc3MnLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWxhdGVkUHJvZHVjdHNFY0NvbXBvbmVudCB7XHJcbiAgICBwcml2YXRlIF9wcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSA9IGluamVjdChQcm9kdWN0c1NlcnZpY2UpXHJcbiAgICBwcml2YXRlIF9hbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpXHJcbiAgICBcdC8qKlxyXG5cdCAqIFNpZ25hbCB1dGxpemFkbyBwYXJhIGd1YXJkYSBlbCBjb250ZW5lZG9yIGRlbCBjYXJydXNlbFxyXG5cdCAqL1xyXG5cdHN3aXBlckVsZW1lbnQgPSBzaWduYWw8U3dpcGVyQ29udGFpbmVyIHwgbnVsbD4obnVsbClcclxuICAgIC8qKlxyXG4gICAgICogSW5wdXQgcXVlIHJlY2liZSB1biB0ZW1wbGF0ZSBwYXJhIGVsIHByb2R1Y3RvLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBhcHBQcm9kdWN0OiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICAgQElucHV0KHtcclxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSkgcHJvZHVjdElEOiBhbnk7XHJcblxyXG4gICAgICAgIHByaXZhdGUgZG9jdW1lbnQ/OiBEb2N1bWVudDtcclxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSA9IGluamVjdChQTEFURk9STV9JRClcclxuICAgIFxyXG4gICAgcHJpdmF0ZSBfcmVsYXRlZFByb2R1Y3RzU3ViamVjdDpCZWhhdmlvclN1YmplY3Q8UHJvZHVjdFtdPiA9ICBuZXcgQmVoYXZpb3JTdWJqZWN0PFByb2R1Y3RbXT4oW10pXHJcbiAgICBwdWJsaWMgcmVsYXRlZFByb2R1Y3RzJDpPYnNlcnZhYmxlPGFueVtdPiA9IHRoaXMuX3JlbGF0ZWRQcm9kdWN0c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwcml2YXRlIGtleXdvcmRzVG9Db21wYXJlOnN0cmluZ1tdID0gWydjb21wYXJlJywgJ2NvbXBhcmFyJywgJ2NvbXBhcmFjaW9uJywgJ2NvbXBhcmFjacOzbicsICdjb21wYXJlZCddO1xyXG4gICAgc3dpcGVyUmVsYXRlZE9wdGlvbnMgPSAoKTogU3dpcGVyT3B0aW9ucyA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmF2aWdhdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgbG9vcDogdHJ1ZSxcclxuICAgICAgICAgICAgYnJlYWtwb2ludHM6IHtcclxuICAgICAgICAgICAgICAgIDA6IHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAxXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgNTc2OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIDc2ODoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDMsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgOTkyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAxMjAwOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNCxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudFxyXG4gICAgICAgIH1cclxuICAgICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzd2lwZXJFbGVtQ29uc3RydWN0b3IgPSB0aGlzLmRvY3VtZW50Py5xdWVyeVNlbGVjdG9yKCcjcmVsYXRlZFByb2R1Y3RzU3dpcGVyJylcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3N3aXBlckVsZW1Db25zdHJ1Y3RvcicsIHN3aXBlckVsZW1Db25zdHJ1Y3RvcilcclxuICAgICAgICAgICAgaWYgKHN3aXBlckVsZW1Db25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzd2lwZXJFbGVtQ29uc3RydWN0b3IhLCB0aGlzLnN3aXBlclJlbGF0ZWRPcHRpb25zKCkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN3aXBlckVsZW1lbnQuc2V0KHN3aXBlckVsZW1Db25zdHJ1Y3RvciBhcyBTd2lwZXJDb250YWluZXIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN3aXBlckVsZW1lbnQoKT8uaW5pdGlhbGl6ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnByb2R1Y3RJRClcclxuICAgICAgICB0aGlzLmxvYWQodGhpcy5wcm9kdWN0SUQpXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkKHByb2R1Y3RfaWQ6YW55KSB7XHJcbiAgICAgICAgdGhpcy5fcHJvZHVjdHNTZXJ2aWNlLmdldFJlbGF0ZWRQcm9kdWN0cyhwcm9kdWN0X2lkKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXNwb25zZScscmVzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRQcm9kdWN0czphbnkgPSByZXMuZmlsdGVyKChlbGVtOmFueSkgPT4gIXRoaXMuaW5jbHVkZUtleXdvcmQoZWxlbS50aXRsZS50b0xvd2VyQ2FzZSgpKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbGF0ZWRQcm9kdWN0c1N1YmplY3QubmV4dChyZWxhdGVkUHJvZHVjdHMpXHJcbiAgICAgICAgICAgICAgICByZXMubWFwKChwcm9kdWN0czphbnkpID0+IHRoaXMuX2FuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCd2aWV3X2l0ZW1fbGlzdCcsIHsgcHJvZHVjdHM6IHByb2R1Y3RzLml0ZW1zLCBpdGVtX2xpc3RfbmFtZTogcHJvZHVjdHMudGl0bGUgfHwgJ1JlbGF0ZWQgUHJvZHVjdHMnLCBpdGVtX2xpc3RfaWQ6IHByb2R1Y3RzLmlkIHx8ICdyZWxhdGVkLXByb2R1Y3RzJyB9KSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBpbmNsdWRlS2V5d29yZCA9ICh3b3JkOnN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMua2V5d29yZHNUb0NvbXBhcmUuZm9yRWFjaCgga2V5d29yZCA9PiB7XHJcbiAgICAgICAgICAgIHdvcmQuaW5jbHVkZXMoa2V5d29yZCkgPyByZXN1bHQgPSB0cnVlIDogbnVsbFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG59XHJcblxyXG4iLCJcclxuIl19
@@ -0,0 +1,76 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { ComponentHelper } from '../../classes/component-helper';
3
+ import { RatingEcComponent } from '../widgets-ec/rating-ec/rating-ec.component';
4
+ import { TranslateModule } from '@ngx-translate/core';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../ec-services/reviews.service";
7
+ import * as i2 from "../../constants/core.constants.service";
8
+ import * as i3 from "@ngx-translate/core";
9
+ export class ReviewsEcComponent extends ComponentHelper {
10
+ reviewsService;
11
+ consts;
12
+ /**
13
+ * @description producto del cual se obtendran las reviews.
14
+ */
15
+ product;
16
+ reviews;
17
+ constructor(reviewsService, consts) {
18
+ super();
19
+ this.reviewsService = reviewsService;
20
+ this.consts = consts;
21
+ this.reviewsService.reviews$.subscribe(res => this.reviews = res);
22
+ this.ecOnConstruct();
23
+ }
24
+ ngOnInit() {
25
+ this.reviewsService.getReviewsByCode(this.product.id);
26
+ this.ecOnInit();
27
+ }
28
+ next = () => {
29
+ this.reviewsService.getReviews('next');
30
+ };
31
+ last = () => {
32
+ this.reviewsService.getReviews('last');
33
+ };
34
+ first = () => {
35
+ this.reviewsService.getReviews('first');
36
+ };
37
+ self = () => {
38
+ this.reviewsService.getReviews();
39
+ };
40
+ /**
41
+ * @description genera un arreglo con tamaño igual a la cantidad de paginas que tiene la review.
42
+ * @returns {number[]} un arreglo cuyo contendio es un entero que indica el numero de pagina.
43
+ */
44
+ getPages = () => {
45
+ let pages = [];
46
+ for (let index = 0; index < this.reviews.pages; index++) {
47
+ pages.push(index + 1);
48
+ }
49
+ return pages;
50
+ };
51
+ /**
52
+ * @description actualiza las reviews con el contenido asociado a la pagina pasada por parametro
53
+ * @param page
54
+ */
55
+ goPage = (page) => {
56
+ this.reviewsService.getReviewsByPage(this.product.id, page, this.reviews.limit);
57
+ };
58
+ getAuthorName(email) {
59
+ if (!email || email.indexOf('@') === -1) {
60
+ return '';
61
+ }
62
+ return email.split('@')[0];
63
+ }
64
+ getStarArray(rating) {
65
+ return Array(5).fill(0);
66
+ }
67
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReviewsEcComponent, deps: [{ token: i1.ReviewsService }, { token: i2.CoreConstantsService }], target: i0.ɵɵFactoryTarget.Component });
68
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ReviewsEcComponent, isStandalone: true, selector: "app-reviews-ec", inputs: { product: "product" }, usesInheritance: true, ngImport: i0, template: "<div class=\"row px-3\">\r\n <div class=\"col-12 pb-2 pb-md-0\">\r\n <div class=\"row w-100\">\r\n <div class=\"col-12 col-md-6\">\r\n <h4 class=\"mb-0 pt-2 pb-1\">{{\"product-review\" | translate}}</h4>\r\n <small class=\"pb-2 escribir\" data-bs-toggle=\"modal\" href=\"#modalReview\">\r\n {{\"write-a-review\" | translate}}\r\n <i class=\"bi bi-pencil-square\"></i>\r\n </small>\r\n </div>\r\n <div class=\"col-12 col-md-6 d-flex align-items-center justify-content-start justify-content-md-end\">\r\n <div class=\"puntaje d-flex\">\r\n <ng-template #number let-ratingValue=\"ratingValue\">\r\n <p class=\"puntos mb-0\">\r\n {{ratingValue}}\r\n </p>\r\n </ng-template>\r\n <app-rating-ec [ratingValue]=\"product.rating\" [template]=\"number\"></app-rating-ec>\r\n <div class=\"ms-2\">\r\n <div class=\"stars mb-1\">\r\n <app-rating-ec [ratingValue]=\"product.rating\"></app-rating-ec>\r\n </div>\r\n <small><strong>{{reviews.total}} {{\"reviews\" | translate}}</strong></small>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <hr>\r\n\r\n <div class=\"tab-content mt-4\" id=\"myTabContent\">\r\n <div class=\"row g-5\">\r\n @for (item of reviews.items; track $index) {\r\n <div class=\"col-12 col-sm-6 col-md-4\">\r\n <div class=\"row\">\r\n <div class=\"col-9 col-sm-10\">\r\n <div class=\"ranking\">\r\n <app-rating-ec [ratingValue]=\"item.rating\"></app-rating-ec>\r\n </div>\r\n <h4 class=\"text-uppercase\">{{item.title}}</h4>\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"ususario\">\r\n <i class=\"bi bi-person-fill\"></i> {{ getAuthorName(item.author) }}\r\n </div>\r\n </div>\r\n <div class=\"resenia mt-2\">\r\n <p style=\"font-size: 14px;\"> {{item.comment}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n }\r\n @if (getPages() && getPages().length > 1) {\r\n <nav aria-label=\"Page navigation example\">\r\n <ul class=\"pagination custom-pagination\">\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"first()\" aria-label=\"Previous\">\r\n <span aria-hidden=\"true\">&laquo;</span>\r\n </a>\r\n </li>\r\n @for (page of getPages(); track $index) {\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"goPage(page)\">{{ page }}</a>\r\n </li>\r\n }\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"next()\" aria-label=\"Next\">\r\n <span aria-hidden=\"true\">&raquo;</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [".custom-pagination{display:flex;justify-content:center;list-style:none;padding:0;margin-top:20px}.custom-pagination .page-item{margin:0 5px}.custom-pagination .page-link{color:#131716;background-color:#f3f3f3;border:1px solid #ccc;padding:8px 12px;border-radius:5px;text-decoration:none;transition:background-color .3s ease}.custom-pagination .page-link:hover{background-color:#0b0c0c;color:#fff}.custom-pagination .page-item.active .page-link{background-color:#131716;color:#fff;font-weight:700}.cursor-pointer{cursor:pointer}\n"], dependencies: [{ kind: "component", type: RatingEcComponent, selector: "app-rating-ec", inputs: ["template", "type", "ratingValue"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReviewsEcComponent, decorators: [{
71
+ type: Component,
72
+ args: [{ selector: 'app-reviews-ec', standalone: true, imports: [RatingEcComponent, TranslateModule], template: "<div class=\"row px-3\">\r\n <div class=\"col-12 pb-2 pb-md-0\">\r\n <div class=\"row w-100\">\r\n <div class=\"col-12 col-md-6\">\r\n <h4 class=\"mb-0 pt-2 pb-1\">{{\"product-review\" | translate}}</h4>\r\n <small class=\"pb-2 escribir\" data-bs-toggle=\"modal\" href=\"#modalReview\">\r\n {{\"write-a-review\" | translate}}\r\n <i class=\"bi bi-pencil-square\"></i>\r\n </small>\r\n </div>\r\n <div class=\"col-12 col-md-6 d-flex align-items-center justify-content-start justify-content-md-end\">\r\n <div class=\"puntaje d-flex\">\r\n <ng-template #number let-ratingValue=\"ratingValue\">\r\n <p class=\"puntos mb-0\">\r\n {{ratingValue}}\r\n </p>\r\n </ng-template>\r\n <app-rating-ec [ratingValue]=\"product.rating\" [template]=\"number\"></app-rating-ec>\r\n <div class=\"ms-2\">\r\n <div class=\"stars mb-1\">\r\n <app-rating-ec [ratingValue]=\"product.rating\"></app-rating-ec>\r\n </div>\r\n <small><strong>{{reviews.total}} {{\"reviews\" | translate}}</strong></small>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <hr>\r\n\r\n <div class=\"tab-content mt-4\" id=\"myTabContent\">\r\n <div class=\"row g-5\">\r\n @for (item of reviews.items; track $index) {\r\n <div class=\"col-12 col-sm-6 col-md-4\">\r\n <div class=\"row\">\r\n <div class=\"col-9 col-sm-10\">\r\n <div class=\"ranking\">\r\n <app-rating-ec [ratingValue]=\"item.rating\"></app-rating-ec>\r\n </div>\r\n <h4 class=\"text-uppercase\">{{item.title}}</h4>\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"ususario\">\r\n <i class=\"bi bi-person-fill\"></i> {{ getAuthorName(item.author) }}\r\n </div>\r\n </div>\r\n <div class=\"resenia mt-2\">\r\n <p style=\"font-size: 14px;\"> {{item.comment}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n }\r\n @if (getPages() && getPages().length > 1) {\r\n <nav aria-label=\"Page navigation example\">\r\n <ul class=\"pagination custom-pagination\">\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"first()\" aria-label=\"Previous\">\r\n <span aria-hidden=\"true\">&laquo;</span>\r\n </a>\r\n </li>\r\n @for (page of getPages(); track $index) {\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"goPage(page)\">{{ page }}</a>\r\n </li>\r\n }\r\n <li class=\"page-item\">\r\n <a class=\"page-link cursor-pointer\" (click)=\"next()\" aria-label=\"Next\">\r\n <span aria-hidden=\"true\">&raquo;</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [".custom-pagination{display:flex;justify-content:center;list-style:none;padding:0;margin-top:20px}.custom-pagination .page-item{margin:0 5px}.custom-pagination .page-link{color:#131716;background-color:#f3f3f3;border:1px solid #ccc;padding:8px 12px;border-radius:5px;text-decoration:none;transition:background-color .3s ease}.custom-pagination .page-link:hover{background-color:#0b0c0c;color:#fff}.custom-pagination .page-item.active .page-link{background-color:#131716;color:#fff;font-weight:700}.cursor-pointer{cursor:pointer}\n"] }]
73
+ }], ctorParameters: () => [{ type: i1.ReviewsService }, { type: i2.CoreConstantsService }], propDecorators: { product: [{
74
+ type: Input
75
+ }] } });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3cy1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9yZXZpZXdzLWVjL3Jldmlld3MtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcmV2aWV3cy1lYy9yZXZpZXdzLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7OztBQVF0RCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsZUFBZTtJQVEvQjtJQUF1QztJQVAzRDs7T0FFRztJQUNNLE9BQU8sQ0FBSztJQUVkLE9BQU8sQ0FBSztJQUVuQixZQUFvQixjQUE4QixFQUFTLE1BQTJCO1FBQ2xGLEtBQUssRUFBRSxDQUFBO1FBRFMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBcUI7UUFFbEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQTtRQUNqRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDeEIsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDckQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBRW5CLENBQUM7SUFFRCxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFBO0lBRUQsSUFBSSxHQUFHLEdBQUcsRUFBRTtRQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQTtJQUVELEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUE7SUFFRCxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxRQUFRLEdBQUcsR0FBWSxFQUFFO1FBQ3JCLElBQUksS0FBSyxHQUFVLEVBQUUsQ0FBQTtRQUNyQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN0RCxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN2QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxHQUFHLENBQUMsSUFBVyxFQUFFLEVBQUU7UUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsRixDQUFDLENBQUE7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO3dHQWpFUSxrQkFBa0I7NEZBQWxCLGtCQUFrQixpSUNiL0Isb3NIQStFTSwya0JEdEVRLGlCQUFpQixzR0FBRSxlQUFlOzs0RkFJbkMsa0JBQWtCO2tCQVA5QixTQUFTOytCQUNJLGdCQUFnQixjQUNkLElBQUksV0FDUCxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQztzSEFRcEMsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgTmdNb2R1bGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xyXG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb3JlLmNvbnN0YW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmV2aWV3c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcy9yZXZpZXdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSYXRpbmdFY0NvbXBvbmVudCB9IGZyb20gJy4uL3dpZGdldHMtZWMvcmF0aW5nLWVjL3JhdGluZy1lYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1yZXZpZXdzLWVjJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbUmF0aW5nRWNDb21wb25lbnQsIFRyYW5zbGF0ZU1vZHVsZV0sXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmV2aWV3cy1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9yZXZpZXdzLWVjLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJldmlld3NFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBwcm9kdWN0byBkZWwgY3VhbCBzZSBvYnRlbmRyYW4gbGFzIHJldmlld3MuIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwcm9kdWN0OmFueTtcclxuXHJcbiAgICBwdWJsaWMgcmV2aWV3czphbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZXZpZXdzU2VydmljZTogUmV2aWV3c1NlcnZpY2UsIHB1YmxpYyBjb25zdHM6Q29yZUNvbnN0YW50c1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpXHJcbiAgICAgICAgdGhpcy5yZXZpZXdzU2VydmljZS5yZXZpZXdzJC5zdWJzY3JpYmUocmVzID0+IHRoaXMucmV2aWV3cyA9IHJlcylcclxuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucmV2aWV3c1NlcnZpY2UuZ2V0UmV2aWV3c0J5Q29kZSh0aGlzLnByb2R1Y3QuaWQpXHJcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbmV4dCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnJldmlld3NTZXJ2aWNlLmdldFJldmlld3MoJ25leHQnKTtcclxuICAgIH1cclxuXHJcbiAgICBsYXN0ID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmV2aWV3c1NlcnZpY2UuZ2V0UmV2aWV3cygnbGFzdCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGZpcnN0ID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmV2aWV3c1NlcnZpY2UuZ2V0UmV2aWV3cygnZmlyc3QnKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxmID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmV2aWV3c1NlcnZpY2UuZ2V0UmV2aWV3cygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGdlbmVyYSB1biBhcnJlZ2xvIGNvbiB0YW1hw7FvIGlndWFsIGEgbGEgY2FudGlkYWQgZGUgcGFnaW5hcyBxdWUgdGllbmUgbGEgcmV2aWV3LlxyXG4gICAgICogQHJldHVybnMge251bWJlcltdfSB1biBhcnJlZ2xvIGN1eW8gY29udGVuZGlvIGVzIHVuIGVudGVybyBxdWUgaW5kaWNhIGVsIG51bWVybyBkZSBwYWdpbmEuIFxyXG4gICAgICovXHJcbiAgICBnZXRQYWdlcyA9ICgpOm51bWJlcltdID0+IHtcclxuICAgICAgICBsZXQgcGFnZXM6bnVtYmVyW109W11cclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5yZXZpZXdzLnBhZ2VzOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIHBhZ2VzLnB1c2goaW5kZXgrMSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhZ2VzXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gYWN0dWFsaXphIGxhcyByZXZpZXdzIGNvbiBlbCBjb250ZW5pZG8gYXNvY2lhZG8gYSBsYSBwYWdpbmEgcGFzYWRhIHBvciBwYXJhbWV0cm9cclxuICAgICAqIEBwYXJhbSBwYWdlIFxyXG4gICAgICovXHJcbiAgICBnb1BhZ2UgPSAocGFnZTpudW1iZXIpID0+IHtcclxuICAgICAgICB0aGlzLnJldmlld3NTZXJ2aWNlLmdldFJldmlld3NCeVBhZ2UodGhpcy5wcm9kdWN0LmlkLHBhZ2UsIHRoaXMucmV2aWV3cy5saW1pdClcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdXRob3JOYW1lKGVtYWlsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghZW1haWwgfHwgZW1haWwuaW5kZXhPZignQCcpID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbWFpbC5zcGxpdCgnQCcpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0YXJBcnJheShyYXRpbmc6IG51bWJlcik6IG51bWJlcltdIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkoNSkuZmlsbCgwKTtcclxuICAgIH1cclxuICAgIFxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3cgcHgtM1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwYi0yIHBiLW1kLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHctMTAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1iLTAgcHQtMiBwYi0xXCI+e3tcInByb2R1Y3QtcmV2aWV3XCIgfCB0cmFuc2xhdGV9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJwYi0yIGVzY3JpYmlyXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGhyZWY9XCIjbW9kYWxSZXZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e1wid3JpdGUtYS1yZXZpZXdcIiB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1wZW5jaWwtc3F1YXJlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTYgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQganVzdGlmeS1jb250ZW50LW1kLWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bnRhamUgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNudW1iZXIgbGV0LXJhdGluZ1ZhbHVlPVwicmF0aW5nVmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwdW50b3MgbWItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyYXRpbmdWYWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtcmF0aW5nLWVjIFtyYXRpbmdWYWx1ZV09XCJwcm9kdWN0LnJhdGluZ1wiIFt0ZW1wbGF0ZV09XCJudW1iZXJcIj48L2FwcC1yYXRpbmctZWM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1zLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXJzIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtcmF0aW5nLWVjIFtyYXRpbmdWYWx1ZV09XCJwcm9kdWN0LnJhdGluZ1wiPjwvYXBwLXJhdGluZy1lYz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD48c3Ryb25nPnt7cmV2aWV3cy50b3RhbH19IHt7XCJyZXZpZXdzXCIgfCB0cmFuc2xhdGV9fTwvc3Ryb25nPjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxocj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnQgbXQtNFwiIGlkPVwibXlUYWJDb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTVcIj5cclxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiByZXZpZXdzLml0ZW1zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNiBjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOSBjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhbmtpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtcmF0aW5nLWVjIFtyYXRpbmdWYWx1ZV09XCJpdGVtLnJhdGluZ1wiPjwvYXBwLXJhdGluZy1lYz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cInRleHQtdXBwZXJjYXNlXCI+e3tpdGVtLnRpdGxlfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXN1c2FyaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXBlcnNvbi1maWxsXCI+PC9pPiB7eyBnZXRBdXRob3JOYW1lKGl0ZW0uYXV0aG9yKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzZW5pYSBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIj4ge3tpdGVtLmNvbW1lbnR9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEBpZiAoZ2V0UGFnZXMoKSAmJiBnZXRQYWdlcygpLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgPG5hdiBhcmlhLWxhYmVsPVwiUGFnZSBuYXZpZ2F0aW9uIGV4YW1wbGVcIj5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInBhZ2luYXRpb24gY3VzdG9tLXBhZ2luYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZmlyc3QoKVwiIGFyaWEtbGFiZWw9XCJQcmV2aW91c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JmxhcXVvOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAocGFnZSBvZiBnZXRQYWdlcygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZ29QYWdlKHBhZ2UpXCI+e3sgcGFnZSB9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwibmV4dCgpXCIgYXJpYS1sYWJlbD1cIk5leHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZyYXF1bzs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9uYXY+XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj4iXX0=
@@ -0,0 +1,135 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { ComponentHelper } from '../../classes/component-helper';
4
+ import { TranslateModule } from '@ngx-translate/core';
5
+ import { ReactiveFormsModule } from '@angular/forms';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../ec-services/toast.service";
8
+ import * as i2 from "@angular/router";
9
+ import * as i3 from "../../constants/core.constants.service";
10
+ import * as i4 from "@angular/forms";
11
+ import * as i5 from "../../ec-services/products.service";
12
+ import * as i6 from "../../ec-services/auth.service";
13
+ import * as i7 from "../../ec-services/reviews.service";
14
+ import * as i8 from "@ngx-translate/core";
15
+ export class ReviewsFormEcComponent extends ComponentHelper {
16
+ toastrService;
17
+ router;
18
+ consts;
19
+ formBuilder;
20
+ productService;
21
+ authService;
22
+ reviewsService;
23
+ /**
24
+ * @description producto al que se le va a agregar la reseña.
25
+ */
26
+ product;
27
+ /**
28
+ * @description para controlar si esta logueado.
29
+ */
30
+ withAuthenticated = true;
31
+ /**
32
+ * @description número maximo de valor de puntuación
33
+ */
34
+ max = 5;
35
+ /**
36
+ * @description para indicar cuando se termino la operación de consulta.
37
+ */
38
+ ready = new EventEmitter();
39
+ reviews_form;
40
+ loading = false;
41
+ form_data = new FormData();
42
+ limit = [];
43
+ constructor(toastrService, router, consts, formBuilder, productService, authService, reviewsService) {
44
+ super();
45
+ this.toastrService = toastrService;
46
+ this.router = router;
47
+ this.consts = consts;
48
+ this.formBuilder = formBuilder;
49
+ this.productService = productService;
50
+ this.authService = authService;
51
+ this.reviewsService = reviewsService;
52
+ this.reviews_form = formBuilder.group({
53
+ title: ['', Validators.required],
54
+ comment: ['', Validators.required],
55
+ rating: [0, Validators.required],
56
+ email: ['', this.withAuthenticated ? [] : [Validators.required, Validators.email]],
57
+ //attachment: [''],
58
+ });
59
+ this.ecOnConstruct(); // Removed as the method does not exist
60
+ }
61
+ ngOnInit() {
62
+ for (let index = 0; index < this.max; index++) {
63
+ this.limit.push(index + 1);
64
+ }
65
+ }
66
+ /**
67
+ * @description guarda el valor que contiene la puntuación de la reseña.
68
+ * @param value
69
+ */
70
+ setRatingValue = (value = 0) => {
71
+ this.reviews_form.controls['rating'].setValue(value);
72
+ };
73
+ /**
74
+ * @description procesa el formulario con los datos.
75
+ * @param form
76
+ * @param success_message mensaje para que se muestre en el caso de exito.
77
+ */
78
+ sendForm = (form, success_message) => {
79
+ if (form.valid) {
80
+ this.withAuthenticated ? this.reviews_form.controls['email'].setValue(this.authService.getUserProfileAsUser().email) : null;
81
+ this.productService.saveReviews(this.product.id, form.value).toPromise().then(res => {
82
+ this.reviews_form.reset();
83
+ this.toastrService.show(success_message ? success_message : 'success-review');
84
+ this.loading = false;
85
+ this.ready.emit(true);
86
+ // Queda preparado por si algun dia se quiere manejar sincronismo.
87
+ //this.updateReviews()
88
+ }, err => {
89
+ this.toastrService.show('inquiry-error');
90
+ this.loading = false;
91
+ this.ready.emit(true);
92
+ });
93
+ }
94
+ else {
95
+ this.toastrService.show('invalid-form');
96
+ this.loading = false;
97
+ this.ready.emit(true);
98
+ }
99
+ };
100
+ /**
101
+ * @descirption controla que el usuario este logueado para comentar. Si la variable withAuthenticated es falso entonces no realiza este control.
102
+ * @param e evento producido por el submit del formulario
103
+ */
104
+ toastReviewsForm = (e, message) => {
105
+ this.loading = true;
106
+ e.preventDefault();
107
+ if (this.withAuthenticated) {
108
+ this.authService.isAuthenticated() ?
109
+ this.sendForm(this.reviews_form, message ? message : 'success-review') : this.toastrService.show('authenticated-for-comment');
110
+ }
111
+ else {
112
+ this.sendForm(this.reviews_form, message ? message : 'success-review');
113
+ }
114
+ };
115
+ /**
116
+ * @description actualiza las reviews
117
+ * @returns
118
+ */
119
+ updateReviews = () => this.reviewsService.updateReviewsByCode(this.product.id);
120
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReviewsFormEcComponent, deps: [{ token: i1.ToastService }, { token: i2.Router }, { token: i3.CoreConstantsService }, { token: i4.FormBuilder }, { token: i5.ProductsService }, { token: i6.AuthService }, { token: i7.ReviewsService }], target: i0.ɵɵFactoryTarget.Component });
121
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ReviewsFormEcComponent, isStandalone: true, selector: "app-reviews-form-ec", inputs: { product: "product", withAuthenticated: "withAuthenticated", max: "max" }, outputs: { ready: "ready" }, usesInheritance: true, ngImport: i0, template: "<form class=\"formResenia\" [formGroup]=\"reviews_form\" (submit)=\"toastReviewsForm($event)\">\r\n <div class=\"row\">\r\n <div class=\"col-4\">\r\n <label class=\"pt-2\">{{\"product\" | translate }}*</label>\r\n </div>\r\n <div class=\"col-8\">\r\n <p class=\"mt-1 mb-3\">{{ product.name }}</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Calificaci\u00F3n -->\r\n <div class=\"row\">\r\n <div class=\"col-4\">\r\n <label class=\"pt-2\">{{\"rating\" | translate}}*</label>\r\n </div>\r\n <div class=\"col-8\">\r\n <div class=\"cont-star mt-1 mb-3\">\r\n @for(star of limit; track $index){\r\n <input type=\"radio\" class=\"d-none\" [id]=\"'star-' + (limit.length - $index)\" [value]=\"limit.length - $index\"\r\n formControlName=\"rating\">\r\n <label class=\"star-label\" [for]=\"'star-' + (limit.length - $index)\">\r\n <i class=\"bi bi-star-fill\"></i>\r\n </label>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Resumen -->\r\n <div class=\"row\">\r\n <div class=\"col-4\">\r\n <label for=\"review-summary\" class=\"pt-2\">{{\"summary\" | translate }}*</label>\r\n </div>\r\n <div class=\"col-8\">\r\n <textarea id=\"review-summary\" class=\"w-100\" placeholder=\"\u00BFC\u00F3mo fue tu experiencia?\" formControlName=\"title\"></textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- Detalle -->\r\n <div class=\"row\">\r\n <div class=\"col-4\">\r\n <label for=\"review-detail\" class=\"pt-2\">{{\"detail\" | translate }}*</label>\r\n </div>\r\n <div class=\"col-8\">\r\n <textarea id=\"review-detail\" class=\"w-100\" placeholder=\"Contanos por qu\u00E9\" formControlName=\"comment\"></textarea>\r\n <small class=\"text-uppercase\">(*) {{\"mandatory-fields\" | translate }}</small>\r\n </div>\r\n </div>\r\n\r\n <!-- Bot\u00F3n de env\u00EDo -->\r\n <div class=\"row\">\r\n <div class=\"col-4\"></div>\r\n <div class=\"col-8\">\r\n <button type=\"submit\" class=\"btn btn-dark py-2 px-4 rounded-0 mt-4\"\r\n [disabled]=\"reviews_form.invalid\">{{\"submit-review\" | translate }}</button>\r\n </div>\r\n </div> \r\n</form>", styles: [".cont-star{direction:rtl;unicode-bidi:bidi-override;display:flex;justify-content:end}.cont-star label{display:flex}.cont-star label i{color:#ccc!important;cursor:pointer;font-size:26px;line-height:30px}.cont-star label i:hover,.cont-star label:hover~label i{color:#ffc107!important}input[type=radio]:checked~label i{color:#ffc107!important}input[type=radio]:checked~label i:before,label:hover i:before{content:\"\\f586\"}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
122
+ }
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReviewsFormEcComponent, decorators: [{
124
+ type: Component,
125
+ args: [{ selector: 'app-reviews-form-ec', standalone: true, imports: [TranslateModule, ReactiveFormsModule], template: "<form class=\"formResenia\" [formGroup]=\"reviews_form\" (submit)=\"toastReviewsForm($event)\">\r\n <div class=\"row\">\r\n <div class=\"col-4\">\r\n <label class=\"pt-2\">{{\"product\" | translate }}*</label>\r\n </div>\r\n <div class=\"col-8\">\r\n <p class=\"mt-1 mb-3\">{{ product.name }}</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Calificaci\u00F3n -->\r\n <div class=\"row\">\r\n <div class=\"col-4\">\r\n <label class=\"pt-2\">{{\"rating\" | translate}}*</label>\r\n </div>\r\n <div class=\"col-8\">\r\n <div class=\"cont-star mt-1 mb-3\">\r\n @for(star of limit; track $index){\r\n <input type=\"radio\" class=\"d-none\" [id]=\"'star-' + (limit.length - $index)\" [value]=\"limit.length - $index\"\r\n formControlName=\"rating\">\r\n <label class=\"star-label\" [for]=\"'star-' + (limit.length - $index)\">\r\n <i class=\"bi bi-star-fill\"></i>\r\n </label>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Resumen -->\r\n <div class=\"row\">\r\n <div class=\"col-4\">\r\n <label for=\"review-summary\" class=\"pt-2\">{{\"summary\" | translate }}*</label>\r\n </div>\r\n <div class=\"col-8\">\r\n <textarea id=\"review-summary\" class=\"w-100\" placeholder=\"\u00BFC\u00F3mo fue tu experiencia?\" formControlName=\"title\"></textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- Detalle -->\r\n <div class=\"row\">\r\n <div class=\"col-4\">\r\n <label for=\"review-detail\" class=\"pt-2\">{{\"detail\" | translate }}*</label>\r\n </div>\r\n <div class=\"col-8\">\r\n <textarea id=\"review-detail\" class=\"w-100\" placeholder=\"Contanos por qu\u00E9\" formControlName=\"comment\"></textarea>\r\n <small class=\"text-uppercase\">(*) {{\"mandatory-fields\" | translate }}</small>\r\n </div>\r\n </div>\r\n\r\n <!-- Bot\u00F3n de env\u00EDo -->\r\n <div class=\"row\">\r\n <div class=\"col-4\"></div>\r\n <div class=\"col-8\">\r\n <button type=\"submit\" class=\"btn btn-dark py-2 px-4 rounded-0 mt-4\"\r\n [disabled]=\"reviews_form.invalid\">{{\"submit-review\" | translate }}</button>\r\n </div>\r\n </div> \r\n</form>", styles: [".cont-star{direction:rtl;unicode-bidi:bidi-override;display:flex;justify-content:end}.cont-star label{display:flex}.cont-star label i{color:#ccc!important;cursor:pointer;font-size:26px;line-height:30px}.cont-star label i:hover,.cont-star label:hover~label i{color:#ffc107!important}input[type=radio]:checked~label i{color:#ffc107!important}input[type=radio]:checked~label i:before,label:hover i:before{content:\"\\f586\"}\n"] }]
126
+ }], ctorParameters: () => [{ type: i1.ToastService }, { type: i2.Router }, { type: i3.CoreConstantsService }, { type: i4.FormBuilder }, { type: i5.ProductsService }, { type: i6.AuthService }, { type: i7.ReviewsService }], propDecorators: { product: [{
127
+ type: Input
128
+ }], withAuthenticated: [{
129
+ type: Input
130
+ }], max: [{
131
+ type: Input
132
+ }], ready: [{
133
+ type: Output
134
+ }] } });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3cy1mb3JtLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL3Jldmlld3MtZm9ybS1lYy9yZXZpZXdzLWZvcm0tZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcmV2aWV3cy1mb3JtLWVjL3Jldmlld3MtZm9ybS1lYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBMEIsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBTWpFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQVVyRCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsZUFBZTtJQXlCakM7SUFBb0M7SUFBdUI7SUFDdEU7SUFBaUM7SUFBd0M7SUFBZ0M7SUF4QnBIOztPQUVHO0lBQ00sT0FBTyxDQUFLO0lBQ3JCOztPQUVHO0lBQ00saUJBQWlCLEdBQVksSUFBSSxDQUFDO0lBQzNDOztPQUVHO0lBQ00sR0FBRyxHQUFVLENBQUMsQ0FBQztJQUN4Qjs7T0FFRztJQUNPLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBRXZDLFlBQVksQ0FBWTtJQUV4QixPQUFPLEdBQVcsS0FBSyxDQUFDO0lBQ3JCLFNBQVMsR0FBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ25D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c0JBQXNCOzRGQUF0QixzQkFBc0IsdU5DcEJuQyx3ekVBeURPLGdlRDFDSSxlQUFlLDJGQUFFLG1CQUFtQjs7NEZBS2xDLHNCQUFzQjtrQkFSbEMsU0FBUzsrQkFDSSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNWLENBQUMsZUFBZSxFQUFFLG1CQUFtQixDQUFDO3dQQVVuQyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUlHLEdBQUc7c0JBQVgsS0FBSztnQkFJSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcclxuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29yZS5jb25zdGFudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMvcHJvZHVjdHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFJldmlld3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMvcmV2aWV3cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1yZXZpZXdzLWZvcm0tZWMnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXZpZXdzLWZvcm0tZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcmV2aWV3cy1mb3JtLWVjLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgIFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmV2aWV3c0Zvcm1FY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIHByb2R1Y3RvIGFsIHF1ZSBzZSBsZSB2YSBhIGFncmVnYXIgbGEgcmVzZcOxYS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHJvZHVjdDphbnk7XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBwYXJhIGNvbnRyb2xhciBzaSBlc3RhIGxvZ3VlYWRvLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSB3aXRoQXV0aGVudGljYXRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBuw7ptZXJvIG1heGltbyBkZSB2YWxvciBkZSBwdW50dWFjacOzblxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBtYXg6bnVtYmVyID0gNTtcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIHBhcmEgaW5kaWNhciBjdWFuZG8gc2UgdGVybWlubyBsYSBvcGVyYWNpw7NuIGRlIGNvbnN1bHRhLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgICBcclxuICAgIHB1YmxpYyByZXZpZXdzX2Zvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgICBwdWJsaWMgbG9hZGluZzpib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgZm9ybV9kYXRhOiBhbnkgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIHB1YmxpYyBsaW1pdDpudW1iZXJbXT1bXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLCBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsIHB1YmxpYyBjb25zdHM6IENvcmVDb25zdGFudHNTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIHB1YmxpYyBwcm9kdWN0U2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLCBwdWJsaWMgYXV0aFNlcnZpY2U6QXV0aFNlcnZpY2UsIHB1YmxpYyByZXZpZXdzU2VydmljZTpSZXZpZXdzU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKClcclxuICAgICAgICB0aGlzLnJldmlld3NfZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgdGl0bGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIGNvbW1lbnQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIHJhdGluZzogWzAsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBlbWFpbDpbJycsIHRoaXMud2l0aEF1dGhlbnRpY2F0ZWQgPyBbXSA6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXV0sXHJcbiAgICAgICAgICAgIC8vYXR0YWNobWVudDogWycnXSxcclxuICAgICAgICB9KVxyXG4gICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKSAvLyBSZW1vdmVkIGFzIHRoZSBtZXRob2QgZG9lcyBub3QgZXhpc3RcclxuICAgIH1cclxuICAgICBcclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm1heDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICB0aGlzLmxpbWl0LnB1c2goaW5kZXggKyAxKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBndWFyZGEgZWwgdmFsb3IgcXVlIGNvbnRpZW5lIGxhIHB1bnR1YWNpw7NuIGRlIGxhIHJlc2XDsWEuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgXHJcbiAgICAgKi9cclxuICAgIHNldFJhdGluZ1ZhbHVlID0gKHZhbHVlOm51bWJlcj0wKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXZpZXdzX2Zvcm0uY29udHJvbHNbJ3JhdGluZyddLnNldFZhbHVlKHZhbHVlKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIHByb2Nlc2EgZWwgZm9ybXVsYXJpbyBjb24gbG9zIGRhdG9zLlxyXG4gICAgICogQHBhcmFtIGZvcm0gXHJcbiAgICAgKiBAcGFyYW0gc3VjY2Vzc19tZXNzYWdlIG1lbnNhamUgcGFyYSBxdWUgc2UgbXVlc3RyZSBlbiBlbCBjYXNvIGRlIGV4aXRvLlxyXG4gICAgICovXHJcbiAgICBzZW5kRm9ybSA9IChmb3JtOkZvcm1Hcm91cCwgc3VjY2Vzc19tZXNzYWdlPzpzdHJpbmcgKSA9PiB7XHJcbiAgICAgICAgaWYgKGZvcm0udmFsaWQpIHtcclxuICAgICAgICAgICAgdGhpcy53aXRoQXV0aGVudGljYXRlZCA/IHRoaXMucmV2aWV3c19mb3JtLmNvbnRyb2xzWydlbWFpbCddLnNldFZhbHVlKHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlclByb2ZpbGVBc1VzZXIoKS5lbWFpbCkgOiBudWxsXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLnNhdmVSZXZpZXdzKHRoaXMucHJvZHVjdC5pZCxmb3JtLnZhbHVlKS50b1Byb21pc2UoKS50aGVuKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJldmlld3NfZm9ybS5yZXNldCgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coc3VjY2Vzc19tZXNzYWdlID8gc3VjY2Vzc19tZXNzYWdlIDogJ3N1Y2Nlc3MtcmV2aWV3Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWR5LmVtaXQodHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAvLyBRdWVkYSBwcmVwYXJhZG8gcG9yIHNpIGFsZ3VuIGRpYSBzZSBxdWllcmUgbWFuZWphciBzaW5jcm9uaXNtby5cclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlUmV2aWV3cygpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnaW5xdWlyeS1lcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkeS5lbWl0KHRydWUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2ludmFsaWQtZm9ybScpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnJlYWR5LmVtaXQodHJ1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY2lycHRpb24gY29udHJvbGEgcXVlIGVsIHVzdWFyaW8gZXN0ZSBsb2d1ZWFkbyBwYXJhIGNvbWVudGFyLiBTaSBsYSB2YXJpYWJsZSB3aXRoQXV0aGVudGljYXRlZCBlcyBmYWxzbyBlbnRvbmNlcyBubyByZWFsaXphIGVzdGUgY29udHJvbC5cclxuICAgICAqIEBwYXJhbSBlIGV2ZW50byBwcm9kdWNpZG8gcG9yIGVsIHN1Ym1pdCBkZWwgZm9ybXVsYXJpb1xyXG4gICAgICovXHJcbiAgICB0b2FzdFJldmlld3NGb3JtID0gKGU6IEV2ZW50LCBtZXNzYWdlPzogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMud2l0aEF1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKSA/IFxyXG4gICAgICAgICAgICB0aGlzLnNlbmRGb3JtKHRoaXMucmV2aWV3c19mb3JtLCBtZXNzYWdlID8gbWVzc2FnZSA6ICdzdWNjZXNzLXJldmlldycpIDogdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2F1dGhlbnRpY2F0ZWQtZm9yLWNvbW1lbnQnKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZEZvcm0odGhpcy5yZXZpZXdzX2Zvcm0sIG1lc3NhZ2UgPyBtZXNzYWdlIDogJ3N1Y2Nlc3MtcmV2aWV3JylcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gYWN0dWFsaXphIGxhcyByZXZpZXdzXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgdXBkYXRlUmV2aWV3cyA9ICgpID0+IHRoaXMucmV2aWV3c1NlcnZpY2UudXBkYXRlUmV2aWV3c0J5Q29kZSh0aGlzLnByb2R1Y3QuaWQpXHJcbn1cclxuIiwiPGZvcm0gY2xhc3M9XCJmb3JtUmVzZW5pYVwiICBbZm9ybUdyb3VwXT1cInJldmlld3NfZm9ybVwiIChzdWJtaXQpPVwidG9hc3RSZXZpZXdzRm9ybSgkZXZlbnQpXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInB0LTJcIj57e1wicHJvZHVjdFwiIHwgdHJhbnNsYXRlIH19KjwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibXQtMSBtYi0zXCI+e3sgcHJvZHVjdC5uYW1lIH19PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBDYWxpZmljYWNpw7NuIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwdC0yXCI+e3tcInJhdGluZ1wiIHwgdHJhbnNsYXRlfX0qPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnQtc3RhciBtdC0xIG1iLTNcIj5cclxuICAgICAgICAgICAgICBAZm9yKHN0YXIgb2YgbGltaXQ7IHRyYWNrICRpbmRleCl7XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBjbGFzcz1cImQtbm9uZVwiIFtpZF09XCInc3Rhci0nICsgKGxpbWl0Lmxlbmd0aCAtICRpbmRleClcIiBbdmFsdWVdPVwibGltaXQubGVuZ3RoIC0gJGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJhdGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdGFyLWxhYmVsXCIgW2Zvcl09XCInc3Rhci0nICsgKGxpbWl0Lmxlbmd0aCAtICRpbmRleClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktc3Rhci1maWxsXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIFJlc3VtZW4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZXZpZXctc3VtbWFyeVwiIGNsYXNzPVwicHQtMlwiPnt7XCJzdW1tYXJ5XCIgfCB0cmFuc2xhdGUgfX0qPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgPHRleHRhcmVhIGlkPVwicmV2aWV3LXN1bW1hcnlcIiBjbGFzcz1cInctMTAwXCIgcGxhY2Vob2xkZXI9XCLCv0PDs21vIGZ1ZSB0dSBleHBlcmllbmNpYT9cIiBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIERldGFsbGUgLS0+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZXZpZXctZGV0YWlsXCIgY2xhc3M9XCJwdC0yXCI+e3tcImRldGFpbFwiIHwgdHJhbnNsYXRlIH19KjwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cInJldmlldy1kZXRhaWxcIiBjbGFzcz1cInctMTAwXCIgcGxhY2Vob2xkZXI9XCJDb250YW5vcyBwb3IgcXXDqVwiIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC11cHBlcmNhc2VcIj4oKikge3tcIm1hbmRhdG9yeS1maWVsZHNcIiB8IHRyYW5zbGF0ZSB9fTwvc21hbGw+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEJvdMOzbiBkZSBlbnbDrW8gLS0+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tZGFyayBweS0yIHB4LTQgcm91bmRlZC0wIG10LTRcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZXZpZXdzX2Zvcm0uaW52YWxpZFwiPnt7XCJzdWJtaXQtcmV2aWV3XCIgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9kaXY+IFxyXG48L2Zvcm0+Il19
@@ -0,0 +1,75 @@
1
+ import { Component, inject, Input } from '@angular/core';
2
+ import { DomSanitizer } from '@angular/platform-browser';
3
+ import { ActivatedRoute } from '@angular/router';
4
+ import { ToastrService } from 'ngx-toastr';
5
+ import { ComponentHelper } from '../../classes/component-helper';
6
+ import { OptionsService } from '../../ec-services';
7
+ import { BlocksEcComponent } from "../blocks-ec/blocks-ec.component";
8
+ import { LoadingFullEcComponent } from "../widgets-ec/loading/loading-full-ec/loading-full-ec.component";
9
+ import * as i0 from "@angular/core";
10
+ export class SectionContainerEcComponent extends ComponentHelper {
11
+ content_html = "<p>Sin información</p>";
12
+ loadSection = false;
13
+ sanitizeHtml = false;
14
+ name = null;
15
+ dataSection;
16
+ sections = [];
17
+ optionsService = inject(OptionsService);
18
+ activatedRoute = inject(ActivatedRoute);
19
+ toastrService = inject(ToastrService);
20
+ sanitizer = inject(DomSanitizer);
21
+ constructor() {
22
+ super();
23
+ this.optionsService.getSections();
24
+ this.ecOnConstruct();
25
+ }
26
+ ngOnInit() {
27
+ if (this.name) {
28
+ this.getSection(this.name);
29
+ this.getDataSection(this.name);
30
+ //console.log('con parametro')
31
+ }
32
+ else {
33
+ this.activatedRoute.params.subscribe(params => {
34
+ this.name = params['name'];
35
+ this.getSection(this.name);
36
+ this.getDataSection(this.name);
37
+ //console.log('sin parametro', this.name)
38
+ });
39
+ }
40
+ this.ecOnInit();
41
+ }
42
+ getSection = (link) => {
43
+ this.loadSection = false;
44
+ this.optionsService.getSectionContentByLink(link).toPromise().then((html) => {
45
+ if (html)
46
+ this.content_html =
47
+ this.sanitizeHtml
48
+ ? html
49
+ : this.sanitizer.bypassSecurityTrustHtml(html);
50
+ this.loadSection = true;
51
+ }, (error) => {
52
+ console.log(error);
53
+ this.loadSection = true;
54
+ this.content_html = "<p>Sin información</p>";
55
+ this.toastrService.show('No fue posible encontrar la sección solicitada');
56
+ }).catch((error) => {
57
+ this.content_html = "<p>Sin información</p>";
58
+ this.loadSection = true;
59
+ });
60
+ };
61
+ getDataSection = (code) => {
62
+ this.dataSection = this.sections.find(section => section.code == code);
63
+ };
64
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SectionContainerEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
65
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SectionContainerEcComponent, isStandalone: true, selector: "app-section-container-ec", inputs: { sanitizeHtml: "sanitizeHtml", name: "name" }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"scrol-if\">\r\n @if (loadSection){\r\n <div [innerHtml]=\"content_html\"></div>\r\n } @else {\r\n <div class=\"col-12 align-items-center\">\r\n <div class=\"d-flex flex-column jusitfy-content-center align-items-center my-5\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-blocks-ec [section]=\"name\"></app-blocks-ec>", styles: [".custom-page{background-color:#fff!important;padding-top:5%!important;padding-bottom:5%!important}.scrol-if{overflow:auto}\n"], dependencies: [{ kind: "component", type: BlocksEcComponent, selector: "app-blocks-ec", inputs: ["templates", "show_loading", "section", "blockFilters"] }, { kind: "component", type: LoadingFullEcComponent, selector: "app-loading-full-ec" }] });
66
+ }
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SectionContainerEcComponent, decorators: [{
68
+ type: Component,
69
+ args: [{ selector: 'app-section-container-ec', standalone: true, imports: [BlocksEcComponent, LoadingFullEcComponent], template: "<div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"scrol-if\">\r\n @if (loadSection){\r\n <div [innerHtml]=\"content_html\"></div>\r\n } @else {\r\n <div class=\"col-12 align-items-center\">\r\n <div class=\"d-flex flex-column jusitfy-content-center align-items-center my-5\">\r\n <app-loading-full-ec></app-loading-full-ec>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-blocks-ec [section]=\"name\"></app-blocks-ec>", styles: [".custom-page{background-color:#fff!important;padding-top:5%!important;padding-bottom:5%!important}.scrol-if{overflow:auto}\n"] }]
70
+ }], ctorParameters: () => [], propDecorators: { sanitizeHtml: [{
71
+ type: Input
72
+ }], name: [{
73
+ type: Input
74
+ }] } });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1jb250YWluZXItZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvc2VjdGlvbi1jb250YWluZXItZWMvc2VjdGlvbi1jb250YWluZXItZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvc2VjdGlvbi1jb250YWluZXItZWMvc2VjdGlvbi1jb250YWluZXItZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlFQUFpRSxDQUFDOztBQVN6RyxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsZUFBZTtJQUVyRCxZQUFZLEdBQWEsd0JBQXdCLENBQUM7SUFDbEQsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUMzQixZQUFZLEdBQVksS0FBSyxDQUFBO0lBQzdCLElBQUksR0FBRyxJQUFJLENBQUM7SUFDZCxXQUFXLENBQU07SUFDaEIsUUFBUSxHQUFVLEVBQUUsQ0FBQztJQUVyQixjQUFjLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUN2RCxjQUFjLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUN2RCxhQUFhLEdBQWtCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNwRCxTQUFTLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUN0RDtRQUNJLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDeEIsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzlCLDhCQUE4QjtRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDaEMsTUFBTSxDQUFDLEVBQUU7Z0JBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDOUIseUNBQXlDO1lBQzdDLENBQUMsQ0FDSixDQUFDO1FBQ04sQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNuQixDQUFDO0lBRUQsVUFBVSxHQUFHLENBQUMsSUFBUyxFQUFFLEVBQUU7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUE7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQzlELENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDYixJQUFJLElBQUk7Z0JBQUUsSUFBSSxDQUFDLFlBQVk7b0JBQ3ZCLElBQUksQ0FBQyxZQUFZO3dCQUNiLENBQUMsQ0FBQyxJQUFJO3dCQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1FBQzNCLENBQUMsRUFFRCxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTtZQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLHdCQUF3QixDQUFDO1lBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUNKLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyx3QkFBd0IsQ0FBQTtZQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTtRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQTtJQUVELGNBQWMsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFBO0lBQzFFLENBQUMsQ0FBQTt3R0EvRFEsMkJBQTJCOzRGQUEzQiwyQkFBMkIsbUtDaEJ4Qyw2ckJBbUJnRCxzTERQbEMsaUJBQWlCLDRIQUFFLHNCQUFzQjs7NEZBSTFDLDJCQUEyQjtrQkFQdkMsU0FBUzsrQkFDSSwwQkFBMEIsY0FDeEIsSUFBSSxXQUNQLENBQUMsaUJBQWlCLEVBQUUsc0JBQXNCLENBQUM7d0RBUTNDLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyJztcclxuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEJsb2Nrc0VjQ29tcG9uZW50IH0gZnJvbSBcIi4uL2Jsb2Nrcy1lYy9ibG9ja3MtZWMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExvYWRpbmdGdWxsRWNDb21wb25lbnQgfSBmcm9tIFwiLi4vd2lkZ2V0cy1lYy9sb2FkaW5nL2xvYWRpbmctZnVsbC1lYy9sb2FkaW5nLWZ1bGwtZWMuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLXNlY3Rpb24tY29udGFpbmVyLWVjJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbQmxvY2tzRWNDb21wb25lbnQsIExvYWRpbmdGdWxsRWNDb21wb25lbnRdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlY3Rpb24tY29udGFpbmVyLWVjLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3NlY3Rpb24tY29udGFpbmVyLWVjLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlY3Rpb25Db250YWluZXJFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgcHVibGljIGNvbnRlbnRfaHRtbDogU2FmZUh0bWwgPSBcIjxwPlNpbiBpbmZvcm1hY2nDs248L3A+XCI7XHJcbiAgICBwdWJsaWMgbG9hZFNlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHNhbml0aXplSHRtbDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgICBASW5wdXQoKSBuYW1lID0gbnVsbDtcclxuICAgIHB1YmxpYyBkYXRhU2VjdGlvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBzZWN0aW9uczogYW55W10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIG9wdGlvbnNTZXJ2aWNlOiBPcHRpb25zU2VydmljZSA9IGluamVjdChPcHRpb25zU2VydmljZSlcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKVxyXG4gICAgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdHJTZXJ2aWNlID0gaW5qZWN0KFRvYXN0clNlcnZpY2UpXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcilcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zU2VydmljZS5nZXRTZWN0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldFNlY3Rpb24odGhpcy5uYW1lKVxyXG4gICAgICAgICAgICB0aGlzLmdldERhdGFTZWN0aW9uKHRoaXMubmFtZSlcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnY29uIHBhcmFtZXRybycpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSBwYXJhbXNbJ25hbWUnXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlY3Rpb24odGhpcy5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YVNlY3Rpb24odGhpcy5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3NpbiBwYXJhbWV0cm8nLCB0aGlzLm5hbWUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVjT25Jbml0KClcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWN0aW9uID0gKGxpbms6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZFNlY3Rpb24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMub3B0aW9uc1NlcnZpY2UuZ2V0U2VjdGlvbkNvbnRlbnRCeUxpbmsobGluaykudG9Qcm9taXNlKCkudGhlbihcclxuICAgICAgICAgICAgKGh0bWw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGh0bWwpIHRoaXMuY29udGVudF9odG1sID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhbml0aXplSHRtbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGh0bWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkU2VjdGlvbiA9IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAsXHJcbiAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRTZWN0aW9uID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50X2h0bWwgPSBcIjxwPlNpbiBpbmZvcm1hY2nDs248L3A+XCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnTm8gZnVlIHBvc2libGUgZW5jb250cmFyIGxhIHNlY2Npw7NuIHNvbGljaXRhZGEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50X2h0bWwgPSBcIjxwPlNpbiBpbmZvcm1hY2nDs248L3A+XCJcclxuICAgICAgICAgICAgdGhpcy5sb2FkU2VjdGlvbiA9IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhU2VjdGlvbiA9IChjb2RlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFTZWN0aW9uID0gdGhpcy5zZWN0aW9ucy5maW5kKHNlY3Rpb24gPT4gc2VjdGlvbi5jb2RlID09IGNvZGUpXHJcbiAgICB9XHJcbn0iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2wtaWZcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAobG9hZFNlY3Rpb24pe1xyXG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cImNvbnRlbnRfaHRtbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzaXRmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWxvYWRpbmctZnVsbC1lYz48L2FwcC1sb2FkaW5nLWZ1bGwtZWM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGFwcC1ibG9ja3MtZWMgW3NlY3Rpb25dPVwibmFtZVwiPjwvYXBwLWJsb2Nrcy1lYz4iXX0=