61 lines
1.4 KiB
JavaScript
61 lines
1.4 KiB
JavaScript
import axios from "axios";
|
|
|
|
import { getToken, urlHasParams } from "@utils/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;
|