Files
mostlymatter/webapp/components/post_view/post_header/post_header.jsx
David Meza f740698dbe PLT-6486 Add an @username button to the profile popover, that puts the username in the post when clicked (#6349)
* PLT-6486 Add an `@username` button to the profile popover, that puts the username in the post when clicked

* PLT-6486 Display `@username` mention on the right text area on center or RHS.

* Disable @mentions from profile popover on searches, mentions and pinned posts. Fix js errors.

* Control undefined post in SearchStore that causes an exception.
2017-07-31 08:24:13 -04:00

160 строки
4.7 KiB
JavaScript

// 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}
hasMention={true}
/>
);
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>
);
}
}