diff options
Diffstat (limited to 'webapp/components/error_bar.jsx')
-rw-r--r-- | webapp/components/error_bar.jsx | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/webapp/components/error_bar.jsx b/webapp/components/error_bar.jsx new file mode 100644 index 000000000..572f96e02 --- /dev/null +++ b/webapp/components/error_bar.jsx @@ -0,0 +1,85 @@ +// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import ErrorStore from 'stores/error_store.jsx'; +import * as Utils from 'utils/utils.jsx'; + +import React from 'react'; + +export default class ErrorBar extends React.Component { + constructor() { + super(); + + this.onErrorChange = this.onErrorChange.bind(this); + this.handleClose = this.handleClose.bind(this); + + this.state = ErrorStore.getLastError(); + } + + isValidError(s) { + if (!s) { + return false; + } + + if (!s.message) { + return false; + } + + return true; + } + + componentWillMount() { + if (global.window.mm_config.SendEmailNotifications === 'false') { + ErrorStore.storeLastError({message: Utils.localizeMessage('error_bar.preview_mode', 'Preview Mode: Email notifications have not been configured')}); + this.onErrorChange(); + } + } + + componentDidMount() { + ErrorStore.addChangeListener(this.onErrorChange); + } + + componentWillUnmount() { + ErrorStore.removeChangeListener(this.onErrorChange); + } + + onErrorChange() { + var newState = ErrorStore.getLastError(); + + if (newState) { + this.setState(newState); + } else { + this.setState({message: null}); + } + } + + handleClose(e) { + if (e) { + e.preventDefault(); + } + + ErrorStore.clearLastError(); + this.setState({message: null}); + } + + render() { + if (!this.isValidError(this.state)) { + return <div/>; + } + + return ( + <div className='error-bar'> + <span>{this.state.message}</span> + <a + href='#' + className='error-bar__close' + onClick={this.handleClose} + > + × + </a> + </div> + ); + } +} + +export default ErrorBar; |