From 16cee7f0702e7c18d131f0a30c0ba837abcc2a0c Mon Sep 17 00:00:00 2001 From: Reed Garmsen Date: Fri, 25 Sep 2015 14:33:27 -0700 Subject: [PATCH 1/2] Initial changes to how trying to comment on a deleted post is handled --- web/react/components/post_deleted_modal.jsx | 30 +++++++++++++++++++-- web/react/components/rhs_thread.jsx | 7 +++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/web/react/components/post_deleted_modal.jsx b/web/react/components/post_deleted_modal.jsx index d284a9d1b1..024097428d 100644 --- a/web/react/components/post_deleted_modal.jsx +++ b/web/react/components/post_deleted_modal.jsx @@ -2,13 +2,38 @@ // See License.txt for license information. var UserStore = require('../stores/user_store.jsx'); +var AppDispatcher = require('../dispatcher/app_dispatcher.jsx'); +var Constants = require('../utils/constants.jsx'); +var ActionTypes = Constants.ActionTypes; export default class PostDeletedModal extends React.Component { constructor(props) { super(props); + this.handleClose = this.handleClose.bind(this); + this.state = {}; } + handleClose(e) { + e.preventDefault(); + + AppDispatcher.handleServerAction({ + type: ActionTypes.RECIEVED_SEARCH, + results: null + }); + + AppDispatcher.handleServerAction({ + type: ActionTypes.RECIEVED_SEARCH_TERM, + term: null, + do_search: false, + is_mention_search: false + }); + + AppDispatcher.handleServerAction({ + type: ActionTypes.RECIEVED_POST_SELECTED, + results: null + }); + } render() { var currentUser = UserStore.getCurrentUser(); @@ -37,17 +62,18 @@ export default class PostDeletedModal extends React.Component { className='modal-title' id='myModalLabel' > - Comment could not be posted + Post deleted
-

Someone deleted the message on which you tried to post a comment.

+

The post you were viewing was deleted by the owner.

diff --git a/web/react/components/rhs_thread.jsx b/web/react/components/rhs_thread.jsx index 2f23d80d9f..fdcf618d72 100644 --- a/web/react/components/rhs_thread.jsx +++ b/web/react/components/rhs_thread.jsx @@ -71,6 +71,13 @@ export default class RhsThread extends React.Component { return; } + if (!currentSelected.posts[currentSelected.order[0]]) { + if ($('#post_deleted').length > 0) { + $('#post_deleted').modal('show'); + return; + } + } + var currentPosts = PostStore.getPosts(currentSelected.posts[currentSelected.order[0]].channel_id); if (!currentPosts || currentPosts.order.length === 0) { From be8225b761a3009efd1097a0b4dd4d8f44830a33 Mon Sep 17 00:00:00 2001 From: Reed Garmsen Date: Mon, 5 Oct 2015 16:47:17 -0700 Subject: [PATCH 2/2] Now handles commenting on a deleted post gracefully, and checks for any areas where data may no longer exist once a post has been deleted --- web/react/components/create_comment.jsx | 3 ++- web/react/components/post_deleted_modal.jsx | 18 ++++++++++-------- web/react/components/rhs_thread.jsx | 18 +++++++----------- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/web/react/components/create_comment.jsx b/web/react/components/create_comment.jsx index 9c233ea262..550f85d3da 100644 --- a/web/react/components/create_comment.jsx +++ b/web/react/components/create_comment.jsx @@ -106,10 +106,11 @@ export default class CreateComment extends React.Component { let state = {}; if (err.message === 'Invalid RootId parameter') { + PostStore.removePendingPost(post.channel_id, post.pending_post_id); + if ($('#post_deleted').length > 0) { $('#post_deleted').modal('show'); } - PostStore.removePendingPost(post.pending_post_id); } else { post.state = Constants.POST_FAILED; PostStore.updatePendingPost(post); diff --git a/web/react/components/post_deleted_modal.jsx b/web/react/components/post_deleted_modal.jsx index 024097428d..3f487d20f8 100644 --- a/web/react/components/post_deleted_modal.jsx +++ b/web/react/components/post_deleted_modal.jsx @@ -14,9 +14,12 @@ export default class PostDeletedModal extends React.Component { this.state = {}; } - handleClose(e) { - e.preventDefault(); - + componentDidMount() { + $(React.findDOMNode(this.refs.modal)).on('hidden.bs.modal', () => { + this.handleClose(); + }); + } + handleClose() { AppDispatcher.handleServerAction({ type: ActionTypes.RECIEVED_SEARCH, results: null @@ -56,26 +59,25 @@ export default class PostDeletedModal extends React.Component { data-dismiss='modal' aria-label='Close' > - +

- Post deleted + {'Comment could not be posted'}

-

The post you were viewing was deleted by the owner.

+

{'Someone deleted the message on which you tried to post a comment.'}

diff --git a/web/react/components/rhs_thread.jsx b/web/react/components/rhs_thread.jsx index fdcf618d72..27a7847012 100644 --- a/web/react/components/rhs_thread.jsx +++ b/web/react/components/rhs_thread.jsx @@ -23,7 +23,7 @@ export default class RhsThread extends React.Component { } getStateFromStores() { var postList = PostStore.getSelectedPost(); - if (!postList || postList.order.length < 1) { + if (!postList || postList.order.length < 1 || !postList.posts[postList.order[0]]) { return {postList: {}}; } @@ -49,7 +49,10 @@ export default class RhsThread extends React.Component { }.bind(this)); } componentDidUpdate() { - $('.post-right__scroll').scrollTop($('.post-right__scroll')[0].scrollHeight); + if ($('.post-right__scroll')[0]) { + $('.post-right__scroll').scrollTop($('.post-right__scroll')[0].scrollHeight); + } + $('.post-right__scroll').perfectScrollbar('update'); this.resize(); } @@ -67,17 +70,10 @@ export default class RhsThread extends React.Component { // if something was changed in the channel like adding a // comment or post then lets refresh the sidebar list var currentSelected = PostStore.getSelectedPost(); - if (!currentSelected || currentSelected.order.length === 0) { + if (!currentSelected || currentSelected.order.length === 0 || !currentSelected.posts[currentSelected.order[0]]) { return; } - if (!currentSelected.posts[currentSelected.order[0]]) { - if ($('#post_deleted').length > 0) { - $('#post_deleted').modal('show'); - return; - } - } - var currentPosts = PostStore.getPosts(currentSelected.posts[currentSelected.order[0]].channel_id); if (!currentPosts || currentPosts.order.length === 0) { @@ -110,7 +106,7 @@ export default class RhsThread extends React.Component { render() { var postList = this.state.postList; - if (postList == null) { + if (postList == null || !postList.order) { return (
);