DocSpace-buildtools/packages/asc-web-common/api/client.js
AlexeySafronov 8e1f5b30b5 Merge branch 'develop' into feature/workspaces
# Conflicts:
#	products/ASC.Files/Client/package.json
#	products/ASC.Files/Client/yarn.lock
#	products/ASC.People/Client/package.json
#	products/ASC.People/Client/yarn.lock
#	web/ASC.Web.Client/package.json
#	web/ASC.Web.Client/src/App.js
#	web/ASC.Web.Client/yarn.lock
#	web/ASC.Web.Common/package.json
#	web/ASC.Web.Components/yarn.lock
#	yarn.lock
2021-03-13 16:01:41 +03:00

95 lines
2.2 KiB
JavaScript

import axios from "axios";
import config from "../package.json";
//import history from "../history";
const baseURL = `${window.location.origin}/${config.api.url}`;
const apiTimeout = config.api.timeout;
/**
* @description axios instance for ajax requests
*/
const client = axios.create({
baseURL: baseURL,
responseType: "json",
timeout: apiTimeout, // default is `0` (no timeout)
});
client.interceptors.response.use(
(response) => {
return response;
},
(error) => {
if (!error.response) return Promise.reject(error);
switch (true) {
case error.response.status === 401:
setWithCredentialsStatus(false);
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 setWithCredentialsStatus(state) {
client.defaults.withCredentials = state;
}
export function setClientBasePath(path) {
if (!path) return;
client.defaults.baseURL = path;
}
const getResponseError = (res) => {
if (!res) return;
if (res.data && res.data.error) {
return res.data.error.message;
}
if (res.isAxiosError && res.message) {
console.error(res.message);
return 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) {
const error = getResponseError(response);
if (error) throw new Error(error);
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 (errorResponse) {
console.error("Request Failed:", errorResponse);
const errorText = errorResponse.response
? getResponseError(errorResponse.response)
: errorResponse.message;
return Promise.reject(errorText || errorResponse);
};
return client(options).then(onSuccess).catch(onError);
};