@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 3.13 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import{__decorate as t}from"tslib";import e from"../../core/Accessor.js";import{destroyMaybe as i}from"../../core/maybe.js";import{watch as n,initial as s,syncAndInitial as r,whenOnce as a}from"../../core/reactiveUtils.js";import{measurementLengthUnits as o}from"../../core/units.js";import{property as p,subclass as l}from"../../core/accessorSupport/decorators.js";import{defaultUnitPropertyMetadata as u}from"../../properties/defaultUnit.js";import{SnappingManager as m}from"../../views/interactive/snapping/SnappingManager.js";import g from"../../views/interactive/snapping/SnappingOptions.js";import{isSupported as h,loadGeometryOperators as d,DistanceMeasurement2DTool as c}from"./DistanceMeasurement2DTool.js";import{InteractiveToolViewModelMixin as v}from"../support/InteractiveToolViewModelMixin.js";let w=class extends(v(e)){constructor(t){super(t),this.supportedViewType="2d",this.unsupportedErrorMessage="DistanceMeasurement2DViewModel is only supported in 2D views.",this._snappingManager=null,this.snappingOptions=new g}initialize(){this.addHandles([n(()=>this.view?.spatialReference,()=>this.clear()),n(()=>this.unit,t=>{this.tool&&(this.tool.unit=t)},s),n(()=>this.view,t=>{this._snappingManager=i(this._snappingManager),t&&(this._snappingManager=new m({view:t,options:this.snappingOptions}))},r),n(()=>this.snappingOptions,t=>{this._snappingManager&&t&&(this._snappingManager.options=t)})])}destroy(){this._snappingManager=i(this._snappingManager)}get measurement(){return this.tool?.measurement??null}get measurementLabel(){return this.tool?.measurementLabel??null}get state(){return this.disabled||null==this.view||!h(this.view?.spatialReference)?"disabled":null!=this.tool&&this.measurement?this.tool.active?"measuring":"measured":"ready"}get unit(){return this._validateUnit(this.defaultUnit)}set unit(t){this._overrideIfSome("unit",this._validateUnit(t))}get unitOptions(){return o}set unitOptions(t){this._overrideIfSome("unitOptions",this._validateUnits(t))}get view(){return super.view}set view(t){super.view=t}async start(){const{view:t}=this;t&&(await a(()=>t.ready),await d(t.spatialReference)),this.createTool({interactive:!0})}clear(){this.removeTool()}constructTool(){return new c({snappingManager:this._snappingManager,unit:this.unit,view:this.view,visible:this.visible})}_validateUnit(t){const{unitOptions:e,defaultUnit:i}=this;return null!=t&&e.includes(t)?t:e.includes(i)?i:e.length>0?e[0]:i}_validateUnits(t){if(null==t)return[];const e=t.filter(t=>o.includes(t));return 0===e.length?o.slice():e}};t([p()],w.prototype,"_snappingManager",void 0),t([p(u)],w.prototype,"defaultUnit",void 0),t([p({readOnly:!0})],w.prototype,"measurement",null),t([p({readOnly:!0})],w.prototype,"measurementLabel",null),t([p({type:g,nonNullable:!0})],w.prototype,"snappingOptions",void 0),t([p({readOnly:!0})],w.prototype,"state",null),t([p({type:String})],w.prototype,"unit",null),t([p({type:[String]})],w.prototype,"unitOptions",null),w=t([l("esri.widgets.DistanceMeasurement2D.DistanceMeasurement2DViewModel")],w);const f=w;export{f as default};