@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 3.3 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{_ as t}from"../../chunks/tslib.es6.js";import{destroyMaybe as e}from"../../core/maybe.js";import{watch as i,initial as s,syncAndInitial as n,whenOnce as r}from"../../core/reactiveUtils.js";import{measurementLengthUnits as a}from"../../core/unitUtils.js";import{property as o}from"../../core/accessorSupport/decorators/property.js";import"../../core/has.js";import"../../core/Logger.js";import"../../core/RandomLCG.js";import{subclass as p}from"../../core/accessorSupport/decorators/subclass.js";import{defaultUnitPropertyMetadata as l}from"../../properties/defaultUnit.js";import{SnappingManager as u}from"../../views/interactive/snapping/SnappingManager.js";import m from"../../views/interactive/snapping/SnappingOptions.js";import{isSupported as c,loadGeometryOperators as h,DistanceMeasurement2DTool as g}from"./DistanceMeasurement2DTool.js";import{InteractiveToolViewModel as d}from"../support/InteractiveToolViewModel.js";let v=class extends d{constructor(t){super(t),this.supportedViewType="2d",this.unsupportedErrorMessage="DistanceMeasurement2DViewModel is only supported in 2D views.",this._snappingManager=null,this.snappingOptions=new m}initialize(){this.addHandles([i((()=>this.view?.spatialReference),(()=>this.clear())),i((()=>this.unit),(t=>{this.tool&&(this.tool.unit=t)}),s),i((()=>this.view),(t=>{this._snappingManager=e(this._snappingManager),t&&(this._snappingManager=new u({view:t,options:this.snappingOptions}))}),n),i((()=>this.snappingOptions),(t=>{this._snappingManager&&t&&(this._snappingManager.options=t)}))])}destroy(){this._snappingManager=e(this._snappingManager)}get measurement(){return this.tool?.measurement??null}get measurementLabel(){return this.tool?.measurementLabel??null}get state(){return this.disabled||null==this.view||!c(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 a}set unitOptions(t){this._overrideIfSome("unitOptions",this._validateUnits(t))}async start(){const{view:t}=this;t&&(await r((()=>t.ready)),await h(t.spatialReference)),this.createTool({interactive:!0})}clear(){this.removeTool()}constructTool(){return new g({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=>a.includes(t)));return 0===e.length?a.slice():e}};t([o()],v.prototype,"_snappingManager",void 0),t([o(l)],v.prototype,"defaultUnit",void 0),t([o({readOnly:!0})],v.prototype,"measurement",null),t([o({readOnly:!0})],v.prototype,"measurementLabel",null),t([o({type:m,nonNullable:!0})],v.prototype,"snappingOptions",void 0),t([o({readOnly:!0})],v.prototype,"state",null),t([o({type:String})],v.prototype,"unit",null),t([o({type:[String]})],v.prototype,"unitOptions",null),v=t([p("esri.widgets.DistanceMeasurement2D.DistanceMeasurement2DViewModel")],v);const f=v;export{f as default};