From 0cffaa7b5daba1fd9565bd9a10b92a420cd9682f Mon Sep 17 00:00:00 2001 From: Aman Agrawal Date: Fri, 12 Jun 2020 14:51:35 +0530 Subject: [PATCH] ui: Upgrade remove_message to allow removing messages in bulk. We simply pass the visible message ids to remove_and_rerender which supports bulk delete operation. This helps us avoid deleting messages in a loop which freezes the UI for the duration of the loop. --- frontend_tests/node_tests/dispatch.js | 6 +++--- static/js/server_events_dispatch.js | 7 +------ static/js/ui.js | 12 ++++++++---- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/frontend_tests/node_tests/dispatch.js b/frontend_tests/node_tests/dispatch.js index d4c194a027..7317a9d90d 100644 --- a/frontend_tests/node_tests/dispatch.js +++ b/frontend_tests/node_tests/dispatch.js @@ -799,10 +799,10 @@ with_overrides(function (override) { override('stream_list.update_streams_sidebar', noop); global.with_stub(function (stub) { override('unread_ops.process_read_messages_event', noop); - override('ui.remove_message', stub.f); + override('ui.remove_messages', stub.f); dispatch(event); - const args = stub.get_args('message_id'); - assert_same(args.message_id, 1337); + const args = stub.get_args('message_ids'); + assert_same(args.message_ids, [1337]); }); global.with_stub(function (stub) { override('unread_ops.process_read_messages_event', stub.f); diff --git a/static/js/server_events_dispatch.js b/static/js/server_events_dispatch.js index cc52c7ed33..d494041b52 100644 --- a/static/js/server_events_dispatch.js +++ b/static/js/server_events_dispatch.js @@ -37,12 +37,7 @@ exports.dispatch_normal_event = function dispatch_normal_event(event) { stream_list.update_streams_sidebar(); } - // TODO: Do this as a bulk process. - // We may need to change narrow too, - // but that maybe confusing to users. - for (const msg_id of msg_ids) { - ui.remove_message(msg_id); - } + ui.remove_messages(msg_ids); break; } diff --git a/static/js/ui.js b/static/js/ui.js index 07644c3896..17ce56e3c9 100644 --- a/static/js/ui.js +++ b/static/js/ui.js @@ -114,15 +114,19 @@ exports.show_message_failed = function (message_id, failed_msg) { }); }; -exports.remove_message = function (message_id) { +exports.remove_messages = function (message_ids) { + const msg_ids_to_rerender = []; for (const list of [message_list.all, home_msg_list, message_list.narrowed]) { if (list === undefined) { continue; } - const row = list.get_row(message_id); - if (row !== undefined) { - list.remove_and_rerender([{id: message_id}]); + for (const message_id of message_ids) { + const row = list.get_row(message_id); + if (row !== undefined) { + msg_ids_to_rerender.push({id: message_id}); + } } + list.remove_and_rerender(msg_ids_to_rerender); } };