brainloper-ui 14.1.4 → 14.1.6

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 (102) hide show
  1. package/esm2020/brainloper-ui.mjs +4 -4
  2. package/esm2020/public_api.mjs +56 -56
  3. package/esm2020/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +310 -310
  4. package/esm2020/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +29 -29
  5. package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +23 -23
  6. package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +83 -83
  7. package/esm2020/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +40 -40
  8. package/esm2020/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +176 -176
  9. package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +728 -728
  10. package/esm2020/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +118 -118
  11. package/esm2020/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +186 -186
  12. package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.mjs +1 -1
  13. package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.mjs +1 -1
  14. package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.mjs +1 -1
  15. package/esm2020/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +222 -222
  16. package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +115 -81
  17. package/esm2020/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.mjs +145 -0
  18. package/esm2020/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +108 -108
  19. package/esm2020/src/app/modules/directives/carousel-item.directive.mjs +18 -18
  20. package/esm2020/src/app/modules/interfaces/buttons/button-icon.mjs +2 -2
  21. package/esm2020/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +2 -2
  22. package/esm2020/src/app/modules/interfaces/combos/combos-configuration.mjs +2 -2
  23. package/esm2020/src/app/modules/interfaces/data-table/params.mjs +2 -2
  24. package/esm2020/src/app/modules/interfaces/data-table/rules.mjs +2 -2
  25. package/esm2020/src/app/modules/interfaces/data-table/table-columns.mjs +2 -2
  26. package/esm2020/src/app/modules/interfaces/data-table/table-configuration.mjs +2 -2
  27. package/esm2020/src/app/modules/interfaces/enum/enumActions.mjs +8 -8
  28. package/esm2020/src/app/modules/interfaces/enum/enumRules.mjs +8 -8
  29. package/esm2020/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +2 -2
  30. package/esm2020/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +2 -2
  31. package/esm2020/src/app/modules/interfaces/filters/header-filters.mjs +2 -2
  32. package/esm2020/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +8 -8
  33. package/esm2020/src/app/modules/interfaces/report/template-pdf-base.mjs +2 -0
  34. package/esm2020/src/app/modules/interfaces/report/template-pdf-ot.mjs +2 -2
  35. package/esm2020/src/app/modules/interfaces/report/template-pfd-fo.mjs +2 -2
  36. package/esm2020/src/app/modules/services/crypto.service.mjs +37 -37
  37. package/esm2020/src/app/modules/services/export-data.service.mjs +166 -166
  38. package/esm2020/src/app/modules/services/file-forms.service.mjs +24 -24
  39. package/esm2020/src/app/modules/services/fuel-order-pdf.service.mjs +528 -0
  40. package/esm2020/src/app/modules/services/functions.service.mjs +54 -54
  41. package/esm2020/src/app/modules/services/generate-pdf.service.mjs +109 -58
  42. package/esm2020/src/app/modules/services/http.service.mjs +97 -97
  43. package/esm2020/src/app/modules/services/loading/loading.component.mjs +28 -28
  44. package/esm2020/src/app/modules/services/local-storage.service.mjs +115 -115
  45. package/esm2020/src/app/modules/services/message.service.mjs +200 -200
  46. package/esm2020/src/app/modules/services/screen-size-util.mjs +6 -6
  47. package/esm2020/src/app/modules/services/session.service.mjs +42 -42
  48. package/esm2020/src/app/modules/services/work-order-pdf.service.mjs +384 -0
  49. package/fesm2015/brainloper-ui.mjs +3859 -2818
  50. package/fesm2015/brainloper-ui.mjs.map +1 -1
  51. package/fesm2020/brainloper-ui.mjs +3831 -2780
  52. package/fesm2020/brainloper-ui.mjs.map +1 -1
  53. package/index.d.ts +5 -5
  54. package/package.json +3 -2
  55. package/public_api.d.ts +55 -55
  56. package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +62 -62
  57. package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +13 -13
  58. package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +10 -10
  59. package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +24 -24
  60. package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +16 -16
  61. package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +46 -46
  62. package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +125 -125
  63. package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +21 -21
  64. package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +42 -42
  65. package/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.d.ts +2 -2
  66. package/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.d.ts +2 -2
  67. package/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.d.ts +2 -2
  68. package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +30 -30
  69. package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +41 -36
  70. package/src/app/modules/brainloper-ui/components/report/{generate-pdf/generate-pdf.component.d.ts → template-ot/template-ot.component.d.ts} +40 -35
  71. package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +26 -26
  72. package/src/app/modules/directives/carousel-item.directive.d.ts +9 -9
  73. package/src/app/modules/interfaces/buttons/button-icon.d.ts +9 -9
  74. package/src/app/modules/interfaces/buttons/button-lavel-edit.d.ts +6 -6
  75. package/src/app/modules/interfaces/combos/combos-configuration.d.ts +13 -13
  76. package/src/app/modules/interfaces/data-table/params.d.ts +7 -7
  77. package/src/app/modules/interfaces/data-table/rules.d.ts +8 -8
  78. package/src/app/modules/interfaces/data-table/table-columns.d.ts +25 -25
  79. package/src/app/modules/interfaces/data-table/table-configuration.d.ts +26 -26
  80. package/src/app/modules/interfaces/enum/enumActions.d.ts +6 -6
  81. package/src/app/modules/interfaces/enum/enumRules.d.ts +6 -6
  82. package/src/app/modules/interfaces/file-forms-service/file-forms-params.d.ts +4 -4
  83. package/src/app/modules/interfaces/file-forms-service/file-input-params.d.ts +13 -13
  84. package/src/app/modules/interfaces/filters/header-filters.d.ts +13 -13
  85. package/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.d.ts +10 -10
  86. package/src/app/modules/interfaces/report/template-pdf-base.d.ts +17 -0
  87. package/src/app/modules/interfaces/report/template-pdf-ot.d.ts +6 -19
  88. package/src/app/modules/interfaces/report/template-pfd-fo.d.ts +7 -20
  89. package/src/app/modules/services/crypto.service.d.ts +10 -10
  90. package/src/app/modules/services/export-data.service.d.ts +18 -18
  91. package/src/app/modules/services/file-forms.service.d.ts +7 -7
  92. package/src/app/modules/services/fuel-order-pdf.service.d.ts +59 -0
  93. package/src/app/modules/services/functions.service.d.ts +13 -13
  94. package/src/app/modules/services/generate-pdf.service.d.ts +21 -12
  95. package/src/app/modules/services/http.service.d.ts +22 -22
  96. package/src/app/modules/services/loading/loading.component.d.ts +15 -15
  97. package/src/app/modules/services/local-storage.service.d.ts +49 -49
  98. package/src/app/modules/services/message.service.d.ts +23 -23
  99. package/src/app/modules/services/screen-size-util.d.ts +3 -3
  100. package/src/app/modules/services/session.service.d.ts +14 -14
  101. package/src/app/modules/services/work-order-pdf.service.d.ts +60 -0
  102. package/esm2020/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.mjs +0 -80
