@stiunb/unb-lib-components 18.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +18 -0
  2. package/esm2022/lib/services/unb-auth.service.mjs +57 -0
  3. package/esm2022/lib/unb-mensagem/unb-mensagem.component.mjs +82 -0
  4. package/esm2022/lib/unb-mensagem/unb-mensagem.module.mjs +26 -0
  5. package/esm2022/lib/unb-mensagem/unb-mensagem.service.mjs +61 -0
  6. package/esm2022/lib/unb-mensagem/unb-message.model.mjs +3 -0
  7. package/esm2022/lib/unb-nav-bar/unb-nav-bar.component.mjs +53 -0
  8. package/esm2022/lib/unb-nav-bar/unb-nav-bar.module.mjs +52 -0
  9. package/esm2022/lib/unb-pessoa/pessoa-tabelas-apoio.mjs +30 -0
  10. package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.mjs +122 -0
  11. package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.mjs +140 -0
  12. package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.mjs +144 -0
  13. package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.mjs +139 -0
  14. package/esm2022/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.mjs +166 -0
  15. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.mjs +5 -0
  16. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.mjs +5 -0
  17. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-escolaridade.model.mjs +6 -0
  18. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-estado-civil.model.mjs +6 -0
  19. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-municipio.mjs +3 -0
  20. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-pais.mjs +3 -0
  21. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-raca-cor.mjs +3 -0
  22. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-telefone.model.mjs +9 -0
  23. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.mjs +6 -0
  24. package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +229 -0
  25. package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.mjs +102 -0
  26. package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.mjs +140 -0
  27. package/esm2022/lib/unb-pessoa/unb-pessoa.module.mjs +128 -0
  28. package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +157 -0
  29. package/esm2022/lib/unb-pessoa/unb-tipo-pessoa.enum.mjs +7 -0
  30. package/esm2022/lib/unb-usuario/oidc-decoded-token.mjs +2 -0
  31. package/esm2022/lib/unb-usuario/oidc-user-data.mjs +2 -0
  32. package/esm2022/lib/unb-usuario/unb-usuario.component.mjs +38 -0
  33. package/esm2022/lib/unb-usuario/unb-usuario.model.mjs +9 -0
  34. package/esm2022/lib/unb-usuario/unb-usuario.module.mjs +65 -0
  35. package/esm2022/lib/utils/unb-utils.mjs +76 -0
  36. package/esm2022/public-api.mjs +34 -0
  37. package/esm2022/unb-lib-components.mjs +5 -0
  38. package/fesm2022/unb-lib-components.mjs +1923 -0
  39. package/fesm2022/unb-lib-components.mjs.map +1 -0
  40. package/index.d.ts +5 -0
  41. package/lib/services/unb-auth.service.d.ts +17 -0
  42. package/lib/unb-mensagem/unb-mensagem.component.d.ts +35 -0
  43. package/lib/unb-mensagem/unb-mensagem.module.d.ts +10 -0
  44. package/lib/unb-mensagem/unb-mensagem.service.d.ts +36 -0
  45. package/lib/unb-mensagem/unb-message.model.d.ts +6 -0
  46. package/lib/unb-nav-bar/unb-nav-bar.component.d.ts +19 -0
  47. package/lib/unb-nav-bar/unb-nav-bar.module.d.ts +16 -0
  48. package/lib/unb-pessoa/pessoa-tabelas-apoio.d.ts +5 -0
  49. package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.d.ts +34 -0
  50. package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.d.ts +31 -0
  51. package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.d.ts +36 -0
  52. package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.d.ts +29 -0
  53. package/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.d.ts +56 -0
  54. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.d.ts +13 -0
  55. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.d.ts +22 -0
  56. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-escolaridade.model.d.ts +6 -0
  57. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-estado-civil.model.d.ts +6 -0
  58. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-municipio.d.ts +8 -0
  59. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-pais.d.ts +7 -0
  60. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-raca-cor.d.ts +4 -0
  61. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-telefone.model.d.ts +17 -0
  62. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.d.ts +69 -0
  63. package/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.d.ts +39 -0
  64. package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.d.ts +34 -0
  65. package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.d.ts +31 -0
  66. package/lib/unb-pessoa/unb-pessoa.module.d.ts +35 -0
  67. package/lib/unb-pessoa/unb-pessoa.service.d.ts +59 -0
  68. package/lib/unb-pessoa/unb-tipo-pessoa.enum.d.ts +5 -0
  69. package/lib/unb-usuario/oidc-decoded-token.d.ts +29 -0
  70. package/lib/unb-usuario/oidc-user-data.d.ts +9 -0
  71. package/lib/unb-usuario/unb-usuario.component.d.ts +17 -0
  72. package/lib/unb-usuario/unb-usuario.model.d.ts +6 -0
  73. package/lib/unb-usuario/unb-usuario.module.d.ts +18 -0
  74. package/lib/utils/unb-utils.d.ts +7 -0
  75. package/package.json +28 -0
  76. package/public-api.d.ts +28 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"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/pessoa-tabelas-apoio.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/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/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\">&nbsp;\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 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];","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}\r\n\r\nexport class UnbPessoaEmailTipo {\r\n index?: number;\r\n codigo?: number;\r\n denominacao?: string;\r\n}","export enum TipoPessoaEnum {\n FISICA = 'Física',\n JURIDICA = 'Jurídica',\n ESTRANGEIRA = 'Estrangeira'\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(pessoa: any): Observable<UnbPessoaModel | null> {\r\n if (!pessoa) return throwError(() => new Error('Erro Local: Object não pode ser null'));\r\n if (!pessoa.tipoPessoa) return throwError(() => new Error('Erro Local: Tipo pessoa não pode ser null'));\r\n\r\n if (pessoa.tipoPessoa == TipoPessoaEnum.FISICA || pessoa.tipoPessoa == TipoPessoaEnum.ESTRANGEIRA) {\r\n return this.savePessoaFisica(pessoa);\r\n } else if (pessoa.tipoPessoa == TipoPessoaEnum.JURIDICA) {\r\n return this.savePessoaJuridica(pessoa);\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 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 /**\r\n * Valida o objeto de e-mail.\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 // 1. Validação de campo obrigatório\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 formato de e-mail\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 // 3. Validação de e-mail duplicado na lista existente\r\n // Filtra a lista para excluir o próprio e-mail que está sendo editado (se ele tiver um 'codigo')\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 return true;\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>E-mail</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"email.email\" name=\"emailValue\" #emailValue=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"email.tipoEmailCodigo\" [compareWith]=\"compararTipos\" name=\"tipoEmailCodigo\" (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of tipoEmail | async\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"close()\">Fechar</button>\r\n <button mat-flat-button type=\"submit\" color=\"primary\">Salvar</button>\r\n </mat-dialog-actions>\r\n</form>","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; // o put eh ufEndereco e o get eh uf. Entao precisa converter\r\n uf?: string;\r\n pais?: string;\r\n complemento?: string;\r\n caixaPostal?: string;\r\n correspondencia?: boolean;\r\n ordemEndereco?: number;\r\n paisEnderecoCodigo?: number;\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\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\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 // Inscreve para guardar a lista em uma variável comum\r\n this.tipoEndereco.subscribe(lista => {\r\n this.listaTipoEndereco = lista;\r\n\r\n // Se já tiver tipoEmailCodigo, 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 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 // 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 ufEndereco para uf\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 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 e-mail.\r\n * Retorna true se o e-mail for válido, false caso contrário.\r\n */\r\n validar(enderecoToValidate: UnbPessoaEndereco): boolean {\r\n \r\n\r\n // 3. Validação de e-mail duplicado na lista existente\r\n // Filtra a lista para excluir o próprio endereço que está sendo editado (se ele tiver um 'codigo')\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;\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\" (selectionChange)=\"onTipoSelecionado($event.value)\" required>\r\n <mat-option *ngFor=\"let tipo of tipoEndereco | async\" [value]=\"tipo.codigo\">\r\n {{tipo.denominacao}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>CEP</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"endereco.cep\" name=\"cep\" #cep=\"ngModel\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisarCep()\">\r\n <mat-icon style=\"margin-right: 2px;\">search</mat-icon> \r\n </button>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Endereç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>","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!: string;\r\n paisNascimento!: string;\r\n ufNascimento!: string;\r\n naturalidade!: string;\r\n codigoPaisNascimento!: number;\r\n codigoPaisPassaporte!: number;\r\n codigoEstadoCivil!: number;\r\n nacionalidade!: string;\r\n estadoCivil!: string;\r\n nomePai!: string;\r\n nomeMae!: string;\r\n tipoSanguineo!: string;\r\n escolaridade!: string;\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\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\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 // define o tipo pessoa padrao. Asism, o radio button jah vem marcado com o que foi definido aqui.\r\n @Input() defaultTipoPessoa!: TipoPessoaEnum;\r\n\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 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 // 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 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 if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {\r\n this.pessoa.cpf = UnbUtils.formataCpf(resultado.cpf); // voltou pro formato original (isso evita formartar novamente)\r\n }else if (this.pessoa.tipoPessoa == TipoPessoaEnum.JURIDICA) {\r\n this.pessoa.cnpj = UnbUtils.formataCnpj(resultado.cnpj); // voltou pro formato original (isso evita formartar novamente)\r\n }\r\n } else {\r\n // se chegar aki eh pq nao encontrou, entao temos que emitir um resultado com codigoPessoa vazio mas com os criterios usado na pesquisa\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 // agora sobreescrevemos, pq se tiver uma pessoa pesquisada com resultado correto, e pesquisar novamente, precisamos apagar a primeira pessoa. \r\n this.pessoa = novaPessoa;\r\n }\r\n \r\n this.pessoaEmitted.emit(this.pessoa); \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=\"form-container\" (ngSubmit)=\"pesquisar()\">\r\n <!-- Tipo da Pessoa. Controlado pelo OnInit -->\r\n <mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar> \r\n <div *ngIf=\"mostrarTipoPessoa\">\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 \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 *ngIf=\"!isLoading\" disabled=\"{{isLoading}}\" matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon style=\"margin-right: 2px;\">search</mat-icon> \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 *ngIf=\"!isLoading\" matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon>search</mat-icon>\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 *ngIf=\"!isLoading\" matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\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 listaTipoEndereco: 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.listaTipoEndereco = 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 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.listaTipoEndereco.find(t => t.codigo === codigoSelecionado);\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.\r\n * Retorna true se o telefone for válido, false caso contrário.\r\n */\r\n validar(telefoneToValidate: UnbPessoaTelefone): boolean {\r\n return true; // Implementar a lógica de validação conforme necessário\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>DDD</mat-label>\r\n <input type=\"text\" 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\" matInput [(ngModel)]=\"telefone.numero\" name=\"telefoneValue\" #telefoneValue=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-100\" appearance=\"outline\">\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"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 </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 } 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\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 {\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 this.sortAndAssignOrder(); // organiza a lista de telefones. As vezes tem ordem duplicada ou faltando.\r\n }\r\n\r\n excluir(telefone: UnbPessoaTelefoneTipo) {\r\n\r\n }\r\n\r\n editar(telefone: UnbPessoaTelefoneTipo) {\r\n this.openFormDialog(telefone);\r\n }\r\n\r\n moverParaCima(index: number) {\r\n if (index <= 0) return;\r\n\r\n [this.telefones[index - 1], this.telefones[index]] = [this.telefones[index], this.telefones[index - 1]];\r\n this.atualizarOrdem();\r\n }\r\n\r\n moverParaBaixo(index: number) {\r\n if (index >= this.telefones.length - 1) return;\r\n\r\n [this.telefones[index], this.telefones[index + 1]] = [this.telefones[index + 1], this.telefones[index]];\r\n this.atualizarOrdem();\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 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 emailsList: 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 const index = this.telefones.findIndex(e => e.codigo === result.codigo);\r\n\r\n if (result.codigo && index > -1) {\r\n // Atualiza e-mail existente\r\n this.telefones[index] = result;\r\n } else {\r\n // Adiciona novo e-mail (gera ordem automaticamente se quiser)\r\n result.ordem = this.telefones.length + 1;\r\n this.telefones.push(result);\r\n }\r\n // Emite lista atualizada\r\n this.telefonesEmitted.emit(this.telefones);\r\n }\r\n });\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}","<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 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 <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"telefones && telefones.length > 0\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"text-align: center;\" >Ordem</th>\r\n <th>DDD</th>\r\n <th>Número</th>\r\n <th style=\"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\">\r\n <td style=\"width: 5%; text-align: center;\"> \r\n <button *ngIf=\"telefones.length > 1 && i > 0\" mat-icon-button aria-label=\"Mover para cima\"\r\n (click)=\"moverParaCima(i)\">\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button *ngIf=\"telefones.length > 1 && i < telefones.length - 1\" mat-icon-button aria-label=\"Mover para baixo\"\r\n (click)=\"moverParaBaixo(i)\">\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </td>\r\n <td style=\"width: 20%;\">{{ valor.ddd }}</td>\r\n <td style=\"width: 60%;\">{{ valor.numero}}</td>\r\n <td style=\"width: 20%; text-align: center;\">\r\n <button mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } 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 { UnBPessoaService } from '../unb-pessoa.service';\r\nimport { TipoPessoaEnum } from '../unb-tipo-pessoa.enum';\r\nimport { UnbPessoaEndereco } from '../unb-pessoa-models/unb-pessoa-endereco.model';\r\nimport { UnbPessoaTelefoneTipo } from '../unb-pessoa-models/unb-pessoa-telefone.model';\r\nimport { UnbPessoaEnderecoFormComponent } from './unb-pessoa-endereco-form';\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 {\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 excluir(endereco: UnbPessoaEndereco) {\r\n\r\n }\r\n\r\n editar(endereco: UnbPessoaEndereco) {\r\n this.openFormDialog(endereco);\r\n }\r\n\r\n moverParaCima(index: number) {\r\n if (index <= 0) return;\r\n\r\n [this.enderecos[index - 1], this.enderecos[index]] = [this.enderecos[index], this.enderecos[index - 1]];\r\n this.atualizarOrdem();\r\n }\r\n\r\n moverParaBaixo(index: number) {\r\n if (index >= this.enderecos.length - 1) return;\r\n\r\n [this.enderecos[index], this.enderecos[index + 1]] = [this.enderecos[index + 1], this.enderecos[index]];\r\n this.atualizarOrdem();\r\n }\r\n\r\n atualizarOrdem() {\r\n this.enderecos.forEach((endereco, idx) => {\r\n endereco.ordem = 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 const index = this.enderecos.findIndex(e => e.codigo === result.codigo);\r\n\r\n if (result.codigo && index > -1) {\r\n // Atualiza e-mail existente\r\n this.enderecos[index] = result;\r\n } else {\r\n // Adiciona novo e-mail (gera ordem automaticamente se quiser)\r\n result.ordem = this.enderecos.length + 1;\r\n this.enderecos.push(result);\r\n }\r\n // Emite lista atualizada\r\n this.enderecosEmitted.emit(this.enderecos);\r\n }\r\n });\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 tempenderecos = [...this.enderecos];\r\n\r\n // 2. Mapeie as ordens existentes para identificar duplicatas e ausentes\r\n const orderMap = new Map<number, UnbPessoaEndereco[]>();\r\n const enderecosWithoutOrder: UnbPessoaEndereco[] = [];\r\n\r\n tempenderecos.forEach(endereco => {\r\n if (endereco.ordem !== undefined && endereco.ordem !== null) {\r\n if (!orderMap.has(endereco.ordem)) {\r\n orderMap.set(endereco.ordem, []);\r\n }\r\n orderMap.get(endereco.ordem)?.push(endereco);\r\n } else {\r\n enderecosWithoutOrder.push(endereco);\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 enderecos 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.enderecos.forEach(endereco => { // Iterar sobre a lista original para modificar in-place\r\n if (endereco.ordem !== undefined && endereco.ordem !== null) {\r\n if (!finalUsedOrders.has(endereco.ordem)) {\r\n // Se a ordem ainda não foi usada, use-a e adicione ao set\r\n finalUsedOrders.add(endereco.ordem);\r\n } else {\r\n // Se a ordem já foi usada (é uma duplicata), atribua uma nova\r\n endereco.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(endereco.ordem); // Adiciona a nova ordem ao set\r\n }\r\n }\r\n });\r\n\r\n // 5. Atribua ordens para enderecos que não tinham ordem definida\r\n enderecosWithoutOrder.forEach(endereco => {\r\n endereco.ordemEndereco = getNextAvailableOrder();\r\n finalUsedOrders.add(endereco.ordemEndereco); // 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.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 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\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"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=\"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\">\r\n <td style=\"width: 5%; text-align: center;\"> \r\n <button *ngIf=\"enderecos.length > 1 && i > 0\" mat-icon-button aria-label=\"Mover para cima\"\r\n (click)=\"moverParaCima(i)\">\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button *ngIf=\"enderecos.length > 1 && i < enderecos.length - 1\" mat-icon-button aria-label=\"Mover para baixo\"\r\n (click)=\"moverParaBaixo(i)\">\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </td>\r\n <td style=\"width: 20%;\">{{ valor.logradouro }}</td>\r\n <td style=\"width: 20%;\">{{ valor.bairro }}</td>\r\n <td style=\"width: 10%;\">{{ valor.cep }}</td>\r\n <td style=\"width: 10%;\">{{ valor.tipo?.toUpperCase() }}</td>\r\n <td style=\"width: 20%; text-align: center;\">\r\n <button mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output } 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\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 {\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 excluir(email: UnbPessoaEmailTipo) {\r\n\r\n }\r\n\r\n editar(email: UnbPessoaEmailTipo) {\r\n this.openFormDialog(email);\r\n }\r\n\r\n moverParaCima(index: number) {\r\n if (index <= 0) return;\r\n\r\n [this.emails[index - 1], this.emails[index]] = [this.emails[index], this.emails[index - 1]];\r\n this.atualizarOrdem();\r\n }\r\n\r\n moverParaBaixo(index: number) {\r\n if (index >= this.emails.length - 1) return;\r\n\r\n [this.emails[index], this.emails[index + 1]] = [this.emails[index + 1], this.emails[index]];\r\n this.atualizarOrdem();\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 const index = this.emails.findIndex(e => e.codigo === result.codigo);\r\n\r\n if (result.codigo && index > -1) {\r\n // Atualiza e-mail existente\r\n this.emails[index] = result;\r\n } else {\r\n // Adiciona novo e-mail (gera ordem automaticamente se quiser)\r\n result.ordem = this.emails.length + 1;\r\n this.emails.push(result);\r\n }\r\n // Emite lista atualizada\r\n this.emailsEmitted.emit(this.emails);\r\n }\r\n });\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.emails];\r\n\r\n // 2. Mapeie as ordens existentes para identificar duplicatas e ausentes\r\n const orderMap = new Map<number, UnbPessoaEmail[]>();\r\n const emailsWithoutOrder: UnbPessoaEmail[] = [];\r\n\r\n tempEmails.forEach(email => {\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. 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 emails 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.emails.forEach(email => { // Iterar sobre a lista original para modificar in-place\r\n if (email.ordem !== undefined && email.ordem !== null) {\r\n if (!finalUsedOrders.has(email.ordem)) {\r\n // Se a ordem ainda não foi usada, use-a e adicione ao set\r\n finalUsedOrders.add(email.ordem);\r\n } else {\r\n // Se a ordem já foi usada (é uma duplicata), atribua uma nova\r\n email.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(email.ordem); // Adiciona a nova ordem ao set\r\n }\r\n }\r\n });\r\n\r\n // 5. Atribua ordens para emails que não tinham ordem definida\r\n emailsWithoutOrder.forEach(email => {\r\n email.ordem = getNextAvailableOrder();\r\n finalUsedOrders.add(email.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.emails.sort((a, b) => (a.ordem ?? 0) - (b.ordem ?? 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 {{ emails?.length === 1 ? 'Email Cadastrado' : 'E-mails Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ emails?.length || 0 }})</span>\r\n </div>\r\n\r\n <button matTooltip=\"Novo Email\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Email\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"emails && emails.length > 0\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"text-align: center;\" >Ordem</th>\r\n <th>E-mail</th>\r\n <th>Tipo</th>\r\n <th style=\"text-align: center;\">Ações</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of emails; let i = index\" class=\"my-tr\">\r\n <td style=\"width: 5%; text-align: center;\"> \r\n <button *ngIf=\"emails.length > 1 && i > 0\" mat-icon-button aria-label=\"Mover para cima\"\r\n (click)=\"moverParaCima(i)\">\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button *ngIf=\"emails.length > 1 && i < emails.length - 1\" mat-icon-button aria-label=\"Mover para baixo\"\r\n (click)=\"moverParaBaixo(i)\">\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </td>\r\n <td style=\"width: 50%;\">{{ valor.email }}</td>\r\n <td style=\"width: 20%;\">{{ valor.tipo?.toUpperCase() }}</td>\r\n <td style=\"width: 20%; text-align: center;\">\r\n <button mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>","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\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 @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\r\n constructor(private service: UnBPessoaService, private snackBar: MatSnackBar) { }\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 \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\r\n this.pessoa = pessoaRecebida;\r\n if (this.pessoa && this.pessoa.escolaridade) {\r\n this.pessoa.escolaridade = this.normalizaEscolaridade(this.pessoa.escolaridade);\r\n }\r\n }\r\n\r\n salvar() {\r\n if (!this.validar() && !this.pessoa) return\r\n if (!this.service) return;\r\n \r\n this.isLoading = true;\r\n\r\n let result = this.service.salvar(this.pessoa);\r\n if (result && typeof result.subscribe === 'function') {\r\n result.subscribe((resposta:any ) => { \r\n this.isLoading = false; \r\n this.pessoa = resposta;\r\n }, (err) => { this.erro(err)} ); \r\n } else {\r\n console.error(\"Erro: O método salvar() não retornou um Observable.\");\r\n }\r\n } \r\n\r\n validar(): boolean {\r\n\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 (this.pessoa.telefones == null || (this.pessoa.telefones != null && this.pessoa.telefones.length == 0)) {\r\n this.openSnackBar(\"Digite um Contato e clique em Adicionar\");\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(\"Digite um Endereço(Localicade) e clique em Adicionar\");\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(\"Digite um E-mail e clique em Adicionar\");\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.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 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 normalizaEscolaridade(escolaridade: string): string {\r\n if (!escolaridade) return '0'; // Retorna \"Não Informado\" se estiver vazio\r\n \r\n const partes = escolaridade.split(\" - \");\r\n return partes.length > 1 ? partes[0].trim() : '0';\r\n }\r\n\r\n private erro(erro: any): void { \r\n // coloco o erro em negrito\r\n this.openSnackBar(erro); \r\n this.isLoading = false;\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"," <div class=\"form-container\">\r\n <lib-unb-pessoa-pesquisar\r\n [apiPessoaConfig]=\"apiPessoaConfig\" \r\n [defaultTipoPessoa]=\"defaultTipoPessoa\" \r\n (pessoaEmitted)=\"pessoaRecebida($event)\"></lib-unb-pessoa-pesquisar>\r\n</div>\r\n \r\n <form #pessoaForm=\"ngForm\" class=\"form-container mt-2\" *ngIf=\"buscaRealizada && apiPessoaConfig.url\" (ngSubmit)=\"salvar()\">\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\" #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 <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\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\">\r\n {{ ufNascimento }}\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\" 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\">\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 \r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA || pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA \">\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\"\r\n #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 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 <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 <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Número Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" #passaporte=\"ngModel\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <b style=\"flex: 1 1 100%; margin-bottom: 10px;\"> Contato</b>\r\n\r\n <lib-unb-pessoa-telefone-list style=\"flex: 1 1 100%;\" [apiPessoaConfig]=\"apiPessoaConfig\" [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\" [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\" (emailsEmitted)=\"emailsEmitted($event)\" ></lib-unb-pessoa-email-list>\r\n \r\n <mat-card-actions class=\"card-actions-buttons\" *ngIf=\"buscaRealizada\">\r\n <button mat-flat-button disabled=\"{{isLoading}}\" type=\"submit\" color=\"primary\">\r\n Salvar\r\n </button>\r\n </mat-card-actions>\r\n \r\n </form>\r\n\r\n","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\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 MatListModule, \r\n MatButtonModule,\r\n UnbUsuarioModule, \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\nexport * from './lib/unb-pessoa/pessoa-tabelas-apoio';\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\n\r\n// Componentes de formulário\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-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-telefone-form/unb-pessoa-telefone-form';\r\nexport * from './lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list';\r\n\r\n// Models\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\nexport * from './lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UnbMensagemService","i2","i1.UnbAuthService","i4","i5","i3","i7.UnbUsuarioComponent","i1","i7","i8","i6","i9","i10","i11","i1.UnBPessoaService","i2.UnBPessoaService","i12.UnbPessoaPesquisarComponent","i13.UnbPessoaTelefoneListComponent","i14.UnbPessoaenderecoListComponent","i15.UnbPessoaEmailListComponent"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="unb-lib-components" />
5
+ export * from './public-api';
@@ -0,0 +1,17 @@
1
+ import { OidcSecurityService } from 'angular-auth-oidc-client';
2
+ import { UnbUsuarioModel } from '../unb-usuario/unb-usuario.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class UnbAuthService {
5
+ private usuarioSubject;
6
+ usuario$: import("rxjs").Observable<UnbUsuarioModel>;
7
+ private usuarioModel;
8
+ private oidcSecurityService;
9
+ constructor();
10
+ initiate(oidcSecurityService: OidcSecurityService): void;
11
+ private logAuthenticatedState;
12
+ private setUserData;
13
+ login(): void;
14
+ logout(): void;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<UnbAuthService, never>;
16
+ static ɵprov: i0.ɵɵInjectableDeclaration<UnbAuthService>;
17
+ }
@@ -0,0 +1,35 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { UnbMensagemService } from './unb-mensagem.service';
3
+ import { UnbMensagemModel } from './unb-message.model';
4
+ import { OnDestroy } from '@angular/core';
5
+ import * as i0 from "@angular/core";
6
+ export declare class UnbMensagemComponent implements OnInit, OnDestroy {
7
+ private mensagemService;
8
+ mensagem: string;
9
+ tipo: string;
10
+ alertMessage: UnbMensagemModel;
11
+ private subscription;
12
+ constructor(mensagemService: UnbMensagemService);
13
+ ngOnInit(): void;
14
+ ngAfterContentInit(): void;
15
+ /**
16
+ * Esconde o componente de mensagem
17
+ */
18
+ hide(): void;
19
+ /**
20
+ *
21
+ * @param message mensagem que vai aparecer na tela
22
+ * @param tipo tipo da mensagem: success, info, warning, danger.
23
+ */
24
+ showMessage(message: string, tipo: number): void;
25
+ ngOnDestroy(): void;
26
+ /**
27
+ * Recupera qual o tipo da mensagem.
28
+ * O método tenta achar o tipo conforme o valor informado, incluido erros de digitação
29
+ *
30
+ * @returns o valor correspondente do informa. Caso não encontra, emite um erro e coloca retorna o padrão info como default
31
+ */
32
+ getTipo(): number;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<UnbMensagemComponent, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<UnbMensagemComponent, "unb-mensagem", never, { "mensagem": { "alias": "mensagem"; "required": false; }; "tipo": { "alias": "tipo"; "required": false; }; }, {}, never, never, false, never>;
35
+ }
@@ -0,0 +1,10 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./unb-mensagem.component";
3
+ import * as i2 from "@angular/common";
4
+ import * as i3 from "@angular/material/icon";
5
+ import * as i4 from "@angular/material/button";
6
+ export declare class UnbMensagemModule {
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<UnbMensagemModule, never>;
8
+ static ɵmod: i0.ɵɵNgModuleDeclaration<UnbMensagemModule, [typeof i1.UnbMensagemComponent], [typeof i2.CommonModule, typeof i3.MatIconModule, typeof i4.MatButtonModule], [typeof i1.UnbMensagemComponent]>;
9
+ static ɵinj: i0.ɵɵInjectorDeclaration<UnbMensagemModule>;
10
+ }