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.0KB

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