mirror of https://github.com/zulip/zulip.git
message_lists: Set `current` to be `undefined` for non message view.
This commit is contained in:
parent
4ccf64b02b
commit
f630272b4c
|
@ -1,4 +1,5 @@
|
|||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
import tippy from "tippy.js";
|
||||
|
||||
// You won't find every click handler here, but it's a good place to start!
|
||||
|
@ -60,6 +61,7 @@ export function initialize() {
|
|||
if (!id) {
|
||||
return;
|
||||
}
|
||||
assert(message_lists.current !== undefined);
|
||||
message_lists.current.select_id(id);
|
||||
setTimeout(() => {
|
||||
// The algorithm to trigger long tap is that first, we check
|
||||
|
@ -179,6 +181,7 @@ export function initialize() {
|
|||
const $row = $(this).closest(".message_row");
|
||||
const id = rows.id($row);
|
||||
|
||||
assert(message_lists.current !== undefined);
|
||||
message_lists.current.select_id(id);
|
||||
|
||||
if (message_edit.is_editing(id)) {
|
||||
|
@ -259,6 +262,7 @@ export function initialize() {
|
|||
});
|
||||
|
||||
$("body").on("click", ".reveal_hidden_message", (e) => {
|
||||
assert(message_lists.current !== undefined);
|
||||
const message_id = rows.id($(e.currentTarget).closest(".message_row"));
|
||||
message_lists.current.view.reveal_hidden_message(message_id);
|
||||
e.stopPropagation();
|
||||
|
@ -287,12 +291,14 @@ export function initialize() {
|
|||
// MESSAGE EDITING
|
||||
|
||||
$("body").on("click", ".edit_content_button, .view_source_button", function (e) {
|
||||
assert(message_lists.current !== undefined);
|
||||
const $row = message_lists.current.get_row(rows.id($(this).closest(".message_row")));
|
||||
message_lists.current.select_id(rows.id($row));
|
||||
message_edit.start($row);
|
||||
e.stopPropagation();
|
||||
});
|
||||
$("body").on("click", ".move_message_button", function (e) {
|
||||
assert(message_lists.current !== undefined);
|
||||
const $row = message_lists.current.get_row(rows.id($(this).closest(".message_row")));
|
||||
const message_id = rows.id($row);
|
||||
const message = message_lists.current.get(message_id);
|
||||
|
@ -447,6 +453,7 @@ export function initialize() {
|
|||
const $group = rows.get_closest_group(narrow_link_elem);
|
||||
const msg_id = rows.id_for_recipient_row($group);
|
||||
|
||||
assert(message_lists.current !== undefined);
|
||||
const nearest = message_lists.current.get(msg_id);
|
||||
const selected = message_lists.current.selected_message();
|
||||
if (util.same_recipient(nearest, selected)) {
|
||||
|
|
|
@ -131,6 +131,10 @@ export function maybe_scroll_up_selected_message(opts) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (message_lists.current === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If the compose box is obscuring the currently selected message,
|
||||
// scroll up until the message is no longer occluded.
|
||||
if (message_lists.current.selected_id() === -1) {
|
||||
|
|
|
@ -14,6 +14,10 @@ export function get_recipient_label(message) {
|
|||
// couple fields, both those constructed here and potentially
|
||||
// passed in.
|
||||
|
||||
if (message_lists.current === undefined) {
|
||||
return "";
|
||||
}
|
||||
|
||||
if (message === undefined) {
|
||||
if (message_lists.current.visibly_empty()) {
|
||||
// For empty narrows where there's a clear reply target,
|
||||
|
|
|
@ -40,7 +40,7 @@ export function set_focused_recipient(msg_type) {
|
|||
}
|
||||
|
||||
function display_messages_normally() {
|
||||
message_lists.current.view.$list.find(".recipient_row").removeClass("message-fade");
|
||||
message_lists.current?.view.$list.find(".recipient_row").removeClass("message-fade");
|
||||
|
||||
normal_display = true;
|
||||
}
|
||||
|
@ -54,6 +54,10 @@ function change_fade_state($elt, should_fade_group) {
|
|||
}
|
||||
|
||||
function fade_messages() {
|
||||
if (message_lists.current === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
let i;
|
||||
let first_message;
|
||||
let $first_row;
|
||||
|
@ -74,8 +78,6 @@ function fade_messages() {
|
|||
// Defer updating all message groups so that the compose box can open sooner
|
||||
setTimeout(
|
||||
(expected_msg_list, expected_recipient) => {
|
||||
const $all_groups = message_lists.current.view.$list.find(".recipient_row");
|
||||
|
||||
if (
|
||||
message_lists.current !== expected_msg_list ||
|
||||
!compose_state.composing() ||
|
||||
|
@ -85,7 +87,7 @@ function fade_messages() {
|
|||
}
|
||||
|
||||
should_fade_group = false;
|
||||
|
||||
const $all_groups = message_lists.current.view.$list.find(".recipient_row");
|
||||
// Note: The below algorithm relies on the fact that all_elts is
|
||||
// sorted as it would be displayed in the message view
|
||||
for (i = 0; i < $all_groups.length; i += 1) {
|
||||
|
|
|
@ -115,7 +115,11 @@ export function get_muted_narrow(message: Message): string | undefined {
|
|||
}
|
||||
|
||||
export function get_local_notify_mix_reason(message: Message): string | undefined {
|
||||
assert(message_lists.current !== undefined);
|
||||
if (message_lists.current === undefined) {
|
||||
// For non-message list views like Inbox, the message is not visible after sending it.
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const $row = message_lists.current.get_row(message.id);
|
||||
if ($row.length > 0) {
|
||||
// If our message is in the current message list, we do
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import * as fenced_code from "../shared/src/fenced_code";
|
||||
|
||||
|
@ -42,6 +43,8 @@ export function respond_to_message(opts) {
|
|||
}
|
||||
message = message_opts.message;
|
||||
} else {
|
||||
assert(message_lists.current !== undefined);
|
||||
|
||||
message =
|
||||
message_lists.current.get(opts.message_id) || message_lists.current.selected_message();
|
||||
|
||||
|
@ -119,6 +122,7 @@ export function respond_to_message(opts) {
|
|||
}
|
||||
|
||||
export function reply_with_mention(opts) {
|
||||
assert(message_lists.current !== undefined);
|
||||
respond_to_message(opts);
|
||||
const message = message_lists.current.selected_message();
|
||||
const mention = people.get_mention_syntax(message.sender_full_name, message.sender_id);
|
||||
|
@ -126,6 +130,7 @@ export function reply_with_mention(opts) {
|
|||
}
|
||||
|
||||
export function quote_and_reply(opts) {
|
||||
assert(message_lists.current !== undefined);
|
||||
const message_id = opts.message_id || message_lists.current.selected_id();
|
||||
const message = message_lists.current.get(message_id);
|
||||
const quoting_placeholder = $t({defaultMessage: "[Quoting…]"});
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import * as message_flags from "./message_flags";
|
||||
import * as message_lists from "./message_lists";
|
||||
|
@ -40,6 +41,8 @@ function uncondense_row($row) {
|
|||
}
|
||||
|
||||
export function uncollapse($row) {
|
||||
assert(message_lists.current !== undefined);
|
||||
|
||||
// Uncollapse a message, restoring the condensed message "Show more" or
|
||||
// "Show less" button if necessary.
|
||||
const message = message_lists.current.get(rows.id($row));
|
||||
|
@ -75,6 +78,7 @@ export function uncollapse($row) {
|
|||
}
|
||||
|
||||
export function collapse($row) {
|
||||
assert(message_lists.current !== undefined);
|
||||
// Collapse a message, hiding the condensed message [More] or
|
||||
// [Show less] link if necessary.
|
||||
const message = message_lists.current.get(rows.id($row));
|
||||
|
@ -118,6 +122,7 @@ export function toggle_collapse(message) {
|
|||
// * If the message is fully visible, either because it's too short to
|
||||
// condense or because it's already uncondensed, collapse it
|
||||
|
||||
assert(message_lists.current !== undefined);
|
||||
const $row = message_lists.current.get_row(message.id);
|
||||
if (!$row) {
|
||||
return;
|
||||
|
@ -178,6 +183,10 @@ export function show_message_condenser($row) {
|
|||
}
|
||||
|
||||
export function condense_and_collapse(elems) {
|
||||
if (message_lists.current === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
const height_cutoff = message_viewport.max_message_height();
|
||||
const rows_to_resize = [];
|
||||
|
||||
|
@ -259,6 +268,7 @@ export function initialize() {
|
|||
// uncondensing it.
|
||||
const $row = $(this).closest(".message_row");
|
||||
const id = rows.id($row);
|
||||
assert(message_lists.current !== undefined);
|
||||
const message = message_lists.current.get(id);
|
||||
// Focus on the expanded message.
|
||||
message_lists.current.select_id(id);
|
||||
|
@ -281,6 +291,7 @@ export function initialize() {
|
|||
const $row = $(this).closest(".message_row");
|
||||
const id = rows.id($row);
|
||||
// Focus on the condensed message.
|
||||
assert(message_lists.current !== undefined);
|
||||
message_lists.current.select_id(id);
|
||||
message_lists.current.get(id).condensed = true;
|
||||
condense_row($row);
|
||||
|
|
|
@ -66,6 +66,9 @@ how modern browsers deal with copy/paste. Just test
|
|||
your changes carefully.
|
||||
*/
|
||||
function construct_copy_div($div, start_id, end_id) {
|
||||
if (message_lists.current === undefined) {
|
||||
return;
|
||||
}
|
||||
const copy_rows = rows.visible_range(start_id, end_id);
|
||||
|
||||
const $start_row = copy_rows[0];
|
||||
|
|
|
@ -210,6 +210,10 @@ export function is_slash_command(content) {
|
|||
}
|
||||
|
||||
export function try_deliver_locally(message_request, insert_new_messages) {
|
||||
if (message_lists.current === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (markdown.contains_backend_only_syntax(message_request.content)) {
|
||||
return undefined;
|
||||
}
|
||||
|
@ -453,7 +457,7 @@ export function message_send_error(message_id, error_response) {
|
|||
function abort_message(message) {
|
||||
// Remove in all lists in which it exists
|
||||
all_messages_data.remove([message.id]);
|
||||
for (const msg_list of [message_lists.home, message_lists.current]) {
|
||||
for (const msg_list of message_lists.all_rendered_message_lists()) {
|
||||
msg_list.remove_and_rerender([message.id]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import * as activity from "./activity";
|
||||
import * as activity_ui from "./activity_ui";
|
||||
|
@ -65,6 +66,10 @@ import {user_settings} from "./user_settings";
|
|||
import * as user_topics_ui from "./user_topics_ui";
|
||||
|
||||
function do_narrow_action(action) {
|
||||
if (message_lists.current === undefined) {
|
||||
return false;
|
||||
}
|
||||
|
||||
action(message_lists.current.selected_id(), {trigger: "hotkey"});
|
||||
return true;
|
||||
}
|
||||
|
@ -558,6 +563,7 @@ export function process_enter_key(e) {
|
|||
// conversation.
|
||||
const current_filter = narrow_state.filter();
|
||||
if (current_filter !== undefined && !current_filter.supports_collapsing_recipients()) {
|
||||
assert(message_lists.current !== undefined);
|
||||
const message = message_lists.current.selected_message();
|
||||
|
||||
if (message === undefined) {
|
||||
|
@ -998,7 +1004,7 @@ export function process_hotkey(e, hotkey) {
|
|||
|
||||
// Hotkeys below this point are for the message feed, and so
|
||||
// should only function if the message feed is visible and nonempty.
|
||||
if (!narrow_state.is_message_feed_visible() || message_lists.current.visibly_empty()) {
|
||||
if (message_lists.current === undefined || message_lists.current.visibly_empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import ClipboardJS from "clipboard";
|
||||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import render_actions_popover from "../templates/popovers/actions_popover.hbs";
|
||||
|
||||
|
@ -114,6 +115,7 @@ export function initialize() {
|
|||
|
||||
$popper.one("click", ".popover_edit_message, .popover_view_source", (e) => {
|
||||
const message_id = $(e.currentTarget).data("message-id");
|
||||
assert(message_lists.current !== undefined);
|
||||
const $row = message_lists.current.get_row(message_id);
|
||||
message_edit.start($row);
|
||||
e.preventDefault();
|
||||
|
@ -123,6 +125,7 @@ export function initialize() {
|
|||
|
||||
$popper.one("click", ".popover_move_message", (e) => {
|
||||
const message_id = $(e.currentTarget).data("message-id");
|
||||
assert(message_lists.current !== undefined);
|
||||
message_lists.current.select_id(message_id);
|
||||
const message = message_lists.current.get(message_id);
|
||||
stream_popover.build_move_topic_to_stream_popover(
|
||||
|
@ -146,6 +149,7 @@ export function initialize() {
|
|||
|
||||
$popper.one("click", ".popover_toggle_collapse", (e) => {
|
||||
const message_id = $(e.currentTarget).data("message-id");
|
||||
assert(message_lists.current !== undefined);
|
||||
const $row = message_lists.current.get_row(message_id);
|
||||
const message = message_lists.current.get(rows.id($row));
|
||||
if ($row) {
|
||||
|
@ -162,6 +166,7 @@ export function initialize() {
|
|||
|
||||
$popper.one("click", ".rehide_muted_user_message", (e) => {
|
||||
const message_id = $(e.currentTarget).data("message-id");
|
||||
assert(message_lists.current !== undefined);
|
||||
const $row = message_lists.current.get_row(message_id);
|
||||
const message = message_lists.current.get(rows.id($row));
|
||||
const message_container = message_lists.current.view.message_containers.get(
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import ClipboardJS from "clipboard";
|
||||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import * as resolved_topic from "../shared/src/resolved_topic";
|
||||
import render_wildcard_mention_not_allowed_error from "../templates/compose_banner/wildcard_mention_not_allowed_error.hbs";
|
||||
|
@ -429,13 +430,13 @@ function create_copy_to_clipboard_handler($row, source, message_id) {
|
|||
}
|
||||
|
||||
function edit_message($row, raw_content) {
|
||||
assert(message_lists.current !== undefined);
|
||||
const message = message_lists.current.get(rows.id($row));
|
||||
$row.find(".message_reactions").hide();
|
||||
condense.hide_message_expander($row);
|
||||
condense.hide_message_condenser($row);
|
||||
const content_top = $row.find(".message_controls")[0].getBoundingClientRect().top;
|
||||
|
||||
const message = message_lists.current.get(rows.id($row));
|
||||
|
||||
// We potentially got to this function by clicking a button that implied the
|
||||
// user would be able to edit their message. Give a little bit of buffer in
|
||||
// case the button has been around for a bit, e.g. we show the
|
||||
|
@ -584,6 +585,7 @@ function start_edit_with_content($row, content, edit_box_open_callback) {
|
|||
}
|
||||
|
||||
export function start($row, edit_box_open_callback) {
|
||||
assert(message_lists.current !== undefined);
|
||||
const message = message_lists.current.get(rows.id($row));
|
||||
if (message === undefined) {
|
||||
blueslip.error("Couldn't find message ID for edit", {row_id: rows.id($row)});
|
||||
|
@ -758,6 +760,7 @@ export function toggle_resolve_topic(
|
|||
}
|
||||
|
||||
export function start_inline_topic_edit($recipient_row) {
|
||||
assert(message_lists.current !== undefined);
|
||||
const $form = $(
|
||||
render_topic_edit_form({
|
||||
max_topic_length: realm.max_topic_length,
|
||||
|
@ -787,10 +790,12 @@ export function is_editing(id) {
|
|||
}
|
||||
|
||||
export function end_inline_topic_edit($row) {
|
||||
assert(message_lists.current !== undefined);
|
||||
message_lists.current.hide_edit_topic_on_recipient_row($row);
|
||||
}
|
||||
|
||||
export function end_message_row_edit($row) {
|
||||
assert(message_lists.current !== undefined);
|
||||
const row_id = rows.id($row);
|
||||
|
||||
// Clean up the upload handler
|
||||
|
@ -833,8 +838,8 @@ export function end_message_row_edit($row) {
|
|||
}
|
||||
|
||||
export function end_message_edit(message_id) {
|
||||
const $row = message_lists.current.get_row(message_id);
|
||||
if ($row.length > 0) {
|
||||
const $row = message_lists.current?.get_row(message_id);
|
||||
if (message_lists.current !== undefined && $row.length > 0) {
|
||||
end_message_row_edit($row);
|
||||
} else if (currently_editing_messages.has(message_id)) {
|
||||
// We should delete the message_id from currently_editing_messages
|
||||
|
@ -844,6 +849,7 @@ export function end_message_edit(message_id) {
|
|||
}
|
||||
|
||||
export function try_save_inline_topic_edit($row) {
|
||||
assert(message_lists.current !== undefined);
|
||||
const message_id = rows.id_for_recipient_row($row);
|
||||
const message = message_lists.current.get(message_id);
|
||||
|
||||
|
@ -944,6 +950,7 @@ export function do_save_inline_topic_edit($row, message, new_topic) {
|
|||
}
|
||||
|
||||
export function save_message_row_edit($row) {
|
||||
assert(message_lists.current !== undefined);
|
||||
const $banner_container = compose_banner.get_compose_banner_container(
|
||||
$row.find(".message_edit_form textarea"),
|
||||
);
|
||||
|
@ -1118,12 +1125,20 @@ export function save_message_row_edit($row) {
|
|||
}
|
||||
|
||||
export function maybe_show_edit($row, id) {
|
||||
if (message_lists.current === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (currently_editing_messages.has(id)) {
|
||||
message_lists.current.show_edit_message($row, currently_editing_messages.get(id));
|
||||
}
|
||||
}
|
||||
|
||||
export function edit_last_sent_message() {
|
||||
if (message_lists.current === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
const msg = message_lists.current.get_last_message_sent_by_me();
|
||||
|
||||
if (!msg) {
|
||||
|
@ -1223,6 +1238,7 @@ export function delete_topic(stream_id, topic_name, failures = 0) {
|
|||
}
|
||||
|
||||
export function handle_narrow_deactivated() {
|
||||
assert(message_lists.current !== undefined);
|
||||
for (const [idx, elem] of currently_editing_messages) {
|
||||
if (message_lists.current.get(idx) !== undefined) {
|
||||
const $row = message_lists.current.get_row(idx);
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import * as alert_words from "./alert_words";
|
||||
import {all_messages_data} from "./all_messages_data";
|
||||
|
@ -273,8 +274,10 @@ export function update_messages(events) {
|
|||
const orig_topic = util.get_edit_event_orig_topic(event);
|
||||
|
||||
const current_filter = narrow_state.filter();
|
||||
const current_selected_id = message_lists.current.selected_id();
|
||||
const selection_changed_topic = event.message_ids.includes(current_selected_id);
|
||||
const current_selected_id = message_lists.current?.selected_id();
|
||||
const selection_changed_topic =
|
||||
message_lists.current !== undefined &&
|
||||
event.message_ids.includes(current_selected_id);
|
||||
const event_messages = [];
|
||||
for (const message_id of event.message_ids) {
|
||||
// We don't need to concern ourselves updating data structures
|
||||
|
@ -450,9 +453,10 @@ export function update_messages(events) {
|
|||
// list and then pass these to the remove messages codepath.
|
||||
// While we can pass all our messages to the add messages
|
||||
// codepath as the filtering is done within the method.
|
||||
assert(message_lists.current !== undefined);
|
||||
message_lists.current.remove_and_rerender(message_ids_to_remove);
|
||||
message_lists.current.add_messages(event_messages);
|
||||
} else {
|
||||
} else if (message_lists.current !== undefined) {
|
||||
// Remove existing message that were updated, since
|
||||
// they may not be a part of the filter now. Also,
|
||||
// this will help us rerender them via
|
||||
|
@ -538,7 +542,7 @@ export function update_messages(events) {
|
|||
// edit. Doing so could save significant work, since most
|
||||
// topic edits will not match the current topic narrow in
|
||||
// large organizations.
|
||||
if (!changed_narrow && message_lists.current.narrowed) {
|
||||
if (!changed_narrow && message_lists.current?.narrowed) {
|
||||
message_lists.current.update_muting_and_rerender();
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -37,7 +37,7 @@ function show_end_of_results_notice(): void {
|
|||
export function update_top_of_narrow_notices(msg_list: MessageList): void {
|
||||
// Assumes that the current state is all notices hidden (i.e. this
|
||||
// will not hide a notice that should not be there)
|
||||
if (msg_list !== message_lists.current) {
|
||||
if (message_lists.current === undefined || msg_list !== message_lists.current) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -91,6 +91,7 @@ function process_result(data, opts) {
|
|||
stream_list.maybe_scroll_narrow_into_view();
|
||||
|
||||
if (
|
||||
message_lists.current !== undefined &&
|
||||
opts.msg_list === message_lists.current &&
|
||||
opts.msg_list.narrowed &&
|
||||
opts.msg_list.visibly_empty()
|
||||
|
@ -121,7 +122,8 @@ function process_result(data, opts) {
|
|||
}
|
||||
|
||||
function get_messages_success(data, opts) {
|
||||
const update_loading_indicator = opts.msg_list === message_lists.current;
|
||||
const update_loading_indicator =
|
||||
message_lists.current !== undefined && opts.msg_list === message_lists.current;
|
||||
const msg_list_data = opts.msg_list_data ?? opts.msg_list.data;
|
||||
if (opts.num_before > 0) {
|
||||
msg_list_data.fetch_status.finish_older_batch({
|
||||
|
@ -266,7 +268,8 @@ export function load_messages(opts, attempt = 1) {
|
|||
data.narrow = JSON.stringify(terms);
|
||||
}
|
||||
|
||||
let update_loading_indicator = opts.msg_list === message_lists.current;
|
||||
let update_loading_indicator =
|
||||
message_lists.current !== undefined && opts.msg_list === message_lists.current;
|
||||
if (opts.num_before > 0) {
|
||||
msg_list_data.fetch_status.start_older_batch({
|
||||
update_loading_indicator,
|
||||
|
@ -356,6 +359,7 @@ export function load_messages(opts, attempt = 1) {
|
|||
message_feed_loading.hide_indicators();
|
||||
|
||||
if (
|
||||
message_lists.current !== undefined &&
|
||||
opts.msg_list === message_lists.current &&
|
||||
opts.msg_list.narrowed &&
|
||||
opts.msg_list.visibly_empty()
|
||||
|
@ -506,7 +510,11 @@ export function maybe_load_newer_messages(opts) {
|
|||
const anchor = get_frontfill_anchor(msg_list);
|
||||
|
||||
function load_more(_data, args) {
|
||||
if (args.fetch_again && args.msg_list === message_lists.current) {
|
||||
if (
|
||||
args.fetch_again &&
|
||||
message_lists.current !== undefined &&
|
||||
args.msg_list === message_lists.current
|
||||
) {
|
||||
maybe_load_newer_messages({msg_list: message_lists.current});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -537,5 +537,4 @@ export function initialize() {
|
|||
excludes_muted_topics: true,
|
||||
});
|
||||
message_lists.set_home(home_msg_list);
|
||||
message_lists.update_current_message_list(home_msg_list);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import render_edit_content_button from "../templates/edit_content_button.hbs";
|
||||
|
||||
|
@ -17,6 +18,7 @@ export function message_unhover() {
|
|||
|
||||
export function message_hover($message_row) {
|
||||
const id = rows.id($message_row);
|
||||
assert(message_lists.current !== undefined);
|
||||
const message = message_lists.current.get(id);
|
||||
|
||||
if ($current_message_hover && rows.id($current_message_hover) === id) {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
import {delegate} from "tippy.js";
|
||||
|
||||
import render_change_visibility_policy_button_tooltip from "../templates/change_visibility_policy_button_tooltip.hbs";
|
||||
|
@ -210,6 +211,7 @@ export function initialize() {
|
|||
onShow(instance) {
|
||||
const $time_elem = $(instance.reference);
|
||||
const $row = $time_elem.closest(".message_row");
|
||||
assert(message_lists.current !== undefined);
|
||||
const message = message_lists.current.get(rows.id($row));
|
||||
// Don't show time tooltip for locally echoed message.
|
||||
if (message.locally_echoed) {
|
||||
|
|
|
@ -5,7 +5,6 @@ import * as blueslip from "./blueslip";
|
|||
import * as inbox_util from "./inbox_util";
|
||||
import type {MessageListData} from "./message_list_data";
|
||||
import type {Message} from "./message_store";
|
||||
import * as recent_view_util from "./recent_view_util";
|
||||
import * as ui_util from "./ui_util";
|
||||
|
||||
// TODO(typescript): Move this to message_list_view when it's
|
||||
|
@ -55,12 +54,12 @@ export type MessageList = {
|
|||
export let home: MessageList | undefined;
|
||||
export let current: MessageList | undefined;
|
||||
|
||||
function set_current(msg_list: MessageList): void {
|
||||
function set_current(msg_list: MessageList | undefined): void {
|
||||
// NOTE: Use update_current_message_list instead of this function.
|
||||
current = msg_list;
|
||||
}
|
||||
|
||||
export function update_current_message_list(msg_list: MessageList): void {
|
||||
export function update_current_message_list(msg_list: MessageList | undefined): void {
|
||||
if (msg_list !== home) {
|
||||
home?.view.$list.removeClass("focused-message-list");
|
||||
}
|
||||
|
@ -80,9 +79,8 @@ export function set_home(msg_list: MessageList): void {
|
|||
|
||||
export function all_rendered_message_lists(): MessageList[] {
|
||||
assert(home !== undefined);
|
||||
assert(current !== undefined);
|
||||
const rendered_message_lists = [home];
|
||||
if (current !== home && !recent_view_util.is_visible()) {
|
||||
if (current !== undefined && current !== home) {
|
||||
rendered_message_lists.push(current);
|
||||
}
|
||||
return rendered_message_lists;
|
||||
|
@ -97,7 +95,10 @@ export function all_rendered_row_for_message_id(message_id: number): JQuery {
|
|||
}
|
||||
|
||||
export function all_current_message_rows(): JQuery {
|
||||
assert(current !== undefined);
|
||||
if (current === undefined) {
|
||||
return $();
|
||||
}
|
||||
|
||||
return current.view.$list.find(".message_row");
|
||||
}
|
||||
|
||||
|
@ -109,7 +110,10 @@ export function update_recipient_bar_background_color(): void {
|
|||
}
|
||||
|
||||
export function save_pre_narrow_offset_for_reload(): void {
|
||||
assert(current !== undefined);
|
||||
if (current === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (current.selected_id() !== -1) {
|
||||
if (current.selected_row().length === 0) {
|
||||
const current_message = current.get(current.selected_id());
|
||||
|
|
|
@ -13,6 +13,10 @@ import * as unread_ui from "./unread_ui";
|
|||
|
||||
let hide_scroll_to_bottom_timer;
|
||||
export function hide_scroll_to_bottom() {
|
||||
if (message_lists.current === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
const $show_scroll_to_bottom_button = $("#scroll-to-bottom-button-container");
|
||||
if (
|
||||
message_viewport.bottom_rendered_message_visible() ||
|
||||
|
@ -60,13 +64,16 @@ $(document).on("keydown", (e) => {
|
|||
|
||||
export function scroll_finished() {
|
||||
message_scroll_state.set_actively_scrolling(false);
|
||||
message_lists.current.view.update_sticky_recipient_headers();
|
||||
hide_scroll_to_bottom();
|
||||
|
||||
if (!narrow_state.is_message_feed_visible()) {
|
||||
if (message_lists.current === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
// It's possible that we are in transit and message_lists.current is not defined.
|
||||
// We still want the rest of the code to run but it's fine to skip this.
|
||||
message_lists.current.view.update_sticky_recipient_headers();
|
||||
|
||||
if (compose_banner.scroll_to_message_banner_message_id !== null) {
|
||||
const $message_row = message_lists.current.get_row(
|
||||
compose_banner.scroll_to_message_banner_message_id,
|
||||
|
@ -127,7 +134,7 @@ export function initialize() {
|
|||
"scroll",
|
||||
_.throttle(() => {
|
||||
unread_ops.process_visible();
|
||||
message_lists.current.view.update_sticky_recipient_headers();
|
||||
message_lists.current?.view.update_sticky_recipient_headers();
|
||||
scroll_finish();
|
||||
}, 50),
|
||||
);
|
||||
|
|
|
@ -8,9 +8,8 @@ import * as recent_view_ui from "./recent_view_ui";
|
|||
import * as settings_muted_users from "./settings_muted_users";
|
||||
|
||||
export function rerender_for_muted_user() {
|
||||
message_lists.current.update_muting_and_rerender();
|
||||
if (message_lists.current !== message_lists.home) {
|
||||
message_lists.home.update_muting_and_rerender();
|
||||
for (const msg_list of message_lists.all_rendered_message_lists()) {
|
||||
msg_list.update_muting_and_rerender();
|
||||
}
|
||||
|
||||
if (overlays.settings_open() && settings_muted_users.loaded) {
|
||||
|
|
|
@ -364,7 +364,7 @@ export function activate(raw_terms, opts) {
|
|||
blueslip.debug("Narrowed", {
|
||||
operators: terms.map((e) => e.operator),
|
||||
trigger: opts ? opts.trigger : undefined,
|
||||
previous_id: message_lists.current.selected_id(),
|
||||
previous_id: message_lists.current?.selected_id(),
|
||||
});
|
||||
|
||||
if (opts.then_select_id > 0) {
|
||||
|
@ -372,7 +372,7 @@ export function activate(raw_terms, opts) {
|
|||
// having a near: narrow auto-reloaded.
|
||||
id_info.target_id = opts.then_select_id;
|
||||
// Position selected row to not scroll off-screen.
|
||||
if (opts.then_select_offset === undefined) {
|
||||
if (opts.then_select_offset === undefined && message_lists.current !== undefined) {
|
||||
const $row = message_lists.current.get_row(opts.then_select_id);
|
||||
if ($row.length > 0) {
|
||||
const row_props = $row.get_offset_to_window();
|
||||
|
@ -727,7 +727,7 @@ export function maybe_add_local_messages(opts) {
|
|||
}
|
||||
|
||||
export function render_message_list_with_selected_message(opts) {
|
||||
if (message_lists.current !== opts.msg_list) {
|
||||
if (message_lists.current !== undefined && message_lists.current !== opts.msg_list) {
|
||||
// If we navigated away from a view while we were fetching
|
||||
// messages for it, don't attempt to move the currently
|
||||
// selected message.
|
||||
|
@ -1102,13 +1102,14 @@ export function deactivate() {
|
|||
narrow_state.set_has_shown_message_list_view();
|
||||
|
||||
message_lists.update_current_message_list(message_lists.home);
|
||||
assert(message_lists.current === message_lists.home);
|
||||
message_lists.current.resume_reading();
|
||||
condense.condense_and_collapse(message_lists.home.view.$list.find(".message_row"));
|
||||
|
||||
reset_ui_state();
|
||||
compose_recipient.handle_middle_pane_transition();
|
||||
|
||||
if (message_lists.current.selected_id() !== -1) {
|
||||
if (message_lists.current !== undefined && message_lists.current.selected_id() !== -1) {
|
||||
const preserve_pre_narrowing_screen_position =
|
||||
message_lists.current.selected_row().length > 0 &&
|
||||
message_lists.current.pre_narrow_offset !== undefined;
|
||||
|
|
|
@ -1,12 +1,16 @@
|
|||
import assert from "minimalistic-assert";
|
||||
|
||||
import * as message_lists from "./message_lists";
|
||||
import * as message_viewport from "./message_viewport";
|
||||
import * as unread_ops from "./unread_ops";
|
||||
|
||||
function go_to_row(msg_id) {
|
||||
assert(message_lists.current !== undefined);
|
||||
message_lists.current.select_id(msg_id, {then_scroll: true, from_scroll: true});
|
||||
}
|
||||
|
||||
export function up() {
|
||||
assert(message_lists.current !== undefined);
|
||||
message_viewport.set_last_movement_direction(-1);
|
||||
const msg_id = message_lists.current.prev();
|
||||
if (msg_id === undefined) {
|
||||
|
@ -16,6 +20,7 @@ export function up() {
|
|||
}
|
||||
|
||||
export function down(with_centering) {
|
||||
assert(message_lists.current !== undefined);
|
||||
message_viewport.set_last_movement_direction(1);
|
||||
|
||||
if (message_lists.current.is_at_end()) {
|
||||
|
@ -41,12 +46,14 @@ export function down(with_centering) {
|
|||
}
|
||||
|
||||
export function to_home() {
|
||||
assert(message_lists.current !== undefined);
|
||||
message_viewport.set_last_movement_direction(-1);
|
||||
const first_id = message_lists.current.first().id;
|
||||
message_lists.current.select_id(first_id, {then_scroll: true, from_scroll: true});
|
||||
}
|
||||
|
||||
export function to_end() {
|
||||
assert(message_lists.current !== undefined);
|
||||
const next_id = message_lists.current.last().id;
|
||||
message_viewport.set_last_movement_direction(1);
|
||||
message_lists.current.select_id(next_id, {then_scroll: true, from_scroll: true});
|
||||
|
@ -100,6 +107,7 @@ export function page_down_the_right_amount() {
|
|||
}
|
||||
|
||||
export function page_up() {
|
||||
assert(message_lists.current !== undefined);
|
||||
if (message_viewport.at_rendered_top() && !message_lists.current.visibly_empty()) {
|
||||
if (message_lists.current.view.is_fetched_start_rendered()) {
|
||||
message_lists.current.select_id(message_lists.current.first().id, {then_scroll: false});
|
||||
|
@ -117,6 +125,7 @@ export function page_up() {
|
|||
}
|
||||
|
||||
export function page_down() {
|
||||
assert(message_lists.current !== undefined);
|
||||
if (message_viewport.at_rendered_bottom() && !message_lists.current.visibly_empty()) {
|
||||
if (message_lists.current.view.is_fetched_end_rendered()) {
|
||||
message_lists.current.select_id(message_lists.current.last().id, {then_scroll: false});
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
/* This module provides relevant data to render popovers that require multiple args.
|
||||
This helps keep the popovers code small and keep it focused on rendering side of things. */
|
||||
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import * as resolved_topic from "../shared/src/resolved_topic";
|
||||
|
||||
import * as buddy_data from "./buddy_data";
|
||||
|
@ -23,6 +25,7 @@ import * as user_status from "./user_status";
|
|||
import * as user_topics from "./user_topics";
|
||||
|
||||
export function get_actions_popover_content_context(message_id) {
|
||||
assert(message_lists.current !== undefined);
|
||||
const message = message_lists.current.get(message_id);
|
||||
const message_container = message_lists.current.view.message_containers.get(message.id);
|
||||
const not_spectator = !page_params.is_spectator;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import * as blueslip from "./blueslip";
|
||||
import * as compose_state from "./compose_state";
|
||||
|
@ -85,6 +86,7 @@ function preserve_state(send_after_reload, save_pointer, save_narrow, save_compo
|
|||
url += "+offset=" + $row.get_offset_to_window().top;
|
||||
}
|
||||
} else {
|
||||
assert(message_lists.current !== undefined);
|
||||
url += "+offset=" + message_lists.home.pre_narrow_offset;
|
||||
|
||||
// narrow_state.active() is true, so this is the current
|
||||
|
|
|
@ -33,7 +33,7 @@ export function handler() {
|
|||
// This function might run onReady (if we're in a narrow window),
|
||||
// but before we've loaded in the messages; in that case, don't
|
||||
// try to scroll to one.
|
||||
if (message_lists.current.selected_id() !== -1) {
|
||||
if (message_lists.current !== undefined && message_lists.current.selected_id() !== -1) {
|
||||
message_viewport.scroll_to_selected();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import * as activity_ui from "./activity_ui";
|
||||
import * as alert_words from "./alert_words";
|
||||
|
@ -547,6 +548,7 @@ export function dispatch_normal_event(event) {
|
|||
stream.stream_id,
|
||||
);
|
||||
if (is_narrowed_to_stream) {
|
||||
assert(message_lists.current !== undefined);
|
||||
message_lists.current.update_trailing_bookend();
|
||||
}
|
||||
stream_data.delete_sub(stream.stream_id);
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import * as activity_ui from "./activity_ui";
|
||||
import * as blueslip from "./blueslip";
|
||||
|
@ -146,6 +147,7 @@ export function mark_subscribed(sub, subscribers, color) {
|
|||
message_view_header.maybe_rerender_title_area_for_stream(sub);
|
||||
|
||||
if (narrow_state.is_for_stream_id(sub.stream_id)) {
|
||||
assert(message_lists.current !== undefined);
|
||||
message_lists.current.update_trailing_bookend();
|
||||
activity_ui.build_user_sidebar();
|
||||
}
|
||||
|
@ -178,6 +180,7 @@ export function mark_unsubscribed(sub) {
|
|||
if (narrow_state.is_for_stream_id(sub.stream_id)) {
|
||||
// Update UI components if we just unsubscribed from the
|
||||
// currently viewed stream.
|
||||
assert(message_lists.current !== undefined);
|
||||
message_lists.current.update_trailing_bookend();
|
||||
|
||||
// This update would likely be better implemented by having it
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import render_inline_decorated_stream_name from "../templates/inline_decorated_stream_name.hbs";
|
||||
import render_move_topic_to_stream from "../templates/move_topic_to_stream.hbs";
|
||||
|
@ -226,6 +227,7 @@ async function get_message_placement_in_conversation(
|
|||
topic_name,
|
||||
current_message_id,
|
||||
) {
|
||||
assert(message_lists.current !== undefined);
|
||||
// First we check if the placement of the message can be determined
|
||||
// in the current message list. This allows us to avoid a server call
|
||||
// in most cases.
|
||||
|
|
|
@ -145,7 +145,7 @@ export function update_stream_privacy(slim_sub, values) {
|
|||
|
||||
// Update UI elements
|
||||
update_left_panel_row(sub);
|
||||
message_lists.current.update_trailing_bookend();
|
||||
message_lists.current?.update_trailing_bookend();
|
||||
stream_ui_updates.update_setting_element(sub, "stream_privacy");
|
||||
stream_ui_updates.enable_or_disable_permission_settings_in_edit_panel(sub);
|
||||
stream_ui_updates.update_stream_privacy_icon_in_settings(sub);
|
||||
|
|
|
@ -282,9 +282,10 @@ export function initialize_kitchen_sink_stuff() {
|
|||
});
|
||||
|
||||
$(document).on("message_selected.zulip", (event) => {
|
||||
if (message_lists.current !== event.msg_list) {
|
||||
if (message_lists.current !== undefined && message_lists.current !== event.msg_list) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.id === -1) {
|
||||
// If the message list is empty, don't do anything
|
||||
return;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import $ from "jquery";
|
||||
import _ from "lodash";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import render_confirm_mark_all_as_read from "../templates/confirm_dialog/confirm_mark_all_as_read.hbs";
|
||||
|
||||
|
@ -15,7 +16,6 @@ import * as message_lists from "./message_lists";
|
|||
import * as message_store from "./message_store";
|
||||
import * as message_viewport from "./message_viewport";
|
||||
import * as modals from "./modals";
|
||||
import * as narrow_state from "./narrow_state";
|
||||
import * as overlays from "./overlays";
|
||||
import * as people from "./people";
|
||||
import * as recent_view_ui from "./recent_view_ui";
|
||||
|
@ -201,6 +201,7 @@ export function mark_as_unread_from_here(
|
|||
num_after = INITIAL_BATCH_SIZE - 1,
|
||||
narrow,
|
||||
) {
|
||||
assert(message_lists.current !== undefined);
|
||||
if (narrow === undefined) {
|
||||
narrow = JSON.stringify(message_lists.current.data.filter.terms());
|
||||
}
|
||||
|
@ -312,7 +313,7 @@ export function process_read_messages_event(message_ids) {
|
|||
}
|
||||
|
||||
for (const message_id of message_ids) {
|
||||
if (message_lists.current.narrowed) {
|
||||
if (message_lists.current?.narrowed) {
|
||||
// I'm not sure this entirely makes sense for all server
|
||||
// notifications.
|
||||
unread.set_messages_read_in_narrow(true);
|
||||
|
@ -340,7 +341,7 @@ export function process_unread_messages_event({message_ids, message_details}) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (message_lists.current.narrowed) {
|
||||
if (message_lists.current?.narrowed) {
|
||||
unread.set_messages_read_in_narrow(false);
|
||||
}
|
||||
|
||||
|
@ -400,6 +401,7 @@ export function process_unread_messages_event({message_ids, message_details}) {
|
|||
recent_view_ui.complete_rerender();
|
||||
|
||||
if (
|
||||
message_lists.current !== undefined &&
|
||||
!message_lists.current.can_mark_messages_read() &&
|
||||
message_lists.current.has_unread_messages()
|
||||
) {
|
||||
|
@ -420,7 +422,7 @@ export function notify_server_messages_read(messages, options = {}) {
|
|||
message_flags.send_read(messages);
|
||||
|
||||
for (const message of messages) {
|
||||
if (message_lists.current.narrowed) {
|
||||
if (message_lists.current?.narrowed) {
|
||||
unread.set_messages_read_in_narrow(true);
|
||||
}
|
||||
|
||||
|
@ -436,8 +438,8 @@ export function notify_server_message_read(message, options) {
|
|||
}
|
||||
|
||||
function process_scrolled_to_bottom() {
|
||||
if (!narrow_state.is_message_feed_visible()) {
|
||||
// First, verify the current message list is visible.
|
||||
if (message_lists.current === undefined) {
|
||||
// First, verify that user is narrowed to a list of messages.
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -465,6 +467,7 @@ function process_scrolled_to_bottom() {
|
|||
// may need to update message_notifications.received_messages as well.
|
||||
export function process_visible() {
|
||||
if (
|
||||
message_lists.current !== undefined &&
|
||||
viewport_is_visible_and_focused() &&
|
||||
message_viewport.bottom_rendered_message_visible() &&
|
||||
message_lists.current.view.is_fetched_end_rendered()
|
||||
|
|
|
@ -24,6 +24,10 @@ export function register_update_unread_counts_hook(f: UpdateUnreadCountsHook): v
|
|||
}
|
||||
|
||||
export function update_unread_banner(): void {
|
||||
if (message_lists.current === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
const filter = narrow_state.filter();
|
||||
const is_conversation_view = filter === undefined ? false : filter.is_conversation_view();
|
||||
if (
|
||||
|
@ -40,7 +44,6 @@ export function update_unread_banner(): void {
|
|||
render_mark_as_read_only_in_conversation_view(),
|
||||
);
|
||||
} else {
|
||||
assert(message_lists.current !== undefined);
|
||||
$("#mark_read_on_scroll_state_banner").html(render_mark_as_read_turned_off_banner());
|
||||
if (message_lists.current.can_mark_messages_read_without_setting()) {
|
||||
hide_unread_banner();
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import {Uppy} from "@uppy/core";
|
||||
import XHRUpload from "@uppy/xhr-upload";
|
||||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import render_upload_banner from "../templates/compose_banner/upload_banner.hbs";
|
||||
|
||||
|
@ -122,6 +123,7 @@ export function get_item(key, config, file_id) {
|
|||
case "source":
|
||||
return "message-edit-file-input";
|
||||
case "drag_drop_container":
|
||||
assert(message_lists.current !== undefined);
|
||||
return $(
|
||||
`#message-row-${message_lists.current.id}-${CSS.escape(
|
||||
config.row,
|
||||
|
@ -532,7 +534,7 @@ export function initialize() {
|
|||
const edit_upload_object = upload_objects_by_message_edit_row.get(row_id);
|
||||
|
||||
upload_files(edit_upload_object, {mode: "edit", row: row_id}, files);
|
||||
} else if (message_lists.current.selected_message()) {
|
||||
} else if (message_lists.current?.selected_message()) {
|
||||
// Start a reply to selected message, if viewing a message feed.
|
||||
compose_reply.respond_to_message({trigger: "drag_drop_file"});
|
||||
upload_files(compose_upload_object, {mode: "compose"}, files);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import ClipboardJS from "clipboard";
|
||||
import {parseISO} from "date-fns";
|
||||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
import tippy from "tippy.js";
|
||||
|
||||
import render_confirm_mute_user from "../templates/confirm_dialog/confirm_mute_user.hbs";
|
||||
|
@ -569,6 +570,7 @@ export function toggle_sender_info() {
|
|||
$sender = $message.find(".message_sender");
|
||||
}
|
||||
|
||||
assert(message_lists.current !== undefined);
|
||||
const message = message_lists.current.get(rows.id($message));
|
||||
const user = people.get_by_user_id(message.sender_id);
|
||||
toggle_user_card_popover_for_message($sender[0], user, message, () => {
|
||||
|
@ -644,6 +646,7 @@ function register_click_handlers() {
|
|||
$("#main_div").on("click", ".sender_name, .inline_profile_picture", function (e) {
|
||||
const $row = $(this).closest(".message_row");
|
||||
e.stopPropagation();
|
||||
assert(message_lists.current !== undefined);
|
||||
const message = message_lists.current.get(rows.id($row));
|
||||
const user = people.get_by_user_id(message.sender_id);
|
||||
toggle_user_card_popover_for_message(this, user, message);
|
||||
|
@ -659,6 +662,7 @@ function register_click_handlers() {
|
|||
}
|
||||
const $row = $(this).closest(".message_row");
|
||||
e.stopPropagation();
|
||||
assert(message_lists.current !== undefined);
|
||||
const message = message_lists.current.get(rows.id($row));
|
||||
let user;
|
||||
if (id_string) {
|
||||
|
|
|
@ -17,7 +17,7 @@ export function handle_topic_updates(user_topic_event) {
|
|||
|
||||
stream_list.update_streams_sidebar();
|
||||
unread_ui.update_unread_counts();
|
||||
message_lists.current.update_muting_and_rerender();
|
||||
message_lists.current?.update_muting_and_rerender();
|
||||
recent_view_ui.update_topic_visibility_policy(
|
||||
user_topic_event.stream_id,
|
||||
user_topic_event.topic_name,
|
||||
|
|
|
@ -78,6 +78,7 @@ export function show(opts) {
|
|||
// a messages narrow. We hide it and show the view.
|
||||
$("#message_feed_container").hide();
|
||||
opts.$view.show();
|
||||
message_lists.update_current_message_list(undefined);
|
||||
opts.set_visible(true);
|
||||
|
||||
unread_ui.hide_unread_banner();
|
||||
|
|
|
@ -88,7 +88,7 @@ export function activate(in_opts) {
|
|||
|
||||
export function set_widgets_for_list() {
|
||||
for (const [idx, $widget_elem] of widget_contents) {
|
||||
if (message_lists.current.get(idx) !== undefined) {
|
||||
if (message_lists.current?.get(idx) !== undefined) {
|
||||
const $row = message_lists.current.get_row(idx);
|
||||
set_widget_in_message($row, $widget_elem);
|
||||
}
|
||||
|
|
|
@ -47,8 +47,8 @@ const {buddy_list} = zrequire("buddy_list");
|
|||
const activity = zrequire("activity");
|
||||
const activity_ui = zrequire("activity_ui");
|
||||
const stream_data = zrequire("stream_data");
|
||||
const narrow_state = zrequire("narrow_state");
|
||||
const peer_data = zrequire("peer_data");
|
||||
const message_lists = zrequire("message_lists");
|
||||
const util = zrequire("util");
|
||||
const {Filter} = zrequire("../src/filter");
|
||||
|
||||
|
@ -105,7 +105,12 @@ const $fred_stub = $.create("fred stub");
|
|||
const rome_sub = {name: "Rome", subscribed: true, stream_id: 1001};
|
||||
function add_sub_and_set_as_current_narrow(sub) {
|
||||
stream_data.add_sub(sub);
|
||||
narrow_state.set_current_filter(new Filter([{operator: "stream", operand: sub.name}]));
|
||||
const filter = new Filter([{operator: "stream", operand: sub.name}]);
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function test(label, f) {
|
||||
|
|
|
@ -100,6 +100,9 @@ message_lists.current = {
|
|||
rerender_view: noop,
|
||||
data: {
|
||||
get_messages_sent_by_user: () => [],
|
||||
filter: {
|
||||
is_in_home: () => true,
|
||||
},
|
||||
},
|
||||
};
|
||||
message_lists.home = {
|
||||
|
|
|
@ -49,9 +49,7 @@ const message_edit = mock_esm("../src/message_edit");
|
|||
const message_lists = mock_esm("../src/message_lists");
|
||||
const user_topics_ui = mock_esm("../src/user_topics_ui");
|
||||
const narrow = mock_esm("../src/narrow");
|
||||
const narrow_state = mock_esm("../src/narrow_state", {
|
||||
is_message_feed_visible: () => true,
|
||||
});
|
||||
const narrow_state = mock_esm("../src/narrow_state");
|
||||
const navigate = mock_esm("../src/navigate");
|
||||
const modals = mock_esm("../src/modals", {
|
||||
any_active: () => false,
|
||||
|
|
|
@ -19,7 +19,7 @@ const stream_settings_ui = mock_esm("../src/stream_settings_ui", {
|
|||
});
|
||||
const unread_ui = mock_esm("../src/unread_ui");
|
||||
const message_lists = mock_esm("../src/message_lists", {
|
||||
current: {},
|
||||
current: undefined,
|
||||
});
|
||||
const message_view_header = mock_esm("../src/message_view_header", {
|
||||
maybe_rerender_title_area_for_stream() {},
|
||||
|
|
Loading…
Reference in New Issue