From b8661b6633f0557816dbcd9e2ca7f2e7a880d119 Mon Sep 17 00:00:00 2001 From: Aman Agrawal Date: Wed, 17 Aug 2022 05:10:19 +0000 Subject: [PATCH] message_lists: Add a function to return rendered message_lists. This function returns home message_list and the current narrowed message_list if it is different than home. --- frontend_tests/node_tests/dispatch.js | 1 + frontend_tests/node_tests/echo.js | 19 +++++++++++++++--- frontend_tests/node_tests/example7.js | 6 ++---- frontend_tests/node_tests/message_events.js | 4 ++-- static/js/echo.js | 22 ++++++++------------- static/js/message_events.js | 10 +++------- static/js/message_lists.js | 8 ++++++++ static/js/message_live_update.js | 10 +++------- static/js/server_events_dispatch.js | 11 ++++------- static/js/ui.js | 8 ++------ static/js/unread_ops.js | 5 ++--- 11 files changed, 51 insertions(+), 53 deletions(-) diff --git a/frontend_tests/node_tests/dispatch.js b/frontend_tests/node_tests/dispatch.js index e5e60cd593..9beeb245cd 100644 --- a/frontend_tests/node_tests/dispatch.js +++ b/frontend_tests/node_tests/dispatch.js @@ -85,6 +85,7 @@ const electron_bridge = set_global("electron_bridge", {}); message_lists.current = {}; message_lists.home = {}; +message_lists.all_rendered_message_lists = () => [message_lists.home, message_lists.current]; // page_params is highly coupled to dispatching now diff --git a/frontend_tests/node_tests/echo.js b/frontend_tests/node_tests/echo.js index 6c9a6631e7..fa1d1f0f7a 100644 --- a/frontend_tests/node_tests/echo.js +++ b/frontend_tests/node_tests/echo.js @@ -33,9 +33,22 @@ const message_store = mock_esm("../../static/js/message_store", { set_message_booleans: () => {}, }); -mock_esm("../../static/js/message_list"); -message_lists.current = ""; -message_lists.home = {view: {}}; +const noop = () => {}; +message_lists.current = { + view: { + rerender_messages: noop, + change_message_id: noop, + }, + change_message_id: noop, +}; +message_lists.home = { + view: { + rerender_messages: noop, + change_message_id: noop, + }, + change_message_id: noop, +}; +message_lists.all_rendered_message_lists = () => [message_lists.home, message_lists.current]; const drafts = zrequire("drafts"); const echo = zrequire("echo"); diff --git a/frontend_tests/node_tests/example7.js b/frontend_tests/node_tests/example7.js index 0dc5c72a03..d1e3785c68 100644 --- a/frontend_tests/node_tests/example7.js +++ b/frontend_tests/node_tests/example7.js @@ -50,7 +50,6 @@ const {run_test} = require("../zjsunit/test"); */ const channel = mock_esm("../../static/js/channel"); -const message_list = mock_esm("../../static/js/message_list"); const message_lists = mock_esm("../../static/js/message_lists"); const message_viewport = mock_esm("../../static/js/message_viewport"); const notifications = mock_esm("../../static/js/notifications"); @@ -58,6 +57,7 @@ const unread_ui = mock_esm("../../static/js/unread_ui"); message_lists.current = {}; message_lists.home = {}; +message_lists.all_rendered_message_lists = () => [message_lists.home, message_lists.current]; const message_store = zrequire("message_store"); const recent_topics_util = zrequire("recent_topics_util"); @@ -102,13 +102,11 @@ run_test("unread_ops", ({override}) => { // Make our "test" message appear visible. override(message_viewport, "bottom_message_visible", () => true); - // Make us not be in a narrow (somewhat hackily). - message_list.narrowed = undefined; - // Set message_lists.current containing messages that can be marked read override(message_lists.current, "all_messages", () => test_messages); // Ignore these interactions for now: + override(message_lists.current, "show_message_as_read", () => {}); override(message_lists.home, "show_message_as_read", () => {}); override(notifications, "close_notification", () => {}); override(unread_ui, "update_unread_counts", () => {}); diff --git a/frontend_tests/node_tests/message_events.js b/frontend_tests/node_tests/message_events.js index 9d37d28887..1f45902815 100644 --- a/frontend_tests/node_tests/message_events.js +++ b/frontend_tests/node_tests/message_events.js @@ -9,13 +9,13 @@ const {page_params} = require("../zjsunit/zpage_params"); const condense = mock_esm("../../static/js/condense"); const message_edit = mock_esm("../../static/js/message_edit"); -const message_list = mock_esm("../../static/js/message_list"); const message_lists = mock_esm("../../static/js/message_lists"); const notifications = mock_esm("../../static/js/notifications"); const pm_list = mock_esm("../../static/js/pm_list"); const stream_list = mock_esm("../../static/js/stream_list"); const unread_ui = mock_esm("../../static/js/unread_ui"); message_lists.current = {}; +message_lists.all_rendered_message_lists = () => [message_lists.home, message_lists.current]; const people = zrequire("people"); const message_events = zrequire("message_events"); @@ -96,6 +96,7 @@ run_test("update_messages", () => { rendered_mgs = msgs_to_rerender; assert.equal(message_content_edited, true); }; + message_lists.home = message_lists.current; const side_effects = [ [condense, "un_cache_message_content_height"], @@ -109,7 +110,6 @@ run_test("update_messages", () => { const helper = test_helper(side_effects); page_params.realm_allow_edit_history = false; - message_list.narrowed = "stub-to-ignore"; const $message_edit_history_modal = $.create("#message-edit-history"); const $modal = $.create("micromodal").addClass("modal--open"); diff --git a/static/js/echo.js b/static/js/echo.js index 0a7d51ad4f..64ecfa27c6 100644 --- a/static/js/echo.js +++ b/static/js/echo.js @@ -9,7 +9,6 @@ import * as drafts from "./drafts"; import * as local_message from "./local_message"; import * as markdown from "./markdown"; import * as message_events from "./message_events"; -import * as message_list from "./message_list"; import * as message_lists from "./message_lists"; import * as message_store from "./message_store"; import * as narrow_state from "./narrow_state"; @@ -327,10 +326,8 @@ export function edit_locally(message, request) { // We don't have logic to adjust unread counts, because message // reaching this code path must either have been sent by us or the // topic isn't being edited, so unread counts can't have changed. - - message_lists.home.view.rerender_messages([message]); - if (message_lists.current === message_list.narrowed) { - message_list.narrowed.view.rerender_messages([message]); + for (const msg_list of message_lists.all_rendered_message_lists()) { + msg_list.view.rerender_messages([message]); } stream_list.update_streams_sidebar(); pm_list.update_private_messages(); @@ -367,13 +364,11 @@ export function update_message_lists({old_id, new_id}) { if (all_messages_data !== undefined) { all_messages_data.change_message_id(old_id, new_id); } - for (const msg_list of [message_lists.home, message_list.narrowed]) { - if (msg_list !== undefined) { - msg_list.change_message_id(old_id, new_id); + for (const msg_list of message_lists.all_rendered_message_lists()) { + msg_list.change_message_id(old_id, new_id); - if (msg_list.view !== undefined) { - msg_list.view.change_message_id(old_id, new_id); - } + if (msg_list.view !== undefined) { + msg_list.view.change_message_id(old_id, new_id); } } } @@ -434,9 +429,8 @@ export function process_from_server(messages) { // changes in either the rounded timestamp we display or the // message content, but in practice, there's no harm to just // doing it unconditionally. - message_lists.home.view.rerender_messages(msgs_to_rerender); - if (message_lists.current === message_list.narrowed) { - message_list.narrowed.view.rerender_messages(msgs_to_rerender); + for (const msg_list of message_lists.all_rendered_message_lists()) { + msg_list.view.rerender_messages(msgs_to_rerender); } } diff --git a/static/js/message_events.js b/static/js/message_events.js index 5070efa81c..9800e278ed 100644 --- a/static/js/message_events.js +++ b/static/js/message_events.js @@ -506,9 +506,8 @@ export function update_messages(events) { // edited. We should replace any_message_content_edited with // passing two sets to rerender_messages; the set of all that // are changed, and the set with content changes. - message_lists.current.view.rerender_messages(msgs_to_rerender, any_message_content_edited); - if (message_lists.current === message_list.narrowed) { - message_lists.home.view.rerender_messages(msgs_to_rerender); + for (const list of message_lists.all_rendered_message_lists()) { + list.view.rerender_messages(msgs_to_rerender, any_message_content_edited); } } @@ -525,10 +524,7 @@ export function update_messages(events) { export function remove_messages(message_ids) { all_messages_data.remove(message_ids); - for (const list of [message_lists.home, message_list.narrowed]) { - if (list === undefined) { - continue; - } + for (const list of message_lists.all_rendered_message_lists()) { list.remove_and_rerender(message_ids); } recent_senders.update_topics_of_deleted_message_ids(message_ids); diff --git a/static/js/message_lists.js b/static/js/message_lists.js index 606024fb3b..dc1b98e208 100644 --- a/static/js/message_lists.js +++ b/static/js/message_lists.js @@ -8,6 +8,14 @@ export function set_current(msg_list) { current = msg_list; } +export function all_rendered_message_lists() { + const rendered_message_lists = [home]; + if (current !== home) { + rendered_message_lists.push(current); + } + return rendered_message_lists; +} + export function initialize() { home = new message_list.MessageList({ table_name: "zhome", diff --git a/static/js/message_live_update.js b/static/js/message_live_update.js index 99e3ce6d28..663a0d6186 100644 --- a/static/js/message_live_update.js +++ b/static/js/message_live_update.js @@ -1,13 +1,9 @@ -import * as message_list from "./message_list"; import * as message_lists from "./message_lists"; import * as message_store from "./message_store"; import * as people from "./people"; export function rerender_messages_view() { - for (const list of [message_lists.home, message_list.narrowed]) { - if (list === undefined) { - continue; - } + for (const list of message_lists.all_rendered_message_lists()) { if (list.table_name !== undefined) { list.rerender_view(); } @@ -15,8 +11,8 @@ export function rerender_messages_view() { } function rerender_messages_view_for_user(user_id) { - for (const list of [message_lists.home, message_list.narrowed]) { - if (list?.table_name === undefined) { + for (const list of message_lists.all_rendered_message_lists()) { + if (list.table_name === undefined) { continue; } const messages = list.data.get_messages_sent_by_user(user_id); diff --git a/static/js/server_events_dispatch.js b/static/js/server_events_dispatch.js index 63e395586f..1f49f78897 100644 --- a/static/js/server_events_dispatch.js +++ b/static/js/server_events_dispatch.js @@ -21,7 +21,6 @@ import * as linkifiers from "./linkifiers"; import * as message_edit from "./message_edit"; import * as message_events from "./message_events"; import * as message_flags from "./message_flags"; -import * as message_list from "./message_list"; import * as message_lists from "./message_lists"; import * as message_live_update from "./message_live_update"; import * as muted_topics_ui from "./muted_topics_ui"; @@ -642,9 +641,8 @@ export function dispatch_normal_event(event) { } if (event.property === "twenty_four_hour_time") { // Rerender the whole message list UI - message_lists.home.rerender(); - if (message_lists.current === message_list.narrowed) { - message_list.narrowed.rerender(); + for (const msg_list of message_lists.all_rendered_message_lists()) { + msg_list.rerender(); } } if (event.property === "high_contrast_mode") { @@ -695,9 +693,8 @@ export function dispatch_normal_event(event) { settings_display.report_emojiset_change(settings_display.user_settings_panel); // Rerender the whole message list UI - message_lists.home.rerender(); - if (message_lists.current === message_list.narrowed) { - message_list.narrowed.rerender(); + for (const msg_list of message_lists.all_rendered_message_lists()) { + msg_list.rerender(); } // Rerender buddy list status emoji activity.build_user_sidebar(); diff --git a/static/js/ui.js b/static/js/ui.js index 4e40f8ec14..1e8c68eddc 100644 --- a/static/js/ui.js +++ b/static/js/ui.js @@ -2,7 +2,6 @@ import $ from "jquery"; import SimpleBar from "simplebar"; import {$t} from "./i18n"; -import * as message_list from "./message_list"; import * as message_lists from "./message_lists"; // What, if anything, obscures the home tab? @@ -49,11 +48,8 @@ export function reset_scrollbar($element) { } function update_message_in_all_views(message_id, callback) { - for (const list of [message_lists.home, message_list.narrowed]) { - if (list === undefined) { - continue; - } - const $row = list.get_row(message_id); + for (const msg_list of message_lists.all_rendered_message_lists()) { + const $row = msg_list.get_row(message_id); if ($row === undefined) { // The row may not exist, e.g. if you do an action on a message in // a narrowed view diff --git a/static/js/unread_ops.js b/static/js/unread_ops.js index 9ab8b16c79..d59177d107 100644 --- a/static/js/unread_ops.js +++ b/static/js/unread_ops.js @@ -33,9 +33,8 @@ export function mark_all_as_read() { } function process_newly_read_message(message, options) { - message_lists.home.show_message_as_read(message, options); - if (message_list.narrowed) { - message_list.narrowed.show_message_as_read(message, options); + for (const msg_list of message_lists.all_rendered_message_lists()) { + msg_list.show_message_as_read(message, options); } notifications.close_notification(message); recent_topics_ui.update_topic_unread_count(message);