blob: dc8990bb454dc38cad27c313425d4f5697d30b6d [file] [log] [blame]
/********************************************************************************
* Copyright © 2018 Mettenmeier GmbH.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
import { Injectable, ErrorHandler, Injector } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http';
import { MessageService } from 'primeng/components/common/messageservice';
import { UtilService } from '@core/services/util.service';
import { ErrorObject } from '@shared/model/ErrorObject';
@Injectable()
export class ErrorInterceptor implements ErrorHandler {
constructor(
private injector: Injector
) { }
handleError(httpErrorResponse: HttpErrorResponse) {
const utilService = this.injector.get(UtilService);
let errorMessage: ErrorObject[];
if (Array.isArray(httpErrorResponse.error)) { // should be any kind of validation error
httpErrorResponse.error.forEach(error => {
error.httpStatus = httpErrorResponse.status;
});
errorMessage = httpErrorResponse.error;
} else if (httpErrorResponse.error.byteLength !== undefined) { // reports error
const encodedString = String.fromCharCode.apply(null, new Uint8Array(httpErrorResponse.error));
const decodedString = decodeURIComponent(escape(encodedString));
if (decodedString) {
errorMessage = [JSON.parse(decodedString)];
}
} else { // any other error
errorMessage = [{
httpStatus: httpErrorResponse.error.httpStatus,
message: httpErrorResponse.error.message,
localizedMessage: httpErrorResponse.error.localizedMessage
}];
if (errorMessage[0].httpStatus === undefined) {
errorMessage[0].httpStatus = httpErrorResponse.status;
errorMessage[0].message = httpErrorResponse.statusText;
errorMessage[0].localizedMessage = httpErrorResponse.statusText;
}
}
utilService.throwError(errorMessage);
}
}