diff --git a/web/src/echo.js b/web/src/echo.js index 7a54bbf4e4..6a36d01737 100644 --- a/web/src/echo.js +++ b/web/src/echo.js @@ -472,10 +472,9 @@ function abort_message(message) { } export function display_slow_send_loading_spinner(message) { - const message_list_id = message_lists.current.id; - const $row = $(`#message-row-${message_list_id}-${CSS.escape(message.id)}`); + const $rows = message_lists.all_rendered_row_for_message_id(message.id); if (message.locally_echoed && !message.failed_request) { - $row.find(".slow-send-spinner").removeClass("hidden"); + $rows.find(".slow-send-spinner").removeClass("hidden"); // We don't need to do anything special to ensure this gets // cleaned up if the message is delivered, because the // message's HTML gets replaced once the message is diff --git a/web/src/message_lists.ts b/web/src/message_lists.ts index 87728a27bb..6db98497eb 100644 --- a/web/src/message_lists.ts +++ b/web/src/message_lists.ts @@ -1,3 +1,4 @@ +import $ from "jquery"; import assert from "minimalistic-assert"; import * as blueslip from "./blueslip"; @@ -70,6 +71,14 @@ export function all_rendered_message_lists(): MessageList[] { return rendered_message_lists; } +export function all_rendered_row_for_message_id(message_id: number): JQuery { + let $rows = $(); + for (const msg_list of all_rendered_message_lists()) { + $rows = $rows.add(msg_list.get_row(message_id)); + } + return $rows; +} + export function all_current_message_rows(): JQuery { assert(current !== undefined); return current.view.$list.find(".message_row"); diff --git a/web/src/reactions.js b/web/src/reactions.js index d4d71c9e7a..5242af5caf 100644 --- a/web/src/reactions.js +++ b/web/src/reactions.js @@ -203,10 +203,8 @@ export function get_reaction_title_data(message_id, local_id) { } export function get_reaction_section(message_id) { - const message_list_id = message_lists.current.id; - return $(`#message-row-${message_list_id}-${CSS.escape(message_id)}`).find( - ".message_reactions", - ); + const $rows = message_lists.all_rendered_row_for_message_id(message_id); + return $rows.find(".message_reactions"); } export function find_reaction(message_id, local_id) { diff --git a/web/tests/reactions.test.js b/web/tests/reactions.test.js index e2913a670d..7b68818f01 100644 --- a/web/tests/reactions.test.js +++ b/web/tests/reactions.test.js @@ -44,10 +44,13 @@ const settings_data = mock_esm("../src/settings_data"); const spectators = mock_esm("../src/spectators", { login_to_access() {}, }); -mock_esm("../src/message_lists", { +const message_lists = mock_esm("../src/message_lists", { current: { id: 1, }, + home: { + id: 2, + }, }); set_global("document", "document-stub"); @@ -417,6 +420,7 @@ test("prevent_simultaneous_requests_updating_reaction", ({override, override_rew function stub_reactions(message_id) { const $message_reactions = $.create("reactions-stub"); const $message_row = $.create(`#message-row-1-${CSS.escape(message_id)}`); + message_lists.all_rendered_row_for_message_id = () => $message_row; $message_row.set_find_results(".message_reactions", $message_reactions); return $message_reactions; }