diff --git a/static/js/server_events_dispatch.js b/static/js/server_events_dispatch.js index 2e059e1910..fccc88c4c1 100644 --- a/static/js/server_events_dispatch.js +++ b/static/js/server_events_dispatch.js @@ -406,9 +406,7 @@ export function dispatch_normal_event(event) { ); } else if (settings_config.all_notification_settings.includes(event.property)) { settings_notifications.update_page( - container_elem, - realm_user_settings_defaults, - true, + settings_realm_user_settings_defaults.realm_default_settings_panel, ); } else { container_elem @@ -594,11 +592,7 @@ export function dispatch_normal_event(event) { case "user_settings": { if (settings_config.all_notification_settings.includes(event.property)) { notifications.handle_global_notification_updates(event.property, event.value); - settings_notifications.update_page( - $("#user-notification-settings"), - user_settings, - false, - ); + settings_notifications.update_page(settings_notifications.user_settings_panel); // TODO: This should also do a refresh of the stream_edit UI // if it's currently displayed, possibly reusing some code // from stream_events.js diff --git a/static/js/settings_notifications.js b/static/js/settings_notifications.js index 243acf54a0..573c0f168c 100644 --- a/static/js/settings_notifications.js +++ b/static/js/settings_notifications.js @@ -14,6 +14,8 @@ import * as stream_settings_data from "./stream_settings_data"; import * as unread_ui from "./unread_ui"; import {user_settings} from "./user_settings"; +export const user_settings_panel = {}; + function rerender_ui() { const unmatched_streams_table = $("#stream-specific-notify-table"); if (unmatched_streams_table.length === 0) { @@ -52,11 +54,13 @@ function change_notification_setting(setting, value, status_element, url) { settings_ui.do_settings_change(channel.patch, url, data, status_element); } -function update_desktop_icon_count_display(container, settings_object, for_realm_settings) { +function update_desktop_icon_count_display(settings_panel) { + const container = $(settings_panel.container); + const settings_object = settings_panel.settings_object; container .find(".setting_desktop_icon_count_display") .val(settings_object.desktop_icon_count_display); - if (!for_realm_settings) { + if (!settings_panel.for_realm_settings) { unread_ui.update_unread_counts(); } } @@ -78,13 +82,12 @@ export function set_enable_marketing_emails_visibility() { } } -export function set_up(container, settings_object, for_realm_settings) { - let patch_url = "/json/settings"; - let notification_sound_elem = $("#user-notification-sound-audio"); - if (for_realm_settings) { - patch_url = "/json/realm/user_settings_defaults"; - notification_sound_elem = $("#realm-default-notification-sound-audio"); - } +export function set_up(settings_panel) { + const container = $(settings_panel.container); + const settings_object = settings_panel.settings_object; + const patch_url = settings_panel.patch_url; + const notification_sound_elem = $(settings_panel.notification_sound_elem); + const for_realm_settings = settings_panel.for_realm_settings; container.find(".notification-settings-form").on("change", "input, select", function (e) { e.preventDefault(); @@ -103,7 +106,7 @@ export function set_up(container, settings_object, for_realm_settings) { ); }); - update_desktop_icon_count_display(container, settings_object, for_realm_settings); + update_desktop_icon_count_display(settings_panel); if (!for_realm_settings) { container.find(".send_test_notification").on("click", () => { @@ -149,7 +152,9 @@ export function set_up(container, settings_object, for_realm_settings) { } } -export function update_page(container, settings_object, for_realm_settings) { +export function update_page(settings_panel) { + const container = $(settings_panel.container); + const settings_object = settings_panel.settings_object; for (const setting of settings_config.all_notification_settings) { if ( setting === "enable_offline_push_notifications" && @@ -159,7 +164,7 @@ export function update_page(container, settings_object, for_realm_settings) { // we should just leave the checkbox always off. continue; } else if (setting === "desktop_icon_count_display") { - update_desktop_icon_count_display(container, settings_object, for_realm_settings); + update_desktop_icon_count_display(settings_panel); continue; } else if ( setting === "notification_sound" || @@ -173,3 +178,11 @@ export function update_page(container, settings_object, for_realm_settings) { } rerender_ui(); } + +export function initialize() { + user_settings_panel.container = "#user-notification-settings"; + user_settings_panel.settings_object = user_settings; + user_settings_panel.patch_url = "/json/settings"; + user_settings_panel.notification_sound_elem = "#user-notification-sound-audio"; + user_settings_panel.for_realm_settings = false; +} diff --git a/static/js/settings_realm_user_settings_defaults.js b/static/js/settings_realm_user_settings_defaults.js index 2bef991312..92d487dce2 100644 --- a/static/js/settings_realm_user_settings_defaults.js +++ b/static/js/settings_realm_user_settings_defaults.js @@ -23,7 +23,7 @@ export function maybe_disable_widgets() { export function set_up() { const container = $(realm_default_settings_panel.container); settings_display.set_up(realm_default_settings_panel); - settings_notifications.set_up(container, realm_user_settings_defaults, true); + settings_notifications.set_up(realm_default_settings_panel); container.find(".presence_enabled").on("change", (e) => { e.preventDefault(); @@ -58,5 +58,7 @@ export function initialize() { realm_default_settings_panel.container = "#realm-user-default-settings"; realm_default_settings_panel.settings_object = realm_user_settings_defaults; realm_default_settings_panel.patch_url = "/json/realm/user_settings_defaults"; + realm_default_settings_panel.notification_sound_elem = + "#realm-default-notification-sound-audio"; realm_default_settings_panel.for_realm_settings = true; } diff --git a/static/js/settings_sections.js b/static/js/settings_sections.js index b89151386d..d42c768d63 100644 --- a/static/js/settings_sections.js +++ b/static/js/settings_sections.js @@ -1,5 +1,3 @@ -import $ from "jquery"; - import * as alert_words_ui from "./alert_words_ui"; import * as attachments_ui from "./attachments_ui"; import * as blueslip from "./blueslip"; @@ -20,7 +18,6 @@ import * as settings_realm_user_settings_defaults from "./settings_realm_user_se import * as settings_streams from "./settings_streams"; import * as settings_user_groups from "./settings_user_groups"; import * as settings_users from "./settings_users"; -import {user_settings} from "./user_settings"; const load_func_dict = new Map(); // group -> function const loaded_groups = new Set(); @@ -58,7 +55,7 @@ export function initialize() { settings_display.set_up(settings_display.user_settings_panel); }); load_func_dict.set("notifications", () => { - settings_notifications.set_up($("#user-notification-settings"), user_settings); + settings_notifications.set_up(settings_notifications.user_settings_panel); }); load_func_dict.set("your-bots", settings_bots.set_up); load_func_dict.set("alert-words", alert_words_ui.set_up_alert_words); diff --git a/static/js/stream_events.js b/static/js/stream_events.js index 7dca8e8a3a..f18ffb3769 100644 --- a/static/js/stream_events.js +++ b/static/js/stream_events.js @@ -17,7 +17,6 @@ import * as stream_list from "./stream_list"; import * as stream_muting from "./stream_muting"; import * as stream_settings_ui from "./stream_settings_ui"; import * as sub_store from "./sub_store"; -import {user_settings} from "./user_settings"; // In theory, this function should apply the account-level defaults, // however, they are only called after a manual override, so @@ -55,11 +54,7 @@ export function update_property(stream_id, property, value, other_values) { case "email_notifications": case "wildcard_mentions_notify": update_stream_setting(sub, value, property); - settings_notifications.update_page( - $("#user-notification-settings"), - user_settings, - false, - ); + settings_notifications.update_page(settings_notifications.user_settings_panel); break; case "name": stream_settings_ui.update_stream_name(sub, value); diff --git a/static/js/ui_init.js b/static/js/ui_init.js index c211e9e5e0..ced253659a 100644 --- a/static/js/ui_init.js +++ b/static/js/ui_init.js @@ -69,6 +69,7 @@ import * as server_events from "./server_events"; import * as settings from "./settings"; import * as settings_data from "./settings_data"; import * as settings_display from "./settings_display"; +import * as settings_notifications from "./settings_notifications"; import * as settings_panel_menu from "./settings_panel_menu"; import * as settings_realm_user_settings_defaults from "./settings_realm_user_settings_defaults"; import * as settings_sections from "./settings_sections"; @@ -603,6 +604,7 @@ export function initialize_everything() { giphy.initialize(); presence.initialize(presence_params); settings_display.initialize(); + settings_notifications.initialize(); settings_realm_user_settings_defaults.initialize(); settings_panel_menu.initialize(); settings_sections.initialize();