Skip to content

Commit

Permalink
Move instances of Client.createPost() in components to an action (#4639)
Browse files Browse the repository at this point in the history
* Move instances of Client.createPost() in components to an action

* update per review, waiting for more review and see if this is the right way

* update per code review

* update code

* remove comment per request
  • Loading branch information
cpanato authored and hmhealey committed Dec 5, 2016
1 parent b9b986b commit f27aca4
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 49 deletions.
34 changes: 34 additions & 0 deletions webapp/actions/post_actions.jsx
Expand Up @@ -272,3 +272,37 @@ export function removeReaction(channelId, postId, emojiName) {

AsyncClient.deleteReaction(channelId, reaction);
}

export function createPost(post, doLoadPost, success, error) {
Client.createPost(post,
(data) => {
if (doLoadPost) {
loadPosts(post.channel_id);
} else {
PostStore.removePendingPost(post.pending_post_id);
}

AppDispatcher.handleServerAction({
type: ActionTypes.RECEIVED_POST,
post: data
});

if (success) {
success(data);
}
},

(err) => {
if (err.id === 'api.post.create_post.root_id.app_error') {
PostStore.removePendingPost(post.pending_post_id);
} else {
post.state = Constants.POST_FAILED;
PostStore.updatePendingPost(post);
}

if (error) {
error(err);
}
}
);
}
31 changes: 17 additions & 14 deletions webapp/components/create_comment.jsx
Expand Up @@ -4,7 +4,6 @@
import $ from 'jquery';
import ReactDOM from 'react-dom';
import AppDispatcher from '../dispatcher/app_dispatcher.jsx';
import Client from 'client/web_client.jsx';
import EmojiStore from 'stores/emoji_store.jsx';
import UserStore from 'stores/user_store.jsx';
import PostDeletedModal from './post_deleted_modal.jsx';
Expand Down Expand Up @@ -163,31 +162,35 @@ export default class CreateComment extends React.Component {
post.create_at = time;

GlobalActions.emitUserCommentedEvent(post);
Client.createPost(
post,
(data) => {
PostStore.removePendingPost(post.channel_id, post.pending_post_id);

AppDispatcher.handleServerAction({
type: ActionTypes.RECEIVED_POST,
post: data
});

PostActions.createPost(post, false,
() => {
// DO nothing.
},
(err) => {
if (err.id === 'api.post.create_post.root_id.app_error') {
this.showPostDeletedModal();

PostStore.removePendingPost(post.channel_id, post.pending_post_id);
} else {
post.state = Constants.POST_FAILED;
PostStore.updatePendingPost(post);
this.forceUpdate();
}

this.setState({
submitting: false
});
}
);

this.setState({
message: '',
submitting: false,
postError: null,
fileInfos: [],
serverError: null
});

const fasterThanHumanWillClick = 150;
const forceFocus = (Date.now() - this.state.lastBlurAt < fasterThanHumanWillClick);
this.focusTextbox(forceFocus);
}

handleSubmitReaction(isReaction) {
Expand Down
17 changes: 4 additions & 13 deletions webapp/components/create_post.jsx
Expand Up @@ -11,7 +11,6 @@ import TutorialTip from './tutorial/tutorial_tip.jsx';

import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
import * as GlobalActions from 'actions/global_actions.jsx';
import Client from 'client/web_client.jsx';
import * as Utils from 'utils/utils.jsx';
import * as UserAgent from 'utils/user_agent.jsx';
import * as ChannelActions from 'actions/channel_actions.jsx';
Expand Down Expand Up @@ -158,24 +157,16 @@ export default class CreatePost extends React.Component {

GlobalActions.emitUserPostedEvent(post);

Client.createPost(post,
(data) => {
PostStore.removePendingPost(post.pending_post_id);

AppDispatcher.handleServerAction({
type: ActionTypes.RECEIVED_POST,
post: data
});
PostActions.createPost(post, false,
() => {
// DO nothing.
},
(err) => {
if (err.id === 'api.post.create_post.root_id.app_error') {
// this should never actually happen since you can't reply from this textbox
this.showPostDeletedModal();

PostStore.removePendingPost(post.pending_post_id);
} else {
post.state = Constants.POST_FAILED;
PostStore.updatePendingPost(post);
this.forceUpdate();
}

this.setState({
Expand Down
35 changes: 13 additions & 22 deletions webapp/components/post_view/components/pending_post_options.jsx
Expand Up @@ -2,14 +2,10 @@
// See License.txt for license information.

import PostStore from 'stores/post_store.jsx';
import ChannelStore from 'stores/channel_store.jsx';

import {loadPosts} from 'actions/post_actions.jsx';
import {createPost} from 'actions/post_actions.jsx';

import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
import Client from 'client/web_client.jsx';
import Constants from 'utils/constants.jsx';
const ActionTypes = Constants.ActionTypes;

import {FormattedMessage} from 'react-intl';

Expand All @@ -26,25 +22,20 @@ export default class PendingPostOptions extends React.Component {
e.preventDefault();

var post = this.props.post;
Client.createPost(post,
(data) => {
loadPosts(post.channel_id);

var channel = ChannelStore.get(post.channel_id);
var member = ChannelStore.getMyMember(post.channel_id);
member.msg_count = channel.total_msg_count;
member.last_viewed_at = (new Date()).getTime();
ChannelStore.storeMyChannelMember(member);
createPost(post, true,
() => {
// DO nothing.
},
(err) => {
if (err.id === 'api.post.create_post.root_id.app_error') {
this.showPostDeletedModal();
} else {
this.forceUpdate();
}

AppDispatcher.handleServerAction({
type: ActionTypes.RECEIVED_POST,
post: data
this.setState({
submitting: false
});
},
() => {
post.state = Constants.POST_FAILED;
PostStore.updatePendingPost(post);
this.forceUpdate();
}
);

Expand Down

0 comments on commit f27aca4

Please sign in to comment.