Skip to content

Commit 434d596

Browse files
ClearlyClairehiyuki2578
authored andcommitted
Add a “Block & Report” button to the block confirmation dialog (mastodon#10360)
1 parent 84cb941 commit 434d596

8 files changed

Lines changed: 44 additions & 6 deletions

File tree

app/javascript/mastodon/components/status_action_bar.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class StatusActionBar extends ImmutablePureComponent {
139139
}
140140

141141
handleBlockClick = () => {
142-
this.props.onBlock(this.props.status.get('account'));
142+
this.props.onBlock(this.props.status);
143143
}
144144

145145
handleOpen = () => {

app/javascript/mastodon/containers/status_container.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const messages = defineMessages({
3838
blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
3939
replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },
4040
replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },
41+
blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' },
4142
});
4243

4344
const makeMapStateToProps = () => {
@@ -134,11 +135,17 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
134135
dispatch(openModal('VIDEO', { media, time }));
135136
},
136137

137-
onBlock (account) {
138+
onBlock (status) {
139+
const account = status.get('account');
138140
dispatch(openModal('CONFIRM', {
139141
message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
140142
confirm: intl.formatMessage(messages.blockConfirm),
141143
onConfirm: () => dispatch(blockAccount(account.get('id'))),
144+
secondary: intl.formatMessage(messages.blockAndReport),
145+
onSecondary: () => {
146+
dispatch(blockAccount(account.get('id')));
147+
dispatch(initReport(account, status));
148+
},
142149
}));
143150
},
144151

app/javascript/mastodon/features/account_timeline/containers/header_container.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const messages = defineMessages({
2626
unfollowConfirm: { id: 'confirmations.unfollow.confirm', defaultMessage: 'Unfollow' },
2727
blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
2828
blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Hide entire domain' },
29+
blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' },
2930
});
3031

3132
const makeMapStateToProps = () => {
@@ -65,6 +66,11 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
6566
message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
6667
confirm: intl.formatMessage(messages.blockConfirm),
6768
onConfirm: () => dispatch(blockAccount(account.get('id'))),
69+
secondary: intl.formatMessage(messages.blockAndReport),
70+
onSecondary: () => {
71+
dispatch(blockAccount(account.get('id')));
72+
dispatch(initReport(account));
73+
},
6874
}));
6975
}
7076
},

app/javascript/mastodon/features/status/components/action_bar.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class ActionBar extends React.PureComponent {
9292
}
9393

9494
handleBlockClick = () => {
95-
this.props.onBlock(this.props.status.get('account'));
95+
this.props.onBlock(this.props.status);
9696
}
9797

9898
handleReport = () => {

app/javascript/mastodon/features/status/containers/detailed_status_container.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const messages = defineMessages({
3838
blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
3939
replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },
4040
replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },
41+
blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' },
4142
});
4243

4344
const makeMapStateToProps = () => {
@@ -135,11 +136,17 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
135136
dispatch(openModal('VIDEO', { media, time }));
136137
},
137138

138-
onBlock (account) {
139+
onBlock (status) {
140+
const account = status.get('account');
139141
dispatch(openModal('CONFIRM', {
140142
message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
141143
confirm: intl.formatMessage(messages.blockConfirm),
142144
onConfirm: () => dispatch(blockAccount(account.get('id'))),
145+
secondary: intl.formatMessage(messages.blockAndReport),
146+
onSecondary: () => {
147+
dispatch(blockAccount(account.get('id')));
148+
dispatch(initReport(account, status));
149+
},
143150
}));
144151
},
145152

app/javascript/mastodon/features/status/index.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ const messages = defineMessages({
5757
detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' },
5858
replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },
5959
replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },
60+
blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' },
6061
});
6162

6263
const makeMapStateToProps = () => {
@@ -253,13 +254,19 @@ class Status extends ImmutablePureComponent {
253254
}
254255
}
255256

256-
handleBlockClick = (account) => {
257+
handleBlockClick = (status) => {
257258
const { dispatch, intl } = this.props;
259+
const account = status.get('account');
258260

259261
dispatch(openModal('CONFIRM', {
260262
message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
261263
confirm: intl.formatMessage(messages.blockConfirm),
262264
onConfirm: () => dispatch(blockAccount(account.get('id'))),
265+
secondary: intl.formatMessage(messages.blockAndReport),
266+
onSecondary: () => {
267+
dispatch(blockAccount(account.get('id')));
268+
dispatch(initReport(account, status));
269+
},
263270
}));
264271
}
265272

app/javascript/mastodon/features/ui/components/confirmation_modal.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ class ConfirmationModal extends React.PureComponent {
1111
confirm: PropTypes.string.isRequired,
1212
onClose: PropTypes.func.isRequired,
1313
onConfirm: PropTypes.func.isRequired,
14+
secondary: PropTypes.string,
15+
onSecondary: PropTypes.func,
1416
intl: PropTypes.object.isRequired,
1517
};
1618

@@ -23,6 +25,11 @@ class ConfirmationModal extends React.PureComponent {
2325
this.props.onConfirm();
2426
}
2527

28+
handleSecondary = () => {
29+
this.props.onClose();
30+
this.props.onSecondary();
31+
}
32+
2633
handleCancel = () => {
2734
this.props.onClose();
2835
}
@@ -32,7 +39,7 @@ class ConfirmationModal extends React.PureComponent {
3239
}
3340

3441
render () {
35-
const { message, confirm } = this.props;
42+
const { message, confirm, secondary } = this.props;
3643

3744
return (
3845
<div className='modal-root__modal confirmation-modal'>
@@ -44,6 +51,9 @@ class ConfirmationModal extends React.PureComponent {
4451
<Button onClick={this.handleCancel} className='confirmation-modal__cancel-button'>
4552
<FormattedMessage id='confirmation_modal.cancel' defaultMessage='Cancel' />
4653
</Button>
54+
{secondary !== undefined && (
55+
<Button text={secondary} onClick={this.handleSecondary} className='confirmation-modal__secondary-button' />
56+
)}
4757
<Button text={confirm} onClick={this.handleClick} ref={this.setRef} />
4858
</div>
4959
</div>

app/javascript/styles/mastodon/components.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4128,6 +4128,7 @@ a.status-card.compact:hover {
41284128

41294129
.confirmation-modal__action-bar,
41304130
.mute-modal__action-bar {
4131+
.confirmation-modal__secondary-button,
41314132
.confirmation-modal__cancel-button,
41324133
.mute-modal__cancel-button {
41334134
background-color: transparent;

0 commit comments

Comments
 (0)