"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 = $('
');
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;
});