brainloper-ui 14.0.42 → 14.0.44

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 (95) hide show
  1. package/esm2020/brainloper-ui.mjs +4 -4
  2. package/esm2020/public_api.mjs +55 -55
  3. package/esm2020/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +309 -309
  4. package/esm2020/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +28 -28
  5. package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +22 -22
  6. package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +82 -82
  7. package/esm2020/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +36 -36
  8. package/esm2020/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +175 -175
  9. package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +728 -732
  10. package/esm2020/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +117 -117
  11. package/esm2020/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +185 -185
  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 +221 -221
  16. package/esm2020/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.mjs +79 -79
  17. package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +80 -80
  18. package/esm2020/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +107 -107
  19. package/esm2020/src/app/modules/directives/carousel-item.directive.mjs +17 -17
  20. package/esm2020/src/app/modules/interfaces/buttons/button-icon.mjs +1 -1
  21. package/esm2020/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +1 -1
  22. package/esm2020/src/app/modules/interfaces/combos/combos-configuration.mjs +1 -1
  23. package/esm2020/src/app/modules/interfaces/data-table/params.mjs +1 -1
  24. package/esm2020/src/app/modules/interfaces/data-table/rules.mjs +1 -1
  25. package/esm2020/src/app/modules/interfaces/data-table/table-columns.mjs +1 -1
  26. package/esm2020/src/app/modules/interfaces/data-table/table-configuration.mjs +1 -1
  27. package/esm2020/src/app/modules/interfaces/enum/enumActions.mjs +7 -7
  28. package/esm2020/src/app/modules/interfaces/enum/enumRules.mjs +7 -7
  29. package/esm2020/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +1 -1
  30. package/esm2020/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +1 -1
  31. package/esm2020/src/app/modules/interfaces/filters/header-filters.mjs +1 -1
  32. package/esm2020/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +7 -7
  33. package/esm2020/src/app/modules/interfaces/report/template-pdf-ot.mjs +1 -1
  34. package/esm2020/src/app/modules/interfaces/report/template-pfd-fo.mjs +1 -1
  35. package/esm2020/src/app/modules/services/crypto.service.mjs +36 -36
  36. package/esm2020/src/app/modules/services/export-data.service.mjs +165 -165
  37. package/esm2020/src/app/modules/services/file-forms.service.mjs +23 -23
  38. package/esm2020/src/app/modules/services/functions.service.mjs +53 -53
  39. package/esm2020/src/app/modules/services/generate-pdf.service.mjs +57 -57
  40. package/esm2020/src/app/modules/services/http.service.mjs +96 -96
  41. package/esm2020/src/app/modules/services/loading/loading.component.mjs +27 -27
  42. package/esm2020/src/app/modules/services/local-storage.service.mjs +114 -114
  43. package/esm2020/src/app/modules/services/message.service.mjs +199 -199
  44. package/esm2020/src/app/modules/services/screen-size-util.mjs +5 -5
  45. package/esm2020/src/app/modules/services/session.service.mjs +41 -41
  46. package/fesm2015/brainloper-ui.mjs +2809 -2813
  47. package/fesm2015/brainloper-ui.mjs.map +1 -1
  48. package/fesm2020/brainloper-ui.mjs +2769 -2773
  49. package/fesm2020/brainloper-ui.mjs.map +1 -1
  50. package/index.d.ts +5 -5
  51. package/package.json +1 -1
  52. package/public_api.d.ts +55 -55
  53. package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +74 -74
  54. package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +13 -13
  55. package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +10 -10
  56. package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +24 -24
  57. package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +15 -15
  58. package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +46 -46
  59. package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +125 -125
  60. package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +21 -21
  61. package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +42 -42
  62. package/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.d.ts +2 -2
  63. package/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.d.ts +2 -2
  64. package/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.d.ts +2 -2
  65. package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +30 -30
  66. package/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.d.ts +35 -35
  67. package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +36 -36
  68. package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +26 -26
  69. package/src/app/modules/directives/carousel-item.directive.d.ts +9 -9
  70. package/src/app/modules/interfaces/buttons/button-icon.d.ts +9 -9
  71. package/src/app/modules/interfaces/buttons/button-lavel-edit.d.ts +6 -6
  72. package/src/app/modules/interfaces/combos/combos-configuration.d.ts +13 -13
  73. package/src/app/modules/interfaces/data-table/params.d.ts +7 -7
  74. package/src/app/modules/interfaces/data-table/rules.d.ts +8 -8
  75. package/src/app/modules/interfaces/data-table/table-columns.d.ts +25 -25
  76. package/src/app/modules/interfaces/data-table/table-configuration.d.ts +26 -26
  77. package/src/app/modules/interfaces/enum/enumActions.d.ts +6 -6
  78. package/src/app/modules/interfaces/enum/enumRules.d.ts +6 -6
  79. package/src/app/modules/interfaces/file-forms-service/file-forms-params.d.ts +4 -4
  80. package/src/app/modules/interfaces/file-forms-service/file-input-params.d.ts +13 -13
  81. package/src/app/modules/interfaces/filters/header-filters.d.ts +13 -13
  82. package/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.d.ts +10 -10
  83. package/src/app/modules/interfaces/report/template-pdf-ot.d.ts +19 -19
  84. package/src/app/modules/interfaces/report/template-pfd-fo.d.ts +20 -20
  85. package/src/app/modules/services/crypto.service.d.ts +10 -10
  86. package/src/app/modules/services/export-data.service.d.ts +18 -18
  87. package/src/app/modules/services/file-forms.service.d.ts +7 -7
  88. package/src/app/modules/services/functions.service.d.ts +13 -13
  89. package/src/app/modules/services/generate-pdf.service.d.ts +12 -12
  90. package/src/app/modules/services/http.service.d.ts +22 -22
  91. package/src/app/modules/services/loading/loading.component.d.ts +15 -15
  92. package/src/app/modules/services/local-storage.service.d.ts +49 -49
  93. package/src/app/modules/services/message.service.d.ts +23 -23
  94. package/src/app/modules/services/screen-size-util.d.ts +3 -3
  95. package/src/app/modules/services/session.service.d.ts +14 -14
@@ -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 }]; } });
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
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=