* 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 statusmaster
@@ -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} | |||