UNPKG

@arcgis/map-components

Version:
2 lines 6.4 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */ import h from"./WIL4XDDC.js";import{a as P}from"./4TLYAVND.js";import g from"./HFRXDFTO.js";import"./PC4PAQXQ.js";import e from"./KA7BM2DQ.js";import{a as y}from"./HZFVK34O.js";import{a as E}from"./54VXNFQ4.js";import c from"./LKOVDQTE.js";import b from"./OAWV35F7.js";import{h as k}from"./AKBXFBDL.js";import"./LMBRORN7.js";import a from"./5E6WEUZS.js";import{d as w}from"./PBSJQPB2.js";import{O as v,P as m,R as f,U as _,a as u,b as d,x as p}from"./WUJCCZQC.js";import"./3TTFCHAA.js";export default $arcgis.t(([{watch:O},{property:a,subclass:C},,,,M,{d:b,f:T},{b:I}])=>{var $=u`.arcgis-button{--calcite-icon-color: var(--calcite-color-text-3);--calcite-button-background-color: var(--calcite-color-foreground-1);color:var(--calcite-color-text-3);line-height:var(--calcite-font-line-height-relative-tight);calcite-button{--calcite-offset-invert-focus: 1}display:flex;flex-flow:column;cursor:pointer;background-color:var(--calcite-color-foreground-1);font-size:var(--calcite-font-size);:hover{--calcite-icon-color: var(--calcite-color-text-1);--calcite-button-background-color: var(--calcite-color-transparent-hover)}}:host{width:fit-content;height:fit-content}`,F=Object.defineProperty,x=Object.getOwnPropertyDescriptor,e=(r,t,s,c)=>{for(var i=c>1?void 0:c?x(t,s):t,h=r.length-1,l;h>=0;h--)(l=r[h])&&(i=(c?l(t,s,i):l(i))||i);return c&&i&&F(t,s,i),i},W=15e3,o=class extends I{constructor(r){super(r)}destroy(){this._stopTracking()}get state(){return this._geolocationUsable?this.view&&!this.view.ready?"disabled":this._settingPosition||this._trackStartingTimeoutId!==void 0?"waiting":this.tracking?"tracking":this.error!=null?"error":"ready":"feature-unsupported"}get tracking(){return this._watchId!==void 0}start(){this.state==="disabled"||this.state==="feature-unsupported"||this._startTracking()}stop(){this.state==="disabled"||this.state==="feature-unsupported"||this._stopTracking()}_stopWatchingPosition(){this._watchId!==void 0&&(navigator.geolocation.clearWatch(this._watchId),this._watchId=void 0)}_stopTracking(){this._abortTrack(),this._clearWaitingTimer(),this._stopWatchingPosition(),this._clearGraphic()}_startTracking(){this._stopTracking();let r=P(async t=>{this._abortTrack();let s=new AbortController;this._trackController=s;let{timestamp:c,coords:i}=t,h=i.toJSON(),l={timestamp:c,coords:h};this.error=void 0;try{let n=this.positionFilterFunction;if(typeof n=="function"&&!n({position:l})||(await this.updatePosition(t,s),this._trackController!==s))return;this._clearWaitingTimer(),this._addGraphic(),this.currentPosition=t,this._trackController=void 0}catch(n){if(b(n))return;throw this._trackController=void 0,this.error=n,this._clearWaitingTimer(),n}},0);this._watchId=navigator.geolocation.watchPosition(t=>{this._settingPosition=r(t)?.catch(T)},this._handleWatchPositionError.bind(this),this.geolocationOptions??void 0),this._trackStartingTimeoutId=setTimeout(()=>{this._trackStartingTimeoutId=void 0},W)}_handleWatchPositionError(r){r.code===r.PERMISSION_DENIED&&this._stopTracking(),this.error=r}_abortTrack(){this._trackController?.abort(),this._trackController=void 0}_clearWaitingTimer(){clearTimeout(this._trackStartingTimeoutId),this._trackStartingTimeoutId=void 0,this._settingPosition=void 0}};e([a()],o.prototype,"_watchId",2);e([a()],o.prototype,"_trackStartingTimeoutId",2);e([a()],o.prototype,"_settingPosition",2);e([a()],o.prototype,"currentPosition",2);e([a()],o.prototype,"error",2);e([a()],o.prototype,"positionFilterFunction",2);e([a({readOnly:!0})],o.prototype,"state",1);e([a({readOnly:!0})],o.prototype,"tracking",1);e([a()],o.prototype,"start",1);e([a()],o.prototype,"stop",1);o=e([C("map-components.track.TrackViewModel")],o);var G=M(o),g=class extends v{constructor(){super(...arguments),this.messages=y(),this.viewModel=G(this),this.view=this.viewModel.view,this.autoDestroyDisabled=!1,this.currentPosition=this.viewModel.currentPosition,this.error=this.viewModel.error,this.geolocationOptions=this.viewModel.geolocationOptions,this.goToOverride=this.viewModel.goToOverride,this.goToLocationDisabled=this.viewModel.goToLocationEnabled,this.graphic=this.viewModel.graphic,this.icon="compass-north-circle",this.positionFilterFunction=this.viewModel.positionFilterFunction,this.rotationDisabled=this.viewModel.rotationEnabled,this.scale=this.viewModel.scale,this.state=this.viewModel.state,this.tracking=this.viewModel.tracking,this.visualScale="m",this.arcgisComplete=p(),this.arcgisError=p(),this.arcgisPropertyChange=k()("state"),this.arcgisReady=p()}static{this.properties={view:0,autoDestroyDisabled:5,currentPosition:0,error:0,geolocationOptions:0,goToOverride:0,goToLocationDisabled:7,graphic:0,icon:1,label:1,messageOverrides:0,positionFilterFunction:0,referenceElement:1,rotationDisabled:5,scale:9,state:0,tracking:36,visualScale:1}}static{this.styles=$}async destroy(){await this.manager.destroy()}async start(){this.viewModel.start()}async stop(){this.viewModel.stop()}loaded(){this.manager.onLifecycle(()=>[O(()=>this.viewModel.error,t=>{this.arcgisError.emit({error:t})}),O(()=>this.viewModel.currentPosition,t=>{this.arcgisComplete.emit({position:t})})])}_localizeError(t){if(t instanceof GeolocationPositionError)return t.code===GeolocationPositionError.PERMISSION_DENIED?this.messages?.permissionError:t.code===GeolocationPositionError.TIMEOUT?this.messages?.timeoutError:this.messages?.positionUnavailable;if(t instanceof Error)return t.message}_toggleTracking(){if(!this.viewModel)return;let{state:t}=this.viewModel;if(!(t==="feature-unsupported"||t==="disabled")){if(t==="tracking"||t==="waiting"){this.viewModel.stop();return}this.viewModel.start()}}render(){let{viewModel:t,messages:s,icon:c}=this,i=t?.state,h=i==="tracking",l=this._localizeError(this.viewModel?.error),n=(h?s?.stopTracking:s?.startTracking)??"",S=i==="feature-unsupported",D=(i==="tracking"?"pause":void 0)??c??void 0;return d`<div class=${m(w("root",E.arcgisButton))}>${!S&&d`<calcite-button .disabled=${i==="disabled"} .iconStart=${D} kind=neutral .label=${n} .loading=${i==="waiting"} @click=${this._toggleTracking} .scale=${this.visualScale} title=${n??f}></calcite-button>`||""}${l?d`<calcite-tooltip open overlay-positioning=fixed .referenceElement=${this.el}>${l}</calcite-tooltip>`:null}</div>`}};_("arcgis-track",g);return g},"core/reactiveUtils","core/accessorSupport/decorators",a,b,c,e,g,h)