DocSpace-client/web/ASC.Web.Common/src/api/client.js

105 lines
2.4 KiB
JavaScript
Raw Normal View History

import axios from "axios";
import { AUTH_KEY } from "../constants";
2020-09-25 16:14:50 +00:00
//import history from "../history";
const PREFIX = "api";
const VERSION = "2.0";
const baseURL = `${window.location.origin}/${PREFIX}/${VERSION}`;
/**
* @description axios instance for ajax requests
*/
const client = axios.create({
baseURL: baseURL,
responseType: "json",
timeout: 30000 // default is `0` (no timeout)
});
setAuthorizationToken(localStorage.getItem(AUTH_KEY));
client.interceptors.response.use(
response => {
return response;
},
error => {
switch (true) {
case error.response.status === 401:
2020-08-12 13:38:34 +00:00
setAuthorizationToken();
window.location.href = "/login";
break;
case error.response.status === 402:
if (!window.location.pathname.includes("payments")) {
window.location.href = "/payments";
}
break;
default:
break;
}
return Promise.reject(error);
}
);
export function setAuthorizationToken(token) {
client.defaults.withCredentials = true;
if (token) {
localStorage.setItem(AUTH_KEY, true);
} else {
localStorage.clear();
}
}
2019-12-04 14:35:17 +00:00
export function setClientBasePath(path) {
if (!path) return;
2019-12-04 14:35:17 +00:00
client.defaults.baseURL = path;
}
const checkResponseError = res => {
if (!res) return;
if (res.data && res.data.error) {
console.error(res.data.error);
throw new Error(res.data.error.message);
}
if (res.isAxiosError && res.message) {
console.error(res.message);
throw new Error(res.message);
}
};
/**
* @description wrapper for making ajax requests
* @param {object} object with method,url,data etc.
*/
export const request = function(options) {
const onSuccess = function(response) {
checkResponseError(response);
if (!response || !response.data || response.isAxiosError) return null;
if (response.data.hasOwnProperty("total"))
return { total: +response.data.total, items: response.data.response };
return response.data.response;
};
const onError = function(error) {
console.error("Request Failed:", error.config);
if (error.response) {
console.error("Status:", error.response.status);
console.error("Data:", error.response.data);
console.error("Headers:", error.response.headers);
} else {
console.error("Error Message:", error.message);
}
return Promise.reject(error.response || error.message);
};
return client(options)
.then(onSuccess)
.catch(onError);
};