@stiunb/unb-lib-components 18.0.22 → 18.0.23
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/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.mjs +34 -11
- package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.mjs +65 -47
- package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.mjs +102 -14
- package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.mjs +71 -55
- package/esm2022/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.mjs +227 -42
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.mjs +1 -1
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.mjs +1 -1
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.mjs +2 -1
- package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +141 -8
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.mjs +62 -8
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.mjs +62 -32
- package/esm2022/lib/unb-pessoa/unb-pessoa.module.mjs +9 -1
- package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +9 -9
- package/esm2022/lib/unb-pessoa/unb-tipo-pessoa.enum.mjs +1 -1
- package/esm2022/lib/unb-usuario/oidc-decoded-token.mjs +1 -1
- package/esm2022/lib/unb-usuario/oidc-user-data.mjs +1 -1
- package/esm2022/public-api.mjs +14 -13
- package/esm2022/stiunb-unb-lib-components.mjs +5 -0
- package/fesm2022/stiunb-unb-lib-components.mjs +2469 -0
- package/fesm2022/stiunb-unb-lib-components.mjs.map +1 -0
- package/index.d.ts +1 -1
- package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.d.ts +3 -3
- package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.d.ts +6 -5
- package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.d.ts +6 -3
- package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.d.ts +6 -5
- package/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.d.ts +17 -5
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.d.ts +1 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.d.ts +3 -2
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.d.ts +5 -4
- package/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.d.ts +14 -1
- package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.d.ts +2 -2
- package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.d.ts +6 -5
- package/lib/unb-pessoa/unb-pessoa.module.d.ts +20 -18
- package/lib/unb-pessoa/unb-pessoa.service.d.ts +2 -1
- package/package.json +5 -5
- package/public-api.d.ts +10 -10
- package/esm2022/unb-lib-components.mjs +0 -5
- package/fesm2022/unb-lib-components.mjs +0 -1923
- package/fesm2022/unb-lib-components.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stiunb-unb-lib-components.mjs","sources":["../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-message.model.ts","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.service.ts","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.component.ts","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.component.html","../../../projects/unb-lib-components/src/lib/unb-mensagem/unb-mensagem.module.ts","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.model.ts","../../../projects/unb-lib-components/src/lib/services/unb-auth.service.ts","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.component.ts","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.component.html","../../../projects/unb-lib-components/src/lib/unb-nav-bar/unb-nav-bar.component.ts","../../../projects/unb-lib-components/src/lib/unb-nav-bar/unb-nav-bar.component.html","../../../projects/unb-lib-components/src/lib/unb-usuario/unb-usuario.module.ts","../../../projects/unb-lib-components/src/lib/unb-nav-bar/unb-nav-bar.module.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-tipo-pessoa.enum.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa.service.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/pessoa-tabelas-apoio.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.ts","../../../projects/unb-lib-components/src/lib/utils/unb-utils.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-telefone.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.html","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa.module.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-escolaridade.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-estado-civil.model.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-municipio.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-pais.ts","../../../projects/unb-lib-components/src/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-raca-cor.ts","../../../projects/unb-lib-components/src/public-api.ts","../../../projects/unb-lib-components/src/stiunb-unb-lib-components.ts"],"sourcesContent":["export class UnbMensagemModel {\r\n message!: string;\r\n background_color!: string;\r\n font_color!: string;\r\n border_color!: string;\r\n}","import { Injectable} from '@angular/core';\r\nimport { Observable, Subject} from 'rxjs';\r\nimport { UnbMensagemModel } from './unb-message.model';\r\n\r\n// faz com que a enum seja uma contagem de 0 a 3\r\nexport enum UnbTipoMensagemEnum {\r\n SUCCESS = 0,\r\n INFO,\r\n WARNING,\r\n DANGER,\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnbMensagemService {\r\n\r\n public messageSubject = new Subject<UnbMensagemModel>(); \r\n public cores: [[string, string, string], [string, string, string], [string, string, string], [string, string, string]]\r\n\r\n constructor(){\r\n // [background_color, font_color, border_color]\r\n this.cores = [\r\n ['#dff0d8', '#3c763d', '#d6e9c6'], // SUCCESS\r\n ['#d9edf7', '#31708f', '#bce8f1'], // INFO\r\n ['#fcf8e3', '#8a6d3b', '#faebcc'], // WARNING\r\n ['#f2dede', '#a94442', '#ebccd1'] // DANGER\r\n ]\r\n }\r\n\r\n /**\r\n * \r\n * @param message mensagem que vai aparecer na tela\r\n * @param tipo tipo da mensagem: success, info, warning, danger. \r\n */\r\n public showMessage(message: string, type: number){\r\n this.messageSubject.next(this.createAlertMessage(message, ...this.cores[type])); \r\n }\r\n\r\n /**\r\n * Esconde o componente de mensagem passando um valor vazio\r\n */\r\n public hideMessage(){\r\n this.messageSubject.next(new UnbMensagemModel()); \r\n }\r\n\r\n public getMessageSubject(): Observable<any> {\r\n return this.messageSubject.asObservable();\r\n } \r\n\r\n /**\r\n * \r\n * @param message Cria a mensagem passando os parametros com base nas cores criadas no construturo\r\n * @param background_color cor de fundo\r\n * @param font_color cor da fonte\r\n * @param border_color cor da borda\r\n * @returns \r\n */\r\n private createAlertMessage( message: string, background_color: string, font_color: string, border_color: string): UnbMensagemModel {\r\n return {message, background_color, font_color, border_color}; \r\n }\r\n\r\n\r\n}","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { UnbTipoMensagemEnum, UnbMensagemService } from './unb-mensagem.service';\r\nimport { UnbMensagemModel } from './unb-message.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { OnDestroy } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'unb-mensagem',\r\n templateUrl: './unb-mensagem.component.html',\r\n styleUrls: ['./unb-mensagem.component.css']\r\n})\r\nexport class UnbMensagemComponent implements OnInit, OnDestroy {\r\n\r\n @Input() mensagem!: string; // mensagem que vai aparecer no componente, \r\n @Input() tipo!: string; // tipo da mensagem: success, info, warning, danger. \r\n \r\n alertMessage!: UnbMensagemModel;\r\n private subscription!: Subscription | null;\r\n \r\n constructor(private mensagemService: UnbMensagemService) { \r\n\r\n }\r\n\r\n ngOnInit() { \r\n this.subscription = this.mensagemService.getMessageSubject().subscribe(message => {\r\n if(message){\r\n this.alertMessage = message;\r\n }else{\r\n //this.alertMessage = undefined;\r\n } \r\n }); \r\n }\r\n\r\n ngAfterContentInit(){\r\n if (this.mensagem != null && this.mensagem != undefined){\r\n this.showMessage(this.mensagem, this.getTipo()); \r\n }\r\n }\r\n\r\n /**\r\n * Esconde o componente de mensagem\r\n */\r\n hide(): void { \r\n this.mensagemService.hideMessage();\r\n }\r\n\r\n /**\r\n * \r\n * @param message mensagem que vai aparecer na tela\r\n * @param tipo tipo da mensagem: success, info, warning, danger. \r\n */\r\n showMessage(message: string, tipo: number) {\r\n this.mensagemService.showMessage(message, tipo);\r\n }\r\n \r\n ngOnDestroy() {\r\n // unsubscribe to ensure no memory leaks\r\n if (this.subscription){ \r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n\r\n /**\r\n * Recupera qual o tipo da mensagem. \r\n * O método tenta achar o tipo conforme o valor informado, incluido erros de digitação\r\n * \r\n * @returns o valor correspondente do informa. Caso não encontra, emite um erro e coloca retorna o padrão info como default\r\n */\r\n getTipo(): number {\r\n if (this.tipo != null && this.tipo != undefined){ \r\n let valor = this.tipo.toLowerCase();\r\n if (valor == 'warning' || valor == 'warn' || valor == 'aviso'){\r\n return UnbTipoMensagemEnum.WARNING ;\r\n }else if (valor == 'sucesso' || valor == 'success' || valor == 'sucess'){\r\n return UnbTipoMensagemEnum.SUCCESS;\r\n }else if (valor == 'danger' || valor == 'erro' || valor == 'error'){\r\n return UnbTipoMensagemEnum.DANGER;\r\n }else if (valor == 'info'){\r\n return UnbTipoMensagemEnum.INFO;\r\n }\r\n }\r\n // o padrao eh o info\r\n console.log(\"Erro: Input [tipo] do componente unb-mensagem tem um valor inválido. Utilize: \" + UnbTipoMensagemEnum.SUCCESS + \" | \" + UnbTipoMensagemEnum.INFO + \" | \" + UnbTipoMensagemEnum.WARNING + \" | \" + UnbTipoMensagemEnum.DANGER )\r\n return UnbTipoMensagemEnum.INFO;\r\n }\r\n}\r\n","\r\n<div class=\"alert\" *ngIf=\"alertMessage && alertMessage.message && alertMessage.message.length > 1\" [ngStyle]=\"{background: alertMessage.background_color, 'border-color': alertMessage.border_color}\"> \r\n <div class=\"mensagem\" [ngStyle]=\"{color: alertMessage.font_color}\" [innerHtml]= \"alertMessage.message\"></div>\r\n <a class=\"close\" (click)=\"hide()\" aria-label=\"fechar\" [ngStyle]=\"{color: alertMessage.font_color}\">x</a>\r\n</div> \r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { UnbMensagemComponent } from './unb-mensagem.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@NgModule({\r\n declarations: [ UnbMensagemComponent ],\r\n imports: [CommonModule, \r\n MatIconModule,\r\n MatButtonModule ],\r\n exports: [ UnbMensagemComponent ]\r\n})\r\nexport class UnbMensagemModule { }\r\n","export class UnbUsuarioModel {\r\n public autenticado: boolean = false;\r\n public usuarioNome: string = \"\";\r\n public perfis: string[] = [];\r\n public expiration: number = 0;\r\n}","import { Injectable } from '@angular/core';\r\nimport { LoginResponse, OidcSecurityService } from 'angular-auth-oidc-client';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { OidcDecodedToken } from '../unb-usuario/oidc-decoded-token';\r\nimport { OidcUserData } from '../unb-usuario/oidc-user-data';\r\nimport { UnbUsuarioModel } from '../unb-usuario/unb-usuario.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnbAuthService {\r\n // Inicializamos o BehaviorSubject com uma lista vazia de perfis\r\n private usuarioSubject = new BehaviorSubject<UnbUsuarioModel>(new UnbUsuarioModel);\r\n usuario$ = this.usuarioSubject.asObservable();\r\n private usuarioModel: UnbUsuarioModel = new UnbUsuarioModel();\r\n private oidcSecurityService!: OidcSecurityService;\r\n\r\n\r\n constructor() {\r\n \r\n }\r\n\r\n initiate(oidcSecurityService: OidcSecurityService) {\r\n this.oidcSecurityService = oidcSecurityService;\r\n this.logAuthenticatedState();\r\n }\r\n\r\n private logAuthenticatedState() {\r\n this.oidcSecurityService.checkAuth().subscribe((loginResponse: LoginResponse) => {\r\n if (!loginResponse.isAuthenticated) {\r\n this.usuarioModel.autenticado = false;\r\n this.usuarioSubject.next(this.usuarioModel);\r\n } else {\r\n this.usuarioModel.autenticado = true;\r\n this.setUserData(loginResponse.userData);\r\n }\r\n });\r\n }\r\n\r\n private setUserData(userData: OidcUserData) {\r\n const nomeCompleto = userData.given_name.trim();\r\n const nomes = nomeCompleto.split(' ');\r\n\r\n this.usuarioModel.usuarioNome = nomes.length > 1 \r\n ? `${nomes[0]} ${nomes[nomes.length - 1]}` \r\n : nomes[0];\r\n\r\n this.oidcSecurityService.getPayloadFromAccessToken().subscribe((authResult: OidcDecodedToken) => {\r\n this.usuarioModel.perfis = authResult.realm_access.roles || [];\r\n // Atualiza o BehaviorSubject com o modelo atualizado\r\n this.usuarioSubject.next(this.usuarioModel);\r\n });\r\n }\r\n\r\n public login() {\r\n this.oidcSecurityService.authorize();\r\n }\r\n\r\n public logout() {\r\n this.oidcSecurityService\r\n .logoff()\r\n .subscribe(() => this.usuarioSubject.next(new UnbUsuarioModel()) );\r\n }\r\n \r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbAuthService } from '../services/unb-auth.service';\r\nimport { UnbUsuarioModel } from './unb-usuario.model';\r\n\r\n@Component({\r\n selector: 'unb-usuario',\r\n templateUrl: './unb-usuario.component.html',\r\n styleUrls: ['./unb-usuario.component.css']\r\n})\r\nexport class UnbUsuarioComponent implements OnInit {\r\n usuario$!: Observable<UnbUsuarioModel>;\r\n \r\n @Input() oidcSecurityService!:OidcSecurityService;\r\n\r\n constructor(protected authService: UnbAuthService) { }\r\n\r\n ngOnInit() {\r\n if (this.oidcSecurityService == null) {\r\n console.log(\"Erro: oidcService está null!\")\r\n return;\r\n }\r\n\r\n this.authService.initiate(this.oidcSecurityService);\r\n this.usuario$ = this.authService.usuario$;\r\n }\r\n\r\n login() {\r\n this.authService.login();\r\n }\r\n\r\n logout() {\r\n this.authService.logout();\r\n }\r\n }\r\n","<button mat-mini-fab color=\"primary\" aria-label=\"Login Button\" [matMenuTriggerFor]=\"menu\">\r\n <mat-icon>person</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <div *ngIf=\"usuario$ | async as usuario\"> \r\n <mat-card-header class=\"menuHeader\" *ngIf=\"usuario && usuario.autenticado; else notAuthenticated\">\r\n <mat-card-title>\r\n <div class=\"user-info-container\">\r\n <span>{{ usuario.usuarioNome }}</span>\r\n <mat-icon matTooltip=\"{{ usuario.perfis.join(', ') }}\" aria-label=\"Perfis de usuário\" *ngIf=\"usuario.perfis\">\r\n account_circle\r\n </mat-icon>\r\n </div>\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <ng-template #notAuthenticated>\r\n <mat-card-header class=\"menuHeader\">\r\n <button mat-menu-item (click)=\"login()\">\r\n <mat-icon>login</mat-icon>\r\n <span>Login</span>\r\n </button>\r\n </mat-card-header>\r\n </ng-template>\r\n\r\n <mat-divider *ngIf=\"usuario.autenticado\"></mat-divider>\r\n\r\n <mat-card-actions *ngIf=\"usuario.autenticado\">\r\n <button mat-menu-item (click)=\"logout()\">\r\n <mat-icon>exit_to_app</mat-icon>\r\n <span>Sair</span>\r\n </button>\r\n </mat-card-actions>\r\n </div>\r\n</mat-menu>","import { BreakpointObserver } from '@angular/cdk/layout';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { MatSidenav } from '@angular/material/sidenav';\r\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\r\n\r\n@Component({\r\n selector: 'unb-nav-bar',\r\n templateUrl: './unb-nav-bar.component.html',\r\n styleUrls: ['./unb-nav-bar.component.css']\r\n})\r\nexport class UnbNavBarComponent {\r\n\r\n @Input() nomeSistema: string= \"Nome do Sistema\"; /* O nome do sistema */ \r\n @Input() menuSize = 300; /** O tamanho do menu em px */\r\n @Input() widthToHideMenu = 800; /* O tamanho da tela ateh esconder o menu */\r\n @Input() contentBackgroundColor = '#f0f3f7'; /* A cor do Content */\r\n @Input() containerPadding = 10; /* O tamanho do padding to container que fica o content */\r\n \r\n @Input() oidcSecurityService!:OidcSecurityService;\r\n\r\n @ViewChild(MatSidenav)\r\n sidenav!: MatSidenav;\r\n isMobile= true;\r\n\r\n constructor(private observer: BreakpointObserver) { }\r\n\r\n ngOnInit() {\r\n this.observer.observe(['(max-width: '+ this.widthToHideMenu + 'px)' ]).subscribe((screenSize) => {\r\n if(screenSize.matches){\r\n this.isMobile = true;\r\n } else {\r\n this.isMobile = false;\r\n }\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"example-container\" >\r\n <mat-toolbar class=\"example-toolbar\">\r\n <button mat-icon-button class=\"minifab\" type=\"button\" aria-label=\"Toggle sidenav\" color=\"accent\" (click)=\"snav.toggle()\"><mat-icon>menu</mat-icon></button> \r\n <img src=\"assets/img/unb_icon_branco.svg\" alt=\"\" style=\"width: 40px\"> \r\n <span style=\"color: white;\">{{nomeSistema}}</span>\r\n <span class=\"spacer\"></span> \r\n <unb-usuario [oidcSecurityService]=\"oidcSecurityService\"></unb-usuario>\r\n </mat-toolbar>\r\n\r\n <mat-sidenav-container class=\"example-sidenav-container\" [ngStyle]=\"{'background-color': contentBackgroundColor}\" > \r\n <mat-sidenav #snav [mode]=\"isMobile ? 'over' : 'side'\" [opened]=\"isMobile ? 'false' : 'true'\" [style.max-width.px]=\"menuSize\" > \r\n <ng-content select=\"[menu]\"></ng-content> \r\n </mat-sidenav>\r\n\r\n <mat-sidenav-content [ngStyle]=\"{'padding.px': containerPadding}\">\r\n <ng-content select=\"[body]\"></ng-content> \r\n </mat-sidenav-content>\r\n\r\n </mat-sidenav-container>\r\n</div>","import { LayoutModule } from '@angular/cdk/layout';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { UnbAuthService } from '../services/unb-auth.service';\r\nimport { UnbUsuarioComponent } from './unb-usuario.component';\r\n\r\n@NgModule({\r\n declarations: [UnbUsuarioComponent],\r\n imports: [\r\n BrowserModule,\r\n MatToolbarModule,\r\n MatSidenavModule,\r\n LayoutModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n MatListModule, \r\n MatButtonModule, \r\n MatCardModule,\r\n MatTooltipModule,\r\n MatMenuModule,\r\n MatDividerModule \r\n ], \r\n exports: [UnbUsuarioComponent],\r\n providers: [UnbAuthService]\r\n})\r\nexport class UnbUsuarioModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { UnbNavBarComponent } from './unb-nav-bar.component';\r\nimport { LayoutModule } from '@angular/cdk/layout';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { UnbUsuarioModule } from '../unb-usuario/unb-usuario.module';\r\nimport { MatCardModule } from '@angular/material/card';\r\n\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [UnbNavBarComponent],\r\n imports: [\r\n BrowserModule,\r\n MatToolbarModule,\r\n MatSidenavModule,\r\n LayoutModule,\r\n MatIconModule,\r\n MatListModule, \r\n MatButtonModule,\r\n UnbUsuarioModule, \r\n MatCardModule \r\n ],\r\n exports: [UnbNavBarComponent]\r\n})\r\nexport class UnbNavBarModule { }\r\n","export class UnbPessoaEmail {\r\n codigo?: number;\r\n tipoEmailCodigo?: number;\r\n tipo?: string;\r\n email?: string;\r\n autorizacao?: boolean;\r\n ordem?: number;\r\n ordemEmail?: number | null;\r\n}\r\n\r\nexport class UnbPessoaEmailTipo {\r\n index?: number;\r\n codigo?: number;\r\n denominacao?: string;\r\n}","export enum TipoPessoaEnum {\r\n FISICA = 'Física',\r\n JURIDICA = 'Jurídica',\r\n ESTRANGEIRA = 'Estrangeira'\r\n}","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, catchError, map, Observable, of, throwError } from 'rxjs';\r\nimport { UnbPessoaEmailTipo } from './unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnbPessoaEndereco, UnbPessoaEnderecoTipo } from './unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaEscolaridade } from './unb-pessoa-models/unb-pessoa-escolaridade.model';\r\nimport { UnbPessoaModel } from './unb-pessoa-models/unb-pessoa.model';\r\nimport { TipoPessoaEnum } from './unb-tipo-pessoa.enum';\r\nimport { UnbPessoaPais } from './unb-pessoa-models/unb-pessoa-pais';\r\nimport { UnbPessoaMunincipio } from './unb-pessoa-models/unb-pessoa-municipio';\r\nimport { UnbPessoaEstadoCivil } from './unb-pessoa-models/unb-pessoa-estado-civil.model';\r\nimport { UnbPessoaTelefoneTipo } from './unb-pessoa-models/unb-pessoa-telefone.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnBPessoaService {\r\n \r\n\r\n private apiConfigSubject = new BehaviorSubject<{ url: string; token: string }>({ url: '', token: '' });\r\n apiConfig$ = this.apiConfigSubject.asObservable();\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n // Atualiza a configuração global\r\n setApiConfig(config: { url: string; token: string }) {\r\n this.apiConfigSubject.next(config);\r\n }\r\n\r\n // Retorna a configuração atual\r\n getApiConfig(): { url: string; token: string } {\r\n return this.apiConfigSubject.getValue();\r\n }\r\n\r\n // Headers padrão\r\n private getHeaders() {\r\n const { token } = this.getApiConfig();\r\n return {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${token}`\r\n })\r\n };\r\n }\r\n\r\n // Métodos de busca\r\n findByCpf(cpf: string | undefined): Observable<UnbPessoaModel> {\r\n const url = `${this.getApiConfig().url}/pessoa-api/pessoas/fisicas?cpf=${cpf}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findByCnpj(cnpj: string | undefined): Observable<UnbPessoaModel> {\r\n const url = `${this.getApiConfig().url}/pessoa-api/pessoas/juridicas?cnpj=${cnpj}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findByPassaporte(passaporte: string | undefined): Observable<UnbPessoaModel> {\r\n const url = `${this.getApiConfig().url}/pessoa-api/pessoas/fisicas?passaporte=${passaporte}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n findPessoaFisicaById(id: number): Observable<UnbPessoaModel> {\r\n const url = `${this.getApiConfig().url}/pessoa-api/pessoas/fisicas/${id}`;\r\n return this.http.get<UnbPessoaModel>(url, this.getHeaders()).pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n pesquisarCep(cep: string) {\r\n const url = `${this.getApiConfig().url}/pessoa-api/public/busca-cep/servico-1/${cep}`;\r\n return this.http.get<UnbPessoaEndereco>(url, this.getHeaders()).pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n // Salvar (decide fisica ou juridica)\r\n salvar(payload: any, tipoPessoa: TipoPessoaEnum): Observable<UnbPessoaModel | null> {\r\n if (!payload) return throwError(() => new Error('Erro Local: Payload não pode ser null'));\r\n if (!tipoPessoa) return throwError(() => new Error('Erro Local: Tipo pessoa não pode ser null'));\r\n\r\n if (tipoPessoa == TipoPessoaEnum.FISICA || tipoPessoa == TipoPessoaEnum.ESTRANGEIRA) {\r\n return this.savePessoaFisica(payload);\r\n } else if (tipoPessoa == TipoPessoaEnum.JURIDICA) {\r\n return this.savePessoaJuridica(payload);\r\n }\r\n\r\n return of(null);\r\n }\r\n\r\n // Salvar Pessoa Física\r\n private savePessoaFisica(pessoa: UnbPessoaModel): Observable<UnbPessoaModel> {\r\n const url = this.getApiConfig().url;\r\n const httpOptions = this.getHeaders();\r\n const body = JSON.stringify(pessoa);\r\n\r\n if (pessoa.codigoPessoa == null) {\r\n return this.http.post<UnbPessoaModel>(`${url}/pessoa-api/pessoas/fisicas`, body, httpOptions);\r\n } else {\r\n return this.http.put<UnbPessoaModel>(`${url}/pessoa-api/pessoas/fisicas/${pessoa.codigoPessoa}`, body, httpOptions);\r\n }\r\n }\r\n\r\n // Salvar Pessoa Jurídica\r\n private savePessoaJuridica(pessoa: UnbPessoaModel): Observable<UnbPessoaModel> {\r\n const url = this.getApiConfig().url;\r\n const httpOptions = this.getHeaders();\r\n const body = JSON.stringify(pessoa);\r\n\r\n if (pessoa.codigoPessoa == null) {\r\n return this.http.post<UnbPessoaModel>(`${url}/pessoa-api/pessoas/juridicas`, body, httpOptions);\r\n } else {\r\n return this.http.put<UnbPessoaModel>(`${url}/pessoa-api/pessoas/juridicas/${pessoa.codigoPessoa}`, body, httpOptions);\r\n }\r\n }\r\n\r\n // Dados auxiliares públicos\r\n public getEscolaridade() {\r\n return this.http.get<UnbPessoaEscolaridade[]>(`${this.getApiConfig().url}/pessoa-api/public/escolaridades/listagem`);\r\n }\r\n\r\n public getEstadoCivil() {\r\n return this.http.get<UnbPessoaEstadoCivil[]>(`${this.getApiConfig().url}/pessoa-api/public/estados-civis/listagem`);\r\n }\r\n\r\n public getMunicipios() {\r\n return this.http.get<UnbPessoaMunincipio[]>(`${this.getApiConfig().url}/pessoa-api/public/municipios/listagem`);\r\n }\r\n\r\n public getPaises() {\r\n return this.http.get<{ content: UnbPessoaPais[] }>(\r\n `${this.getApiConfig().url}/pessoa-api/public/paises/listagem?&page=0&size=200&sort=denominacao,asc`\r\n ).pipe(\r\n map(response => {\r\n return response.content.sort((a, b) => {\r\n const nomeA = a?.denominacao?.toUpperCase() || '';\r\n const nomeB = b?.denominacao?.toUpperCase() || '';\r\n\r\n if (nomeA === 'BRASIL') return -1;\r\n if (nomeB === 'BRASIL') return 1;\r\n\r\n return nomeA.localeCompare(nomeB);\r\n });\r\n })\r\n );\r\n }\r\n public getRacaCor() {\r\n return this.http.get<string[]>(`${this.getApiConfig().url}/pessoa-api/public/etnias/listagem`).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n })))\r\n ); \r\n }\r\n\r\n public getTipoEmail() {\r\n return this.http.get<string[]>(`${this.getApiConfig().url}/pessoa-api/tipos-email/public/listagem` ).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n })))\r\n );\r\n } \r\n\r\n public getTipoEndereco() {\r\n return this.http.get<string[]>(`${this.getApiConfig().url}/pessoa-api/tipos-endereco/public/listagem`).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n })))\r\n );\r\n }\r\n\r\n public getTipoTelefone() {\r\n return this.http.get<string[]>(`${this.getApiConfig().url}/pessoa-api/tipos-telefone/public/listagem`).pipe(\r\n map(lista => lista.map((item, index) => ({\r\n codigo: index, // gera um código numérico sequencial\r\n denominacao: this.formatarLabel(item) // formata se quiser\r\n })))\r\n );\r\n }\r\n\r\n private formatarLabel(text: string) {\r\n return text\r\n .toLowerCase()\r\n .replace(/_/g, ' ')\r\n .replace(/\\b\\w/g, l => l.toUpperCase());\r\n }\r\n\r\n\r\n // Handler de erro padrão\r\n private handleError(error: any) {\r\n console.error('[UnBPessoaService] Erro na chamada HTTP:', error);\r\n return throwError(() => error);\r\n }\r\n}","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaEmail, UnbPessoaEmailTipo } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { NgForm } from '@angular/forms';\r\n\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-email-form',\r\n templateUrl: './unb-pessoa-email-form.html',\r\n styleUrl: './unb-pessoa-email-form.css'\r\n})\r\nexport class UnbPessoaEmailFormComponent implements OnInit {\r\n emailSalvo!: UnbPessoaEmail;\r\n email = new UnbPessoaEmail();\r\n emailsList: UnbPessoaEmail[];\r\n tipoEmail!: Observable<UnbPessoaEmailTipo[]>;\r\n listaTipoEmail: UnbPessoaEmailTipo[] = [];\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialogRef: MatDialogRef<UnbPessoaEmailFormComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.email = JSON.parse(JSON.stringify(data.email)); // O e-mail específico para edição\r\n\r\n // Verifique se a lista de e-mails foi passada e atribua-a\r\n if (data.emailsList) {\r\n this.emailsList = JSON.parse(JSON.stringify(data.emailsList)); // Faça uma cópia profunda se for manipular\r\n } else {\r\n this.emailsList = []; // Inicialize como vazio se não for passada\r\n }\r\n\r\n if (!this.email) {\r\n this.email = new UnbPessoaEmail();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.tipoEmail = this.service.getTipoEmail();\r\n // Inscreve para guardar a lista em uma variável comum\r\n this.tipoEmail.subscribe(lista => {\r\n this.listaTipoEmail = lista;\r\n\r\n // Se já tiver tipoEmailCodigo, preenche o nome correspondente\r\n if (this.email.tipoEmailCodigo != null) {\r\n const tipoEncontrado = lista.find(t => t.codigo === this.email.tipoEmailCodigo);\r\n if (tipoEncontrado) {\r\n this.email.tipo = tipoEncontrado.denominacao;\r\n }\r\n } else if (this.email.tipo) {\r\n const tipoEncontrado = lista.find(\r\n t => t.denominacao?.toLowerCase() === this.email.tipo?.toLowerCase()\r\n );\r\n if (tipoEncontrado) {\r\n this.email.tipoEmailCodigo = tipoEncontrado.codigo!;\r\n }\r\n }\r\n });\r\n }\r\n\r\n salvar(form: NgForm) {\r\n if (form.invalid) {\r\n this.openSnackBar('Existem erros no formulário, por favor, verificar.');\r\n return;\r\n }\r\n\r\n // 1. Define o 'tipo' padrão (ex: 1 para 'Pessoal') se não for preenchido\r\n if (!this.email.tipoEmailCodigo) {\r\n this.email.tipoEmailCodigo = 1; // 1 é geralmente 'Pessoal'\r\n }\r\n\r\n // 2. Define a 'ordem' (que o back-end chama de 'ordemEmail')\r\n if (!this.email.ordem || this.email.ordem === 0) {\r\n let maxOrdem = 0;\r\n\r\n // Verifica se a lista de emails já existe e tem itens\r\n if (this.emailsList && this.emailsList.length > 0) {\r\n maxOrdem = Math.max(...this.emailsList.map(e => e.ordem || 0));\r\n }\r\n\r\n // Define a ordem do novo email como a maior ordem + 1\r\n this.email.ordem = maxOrdem + 1;\r\n }\r\n // --- Fim da Modificação ---\r\n\r\n if (this.validar(this.email) == false) return;\r\n\r\n this.emailSalvo = this.email;\r\n this.salvarclose()\r\n }\r\n\r\n compararTipos(t1: any, t2: any): boolean {\r\n return t1 && t2 && t1 === t2;\r\n }\r\n\r\n onTipoSelecionado(codigoSelecionado: number) {\r\n const tipoSelecionado = this.listaTipoEmail.find(t => t.codigo === codigoSelecionado);\r\n if (tipoSelecionado) {\r\n this.email.tipo = tipoSelecionado.denominacao;\r\n }\r\n }\r\n\r\n /**\r\n * Valida o objeto de e-mail, replicando as regras do validador do backend.\r\n * Retorna true se o e-mail for válido, false caso contrário.\r\n */\r\n validar(emailToValidate: UnbPessoaEmail): boolean {\r\n\r\n // 1. Validação de campo obrigatório (do Java)\r\n if (!emailToValidate.email || emailToValidate.email.trim() === '') {\r\n this.openSnackBar(\"E-mail é um campo obrigatório.\");\r\n return false;\r\n }\r\n\r\n // 2. Validação de Tamanho Máximo (do Java)\r\n if (emailToValidate.email.trim().length > 60) {\r\n this.openSnackBar(\"E-mail deve ter no máximo 60 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 3. Validação de formato de e-mail (do Java e do Angular)\r\n // [Java: !Validadores.validarEmail(request.getEmail())]\r\n const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\r\n if (!emailRegex.test(emailToValidate.email)) {\r\n this.openSnackBar(\"Digite um E-mail válido.\");\r\n return false;\r\n }\r\n\r\n // 4. Validação de e-mail duplicado (do seu Angular)\r\n const isDuplicate = this.emailsList.some(existingEmail =>\r\n existingEmail.email?.toLowerCase() === emailToValidate.email?.toLowerCase() &&\r\n existingEmail.codigo !== emailToValidate.codigo // Ignora o próprio e-mail se estiver sendo editado\r\n );\r\n\r\n if (isDuplicate) {\r\n this.openSnackBar(\"Este e-mail já existe na lista.\");\r\n return false;\r\n }\r\n\r\n // Nota: As validações de 'ordemEmail' e 'tipoEmailCodigo' do Java\r\n // já são tratadas na sua função 'salvar()',\r\n // que atribui valores padrão antes desta função 'validar()' ser chamada.\r\n\r\n return true; // Passou em todas as validações!\r\n }\r\n\r\n close() {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n salvarclose() {\r\n this.dialogRef.close(this.emailSalvo);\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n}","<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)]=\"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 <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 </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>","export class UnbPessoaEndereco {\r\n codigo?: number;\r\n tipoEnderecoCodigo?: number;\r\n tipo?: string;\r\n cep?: string;\r\n logradouro?: string;\r\n municipio?: string;\r\n bairro?: string;\r\n ufEndereco?: string; \r\n uf?: string;\r\n pais?: string;\r\n complemento?: string;\r\n caixaPostal?: string;\r\n correspondencia?: boolean;\r\n ordemEndereco?: number | null;\r\n ordem?: number;\r\n paisEnderecoCodigo?: number | null;\r\n municipioCodigo?: number;\r\n}\r\n\r\nexport class UnbPessoaEnderecoTipo {\r\n codigo?: number;\r\n denominacao?: string;\r\n}","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaEndereco, UnbPessoaEnderecoTipo } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { NgForm } from '@angular/forms';\r\nimport { UnbPessoaPais } from '../unb-pessoa-models/unb-pessoa-pais';\r\n\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-endereco-form',\r\n templateUrl: './unb-pessoa-endereco-form.html',\r\n styleUrl: './unb-pessoa-endereco-form.css'\r\n})\r\nexport class UnbPessoaEnderecoFormComponent implements OnInit {\r\n\r\n enderecoSalvo!: UnbPessoaEndereco;\r\n endereco = new UnbPessoaEndereco();\r\n enderecosList: UnbPessoaEndereco[];\r\n tipoEndereco!: Observable<UnbPessoaEnderecoTipo[]>;\r\n listaTipoEndereco: UnbPessoaEnderecoTipo[] = [];\r\n listaPaises: UnbPessoaPais[] = [];\r\n paises!: Observable<UnbPessoaPais[]>;\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialogRef: MatDialogRef<UnbPessoaEnderecoFormComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.endereco = JSON.parse(JSON.stringify(data.endereco)); // O e-mail específico para edição\r\n\r\n // Verifique se a lista de e-mails foi passada e atribua-a\r\n if (data.enderecosList) {\r\n this.enderecosList = JSON.parse(JSON.stringify(data.enderecosList)); // Faça uma cópia profunda se for manipular\r\n } else {\r\n this.enderecosList = []; // Inicialize como vazio se não for passada\r\n }\r\n\r\n if (!this.endereco) {\r\n this.endereco = new UnbPessoaEndereco();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.tipoEndereco = this.service.getTipoEndereco();\r\n this.paises = this.service.getPaises(); // Você já tinha isso\r\n\r\n // --- Preenche o Tipos de Endereço ---\r\n this.tipoEndereco.subscribe(lista => {\r\n this.listaTipoEndereco = lista;\r\n\r\n // Se já tiver tipoEnderecoCodigo, preenche o nome correspondente\r\n if (this.endereco.tipoEnderecoCodigo != null) {\r\n const tipoEncontrado = lista.find(t => t.codigo === this.endereco.tipoEnderecoCodigo);\r\n if (tipoEncontrado) {\r\n this.endereco.tipo = tipoEncontrado.denominacao;\r\n }\r\n } else if (this.endereco.tipo) {\r\n // Se tiver só o nome, preenche o código\r\n const tipoEncontrado = lista.find(\r\n t => t.denominacao?.toLowerCase() === this.endereco.tipo?.toLowerCase()\r\n );\r\n\r\n if (tipoEncontrado) {\r\n this.endereco.tipoEnderecoCodigo = tipoEncontrado.codigo!;\r\n }\r\n }\r\n\r\n // O metodo get retorna uf, mas o put espera ufEndereco\r\n if (this.endereco.uf) {\r\n this.endereco.ufEndereco = this.endereco.uf; // Converte uf para ufEndereco\r\n }\r\n });\r\n\r\n // --- Preenche o País ---\r\n this.paises.subscribe(listaDePaises => {\r\n this.listaPaises = listaDePaises; // Armazena a lista de países\r\n \r\n const CODIGO_BRASIL = 22; // Código padrão para o Brasil\r\n\r\n // Lógica 1: Se o ID do país já existe (ex: 22), encontra o nome (ex: \"Brasil\")\r\n if (this.endereco.paisEnderecoCodigo != null) {\r\n const paisEncontrado = this.listaPaises.find(p => p.codigo === this.endereco.paisEnderecoCodigo);\r\n if (paisEncontrado) {\r\n this.endereco.pais = paisEncontrado.denominacao;\r\n }\r\n } \r\n // Lógica 2: Se o nome do país existe (ex: \"Brasil\"), encontra o ID (ex: 22)\r\n else if (this.endereco.pais) {\r\n const paisEncontrado = this.listaPaises.find(\r\n p => p.denominacao?.toLowerCase() === this.endereco.pais?.toLowerCase()\r\n );\r\n \r\n if (paisEncontrado) {\r\n this.endereco.paisEnderecoCodigo = paisEncontrado.codigo;\r\n } else {\r\n // Se o nome foi fornecido mas não encontrado na lista, assume Brasil\r\n this.endereco.paisEnderecoCodigo = CODIGO_BRASIL;\r\n }\r\n } \r\n // Lógica 3: Se nem o ID nem o nome existem, assume Brasil por padrão\r\n else {\r\n this.endereco.paisEnderecoCodigo = CODIGO_BRASIL;\r\n }\r\n });\r\n }\r\n\r\n salvar(form: NgForm) {\r\n if (form.invalid) {\r\n this.openSnackBar('Existem erros no formulário, por favor, verificar.');\r\n return;\r\n }\r\n\r\n // Se a ordemEndereco não estiver definida (novo item) ou for 0\r\n if (!this.endereco.ordemEndereco || this.endereco.ordemEndereco === 0) {\r\n let maxOrdem = 0;\r\n if (this.enderecosList && this.enderecosList.length > 0) {\r\n maxOrdem = Math.max(...this.enderecosList.map(e => e.ordemEndereco || 0));\r\n }\r\n this.endereco.ordemEndereco = maxOrdem + 1;\r\n }\r\n\r\n if (this.validar(this.endereco) == false) return;\r\n\r\n this.enderecoSalvo = this.endereco;\r\n this.salvarclose()\r\n }\r\n\r\n compararTipos(t1: any, t2: any): boolean {\r\n return t1 && t2 && t1.codigo === t2.codigo;\r\n }\r\n\r\n onTipoSelecionado(codigoSelecionado: number) {\r\n const tipoSelecionado = this.listaTipoEndereco.find(t => t.codigo === codigoSelecionado);\r\n if (tipoSelecionado) {\r\n this.endereco.tipo = tipoSelecionado.denominacao;\r\n }\r\n }\r\n\r\n pesquisarCep() {\r\n if (this.endereco.cep && this.endereco.cep.trim() !== '') {\r\n let cepFormatado = this.endereco.cep.replace(/\\D/g, ''); // Remove caracteres não numéricos\r\n this.service.pesquisarCep(cepFormatado).subscribe({\r\n next: (data: UnbPessoaEndereco) => {\r\n this.endereco.logradouro = data.logradouro;\r\n this.endereco.bairro = data.bairro;\r\n this.endereco.ufEndereco = data.uf;\r\n this.endereco.uf = data.uf;\r\n this.endereco.complemento = data.complemento;\r\n },\r\n error: (error) => {\r\n this.openSnackBar('Falha ao encontrar o CEP');\r\n console.error('Erro ao pesquisar CEP:', error);\r\n }\r\n });\r\n } else {\r\n this.openSnackBar('Por favor, insira um CEP válido.');\r\n }\r\n }\r\n\r\n getListaEstados(): any {\r\n return [\r\n 'AC', 'AL', 'AP', 'AM', 'BA', 'CE', 'DF', 'ES', 'GO', 'MA',\r\n 'MT', 'MS', 'MG', 'PA', 'PB', 'PR', 'PE', 'PI', 'RJ', 'RN',\r\n 'RS', 'RO', 'RR', 'SC', 'SP', 'SE', 'TO'\r\n ];\r\n }\r\n\r\n /**\r\n * Valida o objeto de endereço, replicando as regras do validador do backend.\r\n * Retorna true se o endereço for válido, false caso contrário.\r\n */\r\n validar(enderecoToValidate: UnbPessoaEndereco): boolean {\r\n \r\n // 1. Validação de tipoEnderecoCodigo (Obrigatório e 0-4)\r\n // [Java: request.getTipoEnderecoCodigo() == null]\r\n if (enderecoToValidate.tipoEnderecoCodigo == null) {\r\n this.openSnackBar(\"Tipo de Endereço é um campo obrigatório.\");\r\n return false;\r\n }\r\n // [Java: request.getTipoEnderecoCodigo() < (byte) 0 || request.getTipoEnderecoCodigo() > (byte) 4]\r\n if (enderecoToValidate.tipoEnderecoCodigo < 0 || enderecoToValidate.tipoEnderecoCodigo > 4) {\r\n this.openSnackBar(\"Tipo de Endereço é inválido (deve ser entre 0 e 4).\");\r\n return false;\r\n }\r\n\r\n // 3. Validação de CEP (8 dígitos, se preenchido)\r\n // [Java: request.getCep().trim().length() != 8]\r\n if (enderecoToValidate.cep && enderecoToValidate.cep.trim() !== '') {\r\n const cepLimpo = enderecoToValidate.cep.replace(/\\D/g, ''); // Remove não-dígitos\r\n if (cepLimpo.length !== 8) {\r\n this.openSnackBar(\"CEP deve conter 8 dígitos.\");\r\n return false;\r\n }\r\n }\r\n\r\n // 4. Validação de Logradouro (Max 100, se preenchido)\r\n // [Java: request.getLogradouro().trim().length() > 100]\r\n if (enderecoToValidate.logradouro && enderecoToValidate.logradouro.trim().length > 100) {\r\n this.openSnackBar(\"Logradouro deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 5. Validação de Bairro (Max 100, se preenchido)\r\n // [Java: request.getBairro().trim().length() > 100]\r\n if (enderecoToValidate.bairro && enderecoToValidate.bairro.trim().length > 100) {\r\n this.openSnackBar(\"Bairro deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 6. Validação de Complemento (Max 100, se preenchido)\r\n // [Java: request.getComplemento().trim().length() > 100]\r\n if (enderecoToValidate.complemento && enderecoToValidate.complemento.trim().length > 100) {\r\n this.openSnackBar(\"Complemento deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 7. Validação de Caixa Postal (Max 100, se preenchida)\r\n // [Java: request.getCaixaPostal().trim().length() > 100]\r\n if (enderecoToValidate.caixaPostal && enderecoToValidate.caixaPostal.trim().length > 100) {\r\n this.openSnackBar(\"Caixa Postal deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 8. Validação de UF (2 caracteres, se preenchida)\r\n // O form usa 'ufEndereco', o java usa 'uf'. O ngOnInit mapeia uf -> ufEndereco.\r\n // [Java: request.getUf().trim().length() != 2]\r\n if (enderecoToValidate.ufEndereco && enderecoToValidate.ufEndereco.trim().length !== 2) {\r\n this.openSnackBar(\"UF deve ter 2 caracteres.\");\r\n return false;\r\n }\r\n\r\n // --- Validação de Duplicar ---\r\n const isDuplicate = this.enderecosList.some(existingEndereco =>\r\n existingEndereco.logradouro?.toLowerCase() === enderecoToValidate.logradouro?.toLowerCase() &&\r\n existingEndereco.codigo !== enderecoToValidate.codigo // Ignora o próprio endereço se estiver sendo editado\r\n );\r\n\r\n if (isDuplicate) {\r\n this.openSnackBar(\"Este endereço já existe na lista.\");\r\n return false;\r\n }\r\n\r\n return true; // Passou em todas as validações\r\n }\r\n\r\n close() {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n salvarclose() {\r\n this.dialogRef.close(this.enderecoSalvo);\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n}","<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\"\r\n (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-10\" appearance=\"outline\">\r\n <mat-label>País</mat-label>\r\n\r\n <mat-select [(ngModel)]=\"endereco.paisEnderecoCodigo\" name=\"paisEnderecoCodigo\" #paisEnderecoCodigo=\"ngModel\">\r\n\r\n <mat-option *ngFor=\"let paises of paises | async\" [value]=\"paises.codigo\">\r\n <span *ngIf=\"paises.denominacao === 'BRASIL'\">🇧🇷 <b>{{ paises.denominacao }}</b></span>\r\n <span *ngIf=\"paises.denominacao !== 'BRASIL'\">{{ paises.denominacao }}</span>\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ço</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>","export const listaEstados = [\r\n { codigo: 1, identificador: 'AC', descricao: \"Acre\" },\r\n { codigo: 2, identificador: 'AL', descricao: \"Alagoas\" },\r\n { codigo: 3, identificador: 'AM', descricao: \"Amazonas\" },\r\n { codigo: 4, identificador: 'AP', descricao: \"Amapá\" },\r\n { codigo: 5, identificador: 'BA', descricao: \"Bahia\" },\r\n { codigo: 6, identificador: 'CE', descricao: \"Ceará\" },\r\n { codigo: 7, identificador: 'DF', descricao: \"Distrito Federal\" },\r\n { codigo: 8, identificador: 'ES', descricao: \"Espírito Santo\" },\r\n { codigo: 9, identificador: 'GO', descricao: \"Goiás\" },\r\n { codigo: 10, identificador: 'MA', descricao: \"Maranhão\" },\r\n { codigo: 11, identificador: 'MG', descricao: \"Minas Gerais\" },\r\n { codigo: 12, identificador: 'MS', descricao: \"Mato Grosso do Sul\" },\r\n { codigo: 13, identificador: 'MT', descricao: \"Mato Grosso\" },\r\n { codigo: 14, identificador: 'PA', descricao: \"Pará\" },\r\n { codigo: 15, identificador: 'PB', descricao: \"Paraíba\" },\r\n { codigo: 16, identificador: 'PE', descricao: \"Pernambuco\" },\r\n { codigo: 17, identificador: 'PI', descricao: \"Piauí\" },\r\n { codigo: 18, identificador: 'PR', descricao: \"Paraná\" },\r\n { codigo: 19, identificador: 'RJ', descricao: \"Rio de Janeiro\" },\r\n { codigo: 20, identificador: 'RN', descricao: \"Rio Grande do Norte\" },\r\n { codigo: 21, identificador: 'RO', descricao: \"Rondônia\" },\r\n { codigo: 22, identificador: 'RR', descricao: \"Roraima\" },\r\n { codigo: 23, identificador: 'RS', descricao: \"Rio Grande do Sul\" },\r\n { codigo: 24, identificador: 'SC', descricao: \"Santa Catarina\" },\r\n { codigo: 25, identificador: 'SE', descricao: \"Sergipe\" },\r\n { codigo: 26, identificador: 'SP', descricao: \"São Paulo\" },\r\n { codigo: 27, identificador: 'TO', descricao: \"Tocantins\" }\r\n];","import { TipoPessoaEnum } from \"../unb-tipo-pessoa.enum\";\r\nimport { UnbPessoaEmail } from \"./unb-pessoa-email.model\";\r\nimport { UnbPessoaEndereco } from \"./unb-pessoa-endereco.model\";\r\nimport { UnbPessoaPais } from \"./unb-pessoa-pais\";\r\nimport { UnbPessoaTelefone } from \"./unb-pessoa-telefone.model\";\r\n\r\n/** \r\n * Essa eh uma classe base, com propriedades comum a todas as outras pessoas. \r\n * */\r\nexport class UnbPessoaModel {\r\n idPessoa!: number;\r\n codigoPessoa!: number; \r\n enderecos!: UnbPessoaEndereco[];\r\n telefones!: UnbPessoaTelefone[];\r\n emails!: UnbPessoaEmail[];\r\n tipoPessoa!: TipoPessoaEnum; // inicializa com o fisica selecionado\r\n\r\n // Atributos da Pessoa Física\r\n idServidor!: number;\r\n matriculaSipes!: number;\r\n matriculaSiape!: number;\r\n nome!: string;\r\n cpf!: string;\r\n rg!: string;\r\n rgOrgao!: string;\r\n rgUf!: string;\r\n rgDataEmissao!: string;\r\n numeroTituloEleitor!: string;\r\n dataEmissaoTituloEleitor!: string;\r\n zonaTituloEleitor!: string;\r\n secaoTituloEleitor!: string;\r\n ufTituloEleitor!: string;\r\n numeroReservista!: string;\r\n serieReservista!: string;\r\n orgaoReservista!: string;\r\n dataNascimento!: Date | null;\r\n \r\n paisNascimento!: string;\r\n ufNascimento!: string;\r\n naturalidade!: string;\r\n codigoPaisNascimento!: number | null ;;\r\n codigoPaisPassaporte!: number;\r\n codigoEstadoCivil!: number | null ;\r\n nacionalidade!: string;\r\n estadoCivil!: string;\r\n nomePai!: string;\r\n nomeMae!: string;\r\n tipoSanguineo!: string;\r\n escolaridade!: number |null;\r\n numeroCarteiraTrabalho!: string;\r\n serieCarteiraTrabalho!: string;\r\n ufCarteiraTrabalho!: string;\r\n pisPasep!: string;\r\n numeroHabilitacao!: string;\r\n registroHabilitacao!: string;\r\n dataEmissaoHabilitacao!: string;\r\n dataValidadeHabilitacao!: string;\r\n categoriaHabilitacao!: string;\r\n deficienciaFisicaHabilitacao!: string;\r\n primeiraHabilitacao!: string;\r\n autoCadastro!: boolean;\r\n nomeSocial!: string;\r\n sexo!: string; \r\n codigoSexo!: number;\r\n\r\n // Atributos da Pessoa Estrangeira\r\n passaporte!: string;\r\n paisOrigem!: string;\r\n dataChegadaBrasil!: Date | null;\r\n\r\n // Atributos da Pessoa Jurídica\r\n cnpj!: string;\r\n razaoSocial!: string;\r\n nomeFantasia!: string;\r\n sigla!: string;\r\n pais!: UnbPessoaPais;\r\n paginaWeb!: string;\r\n\r\n}","export class UnbUtils {\r\n removeNull(key:any, value:any) {\r\n // Filtering out properties\r\n if (value === null) {\r\n return undefined;\r\n }\r\n\r\n return value;\r\n }\r\n \r\n // forma cpf\r\n static formataCpf(valor:any) {\r\n return valor.replace(/(\\d{3})(\\d{3})(\\d{3})(\\d{2})/g,\"\\$1.\\$2.\\$3\\-\\$4\");\r\n }\r\n\r\n // forma cpf ou cnpj\r\n static formataCnpj(valor:string): string {\r\n return valor.replace(/^(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})$/, \"$1.$2.$3/$4-$5\");\r\n }\r\n\r\n static validarCPF(cpf: string): boolean {\r\n if (!cpf) return false; // Se CPF for null, undefined ou vazio, retorna falso\r\n \r\n cpf = cpf.replace(/\\D/g, ''); // Remove todos os caracteres não numéricos \r\n if (cpf=='') return false;\r\n\r\n if (cpf.length !== 11 || /^(\\d)\\1+$/.test(cpf)) {\r\n return false; // Verifica se tem 11 dígitos e não é uma sequência repetida (ex: 11111111111)\r\n }\r\n \r\n let soma = 0, resto: number;\r\n \r\n // Validação do primeiro dígito verificador\r\n for (let i = 0; i < 9; i++) {\r\n soma += Number(cpf[i]) * (10 - i);\r\n }\r\n \r\n resto = (soma * 10) % 11;\r\n if (resto === 10 || resto === 11) resto = 0;\r\n if (resto !== Number(cpf[9])) return false;\r\n \r\n soma = 0;\r\n \r\n // Validação do segundo dígito verificador\r\n for (let i = 0; i < 10; i++) {\r\n soma += Number(cpf[i]) * (11 - i);\r\n }\r\n \r\n resto = (soma * 10) % 11;\r\n if (resto === 10 || resto === 11) resto = 0;\r\n \r\n return resto === Number(cpf[10]);\r\n }\r\n \r\n\r\n static validarCNPJ(cnpj: string): boolean {\r\n cnpj = cnpj.replace(/[^\\d]+/g, ''); // Remove caracteres não numéricos\r\n \r\n if (cnpj.length !== 14 || /^(\\d)\\1+$/.test(cnpj)) {\r\n return false; // Verifica se tem 14 dígitos e não é uma sequência repetida\r\n }\r\n \r\n let tamanho = cnpj.length - 2;\r\n let numeros = cnpj.substring(0, tamanho);\r\n let digitos = cnpj.substring(tamanho);\r\n let soma = 0, pos = tamanho - 7;\r\n \r\n for (let i = tamanho; i >= 1; i--) {\r\n soma += parseInt(numeros.charAt(tamanho - i)) * pos--;\r\n if (pos < 2) pos = 9;\r\n }\r\n \r\n let resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);\r\n if (resultado !== parseInt(digitos.charAt(0))) return false;\r\n \r\n tamanho = tamanho + 1;\r\n numeros = cnpj.substring(0, tamanho);\r\n soma = 0;\r\n pos = tamanho - 7;\r\n \r\n for (let i = tamanho; i >= 1; i--) {\r\n soma += parseInt(numeros.charAt(tamanho - i)) * pos--;\r\n if (pos < 2) pos = 9;\r\n }\r\n \r\n resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);\r\n return resultado === parseInt(digitos.charAt(1));\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { UnbUtils } from '../../utils/unb-utils';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { TipoPessoaEnum } from '../unb-tipo-pessoa.enum';\r\nimport { UnbPessoaEnderecoTipo } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaTelefoneTipo } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnbPessoaEmailTipo } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { forkJoin } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-unb-pessoa-pesquisar',\r\n standalone: false,\r\n templateUrl: './unb-pessoa-pesquisar.component.html',\r\n styleUrl: './unb-pessoa-pesquisar.component.css'\r\n})\r\nexport class UnbPessoaPesquisarComponent implements OnInit {\r\n isLoading = false;\r\n\r\n @Input() apiPessoaConfig: { url: string; token: string } = { url: '', token: '' };\r\n @Input() pesquisarPorCPF = true;\r\n @Input() pesquisarPorCNPJ = true;\r\n @Input() pesquisarPorEstrangeiro = true;\r\n @Input() defaultTipoPessoa!: TipoPessoaEnum;\r\n @Input() campoPesquisaMaxWidth: string = '400px'; \r\n @Output() pessoaEmitted = new EventEmitter<UnbPessoaModel>();\r\n\r\n @Input() pessoa = new UnbPessoaModel();\r\n @Input() mostrarPesquisa: boolean = true;\r\n @Input() limparAposPesquisa: boolean = false; // indica se deve limpar o cpf apos pesquisar\r\n @Input() label = \"Digite o CPF/CNPJ ou Passaporte\"; // eh o que mostra no topo do componente\r\n @Input() placeholder = \"\"; // eh o que mostra como placeholder topo do componente\r\n @Input() hint = \"\"; // dica que aparece debaixo do campo\r\n\r\n constructor(private pessoaService: UnBPessoaService, private snackBar: MatSnackBar) { }\r\n\r\n // usado pra saber se mostra ou nao o botao de incluir pessoa\r\n pessoaEncontrado: Boolean | null = false;\r\n mostrarTipoPessoa!: boolean;\r\n\r\n listaTipoEndereco: UnbPessoaEnderecoTipo[] = [];\r\n listaTipoTelefone: UnbPessoaTelefoneTipo[] = [];\r\n listaTipoEmail: UnbPessoaEmailTipo[] = [];\r\n\r\n ngOnInit(): void {\r\n if (this.apiPessoaConfig.url.endsWith('/')) {\r\n this.apiPessoaConfig.url = this.apiPessoaConfig.url.slice(0, -1);\r\n }\r\n\r\n if (this.apiPessoaConfig.url == \"\") {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: apiPessoaConfig.url está null. Insira o parâmetro (apiPessoaConfig) com o valor válido!\")\r\n return;\r\n }\r\n\r\n if (this.apiPessoaConfig.token == \"\") {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: apiPessoaConfig.token está null. Insira o parâmetro (apiPessoaConfig) com o valor do token da sua aplicação\")\r\n return;\r\n }\r\n\r\n // se chegar com barra no final, eu retiro. Pra ficar no padrao\r\n if (this.apiPessoaConfig.url.endsWith('/')) {\r\n this.apiPessoaConfig.url = this.apiPessoaConfig.url.slice(0, -1);\r\n }\r\n\r\n // inicializa o serviço com a configuração da API\r\n this.pessoaService.setApiConfig(this.apiPessoaConfig);\r\n\r\n forkJoin({\r\n tiposEnd: this.pessoaService.getTipoEndereco(),\r\n tiposTel: this.pessoaService.getTipoTelefone(),\r\n tiposEmail: this.pessoaService.getTipoEmail()\r\n }).subscribe({\r\n next: ({ tiposEnd, tiposTel, tiposEmail }) => {\r\n this.listaTipoEndereco = tiposEnd;\r\n this.listaTipoTelefone = tiposTel;\r\n this.listaTipoEmail = tiposEmail;\r\n },\r\n error: (err) => {\r\n this.handleError(\"Falha ao carregar dados de apoio. Recarregue a página.\");\r\n console.error(\"Erro no forkJoin do pesquisar:\", err);\r\n }\r\n });\r\n\r\n\r\n\r\n // Conta quantos dos inputs estão como true\r\n const opcoesAtivas = [this.pesquisarPorCPF, this.pesquisarPorCNPJ, this.pesquisarPorEstrangeiro].filter(op => op).length;\r\n // Exibe a opcao do tipo de pessoa, somente se mais de um estiver selecionado\r\n if (opcoesAtivas > 1) {\r\n this.mostrarTipoPessoa = opcoesAtivas > 1;\r\n } else {\r\n // entao tenho que marcar qual foi selecionada\r\n if (this.pesquisarPorCPF) {\r\n this.pessoa.tipoPessoa = TipoPessoaEnum.FISICA;\r\n } else if (this.pesquisarPorCNPJ) {\r\n this.pessoa.tipoPessoa = TipoPessoaEnum.JURIDICA;\r\n } else if (this.pesquisarPorEstrangeiro) {\r\n this.pessoa.tipoPessoa = TipoPessoaEnum.ESTRANGEIRA;\r\n } else {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: pesquisarPorCPF, pesquisarPorCNPJ e pesquisarPorEstrangeiro está falso. Marque pelo menos um como true\")\r\n return;\r\n }\r\n }\r\n\r\n // seleciona o radio button padrao\r\n if (this.defaultTipoPessoa == TipoPessoaEnum.FISICA && this.pesquisarPorCPF) {\r\n this.pessoa.tipoPessoa = this.defaultTipoPessoa;\r\n } else if (this.defaultTipoPessoa == TipoPessoaEnum.JURIDICA && this.pesquisarPorCNPJ) {\r\n this.pessoa.tipoPessoa = this.defaultTipoPessoa;\r\n } else if (this.defaultTipoPessoa == TipoPessoaEnum.ESTRANGEIRA && this.pesquisarPorEstrangeiro) {\r\n this.pessoa.tipoPessoa = this.defaultTipoPessoa;\r\n }\r\n }\r\n\r\n pesquisar() {\r\n if (this.validar() == false) return;\r\n this.isLoading = true;\r\n let result;\r\n if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {\r\n let cpf = this.pessoa.cpf.match(/\\d/g)?.join(\"\"); // remove caracteres \r\n result = this.pessoaService.findByCpf(cpf);\r\n } else if (this.pessoa.tipoPessoa == TipoPessoaEnum.JURIDICA) {\r\n let cnpj = this.pessoa.cnpj.match(/\\d/g)?.join(\"\"); // remove caracteres \r\n result = this.pessoaService.findByCnpj(cnpj);\r\n } else if (this.pessoa.tipoPessoa == TipoPessoaEnum.ESTRANGEIRA) {\r\n result = this.pessoaService.findByPassaporte(this.pessoa.passaporte);\r\n }\r\n\r\n if (result) {\r\n result.subscribe({\r\n next: this.hadleResult.bind(this),\r\n error: this.handleError.bind(this)\r\n });\r\n }\r\n\r\n }\r\n\r\n validar(): boolean {\r\n if (this.apiPessoaConfig.url == \"\") {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: apiPessoaConfig.url está null. Insira o parâmetro (apiPessoaConfig) com o valor válido!\")\r\n return false;\r\n }\r\n\r\n if (this.apiPessoaConfig.token == \"\") {\r\n this.handleErrorPrintConsole(\"[UnbPessoaPesquisarComponent] ERROR: apiPessoaConfig.token está null. Insira o parâmetro (apiPessoaConfig) com o valor do token da sua aplicação\")\r\n return false;\r\n }\r\n\r\n if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {\r\n if (this.pessoa.cpf == null || (this.pessoa.cpf != null && this.pessoa.cpf == \"\")) {\r\n this.handleError(\"CPF é um campo obrigatório.\")\r\n return false;\r\n } else if (!UnbUtils.validarCPF(this.pessoa.cpf)) {\r\n this.handleError(\"Digite um valor válido para o CPF\")\r\n return false;\r\n }\r\n } else if (this.pessoa.tipoPessoa == TipoPessoaEnum.JURIDICA) {\r\n if (this.pessoa.cnpj == null || (this.pessoa.cnpj != null && this.pessoa.cnpj == \"\")) {\r\n this.handleError(\"CNPJ é um campo obrigatório\")\r\n return false;\r\n } else if (!UnbUtils.validarCNPJ(this.pessoa.cnpj)) {\r\n this.handleError(\"Digite um valor válido para o CNPJ!\")\r\n return false;\r\n }\r\n } else if (this.pessoa.tipoPessoa == TipoPessoaEnum.ESTRANGEIRA) {\r\n if (this.pessoa.passaporte == null || (this.pessoa.passaporte != null && this.pessoa.passaporte == \"\")) {\r\n this.handleError(\"Passaporte é um campo obrigatório\")\r\n return false;\r\n }\r\n } else {\r\n this.handleError(\"Selecione um tipo de pessoa!\")\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Em unb-pessoa-pesquisar.component.ts\r\n hadleResult(resultado: UnbPessoaModel) {\r\n this.isLoading = false;\r\n\r\n if (resultado) {\r\n resultado.tipoPessoa = this.pessoa.tipoPessoa; // o backend nao retorna o tipo pessoa. entao tenho que atribuir antes\r\n this.pessoa = resultado;\r\n\r\n // --- SEÇÃO DE LIMPEZA DE DADOS PRINCIPAIS (VOCÊ JÁ TINHA) ---\r\n if (this.pessoa.sexo) {\r\n if (this.pessoa.sexo.toUpperCase().trim() === 'FEMININO') {\r\n this.pessoa.codigoSexo = 2;\r\n } else if (this.pessoa.sexo.toUpperCase().trim() === 'MASCULINO') {\r\n this.pessoa.codigoSexo = 1;\r\n }\r\n }\r\n\r\n if (this.pessoa.dataNascimento) {\r\n this.pessoa.dataNascimento = this.parseData(this.pessoa.dataNascimento);\r\n }\r\n\r\n if (this.pessoa.estadoCivil) {\r\n this.pessoa.codigoEstadoCivil = this.parseCodigo(this.pessoa.estadoCivil);\r\n }\r\n\r\n if (this.pessoa.paisNascimento) {\r\n this.pessoa.codigoPaisNascimento = this.parseCodigo(this.pessoa.paisNascimento);\r\n }\r\n\r\n if (this.pessoa.escolaridade) {\r\n this.pessoa.escolaridade = this.parseCodigo(this.pessoa.escolaridade);\r\n }\r\n\r\n // 1. Processa Endereços\r\n // O payload 'salvar' espera: ordemEndereco, tipoEnderecoCodigo, paisEnderecoCodigo, ufEndereco\r\n // 1. Processa Endereços\r\n if (this.pessoa.enderecos && this.listaTipoEndereco.length > 0) {\r\n // --- CORREÇÃO: Adicionado 'i' ao forEach ---\r\n this.pessoa.enderecos.forEach((end, i) => {\r\n // Traduz o 'tipo' (string) para 'tipoEnderecoCodigo' (number)\r\n if (!end.tipoEnderecoCodigo && end.tipo) {\r\n const tipoEncontrado = this.listaTipoEndereco.find(t => t.denominacao?.toLowerCase() === end.tipo?.toLowerCase());\r\n if (tipoEncontrado) end.tipoEnderecoCodigo = tipoEncontrado.codigo;\r\n }\r\n // Traduz 'pais' (string '22 - BRASIL') para 'paisEnderecoCodigo' (number)\r\n if (!end.paisEnderecoCodigo && end.pais) {\r\n end.paisEnderecoCodigo = this.parseCodigo(end.pais);\r\n }\r\n\r\n // Mapeia 'ordem' -> 'ordemEndereco' ou usa o índice (i + 1)\r\n // O payload de salvar (no form) espera 'ordemEndereco'\r\n end.ordemEndereco = end.ordemEndereco || end.ordem || (i + 1);\r\n\r\n // Mapeia 'uf' -> 'ufEndereco'\r\n if (!end.ufEndereco && end.uf) {\r\n end.ufEndereco = end.uf;\r\n }\r\n });\r\n }\r\n\r\n // 2. Processa Telefones\r\n if (this.pessoa.telefones && this.listaTipoTelefone.length > 0) {\r\n // --- CORREÇÃO: Adicionado 'i' ao forEach ---\r\n this.pessoa.telefones.forEach((tel, i) => {\r\n if (!tel.tipoTelefoneCodigo && tel.tipo) {\r\n const tipoEncontrado = this.listaTipoTelefone.find(t => t.denominacao?.toLowerCase() === tel.tipo?.toLowerCase());\r\n if (tipoEncontrado) tel.tipoTelefoneCodigo = tipoEncontrado.codigo;\r\n }\r\n\r\n // --- CORREÇÃO: Lógica da Ordem ---\r\n // O payload de salvar (no form) lê 'tel.ordem'\r\n tel.ordem = tel.ordem || (i + 1);\r\n });\r\n }\r\n\r\n // 3. Processa Emails\r\n if (this.pessoa.emails && this.listaTipoEmail.length > 0) {\r\n // --- CORREÇÃO: Adicionado 'i' ao forEach ---\r\n this.pessoa.emails.forEach((email, i) => {\r\n if (!email.tipoEmailCodigo && email.tipo) {\r\n const tipoEncontrado = this.listaTipoEmail.find(t => t.denominacao?.toLowerCase() === email.tipo?.toLowerCase());\r\n if (tipoEncontrado) email.tipoEmailCodigo = tipoEncontrado.codigo;\r\n }\r\n\r\n // --- CORREÇÃO: Lógica da Ordem ---\r\n // O payload de salvar (no form) lê 'email.ordem'\r\n email.ordem = email.ordem || (i + 1);\r\n });\r\n }\r\n\r\n if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {\r\n this.pessoa.cpf = UnbUtils.formataCpf(resultado.cpf);\r\n } else if (this.pessoa.tipoPessoa == TipoPessoaEnum.JURIDICA) {\r\n this.pessoa.cnpj = UnbUtils.formataCnpj(resultado.cnpj);\r\n }\r\n\r\n } else {\r\n // se chegar aki eh pq nao encontrou... (lógica que já existe)\r\n let novaPessoa = new UnbPessoaModel();\r\n novaPessoa.tipoPessoa = this.pessoa.tipoPessoa;\r\n if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {\r\n novaPessoa.cpf = this.pessoa.cpf;\r\n } else if (this.pessoa.tipoPessoa == TipoPessoaEnum.JURIDICA) {\r\n novaPessoa.cnpj = this.pessoa.cnpj;\r\n } else {\r\n novaPessoa.passaporte = this.pessoa.passaporte;\r\n }\r\n\r\n this.pessoa = novaPessoa;\r\n }\r\n\r\n this.pessoaEmitted.emit(this.pessoa);\r\n }\r\n\r\n private parseCodigo(valorString: any): number | null {\r\n if (typeof valorString === 'number') {\r\n return valorString; // Já é um número\r\n }\r\n if (typeof valorString !== 'string' || !valorString.includes(' - ')) {\r\n // Tenta converter direto, caso o backend mande só o número como string\r\n const num = parseInt(valorString, 10);\r\n return isNaN(num) ? null : num;\r\n }\r\n\r\n const partes = valorString.split(' - ');\r\n const codigo = parseInt(partes[0].trim(), 10);\r\n return isNaN(codigo) ? null : codigo;\r\n }\r\n\r\n /**\r\n * Converte uma string no formato 'dd/MM/yyyy' para um objeto Date.\r\n * Retorna null se o formato for inválido.\r\n */\r\n private parseData(dataString: any): Date | null {\r\n if (dataString instanceof Date) {\r\n return dataString; // Já é um objeto Date\r\n }\r\n if (typeof dataString !== 'string' || !dataString.includes('/')) {\r\n return null;\r\n }\r\n\r\n const partes = dataString.split('/'); // [dd, MM, yyyy]\r\n if (partes.length === 3) {\r\n const dia = parseInt(partes[0], 10);\r\n const mes = parseInt(partes[1], 10) - 1; // Mês no JS é 0-indexado\r\n const ano = parseInt(partes[2], 10);\r\n\r\n // Verifica se a data é válida\r\n const dataObj = new Date(ano, mes, dia);\r\n if (dataObj.getFullYear() === ano && dataObj.getMonth() === mes && dataObj.getDate() === dia) {\r\n return dataObj;\r\n }\r\n }\r\n return null; // Formato inválido\r\n }\r\n\r\n handleError(erro: any) {\r\n this.openSnackBar(erro);\r\n this.isLoading = false;\r\n\r\n // se chegar aki, entao nao encontrou a pessoa. Mas damos a chance de incluir pessoa\r\n this.pessoaEncontrado = false\r\n }\r\n\r\n handleErrorPrintConsole(erro: any) {\r\n console.log(erro);\r\n this.handleError(erro);\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n tipoPessoaEnum() {\r\n return TipoPessoaEnum;\r\n }\r\n}\r\n","<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" [ngStyle]=\"{'--tamanho-maximo': campoPesquisaMaxWidth}\" (ngSubmit)=\"pesquisar()\">\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\" name=\"tipoPessoa\">\r\n <mat-radio-button *ngIf=\"pesquisarPorCPF\" value=\"{{ tipoPessoaEnum().FISICA}}\">Pessoa Física</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorCNPJ\" value=\"{{tipoPessoaEnum().JURIDICA}}\"> Pessoa Jurídica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorEstrangeiro\" value=\"{{tipoPessoaEnum().ESTRANGEIRA}}\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"break\"></div>\r\n \r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" required={{true}}/> \r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n</form>"," export class UnbPessoaTelefone {\r\n codigo?: number;\r\n tipo?: string;\r\n tipoTelefoneCodigo?: number;\r\n ddi?: string;\r\n ddd?: string;\r\n numero?: string;\r\n ramal?: string;\r\n autorizaSMS?: boolean;\r\n ordem?: number;\r\n nomeResponsavel?: string;\r\n \t\r\n // usado pelo componente unb-pesoa-form, pra indicar que o usuario estah editando\r\n modoEdicao = false; \r\n }\r\n\r\n export class UnbPessoaTelefoneTipo {\r\n codigo?: number;\r\n denominacao?: string;\r\n }","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaTelefone, UnbPessoaTelefoneTipo } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { NgForm } from '@angular/forms';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-telefone-form',\r\n templateUrl: './unb-pessoa-telefone-form.html',\r\n styleUrl: './unb-pessoa-telefone-form.css'\r\n})\r\nexport class UnbPessoaTelefoneFormComponent implements OnInit {\r\n telefoneSalvo!: UnbPessoaTelefone;\r\n telefone = new UnbPessoaTelefone();\r\n telefonesList: UnbPessoaTelefone[];\r\n tipoTelefone!: Observable<UnbPessoaTelefoneTipo[]>;\r\n listaTipoTelefone: UnbPessoaTelefoneTipo[] = [];\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialogRef: MatDialogRef<UnbPessoaTelefoneFormComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.telefone = JSON.parse(JSON.stringify(data.telefone)); // O e-mail específico para edição\r\n\r\n // Verifique se a lista de e-mails foi passada e atribua-a\r\n if (data.telefonesList) {\r\n this.telefonesList = JSON.parse(JSON.stringify(data.telefonesList)); // Faça uma cópia profunda se for manipular\r\n } else {\r\n this.telefonesList = []; // Inicialize como vazio se não for passada\r\n }\r\n\r\n if (!this.telefone) {\r\n this.telefone = new UnbPessoaTelefone();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.tipoTelefone = this.service.getTipoTelefone();\r\n // Inscreve para guardar a lista em uma variável comum\r\n this.tipoTelefone.subscribe(lista => {\r\n this.listaTipoTelefone = lista;\r\n\r\n // Se já tiver tipoTelefoneCodigo, preenche o nome correspondente\r\n if (this.telefone.tipoTelefoneCodigo != null) {\r\n const tipoEncontrado = lista.find(t => t.codigo === this.telefone.tipoTelefoneCodigo);\r\n if (tipoEncontrado) {\r\n this.telefone.tipo = tipoEncontrado.denominacao;\r\n }\r\n } else if (this.telefone.tipo) {\r\n const tipoEncontrado = lista.find(\r\n t => t.denominacao?.toLowerCase() === this.telefone.tipo?.toLowerCase()\r\n );\r\n if (tipoEncontrado) {\r\n this.telefone.tipoTelefoneCodigo = tipoEncontrado.codigo!;\r\n }\r\n }\r\n });\r\n }\r\n\r\n salvar(form: NgForm) {\r\n if (form.invalid ) {\r\n this.openSnackBar('Existem erros no formulário, por favor, verificar.');\r\n return;\r\n }\r\n // 1. Define o 'tipo' padrão (1) se não for preenchido (Conforme sua solicitação)\r\n if (!this.telefone.tipoTelefoneCodigo) {\r\n this.telefone.tipoTelefoneCodigo = 1; // 1 é geralmente 'Residencial' ou 'Principal'\r\n }\r\n\r\n // 2. Define a 'ordem' (que o back-end chama de 'ordemTelefone')\r\n if (!this.telefone.ordem || this.telefone.ordem === 0) {\r\n let maxOrdem = 0;\r\n\r\n // Verifica se a lista de telefones já existe e tem itens\r\n if (this.telefonesList && this.telefonesList.length > 0) {\r\n maxOrdem = Math.max(...this.telefonesList.map(t => t.ordem || 0));\r\n }\r\n\r\n // Define a ordem do novo telefone como a maior ordem + 1\r\n this.telefone.ordem = maxOrdem + 1;\r\n }\r\n if (this.validar(this.telefone) == false) return;\r\n\r\n this.telefoneSalvo = this.telefone;\r\n this.salvarclose();\r\n }\r\n\r\n compararTipos(t1: any, t2: any): boolean {\r\n return t1 && t2 && t1 === t2;\r\n }\r\n\r\n onTipoSelecionado(codigoSelecionado: number) {\r\n const tipoSelecionado = this.listaTipoTelefone.find(t => t.codigo === codigoSelecionado); // <--- Renomeado de listaTipoEndereco\r\n if (tipoSelecionado) {\r\n this.telefone.tipo = tipoSelecionado.denominacao;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Valida o objeto de telefone com base nas regras do backend.\r\n * Retorna true se o telefone for válido, false caso contrário.\r\n */\r\n validar(telefoneToValidate: UnbPessoaTelefone): boolean {\r\n \r\n // 1. Validação de Número (Obrigatório)\r\n if (!telefoneToValidate.numero || telefoneToValidate.numero.trim() === '') {\r\n this.openSnackBar(\"Número do telefone é um campo obrigatório.\");\r\n return false;\r\n }\r\n\r\n // 2. Validação de Número (Formato)\r\n // que ele espera 8 ou 9 dígitos numéricos (padrão Brasil).\r\n const numeroLimpo = telefoneToValidate.numero.replace(/\\D/g, ''); // Remove não-dígitos\r\n if (numeroLimpo.length !== 9) {\r\n this.openSnackBar(\"Número do telefone deve conter exatamente 9 dígitos.\");\r\n return false;\r\n }\r\n \r\n // 3. Validação de DDD (Obrigatório - Boa prática, embora o Java não exija)\r\n if (!telefoneToValidate.ddd || telefoneToValidate.ddd.trim() === '') {\r\n this.openSnackBar(\"DDD é um campo obrigatório.\");\r\n return false;\r\n }\r\n\r\n // 4. Validação de DDD (Tamanho Máximo)\r\n if (telefoneToValidate.ddd.trim().length > 3) {\r\n this.openSnackBar(\"DDD deve ter no máximo 3 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 5. Validação de DDI (Tamanho Máximo)\r\n //\r\n if (telefoneToValidate.ddi && telefoneToValidate.ddi.trim().length > 5) {\r\n this.openSnackBar(\"DDI deve ter no máximo 5 caracteres.\");\r\n return false;\r\n }\r\n\r\n // 6. Validação de Ramal (Tamanho Máximo)\r\n //\r\n if (telefoneToValidate.ramal && telefoneToValidate.ramal.trim().length > 6) {\r\n this.openSnackBar(\"Ramal deve ter no máximo 6 caracteres.\");\r\n return false;\r\n }\r\n \r\n // 7. Validação de NomeResponsavel (Tamanho Máximo)\r\n //\r\n if (telefoneToValidate.nomeResponsavel && telefoneToValidate.nomeResponsavel.trim().length > 100) {\r\n this.openSnackBar(\"Nome do Responsável deve ter no máximo 100 caracteres.\");\r\n return false;\r\n }\r\n\r\n return true; // Passou em todas as validações!\r\n }\r\n\r\n close() {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n salvarclose() {\r\n this.dialogRef.close(this.telefoneSalvo);\r\n }\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n}","<h1 mat-dialog-title>Cadastro de Telefone</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)]=\"telefone.tipoTelefoneCodigo\" [compareWith]=\"compararTipos\" name=\"tipoTelefoneCodigo\" (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of tipoTelefone | 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>DDD</mat-label>\r\n <input type=\"text\" maxlength=\"3\" required matInput [(ngModel)]=\"telefone.ddd\" name=\"dddValue\" #dddValue=\"ngModel\" />\r\n </mat-form-field> \r\n \r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Número</mat-label>\r\n <input type=\"text\" required maxlength=\"9\" matInput [(ngModel)]=\"telefone.numero\" name=\"telefoneValue\" #telefoneValue=\"ngModel\" />\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>","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaTelefone, UnbPessoaTelefoneTipo } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaTelefoneFormComponent } from './unb-pessoa-telefone-form';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-telefone-list',\r\n templateUrl: './unb-pessoa-telefone-list.html',\r\n styleUrl: './unb-pessoa-telefone-list.css'\r\n})\r\nexport class UnbPessoaTelefoneListComponent implements OnInit, OnChanges {\r\n\r\n @Input() podeEditar = true;\r\n @Input() telefones: any = [];\r\n @Input() apiPessoaConfig: { url: string; token: string } = { url: '', token: '' };\r\n @Output() telefonesEmitted = new EventEmitter<UnbPessoaTelefone[]>();\r\n\r\n tipoTelefone!: Observable<UnbPessoaTelefoneTipo[]>;\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.tipoTelefone = this.service.getTipoTelefone();\r\n }\r\n\r\n // tem que fazer isso pq no on init eu ainda nao tenho a lista de telefones\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Verifica se a propriedade 'telefones' mudou\r\n if (changes['telefones'] && this.telefones) {\r\n // chamada quando os dados realmente chegarem\r\n this.sortAndAssignOrder(); \r\n }\r\n }\r\n\r\n excluir(telefoneParaExcluir: UnbPessoaTelefone) {\r\n if (telefoneParaExcluir.codigo) {\r\n // Se tem código, remove por ele (mais seguro)\r\n this.telefones = this.telefones.filter(t => t.codigo !== telefoneParaExcluir.codigo);\r\n } else {\r\n // Se não tem código (novo item), remove pela ordem\r\n this.telefones = this.telefones.filter(t => t.ordem !== telefoneParaExcluir.ordem);\r\n }\r\n\r\n // Chama função existente que re-calcula as ordens e emite a lista atualizada\r\n this.atualizarOrdem();\r\n this.telefonesEmitted.emit(this.telefones);\r\n }\r\n\r\n editar(telefone: UnbPessoaTelefoneTipo) {\r\n this.openFormDialog(telefone);\r\n }\r\n\r\n atualizarOrdem() {\r\n this.telefones.forEach((telefone, idx) => {\r\n telefone.ordem = idx + 1;\r\n });\r\n\r\n // reemite a lista atualizada, igual antes\r\n this.telefonesEmitted.emit(this.telefones);\r\n }\r\n\r\n openFormDialog(toEdit: any) {\r\n const dialogRef = this.dialog.open(UnbPessoaTelefoneFormComponent, {\r\n width: '900px',\r\n data: {\r\n telefone: toEdit, // E-mail a ser editado ou vazio para novo\r\n telefonesList: this.telefones // A sua lista COMPLETA de e-mails\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (!result) {\r\n return; // Usuário clicou em 'Fechar' ou 'Cancelar'\r\n }\r\n\r\n // 'result' é o objeto retornado pelo dialog (editado ou novo)\r\n let index = -1;\r\n\r\n // 1. Tenta encontrar pelo 'codigo' (para itens que já vieram do banco)\r\n if (result.codigo) {\r\n index = this.telefones.findIndex(t => t.codigo === result.codigo);\r\n }\r\n \r\n // 2. Se não achou pelo 'codigo', tenta pela 'ordem'.\r\n // A 'ordem' é o nosso identificador único para itens que\r\n // ainda não foram salvos no banco (criados/editados localmente).\r\n if (index === -1 && result.ordem) {\r\n index = this.telefones.findIndex(t => t.ordem === result.ordem);\r\n }\r\n\r\n if (index > -1) {\r\n // ENCONTROU (pelo 'codigo' ou pela 'ordem'): Atualiza o item existente\r\n this.telefones[index] = result;\r\n } else {\r\n // NÃO ENCONTROU: É um item 100% novo (não uma edição)\r\n // O form (unb-pessoa-telefone-form) já cuidou de\r\n // atribuir a 'ordem' correta (maxOrdem + 1)\r\n this.telefones.push(result);\r\n }\r\n\r\n // vamos apenas re-ordenar a lista pela 'ordem' que já temos\r\n // e depois emitir.\r\n this.telefones.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0));\r\n this.telefonesEmitted.emit(this.telefones);\r\n });\r\n }\r\n\r\n moverTelefone(event: CdkDragDrop<any[]>) {\r\n // troca a posição dentro do array\r\n moveItemInArray(this.telefones, event.previousIndex, event.currentIndex);\r\n\r\n // atualiza o campo 'ordem' em cada item\r\n this.atualizarOrdem();\r\n }\r\n\r\n private sortAndAssignOrder(): void {\r\n // 1. Crie uma cópia da lista para não modificar a original durante a iteração inicial\r\n const tempEmails = [...this.telefones];\r\n\r\n // 2. Mapeie as ordens existentes para identificar duplicatas e ausentes\r\n const orderMap = new Map<number, UnbPessoaTelefone[]>();\r\n const emailsWithoutOrder: UnbPessoaTelefone[] = [];\r\n\r\n tempEmails.forEach(telefone => {\r\n if (telefone.ordem !== undefined && telefone.ordem !== null) {\r\n if (!orderMap.has(telefone.ordem)) {\r\n orderMap.set(telefone.ordem, []);\r\n }\r\n orderMap.get(telefone.ordem)?.push(telefone);\r\n } else {\r\n emailsWithoutOrder.push(telefone);\r\n }\r\n });\r\n\r\n // 3. Inicialize um Set para rastrear todas as ordens que serão usadas no final\r\n const finalUsedOrders = new Set<number>();\r\n // Inicialize o próximo valor de ordem disponível\r\n let nextAvailableOrder = 0;\r\n\r\n // Função auxiliar para encontrar a próxima ordem disponível\r\n const getNextAvailableOrder = () => {\r\n while (finalUsedOrders.has(nextAvailableOrder)) {\r\n nextAvailableOrder++;\r\n }\r\n return nextAvailableOrder++;\r\n };\r\n\r\n // 4. Processe telefones com ordem definida:\r\n // - A primeira ocorrência de uma ordem a mantém.\r\n // - Duplicatas recebem uma nova ordem.\r\n // - Adicione as ordens válidas ao finalUsedOrders.\r\n this.telefones.forEach(telefone => { // Iterar sobre a lista original para modificar in-place\r\n if (telefone.ordem !== undefined && telefone.ordem !== null) {\r\n if (!finalUsedOrders.has(telefone.ordem)) {\r\n // Se a ordem ainda não foi usada, use-a e adicione ao set\r\n finalUsedOrders.add(telefone.ordem);\r\n } else {\r\n // Se a ordem já foi usada (é uma duplicata), atribua uma nova\r\n telefone.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(telefone.ordem); // Adiciona a nova ordem ao set\r\n }\r\n }\r\n });\r\n\r\n // 5. Atribua ordens para telefones que não tinham ordem definida\r\n emailsWithoutOrder.forEach(telefone => {\r\n telefone.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(telefone.ordem); // Adiciona a nova ordem ao set\r\n });\r\n\r\n // 6. Finalmente, ordene a lista completa com as ordens agora únicas\r\n this.telefones.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0));\r\n }\r\n\r\n}","<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ telefones?.length === 1 ? 'Telefone Cadastrado' : 'Telefones Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ telefones?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Telefone\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Telefone\r\n </button>\r\n </div>\r\n\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"telefones && telefones.length > 0\" cdkDropList (cdkDropListDropped)=\"moverTelefone($event)\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th style=\"width: 20%;\">DDD</th>\r\n <th>Número</th> \r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">Ações</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of telefones; let i = index\" class=\"my-tr\" cdkDrag>\r\n <td style=\"text-align: center;\"> \r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n <td>{{ valor.ddd }}</td> \r\n <td>{{ valor.numero }}</td> \r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"button\" mat-icon-button color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n</table>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaEndereco } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaEnderecoFormComponent } from './unb-pessoa-endereco-form';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-endereco-list',\r\n templateUrl: './unb-pessoa-endereco-list.html',\r\n styleUrl: './unb-pessoa-endereco-list.css'\r\n})\r\nexport class UnbPessoaenderecoListComponent implements OnInit, OnChanges {\r\n\r\n @Input() podeEditar = true;\r\n @Input() enderecos: any = [];\r\n @Input() apiPessoaConfig: { url: string; token: string } = { url: '', token: '' };\r\n @Output() enderecosEmitted = new EventEmitter<UnbPessoaEndereco[]>();\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.sortAndAssignOrder(); // organiza a lista de enderecos. As vezes tem ordem duplicada ou faltando.\r\n }\r\n\r\n // tem que fazer isso pq no on init eu ainda nao tenho a lista\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Verifica se a propriedade 'enderecos' mudou\r\n if (changes['enderecos'] && this.enderecos) {\r\n // chamada quando os dados realmente chegarem\r\n this.sortAndAssignOrder();\r\n }\r\n }\r\n\r\n excluir(enderecoParaExcluir: UnbPessoaEndereco) {\r\n if (enderecoParaExcluir.codigo) {\r\n // Se tem código, remove por ele (mais seguro)\r\n this.enderecos = this.enderecos.filter(t => t.codigo !== enderecoParaExcluir.codigo);\r\n } else {\r\n // Se não tem código (novo item), remove pela ordem\r\n this.enderecos = this.enderecos.filter(t => t.ordemEndereco !== enderecoParaExcluir.ordemEndereco);\r\n }\r\n\r\n // Chama função existente que re-calcula as ordens e emite a lista atualizada\r\n this.atualizarOrdem();\r\n }\r\n\r\n editar(endereco: UnbPessoaEndereco) {\r\n this.openFormDialog(endereco);\r\n }\r\n\r\n atualizarOrdem() {\r\n this.enderecos.forEach((endereco, idx) => {\r\n endereco.ordemEndereco = idx + 1;\r\n });\r\n\r\n this.enderecosEmitted.emit(this.enderecos);\r\n }\r\n\r\n openFormDialog(enderecoToEdit: any) {\r\n const dialogRef = this.dialog.open(UnbPessoaEnderecoFormComponent, {\r\n width: '900px',\r\n data: {\r\n endereco: enderecoToEdit, // E-mail a ser editado ou vazio para novo\r\n enderecosList: this.enderecos // A sua lista COMPLETA de e-mails\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (!result) {\r\n return; // Usuário clicou em 'Fechar' ou 'Cancelar'\r\n }\r\n let index = -1;\r\n\r\n // 1. Tenta encontrar pelo 'codigo' (para itens que já vieram do banco)\r\n if (result.codigo) {\r\n index = this.enderecos.findIndex(t => t.codigo === result.codigo);\r\n }\r\n\r\n // 2. Se não achou pelo 'codigo', tenta pela 'ordem'.\r\n if (index === -1 && result.ordemEndereco) {\r\n index = this.enderecos.findIndex(t => t.ordemEndereco === result.ordemEndereco);\r\n }\r\n\r\n if (index > -1) {\r\n // ENCONTROU (pelo 'codigo' ou pela 'ordem'): Atualiza o item existente\r\n this.enderecos[index] = result;\r\n } else {\r\n // NÃO ENCONTROU: É um item 100% novo (não uma edição) adiciona no fim\r\n this.enderecos.push(result);\r\n }\r\n\r\n this.enderecos.sort((a, b) => (a.ordemEndereco ?? 0) - (b.ordemEndereco ?? 0)); //\r\n this.enderecosEmitted.emit([...this.enderecos]);\r\n\r\n });\r\n }\r\n\r\n moverLinha(event: CdkDragDrop<any[]>) {\r\n moveItemInArray(this.enderecos, event.previousIndex, event.currentIndex);\r\n this.atualizarOrdem()\r\n }\r\n\r\n private sortAndAssignOrder(): void {\r\n // 1. Crie uma cópia da lista\r\n const tempenderecos = [...this.enderecos];\r\n\r\n // 2. Mapeie as ordens existentes\r\n const orderMap = new Map<number, UnbPessoaEndereco[]>();\r\n const enderecosWithoutOrder: UnbPessoaEndereco[] = [];\r\n\r\n tempenderecos.forEach(endereco => {\r\n // CORREÇÃO AQUI:\r\n if (endereco.ordemEndereco !== undefined && endereco.ordemEndereco !== null) {\r\n if (!orderMap.has(endereco.ordemEndereco)) {\r\n orderMap.set(endereco.ordemEndereco, []);\r\n }\r\n orderMap.get(endereco.ordemEndereco)?.push(endereco);\r\n } else {\r\n enderecosWithoutOrder.push(endereco);\r\n }\r\n });\r\n\r\n // 3. ... (Funções 'finalUsedOrders', 'nextAvailableOrder' continuam iguais) ...\r\n const finalUsedOrders = new Set<number>();\r\n let nextAvailableOrder = 0;\r\n const getNextAvailableOrder = () => {\r\n while (finalUsedOrders.has(nextAvailableOrder)) {\r\n nextAvailableOrder++;\r\n }\r\n return nextAvailableOrder++;\r\n };\r\n\r\n // 4. Processe enderecos com ordem definida:\r\n this.enderecos.forEach(endereco => {\r\n // CORREÇÃO AQUI:\r\n if (endereco.ordemEndereco !== undefined && endereco.ordemEndereco !== null) {\r\n if (!finalUsedOrders.has(endereco.ordemEndereco)) {\r\n finalUsedOrders.add(endereco.ordemEndereco);\r\n } else {\r\n // Duplicata, atribua uma nova\r\n endereco.ordemEndereco = getNextAvailableOrder();\r\n finalUsedOrders.add(endereco.ordemEndereco);\r\n }\r\n }\r\n });\r\n\r\n // 5. Atribua ordens para enderecos que não tinham ordem\r\n enderecosWithoutOrder.forEach(endereco => {\r\n endereco.ordemEndereco = getNextAvailableOrder(); //\r\n finalUsedOrders.add(endereco.ordemEndereco); //\r\n });\r\n\r\n // 6. Finalmente, ordene a lista\r\n this.enderecos.sort((a, b) => (a.ordemEndereco ?? 0) - (b.ordemEndereco ?? 0)); //\r\n }\r\n\r\n\r\n}","<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ enderecos?.length === 1 ? 'Endereço Cadastrado' : 'Endereços Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ enderecos?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Endereço\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Endereço\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=\"enderecos && enderecos.length > 0\" cdkDropList\r\n (cdkDropListDropped)=\"moverLinha($event)\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th>Logradouro</th>\r\n <th>Bairro</th>\r\n <th>CEP</th>\r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">Ações</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of enderecos; let i = index\" class=\"my-tr\" cdkDrag>\r\n <td style=\"width: 5%; text-align: center;\">\r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n <td>{{ valor.logradouro }}</td>\r\n <td>{{ valor.bairro }}</td>\r\n <td>{{ valor.cep }}</td>\r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"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 type=\"button\" mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { UnbPessoaEmail, UnbPessoaEmailTipo } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { UnbPessoaEmailFormComponent } from './unb-pessoa-email-form';\r\nimport { TipoPessoaEnum } from '../unb-tipo-pessoa.enum';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\n@Component({\r\n standalone: false,\r\n selector: 'lib-unb-pessoa-email-list',\r\n templateUrl: './unb-pessoa-email-list.html',\r\n styleUrl: './unb-pessoa-email-list.css'\r\n})\r\nexport class UnbPessoaEmailListComponent implements OnInit, OnChanges {\r\n\r\n @Input() podeEditar = true;\r\n @Input() emails: any = [];\r\n @Input() apiPessoaConfig: { url: string; token: string } = { url: '', token: '' };\r\n @Output() emailsEmitted = new EventEmitter<UnbPessoaEmail[]>();\r\n\r\n tipoEmail!: Observable<UnbPessoaEmailTipo[]>;\r\n\r\n constructor(private snackBar: MatSnackBar, private service: UnBPessoaService, public dialog: MatDialog) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.tipoEmail = this.service.getTipoEmail();\r\n\r\n this.sortAndAssignOrder(); // organiza a lista de emails. As vezes tem ordem duplicada ou faltando.\r\n }\r\n\r\n // tem que fazer isso pq no on init eu ainda nao tenho a lista\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Verifica se a propriedade 'emails' mudou\r\n if (changes['emails'] && this.emails) {\r\n // chamada quando os dados realmente chegarem\r\n this.sortAndAssignOrder();\r\n }\r\n }\r\n\r\n excluir(emailParaExcluir: UnbPessoaEmail) { // <-- TIPO CORRIGIDO\r\n\r\n if (emailParaExcluir.codigo) {\r\n // Se tem código, remove por ele\r\n this.emails = this.emails.filter(e => e.codigo !== emailParaExcluir.codigo);\r\n } else {\r\n // Se não tem código (novo item), remove pela ordem\r\n this.emails = this.emails.filter(e => e.ordem !== emailParaExcluir.ordem);\r\n }\r\n\r\n // Chama sua função existente que re-calcula as ordens e emite a lista\r\n this.atualizarOrdem();\r\n }\r\n\r\n editar(email: UnbPessoaEmailTipo) {\r\n this.openFormDialog(email);\r\n }\r\n\r\n\r\n atualizarOrdem() {\r\n this.emails.forEach((email, idx) => {\r\n email.ordem = idx + 1;\r\n });\r\n\r\n this.emailsEmitted.emit([...this.emails]);\r\n }\r\n\r\n openFormDialog(emailToEdit: any) {\r\n const dialogRef = this.dialog.open(UnbPessoaEmailFormComponent, {\r\n width: '900px',\r\n data: {\r\n email: emailToEdit, // E-mail a ser editado ou vazio para novo\r\n emailsList: this.emails // A sua lista COMPLETA de e-mails\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (!result) {\r\n return; // Usuário clicou em 'Fechar' ou 'Cancelar'\r\n }\r\n\r\n // 'result' é o objeto retornado pelo dialog (editado ou novo)\r\n let index = -1;\r\n\r\n // 1. Tenta encontrar pelo 'codigo' (para itens que já vieram do banco)\r\n if (result.codigo) {\r\n index = this.emails.findIndex(e => e.codigo === result.codigo);\r\n }\r\n\r\n // 2. Se não achou pelo 'codigo', tenta pela 'ordem'.\r\n if (index === -1 && result.ordem) {\r\n index = this.emails.findIndex(e => e.ordem === result.ordem);\r\n }\r\n\r\n if (index > -1) {\r\n // ENCONTROU (pelo 'codigo' ou pela 'ordem'): Atualiza o item existente\r\n this.emails[index] = result;\r\n } else {\r\n // NÃO ENCONTROU: É um item 100% novo (não uma edição)\r\n this.emails.push(result);\r\n }\r\n\r\n // Re-ordena a lista pela 'ordem' e emite uma *nova cópia*\r\n this.emails.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0));\r\n this.emailsEmitted.emit([...this.emails]); // <-- Emite nova cópia\r\n });\r\n }\r\n\r\n moverLinha(event: CdkDragDrop<any[]>) {\r\n moveItemInArray(this.emails, event.previousIndex, event.currentIndex);\r\n this.atualizarOrdem()\r\n }\r\n\r\nprivate sortAndAssignOrder(): void {\r\n // 1. Crie uma cópia da lista\r\n const tempEmails = [...this.emails]; // <-- NOME CORRIGIDO\r\n\r\n // 2. Mapeie as ordens existentes\r\n const orderMap = new Map<number, UnbPessoaEmail[]>();\r\n const emailsWithoutOrder: UnbPessoaEmail[] = [];\r\n\r\n tempEmails.forEach(email => {\r\n // CORREÇÃO AQUI: 'ordem' em vez de 'ordemEmail'\r\n if (email.ordem !== undefined && email.ordem !== null) {\r\n if (!orderMap.has(email.ordem)) {\r\n orderMap.set(email.ordem, []);\r\n }\r\n orderMap.get(email.ordem)?.push(email);\r\n } else {\r\n emailsWithoutOrder.push(email);\r\n }\r\n });\r\n\r\n // 3. ... (Funções 'finalUsedOrders', 'nextAvailableOrder' continuam iguais) ...\r\n const finalUsedOrders = new Set<number>();\r\n let nextAvailableOrder = 0;\r\n const getNextAvailableOrder = () => {\r\n while (finalUsedOrders.has(nextAvailableOrder)) {\r\n nextAvailableOrder++;\r\n }\r\n return nextAvailableOrder++;\r\n };\r\n\r\n // 4. Processe emails com ordem definida:\r\n this.emails.forEach(email => { // <-- NOME CORRIGIDO\r\n // CORREÇÃO AQUI: 'ordem' em vez de 'ordemEmail'\r\n if (email.ordem !== undefined && email.ordem !== null) {\r\n if (!finalUsedOrders.has(email.ordem)) {\r\n finalUsedOrders.add(email.ordem);\r\n } else {\r\n // Duplicata, atribua uma nova\r\n email.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(email.ordem);\r\n }\r\n }\r\n });\r\n\r\n // 5. Atribua ordens para emails que não tinham ordem\r\n emailsWithoutOrder.forEach(email => { // <-- NOME CORRIGIDO\r\n email.ordem = getNextAvailableOrder(); \r\n finalUsedOrders.add(email.ordem); \r\n });\r\n\r\n // 6. Finalmente, ordene a lista\r\n this.emails.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 0)); // <-- 'ordem'\r\n }\r\n }","<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 type=\"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\" cdkDropList (cdkDropListDropped)=\"moverLinha($event)\">\r\n\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th>E-mail</th>\r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">Ações</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of emails; let i = index\" class=\"my-tr\" cdkDrag>\r\n\r\n <td style=\"text-align: center;\">\r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n\r\n <td>{{ valor.email }}</td>\r\n\r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"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 type=\"button\" mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>","import { Component, Input, OnInit } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { listaEstados } from '../pessoa-tabelas-apoio';\r\nimport { UnbPessoaEmail } from '../unb-pessoa-models/unb-pessoa-email.model';\r\nimport { UnbPessoaEndereco } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaEscolaridade } from '../unb-pessoa-models/unb-pessoa-escolaridade.model';\r\nimport { UnbPessoaEstadoCivil } from '../unb-pessoa-models/unb-pessoa-estado-civil.model';\r\nimport { UnbPessoaPais } from '../unb-pessoa-models/unb-pessoa-pais';\r\nimport { UnbPessoaTelefone } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';\r\nimport { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { TipoPessoaEnum } from '../unb-tipo-pessoa.enum';\r\nimport { UnbMensagemService, UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';\r\nimport { NgForm } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'lib-unb-pessoa-form',\r\n standalone: false,\r\n templateUrl: './unb-pessoa-form.component.html',\r\n styleUrl: './unb-pessoa-form.component.css'\r\n})\r\nexport class UnbPessoaFormComponent implements OnInit {\r\n isLoading: boolean = false;\r\n buscaRealizada: boolean = false;\r\n endereco = new UnbPessoaEndereco();\r\n email = new UnbPessoaEmail();\r\n\r\n tiposPessoa = TipoPessoaEnum;\r\n\r\n pessoa: UnbPessoaModel = new UnbPessoaModel(); // inicializa com pessoa\r\n dadosSalvos: { [key: string]: any } = {}; // Armazena os dados ao trocar de tipo\r\n\r\n // Quando verdadeiro, o formulário e ações ficam desabilitados porque os dados\r\n // devem ser alterados apenas pelo app SouGov (matricula SIAPE presente)\r\n isReadonlyFromSiape: boolean = false;\r\n\r\n @Input() apiPessoaConfig: { url: string; token: string } = { url: '', token: '' };\r\n @Input() defaultTipoPessoa!: TipoPessoaEnum;\r\n @Input() pesquisarPorCPF = true;\r\n @Input() pesquisarPorCNPJ = true;\r\n @Input() pesquisarPorEstrangeiro = true;\r\n @Input() campoPesquisaMaxWidth: string = '400px'; \r\n\r\n constructor(private service: UnBPessoaService, private snackBar: MatSnackBar, private alertService: UnbMensagemService) { }\r\n\r\n // tabelas tradicionais que vem do backend\r\n escolaridade!: Observable<UnbPessoaEscolaridade[]>;\r\n paises!: Observable<UnbPessoaPais[]>;\r\n estadosCivil!: Observable<UnbPessoaEstadoCivil[]>;\r\n\r\n ngOnInit(): void {\r\n if (this.apiPessoaConfig.url.endsWith('/')) {\r\n this.apiPessoaConfig.url = this.apiPessoaConfig.url.slice(0, -1);\r\n }\r\n this.alertService.hideMessage();\r\n this.service.setApiConfig(this.apiPessoaConfig);\r\n\r\n // atencao, o pessoaRecebida que inicializa esse componente\r\n this.escolaridade = this.service.getEscolaridade();\r\n this.paises = this.service.getPaises();\r\n this.estadosCivil = this.service.getEstadoCivil();\r\n }\r\n pessoaRecebida(pessoaRecebida: UnbPessoaModel) {\r\n this.buscaRealizada = true;\r\n this.pessoa = pessoaRecebida;\r\n this.alertService.hideMessage();\r\n\r\n // inicializa pra nao quebrar\r\n if (!this.pessoa.enderecos) this.pessoa.enderecos = [];\r\n if (!this.pessoa.emails) this.pessoa.emails = [];\r\n if (!this.pessoa.telefones) this.pessoa.telefones = [];\r\n \r\n // Se a pessoa vier com matriculaSiape preenchido, colocamos o formulário em modo somente-leitura\r\n // e mostraremos uma mensagem informativa na UI. Também desabilita ações de salvar.\r\n if (this.pessoa && this.pessoa.matriculaSiape !== undefined && this.pessoa.matriculaSiape !== null && this.pessoa.matriculaSiape !== 0) {\r\n this.isReadonlyFromSiape = true;\r\n // opcional: informar via snackBar também\r\n this.openSnackBar('Servidor com matriculla SIAPE deve ter seus dados autalizados pelo aplicativo do sougov.');\r\n } else {\r\n this.isReadonlyFromSiape = false;\r\n }\r\n }\r\n\r\n salvar(form: NgForm) {\r\n this.alertService.hideMessage();\r\n if (!this.validar(form)) return\r\n if (!this.service) return;\r\n\r\n this.isLoading = true;\r\n\r\n const payload = this.convertPessoaToPayload(this.pessoa);\r\n let result = this.service.salvar(payload, this.pessoa.tipoPessoa);\r\n\r\n if (result && typeof result.subscribe === 'function') {\r\n // Use o formato 'next/error' para clareza\r\n result.subscribe({\r\n next: (resposta: any) => {\r\n this.isLoading = false;\r\n this.alertService.showMessage(\"<strong>Registro salvo com sucesso!</strong>\", UnbTipoMensagemEnum.SUCCESS);\r\n if (resposta) {\r\n this.pessoa.codigoPessoa = resposta.codigoPessoa || this.pessoa.codigoPessoa;\r\n this.pessoa.idPessoa = resposta.idPessoa || this.pessoa.idPessoa;\r\n }\r\n }, \r\n error: (err) => { \r\n this.erro(err); \r\n }\r\n });\r\n\r\n } else {\r\n console.error(\"Erro: O método salvar() não retornou um Observable.\");\r\n this.isLoading = false; // Garante que o loading pare\r\n }\r\n }\r\n\r\n validar(form: NgForm): boolean {\r\n if (!this.pessoa) {\r\n this.openSnackBar(\"Erro ao carregar objeto pessoa\");\r\n return false;\r\n }\r\n\r\n if (form.invalid) {\r\n // para que os erros apareçam na tela para o usuário.\r\n form.control.markAllAsTouched(); \r\n this.openSnackBar(\"Por favor, preencha os campos obrigatórios.\");\r\n return false;\r\n }\r\n\r\n if (this.pessoa.telefones == null || (this.pessoa.telefones != null && this.pessoa.telefones.length == 0)) {\r\n this.openSnackBar(\"Cadastre pelo menos um telefone no botão Cadastrar Novo Telefone\");\r\n return false;\r\n }\r\n\r\n if (this.pessoa.enderecos == null || (this.pessoa.enderecos != null && this.pessoa.enderecos.length == 0)) {\r\n this.openSnackBar(\"Cadastre pelo menos um endereço no botão Cadastrar Novo Endereço\");\r\n return false;\r\n }\r\n\r\n if (this.pessoa.emails == null || (this.pessoa.emails != null && this.pessoa.emails.length == 0)) {\r\n this.openSnackBar(\"Cadastre pelo menos um e-mail no botão Cadastrar Novo Email\");\r\n return false;\r\n }\r\n\r\n if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {\r\n if (!this.pessoa.nome || (this.pessoa && this.pessoa.nome == \"\")) {\r\n this.openSnackBar(\"Nome é um campo obrigatório\");\r\n return false;\r\n }\r\n\r\n if (!this.pessoa.dataNascimento) {\r\n this.openSnackBar(\"Data de Nascimento é um campo obrigatório\");\r\n return false;\r\n }\r\n }\r\n\r\n if (this.pessoa.tipoPessoa == TipoPessoaEnum.ESTRANGEIRA) {\r\n if (!this.pessoa.nome || (this.pessoa && this.pessoa.nome == \"\")) {\r\n this.openSnackBar(\"Nome é um campo obrigatório\");\r\n return false;\r\n }\r\n\r\n if (this.pessoa.passaporte == null || (this.pessoa.passaporte != null && this.pessoa.passaporte == \"\")) {\r\n this.openSnackBar(\"Passaporte é um campo obrigatório\");\r\n return false;\r\n }\r\n }\r\n\r\n if (this.pessoa.tipoPessoa == TipoPessoaEnum.JURIDICA) {\r\n if (this.pessoa.cnpj == null || (this.pessoa.cnpj != null && this.pessoa.cnpj == \"\")) {\r\n this.openSnackBar(\"CNPJ é um campo obrigatório\");\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n telefonesEmitted(telefones: UnbPessoaTelefone[]) {\r\n this.pessoa.telefones = telefones;\r\n }\r\n\r\n enderecosEmitted(enderecos: UnbPessoaEndereco[]) {\r\n this.pessoa.enderecos = enderecos;\r\n }\r\n\r\n emailsEmitted(emails: UnbPessoaEmail[]) {\r\n this.pessoa.emails = emails;\r\n }\r\n\r\n private erro(erro: any): void {\r\n this.isLoading = false;\r\n const errorResponse = erro.error;\r\n\r\n // 1. Tratamento para Erros de Validação (que contêm o array 'detalhes')\r\n if (errorResponse && errorResponse.detalhes && Array.isArray(errorResponse.detalhes) && errorResponse.detalhes.length > 0) {\r\n \r\n // Mensagem genérica para o SnackBar\r\n this.openSnackBar(\"O formulário possui erro(s). Por favor, verificar.\");\r\n\r\n // Constrói a mensagem HTML detalhada para o AlertService\r\n const criticasHtml = errorResponse.detalhes.map((det: any) => {\r\n // Formata cada erro como um item de lista\r\n return `<li><strong>${det.nomeCampo}:</strong> ${det.critica}</li>`;\r\n }).join('');\r\n \r\n // Cria a mensagem final, envolvendo os erros em uma tag <ul>\r\n const detailedHtmlMessage = `<strong>Erros de Validação:</strong> <ul>${criticasHtml}</ul>`;\r\n\r\n // Mostra os detalhes formatados no AlertService\r\n this.alertService.showMessage(detailedHtmlMessage, UnbTipoMensagemEnum.DANGER);\r\n\r\n } \r\n // 2. Tratamento para Outros Tipos de Erro (sem o array 'detalhes')\r\n else {\r\n let errorMessage = 'Ocorreu um erro desconhecido.'; // Mensagem padrão\r\n\r\n // Tenta extrair a mensagem de erro específica\r\n if (errorResponse) {\r\n if (errorResponse.mensagem) {\r\n errorMessage = errorResponse.mensagem;\r\n } else if (errorResponse.detail) {\r\n errorMessage = errorResponse.detail;\r\n }\r\n } else if (erro.message) {\r\n errorMessage = erro.message;\r\n }\r\n\r\n // Mostra uma mensagem genérica no SnackBar\r\n this.openSnackBar('Ocorreu um erro ao processar sua solicitação.');\r\n\r\n // Mostra o erro específico no AlertService, como você sugeriu\r\n let erroStrong = \"<strong>\" + errorMessage + \"</strong>\";\r\n this.alertService.showMessage(erroStrong, UnbTipoMensagemEnum.DANGER);\r\n }\r\n}\r\n\r\n openSnackBar(message: string) {\r\n this.snackBar.open(message, 'x', {\r\n duration: 5000,\r\n });\r\n }\r\n\r\n tipoPessoaEnum() {\r\n return TipoPessoaEnum;\r\n }\r\n\r\n getListaEstados() {\r\n return listaEstados;\r\n }\r\n\r\n /**\r\n * Converte uma instância (ou objeto) de UnbPessoaModel para o payload esperado pelo backend.\r\n */\r\n private convertPessoaToPayload(pessoa: UnbPessoaModel): any {\r\n if (!pessoa) return null;\r\n\r\n // --- Mapeia os arrays ---\r\n const enderecosPayload = (pessoa.enderecos || []).map((end: any) => ({\r\n ordemEndereco: end.ordemEndereco,\r\n tipoEnderecoCodigo: end.tipoEnderecoCodigo,\r\n municipioCodigo: end.municipioCodigo,\r\n paisEnderecoCodigo: end.paisEnderecoCodigo,\r\n logradouro: end.logradouro,\r\n complemento: end.complemento,\r\n cep: end.cep,\r\n bairro: end.bairro,\r\n ufEndereco: end.ufEndereco,\r\n caixaPostal: end.caixaPostal,\r\n correspondencia: end.correspondencia\r\n }));\r\n\r\n const telefonesPayload = (pessoa.telefones || []).map((tel: any) => ({\r\n ordemTelefone: tel.ordem,\r\n tipoTelefoneCodigo: tel.tipoTelefoneCodigo,\r\n ddi: tel.ddi,\r\n ddd: tel.ddd,\r\n numeroTelefone: tel.numero,\r\n ramal: tel.ramal,\r\n autorizaSMS: tel.autorizaSMS\r\n }));\r\n\r\n const emailsPayload = (pessoa.emails || []).map((email: any) => ({\r\n tipoEmailCodigo: email.tipoEmailCodigo,\r\n ordemEmail: email.ordem,\r\n email: email.email,\r\n autorizacao: email.autorizacao\r\n }));\r\n\r\n // --- Monta o objeto principal ---\r\n return {\r\n idPessoa: pessoa.idPessoa,\r\n codigoPessoa: pessoa.codigoPessoa,\r\n\r\n nome: pessoa.nome,\r\n nomeSocial: pessoa.nomeSocial,\r\n // Adiciona a chave 'cpf' ao objeto SOMENTE SE pessoa.cpf for truthy\r\n ...(pessoa.cpf && { cpf: pessoa.cpf.replace(/\\D/g, '') }),\r\n codigoSexo: pessoa.codigoSexo,\r\n codigoEstadoCivil: pessoa.codigoEstadoCivil,\r\n codigoEscolaridade: pessoa.escolaridade,\r\n // codigoTipoSanguineo: pessoa.tipoSanguineo,\r\n nomePai: pessoa.nomePai,\r\n nomeMae: pessoa.nomeMae,\r\n\r\n dataNascimento: this.formatarDataParaBackend(pessoa.dataNascimento),\r\n codigoPaisNascimento: pessoa.codigoPaisNascimento,\r\n ufNascimento: pessoa.ufNascimento,\r\n naturalidade: pessoa.naturalidade,\r\n\r\n rg: pessoa.rg,\r\n rgOrgao: pessoa.rgOrgao,\r\n rgUf: pessoa.rgUf,\r\n rgDataEmissao: this.formatarDataParaBackend(pessoa.rgDataEmissao),\r\n\r\n numeroTituloEleitor: pessoa.numeroTituloEleitor,\r\n dataEmissaoTituloEleitor: this.formatarDataParaBackend(pessoa.dataEmissaoTituloEleitor),\r\n zonaTituloEleitor: pessoa.zonaTituloEleitor,\r\n secaoTituloEleitor: pessoa.secaoTituloEleitor,\r\n ufTituloEleitor: pessoa.ufTituloEleitor,\r\n\r\n numeroReservista: pessoa.numeroReservista,\r\n serieReservista: pessoa.serieReservista,\r\n orgaoReservista: pessoa.orgaoReservista,\r\n\r\n numeroCarteiraTrabalho: pessoa.numeroCarteiraTrabalho,\r\n serieCarteiraTrabalho: pessoa.serieCarteiraTrabalho,\r\n ufCarteiraTrabalho: pessoa.ufCarteiraTrabalho,\r\n pisPasep: pessoa.pisPasep,\r\n\r\n numeroHabilitacao: pessoa.numeroHabilitacao,\r\n registroHabilitacao: pessoa.registroHabilitacao,\r\n dataEmissaoHabilitacao: this.formatarDataParaBackend(pessoa.dataEmissaoHabilitacao),\r\n dataValidadeHabilitacao: this.formatarDataParaBackend(pessoa.dataValidadeHabilitacao),\r\n categoriaHabilitacao: pessoa.categoriaHabilitacao,\r\n deficienciaFisicaHabilitacao: pessoa.deficienciaFisicaHabilitacao,\r\n primeiraHabilitacao: this.formatarDataParaBackend(pessoa.primeiraHabilitacao),\r\n\r\n passaporte: pessoa.passaporte,\r\n codigoPaisPassaporte: pessoa.codigoPaisPassaporte,\r\n // Adiciona a chave 'cnpj' ao objeto SOMENTE SE pessoa.cnpj for truthy\r\n ...(pessoa.cnpj && { cnpj: pessoa.cnpj.replace(/\\D/g, '') }),\r\n razaoSocial: pessoa.razaoSocial,\r\n nomeFantasia: pessoa.nomeFantasia,\r\n sigla: pessoa.sigla,\r\n paginaWeb: pessoa.paginaWeb,\r\n\r\n autoCadastro: pessoa.autoCadastro,\r\n\r\n enderecos: enderecosPayload,\r\n telefones: telefonesPayload,\r\n emails: emailsPayload\r\n };\r\n }\r\n\r\n /**\r\n * Formata a data no padrão DD/MM/YYYY para o backend.\r\n */\r\n private formatarDataParaBackend(data: any): string | null {\r\n if (!data) return null;\r\n if (typeof data === 'string' && data.includes('/')) return data;\r\n\r\n try {\r\n const d = new Date(data);\r\n if (isNaN(d.getTime())) return null;\r\n\r\n const dia = String(d.getDate()).padStart(2, '0');\r\n const mes = String(d.getMonth() + 1).padStart(2, '0');\r\n const ano = d.getFullYear();\r\n return `${dia}/${mes}/${ano}`;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n}\r\n","<mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar>\r\n\r\n<div class=\"form-container\">\r\n <lib-unb-pessoa-pesquisar [apiPessoaConfig]=\"apiPessoaConfig\" [defaultTipoPessoa]=\"defaultTipoPessoa\"\r\n [campoPesquisaMaxWidth]=\"campoPesquisaMaxWidth\" (pessoaEmitted)=\"pessoaRecebida($event)\">\r\n </lib-unb-pessoa-pesquisar>\r\n</div>\r\n\r\n<unb-mensagem></unb-mensagem>\r\n\r\n<form #pessoaForm=\"ngForm\" [class.readonly]=\"isReadonlyFromSiape || isLoading\" class=\"form-container mt-2\"\r\n *ngIf=\"buscaRealizada && apiPessoaConfig.url\" (ngSubmit)=\"salvar(pessoaForm)\">\r\n\r\n <!-- Campos Pessoa Física e Estrangeira -->\r\n <ng-container\r\n *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA || pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nome\" name=\"nome\" #nome=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Sexo</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoSexo\" name=\"codigoSexo\" #codigoSexo=\"ngModel\" required>\r\n <mat-option [value]=\"1\">Masculino</mat-option>\r\n <mat-option [value]=\"2\">Feminino</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Data Nascimento</mat-label>\r\n <input matInput [matDatepicker]=\"dataNascimentoPicker\" [(ngModel)]=\"pessoa.dataNascimento\" name=\"dataNascimento\"\r\n #dataNascimento=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataNascimentoPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataNascimentoPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Estado Civil</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoEstadoCivil\" name=\"codigoEstadoCivil\" #codigoEstadoCivil=\"ngModel\">\r\n <mat-option *ngFor=\"let estado of estadosCivil | async\" [value]=\"estado.codigo\">\r\n {{ estado.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!--\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Naturalidade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let cidade of getListaEstados()\" [value]=\"cidade.codigo\">\r\n {{ cidade.descricao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n -->\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>País Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisNascimento\" name=\"codigoPaisNascimento\" #codigoPaisNascimento=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n <span *ngIf=\"paisNascimento.denominacao === 'BRASIL'\">🇧🇷 <b>{{ paisNascimento.denominacao }}</b></span>\r\n <span *ngIf=\"paisNascimento.denominacao !== 'BRASIL'\">{{ paisNascimento.denominacao }}</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\"> <!-- 22 eh Brasil-->\r\n <mat-label>UF Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.ufNascimento\" name=\"ufNascimento\" #ufNascimento=\"ngModel\" required>\r\n <mat-option *ngFor=\"let ufNascimento of getListaEstados()\" [value]=\"ufNascimento.identificador\">\r\n {{ ufNascimento.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-15\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\">\r\n <mat-label>Naturalidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\"\r\n required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Escolaridade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.escolaridade\" name=\"codigoEscolaridade\" #codigoEscolaridade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let escolaridade of escolaridade | async\" [value]=\"escolaridade.codigo\">\r\n {{ escolaridade.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeSocial\" name=\"nomeSocial\" #nomeSocial=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome da Mãe</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeMae\" name=\"nomeMae\" #nomeMae=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome do Pai</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomePai\" name=\"nomePai\" #nomePai=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- Campos Pessoa Jurídica -->\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Razão Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.razaoSocial\" name=\"razaoSocial\" />\r\n </mat-form-field>\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Fantasia</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeFantasia\" name=\"nomeFantasia\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA\">\r\n <b style=\"flex: 1 1 100%; margin-bottom: 10px;\">Documentação</b>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Identidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rg\" name=\"rg\" #rg=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Órgão Emissor</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgOrgao\" name=\"rgOrgao\" #rgOrgao=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Unidade Federativa</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.rgUf\" name=\"rgUf\" #rgUf=\"ngModel\" required>\r\n <mat-option *ngFor=\"let cidade of getListaEstados()\" [value]=\"cidade.identificador\">\r\n {{ cidade.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Data de Emissão</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgDataEmissao\" name=\"rgDataEmissao\" #rgDataEmissao=\"ngModel\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA \">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Data Chegada Brasil</mat-label>\r\n <input matInput [matDatepicker]=\"dataChegadaBrasilPicker\" [(ngModel)]=\"pessoa.dataChegadaBrasil\"\r\n name=\"dataChegadaBrasil\" #dataChegadaBrasil=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataChegadaBrasilPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataChegadaBrasilPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>País Passaporte</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisPassaporte\" name=\"codigoPaisPassaporte\" #codigoPaisPassaporte=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n {{ paisNascimento.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Número Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" #passaporte=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <lib-unb-pessoa-telefone-list style=\"flex: 1 1 100%;\" [apiPessoaConfig]=\"apiPessoaConfig\"\r\n [telefones]=\"pessoa.telefones\" (telefonesEmitted)=\"telefonesEmitted($event)\"></lib-unb-pessoa-telefone-list>\r\n\r\n <lib-unb-pessoa-endereco-list style=\"flex: 1 1 100%;\" [apiPessoaConfig]=\"apiPessoaConfig\"\r\n [enderecos]=\"pessoa.enderecos\" (enderecosEmitted)=\"enderecosEmitted($event)\"></lib-unb-pessoa-endereco-list>\r\n\r\n <lib-unb-pessoa-email-list style=\"flex: 1 1 100%;\" [apiPessoaConfig]=\"apiPessoaConfig\" [emails]=\"pessoa.emails\"\r\n (emailsEmitted)=\"emailsEmitted($event)\"></lib-unb-pessoa-email-list>\r\n\r\n <div *ngIf=\"isReadonlyFromSiape\" style=\"flex:1 1 100%; margin-bottom:10px;\">\r\n <mat-card>\r\n <mat-card-content>\r\n <strong>Servidor com matrícula SIAPE deve ter seus dados autalizados pelo aplicativo do sougov</strong>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <mat-card-actions class=\"card-actions-buttons\" *ngIf=\"buscaRealizada\">\r\n <button mat-flat-button [disabled]=\"isLoading || isReadonlyFromSiape\" type=\"submit\" color=\"primary\">\r\n Salvar\r\n </button>\r\n </mat-card-actions>\r\n\r\n</form>","import { CommonModule, CurrencyPipe, DatePipe } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { UnbUsuarioModule } from '../unb-usuario/unb-usuario.module';\r\nimport { UnbPessoaEmailFormComponent } from './unb-pessoa-email-form/unb-pessoa-email-form';\r\nimport { UnbPessoaEnderecoFormComponent } from './unb-pessoa-endereco-form/unb-pessoa-endereco-form';\r\nimport { UnbPessoaFormComponent } from './unb-pessoa-form/unb-pessoa-form.component';\r\nimport { UnbPessoaPesquisarComponent } from './unb-pessoa-pesquisar/unb-pessoa-pesquisar.component';\r\nimport { UnbPessoaTelefoneFormComponent } from './unb-pessoa-telefone-form/unb-pessoa-telefone-form';\r\nimport { UnbPessoaEmailListComponent } from './unb-pessoa-email-form/unb-pessoa-email-list';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { UnbPessoaenderecoListComponent } from './unb-pessoa-endereco-form/unb-pessoa-endereco-list';\r\nimport { UnbPessoaTelefoneListComponent } from './unb-pessoa-telefone-form/unb-pessoa-telefone-list';\r\nimport { UnbMensagemModule } from '../unb-mensagem/unb-mensagem.module';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\n@NgModule({\r\n declarations: [UnbPessoaFormComponent, UnbPessoaPesquisarComponent, UnbPessoaEnderecoFormComponent, UnbPessoaTelefoneListComponent, UnbPessoaenderecoListComponent, UnbPessoaTelefoneFormComponent, UnbPessoaEmailFormComponent, UnbPessoaEmailListComponent],\r\n imports: [\r\n CommonModule,\r\n FormsModule, \r\n BrowserModule,\r\n MatIconModule,\r\n DragDropModule,\r\n MatListModule, \r\n MatButtonModule,\r\n UnbUsuarioModule, \r\n UnbMensagemModule,\r\n MatCardModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatDialogModule,\r\n MatSelectModule, \r\n MatProgressSpinnerModule, \r\n MatButtonModule, \r\n MatProgressBarModule, \r\n MatNativeDateModule,\r\n MatListModule,\r\n MatPaginatorModule,\r\n MatExpansionModule,\r\n MatSnackBarModule, \r\n MatDatepickerModule,\r\n MatRadioModule,\r\n MatCardModule,\r\n MatDividerModule\r\n ],\r\n exports: [UnbPessoaFormComponent, UnbPessoaPesquisarComponent, UnbPessoaEnderecoFormComponent, UnbPessoaTelefoneListComponent, UnbPessoaenderecoListComponent, UnbPessoaTelefoneFormComponent, UnbPessoaEmailFormComponent],\r\n providers: [\r\n MatDatepickerModule,\r\n DatePipe,\r\n CurrencyPipe\r\n ] \r\n})\r\nexport class UnbPessoaModule { }\r\n","export class UnbPessoaEscolaridade {\r\n codigo?: number; // Byte em Java corresponde a number em TypeScript\r\n denominacao?: string;\r\n codigoSiape?: number | null; // Short em Java corresponde a number, e pode ser nulo\r\n extinto: boolean = false;\r\n}","export class UnbPessoaEstadoCivil {\r\n codigo?: number;\r\n denominacao?: string;\r\n codigoSiape?: number | null;\r\n extinto: boolean = false;\r\n}","export class UnbPessoaMunincipio {\r\n codigo?: number;\r\n denominacao?: string;\r\n codigoIBGE?: number | null;\r\n codigoUf?: number;\r\n siglaUf?: string;\r\n denominacaoUf?: string;\r\n}","export class UnbPessoaPais {\r\n codigo?: number;\r\n denominacao?: string;\r\n sigla?: string;\r\n nacionalidade?: string;\r\n extinto?: boolean;\r\n}","export class UnbPessoaRacaCor{\r\n codigo?: number;\r\n denominacao?: string;\r\n}","/*\r\n * Public API Surface of unb-lib-components\r\n */\r\n\r\nexport * from './lib/unb-mensagem/unb-mensagem.component';\r\nexport * from './lib/unb-mensagem/unb-mensagem.module';\r\nexport * from './lib/unb-mensagem/unb-mensagem.service';\r\n\r\nexport * from './lib/services/unb-auth.service';\r\nexport * from './lib/unb-nav-bar/unb-nav-bar.component';\r\nexport * from './lib/unb-nav-bar/unb-nav-bar.module';\r\nexport * from './lib/unb-usuario/unb-usuario.model';\r\n\r\n// UNB Pessoa Module\r\nexport * from './lib/unb-pessoa/unb-pessoa.module';\r\nexport * from './lib/unb-pessoa/unb-pessoa.service';\r\nexport * from './lib/unb-pessoa/unb-tipo-pessoa.enum';\r\nexport * from './lib/unb-pessoa/pessoa-tabelas-apoio';\r\n\r\n// UNB Pessoa Models\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-escolaridade.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-estado-civil.model';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-municipio';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-pais';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-raca-cor';\r\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa-telefone.model';\r\n\r\n// UNB Pessoa Components\r\nexport * from './lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component';\r\nexport * from './lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component';\r\nexport * from './lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form';\r\nexport * from './lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list';\r\nexport * from './lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form';\r\nexport * from './lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list';\r\nexport * from './lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form';\r\nexport * from './lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UnbMensagemService","i2","i1.UnbAuthService","i4","i5","i6","i7","i3","i7.UnbUsuarioComponent","i1","i8","i9","i10","i11","i1.UnBPessoaService","i2.UnBPessoaService","i3.UnbMensagemService","i7.UnbMensagemComponent","i12","i15.UnbPessoaPesquisarComponent","i16.UnbPessoaTelefoneListComponent","i17.UnbPessoaenderecoListComponent","i18.UnbPessoaEmailListComponent"],"mappings":"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"}
|