TenantsListView.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  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
  7. * restricted by GSA ADP Schedule Contract with IBM Corp.
  8. */
  9. define(['underscore', 'doT', 'bi/admin/common/ui/MagicWand', 'bi/commons/ui/AccessibleView', 'bi/admin/common/ui/listview/ListView', 'bi/admin/nls/StringResource', 'text!bi/admin/multitenancy/templates/TenantsListTemplate.html', 'bi/admin/common/utils/AJAXUtils', 'bi/commons/utils/BidiUtil', 'bi/commons/utils/ContentFormatter', 'bi/admin/multitenancy/services/TenantsListAdapter', 'bi/commons/ui/dialogs/ConfirmationDialog', 'bi/admin/multitenancy/services/TenantsCustomizationService', 'bi/admin/multitenancy/TenantsActionHandler'], function (_, dot, MagicWand, View, ListView, StringResource, TenantsListTemplate, AJAXUtils, BidiUtil, ContentFormatter, TenantsListAdapter, ConfirmationDialog, TenantsCustomizationService, TenantsActionHandler) {
  10. 'use strict'; //NOSONAR: meant to be strict
  11. var TenantsListView = View.extend({
  12. showBreadcrumbs: true,
  13. defaultTypes: ['tenant'],
  14. _breadCrumbs: null,
  15. listAdaptor: null,
  16. init: function init(options) {
  17. TenantsListView.inherited('init', this, arguments);
  18. _.extend(this, options);
  19. this.listAdaptor = this._getNewTenantsListAdapter({
  20. glassContext: this.glassContext,
  21. objectInfo: {},
  22. removeSelf: false,
  23. showContextMenu: true
  24. });
  25. this.tenantsController = this._getNewTenantsCustomizationService({
  26. glassContext: this.glassContext
  27. });
  28. this.includeToolbar = options.includeToolbar ? options.includeToolbar : false;
  29. this.filterPushed = false;
  30. this.filterStringValue = {
  31. 'tenant': true
  32. };
  33. },
  34. _getNewTenantsListAdapter: function _getNewTenantsListAdapter(spec) {
  35. return new TenantsListAdapter(spec);
  36. },
  37. _getNewTenantsCustomizationService: function _getNewTenantsCustomizationService(spec) {
  38. return new TenantsCustomizationService(spec);
  39. },
  40. _renderTemplate: function _renderTemplate() {
  41. var paneInfo = {
  42. 'strings': {
  43. 'title': StringResource.get('addTenantsTitle'),
  44. 'type': StringResource.get('type'),
  45. 'addTenant': StringResource.get('addTenantTitle')
  46. }
  47. };
  48. var sHtml = dot.template(TenantsListTemplate)(paneInfo);
  49. this.$el.html(sHtml);
  50. BidiUtil.initElementForBidi(this.$el.find(".bi-admin-input.bi-admin-input-search")[0]);
  51. },
  52. _renderSearch: function _renderSearch() {
  53. return MagicWand.searchInput(this.$el).then(function (widgets) {
  54. if (widgets.length === 1) {
  55. this._searchInput = widgets[0];
  56. this._searchInput.options.hint = StringResource.get('filterTips');
  57. this._searchInput.on('changed', function (e) {
  58. var trimmed = e.text.trim();
  59. if (trimmed.length > 0 || e.text === '') {
  60. this.listView.setPaging(false);
  61. this.listView.filter(trimmed, 'defaultName');
  62. }
  63. }.bind(this));
  64. }
  65. }.bind(this));
  66. },
  67. _getNewTenantsActionHandler: function _getNewTenantsActionHandler() {
  68. return new TenantsActionHandler();
  69. },
  70. _getNewListView: function _getNewListView(options) {
  71. return new ListView(options);
  72. },
  73. _renderListView: function _renderListView() {
  74. var elList = this.$el.find('.bi-admin-tenant-list');
  75. elList.empty();
  76. this.listView = this._getNewListView({
  77. el: elList,
  78. dataAdaptor: this.listAdaptor,
  79. glassContext: this.glassContext,
  80. accessibleLabel: this.title,
  81. activeInputForm: null,
  82. multiSelect: false
  83. });
  84. this.listView.singleSelectCallback = this._rowClickHandler.bind(this);
  85. this.listView.contextMenuCallback = function (e) {
  86. var args = {
  87. "position": e.position,
  88. "menuId": "com.ibm.bi.admin.tenantMenu",
  89. "activeObject": {
  90. handler: this._getNewTenantsActionHandler(),
  91. data: e.selectedObject[0],
  92. parentView: this
  93. }
  94. };
  95. this.glassContext.appController.showContextMenu(args);
  96. }.bind(this);
  97. if (this.listAdaptor.contextMenuHandler) {
  98. this.listView.contextMenuCallback = this.listAdaptor.contextMenuHandler.bind(this.listAdaptor, this);
  99. }
  100. return this.listView.render();
  101. },
  102. render: function render() {
  103. this._renderTemplate();
  104. return this._renderSearch().then(this._renderListView.bind(this)).then(this._bindEvents.bind(this));
  105. },
  106. getSelectedObjects: function getSelectedObjects() {
  107. return this.listView.getSelectedObjects();
  108. },
  109. _bindEvents: function _bindEvents() {
  110. if (this.showAddButton) {
  111. this.$el.find('#button_add').on('primaryaction', function () {
  112. this.trigger('addItem');
  113. }.bind(this));
  114. }
  115. $(this.slideout.$el).on('com.ibm.cognos.bi.admin.updatetenantlist', function () {
  116. this.listView.reload();
  117. }.bind(this));
  118. var $label = $('<span class="bi-admin-filter-icon">');
  119. $label.text(this._filterString(this.filterStringValue));
  120. ContentFormatter.middleShortenString($label);
  121. },
  122. _addTenant: function _addTenant() {},
  123. setFocus: function setFocus() {
  124. this.$el.find('.bi-admin-filterbar-leading input').focus();
  125. },
  126. _filterString: function _filterString(filterString) {
  127. return filterString;
  128. },
  129. _filter: function _filter(filterStr) {
  130. if (this._searchInput) {
  131. this._searchInput.options.value = '';
  132. }
  133. var $label = this.$el.find('.bi-admin-filter-icon');
  134. if ($label) {
  135. $label[0].title = '';
  136. }
  137. var labelString = this._filterString(filterStr);
  138. $label.text(labelString);
  139. ContentFormatter.middleShortenString($label[0]);
  140. this.listAdaptor._filterType = filterStr || '';
  141. this.listAdaptor._filterString = '';
  142. this.listView.reload(false);
  143. },
  144. reloadList: function reloadList() {
  145. return this.listView.reload(false);
  146. },
  147. _rowClickHandler: function _rowClickHandler(oData) {
  148. if (this.listAdaptor.rowClickHandler) {
  149. this.listAdaptor.rowClickHandler(this, oData);
  150. }
  151. },
  152. doSetProperties: function doSetProperties(tenant, tabModule) {
  153. tenant.type = 'tenant';
  154. var tenantPropertySlideout = this.glassContext.appController.showSlideOut({
  155. 'parent': this.slideout,
  156. 'width': "600px",
  157. 'onHide': function () {
  158. if (tenantPropertySlideout && tenantPropertySlideout.contentView && tenantPropertySlideout.contentView.onHide) {
  159. tenantPropertySlideout.contentView.onHide().then(function () {
  160. //remove propertiesPageView
  161. tenantPropertySlideout.hide();
  162. }.bind(this));
  163. }
  164. }.bind(this),
  165. 'content': {
  166. 'module': 'bi/admin/common/PropertiesPageView',
  167. 'parentView': this,
  168. 'objectInfo': tenant,
  169. 'type': tenant.type,
  170. 'glassContext': this._glassContext,
  171. 'selectedTabModule': tabModule,
  172. 'tenantsController': this.tenantsController
  173. }
  174. });
  175. },
  176. doDelete: function doDelete(tenant, shouldDeleteTenantProfile) {
  177. var dialogMsg = !shouldDeleteTenantProfile ? StringResource.get('multitenancyDeleteConfirmation') : StringResource.get('multitenancyDeleteProfileConfirmation');
  178. var oDialog = new ConfirmationDialog('confirmDelete', StringResource.get('confirmDelete'), dialogMsg);
  179. oDialog.setDialogOptions({
  180. 'width': '500px'
  181. });
  182. oDialog.confirm(function () {
  183. if (this.slideout.child) {
  184. this.slideout.child.hide();
  185. }
  186. this.tenantsController.deleteTenant(tenant.tenantID, shouldDeleteTenantProfile).then(function () {
  187. var sText;
  188. if (!shouldDeleteTenantProfile) {
  189. sText = StringResource.get('multitenancyDeleteMsg', {
  190. 'tenantName': tenant.defaultName
  191. });
  192. } else {
  193. sText = StringResource.get('multitenancyDeleteTenantProfileMsg', {
  194. 'tenantName': tenant.defaultName
  195. });
  196. }
  197. this.glassContext.appController.showToast(sText, {
  198. 'type': 'success'
  199. });
  200. this.slideout.$el.trigger('com.ibm.cognos.bi.admin.updatetenantlist');
  201. }.bind(this), function (ajaxObj, err) {
  202. if (!shouldDeleteTenantProfile) {
  203. this.glassContext.appController.showErrorMessage(AJAXUtils.buildErrorMessage(err.responseJSON.errors), StringResource.get('error'));
  204. } else {
  205. this.glassContext.appController.showToast(err.responseJSON.error, {
  206. 'type': 'warning'
  207. });
  208. }
  209. }.bind(this));
  210. }.bind(this));
  211. oDialog.renderContent($('<div>'));
  212. },
  213. doKillTenantSessions: function doKillTenantSessions(tenant) {
  214. var oDialog = new ConfirmationDialog('multitenantKillSessions', StringResource.get('multitenantKillSessions'), StringResource.get('multitenantKillSessionsConfirm', {
  215. "tenantName": tenant.defaultName
  216. }));
  217. oDialog.confirm(function () {
  218. if (this.slideout.child) {
  219. this.slideout.child.hide();
  220. }
  221. this.tenantsController.killTenantSessions(tenant.tenantID).then(function (data) {
  222. var sText = StringResource.get('multitenantKillSessionsSuccess', {
  223. 'sessionNumber': data.count ? data.count : 0,
  224. 'tenantName': tenant.defaultName
  225. });
  226. this.glassContext.appController.showToast(sText, {
  227. 'type': 'success'
  228. });
  229. }.bind(this), function (ajaxObj, err) {
  230. this.glassContext.appController.showErrorMessage(AJAXUtils.buildErrorMessage(err.responseJSON.errors), StringResource.get('error'));
  231. }.bind(this));
  232. }.bind(this));
  233. oDialog.renderContent($('<div>'));
  234. },
  235. doDisableTenant: function doDisableTenant(tenant) {
  236. this.tenantsController.disableTenant(tenant.tenantID, !tenant.disabled).then(function (data) {
  237. var message = tenant.disabled ? StringResource.get('enableTenant', {
  238. 'tenantName': tenant.defaultName
  239. }) : StringResource.get('disableTenant', {
  240. 'tenantName': tenant.defaultName
  241. });
  242. this.glassContext.appController.showToast(message);
  243. this.slideout.$el.trigger('com.ibm.cognos.bi.admin.updatetenantlist');
  244. }.bind(this));
  245. },
  246. refresh: function refresh() {
  247. this.listView.reload();
  248. }
  249. });
  250. return TenantsListView;
  251. });