import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import emojify from '../../../emoji'; import escapeTextContentForBrowser from 'escape-html'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import IconButton from '../../../components/icon_button'; import { Motion, spring } from 'react-motion'; import { connect } from 'react-redux'; const messages = defineMessages({ unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, follow: { id: 'account.follow', defaultMessage: 'Follow' }, requested: { id: 'account.requested', defaultMessage: 'Awaiting approval' } }); const makeMapStateToProps = () => { const mapStateToProps = (state, props) => ({ autoPlayGif: state.getIn(['meta', 'auto_play_gif']) }); return mapStateToProps; }; class Avatar extends React.PureComponent { constructor (props, context) { super(props, context); this.state = { isHovered: false }; this.handleMouseOver = this.handleMouseOver.bind(this); this.handleMouseOut = this.handleMouseOut.bind(this); } handleMouseOver () { if (this.state.isHovered) return; this.setState({ isHovered: true }); } handleMouseOut () { if (!this.state.isHovered) return; this.setState({ isHovered: false }); } render () { const { account, autoPlayGif } = this.props; const { isHovered } = this.state; return ( {({ radius }) => } ); } } Avatar.propTypes = { account: ImmutablePropTypes.map.isRequired, autoPlayGif: PropTypes.bool.isRequired }; class Header extends React.Component { render () { const { account, me, intl } = this.props; if (!account) { return null; } let displayName = account.get('display_name'); let info = ''; let actionBtn = ''; let lockedIcon = ''; if (displayName.length === 0) { displayName = account.get('username'); } if (me !== account.get('id') && account.getIn(['relationship', 'followed_by'])) { info = } if (me !== account.get('id')) { if (account.getIn(['relationship', 'requested'])) { actionBtn = (
); } else if (!account.getIn(['relationship', 'blocking'])) { actionBtn = (
); } } if (account.get('locked')) { lockedIcon = ; } const content = { __html: emojify(account.get('note')) }; const displayNameHTML = { __html: emojify(escapeTextContentForBrowser(displayName)) }; return (
@{account.get('acct')} {lockedIcon}
{info} {actionBtn}
); } } Header.propTypes = { account: ImmutablePropTypes.map, me: PropTypes.number.isRequired, onFollow: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, autoPlayGif: PropTypes.bool.isRequired }; export default connect(makeMapStateToProps)(injectIntl(Header));