datahub/datahub-web-react/src/app/shared/handleGraphQLError.ts

41 lines
1.3 KiB
TypeScript

import { ErrorResponse } from '@apollo/client/link/error';
import { message } from 'antd';
import { ErrorCodes } from './constants';
interface Props {
error: ErrorResponse;
defaultMessage: string;
permissionMessage?: string;
badRequestMessage?: string;
serverErrorMessage?: string;
}
export default function handleGraphQLError({
error,
defaultMessage,
permissionMessage = 'Unauthorized. Please contact your DataHub administrator.',
badRequestMessage,
serverErrorMessage,
}: Props) {
// destroy the default error message from errorLink in App.tsx
message.destroy();
const { graphQLErrors } = error;
if (graphQLErrors && graphQLErrors.length) {
const { extensions } = graphQLErrors[0];
const errorCode = extensions && (extensions.code as number);
if (errorCode === ErrorCodes.Forbidden) {
message.error(permissionMessage);
return;
}
if (errorCode === ErrorCodes.BadRequest && badRequestMessage) {
message.error(badRequestMessage);
return;
}
if (errorCode === ErrorCodes.ServerError && serverErrorMessage) {
message.error(serverErrorMessage);
return;
}
}
message.error(defaultMessage);
}