UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 3.21 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{_ as t}from"../../chunks/tslib.es6.js";import{ignoreAbortErrors as i,debounce as o,isAbortError as r}from"../../core/promiseUtils.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 a from"../support/GeolocationPositioning.js";const n=15e3;let c=class extends a{constructor(t){super(t),this._watchId=void 0,this._trackStartingTimeoutId=void 0,this._settingPosition=null,this._trackController=null,this.error=void 0,this.positionFilterFunction=null}destroy(){this._stopTracking()}get state(){return this._geolocationUsable?this.view&&!this.view.ready?"disabled":this._settingPosition||void 0!==this._trackStartingTimeoutId?"waiting":this.tracking?"tracking":null!=this.error?"error":"ready":"feature-unsupported"}get tracking(){return void 0!==this._watchId}start(){"disabled"!==this.state&&"feature-unsupported"!==this.state&&this._startTracking()}stop(){"disabled"!==this.state&&"feature-unsupported"!==this.state&&this._stopTracking()}_stopWatchingPosition(){void 0!==this._watchId&&(navigator.geolocation.clearWatch(this._watchId),this._watchId=void 0)}_stopTracking(){this._abortTrack(),this._clearWaitingTimer(),this._stopWatchingPosition(),this._clearGraphic()}_startTracking(){this._stopTracking();const t=o((async t=>{this._abortTrack();const i=new AbortController;this._trackController=i;const{timestamp:o,coords:s}=t,e={timestamp:o,coords:{...s}};this.error=void 0;try{if("function"==typeof this.positionFilterFunction&&!this.positionFilterFunction.call(null,{position:e}))return;if(await this.updatePosition(t,i),this._trackController!==i)return;this._clearWaitingTimer(),this._addGraphic(),this.emit("track",{position:t}),this._trackController=null}catch(a){if(r(a))return;throw this._trackController=null,this._emitError(a),this._clearWaitingTimer(),a}}),0);this._watchId=navigator.geolocation.watchPosition((o=>{this._settingPosition=t(o).catch(i)}),this._handleWatchPositionError.bind(this),this.geolocationOptions??void 0),this._trackStartingTimeoutId=setTimeout((()=>{this._trackStartingTimeoutId=void 0}),n)}_handleWatchPositionError(t){t.code===t.PERMISSION_DENIED&&this._stopTracking(),this._emitError(t)}_abortTrack(){this._trackController?.abort(),this._trackController=null}_clearWaitingTimer(){clearTimeout(this._trackStartingTimeoutId),this._trackStartingTimeoutId=void 0,this._settingPosition=null}_emitError(t){this.error=t,this.emit("track-error",{error:t})}};t([s()],c.prototype,"_watchId",void 0),t([s()],c.prototype,"_trackStartingTimeoutId",void 0),t([s()],c.prototype,"_settingPosition",void 0),t([s()],c.prototype,"error",void 0),t([s()],c.prototype,"positionFilterFunction",void 0),t([s({readOnly:!0})],c.prototype,"state",null),t([s({readOnly:!0})],c.prototype,"tracking",null),t([s()],c.prototype,"start",null),t([s()],c.prototype,"stop",null),c=t([e("esri.widgets.Track.TrackViewModel")],c);const h=c;export{h as default};