/** * Licensed Materials - Property of IBM * IBM Cognos Products: Cognos Analytics * Copyright IBM Corp. 2015, 2019 * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ 'use strict'; //NOSONAR 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) { var GlobalParametersTab = View.extend({ init: function init(options) { GlobalParametersTab.inherited('init', this, arguments); _.extend(this, options); this._sWaitDiv = Utils.getLoadingAnimation(1); this.isSlideout = false; this.modified = false; this.parameters = []; }, render: function render() { return this.getParameters(this.isSysAdmin, this.isPortalAdmin, this.tenantID).then(function (parameters) { this.parameters = parameters; this.$el.empty(); this.$el.addClass('gp-define-parameters-container'); var sHtml = doT.template(ParametersTabTemplate)({ 'isSlideout': this.isSlideout, 'description': StringResource.get('globalParametersDescription'), 'importText': StringResource.get('import'), 'newText': StringResource.get('new'), 'newButtonId': 'admin-add-param', 'title': this.title }); this.$el.html(sHtml); $('#pickReport').on('primaryaction', this._pickReport.bind(this)); $('#admin-add-param').on('primaryaction', this._addParameterNameValue.bind(this)); return this._renderListControl(); }.bind(this)); }, _renderListControl: function _renderListControl() { if (this.listControl) { this.listControl.remove(); } var $container = this.$el.find('.ca-listContainer'); this.listControl = new ListControl({ contentView: this, columns: this.getColumnSpecs(), el: $container, showEmptyNewFolderButton: false, emptyFolderString: StringResource.get('noGlobalParameters'), accessibleLabel: StringResource.get('viewGlobalParameters'), disableColumnHeaders: true, glassContext: this.glassContext, getJSONDataCallback: function () { return Promise.resolve({ data: this.parameters }); }.bind(this) }); return this.listControl.render().then(function () { this.listControl.widgetKeyController = new WidgetNavigator({ $el: this.listControl.$el.find('.listControl'), focusClass: 'contentListFocusable' }); }.bind(this)); }, getColumnSpecs: function getColumnSpecs() { return [{ 'type': 'Text', 'module': 'bacontentnav/common/ui/list_columns/Text', 'showAsActiveLink': true, 'propertyName': 'name', 'sortable': false, 'scope': 'row', 'clickCallback': function (obj) { this._showPropertiesPanel(obj); }.bind(this) }, { 'type': 'SimpleContextMenu', 'width': '10%', 'module': 'bi/admin/common/ui/listview/columns/SimpleContextMenu', callback: function (obj, e) { var position = e; if (e.type = "keyup") { var offset = $(e.target).offset(); position = { pageX: offset.left, pageY: offset.top }; } this.glassContext.appController.showContextMenu({ "position": position, "menuId": 'com.ibm.bi.admin.tenantParameterMenu', "activeObject": { handler: this, data: obj } }); }.bind(this) }]; }, onContextMenu: function onContextMenu(action, obj) { var existingItem = _.find(this.parameters, function (parameter) { return parameter.name === obj.name; }); if (existingItem) { switch (action) { case "tenant_parameter_delete": { this._deleteParameter(existingItem); break; } case "tenant_parameter_properties": { this._showPropertiesPanel(existingItem); break; } case "tenant_parameter_move_up": case "tenant_parameter_move_down": { this._moveParameter(existingItem, action); break; } default: break; } } }, _moveParameter: function _moveParameter(obj, action) { if (this.parameters.length > 0) { var item = _.find(this.parameters, function (parameter) { return parameter.name === obj.name; }); var index = this.parameters.indexOf(item); if (action === "tenant_parameter_move_up" && index !== 0) { var swapWithItem = this.parameters[index - 1]; this.parameters[index - 1] = item; this.parameters[index] = swapWithItem; } else if (action === "tenant_parameter_move_down" && index < this.parameters.length - 1) { var swapWithItem = this.parameters[index + 1]; this.parameters[index + 1] = item; this.parameters[index] = swapWithItem; } this.listControl.updateDatatable(); this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID); } }, _deleteParameter: function _deleteParameter(obj) { var item = _.find(this.parameters, function (parameter) { return parameter.name === obj.name; }); this.parameters.splice(this.parameters.indexOf(item), 1); this.listControl.updateDatatable(); this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID); }, _showPropertiesPanel: function _showPropertiesPanel(obj) { this.glassContext.appController.showSlideOut({ parent: this.slideout, width: '400px', label: obj.name, content: { 'module': 'bi/admin/common/slideout/GlobalParametersProperties', 'glassContext': this.glassContext, 'parameter': obj, 'parameters': this.parameters, save: function () { this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID); this.listControl.updateDatatable(); this._renderListControl(); }.bind(this) }, onHide: function onHide() { if (this.contentView.modified) { this.contentView.save(); } } }); }, _pickReport: function _pickReport() { this._pickReportDialog = new OpenDialog({ 'glassContext': this.glassContext, 'typesToOpen': ['exploration', 'report', 'reportView', 'package'], 'multiSelect': false, 'onOpenCallback': function (reports) { if (reports.length === 1) { this._getReportParameters(reports[0]); } }.bind(this), 'dialogTitle': StringResource.get('importParametersFromReport'), 'primaryBtnText': StringResource.get('select'), 'teamContentOnly': false }).open(); }, _getReportParameters: function _getReportParameters(report) { if (report) { var $waitDiv = $(this._sWaitDiv); this.$el.append($waitDiv); var reportParameters = new Parameters({ glassContext: this.glassContext, report: report, credentials: [] }); reportParameters.get().then(this._processGetParametersResponse.bind(this)); } }, _processGetParametersResponse: function _processGetParametersResponse(response) { if (response.status === 'prompting') { this._showDataSourcePromptPanel(response); } else { this.$el.find('.wait_loading_animation').remove(); if (response.status === 'error') { this.glassContext.appController.showToast(response.message, { type: 'error' }); } else { if (response.parameters.length === 0) { this.glassContext.appController.showToast(StringResource.get('reportContainsNoParametersToast'), { type: 'info' }); } else { _.each(response.parameters, function (parameter) { this.addParameter(parameter); }.bind(this)); this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID); this.listControl.updateDatatable(); this._renderListControl(); } } } }, _showDataSourcePromptPanel: function _showDataSourcePromptPanel(getParametersResult) { this.glassContext.appController.showSlideOut({ parent: this.slideout, overlay: true, content: { module: 'bi/admin/globalparameters/view/DataSourcePromptPanel', glassContext: this.glassContext, parameter: getParametersResult.parameters[0], prompt_details: getParametersResult, onOKCallback: this._processGetParametersResponse.bind(this) }, onHide: function () { this.$el.find('.wait_loading_animation').remove(); }.bind(this) }); }, _addParameterValueItems: function _addParameterValueItems(sParameterValues, searchPath) { var xmlDoc = $.parseXML(sParameterValues); var parameterValueItems = $(xmlDoc).find('item[xsi\\\:type=\'bus:parameterValue\']'); for (var i = 0; i < parameterValueItems.length; ++i) { var parameterName = $(parameterValueItems[i]).find('name').text(); this.addItem({ 'label': parameterName, 'parameterName': parameterName, 'type': 'reportParameter', 'searchPath': searchPath, 'parameterValues': $(parameterValueItems[i])[0].outerHTML }); } }, _addParameterNameValue: function _addParameterNameValue() { var addParameterAction = new AddParameterAction({ 'oListControl': this.listControl, 'contentView': this, 'addCallback': function (value) { if (value !== '') { var newParameter = { 'name': value, 'description': '', 'multilingualDisplay': {}, 'source': 'user', 'type': 'simpleParmValue', 'multiSelect': true, 'accessibleAtSystemOrTenantLevel': false, 'disabled': false }; this.addParameter(newParameter); this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID); } }.bind(this) }); addParameterAction.execute(); }, addParameter: function addParameter(newItem) { var existingItem = _.find(this.parameters, function (parameter) { return parameter.name === newItem.name; }); if (!existingItem) { this.parameters.push(newItem); } }, save: function save() { this.modified = false; this.updateParameters(this.parameters, this.isSysAdmin, this.isPortalAdmin, this.tenantID); } }); return GlobalParametersTab; });