12345 |
- /*
- All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- See https://js.arcgis.com/4.25/esri/copyright.txt for details.
- */
- import{_ as e}from"../../chunks/tslib.es6.js";import t from"../../core/Accessor.js";import{typeCast as a}from"../../core/compilerUtils.js";import{isSome as s}from"../../core/maybe.js";import{watch as i,initial as r,whenOnce as o}from"../../core/reactiveUtils.js";import{property as n}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import{cast as p}from"../../core/accessorSupport/decorators/cast.js";import{subclass as l}from"../../core/accessorSupport/decorators/subclass.js";import{isLoaded as c,canProjectWithoutEngine as m,load as h}from"../../geometry/projection.js";import{equals as f}from"../../geometry/support/spatialReferenceUtils.js";import{esriBasemapDefinitions as u}from"../../support/basemapDefinitions.js";import{ensureType as d,destroyCache as g,findSpatialReference as b,getWellKnownBasemapId as B}from"../../support/basemapUtils.js";let v=class extends t{constructor(e){super(e),this._basemapCache={},this._loadingProjectionEngine=!1,this.nextBasemap=d("hybrid",this._basemapCache),this.view=null}initialize(){i((()=>this.nextBasemap),(e=>{e&&!e.loaded&&e.load().catch((()=>{}))}),r)}destroy(){this.view=null,g(this._basemapCache),this._basemapCache=null}get _nextBasemapSpatialReferenceTask(){return b(this.view,this.nextBasemap)}get _viewSpatialReferenceLocked(){return!("spatialReferenceLocked"in this.view)||this.view.spatialReferenceLocked}get activeBasemap(){return d(this.view?.map?.basemap??"topo",this._basemapCache)}castNextBasemap(e){return d(e,this._basemapCache)}get state(){const{view:e}=this;if(!e?.ready)return"disabled";if(this._nextBasemapSpatialReferenceTask.updating)return"disabled";const{spatialReference:t}=this._nextBasemapSpatialReferenceTask;return this._viewSpatialReferenceLocked&&s(t)&&!e.spatialReference.equals(t)?"incompatible-next-basemap":this._loadingProjectionEngine?"loading":"ready"}async toggle(){if("disabled"===this.state||"incompatible-next-basemap"===this.state)return;const{activeBasemap:e,nextBasemap:t}=this,a=this._viewSpatialReferenceLocked;if(!a){if(await o((()=>!this._nextBasemapSpatialReferenceTask.updating)),t!==this.nextBasemap||e!==this.activeBasemap)return;const{spatialReference:a}=this._nextBasemapSpatialReferenceTask;if(!s(a)||f(this.view.spatialReference,a)||c()||m(this.view.spatialReference,a)||(this._loadingProjectionEngine=!0,await h(),this._loadingProjectionEngine=!1),t!==this.nextBasemap||e!==this.activeBasemap)return}this.view.map.basemap=t,a||!s(this._nextBasemapSpatialReferenceTask.spatialReference)||f(this.view.spatialReference,this._nextBasemapSpatialReferenceTask.spatialReference)||(this.view.spatialReference=this._nextBasemapSpatialReferenceTask.spatialReference),this.nextBasemap=e}static getThumbnailUrl(e){if(!e)return null;const{thumbnailUrl:t}=e;if(t)return t;const s=B(e);if(s)return u[s].thumbnailUrl;const i=e.baseLayers.find((e=>!!a(e)().get("portalItem.thumbnailUrl")));return i?a(i)().get("portalItem.thumbnailUrl"):null}};e([n()],v.prototype,"_loadingProjectionEngine",void 0),e([n({readOnly:!0})],v.prototype,"_nextBasemapSpatialReferenceTask",null),e([n({readOnly:!0})],v.prototype,"_viewSpatialReferenceLocked",null),e([n({readOnly:!0})],v.prototype,"activeBasemap",null),e([n()],v.prototype,"nextBasemap",void 0),e([p("nextBasemap")],v.prototype,"castNextBasemap",null),e([n({readOnly:!0})],v.prototype,"state",null),e([n()],v.prototype,"view",void 0),e([n()],v.prototype,"toggle",null),v=e([l("esri.widgets.BasemapToggle.BasemapToggleViewModel")],v);const R=v;export{R as default};
|