brainloper-ui 1.0.13 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +32 -41
- package/fesm2015/brainloper-ui.mjs +31 -41
- package/fesm2015/brainloper-ui.mjs.map +1 -1
- package/fesm2020/brainloper-ui.mjs +31 -41
- package/fesm2020/brainloper-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +2 -2
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { Component, Inject } from '@angular/core';
|
|
2
2
|
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
+
import { FormGroup, FormControl, Validators } from '@angular/forms';
|
|
4
|
+
import { forkJoin } from 'rxjs';
|
|
5
|
+
import { map } from 'rxjs/operators';
|
|
3
6
|
import * as i0 from "@angular/core";
|
|
4
7
|
import * as i1 from "@angular/material/dialog";
|
|
5
8
|
import * as i2 from "@angular/forms";
|
|
@@ -16,85 +19,73 @@ export class TableModalComponent {
|
|
|
16
19
|
this.data = data;
|
|
17
20
|
this.formBuilder = formBuilder;
|
|
18
21
|
this.http = http;
|
|
19
|
-
this.modalForm = {};
|
|
22
|
+
this.modalForm = new FormGroup({});
|
|
20
23
|
this.dataCombo = {};
|
|
21
24
|
}
|
|
22
25
|
onNoClick() {
|
|
23
26
|
this.dialogRef.close();
|
|
24
27
|
}
|
|
25
28
|
ngOnInit() {
|
|
26
|
-
let
|
|
27
|
-
|
|
29
|
+
let group = {};
|
|
30
|
+
let httpRequests = [];
|
|
28
31
|
this.data.columns.forEach((element, index) => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
if (element.disregardForAdd) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
32
35
|
if (element.type == 'combo') {
|
|
33
|
-
Object.assign(this.dataCombo,
|
|
36
|
+
Object.assign(this.dataCombo, { [element.ID]: '' });
|
|
34
37
|
}
|
|
38
|
+
let initialValue = '';
|
|
35
39
|
if (this.data.action == 'edit') {
|
|
36
|
-
|
|
37
|
-
if (element.type === 'date') {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
element.value = `${s[2]}-${s[1]}-${s[0]}`;
|
|
41
|
-
}
|
|
40
|
+
initialValue = element.value;
|
|
41
|
+
if (element.type === 'date' && element.value) {
|
|
42
|
+
let s = element.value.split('/');
|
|
43
|
+
initialValue = `${s[2]}-${s[1]}-${s[0]}`;
|
|
42
44
|
}
|
|
43
45
|
}
|
|
46
|
+
group[element.ID] = element.required ? new FormControl(initialValue, Validators.required) : new FormControl(initialValue);
|
|
44
47
|
if (element.paramsCombo) {
|
|
45
|
-
|
|
46
|
-
//console.log(element.paramsCombo.urlParams);
|
|
47
|
-
this.http
|
|
48
|
+
httpRequests.push(this.http
|
|
48
49
|
.getData(element.paramsCombo.url, element.paramsCombo.urlParams)
|
|
49
|
-
.
|
|
50
|
+
.pipe(map((res) => {
|
|
50
51
|
if (res['code'] === 0) {
|
|
51
52
|
this.dataCombo[element.ID] = res['body'];
|
|
52
|
-
//console.log(this.dataCombo);
|
|
53
53
|
this.dataCombo[element.ID].forEach((data) => {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.modalForm[element.ID] =
|
|
57
|
-
data[element.paramsCombo.selectionField];
|
|
58
|
-
this.data.columns[index].value =
|
|
59
|
-
data[element.paramsCombo.selectionField].toString();
|
|
54
|
+
if (data[element.paramsCombo.selectionField] == element.value) {
|
|
55
|
+
group[element.ID].setValue(data[element.paramsCombo.selectionField]);
|
|
60
56
|
}
|
|
61
57
|
});
|
|
62
58
|
}
|
|
63
|
-
|
|
64
|
-
console.log('error en la consulta');
|
|
65
|
-
}
|
|
66
|
-
}, (err) => {
|
|
67
|
-
console.log(err);
|
|
68
|
-
});
|
|
59
|
+
})));
|
|
69
60
|
}
|
|
70
61
|
});
|
|
71
|
-
|
|
62
|
+
forkJoin(httpRequests).subscribe(() => {
|
|
63
|
+
this.modalForm = new FormGroup(group);
|
|
64
|
+
});
|
|
72
65
|
}
|
|
73
66
|
onSubmit() {
|
|
74
|
-
|
|
67
|
+
if (this.modalForm.valid) {
|
|
68
|
+
this.dialogRef.close(this.modalForm.value);
|
|
69
|
+
}
|
|
75
70
|
}
|
|
76
71
|
onChange(id, $event, type) {
|
|
77
72
|
switch (type) {
|
|
78
|
-
// case 'date':
|
|
79
|
-
// this.modalForm[id] = $event.target.value;
|
|
80
|
-
// break;
|
|
81
73
|
case 'combo':
|
|
82
|
-
this.modalForm
|
|
74
|
+
this.modalForm.get(id).setValue($event.value);
|
|
83
75
|
break;
|
|
84
76
|
default:
|
|
85
|
-
this.modalForm
|
|
77
|
+
this.modalForm.get(id).setValue($event.target.value);
|
|
86
78
|
break;
|
|
87
79
|
}
|
|
88
|
-
//console.log('onChange', $event, id);
|
|
89
80
|
}
|
|
90
81
|
}
|
|
91
82
|
TableModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TableModalComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.FormBuilder }, { token: i3.HttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
92
|
-
TableModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", 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>\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]
|
|
83
|
+
TableModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", 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.ID]'\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.ID]'\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"], components: [{ type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i5.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i7.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"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.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"] }, { type: i4.MatError, selector: "mat-error", inputs: ["id"] }] });
|
|
93
84
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TableModalComponent, decorators: [{
|
|
94
85
|
type: Component,
|
|
95
|
-
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>\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]
|
|
86
|
+
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.ID]'\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.ID]'\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"] }]
|
|
96
87
|
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
97
88
|
type: Inject,
|
|
98
89
|
args: [MAT_DIALOG_DATA]
|
|
99
90
|
}] }, { type: i2.FormBuilder }, { type: i3.HttpService }]; } });
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9kYXRhLXRhYmxlL3RhYmxlLW1vZGFsL3RhYmxlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvZGF0YS10YWJsZS90YWJsZS1tb2RhbC90YWJsZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7OztBQVN6RSxNQUFNLE9BQU8sbUJBQW1CO0lBSTlCLFlBQ1MsU0FBNEMsRUFDbkIsSUFBSSxFQUM1QixXQUF3QixFQUN4QixJQUFpQjtRQUhsQixjQUFTLEdBQVQsU0FBUyxDQUFtQztRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFBO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQWE7UUFQM0IsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQVMsR0FBRyxFQUFFLENBQUM7SUFPWixDQUFDO0lBRUosU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNoQyxpREFBaUQ7UUFFakQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzNDLElB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QUNYLEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ2xDLE1BQU07WUFFUjtnQkFDRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUN6QyxNQUFNO1NBQ1Q7UUFFRCxzQ0FBc0M7SUFDeEMsQ0FBQzs7Z0hBNUZVLG1CQUFtQiw4Q0FNcEIsZUFBZTtvR0FOZCxtQkFBbUIsdURDVmhDLGtoR0F3RUE7MkZEOURhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7OzBCQVV4QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXRhYmxlLW1vZGFsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBtb2RhbEZvcm0gPSB7fTtcclxuICBkYXRhQ29tYm8gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGFibGVNb2RhbENvbXBvbmVudD4sXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGEsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG9uTm9DbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGxldCBjb2x1bW5zID0gdGhpcy5kYXRhLmNvbHVtbnM7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdkYXRhIGNvbHVtbnMnLCB0aGlzLmRhdGEuY29sdW1ucyk7XHJcblxyXG4gICAgdGhpcy5kYXRhLmNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuICAgICAgbGV0IHRleHQgPSBge1wiJHtlbGVtZW50LklEfVwiOlwiXCJ9YDtcclxuICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKHRleHQpO1xyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kYWxGb3JtLCBqc29uKTtcclxuXHJcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gJ2NvbWJvJykge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhQ29tYm8sIGpzb24pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5kYXRhLmFjdGlvbiA9PSAnZWRpdCcpIHtcclxuICAgICAgICB0aGlzLm1vZGFsRm9ybVtlbGVtZW50LklEXSA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICBpZihlbGVtZW50LnZhbHVlKXtcclxuICAgICAgICAgICAgbGV0IHMgPSBlbGVtZW50LnZhbHVlLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQudmFsdWUgPSBgJHtzWzJdfS0ke3NbMV19LSR7c1swXX1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVsZW1lbnQucGFyYW1zQ29tYm8pIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGVsZW1lbnQucGFyYW1zQ29tYm8udXJsKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGVsZW1lbnQucGFyYW1zQ29tYm8udXJsUGFyYW1zKTtcclxuXHJcbiAgICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgICAuZ2V0RGF0YShlbGVtZW50LnBhcmFtc0NvbWJvLnVybCwgZWxlbWVudC5wYXJhbXNDb21iby51cmxQYXJhbXMpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc1snY29kZSddID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFDb21ib1tlbGVtZW50LklEXSA9IHJlc1snYm9keSddO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRhdGFDb21ibyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhQ29tYm9bZWxlbWVudC5JRF0uZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhkYXRhW2VsZW1lbnQucGFyYW1zQ29tYm8udmlzaWJsZUZpZWxkXSwgZWxlbWVudC52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbZWxlbWVudC5wYXJhbXNDb21iby52aXNpYmxlRmllbGRdID09IGVsZW1lbnQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsRm9ybVtlbGVtZW50LklEXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhW2VsZW1lbnQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5jb2x1bW5zW2luZGV4XS52YWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhW2VsZW1lbnQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGRdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgZW4gbGEgY29uc3VsdGEnKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMuZGF0YUNvbWJvKTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5tb2RhbEZvcm0pO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoaWQ6IGFueSwgJGV2ZW50LCB0eXBlOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAvLyBjYXNlICdkYXRlJzpcclxuICAgICAgLy8gICB0aGlzLm1vZGFsRm9ybVtpZF0gPSAkZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjb21ibyc6XHJcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1baWRdID0gJGV2ZW50LnZhbHVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLm1vZGFsRm9ybVtpZF0gPSAkZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vY29uc29sZS5sb2coJ29uQ2hhbmdlJywgJGV2ZW50LCBpZCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXY+XHJcbiAgICA8ZGl2IHN0eWxlPSdkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsnPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxzdHJvbmc+XHJcbiAgICAgICAgICAgICAgICA8aDMgKm5nSWY9J2RhdGEuYWN0aW9uPT1cImVkaXRcIic+IEVkaXRhciA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGgzICpuZ0lmPSdkYXRhLmFjdGlvbj09XCJhZGRcIic+IEFncmVnYXIgPC9oMz5cclxuICAgICAgICAgICAgPC9zdHJvbmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBtYXQtZGlhbG9nLWNsb3NlPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNTAlOyBwb3NpdGlvbjogcmVsYXRpdmU7XCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGZvcm0+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nRm9yPSdsZXQgaW5wdXQgb2YgZGF0YS5jb2x1bW5zJz5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9J2RhdGEuYWN0aW9uPT1cImVkaXRcIjsgZWxzZSBBZ3JlZ2FyJz5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiIWlucHV0LmRpc3JlZ2FyZEZvckVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPSdpbnB1dC50eXBlPT1cImNvbWJvXCI7IGVsc2Ugb3RoZXJJbnB1dEVkaXQnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT0naW5wdXQudmFsdWUnIChzZWxlY3Rpb25DaGFuZ2UpPSdvbkNoYW5nZShpbnB1dC5JRCwkZXZlbnQsIGlucHV0LnR5cGUpJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J3t7aW5wdXQubGFiZWx9fSc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9J2xldCBkYXRhIG9mIGRhdGFDb21ib1tpbnB1dC5JRF0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9J3t7ZGF0YVtpbnB1dC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZF19fSc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhW2lucHV0LnBhcmFtc0NvbWJvLnZpc2libGVGaWVsZF19fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI290aGVySW5wdXRFZGl0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW3R5cGVdPSdpbnB1dC50eXBlJyBbbmFtZV09J2lucHV0LklEJyBbdmFsdWVdPSdpbnB1dC52YWx1ZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9J29uQ2hhbmdlKGlucHV0LklELCRldmVudCwgaW5wdXQudHlwZSknIG1hdElucHV0IFtwbGFjZWhvbGRlcl09J2lucHV0LmxhYmVsJyBbcmVxdWlyZWRdPVwiaW5wdXQucmVxdWlyZWRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+Q2FtcG8gT2JsaWdhdG9yaW88L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI0FncmVnYXI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIiFpbnB1dC5kaXNyZWdhcmRGb3JBZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPSdpbnB1dC50eXBlPT1cImNvbWJvXCI7IGVsc2Ugb3RoZXJJbnB1dCc+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAoc2VsZWN0aW9uQ2hhbmdlKT0nb25DaGFuZ2UoaW5wdXQuSUQsJGV2ZW50LCBpbnB1dC50eXBlKScgcGxhY2Vob2xkZXI9J3t7aW5wdXQubGFiZWx9fSc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9J2xldCBkYXRhIG9mIGRhdGFDb21ib1tpbnB1dC5JRF0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9J3t7ZGF0YVtpbnB1dC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZF19fSc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhW2lucHV0LnBhcmFtc0NvbWJvLnZpc2libGVGaWVsZF19fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvdGhlcklucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW3R5cGVdPSdpbnB1dC50eXBlJyBbbmFtZV09J2lucHV0LklEJyAoaW5wdXQpPSdvbkNoYW5nZShpbnB1dC5JRCwgJGV2ZW50LCBpbnB1dC50eXBlKSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IFtwbGFjZWhvbGRlcl09J2lucHV0LmxhYmVsJyBbcmVxdWlyZWRdPVwiaW5wdXQucmVxdWlyZWRcIiAgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkNhbXBvIE9ibGlnYXRvcmlvPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj0nZGF0YS5hY3Rpb249PVwiYWRkXCIgfHwgZGF0YS5hY3Rpb249PVwiZWRpdFwiJyAoY2xpY2spPSdvblN1Ym1pdCgpJyBjb2xvcj0ncHJpbWFyeScgbWF0LXJhaXNlZC1idXR0b24+R3VhcmRhcjwvYnV0dG9uPlxyXG5cclxuICAgIDwvZm9ybT5cclxuPC9kaXY+XHJcblxyXG4iXX0=
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9kYXRhLXRhYmxlL3RhYmxlLW1vZGFsL3RhYmxlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvZGF0YS10YWJsZS90YWJsZS1tb2RhbC90YWJsZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBZSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQU9yQyxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLFlBQ1MsU0FBNEMsRUFDbkIsSUFBSSxFQUM1QixXQUF3QixFQUN4QixJQUFpQjtRQUhsQixjQUFTLEdBQVQsU0FBUyxDQUFtQztRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFBO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQWE7UUFSM0IsY0FBUyxHQUFjLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxFQUFFLENBQUM7SUFRWixDQUFDO0lBRUosU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7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QztTQUM1QztJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsRUFBTyxFQUFFLE1BQU0sRUFBRSxJQUFZO1FBQ3BDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlDLE1BQU07WUFFUjtnQkFDRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckQsTUFBTTtTQUNUO0lBQ0gsQ0FBQzs7Z0hBakZVLG1CQUFtQiw4Q0FPcEIsZUFBZTtvR0FQZCxtQkFBbUIsdURDWmhDLGtzR0E0RUE7MkZEaEVhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7OzBCQVd4QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdGFibGUtbW9kYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIG1vZGFsRm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgZGF0YUNvbWJvID0ge307XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxUYWJsZU1vZGFsQ29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgb25Ob0NsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgbGV0IGdyb3VwID0ge307XHJcbiAgICBsZXQgaHR0cFJlcXVlc3RzID0gW107XHJcblxyXG4gICAgdGhpcy5kYXRhLmNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuZGlzcmVnYXJkRm9yQWRkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09ICdjb21ibycpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YUNvbWJvLCB7IFtlbGVtZW50LklEXTogJycgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBpbml0aWFsVmFsdWUgPSAnJztcclxuICAgICAgaWYgKHRoaXMuZGF0YS5hY3Rpb24gPT0gJ2VkaXQnKSB7XHJcbiAgICAgICAgaW5pdGlhbFZhbHVlID0gZWxlbWVudC52YWx1ZTtcclxuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnZGF0ZScgJiYgZWxlbWVudC52YWx1ZSkge1xyXG4gICAgICAgICAgbGV0IHMgPSBlbGVtZW50LnZhbHVlLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICBpbml0aWFsVmFsdWUgPSBgJHtzWzJdfS0ke3NbMV19LSR7c1swXX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZ3JvdXBbZWxlbWVudC5JRF0gPSBlbGVtZW50LnJlcXVpcmVkID8gbmV3IEZvcm1Db250cm9sKGluaXRpYWxWYWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUNvbnRyb2woaW5pdGlhbFZhbHVlKTtcclxuXHJcbiAgICAgIGlmIChlbGVtZW50LnBhcmFtc0NvbWJvKSB7XHJcbiAgICAgICAgaHR0cFJlcXVlc3RzLnB1c2goXHJcbiAgICAgICAgICB0aGlzLmh0dHBcclxuICAgICAgICAgICAgLmdldERhdGEoZWxlbWVudC5wYXJhbXNDb21iby51cmwsIGVsZW1lbnQucGFyYW1zQ29tYm8udXJsUGFyYW1zKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICBtYXAoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc1snY29kZSddID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUNvbWJvW2VsZW1lbnQuSURdID0gcmVzWydib2R5J107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUNvbWJvW2VsZW1lbnQuSURdLmZvckVhY2goKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtlbGVtZW50LnBhcmFtc0NvbWJvLnNlbGVjdGlvbkZpZWxkXSA9PSBlbGVtZW50LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBncm91cFtlbGVtZW50LklEXS5zZXRWYWx1ZShkYXRhW2VsZW1lbnQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGRdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3JrSm9pbihodHRwUmVxdWVzdHMpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMubW9kYWxGb3JtID0gbmV3IEZvcm1Hcm91cChncm91cCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgaWYgKHRoaXMubW9kYWxGb3JtLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMubW9kYWxGb3JtLnZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKGlkOiBhbnksICRldmVudCwgdHlwZTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnY29tYm8nOlxyXG4gICAgICAgIHRoaXMubW9kYWxGb3JtLmdldChpZCkuc2V0VmFsdWUoJGV2ZW50LnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5tb2RhbEZvcm0uZ2V0KGlkKS5zZXRWYWx1ZSgkZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdj5cclxuICAgIDxkaXYgc3R5bGU9J2Rpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyc+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPHN0cm9uZz5cclxuICAgICAgICAgICAgICAgIDxoMyAqbmdJZj0nZGF0YS5hY3Rpb249PVwiZWRpdFwiJz4gRWRpdGFyIDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8aDMgKm5nSWY9J2RhdGEuYWN0aW9uPT1cImFkZFwiJz4gQWdyZWdhciA8L2gzPlxyXG4gICAgICAgICAgICA8L3N0cm9uZz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IG1hdC1kaWFsb2ctY2xvc2U+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCIgc3R5bGU9XCJmb250LXNpemU6IDE1MCU7IHBvc2l0aW9uOiByZWxhdGl2ZTtcIj48L2k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIm1vZGFsRm9ybVwiPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj0nbGV0IGlucHV0IG9mIGRhdGEuY29sdW1ucyc+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPSdkYXRhLmFjdGlvbj09XCJlZGl0XCI7IGVsc2UgQWdyZWdhcic+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIiFpbnB1dC5kaXNyZWdhcmRGb3JFZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0naW5wdXQudHlwZT09XCJjb21ib1wiOyBlbHNlIG90aGVySW5wdXRFZGl0Jz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCJpbnB1dC52YWx1ZVwiIChzZWxlY3Rpb25DaGFuZ2UpPSdvbkNoYW5nZShpbnB1dC5JRCwkZXZlbnQsIGlucHV0LnR5cGUpJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J3t7aW5wdXQubGFiZWx9fScgW3JlcXVpcmVkXT1cImlucHV0LnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9J2xldCBkYXRhIG9mIGRhdGFDb21ib1tpbnB1dC5JRF0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0nZGF0YVtpbnB1dC5wYXJhbXNDb21iby5zZWxlY3Rpb25GaWVsZF0nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YVtpbnB1dC5wYXJhbXNDb21iby52aXNpYmxlRmllbGRdfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvdGhlcklucHV0RWRpdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFt0eXBlXT0naW5wdXQudHlwZScgW25hbWVdPSdpbnB1dC5JRCcgW3ZhbHVlXT0naW5wdXQudmFsdWUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPSdvbkNoYW5nZShpbnB1dC5JRCwkZXZlbnQsIGlucHV0LnR5cGUpJyBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPSdpbnB1dC5sYWJlbCcgW3JlcXVpcmVkXT1cImlucHV0LnJlcXVpcmVkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkNhbXBvIE9ibGlnYXRvcmlvPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNBZ3JlZ2FyPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIhaW5wdXQuZGlzcmVnYXJkRm9yQWRkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0naW5wdXQudHlwZT09XCJjb21ib1wiOyBlbHNlIG90aGVySW5wdXQnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9J29uQ2hhbmdlKGlucHV0LklELCRldmVudCwgaW5wdXQudHlwZSknIHBsYWNlaG9sZGVyPSd7e2lucHV0LmxhYmVsfX0nIFtyZXF1aXJlZF09XCJpbnB1dC5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSdsZXQgZGF0YSBvZiBkYXRhQ29tYm9baW5wdXQuSURdJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09J2RhdGFbaW5wdXQucGFyYW1zQ29tYm8uc2VsZWN0aW9uRmllbGRdJz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGFbaW5wdXQucGFyYW1zQ29tYm8udmlzaWJsZUZpZWxkXX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI290aGVySW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbdHlwZV09J2lucHV0LnR5cGUnIFtuYW1lXT0naW5wdXQuSUQnIChpbnB1dCk9J29uQ2hhbmdlKGlucHV0LklELCAkZXZlbnQsIGlucHV0LnR5cGUpJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT0naW5wdXQubGFiZWwnIFtyZXF1aXJlZF09XCJpbnB1dC5yZXF1aXJlZFwiICAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+Q2FtcG8gT2JsaWdhdG9yaW88L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPSdkYXRhLmFjdGlvbj09XCJhZGRcIiB8fCBkYXRhLmFjdGlvbj09XCJlZGl0XCInXHJcbiAgICAgICAgICAgIChjbGljayk9J29uU3VibWl0KCknXHJcbiAgICAgICAgICAgIGNvbG9yPSdwcmltYXJ5J1xyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW1vZGFsRm9ybS52YWxpZFwiPkd1YXJkYXI8L2J1dHRvbj5cclxuXHJcbiAgICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG5cclxuIl19
|
|
@@ -51,9 +51,11 @@ import { MatTableModule } from '@angular/material/table';
|
|
|
51
51
|
import * as i1$3 from '@ng-bootstrap/ng-bootstrap';
|
|
52
52
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
|
53
53
|
import * as i10 from '@angular/forms';
|
|
54
|
-
import {
|
|
54
|
+
import { FormGroup, FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
55
55
|
import * as i1$1 from '@angular/common/http';
|
|
56
56
|
import { HttpParams, HttpClientModule } from '@angular/common/http';
|
|
57
|
+
import { forkJoin } from 'rxjs';
|
|
58
|
+
import { map } from 'rxjs/operators';
|
|
57
59
|
import Swal from 'sweetalert2';
|
|
58
60
|
import * as i5 from 'mat-select-filter';
|
|
59
61
|
import { MatSelectFilterModule } from 'mat-select-filter';
|
|
@@ -444,83 +446,71 @@ class TableModalComponent {
|
|
|
444
446
|
this.data = data;
|
|
445
447
|
this.formBuilder = formBuilder;
|
|
446
448
|
this.http = http;
|
|
447
|
-
this.modalForm = {};
|
|
449
|
+
this.modalForm = new FormGroup({});
|
|
448
450
|
this.dataCombo = {};
|
|
449
451
|
}
|
|
450
452
|
onNoClick() {
|
|
451
453
|
this.dialogRef.close();
|
|
452
454
|
}
|
|
453
455
|
ngOnInit() {
|
|
454
|
-
let
|
|
455
|
-
|
|
456
|
+
let group = {};
|
|
457
|
+
let httpRequests = [];
|
|
456
458
|
this.data.columns.forEach((element, index) => {
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
459
|
+
if (element.disregardForAdd) {
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
460
462
|
if (element.type == 'combo') {
|
|
461
|
-
Object.assign(this.dataCombo,
|
|
463
|
+
Object.assign(this.dataCombo, { [element.ID]: '' });
|
|
462
464
|
}
|
|
465
|
+
let initialValue = '';
|
|
463
466
|
if (this.data.action == 'edit') {
|
|
464
|
-
|
|
465
|
-
if (element.type === 'date') {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
element.value = `${s[2]}-${s[1]}-${s[0]}`;
|
|
469
|
-
}
|
|
467
|
+
initialValue = element.value;
|
|
468
|
+
if (element.type === 'date' && element.value) {
|
|
469
|
+
let s = element.value.split('/');
|
|
470
|
+
initialValue = `${s[2]}-${s[1]}-${s[0]}`;
|
|
470
471
|
}
|
|
471
472
|
}
|
|
473
|
+
group[element.ID] = element.required ? new FormControl(initialValue, Validators.required) : new FormControl(initialValue);
|
|
472
474
|
if (element.paramsCombo) {
|
|
473
|
-
|
|
474
|
-
//console.log(element.paramsCombo.urlParams);
|
|
475
|
-
this.http
|
|
475
|
+
httpRequests.push(this.http
|
|
476
476
|
.getData(element.paramsCombo.url, element.paramsCombo.urlParams)
|
|
477
|
-
.
|
|
477
|
+
.pipe(map((res) => {
|
|
478
478
|
if (res['code'] === 0) {
|
|
479
479
|
this.dataCombo[element.ID] = res['body'];
|
|
480
|
-
//console.log(this.dataCombo);
|
|
481
480
|
this.dataCombo[element.ID].forEach((data) => {
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
this.modalForm[element.ID] =
|
|
485
|
-
data[element.paramsCombo.selectionField];
|
|
486
|
-
this.data.columns[index].value =
|
|
487
|
-
data[element.paramsCombo.selectionField].toString();
|
|
481
|
+
if (data[element.paramsCombo.selectionField] == element.value) {
|
|
482
|
+
group[element.ID].setValue(data[element.paramsCombo.selectionField]);
|
|
488
483
|
}
|
|
489
484
|
});
|
|
490
485
|
}
|
|
491
|
-
|
|
492
|
-
console.log('error en la consulta');
|
|
493
|
-
}
|
|
494
|
-
}, (err) => {
|
|
495
|
-
console.log(err);
|
|
496
|
-
});
|
|
486
|
+
})));
|
|
497
487
|
}
|
|
498
488
|
});
|
|
499
|
-
|
|
489
|
+
forkJoin(httpRequests).subscribe(() => {
|
|
490
|
+
this.modalForm = new FormGroup(group);
|
|
491
|
+
});
|
|
500
492
|
}
|
|
501
493
|
onSubmit() {
|
|
502
|
-
|
|
494
|
+
if (this.modalForm.valid) {
|
|
495
|
+
this.dialogRef.close(this.modalForm.value);
|
|
496
|
+
}
|
|
503
497
|
}
|
|
504
498
|
onChange(id, $event, type) {
|
|
505
499
|
switch (type) {
|
|
506
|
-
// case 'date':
|
|
507
|
-
// this.modalForm[id] = $event.target.value;
|
|
508
|
-
// break;
|
|
509
500
|
case 'combo':
|
|
510
|
-
this.modalForm
|
|
501
|
+
this.modalForm.get(id).setValue($event.value);
|
|
511
502
|
break;
|
|
512
503
|
default:
|
|
513
|
-
this.modalForm
|
|
504
|
+
this.modalForm.get(id).setValue($event.target.value);
|
|
514
505
|
break;
|
|
515
506
|
}
|
|
516
|
-
//console.log('onChange', $event, id);
|
|
517
507
|
}
|
|
518
508
|
}
|
|
519
509
|
TableModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TableModalComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i10.FormBuilder }, { token: HttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
520
|
-
TableModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", 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>\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]
|
|
510
|
+
TableModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", 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.ID]'\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.ID]'\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"], components: [{ type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i3$1.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"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.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"] }, { type: i3.MatError, selector: "mat-error", inputs: ["id"] }] });
|
|
521
511
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TableModalComponent, decorators: [{
|
|
522
512
|
type: Component,
|
|
523
|
-
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>\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]
|
|
513
|
+
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.ID]'\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.ID]'\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"] }]
|
|
524
514
|
}], ctorParameters: function () {
|
|
525
515
|
return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
526
516
|
type: Inject,
|