{"version":3,"file":"ngx-core-business-http.mjs","sources":["../../../projects/ngx-core-business/http/src/http-collection.service.ts","../../../projects/ngx-core-business/http/src/base-rest-service.ts","../../../projects/ngx-core-business/http/src/public_api.ts","../../../projects/ngx-core-business/http/src/ngx-core-business-http.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CollectionQueryParams } from './collection-query-params';\r\nimport { QueryFilter } from './query-filter';\r\nimport { QuerySorter } from './query-sorter';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class HttpCollectionService {\r\n  private pageParam   = 'page';\r\n  private limitParam  = 'limit';\r\n  private queryParam  = 'query';\r\n  private sortParam   = 'sort';\r\n  private filterParam = 'filter';\r\n  private fieldsParam = '$fields';\r\n  constructor(private http: HttpClient) { }\r\n  /**\r\n   * Realiza una petición GET\r\n   */\r\n  get<T>(\r\n    url: string,\r\n    options: CollectionQueryParams = {\r\n      page: 1,\r\n      limit: 25,\r\n    }\r\n  ): Observable<T> {\r\n    const me = this;\r\n    const queryParams = [];\r\n    if (options.page) {\r\n      queryParams.push(`${me.pageParam}=${options.page}`);\r\n    }\r\n    if (options.limit) {\r\n      queryParams.push(`${me.limitParam}=${options.limit}`);\r\n    }\r\n    if (options.query) {\r\n      queryParams.push(`${me.queryParam}=${options.query}`);\r\n    }\r\n    if (options.sorters) {\r\n      queryParams.push(\r\n        `${me.sortParam}=${me.encodeSorters(options.sorters)}`\r\n      );\r\n    }\r\n    if (options.filters) {\r\n      queryParams.push(\r\n        `${me.filterParam}=${me.encodeFilters(options.filters)}`\r\n      );\r\n    }\r\n    if (options.fields) {\r\n      queryParams.push(`${me.fieldsParam}=${options.fields}`);\r\n    }\r\n    url = me.urlAppend(url, queryParams.join('&'));\r\n    return me.http.get<T>(url);\r\n  }\r\n\r\n  private urlAppend(url: string, str: string) {\r\n    if (str) {\r\n      return url + (url.indexOf('?') == -1 ? '?' : '&') + str;\r\n    }\r\n    return url;\r\n  }\r\n\r\n  private encodeSorters(sorters: QuerySorter[]) {\r\n    return encodeURI(JSON.stringify(sorters));\r\n  }\r\n\r\n  private encodeFilters(filters: QueryFilter[]) {\r\n    return encodeURI(\r\n      JSON.stringify(\r\n        filters.map((filter) => {\r\n          return {\r\n            type: filter.type,\r\n            field: filter.field,\r\n            operator: filter.operator,\r\n            value: filter.value,\r\n          };\r\n        })\r\n      )\r\n    );\r\n  }\r\n\r\n}\r\n","import { Injector, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Router } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { HttpCollectionService } from './http-collection.service';\r\nimport { CollectionResponse } from './collection-response';\r\nimport { CollectionQueryParams } from './collection-query-params';\r\n\r\n@Injectable()\r\nexport abstract class BaseRestService {\r\n\r\n  protected apiUrl: string | undefined;\r\n  /**\r\n   * Collection Path\r\n   *\r\n   * Ruta relativa de la lista de recursos.\r\n   *\r\n   * Ejemplo: api/users\r\n   *\r\n   */\r\n  protected collectionPath!: string;\r\n  protected collectionUrl: string = '';\r\n  /**\r\n   * Usa estrictamene la url señalada.\r\n   */\r\n  strictApiUrl: string = '';\r\n\r\n  protected http: HttpClient;\r\n  protected httpList: HttpCollectionService;\r\n  protected router: Router;\r\n  constructor(injector: Injector) {\r\n    this.http = injector.get(HttpClient);\r\n    this.router = injector.get(Router);\r\n    this.httpList = injector.get(HttpCollectionService);\r\n  }\r\n\r\n  abstract getApiUrl(): string;\r\n\r\n  protected getCollectionUrl() {\r\n    const me = this;\r\n    return (\r\n      me.collectionUrl ||\r\n      (me.collectionUrl = `${me.getApiUrl()}/${me.collectionPath}`)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * GET List\r\n   */\r\n  list<T>(options?: CollectionQueryParams): Observable<CollectionResponse<T[]>> {\r\n    return this.httpList.get(this.getCollectionUrl(), options);\r\n  }\r\n\r\n  /**\r\n   * GET\r\n   * @param id The resource ID\r\n   */\r\n  get(id: number | string): Observable<any> {\r\n    const me = this;\r\n\r\n    return me.http\r\n      .get<any>(`${me.getCollectionUrl()}/${id}`)\r\n      .pipe(map((res) => res.data));\r\n  }\r\n\r\n  /**\r\n   * POST\r\n   */\r\n  create<T>(model: T): Observable<T> {\r\n    const me = this;\r\n    return me.http\r\n      .post<CollectionResponse<T>>(`${me.getCollectionUrl()}`, model)\r\n      .pipe(map((res) => res.data));\r\n  }\r\n\r\n  /**\r\n   * PUT\r\n   */\r\n  update<T>(model: any, id?: string | number): Observable<T> {\r\n    const me = this;\r\n    return me.http\r\n      .put<CollectionResponse<T>>(`${me.getCollectionUrl()}/${id || model.id}`, model)\r\n      .pipe(map((res) => res.data));\r\n  }\r\n\r\n  save<T>(model: any, id?: string | number) {\r\n    return id || model.id ? this.update<T>(model, id) : this.create<T>(model);\r\n  }\r\n\r\n  /**\r\n   * DELETE\r\n   */\r\n  delete(id: number | string) {\r\n    const me = this;\r\n    return me.http.delete(`${me.getCollectionUrl()}/${id}`);\r\n  }\r\n\r\n  buildUrl(segments: any[], baseUrl: string = this.getCollectionUrl()) {\r\n    return baseUrl + this.router.createUrlTree(segments).toString();\r\n  }\r\n\r\n  getBlob(url: string) {\r\n    const me = this;\r\n    return me.http\r\n      .get(url, {\r\n        observe: 'response',\r\n        responseType: 'blob',\r\n      })\r\n      .pipe(map((res) => res.body));\r\n  }\r\n\r\n  getFile(url: string) {\r\n    const me = this;\r\n    return me.http\r\n      .get(url, {\r\n        observe: 'response',\r\n        responseType: 'blob',\r\n      })\r\n      .pipe(map((res) => {\r\n        res.body\r\n        if (res.body) {\r\n          // Get the file name from the response.\r\n          const fileName = res.headers.get('Content-Disposition')?.split('filename=')[1];\r\n          if (!fileName) {\r\n            console.error('El servidor no ha devuelto el nombre del archivo. en la cabecera Content-Disposition, Access-Control-Expose-Headers tambien debe ser añadido.');\r\n            return;\r\n          }\r\n          return {\r\n            file: res.body,\r\n            fileName,\r\n          }\r\n        }\r\n        return res.body;\r\n      }));\r\n  }\r\n\r\n  getCollectionPath() {\r\n    return this.collectionPath;\r\n  }\r\n\r\n}\r\n","/*\n * Public API Surface of ngx-core-business\n */\nexport * from './base-rest-service';\nexport * from './http-collection.service';\nexport * from './collection-query-params';\nexport * from './collection-response';\nexport * from './query-filter';\nexport * from './query-sorter';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}