From fc22b86eb65c8fa3648150b690aa807e077e034c Mon Sep 17 00:00:00 2001 From: Ujjawal Modi Date: Mon, 8 May 2023 12:00:26 +0530 Subject: [PATCH] streams: Correctly disable adding subscribers while creating streams. This commit disables the field used for adding other subscribers in stream creation box for users who are not allowed to add other users to streams because of realm level setting "Who can add users to streams". Fixes #24900. --- web/src/stream_create.js | 10 +++++++++ web/src/stream_ui_updates.js | 21 ++++++++++++++++++- web/src/tippyjs.js | 12 +++++++++++ .../stream_settings/new_stream_users.hbs | 17 +++++++++------ 4 files changed, 53 insertions(+), 7 deletions(-) diff --git a/web/src/stream_create.js b/web/src/stream_create.js index ff181a03f5..7bd822f8e6 100644 --- a/web/src/stream_create.js +++ b/web/src/stream_create.js @@ -15,6 +15,7 @@ import * as settings_data from "./settings_data"; import * as stream_create_subscribers from "./stream_create_subscribers"; import * as stream_data from "./stream_data"; import * as stream_settings_ui from "./stream_settings_ui"; +import * as stream_ui_updates from "./stream_ui_updates"; import * as ui_report from "./ui_report"; import {parse_html} from "./ui_util"; @@ -360,6 +361,15 @@ export function show_new_stream_modal() { }); } } + const $add_subscribers_container = $( + "#stream_creation_form .subscriber_list_settings", + ).expectOne(); + + stream_ui_updates.enable_or_disable_add_subscribers_elements( + $add_subscribers_container, + settings_data.user_can_subscribe_other_users(), + true, + ); // set default state for "announce stream" option. update_announce_stream_state(); diff --git a/web/src/stream_ui_updates.js b/web/src/stream_ui_updates.js index c9be1a177f..544be6aaee 100644 --- a/web/src/stream_ui_updates.js +++ b/web/src/stream_ui_updates.js @@ -282,7 +282,11 @@ export function update_setting_element(sub, setting_name) { settings_org.discard_property_element_changes($elem, false, sub); } -export function enable_or_disable_add_subscribers_elements($container_elem, enable_elem) { +export function enable_or_disable_add_subscribers_elements( + $container_elem, + enable_elem, + stream_creation = false, +) { const $input_element = $container_elem.find(".input").expectOne(); const $add_subscribers_button = $container_elem .find('button[name="add_subscriber"]') @@ -298,4 +302,19 @@ export function enable_or_disable_add_subscribers_elements($container_elem, enab } else { $container_elem.find(".add_subscribers_container").addClass("add_subscribers_disabled"); } + + if (stream_creation) { + const $subscribe_all_users_button = $container_elem.find("button.add_all_users_to_stream"); + $subscribe_all_users_button.prop("disabled", !enable_elem); + + if (enable_elem) { + $container_elem + .find(".add_all_users_to_stream_btn_container") + .removeClass("add_subscribers_disabled"); + } else { + $container_elem + .find(".add_all_users_to_stream_btn_container") + .addClass("add_subscribers_disabled"); + } + } } diff --git a/web/src/tippyjs.js b/web/src/tippyjs.js index 6d26492488..13e069feda 100644 --- a/web/src/tippyjs.js +++ b/web/src/tippyjs.js @@ -647,6 +647,18 @@ export function initialize() { instance.destroy(); }, }); + + delegate("body", { + target: ["#stream_creation_form .add_subscribers_disabled"], + content: $t({ + defaultMessage: + "You do not have permission to add other users to streams in this organization.", + }), + appendTo: () => document.body, + onHidden(instance) { + instance.destroy(); + }, + }); } export function show_copied_confirmation($copy_button) { diff --git a/web/templates/stream_settings/new_stream_users.hbs b/web/templates/stream_settings/new_stream_users.hbs index 37c579007a..77784a96aa 100644 --- a/web/templates/stream_settings/new_stream_users.hbs +++ b/web/templates/stream_settings/new_stream_users.hbs @@ -1,10 +1,15 @@ -
- {{> add_subscribers_form}} -
-
+
+
+ {{> add_subscribers_form}} +
+
-{{t "Do you want to add everyone?"}} - + + {{t "Do you want to add everyone?"}} + + + +

{{t 'Subscribers' }}