/////////////////////////////////////////////////////////////////////////// // 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/Deferred', 'dojo/_base/lang', 'dojo/Evented', 'dojo/_base/html', 'dojo/_base/array', 'dojo/_base/declare', 'dojo/query', './ValueProvider', './AdvancedListValueSelect', 'dijit/_TemplatedMixin', 'dijit/_WidgetsInTemplateMixin', 'dojo/text!./AdvancedListValueProvider.html', 'jimu/utils', 'jimu/dijit/_filter/pageControlForQuery', 'jimu/dijit/Popup' ], function(Deferred, lang, Evented, html, array, declare, query, ValueProvider, AdvancedListValueSelect, _TemplatedMixin,_WidgetsInTemplateMixin,template, jimuUtils, pageControlForQuery, Popup) { return declare([ValueProvider, _TemplatedMixin, _WidgetsInTemplateMixin, Evented], { templateString: template, codedValues: null,//[{value,label}] for coded values and sub types staticValues: null,//[{value,label}] showNullValues: false,//show null values cbxPopup: null, pageSize: 1000, //page size pageIndex:1, //current page emptyStr: '', postMixInProperties:function(){ this.inherited(arguments); this.CommonNls = window.jimuNls.common; this.emptyStr = window.apiNls.widgets.FeatureTable.empty; }, postCreate: function(){ this.inherited(arguments); this.noDataTips = '
' + '' + '' + this.nls.noFilterValueTip + '
'; html.addClass(this.domNode, 'jimu-filter-mutcheck-list-value-provider'); // this.layerName.innerText = this.layerDefinition.name; //this.controlType = 'unique'; //unique, multiple if(this.providerType === 'ADVANCED_LIST_VALUE_PROVIDER'){ //setting&multiple this.controlType = 'multipleDynamic'; this.checkedNumDiv.style.display = 'block'; }else if(this.providerType === 'LIST_VALUE_PROVIDER'){ //setting&multiple this.controlType = 'uniqueDynamic'; this.checkedNameDiv.style.display = 'block'; }else{ if(this.runtime && this.selectUI === 'dropdown'){ if(this.providerType === 'UNIQUE_PREDEFINED_VALUE_PROVIDER'){ this.checkedNameDiv.style.display = 'block'; }else{ this.checkedNumDiv.style.display = 'block'; } } if(this.providerType === 'MULTIPLE_PREDEFINED_VALUE_PROVIDER'){ this.controlType = 'multiplePredefined'; }else{ this.controlType = 'uniquePredefined'; } } if(this.providerType === 'MULTIPLE_PREDEFINED_VALUE_PROVIDER'){//runtime&multiple predefined this.selectType = 'multiple'; }else if(this.providerType === 'UNIQUE_PREDEFINED_VALUE_PROVIDER'){//runtime&unique predefined this.selectType = 'unique'; }else if(this.providerType === 'LIST_VALUE_PROVIDER'){ this.selectType = 'unique'; }else{ this.selectType = 'multiple'; } this.disPlayLabel = 'value'; if(this.runtime && (this.controlType === 'multiplePredefined' || this.controlType === 'uniquePredefined')){ this.disPlayLabel = 'alias'; } if(this.runtime && (this.controlType === 'multipleDynamic' || this.controlType === 'uniqueDynamic')){ this.isLoadDataAdvanced = true; } //for valuetype = field // this.isNumberField = this.isNumberField !== undefined ? this.isNumberField : jimuUtils.isNumberField(this.fieldInfo.type); this.isNumberField = jimuUtils.isNumberField(this.fieldInfo.type); if(!this.pageControlForQuery){ this.pageControlForQuery = new pageControlForQuery({ pageSize: this.pageSize, pageIndex: 1, layerUrl: this.url, fieldInfo: this.fieldInfo, queryWhere: '1=1', layerDefinition: this.layerDefinition, fieldPopupInfo: this.fieldPopupInfo, // spatialReference: this.layerInfo.map.spatialReference, isNumberField: this.isNumberField }); this.pageControlForQuery.on("query_getNewExpr", lang.hitch(this, this._resetPageControlNewExpr)); } if(!this.listSelect){ this.listSelectDataList = (this.partObj && this.partObj.valueObj && this.partObj.valueObj.value) ? this.partObj.valueObj.value : []; // var _checkedList = lang.isArray(this.listSelectDataList) ? this.listSelectDataList : [this.listSelectDataList]; this.listSelect = new AdvancedListValueSelect({ emptyStr: this.emptyStr, runtime: this.runtime, pageSize: this.pageSize, selectUI: this.selectUI, controlType: this.controlType, selectType: this.selectType, dataList: this.listSelectDataList, // checkedList: _checkedList, selectedDataList:[], isNumberField: this.isNumberField }); //for init checkedList data, it's necessary to display and hold data on page if no open popup again. if(lang.isArray(this.listSelectDataList)){ this.getCheckedList(this.listSelectDataList); }else{ this.listSelect.checkedList = [this.listSelectDataList]; this.listSelect._updateCheckedLabelListFromCheckedList(); } this.listSelect.on("advancedListValueSelect_itemChecked", lang.hitch(this, this._createTarget)); this.listSelect.on("advancedListValueSelect_itemUnChecked", lang.hitch(this, this._destoryTarget)); this.listSelect.on("advancedListValueSelect_addNextPage", lang.hitch(this, this._addNextPage)); this.listSelect.on("advancedListValueSelect_searchKey", lang.hitch(this, this._searchKey)); this.listSelect.on("advancedListValueSelect_searchKeyLocal", lang.hitch(this, this._searchKeyLocal)); if(!this.staticValues && typeof this._checkedBtnEvent === 'function'){ if(!this.codedValues || (this.codedValues && this.filterCodedValue)){ // to be continued ... if(this.layerInfo){ //it always exsits because it's required from valueProviderFactory constructor //it will tragger after the add/remove/update events happen this.layerInfo.getLayerObject().then(lang.hitch(this, function(layerObject){ layerObject.on("edits-complete", lang.hitch(this, function() { this.layerDataChanged = true; })); })); } } } } //show dijit in popup // if(!this.runtime || (this.runtime && this.type === 'dropdown')){ if(this.selectUI === 'dropdown'){ html.setStyle(this.checkedBtn, 'display', 'block'); /* // this.own(on(document, 'click', lang.hitch(this, function(){ on(document, 'click', lang.hitch(this, function(){ //tragger many times // html.setStyle(this.listContentPopup, 'display', 'none'); if(this.cbxPopup){ if(html.getStyle(this.cbxPopup.domNode, 'display') === 'block'){ this.cbxPopup.hide(); } } if(this.msgDiv){ html.setStyle(this.msgDiv, "display", "none"); } })); // }))); */ this._multipleSelectProviderEventHandler = lang.hitch(this, this._multipleSelectProviderEvent); document.addEventListener('click', this._multipleSelectProviderEventHandler , {capture: true}); }else{ //show dijit in dropdown this.listSelect.placeAt(this.listContent); } }, filterExpr: null, _resetPageControlNewExpr: function(){ var newExpr = this.getDropdownFilterExpr(); if(this.filterExpr !== newExpr){ // console.log('newExpr:' + newExpr); this.pageControlForQuery.reset(); this.pageControlForQuery.cascadeFilterExprs = newExpr; this.filterExpr = newExpr; return true; } return false; }, _multipleSelectProviderEvent: function(event){ var target = event.target || event.srcElement; if(this.cbxPopup && this.cbxPopup.domNode){ if(html.isDescendant(target, this.cbxPopup.domNode)){ return; } if(html.isDescendant(target, this.checkedBtn)){ return; } if(html.getStyle(this.cbxPopup.domNode, 'display') === 'block'){ this._resetListSelectState(this); this.cbxPopup.hide(); } } //init select: hide result popup after it's loading data //once other dijit or space is clicked.#13346 else{ if(!html.isDescendant(target, this.checkedBtn)){ if(this.isPopupLoading){ this.isLoadDataAdvanced = true; } } } if(this.msgDiv){ html.setStyle(this.msgDiv, "display", "none"); } }, _checkedBtnEvent: function(){//evt this._showPopup(); //in popup // this._showDropdown(evt); //in dropdown }, _onBeforeDropDownMouseDown: function(){ this._tryUpdatingUniqueValues(undefined, true); return arguments; }, _isRestSelectList: false, _resetListSelectState: function(_this){ if(html.getStyle(_this.listSelect.searchKeyInput, 'display') === 'block'){ if(this.controlType === 'multipleDynamic'){ this.listSelect.showAllList(); } _this.listSelect.listContainer.scrollTop = 0; _this.listSelect.queryState = true; _this.listSelect.valueInput.set('value', ''); this._isRestSelectList = true; // _this.listSelect.emit("advancedListValueSelect_searchKeyLocal", '', true);//init list } }, _createTarget: function(name){//name this._checkedChanged(1, name); if(this.cbxPopup && (this.controlType === 'uniqueDynamic' || this.controlType === 'uniquePredefined')){ if(this.cbxPopup.domNode){ this._resetListSelectState(this); this.cbxPopup.close(); } } }, _destoryTarget:function(name){ this._checkedChanged(-1, name); }, _checkedChanged: function(num, name){ if(this.controlType === 'multipleDynamic' || (this.controlType === 'multiplePredefined' && this.runtime && this.selectUI === 'dropdown')){ if(name){ num = parseInt(this.checkedNum.innerText, 10) + num; num = num > 0 ? num : 0; //prevent negative number when it doesn't exist at runtime this.checkedNum.innerText = num; } }else if(this.controlType === 'uniqueDynamic' || (this.controlType === 'uniquePredefined' && this.runtime && this.selectUI === 'dropdown')){ if(this.controlType === 'uniqueDynamic'){ if(name === this.emptyStr){ html.addClass(this.checkedNameDiv, 'checkedEmptyNameDiv'); }else{ html.removeClass(this.checkedNameDiv, 'checkedEmptyNameDiv'); } } var newName = name ? name : this._getCheckedNameDivText(); this._setCheckedNameDivText(newName); } this.listSelect.set("displayedValue", '12345678'); this.emit('change'); }, _clearCheckedTxt: function(){ if(this.runtime && this.selectUI === 'dropdown'){ if(this.controlType === 'multipleDynamic' || this.controlType === 'multiplePredefined'){ // this._setCheckedNameDivText(0); if(this.checkedNum.textContent){ this.checkedNum.textContent = 0; }else{ this.checkedNum.innerText = 0; } }else if(this.controlType === 'uniqueDynamic' || this.controlType === 'uniquePredefined'){ this._setCheckedNameDivText(''); } this.valueList = []; //empty current config this.listSelect.checkedList = []; this.listSelect.checkedLabelList = []; this.listSelect.valueInput.set('value',''); if(this.controlType === 'multipleDynamic'){ this.listSelect.showAllList(); } } this.listSelect.set("displayedValue", '12345678'); this.emit('change'); }, _layerDataChangedCallback: function(){ if(this.layerDataChanged){ this.pageControlForQuery.reset(); this.listSelect.ifFristPage = true; this.layerDataChanged = false; } }, _addNextPage: function(){ if(!this.listSelect){ return; } this._showLoadingIcon(); this._layerDataChangedCallback(); var def = this.pageControlForQuery.queryByPage(this.listSelect.ifFristPage); def.then(lang.hitch(this, function(valueLabels){ this.listSelect.isCacheFinish = this.pageControlForQuery._isUniqueValueCacheFinish; if(this.listSelect.ifFristPage){ var isNoData = this._checkIfNoData(valueLabels); if(isNoData){ return; } } this.listSelect.setCBXData(valueLabels, true, this.listSelect.ifFristPage); this._hideLoadingIcon(); }), lang.hitch(this, function(err){ console.log(err); this.listSelect.queryState = false; this._hideLoadingIcon(); })); }, _searchKey: function(name){ if(!this.listSelect){ return; } this._showLoadingIcon(); this._layerDataChangedCallback(); this.pageControlForQuery._searchKey(name).then(lang.hitch(this, function(result) { this.listSelect.setCBXContentBySearch(result); this._resetPopupStyles(!result.length); this._hideLoadingIcon(); }), lang.hitch(this, function(err){ console.log(err); this._hideLoadingIcon(); })); }, _searchKeyLocal: function(name, isResetPopup){ if(!this.listSelect){ return; } if(this.controlType === 'uniqueDynamic' && this._isRestSelectList){//for showing empty item this.listSelect.keyQueryMode = false; this.listSelect.cacheQueryMode = false; this._isRestSelectList = false; } this._showLoadingIcon(); var result = this.pageControlForQuery._searchKeyLocal(name); //cache maybe is cleaned because of layerDataChanged //so query the data of first page again if(name === '' && result.length === 0){ this.layerDataChanged = true; //for init pageControl parameters this._layerDataChangedCallback(); this._addNextPage(); }else{ // result = result.slice(0,this.pageSize); //only show data from first page this.listSelect.setCBXContentBySearch(result, isResetPopup); } this._resetPopupStyles(true); this._hideLoadingIcon(); }, queryByPage: function(){ var def = this.pageControlForQuery.queryByPage(this.listSelect.ifFristPage); def.then(lang.hitch(this, function(features){ def.resolve(features); }), lang.hitch(this, function(err){ console.log(err); def.reject(err); })); }, getCheckedList: function(valueList){ this.listSelect.checkedList = []; this.listSelect.checkedLabelList = []; if(this.controlType === 'uniquePredefined' && this.selectUI !== 'dropdown' && this.enableEmpty){ // this.listSelect.checkedList.push(val); } // if(this.isNumberField){ array.forEach(valueList, lang.hitch(this, function(item) { var val; // if(lang.isObject(item) && item.isChecked){//predefined // val = item.value; // }else{//dynamic // val = item; // } // this.listSelect.checkedList.push(parseFloat(val)); if(lang.isObject(item)){//predefined or runtime&dropdown if(item.isChecked){ val = item.value; } }else{//dynamic val = item; } if(val || val === 0){//number could be 0 val = this.isNumberField ? parseFloat(val): val; this.listSelect.checkedList.push(val); } })); // }else{ // this.listSelect.checkedList = valueList; // } }, //for runtime & predefined getCheckedStrsList: function(valueList){ var checkedStrsList = []; array.forEach(valueList, lang.hitch(this, function(item) { var val; if(lang.isObject(item)){ if(item.isChecked){ val = item[this.disPlayLabel]; } }else{//dynamic val = item; } if(val || val === 0){ checkedStrsList.push(val); } })); return checkedStrsList; }, showContent:function(ifInit){ var def = new Deferred(); // this.listSelect.checkedList = []; this.getCheckedList(this.valueList); this.listSelect.codedValues = false; this.listSelect.disPlayLabel = 'value'; var isNoData; if(this.controlType === 'multiplePredefined' || this.controlType === 'uniquePredefined'){ if(this.runtime){ this.listSelect.disPlayLabel = 'alias'; } // this.getCheckedList(this.valueList); //valueList is a vals Obj isNoData = this._checkIfNoData(this.valueList); if(!isNoData){ this.listSelect.setCBXData(this.valueList,true,ifInit); } this._hideLoadingIcon(); def.resolve(isNoData); return def; } if(this.staticValues){ // this._setValueForStaticValues(this.listSelect.checkedList, this.staticValues); isNoData = this._setValueForStaticValues(this.staticValues); def.resolve(isNoData); return def; } else if(this.codedValues){ if(this.filterCodedValue){ this.listSelect.codedValues = true; }else{ isNoData = this._setValueForStaticValues(this.codedValues); def.resolve(isNoData); return def; } } else{ } this._showLoadingIcon(); if(this.controlType === 'multipleDynamic' || this.controlType === 'uniqueDynamic'){ this._layerDataChangedCallback(); this.pageControlForQuery.queryByPage(ifInit).then(lang.hitch(this, function(valueLabels){ //for multiple this.listSelect.isCacheFinish = this.pageControlForQuery._isUniqueValueCacheFinish; // if(this.codedValues){ valueLabels = this._handleCodedValue(valueLabels); // valueLabels = this.pageControlForQuery._handleCodedValue(valueLabels); // } // this.getCheckedList(this.valueList); //valueList is a vals array---todo isNoData = this._checkIfNoData(valueLabels); if(!isNoData){ this.listSelect.setCBXData(valueLabels, true, ifInit); } this._hideLoadingIcon(); def.resolve(isNoData); }), lang.hitch(this, function(err){ console.log(err); this._hideLoadingIcon(); def.reject(err); })); }else{ //unique-predefined & multiple-predefined } return def; }, _handleCodedValue: function(valueLabels){ this.listSelect.disPlayLabel = 'label'; if(!this.codedValues){ this.listSelect._updateCheckedLabelListFromCheckedList(); return valueLabels; } // var values = array.map(valueLabels, function(v){ // return v.value; // }); // var layerDefinition = this.layerDefinition; // var fieldPopupInfo = this.fieldPopupInfo; // var fieldName = this.fieldName; // valueLabels = jimuUtils._getValues(layerDefinition, fieldPopupInfo, fieldName, values); //update codedvalue cache this.pageControlForQuery._codedvalueCache = valueLabels; if(this.controlType === 'uniqueDynamic'){ var value = this.listSelect.checkedList ? this.listSelect.checkedList[0] : ''; this._setCheckedName(value, valueLabels); } this.listSelect._updateCheckedLabelList(this.codedValues); return valueLabels; }, //Deprecated, because popup z-index is too low _showDropdown: function(evt){ var position = html.position(evt.target); var rNode; if(this.isInFilterSet){ rNode = this.domNode.parentNode.parentNode.parentNode; }else{ rNode = this.domNode.parentNode; } var rPosition = html.position(rNode); if(html.getStyle(this.listContentPopup, 'display') !== 'none'){ html.setStyle(this.listContentPopup, 'display', 'none'); return; } array.forEach(query('.value-type-popup', rNode), function(node){ html.setStyle(node, 'display', 'none'); }, this); html.place(this.listContentPopup, rNode); var topMargin; if(html.hasClass(query('.desktop-add-section', rNode.parentNode)[0], 'hidden')){ topMargin = 55 - 60; }else{ topMargin = 90 - 60; } var top = position.y - rPosition.y - rNode.parentNode.scrollTop + topMargin; if(top + 170 > rNode.parentNode.scrollHeight){ top = rNode.parentNode.scrollHeight - 170 - 40; } var left; if(window.isRTL){ left = position.x - rPosition.x + 20; }else{ left = position.x - rPosition.x - 100 - 90; if(left + 150 > rNode.clientWidth){ left = rNode.clientWidth - 150; } } html.setStyle(this.listContentPopup, { display: 'block', left: left + 'px', top: top + 'px' }); evt.stopPropagation(); }, _calculatePopup: function(){ // var position = html.position(evt.target); var rNode = this.domNode.parentNode; var rPosition = html.position(rNode); // var topMargin = 0; // if(html.hasClass(query('.desktop-add-section', rNode.parentNode)[0], 'hidden')){ // topMargin = 55; // }else{ // topMargin = 90; // } // var top = position.y - rPosition.y - rNode.parentNode.scrollTop + topMargin; // if(top + 170 > rNode.parentNode.scrollHeight){ // top = rNode.parentNode.scrollHeight - 170; // } //set popup posion //compare the height of window and popup //this.cbxHeight // var left; // if(window.isRTL){ // left = position.x - rPosition.x + 20; // }else{ // left = position.x - rPosition.x - 100 - 90; // if(left + 150 > rNode.clientWidth){ // left = rNode.clientWidth - 150; // } // } var bodyH = html.position(document.body).h; var popupTop = rPosition.y + 30; //default show popup under the button if(bodyH - popupTop < this._cbxHeight){ popupTop = rPosition.y - this._cbxHeight; } return { left: rPosition.x, top: popupTop }; }, _cbxWidth: 210, _cbxHeight: 362, popupIsNoData: false, isPopupLoading: false, isLoadDataAdvanced: false, _showPopup:function(){//evt if(this.isPopupLoading){//prevent secondary clicks return; } if(this.cbxPopup && this.cbxPopup.domNode && html.getStyle(this.cbxPopup.domNode, 'display') === 'block'){ this._resetListSelectState(this); this.cbxPopup.hide(); return; } //check new expr var isNewExpr = this._resetPageControlNewExpr(); if(isNewExpr && this.cbxPopup){ this.cbxPopup.close(); this._clearCheckedTxt(); } var popupPosition = this._calculatePopup(); //calc popup width by btn(for resize of view) var btnW = html.getStyle(this.checkedBtn, 'width'); // if(this.controlType === 'multipleDynamic' || this.controlType === 'multiplePredefined'){ // btnW = btnW + 8; // } this._cbxWidth = btnW; if(!isNewExpr && this.cbxPopup && this.cbxPopup.domNode && !this.layerDataChanged){ if(!this.popupIsNoData){ this.cbxPopup.show(); this._resetPopupStyles(); if(this.listSelect.valueInput){ this.listSelect.valueInput.focus(); } this.listSelect.queryState = false; }else{ this._checkIfNoData([]); } }else{ this.isPopupLoading = true; if(!this.isLoadDataAdvanced){//hide spinning icon if loadDataAdvanced at runtime this._showDataQueryingIcon(); } var def = this.showContent(true); //get data,need pages def.then(lang.hitch(this, function(isNoData){ this.isPopupLoading = false; this._hideDataQueryingIcon(); this.popupIsNoData = isNoData; if(!isNoData){ // var popupName = this.layerDefinition.name + '(' + this.fieldName + ')'; var hiddenAfterInit = this.isLoadDataAdvanced; var popupW = this._cbxWidth; this.cbxPopup = new Popup({ width: popupW, height: this._cbxHeight, content: this.listSelect.domNode, //need a dom, not html string enableMoveable: false, hasTitle: false, hasOverlay: false, contentHasNoMargin: true, moveToCenter: false, customPosition: {left: popupPosition.left, top: popupPosition.top}, hiddenAfterInit: hiddenAfterInit, onClose: lang.hitch(this, function () { this.cbxPopup.hide(); return false; }), buttons: [] }); //update popup UI for this dijit this.cbxPopup.setDomNodeStyls({'border-radius': 0, 'border': '1px solid #999'}); this.cbxPopup.on("popupHasInitedSuccessfully", lang.hitch(this, function(ifWindowResize){ this._resetPopupStyles(false, true); if(ifWindowResize){//when window resizes return; } if(this.listSelect.valueInput){ this.listSelect.valueInput.focus(); } })); } if(this.isLoadDataAdvanced){ this.isLoadDataAdvanced = false; } }), lang.hitch(this, function(err){ this.isPopupLoading = false; console.log(err); def.reject(err); })); } // if(evt){ // evt.stopPropagation(); // } }, //set popup styles by item list _itemContainerH: 300, _resetPopupStyles: function(isSearch, isInit){ var _cbxHeight = this._itemContainerH; var _itemH = html.getStyle(this.listSelect.listContent,'height'); if(_itemH === 0 && this.cbxPopup && this.cbxPopup.domNode && html.getStyle(this.cbxPopup.domNode, 'display') === 'none'){ _itemH = this.popupInitHeight; } var itemsH = _itemH; if(isInit){ this.popupInitHeight = itemsH; } //show loadMore btn if(isSearch && !this.listSelect.codedValues && !this.pageControlForQuery._isUniqueValueCacheFinish){ itemsH = itemsH + 25; } if(this.pageControlForQuery._isUniqueValueCacheFinish && html.getStyle(this.listSelect.noDataTips, 'display') === 'block'){ itemsH = itemsH + 30; } _cbxHeight = itemsH < _cbxHeight ? itemsH : _cbxHeight; html.setStyle(this.listSelect.listContainer, 'height', _cbxHeight + 'px'); html.setStyle(this.listSelect.selectedContainer, 'height', _cbxHeight + 30 + 'px'); if(this.controlType === "multipleDynamic"){ _cbxHeight = _cbxHeight + 30 + 30; }else if(this.controlType === "uniqueDynamic"){ _cbxHeight = _cbxHeight + 30; } // else if(this.selectUI === 'dropdown'){//predefined // _cbxHeight = _cbxHeight + 10; // } this._cbxHeight = _cbxHeight + 10; // html.setStyle(this.cbxPopup.domNode, 'height', this._cbxHeight + 'px'); //calc popup width by btn's position and size (for resize of view) var popupPosition = this._calculatePopup(); this._cbxWidth = html.getStyle(this.checkedBtn, 'width'); this.cbxPopup.setCustomPosition(popupPosition.left, popupPosition.top, this._cbxWidth, this._cbxHeight); this._resetItemWidth(); }, //reset item text width _resetItemWidth: function(){ var _itemLabelW = this._cbxWidth - 20; if(this.controlType === "uniqueDynamic" || (this.runtime && this.controlType === 'uniquePredefined' && this.selectUI === 'dropdown') || (!this.runtime && (this.controlType === "multiplePredefined" || this.controlType === "uniquePredefined"))){ _itemLabelW = _itemLabelW; }else if(this.runtime && this.selectUI !== 'dropdown' && (this.controlType === 'uniquePredefined' || this.controlType === 'multiplePredefined')){ _itemLabelW = _itemLabelW - 15; }else{ _itemLabelW = _itemLabelW - 30; //delete input's width } if(window.isRTL){ _itemLabelW = _itemLabelW - 3; } this.listSelect._itemLabelW = _itemLabelW; var items = query('.item .label', this.listSelect.listContent); items.style({ 'max-width': _itemLabelW + 'px' }); }, _setValueForStaticValues: function(valueLabels){ this.listSelect.codedValues = true; this.listSelect._updateCheckedLabelList(this.codedValues); if(valueLabels){ this.pageControlForQuery._codedvalueCache = valueLabels; var isNoData = this._checkIfNoData(valueLabels); if(!isNoData){ this.listSelect.disPlayLabel = 'label'; this.listSelect.setCBXData(valueLabels, true, true); } return isNoData; } return false; }, _checkIfNoData: function(dataList){ if(this.runtime && this.selectUI === 'dropdown'){ if(dataList && dataList.length > 0){ return false; } // var valObj = this.getValueObject(); // if(valObj && ((lang.isArray(valObj.value) && valObj.length > 0) || // (valObj.value && valObj.value !== 0) || // valObj.value === 0 // )){ // return false; // } else{ if(!this.msgDiv){ this.msgDiv = document.createElement('div'); html.addClass(this.msgDiv, "jimu-filter-list-value-provider-tip-container"); this.msgDiv.innerHTML = this.noDataTips; this.checkedBtn.parentNode.appendChild(this.msgDiv); }else{ html.setStyle(this.msgDiv, "display", "block"); } return true; } }else{ return false; } }, getDijits: function(){ return [this.listSelect]; }, //for displaying codedvalue's description _setCheckedName: function(value, codedValues){ var newValue = value; codedValues = codedValues ? codedValues : this.codedValues; if(codedValues){ var isExist = false; for(var key = 0; key < codedValues.length; key ++){ var item = codedValues[key]; if(item.value === value){ newValue = item.label; isExist = true; break; } } if(!isExist){ // newValue = ''; // newValue = this.isNumberField ? null : ''; newValue = this.emptyStr; this.valueList = []; if(this.listSelect){ this.listSelect.checkedList = []; this.listSelect.checkedLabelList = []; } } }else{ if(value === undefined){ newValue = this.emptyStr; html.addClass(this.checkedNameDiv, 'checkedEmptyNameDiv'); }else{ html.removeClass(this.checkedNameDiv, 'checkedEmptyNameDiv'); } } this._setCheckedNameDivText(newValue); }, setValueObject: function(valueObj){ valueObj.value = (valueObj.value || valueObj.value === 0)? valueObj.value: []; this.valueList = valueObj.value; this.enableEmpty = valueObj.enableEmpty; this.listSelect.enableEmpty = valueObj.enableEmpty; if(this.controlType === 'multipleDynamic'){ this.checkedNum.innerText = this.valueList.length; if(this.isLoadDataAdvanced){ this._checkedBtnEvent(); } }else if(this.controlType === 'uniqueDynamic'){ // this._setCheckedNameDivText(this.valueList); var uniqueVal = this.valueList; if(lang.isArray(uniqueVal) && uniqueVal.length === 0){ uniqueVal = undefined; } this._setCheckedName(uniqueVal); this.valueList = [this.valueList]; if(this.isLoadDataAdvanced){ this._checkedBtnEvent(); } }else{ this.emptyStr = valueObj.emptyLabel ? valueObj.emptyLabel : this.emptyStr; this.listSelect.emptyStr = this.emptyStr; if(this.runtime && this.selectUI === 'dropdown'){ var checkedStrsList = []; if(this.disPlayLabel === 'value'){ this.getCheckedList(this.valueList); checkedStrsList = this.listSelect.checkedList; }else{ checkedStrsList = this.getCheckedStrsList(this.valueList);//init } if(this.controlType === 'uniquePredefined'){ if(this.listSelect.checkedList.length > 0){ this._setCheckedNameDivText(checkedStrsList[0]); // this._setCheckedName(checkedStrsList[0]); }else{ var emptyStr = valueObj.enableEmpty ? this.emptyStr : ''; this._setCheckedNameDivText(emptyStr); } }else{ this.checkedNum.innerText = checkedStrsList.length; } } this.showContent(true); setTimeout(lang.hitch(this, function(){ this._cbxWidth = html.getStyle(this.listSelect.listContent, 'width'); this._resetItemWidth(); }), 50); } }, _getCheckedNameDivText: function(){ return this.checkedNameDiv.textContent || this.checkedNameDiv.innerText || ''; }, _setCheckedNameDivText: function(newValue){ if(this.isNumberField && typeof newValue === 'number'){ var valueLabel = jimuUtils._getValues(this.layerDefinition, this.fieldPopupInfo, this.fieldName, [newValue]); newValue = valueLabel[0].label; } if(this.checkedNameDiv.textContent){ this.checkedNameDiv.textContent = newValue; }else{ this.checkedNameDiv.innerText = newValue; } }, tryGetValueObject: function(){ // var interactiveObj = part ? part.interactiveObj : this.partObj.interactiveObj; if(this.isValidValue()){ return this.getValueObject(); // }else if(this.isEmptyValue() && interactiveObj !== ''){//empty & askForValue }else if(this.isEmptyValue()){ var value = null; if(this.controlType === 'multipleDynamic' || this.controlType === 'multiplePredefined'){//multiple types value = []; }else if(this.shortType === 'string'){ value = ''; }else{ value = null; } return { "isValid": true, "type": this.partObj.valueObj.type, "value": value }; } return null; }, getValueObject: function(){ if(this.isValidValue()){//no value and no askForValue var values; if(this.controlType === 'multipleDynamic' || this.controlType === 'uniqueDynamic'){ values = this.listSelect.getListCheckedValues(); //valsArray // values = values.length > 0 ? values : this.listSelectDataList; // if(values.length === 0){ // //this.partObj.interactiveObj only come from last config, not current page's setting // var interactiveObj = part ? part.interactiveObj : this.partObj.interactiveObj; //previous // if(interactiveObj === ''){ //no askForValue // values = this.listSelectDataList; // if(this.cbxPopup){//get data by checked states from cbxpopup // return null; // }else{//get data from config // //if create a new expr, it has no config ,this.listSelectDataList is undefined // var isMultipleNoData = this.controlType === 'multipleDynamic' && values && values.length === 0; // var isUniqueNoData = this.controlType === 'uniqueDynamic' && // (values.value === null || values.value === undefined || values.value === ''); // if(isMultipleNoData || isUniqueNoData){//no config data // return null; // } // } // } // } }else{ values = this.listSelect.getListValues(); //valsObj } if(this.controlType === 'uniqueDynamic'){ values = lang.isArray(values) ? values[0] : values; } //destory the popup if(!this.runtime && this.cbxPopup && this.cbxPopup.domNode){ this.cbxPopup.onClose = lang.hitch(this, function () { return true; }); this.cbxPopup.close(); } // this.destroyProvider(); //why did I destroy it before??? #2018-04-19-suming return { "isValid": true, "type": this.partObj.valueObj.type, "value": values }; } return null; }, setRequired: function(required){ this.listSelect.set("required", required); }, _showDataQueryingIcon: function(){ if(!this._validatingNode){ // this._validatingNode = html.create('div', { // 'class': 'jimu-service-validating' // }, this.checkedBtn); this._validatingNode = html.create('div', { 'class': 'jimu-circle-loading' }, this.checkedBtn); } html.setStyle(this._validatingNode, 'display', 'block'); }, _hideDataQueryingIcon: function(){ if(this._validatingNode){ html.setStyle(this._validatingNode, 'display', 'none'); } }, _showLoadingIcon: function(){ if(this.listSelect && this.listSelect.listContainer){ html.addClass(this.listSelect.listContainer, 'jimu-circle-loading'); } }, _hideLoadingIcon: function(){ if(this.listSelect && this.listSelect.listContainer){ html.removeClass(this.listSelect.listContainer, 'jimu-circle-loading'); } }, destroy: function() { if(this._multipleSelectProviderEventHandler){ document.removeEventListener('click', this._multipleSelectProviderEventHandler, {capture: true}); } this.inherited(arguments); }, destroyProvider: function(){ if(this.listSelect){ this.listSelect.destroy(); } this.listSelect = null; } }); });