import { SimpleCard } from '@shlinkio/shlink-frontend-kit'; import type { ReactNode } from 'react'; import { Component } from 'react'; import { Button } from 'reactstrap'; interface ErrorHandlerState { hasError: boolean; } export const ErrorHandler = ( { location }: Window, { error }: Console, ) => class extends Component<any, ErrorHandlerState> { public constructor(props: object) { super(props); this.state = { hasError: false }; } public static getDerivedStateFromError(): ErrorHandlerState { return { hasError: true }; } public componentDidCatch(e: Error): void { if (process.env.NODE_ENV !== 'development') { error(e); } } public render(): ReactNode { const { hasError } = this.state; if (hasError) { return ( <div className="home"> <SimpleCard className="p-4"> <h1>Oops! This is awkward :S</h1> <p>It seems that something went wrong. Try refreshing the page or just click this button.</p> <br /> <Button outline color="primary" onClick={() => location.reload()}>Take me back</Button> </SimpleCard> </div> ); } const { children } = this.props; return children; } };