projects/wvr-elements/src/lib/core/rest/rest.service.ts
Methods |
|
constructor(http: HttpClient)
|
||||||
Parameters :
|
delete | ||||||
delete(request: Request)
|
||||||
Parameters :
Returns :
Observable<any>
|
get | ||||||
get(request: Request)
|
||||||
Parameters :
Returns :
Observable<any>
|
options | ||||||
options(request: Request)
|
||||||
Parameters :
Returns :
Observable<any>
|
patch | ||||||
patch(request: Request)
|
||||||
Parameters :
Returns :
Observable<any>
|
post | ||||||
post(request: Request)
|
||||||
Parameters :
Returns :
Observable<any>
|
Private preprocessOptions | ||||||
preprocessOptions(request: Request)
|
||||||
Parameters :
Returns :
Observable<any>
|
Private processRequest |
processRequest(request: Request, callback: (url: string,options: any) => void)
|
Returns :
Observable<any>
|
Private processRequestWithData |
processRequestWithData(request: Request, callback: (url: string,body: any,options: any) => void)
|
Returns :
Observable<any>
|
put | ||||||
put(request: Request)
|
||||||
Parameters :
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();
});
}
}