feat: add platform error parser

This commit is contained in:
EnixCoda 2023-01-05 18:37:37 +08:00
parent cb57e95e79
commit 4982b9a1ca
3 changed files with 15 additions and 9 deletions

View file

@ -1,6 +1,6 @@
import { GITEE_OAUTH } from 'env'
import { Base64 } from 'js-base64'
import { platform } from 'platforms'
import { errors, platform } from 'platforms'
import * as React from 'react'
import { resolveGitModules } from 'utils/gitSubmodule'
import { useAfterRedirect } from 'utils/hooks/useFastRedirect'
@ -180,6 +180,10 @@ export const Gitee: Platform = {
usePlatformHooks() {
useProgressBar()
},
mapErrorMessage: (error: Error) =>
({
['Only signed in user is allowed to call APIs.']: errors.BAD_CREDENTIALS,
}[error.message]),
}
export function useGiteeAttachCopySnippetButton(copySnippetButton: boolean) {

View file

@ -29,4 +29,5 @@ type Platform = {
| void
loadWithFastRedirect?(url: string, element: HTMLElement): boolean | void
usePlatformHooks?(): void
mapErrorMessage?: (error: Error) => string | void
}

View file

@ -1,5 +1,5 @@
import { useConfigs } from 'containers/ConfigsContext'
import { errors, platformName } from 'platforms'
import { errors, platform, platformName } from 'platforms'
import { useCallback } from 'react'
import { useLoadedContext } from 'utils/hooks/useLoadedContext'
import { SideBarErrorContext } from '../../containers/ErrorContext'
@ -12,33 +12,34 @@ export function useHandleNetworkError() {
return useCallback(
function handleNetworkError(err: Error) {
if (err.message === errors.EMPTY_PROJECT) {
const message = platform.mapErrorMessage?.(err) || err.message
if (message === errors.EMPTY_PROJECT) {
changeErrorContext('This project seems to be empty.')
return
}
if (err.message === errors.BLOCKED_PROJECT) {
if (message === errors.BLOCKED_PROJECT) {
changeErrorContext('Access to the project is blocked.')
return
}
if (
err.message === errors.NOT_FOUND ||
err.message === errors.BAD_CREDENTIALS ||
err.message === errors.API_RATE_LIMIT
message === errors.NOT_FOUND ||
message === errors.BAD_CREDENTIALS ||
message === errors.API_RATE_LIMIT
) {
changeStateContext('error-due-to-auth')
return
}
if (err.message === errors.CONNECTION_BLOCKED) {
if (message === errors.CONNECTION_BLOCKED) {
if (accessToken) changeErrorContext(`Cannot connect to ${platformName}.`)
else changeStateContext('error-due-to-auth')
return
}
if (err.message === errors.SERVER_FAULT) {
if (message === errors.SERVER_FAULT) {
changeErrorContext(`${platformName} server went down.`)
return
}