diff options
Diffstat (limited to 'webapp/components/post_view/failed_post_options')
-rw-r--r-- | webapp/components/post_view/failed_post_options/failed_post_options.jsx | 94 | ||||
-rw-r--r-- | webapp/components/post_view/failed_post_options/index.js | 24 |
2 files changed, 118 insertions, 0 deletions
diff --git a/webapp/components/post_view/failed_post_options/failed_post_options.jsx b/webapp/components/post_view/failed_post_options/failed_post_options.jsx new file mode 100644 index 000000000..f28de343b --- /dev/null +++ b/webapp/components/post_view/failed_post_options/failed_post_options.jsx @@ -0,0 +1,94 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import {createPost} from 'actions/post_actions.jsx'; + +import React from 'react'; +import PropTypes from 'prop-types'; +import {FormattedMessage} from 'react-intl'; + +export default class FailedPostOptions extends React.Component { + static propTypes = { + + /* + * The failed post + */ + post: PropTypes.object.isRequired, + actions: PropTypes.shape({ + + /** + * The function to delete the post + */ + removePost: PropTypes.func.isRequired + }).isRequired + } + + constructor(props) { + super(props); + + this.retryPost = this.retryPost.bind(this); + this.cancelPost = this.cancelPost.bind(this); + + this.submitting = false; + + this.state = {}; + } + + retryPost(e) { + e.preventDefault(); + + if (this.submitting) { + return; + } + + this.submitting = true; + + const post = {...this.props.post}; + Reflect.deleteProperty(post, 'id'); + createPost(post, + () => { + this.submitting = false; + }, + (err) => { + if (err.id === 'api.post.create_post.root_id.app_error') { + this.showPostDeletedModal(); + } else { + this.forceUpdate(); + } + + this.submitting = false; + } + ); + } + + cancelPost(e) { + e.preventDefault(); + this.props.actions.removePost(this.props.post); + } + + render() { + return (<span className='pending-post-actions'> + <a + className='post-retry' + href='#' + onClick={this.retryPost} + > + <FormattedMessage + id='pending_post_actions.retry' + defaultMessage='Retry' + /> + </a> + {' - '} + <a + className='post-cancel' + href='#' + onClick={this.cancelPost} + > + <FormattedMessage + id='pending_post_actions.cancel' + defaultMessage='Cancel' + /> + </a> + </span>); + } +} diff --git a/webapp/components/post_view/failed_post_options/index.js b/webapp/components/post_view/failed_post_options/index.js new file mode 100644 index 000000000..bb8dde893 --- /dev/null +++ b/webapp/components/post_view/failed_post_options/index.js @@ -0,0 +1,24 @@ +// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import {connect} from 'react-redux'; +import {bindActionCreators} from 'redux'; +import {removePost} from 'mattermost-redux/actions/posts'; + +import FailedPostOptions from './failed_post_options.jsx'; + +function mapStateToProps(state, ownProps) { + return { + ...ownProps + }; +} + +function mapDispatchToProps(dispatch) { + return { + actions: bindActionCreators({ + removePost + }, dispatch) + }; +} + +export default connect(mapStateToProps, mapDispatchToProps)(FailedPostOptions); |