"use strict"; /** * Licensed Materials - Property of IBM * IBM Cognos Products: Cognos Analytics * Copyright IBM Corp. 2015, 2018 * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ define(['underscore', 'doT', 'q', 'bi/commons/utils/BidiUtil', 'bi/commons/ui/AccessibleView', 'bi/admin/common/ui/MagicWand', 'bi/admin/nls/StringResource', 'bi/admin/common/utils/AJAXUtils', 'ba-react-admin/ba-react-admin.min'], function (_, doT, Q, BidiUtil, ContentView, MagicWand, StringResource, AJAXUtils, AdminReact) { //NOSONAR: needed for amd 'use strict'; //NOSONAR: meant to be strict var ConfirmDeleteContentView = ContentView.extend({ /** @paran options.el {node} - container dom node **/ init: function init(options) { ConfirmDeleteContentView.inherited('init', this, arguments); _.extend(this, options); }, render: function render() { this.$entryHeader.attr("tabindex", "-1"); var deleteMsg = !this.deleteUserProfile ? StringResource.get('confirmDeleteMessage') : StringResource.get('confirmDeleteUserProfileMessage'); var sHtml = $('
' + deleteMsg + '
'); this.$el.attr("tabindex", "-1"); this.$el.append(sHtml); if (this.showCheckbox) { var $confirmCheckbox = this._createCheckbox('confirmDeleteCheckbox', StringResource.get('deleteUserContent'), true); this.$el.find('#confirmDeleteView').append($confirmCheckbox); MagicWand.checkBox(this.$el); } }, setFocus: function setFocus() { this.$el.closest("*[role='dialog']").find(".dialogButton.primary").focus(); }, postCreateRender: function postCreateRender() { this.$el.closest("*[role='dialog']").attr("aria-describedby", "confirmDeleteView"); }, //Called by the dialog when it asks the view for the button spec getButtonSpec: function getButtonSpec() { return [{ 'text': StringResource.get('ok'), 'handler': this._confirmDelete.bind(this), 'type': 'primary' }, 'cancel']; }, /* * Temporarily using the content_apps objects api to handle namespaceFolders, * presently the admin api does not handle them, and needs to be updated, along * with all calls to namespaceFolders in the new release */ _remove: function _remove(type, id) { var deleteURL; switch (type) { case 'group': deleteURL = AJAXUtils.getPath('deleteGroup', id); break; case 'namespaceFolder': deleteURL = AJAXUtils.getPath('deleteNamespaceFolder', id); break; case 'role': deleteURL = AJAXUtils.getPath('deleteRole', id); break; default: deleteURL = ""; break; } var options = { method: 'DELETE', contentType: 'application/json; charset=utf-8', dataType: 'json', url: deleteURL }; return this.glassContext.services.ajax.ajax(options); }, _removeUser: function _removeUser(id) { var deleteURL; if (!this.deleteUserProfile) { deleteURL = AJAXUtils.getPath('deleteUser', id); } else { deleteURL = AJAXUtils.getPath('deleteUserProfile', id); } return this.glassContext.services.fetch.delete(deleteURL); }, _confirmDelete: function _confirmDelete() { this.dialog.hide(); var self = this; var selectedNum = this.accountObj.length; if (selectedNum > 1) { var aPromises = []; _.each(this.accountObj, function (item) { var innerDeferred = Q.defer(); switch (item.type) { case 'account': var currentSigninUser = _.find(self.accountExplorer.authAccounts, function (account) { return account.id === item.id; }); if (!currentSigninUser) { this._removeUser(item.id).done(function (data) { innerDeferred.resolve(data); }, function (err) { innerDeferred.reject(err); }); } else { selectedNum = selectedNum - 1; self.glassContext.appController.showToast(StringResource.get('cannotDeleteSignOnUserMsg'), { type: 'error' }); innerDeferred.resolve(); } break; case 'group': case 'role': case 'namespaceFolder': this._remove(item.type, item.id).done(function (data) { innerDeferred.resolve(data); }, function (err) { innerDeferred.reject(err); }); break; default: innerDeferred.reject(); break; } aPromises.push(innerDeferred.promise); }.bind(this)); Q.all(aPromises).then(function (results) { var sText = StringResource.get('multiDeleteMsg', { 'num': selectedNum }); self.glassContext.appController.showToast(sText, { type: 'success' }); self.accountAdaptor.sortChanged = true; self.listView.reload(false); return deferred.resolve(results); }.bind(this), function () { self.accountAdaptor.sortChanged = true; self.listView.reload(false); }); } else { var sText = ''; var typeToToastMessage = { group: StringResource.get('groupToastDeleteMsg', { 'name': BidiUtil.enforceTextDirection(self.accountObj[0].defaultName) }), role: StringResource.get('roleToastDeleteMsg', { 'name': BidiUtil.enforceTextDirection(self.accountObj[0].defaultName) }), namespaceFolder: StringResource.get('folderToastDeleteMsg', { 'name': BidiUtil.enforceTextDirection(self.accountObj[0].defaultName) }) }; switch (self.accountObj[0].type) { case 'account': var currentSigninUser = _.find(self.accountExplorer.authAccounts, function (account) { return account.id === self.accountObj[0].id; }); if (!currentSigninUser) { this._removeUser(self.accountObj[0].id).done(function () { var deleteToastMsgKey = !this.deleteUserProfile ? 'userToastDeleteMsg' : 'userProfileToastDeleteMsg'; sText = StringResource.get(deleteToastMsgKey, { 'name': BidiUtil.enforceTextDirection(self.accountObj[0].defaultName) }); self.glassContext.appController.showToast(sText, { type: 'success' }); self._reloadListView(); }.bind(this), function () { if (!self.accountExplorer.pagingEnabled) { self.accountAdaptor.sortChanged = true; self.listView.reload(false); } }); } else { self.glassContext.appController.showToast(StringResource.get('cannotDeleteSignOnUserMsg'), { type: 'error' }); } break; case 'group': case 'role': case 'namespaceFolder': default: sText = typeToToastMessage[self.accountObj[0].type]; this._remove(self.accountObj[0].type, self.accountObj[0].id).done(function () { self.glassContext.appController.showToast(sText, { type: 'success' }); self._reloadListView(); }, function () { if (!self.accountExplorer.pagingEnabled) { self.accountAdaptor.sortChanged = true; self.listView.reload(false); } }); break; } } }, _reloadListView: function _reloadListView() { if (this.accountExplorer.pagingEnabled) { this.accountAdaptor.sortChanged = false; AdminReact.PaginationHelper.reloadListViewinPagingContext(this.glassContext, this.accountExplorer, this.listView, this.listAdaptor); } else { this.accountAdaptor.sortChanged = true; this.listView.reload(false); } }, _createCheckbox: function _createCheckbox(id, text, checked) { var $item = $('
'); $item.attr('id', id); var $checkBox = $(''); $checkBox.prop('checked', checked); var $label = $(''); $label.text(text); $item.append($checkBox); $item.append($label); return $item; } }); return ConfirmDeleteContentView; });