import PureRenderMixin from 'react-addons-pure-render-mixin'; import ImmutablePropTypes from 'react-immutable-proptypes'; 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'; const messages = defineMessages({ unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, follow: { id: 'account.follow', defaultMessage: 'Follow' }, requested: { id: 'account.requested', defaultMessage: 'Awaiting approval' } }); const Avatar = React.createClass({ propTypes: { account: ImmutablePropTypes.map.isRequired }, getInitialState () { return { isHovered: false }; }, mixins: [PureRenderMixin], handleMouseOver () { if (this.state.isHovered) return; this.setState({ isHovered: true }); }, handleMouseOut () { if (!this.state.isHovered) return; this.setState({ isHovered: false }); }, render () { const { account } = this.props; const { isHovered } = this.state; return ( {({ radius }) => {account.get('acct')} } ); } }); const Header = React.createClass({ propTypes: { account: ImmutablePropTypes.map, me: React.PropTypes.number.isRequired, onFollow: React.PropTypes.func.isRequired, intl: React.PropTypes.object.isRequired }, mixins: [PureRenderMixin], 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}
); } }); export default injectIntl(Header);