forked from fedi/mastodon
Add preference setting for delete toot modal (#3368)
* Set delete_modal preference to true by default * Does not show confirmation modal if delete_modal is false * Add ja translation for preference setting page
This commit is contained in:
parent
b5e8994844
commit
402c19a924
|
@ -35,6 +35,7 @@ class Settings::PreferencesController < ApplicationController
|
||||||
params.require(:user).permit(
|
params.require(:user).permit(
|
||||||
:setting_default_privacy,
|
:setting_default_privacy,
|
||||||
:setting_boost_modal,
|
:setting_boost_modal,
|
||||||
|
:setting_delete_modal,
|
||||||
:setting_auto_play_gif,
|
:setting_auto_play_gif,
|
||||||
notification_emails: %i(follow follow_request reblog favourite mention digest),
|
notification_emails: %i(follow follow_request reblog favourite mention digest),
|
||||||
interactions: %i(must_be_follower must_be_following)
|
interactions: %i(must_be_follower must_be_following)
|
||||||
|
|
|
@ -37,6 +37,7 @@ const makeMapStateToProps = () => {
|
||||||
status: getStatus(state, props.id),
|
status: getStatus(state, props.id),
|
||||||
me: state.getIn(['meta', 'me']),
|
me: state.getIn(['meta', 'me']),
|
||||||
boostModal: state.getIn(['meta', 'boost_modal']),
|
boostModal: state.getIn(['meta', 'boost_modal']),
|
||||||
|
deleteModal: state.getIn(['meta', 'delete_modal']),
|
||||||
autoPlayGif: state.getIn(['meta', 'auto_play_gif']),
|
autoPlayGif: state.getIn(['meta', 'auto_play_gif']),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -74,11 +75,15 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
|
||||||
},
|
},
|
||||||
|
|
||||||
onDelete (status) {
|
onDelete (status) {
|
||||||
dispatch(openModal('CONFIRM', {
|
if (!this.deleteModal) {
|
||||||
message: intl.formatMessage(messages.deleteMessage),
|
dispatch(deleteStatus(status.get('id')));
|
||||||
confirm: intl.formatMessage(messages.deleteConfirm),
|
} else {
|
||||||
onConfirm: () => dispatch(deleteStatus(status.get('id'))),
|
dispatch(openModal('CONFIRM', {
|
||||||
}));
|
message: intl.formatMessage(messages.deleteMessage),
|
||||||
|
confirm: intl.formatMessage(messages.deleteConfirm),
|
||||||
|
onConfirm: () => dispatch(deleteStatus(status.get('id'))),
|
||||||
|
}));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onMention (account, router) {
|
onMention (account, router) {
|
||||||
|
|
|
@ -48,6 +48,7 @@ const makeMapStateToProps = () => {
|
||||||
descendantsIds: state.getIn(['timelines', 'descendants', Number(props.params.statusId)]),
|
descendantsIds: state.getIn(['timelines', 'descendants', Number(props.params.statusId)]),
|
||||||
me: state.getIn(['meta', 'me']),
|
me: state.getIn(['meta', 'me']),
|
||||||
boostModal: state.getIn(['meta', 'boost_modal']),
|
boostModal: state.getIn(['meta', 'boost_modal']),
|
||||||
|
deleteModal: state.getIn(['meta', 'delete_modal']),
|
||||||
autoPlayGif: state.getIn(['meta', 'auto_play_gif']),
|
autoPlayGif: state.getIn(['meta', 'auto_play_gif']),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -68,6 +69,7 @@ class Status extends ImmutablePureComponent {
|
||||||
descendantsIds: ImmutablePropTypes.list,
|
descendantsIds: ImmutablePropTypes.list,
|
||||||
me: PropTypes.number,
|
me: PropTypes.number,
|
||||||
boostModal: PropTypes.bool,
|
boostModal: PropTypes.bool,
|
||||||
|
deleteModal: PropTypes.bool,
|
||||||
autoPlayGif: PropTypes.bool,
|
autoPlayGif: PropTypes.bool,
|
||||||
intl: PropTypes.object.isRequired,
|
intl: PropTypes.object.isRequired,
|
||||||
};
|
};
|
||||||
|
@ -113,11 +115,15 @@ class Status extends ImmutablePureComponent {
|
||||||
handleDeleteClick = (status) => {
|
handleDeleteClick = (status) => {
|
||||||
const { dispatch, intl } = this.props;
|
const { dispatch, intl } = this.props;
|
||||||
|
|
||||||
dispatch(openModal('CONFIRM', {
|
if (!this.props.deleteModal) {
|
||||||
message: intl.formatMessage(messages.deleteMessage),
|
dispatch(deleteStatus(status.get('id')));
|
||||||
confirm: intl.formatMessage(messages.deleteConfirm),
|
} else {
|
||||||
onConfirm: () => dispatch(deleteStatus(status.get('id'))),
|
dispatch(openModal('CONFIRM', {
|
||||||
}));
|
message: intl.formatMessage(messages.deleteMessage),
|
||||||
|
confirm: intl.formatMessage(messages.deleteConfirm),
|
||||||
|
onConfirm: () => dispatch(deleteStatus(status.get('id'))),
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleMentionClick = (account, router) => {
|
handleMentionClick = (account, router) => {
|
||||||
|
|
|
@ -19,6 +19,7 @@ class UserSettingsDecorator
|
||||||
user.settings['interactions'] = merged_interactions
|
user.settings['interactions'] = merged_interactions
|
||||||
user.settings['default_privacy'] = default_privacy_preference
|
user.settings['default_privacy'] = default_privacy_preference
|
||||||
user.settings['boost_modal'] = boost_modal_preference
|
user.settings['boost_modal'] = boost_modal_preference
|
||||||
|
user.settings['delete_modal'] = delete_modal_preference
|
||||||
user.settings['auto_play_gif'] = auto_play_gif_preference
|
user.settings['auto_play_gif'] = auto_play_gif_preference
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -38,6 +39,10 @@ class UserSettingsDecorator
|
||||||
boolean_cast_setting 'setting_boost_modal'
|
boolean_cast_setting 'setting_boost_modal'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delete_modal_preference
|
||||||
|
boolean_cast_setting 'setting_delete_modal'
|
||||||
|
end
|
||||||
|
|
||||||
def auto_play_gif_preference
|
def auto_play_gif_preference
|
||||||
boolean_cast_setting 'setting_auto_play_gif'
|
boolean_cast_setting 'setting_auto_play_gif'
|
||||||
end
|
end
|
||||||
|
|
|
@ -80,6 +80,10 @@ class User < ApplicationRecord
|
||||||
settings.boost_modal
|
settings.boost_modal
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setting_delete_modal
|
||||||
|
settings.delete_modal
|
||||||
|
end
|
||||||
|
|
||||||
def setting_auto_play_gif
|
def setting_auto_play_gif
|
||||||
settings.auto_play_gif
|
settings.auto_play_gif
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,6 +9,7 @@ node(:meta) do
|
||||||
me: current_account.id,
|
me: current_account.id,
|
||||||
admin: @admin.try(:id),
|
admin: @admin.try(:id),
|
||||||
boost_modal: current_account.user.setting_boost_modal,
|
boost_modal: current_account.user.setting_boost_modal,
|
||||||
|
delete_modal: current_account.user.setting_delete_modal,
|
||||||
auto_play_gif: current_account.user.setting_auto_play_gif,
|
auto_play_gif: current_account.user.setting_auto_play_gif,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
|
|
||||||
.fields-group
|
.fields-group
|
||||||
= f.input :setting_boost_modal, as: :boolean, wrapper: :with_label
|
= f.input :setting_boost_modal, as: :boolean, wrapper: :with_label
|
||||||
|
= f.input :setting_delete_modal, as: :boolean, wrapper: :with_label
|
||||||
|
|
||||||
.fields-group
|
.fields-group
|
||||||
= f.input :setting_auto_play_gif, as: :boolean, wrapper: :with_label
|
= f.input :setting_auto_play_gif, as: :boolean, wrapper: :with_label
|
||||||
|
|
|
@ -36,6 +36,7 @@ en:
|
||||||
password: Password
|
password: Password
|
||||||
setting_auto_play_gif: Auto-play animated GIFs
|
setting_auto_play_gif: Auto-play animated GIFs
|
||||||
setting_boost_modal: Show confirmation dialog before boosting
|
setting_boost_modal: Show confirmation dialog before boosting
|
||||||
|
setting_delete_modal: Show confirmation dialog before deleting a toot
|
||||||
setting_default_privacy: Post privacy
|
setting_default_privacy: Post privacy
|
||||||
severity: Severity
|
severity: Severity
|
||||||
type: Import type
|
type: Import type
|
||||||
|
|
|
@ -33,6 +33,7 @@ ja:
|
||||||
password: パスワード
|
password: パスワード
|
||||||
setting_auto_play_gif: アニメーションGIFを自動再生する
|
setting_auto_play_gif: アニメーションGIFを自動再生する
|
||||||
setting_boost_modal: ブーストする前に確認ダイアログを表示する
|
setting_boost_modal: ブーストする前に確認ダイアログを表示する
|
||||||
|
setting_delete_modal: トゥートを削除する前に確認ダイアログを表示する
|
||||||
setting_default_privacy: 投稿の公開範囲
|
setting_default_privacy: 投稿の公開範囲
|
||||||
severity: 重大性
|
severity: 重大性
|
||||||
type: インポートする項目
|
type: インポートする項目
|
||||||
|
|
|
@ -16,6 +16,7 @@ defaults: &defaults
|
||||||
closed_registrations_message: ''
|
closed_registrations_message: ''
|
||||||
boost_modal: false
|
boost_modal: false
|
||||||
auto_play_gif: true
|
auto_play_gif: true
|
||||||
|
delete_modal: true
|
||||||
notification_emails:
|
notification_emails:
|
||||||
follow: false
|
follow: false
|
||||||
reblog: false
|
reblog: false
|
||||||
|
|
|
@ -28,12 +28,14 @@ describe Settings::PreferencesController do
|
||||||
|
|
||||||
it 'updates user settings' do
|
it 'updates user settings' do
|
||||||
user.settings['boost_modal'] = false
|
user.settings['boost_modal'] = false
|
||||||
|
user.settings['delete_modal'] = true
|
||||||
user.settings['notification_emails'] = user.settings['notification_emails'].merge('follow' => false)
|
user.settings['notification_emails'] = user.settings['notification_emails'].merge('follow' => false)
|
||||||
user.settings['interactions'] = user.settings['interactions'].merge('must_be_follower' => true)
|
user.settings['interactions'] = user.settings['interactions'].merge('must_be_follower' => true)
|
||||||
|
|
||||||
put :update, params: {
|
put :update, params: {
|
||||||
user: {
|
user: {
|
||||||
setting_boost_modal: '1',
|
setting_boost_modal: '1',
|
||||||
|
setting_delete_modal: '0',
|
||||||
notification_emails: { follow: '1' },
|
notification_emails: { follow: '1' },
|
||||||
interactions: { must_be_follower: '0' },
|
interactions: { must_be_follower: '0' },
|
||||||
}
|
}
|
||||||
|
@ -42,6 +44,7 @@ describe Settings::PreferencesController do
|
||||||
expect(response).to redirect_to(settings_preferences_path)
|
expect(response).to redirect_to(settings_preferences_path)
|
||||||
user.reload
|
user.reload
|
||||||
expect(user.settings['boost_modal']).to be true
|
expect(user.settings['boost_modal']).to be true
|
||||||
|
expect(user.settings['delete_modal']).to be false
|
||||||
expect(user.settings['notification_emails']['follow']).to be true
|
expect(user.settings['notification_emails']['follow']).to be true
|
||||||
expect(user.settings['interactions']['must_be_follower']).to be false
|
expect(user.settings['interactions']['must_be_follower']).to be false
|
||||||
end
|
end
|
||||||
|
|
|
@ -35,6 +35,13 @@ describe UserSettingsDecorator do
|
||||||
expect(user.settings['boost_modal']).to eq true
|
expect(user.settings['boost_modal']).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'updates the user settings value for delete toot modal' do
|
||||||
|
values = { 'setting_delete_modal' => '0' }
|
||||||
|
|
||||||
|
settings.update(values)
|
||||||
|
expect(user.settings['delete_modal']).to eq false
|
||||||
|
end
|
||||||
|
|
||||||
it 'updates the user settings value for gif auto play' do
|
it 'updates the user settings value for gif auto play' do
|
||||||
values = { 'setting_auto_play_gif' => '0' }
|
values = { 'setting_auto_play_gif' => '0' }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue