"use strict"; /** * Licensed Materials - Property of IBM * IBM Cognos Products: Cognos Analytics * Copyright IBM Corp. 2017 * US Government Users Restricted Rights - Use, duplication or disclosure * restricted by GSA ADP Schedule Contract with IBM Corp.  */ define(['doT', 'underscore', 'bi/commons/utils/BidiUtil', 'bi/admin/nls/StringResource', 'bi/glass/app/ContentView', 'bacontentnav/utils/WidgetNavigator', 'bi/commons/ui/dialogs/ConfirmationDialog', 'text!bi/admin/multitenancy/templates/MembersTabTemplate.html', 'bi/commons/utils/ContentFormatter', 'bi/admin/multitenancy/services/TenantsCustomizationService'], function (dot, _, BidiUtil, StringResource, ContentView, WidgetNavigator, ConfirmationDialog, template, ContentFormatter, TenantsCustomizationService) { var MembersTab = ContentView.extend({ init: function init(options) { MembersTab.inherited('init', this, arguments); $.extend(this, options); this.tenantsListController = new TenantsCustomizationService({ glassContext: this.glassContext }); this.tenantMembers = []; }, render: function render() { return this.glassContext.getCoreSvc('.Config').getConfigValue('Admin/useLegacyTenancyUI').then(function (res) { if (res && res.toLowerCase) { this.useLegacyTenancyUI = res.toLowerCase() === 'true'; } else { this.useLegacyTenancyUI = false; } this._getMembers().then(function (tenant) { if (tenant.tenantMembers) { this.tenantMembers = tenant.tenantMembers.map(function (tenantMember) { return tenantMember.tenantID; }); } var members = tenant.tenantMembers ? tenant.tenantMembers : []; members = _.map(members, function (member) { return this._patchItem(member); }.bind(this)); var writable = this.objectInfo.permissions && this.objectInfo.permissions.indexOf('write') > -1 ? true : false; var strings = { 'addMember': StringResource.get('addMember'), 'removeMember': StringResource.get('removeMember'), 'removeMemberButton': StringResource.get('removeMemberButton'), 'tableheader': { 'type': StringResource.get('type'), 'name': StringResource.get('name'), 'action': StringResource.get('removeActionColumn') }, 'tenants': StringResource.get('tenantsHeader') }; var sText = StringResource.get('noMember', { 'type': this.objectInfo.type }); var tempObj = { 'members': members, 'writable': writable, 'strings': strings, noMemberText: sText }; var htmlStr = dot.template(template)(tempObj); this.$el.append(htmlStr); $.each(this.$el.find('.groupListFocusable .text-title'), function (index, value) { ContentFormatter.middleShortenString(value); }); this.widgetKeyController = new WidgetNavigator({ $el: this.$el.find(".groupList-table"), focusClass: "groupListFocusable" }); this._bindEvents(); this._enforceTextDir(); }.bind(this)); }.bind(this)); }, refresh: function refresh() { this.$el.empty(); return this.render(); }, _enforceTextDir: function _enforceTextDir() { var $spans = this.$el.find(".text-title"); $spans.attr('dir', BidiUtil.resolveBaseTextDir(this.innerHTML)); }, _removeMembers: function _removeMembers(members) { var updatedMembers = {}; updatedMembers.tenantMembers = this.tenantMembers.filter(function (tenantMember) { return members.tenantMembers.indexOf(tenantMember) === -1; }); return this.tenantsListController.removeTenantMembers(this.objectInfo.tenantID, updatedMembers); }, _getMembers: function _getMembers() { return this.tenantsListController.getTenant(this.objectInfo.tenantID).then(function (data) { return data.data[0]; }.bind(this)); }, _patchItem: function _patchItem(member) { member.svgIcon = "common-multi_tenant"; member.type = "tenant"; return member; }, _bindEvents: function _bindEvents() { var aMod = 'bi/admin/multitenancy/slideout/TenantsMemberList'; if (this.useLegacyTenancyUI) { aMod = 'bi/admin/multitenancy/slideout/TenantsMemberListLegacy'; } this.$el.find('#addMember').on('primaryaction', function () { var defaultTypes = ['tenant']; this.addMemberSlideout = this.glassContext.appController.showSlideOut({ 'parent': this.slideout, 'width': "400px", 'onHide': function () { this.setFocus(); }.bind(this), 'content': { 'module': aMod, 'parentView': this, 'objectInfo': [this.objectInfo], 'listController': this.tenantsListController, 'allowedSelectionTypes': defaultTypes } }); }.bind(this)); this.$el.find('td .admin-remove-member-svgIcon').on('primaryaction', function (e) { var item = $(e.currentTarget).closest('tr.list-item'); if (this.objectInfo.searchPath.indexOf('CAMID("::System Administrators")') !== -1 && this.objectInfo.members && this.objectInfo.members.length === 1) { var oDialog = new ConfirmationDialog('confirmDelete', StringResource.get('confirmDelete'), StringResource.get('unableToRemoveMembers')); oDialog.confirm(function () {}); } else { var conDialog = new ConfirmationDialog('confirmDelete', StringResource.get('confirmDelete'), StringResource.get('confirmDeleteMemberMessage')); conDialog.confirm(function () { this._removeMember(item); }.bind(this)); } e.stopPropagation(); return false; }.bind(this)); }, _removeMember: function _removeMember(item) { var members = {}; members.tenantMembers = []; if (item.attr('data-type') === 'tenant') { members.tenantMembers.push(item.attr('id')); } else { this.logger.error("can not remove member of type: " + item.attr('data-type')); } this._removeMembers(members).done(function () { this._removeItemFromMemberList(members); this.glassContext.appController.showToast(StringResource.get('removeMemberMsg')); }.bind(this)); this.objectInfo.members = _.filter(this.objectInfo.members, function (member) { return member.id !== item.attr('id'); }); }, _removeItemFromMemberList: function _removeItemFromMemberList(members) { var self = this; _.each(members.tenantMembers, function (member) { var item = _.find(self.$el.find('tr.list-item'), function (item) { if (item.id === member) { return item; } }); try { item.removeNode(true); } catch (err) { item.remove(); } }); if (this.widgetKeyController) { this.widgetKeyController.setInitialTabIndex(); } }, setFocus: function setFocus() { this.$el.find("#addMember").focus(); } }); return MembersTab; });