From 53ca7636468c1307fc1c10ba77a3d04ec1745975 Mon Sep 17 00:00:00 2001 From: chrisgarrity Date: Mon, 12 Mar 2018 13:53:38 -0400 Subject: [PATCH] Add Error Boundary and Crash message Added all the strings to general l10n as error boundary/crash message applies to all pages. --- src/components/crashmessage/crashmessage.jsx | 38 ++++++++++++++++++ src/components/crashmessage/crashmessage.scss | 22 ++++++++++ .../errorboundary/errorboundary.jsx | 36 +++++++++++++++++ src/components/page/www/page.jsx | 33 ++++++++------- src/l10n.json | 2 + static/images/unhandled.png | Bin 0 -> 32865 bytes 6 files changed, 116 insertions(+), 15 deletions(-) create mode 100644 src/components/crashmessage/crashmessage.jsx create mode 100644 src/components/crashmessage/crashmessage.scss create mode 100644 src/components/errorboundary/errorboundary.jsx create mode 100644 static/images/unhandled.png diff --git a/src/components/crashmessage/crashmessage.jsx b/src/components/crashmessage/crashmessage.jsx new file mode 100644 index 000000000..d66a3c610 --- /dev/null +++ b/src/components/crashmessage/crashmessage.jsx @@ -0,0 +1,38 @@ +const classNames = require('classnames'); +const PropTypes = require('prop-types'); +const React = require('react'); +const FormattedMessage = require('react-intl').FormattedMessage; + +const Button = require('../forms/button.jsx'); + +require('./crashmessage.scss'); + +const CrashMessage = props => ( +
+ +
+

+ +

+

+ +

+ +
+
+); + +CrashMessage.propTypes = { + className: PropTypes.string, + onBack: PropTypes.func +}; + +module.exports = CrashMessage; diff --git a/src/components/crashmessage/crashmessage.scss b/src/components/crashmessage/crashmessage.scss new file mode 100644 index 000000000..5466d61aa --- /dev/null +++ b/src/components/crashmessage/crashmessage.scss @@ -0,0 +1,22 @@ +.crash-container { + @import "../../colors"; + @import "../../frameless"; + + margin: 3rem auto; + + border: 1px solid $ui-border; + border-radius: 10px; + background-color: $background-color; + width: 60%; + overflow: hidden; + text-align: center; + + img { + width: 100%; + } + + .crash-message { + margin: 2rem; + } + +} diff --git a/src/components/errorboundary/errorboundary.jsx b/src/components/errorboundary/errorboundary.jsx new file mode 100644 index 000000000..d678e995d --- /dev/null +++ b/src/components/errorboundary/errorboundary.jsx @@ -0,0 +1,36 @@ +const PropTypes = require('prop-types'); +const React = require('react'); + +const CrashMessageComponent = require('../crashmessage/crashmessage.jsx'); +import log from '../../lib/log.js'; + +class ErrorBoundary extends React.Component { + constructor (props) { + super(props); + this.state = { + hasError: false + }; + } + + componentDidCatch (error, info) { + // Display fallback UI + this.setState({hasError: true}); + log.error(`Unhandled Error: ${error}, info: ${info}`); + } + + handleBack () { + window.history.back(); + } + + render () { + if (this.state.hasError) { + return ; + } + return this.props.children; + } +} +ErrorBoundary.propTypes = { + children: PropTypes.node +}; + +module.exports = ErrorBoundary; diff --git a/src/components/page/www/page.jsx b/src/components/page/www/page.jsx index d286deb2b..b66d7ae97 100644 --- a/src/components/page/www/page.jsx +++ b/src/components/page/www/page.jsx @@ -4,24 +4,27 @@ const React = require('react'); const Navigation = require('../../navigation/www/navigation.jsx'); const Footer = require('../../footer/www/footer.jsx'); +const ErrorBoundary = require('../../errorboundary/errorboundary.jsx'); const Page = props => ( -
- + ); Page.propTypes = { diff --git a/src/l10n.json b/src/l10n.json index a717e23ad..fe4b152ce 100644 --- a/src/l10n.json +++ b/src/l10n.json @@ -2,6 +2,7 @@ "general.accountSettings": "Account settings", "general.about": "About", "general.aboutScratch": "About Scratch", + "general.back": "Back", "general.birthMonth": "Birth Month", "general.birthYear": "Birth Year", "general.donate": "Donate", @@ -73,6 +74,7 @@ "general.tips": "Tips", "general.tipsWindow": "Tips Window", "general.termsOfUse": "Terms of Use", + "general.unhandledError": "We are so sorry, but it looks like Scratch has crashed. This bug has been automatically reported to the Scratch Team.", "general.username": "Username", "general.validationEmail": "Please enter a valid email address", "general.validationEmailMatch": "The emails do not match", diff --git a/static/images/unhandled.png b/static/images/unhandled.png new file mode 100644 index 0000000000000000000000000000000000000000..ae28ed63959cbd067d5cd57ae9332db6950d6511 GIT binary patch literal 32865 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 literal 0 HcmV?d00001