import React from 'react'; import { connect } from 'react-redux'; import { OrderedSet as ImmutableOrderedSet } from 'immutable'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { injectIntl, defineMessages, FormattedMessage } from 'react-intl'; import IconButton from 'soapbox/components/icon_button'; import LoadingIndicator from 'soapbox/components/loading_indicator'; import AccountContainer from 'soapbox/containers/account_container'; import ScrollableList from 'soapbox/components/scrollable_list'; import { makeGetStatus } from 'soapbox/selectors'; import { fetchStatus } from 'soapbox/actions/statuses'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, }); const mapStateToProps = (state, props) => { const getStatus = makeGetStatus(); const status = getStatus(state, { id: props.statusId, username: props.username, }); return { accountIds: status ? ImmutableOrderedSet(status.get('mentions').map(m => m.get('id'))) : null, }; }; export default @connect(mapStateToProps) @injectIntl class MentionsModal extends React.PureComponent { static contextTypes = { router: PropTypes.object, }; static propTypes = { onClose: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, statusId: PropTypes.string.isRequired, username: PropTypes.string.isRequired, dispatch: PropTypes.func.isRequired, accountIds: ImmutablePropTypes.orderedSet, }; fetchData = () => { const { dispatch, statusId } = this.props; dispatch(fetchStatus(statusId)); } componentDidMount() { this.fetchData(); this.unlistenHistory = this.context.router.history.listen((_, action) => { if (action === 'PUSH') { this.onClickClose(null, true); } }); } componentWillUnmount() { if (this.unlistenHistory) { this.unlistenHistory(); } } onClickClose = (_, noPop) => { this.props.onClose('MENTIONS', noPop); }; render() { const { intl, accountIds } = this.props; let body; if (!accountIds) { body = ; } else { body = ( {accountIds.map(id => , )} ); } return (

{body}
); } }