From 65f05794ee59d638ad054ae6602d8ebc980fb637 Mon Sep 17 00:00:00 2001 From: Saubhagya Patel Date: Mon, 18 Nov 2024 17:10:23 +0530 Subject: [PATCH] invitations: Default to empty channel list when inviting guest users. This commit includes the following changes: - While inviting users for guest roles, we display an empty channel list rather than the default channel list and the default channels checkbox is unselected. - While inviting users for non-guest roles we continue to select the default channels checkbox. - When switching between guest and non-guest roles, the previous state of included channels for the guest role is restored while inviting a user as a guest. Fixes: #31988. Co-authored-by: Aditya <113302312+userAdityaa@users.noreply.github.com> --- web/src/invite.ts | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/web/src/invite.ts b/web/src/invite.ts index 56c7304256..e45fb20fef 100644 --- a/web/src/invite.ts +++ b/web/src/invite.ts @@ -39,6 +39,7 @@ let custom_expiration_time_input = 10; let custom_expiration_time_unit = "days"; let pills: email_pill.EmailPillWidget; let stream_pill_widget: stream_pill.StreamPillWidget; +let guest_invite_stream_ids: number[] = []; function reset_error_messages(): void { $("#dialog_error").hide().text("").removeClass(common.status_classes); @@ -296,7 +297,7 @@ function set_streams_to_join_list_visibility(): void { } } -function update_guest_visible_users_count(): void { +function update_guest_visible_users_count_and_stream_ids(): void { const invite_as = Number.parseInt( $("select:not([multiple])#invite_as").val()!, 10, @@ -305,6 +306,9 @@ function update_guest_visible_users_count(): void { assert(!Number.isNaN(invite_as)); const guest_role_selected = invite_as === settings_config.user_role_values.guest.code; + if (guest_role_selected) { + guest_invite_stream_ids = stream_pill.get_stream_ids(stream_pill_widget); + } if (!guest_role_selected || settings_data.guests_can_access_all_other_users()) { $("#guest_visible_users_container").hide(); return; @@ -333,6 +337,33 @@ function generate_invite_tips_data(): Record { }; } +function update_stream_list(): void { + const invite_as = Number.parseInt( + $("select:not([multiple])#invite_as").val()!, + 10, + ); + + assert(!Number.isNaN(invite_as)); + + const guest_role_selected = invite_as === settings_config.user_role_values.guest.code; + stream_pill_widget.clear(); + + if (guest_role_selected) { + $("#invite_select_default_streams").prop("checked", false); + $(".add_streams_container").show(); + for (const stream_id of guest_invite_stream_ids) { + const sub = stream_data.get_sub_by_id(stream_id); + if (sub) { + stream_pill.append_stream(sub, stream_pill_widget, false); + } + } + } else { + $("#invite_select_default_streams").prop("checked", true); + invite_stream_picker_pill.add_default_stream_pills(stream_pill_widget); + set_streams_to_join_list_visibility(); + } +} + function open_invite_user_modal(e: JQuery.ClickEvent): void { e.stopPropagation(); e.preventDefault(); @@ -377,11 +408,16 @@ function open_invite_user_modal(e: JQuery.ClickEvent): void stream_pill_widget = invite_stream_picker_pill.create($stream_pill_container); } - $("#invite_as, #invite_streams_container .input, #invite_select_default_streams").on( + $("#invite_streams_container .input, #invite_select_default_streams").on( "change", - update_guest_visible_users_count, + update_guest_visible_users_count_and_stream_ids, ); + $("#invite_as").on("change", () => { + update_stream_list(); + update_guest_visible_users_count_and_stream_ids(); + }); + $("#invite-user-modal").on("click", ".setup-tips-container .banner_content a", () => { dialog_widget.close(); });