summaryrefslogtreecommitdiffstats
path: root/webapp/components/post_body.jsx
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2016-05-27 16:01:28 -0400
committerChristopher Speller <crspeller@gmail.com>2016-05-27 16:01:28 -0400
commit6399a94ce221be3d15e7132654c28cd953075ec6 (patch)
tree4b1927fdd8374e8bd3cb809ecb720f2689043358 /webapp/components/post_body.jsx
parentca9f348be6bf62fc888df9a710c9af155872528e (diff)
downloadchat-6399a94ce221be3d15e7132654c28cd953075ec6.tar.gz
chat-6399a94ce221be3d15e7132654c28cd953075ec6.tar.bz2
chat-6399a94ce221be3d15e7132654c28cd953075ec6.zip
PLT-2672 Refactored posts view with caching (#3054)
* Refactored posts view to use view controller design * Add post view caching * Required updates after rebase * Fixed bug where current channel not set yet was causing breakage
Diffstat (limited to 'webapp/components/post_body.jsx')
-rw-r--r--webapp/components/post_body.jsx186
1 files changed, 0 insertions, 186 deletions
diff --git a/webapp/components/post_body.jsx b/webapp/components/post_body.jsx
deleted file mode 100644
index 415052d96..000000000
--- a/webapp/components/post_body.jsx
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
-// See License.txt for license information.
-
-import FileAttachmentList from './file_attachment_list.jsx';
-import UserStore from 'stores/user_store.jsx';
-import * as Utils from 'utils/utils.jsx';
-import Constants from 'utils/constants.jsx';
-import * as TextFormatting from 'utils/text_formatting.jsx';
-import PostBodyAdditionalContent from './post_body_additional_content.jsx';
-import PendingPostActions from './pending_post_actions.jsx';
-
-import {FormattedMessage} from 'react-intl';
-
-import loadingGif from 'images/load.gif';
-
-import React from 'react';
-
-export default class PostBody extends React.Component {
- shouldComponentUpdate(nextProps) {
- if (!Utils.areObjectsEqual(nextProps.post, this.props.post)) {
- return true;
- }
-
- if (!Utils.areObjectsEqual(nextProps.parentPost, this.props.parentPost)) {
- return true;
- }
-
- if (!Utils.areObjectsEqual(nextProps.compactDisplay, this.props.compactDisplay)) {
- return true;
- }
-
- if (nextProps.handleCommentClick.toString() !== this.props.handleCommentClick.toString()) {
- return true;
- }
-
- return false;
- }
-
- render() {
- const post = this.props.post;
- const filenames = this.props.post.filenames;
- const parentPost = this.props.parentPost;
-
- let comment = '';
- let postClass = '';
-
- if (parentPost) {
- const profile = UserStore.getProfile(parentPost.user_id);
-
- let apostrophe = '';
- let name = '...';
- if (profile != null) {
- let username = profile.username;
- if (parentPost.props &&
- parentPost.props.from_webhook &&
- parentPost.props.override_username &&
- global.window.mm_config.EnablePostUsernameOverride === 'true') {
- username = parentPost.props.override_username;
- }
-
- if (username.slice(-1) === 's') {
- apostrophe = '\'';
- } else {
- apostrophe = '\'s';
- }
- name = (
- <a
- className='theme'
- onClick={Utils.searchForTerm.bind(null, username)}
- >
- {username}
- </a>
- );
- }
-
- let message = '';
- if (parentPost.message) {
- message = Utils.replaceHtmlEntities(parentPost.message);
- } else if (parentPost.filenames.length) {
- message = parentPost.filenames[0].split('/').pop();
-
- if (parentPost.filenames.length === 2) {
- message += Utils.localizeMessage('post_body.plusOne', ' plus 1 other file');
- } else if (parentPost.filenames.length > 2) {
- message += Utils.localizeMessage('post_body.plusMore', ' plus {count} other files').replace('{count}', (parentPost.filenames.length - 1).toString());
- }
- }
-
- comment = (
- <div className='post__link'>
- <span>
- <FormattedMessage
- id='post_body.commentedOn'
- defaultMessage='Commented on {name}{apostrophe} message: '
- values={{
- name,
- apostrophe
- }}
- />
- <a
- className='theme'
- onClick={this.props.handleCommentClick}
- >
- {message}
- </a>
- </span>
- </div>
- );
- }
-
- let loading;
- if (post.state === Constants.POST_FAILED) {
- postClass += ' post--fail';
- loading = <PendingPostActions post={this.props.post}/>;
- } else if (post.state === Constants.POST_LOADING) {
- postClass += ' post-waiting';
- loading = (
- <img
- className='post-loading-gif pull-right'
- src={loadingGif}
- />
- );
- }
-
- let fileAttachmentHolder = '';
- if (filenames && filenames.length > 0) {
- fileAttachmentHolder = (
- <FileAttachmentList
-
- filenames={filenames}
- channelId={post.channel_id}
- userId={post.user_id}
- compactDisplay={this.props.compactDisplay}
- />
- );
- }
-
- let message;
- let additionalContent = null;
- if (this.props.post.state === Constants.POST_DELETED) {
- message = (
- <FormattedMessage
- id='post_body.deleted'
- defaultMessage='(message deleted)'
- />
- );
- } else {
- message = (
- <span
- onClick={TextFormatting.handleClick}
- dangerouslySetInnerHTML={{__html: TextFormatting.formatText(this.props.post.message)}}
- />
- );
-
- additionalContent = (
- <PostBodyAdditionalContent post={this.props.post}/>
- );
- }
-
- return (
- <div>
- {comment}
- <div className='post__body'>
- <div
- key={`${post.id}_message`}
- id={`${post.id}_message`}
- className={postClass}
- >
- {loading}
- {message}
- </div>
- {fileAttachmentHolder}
- {additionalContent}
- </div>
- </div>
- );
- }
-}
-
-PostBody.propTypes = {
- post: React.PropTypes.object.isRequired,
- parentPost: React.PropTypes.object,
- retryPost: React.PropTypes.func.isRequired,
- handleCommentClick: React.PropTypes.func.isRequired,
- compactDisplay: React.PropTypes.bool
-};