@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 5.59 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{property as s}from"../../core/accessorSupport/decorators/property.js";import"../../core/has.js";import"../../core/Logger.js";import"../../core/RandomLCG.js";import{subclass as e}from"../../core/accessorSupport/decorators/subclass.js";import i from"../Slider/SliderViewModel.js";import{formatDateLabel as o,formatNumberLabel as n,getStopChanges as a}from"./support/utils.js";let l=class extends i{constructor(t){super(t),this._initialStopValues=[],this._max=null,this._min=null,this.hasTimeData=!1,this.inputFormatFunction=(t,s)=>"max"===s?this.getUnzoomedMax().toString():"min"===s?this.getUnzoomedMin().toString():t.toString(),this.inputParseFunction=null,this.labelFormatFunction=t=>{if(this.hasTimeData)return o(t);const{max:s,min:e,precision:i}=this,a=s-e>10?2:i;return n(parseFloat(t.toFixed(a)))},this.thumbsConstrained=!1,this.zoomingEnabled=!0}set breaks(t){this._set("breaks",t),this.notifyChange("max"),this.notifyChange("min")}set stops(t){if(t?.length){const{max:s,min:e}=this,i=this.getValuesFromStops(t),o={};null!=e&&i.some((t=>t<e))&&(o.min=Math.min(...i)),null!=s&&i.some((t=>t>s))&&(o.max=Math.max(...i)),this.set({...o}),this._initialStopValues=i}else this._initialStopValues=null;this._set("stops",t||null),this.notifyChange("values")}get labels(){const{values:t}=this,s=t&&t.length?t.map(((t,s)=>this.getLabelForValue(t,"value",s))):[],e=this.getUnzoomedMax(),i=this.getUnzoomedMin();return{max:this.getLabelForValue(e,"max"),min:this.getLabelForValue(i,"min"),values:s}}get max(){const{breaks:t}=this;return t?.length?t[t.length-1].max:this.max}set max(t){const{zoomOptions:s}=this;if(null!=s?.max){const e=this.values;let i=s.max;if(t<i&&(i=t,s.max=t),e&&e.length)for(let s=0;s<e.length;s++)t<e[s]&&this.setValue(s,t);this._storeZoomMax(i,t)}else this.updateBreakMax(t),this.setMax(t);this.notifyChange("labels")}get min(){const{breaks:t}=this;return t?.length?t[0].min:this.min}set min(t){const{zoomOptions:s}=this;if(null!=s?.min){const e=this.values;let i=s.min;if(t>i&&(i=t,s.min=t),e&&e.length)for(let s=0;s<e.length;s++)t>e[s]&&this.setValue(s,t);this._storeZoomMin(i,t)}else this.updateBreakMin(t),this.setMin(t);this.notifyChange("labels")}get state(){const{max:t,min:s,values:e}=this;return null!=t&&null!=s&&e.length>0?"ready":"disabled"}get values(){const{breaks:t,stops:s}=this;if(!t&&!s)return[];if(t?.length){const s=t.map((t=>t.max));return s.pop(),s}if(s?.length<2)return[];const e=this.getValuesFromStops();return[e[0],e[e.length-1]]}set zoomOptions(t){const{zoomingEnabled:s,zoomOptions:e}=this;if(s){if(e){const s=null!=this._max?this._max:this.max,e=null!=this._min?this._min:this.min;if(t){const{max:i,min:o}=t,n=null!=i,a=null!=o,l=a?t.min:e,r=a?e:null,h=n?t.max:s,m=n?s:null;this._storeZoomMin(l,r),this._storeZoomMax(h,m)}else this.setMax(s),this.setMin(e),this._min=null,this._max=null}else if(t){const{max:s,min:e}=t;null!=e&&this._storeZoomMin(t.min,this.min),null!=s&&this._storeZoomMax(t.max,this.max)}this._set("zoomOptions",t),this.notifyChange("max"),this.notifyChange("min")}}getStopIndexFromValueIndex(t){const{stops:s}=this,e=this.values[t];if(0===t){return e<=this.values[1]?0:s.length-1}if(1===t){return this.values[0]>=e?0:s.length-1}return null}getStopChanges(t,s){const e=this.stops,i=this.getStopIndexFromValueIndex(t),o=this.getValuesFromStops();o[i]=s;const[n,a]=[o[0],o[o.length-1]].sort(((t,s)=>t>s?1:-1)),l=a-n,r=e.length-1;return o.map(((t,s)=>({index:s,value:this.toPrecision(n+s*l/r)})))}setValue(t,s){const{max:e,min:i,values:o}=this,n=o[t];if(isNaN(s)||n===s||s>e||s<i)return;o[t]=this.toPrecision(s),this._set("values",[...o]);const l=o.slice().sort(((t,s)=>t>s?1:-1)),r=l[0],h=l[l.length-1],m=a(r,h,this._initialStopValues??[]);this.updateStops(m),this.updateBreaks(),this.notifyChange("labels")}getValuesFromStops(t){const s=t||this.stops;return s?.map((t=>t.hasOwnProperty("ratio")?t.ratio:t.value))}updateBreaks(){const{breaks:t,values:s}=this;t?.length&&s.slice().sort(((t,s)=>t>s?1:-1)).forEach(((s,e)=>{t[e].max=s,null!=t[e+1]&&(t[e+1].min=s)}))}updateBreakMax(t){const{breaks:s,max:e,min:i}=this;!isNaN(t)&&e!==t&&null!=i&&t>i&&s?.length&&(s[s.length-1].max=t)}updateBreakMin(t){const{breaks:s,max:e,min:i}=this;!isNaN(t)&&i!==t&&null!=e&&t<e&&s?.length&&(s[0].min=t)}updateStops(t){const{stops:s}=this,e=this.getValuesFromStops();if(e?.length){for(const s of t)e[s.index]=s.value;s.forEach(((t,s)=>{t.hasOwnProperty("ratio")?t.ratio=e[s]:t.value=e[s]}))}}getUnzoomedMax(){return this.zoomOptions&&null!=this._max?this._max:this.max}getUnzoomedMin(){return this.zoomOptions&&null!=this._min?this._min:this.min}_storeZoomMax(t,s){this._max=s,this.setMax(t)}_storeZoomMin(t,s){this._min=s,this.setMin(t)}};t([s()],l.prototype,"breaks",null),t([s()],l.prototype,"stops",null),t([s()],l.prototype,"hasTimeData",void 0),t([s()],l.prototype,"inputFormatFunction",void 0),t([s()],l.prototype,"inputParseFunction",void 0),t([s()],l.prototype,"labelFormatFunction",void 0),t([s({readOnly:!0})],l.prototype,"labels",null),t([s()],l.prototype,"max",null),t([s()],l.prototype,"min",null),t([s({readOnly:!0})],l.prototype,"state",null),t([s()],l.prototype,"thumbsConstrained",void 0),t([s({readOnly:!0})],l.prototype,"values",null),t([s()],l.prototype,"zoomingEnabled",void 0),t([s()],l.prototype,"zoomOptions",null),l=t([e("esri.widgets.smartMapping.SmartMappingSliderViewModel")],l);const r=l;export{r as default};