55 lines
1.3 KiB
JavaScript
55 lines
1.3 KiB
JavaScript
import axios from 'axios';
|
|
import {getToken, urlHasParams} from "../helper";
|
|
|
|
|
|
|
|
const instance = axios.create({
|
|
baseURL: process.env.REACT_APP_API_URL,
|
|
validateStatus(status) {
|
|
return status;
|
|
},
|
|
});
|
|
|
|
export const apiRequest = (url, {
|
|
method = 'get', params, data,
|
|
headers = {
|
|
'Access-Control-Allow-Origin': '*',
|
|
'Content-Type': 'application/json'
|
|
},
|
|
} = {}) => {
|
|
const fullHeaders = {...headers, ...getToken()};
|
|
let urWithParams = urlHasParams(url);
|
|
|
|
|
|
return instance
|
|
.request({
|
|
url: urWithParams,
|
|
method,
|
|
params,
|
|
data,
|
|
headers: {...fullHeaders},
|
|
})
|
|
.then(response => new Promise(resolve => {
|
|
if (response.data.redirect || response.status === 401) {
|
|
window.location.replace('/auth');
|
|
localStorage.clear();
|
|
// dispatch(auth(false));
|
|
}
|
|
return resolve(response)
|
|
}))
|
|
.then(response => new Promise(resolve => resolve(response.data)))
|
|
};
|
|
|
|
const RequestError = (code, msg, data) => {
|
|
const description = msg ? `- ${msg}` : '';
|
|
|
|
this.name = 'RequestError';
|
|
this.message = `API returned: ${code}${description}.`;
|
|
this.code = code;
|
|
this.description = msg;
|
|
this.data = data;
|
|
};
|
|
|
|
RequestError.prototype = Object.create(Error.prototype);
|
|
RequestError.prototype.constructor = RequestError;
|