window.angular && (function(angular) { 'use strict'; angular.module('app.common.directives').directive('ldapUserRoles', [ 'APIUtils', function(APIUtils) { return { restrict: 'E', template: require('./ldap-user-roles.html'), scope: {roleGroups: '=', enabled: '=', roleGroupType: '='}, controller: [ '$scope', 'APIUtils', 'toastService', '$q', function($scope, APIUtils, toastService, $q) { $scope.privileges = []; $scope.loading = true; $scope.newGroup = {}; $scope.selectedGroupIndex = ''; $scope.editGroup = false; $scope.removeGroup = false; $scope.removeMultipleGroups = false; $scope.all = false; $scope.sortPropertyName = 'id'; $scope.reverse = false; $scope.addGroup = false; $scope.hasSelectedGroup = false; APIUtils.getAccountServiceRoles() .then( (data) => { $scope.privileges = data; }, (error) => { console.log(JSON.stringify(error)); }) .finally(() => { $scope.loading = false; }); $scope.addGroupFn = () => { $scope.addGroup = true; }; $scope.addRoleGroup = () => { $scope.loading = true; const newGroup = {}; newGroup.RemoteGroup = $scope.newGroup.RemoteGroup; newGroup.LocalRole = $scope.newGroup.LocalRole; const data = {}; const roleGroups = $scope.roleGroups; const roleGroupType = $scope.roleGroupType; data[roleGroupType] = {}; data[roleGroupType]['RemoteRoleMapping'] = roleGroups; data[roleGroupType]['RemoteRoleMapping'][roleGroups.length] = newGroup; APIUtils.saveLdapProperties(data) .then( (response) => { toastService.success( 'Group has been created successfully.'); }, (error) => { toastService.error('Failed to create new group.'); }) .finally(() => { $scope.loading = false; }); }; $scope.editGroupFn = (group, role, index) => { $scope.editGroup = true; $scope.selectedGroupIndex = index; $scope.newGroup.RemoteGroup = group; $scope.newGroup.LocalRole = role; }; $scope.editRoleGroup = () => { $scope.loading = true; const data = {}; const roleGroupType = $scope.roleGroupType; const roleGroups = $scope.roleGroups; const localRole = $scope.newGroup.LocalRole; const selectedIndex = $scope.selectedGroupIndex; data[roleGroupType] = {}; data[roleGroupType]['RemoteRoleMapping'] = roleGroups; data[roleGroupType]['RemoteRoleMapping'][selectedIndex]['LocalRole'] = localRole; APIUtils.saveLdapProperties(data) .then( (response) => { toastService.success( 'Group has been edited successfully.'); }, (error) => { toastService.error('Failed to edit group.'); }) .finally(() => { $scope.loading = false; }); $scope.editGroup = false; }; $scope.removeGroupFn = index => { $scope.removeGroup = true; $scope.selectedGroupIndex = index; }; $scope.removeRoleGroup = () => { $scope.loading = true; const roleGroupType = $scope.roleGroupType; const roleGroups = $scope.roleGroups; const selectedGroupIndex = $scope.selectedGroupIndex; const data = {}; data[roleGroupType] = {}; data[roleGroupType]['RemoteRoleMapping'] = roleGroups; data[roleGroupType]['RemoteRoleMapping'][selectedGroupIndex] = null; APIUtils.saveLdapProperties(data) .then( (response) => { toastService.success( 'Group has been removed successfully.'); }, (error) => { toastService.error('Failed to remove group.'); }) .finally(() => { $scope.loading = false; $scope.$parent.loadLdap(); }); $scope.removeGroup = false; }; $scope.removeMultipleRoleGroupsFn = () => { $scope.removeMultipleGroups = true; }; $scope.roleGroupIsSelectedChanged = () => { let groupSelected = false; $scope.roleGroups.forEach(group => { if (group && group['isSelected']) { groupSelected = true; } }); $scope.hasSelectedGroup = groupSelected; }; $scope.removeMultipleRoleGroups = () => { $scope.loading = true; const roleGroupType = $scope.roleGroupType; const roleGroups = $scope.roleGroups; const data = {}; data[roleGroupType] = {}; data[roleGroupType]['RemoteRoleMapping'] = roleGroups.map((group) => { if (group['isSelected']) { return null; } else { return group; } }); APIUtils.saveLdapProperties(data) .then( (response) => { toastService.success( 'Groups have been removed successfully.'); }, (error) => { toastService.error('Failed to remove groups.'); }) .finally(() => { $scope.loading = false; $scope.$parent.loadLdap(); }); $scope.removeMultipleGroups = false; }; $scope.toggleAll = () => { let toggleStatus = !$scope.all; $scope.roleGroups.forEach((group) => { group.isSelected = toggleStatus; }); }; $scope.optionToggled = () => { $scope.all = $scope.roleGroups.every((group) => { return group.isSelected; }); }; $scope.sortBy = (propertyName, isReverse) => { $scope.reverse = isReverse; $scope.sortPropertyName = propertyName; }; } ] }; } ]); })(window.angular);