message_list_data: Track if the data is rendered using message list id.

This is an easy way to track if a MessageListData is rendered.
Storing MessageList object would make us liable to cleanup the
MessageList object when the data is no longer in use.

Note that this is more like "likely / past rendered message list id",
we will have to check currently rendered message list data to verify
if the data object is really rendered.
This commit is contained in:
Aman Agrawal
2024-08-12 09:06:32 +00:00
committed by Tim Abbott
parent fee108949d
commit 259e77fbf6
3 changed files with 12 additions and 0 deletions

View File

@@ -48,6 +48,8 @@ export class MessageList {
});
}
this.data.set_rendered_message_list_id(this.id);
// TODO: This property should likely just be inlined into
// having the MessageListView code that needs to access it
// query .data.filter directly.

View File

@@ -46,6 +46,11 @@ export class MessageListData {
// This is a callback that is called when messages are added to the message list.
add_messages_callback?: (messages: Message[], recipient_order_changed: boolean) => void;
// ID of the MessageList for which this MessageListData is the data.
// Using ID instead of the MessageList object itself to avoid circular dependencies
// and to allow MessageList objects to be easily garbage collected.
rendered_message_list_id: number | undefined;
// MessageListData is a core data structure for keeping track of a
// contiguous block of messages matching a given narrow that can
// be displayed in a Zulip message feed.
@@ -64,6 +69,10 @@ export class MessageListData {
this._selected_id = -1;
}
set_rendered_message_list_id(rendered_message_list_id: number | undefined): void {
this.rendered_message_list_id = rendered_message_list_id;
}
set_add_messages_callback(
callback: (messages: Message[], rows_order_changed: boolean) => void,
): void {

View File

@@ -97,6 +97,7 @@ export function set_current(msg_list: MessageList | undefined): void {
function delete_message_list(message_list: MessageList): void {
message_list.view.$list.remove();
rendered_message_lists.delete(message_list.id);
message_list.data.set_rendered_message_list_id(undefined);
}
export function update_current_message_list(msg_list: MessageList | undefined): void {