@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 5.17 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */
import{__decorate as e}from"tslib";import r from"../core/Collection.js";import t from"../core/Error.js";import o from"../core/Logger.js";import{MultiOriginJSONSupportMixin as s}from"../core/MultiOriginJSONSupport.js";import{debounce as i}from"../core/promiseUtils.js";import{property as a,cast as n,subclass as c}from"../core/accessorSupport/decorators.js";import l from"../geometry/SpatialReference.js";import p from"./Layer.js";import{BlendLayer as u}from"./mixins/BlendLayer.js";import{OperationalLayer as d}from"./mixins/OperationalLayer.js";import{PortalLayer as m}from"./mixins/PortalLayer.js";import{ScaleRangeLayer as f}from"./mixins/ScaleRangeLayer.js";import y from"./support/ControlPointsGeoreference.js";import g from"./support/ImageElement.js";import h from"./support/LocalMediaElementSource.js";import{isWritingLayerFromItemToWebDocument as S}from"./support/mediaUtils.js";import w from"./support/VideoElement.js";import{isMediaElement as v}from"../support/mediaLayerUtils.js";import{reader as j}from"../core/accessorSupport/decorators/reader.js";import{writer as O}from"../core/accessorSupport/decorators/writer.js";let L=class extends(u(f(d(m(s(p)))))){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,t)=>{const{save:o,saveAs:s}=await import("./save/mediaLayerUtils.js");switch(e){case 0:return o(this,r);case 1:return s(this,t,r)}}),this.source=new h}load(e){return this.addResolvingPromise(this._doLoad(e)),Promise.resolve(this)}async _doLoad(e){await this.loadFromPortal({supportedTypes:["Media Layer"]},e);let o=this.source;if(!o)throw new t("media-layer:source-missing","Set 'MediaLayer.source' before loading the layer.");const s=this._getSourceOverride(o,this.georeference);s&&(this.setAtOrigin("source",s,"web-map"),this.setAtOrigin("source",s,"web-scene"),o=s);const i=v(o)?new h({elements:new r([o])}):o;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 loaded(){return super.loaded}get source(){return this._get("source")}set source(e){"loaded"!==this.loadStatus&&"failed"!==this.loadStatus?this._set("source",e):o.getLogger(this).error("#source","source cannot be changed after the layer is loaded.")}castSource(e){return e?Array.isArray(e)?new h({elements:new r(e)}):e instanceof r?new h({elements:e}):e:null}readSource(e,r,t){if("itemId"in r&&r.itemId)return;const o=this._createSource(r);return o?.read(r,t),o}writeSource(e,r,o,s){if(e&&e instanceof h){const r=e.elements.length;if(1!==r)return void(s?.messages&&s.messages.push(new t("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)}v(e)?e.write(r,s):s?.messages&&(e?s.messages.push(new t("media-layer:unsupported-source","only media elements of type 'ImageElement' or 'VideoElement' can be persisted")):s.messages.push(new t("media-layer:unsupported-source","the media layer is missing a source")))}async save(e){return this._debouncedSaveOperations(0,e)}async saveAs(e,r){return this._debouncedSaveOperations(1,r,e)}_createSource(e){if("mediaType"in e)switch(e.mediaType){case"image":return new g;case"video":return new w}return null}_getSourceOverride(e,r){if(v(e)&&3===this.originIdOf("source")&&r&&(5===this.originIdOf("georeference")||4===this.originIdOf("georeference"))){const t=e.toJSON(),o=this._createSource(t);return o.read({...t},{origin:"portal-item"}),o.read({georeference:r},{origin:"web-map"}),o.read({georeference:r},{origin:"web-scene"}),o}return null}};e([a({readOnly:!0})],L.prototype,"effectiveSource",void 0),e([a({readOnly:!0,json:{read:!1,write:!1,origins:{"web-document":{read:!0}}}})],L.prototype,"georeference",void 0),e([j("web-document","georeference")],L.prototype,"readGeoreference",null),e([a({type:String})],L.prototype,"copyright",void 0),e([a({readOnly:!0})],L.prototype,"fullExtent",null),e([a({type:["MediaLayer"]})],L.prototype,"operationalLayerType",void 0),e([a({type:["show","hide"]})],L.prototype,"listMode",void 0),e([a({nonNullable:!0,json:{write:{enabled:!0,allowNull:!1,target:{url:{type:String},mediaType:{type:["image","video"]},georeference:{type:y}},overridePolicy(e,r,t){return{enabled:!0,allowNull:!1,ignoreOrigin:S(this,t?.origin)&&v(e)&&!!e.georeference&&e.originIdOf("georeference")>3}}}}})],L.prototype,"source",null),e([n("source")],L.prototype,"castSource",null),e([j("source",["url"])],L.prototype,"readSource",null),e([O("source")],L.prototype,"writeSource",null),e([a({type:l})],L.prototype,"spatialReference",void 0),e([a({readOnly:!0})],L.prototype,"type",void 0),L=e([c("esri.layers.MediaLayer")],L);const b=L;export{b as default};