File

projects/wvr-elements/src/lib/core/rest/rest.service.ts

Index

Methods

Constructor

constructor(http: HttpClient)
Parameters :
Name Type Optional
http HttpClient No

Methods

delete
delete(request: Request)
Parameters :
Name Type Optional
request Request No
Returns : Observable<any>
get
get(request: Request)
Parameters :
Name Type Optional
request Request No
Returns : Observable<any>
options
options(request: Request)
Parameters :
Name Type Optional
request Request No
Returns : Observable<any>
patch
patch(request: Request)
Parameters :
Name Type Optional
request Request No
Returns : Observable<any>
post
post(request: Request)
Parameters :
Name Type Optional
request Request No
Returns : Observable<any>
Private preprocessOptions
preprocessOptions(request: Request)
Parameters :
Name Type Optional
request Request No
Returns : Observable<any>
Private processRequest
processRequest(request: Request, callback: (url: string,options: any) => void)
Parameters :
Name Type Optional
request Request No
callback function No
Returns : Observable<any>
Private processRequestWithData
processRequestWithData(request: Request, callback: (url: string,body: any,options: any) => void)
Parameters :
Name Type Optional
request Request No
callback function No
Returns : Observable<any>
put
put(request: Request)
Parameters :
Name Type Optional
request Request No
Returns : Observable<any>
import { HttpClient, HttpParams, HttpParamsOptions } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { mergeMap } from 'rxjs/operators';
import { Request } from './request';

@Injectable({
  providedIn: 'root'
})
export class RestService {

  constructor(private readonly http: HttpClient) {

  }

  options(request: Request): Observable<any> {
    return this.processRequest(request, (url: string, options: any): any => this.http.options(url, options));
  }

  get(request: Request): Observable<any> {
    return this.processRequest(request, (url: string, options: any): any => this.http.get(url, options));
  }

  post(request: Request): Observable<any> {
    return this.processRequestWithData(request, (url: string, body: any, options: any): any => this.http.post(url, body, options));
  }

  put(request: Request): Observable<any> {
    return this.processRequestWithData(request, (url: string, body: any, options: any): any => this.http.put(url, body, options));
  }

  patch(request: Request): Observable<any> {
    return this.processRequestWithData(request, (url: string, body: any, options: any): any => this.http.patch(url, body, options));
  }

  delete(request: Request): Observable<any> {
    return this.processRequest(request, (url: string, options: any): any => this.http.delete(url, options));
  }

  private processRequest(request: Request, callback: (url: string, options: any) => Observable<any>): Observable<any> {
    return this.preprocessOptions(request)
      .pipe(mergeMap(options => callback(request.url, options)));
  }

  // tslint:disable-next-line:max-line-length
  private processRequestWithData(request: Request, callback: (url: string, body: any, options: any) => Observable<any>): Observable<any> {
    return this.preprocessOptions(request)
      .pipe(mergeMap(options => {

        let body = { ...request.body };

        if (request.decode) {
          request.decode.forEach(prop => {
            body[prop] = Buffer.from(body[prop], 'base64')
              .toString();
          });
        }

        if (request.bodyHttpParams) {
          const httpParamsOptions: HttpParamsOptions = {};
          httpParamsOptions[request.bodyHttpParams] = body;
          body = new HttpParams(httpParamsOptions);
        }

        return callback(request.url, body, options);
      }));
  }

  // tslint:disable-next-line:prefer-function-over-method
  private preprocessOptions(request: Request): Observable<any> {
    const options = { ...request.options };

    return new Observable(observer => {
      if (options && options.withCredentials) {
        // Access token work will go here
      }
      observer.next(options);
      observer.complete();
    });
  }

}

results matching ""

    No results matching ""