import axios, { AxiosResponse } from 'axios'
import { AxiosRequestConfig } from 'axios'
const serviceAxios = axios.create({
baseURL: 'http://jsonplaceholder.typicode.com',
timeout: 5000,
})
serviceAxios.interceptors.response.use(
(response:AxiosResponse) => {
console.log(response);
if(response.status==200){
return response.data
}else{
return requestHandler
}
}
)
interface customDataParams<T> {
data: T,
message: string,
status: boolean
}
type methodType = 'get' | 'post' | 'put' | 'delete'
type paramsData<T> = {
params?: T,
data?: T
}
const RequestAxiosInstance = <T, P>(url: string, method: methodType, params: paramsData<P>|{}, config?: AxiosRequestConfig) => {
const data = serviceAxios<any, customDataParams<T>>({
url,
method,
...params,
...config,
})
return data
}
enum methodTypeMode {
get = 'get',
post = 'post',
put = 'put',
delete = 'delete',
}
const requestHandler = async <T, P>(url: string, method: methodType, paramsData?: P, config?: AxiosRequestConfig) => {
if (method === methodTypeMode.get || method === methodTypeMode.delete) {
return RequestAxiosInstance<T, P>(url, method, { params:{...paramsData} }, config)
} else {
return RequestAxiosInstance<T, P>(url, method, { data: paramsData }, config)
}
}
export default requestHandler