diff options
Diffstat (limited to 'catalog-ui/src/app/services/http-error-interceptor.ts')
-rw-r--r-- | catalog-ui/src/app/services/http-error-interceptor.ts | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/catalog-ui/src/app/services/http-error-interceptor.ts b/catalog-ui/src/app/services/http-error-interceptor.ts new file mode 100644 index 0000000000..b61091c37c --- /dev/null +++ b/catalog-ui/src/app/services/http-error-interceptor.ts @@ -0,0 +1,99 @@ +'use strict'; +import {IServerMessageModalModel} from "../view-models/modals/message-modal/message-server-modal/server-message-modal-view-model"; +import {SEVERITY} from "../utils/constants"; +import 'app/utils/prototypes.ts'; + +export class HttpErrorInterceptor { + public static $inject = ['$injector', '$q']; + + public static Factory($injector:ng.auto.IInjectorService, $q:angular.IQService) { + return new HttpErrorInterceptor($injector, $q); + } + + constructor(private $injector:ng.auto.IInjectorService, private $q:angular.IQService) { + } + + public formatMessageArrays = (message:string, variables:Array<string>)=> { + return message.replace(/\[%(\d+)\]/g, function (_, m) { + let tmp = []; + let list = variables[--m].split(";"); + list.forEach(function (item) { + tmp.push("<li>" + item + "</li>"); + }); + return "<ul>" + tmp.join("") + "</ul>"; + }); + }; + + public responseError = (rejection:any)=> { + + let text:string; + let variables; + let messageId:string = ""; + let isKnownException = false; + + if (rejection.data && rejection.data.serviceException) { + text = rejection.data.serviceException.text; + variables = rejection.data.serviceException.variables; + messageId = rejection.data.serviceException.messageId; + isKnownException = true; + } else if (rejection.data && rejection.data.requestError && rejection.data.requestError.serviceException) { + text = rejection.data.requestError.serviceException.text; + variables = rejection.data.requestError.serviceException.variables; + messageId = rejection.data.requestError.serviceException.messageId; + isKnownException = true; + } else if (rejection.data && rejection.data.requestError && rejection.data.requestError.policyException) { + text = rejection.data.requestError.policyException.text; + variables = rejection.data.requestError.policyException.variables; + messageId = rejection.data.requestError.policyException.messageId; + isKnownException = true; + } else if (rejection.data) { + text = 'Wrong error format from server'; + console.error(text); + isKnownException = false; + } + + let data:IServerMessageModalModel; + if (isKnownException) { + // Remove the "Error: " text at the begining + if (text.trim().indexOf("Error:") === 0) { + text = text.replace("Error:", "").trim(); + } + + //mshitrit DE199895 bug fix + let count:number = 0; + variables.forEach(function (item) { + variables[count] = item ? item.replace('<', '<').replace('>', '>') : ''; + count++; + }); + + // Format the message in case has array to <ul><li> + text = this.formatMessageArrays(text, variables); + + // Format the message %1 %2 + text = text.format(variables); + + // Need to inject the MessageService manually to prevent circular dependencies (because MessageService use $templateCache that use $http). + data = { + title: 'Error', + message: text, + messageId: messageId, + status: rejection.status, + severity: SEVERITY.ERROR + }; + } else { + // Need to inject the MessageService manually to prevent circular dependencies (because MessageService use $templateCache that use $http). + data = { + title: 'Error', + message: rejection.status !== -1 ? rejection.statusText : "Error getting response from server", + messageId: messageId, + status: rejection.status, + severity: SEVERITY.ERROR + }; + } + + let modalsHandler = this.$injector.get('ModalsHandler'); + modalsHandler.openServerMessageModal(data); + + return this.$q.reject(rejection); + } +} |