import React, {Component, ErrorInfo, ReactNode} from 'react' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {logger} from '#/logger' import {ErrorScreen} from './error/ErrorScreen' import {CenteredView} from './Views' interface Props { children?: ReactNode renderError?: (error: any) => ReactNode } interface State { hasError: boolean error: any } export class ErrorBoundary extends Component { public state: State = { hasError: false, error: undefined, } public static getDerivedStateFromError(error: Error): State { return {hasError: true, error} } public componentDidCatch(error: Error, errorInfo: ErrorInfo) { logger.error(error, {errorInfo}) } public render() { if (this.state.hasError) { if (this.props.renderError) { return this.props.renderError(this.state.error) } return ( ) } return this.props.children } } function TranslatedErrorScreen({details}: {details?: string}) { const {_} = useLingui() return ( ) }