UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) 5.33 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import{__decorate as t}from"tslib";import{property as s,subclass as i}from"../../core/accessorSupport/decorators.js";import e from"../Slider/SliderViewModel.js";import{formatDateLabel as n,formatNumberLabel as o,getStopChanges as a}from"./support/utils.js";let l=class extends e{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 n(t);const{max:s,min:i,precision:e}=this,a=s-i>10?2:e;return o(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:i}=this,e=this.getValuesFromStops(t),n={};null!=i&&e.some(t=>t<i)&&(n.min=Math.min(...e)),null!=s&&e.some(t=>t>s)&&(n.max=Math.max(...e)),this.set({...n}),this._initialStopValues=e}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)):[],i=this.getUnzoomedMax(),e=this.getUnzoomedMin();return{max:this.getLabelForValue(i,"max"),min:this.getLabelForValue(e,"min"),values:s}}get max(){const{breaks:t}=this;return t?.length?t[t.length-1].max:this._get("max")}set max(t){const{zoomOptions:s}=this;if(null!=s?.max){const i=this.values;let e=s.max;if(t<e&&(e=t,s.max=t),i&&i.length)for(let s=0;s<i.length;s++)t<i[s]&&this.setValue(s,t);this._storeZoomMax(e,t)}else this.updateBreakMax(t),this.setMax(t);this.notifyChange("labels")}get min(){const{breaks:t}=this;return t?.length?t[0].min:this._get("min")}set min(t){const{zoomOptions:s}=this;if(null!=s?.min){const i=this.values;let e=s.min;if(t>e&&(e=t,s.min=t),i&&i.length)for(let s=0;s<i.length;s++)t>i[s]&&this.setValue(s,t);this._storeZoomMin(e,t)}else this.updateBreakMin(t),this.setMin(t);this.notifyChange("labels")}get state(){const{max:t,min:s,values:i}=this;return null!=t&&null!=s&&i.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 i=this.getValuesFromStops();return[i[0],i[i.length-1]]}set zoomOptions(t){const{zoomingEnabled:s,zoomOptions:i}=this;if(s){if(i){const s=null!=this._max?this._max:this.max,i=null!=this._min?this._min:this.min;if(t){const{max:e,min:n}=t,o=null!=e,a=null!=n,l=a?t.min:i,h=a?i:null,r=o?t.max:s,m=o?s:null;this._storeZoomMin(l,h),this._storeZoomMax(r,m)}else this.setMax(s),this.setMin(i),this._min=null,this._max=null}else if(t){const{max:s,min:i}=t;null!=i&&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,i=this.values[t];if(0===t){return i<=this.values[1]?0:s.length-1}if(1===t){return this.values[0]>=i?0:s.length-1}return null}getStopChanges(t,s){const i=this.stops,e=this.getStopIndexFromValueIndex(t),n=this.getValuesFromStops();n[e]=s;const[o,a]=[n[0],n[n.length-1]].sort((t,s)=>t>s?1:-1),l=a-o,h=i.length-1;return n.map((t,s)=>({index:s,value:this.toPrecision(o+s*l/h)}))}setValue(t,s){const{max:i,min:e,values:n}=this,o=n[t];if(isNaN(s)||o===s||s>i||s<e)return;n[t]=this.toPrecision(s),this._set("values",[...n]);const l=n.slice().sort((t,s)=>t>s?1:-1),h=l[0],r=l[l.length-1],m=a(h,r,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,i)=>{t[i].max=s,null!=t[i+1]&&(t[i+1].min=s)})}updateBreakMax(t){const{breaks:s,max:i,min:e}=this;!isNaN(t)&&i!==t&&null!=e&&t>e&&s?.length&&(s[s.length-1].max=t)}updateBreakMin(t){const{breaks:s,max:i,min:e}=this;!isNaN(t)&&e!==t&&null!=i&&t<i&&s?.length&&(s[0].min=t)}updateStops(t){const{stops:s}=this,i=this.getValuesFromStops();if(i?.length){for(const s of t)i[s.index]=s.value;s.forEach((t,s)=>{t.hasOwnProperty("ratio")?t.ratio=i[s]:t.value=i[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([i("esri.widgets.smartMapping.SmartMappingSliderViewModel")],l);const h=l;export{h as default};