/////////////////////////////////////////////////////////////////////////// // Copyright © 2014 - 2018 Esri. All Rights Reserved. // // Licensed under the Apache License Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /////////////////////////////////////////////////////////////////////////// define([ 'dojo/on', 'dojo/Evented', 'dojo/_base/lang', 'dojo/_base/html', 'dojo/_base/array', 'dojo/_base/declare', 'dijit/_WidgetBase', 'dijit/_TemplatedMixin', 'dijit/_WidgetsInTemplateMixin', 'jimu/dijit/TabContainer3', 'jimu/dijit/_FeaturelayerChooserWithButtons', 'jimu/dijit/_QueryableLayerChooserWithButtons', 'jimu/dijit/QueryableServiceChooserFromPortal', 'jimu/dijit/_QueryableServiceChooserContent', 'jimu/dijit/_FrameworkDataSourceChooserWithButtons' ], function(on, Evented, lang, html, array, declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, TabContainer3, FeaturelayerChooserWithButtons, QueryableLayerChooserWithButtons, QueryableServiceChooserFromPortal, _QueryableServiceChooserContent, _FrameworkDataSourceChooserWithButtons) { var NLS = window.jimuNls.queryableLayerSource; var clazz = declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, Evented], { templateString: "
", baseClass: 'jimu-dijit-data-source', declaredClass: 'jimu.dijit.DataSource', nls: null, dijits: null, //options: types: null, //[{type: "", options: {}},...] //public methods: //getSelectedItems //events: //ok //cancel postMixInProperties: function() { this.nls = NLS; this.dijits = []; }, postCreate: function() { this.inherited(arguments); this._initSelf(); }, _initSelf: function(){ var tabs = []; array.forEach(this.types, lang.hitch(this, function(item, index){ var type = item.type; var classInfo = clazz[type + '_CLASS_INFO']; if(!classInfo){ console.error("Unsupported data source type:", type); return; } var options = null; if(classInfo.defaultOptions){ var defaultOptions = lang.clone(classInfo.defaultOptions); options = lang.mixin(defaultOptions, item.options); }else{ options = item.options; } if(!options){ options = {}; } options.style = { width: '100%', height: '100%' }; var dataSourceId = type + "_" + index; var dsType = type; var dsDijit = new classInfo.className(options); html.addClass(dsDijit.domNode, 'hidden'); dsDijit._dsType = dsType; dsDijit._dataSourceId = dataSourceId; dsDijit._classInfo = classInfo; this.own(on(dsDijit, 'ok', lang.hitch(this, function() { var items = this.getSelectedItems(); if (items && items.length > 0) { this.emit('ok', items); } }))); this.own(on(dsDijit, 'cancel', lang.hitch(this, function() { this.emit('cancel'); }))); this.dijits.push(dsDijit); tabs.push({ title: classInfo.defaultTitle, content: dsDijit }); })); this.tab = new TabContainer3({ tabs: tabs }); this.tab.placeAt(this.domNode); }, _getSelectedDijit: function(){ var index = this.tab.getSelectedIndex(); return this.dijits[index]; }, getSelectedSourceType: function() { var dsDijit = this._getSelectedDijit(); if(dsDijit){ return dsDijit._classInfo.sourceType; } return ""; }, getSelectedItems: function() { var items = []; var dsDijit = this._getSelectedDijit(); if(dsDijit){ items = dsDijit.getSelectedItems(); if(items && items.length > 0){ array.forEach(items, lang.hitch(this, function(item){ item.dataSourceType = dsDijit._dsType; })); } } return items; }, destroy: function(){ if(this.dijits && this.dijits.length > 0){ array.forEach(this.dijits, lang.hitch(this, function(dsDijit){ dsDijit.destroy(); dsDijit = null; })); } this.dijits = null; this.inherited(arguments); } }); clazz.DATA_SOURCE_FEATURE_LAYER_FROM_MAP = "DATA_SOURCE_FEATURE_LAYER_FROM_MAP"; clazz.DATA_SOURCE_QUERYABLE_LAYER_FROM_MAP = "DATA_SOURCE_QUERYABLE_LAYER_FROM_MAP"; clazz.DATA_SOURCE_QUERYABLE_LAYER_FROM_PORTAL = "DATA_SOURCE_QUERYABLE_LAYER_FROM_PORTAL"; clazz.DATA_SOURCE_QUERYABLE_LAYER_FROM_URL = "DATA_SOURCE_QUERYABLE_LAYER_FROM_URL"; clazz.DATA_SOURCE_FROM_FRAMEWORK = "DATA_SOURCE_FROM_FRAMEWORK"; clazz.DATA_SOURCE_FEATURE_LAYER_FROM_MAP_CLASS_INFO = { className: FeaturelayerChooserWithButtons, defaultTitle: NLS.selectFromMap, defaultOptions: { multiple: false }, sourceType: 'map' }; clazz.DATA_SOURCE_QUERYABLE_LAYER_FROM_MAP_CLASS_INFO = { className: QueryableLayerChooserWithButtons, defaultTitle: NLS.selectFromMap, defaultOptions: { multiple: false }, sourceType: 'map' }; clazz.DATA_SOURCE_QUERYABLE_LAYER_FROM_PORTAL_CLASS_INFO = { className: QueryableServiceChooserFromPortal, defaultTitle: NLS.selectFromPortal, defaultOptions: { multiple: false }, sourceType: 'portal' }; clazz.DATA_SOURCE_QUERYABLE_LAYER_FROM_URL_CLASS_INFO = { className: _QueryableServiceChooserContent, defaultTitle: NLS.addServiceUrl, defaultOptions: { multiple: false }, sourceType: 'url' }; clazz.DATA_SOURCE_FROM_FRAMEWORK_CLASS_INFO = { className: _FrameworkDataSourceChooserWithButtons, defaultTitle: window.jimuNls.frameworkDatasource.customDataSource, defaultOptions: null, sourceType: 'framework' }; //options: {createMapResponse, portalUrl} clazz.createQueryableLayerTypes = function(options) { return [{ type: clazz.DATA_SOURCE_QUERYABLE_LAYER_FROM_MAP, options: { createMapResponse: options.createMapResponse, onlyShowWebMapLayers: true } }, { type: clazz.DATA_SOURCE_QUERYABLE_LAYER_FROM_PORTAL, options: { portalUrl: options.portalUrl } }, { type: clazz.DATA_SOURCE_QUERYABLE_LAYER_FROM_URL }]; }; //options: {createMapResponse, appConfig} clazz.createInfographicTypes = function(options){ return [{ type: clazz.DATA_SOURCE_FEATURE_LAYER_FROM_MAP, options: { createMapResponse: options.createMapResponse, types: ['point','polyline','polygon'], showLayerFromFeatureSet: true, showTable: false, mustSupportStatistics: false, ignoreVirtualLayer: true, onlyShowWebMapLayers: true } }, { type: clazz.DATA_SOURCE_FROM_FRAMEWORK, options: { appConfig: options.appConfig } }]; }; return clazz; });