aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/util/ErrorBoundary/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/util/ErrorBoundary/index.js')
-rw-r--r--src/components/util/ErrorBoundary/index.js54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/components/util/ErrorBoundary/index.js b/src/components/util/ErrorBoundary/index.js
new file mode 100644
index 000000000..def01c74f
--- /dev/null
+++ b/src/components/util/ErrorBoundary/index.js
@@ -0,0 +1,54 @@
1import React, { Component } from 'react';
2import injectSheet from 'react-jss';
3import { defineMessages, intlShape } from 'react-intl';
4
5import Button from '../../ui/Button';
6
7import styles from './styles';
8
9const messages = defineMessages({
10 headline: {
11 id: 'app.errorHandler.headline',
12 defaultMessage: '!!!Something went wrong.',
13 },
14 action: {
15 id: 'app.errorHandler.action',
16 defaultMessage: '!!!Reload',
17 },
18});
19
20export default @injectSheet(styles) class ErrorBoundary extends Component {
21 state = {
22 hasError: false,
23 }
24
25 static contextTypes = {
26 intl: intlShape,
27 };
28
29 componentDidCatch(error, info) {
30 this.setState({ hasError: true });
31 }
32
33 render() {
34 const { classes } = this.props;
35 const { intl } = this.context;
36
37 if (this.state.hasError) {
38 return (
39 <div className={classes.component}>
40 <h1 className={classes.title}>
41 {intl.formatMessage(messages.headline)}
42 </h1>
43 <Button
44 label={intl.formatMessage(messages.action)}
45 buttonType="inverted"
46 onClick={() => location.reload()}
47 />
48 </div>
49 );
50 }
51
52 return this.props.children;
53 }
54} \ No newline at end of file