From 4982b9a1ca59bdd77ad19262d15906b7a98f00bc Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Thu, 5 Jan 2023 18:37:37 +0800 Subject: [PATCH] feat: add platform error parser --- src/platforms/Gitee/index.ts | 6 +++++- src/platforms/platform.d.ts | 1 + src/utils/hooks/useHandleNetworkError.ts | 17 +++++++++-------- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/platforms/Gitee/index.ts b/src/platforms/Gitee/index.ts index 0409b48..b65d2ba 100644 --- a/src/platforms/Gitee/index.ts +++ b/src/platforms/Gitee/index.ts @@ -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) { diff --git a/src/platforms/platform.d.ts b/src/platforms/platform.d.ts index e47cac0..c5356e9 100644 --- a/src/platforms/platform.d.ts +++ b/src/platforms/platform.d.ts @@ -29,4 +29,5 @@ type Platform = { | void loadWithFastRedirect?(url: string, element: HTMLElement): boolean | void usePlatformHooks?(): void + mapErrorMessage?: (error: Error) => string | void } diff --git a/src/utils/hooks/useHandleNetworkError.ts b/src/utils/hooks/useHandleNetworkError.ts index 2e768ad..2138ed8 100644 --- a/src/utils/hooks/useHandleNetworkError.ts +++ b/src/utils/hooks/useHandleNetworkError.ts @@ -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 }