UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) • 17.8 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import{__decorate as e}from"tslib";import t from"../core/Collection.js";import{deprecateWidget as o}from"../core/deprecate.js";import i from"../core/Logger.js";import{maybeProperty as s}from"../core/maybe.js";import{property as n,cast as r,subclass as l}from"../core/accessorSupport/decorators.js";import{pointSymbolTypes as a}from"../symbols/support/typeUtils.js";import p from"./Widget.js";import c from"./CoordinateConversion/CoordinateConversionViewModel.js";import d from"./CoordinateConversion/support/Conversion.js";import u from"./CoordinateConversion/support/Format.js";import{loadCalciteComponents as h}from"./support/componentsUtils.js";import{globalCss as _}from"./support/globalCss.js";import{Heading as m}from"./support/Heading.js";import{legacyIcon as v}from"./support/legacyIcon.js";import{messageBundle as g,accessibleHandler as b,tsx as y,isRTL as C}from"./support/widget.js";import{storeNode as w}from"./support/widgetUtils.js";const f="esri-coordinate-conversion",T={base:f,captureMode:`${f}--capture-mode`,noBasemap:`${f}--no-basemap`,popup:`${f}__popup`,clipboardPopup:`${f}__clipboard-popup`,conversionList:`${f}__conversion-list`,conversionRow:`${f}__row`,coordDisplay:`${f}__display`,expandButton:`${f}__expand-button`,expanded:`${f}__conversions-view--expanded`,expandDown:`${f}__conversions-view--expand-down`,expandUp:`${f}__conversions-view--expand-up`,conversionsView:`${f}__conversions-view`,rowSelect:`${f}__select-row`,toolDisplay:`${f}__tools`,modeToggle:`${f}__mode-toggle`,rowButton:`${f}__row-button`,coordinateInput:`${f}__input-coordinate`,inputForm:`${f}__input-form`,inputFormGroup:`${f}__input-group`,inputSelect:`${f}__input-select`,sectionHeading:`${f}__heading`,patternInput:`${f}__pattern-input`,settings:`${f}__settings`,settingsFormGroup:`${f}__settings-group`,settingsFormGroupHorizontal:`${f}__settings-group-horizontal`,previewCoordinate:`${f}__preview-coordinate`},I={settingsButton:!0,inputButton:!0,captureButton:!0,expandButton:!0},x=750,P=2500;let M=class extends p{constructor(e,t){super(e,t),this._popupMessage=null,this._popupTimeoutId=void 0,this._clipboardPopupTimeoutId=void 0,this._coordinateInput=null,this._badInput=!1,this._goToEnabled=!1,this._conversionFormat=null,this._settingsFormat=null,this._previewConversion=null,this._expanded=!1,this._clipboardPopupVisible=!1,this._popupVisible=!1,this._settingsVisible=!1,this._inputVisible=!1,this.headingLevel=4,this.messages=null,this.messagesCommon=null,this.orientation="auto",this.viewModel=new c,this.visibleElements={...I},o(i.getLogger(this),"CoordinateConversion","arcgis-coordinate-conversion",{version:"4.34"})}loadDependencies(){return h({button:()=>import("@esri/calcite-components/dist/components/calcite-button"),checkbox:()=>import("@esri/calcite-components/dist/components/calcite-checkbox"),input:()=>import("@esri/calcite-components/dist/components/calcite-input"),label:()=>import("@esri/calcite-components/dist/components/calcite-label"),option:()=>import("@esri/calcite-components/dist/components/calcite-option"),select:()=>import("@esri/calcite-components/dist/components/calcite-select")})}get conversions(){return this.viewModel.conversions}set conversions(e){this.viewModel.conversions=e}get currentLocation(){return this.viewModel.currentLocation}set currentLocation(e){this.viewModel.currentLocation=e}get formats(){return this.viewModel.formats}set formats(e){this.viewModel.formats=e}get goToOverride(){return this.viewModel.goToOverride}set goToOverride(e){this.viewModel.goToOverride=e}get icon(){return"coordinate-system"}set icon(e){this._overrideIfSome("icon",e)}get label(){return this.messages?.widgetLabel??""}set label(e){this._overrideIfSome("label",e)}get mode(){return this.viewModel.mode}set mode(e){this.viewModel.mode=e}set multipleConversions(e){!1===e&&(this._expanded=!1,this.conversions.splice(1,this.conversions.length-1)),this._set("multipleConversions",e)}get multipleConversions(){const e=this._get("multipleConversions");return"boolean"!=typeof e||e}get locationSymbol(){return this.viewModel.locationSymbol}set locationSymbol(e){this.viewModel.locationSymbol=e}get storageEnabled(){return this.viewModel.storageEnabled}set storageEnabled(e){this.viewModel.storageEnabled=e}get storageType(){return this.viewModel.storageType}set storageType(e){this.viewModel.storageType=e}get view(){return this.viewModel.view}set view(e){this.viewModel.view=e}castVisibleElements(e){return{...I,...e}}reverseConvert(e,t){return this.viewModel.reverseConvert(e,t)}render(){const e=this.viewModel?.state,t="disabled"===e?y("div",{key:"esri-coordinate__no-basemap"},this.messages?.noBasemap):null,o=!t&&this._inputVisible?this._renderInputForm():null,i=!t&&this._settingsVisible?this._renderSettings():null,s=t||o||i?null:this._renderConversionsView(),n=this._popupVisible?this._renderPopup():null,r={[T.captureMode]:"capture"===this.mode,[_.disabled]:"loading"===e,[T.noBasemap]:"disabled"===e};return y("div",{class:this.classes(T.base,_.widget,r)},n,t,s,i,o)}_addConversion(e){const t=e.target,o=t.selectedOption.value,i=$(t);if(null==o||null==i)return;const s=new d({format:o});t.value="default",i>=0?(this.conversions.removeAt(i),this.conversions.add(s,i)):this.conversions.add(s)}_findSettingsFormat(){return this._settingsFormat||this.conversions.reduceRight((e,t)=>{const o=t.format;return o?.hasDisplayProperties?o:e},null)||this.formats.find(e=>e.hasDisplayProperties)}_hidePopup(){this._popupTimeoutId&&(clearTimeout(this._popupTimeoutId),this._popupTimeoutId=void 0),this._popupVisible=!1,this._popupMessage=null,this.scheduleRender()}_hideClipboardPopup(){this._clipboardPopupTimeoutId&&(clearTimeout(this._clipboardPopupTimeoutId),this._clipboardPopupTimeoutId=void 0),this._clipboardPopupVisible=!1,this.scheduleRender()}_onConvertComplete(){this._inputVisible=!1,this._coordinateInput.value=""}_onCopy(e){const t=V(e.currentTarget)?.displayCoordinate;null!=t&&(e.clipboardData?.setData("text/plain",t),this._showClipboardPopup(),e.preventDefault())}_processUserInput(e){const t=s(e,"key"),o=this.viewModel;if("Enter"!==t&&t)this._badInput&&(this._badInput=!1);else{const e=this._conversionFormat||this.conversions.at(0).format;if(!e)return;const t=this._coordinateInput.value;this._reverseConvert(t,e).then(e=>{"capture"===this.mode?o.resume():this.mode="capture",this.currentLocation=e,o.setLocation(e),this._onConvertComplete()}).catch(e=>{i.getLogger(this).error(e),this._showPopup(this.messages?.invalidCoordinate),this._badInput=!0})}}async _reverseConvert(e,t){const o=this.viewModel,s=await t.reverseConvert(e);return this._goToEnabled&&s&&o.goToLocation(s).catch(e=>{i.getLogger(this).warn(e),this._showPopup(this.messages?.locationOffBasemap)}),s}_setInputFormat(e){const t=e.target.selectedOption.value;null!=t&&(this._conversionFormat=t)}_setPreviewConversion(){const e=this._findSettingsFormat(),t=this.viewModel;if(e){const o=this.conversions.find(t=>t.format===e);this._previewConversion=new d({format:e,position:{location:this.currentLocation,coordinate:o?.position?.coordinate}}),this._previewConversion.position?.coordinate||t.previewConversion(this._previewConversion)}}_setSettingsFormat(e){const t=e.target.selectedOption.value;null!=t&&(this._settingsFormat=t,this._setPreviewConversion())}_showClipboardPopup(){this._clipboardPopupVisible?clearTimeout(this._clipboardPopupTimeoutId):this._clipboardPopupVisible=!0,this.scheduleRender(),this._popupTimeoutId=setTimeout(()=>{this._popupTimeoutId=void 0,this._hideClipboardPopup()},x)}_showPopup(e,t=P){this._popupMessage=e,this._popupVisible?clearTimeout(this._popupTimeoutId):this._popupVisible=!0,this.scheduleRender(),this._popupTimeoutId=setTimeout(()=>{this._popupTimeoutId=void 0,this._hidePopup()},t)}_toggleGoTo(){this._goToEnabled=!this._goToEnabled}_updateCurrentPattern(e){e.stopPropagation();const t=e.target,o=this._findSettingsFormat();o&&(o.currentPattern=t.value)}_renderConversion(e,t){const{messages:o}=this;if(!o)return y("li",null);const{format:i}=e,s=i?.label??"",n=`${this.id}__list-item-${t}`,r=`${s} ${o.conversionOutputSuffix}`,l=0===t,a=l||this._expanded,p=l?this._renderFirstConversion(e):this._renderTools(t,e,n),c=l&&!e.displayCoordinate?o.noLocation:e.displayCoordinate,d=y("div",{"aria-label":c,class:T.coordDisplay,"data-conversion":e,role:"listitem",tabIndex:0,title:c??""},c),u=this._renderOptions(this.formats.filter(e=>e!==i));return a?y("li",{"aria-label":r,class:T.conversionRow,id:n,key:e,role:"group",tabIndex:0,title:r},y("calcite-select",{"aria-controls":n,bind:this,class:T.rowSelect,"data-index":t,label:o.selectFormat,scale:"s",onCalciteSelectChange:this._addConversion},y("calcite-option",{label:s.toUpperCase(),selected:!0},s.toUpperCase()),u),d,p):null}_renderCopyButton(e){const t=this._clipboardPopupVisible&&this._renderClipboardPopup(),{messagesCommon:o}=this;return o?y("li",{"aria-label":o.copy,bind:this,class:this.classes(_.widgetButton,T.rowButton),"data-conversion":e,onclick:this._copyCoordinateOutput,oncopy:this._onCopy,onkeydown:this._copyCoordinateOutput,role:"button",tabIndex:0,title:o.copy},t,y("span",{"aria-hidden":"true",class:v.duplicate})):y("li",null)}_renderFirstConversion(e){const t=this.id,{messages:o,messagesCommon:i,multipleConversions:s,visibleElements:n}=this;if(!i||!o)return y("ul",null);const r="live"===this.mode?o.captureMode:o.liveMode,l=this._expanded?i.collapse:i.expand,a=e.displayCoordinate&&"capture"===this.mode?this._renderCopyButton(e):null,p=s&&n.expandButton&&this._renderIconButton({iconType:this._expanded?"chevron-down":"chevron-up",clickFunction:this._toggleExpand,classes:[T.expandButton],attributes:{"aria-controls":`${t}__${T.conversionList}`,label:l}}),c=!s&&n.captureButton&&this._renderIconButton({iconType:"live"===this.mode?"pin-tear":"pin-tear-f",clickFunction:this._toggleMode,classes:[T.modeToggle],attributes:{label:r}});return y("ul",{class:T.toolDisplay},a,p,c)}_renderInputForm(){const e=this._conversionFormat||this.conversions.at(0).format,t=this.formats.findIndex(t=>t.name===e?.name),o=this.id,i=`${o}__${T.coordinateInput}`,s=`${o}__${T.coordinateInput}__header`,n=this._renderOptions(this.formats,!0,t),{messages:r,messagesCommon:l,headingLevel:a}=this;if(!l||!r)return y("div",null);const p=this._renderIconButton({iconType:C(this.container)?"arrow-right":"arrow-left",clickFunction:this._toggleInputVisibility,attributes:{label:l.back}});return y("div",{"aria-labelledby":s,class:T.inputForm,key:"esri-coordinate-conversion__input-form",role:"search"},y("div",{class:T.sectionHeading},p,y(m,{class:_.heading,id:s,level:a},r.inputCoordTitle)),y("div",{class:T.inputFormGroup},y("calcite-select",{"aria-controls":i,bind:this,class:T.inputSelect,label:r.selectFormat,scale:"s",onCalciteSelectChange:this._setInputFormat},n),y("calcite-input",{afterCreate:w,"aria-labelledby":s,bind:this,class:T.coordinateInput,"data-format":e,"data-node-ref":"_coordinateInput",id:i,onkeydown:this._processUserInput,placeholder:r.inputCoordTitle,required:!0,scale:"s",spellcheck:!1,status:this._badInput?"invalid":"idle"})),y("div",{class:T.inputFormGroup},y("calcite-label",{layout:"inline",scale:"s"},y("calcite-checkbox",{bind:this,checked:this._goToEnabled,onCalciteCheckboxChange:this._toggleGoTo}),r.goTo),y("calcite-button",{appearance:"outline",bind:this,kind:"neutral",onclick:this._processUserInput,type:"button",width:"auto"},r.convert)))}_renderConversionsView(){const{messages:e}=this;if(!e)return y("div",null);const t=`${this.id}__${T.conversionList}`,o=this._renderPrimaryTools(),i=this._renderOptions(this.formats),s=this.conversions.map((e,t)=>this._renderConversion(e,t)).toArray(),n=this._expanded?y("div",{class:T.conversionRow},y("calcite-select",{"aria-controls":t,bind:this,"data-index":-1,label:e.addConversion,scale:"s",onCalciteSelectChange:this._addConversion},y("calcite-option",{disabled:!0,selected:!0,value:"default"},e.addConversion),i),o):null,r={[T.expanded]:this._expanded,[T.expandUp]:"expand-up"===this.orientation,[T.expandDown]:"expand-down"===this.orientation};return y("div",{class:this.classes(T.conversionsView,r),key:"esri-coordinate-conversion__main-view"},y("ul",{"aria-expanded":this._expanded?"true":"false",class:T.conversionList,id:t},s),n)}_renderOptions(e,t,o){const i=this.conversions.at(0),s=i.format?.name;return e.map((e,n)=>{const r=!(t||!i)&&(s===e.name||this.conversions.map(e=>e.format?.name).includes(e.name));return y("calcite-option",{disabled:r,key:e.name??"unnamed-format",label:e.label.toUpperCase(),selected:n===o,value:e},e.label)}).toArray()}_renderPopup(){return y("div",{class:T.popup,role:"alert"},this._popupMessage)}_renderClipboardPopup(){const{messages:e}=this;return e?y("div",{class:this.classes(T.popup,T.clipboardPopup),role:"alert"},e.copySuccessMessage):y("div",null)}_renderPrimaryTools(){const{messages:e,visibleElements:t}=this;if(!e)return y("ul",null);const o="live"===this.mode?e.captureMode:e.liveMode,i=t.inputButton&&this._renderIconButton({iconType:"pencil",clickFunction:this._toggleInputVisibility,attributes:{label:e.inputCoordTitle}}),s=t.captureButton&&this._renderIconButton({iconType:"live"===this.mode?"pin-tear":"pin-tear-f",clickFunction:this._toggleMode,classes:[T.modeToggle],attributes:{label:o}}),n=t.settingsButton&&this._renderIconButton({iconType:"gear",clickFunction:this._toggleSettingsVisibility,attributes:{label:e.settingsTitle}});return y("ul",{class:T.toolDisplay},i,s,n)}_renderSettings(){const e=this.id,t=`${e}__${T.patternInput}`,o=`${e}__${T.patternInput}__header`,i=`${e}__${T.previewCoordinate}`,s=this.formats.filter(e=>e.hasDisplayProperties),n=this._findSettingsFormat(),r=n?s.indexOf(n):-1,l=this._renderOptions(s,!0,r),a=n?.currentPattern,{messages:p,messagesCommon:c,headingLevel:d}=this;if(!c||!p)return y("div",null);const u=this._renderIconButton({iconType:C(this.container)?"arrow-right":"arrow-left",clickFunction:this._toggleSettingsVisibility,attributes:{label:c.back}}),h=this._renderIconButton({iconType:"reset",clickFunction:this._setDefaultPattern,attributes:{label:p.defaultPattern}});return y("div",{"aria-labelledby":o,class:T.settings,key:T.settings},y("div",{class:T.sectionHeading},u,y(m,{class:_.heading,id:o,level:d},p.settingsTitle)),y("div",{class:T.settingsFormGroup},y("label",{for:t},p.changeCoordinateDisplay),y("calcite-select",{bind:this,label:p.selectFormat,width:"full",onCalciteSelectChange:this._setSettingsFormat},l),y("div",{class:T.settingsFormGroupHorizontal},y("calcite-input",{"aria-controls":i,bind:this,class:T.patternInput,id:t,spellcheck:!1,type:"text",value:a,onCalciteInputInput:this._updateCurrentPattern}),h)),y("div",{class:T.settingsFormGroup},y("label",null,c.preview,y("div",{class:T.previewCoordinate,id:i,tabIndex:0},this._previewConversion?.displayCoordinate))))}_renderIconButton(e){const{iconType:t,clickFunction:o,classes:i,attributes:s}=e;return y("calcite-button",{appearance:"transparent",bind:this,class:this.classes(i),iconStart:t,kind:"neutral",onclick:o,onkeydown:o,...s})}_renderTools(e,t,o){const i=t.displayCoordinate&&"capture"===this.mode?this._renderCopyButton(t):null,{messages:s}=this;if(!s)return y("ul",null);const n=this._renderIconButton({iconType:"x",clickFunction:this._removeConversion,attributes:{"aria-controls":o,label:s.removeConversion,"data-index":e}});return y("ul",{class:T.toolDisplay,role:"listitem"},i,y("li",{class:this.classes(T.rowButton)},n))}_copyCoordinateOutput(e){const t=e.target;if(!("createTextRange"in document.body)){const e=window.getSelection(),o=document.createRange();o.selectNodeContents(t),e?.removeAllRanges(),e?.addRange(o)}document.execCommand("copy")}_removeConversion(e){const t=$(e.currentTarget);null!=t&&this.conversions.removeAt(t)}_setDefaultPattern(e){e.stopPropagation();const t=this._findSettingsFormat();t&&(t.currentPattern=t.defaultPattern)}_toggleExpand(){this._expanded=!this._expanded}_toggleInputVisibility(){this._inputVisible=!this._inputVisible,this._popupVisible&&this._hidePopup(),this._inputVisible?this.viewModel.pause():this.viewModel.resume()}_toggleMode(){this.mode="live"===this.mode?"capture":"live"}_toggleSettingsVisibility(){this._settingsVisible=!this._settingsVisible,this._popupVisible&&this._hidePopup(),this._settingsVisible?(this._setPreviewConversion(),this.viewModel.pause()):this.viewModel.resume()}};e([n()],M.prototype,"conversions",null),e([n()],M.prototype,"currentLocation",null),e([n({type:t.ofType(u)})],M.prototype,"formats",null),e([n()],M.prototype,"goToOverride",null),e([n()],M.prototype,"headingLevel",void 0),e([n()],M.prototype,"icon",null),e([n()],M.prototype,"label",null),e([n(),g("esri/widgets/CoordinateConversion/t9n/CoordinateConversion")],M.prototype,"messages",void 0),e([n(),g("esri/t9n/common")],M.prototype,"messagesCommon",void 0),e([n()],M.prototype,"mode",null),e([n()],M.prototype,"orientation",void 0),e([n()],M.prototype,"multipleConversions",null),e([n({types:a})],M.prototype,"locationSymbol",null),e([n()],M.prototype,"storageEnabled",null),e([n()],M.prototype,"storageType",null),e([n()],M.prototype,"view",null),e([n({type:c})],M.prototype,"viewModel",void 0),e([n()],M.prototype,"visibleElements",void 0),e([r("visibleElements")],M.prototype,"castVisibleElements",null),e([b()],M.prototype,"_copyCoordinateOutput",null),e([b()],M.prototype,"_removeConversion",null),e([b()],M.prototype,"_setDefaultPattern",null),e([b()],M.prototype,"_toggleExpand",null),e([b()],M.prototype,"_toggleInputVisibility",null),e([b()],M.prototype,"_toggleMode",null),e([b()],M.prototype,"_toggleSettingsVisibility",null),M=e([l("esri.widgets.CoordinateConversion")],M);const F=M;function $(e){return e["data-index"]}function V(e){return e["data-conversion"]}export{F as default};