// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. // See License.txt for license information. var PostStore = require('../stores/post_store.jsx'); var ChannelStore = require('../stores/channel_store.jsx'); var UserProfile = require('./user_profile.jsx'); var UserStore = require('../stores/user_store.jsx'); var AppDispatcher = require('../dispatcher/app_dispatcher.jsx'); var Utils = require('../utils/utils.jsx'); var Constants = require('../utils/constants.jsx'); var FileAttachmentList = require('./file_attachment_list.jsx'); var Client = require('../utils/client.jsx'); var AsyncClient = require('../utils/async_client.jsx'); var ActionTypes = Constants.ActionTypes; var TextFormatting = require('../utils/text_formatting.jsx'); var twemoji = require('twemoji'); export default class RhsComment extends React.Component { constructor(props) { super(props); this.retryComment = this.retryComment.bind(this); this.parseEmojis = this.parseEmojis.bind(this); this.state = {}; } retryComment(e) { e.preventDefault(); var post = this.props.post; Client.createPost(post, post.channel_id, function success(data) { AsyncClient.getPosts(post.channel_id); var channel = ChannelStore.get(post.channel_id); var member = ChannelStore.getMember(post.channel_id); member.msg_count = channel.total_msg_count; member.last_viewed_at = (new Date()).getTime(); ChannelStore.setChannelMember(member); AppDispatcher.handleServerAction({ type: ActionTypes.RECIEVED_POST, post: data }); }, function fail() { post.state = Constants.POST_FAILED; PostStore.updatePendingPost(post); this.forceUpdate(); }.bind(this) ); post.state = Constants.POST_LOADING; PostStore.updatePendingPost(post); this.forceUpdate(); } parseEmojis() { twemoji.parse(React.findDOMNode(this), {size: Constants.EMOJI_SIZE}); } componentDidMount() { this.parseEmojis(); } shouldComponentUpdate(nextProps) { if (!Utils.areStatesEqual(nextProps.post, this.props.post)) { return true; } return false; } componentDidUpdate() { this.parseEmojis(); } render() { var post = this.props.post; var currentUserCss = ''; if (UserStore.getCurrentId() === post.user_id) { currentUserCss = 'current--user'; } var isOwner = UserStore.getCurrentId() === post.user_id; var type = 'Post'; if (post.root_id.length > 0) { type = 'Comment'; } var timestamp = UserStore.getCurrentUser().update_at; var loading; var postClass = ''; if (post.state === Constants.POST_FAILED) { postClass += ' post-fail'; loading = ( Retry ); } else if (post.state === Constants.POST_LOADING) { postClass += ' post-waiting'; loading = ( ); } var ownerOptions; if (isOwner && post.state !== Constants.POST_FAILED && post.state !== Constants.POST_LOADING) { ownerOptions = (
); } var fileAttachment; if (post.filenames && post.filenames.length > 0) { fileAttachment = ( ); } return (
  • {ownerOptions}

{loading}

{fileAttachment}
); } } RhsComment.defaultProps = { post: null }; RhsComment.propTypes = { post: React.PropTypes.object };