Files
zulip/static/js/message_live_update.js
YashRE42 c81a8c0346 message_live_update: Only rerender relevant messages for name/avatar.
Previously, we would call `rerender_messages_view()` in order to
rerender messages after user renames or avatar updates. This would
lead to rerendering the entire message list for every change,
regardless of whether any specific message had changed or not.

This used to be acceptable because user renames and avatar updates
were rare events, however, as we plan to show user status emoji near
user names and updates to those would be more frequent than is
affordable, this commit implements
`rerender_messages_view_for_user(user_id)` which only rerenders
messages which have actually been changed.

This commit is, thus, both an optimisation for the existing code and a
prep-commit for the user status emoji.
2022-02-09 14:17:36 -08:00

46 lines
1.4 KiB
JavaScript

import * as message_list from "./message_list";
import * as message_lists from "./message_lists";
import * as message_store from "./message_store";
import * as people from "./people";
function rerender_messages_view() {
for (const list of [message_lists.home, message_list.narrowed]) {
if (list === undefined) {
continue;
}
if (list.table_name !== undefined) {
list.rerender_view();
}
}
}
function rerender_messages_view_for_user(user_id) {
for (const list of [message_lists.home, message_list.narrowed]) {
if (list?.table_name === undefined) {
continue;
}
const messages = list.data.get_messages_sent_by_user(user_id);
if (messages.length === 0) {
continue;
}
list.view.rerender_messages(messages);
}
}
export function update_stream_name(stream_id, new_name) {
message_store.update_property("stream_name", new_name, {stream_id});
rerender_messages_view();
}
export function update_user_full_name(user_id, full_name) {
message_store.update_property("sender_full_name", full_name, {user_id});
rerender_messages_view_for_user(user_id);
}
export function update_avatar(user_id, avatar_url) {
let url = avatar_url;
url = people.format_small_avatar_url(url);
message_store.update_property("small_avatar_url", url, {user_id});
rerender_messages_view_for_user(user_id);
}