Measurement.js 4.2 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import{_ as e}from"../chunks/tslib.es6.js";import{ignoreAbortErrors as t}from"../core/promiseUtils.js";import{watch as i}from"../core/reactiveUtils.js";import{property as s}from"../core/accessorSupport/decorators/property.js";import"../core/arrayUtils.js";import"../core/accessorSupport/ensureType.js";import{subclass as r}from"../core/accessorSupport/decorators/subclass.js";import a from"./Widget.js";import o from"./Measurement/MeasurementViewModel.js";import"./support/widgetUtils.js";import{messageBundle as n}from"./support/decorators/messageBundle.js";import{tsx as l}from"./support/jsxFactory.js";const d={base:"esri-measurement",widgetIcon:"esri-icon-measure"};function c(e){return"esri.widgets.AreaMeasurement2D"===e?.declaredClass||"esri.widgets.AreaMeasurement3D"===e?.declaredClass}let u=class extends a{constructor(e,t){super(e,t),this._widgets=new Map,this.activeWidget=null,this.iconClass=d.widgetIcon,this.messages=null,this.viewModel=new o}initialize(){this.activeWidget&&this.viewModel.set("activeViewModel",this.activeWidget.viewModel),this.view&&this.activeTool&&this._getActiveWidget().then((e=>{this._set("activeWidget",e)})),this.addHandles([i((()=>[this.view,this.activeTool]),(async()=>{this._set("activeWidget",await this._getActiveWidget())})),i((()=>this.activeWidget),((e,t)=>{this.viewModel.set("activeViewModel",e?e.viewModel:null),t&&(t.visible=!1)})),i((()=>[this.areaUnit,this.linearUnit,this.uiStrings]),(()=>this._updateSubWidgetProperties()))])}destroy(){this._destroyWidgets()}get activeTool(){return this.viewModel.activeTool}set activeTool(e){this.viewModel.activeTool=e}get areaUnit(){return this.viewModel.areaUnit}set areaUnit(e){this.viewModel.areaUnit=e}get label(){return this.messages?.widgetLabel??""}set label(e){this._overrideIfSome("label",e)}get linearUnit(){return this.viewModel.linearUnit}set linearUnit(e){this.viewModel.linearUnit=e}get view(){return this.viewModel.view}set view(e){this.viewModel.view=e}render(){const{activeWidget:e}=this,t=e&&!e.destroyed?e.render():null;return l("div",{class:d.base},t)}clear(){this.activeTool=null,this._destroyWidgets()}startMeasurement(){const{activeViewModel:e}=this.viewModel;e&&t(e.start())}async _createWidget(e){const{areaUnit:t,linearUnit:i,view:s}=this;switch(e){case"area":{const{type:i}=s;switch(i){case"2d":return new(0,(await import("./AreaMeasurement2D.js")).default)({view:s,unit:t,uiStrings:this._createUIStringsForWidget(e)});case"3d":return new(0,(await import("./AreaMeasurement3D.js")).default)({view:s,unit:t,uiStrings:this._createUIStringsForWidget(e)});default:return null}}case"distance":{const{type:t}=s;if("2d"===t){return new(0,(await import("./DistanceMeasurement2D.js")).default)({view:s,unit:i,uiStrings:this._createUIStringsForWidget(e)})}return null}case"direct-line":{const{type:t}=s;if("3d"===t){return new(0,(await import("./DirectLineMeasurement3D.js")).default)({view:s,unit:i,uiStrings:this._createUIStringsForWidget(e)})}return null}default:return null}}_destroyWidgets(){this._widgets.forEach((e=>e.destroy())),this._widgets.clear()}async _getActiveWidget(){const{activeTool:e,view:t}=this;if(!t||!e)return null;let i=null;if(this._widgets.has(e))i=this._widgets.get(e),i.visible=!0;else{if(i=await this._createWidget(e),!i)return null;await i.viewModel.start(),this._widgets.set(e,i)}return i}_createUIStringsForWidget(e){if(!this.uiStrings)return null;const t=e+"-"+this.view.type;return this.uiStrings[t]}_updateSubWidgetProperties(){this._widgets.forEach(((e,t)=>{const{areaUnit:i,linearUnit:s}=this;e.unit=c(e)?i:s,e.uiStrings=this._createUIStringsForWidget(t)}))}};e([s()],u.prototype,"activeTool",null),e([s({readOnly:!0})],u.prototype,"activeWidget",void 0),e([s()],u.prototype,"areaUnit",null),e([s()],u.prototype,"iconClass",void 0),e([s()],u.prototype,"label",null),e([s()],u.prototype,"linearUnit",null),e([s(),n("esri/widgets/Measurement/t9n/Measurement")],u.prototype,"messages",void 0),e([s()],u.prototype,"uiStrings",void 0),e([s()],u.prototype,"view",null),e([s({type:o})],u.prototype,"viewModel",void 0),u=e([r("esri.widgets.Measurement")],u);const g=u;export{g as default};