GlobalParametersTab.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. /**
  2. * Licensed Materials - Property of IBM
  3. * IBM Cognos Products: Cognos Analytics
  4. * Copyright IBM Corp. 2015, 2019
  5. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  6. */
  7. 'use strict'; //NOSONAR
  8. define(['underscore', 'bi/admin/nls/StringResource', 'doT', 'bacontentnav/common/ContentListPageView', 'bacontentnav/common/ui/ListControl', 'bi/admin/common/ui/listview/actions/AddParameterAction', 'bi/admin/account/services/RoleCustomizationService', 'bacontentnav/ui/dialogs/OpenDialog', 'bi/admin/common/utils/parameters/Parameters', 'text!bi/admin/common/templates/ParametersTabTemplate.html', 'bi/commons/utils/Utils', 'bacontentnav/utils/WidgetNavigator'], function (_, StringResource, doT, View, ListControl, AddParameterAction, RoleCustomizationService, OpenDialog, Parameters, ParametersTabTemplate, Utils, WidgetNavigator) {
  9. var GlobalParametersTab = View.extend({
  10. init: function init(options) {
  11. GlobalParametersTab.inherited('init', this, arguments);
  12. _.extend(this, options);
  13. this._sWaitDiv = Utils.getLoadingAnimation(1);
  14. this.isSlideout = false;
  15. this.modified = false;
  16. this.parameters = [];
  17. },
  18. render: function render() {
  19. return this.getParameters(this.isSysAdmin, this.isPortalAdmin, this.tenantID).then(function (parameters) {
  20. this.parameters = parameters;
  21. this.$el.empty();
  22. this.$el.addClass('gp-define-parameters-container');
  23. var sHtml = doT.template(ParametersTabTemplate)({
  24. 'isSlideout': this.isSlideout,
  25. 'description': StringResource.get('globalParametersDescription'),
  26. 'importText': StringResource.get('import'),
  27. 'newText': StringResource.get('new'),
  28. 'newButtonId': 'admin-add-param',
  29. 'title': this.title
  30. });
  31. this.$el.html(sHtml);
  32. $('#pickReport').on('primaryaction', this._pickReport.bind(this));
  33. $('#admin-add-param').on('primaryaction', this._addParameterNameValue.bind(this));
  34. return this._renderListControl();
  35. }.bind(this));
  36. },
  37. _renderListControl: function _renderListControl() {
  38. if (this.listControl) {
  39. this.listControl.remove();
  40. }
  41. var $container = this.$el.find('.ca-listContainer');
  42. this.listControl = new ListControl({
  43. contentView: this,
  44. columns: this.getColumnSpecs(),
  45. el: $container,
  46. showEmptyNewFolderButton: false,
  47. emptyFolderString: StringResource.get('noGlobalParameters'),
  48. accessibleLabel: StringResource.get('viewGlobalParameters'),
  49. disableColumnHeaders: true,
  50. glassContext: this.glassContext,
  51. getJSONDataCallback: function () {
  52. return Promise.resolve({
  53. data: this.parameters
  54. });
  55. }.bind(this)
  56. });
  57. return this.listControl.render().then(function () {
  58. this.listControl.widgetKeyController = new WidgetNavigator({
  59. $el: this.listControl.$el.find('.listControl'),
  60. focusClass: 'contentListFocusable'
  61. });
  62. }.bind(this));
  63. },
  64. getColumnSpecs: function getColumnSpecs() {
  65. return [{
  66. 'type': 'Text',
  67. 'module': 'bacontentnav/common/ui/list_columns/Text',
  68. 'showAsActiveLink': true,
  69. 'propertyName': 'name',
  70. 'sortable': false,
  71. 'scope': 'row',
  72. 'clickCallback': function (obj) {
  73. this._showPropertiesPanel(obj);
  74. }.bind(this)
  75. }, {
  76. 'type': 'SimpleContextMenu',
  77. 'width': '10%',
  78. 'module': 'bi/admin/common/ui/listview/columns/SimpleContextMenu',
  79. callback: function (obj, e) {
  80. var position = e;
  81. if (e.type = "keyup") {
  82. var offset = $(e.target).offset();
  83. position = {
  84. pageX: offset.left,
  85. pageY: offset.top
  86. };
  87. }
  88. this.glassContext.appController.showContextMenu({
  89. "position": position,
  90. "menuId": 'com.ibm.bi.admin.tenantParameterMenu',
  91. "activeObject": {
  92. handler: this,
  93. data: obj
  94. }
  95. });
  96. }.bind(this)
  97. }];
  98. },
  99. onContextMenu: function onContextMenu(action, obj) {
  100. var existingItem = _.find(this.parameters, function (parameter) {
  101. return parameter.name === obj.name;
  102. });
  103. if (existingItem) {
  104. switch (action) {
  105. case "tenant_parameter_delete":
  106. {
  107. this._deleteParameter(existingItem);
  108. break;
  109. }
  110. case "tenant_parameter_properties":
  111. {
  112. this._showPropertiesPanel(existingItem);
  113. break;
  114. }
  115. case "tenant_parameter_move_up":
  116. case "tenant_parameter_move_down":
  117. {
  118. this._moveParameter(existingItem, action);
  119. break;
  120. }
  121. default:
  122. break;
  123. }
  124. }
  125. },
  126. _moveParameter: function _moveParameter(obj, action) {
  127. if (this.parameters.length > 0) {
  128. var item = _.find(this.parameters, function (parameter) {
  129. return parameter.name === obj.name;
  130. });
  131. var index = this.parameters.indexOf(item);
  132. if (action === "tenant_parameter_move_up" && index !== 0) {
  133. var swapWithItem = this.parameters[index - 1];
  134. this.parameters[index - 1] = item;
  135. this.parameters[index] = swapWithItem;
  136. } else if (action === "tenant_parameter_move_down" && index < this.parameters.length - 1) {
  137. var swapWithItem = this.parameters[index + 1];
  138. this.parameters[index + 1] = item;
  139. this.parameters[index] = swapWithItem;
  140. }
  141. this.listControl.updateDatatable();
  142. this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID);
  143. }
  144. },
  145. _deleteParameter: function _deleteParameter(obj) {
  146. var item = _.find(this.parameters, function (parameter) {
  147. return parameter.name === obj.name;
  148. });
  149. this.parameters.splice(this.parameters.indexOf(item), 1);
  150. this.listControl.updateDatatable();
  151. this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID);
  152. },
  153. _showPropertiesPanel: function _showPropertiesPanel(obj) {
  154. this.glassContext.appController.showSlideOut({
  155. parent: this.slideout,
  156. width: '400px',
  157. label: obj.name,
  158. content: {
  159. 'module': 'bi/admin/common/slideout/GlobalParametersProperties',
  160. 'glassContext': this.glassContext,
  161. 'parameter': obj,
  162. 'parameters': this.parameters,
  163. save: function () {
  164. this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID);
  165. this.listControl.updateDatatable();
  166. this._renderListControl();
  167. }.bind(this)
  168. },
  169. onHide: function onHide() {
  170. if (this.contentView.modified) {
  171. this.contentView.save();
  172. }
  173. }
  174. });
  175. },
  176. _pickReport: function _pickReport() {
  177. this._pickReportDialog = new OpenDialog({
  178. 'glassContext': this.glassContext,
  179. 'typesToOpen': ['exploration', 'report', 'reportView', 'package'],
  180. 'multiSelect': false,
  181. 'onOpenCallback': function (reports) {
  182. if (reports.length === 1) {
  183. this._getReportParameters(reports[0]);
  184. }
  185. }.bind(this),
  186. 'dialogTitle': StringResource.get('importParametersFromReport'),
  187. 'primaryBtnText': StringResource.get('select'),
  188. 'teamContentOnly': false
  189. }).open();
  190. },
  191. _getReportParameters: function _getReportParameters(report) {
  192. if (report) {
  193. var $waitDiv = $(this._sWaitDiv);
  194. this.$el.append($waitDiv);
  195. var reportParameters = new Parameters({
  196. glassContext: this.glassContext,
  197. report: report,
  198. credentials: []
  199. });
  200. reportParameters.get().then(this._processGetParametersResponse.bind(this));
  201. }
  202. },
  203. _processGetParametersResponse: function _processGetParametersResponse(response) {
  204. if (response.status === 'prompting') {
  205. this._showDataSourcePromptPanel(response);
  206. } else {
  207. this.$el.find('.wait_loading_animation').remove();
  208. if (response.status === 'error') {
  209. this.glassContext.appController.showToast(response.message, {
  210. type: 'error'
  211. });
  212. } else {
  213. if (response.parameters.length === 0) {
  214. this.glassContext.appController.showToast(StringResource.get('reportContainsNoParametersToast'), {
  215. type: 'info'
  216. });
  217. } else {
  218. _.each(response.parameters, function (parameter) {
  219. this.addParameter(parameter);
  220. }.bind(this));
  221. this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID);
  222. this.listControl.updateDatatable();
  223. this._renderListControl();
  224. }
  225. }
  226. }
  227. },
  228. _showDataSourcePromptPanel: function _showDataSourcePromptPanel(getParametersResult) {
  229. this.glassContext.appController.showSlideOut({
  230. parent: this.slideout,
  231. overlay: true,
  232. content: {
  233. module: 'bi/admin/globalparameters/view/DataSourcePromptPanel',
  234. glassContext: this.glassContext,
  235. parameter: getParametersResult.parameters[0],
  236. prompt_details: getParametersResult,
  237. onOKCallback: this._processGetParametersResponse.bind(this)
  238. },
  239. onHide: function () {
  240. this.$el.find('.wait_loading_animation').remove();
  241. }.bind(this)
  242. });
  243. },
  244. _addParameterValueItems: function _addParameterValueItems(sParameterValues, searchPath) {
  245. var xmlDoc = $.parseXML(sParameterValues);
  246. var parameterValueItems = $(xmlDoc).find('item[xsi\\\:type=\'bus:parameterValue\']');
  247. for (var i = 0; i < parameterValueItems.length; ++i) {
  248. var parameterName = $(parameterValueItems[i]).find('name').text();
  249. this.addItem({
  250. 'label': parameterName,
  251. 'parameterName': parameterName,
  252. 'type': 'reportParameter',
  253. 'searchPath': searchPath,
  254. 'parameterValues': $(parameterValueItems[i])[0].outerHTML
  255. });
  256. }
  257. },
  258. _addParameterNameValue: function _addParameterNameValue() {
  259. var addParameterAction = new AddParameterAction({
  260. 'oListControl': this.listControl,
  261. 'contentView': this,
  262. 'addCallback': function (value) {
  263. if (value !== '') {
  264. var newParameter = {
  265. 'name': value,
  266. 'description': '',
  267. 'multilingualDisplay': {},
  268. 'source': 'user',
  269. 'type': 'simpleParmValue',
  270. 'multiSelect': true,
  271. 'accessibleAtSystemOrTenantLevel': false,
  272. 'disabled': false
  273. };
  274. this.addParameter(newParameter);
  275. this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID);
  276. }
  277. }.bind(this)
  278. });
  279. addParameterAction.execute();
  280. },
  281. addParameter: function addParameter(newItem) {
  282. var existingItem = _.find(this.parameters, function (parameter) {
  283. return parameter.name === newItem.name;
  284. });
  285. if (!existingItem) {
  286. this.parameters.push(newItem);
  287. }
  288. },
  289. save: function save() {
  290. this.modified = false;
  291. this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID);
  292. }
  293. });
  294. return GlobalParametersTab;
  295. });