diff --git a/web/src/recent_topics_ui.js b/web/src/recent_topics_ui.js index b14d75ebd3..61799337e0 100644 --- a/web/src/recent_topics_ui.js +++ b/web/src/recent_topics_ui.js @@ -17,6 +17,7 @@ import * as message_store from "./message_store"; import * as message_util from "./message_util"; import * as message_view_header from "./message_view_header"; import * as muted_topics_ui from "./muted_topics_ui"; +import * as muted_users from "./muted_users"; import * as narrow from "./narrow"; import * as narrow_state from "./narrow_state"; import * as navigate from "./navigate"; @@ -550,6 +551,14 @@ export function filters_should_hide_topic(topic_data) { return true; } + if (filters.has("include_private") && topic_data.type === "private") { + const recipients = people.split_to_ints(msg.to_user_ids); + + if (recipients.every((id) => muted_users.is_user_muted(id))) { + return true; + } + } + const search_keyword = $("#recent_topics_search").val(); if (!topic_in_search_results(search_keyword, msg.stream, msg.topic)) { return true; diff --git a/web/tests/recent_topics.test.js b/web/tests/recent_topics.test.js index 4a4e7a8b10..188614c90a 100644 --- a/web/tests/recent_topics.test.js +++ b/web/tests/recent_topics.test.js @@ -192,9 +192,15 @@ people.add_active_user({ user_id: 3, full_name: "Spike Spiegel", }); +people.add_active_user({ + email: "eren@zulip.com", + user_id: 4, + full_name: "Eren Yeager", +}); people.initialize_current_user(1); muted_users.add_muted_user(2, 17947949); +muted_users.add_muted_user(4, 17947949); let id = 0; @@ -307,6 +313,22 @@ private_messages[0] = { display_recipient: [{id: 1}, {id: 2}, {id: 3}], pm_with_url: test_url(), }; +private_messages[1] = { + id: (id += 1), + sender_id: sender1, + to_user_ids: "2,4", + type: "private", + display_recipient: [{id: 1}, {id: 2}, {id: 4}], + pm_with_url: test_url(), +}; +private_messages[2] = { + id: (id += 1), + sender_id: sender1, + to_user_ids: "3", + type: "private", + display_recipient: [{id: 1}, {id: 3}], + pm_with_url: test_url(), +}; function get_topic_key(stream_id, topic) { return stream_id + ":" + topic.toLowerCase(); @@ -508,6 +530,10 @@ test("test_filter_pm", ({mock_template}) => { ]; rt.process_messages([private_messages[0]]); + + assert.deepEqual(rt.filters_should_hide_topic({type: "private", last_msg_id: 12}), false); + assert.deepEqual(rt.filters_should_hide_topic({type: "private", last_msg_id: 13}), true); + assert.deepEqual(rt.filters_should_hide_topic({type: "private", last_msg_id: 14}), false); }); test("test_filter_unread", ({mock_template}) => {