TenantsMemberListLegacy.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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/TenantsMemberListTemplate.html', 'bi/admin/common/utils/AJAXUtils', 'bi/commons/utils/BidiUtil', 'bi/commons/utils/ContentFormatter', 'bi/admin/multitenancy/services/TenantsListAdapter'], function (_, dot, MagicWand, View, ListView, StringResource, TenantsMemberListTemplate, AJAXUtils, BidiUtil, ContentFormatter, TenantsListAdapter) {
  10. 'use strict'; //NOSONAR: meant to be strict
  11. var TenantsMemberList = View.extend({
  12. showBreadcrumbs: true,
  13. defaultTypes: ['tenant'],
  14. _breadCrumbs: null,
  15. listAdaptor: null,
  16. init: function init(options) {
  17. TenantsMemberList.inherited('init', this, arguments);
  18. this.glassContext = options.glassContext;
  19. this.listAdaptor = this._getNewTenantsListAdapter({
  20. glassContext: this.glassContext,
  21. objectInfo: this.objectInfo[0]
  22. });
  23. this.parent = options.parent;
  24. this.includeToolbar = options.includeToolbar ? options.includeToolbar : false;
  25. this.filterPushed = false;
  26. this.filterStringValue = {
  27. 'tenant': true
  28. };
  29. },
  30. _getNewTenantsListAdapter: function _getNewTenantsListAdapter(options) {
  31. return new TenantsListAdapter(options);
  32. },
  33. _renderTemplate: function _renderTemplate() {
  34. var paneInfo = {
  35. 'strings': {
  36. 'title': StringResource.get('addTenantsTitle'),
  37. 'type': StringResource.get('type'),
  38. 'add': StringResource.get('add'),
  39. 'close': StringResource.get('close')
  40. }
  41. };
  42. var sHtml = dot.template(TenantsMemberListTemplate)(paneInfo);
  43. this.$el.html(sHtml);
  44. BidiUtil.initElementForBidi(this.$el.find(".bi-admin-input.bi-admin-input-search")[0]);
  45. },
  46. _renderSearch: function _renderSearch() {
  47. return MagicWand.searchInput(this.$el).then(function (widgets) {
  48. if (widgets.length === 1) {
  49. this._searchInput = widgets[0];
  50. this._searchInput.options.hint = StringResource.get('filterTips');
  51. this._searchInput.on('changed', function (e) {
  52. var trimmed = e.text.trim();
  53. if (trimmed.length > 0 || e.text === '') {
  54. this.listView.setPaging(false);
  55. this.listView.filter(trimmed, 'defaultName');
  56. }
  57. }.bind(this));
  58. }
  59. }.bind(this));
  60. },
  61. _getNewListView: function _getNewListView(options) {
  62. return new ListView(options);
  63. },
  64. _renderListView: function _renderListView() {
  65. var elList = this.$el.find('.bi-admin-tenant-list');
  66. elList.empty();
  67. this.listView = this._getNewListView({
  68. el: elList,
  69. dataAdaptor: this.listAdaptor,
  70. glassContext: this.glassContext,
  71. accessibleLabel: this.title,
  72. activeInputForm: null,
  73. multiSelect: true,
  74. removeSelf: true,
  75. objectInfo: this.objectInfo[0]
  76. });
  77. this.listView.singleSelectCallback = this._rowClickHandler.bind(this);
  78. if (this.listAdaptor.contextMenuHandler) {
  79. this.listView.contextMenuCallback = this.listAdaptor.contextMenuHandler.bind(this.listAdaptor, this);
  80. }
  81. return this.listView.render();
  82. },
  83. render: function render() {
  84. this._renderTemplate();
  85. return this._renderSearch().then(this._renderListView.bind(this)).then(this._bindEvents.bind(this));
  86. },
  87. getSelectedObjects: function getSelectedObjects() {
  88. return this.listView.getSelectedObjects();
  89. },
  90. _getFilterBar: function _getFilterBar() {
  91. return this.$el.find(".bi-admin-filterbar.folderpane-filterbar");
  92. },
  93. _bindEvents: function _bindEvents() {
  94. var $filterButton = this.$el.find('#filterDef').on('primaryaction', function () {
  95. this._bindFilter();
  96. }.bind(this));
  97. var $label = $('<span class="bi-admin-filter-icon">');
  98. $label.text(this._filterString(this.filterStringValue));
  99. ContentFormatter.middleShortenString($label);
  100. $label.appendTo($filterButton);
  101. $('#btnAdd_addMembers').on('clicktap', function () {
  102. var selectedItems = this.getSelectedObjects();
  103. if (selectedItems.length === 0) {
  104. this.glassContext.appController.showToast(StringResource.get('memberSelErrorMsg'), {
  105. type: 'error'
  106. });
  107. return;
  108. }
  109. this._addMembers(selectedItems);
  110. }.bind(this));
  111. $('#btnCancel_addMembers').on('clicktap', function () {
  112. this.slideout.hide();
  113. }.bind(this));
  114. },
  115. _getUniqueMembers: function _getUniqueMembers(selectedMembers) {
  116. var existingMembers = this.objectInfo[0].tenantMembers ? this.objectInfo[0].tenantMembers : [];
  117. var formattedMembers = _.map(existingMembers, function (member) {
  118. return member.tenantID;
  119. });
  120. if (selectedMembers) {
  121. _.each(selectedMembers, function (val, index) {
  122. var found = _.find(existingMembers, function (member) {
  123. return val.tenantID === member.tenantID;
  124. });
  125. if (!found) {
  126. formattedMembers.push(val.tenantID);
  127. }
  128. });
  129. }
  130. return formattedMembers;
  131. },
  132. _addMembers: function _addMembers(selectedMembers) {
  133. var tenant = this.objectInfo[0];
  134. return this.listController.getTenant(tenant.tenantID).then(function (data) {
  135. this.objectInfo = data.data;
  136. var membersObj = {
  137. "tenantMembers": this._getUniqueMembers(selectedMembers)
  138. };
  139. return this.listController.addTenantMembers(tenant.tenantID, membersObj);
  140. }.bind(this)).then(function () {
  141. return this.listController.getTenant(tenant.tenantID);
  142. }.bind(this), function (ajaxOptions, err) {
  143. this.glassContext.appController.showErrorMessage(AJAXUtils.buildErrorMessage(err.responseJSON.errors), StringResource.get('failToAddMember'));
  144. }.bind(this)).then(function (data) {
  145. this.objectInfo = data.data;
  146. this.glassContext.appController.showToast(StringResource.get('addMemberMsg'));
  147. return this.parentView.refresh();
  148. }.bind(this));
  149. },
  150. setFocus: function setFocus() {
  151. this.$el.find('.bi-admin-filterbar-leading input').focus();
  152. },
  153. _filterString: function _filterString(filterString) {
  154. return filterString;
  155. },
  156. _filter: function _filter(filterStr) {
  157. if (this._searchInput) {
  158. this._searchInput.options.value = '';
  159. }
  160. var $label = this.$el.find('.bi-admin-filter-icon');
  161. if ($label) {
  162. $label[0].title = '';
  163. }
  164. var labelString = this._filterString(filterStr);
  165. $label.text(labelString);
  166. ContentFormatter.middleShortenString($label[0]);
  167. this.listAdaptor._filterType = filterStr || '';
  168. this.listAdaptor._filterString = '';
  169. this.listView.reload(false);
  170. },
  171. reloadList: function reloadList() {
  172. return this.listView.reload(false);
  173. },
  174. _rowClickHandler: function _rowClickHandler(oData) {
  175. if (this.listAdaptor.rowClickHandler) {
  176. this.listAdaptor.rowClickHandler(this, oData);
  177. }
  178. }
  179. });
  180. return TenantsMemberList;
  181. });