rokumatsumoto/boyutluseyler

View on GitHub
app/javascript/lib/utils/axios_utils.js

Summary

Maintainability
A
0 mins
Test Coverage
import axios from 'axios';
import csrf from './csrf';

axios.defaults.headers.common[csrf.headerKey] = csrf.token;
// Used by Rails to check if it is a valid XHR request
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

// Maintain a global counter for active requests
// see: spec/support/helpers/wait_for_requests.rb
axios.interceptors.request.use(config => {
  window.activeAxios = window.activeAxios || 0;
  window.activeAxios += 1;

  return config;
});

// Remove the global counter
axios.interceptors.response.use(
  config => {
    window.activeAxios -= 1;

    return config;
  },
  e => {
    window.activeAxios -= 1;

    if (e.response.status === 401) {
      const $notyNotification = document.getElementById('noty_notification');
      if ($notyNotification === null) {
        import('noty')
          .then((Noty) => {
            /* eslint-disable-next-line new-cap */
            new Noty.default({
              type: 'warning',
              layout: 'top',
              id: 'noty_notification',
              timeout: 4000,
              progressBar: true,
              text: "Oturumunuzun süresi doldu veya giriş yapmadınız, giriş sayfasına yönlendiriliyorsunuz.",
              callbacks: {
                afterClose() {
                  window.location.href = '/sign_in';
                },
              },
            }).show();
          })
          .catch(() => {
            window.location.href = '/sign_in';
          });
      }
    }
    return Promise.reject(e);
  },
);

export default axios;

// axios-mock-adapter: https://github.com/ctimmerm/axios-mock-adapter
// axios adapters: https://github.com/axios/axios/tree/master/lib/adapters
// How can you use axios interceptors?
// https://stackoverflow.com/questions/52737078/how-can-you-use-axios-interceptors