Add mute, block, conversation mute actions to detailed status dropdown menu (#6099)
* removed references to hideOnMobile in column_link and getting_started * add mute, block, conversationMute actions to detailed status dropdown (fixes #1226) * remove unused withDismiss in detailed status
This commit is contained in:
		@ -13,6 +13,10 @@ const messages = defineMessages({
 | 
			
		||||
  reblog: { id: 'status.reblog', defaultMessage: 'Boost' },
 | 
			
		||||
  cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },
 | 
			
		||||
  favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },
 | 
			
		||||
  mute: { id: 'status.mute', defaultMessage: 'Mute @{name}' },
 | 
			
		||||
  muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },
 | 
			
		||||
  unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },
 | 
			
		||||
  block: { id: 'status.block', defaultMessage: 'Block @{name}' },
 | 
			
		||||
  report: { id: 'status.report', defaultMessage: 'Report @{name}' },
 | 
			
		||||
  share: { id: 'status.share', defaultMessage: 'Share' },
 | 
			
		||||
  pin: { id: 'status.pin', defaultMessage: 'Pin on profile' },
 | 
			
		||||
@ -34,6 +38,9 @@ export default class ActionBar extends React.PureComponent {
 | 
			
		||||
    onFavourite: PropTypes.func.isRequired,
 | 
			
		||||
    onDelete: PropTypes.func.isRequired,
 | 
			
		||||
    onMention: PropTypes.func.isRequired,
 | 
			
		||||
    onMute: PropTypes.func,
 | 
			
		||||
    onMuteConversation: PropTypes.func,
 | 
			
		||||
    onBlock: PropTypes.func,
 | 
			
		||||
    onReport: PropTypes.func,
 | 
			
		||||
    onPin: PropTypes.func,
 | 
			
		||||
    onEmbed: PropTypes.func,
 | 
			
		||||
@ -60,6 +67,18 @@ export default class ActionBar extends React.PureComponent {
 | 
			
		||||
    this.props.onMention(this.props.status.get('account'), this.context.router.history);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleMuteClick = () => {
 | 
			
		||||
    this.props.onMute(this.props.status.get('account'));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleConversationMuteClick = () => {
 | 
			
		||||
    this.props.onMuteConversation(this.props.status);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleBlockClick = () => {
 | 
			
		||||
    this.props.onBlock(this.props.status.get('account'));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleReport = () => {
 | 
			
		||||
    this.props.onReport(this.props.status);
 | 
			
		||||
  }
 | 
			
		||||
@ -83,6 +102,7 @@ export default class ActionBar extends React.PureComponent {
 | 
			
		||||
    const { status, intl } = this.props;
 | 
			
		||||
 | 
			
		||||
    const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
 | 
			
		||||
    const mutingConversation = status.get('muted');
 | 
			
		||||
 | 
			
		||||
    let menu = [];
 | 
			
		||||
 | 
			
		||||
@ -95,10 +115,15 @@ export default class ActionBar extends React.PureComponent {
 | 
			
		||||
        menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      menu.push(null);
 | 
			
		||||
      menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });
 | 
			
		||||
      menu.push(null);
 | 
			
		||||
      menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });
 | 
			
		||||
    } else {
 | 
			
		||||
      menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });
 | 
			
		||||
      menu.push(null);
 | 
			
		||||
      menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick });
 | 
			
		||||
      menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick });
 | 
			
		||||
      menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,14 +20,16 @@ import {
 | 
			
		||||
  replyCompose,
 | 
			
		||||
  mentionCompose,
 | 
			
		||||
} from '../../actions/compose';
 | 
			
		||||
import { deleteStatus } from '../../actions/statuses';
 | 
			
		||||
import { blockAccount } from '../../actions/accounts';
 | 
			
		||||
import { muteStatus, unmuteStatus, deleteStatus } from '../../actions/statuses';
 | 
			
		||||
import { initMuteModal } from '../../actions/mutes';
 | 
			
		||||
import { initReport } from '../../actions/reports';
 | 
			
		||||
import { makeGetStatus } from '../../selectors';
 | 
			
		||||
import { ScrollContainer } from 'react-router-scroll-4';
 | 
			
		||||
import ColumnBackButton from '../../components/column_back_button';
 | 
			
		||||
import StatusContainer from '../../containers/status_container';
 | 
			
		||||
import { openModal } from '../../actions/modal';
 | 
			
		||||
import { defineMessages, injectIntl } from 'react-intl';
 | 
			
		||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 | 
			
		||||
import ImmutablePureComponent from 'react-immutable-pure-component';
 | 
			
		||||
import { HotKeys } from 'react-hotkeys';
 | 
			
		||||
import { boostModal, deleteModal } from '../../initial_state';
 | 
			
		||||
@ -36,6 +38,7 @@ import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from
 | 
			
		||||
const messages = defineMessages({
 | 
			
		||||
  deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
 | 
			
		||||
  deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },
 | 
			
		||||
  blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const makeMapStateToProps = () => {
 | 
			
		||||
@ -148,6 +151,28 @@ export default class Status extends ImmutablePureComponent {
 | 
			
		||||
    this.props.dispatch(openModal('VIDEO', { media, time }));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleMuteClick = (account) => {
 | 
			
		||||
    this.props.dispatch(initMuteModal(account));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleConversationMuteClick = (status) => {
 | 
			
		||||
    if (status.get('muted')) {
 | 
			
		||||
      this.props.dispatch(unmuteStatus(status.get('id')));
 | 
			
		||||
    } else {
 | 
			
		||||
      this.props.dispatch(muteStatus(status.get('id')));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleBlockClick = (account) => {
 | 
			
		||||
    const { dispatch, intl } = this.props;
 | 
			
		||||
 | 
			
		||||
    dispatch(openModal('CONFIRM', {
 | 
			
		||||
      message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
 | 
			
		||||
      confirm: intl.formatMessage(messages.blockConfirm),
 | 
			
		||||
      onConfirm: () => dispatch(blockAccount(account.get('id'))),
 | 
			
		||||
    }));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleReport = (status) => {
 | 
			
		||||
    this.props.dispatch(initReport(status.get('account'), status));
 | 
			
		||||
  }
 | 
			
		||||
@ -321,6 +346,9 @@ export default class Status extends ImmutablePureComponent {
 | 
			
		||||
                  onReblog={this.handleReblogClick}
 | 
			
		||||
                  onDelete={this.handleDeleteClick}
 | 
			
		||||
                  onMention={this.handleMentionClick}
 | 
			
		||||
                  onMute={this.handleMuteClick}
 | 
			
		||||
                  onMuteConversation={this.handleConversationMuteClick}
 | 
			
		||||
                  onBlock={this.handleBlockClick}
 | 
			
		||||
                  onReport={this.handleReport}
 | 
			
		||||
                  onPin={this.handlePin}
 | 
			
		||||
                  onEmbed={this.handleEmbed}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user