// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import React, {PureComponent} from 'react'; import PropTypes from 'prop-types'; import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; import FormattedText from 'app/components/formatted_text'; import FormattedTime from 'app/components/formatted_time'; import ReplyIcon from 'app/components/reply_icon'; import {emptyFunction} from 'app/utils/general'; import {changeOpacity, makeStyleSheetFromTheme} from 'app/utils/theme'; const BOT_NAME = 'BOT'; export default class PostHeader extends PureComponent { static propTypes = { commentCount: PropTypes.number, commentedOnDisplayName: PropTypes.string, createAt: PropTypes.number.isRequired, displayName: PropTypes.string.isRequired, enablePostUsernameOverride: PropTypes.bool, fromWebHook: PropTypes.bool, isPendingOrFailedPost: PropTypes.bool, isSystemMessage: PropTypes.bool, onPress: PropTypes.func, onViewUserProfile: PropTypes.func, overrideUsername: PropTypes.string, renderReplies: PropTypes.bool, theme: PropTypes.object.isRequired }; static defaultProps = { commentCount: 0, onPress: emptyFunction, onViewUserProfile: emptyFunction }; getDisplayName = (style) => { const { enablePostUsernameOverride, fromWebHook, isSystemMessage, onViewUserProfile, overrideUsername } = this.props; if (isSystemMessage) { return ( ); } else if (fromWebHook) { let name = this.props.displayName; if (overrideUsername && enablePostUsernameOverride) { name = overrideUsername; } return ( {name} {BOT_NAME} ); } else if (this.props.displayName) { return ( {this.props.displayName} ); } return ( ); }; renderCommentedOnMessage = (style) => { if (!this.props.renderReplies || !this.props.commentedOnDisplayName) { return null; } const displayName = this.props.commentedOnDisplayName; let name; if (displayName) { name = displayName; } else { name = ( ); } let apostrophe; if (displayName && displayName.slice(-1) === 's') { apostrophe = '\''; } else { apostrophe = '\'s'; } return ( ); }; render() { const { commentedOnDisplayName, commentCount, createAt, isPendingOrFailedPost, onPress, renderReplies, theme } = this.props; const style = getStyleSheet(theme); return ( {this.getDisplayName(style)} {(!commentedOnDisplayName && commentCount > 0 && renderReplies) && {commentCount} } {commentedOnDisplayName !== '' && {this.renderCommentedOnMessage(style)} } ); } } const getStyleSheet = makeStyleSheetFromTheme((theme) => { return StyleSheet.create({ commentedOn: { color: changeOpacity(theme.centerChannelColor, 0.65), marginBottom: 3, lineHeight: 21 }, postInfoContainer: { alignItems: 'center', flexDirection: 'row', marginTop: 10 }, pendingPost: { opacity: 0.5 }, timeContainer: { justifyContent: 'center' }, time: { color: theme.centerChannelColor, fontSize: 13, marginLeft: 5, marginBottom: 1, opacity: 0.5 }, replyIconContainer: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }, replyText: { fontSize: 15, marginLeft: 3, color: theme.linkColor }, botContainer: { flexDirection: 'row' }, bot: { alignSelf: 'center', backgroundColor: changeOpacity(theme.centerChannelColor, 0.15), borderRadius: 2, color: theme.centerChannelColor, fontSize: 10, fontWeight: '600', marginRight: 5, paddingVertical: 2, paddingHorizontal: 4 }, displayName: { color: theme.centerChannelColor, fontSize: 15, fontWeight: '600', marginRight: 5, marginBottom: 3 } }); });