123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- "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(['doT', 'underscore', 'react-dom', 'react', 'ba-react-admin/ba-react-admin.min', 'bi/admin/globalparameters/helpers/ParameterValueHelper', 'bi/admin/nls/StringResource', 'bi/admin/globalparameters/helpers/MultiListSelectionHelper', 'bi/admin/globalparameters/helpers/SoapHelper', 'bi/admin/common/utils/parameters/ParameterValues', 'text!bi/admin/globalparameters/view/templates/loadTreeData.xml'], function (doT, _, ReactDOM, React, AdminReact, GlobalParameterHelper, StringResource, SelectionHelper, SoapHelper, ParameterValues, LoadTreeDataTemplate) {
- return {
- transformNode: function transformNode(parameter, xml) {
- //NOSONAR
- var $promptControlNode;
- if (parameter.type === 'credential') {
- $promptControlNode = $(xml).find('*[parameter^=\'' + parameter.name + '\']');
- } else {
- $promptControlNode = $(xml).find('*[parameter=\'' + parameter.name + '\']');
- }
- switch ($promptControlNode.prop('tagName')) {
- case 'selectValue':
- {
- return this._loadSelectValue(parameter.name, $promptControlNode);
- }
- case 'selectWithTree':
- {
- return this._loadSelectWithTree(parameter.name, $promptControlNode);
- }
- case 'selectWithSearch':
- case 'textBox':
- {
- return this._loadTextBox(parameter.name, $promptControlNode);
- }
- case 'selectDateTime':
- case 'selectDate':
- case 'selectTime':
- {
- return this._loadSelectDateTime(parameter.name, $promptControlNode);
- }
- case 'selectDataSourceSignon':
- {
- return this._loadDataSourceControl(parameter.name, $promptControlNode);
- }
- default:
- {
- return null;
- }
- }
- },
- _loadSelectValue: function _loadSelectValue(parameterName, $promptControlNode) {
- var selectValueUI = $promptControlNode.attr('selectValueUI');
- var module;
- switch (selectValueUI) {
- case 'dropdown':
- {
- module = AdminReact.DropDownControl;
- break;
- }
- case 'checkboxGroup':
- {
- module = AdminReact.CheckboxGroupControl;
- break;
- }
- case 'radioGroup':
- {
- module = AdminReact.RadioGroupControl;
- break;
- }
- default:
- {
- // For the initial release, we won't support list controls, we'll default lists to either drop downs or checkboxes
- // module = 'bi/admin/globalparameters/view/controls/ListControl'; //NOSONAR
- if ($promptControlNode.attr('multiSelect') === 'true') {
- module = AdminReact.CheckboxGroupControl;
- } else {
- module = AdminReact.DropDownControl;
- }
- break;
- }
- }
- return {
- name: parameterName,
- control: {
- multiSelect: $promptControlNode.attr('multiSelect') === 'true',
- type: selectValueUI,
- module: module,
- autoSubmit: $promptControlNode.attr('autoSubmit') === 'true'
- },
- values: this._loadValues($promptControlNode)
- };
- },
- _loadSelectWithTree: function _loadSelectWithTree(parameterName, $promptControlNode) {
- return {
- name: parameterName,
- control: {
- multiSelect: $promptControlNode.attr('multiSelect') === 'true',
- type: 'tree',
- module: AdminReact.TreeControl,
- canExpand: $promptControlNode.attr('canExpand') === 'true'
- },
- values: this._loadValues($promptControlNode),
- ancestry: this._loadAncestryValues($promptControlNode)
- };
- },
- _loadTextBox: function _loadTextBox(parameterName, $promptControlNode) {
- var multiSelect = $promptControlNode.attr('multiSelect') === 'true';
- var range = $promptControlNode.attr('range') === 'true';
- var module;
- if (multiSelect === true) {
- module = AdminReact.MultiSelectTextBoxControl;
- } else if (range === true) {
- module = AdminReact.RangeTextBoxControl;
- } else {
- module = AdminReact.TextBoxControl;
- }
- return {
- name: parameterName,
- control: {
- multiSelect: multiSelect,
- type: 'textBox',
- module: module,
- numbersOnly: $promptControlNode.attr('numbersOnly') === 'true',
- multiLine: $promptControlNode.attr('multiLine') === 'true',
- hideText: $promptControlNode.attr('hideText') === 'true',
- showThousandsSeparator: $promptControlNode.attr('showThousandsSeparator') === 'true'
- },
- values: this._loadValues($promptControlNode)
- };
- },
- _loadSelectDateTime: function _loadSelectDateTime(parameterName, $promptControlNode) {
- var multiSelect = $promptControlNode.attr('multiSelect') === 'true';
- var range = $promptControlNode.attr('range') === 'true';
- var module;
- if (multiSelect === true) {
- module = AdminReact.MultiSelectDateTimeControl;
- } else if (range === true) {
- module = AdminReact.RangeDateTimeControl;
- } else {
- module = AdminReact.DateTimeControl;
- }
- return {
- name: parameterName,
- control: {
- multiSelect: multiSelect,
- type: $promptControlNode.prop('tagName'),
- module: module,
- range: range,
- calendar: $promptControlNode.attr('calendar'),
- selectDateTimeUI: $promptControlNode.attr('selectDateTimeUI'),
- firstDate: $promptControlNode.attr('firstDate'),
- lastDate: $promptControlNode.attr('lastDate'),
- showSeconds: $promptControlNode.attr('showSeconds') === 'true',
- showMilliseconds: $promptControlNode.attr('showMilliSeconds') === 'true'
- },
- values: this._loadValues($promptControlNode)
- };
- },
- _loadValues: function _loadValues($promptControlNode) {
- return this._getSelectValues($promptControlNode, 'selectOptions');
- },
- _loadAncestryValues: function _loadAncestryValues($promptControlNode) {
- return this._getSelectValues($promptControlNode, 'selectChoicesAncestry');
- },
- _getSelectValues: function _getSelectValues($promptControlNode, nodeName) {
- var values = [];
- var valueNodes = $promptControlNode.find(nodeName).find('*');
- _.each(valueNodes, function (valueNode) {
- values.push({
- label: $(valueNode).attr('displayValue') || '',
- value: $(valueNode).attr('useValue') || ''
- });
- });
- return values;
- },
- _loadDataSourceControl: function _loadDataSourceControl(parameterName, $promptControlNode) {
- var faultCode = $promptControlNode.attr('faultcode');
- var type;
- var title;
- if (faultCode === 'CQE-803') {
- type = 'login';
- title = StringResource.get('dataSourceLoginTitle');
- } else if (faultCode === 'CQE-801') {
- type = 'connection';
- title = StringResource.get('dataSourceConnectionTitle');
- } else {
- type = 'signon';
- title = StringResource.get('dataSourceSignOnTitle');
- }
- var values = [];
- var connectionPath = null;
- if (type !== 'connection') {
- connectionPath = $promptControlNode.find('connection').attr('searchPath');
- if (!connectionPath) {
- connectionPath = $promptControlNode.attr('faultConnectionSearchPath');
- }
- }
- var $connections = $promptControlNode.find(type);
- _.each($connections, function (node) {
- values.push({
- label: $(node).attr('name'),
- value: $(node).attr('searchPath')
- });
- });
- return {
- name: $promptControlNode.attr('parameter'),
- control: {
- type: type,
- module: AdminReact.DataSourceControl,
- dataSourceName: $promptControlNode.attr('dataSourceName'),
- title: title,
- persist: $promptControlNode.attr('persistPrompt') ? $promptControlNode.attr('persistPrompt') === 'true' : false,
- failureCount: $promptControlNode.attr('logonFailureCount') ? parseInt($promptControlNode.attr('logonFailureCount')) : -1,
- faultConnectionSearchPath: $promptControlNode.attr('faultConnectionSearchPath'),
- connectionName: $promptControlNode.attr('faultConnectionName'),
- connectionPath: connectionPath,
- cubepassword: type === 'login' && $promptControlNode.attr('faultSubcode') === '6' ? true : false
- },
- values: values
- };
- },
- render: function render(options) {
- var promptDetails = options.prompt_details;
- var jsonSpec = {};
- if (promptDetails.type === 'json') {
- jsonSpec = promptDetails.json;
- } else if (promptDetails.type === 'xml') {
- jsonSpec = this.transformNode(options.parameter, promptDetails.xml);
- }
- jsonSpec.displayLabel = GlobalParameterHelper.getMultilingualDisplay(options.glassContext.services.userProfile.preferences.contentLocale, options.parameter);
- return this._loadControl(jsonSpec, options);
- },
- _loadControl: function _loadControl(promptSpec, options) {
- var reactProps = {
- style: {
- 'margin': '5px'
- },
- glassContext: options.glassContext,
- spec: promptSpec,
- $tracking: options.prompt_details.$tracking,
- $conversation: options.prompt_details.$conversation,
- parameter: options.parameter,
- parameter_value: options.parameter_value,
- onValuesChange: options.onValuesChange,
- ParameterValueHelper: GlobalParameterHelper,
- SelectionHelper: SelectionHelper,
- StringResource: StringResource,
- SoapHelper: SoapHelper,
- ParameterValues: ParameterValues,
- LoadTreeDataTemplate: LoadTreeDataTemplate,
- doT: doT,
- PromiseEach: Promise.each,
- XMLSerializerConstructor: function XMLSerializerConstructor() {
- return new XMLSerializer();
- },
- $: $
- };
- this._doRender(promptSpec.control.module, options, promptSpec, reactProps);
- return Promise.resolve();
- },
- _doRender: function _doRender(promptControl, options, jsonSpec, reactProps) {
- ReactDOM.render(React.createElement(AdminReact.AdminRoot, {}, React.createElement('div', {
- className: 'gp-controls'
- }, React.createElement(promptControl, reactProps))), options.$el[0]);
- }
- };
- });
|