diff options
author | Joram Wilander <jwawilander@gmail.com> | 2017-06-18 14:42:32 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-18 14:42:32 -0400 |
commit | ab67f6e257f6e8f08145a02a7b93550f99641be4 (patch) | |
tree | d33d1c58a3d229f7e37db58bc2c397ac3806c503 /webapp/components/post_view/post_header/post_header.jsx | |
parent | 0231e95f1c5a8c42ba97875f0d2301815f552974 (diff) | |
download | chat-ab67f6e257f6e8f08145a02a7b93550f99641be4.tar.gz chat-ab67f6e257f6e8f08145a02a7b93550f99641be4.tar.bz2 chat-ab67f6e257f6e8f08145a02a7b93550f99641be4.zip |
PLT-6215 Major post list refactor (#6501)
* Major post list refactor
* Fix post and thread deletion
* Fix preferences not selecting correctly
* Fix military time displaying
* Fix UP key for editing posts
* Fix ESLint error
* Various fixes and updates per feedback
* Fix for permalink view
* Revert to old scrolling method and various fixes
* Add floating timestamp, new message indicator, scroll arrows
* Update post loading for focus mode and add visibility limit
* Fix pinning posts and a react warning
* Add loading UI updates from Asaad
* Fix refreshing loop
* Temporarily bump post visibility limit
* Update infinite scrolling
* Remove infinite scrolling
Diffstat (limited to 'webapp/components/post_view/post_header/post_header.jsx')
-rw-r--r-- | webapp/components/post_view/post_header/post_header.jsx | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/webapp/components/post_view/post_header/post_header.jsx b/webapp/components/post_view/post_header/post_header.jsx new file mode 100644 index 000000000..562bd2b82 --- /dev/null +++ b/webapp/components/post_view/post_header/post_header.jsx @@ -0,0 +1,158 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import UserProfile from 'components/user_profile.jsx'; +import PostInfo from 'components/post_view/post_info'; +import {FormattedMessage} from 'react-intl'; + +import * as PostUtils from 'utils/post_utils.jsx'; + +import Constants from 'utils/constants.jsx'; + +import React from 'react'; +import PropTypes from 'prop-types'; + +export default class PostHeader extends React.PureComponent { + static propTypes = { + + /* + * The post to render the header for + */ + post: PropTypes.object.isRequired, + + /* + * The user who created the post + */ + user: PropTypes.object, + + /* + * Function called when the comment icon is clicked + */ + handleCommentClick: PropTypes.func.isRequired, + + /* + * Function called when the post options dropdown is opened + */ + handleDropdownOpened: PropTypes.func.isRequired, + + /* + * Set to render compactly + */ + compactDisplay: PropTypes.bool, + + /* + * Set to render the post as if it was part of the previous post + */ + consecutivePostByUser: PropTypes.bool, + + /* + * The method for displaying the post creator's name + */ + displayNameType: PropTypes.string, + + /* + * The status of the user who created the post + */ + status: PropTypes.string, + + /* + * Set if the post creator is currenlty in a WebRTC call + */ + isBusy: PropTypes.bool, + + /* + * The number of replies in the same thread as this post + */ + replyCount: PropTypes.number, + + /* + * Post identifiers for selenium tests + */ + lastPostCount: PropTypes.number, + + /** + * Function to get the post list HTML element + */ + getPostList: PropTypes.func.isRequired + } + + constructor(props) { + super(props); + this.state = {}; + } + + render() { + const post = this.props.post; + const isSystemMessage = PostUtils.isSystemMessage(post); + + let userProfile = ( + <UserProfile + user={this.props.user} + displayNameType={this.props.displayNameType} + status={this.props.status} + isBusy={this.props.isBusy} + /> + ); + let botIndicator; + let colon; + + if (post.props && post.props.from_webhook) { + if (post.props.override_username && global.window.mm_config.EnablePostUsernameOverride === 'true') { + userProfile = ( + <UserProfile + user={this.props.user} + overwriteName={post.props.override_username} + disablePopover={true} + /> + ); + } else { + userProfile = ( + <UserProfile + user={this.props.user} + displayNameType={this.props.displayNameType} + disablePopover={true} + /> + ); + } + + botIndicator = <div className='bot-indicator'>{Constants.BOT_NAME}</div>; + } else if (isSystemMessage) { + userProfile = ( + <UserProfile + user={{}} + overwriteName={ + <FormattedMessage + id='post_info.system' + defaultMessage='System' + /> + } + overwriteImage={Constants.SYSTEM_MESSAGE_PROFILE_IMAGE} + disablePopover={true} + /> + ); + } + + if (this.props.compactDisplay) { + colon = (<strong className='colon'>{':'}</strong>); + } + + return ( + <div className='post__header'> + <div className='col col__name'>{userProfile}{colon}</div> + {botIndicator} + <div className='col'> + <PostInfo + post={post} + handleCommentClick={this.props.handleCommentClick} + handleDropdownOpened={this.props.handleDropdownOpened} + compactDisplay={this.props.compactDisplay} + lastPostCount={this.props.lastPostCount} + replyCount={this.props.replyCount} + consecutivePostByUser={this.props.consecutivePostByUser} + getPostList={this.props.getPostList} + /> + </div> + </div> + ); + } +} |