From bd9a900a1b628523dc940bb0db4bad00e885bf2f Mon Sep 17 00:00:00 2001
From: sachaaaaa <sacha@loki.network>
Date: Thu, 14 Nov 2019 17:07:52 +1100
Subject: [PATCH 1/2] Prevent instantiating a new BulkEdit react component with
 every click

---
 js/views/bulk_edit_view.js    | 29 +++++++++++------------------
 js/views/conversation_view.js |  2 +-
 2 files changed, 12 insertions(+), 19 deletions(-)

diff --git a/js/views/bulk_edit_view.js b/js/views/bulk_edit_view.js
index c886ff023..c29f8401c 100644
--- a/js/views/bulk_edit_view.js
+++ b/js/views/bulk_edit_view.js
@@ -8,33 +8,26 @@
 
   Whisper.BulkEditView = Whisper.View.extend({
     initialize(options) {
-      this.selectedMessages = new Set();
-      this.render();
-      this.onCancel = options.onCancel;
-      this.onDelete = options.onDelete;
-    },
-    render() {
-      if (this.memberView) {
-        this.memberView.remove();
-        this.memberView = null;
-      }
+      this.props = {
+        onCancel: options.onCancel,
+        onDelete: options.onDelete,
+        messageCount: 0,
+      };
 
       this.memberView = new Whisper.ReactWrapperView({
         className: 'bulk-edit-view',
         Component: window.Signal.Components.BulkEdit,
-        props: {
-          messageCount: this.selectedMessages.size,
-          onCancel: this.onCancel,
-          onDelete: this.onDelete,
-        },
+        props: this.props,
       });
 
       this.$el.append(this.memberView.el);
-      return this;
+    },
+    render() {
+      this.memberView.update(this.props);
     },
 
-    update(selectedMessages) {
-      this.selectedMessages = selectedMessages;
+    update(selectionSize) {
+      this.props.messageCount = selectionSize;
       this.render();
     },
   });
diff --git a/js/views/conversation_view.js b/js/views/conversation_view.js
index 6a798cf78..f53f7cb1d 100644
--- a/js/views/conversation_view.js
+++ b/js/views/conversation_view.js
@@ -1797,7 +1797,7 @@
         $('.compose').show();
       }
 
-      this.bulkEditView.update(this.model.selectedMessages);
+      this.bulkEditView.update(selectionSize);
     },
 
     resetMessageSelection() {

From 7f96b4c95cfbbc105baeef28193a575e5e3db4c8 Mon Sep 17 00:00:00 2001
From: sachaaaaa <sacha@loki.network>
Date: Fri, 15 Nov 2019 10:02:11 +1100
Subject: [PATCH 2/2] lazy instantiation

---
 js/views/bulk_edit_view.js | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/js/views/bulk_edit_view.js b/js/views/bulk_edit_view.js
index c29f8401c..ec6b37301 100644
--- a/js/views/bulk_edit_view.js
+++ b/js/views/bulk_edit_view.js
@@ -8,12 +8,18 @@
 
   Whisper.BulkEditView = Whisper.View.extend({
     initialize(options) {
+      this.memberView = null;
       this.props = {
         onCancel: options.onCancel,
         onDelete: options.onDelete,
         messageCount: 0,
       };
-
+    },
+    render() {
+      if (this.memberView) {
+        this.memberView.update(this.props);
+        return;
+      }
       this.memberView = new Whisper.ReactWrapperView({
         className: 'bulk-edit-view',
         Component: window.Signal.Components.BulkEdit,
@@ -22,9 +28,6 @@
 
       this.$el.append(this.memberView.el);
     },
-    render() {
-      this.memberView.update(this.props);
-    },
 
     update(selectionSize) {
       this.props.messageCount = selectionSize;