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 3.8KB

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