From f84a632f548d7eed89e32e55cd473d0018794334 Mon Sep 17 00:00:00 2001
From: Jared Scheib <jared.scheib@gmail.com>
Date: Fri, 23 Mar 2018 18:10:49 -0700
Subject: [PATCH] Prevent InfluxDB Admin reset state of MultiSelectDropdown on
 props refresh

---
 ui/src/admin/components/RoleRow.js              | 2 ++
 ui/src/admin/components/UserRow.js              | 2 ++
 ui/src/shared/components/MultiSelectDropdown.js | 7 ++++++-
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/ui/src/admin/components/RoleRow.js b/ui/src/admin/components/RoleRow.js
index 94afb37db..c5abf73ea 100644
--- a/ui/src/admin/components/RoleRow.js
+++ b/ui/src/admin/components/RoleRow.js
@@ -77,6 +77,7 @@ const RoleRow = ({
             customClass={classnames(`dropdown-${ROLES_TABLE.colPermissions}`, {
               'admin-table--multi-select-empty': !permissions.length,
             })}
+            resetStateOnReceiveProps={false}
           />
         ) : null}
       </td>
@@ -92,6 +93,7 @@ const RoleRow = ({
             customClass={classnames(`dropdown-${ROLES_TABLE.colUsers}`, {
               'admin-table--multi-select-empty': !users.length,
             })}
+            resetStateOnReceiveProps={false}
           />
         ) : null}
       </td>
diff --git a/ui/src/admin/components/UserRow.js b/ui/src/admin/components/UserRow.js
index d35b69280..88cf2254d 100644
--- a/ui/src/admin/components/UserRow.js
+++ b/ui/src/admin/components/UserRow.js
@@ -96,6 +96,7 @@ const UserRow = ({
             customClass={classnames(`dropdown-${USERS_TABLE.colRoles}`, {
               'admin-table--multi-select-empty': !roles.length,
             })}
+            resetStateOnReceiveProps={false}
           />
         </td>
       ) : null}
@@ -113,6 +114,7 @@ const UserRow = ({
             customClass={classnames(`dropdown-${USERS_TABLE.colPermissions}`, {
               'admin-table--multi-select-empty': !permissions.length,
             })}
+            resetStateOnReceiveProps={false}
           />
         ) : null}
       </td>
diff --git a/ui/src/shared/components/MultiSelectDropdown.js b/ui/src/shared/components/MultiSelectDropdown.js
index 1b9108ae4..77b954329 100644
--- a/ui/src/shared/components/MultiSelectDropdown.js
+++ b/ui/src/shared/components/MultiSelectDropdown.js
@@ -40,7 +40,10 @@ class MultiSelectDropdown extends Component {
   }
 
   componentWillReceiveProps(nextProps) {
-    if (!_.isEqual(this.props.selectedItems, nextProps.selectedItems)) {
+    if (
+      !this.props.resetStateOnReceiveProps ||
+      !_.isEqual(this.props.selectedItems, nextProps.selectedItems)
+    ) {
       return
     }
 
@@ -161,6 +164,7 @@ MultiSelectDropdown.propTypes = {
   customClass: string,
   iconName: string,
   isApplyShown: bool,
+  resetStateOnReceiveProps: bool,
 }
 
 MultiSelectDropdown.defaultProps = {
@@ -169,6 +173,7 @@ MultiSelectDropdown.defaultProps = {
   customClass: 'dropdown-160',
   selectedItems: [],
   isApplyShown: true,
+  resetStateOnReceiveProps: true,
 }
 
 export default OnClickOutside(MultiSelectDropdown)