import { Component, type ReactNode } from "react"; import Navigation from "./Navigation.js"; import { Code, Container, Heading, Text } from "@chakra-ui/react"; interface ErrorState { error: string | null; errored: boolean; } type Props = { [k: string]: any; children: ReactNode; }; export default class Fallback extends Component<Props, ErrorState> { constructor(props: Props) { super(props); this.state = { error: null, errored: false }; } static getDerivedStateFromError(error: Error) { return { error, errored: true }; } render() { if (!this.state.errored) return this.props.children; return ( <> <Navigation /> <Container maxW="container.xl" pb="100px"> <Heading>Oops! Something broke.</Heading> <Text fontSize="xl">See the details below</Text> <br /> <Text>{this.state.error?.toString()}</Text> </Container> <Container maxW="container.xl"> {/* @ts-expect-error The stack property should always exist */} <Code>{this.state.error.stack}</Code> </Container> </> ); } }