diff --git a/js/src/ui/Errors/errors.css b/js/src/ui/Errors/errors.css index 30fd7186a..216993e4f 100644 --- a/js/src/ui/Errors/errors.css +++ b/js/src/ui/Errors/errors.css @@ -17,4 +17,10 @@ .container { z-index: 10101 !important; + + button { + color: white !important; + margin: 0 !important; + margin-right: -16px !important; + } } diff --git a/js/src/ui/Errors/errors.js b/js/src/ui/Errors/errors.js index e29e002b9..fe23a6f40 100644 --- a/js/src/ui/Errors/errors.js +++ b/js/src/ui/Errors/errors.js @@ -23,9 +23,12 @@ import { closeErrors } from './actions'; import styles from './errors.css'; +const ERROR_REGEX = /-(\d+): (.+)$/; + class Errors extends Component { static propTypes = { message: PropTypes.string, + error: PropTypes.object, visible: PropTypes.bool, onCloseErrors: PropTypes.func }; @@ -37,22 +40,60 @@ class Errors extends Component { return null; } + const text = this.getErrorMessage(); + return ( + open + action='close' + autoHideDuration={ 60000 } + message={ text } + onActionTouchTap={ onCloseErrors } + onRequestClose={ this.onRequestClose } + bodyStyle={ { + whiteSpace: 'pre-line', + height: 'auto' + } } + contentStyle={ { + display: 'flex', + flexDirection: 'row', + lineHeight: '1.5em', + padding: '0.75em 0', + alignItems: 'center' + } } + /> ); } + + getErrorMessage = () => { + const { message, error } = this.props; + + if (!error.text && !ERROR_REGEX.test(message)) { + return message; + } + + const matches = ERROR_REGEX.exec(message); + + const code = error.code || parseInt(matches[1]) * -1; + const text = error.text || matches[2]; + + return `[${code}] ${text}`; + } + + onRequestClose = (reason) => { + if (reason === 'timeout') { + this.props.onCloseErrors(); + } + } } function mapStateToProps (state) { - const { message, visible } = state.errors; + const { message, error, visible } = state.errors; return { message, + error, visible }; } diff --git a/js/src/ui/Errors/reducers.js b/js/src/ui/Errors/reducers.js index f04a7529d..ed4fcba34 100644 --- a/js/src/ui/Errors/reducers.js +++ b/js/src/ui/Errors/reducers.js @@ -19,7 +19,8 @@ function newError (state, action) { return Object.assign({}, state, { visible: true, - message: error.message + message: error.message, + error }); }