import { useMemo } from 'react'; import { useRouter } from 'next/router'; import { Flex, Text, theme, Button, Heading, ThemeProvider, ChakraProvider, useColorModeValue, } from '@chakra-ui/react'; import { inRange } from 'lodash'; import type { NextPageContext } from 'next'; interface TError { status: string; code: number; } const ErrorContent = (props: TError) => { const { status, code } = props; const router = useRouter(); const bg = useColorModeValue('white', 'black'); const color = useColorModeValue('black', 'white'); const error400 = useColorModeValue('error.500', 'error.300'); const error500 = useColorModeValue('danger.500', 'danger.300'); const errorColor = { 400: error400, 500: error500 }; const colorScheme = { 400: 'error', 500: 'danger' }; const baseCode = useMemo(() => { return inRange(code, 400, 500) ? 400 : inRange(code, 500, 600) ? 500 : 400; }, [code]); function handleClick(): void { router.push('/'); } return ( {status} {code === 404 && isn't a thing...} ); }; const ErrorPage = (props: TError) => { const { status, code } = props; return ( ); }; ErrorPage.getInitialProps = (ctx: NextPageContext): TError => { const { res, err } = ctx; const code = res ? res.statusCode : err ? err.statusCode ?? 500 : 404; const status = err ? err.message : 'Error'; return { status, code }; }; export default ErrorPage;