{"version":3,"file":"bootkit-angular-http.mjs","sources":["../../../projects/bootkit/http/types.ts","../../../projects/bootkit/http/http.service.ts","../../../projects/bootkit/http/bootkit-angular-http.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const HttpServiceBaseUrl = new InjectionToken('HttpServiceBaseUrl');\r\n\r\nexport interface HttpOptions {\r\n    /** Http request ID */\r\n    id?: string;\r\n    query?: any;\r\n    pathType?: 'relative' | 'absolute';\r\n    responseType?: 'json' | 'blob' | 'text';\r\n    contentType?: 'json' | 'multipart/form-data';\r\n    reportProgress?: boolean;\r\n    observe?: \"response\" | \"body\" | \"events\";\r\n    displayServerErrors?: boolean;\r\n    sendAuthToken?: boolean;\r\n\r\n    /** Save response in transfer state */\r\n    transferState?: {\r\n        enable: boolean,\r\n        clearAfterUse?: boolean;    \r\n    };\r\n}\r\n\r\nexport abstract class HttpEvent {\r\n    constructor(public readonly url: string, public readonly options?: HttpOptions) {\r\n    }\r\n}\r\n\r\nexport class HttpRequestSendEvent extends HttpEvent {\r\n    constructor(url: string, options?: HttpOptions) {\r\n        super(url, options);\r\n    }\r\n}\r\n\r\nexport class HttpResponseEvent extends HttpEvent {\r\n    constructor(url: string, options?: HttpOptions) {\r\n        super(url, options);\r\n    }\r\n}\r\n\r\nexport class HttpErrorEvent extends HttpEvent {\r\n    constructor(url: string, options?: HttpOptions) {\r\n        super(url, options);\r\n    }\r\n}\r\n","import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\r\nimport { map, Observable, of, Subject, tap } from 'rxjs';\r\nimport { HttpErrorEvent, HttpEvent, HttpOptions, HttpRequestSendEvent, HttpResponseEvent, HttpServiceBaseUrl } from './types';\r\nimport { Inject, Injectable, makeStateKey, Optional, PLATFORM_ID, TransferState } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { DataRequest, DataResult } from '@bootkit/angular/data';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class HttpService {\r\n  private _eventsSubject = new Subject<HttpEvent>();\r\n  private _baseUrl?: string;\r\n\r\n  public events = this._eventsSubject.asObservable();\r\n  public defaultHeaders?: HttpHeaders;\r\n\r\n  constructor(\r\n    private _http: HttpClient,\r\n    private transferState: TransferState,\r\n    @Inject(PLATFORM_ID) private platformId: object,\r\n    @Optional() @Inject(HttpServiceBaseUrl) baseUrl?: string\r\n  ) {\r\n    this._baseUrl = typeof baseUrl == 'string' ? baseUrl : '';\r\n  }\r\n\r\n  public get<T>(url: string, options?: HttpOptions): Observable<T> {\r\n    this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n    const URL = this.makeUrl(url, options);\r\n    const OPTIONS = this.makeHttpClientOptions(options);\r\n    let obs = this.tap<T>(this._http.get<T>(URL, OPTIONS), url, options);\r\n    obs = this._handleTransferState(obs, options);\r\n    return obs;\r\n  }\r\n\r\n  private _handleTransferState<T>(obs: Observable<T>, options: HttpOptions | undefined): Observable<T> {\r\n    if (!options?.transferState) {\r\n      return obs;\r\n    }\r\n\r\n    if (!options.id) {\r\n      throw Error('To use transferState, set request id')\r\n    }\r\n\r\n    let key = makeStateKey<T>(options.id!);\r\n\r\n    // Check if data exists in TransferState (to avoid refetching)\r\n    if (this.transferState.hasKey(key)) {\r\n      const data = this.transferState.get<T>(key, null!);\r\n\r\n      if(options.transferState.clearAfterUse || true) { \r\n        this.transferState.remove(key); // Free memory\r\n      }\r\n      \r\n      return of<T>(data);\r\n    } else {\r\n      return obs.pipe(\r\n        tap((d) => {\r\n          if (isPlatformServer(this.platformId)) {\r\n            this.transferState.set(key, d);\r\n          }\r\n        })\r\n      )\r\n    }\r\n  }\r\n\r\n  public getPagable<T>(url: string, request: DataRequest, options?: HttpOptions): Observable<DataResult<T>> {\r\n    this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n    const URL = this.makeUrl(url, options);\r\n    options = options || {};\r\n    options.query = { ...options.query, ...this.mapDataRequesToQueryObject(request) };\r\n    const OPTIONS = this.makeHttpClientOptions(options);\r\n    var o = this._http.get<{ data: any[], total: number }>(URL, OPTIONS)\r\n      .pipe(\r\n        map((x: any) => new DataResult(request, x.data, x.total))\r\n      );\r\n\r\n    return this.tap(o, url, options);\r\n  }\r\n\r\n  public post<T>(url: string, body: any, options?: HttpOptions): Observable<T> {\r\n    this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n    const URL = this.makeUrl(url, options);\r\n    const BODY = this.makeBody(body, options);\r\n    const OPTIONS = this.makeHttpClientOptions(options);\r\n    return this.tap<T>(this._http.post(URL, BODY, OPTIONS), url, options);\r\n  }\r\n\r\n  public put<T>(url: string, body: any, options?: HttpOptions): Observable<T> {\r\n    this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n    const URL = this.makeUrl(url, options);\r\n    const BODY = this.makeBody(body, options);\r\n    const OPTIONS = this.makeHttpClientOptions(options);\r\n    return this.tap<T>(this._http.put(URL, BODY, OPTIONS), url, options);\r\n  }\r\n\r\n  public delete<T>(url: string, options?: HttpOptions): Observable<T> {\r\n    this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n    const URL = this.makeUrl(url, options);\r\n    const OPTIONS = this.makeHttpClientOptions(options);\r\n    return this.tap<T>(this._http.delete(URL, OPTIONS), url, options);\r\n  }\r\n\r\n  private tap<T>(o: Observable<any>, url: string, options?: HttpOptions): Observable<T> {\r\n    return o.pipe(\r\n      tap({\r\n        next: r => {\r\n          this._eventsSubject.next(new HttpResponseEvent(url, options));\r\n        },\r\n        error: e => {\r\n          this._eventsSubject.next(new HttpErrorEvent(url, options))\r\n        }\r\n      })\r\n    )\r\n  }\r\n\r\n  private makeUrl(url: string, options?: HttpOptions) {\r\n    return (options?.pathType === 'absolute') ? url : (this._baseUrl + url);\r\n  }\r\n\r\n  private makeHttpClientOptions(options?: HttpOptions) {\r\n    if (!options) {\r\n      return undefined;\r\n    }\r\n\r\n    const ngOptions: any = {};\r\n\r\n    // Query String\r\n    const query = options.query;\r\n    if (typeof query === 'object') {\r\n      let params = new HttpParams();\r\n      for (const key in query) {\r\n        if (query.hasOwnProperty(key)) {\r\n          const value = query[key];\r\n          const type = typeof value;\r\n          if (type === 'string' || type === 'number' || type === 'boolean') {\r\n            params = params.set(key, value);\r\n          }\r\n        }\r\n      }\r\n      ngOptions.params = params;\r\n    }\r\n\r\n    // Response Type\r\n    // if (options.responseType) {\r\n    ngOptions.responseType = options.responseType;\r\n    // }\r\n\r\n    if (!options.sendAuthToken) {\r\n    }\r\n\r\n    ngOptions.headers = this.defaultHeaders;\r\n    ngOptions.reportProgress = options.reportProgress;\r\n    ngOptions.observe = options.observe;\r\n\r\n    return ngOptions;\r\n  }\r\n\r\n  private makeBody(body: any, options?: HttpOptions) {\r\n    body = this.processBodyFields(body);\r\n    if (!options || !options.contentType || options.contentType !== 'multipart/form-data') {\r\n      return body;\r\n    }\r\n\r\n    // contentType is multipart/form-data\r\n    const formData = new FormData();\r\n    for (const key in body) {\r\n      if (body.hasOwnProperty(key)) {\r\n        const field = body[key];\r\n        let value;\r\n\r\n        if (typeof field === 'string' || field instanceof File) {\r\n          value = field;\r\n        } else if (typeof field === 'number') {\r\n          value = field.toString();\r\n        } else if (typeof field === 'object') {\r\n          value = JSON.stringify(field);\r\n        }\r\n\r\n        if (value) {\r\n          formData.append(key, value);\r\n        }\r\n      }\r\n    }\r\n    return formData;\r\n  }\r\n\r\n  private processBodyFields(body: any) {\r\n    return body;\r\n  }\r\n\r\n  private mapDataRequesToQueryObject(request: DataRequest) {\r\n    var result: { [key: string]: any } = {};\r\n\r\n    if (!request) {\r\n      return result;\r\n    }\r\n\r\n    if (Number.isInteger(request.pageIndex) && Number.isInteger(request.pageSize)) {\r\n      result['page.size'] = request.pageSize;\r\n      result['page.index'] = request.pageIndex;\r\n    }\r\n\r\n    if (request.sort) {\r\n      result['sort[field]'] = request.sort.field;\r\n      result['sort[asc]'] = request.sort.asc;\r\n    }\r\n\r\n    for (let i = 0; i < request.filters.length; i++) {\r\n      const filter = request.filters[i];\r\n      result[`filters[${i}].field`] = filter.field;\r\n      result[`filters[${i}].operator`] = filter.operator;\r\n      result[`filters[${i}].value`] = filter.value;\r\n    }\r\n\r\n    if (typeof request.computeTotal == 'boolean') {\r\n      result['ct'] = request.computeTotal;\r\n    }\r\n\r\n    return result;\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}