settings: Update notification settings to new feedback style.

This split notification settings to separate settings for streams,
PM/mention and other notifications settings.
Previously we have to treat them combined, but with this refactor,
we can treat them separately for future changes.

Fixes #8587.
This commit is contained in:
Shubham Dhama
2018-03-08 03:38:42 +05:30
committed by Tim Abbott
parent b55f881447
commit 2782a5d8dc
2 changed files with 30 additions and 32 deletions

View File

@@ -44,39 +44,36 @@ function maybe_bulk_update_stream_notification_setting(notification_checkbox,
});
}
exports.set_up = function () {
var notify_settings_status = $("#notify-settings-status").expectOne();
notify_settings_status.hide();
function change_notification_setting(setting, setting_data, status_element) {
var data = {};
data[setting] = JSON.stringify(setting_data);
settings_ui.do_settings_change('/json/settings/notifications', data, status_element);
}
exports.set_up = function () {
if (!page_params.realm_show_digest_email) {
$("#digest_container").hide();
}
_.each(notification_settings, function (setting) {
$("#" + setting).change(function () {
var data = {};
var setting_name = $('label[for=' + setting + ']').text().trim();
var context = {setting_name: setting_name};
var setting_data = $(this).prop('checked');
data[setting] = JSON.stringify(setting_data);
_.each(pm_mention_notification_settings, function (setting) {
$("#" + setting).change(function () {
change_notification_setting(setting, $(this).prop('checked'),
"#pm-mention-notify-settings-status");
});
});
channel.patch({
url: '/json/settings/notifications',
data: data,
success: function () {
if (setting_data === true) {
ui_report.success(i18n.t("Enabled: __- setting_name__",
context), notify_settings_status);
} else {
ui_report.success(i18n.t("Disabled: __- setting_name__",
context), notify_settings_status);
}
},
error: function (xhr) {
ui_report.error(i18n.t('Error updating: __- setting_name__',
context), xhr, notify_settings_status);
},
});
_.each(other_notification_settings, function (setting) {
$("#" + setting).change(function () {
change_notification_setting(setting, $(this).prop('checked'),
"#other-notify-settings-status");
});
});
_.each(stream_notification_settings, function (stream_setting) {
var setting = stream_setting.setting;
$("#" + setting).change(function () {
var setting_data = $(this).prop('checked');
change_notification_setting(setting, setting_data, "#stream-notify-settings-status");
if (setting === 'enable_stream_desktop_notifications') {
maybe_bulk_update_stream_notification_setting($('#' + setting), function () {
stream_edit.set_notification_setting_for_all_streams('desktop_notifications', setting_data);