mirror of
https://github.com/ajnart/homarr.git
synced 2025-11-17 02:31:18 +01:00
🥅 Add 500 catching page (#1226)
This commit is contained in:
1
src/images/undraw_bug_fixing_oc-7-a.svg
Normal file
1
src/images/undraw_bug_fixing_oc-7-a.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 40 KiB |
83
src/pages/_error.tsx
Normal file
83
src/pages/_error.tsx
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
import {
|
||||||
|
Accordion,
|
||||||
|
Center,
|
||||||
|
Group,
|
||||||
|
Stack,
|
||||||
|
Text,
|
||||||
|
Title,
|
||||||
|
createStyles,
|
||||||
|
useMantineTheme,
|
||||||
|
} from '@mantine/core';
|
||||||
|
import { IconDeviceDesktop, IconInfoCircle, IconServer } from '@tabler/icons-react';
|
||||||
|
import { NextPageContext } from 'next';
|
||||||
|
import Head from 'next/head';
|
||||||
|
import Image from 'next/image';
|
||||||
|
import imageBugFixing from '~/images/undraw_bug_fixing_oc-7-a.svg';
|
||||||
|
|
||||||
|
function Error({ statusCode }: { statusCode: number }) {
|
||||||
|
const { classes } = useStyles();
|
||||||
|
const theme = useMantineTheme();
|
||||||
|
const getColor = (color: string) => theme.colors[color][theme.colorScheme === 'dark' ? 5 : 7];
|
||||||
|
return (
|
||||||
|
<Center className={classes.root} h="100dvh" maw={400}>
|
||||||
|
<Head>
|
||||||
|
<title>An error occurred • Homarr</title>
|
||||||
|
</Head>
|
||||||
|
<Stack>
|
||||||
|
<Image className={classes.image} src={imageBugFixing} alt="bug illustration" />
|
||||||
|
<Title>An unexpected error has occurred</Title>
|
||||||
|
<Text>
|
||||||
|
This page has crashed unexpectedly. We're sorry for the inconvenience. Please try again or
|
||||||
|
contact an administrator
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Accordion variant="contained">
|
||||||
|
<Accordion.Item value="detailed">
|
||||||
|
<Accordion.Control icon={<IconInfoCircle color={getColor('red')} size="1rem" />}>
|
||||||
|
Detailed error information
|
||||||
|
</Accordion.Control>
|
||||||
|
<Accordion.Panel>
|
||||||
|
<Stack spacing="xs">
|
||||||
|
<Group position="apart">
|
||||||
|
<Text fw="bold">Type</Text>
|
||||||
|
<Text>
|
||||||
|
{statusCode ? (
|
||||||
|
<Group spacing="xs">
|
||||||
|
<IconServer size="1rem" />
|
||||||
|
<Text>Server side</Text>
|
||||||
|
</Group>
|
||||||
|
) : (
|
||||||
|
<Group spacing="xs">
|
||||||
|
<IconDeviceDesktop size="1rem" />
|
||||||
|
<Text>Client side</Text>
|
||||||
|
</Group>
|
||||||
|
)}
|
||||||
|
</Text>
|
||||||
|
</Group>
|
||||||
|
</Stack>
|
||||||
|
</Accordion.Panel>
|
||||||
|
</Accordion.Item>
|
||||||
|
</Accordion>
|
||||||
|
</Stack>
|
||||||
|
</Center>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Error.getInitialProps = ({ res, err }: NextPageContext) => {
|
||||||
|
const statusCode = res ? res.statusCode : err ? err.statusCode : 404;
|
||||||
|
return { statusCode };
|
||||||
|
};
|
||||||
|
|
||||||
|
const useStyles = createStyles(() => ({
|
||||||
|
root: {
|
||||||
|
margin: '0 auto',
|
||||||
|
},
|
||||||
|
image: {
|
||||||
|
maxWidth: 400,
|
||||||
|
maxHeight: 200,
|
||||||
|
display: 'block',
|
||||||
|
margin: '0 auto',
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
export default Error;
|
||||||
Reference in New Issue
Block a user