Open Source Web Application Framework for ASP.NET Core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

100 lines
2.8 KiB

import i18n from 'i18n-js';
import { Toast } from 'native-base';
import api from '../api/API';
import LoadingActions from '../store/actions/LoadingActions';
import PersistentStorageActions from '../store/actions/PersistentStorageActions';
export function initAPIInterceptor(store) {
api.interceptors.request.use(
async request => {
const {
persistentStorage: { token, language, tenant },
} = store.getState();
if (!request.headers.Authorization && token && token.access_token) {
request.headers.Authorization = `${token.token_type} ${token.access_token}`;
}
if (!request.headers['Content-Type']) {
request.headers['Content-Type'] = 'application/json';
}
if (!request.headers['Accept-Language'] && language) {
request.headers['Accept-Language'] = language;
}
if (!request.headers.__tenant && tenant && tenant.tenantId) {
request.headers.__tenant = tenant.tenantId;
}
return request;
},
error => console.error(error),
);
api.interceptors.response.use(
response => response,
error => {
store.dispatch(LoadingActions.clear());
const errorRes = error.response;
if (errorRes) {
if (errorRes.headers._abperrorformat && errorRes.status === 401) {
store.dispatch(PersistentStorageActions.setToken({}));
}
showError({ error: errorRes.data.error || {}, status: errorRes.status });
} else {
Toast.show({
title: 'An unexpected error has occurred',
isClosable: true,
duration: 10000,
backgroundColor: 'danger.500',
});
}
return Promise.reject(error);
},
);
}
function showError({ error = {}, status }) {
let message = '';
let title = i18n.t('AbpAccount::DefaultErrorMessage');
if (typeof error === 'string') {
message = error;
} else if (error.details) {
message = error.details;
title = error.message;
} else if (error.message) {
message = error.message;
} else {
switch (status) {
case 401:
title = i18n.t('AbpAccount::DefaultErrorMessage401');
message = i18n.t('AbpAccount::DefaultErrorMessage401Detail');
break;
case 403:
title = i18n.t('AbpAccount::DefaultErrorMessage403');
message = i18n.t('AbpAccount::DefaultErrorMessage403Detail');
break;
case 404:
title = i18n.t('AbpAccount::DefaultErrorMessage404');
message = i18n.t('AbpAccount::DefaultErrorMessage404Detail');
break;
case 500:
title = i18n.t('AbpAccount::500Message');
message = i18n.t('AbpAccount::InternalServerErrorMessage');
break;
default:
break;
}
}
Toast.show({
title: `${title}\n${message}`,
isClosable: true,
duration: 10000,
backgroundColor: 'danger.500',
});
}