import axios { AxiosResponse ,AxiosRequestConfig} from 'axios'
const serviceAxios = axios.create({
baseURL: 'http://jsonplaceholder.typicode.com',
timeout: 5000,
})
serviceAxios.interceptors.request.use(
)
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 = <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