Add network error support to MajorErrorMessage

Now we can use this for more of our like, GraphQL failures!
This commit is contained in:
Emi Matchu 2021-06-12 03:19:09 -07:00
parent 02d7cf73bb
commit 468e662a32

View file

@ -392,7 +392,18 @@ export function logAndCapture(e) {
Sentry.captureException(e); Sentry.captureException(e);
} }
export function MajorErrorMessage({ error }) { export function MajorErrorMessage({ error, variant = "unexpected" }) {
// If this is a GraphQL Bad Request error, show the message of the first
// error the server returned. Otherwise, just use the normal error message!
const message =
error?.networkError?.result?.errors?.[0]?.message || error.message;
// Log the detailed error to the console, so we can have a good debug
// experience without the parent worrying about it!
React.useEffect(() => {
console.error(error);
}, [error]);
return ( return (
<Flex justify="center" marginTop="8"> <Flex justify="center" marginTop="8">
<Grid <Grid
@ -415,15 +426,31 @@ export function MajorErrorMessage({ error }) {
/> />
</Box> </Box>
<Box gridArea="title" fontSize="lg" marginBottom="1"> <Box gridArea="title" fontSize="lg" marginBottom="1">
Ah dang, I broke it 😖 {variant === "unexpected" && <>Ah dang, I broke it 😖</>}
{variant === "network" && <>Oops, it didn't work, sorry 😖</>}
</Box> </Box>
<Box gridArea="description" marginBottom="2"> <Box gridArea="description" marginBottom="2">
{variant === "unexpected" && (
<>
There was an error displaying this page. I'll get info about it There was an error displaying this page. I'll get info about it
automatically, but you can tell me more at{" "} automatically, but you can tell me more at{" "}
<Link href="mailto:matchu@openneo.net" color="green.400"> <Link href="mailto:matchu@openneo.net" color="green.400">
matchu@openneo.net matchu@openneo.net
</Link> </Link>
! !
</>
)}
{variant === "network" && (
<>
There was an error displaying this page. Check your internet
connection and try againand if you keep having trouble, please
tell me more at{" "}
<Link href="mailto:matchu@openneo.net" color="green.400">
matchu@openneo.net
</Link>
!
</>
)}
</Box> </Box>
<Box gridArea="details" fontSize="xs" opacity="0.8"> <Box gridArea="details" fontSize="xs" opacity="0.8">
<WarningIcon <WarningIcon
@ -431,7 +458,7 @@ export function MajorErrorMessage({ error }) {
marginTop="-2px" marginTop="-2px"
aria-label="Error message" aria-label="Error message"
/> />
"{error.message}" "{message}"
</Box> </Box>
</Grid> </Grid>
</Flex> </Flex>