import PropTypes from 'prop-types'; import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { FormattedMessage, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; import { openModal } from 'soapbox/actions/modal'; import HoverRefWrapper from 'soapbox/components/hover_ref_wrapper'; const mapDispatchToProps = (dispatch) => ({ onOpenMentionsModal(username, statusId) { dispatch(openModal('MENTIONS', { username, statusId, })); }, }); export default @connect(null, mapDispatchToProps) @injectIntl class StatusReplyMentions extends ImmutablePureComponent { static propTypes = { status: ImmutablePropTypes.map.isRequired, onOpenMentionsModal: PropTypes.func, } handleOpenMentionsModal = () => { const { status, onOpenMentionsModal } = this.props; onOpenMentionsModal(status.getIn(['account', 'acct']), status.get('id')); } render() { const { status } = this.props; if (!status.get('in_reply_to_id')) { return null; } const to = status.get('mentions', []); // The post is a reply, but it has no mentions. if (to.size === 0) { // The author is replying to themself. if (status.get('in_reply_to_account_id') === status.getIn(['account', 'id'])) { return (
@{status.getIn(['account', 'username'])} ), more: false, }} />
); } else { // The reply-to is unknown. Rare, but it can happen. return (
); } } // The typical case with a reply-to and a list of mentions. return (
(<> @{account.get('username')} {' '} )), more: to.size > 2 && ( ), }} />
); } }