diff options
Diffstat (limited to 'webapp/components/create_post.jsx')
-rw-r--r-- | webapp/components/create_post.jsx | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/webapp/components/create_post.jsx b/webapp/components/create_post.jsx index db61aca41..2ba79af36 100644 --- a/webapp/components/create_post.jsx +++ b/webapp/components/create_post.jsx @@ -9,14 +9,16 @@ import FilePreview from './file_preview.jsx'; import PostDeletedModal from './post_deleted_modal.jsx'; import TutorialTip from './tutorial/tutorial_tip.jsx'; -import AppDispatcher from '../dispatcher/app_dispatcher.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'; +import * as PostActions from 'actions/post_actions.jsx'; import ChannelStore from 'stores/channel_store.jsx'; +import EmojiStore from 'stores/emoji_store.jsx'; import PostStore from 'stores/post_store.jsx'; import MessageHistoryStore from 'stores/message_history_store.jsx'; import UserStore from 'stores/user_store.jsx'; @@ -34,6 +36,8 @@ const KeyCodes = Constants.KeyCodes; import React from 'react'; +export const REACTION_PATTERN = /^(\+|-):([^:\s]+):\s*$/; + export default class CreatePost extends React.Component { constructor(props) { super(props); @@ -101,6 +105,7 @@ export default class CreatePost extends React.Component { this.setState({submitting: true, serverError: null}); + const isReaction = REACTION_PATTERN.exec(post.message); if (post.message.indexOf('/') === 0) { PostStore.storeDraft(this.state.channelId, null); this.setState({message: '', postError: null, fileInfos: []}); @@ -123,14 +128,18 @@ export default class CreatePost extends React.Component { const state = {}; state.serverError = err.message; state.submitting = false; - this.setState(state); + this.setState({state}); } } ); + } else if (isReaction && EmojiStore.has(isReaction[2])) { + this.sendReaction(isReaction); } else { this.sendMessage(post); } + this.setState({message: '', submitting: false, postError: null, fileInfos: [], serverError: null}); + const fasterThanHumanWillClick = 150; const forceFocus = (Date.now() - this.state.lastBlurAt < fasterThanHumanWillClick); this.focusTextbox(forceFocus); @@ -148,7 +157,6 @@ export default class CreatePost extends React.Component { post.parent_id = this.state.parentId; GlobalActions.emitUserPostedEvent(post); - this.setState({message: '', submitting: false, postError: null, fileInfos: [], serverError: null}); Client.createPost(post, (data) => { @@ -177,6 +185,21 @@ export default class CreatePost extends React.Component { ); } + sendReaction(isReaction) { + const action = isReaction[1]; + + const emojiName = isReaction[2]; + const postId = PostStore.getLatestPost(this.state.channelId).id; + + if (action === '+') { + PostActions.addReaction(this.state.channelId, postId, emojiName); + } else if (action === '-') { + PostActions.removeReaction(this.state.channelId, postId, emojiName); + } + + PostStore.storeCurrentDraft(null); + } + focusTextbox(keepFocus = false) { if (keepFocus || !Utils.isMobile()) { this.refs.textbox.focus(); |