diff options
Diffstat (limited to 'webapp/components/search_results_item.jsx')
-rw-r--r-- | webapp/components/search_results_item.jsx | 353 |
1 files changed, 0 insertions, 353 deletions
diff --git a/webapp/components/search_results_item.jsx b/webapp/components/search_results_item.jsx deleted file mode 100644 index ddbab76ff..000000000 --- a/webapp/components/search_results_item.jsx +++ /dev/null @@ -1,353 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See License.txt for license information. - -import PostMessageContainer from 'components/post_view/post_message_view'; -import UserProfile from './user_profile.jsx'; -import FileAttachmentListContainer from 'components/file_attachment_list'; -import ProfilePicture from './profile_picture.jsx'; -import CommentIcon from 'components/common/comment_icon.jsx'; -import DotMenu from 'components/dot_menu'; -import PostFlagIcon from 'components/post_view/post_flag_icon.jsx'; -import PostBodyAdditionalContent from 'components/post_view/post_body_additional_content.jsx'; - -import TeamStore from 'stores/team_store.jsx'; - -import * as GlobalActions from 'actions/global_actions.jsx'; -import * as Utils from 'utils/utils.jsx'; -import * as PostUtils from 'utils/post_utils.jsx'; -import Constants from 'utils/constants.jsx'; - -import React from 'react'; -import PropTypes from 'prop-types'; -import {FormattedMessage, FormattedDate} from 'react-intl'; -import {browserHistory, Link} from 'react-router/es6'; - -export default class SearchResultsItem extends React.Component { - constructor(props) { - super(props); - - this.handleFocusRHSClick = this.handleFocusRHSClick.bind(this); - this.handleJumpClick = this.handleJumpClick.bind(this); - this.handleDropdownOpened = this.handleDropdownOpened.bind(this); - this.shrinkSidebar = this.shrinkSidebar.bind(this); - - this.state = { - currentTeamDisplayName: TeamStore.getCurrent().name, - width: '', - height: '', - dropdownOpened: false - }; - } - - shouldComponentUpdate(nextProps, nextState) { - if (!Utils.areObjectsEqual(nextState.post, this.props.post)) { - return true; - } - - if (nextProps.isFlagged !== this.props.isFlagged) { - return true; - } - - if (nextState.dropdownOpened !== this.state.dropdownOpened) { - return true; - } - - return false; - } - - componentDidMount() { - window.addEventListener('resize', () => { - Utils.updateWindowDimensions(this); - }); - } - - componentWillUnmount() { - window.removeEventListener('resize', () => { - Utils.updateWindowDimensions(this); - }); - } - - shrinkSidebar() { - setTimeout(() => { - this.props.shrink(); - }); - } - - handleFocusRHSClick(e) { - e.preventDefault(); - GlobalActions.emitPostFocusRightHandSideFromSearch(this.props.post, this.props.isMentionSearch); - } - - handleJumpClick() { - if (Utils.isMobile()) { - GlobalActions.toggleSideBarAction(false); - } - - this.shrinkSidebar(); - browserHistory.push(TeamStore.getCurrentTeamRelativeUrl() + '/pl/' + this.props.post.id); - } - - handleDropdownOpened = (isOpened) => { - this.setState({ - dropdownOpened: isOpened - }); - } - - timeTag(post) { - return ( - <time - className='search-item-time' - dateTime={Utils.getDateForUnixTicks(post.create_at).toISOString()} - > - <FormattedDate - value={post.create_at} - hour12={!this.props.useMilitaryTime} - hour='2-digit' - minute='2-digit' - /> - </time> - ); - } - - renderTimeTag(post) { - return Utils.isMobile() ? - this.timeTag(post) : - ( - <Link - to={`/${this.state.currentTeamDisplayName}/pl/${post.id}`} - target='_blank' - className='post__permalink' - > - {this.timeTag(post)} - </Link> - ); - } - - getClassName = () => { - let className = 'post post--thread'; - - if (this.props.compactDisplay) { - className += ' post--compact'; - } - - if (this.state.dropdownOpened) { - className += ' post--hovered'; - } - - return className; - } - - render() { - let channelName = null; - const channel = this.props.channel; - const user = this.props.user || {}; - const post = this.props.post; - - let idCount = -1; - if (this.props.lastPostCount >= 0 && this.props.lastPostCount < Constants.TEST_ID_COUNT) { - idCount = this.props.lastPostCount; - } - - if (channel) { - channelName = channel.display_name; - if (channel.type === 'D') { - channelName = ( - <FormattedMessage - id='search_item.direct' - defaultMessage='Direct Message (with {username})' - values={{ - username: Utils.displayUsernameForUser(Utils.getDirectTeammate(channel.id)) - }} - /> - ); - } - } - - let overrideUsername; - let disableProfilePopover = false; - if (post.props && - post.props.from_webhook && - post.props.override_username && - global.window.mm_config.EnablePostUsernameOverride === 'true') { - overrideUsername = post.props.override_username; - disableProfilePopover = true; - } - - let botIndicator; - if (post.props && post.props.from_webhook) { - botIndicator = <div className='bot-indicator'>{Constants.BOT_NAME}</div>; - } - - const profilePic = ( - <ProfilePicture - src={PostUtils.getProfilePicSrcForPost(post, user)} - user={this.props.user} - status={this.props.status} - isBusy={this.props.isBusy} - /> - - ); - - const profilePicContainer = (<div className='post__img'>{profilePic}</div>); - - let postClass = ''; - if (PostUtils.isEdited(this.props.post)) { - postClass += ' post--edited'; - } - - let fileAttachment = null; - if (post.file_ids && post.file_ids.length > 0) { - fileAttachment = ( - <FileAttachmentListContainer - post={post} - compactDisplay={this.props.compactDisplay} - /> - ); - } - - let message; - let flagContent; - let rhsControls; - if (post.state === Constants.POST_DELETED) { - message = ( - <p> - <FormattedMessage - id='post_body.deleted' - defaultMessage='(message deleted)' - /> - </p> - ); - } else { - flagContent = ( - <PostFlagIcon - idPrefix={'searchPostFlag'} - idCount={idCount} - postId={post.id} - isFlagged={this.props.isFlagged} - /> - ); - - rhsControls = ( - <div className='col__controls'> - <DotMenu - idPrefix={Constants.SEARCH_POST} - idCount={idCount} - post={post} - isFlagged={this.props.isFlagged} - handleDropdownOpened={this.handleDropdownOpened} - /> - <CommentIcon - idPrefix={'searchCommentIcon'} - idCount={idCount} - handleCommentClick={this.handleFocusRHSClick} - searchStyle={'search-item__comment'} - /> - <a - onClick={this.handleJumpClick} - className='search-item__jump' - > - <FormattedMessage - id='search_item.jump' - defaultMessage='Jump' - /> - </a> - </div> - ); - - const messageWrapper = ( - <PostMessageContainer - post={post} - options={{ - searchTerm: this.props.term, - mentionHighlight: this.props.isMentionSearch - }} - /> - ); - - message = ( - <PostBodyAdditionalContent - post={post} - message={messageWrapper} - /> - ); - } - - let pinnedBadge; - if (post.is_pinned) { - pinnedBadge = ( - <span className='post__pinned-badge'> - <FormattedMessage - id='post_info.pinned' - defaultMessage='Pinned' - /> - </span> - ); - } - - return ( - <div className='search-item__container'> - <div className='date-separator'> - <hr className='separator__hr'/> - <div className='separator__text'> - <FormattedDate - value={post.create_at} - day='numeric' - month='long' - year='numeric' - /> - </div> - </div> - <div className={this.getClassName()}> - <div className='search-channel__name'>{channelName}</div> - <div className='post__content'> - {profilePicContainer} - <div> - <div className='post__header'> - <div className='col col__name'> - <strong> - <UserProfile - user={user} - overwriteName={overrideUsername} - disablePopover={disableProfilePopover} - status={this.props.status} - isBusy={this.props.isBusy} - /> - </strong> - </div> - {botIndicator} - <div className='col'> - {this.renderTimeTag(post)} - {pinnedBadge} - {flagContent} - </div> - {rhsControls} - </div> - <div className='search-item-snippet post__body'> - <div className={postClass}> - {message} - {fileAttachment} - </div> - </div> - </div> - </div> - </div> - </div> - ); - } -} - -SearchResultsItem.propTypes = { - post: PropTypes.object, - lastPostCount: PropTypes.number, - user: PropTypes.object, - channel: PropTypes.object, - compactDisplay: PropTypes.bool, - isMentionSearch: PropTypes.bool, - isFlaggedSearch: PropTypes.bool, - term: PropTypes.string, - useMilitaryTime: PropTypes.bool.isRequired, - shrink: PropTypes.func, - isFlagged: PropTypes.bool, - isBusy: PropTypes.bool, - status: PropTypes.string -}; |