blob: 5c55855027d0425bada5d38d4c9f8d83c5ea560f [file] [log] [blame]
ilanap785dc1e2018-01-08 15:50:18 +02001/*!
Einav Weiss Keidard2f57942018-02-14 14:00:07 +02002 * Copyright © 2016-2018 European Support Limited
AviZi280f8012017-06-09 02:39:56 +03003 *
Michael Landoefa037d2017-02-19 12:57:33 +02004 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
AviZi280f8012017-06-09 02:39:56 +03007 *
ilanap785dc1e2018-01-08 15:50:18 +02008 * http://www.apache.org/licenses/LICENSE-2.0
AviZi280f8012017-06-09 02:39:56 +03009 *
Michael Landoefa037d2017-02-19 12:57:33 +020010 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
ilanap785dc1e2018-01-08 15:50:18 +020012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing
14 * permissions and limitations under the License.
Michael Landoefa037d2017-02-19 12:57:33 +020015 */
Michael Landoefa037d2017-02-19 12:57:33 +020016import store from 'sdc-app/AppStore.js';
AviZi280f8012017-06-09 02:39:56 +030017import React from 'react';
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020018import { actionTypes as modalActionTypes } from 'nfvo-components/modal/GlobalModalConstants.js';
AviZi280f8012017-06-09 02:39:56 +030019import i18n from 'nfvo-utils/i18n/i18n.js';
20import SubmitErrorResponse from 'nfvo-components/SubmitErrorResponse.jsx';
Michael Landoefa037d2017-02-19 12:57:33 +020021
22function showVariablesInMessage(variables, msg) {
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020023 let regex;
24 variables.forEach((value, index) => {
25 value = value.replace(';', ',');
26 regex = new RegExp("'%" + (index + 1) + "'");
27 msg = msg.replace(regex, value);
28 });
29 return msg;
Michael Landoefa037d2017-02-19 12:57:33 +020030}
31
ilanap785dc1e2018-01-08 15:50:18 +020032function parseCatalogExceptionObject(responseJSON) {
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020033 let title, msg;
34 if (
35 responseJSON.requestError &&
36 responseJSON.requestError.policyException
37 ) {
38 title = 'Error: ' + responseJSON.requestError.policyException.messageId;
39 msg = responseJSON.requestError.policyException.text;
40 } else if (
41 responseJSON.requestError &&
42 responseJSON.requestError.serviceException
43 ) {
44 title =
45 'Error: ' + responseJSON.requestError.serviceException.messageId;
46 msg = responseJSON.requestError.serviceException.text;
47 let { variables } = responseJSON.requestError.serviceException;
48 if (variables) {
49 msg = showVariablesInMessage(variables, msg);
50 }
51 } else if (responseJSON.uploadDataErrors) {
52 title = i18n('Error: Upload Data Error');
53 msg = (
54 <SubmitErrorResponse
55 validationResponse={{
56 uploadDataErrors: responseJSON.uploadDataErrors
57 }}
58 />
59 );
60 } else {
61 title = responseJSON.status;
62 msg = responseJSON.message;
63 }
64 return { title, msg };
Michael Landoefa037d2017-02-19 12:57:33 +020065}
66
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020067var errorResponseHandler = error => {
68 let errorData;
69 if (error.data) {
70 errorData = parseCatalogExceptionObject(error.data);
71 } else {
72 errorData = {
73 title: error.statusText,
74 msg: error.responseText ? error.responseText : i18n('GENERIC_ERROR')
75 };
76 }
77 store.dispatch({
78 type: modalActionTypes.GLOBAL_MODAL_ERROR,
79 data: {
80 ...errorData
81 }
82 });
Michael Landoefa037d2017-02-19 12:57:33 +020083};
84
85export default errorResponseHandler;