import { Component, ReactNode } from 'react'; import withStyles, { WithStylesProps } from 'react-jss'; import { defineMessages, injectIntl, IntlShape } from 'react-intl'; import Button from '../../ui/button'; import { H1 } from '../../ui/headline'; import styles from './styles'; const messages = defineMessages({ headline: { id: 'app.errorHandler.headline', defaultMessage: 'Something went wrong.', }, action: { id: 'app.errorHandler.action', defaultMessage: 'Reload', }, }); interface ErrorBoundaryProps extends WithStylesProps { intl: IntlShape; } class ErrorBoundary extends Component { state = { hasError: false, }; componentDidCatch(): void { this.setState({ hasError: true }); } render(): ReactNode { const { classes, intl } = this.props; if (this.state.hasError) { return (

{intl.formatMessage(messages.headline)}

); } return this.props.children; } } export default withStyles(styles, { injectTheme: true })( injectIntl<'intl', ErrorBoundaryProps>(ErrorBoundary), );