mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 05:23:35 +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