import { Dispatch } from 'react' import axios from 'axios' // import { clearUserInfo } from 'state/actions' // create an axios instance const request = axios.create({ baseURL: process.env.REACT_APP_REQUEST_URL, timeout: 10000, // request timeout }) let hasInit = false export const initAxios = (dispatch: Dispatch, toast) => { if (hasInit) return hasInit = true // request interceptor request.interceptors.request.use( (memo: any) => { // do something before request is sent memo.headers.token = localStorage.getItem('token') return memo }, (error) => { return Promise.reject(error) }, ) // response interceptor request.interceptors.response.use( (response) => { const res: any = response.data if (res.code !== 200) { if (res.code === 401) { // dispatch(clearUserInfo()) toast.toastError('Login expiration') return Promise.reject(new Error('Login expiration')) } toast.toastError(res.msg) return Promise.reject(res.msg || 'Error') } return res.data }, (error) => { return Promise.reject(error) }, ) } export default request