omnivore/packages/web/components/templates/ErrorLayout.tsx

44 lines
1.4 KiB
TypeScript
Raw Permalink Normal View History

import { VStack, HStack, SpanBox } from '../elements/LayoutPrimitives'
2022-02-11 17:24:33 +00:00
import { StyledText } from '../elements/StyledText'
import Link from 'next/link'
2022-02-25 21:50:59 +00:00
import { Button } from '../elements/Button'
import { useGetViewerQuery } from '../../lib/networking/queries/useGetViewerQuery'
import { useGetViewer } from '../../lib/networking/viewer/useGetViewer'
2022-02-11 17:24:33 +00:00
type ErrorPageStatusCode = 404 | 500
type ErrorLayoutProps = {
2022-02-25 21:50:59 +00:00
message?: string
2022-02-11 17:24:33 +00:00
statusCode: ErrorPageStatusCode
}
export function ErrorLayout(props: ErrorLayoutProps): JSX.Element {
const { data: viewerData } = useGetViewer()
2022-02-11 17:24:33 +00:00
return (
2022-02-25 21:50:59 +00:00
<VStack alignment="center" distribution="start" css={{ height: '100%' }}>
<HStack alignment="center" css={{ mt: '64px', verticalAlign: 'middle' }}>
<StyledText
style="headline"
css={{
marginRight: '25px',
padding: '32px',
borderRight: '1px solid $grayText',
}}
>
2022-02-25 21:50:59 +00:00
{props.statusCode}
</StyledText>
<StyledText style="body">
{props.message ? props.message : 'An error occurred.'}
</StyledText>
2022-02-11 17:24:33 +00:00
</HStack>
2022-02-25 21:50:59 +00:00
<SpanBox css={{ height: '64px' }} />
<Link passHref href={viewerData ? '/home' : '/login'} legacyBehavior>
<Button style="ctaDarkYellow">
{viewerData ? 'Go Home' : 'Login'}
</Button>
2022-02-25 21:50:59 +00:00
</Link>
2022-02-11 17:24:33 +00:00
</VStack>
)
}