ConfirmDeleteContentView.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. "use strict";
  2. /**
  3. * Licensed Materials - Property of IBM
  4. * IBM Cognos Products: Cognos Analytics
  5. * Copyright IBM Corp. 2015, 2018
  6. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. */
  8. 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) {
  9. //NOSONAR: needed for amd
  10. 'use strict'; //NOSONAR: meant to be strict
  11. var ConfirmDeleteContentView = ContentView.extend({
  12. /**
  13. @paran options.el {node} - container dom node
  14. **/
  15. init: function init(options) {
  16. ConfirmDeleteContentView.inherited('init', this, arguments);
  17. _.extend(this, options);
  18. },
  19. render: function render() {
  20. this.$entryHeader.attr("tabindex", "-1");
  21. var deleteMsg = !this.deleteUserProfile ? StringResource.get('confirmDeleteMessage') : StringResource.get('confirmDeleteUserProfileMessage');
  22. var sHtml = $('<div id="confirmDeleteView"><div class="messageBox">' + deleteMsg + '</div></div>');
  23. this.$el.attr("tabindex", "-1");
  24. this.$el.append(sHtml);
  25. if (this.showCheckbox) {
  26. var $confirmCheckbox = this._createCheckbox('confirmDeleteCheckbox', StringResource.get('deleteUserContent'), true);
  27. this.$el.find('#confirmDeleteView').append($confirmCheckbox);
  28. MagicWand.checkBox(this.$el);
  29. }
  30. },
  31. setFocus: function setFocus() {
  32. this.$el.closest("*[role='dialog']").find(".dialogButton.primary").focus();
  33. },
  34. postCreateRender: function postCreateRender() {
  35. this.$el.closest("*[role='dialog']").attr("aria-describedby", "confirmDeleteView");
  36. },
  37. //Called by the dialog when it asks the view for the button spec
  38. getButtonSpec: function getButtonSpec() {
  39. return [{
  40. 'text': StringResource.get('ok'),
  41. 'handler': this._confirmDelete.bind(this),
  42. 'type': 'primary'
  43. }, 'cancel'];
  44. },
  45. /*
  46. * Temporarily using the content_apps objects api to handle namespaceFolders,
  47. * presently the admin api does not handle them, and needs to be updated, along
  48. * with all calls to namespaceFolders in the new release
  49. */
  50. _remove: function _remove(type, id) {
  51. var deleteURL;
  52. switch (type) {
  53. case 'group':
  54. deleteURL = AJAXUtils.getPath('deleteGroup', id);
  55. break;
  56. case 'namespaceFolder':
  57. deleteURL = AJAXUtils.getPath('deleteNamespaceFolder', id);
  58. break;
  59. case 'role':
  60. deleteURL = AJAXUtils.getPath('deleteRole', id);
  61. break;
  62. default:
  63. deleteURL = "";
  64. break;
  65. }
  66. var options = {
  67. method: 'DELETE',
  68. contentType: 'application/json; charset=utf-8',
  69. dataType: 'json',
  70. url: deleteURL
  71. };
  72. return this.glassContext.services.ajax.ajax(options);
  73. },
  74. _removeUser: function _removeUser(id) {
  75. var deleteURL;
  76. if (!this.deleteUserProfile) {
  77. deleteURL = AJAXUtils.getPath('deleteUser', id);
  78. } else {
  79. deleteURL = AJAXUtils.getPath('deleteUserProfile', id);
  80. }
  81. return this.glassContext.services.fetch.delete(deleteURL);
  82. },
  83. _confirmDelete: function _confirmDelete() {
  84. this.dialog.hide();
  85. var self = this;
  86. var selectedNum = this.accountObj.length;
  87. if (selectedNum > 1) {
  88. var aPromises = [];
  89. _.each(this.accountObj, function (item) {
  90. var innerDeferred = Q.defer();
  91. switch (item.type) {
  92. case 'account':
  93. var currentSigninUser = _.find(self.accountExplorer.authAccounts, function (account) {
  94. return account.id === item.id;
  95. });
  96. if (!currentSigninUser) {
  97. this._removeUser(item.id).done(function (data) {
  98. innerDeferred.resolve(data);
  99. }, function (err) {
  100. innerDeferred.reject(err);
  101. });
  102. } else {
  103. selectedNum = selectedNum - 1;
  104. self.glassContext.appController.showToast(StringResource.get('cannotDeleteSignOnUserMsg'), {
  105. type: 'error'
  106. });
  107. innerDeferred.resolve();
  108. }
  109. break;
  110. case 'group':
  111. case 'role':
  112. case 'namespaceFolder':
  113. this._remove(item.type, item.id).done(function (data) {
  114. innerDeferred.resolve(data);
  115. }, function (err) {
  116. innerDeferred.reject(err);
  117. });
  118. break;
  119. default:
  120. innerDeferred.reject();
  121. break;
  122. }
  123. aPromises.push(innerDeferred.promise);
  124. }.bind(this));
  125. Q.all(aPromises).then(function (results) {
  126. var sText = StringResource.get('multiDeleteMsg', {
  127. 'num': selectedNum
  128. });
  129. self.glassContext.appController.showToast(sText, {
  130. type: 'success'
  131. });
  132. self.accountAdaptor.sortChanged = true;
  133. self.listView.reload(false);
  134. return deferred.resolve(results);
  135. }.bind(this), function () {
  136. self.accountAdaptor.sortChanged = true;
  137. self.listView.reload(false);
  138. });
  139. } else {
  140. var sText = '';
  141. var typeToToastMessage = {
  142. group: StringResource.get('groupToastDeleteMsg', {
  143. 'name': BidiUtil.enforceTextDirection(self.accountObj[0].defaultName)
  144. }),
  145. role: StringResource.get('roleToastDeleteMsg', {
  146. 'name': BidiUtil.enforceTextDirection(self.accountObj[0].defaultName)
  147. }),
  148. namespaceFolder: StringResource.get('folderToastDeleteMsg', {
  149. 'name': BidiUtil.enforceTextDirection(self.accountObj[0].defaultName)
  150. })
  151. };
  152. switch (self.accountObj[0].type) {
  153. case 'account':
  154. var currentSigninUser = _.find(self.accountExplorer.authAccounts, function (account) {
  155. return account.id === self.accountObj[0].id;
  156. });
  157. if (!currentSigninUser) {
  158. this._removeUser(self.accountObj[0].id).done(function () {
  159. var deleteToastMsgKey = !this.deleteUserProfile ? 'userToastDeleteMsg' : 'userProfileToastDeleteMsg';
  160. sText = StringResource.get(deleteToastMsgKey, {
  161. 'name': BidiUtil.enforceTextDirection(self.accountObj[0].defaultName)
  162. });
  163. self.glassContext.appController.showToast(sText, {
  164. type: 'success'
  165. });
  166. self._reloadListView();
  167. }.bind(this), function () {
  168. if (!self.accountExplorer.pagingEnabled) {
  169. self.accountAdaptor.sortChanged = true;
  170. self.listView.reload(false);
  171. }
  172. });
  173. } else {
  174. self.glassContext.appController.showToast(StringResource.get('cannotDeleteSignOnUserMsg'), {
  175. type: 'error'
  176. });
  177. }
  178. break;
  179. case 'group':
  180. case 'role':
  181. case 'namespaceFolder':
  182. default:
  183. sText = typeToToastMessage[self.accountObj[0].type];
  184. this._remove(self.accountObj[0].type, self.accountObj[0].id).done(function () {
  185. self.glassContext.appController.showToast(sText, {
  186. type: 'success'
  187. });
  188. self._reloadListView();
  189. }, function () {
  190. if (!self.accountExplorer.pagingEnabled) {
  191. self.accountAdaptor.sortChanged = true;
  192. self.listView.reload(false);
  193. }
  194. });
  195. break;
  196. }
  197. }
  198. },
  199. _reloadListView: function _reloadListView() {
  200. if (this.accountExplorer.pagingEnabled) {
  201. this.accountAdaptor.sortChanged = false;
  202. AdminReact.PaginationHelper.reloadListViewinPagingContext(this.glassContext, this.accountExplorer, this.listView, this.listAdaptor);
  203. } else {
  204. this.accountAdaptor.sortChanged = true;
  205. this.listView.reload(false);
  206. }
  207. },
  208. _createCheckbox: function _createCheckbox(id, text, checked) {
  209. var $item = $('<div class="bi-admin-checkbox"></div>');
  210. $item.attr('id', id);
  211. var $checkBox = $('<input type="checkbox"></input>');
  212. $checkBox.prop('checked', checked);
  213. var $label = $('<span/>');
  214. $label.text(text);
  215. $item.append($checkBox);
  216. $item.append($label);
  217. return $item;
  218. }
  219. });
  220. return ConfirmDeleteContentView;
  221. });