keevo-components 1.6.6 → 1.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/esm2022/keevo-components.mjs +4 -4
- package/esm2022/lib/api/base-components/base-component-button.mjs +36 -36
- package/esm2022/lib/api/base-components/base-component-chart.mjs +92 -92
- package/esm2022/lib/api/base-components/base-component-crud-form.mjs +279 -279
- package/esm2022/lib/api/base-components/base-component-crud-list.mjs +68 -68
- package/esm2022/lib/api/base-components/base-component-crud.mjs +65 -65
- package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +31 -0
- package/esm2022/lib/api/base-components/base-component-dropdown.mjs +161 -161
- package/esm2022/lib/api/base-components/base-component-input.mjs +94 -94
- package/esm2022/lib/api/base-components/base-component-multi-select.mjs +130 -130
- package/esm2022/lib/api/base-components/base-component.mjs +49 -49
- package/esm2022/lib/api/components/chart/chart.config.mjs +2 -2
- package/esm2022/lib/api/components/chart/chart.model.mjs +2 -2
- package/esm2022/lib/api/components/chart/orchart.config.mjs +2 -2
- package/esm2022/lib/api/components/chart/orchart.item.mjs +2 -2
- package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +2 -2
- package/esm2022/lib/api/components/error/error.component.mjs +26 -26
- package/esm2022/lib/api/components/error/kverror.module.mjs +35 -35
- package/esm2022/lib/api/components/table/action-item.mjs +2 -2
- package/esm2022/lib/api/components/table/kv-menuitem.mjs +3 -3
- package/esm2022/lib/api/components/table/table.config.column.mjs +2 -2
- package/esm2022/lib/api/components/table/table.config.mjs +2 -2
- package/esm2022/lib/api/components/table/table.paginate.mjs +9 -9
- package/esm2022/lib/api/helpers/component-providers.mjs +16 -16
- package/esm2022/lib/api/helpers/keevo-validators.mjs +64 -64
- package/esm2022/lib/api/helpers/translate-primeng.mjs +23 -23
- package/esm2022/lib/api/models/menu/menu.model.mjs +2 -2
- package/esm2022/lib/api/models/menu/menucompleto.model.mjs +2 -2
- package/esm2022/lib/api/models/menu/sistemamenu.model.mjs +2 -2
- package/esm2022/lib/api/modules/primeng.module.mjs +251 -251
- package/esm2022/lib/api/services/base.api.service.mjs +74 -74
- package/esm2022/lib/api/services/breadcrumbs.service.mjs +57 -57
- package/esm2022/lib/api/services/component.service.mjs +27 -27
- package/esm2022/lib/api/services/form.service.mjs +84 -84
- package/esm2022/lib/api/services/imagens.service.mjs +25 -25
- package/esm2022/lib/api/services/notification.service.mjs +67 -67
- package/esm2022/lib/api/services/object.service.mjs +26 -26
- package/esm2022/lib/avatar/avatar.component.mjs +40 -40
- package/esm2022/lib/avatar/kv-avatar.module.mjs +20 -20
- package/esm2022/lib/buttons/button-personalize/button-personalize.component.mjs +17 -17
- package/esm2022/lib/buttons/button-popup/button-popup.component.mjs +31 -31
- package/esm2022/lib/buttons/button-secondary/button-secondary.component.mjs +17 -17
- package/esm2022/lib/buttons/button-success/button-success.component.mjs +17 -17
- package/esm2022/lib/buttons/kvbutton.module.mjs +39 -39
- package/esm2022/lib/chart/chart.component.mjs +145 -145
- package/esm2022/lib/chart/kvchart.module.mjs +32 -32
- package/esm2022/lib/directives/template.directive.mjs +24 -24
- package/esm2022/lib/inputs/check/check.component.mjs +26 -26
- package/esm2022/lib/inputs/dropdown/dropdown.component.mjs +37 -37
- package/esm2022/lib/inputs/editor/editor.component.mjs +88 -88
- package/esm2022/lib/inputs/input-calendar/input-calendar.component.mjs +89 -89
- package/esm2022/lib/inputs/input-mask/input-mask.component.mjs +23 -23
- package/esm2022/lib/inputs/input-number/input-number.component.mjs +59 -59
- package/esm2022/lib/inputs/input-password/input-password.component.mjs +33 -33
- package/esm2022/lib/inputs/input-text/input-text.component.mjs +21 -21
- package/esm2022/lib/inputs/input-text-checkbox/input-text-checkbox.component.mjs +41 -41
- package/esm2022/lib/inputs/input-textarea/input-textarea.component.mjs +43 -43
- package/esm2022/lib/inputs/input-time/input-time.component.mjs +24 -24
- package/esm2022/lib/inputs/kvinputs.module.mjs +108 -108
- package/esm2022/lib/inputs/multi-select/multi-select.component.mjs +41 -41
- package/esm2022/lib/inputs/radio-group/radio-group.component.mjs +53 -53
- package/esm2022/lib/inputs/switch/switch.component.mjs +32 -32
- package/esm2022/lib/keevo-components.module.mjs +112 -112
- package/esm2022/lib/label/label.component.mjs +14 -14
- package/esm2022/lib/label/label.module.mjs +23 -23
- package/esm2022/lib/loader/kvloader.module.mjs +28 -28
- package/esm2022/lib/loader/loader.component.mjs +17 -17
- package/esm2022/lib/loader/loader.service.mjs +29 -29
- package/esm2022/lib/login/kvlogin.module.mjs +47 -47
- package/esm2022/lib/login/login.component.mjs +52 -52
- package/esm2022/lib/menu/kvmenu.module.mjs +43 -43
- package/esm2022/lib/menu/menu.component.mjs +215 -215
- package/esm2022/lib/orgchart/orgchart.component.mjs +100 -100
- package/esm2022/lib/orgchart/orgchart.module.mjs +24 -24
- package/esm2022/lib/page-form/kv-page-form.module.mjs +38 -38
- package/esm2022/lib/page-form/page-form.component.mjs +147 -147
- package/esm2022/lib/picklist/kvpicklist.module.mjs +32 -32
- package/esm2022/lib/picklist/picklist.component.mjs +48 -48
- package/esm2022/lib/pipes/codigofile.pipe.mjs +19 -19
- package/esm2022/lib/pipes/cpfcnpj.pipe.mjs +25 -25
- package/esm2022/lib/pipes/pipes.module.mjs +34 -34
- package/esm2022/lib/pipes/telefone.pipe.mjs +45 -45
- package/esm2022/lib/table/kvtable.module.mjs +32 -32
- package/esm2022/lib/table/table.component.mjs +499 -499
- package/esm2022/lib/tree-table/kv-treetable.component.mjs +371 -371
- package/esm2022/lib/tree-table/kv-treetable.module.mjs +32 -32
- package/esm2022/lib/tree-view/kvtree-view.module.mjs +28 -28
- package/esm2022/lib/tree-view/tree-view.component.mjs +30 -30
- package/esm2022/lib/workspace/kvworkspace.module.mjs +47 -47
- package/esm2022/lib/workspace/workspace.component.mjs +77 -77
- package/esm2022/public-api.mjs +144 -144
- package/fesm2022/keevo-components.mjs +4433 -4602
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/api/base-components/base-component-button.d.ts +14 -14
- package/lib/api/base-components/base-component-chart.d.ts +40 -40
- package/lib/api/base-components/base-component-crud-form.d.ts +138 -138
- package/lib/api/base-components/base-component-crud-list.d.ts +63 -63
- package/lib/api/base-components/base-component-crud.d.ts +36 -36
- package/lib/api/base-components/base-component-dropdown-external.d.ts +15 -0
- package/lib/api/base-components/base-component-dropdown.d.ts +42 -42
- package/lib/api/base-components/base-component-input.d.ts +31 -31
- package/lib/api/base-components/base-component-multi-select.d.ts +35 -35
- package/lib/api/base-components/base-component.d.ts +21 -21
- package/lib/api/components/chart/chart.config.d.ts +11 -11
- package/lib/api/components/chart/chart.model.d.ts +9 -9
- package/lib/api/components/chart/orchart.config.d.ts +35 -35
- package/lib/api/components/chart/orchart.item.d.ts +26 -26
- package/lib/api/components/dropdown/filtro.combo.d.ts +4 -4
- package/lib/api/components/error/error.component.d.ts +12 -12
- package/lib/api/components/error/kverror.module.d.ts +10 -10
- package/lib/api/components/table/action-item.d.ts +5 -5
- package/lib/api/components/table/kv-menuitem.d.ts +9 -9
- package/lib/api/components/table/table.config.column.d.ts +21 -21
- package/lib/api/components/table/table.config.d.ts +17 -17
- package/lib/api/components/table/table.paginate.d.ts +6 -6
- package/lib/api/helpers/component-providers.d.ts +2 -2
- package/lib/api/helpers/keevo-validators.d.ts +10 -10
- package/lib/api/helpers/translate-primeng.d.ts +4 -4
- package/lib/api/models/menu/menu.model.d.ts +10 -10
- package/lib/api/models/menu/menucompleto.model.d.ts +6 -6
- package/lib/api/models/menu/sistemamenu.model.d.ts +8 -8
- package/lib/api/modules/primeng.module.d.ts +61 -61
- package/lib/api/services/base.api.service.d.ts +25 -25
- package/lib/api/services/breadcrumbs.service.d.ts +16 -16
- package/lib/api/services/component.service.d.ts +11 -11
- package/lib/api/services/form.service.d.ts +27 -27
- package/lib/api/services/imagens.service.d.ts +9 -9
- package/lib/api/services/notification.service.d.ts +25 -25
- package/lib/api/services/object.service.d.ts +8 -8
- package/lib/avatar/avatar.component.d.ts +14 -14
- package/lib/avatar/kv-avatar.module.d.ts +7 -7
- package/lib/buttons/button-personalize/button-personalize.component.d.ts +7 -7
- package/lib/buttons/button-popup/button-popup.component.d.ts +13 -13
- package/lib/buttons/button-secondary/button-secondary.component.d.ts +7 -7
- package/lib/buttons/button-success/button-success.component.d.ts +7 -7
- package/lib/buttons/kvbutton.module.d.ts +11 -11
- package/lib/chart/chart.component.d.ts +56 -56
- package/lib/chart/kvchart.module.d.ts +10 -10
- package/lib/directives/template.directive.d.ts +11 -11
- package/lib/inputs/check/check.component.d.ts +11 -11
- package/lib/inputs/dropdown/dropdown.component.d.ts +14 -14
- package/lib/inputs/editor/editor.component.d.ts +36 -36
- package/lib/inputs/input-calendar/input-calendar.component.d.ts +27 -27
- package/lib/inputs/input-mask/input-mask.component.d.ts +10 -10
- package/lib/inputs/input-number/input-number.component.d.ts +19 -19
- package/lib/inputs/input-password/input-password.component.d.ts +13 -13
- package/lib/inputs/input-text/input-text.component.d.ts +9 -9
- package/lib/inputs/input-text-checkbox/input-text-checkbox.component.d.ts +16 -16
- package/lib/inputs/input-textarea/input-textarea.component.d.ts +16 -16
- package/lib/inputs/input-time/input-time.component.d.ts +10 -10
- package/lib/inputs/kvinputs.module.d.ts +25 -25
- package/lib/inputs/multi-select/multi-select.component.d.ts +14 -14
- package/lib/inputs/radio-group/radio-group.component.d.ts +18 -18
- package/lib/inputs/switch/switch.component.d.ts +13 -13
- package/lib/keevo-components.module.d.ts +20 -20
- package/lib/label/label.component.d.ts +7 -7
- package/lib/label/label.module.d.ts +8 -8
- package/lib/loader/kvloader.module.d.ts +9 -9
- package/lib/loader/loader.component.d.ts +8 -8
- package/lib/loader/loader.service.d.ts +10 -10
- package/lib/login/kvlogin.module.d.ts +13 -13
- package/lib/login/login.component.d.ts +30 -30
- package/lib/menu/kvmenu.module.d.ts +12 -12
- package/lib/menu/menu.component.d.ts +73 -73
- package/lib/orgchart/orgchart.component.d.ts +27 -27
- package/lib/orgchart/orgchart.module.d.ts +9 -9
- package/lib/page-form/kv-page-form.module.d.ts +11 -11
- package/lib/page-form/page-form.component.d.ts +70 -70
- package/lib/picklist/kvpicklist.module.d.ts +10 -10
- package/lib/picklist/picklist.component.d.ts +20 -20
- package/lib/pipes/codigofile.pipe.d.ts +7 -7
- package/lib/pipes/cpfcnpj.pipe.d.ts +7 -7
- package/lib/pipes/pipes.module.d.ts +10 -10
- package/lib/pipes/telefone.pipe.d.ts +7 -7
- package/lib/table/kvtable.module.d.ts +10 -10
- package/lib/table/table.component.d.ts +104 -104
- package/lib/tree-table/kv-treetable.component.d.ts +85 -85
- package/lib/tree-table/kv-treetable.module.d.ts +11 -11
- package/lib/tree-view/kvtree-view.module.d.ts +9 -9
- package/lib/tree-view/tree-view.component.d.ts +14 -14
- package/lib/workspace/kvworkspace.module.d.ts +13 -13
- package/lib/workspace/workspace.component.d.ts +28 -28
- package/package.json +1 -1
- package/public-api.d.ts +140 -140
- package/esm2022/lib/api/base-components/base-component-dropdown-new.mjs +0 -211
- package/lib/api/base-components/base-component-dropdown-new.d.ts +0 -14
|
@@ -1,279 +1,279 @@
|
|
|
1
|
-
import { Component } from "@angular/core";
|
|
2
|
-
import { FormGroup } from "@angular/forms";
|
|
3
|
-
import { combineLatest, filter, finalize } from "rxjs";
|
|
4
|
-
import { BaseComponentCrud } from "./base-component-crud";
|
|
5
|
-
import { FormService } from "../services/form.service";
|
|
6
|
-
import { loading } from "../../loader/loader.service";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "primeng/dynamicdialog";
|
|
9
|
-
import * as i2 from "../services/notification.service";
|
|
10
|
-
import * as i3 from "@angular/router";
|
|
11
|
-
export class BaseComponentCrudForm extends BaseComponentCrud {
|
|
12
|
-
constructor(dialogService, notificationService, activatedRoute, dynamicDialogRef, dynamicDialogConfig, router) {
|
|
13
|
-
super(dialogService, notificationService);
|
|
14
|
-
this.activatedRoute = activatedRoute;
|
|
15
|
-
this.dynamicDialogRef = dynamicDialogRef;
|
|
16
|
-
this.dynamicDialogConfig = dynamicDialogConfig;
|
|
17
|
-
this.router = router;
|
|
18
|
-
this.isAccordionExpanded = false;
|
|
19
|
-
this.isNewRegistry = false;
|
|
20
|
-
this.isSaveLoading = false;
|
|
21
|
-
this.isView = false;
|
|
22
|
-
this.formGroup = new FormGroup({});
|
|
23
|
-
this.actions = [];
|
|
24
|
-
this.popup = false;
|
|
25
|
-
this.registry = null;
|
|
26
|
-
this.onSetFormValues = false;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Método disparado para tratamento das notificações do backend
|
|
30
|
-
* @param err - Notificação
|
|
31
|
-
*/
|
|
32
|
-
backendError(err) {
|
|
33
|
-
if (err) {
|
|
34
|
-
if (err.status == 404) {
|
|
35
|
-
this.notificationService.toastError(err.error.item2[0].message);
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
else if (err.status == 400) {
|
|
39
|
-
// Erros de validação de domínio do backend
|
|
40
|
-
if (Array.isArray(err.error)) {
|
|
41
|
-
if (err.error?.length) {
|
|
42
|
-
if (err.error.length == 1 && err.error[0].key == '') {
|
|
43
|
-
this.notificationService.toastError(err.error[0].message);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
this.invalidForm(err.error);
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
else if (err.error?.title) {
|
|
51
|
-
// Erro de json no backend
|
|
52
|
-
this.notificationService.toastError(err.error.title);
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
else if (err.status == 415) {
|
|
57
|
-
if (err.error?.title) {
|
|
58
|
-
// Erro de json no backend
|
|
59
|
-
this.notificationService.toastError(err.error.title);
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// Qualquer outro tipo de erro que tenha mensagem
|
|
64
|
-
if (err.message) {
|
|
65
|
-
this.notificationService.toastError(err.message);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Método disparado ao clicar no botão de cancelamento
|
|
71
|
-
*/
|
|
72
|
-
cancel() {
|
|
73
|
-
this.notificationService.question({
|
|
74
|
-
type: 'question',
|
|
75
|
-
message: 'Deseja cancelar a operação?',
|
|
76
|
-
accept: () => {
|
|
77
|
-
this.navigateList();
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Verifica se houveram alterações nos componentes do formControl
|
|
83
|
-
* @param controls - Nomes do controles no formGroup
|
|
84
|
-
* @returns Observable
|
|
85
|
-
*/
|
|
86
|
-
detectFormControlChanges(controls) {
|
|
87
|
-
const controlList = [];
|
|
88
|
-
controls.forEach(controlName => controlList.push(this.formGroup.controls[controlName].valueChanges));
|
|
89
|
-
return combineLatest(controlList).pipe(filter(() => !this.onSetFormValues));
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Método responsável por desabilitar um componente
|
|
93
|
-
* @param controlName - Nome do controle no formGroup
|
|
94
|
-
*/
|
|
95
|
-
disableComponent(controlName) {
|
|
96
|
-
FormService.disableControl(this.formGroup, controlName);
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Método responsável por limpar e desabilitar um componente
|
|
100
|
-
* @param controlName - Nome do controle no formGroup
|
|
101
|
-
* @param value - Valor default
|
|
102
|
-
*/
|
|
103
|
-
disableAndClearComponent(controlName, value) {
|
|
104
|
-
FormService.disableAndClearControl(this.formGroup, controlName, value);
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Método responsável por habilitar um componente
|
|
108
|
-
* @param controlName - Nome do controle no formGroup
|
|
109
|
-
*/
|
|
110
|
-
enableComponent(controName) {
|
|
111
|
-
FormService.enableControl(this.formGroup, controName);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Método que retorna o valor de um componente
|
|
115
|
-
* @param controlName - Nome do controle no formGroup
|
|
116
|
-
* @returns - Valor
|
|
117
|
-
*/
|
|
118
|
-
getFormValue(controlName) {
|
|
119
|
-
return FormService.getFormValue(this.formGroup, controlName);
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Verifica se o componente possui erro
|
|
123
|
-
* @param controlName - Nome do controle no formGroup
|
|
124
|
-
*/
|
|
125
|
-
hasControlError(controlName, errorCode) {
|
|
126
|
-
return FormService.hasControlError(this.formGroup, controlName, errorCode);
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Seta inconsistências para o fomulário
|
|
130
|
-
* @param notification - Lista de notificações
|
|
131
|
-
*/
|
|
132
|
-
invalidForm(notification) {
|
|
133
|
-
FormService.invalidForm(this.formGroup, notification);
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Método responsável pelo carregamento da tela
|
|
137
|
-
* @param obs - Observable responsável pelo salvamento dos dados
|
|
138
|
-
*/
|
|
139
|
-
loadData(obs) {
|
|
140
|
-
obs
|
|
141
|
-
.pipe(loading())
|
|
142
|
-
.subscribe((data) => {
|
|
143
|
-
this.isNewRegistry = false;
|
|
144
|
-
this.registry = data;
|
|
145
|
-
this.setFormValues(this.registry);
|
|
146
|
-
this.loadGrids();
|
|
147
|
-
this.setTitlePopup();
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
async loadDataAsync(obs) {
|
|
151
|
-
await obs.pipe(loading()).toPromise();
|
|
152
|
-
const data = await obs.toPromise();
|
|
153
|
-
this.isNewRegistry = false;
|
|
154
|
-
this.registry = data;
|
|
155
|
-
this.setFormValues(this.registry);
|
|
156
|
-
this.loadGrids();
|
|
157
|
-
this.setTitlePopup();
|
|
158
|
-
}
|
|
159
|
-
loadGrids() { }
|
|
160
|
-
/**
|
|
161
|
-
* Método disparado para retornar a lista
|
|
162
|
-
*/
|
|
163
|
-
navigateList(id = null) {
|
|
164
|
-
if (this.popup) {
|
|
165
|
-
this.dynamicDialogRef.close(id);
|
|
166
|
-
}
|
|
167
|
-
else if (this.dadosTela?.rotaListar) {
|
|
168
|
-
this.router.navigate([this.dadosTela.rotaListar]);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
ngOnDestroy() {
|
|
172
|
-
if (this.dynamicDialogRef) {
|
|
173
|
-
this.dynamicDialogRef.close();
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
ngOnInit() {
|
|
177
|
-
this.configureForm();
|
|
178
|
-
this.popup = this.dynamicDialogConfig?.data?.popup || false;
|
|
179
|
-
this.activatedRoute.params.subscribe((params) => {
|
|
180
|
-
if (params['id']) {
|
|
181
|
-
this.loadForm(params['id']);
|
|
182
|
-
}
|
|
183
|
-
else if (this.dynamicDialogConfig?.data?.id) {
|
|
184
|
-
this.loadForm(this.dynamicDialogConfig.data.id);
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
this.isNewRegistry = true;
|
|
188
|
-
this.loadGrids();
|
|
189
|
-
this.setTitlePopup();
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Método disparado para salvar dados
|
|
195
|
-
* @param obs - Observable responsável pelo salvamento dos dados
|
|
196
|
-
*/
|
|
197
|
-
saveData(obs) {
|
|
198
|
-
obs
|
|
199
|
-
.pipe((src) => {
|
|
200
|
-
this.isSaveLoading = true;
|
|
201
|
-
return src.pipe(finalize(() => {
|
|
202
|
-
this.isSaveLoading = false;
|
|
203
|
-
}));
|
|
204
|
-
})
|
|
205
|
-
.subscribe({
|
|
206
|
-
next: (res) => {
|
|
207
|
-
this.notificationService.toastSuccess(res.item2[0].message);
|
|
208
|
-
this.navigateList(res.item1);
|
|
209
|
-
},
|
|
210
|
-
error: (e) => {
|
|
211
|
-
this.backendError(e);
|
|
212
|
-
},
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Método se atualiza o valor de um componente do formGroup
|
|
217
|
-
* @param controName - Nome do controle
|
|
218
|
-
* @param value - Valor para atualização
|
|
219
|
-
*/
|
|
220
|
-
setControlValue(controName, value) {
|
|
221
|
-
FormService.setControlValue(this.formGroup, controName, value);
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Atualiza valores dos componentes do formGroup
|
|
225
|
-
* @param values - Valores para atualização
|
|
226
|
-
*/
|
|
227
|
-
setFormValues(values) {
|
|
228
|
-
this.onSetFormValues = true;
|
|
229
|
-
this.formGroup.patchValue(values, { emitEvent: false });
|
|
230
|
-
this.onSetFormValues = false;
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Seta o título do popup
|
|
234
|
-
*/
|
|
235
|
-
setTitlePopup() {
|
|
236
|
-
if (this.popup) {
|
|
237
|
-
if (this.dynamicDialogConfig)
|
|
238
|
-
this.dynamicDialogConfig.header = this.dadosTela?.tituloForm;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Atualiza o validador de um componente do formGroup
|
|
243
|
-
* @param controName - Nome do controle
|
|
244
|
-
* @param validators - Regra de validação
|
|
245
|
-
*/
|
|
246
|
-
setValidators(controName, validators) {
|
|
247
|
-
FormService.setValidators(this.formGroup, controName, validators);
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Dispara os métodos de validações do formulário
|
|
251
|
-
* @returns - True/False
|
|
252
|
-
*/
|
|
253
|
-
validateForm() {
|
|
254
|
-
let valid = false;
|
|
255
|
-
if (this.formGroup && this.formGroup.valid) {
|
|
256
|
-
valid = true;
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
this.isAccordionExpanded = true;
|
|
260
|
-
this.invalidForm();
|
|
261
|
-
if (this.dadosTela?.mensagemValidacao) {
|
|
262
|
-
this.notificationService.dialog({
|
|
263
|
-
type: 'alert',
|
|
264
|
-
message: 'Verifique os campos obrigatórios.',
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
return valid;
|
|
269
|
-
}
|
|
270
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseComponentCrudForm, deps: [{ token: i1.DialogService }, { token: i2.NotificationService }, { token: i3.ActivatedRoute }, { token: i1.DynamicDialogRef }, { token: i1.DynamicDialogConfig }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
271
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BaseComponentCrudForm, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
|
|
272
|
-
}
|
|
273
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseComponentCrudForm, decorators: [{
|
|
274
|
-
type: Component,
|
|
275
|
-
args: [{
|
|
276
|
-
template: ''
|
|
277
|
-
}]
|
|
278
|
-
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.NotificationService }, { type: i3.ActivatedRoute }, { type: i1.DynamicDialogRef }, { type: i1.DynamicDialogConfig }, { type: i3.Router }]; } });
|
|
279
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21wb25lbnQtY3J1ZC1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2FwaS9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtY3J1ZC1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxTQUFTLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7QUFZdEQsTUFBTSxPQUFnQixxQkFBc0IsU0FBUSxpQkFBaUI7SUFnQm5FLFlBQ0UsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQzlCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxtQkFBd0MsRUFDeEMsTUFBYztRQUN4QixLQUFLLENBRUQsYUFBYSxFQUNiLG1CQUFtQixDQUNwQixDQUFDO1FBUk0sbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBcEJoQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVmLGNBQVMsR0FBYyxJQUFJLFNBQVMsQ0FBQyxF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LENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVuQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7b0JBQzlCLElBQUksRUFBRSxPQUFPO29CQUNiLE9BQU8sRUFBRSxtQ0FBbUM7aUJBQzdDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7K0dBM1RtQixxQkFBcUI7bUdBQXJCLHFCQUFxQiwyRUFGL0IsRUFBRTs7NEZBRVEscUJBQXFCO2tCQUgxQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxFQUFFO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tIFwicHJpbWVuZy9keW5hbWljZGlhbG9nXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBmaW5hbGl6ZSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQgeyBBY3Rpb25JdGVtIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvdGFibGUvYWN0aW9uLWl0ZW1cIjtcclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudENydWQgfSBmcm9tIFwiLi9iYXNlLWNvbXBvbmVudC1jcnVkXCI7XHJcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGxvYWRpbmcgfSBmcm9tIFwiLi4vLi4vbG9hZGVyL2xvYWRlci5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERhZG9zVGVsYSB7XHJcbiAgc3ViVGl0dWxvRm9ybTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHRpdHVsb0Zvcm06IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICByb3RhTGlzdGFyOiBzdHJpbmc7XHJcbiAgbWVuc2FnZW1WYWxpZGFjYW86IGJvb2xlYW5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGU6ICcnXHJcbn0pXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50Q3J1ZEZvcm0gZXh0ZW5kcyBCYXNlQ29tcG9uZW50Q3J1ZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHJvdGVjdGVkIGlzQWNjb3JkaW9uRXhwYW5kZWQgPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgaXNOZXdSZWdpc3RyeSA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBpc1NhdmVMb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIGlzVmlldyA9IGZhbHNlO1xyXG5cclxuICBwcm90ZWN0ZWQgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBwcm90ZWN0ZWQgYWN0aW9uczogQWN0aW9uSXRlbVtdID0gW107XHJcblxyXG4gIHByb3RlY3RlZCBkYWRvc1RlbGE6IERhZG9zVGVsYSB8IHVuZGVmaW5lZDtcclxuICBwcm90ZWN0ZWQgcG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgcmVnaXN0cnk6IGFueSA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgb25TZXRGb3JtVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJvdGVjdGVkIGR5bmFtaWNEaWFsb2dSZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwcm90ZWN0ZWQgZHluYW1pY0RpYWxvZ0NvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcikge1xyXG4gICAgc3VwZXJcclxuICAgICAgKFxyXG4gICAgICAgIGRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgbm90aWZpY2F0aW9uU2VydmljZVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSBjb25maWd1cmHDp8OjbyBkbyBmb3JtXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgY29uZmlndXJlRm9ybSgpOiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBwYXJhIG8gY2FycmVnYW1lbnRvIGRvIGZvcm1cclxuICAgKiBAcGFyYW0gaWRcclxuICAgKi9cclxuICBhYnN0cmFjdCBsb2FkRm9ybShpZDogYW55KTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSBzYWx2YW1lbnRvIGRvcyBkYWRvc1xyXG4gICAqL1xyXG4gIGFic3RyYWN0IHNhdmUoKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSB0cmF0YW1lbnRvIGRhcyBub3RpZmljYcOnw7VlcyBkbyBiYWNrZW5kXHJcbiAgICogQHBhcmFtIGVyciAtIE5vdGlmaWNhw6fDo29cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYmFja2VuZEVycm9yKGVycjogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoZXJyKSB7XHJcbiAgICAgIGlmIChlcnIuc3RhdHVzID09IDQwNCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdEVycm9yKGVyci5lcnJvci5pdGVtMlswXS5tZXNzYWdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PSA0MDApIHtcclxuICAgICAgICAvLyBFcnJvcyBkZSB2YWxpZGHDp8OjbyBkZSBkb23DrW5pbyBkbyBiYWNrZW5kXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyLmVycm9yKSkge1xyXG4gICAgICAgICAgaWYgKGVyci5lcnJvcj8ubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLmVycm9yLmxlbmd0aCA9PSAxICYmIGVyci5lcnJvclswXS5rZXkgPT0gJycpIHtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIuZXJyb3JbMF0ubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRGb3JtKGVyci5lcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLmVycm9yPy50aXRsZSkge1xyXG4gICAgICAgICAgLy8gRXJybyBkZSBqc29uIG5vIGJhY2tlbmRcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdEVycm9yKGVyci5lcnJvci50aXRsZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGVyci5zdGF0dXMgPT0gNDE1KSB7XHJcbiAgICAgICAgaWYgKGVyci5lcnJvcj8udGl0bGUpIHtcclxuICAgICAgICAgIC8vIEVycm8gZGUganNvbiBubyBiYWNrZW5kXHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIuZXJyb3IudGl0bGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUXVhbHF1ZXIgb3V0cm8gdGlwbyBkZSBlcnJvIHF1ZSB0ZW5oYSBtZW5zYWdlbVxyXG4gICAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIGFvIGNsaWNhciBubyBib3TDo28gZGUgY2FuY2VsYW1lbnRvXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGNhbmNlbCgpIHtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5xdWVzdGlvbih7XHJcbiAgICAgIHR5cGU6ICdxdWVzdGlvbicsXHJcbiAgICAgIG1lc3NhZ2U6ICdEZXNlamEgY2FuY2VsYXIgYSBvcGVyYcOnw6NvPycsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVMaXN0KCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZlcmlmaWNhIHNlIGhvdXZlcmFtIGFsdGVyYcOnw7VlcyBub3MgY29tcG9uZW50ZXMgZG8gZm9ybUNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbHMgLSBOb21lcyBkbyBjb250cm9sZXMgbm8gZm9ybUdyb3VwXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBkZXRlY3RGb3JtQ29udHJvbENoYW5nZXMoY29udHJvbHM6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgY29udHJvbExpc3Q6IE9ic2VydmFibGU8YW55PltdID0gW107XHJcbiAgICBjb250cm9scy5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IGNvbnRyb2xMaXN0LnB1c2godGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlQ2hhbmdlcykpO1xyXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoY29udHJvbExpc3QpLnBpcGUoZmlsdGVyKCgpID0+ICF0aGlzLm9uU2V0Rm9ybVZhbHVlcykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyByZXNwb25zw6F2ZWwgcG9yIGRlc2FiaWxpdGFyIHVtIGNvbXBvbmVudGVcclxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgLSBOb21lIGRvIGNvbnRyb2xlIG5vIGZvcm1Hcm91cFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBkaXNhYmxlQ29tcG9uZW50KGNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcclxuICAgIEZvcm1TZXJ2aWNlLmRpc2FibGVDb250cm9sKHRoaXMuZm9ybUdyb3VwLCBjb250cm9sTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwb3IgbGltcGFyIGUgZGVzYWJpbGl0YXIgdW0gY29tcG9uZW50ZVxyXG4gICAqIEBwYXJhbSBjb250cm9sTmFtZSAtIE5vbWUgZG8gY29udHJvbGUgbm8gZm9ybUdyb3VwXHJcbiAgICogQHBhcmFtIHZhbHVlIC0gVmFsb3IgZGVmYXVsdFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBkaXNhYmxlQW5kQ2xlYXJDb21wb25lbnQoY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU/OiBhbnkpIHtcclxuICAgIEZvcm1TZXJ2aWNlLmRpc2FibGVBbmRDbGVhckNvbnRyb2wodGhpcy5mb3JtR3JvdXAsIGNvbnRyb2xOYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwb3IgaGFiaWxpdGFyIHVtIGNvbXBvbmVudGVcclxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgLSBOb21lIGRvIGNvbnRyb2xlIG5vIGZvcm1Hcm91cFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBlbmFibGVDb21wb25lbnQoY29udHJvTmFtZTogc3RyaW5nKSB7XHJcbiAgICBGb3JtU2VydmljZS5lbmFibGVDb250cm9sKHRoaXMuZm9ybUdyb3VwLCBjb250cm9OYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gcXVlIHJldG9ybmEgbyB2YWxvciBkZSB1bSBjb21wb25lbnRlXHJcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIC0gTm9tZSBkbyBjb250cm9sZSBubyBmb3JtR3JvdXBcclxuICAgKiBAcmV0dXJucyAtIFZhbG9yXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGdldEZvcm1WYWx1ZTxUPihjb250cm9sTmFtZTogc3RyaW5nKTogVCB7XHJcbiAgICByZXR1cm4gRm9ybVNlcnZpY2UuZ2V0Rm9ybVZhbHVlPFQ+KHRoaXMuZm9ybUdyb3VwLCBjb250cm9sTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWZXJpZmljYSBzZSBvIGNvbXBvbmVudGUgcG9zc3VpIGVycm9cclxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgLSBOb21lIGRvIGNvbnRyb2xlIG5vIGZvcm1Hcm91cFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBoYXNDb250cm9sRXJyb3IoY29udHJvbE5hbWU6IHN0cmluZywgZXJyb3JDb2RlPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gRm9ybVNlcnZpY2UuaGFzQ29udHJvbEVycm9yKHRoaXMuZm9ybUdyb3VwLCBjb250cm9sTmFtZSwgZXJyb3JDb2RlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldGEgaW5jb25zaXN0w6puY2lhcyBwYXJhIG8gZm9tdWzDoXJpb1xyXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb24gLSBMaXN0YSBkZSBub3RpZmljYcOnw7Vlc1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBpbnZhbGlkRm9ybShub3RpZmljYXRpb24/OiBhbnkpIHtcclxuICAgIEZvcm1TZXJ2aWNlLmludmFsaWRGb3JtKHRoaXMuZm9ybUdyb3VwLCBub3RpZmljYXRpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyByZXNwb25zw6F2ZWwgcGVsbyBjYXJyZWdhbWVudG8gZGEgdGVsYVxyXG4gICAqIEBwYXJhbSBvYnMgLSBPYnNlcnZhYmxlIHJlc3BvbnPDoXZlbCBwZWxvIHNhbHZhbWVudG8gZG9zIGRhZG9zXHJcbiAgICovXHJcbiAgcHVibGljIGxvYWREYXRhPFQ+KG9iczogT2JzZXJ2YWJsZTxhbnk+KSB7XHJcbiAgICBvYnNcclxuICAgICAgLnBpcGUobG9hZGluZygpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmlzTmV3UmVnaXN0cnkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gZGF0YSBhcyBUO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyh0aGlzLnJlZ2lzdHJ5KTtcclxuICAgICAgICB0aGlzLmxvYWRHcmlkcygpO1xyXG4gICAgICAgIHRoaXMuc2V0VGl0bGVQb3B1cCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWREYXRhQXN5bmM8VD4ob2JzOiBPYnNlcnZhYmxlPGFueT4pIHtcclxuICAgIGF3YWl0IG9icy5waXBlKGxvYWRpbmcoKSkudG9Qcm9taXNlKCk7XHJcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBhd2FpdCBvYnMudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgdGhpcy5pc05ld1JlZ2lzdHJ5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlZ2lzdHJ5ID0gZGF0YSBhcyBUO1xyXG4gICAgdGhpcy5zZXRGb3JtVmFsdWVzKHRoaXMucmVnaXN0cnkpO1xyXG4gICAgdGhpcy5sb2FkR3JpZHMoKTtcclxuICAgIHRoaXMuc2V0VGl0bGVQb3B1cCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRHcmlkcygpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBwYXJhIHJldG9ybmFyIGEgbGlzdGFcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgbmF2aWdhdGVMaXN0KGlkOiBhbnkgPSBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5wb3B1cCkge1xyXG4gICAgICB0aGlzLmR5bmFtaWNEaWFsb2dSZWYuY2xvc2UoaWQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5kYWRvc1RlbGE/LnJvdGFMaXN0YXIpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZGFkb3NUZWxhLnJvdGFMaXN0YXJdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmR5bmFtaWNEaWFsb2dSZWYpIHtcclxuICAgICAgdGhpcy5keW5hbWljRGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUZvcm0oKTtcclxuXHJcbiAgICB0aGlzLnBvcHVwID0gdGhpcy5keW5hbWljRGlhbG9nQ29uZmlnPy5kYXRhPy5wb3B1cCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChwYXJhbXNbJ2lkJ10pIHtcclxuICAgICAgICB0aGlzLmxvYWRGb3JtKHBhcmFtc1snaWQnXSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5keW5hbWljRGlhbG9nQ29uZmlnPy5kYXRhPy5pZCkge1xyXG4gICAgICAgIHRoaXMubG9hZEZvcm0odGhpcy5keW5hbWljRGlhbG9nQ29uZmlnLmRhdGEuaWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXNOZXdSZWdpc3RyeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JpZHMoKTtcclxuICAgICAgICB0aGlzLnNldFRpdGxlUG9wdXAoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBwYXJhIHNhbHZhciBkYWRvc1xyXG4gICAqIEBwYXJhbSBvYnMgLSBPYnNlcnZhYmxlIHJlc3BvbnPDoXZlbCBwZWxvIHNhbHZhbWVudG8gZG9zIGRhZG9zXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHNhdmVEYXRhKG9iczogT2JzZXJ2YWJsZTxhbnk+KSB7XHJcbiAgICBvYnNcclxuICAgICAgLnBpcGUoKHNyYzogT2JzZXJ2YWJsZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmVMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gc3JjLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1NhdmVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFN1Y2Nlc3MocmVzLml0ZW0yWzBdLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUxpc3QocmVzLml0ZW0xKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5iYWNrZW5kRXJyb3IoZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHNlIGF0dWFsaXphIG8gdmFsb3IgZGUgdW0gY29tcG9uZW50ZSBkbyBmb3JtR3JvdXBcclxuICAgKiBAcGFyYW0gY29udHJvTmFtZSAtIE5vbWUgZG8gY29udHJvbGVcclxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWxvciBwYXJhIGF0dWFsaXphw6fDo29cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2V0Q29udHJvbFZhbHVlKGNvbnRyb05hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgRm9ybVNlcnZpY2Uuc2V0Q29udHJvbFZhbHVlKHRoaXMuZm9ybUdyb3VwLCBjb250cm9OYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBdHVhbGl6YSB2YWxvcmVzIGRvcyBjb21wb25lbnRlcyBkbyBmb3JtR3JvdXBcclxuICAgKiBAcGFyYW0gdmFsdWVzIC0gVmFsb3JlcyBwYXJhIGF0dWFsaXphw6fDo29cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyh2YWx1ZXM6IGFueSkge1xyXG4gICAgdGhpcy5vblNldEZvcm1WYWx1ZXMgPSB0cnVlO1xyXG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZXMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMub25TZXRGb3JtVmFsdWVzID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRhIG8gdMOtdHVsbyBkbyBwb3B1cFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0VGl0bGVQb3B1cCgpIHtcclxuICAgIGlmICh0aGlzLnBvcHVwKSB7XHJcbiAgICAgIGlmICh0aGlzLmR5bmFtaWNEaWFsb2dDb25maWcpXHJcbiAgICAgICAgdGhpcy5keW5hbWljRGlhbG9nQ29uZmlnLmhlYWRlciA9IHRoaXMuZGFkb3NUZWxhPy50aXR1bG9Gb3JtO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXR1YWxpemEgbyB2YWxpZGFkb3IgZGUgdW0gY29tcG9uZW50ZSBkbyBmb3JtR3JvdXBcclxuICAgKiBAcGFyYW0gY29udHJvTmFtZSAtIE5vbWUgZG8gY29udHJvbGVcclxuICAgKiBAcGFyYW0gdmFsaWRhdG9ycyAtIFJlZ3JhIGRlIHZhbGlkYcOnw6NvXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHNldFZhbGlkYXRvcnMoY29udHJvTmFtZTogc3RyaW5nLCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW10gfCBudWxsKSB7XHJcbiAgICBGb3JtU2VydmljZS5zZXRWYWxpZGF0b3JzKHRoaXMuZm9ybUdyb3VwLCBjb250cm9OYW1lLCB2YWxpZGF0b3JzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BhcmEgb3MgbcOpdG9kb3MgZGUgdmFsaWRhw6fDtWVzIGRvIGZvcm11bMOhcmlvXHJcbiAgICogQHJldHVybnMgLSBUcnVlL0ZhbHNlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRlRm9ybSgpOiBib29sZWFuIHtcclxuICAgIGxldCB2YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCAmJiB0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICB2YWxpZCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQWNjb3JkaW9uRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmludmFsaWRGb3JtKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kYWRvc1RlbGE/Lm1lbnNhZ2VtVmFsaWRhY2FvKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmRpYWxvZyh7XHJcbiAgICAgICAgICB0eXBlOiAnYWxlcnQnLFxyXG4gICAgICAgICAgbWVzc2FnZTogJ1ZlcmlmaXF1ZSBvcyBjYW1wb3Mgb2JyaWdhdMOzcmlvcy4nLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
1
|
+
import { Component } from "@angular/core";
|
|
2
|
+
import { FormGroup } from "@angular/forms";
|
|
3
|
+
import { combineLatest, filter, finalize } from "rxjs";
|
|
4
|
+
import { BaseComponentCrud } from "./base-component-crud";
|
|
5
|
+
import { FormService } from "../services/form.service";
|
|
6
|
+
import { loading } from "../../loader/loader.service";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "primeng/dynamicdialog";
|
|
9
|
+
import * as i2 from "../services/notification.service";
|
|
10
|
+
import * as i3 from "@angular/router";
|
|
11
|
+
export class BaseComponentCrudForm extends BaseComponentCrud {
|
|
12
|
+
constructor(dialogService, notificationService, activatedRoute, dynamicDialogRef, dynamicDialogConfig, router) {
|
|
13
|
+
super(dialogService, notificationService);
|
|
14
|
+
this.activatedRoute = activatedRoute;
|
|
15
|
+
this.dynamicDialogRef = dynamicDialogRef;
|
|
16
|
+
this.dynamicDialogConfig = dynamicDialogConfig;
|
|
17
|
+
this.router = router;
|
|
18
|
+
this.isAccordionExpanded = false;
|
|
19
|
+
this.isNewRegistry = false;
|
|
20
|
+
this.isSaveLoading = false;
|
|
21
|
+
this.isView = false;
|
|
22
|
+
this.formGroup = new FormGroup({});
|
|
23
|
+
this.actions = [];
|
|
24
|
+
this.popup = false;
|
|
25
|
+
this.registry = null;
|
|
26
|
+
this.onSetFormValues = false;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Método disparado para tratamento das notificações do backend
|
|
30
|
+
* @param err - Notificação
|
|
31
|
+
*/
|
|
32
|
+
backendError(err) {
|
|
33
|
+
if (err) {
|
|
34
|
+
if (err.status == 404) {
|
|
35
|
+
this.notificationService.toastError(err.error.item2[0].message);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
else if (err.status == 400) {
|
|
39
|
+
// Erros de validação de domínio do backend
|
|
40
|
+
if (Array.isArray(err.error)) {
|
|
41
|
+
if (err.error?.length) {
|
|
42
|
+
if (err.error.length == 1 && err.error[0].key == '') {
|
|
43
|
+
this.notificationService.toastError(err.error[0].message);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.invalidForm(err.error);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else if (err.error?.title) {
|
|
51
|
+
// Erro de json no backend
|
|
52
|
+
this.notificationService.toastError(err.error.title);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (err.status == 415) {
|
|
57
|
+
if (err.error?.title) {
|
|
58
|
+
// Erro de json no backend
|
|
59
|
+
this.notificationService.toastError(err.error.title);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Qualquer outro tipo de erro que tenha mensagem
|
|
64
|
+
if (err.message) {
|
|
65
|
+
this.notificationService.toastError(err.message);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Método disparado ao clicar no botão de cancelamento
|
|
71
|
+
*/
|
|
72
|
+
cancel() {
|
|
73
|
+
this.notificationService.question({
|
|
74
|
+
type: 'question',
|
|
75
|
+
message: 'Deseja cancelar a operação?',
|
|
76
|
+
accept: () => {
|
|
77
|
+
this.navigateList();
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Verifica se houveram alterações nos componentes do formControl
|
|
83
|
+
* @param controls - Nomes do controles no formGroup
|
|
84
|
+
* @returns Observable
|
|
85
|
+
*/
|
|
86
|
+
detectFormControlChanges(controls) {
|
|
87
|
+
const controlList = [];
|
|
88
|
+
controls.forEach(controlName => controlList.push(this.formGroup.controls[controlName].valueChanges));
|
|
89
|
+
return combineLatest(controlList).pipe(filter(() => !this.onSetFormValues));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Método responsável por desabilitar um componente
|
|
93
|
+
* @param controlName - Nome do controle no formGroup
|
|
94
|
+
*/
|
|
95
|
+
disableComponent(controlName) {
|
|
96
|
+
FormService.disableControl(this.formGroup, controlName);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Método responsável por limpar e desabilitar um componente
|
|
100
|
+
* @param controlName - Nome do controle no formGroup
|
|
101
|
+
* @param value - Valor default
|
|
102
|
+
*/
|
|
103
|
+
disableAndClearComponent(controlName, value) {
|
|
104
|
+
FormService.disableAndClearControl(this.formGroup, controlName, value);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Método responsável por habilitar um componente
|
|
108
|
+
* @param controlName - Nome do controle no formGroup
|
|
109
|
+
*/
|
|
110
|
+
enableComponent(controName) {
|
|
111
|
+
FormService.enableControl(this.formGroup, controName);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Método que retorna o valor de um componente
|
|
115
|
+
* @param controlName - Nome do controle no formGroup
|
|
116
|
+
* @returns - Valor
|
|
117
|
+
*/
|
|
118
|
+
getFormValue(controlName) {
|
|
119
|
+
return FormService.getFormValue(this.formGroup, controlName);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Verifica se o componente possui erro
|
|
123
|
+
* @param controlName - Nome do controle no formGroup
|
|
124
|
+
*/
|
|
125
|
+
hasControlError(controlName, errorCode) {
|
|
126
|
+
return FormService.hasControlError(this.formGroup, controlName, errorCode);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Seta inconsistências para o fomulário
|
|
130
|
+
* @param notification - Lista de notificações
|
|
131
|
+
*/
|
|
132
|
+
invalidForm(notification) {
|
|
133
|
+
FormService.invalidForm(this.formGroup, notification);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Método responsável pelo carregamento da tela
|
|
137
|
+
* @param obs - Observable responsável pelo salvamento dos dados
|
|
138
|
+
*/
|
|
139
|
+
loadData(obs) {
|
|
140
|
+
obs
|
|
141
|
+
.pipe(loading())
|
|
142
|
+
.subscribe((data) => {
|
|
143
|
+
this.isNewRegistry = false;
|
|
144
|
+
this.registry = data;
|
|
145
|
+
this.setFormValues(this.registry);
|
|
146
|
+
this.loadGrids();
|
|
147
|
+
this.setTitlePopup();
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
async loadDataAsync(obs) {
|
|
151
|
+
await obs.pipe(loading()).toPromise();
|
|
152
|
+
const data = await obs.toPromise();
|
|
153
|
+
this.isNewRegistry = false;
|
|
154
|
+
this.registry = data;
|
|
155
|
+
this.setFormValues(this.registry);
|
|
156
|
+
this.loadGrids();
|
|
157
|
+
this.setTitlePopup();
|
|
158
|
+
}
|
|
159
|
+
loadGrids() { }
|
|
160
|
+
/**
|
|
161
|
+
* Método disparado para retornar a lista
|
|
162
|
+
*/
|
|
163
|
+
navigateList(id = null) {
|
|
164
|
+
if (this.popup) {
|
|
165
|
+
this.dynamicDialogRef.close(id);
|
|
166
|
+
}
|
|
167
|
+
else if (this.dadosTela?.rotaListar) {
|
|
168
|
+
this.router.navigate([this.dadosTela.rotaListar]);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
ngOnDestroy() {
|
|
172
|
+
if (this.dynamicDialogRef) {
|
|
173
|
+
this.dynamicDialogRef.close();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
ngOnInit() {
|
|
177
|
+
this.configureForm();
|
|
178
|
+
this.popup = this.dynamicDialogConfig?.data?.popup || false;
|
|
179
|
+
this.activatedRoute.params.subscribe((params) => {
|
|
180
|
+
if (params['id']) {
|
|
181
|
+
this.loadForm(params['id']);
|
|
182
|
+
}
|
|
183
|
+
else if (this.dynamicDialogConfig?.data?.id) {
|
|
184
|
+
this.loadForm(this.dynamicDialogConfig.data.id);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
this.isNewRegistry = true;
|
|
188
|
+
this.loadGrids();
|
|
189
|
+
this.setTitlePopup();
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Método disparado para salvar dados
|
|
195
|
+
* @param obs - Observable responsável pelo salvamento dos dados
|
|
196
|
+
*/
|
|
197
|
+
saveData(obs) {
|
|
198
|
+
obs
|
|
199
|
+
.pipe((src) => {
|
|
200
|
+
this.isSaveLoading = true;
|
|
201
|
+
return src.pipe(finalize(() => {
|
|
202
|
+
this.isSaveLoading = false;
|
|
203
|
+
}));
|
|
204
|
+
})
|
|
205
|
+
.subscribe({
|
|
206
|
+
next: (res) => {
|
|
207
|
+
this.notificationService.toastSuccess(res.item2[0].message);
|
|
208
|
+
this.navigateList(res.item1);
|
|
209
|
+
},
|
|
210
|
+
error: (e) => {
|
|
211
|
+
this.backendError(e);
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Método se atualiza o valor de um componente do formGroup
|
|
217
|
+
* @param controName - Nome do controle
|
|
218
|
+
* @param value - Valor para atualização
|
|
219
|
+
*/
|
|
220
|
+
setControlValue(controName, value) {
|
|
221
|
+
FormService.setControlValue(this.formGroup, controName, value);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Atualiza valores dos componentes do formGroup
|
|
225
|
+
* @param values - Valores para atualização
|
|
226
|
+
*/
|
|
227
|
+
setFormValues(values) {
|
|
228
|
+
this.onSetFormValues = true;
|
|
229
|
+
this.formGroup.patchValue(values, { emitEvent: false });
|
|
230
|
+
this.onSetFormValues = false;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Seta o título do popup
|
|
234
|
+
*/
|
|
235
|
+
setTitlePopup() {
|
|
236
|
+
if (this.popup) {
|
|
237
|
+
if (this.dynamicDialogConfig)
|
|
238
|
+
this.dynamicDialogConfig.header = this.dadosTela?.tituloForm;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Atualiza o validador de um componente do formGroup
|
|
243
|
+
* @param controName - Nome do controle
|
|
244
|
+
* @param validators - Regra de validação
|
|
245
|
+
*/
|
|
246
|
+
setValidators(controName, validators) {
|
|
247
|
+
FormService.setValidators(this.formGroup, controName, validators);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Dispara os métodos de validações do formulário
|
|
251
|
+
* @returns - True/False
|
|
252
|
+
*/
|
|
253
|
+
validateForm() {
|
|
254
|
+
let valid = false;
|
|
255
|
+
if (this.formGroup && this.formGroup.valid) {
|
|
256
|
+
valid = true;
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
this.isAccordionExpanded = true;
|
|
260
|
+
this.invalidForm();
|
|
261
|
+
if (this.dadosTela?.mensagemValidacao) {
|
|
262
|
+
this.notificationService.dialog({
|
|
263
|
+
type: 'alert',
|
|
264
|
+
message: 'Verifique os campos obrigatórios.',
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return valid;
|
|
269
|
+
}
|
|
270
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseComponentCrudForm, deps: [{ token: i1.DialogService }, { token: i2.NotificationService }, { token: i3.ActivatedRoute }, { token: i1.DynamicDialogRef }, { token: i1.DynamicDialogConfig }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
271
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BaseComponentCrudForm, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
|
|
272
|
+
}
|
|
273
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseComponentCrudForm, decorators: [{
|
|
274
|
+
type: Component,
|
|
275
|
+
args: [{
|
|
276
|
+
template: ''
|
|
277
|
+
}]
|
|
278
|
+
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.NotificationService }, { type: i3.ActivatedRoute }, { type: i1.DynamicDialogRef }, { type: i1.DynamicDialogConfig }, { type: i3.Router }]; } });
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21wb25lbnQtY3J1ZC1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2FwaS9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtY3J1ZC1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxTQUFTLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7QUFZdEQsTUFBTSxPQUFnQixxQkFBc0IsU0FBUSxpQkFBaUI7SUFnQm5FLFlBQ0UsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQzlCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxtQkFBd0MsRUFDeEMsTUFBYztRQUN4QixLQUFLLENBRUQsYUFBYSxFQUNiLG1CQUFtQixDQUNwQixDQUFDO1FBUk0sbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBcEJoQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVmLGNBQVMsR0FBYyxJQUFJLFNBQVMsQ0FBQyxF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LENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVuQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7b0JBQzlCLElBQUksRUFBRSxPQUFPO29CQUNiLE9BQU8sRUFBRSxtQ0FBbUM7aUJBQzdDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7K0dBM1RtQixxQkFBcUI7bUdBQXJCLHFCQUFxQiwyRUFGL0IsRUFBRTs7NEZBRVEscUJBQXFCO2tCQUgxQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxFQUFFO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gXCJwcmltZW5nL2R5bmFtaWNkaWFsb2dcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgZmluYWxpemUgfSBmcm9tIFwicnhqc1wiO1xuXG5pbXBvcnQgeyBBY3Rpb25JdGVtIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvdGFibGUvYWN0aW9uLWl0ZW1cIjtcbmltcG9ydCB7IEJhc2VDb21wb25lbnRDcnVkIH0gZnJvbSBcIi4vYmFzZS1jb21wb25lbnQtY3J1ZFwiO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBsb2FkaW5nIH0gZnJvbSBcIi4uLy4uL2xvYWRlci9sb2FkZXIuc2VydmljZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhZG9zVGVsYSB7XG4gIHN1YlRpdHVsb0Zvcm06IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdGl0dWxvRm9ybTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByb3RhTGlzdGFyOiBzdHJpbmc7XG4gIG1lbnNhZ2VtVmFsaWRhY2FvOiBib29sZWFuXG59XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbXBvbmVudENydWRGb3JtIGV4dGVuZHMgQmFzZUNvbXBvbmVudENydWQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJvdGVjdGVkIGlzQWNjb3JkaW9uRXhwYW5kZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzTmV3UmVnaXN0cnkgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzU2F2ZUxvYWRpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzVmlldyA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBwcm90ZWN0ZWQgYWN0aW9uczogQWN0aW9uSXRlbVtdID0gW107XG5cbiAgcHJvdGVjdGVkIGRhZG9zVGVsYTogRGFkb3NUZWxhIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgcG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHJlZ2lzdHJ5OiBhbnkgPSBudWxsO1xuXG4gIHByaXZhdGUgb25TZXRGb3JtVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJvdGVjdGVkIGR5bmFtaWNEaWFsb2dSZWY6IER5bmFtaWNEaWFsb2dSZWYsXG4gICAgcHJvdGVjdGVkIGR5bmFtaWNEaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyKSB7XG4gICAgc3VwZXJcbiAgICAgIChcbiAgICAgICAgZGlhbG9nU2VydmljZSxcbiAgICAgICAgbm90aWZpY2F0aW9uU2VydmljZVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBwYXJhIGNvbmZpZ3VyYcOnw6NvIGRvIGZvcm1cbiAgICovXG4gIGFic3RyYWN0IGNvbmZpZ3VyZUZvcm0oKTogdm9pZDtcblxuICAvKipcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSBvIGNhcnJlZ2FtZW50byBkbyBmb3JtXG4gICAqIEBwYXJhbSBpZFxuICAgKi9cbiAgYWJzdHJhY3QgbG9hZEZvcm0oaWQ6IGFueSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIHBhcmEgc2FsdmFtZW50byBkb3MgZGFkb3NcbiAgICovXG4gIGFic3RyYWN0IHNhdmUoKTogdm9pZDtcblxuICAvKipcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSB0cmF0YW1lbnRvIGRhcyBub3RpZmljYcOnw7VlcyBkbyBiYWNrZW5kXG4gICAqIEBwYXJhbSBlcnIgLSBOb3RpZmljYcOnw6NvXG4gICAqL1xuICBwcm90ZWN0ZWQgYmFja2VuZEVycm9yKGVycjogYW55KTogdm9pZCB7XG4gICAgaWYgKGVycikge1xuICAgICAgaWYgKGVyci5zdGF0dXMgPT0gNDA0KSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdEVycm9yKGVyci5lcnJvci5pdGVtMlswXS5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PSA0MDApIHtcbiAgICAgICAgLy8gRXJyb3MgZGUgdmFsaWRhw6fDo28gZGUgZG9tw61uaW8gZG8gYmFja2VuZFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlcnIuZXJyb3IpKSB7XG4gICAgICAgICAgaWYgKGVyci5lcnJvcj8ubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgIGlmIChlcnIuZXJyb3IubGVuZ3RoID09IDEgJiYgZXJyLmVycm9yWzBdLmtleSA9PSAnJykge1xuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIuZXJyb3JbMF0ubWVzc2FnZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRm9ybShlcnIuZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlcnIuZXJyb3I/LnRpdGxlKSB7XG4gICAgICAgICAgLy8gRXJybyBkZSBqc29uIG5vIGJhY2tlbmRcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIuZXJyb3IudGl0bGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PSA0MTUpIHtcbiAgICAgICAgaWYgKGVyci5lcnJvcj8udGl0bGUpIHtcbiAgICAgICAgICAvLyBFcnJvIGRlIGpzb24gbm8gYmFja2VuZFxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdEVycm9yKGVyci5lcnJvci50aXRsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFF1YWxxdWVyIG91dHJvIHRpcG8gZGUgZXJybyBxdWUgdGVuaGEgbWVuc2FnZW1cbiAgICAgIGlmIChlcnIubWVzc2FnZSkge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIGFvIGNsaWNhciBubyBib3TDo28gZGUgY2FuY2VsYW1lbnRvXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FuY2VsKCkge1xuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5xdWVzdGlvbih7XG4gICAgICB0eXBlOiAncXVlc3Rpb24nLFxuICAgICAgbWVzc2FnZTogJ0Rlc2VqYSBjYW5jZWxhciBhIG9wZXJhw6fDo28/JyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICB0aGlzLm5hdmlnYXRlTGlzdCgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzZSBob3V2ZXJhbSBhbHRlcmHDp8O1ZXMgbm9zIGNvbXBvbmVudGVzIGRvIGZvcm1Db250cm9sXG4gICAqIEBwYXJhbSBjb250cm9scyAtIE5vbWVzIGRvIGNvbnRyb2xlcyBubyBmb3JtR3JvdXBcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZVxuICAgKi9cbiAgcHJvdGVjdGVkIGRldGVjdEZvcm1Db250cm9sQ2hhbmdlcyhjb250cm9sczogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgY29udHJvbExpc3Q6IE9ic2VydmFibGU8YW55PltdID0gW107XG4gICAgY29udHJvbHMuZm9yRWFjaChjb250cm9sTmFtZSA9PiBjb250cm9sTGlzdC5wdXNoKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZUNoYW5nZXMpKTtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChjb250cm9sTGlzdCkucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMub25TZXRGb3JtVmFsdWVzKSk7XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kbyByZXNwb25zw6F2ZWwgcG9yIGRlc2FiaWxpdGFyIHVtIGNvbXBvbmVudGVcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIC0gTm9tZSBkbyBjb250cm9sZSBubyBmb3JtR3JvdXBcbiAgICovXG4gIHByb3RlY3RlZCBkaXNhYmxlQ29tcG9uZW50KGNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcbiAgICBGb3JtU2VydmljZS5kaXNhYmxlQ29udHJvbCh0aGlzLmZvcm1Hcm91cCwgY29udHJvbE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gcmVzcG9uc8OhdmVsIHBvciBsaW1wYXIgZSBkZXNhYmlsaXRhciB1bSBjb21wb25lbnRlXG4gICAqIEBwYXJhbSBjb250cm9sTmFtZSAtIE5vbWUgZG8gY29udHJvbGUgbm8gZm9ybUdyb3VwXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbG9yIGRlZmF1bHRcbiAgICovXG4gIHByb3RlY3RlZCBkaXNhYmxlQW5kQ2xlYXJDb21wb25lbnQoY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU/OiBhbnkpIHtcbiAgICBGb3JtU2VydmljZS5kaXNhYmxlQW5kQ2xlYXJDb250cm9sKHRoaXMuZm9ybUdyb3VwLCBjb250cm9sTmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gcmVzcG9uc8OhdmVsIHBvciBoYWJpbGl0YXIgdW0gY29tcG9uZW50ZVxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgLSBOb21lIGRvIGNvbnRyb2xlIG5vIGZvcm1Hcm91cFxuICAgKi9cbiAgcHJvdGVjdGVkIGVuYWJsZUNvbXBvbmVudChjb250cm9OYW1lOiBzdHJpbmcpIHtcbiAgICBGb3JtU2VydmljZS5lbmFibGVDb250cm9sKHRoaXMuZm9ybUdyb3VwLCBjb250cm9OYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIHF1ZSByZXRvcm5hIG8gdmFsb3IgZGUgdW0gY29tcG9uZW50ZVxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgLSBOb21lIGRvIGNvbnRyb2xlIG5vIGZvcm1Hcm91cFxuICAgKiBAcmV0dXJucyAtIFZhbG9yXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Rm9ybVZhbHVlPFQ+KGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBUIHtcbiAgICByZXR1cm4gRm9ybVNlcnZpY2UuZ2V0Rm9ybVZhbHVlPFQ+KHRoaXMuZm9ybUdyb3VwLCBjb250cm9sTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2UgbyBjb21wb25lbnRlIHBvc3N1aSBlcnJvXG4gICAqIEBwYXJhbSBjb250cm9sTmFtZSAtIE5vbWUgZG8gY29udHJvbGUgbm8gZm9ybUdyb3VwXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFzQ29udHJvbEVycm9yKGNvbnRyb2xOYW1lOiBzdHJpbmcsIGVycm9yQ29kZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBGb3JtU2VydmljZS5oYXNDb250cm9sRXJyb3IodGhpcy5mb3JtR3JvdXAsIGNvbnRyb2xOYW1lLCBlcnJvckNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldGEgaW5jb25zaXN0w6puY2lhcyBwYXJhIG8gZm9tdWzDoXJpb1xuICAgKiBAcGFyYW0gbm90aWZpY2F0aW9uIC0gTGlzdGEgZGUgbm90aWZpY2HDp8O1ZXNcbiAgICovXG4gIHByb3RlY3RlZCBpbnZhbGlkRm9ybShub3RpZmljYXRpb24/OiBhbnkpIHtcbiAgICBGb3JtU2VydmljZS5pbnZhbGlkRm9ybSh0aGlzLmZvcm1Hcm91cCwgbm90aWZpY2F0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwZWxvIGNhcnJlZ2FtZW50byBkYSB0ZWxhXG4gICAqIEBwYXJhbSBvYnMgLSBPYnNlcnZhYmxlIHJlc3BvbnPDoXZlbCBwZWxvIHNhbHZhbWVudG8gZG9zIGRhZG9zXG4gICAqL1xuICBwdWJsaWMgbG9hZERhdGE8VD4ob2JzOiBPYnNlcnZhYmxlPGFueT4pIHtcbiAgICBvYnNcbiAgICAgIC5waXBlKGxvYWRpbmcoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzTmV3UmVnaXN0cnkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IGRhdGEgYXMgVDtcbiAgICAgICAgdGhpcy5zZXRGb3JtVmFsdWVzKHRoaXMucmVnaXN0cnkpO1xuICAgICAgICB0aGlzLmxvYWRHcmlkcygpO1xuICAgICAgICB0aGlzLnNldFRpdGxlUG9wdXAoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbG9hZERhdGFBc3luYzxUPihvYnM6IE9ic2VydmFibGU8YW55Pikge1xuICAgIGF3YWl0IG9icy5waXBlKGxvYWRpbmcoKSkudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgZGF0YTogYW55ID0gYXdhaXQgb2JzLnRvUHJvbWlzZSgpO1xuXG4gICAgdGhpcy5pc05ld1JlZ2lzdHJ5ID0gZmFsc2U7XG4gICAgdGhpcy5yZWdpc3RyeSA9IGRhdGEgYXMgVDtcbiAgICB0aGlzLnNldEZvcm1WYWx1ZXModGhpcy5yZWdpc3RyeSk7XG4gICAgdGhpcy5sb2FkR3JpZHMoKTtcbiAgICB0aGlzLnNldFRpdGxlUG9wdXAoKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkR3JpZHMoKSB7IH1cblxuICAvKipcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSByZXRvcm5hciBhIGxpc3RhXG4gICAqL1xuICBwcm90ZWN0ZWQgbmF2aWdhdGVMaXN0KGlkOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMucG9wdXApIHtcbiAgICAgIHRoaXMuZHluYW1pY0RpYWxvZ1JlZi5jbG9zZShpZCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuZGFkb3NUZWxhPy5yb3RhTGlzdGFyKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5kYWRvc1RlbGEucm90YUxpc3Rhcl0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5keW5hbWljRGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLmR5bmFtaWNEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb25maWd1cmVGb3JtKCk7XG5cbiAgICB0aGlzLnBvcHVwID0gdGhpcy5keW5hbWljRGlhbG9nQ29uZmlnPy5kYXRhPy5wb3B1cCB8fCBmYWxzZTtcblxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgIGlmIChwYXJhbXNbJ2lkJ10pIHtcbiAgICAgICAgdGhpcy5sb2FkRm9ybShwYXJhbXNbJ2lkJ10pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5keW5hbWljRGlhbG9nQ29uZmlnPy5kYXRhPy5pZCkge1xuICAgICAgICB0aGlzLmxvYWRGb3JtKHRoaXMuZHluYW1pY0RpYWxvZ0NvbmZpZy5kYXRhLmlkKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmlzTmV3UmVnaXN0cnkgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRHcmlkcygpO1xuICAgICAgICB0aGlzLnNldFRpdGxlUG9wdXAoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBwYXJhIHNhbHZhciBkYWRvc1xuICAgKiBAcGFyYW0gb2JzIC0gT2JzZXJ2YWJsZSByZXNwb25zw6F2ZWwgcGVsbyBzYWx2YW1lbnRvIGRvcyBkYWRvc1xuICAgKi9cbiAgcHJvdGVjdGVkIHNhdmVEYXRhKG9iczogT2JzZXJ2YWJsZTxhbnk+KSB7XG4gICAgb2JzXG4gICAgICAucGlwZSgoc3JjOiBPYnNlcnZhYmxlPGFueT4pID0+IHtcbiAgICAgICAgdGhpcy5pc1NhdmVMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHNyYy5waXBlKGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU2F2ZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSkpO1xuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RTdWNjZXNzKHJlcy5pdGVtMlswXS5tZXNzYWdlKTtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlTGlzdChyZXMuaXRlbTEpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgICB0aGlzLmJhY2tlbmRFcnJvcihlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gc2UgYXR1YWxpemEgbyB2YWxvciBkZSB1bSBjb21wb25lbnRlIGRvIGZvcm1Hcm91cFxuICAgKiBAcGFyYW0gY29udHJvTmFtZSAtIE5vbWUgZG8gY29udHJvbGVcbiAgICogQHBhcmFtIHZhbHVlIC0gVmFsb3IgcGFyYSBhdHVhbGl6YcOnw6NvXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0Q29udHJvbFZhbHVlKGNvbnRyb05hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIEZvcm1TZXJ2aWNlLnNldENvbnRyb2xWYWx1ZSh0aGlzLmZvcm1Hcm91cCwgY29udHJvTmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dWFsaXphIHZhbG9yZXMgZG9zIGNvbXBvbmVudGVzIGRvIGZvcm1Hcm91cFxuICAgKiBAcGFyYW0gdmFsdWVzIC0gVmFsb3JlcyBwYXJhIGF0dWFsaXphw6fDo29cbiAgICovXG4gIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKHZhbHVlczogYW55KSB7XG4gICAgdGhpcy5vblNldEZvcm1WYWx1ZXMgPSB0cnVlO1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodmFsdWVzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5vblNldEZvcm1WYWx1ZXMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRhIG8gdMOtdHVsbyBkbyBwb3B1cFxuICAgKi9cbiAgcHJpdmF0ZSBzZXRUaXRsZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwKSB7XG4gICAgICBpZiAodGhpcy5keW5hbWljRGlhbG9nQ29uZmlnKVxuICAgICAgICB0aGlzLmR5bmFtaWNEaWFsb2dDb25maWcuaGVhZGVyID0gdGhpcy5kYWRvc1RlbGE/LnRpdHVsb0Zvcm07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF0dWFsaXphIG8gdmFsaWRhZG9yIGRlIHVtIGNvbXBvbmVudGUgZG8gZm9ybUdyb3VwXG4gICAqIEBwYXJhbSBjb250cm9OYW1lIC0gTm9tZSBkbyBjb250cm9sZVxuICAgKiBAcGFyYW0gdmFsaWRhdG9ycyAtIFJlZ3JhIGRlIHZhbGlkYcOnw6NvXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0VmFsaWRhdG9ycyhjb250cm9OYW1lOiBzdHJpbmcsIHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IG51bGwpIHtcbiAgICBGb3JtU2VydmljZS5zZXRWYWxpZGF0b3JzKHRoaXMuZm9ybUdyb3VwLCBjb250cm9OYW1lLCB2YWxpZGF0b3JzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXJhIG9zIG3DqXRvZG9zIGRlIHZhbGlkYcOnw7VlcyBkbyBmb3JtdWzDoXJpb1xuICAgKiBAcmV0dXJucyAtIFRydWUvRmFsc2VcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUZvcm0oKTogYm9vbGVhbiB7XG4gICAgbGV0IHZhbGlkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXAgJiYgdGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0FjY29yZGlvbkV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaW52YWxpZEZvcm0oKTtcblxuICAgICAgaWYgKHRoaXMuZGFkb3NUZWxhPy5tZW5zYWdlbVZhbGlkYWNhbykge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZGlhbG9nKHtcbiAgICAgICAgICB0eXBlOiAnYWxlcnQnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdWZXJpZmlxdWUgb3MgY2FtcG9zIG9icmlnYXTDs3Jpb3MuJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG59XG4iXX0=
|