@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 5.55 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{_ as e}from"../chunks/tslib.es6.js";import r from"../core/Collection.js";import o from"../core/Error.js";import t from"../core/Logger.js";import{MultiOriginJSONMixin as s}from"../core/MultiOriginJSONSupport.js";import{debounce as i}from"../core/promiseUtils.js";import{property as a}from"../core/accessorSupport/decorators/property.js";import{cast as n}from"../core/accessorSupport/decorators/cast.js";import"../core/has.js";import"../core/RandomLCG.js";import{reader as c}from"../core/accessorSupport/decorators/reader.js";import{subclass as p}from"../core/accessorSupport/decorators/subclass.js";import{writer as l}from"../core/accessorSupport/decorators/writer.js";import{OriginId as u}from"../core/accessorSupport/PropertyOrigin.js";import d from"./Layer.js";import{BlendLayer as m}from"./mixins/BlendLayer.js";import{OperationalLayer as f}from"./mixins/OperationalLayer.js";import{PortalLayer as y}from"./mixins/PortalLayer.js";import{ScaleRangeLayer as h}from"./mixins/ScaleRangeLayer.js";import g from"./support/ControlPointsGeoreference.js";import S from"./support/ImageElement.js";import w from"./support/LocalMediaElementSource.js";import{isWritingLayerFromItemToWebDocument as v}from"./support/mediaUtils.js";import j from"./support/VideoElement.js";import{isMediaElement as O}from"../support/mediaLayerUtils.js";import{SaveOperationType as L}from"../webdoc/interfaces.js";let b=class extends(m(h(f(y(s(d)))))){constructor(e){super(e),this.effectiveSource=null,this.georeference=null,this.copyright=null,this.operationalLayerType="MediaLayer",this.spatialReference=null,this.type="media",this._debouncedSaveOperations=i((async(e,r,o)=>{const{save:t,saveAs:s}=await import("./save/mediaLayerUtils.js");switch(e){case L.SAVE:return t(this,r);case L.SAVE_AS:return s(this,o,r)}})),this.source=new w}load(e){return this.addResolvingPromise(this._doLoad(e)),Promise.resolve(this)}async _doLoad(e){await this.loadFromPortal({supportedTypes:["Media Layer"]},e);let t=this.source;if(!t)throw new o("media-layer:source-missing","Set 'MediaLayer.source' before loading the layer.");const s=this._getSourceOverride(t,this.georeference);s&&(this.setAtOrigin("source",s,"web-map"),this.setAtOrigin("source",s,"web-scene"),t=s);const i=O(t)?new w({elements:new r([t])}):t;this._set("effectiveSource",i),this.spatialReference&&(i.spatialReference=this.spatialReference),await i.load(e),this.spatialReference=i.spatialReference}destroy(){this.effectiveSource?.destroy(),this.effectiveSource!==this.source&&this.source?.destroy()}readGeoreference(e,r){return e&&"itemId"in r&&r.itemId?e:void 0}get fullExtent(){return this.loaded?this.effectiveSource.fullExtent:null}get source(){return this._get("source")}set source(e){"loaded"!==this.loadStatus&&"failed"!==this.loadStatus?this._set("source",e):t.getLogger(this).error("#source","source cannot be changed after the layer is loaded.")}castSource(e){return e?Array.isArray(e)?new w({elements:new r(e)}):e instanceof r?new w({elements:e}):e:null}readSource(e,r,o){if("itemId"in r&&r.itemId)return;const t=this._createSource(r);return t?.read(r,o),t}writeSource(e,r,t,s){if(e&&e instanceof w){const r=e.elements.length;if(1!==r)return void(s?.messages&&s.messages.push(new o("media-layer:unsupported-source",`local media element source can only be persisted if it contains exactly one ImageElement, but it has ${r}.`)));e=e.elements.at(0)}O(e)?e.write(r,s):s?.messages&&(e?s.messages.push(new o("media-layer:unsupported-source","only media elements of type 'ImageElement' or 'VideoElement' can be persisted")):s.messages.push(new o("media-layer:unsupported-source","the media layer is missing a source")))}async save(e){return this._debouncedSaveOperations(L.SAVE,e)}async saveAs(e,r){return this._debouncedSaveOperations(L.SAVE_AS,r,e)}_createSource(e){if("mediaType"in e)switch(e.mediaType){case"image":return new S;case"video":return new j}return null}_getSourceOverride(e,r){if(O(e)&&this.originIdOf("source")===u.PORTAL_ITEM&&r&&(this.originIdOf("georeference")===u.WEB_MAP||this.originIdOf("georeference")===u.WEB_SCENE)){const o=e.toJSON(),t=this._createSource(o);return t.read({...o},{origin:"portal-item"}),t.read({georeference:r},{origin:"web-map"}),t.read({georeference:r},{origin:"web-scene"}),t}return null}};e([a({readOnly:!0})],b.prototype,"effectiveSource",void 0),e([a({readOnly:!0,json:{read:!1,write:!1,origins:{"web-document":{read:!0}}}})],b.prototype,"georeference",void 0),e([c("web-document","georeference")],b.prototype,"readGeoreference",null),e([a({type:String})],b.prototype,"copyright",void 0),e([a({readOnly:!0})],b.prototype,"fullExtent",null),e([a({type:["MediaLayer"]})],b.prototype,"operationalLayerType",void 0),e([a({type:["show","hide"]})],b.prototype,"listMode",void 0),e([a({nonNullable:!0,json:{write:{enabled:!0,allowNull:!1,target:{url:{type:String},mediaType:{type:["image","video"]},georeference:{type:g}},overridePolicy(e,r,o){return{enabled:!0,allowNull:!1,ignoreOrigin:v(this,o?.origin)&&O(e)&&!!e.georeference&&e.originIdOf("georeference")>u.PORTAL_ITEM}}}}})],b.prototype,"source",null),e([n("source")],b.prototype,"castSource",null),e([c("source",["url"])],b.prototype,"readSource",null),e([l("source")],b.prototype,"writeSource",null),e([a()],b.prototype,"spatialReference",void 0),e([a({readOnly:!0})],b.prototype,"type",void 0),b=e([p("esri.layers.MediaLayer")],b);const E=b;export{E as default};