mirror of
https://github.com/zulip/zulip.git
synced 2025-11-16 03:41:58 +00:00
message_list: Don't always cache "Combined feed" view.
Important changes in this commit: * We only cache message list for "Combined feed" if it is the default view. * We modify existing handling of home message list code so that it can be used to for any message list that we want to cache using a new `preserve_rendered_state` variable. * narrow_state.filter() returns the filter of combined feed view list instead of `undefined`. * We start fetching messages from the latest message on app load. * Messages in all messages data and Recent view are always synced. * If combined feed view list is not cached, we don't track it's last pointer, effectively sending user to the latest unread message always .
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
import $ from "jquery";
|
||||
import assert from "minimalistic-assert";
|
||||
|
||||
import * as blueslip from "./blueslip";
|
||||
import * as inbox_util from "./inbox_util";
|
||||
@@ -33,6 +32,7 @@ export type SelectIdOpts = {
|
||||
|
||||
export type MessageList = {
|
||||
id: number;
|
||||
preserve_rendered_state: boolean;
|
||||
view: MessageListView;
|
||||
selected_id: () => number;
|
||||
selected_row: () => JQuery;
|
||||
@@ -52,39 +52,37 @@ export type MessageList = {
|
||||
) => RenderInfo | undefined;
|
||||
};
|
||||
|
||||
export let home: MessageList | undefined;
|
||||
export let current: MessageList | undefined;
|
||||
export const rendered_message_lists = new Map<number, MessageList>();
|
||||
|
||||
export function set_current(msg_list: MessageList | undefined): void {
|
||||
// NOTE: Use update_current_message_list instead of this function.
|
||||
// NOTE: Strictly used for mocking in node tests.
|
||||
// Use `update_current_message_list` instead in production.
|
||||
current = msg_list;
|
||||
}
|
||||
|
||||
export function update_current_message_list(msg_list: MessageList | undefined): void {
|
||||
if (msg_list !== home) {
|
||||
home?.view.$list.removeClass("focused-message-list");
|
||||
if (current && !current.preserve_rendered_state) {
|
||||
// Remove the current message list from the DOM.
|
||||
current.view.$list.remove();
|
||||
rendered_message_lists.delete(current.id);
|
||||
} else {
|
||||
current?.view.$list.removeClass("focused-message-list");
|
||||
}
|
||||
|
||||
if (current !== home) {
|
||||
// Remove old msg list from DOM.
|
||||
current?.view.$list.remove();
|
||||
current = msg_list;
|
||||
if (current !== undefined) {
|
||||
rendered_message_lists.set(current.id, current);
|
||||
current.view.$list.addClass("focused-message-list");
|
||||
}
|
||||
|
||||
set_current(msg_list);
|
||||
current?.view.$list.addClass("focused-message-list");
|
||||
}
|
||||
|
||||
export function set_home(msg_list: MessageList): void {
|
||||
home = msg_list;
|
||||
}
|
||||
|
||||
export function all_rendered_message_lists(): MessageList[] {
|
||||
assert(home !== undefined);
|
||||
const rendered_message_lists = [home];
|
||||
if (current !== undefined && current !== home) {
|
||||
rendered_message_lists.push(current);
|
||||
}
|
||||
return rendered_message_lists;
|
||||
return [...rendered_message_lists.values()];
|
||||
}
|
||||
|
||||
export function add_rendered_message_list(msg_list: MessageList): void {
|
||||
rendered_message_lists.set(msg_list.id, msg_list);
|
||||
}
|
||||
|
||||
export function all_rendered_row_for_message_id(message_id: number): JQuery {
|
||||
@@ -112,7 +110,11 @@ export function update_recipient_bar_background_color(): void {
|
||||
}
|
||||
|
||||
export function save_pre_narrow_offset_for_reload(): void {
|
||||
if (current === undefined) {
|
||||
// Only save the pre_narrow_offset if the message list will be cached if user
|
||||
// switches to a different narrow, otherwise the pre_narrow_offset would just be lost when
|
||||
// user switches to a different narrow. In case of a reload, offset for the current
|
||||
// message is captured and restored by `reload` library.
|
||||
if (!current?.preserve_rendered_state) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user