AreaMeasurement2DViewModel.js 3.3 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.24/esri/copyright.txt for details.
  4. */
  5. import{_ as t}from"../../chunks/tslib.es6.js";import e from"../../core/Handles.js";import{isSome as i,isNone as s,unwrap as o}from"../../core/maybe.js";import{watch as r,initial as a,whenOnce as n}from"../../core/reactiveUtils.js";import{measurementAreaUnits as l}from"../../core/unitUtils.js";import{property as h}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import"../../core/has.js";import"../../core/accessorSupport/ensureType.js";import{subclass as p}from"../../core/accessorSupport/decorators/subclass.js";import{load as d}from"../../geometry/projection.js";import{defaultUnitPropertyMetadata as u}from"../../properties/defaultUnit.js";import{isSupported as c,isProjectionEngineRequired as m,AreaMeasurement2DTool as v}from"./AreaMeasurement2DTool.js";import{InteractiveToolViewModel as y}from"../support/InteractiveToolViewModel.js";const f={handleWidth:8,handleColor:[255,128,0,.5],pathWidth:2,pathColor:[255,128,0,1],fillColor:[255,128,0,.3]};let g=class extends y{constructor(t){super(t),this.supportedViewType="2d",this.unsupportedErrorMessage="AreaMeasurement2DViewModel is only supported in 2D views.",this._handles=new e,this.geodesicDistanceThreshold=1e5,this.measurement=null,this.measurementLabel=null,this.palette=f}initialize(){this._handles.add([r((()=>o(this.view)?.spatialReference),(()=>this.clear())),r((()=>this.unit),(t=>{i(this.tool)&&(this.tool.unit=t)}),a),r((()=>this.geodesicDistanceThreshold),(t=>{i(this.tool)&&(this.tool.geodesicDistanceThreshold=t)}),a),r((()=>this.palette),(t=>{i(this.tool)&&(this.tool.palette=t)}),a)])}destroy(){this._handles&&(this._handles.destroy(),this._handles=null)}get state(){return this.disabled||s(this.view)||!c(this.view.spatialReference)?"disabled":i(this.tool)&&this.tool.measurement?this.tool.active?"measuring":"measured":"ready"}get unit(){return this._validateUnit(this.defaultUnit)}set unit(t){void 0!==t?this._override("unit",this._validateUnit(t)):this._clearOverride("unit")}get unitOptions(){return l}set unitOptions(t){void 0!==t?this._override("unitOptions",this._validateUnits(t)):this._clearOverride("unitOptions")}async start(){const t=this.view;i(t)&&(await n((()=>t.ready)),m(t.spatialReference)&&await d()),this.createTool({interactive:!0})}clear(){this.removeTool()}constructTool(){return new v({view:o(this.view),visible:this.visible,geodesicDistanceThreshold:this.geodesicDistanceThreshold,palette:this.palette,unit:this.unit})}_validateUnit(t){return this.unitOptions.includes(t)?t:this.unitOptions.includes(this.defaultUnit)?this.defaultUnit:this.unitOptions[0]}_validateUnits(t=[]){const e=t.filter((t=>l.includes(t)));return 0===e.length?l.slice():e}};t([h(u)],g.prototype,"defaultUnit",void 0),t([h({type:Number})],g.prototype,"geodesicDistanceThreshold",void 0),t([h({readOnly:!0,aliasOf:"tool.measurement"})],g.prototype,"measurement",void 0),t([h({readOnly:!0,aliasOf:"tool.measurementLabel"})],g.prototype,"measurementLabel",void 0),t([h()],g.prototype,"palette",void 0),t([h({readOnly:!0})],g.prototype,"state",null),t([h({type:String})],g.prototype,"unit",null),t([h({type:[String]})],g.prototype,"unitOptions",null),g=t([p("esri.widgets.AreaMeasurement2D.AreaMeasurement2DViewModel")],g);const w=g;export{w as default};