UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 1.23 kB
import{unwrapOr as t,isNone as o,isSome as r,abortMaybe as l}from"../../../../core/maybe.js";import{isAbortError as s}from"../../../../core/promiseUtils.js";class a{constructor(t){this.schedule=t,this._abortController=null,this._loadStatus=e.LOADING,this._loadError=null,this._loader=null,this.logger=null}destroy(){this.abortLoad()}get loadStatus(){return this._loadStatus}load(r,l){return this._loadStatus===e.LOADED?(r&&r(),t(this._loader,Promise.resolve())):this._loadStatus===e.FAILED?(l&&l(this._loadError),t(this._loader,Promise.resolve())):(o(this._loader)&&(this._abortController=new AbortController,this._loader=this.doLoad(this._abortController.signal).then((()=>{this._abortController=null,this._loadStatus=e.LOADED}),(t=>{throw this._loadError=t,this._abortController=null,this._loadStatus=e.FAILED,!s(t)&&this.logger&&t.message&&this.logger.warn(t.message),t}))),this._loader.then(r,l).catch((()=>{})),this._loader)}abortLoad(){r(this._abortController)?this._abortController=l(this._abortController):this._loadStatus===e.LOADING&&(this._loadStatus=e.FAILED),this._loader=null}}var e;!function(t){t[t.LOADING=0]="LOADING",t[t.LOADED=1]="LOADED",t[t.FAILED=2]="FAILED"}(e||(e={}));export{e as LoadStatus,a as Loadable};