Skip to content

Commit

Permalink
add generic error boundary, apply to preview iframe
Browse files Browse the repository at this point in the history
  • Loading branch information
erquhart committed Nov 7, 2017
1 parent a14f253 commit 0afa73d
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 6 deletions.
17 changes: 11 additions & 6 deletions src/components/PreviewPane/PreviewPane.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { List, Map } from 'immutable';
import ImmutablePropTypes from 'react-immutable-proptypes';
import Frame from 'react-frame-component';
import registry from '../../lib/registry';
import ErrorBoundary from '../UI/ErrorBoundary/ErrorBoundary';
import { resolveWidget } from '../Widgets';
import { selectTemplateName, selectInferedField } from '../../reducers/collections';
import { INFERABLE_FIELDS } from '../../constants/fieldInference';
Expand Down Expand Up @@ -144,16 +145,20 @@ export default class PreviewPane extends React.Component {
return <Frame className="nc-previewPane-frame" head={styleEls} />;
}

return (<Frame
className="nc-previewPane-frame"
head={styleEls}
initialContent={`
const initialContent = `
<!DOCTYPE html>
<html>
<head><base target="_blank"/></head>
<body><div></div></body>
</html>`}
><PreviewContent {...{ previewComponent, previewProps }}/></Frame>);
</html>
`;
return (
<ErrorBoundary>
<Frame className="nc-previewPane-frame" head={styleEls} initialContent={initialContent}>
<PreviewContent {...{ previewComponent, previewProps }}/>
</Frame>
</ErrorBoundary>
);
}
}

Expand Down
8 changes: 8 additions & 0 deletions src/components/UI/ErrorBoundary/ErrorBoundary.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.nc-errorBoundary {
padding: 0 20px;
}

.nc-errorBoundary-heading,
.nc-errorBoundary-link {
color: var(--errorColor);
}
35 changes: 35 additions & 0 deletions src/components/UI/ErrorBoundary/ErrorBoundary.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import PropTypes from 'prop-types';
import React from 'react';

const ErrorComponent = () => {
const issueUrl = "https://github.com/netlify/netlify-cms/issues/new";
return (
<div className="nc-errorBoundary">
<h1 className="nc-errorBoundary-heading">Sorry!</h1>
<p>
<span>There's been an error - please </span>
<a href={issueUrl} target="_blank" className="nc-errorBoundary-link">report it</a>!
</p>
</div>
);
};

export default class ErrorBoundary extends React.Component {
static propTypes = {
render: PropTypes.element,
};

state = {
hasError: false,
};

componentDidCatch(error) {
console.error(error);
this.setState({ hasError: true });
}

render() {
const errorComponent = this.props.errorComponent || <ErrorComponent/>;
return this.state.hasError ? errorComponent : this.props.children;
}
}
1 change: 1 addition & 0 deletions src/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
@import "./components/UI/icon/Icon.css";
@import "./components/UI/loader/Loader.css";
@import "./components/UI/toast/Toast.css";
@import "./components/UI/ErrorBoundary/ErrorBoundary.css";
@import "./components/UnpublishedListing/UnpublishedListing.css";
@import "./components/UnpublishedListing/UnpublishedListingCardMeta.css";
@import "./components/Widgets/BooleanControl.css";
Expand Down

0 comments on commit 0afa73d

Please sign in to comment.