Skip to content

Move EE differences for `app/assets/javascripts/members.js`

The file app/assets/javascripts/members.js has differences between CE and EE.

Diferences

diff --git a/home/yorickpeterse/Projects/gitlab/gdk-ce/gitlab/app/assets/javascripts/members.js b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/app/assets/javascripts/members.js
index bd263c75a3d..59af9b7873f 100644
--- a/home/yorickpeterse/Projects/gitlab/gdk-ce/gitlab/app/assets/javascripts/members.js
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/app/assets/javascripts/members.js
@@ -1,4 +1,7 @@
 import $ from 'jquery';
+import Flash from './flash';
+import { __ } from './locale';
+import axios from './lib/utils/axios_utils';
 
 export default class Members {
   constructor() {
@@ -7,6 +10,15 @@ export default class Members {
   }
 
   addListeners() {
+    $('.js-ldap-permissions')
+      .off('click')
+      .on('click', this.showLDAPPermissionsWarning.bind(this));
+    $('.js-ldap-override')
+      .off('click')
+      .on('click', this.toggleMemberAccessToggle.bind(this));
+    $('.project_member, .group_member')
+      .off('ajax:success')
+      .on('ajax:success', this.removeRow);
     $('.js-member-update-control')
       .off('change')
       .on('change', this.formSubmit.bind(this));
@@ -23,6 +35,10 @@ export default class Members {
       $btn.glDropdown({
         selectable: true,
         isSelectable(selected, $el) {
+          if ($el.data('revert')) {
+            return false;
+          }
+
           return !$el.hasClass('is-active');
         },
         fieldName: $btn.data('fieldName'),
@@ -30,10 +46,28 @@ export default class Members {
           return $el.data('id');
         },
         toggleLabel(selected, $el) {
+          if ($el.data('revert')) {
+            return $btn.text();
+          }
+
           return $el.text();
         },
         clicked: options => {
-          this.formSubmit(null, options.$el);
+          const $link = options.$el;
+
+          if (!$link.data('revert')) {
+            this.formSubmit(null, $link);
+          } else {
+            const { $memberListItem, $toggle, $dateInput } = this.getMemberListItems($link);
+
+            $toggle.disable();
+            $dateInput.disable();
+
+            this.overrideLdap($memberListItem, $link.data('endpoint'), false).catch(() => {
+              $toggle.enable();
+              $dateInput.enable();
+            });
+          }
         },
       });
     });
@@ -55,6 +89,15 @@ export default class Members {
     $toggle.enable();
     $dateInput.enable();
   }
+
+  showLDAPPermissionsWarning(e) {
+    const $btn = $(e.currentTarget);
+    const { $memberListItem } = this.getMemberListItems($btn);
+    const $ldapPermissionsElement = $memberListItem.next();
+
+    $ldapPermissionsElement.toggle();
+  }
+
   // eslint-disable-next-line class-methods-use-this
   getMemberListItems($el) {
     const $memberListItem = $el.is('.member') ? $el : $(`#${$el.data('elId')}`);
@@ -65,4 +108,44 @@ export default class Members {
       $dateInput: $memberListItem.find('.js-access-expiration-date'),
     };
   }
+
+  toggleMemberAccessToggle(e) {
+    const $btn = $(e.currentTarget);
+    const { $memberListItem, $toggle, $dateInput } = this.getMemberListItems($btn);
+
+    $btn.disable();
+    this.overrideLdap($memberListItem, $btn.data('endpoint'), true)
+      .then(() => {
+        this.showLDAPPermissionsWarning(e);
+
+        $toggle.enable();
+        $dateInput.enable();
+      })
+      .catch(xhr => {
+        $btn.enable();
+
+        if (xhr.status === 403) {
+          Flash(
+            __(
+              'You do not have the correct permissions to override the settings from the LDAP group sync.',
+            ),
+          );
+        } else {
+          Flash(__('An error occurred while saving LDAP override status. Please try again.'));
+        }
+      });
+  }
+
+  // eslint-disable-next-line class-methods-use-this
+  overrideLdap($memberListitem, endpoint, override) {
+    return axios
+      .patch(endpoint, {
+        group_member: {
+          override,
+        },
+      })
+      .then(() => {
+        $memberListitem.toggleClass('is-overriden', override);
+      });
+  }
 }

What needs to be done

  1. import statements can be safely moved to the CE version
  2. Safeguard all differences with ifEE