From 412b8f63605524d93826bec9e3b4f010183f891b Mon Sep 17 00:00:00 2001
From: Chris Beer <cabeer@stanford.edu>
Date: Fri, 18 Sep 2020 08:08:47 -0700
Subject: [PATCH] Avoid connecting plugins if they don't need it

---
 __tests__/src/extend/pluginMapping.test.js | 22 ++++++++++++++++++++--
 src/extend/pluginMapping.js                |  2 ++
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/__tests__/src/extend/pluginMapping.test.js b/__tests__/src/extend/pluginMapping.test.js
index 735d9f603..2d699e3f6 100644
--- a/__tests__/src/extend/pluginMapping.test.js
+++ b/__tests__/src/extend/pluginMapping.test.js
@@ -58,8 +58,12 @@ describe('connectPluginsToStore', () => {
     const ComponentB = props => null;
 
     const plugins = [
-      { component: ComponentA, mode: 'wrap', target: 'Window' },
-      { component: ComponentB, mode: 'add', target: 'TopBar' },
+      {
+        component: ComponentA, mapStateToProps: {}, mode: 'wrap', target: 'Window',
+      },
+      {
+        component: ComponentB, mapDispatchToProps: {}, mode: 'add', target: 'TopBar',
+      },
     ];
 
     const result = connectPluginsToStore(plugins);
@@ -67,6 +71,20 @@ describe('connectPluginsToStore', () => {
     expect(result[0].component.displayName).toBe('Connect(ComponentA)');
     expect(result[1].component.displayName).toBe('Connect(ComponentB)');
   });
+
+  it('returns plugins unchanged that do not need a connection to the store', () => {
+    /** */
+    const ComponentA = props => null;
+
+    const plugins = [
+      {
+        component: ComponentA, mode: 'wrap', target: 'Window',
+      },
+    ];
+
+    const result = connectPluginsToStore(plugins);
+    expect(result[0].component).toEqual(ComponentA);
+  });
 });
 
 describe('addPluginsToCompanionWindowsRegistry', () => {
diff --git a/src/extend/pluginMapping.js b/src/extend/pluginMapping.js
index 895c7e8c1..efc449252 100644
--- a/src/extend/pluginMapping.js
+++ b/src/extend/pluginMapping.js
@@ -40,6 +40,8 @@ export function addPluginsToCompanionWindowsRegistry(plugins) {
 
 /** Connect plugin component to state */
 function connectPluginComponent(plugin) {
+  if (!plugin.mapStateToProps && !plugin.mapDispatchToProps) return plugin.component;
+
   return connect(
     plugin.mapStateToProps,
     plugin.mapDispatchToProps,
-- 
GitLab