UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 2.95 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{isSome as t}from"../core/arrayUtils.js";import{clone as e}from"../core/lang.js";import{offsetDate as n}from"../core/timeUtils.js";import{T as i}from"../chunks/TimeExtent.js";import{isWebMap as r}from"../webmap/utils.js";import{isWebScene as l}from"../webscene/utils.js";function s(t){return void 0!==t.timeInfo}async function u(t,e){return t.widgets?.timeSlider?.fullTimeExtent??a(t.allLayers,e)}function o(t){const e=t.numThumbs??2,n=t.currentTimeExtent;if(n){const{start:t,end:i}=n;return null!=t&&null!=i&&t.getTime()===i.getTime()?"instant":2===e?"time-window":null==t||0===t.getTime()?"cumulative-from-start":"cumulative-from-end"}return 2===e?"time-window":"cumulative-from-start"}function m(t){const{numStops:n,stopInterval:i,stops:r}=t;return r?{dates:e(r)}:i?{interval:i.clone()}:{count:n??5}}async function a(e,n){if(0===e.length)return i.allTime;await Promise.all(e.map((t=>t.load({signal:n}))));const r=e.filter(s),l=e.filter((t=>!s(t)&&null!=t.visibilityTimeExtent));if(0===r.length&&0===l.length)return i.allTime;const u=[],o=[];for(const t of r)"feature"!==t?.type&&"map-image"!==t?.type||!t.timeInfo?.hasLiveData?o.push(t):u.push(t);const m=t=>null==t||t.isAllTime,a=[...o.map((t=>{const e=t.timeInfo?.fullTimeExtent,{visibilityTimeExtent:n}=t;return e?.intersection(n)??n})),...l.map((t=>t.visibilityTimeExtent))];if(a.some(m))return i.allTime;const f=u.map((async t=>{const e=(await t.fetchRecomputedExtents({signal:n}))?.timeExtent??t.timeInfo?.fullTimeExtent,{visibilityTimeExtent:i}=t;return e?.intersection(i)??i})),c=(await Promise.allSettled(f)).map((t=>"fulfilled"===t.status?t.value:null));if(c.some(m))return i.allTime;const d=[...c,...a].filter(t);if(0===d.length)return i.allTime;return d.reduce(((t,e)=>t.union(e)))}function f(t,e){const n=t.currentTimeExtent;if(!n)return null;const{start:r,end:l}=n,s=r??l??null;switch(e){case"time-window":return new i({start:r,end:l});case"cumulative-from-start":return new i({start:null,end:s});case"cumulative-from-end":return new i({start:s,end:null});case"instant":return new i({start:s,end:s})}}async function c(t,e){if(!r(t)&&!l(t))return null;await t.load({signal:e});const n=t?.widgets?.timeSlider;if(!n)return null;const i=await u(t,e),s=n.loop,a=o(n);return{fullTimeExtent:i,loop:s,mode:a,playRate:n.stopDelay??2e3,stops:m(n),timeExtent:f(n,a)}}function d(t){if(!t)return t;const{start:e,end:r}=t;return new i({start:null!=e?n(e,-e.getTimezoneOffset(),"minutes"):e,end:null!=r?n(r,-r.getTimezoneOffset(),"minutes"):r})}function p(t){if(!t)return t;const{start:e,end:r}=t;return new i({start:null!=e?n(e,e.getTimezoneOffset(),"minutes"):e,end:null!=r?n(r,r.getTimezoneOffset(),"minutes"):r})}export{a as getTimeExtentFromLayers,c as getTimeSliderSettingsFromWebDocument,p as toLocalTimeExtent,d as toUTCTimeExtent};