From 352c48f7c6e1b886127ae24657011e29ae897f4a Mon Sep 17 00:00:00 2001 From: Prakhar Pratyush Date: Fri, 16 Jun 2023 17:15:41 +0530 Subject: [PATCH] user_topics: Fix live-update bug in the 'SETTINGS / TOPICS' panel. The change in the visibility_policy or status of a topic from the topic popover, message header bar, or recent conversations is not live-reflected in the 'SETTINGS / TOPICS' panel. This commit fixes the above-mentioned bug by updating the 'handle_topic_updates' function to update the settings panel. --- web/src/user_topics_ui.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/web/src/user_topics_ui.js b/web/src/user_topics_ui.js index 2c393b5011..dade539ed7 100644 --- a/web/src/user_topics_ui.js +++ b/web/src/user_topics_ui.js @@ -1,6 +1,10 @@ +import $ from "jquery"; + import * as message_lists from "./message_lists"; +import * as overlays from "./overlays"; import * as popover_menus from "./popover_menus"; import * as recent_topics_ui from "./recent_topics_ui"; +import * as settings_user_topics from "./settings_user_topics"; import * as stream_list from "./stream_list"; import * as sub_store from "./sub_store"; import * as unread_ui from "./unread_ui"; @@ -21,6 +25,29 @@ export function handle_topic_updates(user_topic_event) { user_topic_event.stream_id, user_topic_event.topic_name, ); + + if (overlays.settings_open() && settings_user_topics.loaded) { + const stream_id = user_topic_event.stream_id; + const topic_name = user_topic_event.topic_name; + const visibility_policy = user_topic_event.visibility_policy; + + // Find the row with the specified stream_id and topic_name + const $row = $('tr[data-stream-id="' + stream_id + '"][data-topic="' + topic_name + '"]'); + + if ($row.length) { + // If the row exists, update the status only. + // We don't call 'populate_list' in this case as it re-creates the panel (re-sorts by date updated + + // removes topics with status set to 'Default for stream'), making it hard to review the changes + // and undo if needed. + const $status = $row.find("select.settings_user_topic_visibility_policy"); + $status.val(visibility_policy); + } else { + // If the row doesn't exist, the user must have set the visibility policy + // via another tab. We call 'populate_list' to re-create the panel, hence + // including the new row. + settings_user_topics.populate_list(); + } + } } export function toggle_topic_visibility_policy(message) {