mirror of https://github.com/abpframework/abp.git
csharpabpc-sharpframeworkblazoraspnet-coredotnet-coreaspnetcorearchitecturesaasdomain-driven-designangularmulti-tenancy
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
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',
|
|
});
|
|
}
|
|
|