Weather.js 5.4 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{isSome as o}from"../core/maybe.js";import{memoize as t}from"../core/memoize.js";import{property as r}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{weatherTypesArray as i}from"../views/3d/environment/weather.js";import n from"./Widget.js";import{Heading as a}from"./support/Heading.js";import{classes as l}from"./support/widgetUtils.js";import{messageBundle as c}from"./support/decorators/messageBundle.js";import{tsx as d,tsxFragment as p}from"./support/jsxFactory.js";import{CSS as h}from"./Weather/css.js";import{WeatherState as u,WeatherError as g}from"./Weather/enums.js";import{LabeledSlider as m}from"./Weather/LabeledSlider.js";import v from"./Weather/VisibleElements.js";import y from"./Weather/WeatherViewModel.js";const b={sunny:"brightness",cloudy:"partly-cloudy",rainy:"rain",snowy:"snow",foggy:"fog"};let w=class extends n{constructor(e){super(e),this.viewModel=new y,this.headingLevel=4,this.visibleElements=new v,this.iconClass=h.widgetIcon,this._renderWeatherTypeButton=e=>{const o=this.viewModel,t=this.messages[e].label,r=o.state===u.Disabled,s=!r&&o.current.type===e;return d("calcite-button",{appearance:s?"solid":"outline","aria-checked":s?"true":"false",color:s?"blue":"neutral",disabled:r,"icon-start":b[e],key:`${e}-type-button`,label:t,role:"radio",scale:"l",title:t,onclick:()=>{s||o.setWeatherByType(e)}})},this._memoizedCallbacks=t((e=>({onCloudCoverChange:o=>{"cloudCover"in e&&(e.cloudCover=o)},onPrecipitationChange:o=>{"precipitation"in e&&(e.precipitation=o)},onFogStrengthChange:o=>{"fogStrength"in e&&(e.fogStrength=o)},onSnowCoverChange:e=>{this.viewModel.setSnowCoverEnabled(e.target.checked)}})))}render(){const e=this.viewModel.state===u.Disabled;return d("div",{class:this.classes(h.base,h.esriWidget,e&&h.esriWidgetDisabled),role:"region","aria-label":this.messages.widgetLabelAccessible},this._renderContent())}loadDependencies(){return Promise.all([import("@esri/calcite-components/dist/components/calcite-button.js"),import("@esri/calcite-components/dist/components/calcite-checkbox.js"),import("@esri/calcite-components/dist/components/calcite-icon.js"),import("@esri/calcite-components/dist/components/calcite-label.js")])}get view(){return this.viewModel?.view}set view(e){this.viewModel&&(this.viewModel.view=e)}get label(){return this.messages?.widgetLabel??""}set label(e){this._overrideIfSome("label",e)}get _errorMessage(){const e=this.messages.error;switch(this.viewModel.error){case g.LocalScene:return e.localScene;case g.NoAtmosphere:return e.noAtmosphere;case g.UnsupportedView:return e.unsupported;default:return null}}get _warningMessage(){if(this.viewModel.error===g.NotVisible){return o(this.view)&&"3d"===this.view?.type&&this.view.environment.atmosphereEnabled?this.messages.error.notVisible:null}return null}_renderContent(){const e=this.messages,t=this._warningMessage,r=this.viewModel.state===u.Error;return d(p,null,this.visibleElements.header&&d(a,{level:this.headingLevel},e.widgetLabel),r&&d("div",{key:"error",class:h.error},this._errorMessage),d("div",{key:"content",class:l({[h.content]:!0,[h.hasError]:r})},d("div",{class:h.selector,role:"radiogroup","aria-label":e.weatherType},i.map(this._renderWeatherTypeButton)),d("div",{class:h.options},this._renderOptions()),o(t)&&this._renderWarning(t)))}_renderOptions(){const{viewModel:e,messages:o}=this,t=e.state===u.Disabled,r=e.current,s=this._memoizedCallbacks(r);switch(r.type){case"sunny":return d(m,{key:"sunny-cover",disabled:t,label:o.sunny.cloudCover,value:r.cloudCover,onChange:s.onCloudCoverChange});case"cloudy":return d(m,{key:"cloudy-cover",disabled:t,label:o.cloudy.cloudCover,value:r.cloudCover,onChange:s.onCloudCoverChange});case"rainy":return d(p,null,d(m,{key:"rainy-cover",disabled:t,label:o.rainy.cloudCover,value:r.cloudCover,onChange:s.onCloudCoverChange}),d(m,{key:"rainy-precipitation",disabled:t,label:o.rainy.precipitation,value:r.precipitation,onChange:s.onPrecipitationChange}));case"snowy":return d(p,null,d(m,{key:"snowy-cloud-cover",disabled:t,label:o.snowy.cloudCover,value:r.cloudCover,onChange:s.onCloudCoverChange}),d(m,{key:"snowy-precipitation",disabled:t,label:o.snowy.precipitation,value:r.precipitation,onChange:s.onPrecipitationChange}),d("calcite-label",{key:"snow-cover",scale:"s",disabled:t,layout:"inline",title:o.snowy.snowCoverTooltip},d("calcite-checkbox",{checked:"enabled"===r.snowCover,onCalciteCheckboxChange:s.onSnowCoverChange}),o.snowy.snowCover));case"foggy":return d(m,{key:"foggy-cover",disabled:t,label:o.foggy.fogStrength,value:r.fogStrength,onChange:s.onFogStrengthChange})}}_renderWarning(e){return d("div",{key:"warning",class:h.warning},d("calcite-icon",{icon:"exclamation-mark-triangle",scale:"s"}),e)}};e([r()],w.prototype,"viewModel",void 0),e([r()],w.prototype,"view",null),e([r()],w.prototype,"headingLevel",void 0),e([r({type:v,nonNullable:!0})],w.prototype,"visibleElements",void 0),e([r()],w.prototype,"iconClass",void 0),e([r()],w.prototype,"label",null),e([r(),c("esri/widgets/Weather/t9n/Weather")],w.prototype,"messages",void 0),e([r()],w.prototype,"_errorMessage",null),e([r()],w.prototype,"_warningMessage",null),w=e([s("esri.widgets.Weather")],w);const C=w;export{C as default};