mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	channels: Include unsubscribed channels in move selectors.
For channel dropdowns in move messages and move topic modals only subscribed channels are included. To fix it, a new function is made to include subscribed and unsubscribed channels to which the acting user has content access. Each group is sorted respectively with subscribed channels followed by unsubscribed channels. To avoid unsubscribed channels from getting included in the compose box dropdown and saved snippets UI, a separate function get_stream_for_move_messages_widget is made. This function is used to include unsubscribed channels in move selector dropdown only. Fixes #33670.
This commit is contained in:
		@@ -1062,3 +1062,21 @@ export function get_options_for_dropdown_widget(): (dropdown_widget.Option & {
 | 
			
		||||
        }))
 | 
			
		||||
        .sort((a, b) => util.strcmp(a.name.toLowerCase(), b.name.toLowerCase()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function get_streams_for_move_messages_widget(): (dropdown_widget.Option & {
 | 
			
		||||
    stream: StreamSubscription;
 | 
			
		||||
})[] {
 | 
			
		||||
    return get_unsorted_subs_with_content_access()
 | 
			
		||||
        .filter((stream) => !stream.is_archived)
 | 
			
		||||
        .sort((a, b) => {
 | 
			
		||||
            if (a.subscribed !== b.subscribed) {
 | 
			
		||||
                return a.subscribed ? -1 : 1;
 | 
			
		||||
            }
 | 
			
		||||
            return util.strcmp(a.name.toLowerCase(), b.name.toLowerCase());
 | 
			
		||||
        })
 | 
			
		||||
        .map((stream) => ({
 | 
			
		||||
            name: stream.name,
 | 
			
		||||
            unique_id: stream.stream_id,
 | 
			
		||||
            stream,
 | 
			
		||||
        }));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -866,7 +866,7 @@ export async function build_move_topic_to_stream_popover(
 | 
			
		||||
 | 
			
		||||
        stream_widget_value = current_stream_id;
 | 
			
		||||
        const streams_list_options = (): dropdown_widget.Option[] =>
 | 
			
		||||
            stream_data.get_options_for_dropdown_widget().filter(({stream}) => {
 | 
			
		||||
            stream_data.get_streams_for_move_messages_widget().filter(({stream}) => {
 | 
			
		||||
                if (stream.stream_id === current_stream_id) {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -139,6 +139,9 @@ test("basics", () => {
 | 
			
		||||
        is_muted: true,
 | 
			
		||||
        invite_only: true,
 | 
			
		||||
        history_public_to_subscribers: true,
 | 
			
		||||
        can_add_subscribers_group: admins_group.id,
 | 
			
		||||
        can_administer_channel_group: admins_group.id,
 | 
			
		||||
        can_subscribe_group: admins_group.id,
 | 
			
		||||
    };
 | 
			
		||||
    const social = {
 | 
			
		||||
        subscribed: true,
 | 
			
		||||
@@ -148,6 +151,9 @@ test("basics", () => {
 | 
			
		||||
        is_muted: false,
 | 
			
		||||
        invite_only: true,
 | 
			
		||||
        history_public_to_subscribers: false,
 | 
			
		||||
        can_add_subscribers_group: admins_group.id,
 | 
			
		||||
        can_administer_channel_group: admins_group.id,
 | 
			
		||||
        can_subscribe_group: admins_group.id,
 | 
			
		||||
    };
 | 
			
		||||
    const test = {
 | 
			
		||||
        subscribed: true,
 | 
			
		||||
@@ -156,6 +162,9 @@ test("basics", () => {
 | 
			
		||||
        stream_id: 3,
 | 
			
		||||
        is_muted: true,
 | 
			
		||||
        invite_only: false,
 | 
			
		||||
        can_add_subscribers_group: admins_group.id,
 | 
			
		||||
        can_administer_channel_group: admins_group.id,
 | 
			
		||||
        can_subscribe_group: admins_group.id,
 | 
			
		||||
    };
 | 
			
		||||
    const web_public_stream = {
 | 
			
		||||
        subscribed: false,
 | 
			
		||||
@@ -166,6 +175,9 @@ test("basics", () => {
 | 
			
		||||
        invite_only: false,
 | 
			
		||||
        history_public_to_subscribers: true,
 | 
			
		||||
        is_web_public: true,
 | 
			
		||||
        can_add_subscribers_group: admins_group.id,
 | 
			
		||||
        can_administer_channel_group: admins_group.id,
 | 
			
		||||
        can_subscribe_group: admins_group.id,
 | 
			
		||||
    };
 | 
			
		||||
    stream_data.add_sub(denmark);
 | 
			
		||||
    stream_data.add_sub(social);
 | 
			
		||||
@@ -249,6 +261,14 @@ test("basics", () => {
 | 
			
		||||
    const stream_starting_with_25 = {
 | 
			
		||||
        name: "25-or-6-to-4",
 | 
			
		||||
        stream_id: 400,
 | 
			
		||||
        can_add_subscribers_group: admins_group.id,
 | 
			
		||||
        can_administer_channel_group: admins_group.id,
 | 
			
		||||
        can_subscribe_group: admins_group.id,
 | 
			
		||||
        subscribed: false,
 | 
			
		||||
        is_muted: false,
 | 
			
		||||
        invite_only: false,
 | 
			
		||||
        history_public_to_subscribers: true,
 | 
			
		||||
        is_web_public: false,
 | 
			
		||||
    };
 | 
			
		||||
    stream_data.add_sub(stream_starting_with_25);
 | 
			
		||||
    assert.equal(stream_data.slug_to_stream_id("25-or-6-to-4"), 400);
 | 
			
		||||
@@ -263,6 +283,9 @@ test("basics", () => {
 | 
			
		||||
    const stream_99 = {
 | 
			
		||||
        name: "99",
 | 
			
		||||
        stream_id: 401,
 | 
			
		||||
        can_add_subscribers_group: admins_group.id,
 | 
			
		||||
        can_administer_channel_group: admins_group.id,
 | 
			
		||||
        can_subscribe_group: admins_group.id,
 | 
			
		||||
    };
 | 
			
		||||
    stream_data.add_sub(stream_99);
 | 
			
		||||
    assert.equal(stream_data.slug_to_stream_id("99"), 401);
 | 
			
		||||
@@ -272,6 +295,9 @@ test("basics", () => {
 | 
			
		||||
    const stream_id_99 = {
 | 
			
		||||
        name: "Some Stream",
 | 
			
		||||
        stream_id: 99,
 | 
			
		||||
        can_add_subscribers_group: admins_group.id,
 | 
			
		||||
        can_administer_channel_group: admins_group.id,
 | 
			
		||||
        can_subscribe_group: admins_group.id,
 | 
			
		||||
    };
 | 
			
		||||
    stream_data.add_sub(stream_id_99);
 | 
			
		||||
    assert.equal(stream_data.slug_to_stream_id("99"), 99);
 | 
			
		||||
@@ -293,6 +319,9 @@ test("basics", () => {
 | 
			
		||||
                name: "social",
 | 
			
		||||
                stream_id: 2,
 | 
			
		||||
                subscribed: true,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 2,
 | 
			
		||||
        },
 | 
			
		||||
@@ -305,11 +334,103 @@ test("basics", () => {
 | 
			
		||||
                name: "test",
 | 
			
		||||
                stream_id: 3,
 | 
			
		||||
                subscribed: true,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 3,
 | 
			
		||||
        },
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    assert.deepEqual(stream_data.get_streams_for_move_messages_widget(), [
 | 
			
		||||
        {
 | 
			
		||||
            name: "social",
 | 
			
		||||
            stream: {
 | 
			
		||||
                color: "red",
 | 
			
		||||
                history_public_to_subscribers: false,
 | 
			
		||||
                invite_only: true,
 | 
			
		||||
                is_muted: false,
 | 
			
		||||
                name: "social",
 | 
			
		||||
                stream_id: 2,
 | 
			
		||||
                subscribed: true,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 2,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: "test",
 | 
			
		||||
            stream: {
 | 
			
		||||
                color: "yellow",
 | 
			
		||||
                invite_only: false,
 | 
			
		||||
                is_muted: true,
 | 
			
		||||
                name: "test",
 | 
			
		||||
                stream_id: 3,
 | 
			
		||||
                subscribed: true,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 3,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: "25-or-6-to-4",
 | 
			
		||||
            stream: {
 | 
			
		||||
                history_public_to_subscribers: true,
 | 
			
		||||
                invite_only: false,
 | 
			
		||||
                is_muted: false,
 | 
			
		||||
                is_web_public: false,
 | 
			
		||||
                name: "25-or-6-to-4",
 | 
			
		||||
                stream_id: 400,
 | 
			
		||||
                subscribed: false,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 400,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: "web_public_stream",
 | 
			
		||||
            stream: {
 | 
			
		||||
                name: "web_public_stream",
 | 
			
		||||
                stream_id: 4,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
                color: "yellow",
 | 
			
		||||
                history_public_to_subscribers: true,
 | 
			
		||||
                invite_only: false,
 | 
			
		||||
                is_muted: false,
 | 
			
		||||
                is_web_public: true,
 | 
			
		||||
                subscribed: false,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 4,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: "99",
 | 
			
		||||
            stream: {
 | 
			
		||||
                name: "99",
 | 
			
		||||
                stream_id: 401,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 401,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: "Some Stream",
 | 
			
		||||
            stream: {
 | 
			
		||||
                name: "Some Stream",
 | 
			
		||||
                stream_id: 99,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 99,
 | 
			
		||||
        },
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    test.is_archived = true;
 | 
			
		||||
    assert.deepEqual(stream_data.get_options_for_dropdown_widget(), [
 | 
			
		||||
        {
 | 
			
		||||
@@ -322,10 +443,77 @@ test("basics", () => {
 | 
			
		||||
                name: "social",
 | 
			
		||||
                stream_id: 2,
 | 
			
		||||
                subscribed: true,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 2,
 | 
			
		||||
        },
 | 
			
		||||
    ]);
 | 
			
		||||
 | 
			
		||||
    social.invite_only = true;
 | 
			
		||||
    social.can_subscribe_group = me_group.id;
 | 
			
		||||
    social.subscribed = false;
 | 
			
		||||
 | 
			
		||||
    stream_starting_with_25.invite_only = true;
 | 
			
		||||
 | 
			
		||||
    assert.deepEqual(stream_data.get_streams_for_move_messages_widget(), [
 | 
			
		||||
        {
 | 
			
		||||
            name: "social",
 | 
			
		||||
            stream: {
 | 
			
		||||
                color: "red",
 | 
			
		||||
                history_public_to_subscribers: false,
 | 
			
		||||
                invite_only: true,
 | 
			
		||||
                is_muted: false,
 | 
			
		||||
                name: "social",
 | 
			
		||||
                stream_id: 2,
 | 
			
		||||
                subscribed: false,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: me_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 2,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: "web_public_stream",
 | 
			
		||||
            stream: {
 | 
			
		||||
                color: "yellow",
 | 
			
		||||
                history_public_to_subscribers: true,
 | 
			
		||||
                invite_only: false,
 | 
			
		||||
                is_muted: false,
 | 
			
		||||
                is_web_public: true,
 | 
			
		||||
                name: "web_public_stream",
 | 
			
		||||
                stream_id: 4,
 | 
			
		||||
                subscribed: false,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 4,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: "99",
 | 
			
		||||
            stream: {
 | 
			
		||||
                name: "99",
 | 
			
		||||
                stream_id: 401,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 401,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: "Some Stream",
 | 
			
		||||
            stream: {
 | 
			
		||||
                name: "Some Stream",
 | 
			
		||||
                stream_id: 99,
 | 
			
		||||
                can_add_subscribers_group: admins_group.id,
 | 
			
		||||
                can_administer_channel_group: admins_group.id,
 | 
			
		||||
                can_subscribe_group: admins_group.id,
 | 
			
		||||
            },
 | 
			
		||||
            unique_id: 99,
 | 
			
		||||
        },
 | 
			
		||||
    ]);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
test("get_streams_for_user", ({override}) => {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user