UNPKG

vibe-sharedui

Version:

EuroMonitor EMI vibe models

173 lines 15.6 kB
/** * @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==