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.

index.js 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import axios from "axios";
  2. import queryString from "qs";
  3. const request = axios.create({
  4. // baseURL: "http://192.168.88.150:3001/",
  5. // baseURL: "http://192.168.88.175:3005/",
  6. baseURL: "https://trampa-api-test.dilig.net/",
  7. headers: {
  8. "Content-Type": "application/json",
  9. },
  10. // withCredentials: true,
  11. paramsSerializer: (params) =>
  12. queryString.stringify(params, { arrayFormat: "comma" }),
  13. });
  14. export const getRequest = (url, params = null, options = null) => {
  15. return request.get(url, { params, ...options });
  16. };
  17. export const postRequest = (url, data, params = null, options = null) =>
  18. request.post(url, data, { params, ...options });
  19. export const putRequest = (url, data, params = null, options = null) =>
  20. request.put(url, data, { params, ...options });
  21. export const patchRequest = (url, data, params = null, options = null) =>
  22. request.patch(url, data, { params, ...options });
  23. export const deleteRequest = (url, params = null, options = null) =>
  24. request.delete(url, { params, ...options });
  25. export const downloadRequest = (url, params = null, options = null) =>
  26. request.get(url, { params, ...options, responseType: "blob" });
  27. export const replaceInUrl = (url, pathVariables = {}) => {
  28. const keys = Object.keys(pathVariables);
  29. if (!keys.length) {
  30. return url;
  31. }
  32. return keys.reduce(
  33. (acc, key) => acc.replace(`{${key}}`, pathVariables[`${key}`]),
  34. url
  35. );
  36. };
  37. export const addHeaderToken = (token) => {
  38. request.defaults.headers.Authorization = `Bearer ${token}`;
  39. };
  40. export const addHeaderCookie = (key, value) => {
  41. request.defaults.headers[`${key}`] = value;
  42. };
  43. export const removeHeaderToken = () => {
  44. delete request.defaults.headers.Authorization;
  45. };
  46. // If you pass function to interceptor of axios, it only adds that function
  47. // to existing array of interceptor functions. That causes that same function
  48. // of interceptors getting called multiple times instead of just one time, as it
  49. // is supposed to do. Thats why there is 'global' axios interceptor array, which indicates
  50. // axios to eject previous interceptor. This approach requires that every middleware has its
  51. // unique name from which it is being recognized. Every object in those arrays contains
  52. // interceptor name and ID of interceptor function.
  53. let axiosInterceptorRequests = [];
  54. let axiosInterceptorResponses = [];
  55. export const attachPostRequestListener = (
  56. postRequestListener,
  57. interceptorName
  58. ) => {
  59. let previousAxiosInterceptor = axiosInterceptorResponses.find(
  60. (item) => item.name === interceptorName
  61. );
  62. let previousAxiosInterceptorResponses = axiosInterceptorResponses;
  63. if (previousAxiosInterceptor !== undefined) {
  64. request.interceptors.response.eject(previousAxiosInterceptor.interceptorID);
  65. previousAxiosInterceptorResponses = axiosInterceptorResponses.filter(
  66. (item) => item.interceptorID !== previousAxiosInterceptor.interceptorID
  67. );
  68. }
  69. let axiosInterceptorID = request.interceptors.response.use(
  70. (response) => response,
  71. (response) => postRequestListener(response)
  72. );
  73. previousAxiosInterceptorResponses.push({
  74. name: interceptorName,
  75. interceptorID: axiosInterceptorID,
  76. });
  77. axiosInterceptorResponses = [...previousAxiosInterceptorResponses];
  78. };
  79. export const attachBeforeRequestListener = (
  80. beforeRequestListener,
  81. interceptorName
  82. ) => {
  83. let previousAxiosInterceptor = axiosInterceptorRequests.find(
  84. (item) => item.name === interceptorName
  85. );
  86. let previousAxiosInterceptorRequests = axiosInterceptorRequests;
  87. if (previousAxiosInterceptor !== undefined) {
  88. request.interceptors.request.eject(previousAxiosInterceptor.interceptorID);
  89. previousAxiosInterceptorRequests = axiosInterceptorRequests.filter(
  90. (item) => item.interceptorID !== previousAxiosInterceptor.interceptorID
  91. );
  92. }
  93. let axiosInterceptorID = request.interceptors.request.use(
  94. (response) => beforeRequestListener(response),
  95. (response) => response
  96. );
  97. previousAxiosInterceptorRequests.push({
  98. name: interceptorName,
  99. interceptorID: axiosInterceptorID,
  100. });
  101. axiosInterceptorRequests = [...previousAxiosInterceptorRequests];
  102. };
  103. export const apiDefaultUrl = request.defaults.baseURL;