// SPDX-FileCopyrightText: © 2017 EteSync Authors // SPDX-License-Identifier: AGPL-3.0-only import * as React from 'react'; import { store, persistor } from '../store'; import { resetKey } from '../store/actions'; import { EncryptionPasswordError, IntegrityError } from 'etesync'; import PrettyError from '../widgets/PrettyError'; interface PropsType { children: React.ReactNode | React.ReactNode[]; } class ErrorBoundary extends React.Component { public state: { error?: Error; }; constructor(props: PropsType) { super(props); this.state = { }; } public componentDidCatch(error: Error, _info: any) { if (error instanceof EncryptionPasswordError) { store.dispatch(resetKey()); } else if (error instanceof IntegrityError) { persistor.purge(); } this.setState({ error }); } public render() { const { error } = this.state; if (error) { if (error instanceof EncryptionPasswordError) { return (

Wrong Encryption Password

It looks like you've entered the wrong encryption password, please refresh the page and try again.

); } else if (error instanceof IntegrityError) { return (

Integrity Error

Please log out from the menu, refresh the page and try again, and if the problem persists, contact support.

              {error.message}
            
); } } if (error) { return (

Something went wrong!

); } return this.props.children; } } export default ErrorBoundary;