settings: Add UI for realm-level defaults of notification settings.

This commit adds UI for realm-level defaults of user notification
settings. We do not have "Send test notification" option here.
This commit is contained in:
Sahil Batra
2021-08-27 00:33:27 +05:30
committed by Tim Abbott
parent ed71b3211a
commit d4c8284d24
9 changed files with 92 additions and 16 deletions

View File

@@ -58,6 +58,24 @@ function insert_tip_box() {
.prepend(tip_box);
}
function get_realm_level_notification_settings(options) {
const all_notifications_settings = settings_config.all_notifications(
realm_user_settings_defaults,
);
// We remove enable_marketing_emails setting from all_notification_settings, since there is no
// realm-level default of this setting.
all_notifications_settings.settings.other_email_settings = [
"enable_digest_emails",
"enable_login_emails",
];
options.general_settings = all_notifications_settings.general_settings;
options.notification_settings = all_notifications_settings.settings;
options.show_push_notifications_tooltip =
all_notifications_settings.show_push_notifications_tooltip;
}
export function build_page() {
const options = {
custom_profile_field_types: page_params.custom_profile_field_types,
@@ -129,7 +147,13 @@ export function build_page() {
default_view_values: settings_config.default_view_values,
settings_object: realm_user_settings_defaults,
display_settings: settings_config.get_all_display_settings(),
settings_label: settings_config.display_settings_labels,
settings_label: settings_config.realm_user_settings_defaults_labels,
desktop_icon_count_display_values: settings_config.desktop_icon_count_display_values,
enable_sound_select:
realm_user_settings_defaults.enable_sounds ||
realm_user_settings_defaults.enable_stream_audible_notifications,
email_notifications_batching_period_values:
settings_config.email_notifications_batching_period_values,
};
if (options.realm_logo_source !== "D" && options.realm_night_logo_source === "D") {
@@ -144,6 +168,8 @@ export function build_page() {
"https://zulip.readthedocs.io/en/latest/production/giphy-gif-integration.html";
}
get_realm_level_notification_settings(options);
const rendered_admin_tab = render_admin_tab(options);
$("#settings_content .organization-box").html(rendered_admin_tab);
$("#settings_content .alert").removeClass("show");

View File

@@ -17,6 +17,7 @@ import * as narrow_state from "./narrow_state";
import * as navigate from "./navigate";
import {page_params} from "./page_params";
import * as people from "./people";
import {realm_user_settings_defaults} from "./realm_user_settings_defaults";
import * as settings_config from "./settings_config";
import * as spoilers from "./spoilers";
import * as stream_data from "./stream_data";
@@ -90,6 +91,10 @@ export function initialize() {
});
update_notification_sound_source($("#user-notification-sound-audio"), user_settings);
update_notification_sound_source(
$("#realm-default-notification-sound-audio"),
realm_user_settings_defaults,
);
}
function update_notification_sound_source(container_elem, settings_object) {

View File

@@ -1,4 +1,4 @@
type RealmDefaultSettingsType = {
export type RealmDefaultSettingsType = {
color_scheme: number;
default_language: string;
default_view: string;

View File

@@ -2,6 +2,7 @@ import Handlebars from "handlebars/runtime";
import {$t, $t_html} from "./i18n";
import {page_params} from "./page_params";
import type {RealmDefaultSettingsType} from "./realm_user_settings_defaults";
import type {UserSettingsType} from "./user_settings";
/*
@@ -371,6 +372,29 @@ export const display_settings_labels = {
),
};
export const realm_user_settings_defaults_labels = {
enable_online_push_notifications: $t({
defaultMessage: "Send mobile notifications even if user is online (useful for testing)",
}),
pm_content_in_desktop_notifications: $t({
defaultMessage: "Include content of private messages in desktop notifications",
}),
desktop_icon_count_display: $t({
defaultMessage: "Unread count summary (appears in desktop sidebar and browser tab)",
}),
enable_digest_emails: $t({defaultMessage: "Send digest emails when user is away"}),
enable_login_emails: $t({
defaultMessage: "Send email notifications for new logins to the account",
}),
message_content_in_email_notifications: $t({
defaultMessage: "Include message content in message notification emails",
}),
realm_name_in_notifications: $t({
defaultMessage: "Include organization name in subject of message notification emails",
}),
...display_settings_labels,
};
// NOTIFICATIONS
export const general_notifications_table_labels = {
@@ -404,7 +428,7 @@ export const stream_specific_notification_settings = [
"wildcard_mentions_notify",
];
type SettingsObjectType = UserSettingsType;
type SettingsObjectType = UserSettingsType | RealmDefaultSettingsType;
type PageParamsItem = keyof SettingsObjectType;
export const stream_notification_settings: PageParamsItem[] = [
"enable_stream_desktop_notifications",

View File

@@ -52,12 +52,14 @@ 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) {
function update_desktop_icon_count_display(container, settings_object, for_realm_settings) {
container
.find(".setting_desktop_icon_count_display")
.val(settings_object.desktop_icon_count_display);
if (!for_realm_settings) {
unread_ui.update_unread_counts();
}
}
export function set_enable_digest_emails_visibility(container) {
if (page_params.realm_digest_emails_enabled) {
@@ -76,9 +78,14 @@ export function set_enable_marketing_emails_visibility() {
}
}
export function set_up(container, settings_object) {
const patch_url = "/json/settings";
const notification_sound_elem = $("#user-notification-sound-audio");
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");
}
container.find(".notification-settings-form").on("change", "input, select", function (e) {
e.preventDefault();
e.stopPropagation();
@@ -96,13 +103,15 @@ export function set_up(container, settings_object) {
);
});
update_desktop_icon_count_display(container, settings_object);
update_desktop_icon_count_display(container, settings_object, for_realm_settings);
if (!for_realm_settings) {
container.find(".send_test_notification").on("click", () => {
notifications.send_test_notification(
$t({defaultMessage: "This is what a Zulip notification looks like."}),
);
});
}
container.find(".play_notification_sound").on("click", () => {
if (settings_object.notification_sound !== "none") {
@@ -134,9 +143,11 @@ export function set_up(container, settings_object) {
);
set_enable_digest_emails_visibility(container);
if (!for_realm_settings) {
set_enable_marketing_emails_visibility();
rerender_ui();
}
}
export function update_page(container, settings_object) {
for (const setting of settings_config.all_notification_settings) {

View File

@@ -3,6 +3,7 @@ import $ from "jquery";
import {page_params} from "./page_params";
import {realm_user_settings_defaults} from "./realm_user_settings_defaults";
import * as settings_display from "./settings_display";
import * as settings_notifications from "./settings_notifications";
export function maybe_disable_widgets() {
if (!page_params.is_admin) {
@@ -18,5 +19,6 @@ export function maybe_disable_widgets() {
export function set_up() {
const container = $("#realm-user-default-settings");
settings_display.set_up(container, realm_user_settings_defaults, true);
settings_notifications.set_up(container, realm_user_settings_defaults, true);
maybe_disable_widgets();
}

View File

@@ -51,7 +51,9 @@
<h3 class="inline-block">{{t "Desktop message notifications" }}</h3>
<div class="alert-notification"></div>
{{#unless for_realm_settings}}
<p><a class="send_test_notification">{{t "Test desktop notification" }}</a></p>
{{/unless}}
{{#each notification_settings.desktop_notification_settings}}
{{> settings_checkbox

View File

@@ -3,4 +3,6 @@
{{t "Configure the default personal preference settings for new users joining your organization." }}
</div>
{{> display_settings prefix="realm_" for_realm_settings=true}}
{{> notification_settings prefix="realm_" for_realm_settings=true}}
</div>

View File

@@ -208,6 +208,10 @@
<source class="notification-sound-source-ogg" type="audio/ogg" />
<source class="notification-sound-source-mp3" type="audio/mpeg" />
</audio>
<audio id="realm-default-notification-sound-audio">
<source class="notification-sound-source-ogg" type="audio/ogg" />
<source class="notification-sound-source-mp3" type="audio/mpeg" />
</audio>
<div id="login-to-access-modal-holder"></div>
</div>
{% endblock %}