{"version":3,"sources":["webpack:///src/app/modules/public-pharmacy/models/query-request.ts","webpack:///src/app/modules/public-pharmacy/components/pharmacy-filter/pharmacy-filter.component.ts","webpack:///src/app/modules/public-pharmacy/components/pharmacy-filter/pharmacy-filter.component.html","webpack:///src/app/modules/public-pharmacy/pages/pharmacy-list/pharmacy-list.component.html","webpack:///src/app/modules/public-pharmacy/services/pharmacy.service.ts","webpack:///src/app/modules/public-pharmacy/pages/pharmacy-list/pharmacy-list.component.ts","webpack:///src/app/modules/public-pharmacy/pages/pharmacy-list/pharmacy-list.component.scss","webpack:///src/app/modules/public-pharmacy/public-pharmacy-routing.module.ts","webpack:///src/app/modules/public-pharmacy/public-pharmacy.module.ts"],"names":["QueryRequest","fantasyName","uf","city","neighborhood","page","limit","this","onClickFilter","states","event","preventDefault","document","getElementById","click","filtro","emit","selector","template","API_URL","apiRoot","http","query","params","Object","keys","forEach","k","set","String","trim","get","providedIn","pharmacyService","paginationData","filter","searchPharmacies","data$","search","getFilter","pageIndex","address","isEmpty","cep","routes","path","component","PublicPharmacyRoutingModule","imports","forChild","exports","PublicPharmacyModule","declarations"],"mappings":"oOAAO,MAAMA,EACX,YACSC,EACAC,EACAC,EACAC,EACAC,EACAC,GALA,KAAAL,cACA,KAAAC,KACA,KAAAC,OACA,KAAAC,eACA,KAAAC,OACA,KAAAC,QAEPC,KAAKF,KAAO,EACZE,KAAKD,MAAQ,G,ICOJ,EAAuB,M,cAGxB,KAAAE,cAAgB,IAAI,IAI9B,KAAAC,OAAwB,IAGxB,iBAAiBC,GACfA,EAAMC,iBACSC,SAASC,eAAe,mBAChCC,QAGT,WACEP,KAAKQ,OAAS,IAAIf,EAGpB,SACEO,KAAKQ,OAAOV,KAAO,EACnBE,KAAKC,cAAcQ,KAAKT,KAAKQ,QAG/B,QACER,KAAKQ,OAAS,IAAIf,EAClBO,KAAKC,cAAcQ,KAAKT,KAAKQ,U,uCAxB9B,M,qBAEA,KAAS,MAAC,qB,wBAIV,IAAY,MAAC,yBAA0B,CAAC,cAT9B,EAAuB,aAJnC,YAAU,CACTE,SAAU,sBACVC,SCfa,kqDDiBF,GEjBE,I,YCMf,MAAMC,EAAU,G,UAAG,EAAYC,kB,IAKlB,EAAe,MAC1B,YAAoBC,GAAA,KAAAA,OAEpB,OAAOC,GACL,IAAIC,EAAS,IAAI,IAQjB,OANAC,OAAOC,KAAKH,GAAOI,QAAQC,IACrBL,EAAMK,KACRJ,EAASA,EAAOK,IAAID,EAAGE,OAAOP,EAAMK,IAAIG,WAIrCvB,KAAKc,KAAKU,IAAS,GAAGZ,WAAkB,CAAEI,a,4BAvB5C,MAWI,EAAe,aAH3B,YAAW,CACVS,WAAY,S,iCAGc,OADf,G,6BCCA,EAAqB,MAKhC,YAAoBC,GAAA,KAAAA,kBAHpB,KAAAC,eAAiB,CAAE7B,KAAM,EAAGC,MAAO,GAKnC,WACEC,KAAK4B,OAAS,IAAInC,EAClBO,KAAK6B,iBAAiB7B,KAAK4B,QAG7B,SAASA,GACP5B,KAAK2B,eAAiB,CAAE7B,KAAM,EAAGC,MAAO,GACxCC,KAAK6B,iBAAiBD,GAGxB,iBAAiBA,GACf5B,KAAK4B,OAASA,EACd5B,KAAK8B,MAAQ9B,KAAK0B,gBAAgBK,OAAO/B,KAAKgC,aAGhD,iBAAiBC,GACfjC,KAAK2B,eAAe7B,KAAOmC,EAC3BjC,KAAK6B,iBAAiB7B,KAAK4B,QAG7B,YACE,MAAO,IACF5B,KAAK4B,OACR9B,KAAME,KAAK2B,eAAe7B,KAC1BC,MAAOC,KAAK2B,eAAe5B,OAI/B,WAAWmC,GACT,QAAKA,KAKF,IAAEC,QAAQD,EAAQE,MAClB,IAAED,QAAQD,EAAQtC,OAClB,IAAEuC,QAAQD,EAAQrC,eAClB,IAAEsC,QAAQD,EAAQvC,O,4BArDhB,IASI,EAAqB,aALjC,YAAU,CACTe,SAAU,oBACVC,SFTa,g6F,QGAA,8H,iCDiBwB,KAL1B,G,gBERb,MAAM0B,EAAiB,CAAC,CAAEC,KAAM,GAAIC,UAAW,I,IAMlCC,EAA2B,QAA3BA,EAA2B,aAJvC,YAAS,CACRC,QAAS,CAAC,IAAaC,SAASL,IAChCM,QAAS,CAAC,QAECH,G,ICIAI,EAAoB,QAApBA,EAAoB,aAJhC,YAAS,CACRC,aAAc,CAAC,EAAuB,GACtCJ,QAAS,CAAC,IAAcD,EAA6B,IAAc,QAExDI","file":"x","sourcesContent":["export class QueryRequest {\n  constructor(\n    public fantasyName?: string,\n    public uf?: string,\n    public city?: string,\n    public neighborhood?: string,\n    public page?: number,\n    public limit?: number\n  ) {\n    this.page = 1;\n    this.limit = 7;\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { BrazilState } from '@app/shared/models';\nimport { QueryRequest } from '../../models/query-request';\n\n@Component({\n  selector: 'app-pharmacy-filter',\n  templateUrl: './pharmacy-filter.component.html'\n})\nexport class PharmacyFilterComponent implements OnInit {\n  filtro: QueryRequest;\n\n  @Output() onClickFilter = new EventEmitter<QueryRequest>();\n\n  @ViewChild('buttonPesquisar') defaultButton: ElementRef;\n\n  states: BrazilState[] = BrazilianStates;\n\n  @HostListener('document:keydown.enter', ['$event'])\n  onKeydownHandler(event: KeyboardEvent) {\n    event.preventDefault();\n    const button = document.getElementById('buttonPesquisar') as HTMLButtonElement;\n    button.click();\n  }\n\n  ngOnInit(): void {\n    this.filtro = new QueryRequest();\n  }\n\n  search() {\n    this.filtro.page = 1;\n    this.onClickFilter.emit(this.filtro);\n  }\n\n  clear() {\n    this.filtro = new QueryRequest();\n    this.onClickFilter.emit(this.filtro);\n  }\n}\n","export default \"<div\\n  class=\\\"row mt-3 mb-3 align-items-end\\\"\\n  theme\\n  *ngIf=\\\"filtro\\\"\\n  style=\\\"max-width: 1500px; margin: 0 auto;\\\"\\n>\\n  <div class=\\\"col-md-4\\\">\\n    <nz-form-item>\\n      <nz-form-label nzFor=\\\"nome\\\">Nome </nz-form-label>\\n      <input nz-input type=\\\"text\\\" name=\\\"nome\\\" [(ngModel)]=\\\"filtro.fantasyName\\\" />\\n    </nz-form-item>\\n  </div>\\n  <div class=\\\"col-md-1\\\">\\n    <nz-form-item style=\\\"margin-top: -1px;\\\">\\n      <nz-form-label nzFor=\\\"uf\\\" style=\\\"display: block; float: left;\\\">UF</nz-form-label>\\n      <nz-select name=\\\"uf\\\" style=\\\"width: 100%;\\\" [(ngModel)]=\\\"filtro.uf\\\" [nzAllowClear]=\\\"true\\\">\\n        <nz-option\\n          [nzValue]=\\\"state.sigla\\\"\\n          [nzLabel]=\\\"state.sigla\\\"\\n          *ngFor=\\\"let state of states\\\"\\n        ></nz-option>\\n      </nz-select>\\n    </nz-form-item>\\n  </div>\\n  <div class=\\\"col-md-2\\\">\\n    <nz-form-item>\\n      <nz-form-label nzFor=\\\"nome\\\">Cidade</nz-form-label>\\n      <input nz-input type=\\\"text\\\" name=\\\"cidade\\\" [(ngModel)]=\\\"filtro.city\\\" />\\n    </nz-form-item>\\n  </div>\\n  <div class=\\\"col-md-2\\\">\\n    <nz-form-item>\\n      <nz-form-label nzFor=\\\"nome\\\">Bairro</nz-form-label>\\n      <input nz-input type=\\\"text\\\" name=\\\"bairro\\\" [(ngModel)]=\\\"filtro.neighborhood\\\" />\\n    </nz-form-item>\\n  </div>\\n  <div class=\\\"col-md-3\\\">\\n    <nz-form-item>\\n      <nz-form-control>\\n        <button nz-button type=\\\"button\\\" nzType=\\\"primary\\\" (click)=\\\"search()\\\" id=\\\"buttonPesquisar\\\">\\n          <i nz-icon nzType=\\\"search\\\"></i>\\n          Buscar\\n        </button>\\n\\n        <button nz-button type=\\\"button\\\" nzType=\\\"default\\\" (click)=\\\"clear()\\\" style=\\\"margin-left: 8px;\\\">\\n          Limpar\\n        </button>\\n      </nz-form-control>\\n    </nz-form-item>\\n  </div>\\n</div>\\n\";","export default \"<header\\n  style=\\\"height: 80px; padding: 8px; display: flex; align-items: center; justify-content: center; background-color: #66CC9A;\\\"\\n>\\n  <img\\n    src=\\\"assets/icons/location-dot-solid.svg\\\"\\n    alt=\\\"Icone de localização\\\"\\n    height=\\\"40\\\"\\n    width=\\\"40\\\"\\n    style=\\\"margin-right: 1rem;\\\"\\n  />\\n  <h3>\\n    Encontre a farmácia cadastrada na Receita Digital mais perto de você!\\n  </h3>\\n</header>\\n\\n<div *ngIf=\\\"filter\\\">\\n  <app-pharmacy-filter (onClickFilter)=\\\"onSearch($event)\\\"></app-pharmacy-filter>\\n  <hr />\\n  <div style=\\\"overflow: auto; height: calc(100vh - 292px)\\\">\\n    <div style=\\\"max-width: 1500px; margin: 0 auto;\\\" *ngIf=\\\"data$ | withLoading | async as dataValue\\\">\\n      <div *ngIf=\\\"dataValue.value as data\\\">\\n        <ng-template [ngIf]=\\\"data.pharmacies.length > 0\\\">\\n          <nz-table\\n            #listingTable\\n            nzFrontPagination=\\\"false\\\"\\n            [nzTotal]=\\\"data?.totalDocs\\\"\\n            [nzData]=\\\"data?.pharmacies\\\"\\n            [nzPageIndex]=\\\"paginationData.page\\\"\\n            [nzPageSize]=\\\"paginationData.limit\\\"\\n            nzSize=\\\"default\\\"\\n            (nzPageIndexChange)=\\\"pageIndexChanged($event)\\\"\\n            style=\\\"overflow-x: auto;\\\"\\n          >\\n            <thead>\\n              <tr>\\n                <th>Nome</th>\\n                <th>Endereço</th>\\n                <th>Telefone</th>\\n              </tr>\\n            </thead>\\n            <tbody>\\n              <ng-template ngFor let-pharmacy let-i=\\\"index\\\" [ngForOf]=\\\"listingTable.data\\\">\\n                <tr>\\n                  <td>{{ pharmacy.fantasyName }}</td>\\n                  <td style=\\\"font-weight: 800\\\" *ngIf=\\\"hasAddress(pharmacy?.address); else templateEmpty\\\">\\n                    <div>\\n                      {{ pharmacy?.address?.street }} {{ pharmacy?.address?.number }}\\n                      {{ pharmacy?.address?.complement }}, {{ pharmacy?.address?.neighborhood }}\\n                    </div>\\n                    <div>\\n                      {{ pharmacy?.address?.city }}, {{ pharmacy?.address?.uf }} - CEP:\\n                      {{ pharmacy?.address?.cep | formattedCep }}\\n                    </div>\\n                  </td>\\n                  <ng-template #templateEmpty>\\n                    <td style=\\\"font-weight: 800; color: rgba(255, 0, 0, 0.336);\\\">\\n                      <span>Não possui endereço cadastrado!</span>\\n                    </td>\\n                  </ng-template>\\n                  <td>{{ pharmacy.telephone | formattedTel }}</td>\\n                </tr>\\n              </ng-template>\\n            </tbody>\\n          </nz-table>\\n        </ng-template>\\n        <ng-template [ngIf]=\\\"data.pharmacies.length === 0\\\">\\n          <div class=\\\"align-center\\\">\\n            <h3>Não existe farmacias cadastradas</h3>\\n          </div>\\n        </ng-template>\\n      </div>\\n      <ngx-loading [show]=\\\"dataValue.loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n    </div>\\n  </div>\\n</div>\\n\";","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\nimport { QueryRequest } from '../models/query-request';\n\nconst API_URL = `${environment.apiRoot}pharmacy`;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PharmacyService {\n  constructor(private http: HttpClient) {}\n\n  search(query: QueryRequest): Observable<any> {\n    let params = new HttpParams();\n\n    Object.keys(query).forEach(k => {\n      if (query[k]) {\n        params = params.set(k, String(query[k]).trim());\n      }\n    });\n\n    return this.http.get<any>(`${API_URL}/search`, { params });\n  }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { QueryRequest } from '../../models/query-request';\nimport { PharmacyService } from '../../services/pharmacy.service';\nimport { Address } from '@app/shared/models';\nimport _ from 'lodash';\n\n@Component({\n  selector: 'app-pharmacy-list',\n  templateUrl: './pharmacy-list.component.html',\n  styleUrls: ['./pharmacy-list.component.scss']\n})\nexport class PharmacyListComponent implements OnInit {\n  filter: QueryRequest;\n  paginationData = { page: 1, limit: 7 };\n  data$: Observable<any[]>;\n\n  constructor(private pharmacyService: PharmacyService) {}\n\n  ngOnInit(): void {\n    this.filter = new QueryRequest();\n    this.searchPharmacies(this.filter);\n  }\n\n  onSearch(filter: QueryRequest) {\n    this.paginationData = { page: 1, limit: 7 };\n    this.searchPharmacies(filter);\n  }\n\n  searchPharmacies(filter: QueryRequest) {\n    this.filter = filter;\n    this.data$ = this.pharmacyService.search(this.getFilter());\n  }\n\n  pageIndexChanged(pageIndex: any) {\n    this.paginationData.page = pageIndex;\n    this.searchPharmacies(this.filter);\n  }\n\n  getFilter() {\n    return {\n      ...this.filter,\n      page: this.paginationData.page,\n      limit: this.paginationData.limit\n    };\n  }\n\n  hasAddress(address: Address) {\n    if (!address) {\n      return false;\n    }\n\n    return (\n      !_.isEmpty(address.cep) ||\n      !_.isEmpty(address.city) ||\n      !_.isEmpty(address.neighborhood) ||\n      !_.isEmpty(address.uf)\n    );\n  }\n}\n","export default \".align-center {\\n  display: flex;\\n  height: calc(100vh - 292px);\\n  align-items: center;\\n  justify-content: center;\\n}\";","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { PharmacyListComponent } from './pages/pharmacy-list/pharmacy-list.component';\n\nconst routes: Routes = [{ path: '', component: PharmacyListComponent }];\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule]\n})\nexport class PublicPharmacyRoutingModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { SharedModule } from '@app/shared';\nimport { PipesModule } from '@app/shared/pipes';\nimport { PharmacyFilterComponent } from './components/pharmacy-filter/pharmacy-filter.component';\nimport { PharmacyListComponent } from './pages/pharmacy-list/pharmacy-list.component';\nimport { PublicPharmacyRoutingModule } from './public-pharmacy-routing.module';\nimport { NzIconModule } from 'ng-zorro-antd';\n\n@NgModule({\n  declarations: [PharmacyListComponent, PharmacyFilterComponent],\n  imports: [CommonModule, PublicPharmacyRoutingModule, SharedModule, PipesModule]\n})\nexport class PublicPharmacyModule {}\n"]}