"use strict"; /** * Licensed Materials - Property of IBM * IBM Cognos Products: Cognos Analytics * Copyright IBM Corp. 2015, 2017 * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ 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) { 'use strict'; //NOSONAR var RoleParametersPane = ContentView.extend({ init: function init(options) { RoleParametersPane.inherited('init', this, arguments); _.extend(this, options); this._modified = false; this._cachedCollectParameterValuesResponses = {}; this._dictionary = null; this._globalParametersController = new GlobalParametersController({ 'glassContext': this.glassContext }); this.modified_parameter_values = {}; if (this.parameter_values) { for (var i in this.parameter_values) { this.modified_parameter_values[i] = { 'name': this.parameter_values[i].name, 'values': this.parameter_values[i].values.slice(), 'enabled': this.parameter_values[i].enabled || false }; } } }, _save: function _save() { 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 _.each(this.parameter_values, function (parameterValue, key) { if (!this._dictionary[key]) { delete this.parameter_values[key]; } }.bind(this)); this.onSave(this.parameter_values); this._updateSaveButton(false); }, _cancel: function _cancel() { this.slideout.hide(); }, render: function render() { this.$el.empty(); this.$el.addClass('roleParametersPane'); var sHtml = doT.template(SetParametersTemplate)({ no_values_message: StringResource.get('noGlobalParameters') }); this.$el.html(sHtml); return this._globalParametersController.getDictionaryValues().then(function (dictionaryValues) { this._dictionary = dictionaryValues; this._initializeModifiedParameters(); return this._renderPanel(); }.bind(this)); }, _initializeModifiedParameters: function _initializeModifiedParameters() { // adds in a new global parameter if it has not been added // to parameter_values yet for (var i in this._dictionary) { if (!this.modified_parameter_values[i]) { this.modified_parameter_values[i] = { 'name': this._dictionary[i].name, 'values': [], 'enabled': false, 'checked': this._dictionary[i].accessibleAtSystemOrTenantLevel || false }; } } }, _renderPanel: function _renderPanel() { var propertyControlItems = this._getHeaderItems(); var parameterItems = this._getParameterItems(); if (parameterItems.length === 0) { this._showNoContentMessage(); } else { propertyControlItems = propertyControlItems.concat(parameterItems); } this._propertyUIControls = new PropertyUIControl({ 'el': this.$el.find('.gp-setparams-header-body-container'), 'glassContext': this.glassContext, 'slideout': this.slideout, 'items': propertyControlItems }); this._addButtonBar(); return this._propertyUIControls.render(); }, _showNoContentMessage: function _showNoContentMessage() { this.$el.find('.emptyTableContent').css('display', ''); }, _getParameterItems: function _getParameterItems() { var propertyControlItems = []; _.each(this._dictionary, function (item) { var paramName = item.name; var label = GlobalParameterHelper.getMultilingualDisplay(this.glassContext.services.userProfile.preferences.contentLocale, item); propertyControlItems.push({ 'type': 'Split', 'name': 'param_' + paramName, 'items': [{ 'align': 'left', 'items': [{ 'ellipses': true, 'module': 'bi/admin/common/ui/properties/EllipsableCheckbox', 'name': 'checkbox_' + paramName, 'label': label, 'controlOnLeft': true, 'checked': this.modified_parameter_values[paramName].enabled || this._dictionary[paramName].accessibleAtSystemOrTenantLevel ? true : false, 'nestedUIControl': true, 'disabled': this._dictionary[paramName].accessibleAtSystemOrTenantLevel || false, 'onChange': function (obj, value) { this._onCheckParameter(obj, value, paramName); }.bind(this) }] }, { 'align': 'right', 'items': [{ 'name': 'setParamValues_' + paramName, 'label': '', 'value': this._getSingleLineValueLabel(paramName), 'type': 'SingleLineValue', 'nestedUIControl': true, 'disabled': this.modified_parameter_values[paramName].enabled || this._dictionary[paramName].accessibleAtSystemOrTenantLevel ? false : true, 'ellipses': true, 'editCallback': function () { this._openSetParameterValuesPanel(paramName); }.bind(this) }] }] }); }.bind(this)); return propertyControlItems; }, _getHeaderItems: function _getHeaderItems() { var items = [{ 'name': 'parameterName', 'label': '', 'value': StringResource.get('globalParameters'), 'type': 'Banner', 'editable': false }, { 'type': 'Separator' }]; return items; }, _getSingleLineValueLabel: function _getSingleLineValueLabel(parameterName) { if (this.modified_parameter_values[parameterName] && this.modified_parameter_values[parameterName].values.length !== 0) { var prompt_length = this.modified_parameter_values[parameterName].values.length; if (prompt_length === 1) { return prompt_length + ' ' + StringResource.get('promptValue'); } return prompt_length + ' ' + StringResource.get('promptValues'); } return StringResource.get('setValues'); }, _onCheckParameter: function _onCheckParameter(obj, value, paramName) { if (value) { this._propertyUIControls.getProperty('param_' + paramName).propertyUIControlRight._aProperties[0].enable(); this.modified_parameter_values[paramName].enabled = true; } else { this._propertyUIControls.getProperty('param_' + paramName).propertyUIControlRight._aProperties[0].disable(); this.modified_parameter_values[paramName].enabled = false; if (this._setParameterValuesPanel && this._setParameterValuesPanel.content.parameter.name === paramName) { this._setParameterValuesPanel.hide(); } } this._updateSaveButton(true); }, _addButtonBar: function _addButtonBar() { this._buttonBar = new ButtonBar({ buttons: [{ 'id': 'gp-save', 'label': StringResource.get('save'), 'onSelect': this._save.bind(this), 'disabled': true }, { 'id': 'gp-cancel', 'label': StringResource.get('cancel'), 'onSelect': this._cancel.bind(this), 'disabled': false, 'cssClass': 'secondary' }] }); this._buttonBar.render().then(function (buttonBarHtml) { this.$el.find('.gp-common-footer').html(buttonBarHtml); this._updateSaveButton(false); }.bind(this)); this._updateSaveButton(false); }, _updateSaveButton: function _updateSaveButton(enable) { _.each(this._buttonBar.getButtonList(), function (button) { if (button.id === 'gp-save') { enable ? button.enable() : button.disable(); } }.bind(this)); }, _openSetParameterValuesPanel: function _openSetParameterValuesPanel(paramName) { var parameter = this._dictionary[paramName]; this._setParameterValuesPanel = this.glassContext.appController.showSlideOut({ parent: this.slideout, width: '400px', label: '', content: { 'module': 'bi/admin/account/slideout/ParameterValuesPane', 'glassContext': this.glassContext, 'activeCollectParameterValuesResponse': parameter.report_id ? this._cachedCollectParameterValuesResponses[parameter.report_id] : null, 'parameter': parameter, 'current_parameter_value': this.modified_parameter_values[paramName], 'onApply': this._onSetParameterValues.bind(this), 'cacheCollectParameterValuesResponse': this._cacheCollectParameterValuesResponse.bind(this), 'requestParameterValues': parameter.report_id ? this._getRequestParameterValues(parameter.report_id) : {} } }); }, _getRequestParameterValues: function _getRequestParameterValues(report_id) { var requestParameterValues = {}; _.each(this.modified_parameter_values, function (parameterValue) { if (this._dictionary[parameterValue.name] && this._dictionary[parameterValue.name].report_id === report_id && parameterValue.values.length !== 0) { requestParameterValues[parameterValue.name] = parameterValue; } }.bind(this)); return requestParameterValues; }, _cacheCollectParameterValuesResponse: function _cacheCollectParameterValuesResponse(parameter, collectParameterValuesResponse) { if (parameter.report_id) { this._cachedCollectParameterValuesResponses[parameter.report_id] = collectParameterValuesResponse; } }, _onSetParameterValues: function _onSetParameterValues(parameter, parameter_value) { this.modified_parameter_values[parameter.name].values = parameter_value.values; this.modified_parameter_values[parameter.name].enable = true; this._propertyUIControls.getProperty('param_' + parameter.name).propertyUIControlRight._aProperties[0].setValue(this._getSingleLineValueLabel(parameter.name)); this._updateSaveButton(true); } }); return RoleParametersPane; });