{"version":3,"sources":["webpack:///src/app/modules/pharmacist/modal-add-pharmacist/modal-add-pharmacist.component.ts","webpack:///src/app/modules/pharmacist/modal-add-pharmacist/modal-add-pharmacist.component.html","webpack:///src/app/modules/pharmacist/modal-add-pharmacist/modal-add-pharmacist.component.scss","webpack:///src/app/modules/pharmacist/modal-search/modal-search.component.html","webpack:///src/app/core/services/validation.util.ts","webpack:///src/app/modules/pharmacist/modal-search/modal-search.component.ts","webpack:///src/app/modules/pharmacist/modal-search/modal-search.component.scss","webpack:///src/app/modules/pharmacist/pharmacist-list/pharmacist-list.component.html","webpack:///src/app/modules/pharmacist/pharmacist-list/pharmacist-list.component.ts","webpack:///src/app/modules/pharmacist/pharmacist-list/pharmacist-list.component.scss","webpack:///src/app/modules/pharmacy/pharmacy.guard.ts","webpack:///src/app/modules/pharmacist/pharmacist-routing.module.ts","webpack:///src/app/modules/pharmacist/pharmacist.module.ts"],"names":["modalRef","fb","notification","pharmacistService","cepService","userService","loading","message","states","updateListPharmacistEvent","this","form","group","name","required","nomeValidator","cpf","crf","number","uf","identity","cellphone","telephone","email","emailConfirmation","emailContact","dateOfBirth","sex","address","city","complement","street","neighborhood","cep","cepValidator","membership","mothersName","control","validators","emailMatch","consultedPatient","patchForm","disableInputs","emailForm","get","valueChanges","pipe","map","value","toLowerCase","setValue","emitEvent","filter","_","valid","debounceTime","environment","switchMap","checkEmailExists","catchError","err","of","subscribe","res","status","setErrors","exists","invalid","disable","enable","markFormGroup","pendency","undefined","pharmacist","getRawValue","pharmacy","_id","save","toPromise","notify","hide","emit","error","console","log","nascimento","controls","format","nome","genero","mae","event","target","length","replace","data","consult","erro","patchValue","logradouro","bairro","localidade","a","nativeAsync","selector","template","isValid","providedIn","router","pharmacyService","bigboostService","pharmacists","openModalAddPharmacistEvent","updateListPatientEvent","loadingSpinnerEvent","isValidCpf","hasPharmacist","getPharmacyByCpf","addPharmacist","consultCpf","pharmacistId","erroCodigo","Object","values","includes","getPharmacistsByPharmacyId","authService","modalService","nzModalService","createdAt","pageSize","paginationData","skip","totalRecord","orderBy","sortOrder","scrollConfig","x","y","getUserData","getPharmacists","getPharmacyByUserId","user","pageIndex","params","key","initialState","userType","modal","show","backdrop","keyboard","content","showModalAddPharmacist","class","confirm","nzTitle","nzContent","nzOnOk","async","removePharmacist","limit","getFilter","navigate","PharmacyGuard","route","state","routes","path","component","canActivate","redirectTo","PharmacistRoutingModule","imports","forChild","exports","PharmacistModule","declarations","forRoot"],"mappings":"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","file":"x","sourcesContent":["import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { CepService } from '@app/modules/entry/services/cep.service';\nimport { UserService } from '@app/modules/user/user.service';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { BrazilState } from '@app/shared/models';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { markFormGroup } from '@app/utils/markFormGroup';\nimport { environment } from '@env/environment';\nimport moment from 'moment';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { of } from 'rxjs/internal/observable/of';\nimport { catchError, debounceTime, filter, map, switchMap } from 'rxjs/operators';\nimport { PharmacistService } from '../services/pharmacist.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-modal-add-pharmacist',\n templateUrl: './modal-add-pharmacist.component.html',\n styleUrls: ['./modal-add-pharmacist.component.scss']\n})\nexport class ModalAddPharmacistComponent implements OnInit {\n loading = false;\n consultedPatient: any;\n message = '';\n pharmacy: any;\n states: BrazilState[] = BrazilianStates;\n\n @Output() updateListPharmacistEvent = new EventEmitter<any>();\n\n form: FormGroup;\n\n constructor(\n public modalRef: BsModalRef,\n private fb: FormBuilder,\n private notification: AppToastService,\n private pharmacistService: PharmacistService,\n private cepService: CepService,\n private userService: UserService\n ) {\n this.form = this.fb.group(\n {\n name: ['', [Validators.required, ValidationService.nomeValidator]],\n cpf: ['', Validators.required],\n crf: this.fb.group({\n number: ['', Validators.required],\n uf: ['', Validators.required]\n }),\n identity: ['', Validators.required],\n cellphone: ['', Validators.required],\n telephone: [''],\n email: ['', [Validators.required, Validators.email]],\n emailConfirmation: ['', [Validators.required, Validators.email]],\n emailContact: ['', [Validators.required, Validators.email]],\n dateOfBirth: [null, Validators.required],\n sex: ['', Validators.required],\n address: this.fb.group({\n uf: [null, Validators.required],\n city: ['', Validators.required],\n complement: [''],\n number: ['', Validators.required],\n street: ['', Validators.required],\n neighborhood: ['', Validators.required],\n cep: ['', [Validators.required, ValidationService.cepValidator]]\n }),\n membership: this.fb.group({\n mothersName: this.fb.control('', Validators.required)\n })\n },\n { validators: [ValidationService.emailMatch] }\n );\n }\n\n ngOnInit() {\n if (this.consultedPatient) {\n this.patchForm();\n this.disableInputs();\n }\n\n const emailForm = this.form.get('email');\n emailForm.valueChanges\n .pipe(\n map(email => {\n const value = email && email.toLowerCase();\n emailForm.setValue(value, { emitEvent: false });\n return value;\n }),\n filter(_ => emailForm.valid),\n debounceTime(environment.debounceTime),\n switchMap(email => this.userService.checkEmailExists(email).pipe(catchError(err => of(err))))\n )\n .subscribe(res => {\n if (res.status === 200) {\n emailForm.setErrors({ exists: true });\n } else if (res.status === 404) {\n emailForm.setErrors(null);\n } else if (res.status === 400) {\n emailForm.setErrors({ invalid: true });\n }\n });\n\n this.form.get('emailConfirmation').valueChanges.subscribe(email => {\n this.form.get('emailConfirmation').setValue(email.toLowerCase(), { emitEvent: false });\n });\n\n this.form.get('emailContact').valueChanges.subscribe(email => {\n this.form.get('emailContact').setValue(email.toLowerCase(), { emitEvent: false });\n });\n }\n\n checkRepeatEmail(value: boolean) {\n if (value) {\n this.form.get('emailContact').setValue(this.form.get('email').value);\n this.form.get('emailContact').disable();\n } else {\n this.form.get('emailContact').enable();\n }\n }\n\n @nativeAsync\n async submitForm() {\n markFormGroup(this.form);\n this.form.value.pendency = this.consultedPatient.status === -1 ? this.consultedPatient : undefined;\n try {\n if (this.form.valid) {\n this.loading = true;\n const pharmacist = this.form.getRawValue();\n pharmacist.pharmacy = this.pharmacy._id;\n await this.pharmacistService.save(pharmacist).toPromise();\n this.loading = false;\n this.notification.notify('success', 'Sucesso', 'Farmacêutico cadastrado com sucesso!');\n this.modalRef.hide();\n this.updateListPharmacistEvent.emit(null);\n }\n } catch (error) {\n this.message = error.error.message;\n console.log(error);\n this.loading = false;\n }\n }\n\n private patchForm() {\n if (this.consultedPatient.nascimento) {\n const nascimento = moment(this.consultedPatient.nascimento, 'DD/MM/YYYY');\n this.form.controls['dateOfBirth'].setValue(nascimento.format('YYYY-MM-DD'));\n }\n\n this.form.controls['name'].setValue(this.consultedPatient.nome || '');\n this.form.controls['cpf'].setValue(this.consultedPatient.cpf);\n this.form.controls['sex'].setValue(this.consultedPatient.genero || '');\n this.form.get('membership.mothersName').setValue(this.consultedPatient.mae || '');\n }\n\n private disableInputs() {\n this.form.get('cpf').disable();\n this.form.get('dateOfBirth').disable();\n this.form.get('sex').disable();\n this.form.get('membership.mothersName').disable();\n }\n @nativeAsync\n async onKey(event: any) {\n if (event.target.value.length === 10) {\n const cep = event.target.value.replace(/[^\\d]+/g, '');\n const data = await this.cepService.consult(cep);\n if (!data.erro) {\n this.form.controls['address'].patchValue({\n uf: data.uf,\n street: data.logradouro,\n neighborhood: data.bairro,\n city: data.localidade,\n number: null,\n cep: data.cep\n });\n }\n }\n }\n}\n","export default \"<div theme>\\n <div class=\\\"modal-header\\\">\\n <h4 class=\\\"modal-title pull-left text-white\\\">Novo farmacêutico</h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"modalRef.hide()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n </div>\\n <div class=\\\"modal-body\\\">\\n <div *ngIf=\\\"consultedPatient.status === -1 || consultedPatient.erroCodigo >= 1000\\\">\\n <nz-alert nzType=\\\"warning\\\" [nzMessage]=\\\"consultedPatient.erro\\\"></nz-alert>\\n <br />\\n </div>\\n <div *ngIf=\\\"message.length > 0\\\">\\n <nz-alert nzType=\\\"error\\\" [nzMessage]=\\\"message\\\"></nz-alert>\\n <br />\\n </div>\\n <form nz-form [formGroup]=\\\"form\\\">\\n <div class=\\\"row justify-content-between\\\">\\n <div class=\\\"col-md-6\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-12\\\">\\n <nz-form-item *ngIf=\\\"form.get('name') as name\\\">\\n <nz-form-label nzFor=\\\"nome\\\">Nome<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"ex: João Gilberto\\\"\\n formControlName=\\\"name\\\"\\n id=\\\"name\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"name.dirty && name.errors\\\">\\n <ng-container *ngIf=\\\"name.hasError('required')\\\">\\n Campo obrigatório, por favor digite o seu nome e sobrenome.\\n </ng-container>\\n <ng-container *ngIf=\\\"!name.hasError('required') && name.hasError('nome')\\\">\\n Por favor digite o seu nome e sobrenome.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item *ngIf=\\\"form.get('cpf') as cpf\\\">\\n <nz-form-label nzFor=\\\"cpf\\\">CPF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cpf\\\"\\n placeholder=\\\"000.000.000-00\\\"\\n mask=\\\"000.000.000-00\\\"\\n formControlName=\\\"cpf\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"cpf.dirty && cpf.errors\\\">\\n <ng-container *ngIf=\\\"cpf.hasError('required')\\\">\\n Campo obrigatório, por favor digite seu CPF.\\n </ng-container>\\n <ng-container *ngIf=\\\"!cpf.hasError('required') && cpf.hasError('cpf')\\\">\\n CPF inválido, por favor digite um CPF válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item *ngIf=\\\"form.get('identity') as identity\\\">\\n <nz-form-label nzFor=\\\"identity\\\"\\n >Identidade<span class=\\\"mandatory\\\"> *</span>\\n </nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"text\\\"\\n placeholder=\\\"ex: 18.040.818-5\\\"\\n formControlName=\\\"identity\\\"\\n id=\\\"identity\\\"\\n maxlength=\\\"12\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"identity.dirty && identity.errors\\\">\\n <ng-container *ngIf=\\\"identity.hasError('required')\\\">\\n Campo obrigatório, por favor digite um documento de identidade.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item *ngIf=\\\"form.get('dateOfBirth') as dateOfBirth\\\">\\n <nz-form-label nzFor=\\\"dateOfBirth\\\"\\n >Data de nascimento<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"dateOfBirth\\\"\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n\\n <nz-form-explain *ngIf=\\\"dateOfBirth.dirty && dateOfBirth.errors\\\">\\n <ng-container *ngIf=\\\"dateOfBirth.hasError('required')\\\">\\n Campo obrigatório, por favor digite sua data de nascimento.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!dateOfBirth.hasError('required') && dateOfBirth.hasError('dateOfBirth')\\\"\\n >\\n Data inválida.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item *ngIf=\\\"form.get('sex') as sex\\\">\\n <nz-form-label nzFor=\\\"sex\\\">Sexo<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option value=\\\"M\\\">Masculino</option>\\n <option value=\\\"F\\\">Feminino</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"sex.dirty && sex.errors\\\">\\n <ng-container *ngIf=\\\"sex.hasError('required')\\\">\\n Campo obrigatório, por favor selecione o sexo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-12\\\" [formGroup]=\\\"form.get('membership')\\\">\\n <nz-form-item *ngIf=\\\"form.get('membership.mothersName') as mothersName\\\">\\n <nz-form-label nzFor=\\\"mothersName\\\"\\n >Nome da mãe<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"Digite o nome da mãe\\\"\\n formControlName=\\\"mothersName\\\"\\n id=\\\"mothersName\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"mothersName.dirty && mothersName.errors\\\">\\n <ng-container *ngIf=\\\"mothersName.hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome da mãe.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !mothersName.hasError('required') &&\\n mothersName.hasError('membership.mothersName')\\n \\\"\\n >\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-6\\\" [formGroup]=\\\"form.get('crf')\\\">\\n <nz-form-item *ngIf=\\\"form.get('crf.number') as crfNumber\\\">\\n <nz-form-label nzFor=\\\"crf-number\\\">CRF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"number\\\"\\n id=\\\"crf-number\\\"\\n nz-input\\n placeholder=\\\"Digite o CRF\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"crfNumber.dirty && crfNumber.errors\\\">\\n <ng-container *ngIf=\\\"crfNumber.hasError('required')\\\">\\n Por favor digite o número do CRF.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-6\\\" [formGroup]=\\\"form.get('crf')\\\">\\n <nz-form-item *ngIf=\\\"form.get('crf.uf') as crfUf\\\">\\n <nz-form-label>UF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"uf\\\" id=\\\"crf-uf\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option *ngFor=\\\"let state of states\\\" [value]=\\\"state?.sigla\\\">{{\\n state?.sigla\\n }}</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"crfUf.dirty && crfUf.errors\\\">\\n <ng-container *ngIf=\\\"crfUf.hasError('required')\\\">\\n Por favor selecione a UF.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n <div class=\\\"col-md-5\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-12\\\">\\n <nz-form-item *ngIf=\\\"form.get('cellphone') as cellphone\\\">\\n <nz-form-label nzFor=\\\"cellphone\\\"\\n >Telefone 1<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"(21) 92222-2222\\\"\\n formControlName=\\\"cellphone\\\"\\n id=\\\"cellphone\\\"\\n [mask]=\\\"cellphone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"cellphone.dirty && cellphone.errors\\\">\\n <ng-container *ngIf=\\\"cellphone.hasError('mandatoryContact')\\\">\\n É necessário preencher ao menos um número pessoal.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!cellphone.hasError('mandatoryContact') && cellphone.hasError('telefone')\\\"\\n >\\n Telefone inválido, por favor digite um número válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-12\\\">\\n <nz-form-item *ngIf=\\\"form.get('telephone') as telephone\\\">\\n <nz-form-label nzFor=\\\"telephone\\\">Telefone 2</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"telephone\\\"\\n formControlName=\\\"telephone\\\"\\n placeholder=\\\"(21) 2222-2222\\\"\\n [mask]=\\\"telephone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"telephone.dirty && telephone.errors\\\">\\n <ng-container *ngIf=\\\"telephone.hasError('mandatoryContact')\\\">\\n É necessário preencher ao menos um número pessoal.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!telephone.hasError('mandatoryContact') && telephone.hasError('telefone')\\\"\\n >\\n Telefone inválido, por favor digite um número válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-12\\\">\\n <nz-form-item *ngIf=\\\"form.get('email') as email\\\">\\n <nz-form-label nzFor=\\\"email\\\"\\n >E-mail de login<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"email\\\"\\n type=\\\"email\\\"\\n placeholder=\\\"usuário@email.com\\\"\\n formControlName=\\\"email\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"email.dirty && email.errors\\\">\\n <ng-container *ngIf=\\\"email.hasError('exists'); else required\\\">\\n E-mail já existe, por favor escolha outro e-mail.\\n </ng-container>\\n <ng-template #required>\\n <ng-container *ngIf=\\\"email.hasError('required') && email.dirty; else invalid\\\">\\n <span class=\\\"error\\\">Campo obrigatório, por favor digite seu e-mail.</span>\\n </ng-container>\\n </ng-template>\\n <ng-template #invalid>\\n <ng-container *ngIf=\\\"email.invalid && email.value\\\">\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span>\\n </ng-container>\\n </ng-template>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-12\\\">\\n <nz-form-item *ngIf=\\\"form.get('emailConfirmation') as emailConf\\\">\\n <nz-form-label nzFor=\\\"emailConfirmation\\\"\\n >Confirmação de e-mail<span class=\\\"mandatory\\\"> *</span>\\n </nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"emailConfirmation\\\"\\n onpaste=\\\"false\\\"\\n type=\\\"email\\\"\\n placeholder=\\\"usuário@email.com\\\"\\n formControlName=\\\"emailConfirmation\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"emailConf.dirty && emailConf.errors\\\" class=\\\"error\\\">\\n <ng-container\\n *ngIf=\\\"emailConf.hasError('required') || !emailConf.value; else notMatch\\\"\\n >\\n Campo obrigatório, por favor digite seu e-mail.\\n </ng-container>\\n\\n <ng-template #notMatch>\\n <ng-container *ngIf=\\\"emailConf.hasError('emailMatch'); else invalid\\\">\\n Os endereços de e-mail não correspondem\\n </ng-container>\\n </ng-template>\\n\\n <ng-template #invalid>\\n <ng-container *ngIf=\\\"emailConf.invalid && !emailConf.hasError('emailMatch')\\\">\\n E-mail inválido, por favor digite um e-mail válido.\\n </ng-container>\\n </ng-template>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-12\\\">\\n <nz-form-item *ngIf=\\\"form.get('emailContact') as emailContact\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-6\\\">\\n <nz-form-label nzFor=\\\"name\\\" style=\\\"margin-left:0px;\\\">\\n E-mail de contato<span class=\\\"mandatory\\\"> *</span>\\n </nz-form-label>\\n </div>\\n\\n <div class=\\\"col\\\">\\n <label\\n #repeatName\\n nz-checkbox\\n (nzCheckedChange)=\\\"checkRepeatEmail($event)\\\"\\n style=\\\"font-size: 13px;margin-right: -11px;\\\"\\n >Repetir e-mail de login</label\\n >\\n </div>\\n </div>\\n <nz-form-control nzHasFeedback>\\n <nz-input-group>\\n <input\\n id=\\\"emailContact\\\"\\n type=\\\"text\\\"\\n nz-input\\n formControlName=\\\"emailContact\\\"\\n placeholder=\\\"usuário@email.com\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-input-group>\\n <nz-form-explain *ngIf=\\\"emailContact.dirty && emailContact.errors\\\">\\n <ng-container *ngIf=\\\"emailContact.errors\\\">\\n E-mail inválido, por favor digite um e-mail válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n <nz-divider nzOrientation=\\\"left\\\" nzText=\\\"Endereço\\\"></nz-divider>\\n <div class=\\\"col-md-12\\\">\\n <div class=\\\"row\\\" [formGroup]=\\\"form.get('address')\\\">\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item *ngIf=\\\"form.get('address.cep') as cep\\\">\\n <nz-form-label nzFor=\\\"cep\\\">CEP<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n (keyup)=\\\"onKey($event)\\\"\\n mask=\\\"00.000-000\\\"\\n formControlName=\\\"cep\\\"\\n id=\\\"cep\\\"\\n nz-input\\n placeholder=\\\"22770-210\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"cep.dirty && cep.errors\\\">\\n <ng-container *ngIf=\\\"cep.hasError('required')\\\">\\n Campo obrigatório, por favor digite seu CEP.\\n </ng-container>\\n <ng-container *ngIf=\\\"!cep.hasError('required') && cep.hasError('address.cep')\\\">\\n CEP inválido, por favor digite um CEP válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item *ngIf=\\\"form.get('address.street') as street\\\">\\n <nz-form-label nzFor=\\\"logradouro\\\"\\n >Logradouro<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"street\\\"\\n formControlName=\\\"street\\\"\\n placeholder=\\\"Digite o logradouro\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"street.dirty && street.errors\\\">\\n <ng-container *ngIf=\\\"street.hasError('required')\\\">\\n Campo obrigatório, por favor digite o logradouro.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item *ngIf=\\\"form.get('address.number') as number\\\">\\n <nz-form-label nzFor=\\\"number\\\">Número<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"number\\\"\\n formControlName=\\\"number\\\"\\n placeholder=\\\"Digite o número\\\"\\n maxlength=\\\"10\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"number.dirty && number.errors\\\">\\n <ng-container *ngIf=\\\"number.hasError('required')\\\">\\n Campo obrigatório, por favor digite o número.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"complement\\\">Complemento</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"complement\\\"\\n id=\\\"complement\\\"\\n nz-input\\n placeholder=\\\"Digite o complemento\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item *ngIf=\\\"form.get('address.neighborhood') as neighborhood\\\">\\n <nz-form-label nzFor=\\\"neighborhood\\\"\\n >Bairro<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"neighborhood\\\"\\n id=\\\"neighborhood\\\"\\n nz-input\\n placeholder=\\\"Digite o bairro\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"neighborhood.dirty && neighborhood.errors\\\">\\n <ng-container *ngIf=\\\"neighborhood.hasError('required')\\\">\\n Campo obrigatório, por favor digite o bairro.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-4\\\">\\n <nz-form-item *ngIf=\\\"form.get('address.city') as city\\\">\\n <nz-form-label nzFor=\\\"city\\\">Cidade<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"city\\\"\\n id=\\\"city\\\"\\n nz-input\\n placeholder=\\\"Digite a cidade\\\"\\n maxlength=\\\"64\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"city.dirty && city.errors\\\">\\n <ng-container *ngIf=\\\"city.hasError('required')\\\">\\n Campo obrigatório, por favor digite a cidade.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-2\\\">\\n <nz-form-item *ngIf=\\\"form.get('address.uf') as uf\\\">\\n <nz-form-label nzFor=\\\"uf\\\">UF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"uf\\\" id=\\\"uf\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option *ngFor=\\\"let state of states\\\" [value]=\\\"state?.sigla\\\">{{\\n state?.sigla\\n }}</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"uf.dirty && uf.errors\\\">\\n <ng-container *ngIf=\\\"uf.hasError('required')\\\">\\n Campo obrigatório, por favor selecione o UF.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n </div>\\n </form>\\n </div>\\n <div class=\\\"modal-footer\\\">\\n <button class=\\\"ok-btn\\\" nz-button class=\\\"btn-default\\\" (click)=\\\"modalRef.hide()\\\">\\n Cancelar\\n </button>\\n <button class=\\\"ok-btn\\\" nz-button class=\\\"btn-primary\\\" (click)=\\\"submitForm()\\\">\\n Salvar <i class=\\\"fa\\\"></i>\\n </button>\\n </div>\\n</div>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \".modal-body {\\n padding: 40px;\\n}\\n.modal-body input {\\n border-radius: 10px;\\n}\\n.modal-body .btn-save {\\n float: right;\\n padding-top: 7px;\\n padding-bottom: 7px;\\n margin-top: 13px;\\n margin-bottom: 5px;\\n}\\n.modal-body i {\\n font-size: 24px;\\n}\\n.modal-body .mandatory {\\n color: red;\\n}\\n.modal-body .error {\\n color: red;\\n}\\n.modal-body input::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n::ng-deep .ant-select-selection {\\n height: 100%;\\n}\\n.modal-header {\\n background-color: #4cbca3;\\n margin: 0;\\n font-family: \\\"probold\\\";\\n}\\n.modal-footer {\\n margin: 0;\\n}\\n.date-picker {\\n background-color: red;\\n}\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n.mandatory {\\n color: red;\\n}\\n.scroll {\\n overflow-y: auto;\\n height: 620px;\\n overflow-x: hidden;\\n}\\n.container {\\n width: 90% !important;\\n}\";","export default \"<div class=\\\"modal-header\\\">\\n <h4 class=\\\"modal-title pull-left text-white\\\">Buscar farmacêutico</h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"modalRef.hide()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n</div>\\n<form (submit)=\\\"search(param.value)\\\">\\n <div class=\\\"modal-body\\\">\\n <p>Digite abaixo o CPF do farmacêutico.</p>\\n <input nz-input #param mask=\\\"000.000.000-00\\\" theme />\\n <label>\\n <i class=\\\"fa fa-arrow-right\\\" (click)=\\\"search(param.value)\\\"></i>\\n </label>\\n </div>\\n</form>\\n\";","import { Injectable } from '@angular/core';\nimport { CoreModule } from '@app/core';\nimport { isValid } from '@fnando/cpf';\n\n@Injectable({\n providedIn: CoreModule\n})\nexport class ValidationUtil {\n constructor() {}\n\n static isValidCpf(cpf: string): boolean {\n return isValid(cpf);\n }\n}\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ValidationUtil } from '@app/core/services/validation.util';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\nimport { PharmacistService } from '@app/modules/pharmacist/services/pharmacist.service';\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\n\nimport { CpfCnpjApiErrors } from '@app/shared/models/cpf-cnpj-api-errors.enum';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { BigboostService } from '@app/shared/services/bigboost.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-modal-search',\n templateUrl: './modal-search.component.html',\n styleUrls: ['./modal-search.component.scss']\n})\nexport class ModalSearchComponent implements OnInit {\n constructor(\n private router: Router,\n public modalRef: BsModalRef,\n private notification: AppToastService,\n private pharmacistService: PharmacistService,\n private pharmacyService: PharmacyService,\n private bigboostService: BigboostService\n ) {}\n\n pharmacists = [];\n pharmacy: any;\n\n @Output() openModalAddPharmacistEvent = new EventEmitter<any>();\n @Output() updateListPatientEvent = new EventEmitter<string>();\n @Output() loadingSpinnerEvent = new EventEmitter<boolean>();\n\n ngOnInit() {}\n\n @nativeAsync\n async search(cpf: string) {\n cpf = cpf.replace(/\\D+/g, '');\n try {\n if (ValidationUtil.isValidCpf(cpf)) {\n this.loadingSpinnerEvent.emit(true);\n if (await this.hasPharmacist(cpf)) {\n this.modalRef.hide();\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'O farmacêutico informado já existe na sua lista de farmacêuticos'\n );\n } else {\n const pharmacist = await this.pharmacistService.getPharmacyByCpf(cpf).toPromise();\n\n if (pharmacist) {\n await this.addPharmacist(pharmacist._id);\n this.updateListPatientEvent.emit(null);\n } else {\n const consult = await this.consultCpf(cpf);\n if (consult !== null && consult !== undefined) {\n this.openModalAddPharmacistEvent.emit(consult);\n }\n }\n this.modalRef.hide();\n }\n } else {\n this.notification.notify('warning', 'Aviso', 'CPF inválido');\n }\n } catch (error) {\n this.loadingSpinnerEvent.emit(false);\n }\n }\n @nativeAsync\n async addPharmacist(pharmacistId: string) {\n await this.pharmacyService.addPharmacist(this.pharmacy._id, pharmacistId).toPromise();\n }\n @nativeAsync\n async consultCpf(cpf: string) {\n try {\n this.loadingSpinnerEvent.emit(true);\n const consult = await this.bigboostService.consultCpf(cpf).toPromise();\n\n this.loadingSpinnerEvent.emit(false);\n if (consult.status === 1) {\n return consult;\n }\n if (consult.status === -1 || consult.erroCodigo >= 1000) {\n consult.erro =\n 'A importação de dados do CPF está com instabilidade, preencha manualmente ou tente novamente mais tarde.';\n return consult;\n }\n if (consult.status === 0 && consult.erroCodigo && consult.erroCodigo < 1000) {\n if (Object.values(CpfCnpjApiErrors).includes(consult.erroCodigo)) {\n this.notification.notify('warning', 'Aviso', consult.erro);\n return null;\n }\n }\n return null;\n } catch (error) {\n this.loadingSpinnerEvent.emit(false);\n }\n }\n @nativeAsync\n async hasPharmacist(cpf: string) {\n const result = await this.pharmacistService\n .getPharmacistsByPharmacyId(this.pharmacy._id, { cpf })\n .toPromise();\n return result.pharmacists.length > 0;\n }\n}\n","export default \".modal-header {\\n background-color: #4cbca3;\\n width: 500px;\\n font-family: \\\"probold\\\";\\n}\\n\\n.modal-body {\\n width: 100%;\\n margin-top: 10px;\\n padding: 0px;\\n display: flex;\\n align-items: center;\\n flex-direction: column;\\n justify-content: center;\\n}\\n\\n.modal-body input {\\n width: 265px;\\n height: 35px;\\n}\\n\\n.modal-body label {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n position: relative;\\n z-index: 1;\\n right: -118px;\\n top: -28px;\\n font-size: 15px;\\n margin: 0px;\\n width: 30px;\\n}\\n\\n.modal-body label i {\\n cursor: pointer;\\n}\\n\\np {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n text-align: center;\\n}\";","export default \"<app-alternative-navbar title=\\\"Farmacêuticos\\\" titleIcon=\\\"fas fa-history\\\"></app-alternative-navbar>\\n<app-sidebar-menu></app-sidebar-menu>\\n\\n<div class=\\\"container\\\">\\n <div>\\n <br />\\n <h2 class=\\\"title\\\">\\n Histórico de Farmacêuticos\\n </h2>\\n <br />\\n </div>\\n\\n <div>\\n <form nz-form>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"createdAt\\\">Data de criação:</nz-form-label>\\n <nz-form-control>\\n <input\\n nz-input\\n type=\\\"date\\\"\\n placeholder=\\\"Data de criação\\\"\\n [(ngModel)]=\\\"filter.createdAt\\\"\\n name=\\\"createdAt\\\"\\n theme\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"patient\\\">Nome:</nz-form-label>\\n <nz-form-control>\\n <input nz-input type=\\\"text\\\" [(ngModel)]=\\\"filter.name\\\" name=\\\"name\\\" theme />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-sm-2\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cpf\\\">CPF:</nz-form-label>\\n <nz-form-control>\\n <input\\n nz-input\\n type=\\\"text\\\"\\n placeholder=\\\"ex: 000.000.000-00\\\"\\n mask=\\\"000.000.000-00\\\"\\n [(ngModel)]=\\\"filter.cpf\\\"\\n name=\\\"cpf\\\"\\n theme\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-sm-3 buttons\\\" style=\\\"padding-top: 29px\\\">\\n <button nz-button type=\\\"button\\\" nzType=\\\"primary\\\" (click)=\\\"filterData()\\\">\\n <i nz-icon nzType=\\\"search\\\"></i>\\n Buscar\\n </button>\\n <button nz-button type=\\\"button\\\" nzType=\\\"primary\\\" (click)=\\\"showModalSearch()\\\">\\n <i nz-icon nzType=\\\"plus\\\"> </i>\\n Novo farmacêutico\\n </button>\\n </div>\\n </div>\\n </form>\\n </div>\\n\\n <div class=\\\"table\\\">\\n <nz-table\\n #nzTable\\n [nzData]=\\\"data?.pharmacists\\\"\\n [nzLoading]=\\\"loading\\\"\\n nzFrontPagination=\\\"false\\\"\\n [nzTotal]=\\\"data?.totalRecord\\\"\\n [nzPageSize]=\\\"pageSize\\\"\\n (nzPageIndexChange)=\\\"pageIndexChanged($event)\\\"\\n >\\n <thead (nzSortChange)=\\\"onSortChange($event)\\\">\\n <tr>\\n <th nzShowSort nzSortKey=\\\"createdAt\\\">Data de criação</th>\\n <th>Nome do farmacêutico</th>\\n <th>CPF do farmacêutico</th>\\n <th>E-mail</th>\\n <th></th>\\n </tr>\\n </thead>\\n <tbody>\\n <tr *ngFor=\\\"let pharmacist of nzTable.data\\\">\\n <td>{{ pharmacist.createdAt | date: 'dd/MM/yyyy, HH:mm' }}</td>\\n <td>{{ pharmacist.name }}</td>\\n <td>{{ pharmacist.cpf }}</td>\\n <td>{{ pharmacist.user.email }}</td>\\n <td class=\\\"actions-btn\\\">\\n <a title=\\\"Desvincular farmacêutico\\\" (click)=\\\"showModalRemovePharmacist(pharmacist._id)\\\">\\n <i class=\\\"fa fa-trash-solid\\\"></i>\\n </a>\\n </td>\\n </tr>\\n </tbody>\\n </nz-table>\\n </div>\\n</div>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { ModalAddPharmacistComponent } from '@app/modules/pharmacist/modal-add-pharmacist/modal-add-pharmacist.component';\nimport { ModalSearchComponent } from '@app/modules/pharmacist/modal-search/modal-search.component';\nimport { PharmacistService } from '@app/modules/pharmacist/services/pharmacist.service';\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { Pharmacy } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { NzModalService } from 'ng-zorro-antd/modal';\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'app-pharmacist-list',\n templateUrl: './pharmacist-list.component.html',\n styleUrls: ['./pharmacist-list.component.scss']\n})\nexport class PharmacistListComponent implements OnInit {\n loading: boolean;\n filter = { createdAt: '', name: '', cpf: '', email: '' };\n pageSize = 7;\n paginationData = { skip: 0, totalRecord: 0, orderBy: 'createdAt', sortOrder: -1 };\n scrollConfig = { x: '830px', y: '583px' };\n\n pharmacy: Pharmacy;\n data: any;\n\n constructor(\n private router: Router,\n private pharmacistService: PharmacistService,\n private pharmacyService: PharmacyService,\n private authService: AuthService,\n private modalService: BsModalService,\n private nzModalService: NzModalService\n ) {}\n\n @nativeAsync\n async ngOnInit() {\n await this.getUserData();\n await this.getPharmacists();\n }\n\n @nativeAsync\n async getUserData() {\n this.loading = true;\n this.pharmacy = await this.pharmacyService.getPharmacyByUserId(this.user._id).toPromise();\n this.loading = false;\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n @nativeAsync\n async pageIndexChanged(pageIndex: any) {\n this.paginationData.skip = this.pageSize * (pageIndex - 1);\n await this.getPharmacists();\n }\n\n @nativeAsync\n async onSortChange(params) {\n this.paginationData.orderBy = params.key;\n this.paginationData.sortOrder = params.value === 'descend' ? -1 : 1;\n await this.getPharmacists();\n }\n\n showModalSearch() {\n const initialState = {\n pharmacists: this.data.pharmacists,\n userType: this.user.userType,\n pharmacy: this.pharmacy\n };\n const modal = this.modalService.show(ModalSearchComponent, {\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n modal.content.updateListPatientEvent.subscribe(cpf => {\n this.paginationData.skip = 0;\n this.getPharmacists();\n });\n modal.content.openModalAddPharmacistEvent.subscribe(consult => this.showModalAddPharmacist(consult));\n modal.content.loadingSpinnerEvent.subscribe(loading => (this.loading = loading));\n }\n\n showModalAddPharmacist(consultedPatient) {\n const initialState = {\n pharmacy: this.pharmacy,\n consultedPatient\n };\n const modal = this.modalService.show(ModalAddPharmacistComponent, {\n class: 'modal-lg',\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n modal.content.updateListPharmacistEvent.subscribe(cpf => {\n this.paginationData.skip = 0;\n this.getPharmacists();\n });\n }\n @nativeAsync\n async showModalRemovePharmacist(pharmacistId) {\n this.nzModalService.confirm({\n nzTitle: 'Alerta',\n nzContent: 'Tem certeza que deseja remover este farmacêutico da sua lista',\n nzOnOk: async () => {\n await this.pharmacyService.removePharmacist(this.pharmacy._id, pharmacistId).toPromise();\n this.paginationData.skip = 0;\n this.getPharmacists();\n }\n });\n }\n\n filterData() {\n this.filter.cpf = this.filter.cpf === undefined ? '' : this.filter.cpf.replace(/[^0-9]+/gi, '');\n this.paginationData.skip = 0;\n this.getPharmacists();\n }\n\n getFilter() {\n return {\n ...this.filter,\n skip: this.paginationData.skip,\n limit: this.pageSize,\n orderBy: this.paginationData.orderBy,\n sortOrder: this.paginationData.sortOrder\n };\n }\n @nativeAsync\n async getPharmacists() {\n try {\n this.loading = true;\n this.data = await this.pharmacistService\n .getPharmacistsByPharmacyId(this.pharmacy._id, this.getFilter())\n .toPromise();\n this.loading = false;\n } catch (error) {\n this.loading = false;\n }\n }\n\n navigateToNew() {\n this.router.navigate(['pharmacist/new']);\n }\n}\n","export default \".buttons {\\n display: flex;\\n flex-direction: row;\\n}\\n.buttons button {\\n margin-left: 5px;\\n}\\n.table {\\n padding-top: 20px;\\n}\";","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PharmacyGuard implements CanActivate {\n constructor(private authService: AuthService) {}\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n return this.authService.user().userType === 'pharmacy';\n }\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { PharmacistListComponent } from './pharmacist-list/pharmacist-list.component';\nimport { PharmacyGuard } from '@app/modules/pharmacy/pharmacy.guard';\n\nconst routes: Routes = [\n {\n path: 'list',\n component: PharmacistListComponent,\n canActivate: [PharmacyGuard]\n },\n\n { path: '',\n redirectTo: 'list' }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n\n exports: [RouterModule]\n})\nexport class PharmacistRoutingModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedModule } from '@app/shared';\nimport { ModalModule } from 'ngx-bootstrap/modal';\nimport { NgxLoadingModule } from 'ngx-loading';\nimport { NgxMaskModule } from 'ngx-mask';\nimport { ModalAddPharmacistComponent } from './modal-add-pharmacist/modal-add-pharmacist.component';\nimport { ModalSearchComponent } from './modal-search/modal-search.component';\nimport { PharmacistListComponent } from './pharmacist-list/pharmacist-list.component';\nimport { PharmacistRoutingModule } from './pharmacist-routing.module';\n\n@NgModule({\n declarations: [PharmacistListComponent, ModalSearchComponent, ModalAddPharmacistComponent],\n imports: [\n SharedModule,\n PharmacistRoutingModule,\n CommonModule,\n NgxMaskModule.forRoot(),\n NgxLoadingModule.forRoot({}),\n ModalModule.forRoot()\n ]\n})\nexport class PharmacistModule {}\n"]}