ScaleRangeSliderViewModel.js 5.9 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 i from"../../core/Accessor.js";import{watch as a,initial as t}from"../../core/reactiveUtils.js";import{property as l}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import"../../core/accessorSupport/ensureType.js";import{subclass as s}from"../../core/accessorSupport/decorators/subclass.js";import r from"./ScaleRanges.js";import n from"../Slider/SliderViewModel.js";let c=class extends i{constructor(e){super(e),this.layer=null,this.scaleRanges=r.fromScaleRange({minScale:0,maxScale:0}),this.sliderViewModel=(()=>{const{max:e}=this._getSliderIndexRange(this.scaleRanges.length-1);return new n({precision:10,min:0,max:e,values:[0,e]})})()}initialize(){this.own([a((()=>({loaded:this.layer?.loaded,ready:this.view?.ready})),(({loaded:e,ready:i})=>{if(e&&i){if(this._hasTiledLayer()){const e=this._getLayerResampling()?void 0:this.mapScaleToSlider(this._getTiledLayerMaxScale()),i=this.mapScaleToSlider(this._getTiledLayerMinScale());this.sliderViewModel.effectiveMax=e,this.sliderViewModel.effectiveMin=i}"minScale"in this.layer&&"maxScale"in this.layer?(this.minScale=this.layer.minScale,this.maxScale=this.layer.maxScale):(this.minScale=void 0,this.maxScale=void 0)}}),t)])}get effectiveMaxScale(){return 0===this.maxScale?this.maxScaleLimit:this.maxScale}get effectiveMinScale(){return 0===this.minScale?this.minScaleLimit:this.minScale}get effectiveMaxScaleLimit(){return this.mapSliderToScale(this._hasTiledLayer()&&!this._getLayerResampling()?this.sliderViewModel.effectiveMax:this.sliderViewModel.max)}get effectiveMinScaleLimit(){return this.mapSliderToScale(this._hasTiledLayer()?this.sliderViewModel.effectiveMin:this.sliderViewModel.min)}get maxScale(){const e=this.mapSliderToScale(this.sliderViewModel.values[1]);return this._normalizeScale("max",e)}set maxScale(e){this._setMaxScaleOnSlider(e)}get maxScaleLimit(){return this.mapSliderToScale(this.sliderViewModel.max)}set maxScaleLimit(e){this._setSliderRange({maxScale:e,minScale:this.minScaleLimit})}get minScale(){const e=this.mapSliderToScale(this.sliderViewModel.values[0]);return this._normalizeScale("min",e)}set minScale(e){this._setMinScaleOnSlider(e)}get minScaleLimit(){return this.mapSliderToScale(this.sliderViewModel.min)}set minScaleLimit(e){this._setSliderRange({maxScale:this.maxScaleLimit,minScale:e})}get state(){const{view:e,layer:i}=this;return!e&&!i||!e&&i&&i.loaded||!i&&e&&e.ready||e&&e.ready&&i&&i.loaded?"ready":"disabled"}set view(e){this._set("view",e)}mapScaleToSlider(e){const i=this.scaleRanges.scaleToRangeIndex(e),a=this.scaleRanges.findScaleRangeByIndex(i),{maxScale:t,minScale:l}=a,{max:s,min:r}=this._getSliderIndexRange(i);return this._mapToRange(e,l,t,r,s)}mapSliderToScale(e){const i=this.scaleRanges.findScaleRangeByIndex(e),{maxScale:a,minScale:t}=i,{max:l,min:s}=this._getSliderIndexRange(e);return this._mapToRange(e,s,l,t,a)}_setSliderRange(e){this.scaleRanges=r.fromScaleRange(e);const{max:i}=this._getSliderIndexRange(this.scaleRanges.length-1);this.sliderViewModel.max=i,this.sliderViewModel.min=0,this.notifyChange("maxScaleLimit"),this.notifyChange("minScaleLimit")}_getSliderIndexRange(e){const i=Math.floor(e);return{min:i,max:i+.99999}}_mapToRange(e,i,a,t,l){return t+(e-i)*(l-t)/(a-i)}_setMaxScaleOnSlider(e){const{scaleRanges:i,sliderViewModel:a}=this;if(void 0!==e){const t=this.mapScaleToSlider(this._constrainMaxScaleToLayer(i.clampMaxScale(e)));a.values=[a.values[0],t]}}_setMinScaleOnSlider(e){const{scaleRanges:i,sliderViewModel:a}=this;if(void 0!==e){const t=this.mapScaleToSlider(this._constrainMinScaleToLayer(i.clampMinScale(e)));a.values=[t,a.values[1]]}}_constrainMinScaleToLayer(e){const{scaleRanges:i}=this;if(this._hasTiledLayer()){const{firstRange:a}=i,t=this._getTiledLayerMinScale(),l=.85;e=this._mapToRange(e,a.maxScale,a.minScale,0,1)>l||e>t?t:e}return e}_constrainMaxScaleToLayer(e){if(this._hasTiledLayer()&&!this._getLayerResampling()){const i=this._getTiledLayerMaxScale();e=e<i?i:e}return e}_normalizeScale(e,i){const a="max"===e?"maxScale":"minScale",t=this._hasTiledLayer()?"min"===e?this._getTiledLayerMinScale():this._getTiledLayerMaxScale():this.scaleRanges[a],l=this._hasTiledLayer()?"min"===e?this._getTiledLayerRealMinScale():this._getTiledLayerRealMaxScale():t,s=1e-6,r=0===i||l===i||Math.abs(l-i)<=s;return Number((r?0:i).toFixed(6))}_getLayerLODS(){if(!this.layer?.loaded||!("tileInfo"in this.layer))return null;return"imagery-tile"===this.layer?.type&&"Raster"===this.layer.raster?.tileType?null:this.layer.tileInfo.lods}_getLayerResampling(){return!!this.layer?.loaded&&(!("resampling"in this.layer)||this.layer.resampling)}_getTiledLayerMinScale(){const e=this._getLayerLODS();return this.scaleRanges.clampMinScale(e[0].scale)}_getTiledLayerMaxScale(){const e=this._getLayerLODS();return e[e.length-1].scale}_getTiledLayerRealMinScale(){const e=this._getLayerLODS(),i="sourceJSON"in this.layer?this.layer.sourceJSON?.tileInfo?.lods??e:e;return this.scaleRanges.clampMinScale(i[0].scale)}_getTiledLayerRealMaxScale(){const e=this._getLayerLODS(),i="sourceJSON"in this.layer?this.layer.sourceJSON?.tileInfo?.lods??e:e;return i[i.length-1].scale}_hasTiledLayer(){return!!this._getLayerLODS()}};e([l({readOnly:!0})],c.prototype,"effectiveMaxScale",null),e([l({readOnly:!0})],c.prototype,"effectiveMinScale",null),e([l()],c.prototype,"effectiveMaxScaleLimit",null),e([l()],c.prototype,"effectiveMinScaleLimit",null),e([l()],c.prototype,"layer",void 0),e([l()],c.prototype,"maxScale",null),e([l()],c.prototype,"maxScaleLimit",null),e([l()],c.prototype,"minScale",null),e([l()],c.prototype,"minScaleLimit",null),e([l()],c.prototype,"scaleRanges",void 0),e([l()],c.prototype,"sliderViewModel",void 0),e([l({readOnly:!0})],c.prototype,"state",null),e([l()],c.prototype,"view",null),c=e([s("esri.widgets.ScaleRangeSlider.ScaleRangeSliderViewModel")],c);const o=c;export{o as default};