balibabu
feat: Extract the code for building categorize operator coordinates to hooks.ts #1739 (#2005)
16f8eca
| 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'), | |
| 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 | |
| | 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 (options.responseType === 'blob') { | |
| return response; | |
| } | |
| const data: ResponseType = await response.clone().json(); | |
| if (data.retcode === 401 || data.retcode === 401) { | |
| notification.error({ | |
| message: data.retmsg, | |
| description: data.retmsg, | |
| duration: 3, | |
| }); | |
| authorizationUtil.removeAll(); | |
| history.push('/login'); // Will not jump to the login page | |
| } else if (data.retcode !== 0) { | |
| if (data.retcode === 100) { | |
| message.error(data.retmsg); | |
| } else { | |
| notification.error({ | |
| message: `${i18n.t('message.hint')} : ${data.retcode}`, | |
| description: data.retmsg, | |
| duration: 3, | |
| }); | |
| } | |
| return response; | |
| } else { | |
| return response; | |
| } | |
| }); | |
| export default request; | |