@stiunb/unb-lib-components 18.0.22
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 +18 -0
- package/esm2022/lib/services/unb-auth.service.mjs +57 -0
- package/esm2022/lib/unb-mensagem/unb-mensagem.component.mjs +82 -0
- package/esm2022/lib/unb-mensagem/unb-mensagem.module.mjs +26 -0
- package/esm2022/lib/unb-mensagem/unb-mensagem.service.mjs +61 -0
- package/esm2022/lib/unb-mensagem/unb-message.model.mjs +3 -0
- package/esm2022/lib/unb-nav-bar/unb-nav-bar.component.mjs +53 -0
- package/esm2022/lib/unb-nav-bar/unb-nav-bar.module.mjs +52 -0
- package/esm2022/lib/unb-pessoa/pessoa-tabelas-apoio.mjs +30 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.mjs +122 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.mjs +140 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.mjs +144 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.mjs +139 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.mjs +166 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.mjs +5 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.mjs +5 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-escolaridade.model.mjs +6 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-estado-civil.model.mjs +6 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-municipio.mjs +3 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-pais.mjs +3 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-raca-cor.mjs +3 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-telefone.model.mjs +9 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.mjs +6 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +229 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.mjs +102 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.mjs +140 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa.module.mjs +128 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +157 -0
- package/esm2022/lib/unb-pessoa/unb-tipo-pessoa.enum.mjs +7 -0
- package/esm2022/lib/unb-usuario/oidc-decoded-token.mjs +2 -0
- package/esm2022/lib/unb-usuario/oidc-user-data.mjs +2 -0
- package/esm2022/lib/unb-usuario/unb-usuario.component.mjs +38 -0
- package/esm2022/lib/unb-usuario/unb-usuario.model.mjs +9 -0
- package/esm2022/lib/unb-usuario/unb-usuario.module.mjs +65 -0
- package/esm2022/lib/utils/unb-utils.mjs +76 -0
- package/esm2022/public-api.mjs +34 -0
- package/esm2022/unb-lib-components.mjs +5 -0
- package/fesm2022/unb-lib-components.mjs +1923 -0
- package/fesm2022/unb-lib-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/services/unb-auth.service.d.ts +17 -0
- package/lib/unb-mensagem/unb-mensagem.component.d.ts +35 -0
- package/lib/unb-mensagem/unb-mensagem.module.d.ts +10 -0
- package/lib/unb-mensagem/unb-mensagem.service.d.ts +36 -0
- package/lib/unb-mensagem/unb-message.model.d.ts +6 -0
- package/lib/unb-nav-bar/unb-nav-bar.component.d.ts +19 -0
- package/lib/unb-nav-bar/unb-nav-bar.module.d.ts +16 -0
- package/lib/unb-pessoa/pessoa-tabelas-apoio.d.ts +5 -0
- package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.d.ts +34 -0
- package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.d.ts +31 -0
- package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.d.ts +36 -0
- package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.d.ts +29 -0
- package/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.d.ts +56 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.d.ts +13 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.d.ts +22 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-escolaridade.model.d.ts +6 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-estado-civil.model.d.ts +6 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-municipio.d.ts +8 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-pais.d.ts +7 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-raca-cor.d.ts +4 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-telefone.model.d.ts +17 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.d.ts +69 -0
- package/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.d.ts +39 -0
- package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.d.ts +34 -0
- package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.d.ts +31 -0
- package/lib/unb-pessoa/unb-pessoa.module.d.ts +35 -0
- package/lib/unb-pessoa/unb-pessoa.service.d.ts +59 -0
- package/lib/unb-pessoa/unb-tipo-pessoa.enum.d.ts +5 -0
- package/lib/unb-usuario/oidc-decoded-token.d.ts +29 -0
- package/lib/unb-usuario/oidc-user-data.d.ts +9 -0
- package/lib/unb-usuario/unb-usuario.component.d.ts +17 -0
- package/lib/unb-usuario/unb-usuario.model.d.ts +6 -0
- package/lib/unb-usuario/unb-usuario.module.d.ts +18 -0
- package/lib/utils/unb-utils.d.ts +7 -0
- package/package.json +28 -0
- package/public-api.d.ts +28 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { UnbPessoaEmail } from '../unb-pessoa-models/unb-pessoa-email.model';
|
|
3
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/material/snack-bar";
|
|
6
|
+
import * as i2 from "../unb-pessoa.service";
|
|
7
|
+
import * as i3 from "@angular/material/dialog";
|
|
8
|
+
import * as i4 from "@angular/common";
|
|
9
|
+
import * as i5 from "@angular/forms";
|
|
10
|
+
import * as i6 from "@angular/material/button";
|
|
11
|
+
import * as i7 from "@angular/material/form-field";
|
|
12
|
+
import * as i8 from "@angular/material/input";
|
|
13
|
+
import * as i9 from "@angular/material/select";
|
|
14
|
+
import * as i10 from "@angular/material/core";
|
|
15
|
+
export class UnbPessoaEmailFormComponent {
|
|
16
|
+
constructor(snackBar, service, dialogRef, data) {
|
|
17
|
+
this.snackBar = snackBar;
|
|
18
|
+
this.service = service;
|
|
19
|
+
this.dialogRef = dialogRef;
|
|
20
|
+
this.data = data;
|
|
21
|
+
this.email = new UnbPessoaEmail();
|
|
22
|
+
this.listaTipoEmail = [];
|
|
23
|
+
this.email = JSON.parse(JSON.stringify(data.email)); // O e-mail específico para edição
|
|
24
|
+
// Verifique se a lista de e-mails foi passada e atribua-a
|
|
25
|
+
if (data.emailsList) {
|
|
26
|
+
this.emailsList = JSON.parse(JSON.stringify(data.emailsList)); // Faça uma cópia profunda se for manipular
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
this.emailsList = []; // Inicialize como vazio se não for passada
|
|
30
|
+
}
|
|
31
|
+
if (!this.email) {
|
|
32
|
+
this.email = new UnbPessoaEmail();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
this.tipoEmail = this.service.getTipoEmail();
|
|
37
|
+
// Inscreve para guardar a lista em uma variável comum
|
|
38
|
+
this.tipoEmail.subscribe(lista => {
|
|
39
|
+
this.listaTipoEmail = lista;
|
|
40
|
+
// Se já tiver tipoEmailCodigo, preenche o nome correspondente
|
|
41
|
+
if (this.email.tipoEmailCodigo != null) {
|
|
42
|
+
const tipoEncontrado = lista.find(t => t.codigo === this.email.tipoEmailCodigo);
|
|
43
|
+
if (tipoEncontrado) {
|
|
44
|
+
this.email.tipo = tipoEncontrado.denominacao;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if (this.email.tipo) {
|
|
48
|
+
const tipoEncontrado = lista.find(t => t.denominacao?.toLowerCase() === this.email.tipo?.toLowerCase());
|
|
49
|
+
if (tipoEncontrado) {
|
|
50
|
+
this.email.tipoEmailCodigo = tipoEncontrado.codigo;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
salvar(form) {
|
|
56
|
+
if (form.invalid) {
|
|
57
|
+
this.openSnackBar('Existem erros no formulário, por favor, verificar.');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (this.validar(this.email) == false)
|
|
61
|
+
return;
|
|
62
|
+
this.emailSalvo = this.email;
|
|
63
|
+
this.salvarclose();
|
|
64
|
+
}
|
|
65
|
+
compararTipos(t1, t2) {
|
|
66
|
+
return t1 && t2 && t1 === t2;
|
|
67
|
+
}
|
|
68
|
+
onTipoSelecionado(codigoSelecionado) {
|
|
69
|
+
const tipoSelecionado = this.listaTipoEmail.find(t => t.codigo === codigoSelecionado);
|
|
70
|
+
if (tipoSelecionado) {
|
|
71
|
+
this.email.tipo = tipoSelecionado.denominacao;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Valida o objeto de e-mail.
|
|
76
|
+
* Retorna true se o e-mail for válido, false caso contrário.
|
|
77
|
+
*/
|
|
78
|
+
validar(emailToValidate) {
|
|
79
|
+
// 1. Validação de campo obrigatório
|
|
80
|
+
if (!emailToValidate.email || emailToValidate.email.trim() === '') {
|
|
81
|
+
this.openSnackBar("E-mail é um campo obrigatório.");
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
// 2. Validação de formato de e-mail
|
|
85
|
+
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
|
86
|
+
if (!emailRegex.test(emailToValidate.email)) {
|
|
87
|
+
this.openSnackBar("Digite um E-mail válido.");
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
// 3. Validação de e-mail duplicado na lista existente
|
|
91
|
+
// Filtra a lista para excluir o próprio e-mail que está sendo editado (se ele tiver um 'codigo')
|
|
92
|
+
const isDuplicate = this.emailsList.some(existingEmail => existingEmail.email?.toLowerCase() === emailToValidate.email?.toLowerCase() &&
|
|
93
|
+
existingEmail.codigo !== emailToValidate.codigo // Ignora o próprio e-mail se estiver sendo editado
|
|
94
|
+
);
|
|
95
|
+
if (isDuplicate) {
|
|
96
|
+
this.openSnackBar("Este e-mail já existe na lista.");
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
close() {
|
|
102
|
+
this.dialogRef.close(null);
|
|
103
|
+
}
|
|
104
|
+
salvarclose() {
|
|
105
|
+
this.dialogRef.close(this.emailSalvo);
|
|
106
|
+
}
|
|
107
|
+
openSnackBar(message) {
|
|
108
|
+
this.snackBar.open(message, 'x', {
|
|
109
|
+
duration: 5000,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaEmailFormComponent, deps: [{ token: i1.MatSnackBar }, { token: i2.UnBPessoaService }, { token: i3.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
113
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaEmailFormComponent, selector: "lib-unb-pessoa-email-form", ngImport: i0, template: "<h1 mat-dialog-title>Cadastro de E-mail</h1>\r\n<form (ngSubmit)=\"salvar(form)\" #form=\"ngForm\">\r\n <mat-dialog-content>\r\n <div class=\"form-container\">\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>E-mail</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"email.email\" name=\"emailValue\" #emailValue=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"email.tipoEmailCodigo\" [compareWith]=\"compararTipos\" name=\"tipoEmailCodigo\" (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of tipoEmail | async\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"close()\">Fechar</button>\r\n <button mat-flat-button type=\"submit\" color=\"primary\">Salvar</button>\r\n </mat-dialog-actions>\r\n</form>", styles: [".card-actions-buttons{display:flex;gap:5px;flex-wrap:wrap}.form-container{display:flex;flex-wrap:wrap;column-gap:10px;margin:10px}@media (max-width: 1000px){.form-container{flex-direction:column;gap:5px}}.break{flex-basis:100%;height:0}.form-5{flex:1 1 5%}.inline-table-container{display:flex;align-items:center;justify-content:space-between;padding:5px}@media (max-width: 600px){.form-5,.form-10,.form-15{flex:1 1 100%}}.form-10{flex:1 1 10%}.form-15{flex:1 1 15%}.form-20{flex:1 1 20%}.form-25{flex:1 1 25%}.form-30{flex:1 1 30%}.form-35{flex:1 1 35%}.form-40{flex:1 1 40%}.form-45{flex:1 1 45%}.form-50{flex:1 1 50%}.form-60{flex:1 1 60%}.form-70{flex:1 1 70%}.form-80{flex:1 1 80%}.form-100{flex:1 1 100%;min-width:250px}.botoes-container{display:flex;gap:5px}@media (max-width: 600px){.botoes-container{margin-bottom:10px}.botoes-container button{flex:1;max-width:50%}}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
|
|
114
|
+
}
|
|
115
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaEmailFormComponent, decorators: [{
|
|
116
|
+
type: Component,
|
|
117
|
+
args: [{ standalone: false, selector: 'lib-unb-pessoa-email-form', template: "<h1 mat-dialog-title>Cadastro de E-mail</h1>\r\n<form (ngSubmit)=\"salvar(form)\" #form=\"ngForm\">\r\n <mat-dialog-content>\r\n <div class=\"form-container\">\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>E-mail</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"email.email\" name=\"emailValue\" #emailValue=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"email.tipoEmailCodigo\" [compareWith]=\"compararTipos\" name=\"tipoEmailCodigo\" (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of tipoEmail | async\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"close()\">Fechar</button>\r\n <button mat-flat-button type=\"submit\" color=\"primary\">Salvar</button>\r\n </mat-dialog-actions>\r\n</form>", styles: [".card-actions-buttons{display:flex;gap:5px;flex-wrap:wrap}.form-container{display:flex;flex-wrap:wrap;column-gap:10px;margin:10px}@media (max-width: 1000px){.form-container{flex-direction:column;gap:5px}}.break{flex-basis:100%;height:0}.form-5{flex:1 1 5%}.inline-table-container{display:flex;align-items:center;justify-content:space-between;padding:5px}@media (max-width: 600px){.form-5,.form-10,.form-15{flex:1 1 100%}}.form-10{flex:1 1 10%}.form-15{flex:1 1 15%}.form-20{flex:1 1 20%}.form-25{flex:1 1 25%}.form-30{flex:1 1 30%}.form-35{flex:1 1 35%}.form-40{flex:1 1 40%}.form-45{flex:1 1 45%}.form-50{flex:1 1 50%}.form-60{flex:1 1 60%}.form-70{flex:1 1 70%}.form-80{flex:1 1 80%}.form-100{flex:1 1 100%;min-width:250px}.botoes-container{display:flex;gap:5px}@media (max-width: 600px){.botoes-container{margin-bottom:10px}.botoes-container button{flex:1;max-width:50%}}\n"] }]
|
|
118
|
+
}], ctorParameters: () => [{ type: i1.MatSnackBar }, { type: i2.UnBPessoaService }, { type: i3.MatDialogRef }, { type: undefined, decorators: [{
|
|
119
|
+
type: Inject,
|
|
120
|
+
args: [MAT_DIALOG_DATA]
|
|
121
|
+
}] }] });
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbWFpbC1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVtYWlsLWZvcm0vdW5iLXBlc3NvYS1lbWFpbC1mb3JtLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVtYWlsLWZvcm0vdW5iLXBlc3NvYS1lbWFpbC1mb3JtLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUQsT0FBTyxFQUFFLGNBQWMsRUFBc0IsTUFBTSw2Q0FBNkMsQ0FBQztBQUVqRyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7QUFVekUsTUFBTSxPQUFPLDJCQUEyQjtJQU90QyxZQUFvQixRQUFxQixFQUFVLE9BQXlCLEVBQVMsU0FBb0QsRUFBa0MsSUFBUztRQUFoSyxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBUyxjQUFTLEdBQVQsU0FBUyxDQUEyQztRQUFrQyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBTHBMLFVBQUssR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBRzdCLG1CQUFjLEdBQXlCLEVBQUUsQ0FBQztRQUd4QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztRQUV2RiwwREFBMEQ7UUFDMUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FB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LHlHQU82RyxlQUFlO2tHQVB2SiwyQkFBMkIsaUVDZnhDLDBzQ0F5Qk87OzJGRFZNLDJCQUEyQjtrQkFOdkMsU0FBUztpQ0FDSSxLQUFLLFlBQ1AsMkJBQTJCOzswQkFXdUcsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW1haWwsIFVuYlBlc3NvYUVtYWlsVGlwbyB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZW1haWwubW9kZWwnO1xyXG5pbXBvcnQgeyBVbkJQZXNzb2FTZXJ2aWNlIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgc2VsZWN0b3I6ICdsaWItdW5iLXBlc3NvYS1lbWFpbC1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdW5iLXBlc3NvYS1lbWFpbC1mb3JtLmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91bmItcGVzc29hLWVtYWlsLWZvcm0uY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVW5iUGVzc29hRW1haWxGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBlbWFpbFNhbHZvITogVW5iUGVzc29hRW1haWw7XHJcbiAgZW1haWwgPSBuZXcgVW5iUGVzc29hRW1haWwoKTtcclxuICBlbWFpbHNMaXN0OiBVbmJQZXNzb2FFbWFpbFtdO1xyXG4gIHRpcG9FbWFpbCE6IE9ic2VydmFibGU8VW5iUGVzc29hRW1haWxUaXBvW10+O1xyXG4gIGxpc3RhVGlwb0VtYWlsOiBVbmJQZXNzb2FFbWFpbFRpcG9bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhciwgcHJpdmF0ZSBzZXJ2aWNlOiBVbkJQZXNzb2FTZXJ2aWNlLCBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VW5iUGVzc29hRW1haWxGb3JtQ29tcG9uZW50PiwgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuZW1haWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEuZW1haWwpKTsgLy8gTyBlLW1haWwgZXNwZWPDrWZpY28gcGFyYSBlZGnDp8Ojb1xyXG5cclxuICAgIC8vIFZlcmlmaXF1ZSBzZSBhIGxpc3RhIGRlIGUtbWFpbHMgZm9pIHBhc3NhZGEgZSBhdHJpYnVhLWFcclxuICAgIGlmIChkYXRhLmVtYWlsc0xpc3QpIHtcclxuICAgICAgdGhpcy5lbWFpbHNMaXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhLmVtYWlsc0xpc3QpKTsgLy8gRmHDp2EgdW1hIGPDs3BpYSBwcm9mdW5kYSBzZSBmb3IgbWFuaXB1bGFyXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVtYWlsc0xpc3QgPSBbXTsgLy8gSW5pY2lhbGl6ZSBjb21vIHZhemlvIHNlIG7Do28gZm9yIHBhc3NhZGFcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZW1haWwpIHtcclxuICAgICAgdGhpcy5lbWFpbCA9IG5ldyBVbmJQZXNzb2FFbWFpbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRpcG9FbWFpbCA9IHRoaXMuc2VydmljZS5nZXRUaXBvRW1haWwoKTtcclxuICAgIC8vIEluc2NyZXZlIHBhcmEgZ3VhcmRhciBhIGxpc3RhIGVtIHVtYSB2YXJpw6F2ZWwgY29tdW1cclxuICAgIHRoaXMudGlwb0VtYWlsLnN1YnNjcmliZShsaXN0YSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdGFUaXBvRW1haWwgPSBsaXN0YTtcclxuXHJcbiAgICAgIC8vIFNlIGrDoSB0aXZlciB0aXBvRW1haWxDb2RpZ28sIHByZWVuY2hlIG8gbm9tZSBjb3JyZXNwb25kZW50ZVxyXG4gICAgICBpZiAodGhpcy5lbWFpbC50aXBvRW1haWxDb2RpZ28gIT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IHRpcG9FbmNvbnRyYWRvID0gbGlzdGEuZmluZCh0ID0+IHQuY29kaWdvID09PSB0aGlzLmVtYWlsLnRpcG9FbWFpbENvZGlnbyk7XHJcbiAgICAgICAgaWYgKHRpcG9FbmNvbnRyYWRvKSB7XHJcbiAgICAgICAgICB0aGlzLmVtYWlsLnRpcG8gPSB0aXBvRW5jb250cmFkby5kZW5vbWluYWNhbztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5lbWFpbC50aXBvKSB7XHJcbiAgICAgICAgY29uc3QgdGlwb0VuY29udHJhZG8gPSBsaXN0YS5maW5kKFxyXG4gICAgICAgICAgdCA9PiB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLmVtYWlsLnRpcG8/LnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aXBvRW5jb250cmFkbykge1xyXG4gICAgICAgICAgdGhpcy5lbWFpbC50aXBvRW1haWxDb2RpZ28gPSB0aXBvRW5jb250cmFkby5jb2RpZ28hO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYWx2YXIoZm9ybTogTmdGb3JtKSB7XHJcbiAgICBpZiAoZm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMub3BlblNuYWNrQmFyKCdFeGlzdGVtIGVycm9zIG5vIGZvcm11bMOhcmlvLCBwb3IgZmF2b3IsIHZlcmlmaWNhci4nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmFsaWRhcih0aGlzLmVtYWlsKSA9PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZW1haWxTYWx2byA9IHRoaXMuZW1haWw7XHJcbiAgICB0aGlzLnNhbHZhcmNsb3NlKClcclxuICB9XHJcblxyXG4gIGNvbXBhcmFyVGlwb3ModDE6IGFueSwgdDI6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHQxICYmIHQyICYmIHQxID09PSB0MjtcclxuICB9XHJcblxyXG4gIG9uVGlwb1NlbGVjaW9uYWRvKGNvZGlnb1NlbGVjaW9uYWRvOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHRpcG9TZWxlY2lvbmFkbyA9IHRoaXMubGlzdGFUaXBvRW1haWwuZmluZCh0ID0+IHQuY29kaWdvID09PSBjb2RpZ29TZWxlY2lvbmFkbyk7XHJcbiAgICBpZiAodGlwb1NlbGVjaW9uYWRvKSB7XHJcbiAgICAgIHRoaXMuZW1haWwudGlwbyA9IHRpcG9TZWxlY2lvbmFkby5kZW5vbWluYWNhbztcclxuICAgIH1cclxuICB9XHJcbiAgXHJcblxyXG4gLyoqXHJcbiAgICogVmFsaWRhIG8gb2JqZXRvIGRlIGUtbWFpbC5cclxuICAgKiBSZXRvcm5hIHRydWUgc2UgbyBlLW1haWwgZm9yIHbDoWxpZG8sIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgKi9cclxuICB2YWxpZGFyKGVtYWlsVG9WYWxpZGF0ZTogVW5iUGVzc29hRW1haWwpOiBib29sZWFuIHtcclxuICAgIC8vIDEuIFZhbGlkYcOnw6NvIGRlIGNhbXBvIG9icmlnYXTDs3Jpb1xyXG4gICAgaWYgKCFlbWFpbFRvVmFsaWRhdGUuZW1haWwgfHwgZW1haWxUb1ZhbGlkYXRlLmVtYWlsLnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgdGhpcy5vcGVuU25hY2tCYXIoXCJFLW1haWwgw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvLlwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIuIFZhbGlkYcOnw6NvIGRlIGZvcm1hdG8gZGUgZS1tYWlsXHJcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xyXG4gICAgaWYgKCFlbWFpbFJlZ2V4LnRlc3QoZW1haWxUb1ZhbGlkYXRlLmVtYWlsKSkge1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihcIkRpZ2l0ZSB1bSBFLW1haWwgdsOhbGlkby5cIik7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAzLiBWYWxpZGHDp8OjbyBkZSBlLW1haWwgZHVwbGljYWRvIG5hIGxpc3RhIGV4aXN0ZW50ZVxyXG4gICAgLy8gRmlsdHJhIGEgbGlzdGEgcGFyYSBleGNsdWlyIG8gcHLDs3ByaW8gZS1tYWlsIHF1ZSBlc3TDoSBzZW5kbyBlZGl0YWRvIChzZSBlbGUgdGl2ZXIgdW0gJ2NvZGlnbycpXHJcbiAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IHRoaXMuZW1haWxzTGlzdC5zb21lKGV4aXN0aW5nRW1haWwgPT5cclxuICAgICAgZXhpc3RpbmdFbWFpbC5lbWFpbD8udG9Mb3dlckNhc2UoKSA9PT0gZW1haWxUb1ZhbGlkYXRlLmVtYWlsPy50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgIGV4aXN0aW5nRW1haWwuY29kaWdvICE9PSBlbWFpbFRvVmFsaWRhdGUuY29kaWdvIC8vIElnbm9yYSBvIHByw7NwcmlvIGUtbWFpbCBzZSBlc3RpdmVyIHNlbmRvIGVkaXRhZG9cclxuICAgICk7XHJcblxyXG4gICAgaWYgKGlzRHVwbGljYXRlKSB7XHJcbiAgICAgIHRoaXMub3BlblNuYWNrQmFyKFwiRXN0ZSBlLW1haWwgasOhIGV4aXN0ZSBuYSBsaXN0YS5cIik7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCk7XHJcbiAgfVxyXG5cclxuICBzYWx2YXJjbG9zZSgpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuZW1haWxTYWx2byk7XHJcbiAgfVxyXG5cclxuICBvcGVuU25hY2tCYXIobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgJ3gnLCB7XHJcbiAgICAgIGR1cmF0aW9uOiA1MDAwLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufSIsIjxoMSBtYXQtZGlhbG9nLXRpdGxlPkNhZGFzdHJvIGRlIEUtbWFpbDwvaDE+XHJcbjxmb3JtIChuZ1N1Ym1pdCk9XCJzYWx2YXIoZm9ybSlcIiAjZm9ybT1cIm5nRm9ybVwiPlxyXG4gIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250YWluZXJcIj5cclxuICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMTAwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPkUtbWFpbDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZW1haWwuZW1haWxcIiBuYW1lPVwiZW1haWxWYWx1ZVwiICNlbWFpbFZhbHVlPVwibmdNb2RlbFwiIC8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTEwMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJlbWFpbC50aXBvRW1haWxDb2RpZ29cIiBbY29tcGFyZVdpdGhdPVwiY29tcGFyYXJUaXBvc1wiIG5hbWU9XCJ0aXBvRW1haWxDb2RpZ29cIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVGlwb1NlbGVjaW9uYWRvKCRldmVudC52YWx1ZSlcIiByZXF1aXJlZD5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB0aXBvIG9mIHRpcG9FbWFpbCB8IGFzeW5jXCIgW3ZhbHVlXT1cInRpcG8uY29kaWdvXCI+XHJcbiAgICAgICAgICAgIHt7dGlwby5kZW5vbWluYWNhb319XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG5cclxuICA8bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY29sb3I9XCJ3YXJuXCIgKGNsaWNrKT1cImNsb3NlKClcIj5GZWNoYXI8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjb2xvcj1cInByaW1hcnlcIj5TYWx2YXI8L2J1dHRvbj5cclxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuPC9mb3JtPiJdfQ==
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { UnbPessoaEmailFormComponent } from './unb-pessoa-email-form';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/material/snack-bar";
|
|
5
|
+
import * as i2 from "../unb-pessoa.service";
|
|
6
|
+
import * as i3 from "@angular/material/dialog";
|
|
7
|
+
import * as i4 from "@angular/common";
|
|
8
|
+
import * as i5 from "@angular/material/icon";
|
|
9
|
+
import * as i6 from "@angular/material/button";
|
|
10
|
+
export class UnbPessoaEmailListComponent {
|
|
11
|
+
constructor(snackBar, service, dialog) {
|
|
12
|
+
this.snackBar = snackBar;
|
|
13
|
+
this.service = service;
|
|
14
|
+
this.dialog = dialog;
|
|
15
|
+
this.podeEditar = true;
|
|
16
|
+
this.emails = [];
|
|
17
|
+
this.apiPessoaConfig = { url: '', token: '' };
|
|
18
|
+
this.emailsEmitted = new EventEmitter();
|
|
19
|
+
}
|
|
20
|
+
ngOnInit() {
|
|
21
|
+
this.tipoEmail = this.service.getTipoEmail();
|
|
22
|
+
this.sortAndAssignOrder(); // organiza a lista de emails. As vezes tem ordem duplicada ou faltando.
|
|
23
|
+
}
|
|
24
|
+
excluir(email) {
|
|
25
|
+
}
|
|
26
|
+
editar(email) {
|
|
27
|
+
this.openFormDialog(email);
|
|
28
|
+
}
|
|
29
|
+
moverParaCima(index) {
|
|
30
|
+
if (index <= 0)
|
|
31
|
+
return;
|
|
32
|
+
[this.emails[index - 1], this.emails[index]] = [this.emails[index], this.emails[index - 1]];
|
|
33
|
+
this.atualizarOrdem();
|
|
34
|
+
}
|
|
35
|
+
moverParaBaixo(index) {
|
|
36
|
+
if (index >= this.emails.length - 1)
|
|
37
|
+
return;
|
|
38
|
+
[this.emails[index], this.emails[index + 1]] = [this.emails[index + 1], this.emails[index]];
|
|
39
|
+
this.atualizarOrdem();
|
|
40
|
+
}
|
|
41
|
+
atualizarOrdem() {
|
|
42
|
+
this.emails.forEach((email, idx) => {
|
|
43
|
+
email.ordem = idx + 1;
|
|
44
|
+
});
|
|
45
|
+
this.emailsEmitted.emit(this.emails);
|
|
46
|
+
}
|
|
47
|
+
openFormDialog(emailToEdit) {
|
|
48
|
+
const dialogRef = this.dialog.open(UnbPessoaEmailFormComponent, {
|
|
49
|
+
width: '900px',
|
|
50
|
+
data: {
|
|
51
|
+
email: emailToEdit, // E-mail a ser editado ou vazio para novo
|
|
52
|
+
emailsList: this.emails // A sua lista COMPLETA de e-mails
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
dialogRef.afterClosed().subscribe(result => {
|
|
56
|
+
if (result) {
|
|
57
|
+
const index = this.emails.findIndex(e => e.codigo === result.codigo);
|
|
58
|
+
if (result.codigo && index > -1) {
|
|
59
|
+
// Atualiza e-mail existente
|
|
60
|
+
this.emails[index] = result;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Adiciona novo e-mail (gera ordem automaticamente se quiser)
|
|
64
|
+
result.ordem = this.emails.length + 1;
|
|
65
|
+
this.emails.push(result);
|
|
66
|
+
}
|
|
67
|
+
// Emite lista atualizada
|
|
68
|
+
this.emailsEmitted.emit(this.emails);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
sortAndAssignOrder() {
|
|
73
|
+
// 1. Crie uma cópia da lista para não modificar a original durante a iteração inicial
|
|
74
|
+
const tempEmails = [...this.emails];
|
|
75
|
+
// 2. Mapeie as ordens existentes para identificar duplicatas e ausentes
|
|
76
|
+
const orderMap = new Map();
|
|
77
|
+
const emailsWithoutOrder = [];
|
|
78
|
+
tempEmails.forEach(email => {
|
|
79
|
+
if (email.ordem !== undefined && email.ordem !== null) {
|
|
80
|
+
if (!orderMap.has(email.ordem)) {
|
|
81
|
+
orderMap.set(email.ordem, []);
|
|
82
|
+
}
|
|
83
|
+
orderMap.get(email.ordem)?.push(email);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
emailsWithoutOrder.push(email);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
// 3. Inicialize um Set para rastrear todas as ordens que serão usadas no final
|
|
90
|
+
const finalUsedOrders = new Set();
|
|
91
|
+
// Inicialize o próximo valor de ordem disponível
|
|
92
|
+
let nextAvailableOrder = 0;
|
|
93
|
+
// Função auxiliar para encontrar a próxima ordem disponível
|
|
94
|
+
const getNextAvailableOrder = () => {
|
|
95
|
+
while (finalUsedOrders.has(nextAvailableOrder)) {
|
|
96
|
+
nextAvailableOrder++;
|
|
97
|
+
}
|
|
98
|
+
return nextAvailableOrder++;
|
|
99
|
+
};
|
|
100
|
+
// 4. Processe emails com ordem definida:
|
|
101
|
+
// - A primeira ocorrência de uma ordem a mantém.
|
|
102
|
+
// - Duplicatas recebem uma nova ordem.
|
|
103
|
+
// - Adicione as ordens válidas ao finalUsedOrders.
|
|
104
|
+
this.emails.forEach(email => {
|
|
105
|
+
if (email.ordem !== undefined && email.ordem !== null) {
|
|
106
|
+
if (!finalUsedOrders.has(email.ordem)) {
|
|
107
|
+
// Se a ordem ainda não foi usada, use-a e adicione ao set
|
|
108
|
+
finalUsedOrders.add(email.ordem);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// Se a ordem já foi usada (é uma duplicata), atribua uma nova
|
|
112
|
+
email.ordem = getNextAvailableOrder();
|
|
113
|
+
finalUsedOrders.add(email.ordem); // Adiciona a nova ordem ao set
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
// 5. Atribua ordens para emails que não tinham ordem definida
|
|
118
|
+
emailsWithoutOrder.forEach(email => {
|
|
119
|
+
email.ordem = getNextAvailableOrder();
|
|
120
|
+
finalUsedOrders.add(email.ordem); // Adiciona a nova ordem ao set
|
|
121
|
+
});
|
|
122
|
+
// 6. Finalmente, ordene a lista completa com as ordens agora únicas
|
|
123
|
+
this.emails.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0));
|
|
124
|
+
}
|
|
125
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaEmailListComponent, deps: [{ token: i1.MatSnackBar }, { token: i2.UnBPessoaService }, { token: i3.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
126
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaEmailListComponent, selector: "lib-unb-pessoa-email-list", inputs: { podeEditar: "podeEditar", emails: "emails", apiPessoaConfig: "apiPessoaConfig" }, outputs: { emailsEmitted: "emailsEmitted" }, ngImport: i0, template: "<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ emails?.length === 1 ? 'Email Cadastrado' : 'E-mails Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ emails?.length || 0 }})</span>\r\n </div>\r\n\r\n <button matTooltip=\"Novo Email\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Email\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"emails && emails.length > 0\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"text-align: center;\" >Ordem</th>\r\n <th>E-mail</th>\r\n <th>Tipo</th>\r\n <th style=\"text-align: center;\">A\u00E7\u00F5es</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of emails; let i = index\" class=\"my-tr\">\r\n <td style=\"width: 5%; text-align: center;\"> \r\n <button *ngIf=\"emails.length > 1 && i > 0\" mat-icon-button aria-label=\"Mover para cima\"\r\n (click)=\"moverParaCima(i)\">\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button *ngIf=\"emails.length > 1 && i < emails.length - 1\" mat-icon-button aria-label=\"Mover para baixo\"\r\n (click)=\"moverParaBaixo(i)\">\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </td>\r\n <td style=\"width: 50%;\">{{ valor.email }}</td>\r\n <td style=\"width: 20%;\">{{ valor.tipo?.toUpperCase() }}</td>\r\n <td style=\"width: 20%; text-align: center;\">\r\n <button mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>", styles: [".mes-container{padding:12px;margin-bottom:2px;border-radius:8px;box-shadow:0 2px 6px #0000001a;transition:background-color .3s ease,box-shadow .3s ease}.mes-container:nth-child(2n){background-color:#f9f9fc}.mes-container:nth-child(odd){background-color:#fff}.mes-container:hover{background-color:#f0f0f5;box-shadow:0 4px 8px #00000026}.header-container{display:flex;align-items:center;margin-bottom:2px}.header-container button{margin-left:auto}.mes-header{display:flex;align-items:center;gap:6px;font-size:1.2rem;font-weight:700;color:#333}.my-table{width:100%;border-collapse:collapse;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;font-family:Arial,sans-serif}.my-table th,.my-table td{padding:5px;text-align:left;border-bottom:1px solid #ddd}.my-table th{background-color:#005dbb7b;color:#fff;font-weight:700}.my-table tr{transition:background-color .3s ease}.my-table tr:hover{background-color:#f1f1f1}.my-table td{background-color:#fff}.my-table td button{transition:transform .2s ease}.my-table td button:hover{transform:scale(1.1)}.my-table td:last-child{text-align:center}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }] }); }
|
|
127
|
+
}
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaEmailListComponent, decorators: [{
|
|
129
|
+
type: Component,
|
|
130
|
+
args: [{ standalone: false, selector: 'lib-unb-pessoa-email-list', template: "<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ emails?.length === 1 ? 'Email Cadastrado' : 'E-mails Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ emails?.length || 0 }})</span>\r\n </div>\r\n\r\n <button matTooltip=\"Novo Email\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Email\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"emails && emails.length > 0\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"text-align: center;\" >Ordem</th>\r\n <th>E-mail</th>\r\n <th>Tipo</th>\r\n <th style=\"text-align: center;\">A\u00E7\u00F5es</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of emails; let i = index\" class=\"my-tr\">\r\n <td style=\"width: 5%; text-align: center;\"> \r\n <button *ngIf=\"emails.length > 1 && i > 0\" mat-icon-button aria-label=\"Mover para cima\"\r\n (click)=\"moverParaCima(i)\">\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button *ngIf=\"emails.length > 1 && i < emails.length - 1\" mat-icon-button aria-label=\"Mover para baixo\"\r\n (click)=\"moverParaBaixo(i)\">\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </td>\r\n <td style=\"width: 50%;\">{{ valor.email }}</td>\r\n <td style=\"width: 20%;\">{{ valor.tipo?.toUpperCase() }}</td>\r\n <td style=\"width: 20%; text-align: center;\">\r\n <button mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>", styles: [".mes-container{padding:12px;margin-bottom:2px;border-radius:8px;box-shadow:0 2px 6px #0000001a;transition:background-color .3s ease,box-shadow .3s ease}.mes-container:nth-child(2n){background-color:#f9f9fc}.mes-container:nth-child(odd){background-color:#fff}.mes-container:hover{background-color:#f0f0f5;box-shadow:0 4px 8px #00000026}.header-container{display:flex;align-items:center;margin-bottom:2px}.header-container button{margin-left:auto}.mes-header{display:flex;align-items:center;gap:6px;font-size:1.2rem;font-weight:700;color:#333}.my-table{width:100%;border-collapse:collapse;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;font-family:Arial,sans-serif}.my-table th,.my-table td{padding:5px;text-align:left;border-bottom:1px solid #ddd}.my-table th{background-color:#005dbb7b;color:#fff;font-weight:700}.my-table tr{transition:background-color .3s ease}.my-table tr:hover{background-color:#f1f1f1}.my-table td{background-color:#fff}.my-table td button{transition:transform .2s ease}.my-table td button:hover{transform:scale(1.1)}.my-table td:last-child{text-align:center}\n"] }]
|
|
131
|
+
}], ctorParameters: () => [{ type: i1.MatSnackBar }, { type: i2.UnBPessoaService }, { type: i3.MatDialog }], propDecorators: { podeEditar: [{
|
|
132
|
+
type: Input
|
|
133
|
+
}], emails: [{
|
|
134
|
+
type: Input
|
|
135
|
+
}], apiPessoaConfig: [{
|
|
136
|
+
type: Input
|
|
137
|
+
}], emailsEmitted: [{
|
|
138
|
+
type: Output
|
|
139
|
+
}] } });
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbWFpbC1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVtYWlsLWZvcm0vdW5iLXBlc3NvYS1lbWFpbC1saXN0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVtYWlsLWZvcm0vdW5iLXBlc3NvYS1lbWFpbC1saXN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0vRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7QUFTdEUsTUFBTSxPQUFPLDJCQUEyQjtJQVF0QyxZQUFvQixRQUFxQixFQUFVLE9BQXlCLEVBQVMsTUFBaUI7UUFBbEYsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQVA3RixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLFdBQU0sR0FBUSxFQUFFLENBQUM7UUFDakIsb0JBQWUsR0FBbUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN4RSxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO0lBTS9ELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTdDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsd0VBQXdFO0lBQ3JHLENBQUM7SUFFRCxPQUFPLENBQUMs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Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW1haWwsIFVuYlBlc3NvYUVtYWlsVGlwbyB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZW1haWwubW9kZWwnO1xyXG5pbXBvcnQgeyBVbkJQZXNzb2FTZXJ2aWNlIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW1haWxGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi91bmItcGVzc29hLWVtYWlsLWZvcm0nO1xyXG5pbXBvcnQgeyBUaXBvUGVzc29hRW51bSB9IGZyb20gJy4uL3VuYi10aXBvLXBlc3NvYS5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG4gIHNlbGVjdG9yOiAnbGliLXVuYi1wZXNzb2EtZW1haWwtbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VuYi1wZXNzb2EtZW1haWwtbGlzdC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdW5iLXBlc3NvYS1lbWFpbC1saXN0LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYUVtYWlsTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcG9kZUVkaXRhciA9IHRydWU7XHJcbiAgQElucHV0KCkgZW1haWxzOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBhcGlQZXNzb2FDb25maWc6IHsgdXJsOiBzdHJpbmc7IHRva2VuOiBzdHJpbmcgfSA9IHsgdXJsOiAnJywgdG9rZW46ICcnIH07XHJcbiAgQE91dHB1dCgpIGVtYWlsc0VtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFVuYlBlc3NvYUVtYWlsW10+KCk7XHJcblxyXG4gIHRpcG9FbWFpbCE6IE9ic2VydmFibGU8VW5iUGVzc29hRW1haWxUaXBvW10+O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhciwgcHJpdmF0ZSBzZXJ2aWNlOiBVbkJQZXNzb2FTZXJ2aWNlLCBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2cpIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudGlwb0VtYWlsID0gdGhpcy5zZXJ2aWNlLmdldFRpcG9FbWFpbCgpO1xyXG5cclxuICAgIHRoaXMuc29ydEFuZEFzc2lnbk9yZGVyKCk7IC8vIG9yZ2FuaXphIGEgbGlzdGEgZGUgZW1haWxzLiBBcyB2ZXplcyB0ZW0gb3JkZW0gZHVwbGljYWRhIG91IGZhbHRhbmRvLlxyXG4gIH1cclxuXHJcbiAgZXhjbHVpcihlbWFpbDogVW5iUGVzc29hRW1haWxUaXBvKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgZWRpdGFyKGVtYWlsOiBVbmJQZXNzb2FFbWFpbFRpcG8pIHtcclxuICAgIHRoaXMub3BlbkZvcm1EaWFsb2coZW1haWwpO1xyXG4gIH1cclxuXHJcbiAgbW92ZXJQYXJhQ2ltYShpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoaW5kZXggPD0gMCkgcmV0dXJuO1xyXG5cclxuICAgIFt0aGlzLmVtYWlsc1tpbmRleCAtIDFdLCB0aGlzLmVtYWlsc1tpbmRleF1dID0gW3RoaXMuZW1haWxzW2luZGV4XSwgdGhpcy5lbWFpbHNbaW5kZXggLSAxXV07XHJcbiAgICB0aGlzLmF0dWFsaXphck9yZGVtKCk7XHJcbiAgfVxyXG5cclxuICBtb3ZlclBhcmFCYWl4byhpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoaW5kZXggPj0gdGhpcy5lbWFpbHMubGVuZ3RoIC0gMSkgcmV0dXJuO1xyXG5cclxuICAgIFt0aGlzLmVtYWlsc1tpbmRleF0sIHRoaXMuZW1haWxzW2luZGV4ICsgMV1dID0gW3RoaXMuZW1haWxzW2luZGV4ICsgMV0sIHRoaXMuZW1haWxzW2luZGV4XV07XHJcbiAgICB0aGlzLmF0dWFsaXphck9yZGVtKCk7XHJcbiAgfVxyXG5cclxuICBhdHVhbGl6YXJPcmRlbSgpIHtcclxuICAgIHRoaXMuZW1haWxzLmZvckVhY2goKGVtYWlsLCBpZHgpID0+IHtcclxuICAgICAgZW1haWwub3JkZW0gPSBpZHggKyAxO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lbWFpbHNFbWl0dGVkLmVtaXQodGhpcy5lbWFpbHMpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkZvcm1EaWFsb2coZW1haWxUb0VkaXQ6IGFueSkge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihVbmJQZXNzb2FFbWFpbEZvcm1Db21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc5MDBweCcsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlbWFpbDogZW1haWxUb0VkaXQsIC8vIEUtbWFpbCBhIHNlciBlZGl0YWRvIG91IHZhemlvIHBhcmEgbm92b1xyXG4gICAgICAgIGVtYWlsc0xpc3Q6IHRoaXMuZW1haWxzIC8vIEEgc3VhIGxpc3RhIENPTVBMRVRBIGRlIGUtbWFpbHNcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmVtYWlscy5maW5kSW5kZXgoZSA9PiBlLmNvZGlnbyA9PT0gcmVzdWx0LmNvZGlnbyk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQuY29kaWdvICYmIGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIC8vIEF0dWFsaXphIGUtbWFpbCBleGlzdGVudGVcclxuICAgICAgICAgIHRoaXMuZW1haWxzW2luZGV4XSA9IHJlc3VsdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQWRpY2lvbmEgbm92byBlLW1haWwgKGdlcmEgb3JkZW0gYXV0b21hdGljYW1lbnRlIHNlIHF1aXNlcilcclxuICAgICAgICAgIHJlc3VsdC5vcmRlbSA9IHRoaXMuZW1haWxzLmxlbmd0aCArIDE7XHJcbiAgICAgICAgICB0aGlzLmVtYWlscy5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVtaXRlIGxpc3RhIGF0dWFsaXphZGFcclxuICAgICAgICB0aGlzLmVtYWlsc0VtaXR0ZWQuZW1pdCh0aGlzLmVtYWlscyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzb3J0QW5kQXNzaWduT3JkZXIoKTogdm9pZCB7XHJcbiAgICAvLyAxLiBDcmllIHVtYSBjw7NwaWEgZGEgbGlzdGEgcGFyYSBuw6NvIG1vZGlmaWNhciBhIG9yaWdpbmFsIGR1cmFudGUgYSBpdGVyYcOnw6NvIGluaWNpYWxcclxuICAgIGNvbnN0IHRlbXBFbWFpbHMgPSBbLi4udGhpcy5lbWFpbHNdO1xyXG5cclxuICAgIC8vIDIuIE1hcGVpZSBhcyBvcmRlbnMgZXhpc3RlbnRlcyBwYXJhIGlkZW50aWZpY2FyIGR1cGxpY2F0YXMgZSBhdXNlbnRlc1xyXG4gICAgY29uc3Qgb3JkZXJNYXAgPSBuZXcgTWFwPG51bWJlciwgVW5iUGVzc29hRW1haWxbXT4oKTtcclxuICAgIGNvbnN0IGVtYWlsc1dpdGhvdXRPcmRlcjogVW5iUGVzc29hRW1haWxbXSA9IFtdO1xyXG5cclxuICAgIHRlbXBFbWFpbHMuZm9yRWFjaChlbWFpbCA9PiB7XHJcbiAgICAgIGlmIChlbWFpbC5vcmRlbSAhPT0gdW5kZWZpbmVkICYmIGVtYWlsLm9yZGVtICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFvcmRlck1hcC5oYXMoZW1haWwub3JkZW0pKSB7XHJcbiAgICAgICAgICBvcmRlck1hcC5zZXQoZW1haWwub3JkZW0sIFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3JkZXJNYXAuZ2V0KGVtYWlsLm9yZGVtKT8ucHVzaChlbWFpbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZW1haWxzV2l0aG91dE9yZGVyLnB1c2goZW1haWwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAzLiBJbmljaWFsaXplIHVtIFNldCBwYXJhIHJhc3RyZWFyIHRvZGFzIGFzIG9yZGVucyBxdWUgc2Vyw6NvIHVzYWRhcyBubyBmaW5hbFxyXG4gICAgY29uc3QgZmluYWxVc2VkT3JkZXJzID0gbmV3IFNldDxudW1iZXI+KCk7XHJcbiAgICAvLyBJbmljaWFsaXplIG8gcHLDs3hpbW8gdmFsb3IgZGUgb3JkZW0gZGlzcG9uw612ZWxcclxuICAgIGxldCBuZXh0QXZhaWxhYmxlT3JkZXIgPSAwO1xyXG5cclxuICAgIC8vIEZ1bsOnw6NvIGF1eGlsaWFyIHBhcmEgZW5jb250cmFyIGEgcHLDs3hpbWEgb3JkZW0gZGlzcG9uw612ZWxcclxuICAgIGNvbnN0IGdldE5leHRBdmFpbGFibGVPcmRlciA9ICgpID0+IHtcclxuICAgICAgd2hpbGUgKGZpbmFsVXNlZE9yZGVycy5oYXMobmV4dEF2YWlsYWJsZU9yZGVyKSkge1xyXG4gICAgICAgIG5leHRBdmFpbGFibGVPcmRlcisrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuZXh0QXZhaWxhYmxlT3JkZXIrKztcclxuICAgIH07XHJcblxyXG4gICAgLy8gNC4gUHJvY2Vzc2UgZW1haWxzIGNvbSBvcmRlbSBkZWZpbmlkYTpcclxuICAgIC8vICAgIC0gQSBwcmltZWlyYSBvY29ycsOqbmNpYSBkZSB1bWEgb3JkZW0gYSBtYW50w6ltLlxyXG4gICAgLy8gICAgLSBEdXBsaWNhdGFzIHJlY2ViZW0gdW1hIG5vdmEgb3JkZW0uXHJcbiAgICAvLyAgICAtIEFkaWNpb25lIGFzIG9yZGVucyB2w6FsaWRhcyBhbyBmaW5hbFVzZWRPcmRlcnMuXHJcbiAgICB0aGlzLmVtYWlscy5mb3JFYWNoKGVtYWlsID0+IHsgLy8gSXRlcmFyIHNvYnJlIGEgbGlzdGEgb3JpZ2luYWwgcGFyYSBtb2RpZmljYXIgaW4tcGxhY2VcclxuICAgICAgaWYgKGVtYWlsLm9yZGVtICE9PSB1bmRlZmluZWQgJiYgZW1haWwub3JkZW0gIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoIWZpbmFsVXNlZE9yZGVycy5oYXMoZW1haWwub3JkZW0pKSB7XHJcbiAgICAgICAgICAvLyBTZSBhIG9yZGVtIGFpbmRhIG7Do28gZm9pIHVzYWRhLCB1c2UtYSBlIGFkaWNpb25lIGFvIHNldFxyXG4gICAgICAgICAgZmluYWxVc2VkT3JkZXJzLmFkZChlbWFpbC5vcmRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFNlIGEgb3JkZW0gasOhIGZvaSB1c2FkYSAow6kgdW1hIGR1cGxpY2F0YSksIGF0cmlidWEgdW1hIG5vdmFcclxuICAgICAgICAgIGVtYWlsLm9yZGVtID0gZ2V0TmV4dEF2YWlsYWJsZU9yZGVyKCk7XHJcbiAgICAgICAgICBmaW5hbFVzZWRPcmRlcnMuYWRkKGVtYWlsLm9yZGVtKTsgLy8gQWRpY2lvbmEgYSBub3ZhIG9yZGVtIGFvIHNldFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gNS4gQXRyaWJ1YSBvcmRlbnMgcGFyYSBlbWFpbHMgcXVlIG7Do28gdGluaGFtIG9yZGVtIGRlZmluaWRhXHJcbiAgICBlbWFpbHNXaXRob3V0T3JkZXIuZm9yRWFjaChlbWFpbCA9PiB7XHJcbiAgICAgIGVtYWlsLm9yZGVtID0gZ2V0TmV4dEF2YWlsYWJsZU9yZGVyKCk7XHJcbiAgICAgIGZpbmFsVXNlZE9yZGVycy5hZGQoZW1haWwub3JkZW0pOyAvLyBBZGljaW9uYSBhIG5vdmEgb3JkZW0gYW8gc2V0XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyA2LiBGaW5hbG1lbnRlLCBvcmRlbmUgYSBsaXN0YSBjb21wbGV0YSBjb20gYXMgb3JkZW5zIGFnb3JhIMO6bmljYXNcclxuICAgIHRoaXMuZW1haWxzLnNvcnQoKGEsIGIpID0+IChhLm9yZGVtID8/IDApIC0gKGIub3JkZW0gPz8gMCkpO1xyXG4gIH1cclxuXHJcblxyXG59IiwiPGRpdiBjbGFzcz1cIm1lcy1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lcy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXR1bG9cIj5cclxuICAgICAgICAgICAgICAgIHt7IGVtYWlscz8ubGVuZ3RoID09PSAxID8gJ0VtYWlsIENhZGFzdHJhZG8nIDogJ0UtbWFpbHMgQ2FkYXN0cmFkb3MnIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXR1bG9cIj4oe3sgZW1haWxzPy5sZW5ndGggfHwgMCB9fSk8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxidXR0b24gbWF0VG9vbHRpcD1cIk5vdm8gRW1haWxcIiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9wZW5Gb3JtRGlhbG9nKG51bGwpXCI+XHJcbiAgICAgICAgICAgIENhZGFzdHJhciBOb3ZvIEVtYWlsXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEV4aWJlIGEgdGFiZWxhIGRlIGRlc3Blc2FzIHNvbWVudGUgc2UgaG91dmVyIGRlc3Blc2FzIC0tPlxyXG4gICAgPHRhYmxlIGNsYXNzPVwibXktdGFibGVcIiAqbmdJZj1cImVtYWlscyAmJiBlbWFpbHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDx0ciBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNlNGUzZTNjYztcIj5cclxuICAgICAgICAgICAgPHRoIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiID5PcmRlbTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5FLW1haWw8L3RoPlxyXG4gICAgICAgICAgICA8dGg+VGlwbzwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5Bw6fDtWVzPC90aD5cclxuICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHZhbG9yIG9mIGVtYWlsczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwibXktdHJcIj5cclxuICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6IDUlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImVtYWlscy5sZW5ndGggPiAxICYmIGkgPiAwXCIgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJNb3ZlciBwYXJhIGNpbWFcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlclBhcmFDaW1hKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X3Vwd2FyZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJlbWFpbHMubGVuZ3RoID4gMSAmJiBpIDwgZW1haWxzLmxlbmd0aCAtIDFcIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIk1vdmVyIHBhcmEgYmFpeG9cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlclBhcmFCYWl4byhpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6IDUwJTtcIj57eyB2YWxvci5lbWFpbCB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAyMCU7XCI+e3sgdmFsb3IudGlwbz8udG9VcHBlckNhc2UoKSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAyMCU7IHRleHQtYWxpZ246IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJTYWx2YXJcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZWRpdGFyKHZhbG9yKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkRlbGV0YXJcIiBjb2xvcj1cIndhcm5cIiAoY2xpY2spPVwiZXhjbHVpcih2YWxvcilcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG48L2Rpdj4iXX0=
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { UnbPessoaEndereco } from '../unb-pessoa-models/unb-pessoa-endereco.model';
|
|
3
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/material/snack-bar";
|
|
6
|
+
import * as i2 from "../unb-pessoa.service";
|
|
7
|
+
import * as i3 from "@angular/material/dialog";
|
|
8
|
+
import * as i4 from "@angular/common";
|
|
9
|
+
import * as i5 from "@angular/forms";
|
|
10
|
+
import * as i6 from "@angular/material/icon";
|
|
11
|
+
import * as i7 from "@angular/material/button";
|
|
12
|
+
import * as i8 from "@angular/material/form-field";
|
|
13
|
+
import * as i9 from "@angular/material/input";
|
|
14
|
+
import * as i10 from "@angular/material/select";
|
|
15
|
+
import * as i11 from "@angular/material/core";
|
|
16
|
+
export class UnbPessoaEnderecoFormComponent {
|
|
17
|
+
constructor(snackBar, service, dialogRef, data) {
|
|
18
|
+
this.snackBar = snackBar;
|
|
19
|
+
this.service = service;
|
|
20
|
+
this.dialogRef = dialogRef;
|
|
21
|
+
this.data = data;
|
|
22
|
+
this.endereco = new UnbPessoaEndereco();
|
|
23
|
+
this.listaTipoEndereco = [];
|
|
24
|
+
this.endereco = JSON.parse(JSON.stringify(data.endereco)); // O e-mail específico para edição
|
|
25
|
+
// Verifique se a lista de e-mails foi passada e atribua-a
|
|
26
|
+
if (data.enderecosList) {
|
|
27
|
+
this.enderecosList = JSON.parse(JSON.stringify(data.enderecosList)); // Faça uma cópia profunda se for manipular
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.enderecosList = []; // Inicialize como vazio se não for passada
|
|
31
|
+
}
|
|
32
|
+
if (!this.endereco) {
|
|
33
|
+
this.endereco = new UnbPessoaEndereco();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
ngOnInit() {
|
|
37
|
+
this.tipoEndereco = this.service.getTipoEndereco();
|
|
38
|
+
// Inscreve para guardar a lista em uma variável comum
|
|
39
|
+
this.tipoEndereco.subscribe(lista => {
|
|
40
|
+
this.listaTipoEndereco = lista;
|
|
41
|
+
// Se já tiver tipoEmailCodigo, preenche o nome correspondente
|
|
42
|
+
if (this.endereco.tipoEnderecoCodigo != null) {
|
|
43
|
+
const tipoEncontrado = lista.find(t => t.codigo === this.endereco.tipoEnderecoCodigo);
|
|
44
|
+
if (tipoEncontrado) {
|
|
45
|
+
this.endereco.tipo = tipoEncontrado.denominacao;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else if (this.endereco.tipo) {
|
|
49
|
+
const tipoEncontrado = lista.find(t => t.denominacao?.toLowerCase() === this.endereco.tipo?.toLowerCase());
|
|
50
|
+
if (tipoEncontrado) {
|
|
51
|
+
this.endereco.tipoEnderecoCodigo = tipoEncontrado.codigo;
|
|
52
|
+
}
|
|
53
|
+
// O metodo get retorna uf, mas o put espera ufEndereco
|
|
54
|
+
if (this.endereco.uf) {
|
|
55
|
+
this.endereco.ufEndereco = this.endereco.uf; // Converte ufEndereco para uf
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
salvar(form) {
|
|
61
|
+
if (form.invalid) {
|
|
62
|
+
this.openSnackBar('Existem erros no formulário, por favor, verificar.');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (this.validar(this.endereco) == false)
|
|
66
|
+
return;
|
|
67
|
+
this.enderecoSalvo = this.endereco;
|
|
68
|
+
this.salvarclose();
|
|
69
|
+
}
|
|
70
|
+
compararTipos(t1, t2) {
|
|
71
|
+
return t1 && t2 && t1.codigo === t2.codigo;
|
|
72
|
+
}
|
|
73
|
+
onTipoSelecionado(codigoSelecionado) {
|
|
74
|
+
const tipoSelecionado = this.listaTipoEndereco.find(t => t.codigo === codigoSelecionado);
|
|
75
|
+
if (tipoSelecionado) {
|
|
76
|
+
this.endereco.tipo = tipoSelecionado.denominacao;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
pesquisarCep() {
|
|
80
|
+
if (this.endereco.cep && this.endereco.cep.trim() !== '') {
|
|
81
|
+
let cepFormatado = this.endereco.cep.replace(/\D/g, ''); // Remove caracteres não numéricos
|
|
82
|
+
this.service.pesquisarCep(cepFormatado).subscribe({
|
|
83
|
+
next: (data) => {
|
|
84
|
+
this.endereco.logradouro = data.logradouro;
|
|
85
|
+
this.endereco.bairro = data.bairro;
|
|
86
|
+
this.endereco.ufEndereco = data.uf;
|
|
87
|
+
this.endereco.uf = data.uf;
|
|
88
|
+
this.endereco.complemento = data.complemento;
|
|
89
|
+
},
|
|
90
|
+
error: (error) => {
|
|
91
|
+
this.openSnackBar('Falha ao encontrar o CEP');
|
|
92
|
+
console.error('Erro ao pesquisar CEP:', error);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
this.openSnackBar('Por favor, insira um CEP válido.');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
getListaEstados() {
|
|
101
|
+
return [
|
|
102
|
+
'AC', 'AL', 'AP', 'AM', 'BA', 'CE', 'DF', 'ES', 'GO', 'MA',
|
|
103
|
+
'MT', 'MS', 'MG', 'PA', 'PB', 'PR', 'PE', 'PI', 'RJ', 'RN',
|
|
104
|
+
'RS', 'RO', 'RR', 'SC', 'SP', 'SE', 'TO'
|
|
105
|
+
];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Valida o objeto de e-mail.
|
|
109
|
+
* Retorna true se o e-mail for válido, false caso contrário.
|
|
110
|
+
*/
|
|
111
|
+
validar(enderecoToValidate) {
|
|
112
|
+
// 3. Validação de e-mail duplicado na lista existente
|
|
113
|
+
// Filtra a lista para excluir o próprio endereço que está sendo editado (se ele tiver um 'codigo')
|
|
114
|
+
const isDuplicate = this.enderecosList.some(existingEndereco => existingEndereco.logradouro?.toLowerCase() === enderecoToValidate.logradouro?.toLowerCase() &&
|
|
115
|
+
existingEndereco.codigo !== enderecoToValidate.codigo // Ignora o próprio endereço se estiver sendo editado
|
|
116
|
+
);
|
|
117
|
+
if (isDuplicate) {
|
|
118
|
+
this.openSnackBar("Este endereço já existe na lista.");
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
close() {
|
|
124
|
+
this.dialogRef.close(null);
|
|
125
|
+
}
|
|
126
|
+
salvarclose() {
|
|
127
|
+
this.dialogRef.close(this.enderecoSalvo);
|
|
128
|
+
}
|
|
129
|
+
openSnackBar(message) {
|
|
130
|
+
this.snackBar.open(message, 'x', {
|
|
131
|
+
duration: 5000,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaEnderecoFormComponent, deps: [{ token: i1.MatSnackBar }, { token: i2.UnBPessoaService }, { token: i3.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
135
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaEnderecoFormComponent, selector: "lib-unb-pessoa-endereco-form", ngImport: i0, template: "<h1 mat-dialog-title>Cadastro de E-mail</h1>\r\n<form (ngSubmit)=\"salvar(form)\" #form=\"ngForm\">\r\n <mat-dialog-content>\r\n <div class=\"form-container\">\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"endereco.tipoEnderecoCodigo\" name=\"tipo\" #tipo=\"ngModel\" (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of tipoEndereco | async\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>CEP</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.cep\" name=\"cep\" #cep=\"ngModel\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisarCep()\">\r\n <mat-icon style=\"margin-right: 2px;\">search</mat-icon> \r\n </button>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Endere\u00E7o</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.logradouro\" name=\"logradouro\" #logradouro=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Bairro</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.bairro\" name=\"bairro\" #bairro=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Complemento</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.complemento\" name=\"complemento\" #complemento=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>UF</mat-label>\r\n <mat-select [(ngModel)]=\"endereco.uf\" name=\"uf\" #uf=\"ngModel\">\r\n <mat-option *ngFor=\"let uf of getListaEstados()\" [value]=\"uf\">\r\n {{ uf }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"close()\">Fechar</button>\r\n <button mat-flat-button type=\"submit\" color=\"primary\">Salvar</button>\r\n </mat-dialog-actions>\r\n</form>", styles: [".card-actions-buttons{display:flex;gap:5px;flex-wrap:wrap}.form-container{display:flex;flex-wrap:wrap;column-gap:10px;margin:10px}@media (max-width: 1000px){.form-container{flex-direction:column;gap:5px}}.break{flex-basis:100%;height:0}.form-5{flex:1 1 5%}.inline-table-container{display:flex;align-items:center;justify-content:space-between;padding:5px}@media (max-width: 600px){.form-5,.form-10,.form-15{flex:1 1 100%}}.form-10{flex:1 1 10%}.form-15{flex:1 1 15%}.form-20{flex:1 1 20%}.form-25{flex:1 1 25%}.form-30{flex:1 1 30%}.form-35{flex:1 1 35%}.form-40{flex:1 1 40%}.form-45{flex:1 1 45%}.form-50{flex:1 1 50%}.form-100{flex:1 1 100%;min-width:250px}.botoes-container{display:flex;gap:5px}@media (max-width: 600px){.botoes-container{margin-bottom:10px}.botoes-container button{flex:1;max-width:50%}}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
|
|
136
|
+
}
|
|
137
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaEnderecoFormComponent, decorators: [{
|
|
138
|
+
type: Component,
|
|
139
|
+
args: [{ standalone: false, selector: 'lib-unb-pessoa-endereco-form', template: "<h1 mat-dialog-title>Cadastro de E-mail</h1>\r\n<form (ngSubmit)=\"salvar(form)\" #form=\"ngForm\">\r\n <mat-dialog-content>\r\n <div class=\"form-container\">\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"endereco.tipoEnderecoCodigo\" name=\"tipo\" #tipo=\"ngModel\" (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of tipoEndereco | async\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>CEP</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.cep\" name=\"cep\" #cep=\"ngModel\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisarCep()\">\r\n <mat-icon style=\"margin-right: 2px;\">search</mat-icon> \r\n </button>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Endere\u00E7o</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.logradouro\" name=\"logradouro\" #logradouro=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Bairro</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.bairro\" name=\"bairro\" #bairro=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Complemento</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.complemento\" name=\"complemento\" #complemento=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>UF</mat-label>\r\n <mat-select [(ngModel)]=\"endereco.uf\" name=\"uf\" #uf=\"ngModel\">\r\n <mat-option *ngFor=\"let uf of getListaEstados()\" [value]=\"uf\">\r\n {{ uf }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"close()\">Fechar</button>\r\n <button mat-flat-button type=\"submit\" color=\"primary\">Salvar</button>\r\n </mat-dialog-actions>\r\n</form>", styles: [".card-actions-buttons{display:flex;gap:5px;flex-wrap:wrap}.form-container{display:flex;flex-wrap:wrap;column-gap:10px;margin:10px}@media (max-width: 1000px){.form-container{flex-direction:column;gap:5px}}.break{flex-basis:100%;height:0}.form-5{flex:1 1 5%}.inline-table-container{display:flex;align-items:center;justify-content:space-between;padding:5px}@media (max-width: 600px){.form-5,.form-10,.form-15{flex:1 1 100%}}.form-10{flex:1 1 10%}.form-15{flex:1 1 15%}.form-20{flex:1 1 20%}.form-25{flex:1 1 25%}.form-30{flex:1 1 30%}.form-35{flex:1 1 35%}.form-40{flex:1 1 40%}.form-45{flex:1 1 45%}.form-50{flex:1 1 50%}.form-100{flex:1 1 100%;min-width:250px}.botoes-container{display:flex;gap:5px}@media (max-width: 600px){.botoes-container{margin-bottom:10px}.botoes-container button{flex:1;max-width:50%}}\n"] }]
|
|
140
|
+
}], ctorParameters: () => [{ type: i1.MatSnackBar }, { type: i2.UnBPessoaService }, { type: i3.MatDialogRef }, { type: undefined, decorators: [{
|
|
141
|
+
type: Inject,
|
|
142
|
+
args: [MAT_DIALOG_DATA]
|
|
143
|
+
}] }] });
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbmRlcmVjby1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0vdW5iLXBlc3NvYS1lbmRlcmVjby1mb3JtLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0vdW5iLXBlc3NvYS1lbmRlcmVjby1mb3JtLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUQsT0FBTyxFQUFFLGlCQUFpQixFQUF5QixNQUFNLGdEQUFnRCxDQUFDO0FBRTFHLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFVekUsTUFBTSxPQUFPLDhCQUE4QjtJQVF6QyxZQUFvQixRQUFxQixFQUFVLE9BQXlCLEVBQVMsU0FBdUQsRUFBa0MsSUFBUztRQUFuSyxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBUyxjQUFTLEdBQVQsU0FBUyxDQUE4QztRQUFrQyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBTHZMLGFBQVEsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFHbkMsc0JBQWlCLEdBQTRCLEVBQUUsQ0FBQztRQUc5QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztRQUU3RiwwREFBMEQ7UUFDMUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFD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QWU7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUMvQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBeklVLDhCQUE4Qix5R0FRNkcsZUFBZTtrR0FSMUosOEJBQThCLG9FQ2YzQywrZ0ZBbURPOzsyRkRwQ00sOEJBQThCO2tCQU4xQyxTQUFTO2lDQUNJLEtBQUssWUFDUCw4QkFBOEI7OzBCQVl1RyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FFbmRlcmVjbywgVW5iUGVzc29hRW5kZXJlY29UaXBvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbCc7XHJcbmltcG9ydCB7IFVuQlBlc3NvYVNlcnZpY2UgfSBmcm9tICcuLi91bmItcGVzc29hLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLWVuZGVyZWNvLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0uaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VuYi1wZXNzb2EtZW5kZXJlY28tZm9ybS5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbmJQZXNzb2FFbmRlcmVjb0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBlbmRlcmVjb1NhbHZvITogVW5iUGVzc29hRW5kZXJlY287XHJcbiAgZW5kZXJlY28gPSBuZXcgVW5iUGVzc29hRW5kZXJlY28oKTtcclxuICBlbmRlcmVjb3NMaXN0OiBVbmJQZXNzb2FFbmRlcmVjb1tdO1xyXG4gIHRpcG9FbmRlcmVjbyE6IE9ic2VydmFibGU8VW5iUGVzc29hRW5kZXJlY29UaXBvW10+O1xyXG4gIGxpc3RhVGlwb0VuZGVyZWNvOiBVbmJQZXNzb2FFbmRlcmVjb1RpcG9bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhciwgcHJpdmF0ZSBzZXJ2aWNlOiBVbkJQZXNzb2FTZXJ2aWNlLCBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VW5iUGVzc29hRW5kZXJlY29Gb3JtQ29tcG9uZW50PiwgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuZW5kZXJlY28gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEuZW5kZXJlY28pKTsgLy8gTyBlLW1haWwgZXNwZWPDrWZpY28gcGFyYSBlZGnDp8Ojb1xyXG5cclxuICAgIC8vIFZlcmlmaXF1ZSBzZSBhIGxpc3RhIGRlIGUtbWFpbHMgZm9pIHBhc3NhZGEgZSBhdHJpYnVhLWFcclxuICAgIGlmIChkYXRhLmVuZGVyZWNvc0xpc3QpIHtcclxuICAgICAgdGhpcy5lbmRlcmVjb3NMaXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhLmVuZGVyZWNvc0xpc3QpKTsgLy8gRmHDp2EgdW1hIGPDs3BpYSBwcm9mdW5kYSBzZSBmb3IgbWFuaXB1bGFyXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuZGVyZWNvc0xpc3QgPSBbXTsgLy8gSW5pY2lhbGl6ZSBjb21vIHZhemlvIHNlIG7Do28gZm9yIHBhc3NhZGFcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZW5kZXJlY28pIHtcclxuICAgICAgdGhpcy5lbmRlcmVjbyA9IG5ldyBVbmJQZXNzb2FFbmRlcmVjbygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRpcG9FbmRlcmVjbyA9IHRoaXMuc2VydmljZS5nZXRUaXBvRW5kZXJlY28oKTtcclxuICAgIC8vIEluc2NyZXZlIHBhcmEgZ3VhcmRhciBhIGxpc3RhIGVtIHVtYSB2YXJpw6F2ZWwgY29tdW1cclxuICAgIHRoaXMudGlwb0VuZGVyZWNvLnN1YnNjcmliZShsaXN0YSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdGFUaXBvRW5kZXJlY28gPSBsaXN0YTtcclxuXHJcbiAgICAgIC8vIFNlIGrDoSB0aXZlciB0aXBvRW1haWxDb2RpZ28sIHByZWVuY2hlIG8gbm9tZSBjb3JyZXNwb25kZW50ZVxyXG4gICAgICBpZiAodGhpcy5lbmRlcmVjby50aXBvRW5kZXJlY29Db2RpZ28gIT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IHRpcG9FbmNvbnRyYWRvID0gbGlzdGEuZmluZCh0ID0+IHQuY29kaWdvID09PSB0aGlzLmVuZGVyZWNvLnRpcG9FbmRlcmVjb0NvZGlnbyk7XHJcbiAgICAgICAgaWYgKHRpcG9FbmNvbnRyYWRvKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZGVyZWNvLnRpcG8gPSB0aXBvRW5jb250cmFkby5kZW5vbWluYWNhbztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5lbmRlcmVjby50aXBvKSB7XHJcbiAgICAgICAgY29uc3QgdGlwb0VuY29udHJhZG8gPSBsaXN0YS5maW5kKFxyXG4gICAgICAgICAgdCA9PiB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLmVuZGVyZWNvLnRpcG8/LnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAodGlwb0VuY29udHJhZG8pIHtcclxuICAgICAgICAgICAgdGhpcy5lbmRlcmVjby50aXBvRW5kZXJlY29Db2RpZ28gPSB0aXBvRW5jb250cmFkby5jb2RpZ28hO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTyBtZXRvZG8gZ2V0IHJldG9ybmEgdWYsIG1hcyBvIHB1dCBlc3BlcmEgdWZFbmRlcmVjb1xyXG4gICAgICAgIGlmICh0aGlzLmVuZGVyZWNvLnVmKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZGVyZWNvLnVmRW5kZXJlY28gPSB0aGlzLmVuZGVyZWNvLnVmOyAvLyBDb252ZXJ0ZSB1ZkVuZGVyZWNvIHBhcmEgdWZcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2FsdmFyKGZvcm06IE5nRm9ybSkge1xyXG4gICAgaWYgKGZvcm0uaW52YWxpZCkge1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcignRXhpc3RlbSBlcnJvcyBubyBmb3JtdWzDoXJpbywgcG9yIGZhdm9yLCB2ZXJpZmljYXIuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZhbGlkYXIodGhpcy5lbmRlcmVjbykgPT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmVuZGVyZWNvU2Fsdm8gPSB0aGlzLmVuZGVyZWNvO1xyXG4gICAgdGhpcy5zYWx2YXJjbG9zZSgpXHJcbiAgfVxyXG5cclxuICBjb21wYXJhclRpcG9zKHQxOiBhbnksIHQyOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0MSAmJiB0MiAmJiB0MS5jb2RpZ28gPT09IHQyLmNvZGlnbztcclxuICB9XHJcblxyXG4gIG9uVGlwb1NlbGVjaW9uYWRvKGNvZGlnb1NlbGVjaW9uYWRvOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHRpcG9TZWxlY2lvbmFkbyA9IHRoaXMubGlzdGFUaXBvRW5kZXJlY28uZmluZCh0ID0+IHQuY29kaWdvID09PSBjb2RpZ29TZWxlY2lvbmFkbyk7XHJcbiAgICBpZiAodGlwb1NlbGVjaW9uYWRvKSB7XHJcbiAgICAgIHRoaXMuZW5kZXJlY28udGlwbyA9IHRpcG9TZWxlY2lvbmFkby5kZW5vbWluYWNhbztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBlc3F1aXNhckNlcCgpIHtcclxuICAgaWYgKHRoaXMuZW5kZXJlY28uY2VwICYmIHRoaXMuZW5kZXJlY28uY2VwLnRyaW0oKSAhPT0gJycpIHtcclxuICAgICAgbGV0IGNlcEZvcm1hdGFkbyA9IHRoaXMuZW5kZXJlY28uY2VwLnJlcGxhY2UoL1xcRC9nLCAnJyk7IC8vIFJlbW92ZSBjYXJhY3RlcmVzIG7Do28gbnVtw6lyaWNvc1xyXG4gICAgICB0aGlzLnNlcnZpY2UucGVzcXVpc2FyQ2VwKGNlcEZvcm1hdGFkbykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YTogVW5iUGVzc29hRW5kZXJlY28pID0+IHtcclxuICAgICAgICAgIHRoaXMuZW5kZXJlY28ubG9ncmFkb3VybyA9IGRhdGEubG9ncmFkb3VybztcclxuICAgICAgICAgIHRoaXMuZW5kZXJlY28uYmFpcnJvID0gZGF0YS5iYWlycm87XHJcbiAgICAgICAgICB0aGlzLmVuZGVyZWNvLnVmRW5kZXJlY28gPSBkYXRhLnVmO1xyXG4gICAgICAgICAgdGhpcy5lbmRlcmVjby51ZiA9IGRhdGEudWY7XHJcbiAgICAgICAgICB0aGlzLmVuZGVyZWNvLmNvbXBsZW1lbnRvID0gZGF0YS5jb21wbGVtZW50bztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMub3BlblNuYWNrQmFyKCdGYWxoYSBhbyBlbmNvbnRyYXIgbyBDRVAnKTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gcGVzcXVpc2FyIENFUDonLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3BlblNuYWNrQmFyKCdQb3IgZmF2b3IsIGluc2lyYSB1bSBDRVAgdsOhbGlkby4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldExpc3RhRXN0YWRvcygpOiBhbnkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ0FDJywgJ0FMJywgJ0FQJywgJ0FNJywgJ0JBJywgJ0NFJywgJ0RGJywgJ0VTJywgJ0dPJywgJ01BJyxcclxuICAgICAgJ01UJywgJ01TJywgJ01HJywgJ1BBJywgJ1BCJywgJ1BSJywgJ1BFJywgJ1BJJywgJ1JKJywgJ1JOJyxcclxuICAgICAgJ1JTJywgJ1JPJywgJ1JSJywgJ1NDJywgJ1NQJywgJ1NFJywgJ1RPJ1xyXG4gICAgXTtcclxuICB9XHJcblxyXG4gLyoqXHJcbiAgICogVmFsaWRhIG8gb2JqZXRvIGRlIGUtbWFpbC5cclxuICAgKiBSZXRvcm5hIHRydWUgc2UgbyBlLW1haWwgZm9yIHbDoWxpZG8sIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgKi9cclxuICB2YWxpZGFyKGVuZGVyZWNvVG9WYWxpZGF0ZTogVW5iUGVzc29hRW5kZXJlY28pOiBib29sZWFuIHtcclxuICAgXHJcblxyXG4gICAgLy8gMy4gVmFsaWRhw6fDo28gZGUgZS1tYWlsIGR1cGxpY2FkbyBuYSBsaXN0YSBleGlzdGVudGVcclxuICAgIC8vIEZpbHRyYSBhIGxpc3RhIHBhcmEgZXhjbHVpciBvIHByw7NwcmlvIGVuZGVyZcOnbyBxdWUgZXN0w6Egc2VuZG8gZWRpdGFkbyAoc2UgZWxlIHRpdmVyIHVtICdjb2RpZ28nKVxyXG4gICAgY29uc3QgaXNEdXBsaWNhdGUgPSB0aGlzLmVuZGVyZWNvc0xpc3Quc29tZShleGlzdGluZ0VuZGVyZWNvID0+XHJcbiAgICAgIGV4aXN0aW5nRW5kZXJlY28ubG9ncmFkb3Vybz8udG9Mb3dlckNhc2UoKSA9PT0gZW5kZXJlY29Ub1ZhbGlkYXRlLmxvZ3JhZG91cm8/LnRvTG93ZXJDYXNlKCkgJiZcclxuICAgICAgZXhpc3RpbmdFbmRlcmVjby5jb2RpZ28gIT09IGVuZGVyZWNvVG9WYWxpZGF0ZS5jb2RpZ28gLy8gSWdub3JhIG8gcHLDs3ByaW8gZW5kZXJlw6dvIHNlIGVzdGl2ZXIgc2VuZG8gZWRpdGFkb1xyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoaXNEdXBsaWNhdGUpIHtcclxuICAgICAgdGhpcy5vcGVuU25hY2tCYXIoXCJFc3RlIGVuZGVyZcOnbyBqw6EgZXhpc3RlIG5hIGxpc3RhLlwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKTtcclxuICB9XHJcblxyXG4gIHNhbHZhcmNsb3NlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5lbmRlcmVjb1NhbHZvKTtcclxuICB9XHJcblxyXG4gIG9wZW5TbmFja0JhcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCAneCcsIHtcclxuICAgICAgZHVyYXRpb246IDUwMDAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59IiwiPGgxIG1hdC1kaWFsb2ctdGl0bGU+Q2FkYXN0cm8gZGUgRS1tYWlsPC9oMT5cclxuPGZvcm0gKG5nU3VibWl0KT1cInNhbHZhcihmb3JtKVwiICNmb3JtPVwibmdGb3JtXCI+XHJcbiAgPG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTEwMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJlbmRlcmVjby50aXBvRW5kZXJlY29Db2RpZ29cIiBuYW1lPVwidGlwb1wiICN0aXBvPVwibmdNb2RlbFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25UaXBvU2VsZWNpb25hZG8oJGV2ZW50LnZhbHVlKVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHRpcG8gb2YgdGlwb0VuZGVyZWNvIHwgYXN5bmNcIiBbdmFsdWVdPVwidGlwby5jb2RpZ29cIj5cclxuICAgICAgICAgICAge3t0aXBvLmRlbm9taW5hY2FvfX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTEwMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5DRVA8L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImVuZGVyZWNvLmNlcFwiIG5hbWU9XCJjZXBcIiAjY2VwPVwibmdNb2RlbFwiIC8+XHJcbiAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIChjbGljayk9XCJwZXNxdWlzYXJDZXAoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDJweDtcIj5zZWFyY2g8L21hdC1pY29uPiAgICAgICAgICAgIFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0yNVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5FbmRlcmXDp288L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImVuZGVyZWNvLmxvZ3JhZG91cm9cIiBuYW1lPVwibG9ncmFkb3Vyb1wiICNsb2dyYWRvdXJvPVwibmdNb2RlbFwiIC8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTEwMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5CYWlycm88L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImVuZGVyZWNvLmJhaXJyb1wiIG5hbWU9XCJiYWlycm9cIiAjYmFpcnJvPVwibmdNb2RlbFwiIC8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTEwMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5Db21wbGVtZW50bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZW5kZXJlY28uY29tcGxlbWVudG9cIiBuYW1lPVwiY29tcGxlbWVudG9cIiAjY29tcGxlbWVudG89XCJuZ01vZGVsXCIgLz5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMTAwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlVGPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJlbmRlcmVjby51ZlwiIG5hbWU9XCJ1ZlwiICN1Zj1cIm5nTW9kZWxcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB1ZiBvZiBnZXRMaXN0YUVzdGFkb3MoKVwiIFt2YWx1ZV09XCJ1ZlwiPlxyXG4gICAgICAgICAgICB7eyB1ZiB9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG5cclxuICA8bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY29sb3I9XCJ3YXJuXCIgKGNsaWNrKT1cImNsb3NlKClcIj5GZWNoYXI8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjb2xvcj1cInByaW1hcnlcIj5TYWx2YXI8L2J1dHRvbj5cclxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuPC9mb3JtPiJdfQ==
|