ParametersPane.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. "use strict";
  2. /**
  3. * Licensed Materials - Property of IBM
  4. * IBM Cognos Products: Cognos Analytics
  5. * Copyright IBM Corp. 2015, 2017
  6. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. */
  8. define(['underscore', 'doT', 'bi/admin/nls/StringResource', 'bacontentnav/common/ContentListPageView', 'bi/commons/ui/properties/PropertyUIControl', 'bi/admin/common/utils/parameters/GlobalParameters', 'bi/admin/globalparameters/helpers/ParameterValueHelper', 'bi/commons/ui/ButtonBar', 'text!bi/admin/account/templates/SetParametersTemplate.html'], function (_, doT, StringResource, ContentView, PropertyUIControl, GlobalParametersController, GlobalParameterHelper, ButtonBar, SetParametersTemplate) {
  9. 'use strict'; //NOSONAR
  10. var RoleParametersPane = ContentView.extend({
  11. init: function init(options) {
  12. RoleParametersPane.inherited('init', this, arguments);
  13. _.extend(this, options);
  14. this._modified = false;
  15. this._cachedCollectParameterValuesResponses = {};
  16. this._dictionary = null;
  17. this._globalParametersController = new GlobalParametersController({
  18. 'glassContext': this.glassContext
  19. });
  20. this.modified_parameter_values = {};
  21. if (this.parameter_values) {
  22. for (var i in this.parameter_values) {
  23. this.modified_parameter_values[i] = {
  24. 'name': this.parameter_values[i].name,
  25. 'values': this.parameter_values[i].values.slice(),
  26. 'enabled': this.parameter_values[i].enabled || false
  27. };
  28. }
  29. }
  30. },
  31. _save: function _save() {
  32. this.parameter_values = this.modified_parameter_values; // before we save, cleanse the parameter values (make sure we aren't saving anything that isn't part of the dictionary
  33. _.each(this.parameter_values, function (parameterValue, key) {
  34. if (!this._dictionary[key]) {
  35. delete this.parameter_values[key];
  36. }
  37. }.bind(this));
  38. this.onSave(this.parameter_values);
  39. this._updateSaveButton(false);
  40. },
  41. _cancel: function _cancel() {
  42. this.slideout.hide();
  43. },
  44. render: function render() {
  45. this.$el.empty();
  46. this.$el.addClass('roleParametersPane');
  47. var sHtml = doT.template(SetParametersTemplate)({
  48. no_values_message: StringResource.get('noGlobalParameters')
  49. });
  50. this.$el.html(sHtml);
  51. return this._globalParametersController.getDictionaryValues().then(function (dictionaryValues) {
  52. this._dictionary = dictionaryValues;
  53. this._initializeModifiedParameters();
  54. return this._renderPanel();
  55. }.bind(this));
  56. },
  57. _initializeModifiedParameters: function _initializeModifiedParameters() {
  58. // adds in a new global parameter if it has not been added
  59. // to parameter_values yet
  60. for (var i in this._dictionary) {
  61. if (!this.modified_parameter_values[i]) {
  62. this.modified_parameter_values[i] = {
  63. 'name': this._dictionary[i].name,
  64. 'values': [],
  65. 'enabled': false,
  66. 'checked': this._dictionary[i].accessibleAtSystemOrTenantLevel || false
  67. };
  68. }
  69. }
  70. },
  71. _renderPanel: function _renderPanel() {
  72. var propertyControlItems = this._getHeaderItems();
  73. var parameterItems = this._getParameterItems();
  74. if (parameterItems.length === 0) {
  75. this._showNoContentMessage();
  76. } else {
  77. propertyControlItems = propertyControlItems.concat(parameterItems);
  78. }
  79. this._propertyUIControls = new PropertyUIControl({
  80. 'el': this.$el.find('.gp-setparams-header-body-container'),
  81. 'glassContext': this.glassContext,
  82. 'slideout': this.slideout,
  83. 'items': propertyControlItems
  84. });
  85. this._addButtonBar();
  86. return this._propertyUIControls.render();
  87. },
  88. _showNoContentMessage: function _showNoContentMessage() {
  89. this.$el.find('.emptyTableContent').css('display', '');
  90. },
  91. _getParameterItems: function _getParameterItems() {
  92. var propertyControlItems = [];
  93. _.each(this._dictionary, function (item) {
  94. var paramName = item.name;
  95. var label = GlobalParameterHelper.getMultilingualDisplay(this.glassContext.services.userProfile.preferences.contentLocale, item);
  96. propertyControlItems.push({
  97. 'type': 'Split',
  98. 'name': 'param_' + paramName,
  99. 'items': [{
  100. 'align': 'left',
  101. 'items': [{
  102. 'ellipses': true,
  103. 'module': 'bi/admin/common/ui/properties/EllipsableCheckbox',
  104. 'name': 'checkbox_' + paramName,
  105. 'label': label,
  106. 'controlOnLeft': true,
  107. 'checked': this.modified_parameter_values[paramName].enabled || this._dictionary[paramName].accessibleAtSystemOrTenantLevel ? true : false,
  108. 'nestedUIControl': true,
  109. 'disabled': this._dictionary[paramName].accessibleAtSystemOrTenantLevel || false,
  110. 'onChange': function (obj, value) {
  111. this._onCheckParameter(obj, value, paramName);
  112. }.bind(this)
  113. }]
  114. }, {
  115. 'align': 'right',
  116. 'items': [{
  117. 'name': 'setParamValues_' + paramName,
  118. 'label': '',
  119. 'value': this._getSingleLineValueLabel(paramName),
  120. 'type': 'SingleLineValue',
  121. 'nestedUIControl': true,
  122. 'disabled': this.modified_parameter_values[paramName].enabled || this._dictionary[paramName].accessibleAtSystemOrTenantLevel ? false : true,
  123. 'ellipses': true,
  124. 'editCallback': function () {
  125. this._openSetParameterValuesPanel(paramName);
  126. }.bind(this)
  127. }]
  128. }]
  129. });
  130. }.bind(this));
  131. return propertyControlItems;
  132. },
  133. _getHeaderItems: function _getHeaderItems() {
  134. var items = [{
  135. 'name': 'parameterName',
  136. 'label': '',
  137. 'value': StringResource.get('globalParameters'),
  138. 'type': 'Banner',
  139. 'editable': false
  140. }, {
  141. 'type': 'Separator'
  142. }];
  143. return items;
  144. },
  145. _getSingleLineValueLabel: function _getSingleLineValueLabel(parameterName) {
  146. if (this.modified_parameter_values[parameterName] && this.modified_parameter_values[parameterName].values.length !== 0) {
  147. var prompt_length = this.modified_parameter_values[parameterName].values.length;
  148. if (prompt_length === 1) {
  149. return prompt_length + ' ' + StringResource.get('promptValue');
  150. }
  151. return prompt_length + ' ' + StringResource.get('promptValues');
  152. }
  153. return StringResource.get('setValues');
  154. },
  155. _onCheckParameter: function _onCheckParameter(obj, value, paramName) {
  156. if (value) {
  157. this._propertyUIControls.getProperty('param_' + paramName).propertyUIControlRight._aProperties[0].enable();
  158. this.modified_parameter_values[paramName].enabled = true;
  159. } else {
  160. this._propertyUIControls.getProperty('param_' + paramName).propertyUIControlRight._aProperties[0].disable();
  161. this.modified_parameter_values[paramName].enabled = false;
  162. if (this._setParameterValuesPanel && this._setParameterValuesPanel.content.parameter.name === paramName) {
  163. this._setParameterValuesPanel.hide();
  164. }
  165. }
  166. this._updateSaveButton(true);
  167. },
  168. _addButtonBar: function _addButtonBar() {
  169. this._buttonBar = new ButtonBar({
  170. buttons: [{
  171. 'id': 'gp-save',
  172. 'label': StringResource.get('save'),
  173. 'onSelect': this._save.bind(this),
  174. 'disabled': true
  175. }, {
  176. 'id': 'gp-cancel',
  177. 'label': StringResource.get('cancel'),
  178. 'onSelect': this._cancel.bind(this),
  179. 'disabled': false,
  180. 'cssClass': 'secondary'
  181. }]
  182. });
  183. this._buttonBar.render().then(function (buttonBarHtml) {
  184. this.$el.find('.gp-common-footer').html(buttonBarHtml);
  185. this._updateSaveButton(false);
  186. }.bind(this));
  187. this._updateSaveButton(false);
  188. },
  189. _updateSaveButton: function _updateSaveButton(enable) {
  190. _.each(this._buttonBar.getButtonList(), function (button) {
  191. if (button.id === 'gp-save') {
  192. enable ? button.enable() : button.disable();
  193. }
  194. }.bind(this));
  195. },
  196. _openSetParameterValuesPanel: function _openSetParameterValuesPanel(paramName) {
  197. var parameter = this._dictionary[paramName];
  198. this._setParameterValuesPanel = this.glassContext.appController.showSlideOut({
  199. parent: this.slideout,
  200. width: '400px',
  201. label: '',
  202. content: {
  203. 'module': 'bi/admin/account/slideout/ParameterValuesPane',
  204. 'glassContext': this.glassContext,
  205. 'activeCollectParameterValuesResponse': parameter.report_id ? this._cachedCollectParameterValuesResponses[parameter.report_id] : null,
  206. 'parameter': parameter,
  207. 'current_parameter_value': this.modified_parameter_values[paramName],
  208. 'onApply': this._onSetParameterValues.bind(this),
  209. 'cacheCollectParameterValuesResponse': this._cacheCollectParameterValuesResponse.bind(this),
  210. 'requestParameterValues': parameter.report_id ? this._getRequestParameterValues(parameter.report_id) : {}
  211. }
  212. });
  213. },
  214. _getRequestParameterValues: function _getRequestParameterValues(report_id) {
  215. var requestParameterValues = {};
  216. _.each(this.modified_parameter_values, function (parameterValue) {
  217. if (this._dictionary[parameterValue.name] && this._dictionary[parameterValue.name].report_id === report_id && parameterValue.values.length !== 0) {
  218. requestParameterValues[parameterValue.name] = parameterValue;
  219. }
  220. }.bind(this));
  221. return requestParameterValues;
  222. },
  223. _cacheCollectParameterValuesResponse: function _cacheCollectParameterValuesResponse(parameter, collectParameterValuesResponse) {
  224. if (parameter.report_id) {
  225. this._cachedCollectParameterValuesResponses[parameter.report_id] = collectParameterValuesResponse;
  226. }
  227. },
  228. _onSetParameterValues: function _onSetParameterValues(parameter, parameter_value) {
  229. this.modified_parameter_values[parameter.name].values = parameter_value.values;
  230. this.modified_parameter_values[parameter.name].enable = true;
  231. this._propertyUIControls.getProperty('param_' + parameter.name).propertyUIControlRight._aProperties[0].setValue(this._getSingleLineValueLabel(parameter.name));
  232. this._updateSaveButton(true);
  233. }
  234. });
  235. return RoleParametersPane;
  236. });