keevo-components 1.5.136 → 1.5.138

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.
@@ -0,0 +1,278 @@
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 * as i0 from "@angular/core";
7
+ import * as i1 from "primeng/dynamicdialog";
8
+ import * as i2 from "../services/notification.service";
9
+ import * as i3 from "@angular/router";
10
+ export class BaseComponentCrudForm extends BaseComponentCrud {
11
+ constructor(dialogService, notificationService, activatedRoute, dynamicDialogRef, dynamicDialogConfig, router) {
12
+ super(dialogService, notificationService);
13
+ this.activatedRoute = activatedRoute;
14
+ this.dynamicDialogRef = dynamicDialogRef;
15
+ this.dynamicDialogConfig = dynamicDialogConfig;
16
+ this.router = router;
17
+ this.isAccordionExpanded = false;
18
+ this.isNewRegistry = false;
19
+ this.isSaveLoading = false;
20
+ this.isView = false;
21
+ this.formGroup = new FormGroup({});
22
+ this.actions = [];
23
+ this.popup = false;
24
+ this.registry = null;
25
+ this.onSetFormValues = false;
26
+ }
27
+ /**
28
+ * Método disparado para tratamento das notificações do backend
29
+ * @param err - Notificação
30
+ */
31
+ backendError(err) {
32
+ if (err) {
33
+ if (err.status == 404) {
34
+ this.notificationService.toastError(err.error.item2[0].message);
35
+ return;
36
+ }
37
+ else if (err.status == 400) {
38
+ // Erros de validação de domínio do backend
39
+ if (Array.isArray(err.error)) {
40
+ if (err.error?.length) {
41
+ if (err.error.length == 1 && err.error[0].key == '') {
42
+ this.notificationService.toastError(err.error[0].message);
43
+ return;
44
+ }
45
+ this.invalidForm(err.error);
46
+ return;
47
+ }
48
+ }
49
+ else if (err.error?.title) {
50
+ // Erro de json no backend
51
+ this.notificationService.toastError(err.error.title);
52
+ return;
53
+ }
54
+ }
55
+ else if (err.status == 415) {
56
+ if (err.error?.title) {
57
+ // Erro de json no backend
58
+ this.notificationService.toastError(err.error.title);
59
+ return;
60
+ }
61
+ }
62
+ // Qualquer outro tipo de erro que tenha mensagem
63
+ if (err.message) {
64
+ this.notificationService.toastError(err.message);
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Método disparado ao clicar no botão de cancelamento
70
+ */
71
+ cancel() {
72
+ this.notificationService.question({
73
+ type: 'question',
74
+ message: 'Deseja cancelar a operação?',
75
+ accept: () => {
76
+ this.navigateList();
77
+ },
78
+ });
79
+ }
80
+ /**
81
+ * Verifica se houveram alterações nos componentes do formControl
82
+ * @param controls - Nomes do controles no formGroup
83
+ * @returns Observable
84
+ */
85
+ detectFormControlChanges(controls) {
86
+ const controlList = [];
87
+ controls.forEach(controlName => controlList.push(this.formGroup.controls[controlName].valueChanges));
88
+ return combineLatest(controlList).pipe(filter(() => !this.onSetFormValues));
89
+ }
90
+ /**
91
+ * Método responsável por desabilitar um componente
92
+ * @param controlName - Nome do controle no formGroup
93
+ */
94
+ disableComponent(controlName) {
95
+ FormService.disableControl(this.formGroup, controlName);
96
+ }
97
+ /**
98
+ * Método responsável por limpar e desabilitar um componente
99
+ * @param controlName - Nome do controle no formGroup
100
+ * @param value - Valor default
101
+ */
102
+ disableAndClearComponent(controlName, value) {
103
+ FormService.disableAndClearControl(this.formGroup, controlName, value);
104
+ }
105
+ /**
106
+ * Método responsável por habilitar um componente
107
+ * @param controlName - Nome do controle no formGroup
108
+ */
109
+ enableComponent(controName) {
110
+ FormService.enableControl(this.formGroup, controName);
111
+ }
112
+ /**
113
+ * Método que retorna o valor de um componente
114
+ * @param controlName - Nome do controle no formGroup
115
+ * @returns - Valor
116
+ */
117
+ getFormValue(controlName) {
118
+ return FormService.getFormValue(this.formGroup, controlName);
119
+ }
120
+ /**
121
+ * Verifica se o componente possui erro
122
+ * @param controlName - Nome do controle no formGroup
123
+ */
124
+ hasControlError(controlName, errorCode) {
125
+ return FormService.hasControlError(this.formGroup, controlName, errorCode);
126
+ }
127
+ /**
128
+ * Seta inconsistências para o fomulário
129
+ * @param notification - Lista de notificações
130
+ */
131
+ invalidForm(notification) {
132
+ FormService.invalidForm(this.formGroup, notification);
133
+ }
134
+ /**
135
+ * Método responsável pelo carregamento da tela
136
+ * @param obs - Observable responsável pelo salvamento dos dados
137
+ */
138
+ loadData(obs, propertyDescripton) {
139
+ obs
140
+ //.pipe(loading())
141
+ .subscribe((data) => {
142
+ this.isNewRegistry = false;
143
+ this.registry = data;
144
+ this.setFormValues(this.registry);
145
+ this.loadGrids();
146
+ //this.dadosTela.tituloForm = this.tituloForm<T>(false, propertyDescripton);
147
+ //this.setTitlePopup();
148
+ });
149
+ }
150
+ loadGrids() { }
151
+ /**
152
+ * Método disparado para retornar a lista
153
+ */
154
+ navigateList(id = null) {
155
+ if (this.popup) {
156
+ this.dynamicDialogRef.close(id);
157
+ }
158
+ else if (this.dadosTela?.rotaListar) {
159
+ this.router.navigate([this.dadosTela.rotaListar]);
160
+ }
161
+ }
162
+ ngOnDestroy() {
163
+ if (this.dynamicDialogRef) {
164
+ this.dynamicDialogRef.close();
165
+ }
166
+ }
167
+ ngOnInit() {
168
+ this.configureForm();
169
+ this.popup = this.dynamicDialogConfig?.data?.popup || false;
170
+ this.activatedRoute.params.subscribe((params) => {
171
+ if (params['id']) {
172
+ this.loadForm(params['id']);
173
+ }
174
+ else if (this.dynamicDialogConfig?.data?.id) {
175
+ this.loadForm(this.dynamicDialogConfig.data.id);
176
+ }
177
+ else {
178
+ this.isNewRegistry = true;
179
+ //this.dadosTela.tituloForm = this.tituloForm(true, '');
180
+ //this.setTitlePopup();
181
+ this.loadGrids();
182
+ }
183
+ });
184
+ }
185
+ /**
186
+ * Método disparado para salvar dados
187
+ * @param obs - Observable responsável pelo salvamento dos dados
188
+ */
189
+ saveData(obs) {
190
+ obs
191
+ .pipe((src) => {
192
+ this.isSaveLoading = true;
193
+ return src.pipe(finalize(() => {
194
+ this.isSaveLoading = false;
195
+ }));
196
+ })
197
+ .subscribe({
198
+ next: (res) => {
199
+ this.notificationService.toastSuccess(res.item2[0].message);
200
+ this.navigateList(res.item1);
201
+ },
202
+ error: (e) => {
203
+ this.backendError(e);
204
+ },
205
+ });
206
+ }
207
+ /**
208
+ * Método se atualiza o valor de um componente do formGroup
209
+ * @param controName - Nome do controle
210
+ * @param value - Valor para atualização
211
+ */
212
+ setControlValue(controName, value) {
213
+ FormService.setControlValue(this.formGroup, controName, value);
214
+ }
215
+ /**
216
+ * Atualiza valores dos componentes do formGroup
217
+ * @param values - Valores para atualização
218
+ */
219
+ setFormValues(values) {
220
+ this.onSetFormValues = true;
221
+ this.formGroup.patchValue(values, { emitEvent: false });
222
+ this.onSetFormValues = false;
223
+ }
224
+ /**
225
+ * Atualiza o validador de um componente do formGroup
226
+ * @param controName - Nome do controle
227
+ * @param validators - Regra de validação
228
+ */
229
+ setValidators(controName, validators) {
230
+ FormService.setValidators(this.formGroup, controName, validators);
231
+ }
232
+ // private setTitlePopup() {
233
+ // if (this.popup) {
234
+ // if (this.dynamicDialogConfig)
235
+ // this.dynamicDialogConfig.header = this.dadosTela.tituloForm;
236
+ // }
237
+ // }
238
+ // protected tituloForm<T>(isNew: boolean, propertyDescripton: string): string {
239
+ // if (isNew) {
240
+ // return `${this.dadosTela.masculino ? 'Novo' : 'Nova'} ${this.dadosTela.nomeCadastro}`;
241
+ // }
242
+ // else if (this.isView) {
243
+ // return `Visualização ${this.dadosTela.masculino ? 'do' : 'da'} ${this.dadosTela.nomeCadastro}: ${ObjectService.getProperty<T>(this.registry, propertyDescripton)}`;
244
+ // } else {
245
+ // return `Edição ${this.dadosTela.masculino ? 'do' : 'da'} ${this.dadosTela.nomeCadastro}: ${ObjectService.getProperty<T>(this.registry, propertyDescripton)}`;
246
+ // }
247
+ // }
248
+ /**
249
+ * Dispara os métodos de validações do formulário
250
+ * @returns - True/False
251
+ */
252
+ validateForm() {
253
+ let valid = false;
254
+ if (this.formGroup && this.formGroup.valid) {
255
+ valid = true;
256
+ }
257
+ else {
258
+ this.isAccordionExpanded = true;
259
+ this.invalidForm();
260
+ if (this.dadosTela?.mensagemValidacao) {
261
+ this.notificationService.dialog({
262
+ type: 'alert',
263
+ message: 'Verifique os campos obrigatórios.',
264
+ });
265
+ }
266
+ }
267
+ return valid;
268
+ }
269
+ }
270
+ BaseComponentCrudForm.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", 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
+ BaseComponentCrudForm.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: BaseComponentCrudForm, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true });
272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: BaseComponentCrudForm, decorators: [{
273
+ type: Component,
274
+ args: [{
275
+ template: ''
276
+ }]
277
+ }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.NotificationService }, { type: i3.ActivatedRoute }, { type: i1.DynamicDialogRef }, { type: i1.DynamicDialogConfig }, { type: i3.Router }]; } });
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21wb25lbnQtY3J1ZC1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2FwaS9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtY3J1ZC1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxTQUFTLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7OztBQWN2RCxNQUFNLE9BQWdCLHFCQUFzQixTQUFRLGlCQUFpQjtJQWdCbkUsWUFDRSxhQUE0QixFQUM1QixtQkFBd0MsRUFDOUIsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLG1CQUF3QyxFQUN4QyxNQUFjO1FBQ3hCLEtBQUssQ0FFRCxhQUFhLEVBQ2IsbUJBQW1CLENBQ3BCLENBQUM7UUFSTSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFwQmhCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRWYsY0FBUyxHQUFjLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLFlBQU8sR0FBaUIsRUFBRSxDQUFDO1FB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aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tIFwicHJpbWVuZy9keW5hbWljZGlhbG9nXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBmaW5hbGl6ZSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQgeyBBY3Rpb25JdGVtIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvdGFibGUvYWN0aW9uLWl0ZW1cIjtcclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudENydWQgfSBmcm9tIFwiLi9iYXNlLWNvbXBvbmVudC1jcnVkXCI7XHJcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERhZG9zVGVsYSB7XHJcbiAgbm9tZUNhZGFzdHJvOiBzdHJpbmc7XHJcbiAgdGl0dWxvRm9ybTogc3RyaW5nO1xyXG4gIHJvdGFMaXN0YXI6IHN0cmluZztcclxuICBtYXNjdWxpbm86IGJvb2xlYW47XHJcbiAgbWVuc2FnZW1WYWxpZGFjYW86IGJvb2xlYW5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGU6ICcnXHJcbn0pXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50Q3J1ZEZvcm0gZXh0ZW5kcyBCYXNlQ29tcG9uZW50Q3J1ZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHJvdGVjdGVkIGlzQWNjb3JkaW9uRXhwYW5kZWQgPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgaXNOZXdSZWdpc3RyeSA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBpc1NhdmVMb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIGlzVmlldyA9IGZhbHNlO1xyXG5cclxuICBwcm90ZWN0ZWQgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBwcm90ZWN0ZWQgYWN0aW9uczogQWN0aW9uSXRlbVtdID0gW107XHJcblxyXG4gIHByb3RlY3RlZCBkYWRvc1RlbGE6IERhZG9zVGVsYSB8IHVuZGVmaW5lZDtcclxuICBwcm90ZWN0ZWQgcG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgcmVnaXN0cnk6IGFueSA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgb25TZXRGb3JtVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJvdGVjdGVkIGR5bmFtaWNEaWFsb2dSZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwcm90ZWN0ZWQgZHluYW1pY0RpYWxvZ0NvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcikge1xyXG4gICAgc3VwZXJcclxuICAgICAgKFxyXG4gICAgICAgIGRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgbm90aWZpY2F0aW9uU2VydmljZVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSBjb25maWd1cmHDp8OjbyBkbyBmb3JtXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgY29uZmlndXJlRm9ybSgpOiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBwYXJhIG8gY2FycmVnYW1lbnRvIGRvIGZvcm1cclxuICAgKiBAcGFyYW0gaWRcclxuICAgKi9cclxuICBhYnN0cmFjdCBsb2FkRm9ybShpZDogYW55KTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSBzYWx2YW1lbnRvIGRvcyBkYWRvc1xyXG4gICAqL1xyXG4gIGFic3RyYWN0IHNhdmUoKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSB0cmF0YW1lbnRvIGRhcyBub3RpZmljYcOnw7VlcyBkbyBiYWNrZW5kXHJcbiAgICogQHBhcmFtIGVyciAtIE5vdGlmaWNhw6fDo29cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYmFja2VuZEVycm9yKGVycjogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoZXJyKSB7XHJcbiAgICAgIGlmIChlcnIuc3RhdHVzID09IDQwNCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdEVycm9yKGVyci5lcnJvci5pdGVtMlswXS5tZXNzYWdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PSA0MDApIHtcclxuICAgICAgICAvLyBFcnJvcyBkZSB2YWxpZGHDp8OjbyBkZSBkb23DrW5pbyBkbyBiYWNrZW5kXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyLmVycm9yKSkge1xyXG4gICAgICAgICAgaWYgKGVyci5lcnJvcj8ubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLmVycm9yLmxlbmd0aCA9PSAxICYmIGVyci5lcnJvclswXS5rZXkgPT0gJycpIHtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIuZXJyb3JbMF0ubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRGb3JtKGVyci5lcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXJyLmVycm9yPy50aXRsZSkge1xyXG4gICAgICAgICAgLy8gRXJybyBkZSBqc29uIG5vIGJhY2tlbmRcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdEVycm9yKGVyci5lcnJvci50aXRsZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGVyci5zdGF0dXMgPT0gNDE1KSB7XHJcbiAgICAgICAgaWYgKGVyci5lcnJvcj8udGl0bGUpIHtcclxuICAgICAgICAgIC8vIEVycm8gZGUganNvbiBubyBiYWNrZW5kXHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIuZXJyb3IudGl0bGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUXVhbHF1ZXIgb3V0cm8gdGlwbyBkZSBlcnJvIHF1ZSB0ZW5oYSBtZW5zYWdlbVxyXG4gICAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIGFvIGNsaWNhciBubyBib3TDo28gZGUgY2FuY2VsYW1lbnRvXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGNhbmNlbCgpIHtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5xdWVzdGlvbih7XHJcbiAgICAgIHR5cGU6ICdxdWVzdGlvbicsXHJcbiAgICAgIG1lc3NhZ2U6ICdEZXNlamEgY2FuY2VsYXIgYSBvcGVyYcOnw6NvPycsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVMaXN0KCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZlcmlmaWNhIHNlIGhvdXZlcmFtIGFsdGVyYcOnw7VlcyBub3MgY29tcG9uZW50ZXMgZG8gZm9ybUNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbHMgLSBOb21lcyBkbyBjb250cm9sZXMgbm8gZm9ybUdyb3VwXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBkZXRlY3RGb3JtQ29udHJvbENoYW5nZXMoY29udHJvbHM6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgY29udHJvbExpc3Q6IE9ic2VydmFibGU8YW55PltdID0gW107XHJcbiAgICBjb250cm9scy5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IGNvbnRyb2xMaXN0LnB1c2godGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlQ2hhbmdlcykpO1xyXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoY29udHJvbExpc3QpLnBpcGUoZmlsdGVyKCgpID0+ICF0aGlzLm9uU2V0Rm9ybVZhbHVlcykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyByZXNwb25zw6F2ZWwgcG9yIGRlc2FiaWxpdGFyIHVtIGNvbXBvbmVudGVcclxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgLSBOb21lIGRvIGNvbnRyb2xlIG5vIGZvcm1Hcm91cFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBkaXNhYmxlQ29tcG9uZW50KGNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcclxuICAgIEZvcm1TZXJ2aWNlLmRpc2FibGVDb250cm9sKHRoaXMuZm9ybUdyb3VwLCBjb250cm9sTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwb3IgbGltcGFyIGUgZGVzYWJpbGl0YXIgdW0gY29tcG9uZW50ZVxyXG4gICAqIEBwYXJhbSBjb250cm9sTmFtZSAtIE5vbWUgZG8gY29udHJvbGUgbm8gZm9ybUdyb3VwXHJcbiAgICogQHBhcmFtIHZhbHVlIC0gVmFsb3IgZGVmYXVsdFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBkaXNhYmxlQW5kQ2xlYXJDb21wb25lbnQoY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU/OiBhbnkpIHtcclxuICAgIEZvcm1TZXJ2aWNlLmRpc2FibGVBbmRDbGVhckNvbnRyb2wodGhpcy5mb3JtR3JvdXAsIGNvbnRyb2xOYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwb3IgaGFiaWxpdGFyIHVtIGNvbXBvbmVudGVcclxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgLSBOb21lIGRvIGNvbnRyb2xlIG5vIGZvcm1Hcm91cFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBlbmFibGVDb21wb25lbnQoY29udHJvTmFtZTogc3RyaW5nKSB7XHJcbiAgICBGb3JtU2VydmljZS5lbmFibGVDb250cm9sKHRoaXMuZm9ybUdyb3VwLCBjb250cm9OYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gcXVlIHJldG9ybmEgbyB2YWxvciBkZSB1bSBjb21wb25lbnRlXHJcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIC0gTm9tZSBkbyBjb250cm9sZSBubyBmb3JtR3JvdXBcclxuICAgKiBAcmV0dXJucyAtIFZhbG9yXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGdldEZvcm1WYWx1ZTxUPihjb250cm9sTmFtZTogc3RyaW5nKTogVCB7XHJcbiAgICByZXR1cm4gRm9ybVNlcnZpY2UuZ2V0Rm9ybVZhbHVlPFQ+KHRoaXMuZm9ybUdyb3VwLCBjb250cm9sTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWZXJpZmljYSBzZSBvIGNvbXBvbmVudGUgcG9zc3VpIGVycm9cclxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgLSBOb21lIGRvIGNvbnRyb2xlIG5vIGZvcm1Hcm91cFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBoYXNDb250cm9sRXJyb3IoY29udHJvbE5hbWU6IHN0cmluZywgZXJyb3JDb2RlPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gRm9ybVNlcnZpY2UuaGFzQ29udHJvbEVycm9yKHRoaXMuZm9ybUdyb3VwLCBjb250cm9sTmFtZSwgZXJyb3JDb2RlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldGEgaW5jb25zaXN0w6puY2lhcyBwYXJhIG8gZm9tdWzDoXJpb1xyXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb24gLSBMaXN0YSBkZSBub3RpZmljYcOnw7Vlc1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBpbnZhbGlkRm9ybShub3RpZmljYXRpb24/OiBhbnkpIHtcclxuICAgIEZvcm1TZXJ2aWNlLmludmFsaWRGb3JtKHRoaXMuZm9ybUdyb3VwLCBub3RpZmljYXRpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyByZXNwb25zw6F2ZWwgcGVsbyBjYXJyZWdhbWVudG8gZGEgdGVsYVxyXG4gICAqIEBwYXJhbSBvYnMgLSBPYnNlcnZhYmxlIHJlc3BvbnPDoXZlbCBwZWxvIHNhbHZhbWVudG8gZG9zIGRhZG9zXHJcbiAgICovXHJcbiAgcHVibGljIGxvYWREYXRhPFQ+KG9iczogT2JzZXJ2YWJsZTxhbnk+LCBwcm9wZXJ0eURlc2NyaXB0b246IHN0cmluZykge1xyXG4gICAgb2JzXHJcbiAgICAgIC8vLnBpcGUobG9hZGluZygpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmlzTmV3UmVnaXN0cnkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gZGF0YSBhcyBUO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyh0aGlzLnJlZ2lzdHJ5KTtcclxuICAgICAgICB0aGlzLmxvYWRHcmlkcygpO1xyXG4gICAgICAgIC8vdGhpcy5kYWRvc1RlbGEudGl0dWxvRm9ybSA9IHRoaXMudGl0dWxvRm9ybTxUPihmYWxzZSwgcHJvcGVydHlEZXNjcmlwdG9uKTtcclxuICAgICAgICAvL3RoaXMuc2V0VGl0bGVQb3B1cCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkR3JpZHMoKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSByZXRvcm5hciBhIGxpc3RhXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG5hdmlnYXRlTGlzdChpZDogYW55ID0gbnVsbCkge1xyXG4gICAgaWYgKHRoaXMucG9wdXApIHtcclxuICAgICAgdGhpcy5keW5hbWljRGlhbG9nUmVmLmNsb3NlKGlkKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZGFkb3NUZWxhPy5yb3RhTGlzdGFyKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmRhZG9zVGVsYS5yb3RhTGlzdGFyXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5keW5hbWljRGlhbG9nUmVmKSB7XHJcbiAgICAgIHRoaXMuZHluYW1pY0RpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jb25maWd1cmVGb3JtKCk7XHJcblxyXG4gICAgdGhpcy5wb3B1cCA9IHRoaXMuZHluYW1pY0RpYWxvZ0NvbmZpZz8uZGF0YT8ucG9wdXAgfHwgZmFsc2U7XHJcblxyXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocGFyYW1zWydpZCddKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkRm9ybShwYXJhbXNbJ2lkJ10pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuZHluYW1pY0RpYWxvZ0NvbmZpZz8uZGF0YT8uaWQpIHtcclxuICAgICAgICB0aGlzLmxvYWRGb3JtKHRoaXMuZHluYW1pY0RpYWxvZ0NvbmZpZy5kYXRhLmlkKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzTmV3UmVnaXN0cnkgPSB0cnVlO1xyXG4gICAgICAgIC8vdGhpcy5kYWRvc1RlbGEudGl0dWxvRm9ybSA9IHRoaXMudGl0dWxvRm9ybSh0cnVlLCAnJyk7XHJcbiAgICAgICAgLy90aGlzLnNldFRpdGxlUG9wdXAoKTtcclxuICAgICAgICB0aGlzLmxvYWRHcmlkcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIHBhcmEgc2FsdmFyIGRhZG9zXHJcbiAgICogQHBhcmFtIG9icyAtIE9ic2VydmFibGUgcmVzcG9uc8OhdmVsIHBlbG8gc2FsdmFtZW50byBkb3MgZGFkb3NcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2F2ZURhdGEob2JzOiBPYnNlcnZhYmxlPGFueT4pIHtcclxuICAgIG9ic1xyXG4gICAgICAucGlwZSgoc3JjOiBPYnNlcnZhYmxlPGFueT4pID0+IHtcclxuICAgICAgICB0aGlzLmlzU2F2ZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBzcmMucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzU2F2ZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0U3VjY2VzcyhyZXMuaXRlbTJbMF0ubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlTGlzdChyZXMuaXRlbTEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmJhY2tlbmRFcnJvcihlKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gc2UgYXR1YWxpemEgbyB2YWxvciBkZSB1bSBjb21wb25lbnRlIGRvIGZvcm1Hcm91cFxyXG4gICAqIEBwYXJhbSBjb250cm9OYW1lIC0gTm9tZSBkbyBjb250cm9sZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbG9yIHBhcmEgYXR1YWxpemHDp8Ojb1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzZXRDb250cm9sVmFsdWUoY29udHJvTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICBGb3JtU2VydmljZS5zZXRDb250cm9sVmFsdWUodGhpcy5mb3JtR3JvdXAsIGNvbnRyb05hbWUsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEF0dWFsaXphIHZhbG9yZXMgZG9zIGNvbXBvbmVudGVzIGRvIGZvcm1Hcm91cFxyXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBWYWxvcmVzIHBhcmEgYXR1YWxpemHDp8Ojb1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKHZhbHVlczogYW55KSB7XHJcbiAgICB0aGlzLm9uU2V0Rm9ybVZhbHVlcyA9IHRydWU7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5vblNldEZvcm1WYWx1ZXMgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEF0dWFsaXphIG8gdmFsaWRhZG9yIGRlIHVtIGNvbXBvbmVudGUgZG8gZm9ybUdyb3VwXHJcbiAgICogQHBhcmFtIGNvbnRyb05hbWUgLSBOb21lIGRvIGNvbnRyb2xlXHJcbiAgICogQHBhcmFtIHZhbGlkYXRvcnMgLSBSZWdyYSBkZSB2YWxpZGHDp8Ojb1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzZXRWYWxpZGF0b3JzKGNvbnRyb05hbWU6IHN0cmluZywgdmFsaWRhdG9yczogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgbnVsbCkge1xyXG4gICAgRm9ybVNlcnZpY2Uuc2V0VmFsaWRhdG9ycyh0aGlzLmZvcm1Hcm91cCwgY29udHJvTmFtZSwgdmFsaWRhdG9ycyk7XHJcbiAgfVxyXG5cclxuICAvLyBwcml2YXRlIHNldFRpdGxlUG9wdXAoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5wb3B1cCkge1xyXG4gIC8vICAgICBpZiAodGhpcy5keW5hbWljRGlhbG9nQ29uZmlnKVxyXG4gIC8vICAgICAgIHRoaXMuZHluYW1pY0RpYWxvZ0NvbmZpZy5oZWFkZXIgPSB0aGlzLmRhZG9zVGVsYS50aXR1bG9Gb3JtO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJvdGVjdGVkIHRpdHVsb0Zvcm08VD4oaXNOZXc6IGJvb2xlYW4sIHByb3BlcnR5RGVzY3JpcHRvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAvLyAgIGlmIChpc05ldykge1xyXG4gIC8vICAgICByZXR1cm4gYCR7dGhpcy5kYWRvc1RlbGEubWFzY3VsaW5vID8gJ05vdm8nIDogJ05vdmEnfSAke3RoaXMuZGFkb3NUZWxhLm5vbWVDYWRhc3Ryb31gO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgZWxzZSBpZiAodGhpcy5pc1ZpZXcpIHtcclxuICAvLyAgICAgcmV0dXJuIGBWaXN1YWxpemHDp8OjbyAke3RoaXMuZGFkb3NUZWxhLm1hc2N1bGlubyA/ICdkbycgOiAnZGEnfSAke3RoaXMuZGFkb3NUZWxhLm5vbWVDYWRhc3Ryb306ICR7T2JqZWN0U2VydmljZS5nZXRQcm9wZXJ0eTxUPih0aGlzLnJlZ2lzdHJ5LCBwcm9wZXJ0eURlc2NyaXB0b24pfWA7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICByZXR1cm4gYEVkacOnw6NvICR7dGhpcy5kYWRvc1RlbGEubWFzY3VsaW5vID8gJ2RvJyA6ICdkYSd9ICR7dGhpcy5kYWRvc1RlbGEubm9tZUNhZGFzdHJvfTogJHtPYmplY3RTZXJ2aWNlLmdldFByb3BlcnR5PFQ+KHRoaXMucmVnaXN0cnksIHByb3BlcnR5RGVzY3JpcHRvbil9YDtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BhcmEgb3MgbcOpdG9kb3MgZGUgdmFsaWRhw6fDtWVzIGRvIGZvcm11bMOhcmlvXHJcbiAgICogQHJldHVybnMgLSBUcnVlL0ZhbHNlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRlRm9ybSgpOiBib29sZWFuIHtcclxuICAgIGxldCB2YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCAmJiB0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICB2YWxpZCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQWNjb3JkaW9uRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmludmFsaWRGb3JtKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kYWRvc1RlbGE/Lm1lbnNhZ2VtVmFsaWRhY2FvKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmRpYWxvZyh7XHJcbiAgICAgICAgICB0eXBlOiAnYWxlcnQnLFxyXG4gICAgICAgICAgbWVzc2FnZTogJ1ZlcmlmaXF1ZSBvcyBjYW1wb3Mgb2JyaWdhdMOzcmlvcy4nLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,67 @@
1
+ import { Component } from "@angular/core";
2
+ import { BaseComponentCrud } from "./base-component-crud";
3
+ import { TablePaginate } from "../components/table/table.paginate";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "primeng/dynamicdialog";
6
+ import * as i2 from "../services/notification.service";
7
+ import * as i3 from "@angular/router";
8
+ export class BaseComponentCrudList extends BaseComponentCrud {
9
+ constructor(dialogService, notificationService, router) {
10
+ super(dialogService, notificationService);
11
+ this.router = router;
12
+ this.totalRecords = 0;
13
+ this.actionsPageList = [];
14
+ }
15
+ ngOnInit() {
16
+ this.loadFilters();
17
+ this.configureTable();
18
+ // Tabela não configurada para paginação
19
+ if (!this.tableConfig.lazy)
20
+ this.loadTable(new TablePaginate());
21
+ }
22
+ /**
23
+ * Método que seta o registro selecionado na tabela
24
+ * @param event - Registro
25
+ */
26
+ activeItem(event) {
27
+ this.selectedItem = event;
28
+ }
29
+ /**
30
+ * Método que dispara o carregamento da tabela
31
+ * @param obs - Observable de carregamento dos dados
32
+ */
33
+ loadData(obs) {
34
+ obs
35
+ //.pipe(loading())
36
+ .subscribe({
37
+ next: (res) => {
38
+ this.totalRecords = res.item1;
39
+ this.dataSource = res.item2;
40
+ },
41
+ error: (e) => {
42
+ this.toastError(e);
43
+ },
44
+ });
45
+ }
46
+ /**
47
+ * Método que dispara a paginação
48
+ */
49
+ paginate(event) {
50
+ this.loadTable(event);
51
+ }
52
+ /**
53
+ * Método que dispara a atualização da página inteira
54
+ */
55
+ refresh() {
56
+ this.loadTable(new TablePaginate());
57
+ }
58
+ }
59
+ BaseComponentCrudList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: BaseComponentCrudList, deps: [{ token: i1.DialogService }, { token: i2.NotificationService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component });
60
+ BaseComponentCrudList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: BaseComponentCrudList, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true });
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: BaseComponentCrudList, decorators: [{
62
+ type: Component,
63
+ args: [{
64
+ template: ''
65
+ }]
66
+ }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.NotificationService }, { type: i3.Router }]; } });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21wb25lbnQtY3J1ZC1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2FwaS9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtY3J1ZC1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFJbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7OztBQVNuRSxNQUFNLE9BQWdCLHFCQUFzQixTQUFRLGlCQUFpQjtJQVFuRSxZQUNFLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUNqQyxNQUFjO1FBQ3JCLEtBQUssQ0FFRCxhQUFhLEVBQ2IsbUJBQW1CLENBQ3BCLENBQUM7UUFMRyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTnZCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLG9CQUFlLEdBQWlCLEVBQUUsQ0FBQztJQVduQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQThCRDs7O09BR0c7SUFDTyxVQUFVLENBQUMsS0FBVTtRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sUUFBUSxDQUFDLEdBQW9CO1FBQ3JDLEdBQUc7WUFDRCxrQkFBa0I7YUFDakIsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFBO1lBQzdCLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxRQUFRLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNPLE9BQU87UUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDOztrSEE5Rm1CLHFCQUFxQjtzR0FBckIscUJBQXFCLDJFQUYvQixFQUFFOzJGQUVRLHFCQUFxQjtrQkFIMUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsRUFBRTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCJwcmltZW5nL2R5bmFtaWNkaWFsb2dcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudENydWQgfSBmcm9tIFwiLi9iYXNlLWNvbXBvbmVudC1jcnVkXCI7XHJcbmltcG9ydCB7IFRhYmxlUGFnaW5hdGUgfSBmcm9tIFwiLi4vY29tcG9uZW50cy90YWJsZS90YWJsZS5wYWdpbmF0ZVwiO1xyXG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gXCIuLi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBBY3Rpb25JdGVtIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvdGFibGUvYWN0aW9uLWl0ZW1cIjtcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlOiAnJ1xyXG59KVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbXBvbmVudENydWRMaXN0IGV4dGVuZHMgQmFzZUNvbXBvbmVudENydWQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBkYXRhU291cmNlOiBhbnk7XHJcbiAgc2VsZWN0ZWRJdGVtOiBhbnk7XHJcbiAgdGFibGVDb25maWchOiBUYWJsZUNvbmZpZztcclxuICB0b3RhbFJlY29yZHM6IG51bWJlciA9IDA7XHJcbiAgYWN0aW9uc1BhZ2VMaXN0OiBBY3Rpb25JdGVtW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcikge1xyXG4gICAgc3VwZXJcclxuICAgICAgKFxyXG4gICAgICAgIGRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgbm90aWZpY2F0aW9uU2VydmljZVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmxvYWRGaWx0ZXJzKCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZVRhYmxlKCk7XHJcblxyXG4gICAgLy8gVGFiZWxhIG7Do28gY29uZmlndXJhZGEgcGFyYSBwYWdpbmHDp8Ojb1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlQ29uZmlnLmxhenkpXHJcbiAgICAgIHRoaXMubG9hZFRhYmxlKG5ldyBUYWJsZVBhZ2luYXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSBjb25maWd1cmHDp8OjbyBkYXMgdGFiZWxhcyBkbyBjb21wb25lbnRlIGRlIGxpc3RhXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgY29uZmlndXJlVGFibGUoKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSBlZGnDp8OjbyBkZSByZWdpc3Ryb3NcclxuICAgKiBAcGFyYW0gcmVnaXN0cnkgLSBSZWdpc3RybyBxdWUgZXN0w6Egc2VuZG8gZWRpdGFkb1xyXG4gICAqXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgZWRpdChyZWdpc3RyeTogYW55KTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSBjYXJyZWdhbWVudG8gZG9zIGZpbHRyb3MgZGEgdGVsYVxyXG4gICAqL1xyXG4gIGFic3RyYWN0IGxvYWRGaWx0ZXJzKCk6IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIHBhcmEgY2FycmVnYXIgYSB0YWJlbGEgZG8gY29tcG9uZW50ZSBkZSBsaXN0YVxyXG4gICAqIEBwYXJhbSB0YWJsZVBhZ2luYXRlIC0gQ2xhc3NlIGRvcyBkYWRvcyBkYSBwYWdpbmHDp8OjbyBkYSB0YWJlbGFcclxuICAgKi9cclxuICBhYnN0cmFjdCBsb2FkVGFibGUodGFibGVQYWdpbmF0ZTogVGFibGVQYWdpbmF0ZSk6IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIGFvIGNsaWNhciBubyBib3TDo28gZGUgbm92byByZWdpc3Ryb1xyXG4gICAqL1xyXG4gIGFic3RyYWN0IG5ld1JlZ2lzdHJ5KCk6IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gcXVlIHNldGEgbyByZWdpc3RybyBzZWxlY2lvbmFkbyBuYSB0YWJlbGFcclxuICAgKiBAcGFyYW0gZXZlbnQgLSBSZWdpc3Ryb1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhY3RpdmVJdGVtKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHF1ZSBkaXNwYXJhIG8gY2FycmVnYW1lbnRvIGRhIHRhYmVsYVxyXG4gICAqIEBwYXJhbSBvYnMgLSBPYnNlcnZhYmxlIGRlIGNhcnJlZ2FtZW50byBkb3MgZGFkb3NcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgbG9hZERhdGEob2JzOiBPYnNlcnZhYmxlPGFueT4pIHtcclxuICAgIG9ic1xyXG4gICAgICAvLy5waXBlKGxvYWRpbmcoKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHJlcy5pdGVtMTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHJlcy5pdGVtMlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0RXJyb3IoZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHF1ZSBkaXNwYXJhIGEgcGFnaW5hw6fDo29cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcGFnaW5hdGUoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkVGFibGUoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBxdWUgZGlzcGFyYSBhIGF0dWFsaXphw6fDo28gZGEgcMOhZ2luYSBpbnRlaXJhXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHJlZnJlc2goKSB7XHJcbiAgICB0aGlzLmxvYWRUYWJsZShuZXcgVGFibGVQYWdpbmF0ZSgpKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,65 @@
1
+ import { Component } from "@angular/core";
2
+ import { FormService } from "../services/form.service";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "primeng/dynamicdialog";
5
+ import * as i2 from "../services/notification.service";
6
+ export class BaseComponentCrud {
7
+ constructor(dialogService, notificationService) {
8
+ this.dialogService = dialogService;
9
+ this.notificationService = notificationService;
10
+ this.isReport = false;
11
+ this.itemsReport = [];
12
+ }
13
+ /**
14
+ * Fecha um relatório
15
+ */
16
+ closeReport() {
17
+ this.isReport = false;
18
+ }
19
+ /**
20
+ * Abre um form dialog
21
+ * @param componentType - Componente que será renderizado
22
+ * @param callBackFunction - Função de callback que deverá ser chamada após o fechamento do dialog
23
+ * @param paramsDialog - Parâmetros do dialog
24
+ */
25
+ openDialog(componentType, callBackFunction, paramsDialog) {
26
+ FormService.openDialog(this.dialogService, componentType, callBackFunction, paramsDialog);
27
+ }
28
+ /**
29
+ * Imprime um relatório na tela
30
+ * @param obs - Observable com o carregamento do relatório
31
+ */
32
+ printReportFilter(obs) {
33
+ obs
34
+ //.pipe(loading())
35
+ .subscribe({
36
+ next: (res) => {
37
+ this.itemsReport = res;
38
+ this.isReport = true;
39
+ },
40
+ error: (e) => {
41
+ this.toastError(e);
42
+ },
43
+ });
44
+ }
45
+ /**
46
+ * Exibe um toast com um erro
47
+ * @param err - Erro
48
+ */
49
+ toastError(err) {
50
+ if (err) {
51
+ if (err.message) {
52
+ this.notificationService.toastError(err.message);
53
+ }
54
+ }
55
+ }
56
+ }
57
+ BaseComponentCrud.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: BaseComponentCrud, deps: [{ token: i1.DialogService }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
58
+ BaseComponentCrud.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: BaseComponentCrud, selector: "ng-component", ngImport: i0, template: '', isInline: true });
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: BaseComponentCrud, decorators: [{
60
+ type: Component,
61
+ args: [{
62
+ template: ''
63
+ }]
64
+ }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.NotificationService }]; } });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21wb25lbnQtY3J1ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9hcGkvYmFzZS1jb21wb25lbnRzL2Jhc2UtY29tcG9uZW50LWNydWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLDBCQUEwQixDQUFDOzs7O0FBT3JFLE1BQU0sT0FBZ0IsaUJBQWlCO0lBS3JDLFlBQ1MsYUFBNEIsRUFDNUIsbUJBQXdDO1FBRHhDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFMMUMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixnQkFBVyxHQUFRLEVBQUUsQ0FBQztJQUs3QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLFVBQVUsQ0FBQyxhQUF3QixFQUFFLGdCQUEwQixFQUFFLFlBQTJCO1FBQ3BHLFdBQVcsQ0FBQyxVQUFVLENBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQ2xCLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsWUFBWSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGlCQUFpQixDQUFDLEdBQW9CO1FBQzlDLEdBQUc7WUFDRCxrQkFBa0I7YUFDakIsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO2dCQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUN2QixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFVBQVUsQ0FBQyxHQUFRO1FBQzNCLElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2xEO1NBQ0Y7SUFDSCxDQUFDOzs4R0EzRG1CLGlCQUFpQjtrR0FBakIsaUJBQWlCLG9EQUYzQixFQUFFOzJGQUVRLGlCQUFpQjtrQkFIdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsRUFBRTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSwgcGFyYW1zRGlhbG9nIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogJydcclxufSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDb21wb25lbnRDcnVkIHtcclxuXHJcbiAgcHVibGljIGlzUmVwb3J0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGl0ZW1zUmVwb3J0OiBhbnkgPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHB1YmxpYyBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZWNoYSB1bSByZWxhdMOzcmlvXHJcbiAgICovXHJcbiAgcHVibGljIGNsb3NlUmVwb3J0KCkge1xyXG4gICAgdGhpcy5pc1JlcG9ydCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWJyZSB1bSBmb3JtIGRpYWxvZ1xyXG4gICAqIEBwYXJhbSBjb21wb25lbnRUeXBlIC0gQ29tcG9uZW50ZSBxdWUgc2Vyw6EgcmVuZGVyaXphZG9cclxuICAgKiBAcGFyYW0gY2FsbEJhY2tGdW5jdGlvbiAtIEZ1bsOnw6NvIGRlIGNhbGxiYWNrIHF1ZSBkZXZlcsOhIHNlciBjaGFtYWRhIGFww7NzIG8gZmVjaGFtZW50byBkbyBkaWFsb2dcclxuICAgKiBAcGFyYW0gcGFyYW1zRGlhbG9nIC0gUGFyw6JtZXRyb3MgZG8gZGlhbG9nXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9wZW5EaWFsb2coY29tcG9uZW50VHlwZTogVHlwZTxhbnk+LCBjYWxsQmFja0Z1bmN0aW9uOiBGdW5jdGlvbiwgcGFyYW1zRGlhbG9nPzogcGFyYW1zRGlhbG9nKSB7XHJcbiAgICBGb3JtU2VydmljZS5vcGVuRGlhbG9nKFxyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgIGNvbXBvbmVudFR5cGUsXHJcbiAgICAgIGNhbGxCYWNrRnVuY3Rpb24sXHJcbiAgICAgIHBhcmFtc0RpYWxvZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXByaW1lIHVtIHJlbGF0w7NyaW8gbmEgdGVsYVxyXG4gICAqIEBwYXJhbSBvYnMgLSBPYnNlcnZhYmxlIGNvbSBvIGNhcnJlZ2FtZW50byBkbyByZWxhdMOzcmlvXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHByaW50UmVwb3J0RmlsdGVyKG9iczogT2JzZXJ2YWJsZTxhbnk+KSB7XHJcbiAgICBvYnNcclxuICAgICAgLy8ucGlwZShsb2FkaW5nKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtc1JlcG9ydCA9IHJlcztcclxuICAgICAgICAgIHRoaXMuaXNSZXBvcnQgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0RXJyb3IoZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGliZSB1bSB0b2FzdCBjb20gdW0gZXJyb1xyXG4gICAqIEBwYXJhbSBlcnIgLSBFcnJvXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHRvYXN0RXJyb3IoZXJyOiBhbnkpIHtcclxuICAgIGlmIChlcnIpIHtcclxuICAgICAgaWYgKGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0RXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,102 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { ObjectService } from './object.service';
3
+ import * as i0 from "@angular/core";
4
+ export class FormService {
5
+ static disableControl(formGroup, controName) {
6
+ formGroup?.controls[controName]?.disable();
7
+ }
8
+ static disableAndClearControl(formGroup, controName, value) {
9
+ this.disableControl(formGroup, controName);
10
+ this.setControlValue(formGroup, controName, null || value);
11
+ }
12
+ static enableControl(formGroup, controName) {
13
+ formGroup?.controls[controName]?.enable();
14
+ }
15
+ static getFormValue(formGroup, controName) {
16
+ return formGroup?.controls[controName]?.value;
17
+ }
18
+ static hasControlError(formGroup, control, errorCode) {
19
+ const formControl = formGroup.get(control);
20
+ let hasError = false;
21
+ if (!formControl)
22
+ return false;
23
+ if (errorCode)
24
+ hasError = formControl.hasError(errorCode);
25
+ else
26
+ hasError = formControl.errors ? true : false;
27
+ return hasError && formControl.touched;
28
+ }
29
+ static invalidForm(formGroup, notification) {
30
+ const keys = Object.keys(formGroup.getRawValue());
31
+ keys.forEach(k => {
32
+ const control = formGroup.controls[k];
33
+ if (notification) {
34
+ if (notification?.item2) {
35
+ const item = ObjectService.findObject(notification.item2, 'property', k);
36
+ if (item)
37
+ control.setErrors({ backendError: true, erroMessage: item.message });
38
+ }
39
+ else {
40
+ const item = ObjectService.findObject(notification, 'key', k);
41
+ if (item)
42
+ control.setErrors({ backendError: true, erroMessage: item.message });
43
+ }
44
+ }
45
+ if (!control.valid) {
46
+ control.markAsTouched();
47
+ }
48
+ });
49
+ }
50
+ static openDialog(dialogService, componentType, callBackFunction, paramsDialog) {
51
+ const ref = dialogService.open(componentType, {
52
+ closable: paramsDialog?.closable || false,
53
+ maximizable: paramsDialog?.maximizable || true,
54
+ height: paramsDialog?.height || 'auto',
55
+ width: paramsDialog?.width,
56
+ styleClass: paramsDialog?.styleClass,
57
+ data: { id: paramsDialog?.id, popup: paramsDialog?.popup || true }
58
+ });
59
+ ref.onClose.subscribe((data) => {
60
+ if (data)
61
+ callBackFunction(data);
62
+ });
63
+ }
64
+ // static openDialog(
65
+ // dialogService: DialogService,
66
+ // componentType: Type<any>,
67
+ // callBackFunction: Function,
68
+ // id?: any,
69
+ // width?: string,
70
+ // height?: string
71
+ // ) {
72
+ // const ref = dialogService.open(componentType, {
73
+ // width: width,
74
+ // height: height,
75
+ // closable: false,
76
+ // maximizable: true,
77
+ // data: { id: id, popup: true }
78
+ // });
79
+ // ref.onClose.subscribe((data: any) => {
80
+ // if (data) callBackFunction(data);
81
+ // });
82
+ // }
83
+ static setControlValue(formGroup, controName, value) {
84
+ formGroup?.controls[controName]?.setValue(value);
85
+ }
86
+ static setValidators(formGroup, controName, validators) {
87
+ formGroup?.controls[controName]?.setValidators(validators);
88
+ formGroup?.controls[controName]?.updateValueAndValidity();
89
+ }
90
+ static clearValidators(formGroup, controName) {
91
+ formGroup?.controls[controName]?.updateValueAndValidity();
92
+ }
93
+ }
94
+ FormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
95
+ FormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FormService, providedIn: 'root' });
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FormService, decorators: [{
97
+ type: Injectable,
98
+ args: [{
99
+ providedIn: 'root'
100
+ }]
101
+ }] });
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2FwaS9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBZ0JqRCxNQUFNLE9BQU8sV0FBVztJQUV0QixNQUFNLENBQUMsY0FBYyxDQUFDLFNBQW9CLEVBQUUsVUFBa0I7UUFDNUQsU0FBUyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFNBQW9CLEVBQUUsVUFBa0IsRUFBRSxLQUFXO1FBQ2pGLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBb0IsRUFBRSxVQUFrQjtRQUMzRCxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFJLFNBQW9CLEVBQUUsVUFBa0I7UUFDN0QsT0FBVSxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFvQixFQUFFLE9BQWUsRUFBRSxTQUFrQjtRQUM5RSxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFD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UUFBUTtJQUNSLElBQUk7SUFFSixNQUFNLENBQUMsZUFBZSxDQUFDLFNBQW9CLEVBQUUsVUFBa0IsRUFBRSxLQUFVO1FBQ3pFLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQW9CLEVBQUUsVUFBa0IsRUFBRSxVQUE4QztRQUMzRyxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBb0IsRUFBRSxVQUFrQjtRQUM3RCxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUM7SUFDNUQsQ0FBQzs7d0dBekdVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9iamVjdFNlcnZpY2UgfSBmcm9tICcuL29iamVjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIHBhcmFtc0RpYWxvZyB7XHJcbiAgaWQ/OiBhbnk7XHJcbiAgY2xvc2FibGU/OiBib29sZWFuO1xyXG4gIG1heGltaXphYmxlPzogYm9vbGVhbjtcclxuICBwb3B1cD86IGJvb2xlYW47XHJcbiAgaGVpZ2h0Pzogc3RyaW5nO1xyXG4gIHdpZHRoPzogc3RyaW5nO1xyXG4gIHN0eWxlQ2xhc3M/OiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1TZXJ2aWNlIHtcclxuXHJcbiAgc3RhdGljIGRpc2FibGVDb250cm9sKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjb250cm9OYW1lOiBzdHJpbmcpIHtcclxuICAgIGZvcm1Hcm91cD8uY29udHJvbHNbY29udHJvTmFtZV0/LmRpc2FibGUoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkaXNhYmxlQW5kQ2xlYXJDb250cm9sKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjb250cm9OYW1lOiBzdHJpbmcsIHZhbHVlPzogYW55KSB7XHJcbiAgICB0aGlzLmRpc2FibGVDb250cm9sKGZvcm1Hcm91cCwgY29udHJvTmFtZSk7XHJcbiAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShmb3JtR3JvdXAsIGNvbnRyb05hbWUsIG51bGwgfHwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGVuYWJsZUNvbnRyb2woZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGNvbnRyb05hbWU6IHN0cmluZykge1xyXG4gICAgZm9ybUdyb3VwPy5jb250cm9sc1tjb250cm9OYW1lXT8uZW5hYmxlKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Rm9ybVZhbHVlPFQ+KGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjb250cm9OYW1lOiBzdHJpbmcpOiBUIHtcclxuICAgIHJldHVybiA8VD5mb3JtR3JvdXA/LmNvbnRyb2xzW2NvbnRyb05hbWVdPy52YWx1ZTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBoYXNDb250cm9sRXJyb3IoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGNvbnRyb2w6IHN0cmluZywgZXJyb3JDb2RlPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoY29udHJvbCk7XHJcbiAgICBsZXQgaGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIWZvcm1Db250cm9sKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoZXJyb3JDb2RlKSBoYXNFcnJvciA9IGZvcm1Db250cm9sLmhhc0Vycm9yKGVycm9yQ29kZSk7XHJcbiAgICBlbHNlIGhhc0Vycm9yID0gZm9ybUNvbnRyb2wuZXJyb3JzID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiBoYXNFcnJvciAmJiBmb3JtQ29udHJvbC50b3VjaGVkO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGludmFsaWRGb3JtKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBub3RpZmljYXRpb24/OiBhbnkpIHtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSk7XHJcblxyXG4gICAga2V5cy5mb3JFYWNoKGsgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2tdO1xyXG5cclxuICAgICAgaWYgKG5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgIGlmIChub3RpZmljYXRpb24/Lml0ZW0yKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gT2JqZWN0U2VydmljZS5maW5kT2JqZWN0KG5vdGlmaWNhdGlvbi5pdGVtMiwgJ3Byb3BlcnR5Jywgayk7XHJcbiAgICAgICAgICBpZiAoaXRlbSkgY29udHJvbC5zZXRFcnJvcnMoeyBiYWNrZW5kRXJyb3I6IHRydWUsIGVycm9NZXNzYWdlOiBpdGVtLm1lc3NhZ2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IE9iamVjdFNlcnZpY2UuZmluZE9iamVjdChub3RpZmljYXRpb24sICdrZXknLCBrKTtcclxuICAgICAgICAgIGlmIChpdGVtKSBjb250cm9sLnNldEVycm9ycyh7IGJhY2tlbmRFcnJvcjogdHJ1ZSwgZXJyb01lc3NhZ2U6IGl0ZW0ubWVzc2FnZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghY29udHJvbC52YWxpZCkge1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBvcGVuRGlhbG9nKFxyXG4gICAgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIGNvbXBvbmVudFR5cGU6IFR5cGU8YW55PixcclxuICAgIGNhbGxCYWNrRnVuY3Rpb246IEZ1bmN0aW9uLFxyXG4gICAgcGFyYW1zRGlhbG9nPzogcGFyYW1zRGlhbG9nXHJcbiAgKSB7XHJcbiAgICBjb25zdCByZWYgPSBkaWFsb2dTZXJ2aWNlLm9wZW4oY29tcG9uZW50VHlwZSwge1xyXG4gICAgICBjbG9zYWJsZTogcGFyYW1zRGlhbG9nPy5jbG9zYWJsZSB8fCBmYWxzZSxcclxuICAgICAgbWF4aW1pemFibGU6IHBhcmFtc0RpYWxvZz8ubWF4aW1pemFibGUgfHwgdHJ1ZSxcclxuICAgICAgaGVpZ2h0OiBwYXJhbXNEaWFsb2c/LmhlaWdodCB8fCAnYXV0bycsXHJcbiAgICAgIHdpZHRoOiBwYXJhbXNEaWFsb2c/LndpZHRoLFxyXG4gICAgICBzdHlsZUNsYXNzOiBwYXJhbXNEaWFsb2c/LnN0eWxlQ2xhc3MsXHJcbiAgICAgIGRhdGE6IHsgaWQ6IHBhcmFtc0RpYWxvZz8uaWQsIHBvcHVwOiBwYXJhbXNEaWFsb2c/LnBvcHVwIHx8IHRydWUgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIGNhbGxCYWNrRnVuY3Rpb24oZGF0YSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIHN0YXRpYyBvcGVuRGlhbG9nKFxyXG4gIC8vICAgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAvLyAgIGNvbXBvbmVudFR5cGU6IFR5cGU8YW55PixcclxuICAvLyAgIGNhbGxCYWNrRnVuY3Rpb246IEZ1bmN0aW9uLFxyXG4gIC8vICAgaWQ/OiBhbnksXHJcbiAgLy8gICB3aWR0aD86IHN0cmluZyxcclxuICAvLyAgIGhlaWdodD86IHN0cmluZ1xyXG4gIC8vICkge1xyXG4gIC8vICAgY29uc3QgcmVmID0gZGlhbG9nU2VydmljZS5vcGVuKGNvbXBvbmVudFR5cGUsIHtcclxuICAvLyAgICAgd2lkdGg6IHdpZHRoLFxyXG4gIC8vICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAvLyAgICAgY2xvc2FibGU6IGZhbHNlLFxyXG4gIC8vICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAvLyAgICAgZGF0YTogeyBpZDogaWQsIHBvcHVwOiB0cnVlIH1cclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgLy8gICAgIGlmIChkYXRhKSBjYWxsQmFja0Z1bmN0aW9uKGRhdGEpO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICBzdGF0aWMgc2V0Q29udHJvbFZhbHVlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjb250cm9OYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGZvcm1Hcm91cD8uY29udHJvbHNbY29udHJvTmFtZV0/LnNldFZhbHVlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXRWYWxpZGF0b3JzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjb250cm9OYW1lOiBzdHJpbmcsIHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IG51bGwpIHtcclxuICAgIGZvcm1Hcm91cD8uY29udHJvbHNbY29udHJvTmFtZV0/LnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XHJcbiAgICBmb3JtR3JvdXA/LmNvbnRyb2xzW2NvbnRyb05hbWVdPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2xlYXJWYWxpZGF0b3JzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjb250cm9OYW1lOiBzdHJpbmcpIHtcclxuICAgIGZvcm1Hcm91cD8uY29udHJvbHNbY29udHJvTmFtZV0/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcbn1cclxuIl19