UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) 5.36 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{__decorate as e}from"tslib";import{deprecatedProperty as t}from"../../../core/deprecate.js";import{EventedAccessor as o}from"../../../core/Evented.js";import{handlesGroup as i}from"../../../core/handleUtils.js";import s from"../../../core/Logger.js";import{removeMaybe as r}from"../../../core/maybe.js";import{watch as n}from"../../../core/reactiveUtils.js";import{property as a,subclass as l}from"../../../core/accessorSupport/decorators.js";import{isKnowledgeGraphLayer as c,isLinkChartLayer as p}from"../../../layers/support/layerUtils.js";import{findLayerView as u}from"../../../views/draw/support/layerUtils.js";import{isSelectableLayerView2D as h}from"../../../views/support/layerViewUtils.js";import d from"../Selector2D/SelectionOperation.js";let v=class extends o{constructor(e){super(e),this._operationHandlesGroup=null,this.activeOperation=null,this.continuousSelectionEnabled=!1,this.defaultLassoToolOptions={createTool:"polygon",mode:"hybrid",toolName:"lasso"},this.defaultOperationType="add",this.defaultPointToolOptions={createTool:"point",toolName:"point"},this.defaultRectangleToolOptions={createTool:"rectangle",toolName:"rectangle"},this.layerViewPreferenceEnabled=!0,this.persistSelection=!0,this.selectionManager=null,this.returnFeatureTitleFields=!1,this.returnGeometry=!0,this.selectOnComplete=!0,this.sources=null,this.toolConfigs=[]}initialize(){this.addHandles([n(()=>this.effectiveSources,e=>{this.activeOperation&&(this.activeOperation.sources=e)}),n(()=>this.defaultOperationType,e=>{this.activeOperation&&(this.activeOperation.type=e)})])}destroy(){this.activeOperation?.cancel(),this.activeOperation?.destroy(),this._operationHandlesGroup=r(this._operationHandlesGroup)}get effectiveSelectionManager(){return this.selectionManager??this.view?.selectionManager}get effectiveSources(){const{layerViewPreferenceEnabled:e,sources:t,view:o}=this,i=t??this.effectiveSelectionManager?.sources;if(!i?.length)return[];const s=[];return i.forEach(t=>{if(h(t))s.push(t);else if(c(t)||p(t)){(t.layers||[]).forEach(t=>{const i=o?u(o,t):void 0,r=e&&h(i)?i:t;s.push(r)})}else if(e){const e=o?u(o,t):void 0,i=h(e)?e:t;s.push(i)}else s.push(t)}),s}get layers(){return t(s.getLogger(this),"layers",{replacement:"Use SelectionToolbar.sources instead."}),this.sources}set layers(e){t(s.getLogger(this),"layers",{replacement:"Use SelectionToolbar.sources instead."}),this.sources=e}get state(){return this.activeOperation?"active":this.view?.ready&&this.effectiveSources.length?"ready":"disabled"}activate(e){const{state:t}=this,o=e?.view||this.view,r=e?.sources||this.effectiveSources;if("disabled"===t||!o)return void s.getLogger(this).warn("Unable to start selection operation.");"active"===t&&this.cancel();const n=new CustomEvent("before-activate",{cancelable:!0,detail:{toolName:e?.toolName??null}});if(this.emit("before-activate",n),n.defaultPrevented)return;const a={type:this.defaultOperationType,persistSelection:this.persistSelection,returnFeatureTitleFields:this.returnFeatureTitleFields,returnGeometry:this.returnGeometry,selectOnComplete:this.selectOnComplete,selectionManager:this.effectiveSelectionManager,...e,sources:r,view:o},l=new d({...a});return this._operationHandlesGroup=i([l.on("selection-change",e=>this.emit("selection-change",e)),l.once("complete",e=>this._onOperationComplete(e,a))]),this._set("activeOperation",l),l}activateTool(e){this.cancel();const t=this._getToolOptions(e);if(t)return this.activate(t);s.getLogger(this).warn("Unable to activate tool: unable to determine options.")}cancel(){this.activeOperation?.cancel(),this._set("activeOperation",null)}toggleTool(e){const{activeOperation:t}=this;if(t){const o=t.toolName;if(this.cancel(),o===e)return}return this.activateTool(e)}_onOperationComplete(e,t){const o=this.activeOperation?.type??e.operationType;this._operationHandlesGroup=r(this._operationHandlesGroup),this.activeOperation?.destroy(),this._set("activeOperation",null),this.emit("complete",e),this.continuousSelectionEnabled&&!e.aborted&&this.activate({...t,type:o})}_getToolOptions(e){const t=this.toolConfigs.find(t=>t.toolName===e);return t||("lasso"===e?this.defaultLassoToolOptions:"point"===e?this.defaultPointToolOptions:"rectangle"===e?this.defaultRectangleToolOptions:void 0)}};e([a({readOnly:!0})],v.prototype,"activeOperation",void 0),e([a()],v.prototype,"continuousSelectionEnabled",void 0),e([a()],v.prototype,"defaultLassoToolOptions",void 0),e([a()],v.prototype,"defaultOperationType",void 0),e([a()],v.prototype,"defaultPointToolOptions",void 0),e([a()],v.prototype,"defaultRectangleToolOptions",void 0),e([a()],v.prototype,"effectiveSelectionManager",null),e([a()],v.prototype,"effectiveSources",null),e([a()],v.prototype,"layers",null),e([a()],v.prototype,"layerViewPreferenceEnabled",void 0),e([a()],v.prototype,"persistSelection",void 0),e([a()],v.prototype,"selectionManager",void 0),e([a()],v.prototype,"returnFeatureTitleFields",void 0),e([a()],v.prototype,"returnGeometry",void 0),e([a()],v.prototype,"selectOnComplete",void 0),e([a()],v.prototype,"sources",void 0),e([a({readOnly:!0})],v.prototype,"state",null),e([a()],v.prototype,"toolConfigs",void 0),e([a()],v.prototype,"view",void 0),v=e([l("esri.widgets.support.SelectionToolbar.SelectionToolbarViewModel")],v);const f=v;export{f as default};