@@ -1,118 +1,118 @@
1
- import { Component, Inject } from '@angular/core';
2
- import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
- import { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';
4
- import { forkJoin } from 'rxjs';
5
- import { map } from 'rxjs/operators';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/material/dialog";
8
- import * as i2 from "@angular/forms";
9
- import * as i3 from "../../../../services/http.service";
10
- import * as i4 from "@angular/common";
11
- import * as i5 from "@angular/material/button";
12
- import * as i6 from "@angular/material/form-field";
13
- import * as i7 from "@angular/material/input";
14
- import * as i8 from "@angular/material/select";
15
- import * as i9 from "@angular/material/core";
16
- export class TableModalComponent {
17
- constructor(dialogRef, data, formBuilder, http) {
18
- this.dialogRef = dialogRef;
19
- this.data = data;
20
- this.formBuilder = formBuilder;
21
- this.http = http;
22
- this.modalForm = new UntypedFormGroup({});
23
- this.dataCombo = {};
24
- }
25
- onNoClick() {
26
- this.dialogRef.close();
27
- }
28
- ngOnInit() {
29
- let group = {};
30
- let httpRequests = [];
31
- this.data.columns.map((element) => {
32
- if (element.type === 'currency') {
33
- element.value = element.value ? element.value.replace(/\./g, '') : '';
34
- element.type = 'number';
35
- }
36
- if (!element.disregardForAdd) {
37
- if (element.type === 'combo') {
38
- this.dataCombo[element.paramsCombo.selectionField !== element.ID ? element.paramsCombo.selectionField : element.ID] = '';
39
- }
40
- let initialValue = this.data.action === 'edit' ? element.value : '';
41
- if (element.type === 'date' && element.value) {
42
- let s = element.value.split('/');
43
- initialValue = `${s[2]}-${s[1]}-${s[0]}`;
44
- }
45
- group[element.ID] = element.required ? new UntypedFormControl(initialValue, Validators.required) : new UntypedFormControl(initialValue);
46
- if (element.paramsCombo) {
47
- httpRequests.push(this.createHttpRequest(element, group));
48
- }
49
- }
50
- });
51
- if (httpRequests.length > 0) {
52
- forkJoin(httpRequests).subscribe(() => {
53
- this.modalForm = new UntypedFormGroup(group);
54
- });
55
- }
56
- else {
57
- this.modalForm = new UntypedFormGroup(group);
58
- }
59
- }
60
- // Extraemos la creación de la solicitud HTTP a su propia función para mejorar la legibilidad
61
- createHttpRequest(element, group) {
62
- return this.http
63
- .getData(element.paramsCombo.url, element.paramsCombo.urlParams)
64
- .pipe(map((res) => {
65
- if (res['code'] === 0) {
66
- element.identifierCombo = element.paramsCombo.selectionField !== element.ID ? element.paramsCombo.selectionField : element.ID;
67
- this.dataCombo[element.identifierCombo] = res['body'];
68
- if (this.data.action !== 'edit') {
69
- return;
70
- }
71
- this.dataCombo[element.identifierCombo].some((data) => {
72
- if (data[element.paramsCombo.selectionField] === element.value ||
73
- data[element.paramsCombo.visibleField] === element.value) {
74
- var value = data[element.paramsCombo.selectionField];
75
- element.value = value;
76
- group[element.ID].setValue(value);
77
- return true;
78
- }
79
- return false;
80
- });
81
- }
82
- }));
83
- }
84
- onSubmit() {
85
- if (this.modalForm.valid) {
86
- this.data.columns.map((element) => {
87
- if (element.paramsCombo && element.paramsCombo.returnDataSelect) {
88
- element.identifierCombo = element.paramsCombo.selectionField !== element.ID ? element.paramsCombo.selectionField : element.ID;
89
- let x = this.dataCombo[element.identifierCombo].find(x => x[element.identifierCombo] == this.modalForm.value[element.ID]);
90
- if (x) {
91
- this.modalForm.addControl(element.ID + 'Combo', new UntypedFormControl(x));
92
- }
93
- }
94
- });
95
- this.dialogRef.close(this.modalForm.value);
96
- }
97
- }
98
- onChange(id, $event, type) {
99
- switch (type) {
100
- case 'combo':
101
- this.modalForm.get(id).setValue($event.value);
102
- break;
103
- default:
104
- this.modalForm.get(id).setValue($event.target.value);
105
- break;
106
- }
107
- }
108
- }
109
- TableModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableModalComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.UntypedFormBuilder }, { token: i3.HttpService }], target: i0.ɵɵFactoryTarget.Component });
110
- TableModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableModalComponent, selector: "app-table-modal", ngImport: i0, template: "<div>\n <div style='display:flex; justify-content: space-between;'>\n <div>\n <strong>\n <h3 *ngIf='data.action==\"edit\"'> Editar </h3>\n <h3 *ngIf='data.action==\"add\"'> Agregar </h3>\n </strong>\n </div>\n <div mat-dialog-close>\n <i class=\"fa fa-times-circle\" style=\"font-size: 150%; position: relative;\"></i>\n </div>\n </div>\n\n <form [formGroup]=\"modalForm\">\n\n <div *ngFor='let input of data.columns'>\n\n\n\n <div *ngIf='data.action==\"edit\"; else Agregar'>\n <mat-form-field *ngIf=\"!input.disregardForEdit\">\n <div *ngIf='input.type==\"combo\"; else otherInputEdit'>\n\n <mat-select [value]=\"input.value\" (selectionChange)='onChange(input.ID,$event, input.type)'\n placeholder='{{input.label}}' [required]=\"input.required\">\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\n [value]='data[input.paramsCombo.selectionField]'>\n {{data[input.paramsCombo.visibleField]}}</mat-option>\n </mat-select>\n </div>\n\n <ng-template #otherInputEdit>\n <input [type]='input.type' [name]='input.ID' [value]='input.value'\n (input)='onChange(input.ID,$event, input.type)' matInput [placeholder]='input.label' [required]=\"input.required\" />\n </ng-template>\n\n <mat-error>Campo Obligatorio</mat-error>\n </mat-form-field>\n\n </div>\n\n <ng-template #Agregar>\n <mat-form-field *ngIf=\"!input.disregardForAdd\">\n <div *ngIf='input.type==\"combo\"; else otherInput'>\n\n <mat-select (selectionChange)='onChange(input.ID,$event, input.type)' placeholder='{{input.label}}' [required]=\"input.required\">\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\n [value]='data[input.paramsCombo.selectionField]'>\n {{data[input.paramsCombo.visibleField]}}</mat-option>\n </mat-select>\n\n </div>\n\n <ng-template #otherInput>\n <input [type]='input.type' [name]='input.ID' (input)='onChange(input.ID, $event, input.type)'\n matInput [placeholder]='input.label' [required]=\"input.required\" />\n\n </ng-template>\n <mat-error>Campo Obligatorio</mat-error>\n </mat-form-field>\n </ng-template>\n\n\n\n\n </div>\n\n <button *ngIf='data.action==\"add\" || data.action==\"edit\"'\n (click)='onSubmit()'\n color='primary'\n mat-raised-button\n [disabled]=\"!modalForm.valid\">Guardar</button>\n\n </form>\n</div>\n\n", styles: ["button{width:100%}mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
111
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableModalComponent, decorators: [{
112
- type: Component,
113
- args: [{ selector: 'app-table-modal', template: "<div>\n <div style='display:flex; justify-content: space-between;'>\n <div>\n <strong>\n <h3 *ngIf='data.action==\"edit\"'> Editar </h3>\n <h3 *ngIf='data.action==\"add\"'> Agregar </h3>\n </strong>\n </div>\n <div mat-dialog-close>\n <i class=\"fa fa-times-circle\" style=\"font-size: 150%; position: relative;\"></i>\n </div>\n </div>\n\n <form [formGroup]=\"modalForm\">\n\n <div *ngFor='let input of data.columns'>\n\n\n\n <div *ngIf='data.action==\"edit\"; else Agregar'>\n <mat-form-field *ngIf=\"!input.disregardForEdit\">\n <div *ngIf='input.type==\"combo\"; else otherInputEdit'>\n\n <mat-select [value]=\"input.value\" (selectionChange)='onChange(input.ID,$event, input.type)'\n placeholder='{{input.label}}' [required]=\"input.required\">\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\n [value]='data[input.paramsCombo.selectionField]'>\n {{data[input.paramsCombo.visibleField]}}</mat-option>\n </mat-select>\n </div>\n\n <ng-template #otherInputEdit>\n <input [type]='input.type' [name]='input.ID' [value]='input.value'\n (input)='onChange(input.ID,$event, input.type)' matInput [placeholder]='input.label' [required]=\"input.required\" />\n </ng-template>\n\n <mat-error>Campo Obligatorio</mat-error>\n </mat-form-field>\n\n </div>\n\n <ng-template #Agregar>\n <mat-form-field *ngIf=\"!input.disregardForAdd\">\n <div *ngIf='input.type==\"combo\"; else otherInput'>\n\n <mat-select (selectionChange)='onChange(input.ID,$event, input.type)' placeholder='{{input.label}}' [required]=\"input.required\">\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\n [value]='data[input.paramsCombo.selectionField]'>\n {{data[input.paramsCombo.visibleField]}}</mat-option>\n </mat-select>\n\n </div>\n\n <ng-template #otherInput>\n <input [type]='input.type' [name]='input.ID' (input)='onChange(input.ID, $event, input.type)'\n matInput [placeholder]='input.label' [required]=\"input.required\" />\n\n </ng-template>\n <mat-error>Campo Obligatorio</mat-error>\n </mat-form-field>\n </ng-template>\n\n\n\n\n </div>\n\n <button *ngIf='data.action==\"add\" || data.action==\"edit\"'\n (click)='onSubmit()'\n color='primary'\n mat-raised-button\n [disabled]=\"!modalForm.valid\">Guardar</button>\n\n </form>\n</div>\n\n", styles: ["button{width:100%}mat-form-field{width:100%}\n"] }]
114
- }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
115
- type: Inject,
116
- args: [MAT_DIALOG_DATA]
117
- }] }, { type: i2.UntypedFormBuilder }, { type: i3.HttpService }]; } });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9kYXRhLXRhYmxlL3RhYmxlLW1vZGFsL3RhYmxlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvZGF0YS10YWJsZS90YWJsZS1tb2RhbC90YWJsZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBT3JDLE1BQU0sT0FBTyxtQkFBbUI7SUFLOUIsWUFDUyxTQUE0QyxFQUNuQixJQUFJLEVBQzVCLFdBQStCLEVBQy9CLElBQWlCO1FBSGxCLGNBQVMsR0FBVCxTQUFTLENBQW1DO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQUE7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFNBQUksR0FBSixJQUFJLENBQWE7UUFSM0IsY0FBUyxHQUFxQixJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELGNBQVMsR0FBRyxFQUFFLENBQUM7SUFRWixDQUFDO0lBRUosU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxF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QUFDO2dCQUNyRCxNQUFNO1NBQ1Q7SUFDSCxDQUFDOztnSEFuSFUsbUJBQW1CLDhDQU9wQixlQUFlO29HQVBkLG1CQUFtQix1RENaaEMsb2tHQTRFQTsyRkRoRWEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs7MEJBV3hCLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRhYmxlLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG1vZGFsRm9ybTogVW50eXBlZEZvcm1Hcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KTtcbiAgZGF0YUNvbWJvID0ge307XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGFibGVNb2RhbENvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlXG4gICkge31cblxuICBvbk5vQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGxldCBncm91cCA9IHt9O1xuICAgIGxldCBodHRwUmVxdWVzdHMgPSBbXTtcblxuICAgIHRoaXMuZGF0YS5jb2x1bW5zLm1hcCgoZWxlbWVudCkgPT4ge1xuXG4gICAgICBpZihlbGVtZW50LnR5cGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgICAgZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQudmFsdWUgPyBlbGVtZW50LnZhbHVlLnJlcGxhY2UoL1xcLi9nLCAnJykgOiAnJztcbiAgICAgICAgZWxlbWVudC50eXBlID0gJ251bWJlcidcbiAgICAgIH1cblxuICAgICAgaWYgKCFlbGVtZW50LmRpc3JlZ2FyZEZvckFkZCkge1xuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnY29tYm8nKSB7XG4gICAgICAgICAgdGhpcy5kYXRhQ29tYm9bZWxlbWVudC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZCAhPT0gZWxlbWVudC5JRCA/IGVsZW1lbnQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGQgOiBlbGVtZW50LklEXSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGluaXRpYWxWYWx1ZSA9IHRoaXMuZGF0YS5hY3Rpb24gPT09ICdlZGl0JyA/IGVsZW1lbnQudmFsdWUgOiAnJztcbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RhdGUnICYmIGVsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICBsZXQgcyA9IGVsZW1lbnQudmFsdWUuc3BsaXQoJy8nKTtcbiAgICAgICAgICBpbml0aWFsVmFsdWUgPSBgJHtzWzJdfS0ke3NbMV19LSR7c1swXX1gO1xuICAgICAgICB9XG5cblxuICAgICAgICBncm91cFtlbGVtZW50LklEXSA9IGVsZW1lbnQucmVxdWlyZWQgPyBuZXcgVW50eXBlZEZvcm1Db250cm9sKGluaXRpYWxWYWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKGluaXRpYWxWYWx1ZSk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQucGFyYW1zQ29tYm8pIHtcbiAgICAgICAgICBodHRwUmVxdWVzdHMucHVzaCh0aGlzLmNyZWF0ZUh0dHBSZXF1ZXN0KGVsZW1lbnQsIGdyb3VwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChodHRwUmVxdWVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9ya0pvaW4oaHR0cFJlcXVlc3RzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm1vZGFsRm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKGdyb3VwKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGFsRm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKGdyb3VwKTtcbiAgICB9XG4gIH1cblxuICAvLyBFeHRyYWVtb3MgbGEgY3JlYWNpw7NuIGRlIGxhIHNvbGljaXR1ZCBIVFRQIGEgc3UgcHJvcGlhIGZ1bmNpw7NuIHBhcmEgbWVqb3JhciBsYSBsZWdpYmlsaWRhZFxuICBjcmVhdGVIdHRwUmVxdWVzdChlbGVtZW50LCBncm91cCkge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXREYXRhKGVsZW1lbnQucGFyYW1zQ29tYm8udXJsLCBlbGVtZW50LnBhcmFtc0NvbWJvLnVybFBhcmFtcylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXNbJ2NvZGUnXSA9PT0gMCkge1xuICAgICAgICAgICAgZWxlbWVudC5pZGVudGlmaWVyQ29tYm8gPSBlbGVtZW50LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkICE9PSBlbGVtZW50LklEID8gZWxlbWVudC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZCA6IGVsZW1lbnQuSUQ7XG4gICAgICAgICAgICB0aGlzLmRhdGFDb21ib1tlbGVtZW50LmlkZW50aWZpZXJDb21ib10gPSByZXNbJ2JvZHknXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5hY3Rpb24gIT09ICdlZGl0Jykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YUNvbWJvW2VsZW1lbnQuaWRlbnRpZmllckNvbWJvXS5zb21lKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBkYXRhW2VsZW1lbnQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGRdID09PSBlbGVtZW50LnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgZGF0YVtlbGVtZW50LnBhcmFtc0NvbWJvLnZpc2libGVGaWVsZF0gPT09IGVsZW1lbnQudmFsdWVcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZGF0YVtlbGVtZW50LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkXVxuICAgICAgICAgICAgICAgIGVsZW1lbnQudmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGdyb3VwW2VsZW1lbnQuSURdLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuXG4gIG9uU3VibWl0KCkge1xuICAgIGlmICh0aGlzLm1vZGFsRm9ybS52YWxpZCkge1xuXG4gICAgICB0aGlzLmRhdGEuY29sdW1ucy5tYXAoKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQucGFyYW1zQ29tYm8gJiYgZWxlbWVudC5wYXJhbXNDb21iby5yZXR1cm5EYXRhU2VsZWN0KSB7XG4gICAgICAgICAgZWxlbWVudC5pZGVudGlmaWVyQ29tYm8gPSBlbGVtZW50LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkICE9PSBlbGVtZW50LklEID8gZWxlbWVudC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZCA6IGVsZW1lbnQuSUQ7XG4gICAgICAgICAgbGV0IHggPSB0aGlzLmRhdGFDb21ib1tlbGVtZW50LmlkZW50aWZpZXJDb21ib10uZmluZCh4ID0+IHhbZWxlbWVudC5pZGVudGlmaWVyQ29tYm9dID09IHRoaXMubW9kYWxGb3JtLnZhbHVlW2VsZW1lbnQuSURdKVxuICAgICAgICAgIGlmKHgpe1xuICAgICAgICAgICAgdGhpcy5tb2RhbEZvcm0uYWRkQ29udHJvbChlbGVtZW50LklEICsgJ0NvbWJvJywgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh4KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLm1vZGFsRm9ybS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2UoaWQ6IGFueSwgJGV2ZW50LCB0eXBlOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvbWJvJzpcbiAgICAgICAgdGhpcy5tb2RhbEZvcm0uZ2V0KGlkKS5zZXRWYWx1ZSgkZXZlbnQudmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5tb2RhbEZvcm0uZ2V0KGlkKS5zZXRWYWx1ZSgkZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2PlxuICAgIDxkaXYgc3R5bGU9J2Rpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyc+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICAgIDxoMyAqbmdJZj0nZGF0YS5hY3Rpb249PVwiZWRpdFwiJz4gRWRpdGFyIDwvaDM+XG4gICAgICAgICAgICAgICAgPGgzICpuZ0lmPSdkYXRhLmFjdGlvbj09XCJhZGRcIic+IEFncmVnYXIgPC9oMz5cbiAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBtYXQtZGlhbG9nLWNsb3NlPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTUwJTsgcG9zaXRpb246IHJlbGF0aXZlO1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIm1vZGFsRm9ybVwiPlxuXG4gICAgICAgIDxkaXYgKm5nRm9yPSdsZXQgaW5wdXQgb2YgZGF0YS5jb2x1bW5zJz5cblxuXG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPSdkYXRhLmFjdGlvbj09XCJlZGl0XCI7IGVsc2UgQWdyZWdhcic+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIhaW5wdXQuZGlzcmVnYXJkRm9yRWRpdFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPSdpbnB1dC50eXBlPT1cImNvbWJvXCI7IGVsc2Ugb3RoZXJJbnB1dEVkaXQnPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiaW5wdXQudmFsdWVcIiAoc2VsZWN0aW9uQ2hhbmdlKT0nb25DaGFuZ2UoaW5wdXQuSUQsJGV2ZW50LCBpbnB1dC50eXBlKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ne3tpbnB1dC5sYWJlbH19JyBbcmVxdWlyZWRdPVwiaW5wdXQucmVxdWlyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9J2xldCBkYXRhIG9mIGRhdGFDb21ib1tpbnB1dC5pZGVudGlmaWVyQ29tYm9dJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSdkYXRhW2lucHV0LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkXSc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YVtpbnB1dC5wYXJhbXNDb21iby52aXNpYmxlRmllbGRdfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjb3RoZXJJbnB1dEVkaXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW3R5cGVdPSdpbnB1dC50eXBlJyBbbmFtZV09J2lucHV0LklEJyBbdmFsdWVdPSdpbnB1dC52YWx1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPSdvbkNoYW5nZShpbnB1dC5JRCwkZXZlbnQsIGlucHV0LnR5cGUpJyBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPSdpbnB1dC5sYWJlbCcgW3JlcXVpcmVkXT1cImlucHV0LnJlcXVpcmVkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkNhbXBvIE9ibGlnYXRvcmlvPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI0FncmVnYXI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIhaW5wdXQuZGlzcmVnYXJkRm9yQWRkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9J2lucHV0LnR5cGU9PVwiY29tYm9cIjsgZWxzZSBvdGhlcklucHV0Jz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9J29uQ2hhbmdlKGlucHV0LklELCRldmVudCwgaW5wdXQudHlwZSknIHBsYWNlaG9sZGVyPSd7e2lucHV0LmxhYmVsfX0nIFtyZXF1aXJlZF09XCJpbnB1dC5yZXF1aXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0nbGV0IGRhdGEgb2YgZGF0YUNvbWJvW2lucHV0LmlkZW50aWZpZXJDb21ib10nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09J2RhdGFbaW5wdXQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGRdJz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhW2lucHV0LnBhcmFtc0NvbWJvLnZpc2libGVGaWVsZF19fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI290aGVySW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW3R5cGVdPSdpbnB1dC50eXBlJyBbbmFtZV09J2lucHV0LklEJyAoaW5wdXQpPSdvbkNoYW5nZShpbnB1dC5JRCwgJGV2ZW50LCBpbnB1dC50eXBlKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPSdpbnB1dC5sYWJlbCcgW3JlcXVpcmVkXT1cImlucHV0LnJlcXVpcmVkXCIgIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5DYW1wbyBPYmxpZ2F0b3JpbzwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG5cblxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gKm5nSWY9J2RhdGEuYWN0aW9uPT1cImFkZFwiIHx8IGRhdGEuYWN0aW9uPT1cImVkaXRcIidcbiAgICAgICAgICAgIChjbGljayk9J29uU3VibWl0KCknXG4gICAgICAgICAgICBjb2xvcj0ncHJpbWFyeSdcbiAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW1vZGFsRm9ybS52YWxpZFwiPkd1YXJkYXI8L2J1dHRvbj5cblxuICAgIDwvZm9ybT5cbjwvZGl2PlxuXG4iXX0=
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
+ import { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';
4
+ import { forkJoin } from 'rxjs';
5
+ import { map } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/dialog";
8
+ import * as i2 from "@angular/forms";
9
+ import * as i3 from "../../../../services/http.service";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "@angular/material/button";
12
+ import * as i6 from "@angular/material/form-field";
13
+ import * as i7 from "@angular/material/input";
14
+ import * as i8 from "@angular/material/select";
15
+ import * as i9 from "@angular/material/core";
16
+ export class TableModalComponent {
17
+ constructor(dialogRef, data, formBuilder, http) {
18
+ this.dialogRef = dialogRef;
19
+ this.data = data;
20
+ this.formBuilder = formBuilder;
21
+ this.http = http;
22
+ this.modalForm = new UntypedFormGroup({});
23
+ this.dataCombo = {};
24
+ }
25
+ onNoClick() {
26
+ this.dialogRef.close();
27
+ }
28
+ ngOnInit() {
29
+ let group = {};
30
+ let httpRequests = [];
31
+ this.data.columns.map((element) => {
32
+ if (element.type === 'currency') {
33
+ element.value = element.value ? element.value.replace(/\./g, '') : '';
34
+ element.type = 'number';
35
+ }
36
+ if (!element.disregardForAdd) {
37
+ if (element.type === 'combo') {
38
+ this.dataCombo[element.paramsCombo.selectionField !== element.ID ? element.paramsCombo.selectionField : element.ID] = '';
39
+ }
40
+ let initialValue = this.data.action === 'edit' ? element.value : '';
41
+ if (element.type === 'date' && element.value) {
42
+ let s = element.value.split('/');
43
+ initialValue = `${s[2]}-${s[1]}-${s[0]}`;
44
+ }
45
+ group[element.ID] = element.required ? new UntypedFormControl(initialValue, Validators.required) : new UntypedFormControl(initialValue);
46
+ if (element.paramsCombo) {
47
+ httpRequests.push(this.createHttpRequest(element, group));
48
+ }
49
+ }
50
+ });
51
+ if (httpRequests.length > 0) {
52
+ forkJoin(httpRequests).subscribe(() => {
53
+ this.modalForm = new UntypedFormGroup(group);
54
+ });
55
+ }
56
+ else {
57
+ this.modalForm = new UntypedFormGroup(group);
58
+ }
59
+ }
60
+ // Extraemos la creación de la solicitud HTTP a su propia función para mejorar la legibilidad
61
+ createHttpRequest(element, group) {
62
+ return this.http
63
+ .getData(element.paramsCombo.url, element.paramsCombo.urlParams)
64
+ .pipe(map((res) => {
65
+ if (res['code'] === 0) {
66
+ element.identifierCombo = element.paramsCombo.selectionField !== element.ID ? element.paramsCombo.selectionField : element.ID;
67
+ this.dataCombo[element.identifierCombo] = res['body'];
68
+ if (this.data.action !== 'edit') {
69
+ return;
70
+ }
71
+ this.dataCombo[element.identifierCombo].some((data) => {
72
+ if (data[element.paramsCombo.selectionField] === element.value ||
73
+ data[element.paramsCombo.visibleField] === element.value) {
74
+ var value = data[element.paramsCombo.selectionField];
75
+ element.value = value;
76
+ group[element.ID].setValue(value);
77
+ return true;
78
+ }
79
+ return false;
80
+ });
81
+ }
82
+ }));
83
+ }
84
+ onSubmit() {
85
+ if (this.modalForm.valid) {
86
+ this.data.columns.map((element) => {
87
+ if (element.paramsCombo && element.paramsCombo.returnDataSelect) {
88
+ element.identifierCombo = element.paramsCombo.selectionField !== element.ID ? element.paramsCombo.selectionField : element.ID;
89
+ let x = this.dataCombo[element.identifierCombo].find(x => x[element.identifierCombo] == this.modalForm.value[element.ID]);
90
+ if (x) {
91
+ this.modalForm.addControl(element.ID + 'Combo', new UntypedFormControl(x));
92
+ }
93
+ }
94
+ });
95
+ this.dialogRef.close(this.modalForm.value);
96
+ }
97
+ }
98
+ onChange(id, $event, type) {
99
+ switch (type) {
100
+ case 'combo':
101
+ this.modalForm.get(id).setValue($event.value);
102
+ break;
103
+ default:
104
+ this.modalForm.get(id).setValue($event.target.value);
105
+ break;
106
+ }
107
+ }
108
+ }
109
+ TableModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableModalComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.UntypedFormBuilder }, { token: i3.HttpService }], target: i0.ɵɵFactoryTarget.Component });
110
+ TableModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableModalComponent, selector: "app-table-modal", ngImport: i0, template: "<div>\r\n <div style='display:flex; justify-content: space-between;'>\r\n <div>\r\n <strong>\r\n <h3 *ngIf='data.action==\"edit\"'> Editar </h3>\r\n <h3 *ngIf='data.action==\"add\"'> Agregar </h3>\r\n </strong>\r\n </div>\r\n <div mat-dialog-close>\r\n <i class=\"fa fa-times-circle\" style=\"font-size: 150%; position: relative;\"></i>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"modalForm\">\r\n\r\n <div *ngFor='let input of data.columns'>\r\n\r\n\r\n\r\n <div *ngIf='data.action==\"edit\"; else Agregar'>\r\n <mat-form-field *ngIf=\"!input.disregardForEdit\">\r\n <div *ngIf='input.type==\"combo\"; else otherInputEdit'>\r\n\r\n <mat-select [value]=\"input.value\" (selectionChange)='onChange(input.ID,$event, input.type)'\r\n placeholder='{{input.label}}' [required]=\"input.required\">\r\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\r\n [value]='data[input.paramsCombo.selectionField]'>\r\n {{data[input.paramsCombo.visibleField]}}</mat-option>\r\n </mat-select>\r\n </div>\r\n\r\n <ng-template #otherInputEdit>\r\n <input [type]='input.type' [name]='input.ID' [value]='input.value'\r\n (input)='onChange(input.ID,$event, input.type)' matInput [placeholder]='input.label' [required]=\"input.required\" />\r\n </ng-template>\r\n\r\n <mat-error>Campo Obligatorio</mat-error>\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n <ng-template #Agregar>\r\n <mat-form-field *ngIf=\"!input.disregardForAdd\">\r\n <div *ngIf='input.type==\"combo\"; else otherInput'>\r\n\r\n <mat-select (selectionChange)='onChange(input.ID,$event, input.type)' placeholder='{{input.label}}' [required]=\"input.required\">\r\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\r\n [value]='data[input.paramsCombo.selectionField]'>\r\n {{data[input.paramsCombo.visibleField]}}</mat-option>\r\n </mat-select>\r\n\r\n </div>\r\n\r\n <ng-template #otherInput>\r\n <input [type]='input.type' [name]='input.ID' (input)='onChange(input.ID, $event, input.type)'\r\n matInput [placeholder]='input.label' [required]=\"input.required\" />\r\n\r\n </ng-template>\r\n <mat-error>Campo Obligatorio</mat-error>\r\n </mat-form-field>\r\n </ng-template>\r\n\r\n\r\n\r\n\r\n </div>\r\n\r\n <button *ngIf='data.action==\"add\" || data.action==\"edit\"'\r\n (click)='onSubmit()'\r\n color='primary'\r\n mat-raised-button\r\n [disabled]=\"!modalForm.valid\">Guardar</button>\r\n\r\n </form>\r\n</div>\r\n\r\n", styles: ["button{width:100%}mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableModalComponent, decorators: [{
112
+ type: Component,
113
+ args: [{ selector: 'app-table-modal', template: "<div>\r\n <div style='display:flex; justify-content: space-between;'>\r\n <div>\r\n <strong>\r\n <h3 *ngIf='data.action==\"edit\"'> Editar </h3>\r\n <h3 *ngIf='data.action==\"add\"'> Agregar </h3>\r\n </strong>\r\n </div>\r\n <div mat-dialog-close>\r\n <i class=\"fa fa-times-circle\" style=\"font-size: 150%; position: relative;\"></i>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"modalForm\">\r\n\r\n <div *ngFor='let input of data.columns'>\r\n\r\n\r\n\r\n <div *ngIf='data.action==\"edit\"; else Agregar'>\r\n <mat-form-field *ngIf=\"!input.disregardForEdit\">\r\n <div *ngIf='input.type==\"combo\"; else otherInputEdit'>\r\n\r\n <mat-select [value]=\"input.value\" (selectionChange)='onChange(input.ID,$event, input.type)'\r\n placeholder='{{input.label}}' [required]=\"input.required\">\r\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\r\n [value]='data[input.paramsCombo.selectionField]'>\r\n {{data[input.paramsCombo.visibleField]}}</mat-option>\r\n </mat-select>\r\n </div>\r\n\r\n <ng-template #otherInputEdit>\r\n <input [type]='input.type' [name]='input.ID' [value]='input.value'\r\n (input)='onChange(input.ID,$event, input.type)' matInput [placeholder]='input.label' [required]=\"input.required\" />\r\n </ng-template>\r\n\r\n <mat-error>Campo Obligatorio</mat-error>\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n <ng-template #Agregar>\r\n <mat-form-field *ngIf=\"!input.disregardForAdd\">\r\n <div *ngIf='input.type==\"combo\"; else otherInput'>\r\n\r\n <mat-select (selectionChange)='onChange(input.ID,$event, input.type)' placeholder='{{input.label}}' [required]=\"input.required\">\r\n <mat-option *ngFor='let data of dataCombo[input.identifierCombo]'\r\n [value]='data[input.paramsCombo.selectionField]'>\r\n {{data[input.paramsCombo.visibleField]}}</mat-option>\r\n </mat-select>\r\n\r\n </div>\r\n\r\n <ng-template #otherInput>\r\n <input [type]='input.type' [name]='input.ID' (input)='onChange(input.ID, $event, input.type)'\r\n matInput [placeholder]='input.label' [required]=\"input.required\" />\r\n\r\n </ng-template>\r\n <mat-error>Campo Obligatorio</mat-error>\r\n </mat-form-field>\r\n </ng-template>\r\n\r\n\r\n\r\n\r\n </div>\r\n\r\n <button *ngIf='data.action==\"add\" || data.action==\"edit\"'\r\n (click)='onSubmit()'\r\n color='primary'\r\n mat-raised-button\r\n [disabled]=\"!modalForm.valid\">Guardar</button>\r\n\r\n </form>\r\n</div>\r\n\r\n", styles: ["button{width:100%}mat-form-field{width:100%}\n"] }]
114
+ }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
115
+ type: Inject,
116
+ args: [MAT_DIALOG_DATA]
117
+ }] }, { type: i2.UntypedFormBuilder }, { type: i3.HttpService }]; } });
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9kYXRhLXRhYmxlL3RhYmxlLW1vZGFsL3RhYmxlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvZGF0YS10YWJsZS90YWJsZS1tb2RhbC90YWJsZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBT3JDLE1BQU0sT0FBTyxtQkFBbUI7SUFLOUIsWUFDUyxTQUE0QyxFQUNuQixJQUFJLEVBQzVCLFdBQStCLEVBQy9CLElBQWlCO1FBSGxCLGNBQVMsR0FBVCxTQUFTLENBQW1DO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQUE7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFNBQUksR0FBSixJQUFJLENBQWE7UUFSM0IsY0FBUyxHQUFxQixJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELGNBQVMsR0FBRyxFQUFFLENBQUM7SUFRWixDQUFDO0lBRUosU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxF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QUFDO2dCQUNyRCxNQUFNO1NBQ1Q7SUFDSCxDQUFDOztnSEFuSFUsbUJBQW1CLDhDQU9wQixlQUFlO29HQVBkLG1CQUFtQix1RENaaEMsNHRHQTRFQTsyRkRoRWEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs7MEJBV3hCLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC10YWJsZS1tb2RhbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgbW9kYWxGb3JtOiBVbnR5cGVkRm9ybUdyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xyXG4gIGRhdGFDb21ibyA9IHt9O1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGFibGVNb2RhbENvbXBvbmVudD4sXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGEsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBvbk5vQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgZ3JvdXAgPSB7fTtcclxuICAgIGxldCBodHRwUmVxdWVzdHMgPSBbXTtcclxuXHJcbiAgICB0aGlzLmRhdGEuY29sdW1ucy5tYXAoKGVsZW1lbnQpID0+IHtcclxuXHJcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PT0gJ2N1cnJlbmN5Jykge1xyXG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnZhbHVlID8gZWxlbWVudC52YWx1ZS5yZXBsYWNlKC9cXC4vZywgJycpIDogJyc7XHJcbiAgICAgICAgZWxlbWVudC50eXBlID0gJ251bWJlcidcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFlbGVtZW50LmRpc3JlZ2FyZEZvckFkZCkge1xyXG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdjb21ibycpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YUNvbWJvW2VsZW1lbnQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGQgIT09IGVsZW1lbnQuSUQgPyBlbGVtZW50LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkIDogZWxlbWVudC5JRF0gPSAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpbml0aWFsVmFsdWUgPSB0aGlzLmRhdGEuYWN0aW9uID09PSAnZWRpdCcgPyBlbGVtZW50LnZhbHVlIDogJyc7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RhdGUnICYmIGVsZW1lbnQudmFsdWUpIHtcclxuICAgICAgICAgIGxldCBzID0gZWxlbWVudC52YWx1ZS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgaW5pdGlhbFZhbHVlID0gYCR7c1syXX0tJHtzWzFdfS0ke3NbMF19YDtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBncm91cFtlbGVtZW50LklEXSA9IGVsZW1lbnQucmVxdWlyZWQgPyBuZXcgVW50eXBlZEZvcm1Db250cm9sKGluaXRpYWxWYWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKGluaXRpYWxWYWx1ZSk7XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50LnBhcmFtc0NvbWJvKSB7XHJcbiAgICAgICAgICBodHRwUmVxdWVzdHMucHVzaCh0aGlzLmNyZWF0ZUh0dHBSZXF1ZXN0KGVsZW1lbnQsIGdyb3VwKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoaHR0cFJlcXVlc3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9ya0pvaW4oaHR0cFJlcXVlc3RzKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxGb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoZ3JvdXApO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9kYWxGb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRXh0cmFlbW9zIGxhIGNyZWFjacOzbiBkZSBsYSBzb2xpY2l0dWQgSFRUUCBhIHN1IHByb3BpYSBmdW5jacOzbiBwYXJhIG1lam9yYXIgbGEgbGVnaWJpbGlkYWRcclxuICBjcmVhdGVIdHRwUmVxdWVzdChlbGVtZW50LCBncm91cCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0RGF0YShlbGVtZW50LnBhcmFtc0NvbWJvLnVybCwgZWxlbWVudC5wYXJhbXNDb21iby51cmxQYXJhbXMpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzWydjb2RlJ10gPT09IDApIHtcclxuICAgICAgICAgICAgZWxlbWVudC5pZGVudGlmaWVyQ29tYm8gPSBlbGVtZW50LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkICE9PSBlbGVtZW50LklEID8gZWxlbWVudC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZCA6IGVsZW1lbnQuSUQ7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YUNvbWJvW2VsZW1lbnQuaWRlbnRpZmllckNvbWJvXSA9IHJlc1snYm9keSddO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5hY3Rpb24gIT09ICdlZGl0Jykge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kYXRhQ29tYm9bZWxlbWVudC5pZGVudGlmaWVyQ29tYm9dLnNvbWUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBkYXRhW2VsZW1lbnQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGRdID09PSBlbGVtZW50LnZhbHVlIHx8XHJcbiAgICAgICAgICAgICAgICBkYXRhW2VsZW1lbnQucGFyYW1zQ29tYm8udmlzaWJsZUZpZWxkXSA9PT0gZWxlbWVudC52YWx1ZVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZGF0YVtlbGVtZW50LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkXVxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICBncm91cFtlbGVtZW50LklEXS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG5cclxuICBvblN1Ym1pdCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGFsRm9ybS52YWxpZCkge1xyXG5cclxuICAgICAgdGhpcy5kYXRhLmNvbHVtbnMubWFwKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQucGFyYW1zQ29tYm8gJiYgZWxlbWVudC5wYXJhbXNDb21iby5yZXR1cm5EYXRhU2VsZWN0KSB7XHJcbiAgICAgICAgICBlbGVtZW50LmlkZW50aWZpZXJDb21ibyA9IGVsZW1lbnQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGQgIT09IGVsZW1lbnQuSUQgPyBlbGVtZW50LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkIDogZWxlbWVudC5JRDtcclxuICAgICAgICAgIGxldCB4ID0gdGhpcy5kYXRhQ29tYm9bZWxlbWVudC5pZGVudGlmaWVyQ29tYm9dLmZpbmQoeCA9PiB4W2VsZW1lbnQuaWRlbnRpZmllckNvbWJvXSA9PSB0aGlzLm1vZGFsRm9ybS52YWx1ZVtlbGVtZW50LklEXSlcclxuICAgICAgICAgIGlmKHgpe1xyXG4gICAgICAgICAgICB0aGlzLm1vZGFsRm9ybS5hZGRDb250cm9sKGVsZW1lbnQuSUQgKyAnQ29tYm8nLCBuZXcgVW50eXBlZEZvcm1Db250cm9sKHgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5tb2RhbEZvcm0udmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoaWQ6IGFueSwgJGV2ZW50LCB0eXBlOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdjb21ibyc6XHJcbiAgICAgICAgdGhpcy5tb2RhbEZvcm0uZ2V0KGlkKS5zZXRWYWx1ZSgkZXZlbnQudmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLm1vZGFsRm9ybS5nZXQoaWQpLnNldFZhbHVlKCRldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2PlxyXG4gICAgPGRpdiBzdHlsZT0nZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Jz5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8c3Ryb25nPlxyXG4gICAgICAgICAgICAgICAgPGgzICpuZ0lmPSdkYXRhLmFjdGlvbj09XCJlZGl0XCInPiBFZGl0YXIgPC9oMz5cclxuICAgICAgICAgICAgICAgIDxoMyAqbmdJZj0nZGF0YS5hY3Rpb249PVwiYWRkXCInPiBBZ3JlZ2FyIDwvaDM+XHJcbiAgICAgICAgICAgIDwvc3Ryb25nPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgbWF0LWRpYWxvZy1jbG9zZT5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTUwJTsgcG9zaXRpb246IHJlbGF0aXZlO1wiPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwibW9kYWxGb3JtXCI+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nRm9yPSdsZXQgaW5wdXQgb2YgZGF0YS5jb2x1bW5zJz5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9J2RhdGEuYWN0aW9uPT1cImVkaXRcIjsgZWxzZSBBZ3JlZ2FyJz5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiIWlucHV0LmRpc3JlZ2FyZEZvckVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPSdpbnB1dC50eXBlPT1cImNvbWJvXCI7IGVsc2Ugb3RoZXJJbnB1dEVkaXQnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cImlucHV0LnZhbHVlXCIgKHNlbGVjdGlvbkNoYW5nZSk9J29uQ2hhbmdlKGlucHV0LklELCRldmVudCwgaW5wdXQudHlwZSknXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ne3tpbnB1dC5sYWJlbH19JyBbcmVxdWlyZWRdPVwiaW5wdXQucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0nbGV0IGRhdGEgb2YgZGF0YUNvbWJvW2lucHV0LmlkZW50aWZpZXJDb21ib10nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0nZGF0YVtpbnB1dC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZF0nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YVtpbnB1dC5wYXJhbXNDb21iby52aXNpYmxlRmllbGRdfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvdGhlcklucHV0RWRpdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFt0eXBlXT0naW5wdXQudHlwZScgW25hbWVdPSdpbnB1dC5JRCcgW3ZhbHVlXT0naW5wdXQudmFsdWUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPSdvbkNoYW5nZShpbnB1dC5JRCwkZXZlbnQsIGlucHV0LnR5cGUpJyBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPSdpbnB1dC5sYWJlbCcgW3JlcXVpcmVkXT1cImlucHV0LnJlcXVpcmVkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkNhbXBvIE9ibGlnYXRvcmlvPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNBZ3JlZ2FyPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIhaW5wdXQuZGlzcmVnYXJkRm9yQWRkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0naW5wdXQudHlwZT09XCJjb21ib1wiOyBlbHNlIG90aGVySW5wdXQnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9J29uQ2hhbmdlKGlucHV0LklELCRldmVudCwgaW5wdXQudHlwZSknIHBsYWNlaG9sZGVyPSd7e2lucHV0LmxhYmVsfX0nIFtyZXF1aXJlZF09XCJpbnB1dC5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSdsZXQgZGF0YSBvZiBkYXRhQ29tYm9baW5wdXQuaWRlbnRpZmllckNvbWJvXSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSdkYXRhW2lucHV0LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkXSc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhW2lucHV0LnBhcmFtc0NvbWJvLnZpc2libGVGaWVsZF19fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvdGhlcklucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW3R5cGVdPSdpbnB1dC50eXBlJyBbbmFtZV09J2lucHV0LklEJyAoaW5wdXQpPSdvbkNoYW5nZShpbnB1dC5JRCwgJGV2ZW50LCBpbnB1dC50eXBlKSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IFtwbGFjZWhvbGRlcl09J2lucHV0LmxhYmVsJyBbcmVxdWlyZWRdPVwiaW5wdXQucmVxdWlyZWRcIiAgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkNhbXBvIE9ibGlnYXRvcmlvPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj0nZGF0YS5hY3Rpb249PVwiYWRkXCIgfHwgZGF0YS5hY3Rpb249PVwiZWRpdFwiJ1xyXG4gICAgICAgICAgICAoY2xpY2spPSdvblN1Ym1pdCgpJ1xyXG4gICAgICAgICAgICBjb2xvcj0ncHJpbWFyeSdcclxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFtb2RhbEZvcm0udmFsaWRcIj5HdWFyZGFyPC9idXR0b24+XHJcblxyXG4gICAgPC9mb3JtPlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==