vibe-sharedui
Version:
EuroMonitor EMI vibe models
173 lines • 15.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { HttpClient, HttpParams } from '@angular/common/http';
import { BehaviorSubject, throwError } from 'rxjs';
import { catchError, finalize, retry } from 'rxjs/operators';
import { Inject } from '@angular/core';
/**
* @record
*/
export function Filter() { }
/**
* @abstract
* @template T
*/
export class EntityService {
/**
* @param {?} httpClient
* @param {?} environment
*/
constructor(httpClient, environment) {
this.httpClient = httpClient;
this.loadingSubject = new BehaviorSubject(false);
this.loading$ = this.loadingSubject.asObservable();
this.baseUrl = environment.API_BASE_URL;
}
/**
* @param {?} id
* @return {?}
*/
getById(id) {
// this.loadingSubject.next(true);
return this.httpClient.get(`${this.baseUrl}/${this.entityPath}/${id}`).pipe(catchError(this.handleError));
}
// findAll(filter: Filter, order = 'DESC', skip = 0, take = 100): Observable<IPagination<T>> | Observable<never> {
/**
* @param {?} filter
* @param {?=} order
* @param {?=} skip
* @param {?=} take
* @return {?}
*/
findAll(filter, order = 'DESC', skip = 0, take = 100) {
this.loadingSubject.next(true);
return this.httpClient
.get(`${this.baseUrl}/${this.entityPath}`, {
params: new HttpParams()
.set('filter', 'filter TODO')
.set('order', order)
.set('skip', skip.toString())
.set('take', take.toString()),
})
.pipe(retry(3), // retry a failed request up to 3 times
catchError(this.handleError), finalize((/**
* @return {?}
*/
() => this.loadingSubject.next(false))));
}
// getAll(): Observable<IPagination<T>> {
/**
* @return {?}
*/
getAll() {
this.loadingSubject.next(true);
return this.httpClient.get(`${this.baseUrl}/${this.entityPath}`).pipe(retry(3), // retry a failed request up to 3 times
catchError(this.handleError), finalize((/**
* @return {?}
*/
() => this.loadingSubject.next(false))));
}
/**
* @param {?} id
* @return {?}
*/
delete(id) {
this.loadingSubject.next(true);
return this.httpClient.delete(`${this.baseUrl}/${this.entityPath}/${id}`).pipe(catchError(this.handleError), finalize((/**
* @return {?}
*/
() => this.loadingSubject.next(false))));
}
/**
* @param {?} entity
* @return {?}
*/
post(entity) {
this.loadingSubject.next(true);
return this.httpClient.post(`${this.baseUrl}/${this.entityPath}`, entity).pipe(catchError(this.handleError), finalize((/**
* @return {?}
*/
() => this.loadingSubject.next(false))));
}
/**
* @param {?} id
* @param {?} entity
* @return {?}
*/
put(id, entity) {
console.log(entity);
this.loadingSubject.next(true);
return this.httpClient.put(`${this.baseUrl}/${this.entityPath}/${id}`, entity).pipe(catchError(this.handleError), finalize((/**
* @return {?}
*/
() => this.loadingSubject.next(false))));
}
/**
* @protected
* @param {?} error
* @return {?}
*/
handleError(error) {
// in a real world app, we may send the server to some remote logging infrastructure
// instead of just logging it to the console
/** @type {?} */
let errorMessage;
if (typeof error === 'string') {
errorMessage = error;
}
else {
if (error.error instanceof ErrorEvent) {
// A client-side or network error occurred. Handle it accordingly.
errorMessage = `An error occurred: ${error.error.message}`;
}
else {
// The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong,
errorMessage = `Backend returned code ${error.status}, with body ${error.message}`;
}
}
console.error(error);
// return an ErrorObservable with a user-facing error message
return throwError(errorMessage);
}
/**
* @protected
* @param {?} body
* @return {?}
*/
convertToJson(body) {
return body;
}
}
/** @nocollapse */
EntityService.ctorParameters = () => [
{ type: HttpClient },
{ type: undefined, decorators: [{ type: Inject, args: ['environment',] }] }
];
if (false) {
/**
* @type {?}
* @protected
*/
EntityService.prototype.baseUrl;
/**
* @type {?}
* @protected
*/
EntityService.prototype.loadingSubject;
/** @type {?} */
EntityService.prototype.loading$;
/**
* @type {?}
* @protected
*/
EntityService.prototype.entityPath;
/**
* @type {?}
* @protected
*/
EntityService.prototype.httpClient;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly92aWJlLXNoYXJlZHVpLyIsInNvdXJjZXMiOlsibGliL2NvbnRhaW5lcnMvZW50aXR5L2VudGl0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFxQixVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBRXZDLDRCQUVDOzs7OztBQUVELE1BQU0sT0FBZ0IsYUFBYTs7Ozs7SUFPakMsWUFBc0IsVUFBc0IsRUFBeUIsV0FBVztRQUExRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBTGxDLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDeEQsYUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFLbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDO0lBQzFDLENBQUM7Ozs7O0lBRUQsT0FBTyxDQUFDLEVBQW1CO1FBQ3pCLGtDQUFrQztRQUNsQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM1RSxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUU3QixDQUFDO0lBQ0osQ0FBQzs7Ozs7Ozs7O0lBR0MsT0FBTyxDQUFDLE1BQWMsRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsSUFB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QyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQzVCLFFBQVE7OztRQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQ2hELENBQUM7SUFDSixDQUFDOzs7Ozs7SUFFUyxXQUFXLENBQUMsS0FBd0I7Ozs7WUFHeEMsWUFBb0I7UUFDeEIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsWUFBWSxHQUFHLEtBQUssQ0FBQztTQUN0QjthQUFNO1lBQ0wsSUFBSSxLQUFLLENBQUMsS0FBSyxZQUFZLFVBQVUsRUFBRTtnQkFDckMsa0VBQWtFO2dCQUNsRSxZQUFZLEdBQUcsc0JBQXNCLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDNUQ7aUJBQU07Z0JBQ0wsc0RBQXNEO2dCQUN0RCw2REFBNkQ7Z0JBQzdELFlBQVksR0FBRyx5QkFBeUIsS0FBSyxDQUFDLE1BQU0sZUFBZSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDcEY7U0FDRjtRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsNkRBQTZEO1FBQzdELE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Ozs7OztJQUVTLGFBQWEsQ0FBQyxJQUFTO1FBRS9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7OztZQTNHTSxVQUFVOzRDQWtCOEIsTUFBTSxTQUFDLGFBQWE7Ozs7Ozs7SUFObkUsZ0NBQWdDOzs7OztJQUNoQyx1Q0FBK0Q7O0lBQy9ELGlDQUFxRDs7Ozs7SUFFckQsbUNBQXNDOzs7OztJQUUxQixtQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIHJldHJ5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBJUGFnaW5hdGlvbiB9IGZyb20gJy4vcGFnaW5hdGlvbic7XHJcbmltcG9ydCB7IEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXIge1xyXG4gIFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eVNlcnZpY2U8VCBleHRlbmRzIEVudGl0eT4ge1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBiYXNlVXJsOiBhbnk7XHJcbiAgcHJvdGVjdGVkIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIGxvYWRpbmckID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGVudGl0eVBhdGg6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQpIHtcclxuICAgIHRoaXMuYmFzZVVybCA9IGVudmlyb25tZW50LkFQSV9CQVNFX1VSTDtcclxuICB9XHJcblxyXG4gIGdldEJ5SWQoaWQ6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgLy8gdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8VD4oYCR7dGhpcy5iYXNlVXJsfS8ke3RoaXMuZW50aXR5UGF0aH0vJHtpZH1gKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpLFxyXG4gICAgICAvLyBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gICAgLy8gZmluZEFsbChmaWx0ZXI6IEZpbHRlciwgb3JkZXIgPSAnREVTQycsIHNraXAgPSAwLCB0YWtlID0gMTAwKTogT2JzZXJ2YWJsZTxJUGFnaW5hdGlvbjxUPj4gfCBPYnNlcnZhYmxlPG5ldmVyPiB7XHJcbiAgICBmaW5kQWxsKGZpbHRlcjogRmlsdGVyLCBvcmRlciA9ICdERVNDJywgc2tpcCA9IDAsIHRha2UgPSAxMDApOiBPYnNlcnZhYmxlPFRbXT4gfCBPYnNlcnZhYmxlPG5ldmVyPiB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5nZXQ8VFtdPihgJHt0aGlzLmJhc2VVcmx9LyR7dGhpcy5lbnRpdHlQYXRofWAsIHtcclxuICAgICAgICBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKClcclxuICAgICAgICAgIC5zZXQoJ2ZpbHRlcicsICdmaWx0ZXIgVE9ETycpXHJcbiAgICAgICAgICAuc2V0KCdvcmRlcicsIG9yZGVyKVxyXG4gICAgICAgICAgLnNldCgnc2tpcCcsIHNraXAudG9TdHJpbmcoKSlcclxuICAgICAgICAgIC5zZXQoJ3Rha2UnLCB0YWtlLnRvU3RyaW5nKCkpLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICByZXRyeSgzKSwgLy8gcmV0cnkgYSBmYWlsZWQgcmVxdWVzdCB1cCB0byAzIHRpbWVzXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpKSxcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGdldEFsbCgpOiBPYnNlcnZhYmxlPElQYWdpbmF0aW9uPFQ+PiB7XHJcbiAgZ2V0QWxsKCk6IE9ic2VydmFibGU8VFtdPiB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxUW10+KGAke3RoaXMuYmFzZVVybH0vJHt0aGlzLmVudGl0eVBhdGh9YCkucGlwZShcclxuICAgICAgcmV0cnkoMyksIC8vIHJldHJ5IGEgZmFpbGVkIHJlcXVlc3QgdXAgdG8gMyB0aW1lc1xyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpLFxyXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkZWxldGUoaWQ6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWxldGUoYCR7dGhpcy5iYXNlVXJsfS8ke3RoaXMuZW50aXR5UGF0aH0vJHtpZH1gKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpLFxyXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwb3N0KGVudGl0eTogVCkge1xyXG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KGAke3RoaXMuYmFzZVVybH0vJHt0aGlzLmVudGl0eVBhdGh9YCwgZW50aXR5KS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpLFxyXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdXQoaWQ6IG51bWJlciB8IHN0cmluZywgZW50aXR5OiBUKSB7XHJcbiAgICBjb25zb2xlLmxvZyhlbnRpdHkpO1xyXG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wdXQoYCR7dGhpcy5iYXNlVXJsfS8ke3RoaXMuZW50aXR5UGF0aH0vJHtpZH1gLCBlbnRpdHkpLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvciksXHJcbiAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSkpLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBoYW5kbGVFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgIC8vIGluIGEgcmVhbCB3b3JsZCBhcHAsIHdlIG1heSBzZW5kIHRoZSBzZXJ2ZXIgdG8gc29tZSByZW1vdGUgbG9nZ2luZyBpbmZyYXN0cnVjdHVyZVxyXG4gICAgLy8gaW5zdGVhZCBvZiBqdXN0IGxvZ2dpbmcgaXQgdG8gdGhlIGNvbnNvbGVcclxuICAgIGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGVycm9yLmVycm9yIGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xyXG4gICAgICAgIC8vIEEgY2xpZW50LXNpZGUgb3IgbmV0d29yayBlcnJvciBvY2N1cnJlZC4gSGFuZGxlIGl0IGFjY29yZGluZ2x5LlxyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBBbiBlcnJvciBvY2N1cnJlZDogJHtlcnJvci5lcnJvci5tZXNzYWdlfWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVGhlIGJhY2tlbmQgcmV0dXJuZWQgYW4gdW5zdWNjZXNzZnVsIHJlc3BvbnNlIGNvZGUuXHJcbiAgICAgICAgLy8gVGhlIHJlc3BvbnNlIGJvZHkgbWF5IGNvbnRhaW4gY2x1ZXMgYXMgdG8gd2hhdCB3ZW50IHdyb25nLFxyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBCYWNrZW5kIHJldHVybmVkIGNvZGUgJHtlcnJvci5zdGF0dXN9LCB3aXRoIGJvZHkgJHtlcnJvci5tZXNzYWdlfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgLy8gcmV0dXJuIGFuIEVycm9yT2JzZXJ2YWJsZSB3aXRoIGEgdXNlci1mYWNpbmcgZXJyb3IgbWVzc2FnZVxyXG4gICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjb252ZXJ0VG9Kc29uKGJvZHk6IGFueSkge1xyXG4gIFxyXG4gICAgcmV0dXJuIGJvZHk7XHJcbiAgfVxyXG59XHJcbiJdfQ==