@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 4.41 kB
JavaScript
import{UnknownTimeZone as e,ArcadeDateError as t,ArcadeDateErrorCodes as i}from"./ArcadeDate.js";import n from"../layers/support/FieldsIndex.js";import a from"../time/TimeReference.js";import{Zone as r,SystemZone as s,FixedOffsetZone as d,IANAZone as o}from"luxon";import{convertLegacyTimeZone as f}from"../time/timeReferenceUtils.js";function l(e){return e instanceof a}function m(n){if(!n)return null;if(l(n)&&(n=c(n.toJSON())),n instanceof r)return n;if("unknown"===n.toLowerCase())return e.instance;if("system"===n.toLowerCase())return s.instance;if("utc"===n.toLowerCase())return d.utcInstance;if(/^[\+\-]?[0-9]{1,2}([:][0-9]{2})?$/.test(n)){const e=d.parseSpecifier("UTC"+(n.startsWith("+")||n.startsWith("-")?"":"+")+n);if(e)return e}const a=o.create(n);if(!a.isValid)throw new t(i.TimeZoneNotRecognised);return a}function c(e){return e?.timeZoneIANA?e?.timeZoneIANA:e?.timeZone?f(e,""):""}class T{constructor(){this.dateTimeReferenceMetaData=null,this._fieldTimeZoneIndex={},this._fieldIndex=null,this._ianaPreferred=null,this._ianaTimeInfo=null,this._ianaEditFields=null,this._ianaLayerDateFields=null}static create(e,t){const i=new T;return i.dateTimeReferenceMetaData=t,i._fieldIndex=e instanceof n?e:new n(e),i}static createFromLayer(e){if(!e)return null;if(!e.fieldsIndex)return!e.declaredClass&&e.fields?T.create(e.fields,e):null;const t=new T;return t._fieldIndex=e.fieldsIndex,t.dateTimeReferenceMetaData={timeInfo:e?.timeInfo?.toJSON()??null,editFieldsInfo:e?.editFieldsInfo?.toJSON()??null,dateFieldsTimeReference:e?.dateFieldsTimeReference?.toJSON()??null,preferredTimeReference:e?.preferredTimeReference?.toJSON()??null,datesInUnknownTimezone:!0===e?.datesInUnknownTimezone},t}fieldTimeZone(e){const t=this._fieldIndex?.get(e);if(!t)return null;if("date"!==t.type&&"esriFieldTypeDate"!==t.type)return null;const i=this._fieldTimeZoneIndex[t.name];if(void 0!==i)return i;const n=[{field:this.dateTimeReferenceMetaData?.editFieldsInfo?.creationDateField,timeReference:this.dateTimeReferenceMetaData?.editFieldsInfo?.dateFieldsTimeReference,isunknown:!0===this.dateTimeReferenceMetaData?.datesInUnknownTimezone},{field:this.dateTimeReferenceMetaData?.editFieldsInfo?.editDateField,timeReference:this.dateTimeReferenceMetaData?.editFieldsInfo?.dateFieldsTimeReference,isunknown:!0===this.dateTimeReferenceMetaData?.datesInUnknownTimezone},{field:this.dateTimeReferenceMetaData?.timeInfo?.startTimeField,timeReference:this.dateTimeReferenceMetaData?.timeInfo?.timeReference,isunknown:!0===this.dateTimeReferenceMetaData?.datesInUnknownTimezone},{field:this.dateTimeReferenceMetaData?.timeInfo?.endTimeField,timeReference:this.dateTimeReferenceMetaData?.timeInfo?.timeReference,isunknown:!0===this.dateTimeReferenceMetaData?.datesInUnknownTimezone}];for(const r of n)if(r.field===t.name){const e=this.convertToIANA(r.timeReference,r.isunknown);return this._fieldTimeZoneIndex[t.name]=e,e}const a=this.convertToIANA(this.dateTimeReferenceMetaData?.dateFieldsTimeReference,this.dateTimeReferenceMetaData?.datesInUnknownTimezone);return this._fieldTimeZoneIndex[t.name]=a,a}convertToIANA(e,t){return t?"unknown":c(e)}get layerPreferredTimeZone(){if(null!==this._ianaPreferred)return this._ianaPreferred;this._ianaPreferred="";const e=this.dateTimeReferenceMetaData?.preferredTimeReference;return this._ianaPreferred=this.convertToIANA(e,!0===this.dateTimeReferenceMetaData?.datesInUnknownTimezone),this._ianaPreferred}get layerTimeInfoTimeZone(){if(null!==this._ianaTimeInfo)return this._ianaTimeInfo;this._ianaTimeInfo="";const e=this.dateTimeReferenceMetaData?.timeInfo?.timeReference;return this._ianaTimeInfo=this.convertToIANA(e,!1),this._ianaTimeInfo}get layerEditFieldsTimeZone(){if(null!==this._ianaEditFields)return this._ianaEditFields;this._ianaEditFields="";const e=this.dateTimeReferenceMetaData?.editFieldsInfo?.dateFieldsTimeReference;return this._ianaEditFields=this.convertToIANA(e,this.dateTimeReferenceMetaData?.datesInUnknownTimezone),this._ianaEditFields}get layerDateFieldsTimeZone(){if(null!==this._ianaLayerDateFields)return this._ianaLayerDateFields;this._ianaLayerDateFields="";const e=this.dateTimeReferenceMetaData?.dateFieldsTimeReference;return this._ianaLayerDateFields=this.convertToIANA(e,!0===this.dateTimeReferenceMetaData?.datesInUnknownTimezone),this._ianaLayerDateFields}}export{T as DateTimeReferenceFieldIndex,m as convertTimeReference,c as convertToIANA};