diff --git a/web/src/App.jsx b/web/src/App.jsx
index b2488a93d7..09bc2d5d42 100644
--- a/web/src/App.jsx
+++ b/web/src/App.jsx
@@ -30,6 +30,7 @@ import {
} from 'patternfly-react'
import * as moment from 'moment'
+import ErrorBoundary from './containers/ErrorBoundary'
import logo from './images/logo.png'
import { routes } from './routes'
import { fetchConfigErrorsAction } from './actions/configErrors'
@@ -278,7 +279,9 @@ class App extends React.Component {
{errors.length > 0 && this.renderErrors(errors)}
- {this.renderContent()}
+
+ {this.renderContent()}
+
)
diff --git a/web/src/containers/ErrorBoundary.jsx b/web/src/containers/ErrorBoundary.jsx
new file mode 100644
index 0000000000..d45ea4e456
--- /dev/null
+++ b/web/src/containers/ErrorBoundary.jsx
@@ -0,0 +1,43 @@
+// Copyright 2019 Red Hat, Inc
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License. You may obtain
+// a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations
+// under the License.
+
+import React from 'react'
+import PropTypes from 'prop-types'
+
+
+class ErrorBoundary extends React.Component {
+ static propTypes = {
+ children: PropTypes.object,
+ }
+
+ state = {
+ hasError: false
+ }
+
+ componentDidCatch() {
+ this.setState({
+ hasError: true
+ })
+ }
+
+ render() {
+ if (this.state.hasError) {
+ return Something went wrong.
+ }
+
+ return this.props.children
+ }
+}
+
+export default ErrorBoundary