Skip to content
Snippets Groups Projects
Commit 2bdd7cb9 authored by Paul Kaplan's avatar Paul Kaplan
Browse files

Move ErrorBoundary back into the app

parent 67982412
No related branches found
No related tags found
No related merge requests found
...@@ -15,6 +15,11 @@ class ErrorBoundary extends React.Component { ...@@ -15,6 +15,11 @@ class ErrorBoundary extends React.Component {
} }
componentDidCatch (error, info) { componentDidCatch (error, info) {
// Error object may be undefined (IE?)
error = error || {
stack: 'Unknown stack',
message: 'Unknown error'
};
// Display fallback UI // Display fallback UI
this.setState({hasError: true}); this.setState({hasError: true});
log.error(`Unhandled Error: ${error.stack}\nComponent stack: ${info.componentStack}`); log.error(`Unhandled Error: ${error.stack}\nComponent stack: ${info.componentStack}`);
......
...@@ -36,7 +36,14 @@ class PreviewModal extends React.Component { ...@@ -36,7 +36,14 @@ class PreviewModal extends React.Component {
this.props.onViewProject(); this.props.onViewProject();
} }
supportedBrowser () { supportedBrowser () {
return !['IE', 'Opera', 'Opera Mini', 'Silk', 'Vivaldi'].includes(platform.name); if (
platform.name === 'IE' ||
platform.name === 'Opera' ||
platform.name === 'Opera Mini' ||
platform.name === 'Silk') {
return false;
}
return true;
} }
render () { render () {
return (this.supportedBrowser() ? return (this.supportedBrowser() ?
......
...@@ -9,6 +9,7 @@ import {IntlProvider, updateIntl} from 'react-intl-redux'; ...@@ -9,6 +9,7 @@ import {IntlProvider, updateIntl} from 'react-intl-redux';
import {intlInitialState} from '../reducers/intl.js'; import {intlInitialState} from '../reducers/intl.js';
import {initialState as modeInitialState, setPlayer, setFullScreen} from '../reducers/mode.js'; import {initialState as modeInitialState, setPlayer, setFullScreen} from '../reducers/mode.js';
import reducer from '../reducers/gui'; import reducer from '../reducers/gui';
import ErrorBoundary from '../containers/error-boundary.jsx';
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const enhancer = composeEnhancers( const enhancer = composeEnhancers(
...@@ -70,7 +71,9 @@ const AppStateHOC = function (WrappedComponent) { ...@@ -70,7 +71,9 @@ const AppStateHOC = function (WrappedComponent) {
return ( return (
<Provider store={this.store}> <Provider store={this.store}>
<IntlProvider> <IntlProvider>
<WrappedComponent {...this.props} /> <ErrorBoundary>
<WrappedComponent {...this.props} />
</ErrorBoundary>
</IntlProvider> </IntlProvider>
</Provider> </Provider>
); );
......
import React from 'react';
import ErrorBoundary from '../containers/error-boundary.jsx';
/*
* Higher Order Component to provide error boundary for wrapped component
* @param {React.Component} WrappedComponent - component to provide state for
* @returns {React.Component} component with error boundary
*/
const ErrorBoundaryHOC = function (WrappedComponent) {
const ErrorBoundaryWrapper = props => (
<ErrorBoundary>
<WrappedComponent {...props} />
</ErrorBoundary>
);
return ErrorBoundaryWrapper;
};
export default ErrorBoundaryHOC;
...@@ -5,7 +5,6 @@ import Modal from 'react-modal'; ...@@ -5,7 +5,6 @@ import Modal from 'react-modal';
import analytics from '../lib/analytics'; import analytics from '../lib/analytics';
import GUI from '../containers/gui.jsx'; import GUI from '../containers/gui.jsx';
import ErrorBoundaryHOC from './error-boundary-hoc.jsx';
import styles from './index.css'; import styles from './index.css';
...@@ -17,12 +16,10 @@ if (process.env.NODE_ENV === 'production' && typeof window === 'object') { ...@@ -17,12 +16,10 @@ if (process.env.NODE_ENV === 'production' && typeof window === 'object') {
// Register "base" page view // Register "base" page view
analytics.pageview('/'); analytics.pageview('/');
const App = ErrorBoundaryHOC(GUI);
const appTarget = document.createElement('div'); const appTarget = document.createElement('div');
appTarget.className = styles.app; appTarget.className = styles.app;
document.body.appendChild(appTarget); document.body.appendChild(appTarget);
Modal.setAppElement(appTarget); Modal.setAppElement(appTarget);
ReactDOM.render(<App />, appTarget); ReactDOM.render(<GUI />, appTarget);
...@@ -3,7 +3,6 @@ import ReactDOM from 'react-dom'; ...@@ -3,7 +3,6 @@ import ReactDOM from 'react-dom';
import Box from '../components/box/box.jsx'; import Box from '../components/box/box.jsx';
import GUI from '../containers/gui.jsx'; import GUI from '../containers/gui.jsx';
import ErrorBoundaryHOC from './error-boundary-hoc.jsx';
if (process.env.NODE_ENV === 'production' && typeof window === 'object') { if (process.env.NODE_ENV === 'production' && typeof window === 'object') {
// Warn before navigating away // Warn before navigating away
...@@ -20,9 +19,7 @@ const Player = () => ( ...@@ -20,9 +19,7 @@ const Player = () => (
</Box> </Box>
); );
const App = ErrorBoundaryHOC(Player);
const appTarget = document.createElement('div'); const appTarget = document.createElement('div');
document.body.appendChild(appTarget); document.body.appendChild(appTarget);
ReactDOM.render(<App />, appTarget); ReactDOM.render(<Player />, appTarget);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment