@hpe/angular-toolkit
Version:
Hewlett-Packard Enterprise : Angular toolkit for rapid project development
186 lines (185 loc) • 16.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
//=============================================================================
//===
//=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.
//===
//=== Use of this source code is governed by an MIT-style license that can be
//=== found in the LICENSE file
//=============================================================================
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { DomSanitizer } from "@angular/platform-browser";
import { throwError } from "rxjs";
import { catchError, map, finalize } from "rxjs/operators";
import { AppEvent } from "@hpe/angular-toolkit/model";
import { EventBusService } from "./eventbus-service";
var HttpService = /** @class */ (function () {
//-------------------------------------------------------------------------
//---
//--- Constructor
//---
//-------------------------------------------------------------------------
function HttpService(httpClient, eventBusService, domSanitizer) {
this.httpClient = httpClient;
this.eventBusService = eventBusService;
this.domSanitizer = domSanitizer;
this.openRequests = 0;
}
Object.defineProperty(HttpService.prototype, "loading", {
get: /**
* @return {?}
*/
function () {
return (this.openRequests > 0);
},
enumerable: true,
configurable: true
});
/**
* @param {?} url
* @param {?=} options
* @return {?}
*/
HttpService.prototype.getObject = /**
* @param {?} url
* @param {?=} options
* @return {?}
*/
function (url, options) {
var _this = this;
this.showLoader();
//--- "Pragma": "no-cache" for IE 11
var /** @type {?} */ header = {
"Pragma": "no-cache",
"Cache-Control": "no-cache",
"Expires": "0"
};
return this.httpClient.get(url, { params: options, headers: header }).pipe(catchError(function (error) { return _this.handleError(error); }), finalize(function () { return _this.hideLoader(); }));
};
/**
* @param {?} url
* @param {?=} options
* @return {?}
*/
HttpService.prototype.getBlob = /**
* @param {?} url
* @param {?=} options
* @return {?}
*/
function (url, options) {
var _this = this;
this.showLoader();
//--- Add timestamp to change static url to dynamic for IE 11
if (options != null) {
options.ts = Date.now();
}
return this.httpClient.get(url, { params: options, responseType: 'blob' }).pipe(map(function (e) { return _this.getSanitizedUrl(URL.createObjectURL(e)); }), catchError(function (error) { return _this.handleError(error); }), finalize(function () { return _this.hideLoader(); }));
};
/**
* @param {?} url
* @param {?} object
* @param {?=} options
* @return {?}
*/
HttpService.prototype.postObject = /**
* @param {?} url
* @param {?} object
* @param {?=} options
* @return {?}
*/
function (url, object, options) {
var _this = this;
this.showLoader();
return this.httpClient.post(url, object, options).pipe(catchError(function (error) { return _this.handleError(error); }), finalize(function () { return _this.hideLoader(); }));
};
/**
* @param {?} url
* @return {?}
*/
HttpService.prototype.getSanitizedUrl = /**
* @param {?} url
* @return {?}
*/
function (url) {
return this.domSanitizer.bypassSecurityTrustResourceUrl(url);
};
/**
* @param {?} response
* @return {?}
*/
HttpService.prototype.handleError = /**
* @param {?} response
* @return {?}
*/
function (response) {
console.log("Got the following HTTP error : " + JSON.stringify(response));
var /** @type {?} */ error;
if (response.status == 422) {
//--- Unprocessable entity
error = response.error;
}
else {
error = {
code: response.status.toString(),
error: response.error.toString()
};
}
this.eventBusService.emitToError(error);
return throwError(error);
};
/**
* @return {?}
*/
HttpService.prototype.showLoader = /**
* @return {?}
*/
function () {
if (++this.openRequests == 1) {
this.eventBusService.emitToApp(new AppEvent(AppEvent.SUBMIT_START));
}
};
/**
* @return {?}
*/
HttpService.prototype.hideLoader = /**
* @return {?}
*/
function () {
if (--this.openRequests == 0) {
this.eventBusService.emitToApp(new AppEvent(AppEvent.SUBMIT_END));
}
};
HttpService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
HttpService.ctorParameters = function () { return [
{ type: HttpClient, },
{ type: EventBusService, },
{ type: DomSanitizer, },
]; };
return HttpService;
}());
export { HttpService };
function HttpService_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
HttpService.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
HttpService.ctorParameters;
/** @type {?} */
HttpService.prototype.openRequests;
/** @type {?} */
HttpService.prototype.httpClient;
/** @type {?} */
HttpService.prototype.eventBusService;
/** @type {?} */
HttpService.prototype.domSanitizer;
}
//=============================================================================
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhwZS9hbmd1bGFyLXRvb2xraXQvc2VydmljZS8iLCJzb3VyY2VzIjpbImh0dHAtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBUSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFRLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUd2RCxPQUFPLEVBQWEsVUFBVSxFQUFDLE1BQVMsTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxRQUFRLEVBQWMsTUFBVSw0QkFBNEIsQ0FBQztBQUVyRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQWdCLG9CQUFvQixDQUFBOztJQWUzRCwyRUFBMkU7SUFDM0UsS0FBSztJQUNMLGlCQUFpQjtJQUNqQixLQUFLO0lBQ0wsMkVBQTJFO0lBRTNFLHFCQUFvQixVQUE0QixFQUNyQyxpQkFDQTtRQUZTLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQ3JDLG9CQUFlLEdBQWYsZUFBZTtRQUNmLGlCQUFZLEdBQVosWUFBWTs0QkFWUyxDQUFDO0tBVWE7MEJBUW5DLGdDQUFPOzs7OztZQUNqQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7O0lBS3pCLCtCQUFTOzs7OztjQUFDLEdBQVksRUFBRSxPQUFjOztRQUU1QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7O1FBSWxCLHFCQUFJLE1BQU0sR0FBRztZQUNaLFFBQVEsRUFBVSxVQUFVO1lBQzVCLGVBQWUsRUFBRyxVQUFVO1lBQzVCLFNBQVMsRUFBUyxHQUFHO1NBQ3JCLENBQUM7UUFFRixNQUFN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WUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7U0FDcEU7Ozs7O0lBS00sZ0NBQVU7Ozs7UUFFakIsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDbEU7OztnQkFuSUYsVUFBVTs7OztnQkFaSCxVQUFVO2dCQVFWLGVBQWU7Z0JBUGYsWUFBWTs7c0JBVnBCOztTQXNCYSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy89PT1cbi8vPT09IChDKSBDb3B5cmlnaHQgMjAxOCBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUC5cbi8vPT09XG4vLz09PSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuLy89PT0gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbXBvcnQge0luamVjdGFibGV9ICAgZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7SHR0cENsaWVudH0gICBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7RG9tU2FuaXRpemVyfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IHtTYWZlVXJsfSAgICAgIGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL3NyYy9zZWN1cml0eS9kb21fc2FuaXRpemF0aW9uX3NlcnZpY2VcIjtcblxuaW1wb3J0IHtPYnNlcnZhYmxlLCB0aHJvd0Vycm9yfSAgICBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXAsIGZpbmFsaXplfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7QXBwRXZlbnQsIEVycm9yRXZlbnQgfSAgICAgZnJvbSBcIkBocGUvYW5ndWxhci10b29sa2l0L21vZGVsXCI7XG5cbmltcG9ydCB7RXZlbnRCdXNTZXJ2aWNlfSAgICAgICAgICAgZnJvbSBcIi4vZXZlbnRidXMtc2VydmljZVwiXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEh0dHBTZXJ2aWNlIHtcblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8tLS1cblx0Ly8tLS0gVmFyaWFibGVzXG5cdC8vLS0tXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgb3BlblJlcXVlc3RzIDogbnVtYmVyID0gMDtcblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8tLS1cblx0Ly8tLS0gQ29uc3RydWN0b3Jcblx0Ly8tLS1cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBodHRwQ2xpZW50ICAgICAgOiBIdHRwQ2xpZW50LFxuXHRcdFx0XHRwcml2YXRlIGV2ZW50QnVzU2VydmljZSA6IEV2ZW50QnVzU2VydmljZSxcblx0XHRcdFx0cHJpdmF0ZSBkb21TYW5pdGl6ZXIgICAgOiBEb21TYW5pdGl6ZXIgKSB7fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLy0tLVxuXHQvLy0tLSBBUEkgbWV0aG9kc1xuXHQvLy0tLVxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwdWJsaWMgZ2V0IGxvYWRpbmcoKSA6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vcGVuUmVxdWVzdHMgPiAwKTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHB1YmxpYyBnZXRPYmplY3QodXJsIDogc3RyaW5nLCBvcHRpb25zPyA6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG5cblx0XHR0aGlzLnNob3dMb2FkZXIoKTtcblxuXHRcdC8vLS0tIFwiUHJhZ21hXCI6IFwibm8tY2FjaGVcIiBmb3IgSUUgMTFcblxuXHRcdGxldCBoZWFkZXIgPSB7XG5cdFx0XHRcIlByYWdtYVwiICAgICAgICA6IFwibm8tY2FjaGVcIixcblx0XHRcdFwiQ2FjaGUtQ29udHJvbFwiIDogXCJuby1jYWNoZVwiLFxuXHRcdFx0XCJFeHBpcmVzXCIgICAgICAgOiBcIjBcIlxuXHRcdH07XG5cblx0XHRyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh1cmwsIHsgcGFyYW1zOiBvcHRpb25zLCBoZWFkZXJzIDogaGVhZGVyIH0pLnBpcGUoXG5cdFx0XHRjYXRjaEVycm9yKChlcnJvcikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnJvcikpLFxuXHRcdFx0ZmluYWxpemUgICgoKSAgICAgID0+IHRoaXMuaGlkZUxvYWRlcigpKVxuXHRcdCk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwdWJsaWMgZ2V0QmxvYih1cmwgOiBzdHJpbmcsIG9wdGlvbnM/IDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuXHRcdHRoaXMuc2hvd0xvYWRlcigpO1xuXG5cdFx0Ly8tLS0gQWRkIHRpbWVzdGFtcCB0byBjaGFuZ2Ugc3RhdGljIHVybCB0byBkeW5hbWljIGZvciBJRSAxMVxuXG5cdFx0aWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuXHRcdFx0b3B0aW9ucy50cyA9IERhdGUubm93KCk7XG5cdFx0fVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHVybCwgeyBwYXJhbXM6IG9wdGlvbnMsIHJlc3BvbnNlVHlwZSA6ICdibG9iJ30pLnBpcGUoXG5cdFx0XHRtYXAoZSA9PiB0aGlzLmdldFNhbml0aXplZFVybChVUkwuY3JlYXRlT2JqZWN0VVJMKGUpKSksXG5cdFx0XHRjYXRjaEVycm9yKChlcnJvcikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnJvcikpLFxuXHRcdFx0ZmluYWxpemUoKCkgPT4gdGhpcy5oaWRlTG9hZGVyKCkpXG5cdFx0KTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHB1YmxpYyBwb3N0T2JqZWN0KHVybDogc3RyaW5nLCBvYmplY3Q6IGFueSwgb3B0aW9ucz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICAgICAgdGhpcy5zaG93TG9hZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0ICh1cmwsIG9iamVjdCwgb3B0aW9ucykucGlwZShcblx0XHRcdGNhdGNoRXJyb3IoKGVycm9yKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycm9yKSksXG5cdFx0XHRmaW5hbGl6ZSAgKCgpICAgICAgPT4gdGhpcy5oaWRlTG9hZGVyKCkpXG5cdFx0KTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHB1YmxpYyBnZXRTYW5pdGl6ZWRVcmwodXJsIDogc3RyaW5nKTogU2FmZVVybCB7XG5cdFx0cmV0dXJuIHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmwpO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vLS0tXG5cdC8vLS0tIFByaXZhdGUgbWV0aG9kc1xuXHQvLy0tLVxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIGhhbmRsZUVycm9yKHJlc3BvbnNlIDogYW55KSA6IE9ic2VydmFibGU8YW55PiB7XG5cblx0XHRjb25zb2xlLmxvZyhcIkdvdCB0aGUgZm9sbG93aW5nIEhUVFAgZXJyb3IgOiBcIiArIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSk7XG5cblx0XHRsZXQgZXJyb3IgOiBFcnJvckV2ZW50O1xuXG5cdFx0aWYgKHJlc3BvbnNlLnN0YXR1cyA9PSA0MjIpIHtcblx0XHRcdC8vLS0tIFVucHJvY2Vzc2FibGUgZW50aXR5XG5cdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGVycm9yID0ge1xuXHRcdFx0XHRjb2RlIDogcmVzcG9uc2Uuc3RhdHVzLnRvU3RyaW5nKCksXG5cdFx0XHRcdGVycm9yOiByZXNwb25zZS5lcnJvci50b1N0cmluZygpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHRoaXMuZXZlbnRCdXNTZXJ2aWNlLmVtaXRUb0Vycm9yKGVycm9yKTtcblxuXHRcdHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgc2hvd0xvYWRlcigpOiB2b2lkIHtcblxuXHRcdGlmICgrK3RoaXMub3BlblJlcXVlc3RzID09IDEpIHtcblx0XHRcdHRoaXMuZXZlbnRCdXNTZXJ2aWNlLmVtaXRUb0FwcChuZXcgQXBwRXZlbnQoQXBwRXZlbnQuU1VCTUlUX1NUQVJUKSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSBoaWRlTG9hZGVyKCk6IHZvaWQge1xuXG5cdFx0aWYgKC0tdGhpcy5vcGVuUmVxdWVzdHMgPT0gMCkge1xuXHRcdFx0dGhpcy5ldmVudEJ1c1NlcnZpY2UuZW1pdFRvQXBwKG5ldyBBcHBFdmVudChBcHBFdmVudC5TVUJNSVRfRU5EKSk7XG5cdFx0fVxuXHR9XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiJdfQ==