|
import { Authorization } from '@/constants/authorization'; |
|
import { ResponseType } from '@/interfaces/database/base'; |
|
import i18n from '@/locales/config'; |
|
import authorizationUtil, { |
|
getAuthorization, |
|
} from '@/utils/authorization-util'; |
|
import { message, notification } from 'antd'; |
|
import { history } from 'umi'; |
|
import { RequestMethod, extend } from 'umi-request'; |
|
import { convertTheKeysOfTheObjectToSnake } from './common-util'; |
|
|
|
const FAILED_TO_FETCH = 'Failed to fetch'; |
|
|
|
const RetcodeMessage = { |
|
200: i18n.t('message.200'), |
|
201: i18n.t('message.201'), |
|
202: i18n.t('message.202'), |
|
204: i18n.t('message.204'), |
|
400: i18n.t('message.400'), |
|
401: i18n.t('message.401'), |
|
403: i18n.t('message.403'), |
|
404: i18n.t('message.404'), |
|
406: i18n.t('message.406'), |
|
410: i18n.t('message.410'), |
|
413: i18n.t('message.413'), |
|
422: i18n.t('message.422'), |
|
500: i18n.t('message.500'), |
|
502: i18n.t('message.502'), |
|
503: i18n.t('message.503'), |
|
504: i18n.t('message.504'), |
|
}; |
|
type ResultCode = |
|
| 200 |
|
| 201 |
|
| 202 |
|
| 204 |
|
| 400 |
|
| 401 |
|
| 403 |
|
| 404 |
|
| 406 |
|
| 410 |
|
| 413 |
|
| 422 |
|
| 500 |
|
| 502 |
|
| 503 |
|
| 504; |
|
|
|
const errorHandler = (error: { |
|
response: Response; |
|
message: string; |
|
}): Response => { |
|
const { response } = error; |
|
if (error.message === FAILED_TO_FETCH) { |
|
notification.error({ |
|
description: i18n.t('message.networkAnomalyDescription'), |
|
message: i18n.t('message.networkAnomaly'), |
|
}); |
|
} else { |
|
if (response && response.status) { |
|
const errorText = |
|
RetcodeMessage[response.status as ResultCode] || response.statusText; |
|
const { status, url } = response; |
|
notification.error({ |
|
message: `${i18n.t('message.requestError')} ${status}: ${url}`, |
|
description: errorText, |
|
}); |
|
} |
|
} |
|
return response; |
|
}; |
|
|
|
const request: RequestMethod = extend({ |
|
errorHandler, |
|
timeout: 300000, |
|
getResponse: true, |
|
}); |
|
|
|
request.interceptors.request.use((url: string, options: any) => { |
|
const data = convertTheKeysOfTheObjectToSnake(options.data); |
|
const params = convertTheKeysOfTheObjectToSnake(options.params); |
|
|
|
return { |
|
url, |
|
options: { |
|
...options, |
|
data, |
|
params, |
|
headers: { |
|
...(options.skipToken |
|
? undefined |
|
: { [Authorization]: getAuthorization() }), |
|
...options.headers, |
|
}, |
|
interceptors: true, |
|
}, |
|
}; |
|
}); |
|
|
|
request.interceptors.response.use(async (response: any, options) => { |
|
if (response?.status === 413 || response?.status === 504) { |
|
message.error(RetcodeMessage[response?.status as ResultCode]); |
|
} |
|
|
|
if (options.responseType === 'blob') { |
|
return response; |
|
} |
|
|
|
const data: ResponseType = await response.clone().json(); |
|
|
|
if (data.code === 401 || data.code === 401) { |
|
notification.error({ |
|
message: data.message, |
|
description: data.message, |
|
duration: 3, |
|
}); |
|
authorizationUtil.removeAll(); |
|
history.push('/login'); |
|
} else if (data.code !== 0) { |
|
if (data.code === 100) { |
|
message.error(data.message); |
|
} else { |
|
notification.error({ |
|
message: `${i18n.t('message.hint')} : ${data.code}`, |
|
description: data.message, |
|
duration: 3, |
|
}); |
|
} |
|
|
|
return response; |
|
} else { |
|
return response; |
|
} |
|
}); |
|
|
|
export default request; |
|
|
|
export const get = (url: string) => { |
|
return request.get(url); |
|
}; |
|
|
|
export const post = (url: string, body: any) => { |
|
return request.post(url, { data: body }); |
|
}; |
|
|
|
export const drop = () => {}; |
|
|
|
export const put = () => {}; |
|
|