MapNotesLayer.js 10 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.24/esri/copyright.txt for details.
  4. */
  5. import{_ as e}from"../chunks/tslib.es6.js";import"../geometry.js";import t from"../Graphic.js";import"../symbols.js";import r from"../core/Collection.js";import o from"../core/Error.js";import{clone as i}from"../core/lang.js";import{isNone as a,isSome as l}from"../core/maybe.js";import{MultiOriginJSONMixin as n}from"../core/MultiOriginJSONSupport.js";import{setDeepValue as s}from"../core/object.js";import p from"../core/Warning.js";import{property as y}from"../core/accessorSupport/decorators/property.js";import"../core/accessorSupport/ensureType.js";import{reader as m}from"../core/accessorSupport/decorators/reader.js";import{subclass as u}from"../core/accessorSupport/decorators/subclass.js";import{writer as c}from"../core/accessorSupport/decorators/writer.js";import{canProjectWithoutEngine as d,isLoaded as f,load as g,project as b}from"../geometry/projection.js";import{normalizeCentralMeridian as S}from"../geometry/support/normalizeUtils.js";import{equals as h}from"../geometry/support/spatialReferenceUtils.js";import O from"./FeatureLayer.js";import w from"./GraphicsLayer.js";import j from"./Layer.js";import{findLastObjectIdFromFeatures as N}from"./graphics/objectIdUtils.js";import{BlendLayer as L}from"./mixins/BlendLayer.js";import{OperationalLayer as x}from"./mixins/OperationalLayer.js";import{PortalLayer as J}from"./mixins/PortalLayer.js";import{ScaleRangeLayer as v}from"./mixins/ScaleRangeLayer.js";import T from"./support/Field.js";import C from"../symbols/SimpleFillSymbol.js";import M from"../symbols/SimpleLineSymbol.js";import I from"../symbols/SimpleMarkerSymbol.js";import R from"../symbols/TextSymbol.js";import D from"../geometry/SpatialReference.js";import E from"../geometry/Extent.js";function F(e){return e.layers.some((e=>null!=e.layerDefinition.visibilityField))}const G=new T({name:"OBJECTID",alias:"OBJECTID",type:"oid",nullable:!1,editable:!1}),_=new T({name:"title",alias:"Title",type:"string",nullable:!0,editable:!0});let P=class extends w{constructor(e){super(e),this.visibilityMode="inherited"}initialize(){for(const e of this.graphics)e.sourceLayer=this.layer;this.graphics.on("after-add",(e=>{e.item.sourceLayer=this.layer})),this.graphics.on("after-remove",(e=>{e.item.sourceLayer=null}))}get sublayers(){return this.graphics}};e([y({readOnly:!0})],P.prototype,"sublayers",null),e([y()],P.prototype,"layer",void 0),e([y()],P.prototype,"layerId",void 0),e([y({readOnly:!0})],P.prototype,"visibilityMode",void 0),P=e([u("esri.layers.MapNotesLayer.MapNotesSublayer")],P);const k=[{geometryType:"polygon",geometryTypeJSON:"esriGeometryPolygon",id:"polygonLayer",layerId:0,title:"Polygons",identifyingSymbol:(new C).toJSON()},{geometryType:"polyline",geometryTypeJSON:"esriGeometryPolyline",id:"polylineLayer",layerId:1,title:"Polylines",identifyingSymbol:(new M).toJSON()},{geometryType:"multipoint",geometryTypeJSON:"esriGeometryMultipoint",id:"multipointLayer",layerId:2,title:"Multipoints",identifyingSymbol:(new I).toJSON()},{geometryType:"point",geometryTypeJSON:"esriGeometryPoint",id:"pointLayer",layerId:3,title:"Points",identifyingSymbol:(new I).toJSON()},{geometryType:"point",geometryTypeJSON:"esriGeometryPoint",id:"textLayer",layerId:4,title:"Text",identifyingSymbol:(new R).toJSON()}];let z=class extends(L(v(x(J(n(j)))))){constructor(e){super(e),this.capabilities={operations:{supportsMapNotesEditing:!0}},this.featureCollections=null,this.featureCollectionJSON=null,this.featureCollectionType="notes",this.legendEnabled=!1,this.minScale=0,this.maxScale=0,this.spatialReference=D.WGS84,this.sublayers=new r(k.map((e=>new P({id:e.id,layerId:e.layerId,title:e.title,layer:this})))),this.title="Map Notes",this.type="map-notes",this.visibilityMode="inherited"}readCapabilities(e,t,r){return{operations:{supportsMapNotesEditing:!F(t)&&"portal-item"!==r?.origin}}}readFeatureCollections(e,t,o){if(!F(t))return null;const i=t.layers.map((e=>{const t=new O;return t.read(e,o),t}));return new r({items:i})}readLegacyfeatureCollectionJSON(e,t){return F(t)?i(t.featureCollection):null}readFullExtent(e,t){if(!t.layers.length||t.layers.every((e=>!e.layerDefinition.extent)))return new E({xmin:-180,ymin:-90,xmax:180,ymax:90,spatialReference:D.WGS84});const r=D.fromJSON(t.layers[0].layerDefinition.spatialReference);return t.layers.reduce(((e,t)=>{const r=t.layerDefinition.extent;return r?E.fromJSON(r).union(e):e}),new E({spatialReference:r}))}readMinScale(e,t){for(const r of t.layers)if(null!=r.layerDefinition.minScale)return r.layerDefinition.minScale;return 0}readMaxScale(e,t){for(const r of t.layers)if(null!=r.layerDefinition.maxScale)return r.layerDefinition.maxScale;return 0}get multipointLayer(){return this._findSublayer("multipointLayer")}get pointLayer(){return this._findSublayer("pointLayer")}get polygonLayer(){return this._findSublayer("polygonLayer")}get polylineLayer(){return this._findSublayer("polylineLayer")}readSpatialReference(e,t){return t.layers.length?D.fromJSON(t.layers[0].layerDefinition.spatialReference):D.WGS84}readSublayers(e,o,i){if(F(o))return null;const a=[];let l=o.layers.reduce(((e,t)=>Math.max(e,t.layerDefinition.id??-1)),-1)+1;for(const{layerDefinition:r,featureSet:n}of o.layers){const e=r.geometryType??n.geometryType,o=r.id??l++,i=k.find((t=>e===t.geometryTypeJSON&&r.drawingInfo?.renderer?.symbol?.type===t.identifyingSymbol.type));if(i){const e=new P({id:i.id,title:r.name,layerId:o,layer:this,graphics:n.features.map((({geometry:e,symbol:r,attributes:o,popupInfo:i})=>t.fromJSON({attributes:o,geometry:e,symbol:r,popupTemplate:i})))});a.push(e)}}return new r(a)}writeSublayers(e,t,r,i){const{minScale:n,maxScale:p}=this;if(a(e))return;const y=e.some((e=>e.graphics.length>0));if(!this.capabilities.operations.supportsMapNotesEditing)return void(y&&i?.messages?.push(new o("map-notes-layer:editing-not-supported","New map notes cannot be added to this layer")));const m=[];let u=this.spatialReference.toJSON();e:for(const o of e)for(const e of o.graphics)if(l(e.geometry)){u=e.geometry.spatialReference.toJSON();break e}for(const o of k){const t=e.find((e=>o.id===e.id));this._writeMapNoteSublayer(m,t,o,n,p,u,i)}s("featureCollection.layers",m,t)}get textLayer(){return this._findSublayer("textLayer")}load(e){return this.addResolvingPromise(this.loadFromPortal({supportedTypes:["Feature Collection"]},e)),Promise.resolve(this)}read(e,t){"featureCollection"in e&&(e=i(e),Object.assign(e,e.featureCollection)),super.read(e,t)}async beforeSave(){if(a(this.sublayers))return;let e=null;const t=[];for(const o of this.sublayers)for(const r of o.graphics)if(l(r.geometry)){const o=r.geometry;e?h(o.spatialReference,e)||(d(o.spatialReference,e)||f()||await g(),r.geometry=b(o,e)):e=o.spatialReference,t.push(r)}const r=await S(t.map((e=>e.geometry)));t.forEach(((e,t)=>e.geometry=r[t]))}_findSublayer(e){return a(this.sublayers)?null:this.sublayers?.find((t=>t.id===e))??null}_writeMapNoteSublayer(e,t,r,o,l,n,s){const p=[];if(!a(t)){for(const e of t.graphics)this._writeMapNote(p,e,r.geometryType,s);this._normalizeObjectIds(p,G),e.push({layerDefinition:{name:t.title,drawingInfo:{renderer:{type:"simple",symbol:i(r.identifyingSymbol)}},id:t.layerId,geometryType:r.geometryTypeJSON,minScale:o,maxScale:l,objectIdField:"OBJECTID",fields:[G.toJSON(),_.toJSON()],spatialReference:n},featureSet:{features:p,geometryType:r.geometryTypeJSON}})}}_writeMapNote(e,t,r,o){if(a(t))return;const{geometry:i,symbol:n,popupTemplate:s}=t;if(a(i))return;if(i.type!==r)return void o?.messages?.push(new p("map-notes-layer:invalid-geometry-type",`Geometry "${i.type}" cannot be saved in "${r}" layer`,{graphic:t}));if(a(n))return void o?.messages?.push(new p("map-notes-layer:no-symbol","Skipping map notes with no symbol",{graphic:t}));const y={attributes:{...t.attributes},geometry:i.toJSON(),symbol:n.toJSON()};l(s)&&(y.popupInfo=s.toJSON()),e.push(y)}_normalizeObjectIds(e,t){const r=t.name;let o=N(r,e)+1;const i=new Set;for(const a of e){a.attributes||(a.attributes={});const{attributes:e}=a;(null==e[r]||i.has(e[r]))&&(e[r]=o++),i.add(e[r])}}};e([y({readOnly:!0})],z.prototype,"capabilities",void 0),e([m(["portal-item","web-map"],"capabilities",["layers"])],z.prototype,"readCapabilities",null),e([y({readOnly:!0})],z.prototype,"featureCollections",void 0),e([m(["web-map","portal-item"],"featureCollections",["layers"])],z.prototype,"readFeatureCollections",null),e([y({readOnly:!0,json:{origins:{"web-map":{write:{enabled:!0,target:"featureCollection"}}}}})],z.prototype,"featureCollectionJSON",void 0),e([m(["web-map","portal-item"],"featureCollectionJSON",["featureCollection"])],z.prototype,"readLegacyfeatureCollectionJSON",null),e([y({readOnly:!0,json:{read:!1,write:{enabled:!0,ignoreOrigin:!0}}})],z.prototype,"featureCollectionType",void 0),e([y({json:{write:!1}})],z.prototype,"fullExtent",void 0),e([m(["web-map","portal-item"],"fullExtent",["layers"])],z.prototype,"readFullExtent",null),e([y({readOnly:!0,json:{origins:{"web-map":{write:{target:"featureCollection.showLegend",overridePolicy(){return{enabled:null!=this.featureCollectionJSON}}}}}}})],z.prototype,"legendEnabled",void 0),e([y({type:["show","hide"]})],z.prototype,"listMode",void 0),e([y({type:Number,nonNullable:!0,json:{write:!1}})],z.prototype,"minScale",void 0),e([m(["web-map","portal-item"],"minScale",["layers"])],z.prototype,"readMinScale",null),e([y({type:Number,nonNullable:!0,json:{write:!1}})],z.prototype,"maxScale",void 0),e([m(["web-map","portal-item"],"maxScale",["layers"])],z.prototype,"readMaxScale",null),e([y({readOnly:!0})],z.prototype,"multipointLayer",null),e([y({value:"ArcGISFeatureLayer",type:["ArcGISFeatureLayer"]})],z.prototype,"operationalLayerType",void 0),e([y({readOnly:!0})],z.prototype,"pointLayer",null),e([y({readOnly:!0})],z.prototype,"polygonLayer",null),e([y({readOnly:!0})],z.prototype,"polylineLayer",null),e([y({type:D})],z.prototype,"spatialReference",void 0),e([m(["web-map","portal-item"],"spatialReference",["layers"])],z.prototype,"readSpatialReference",null),e([y({readOnly:!0,json:{origins:{"web-map":{write:{ignoreOrigin:!0}}}}})],z.prototype,"sublayers",void 0),e([m("web-map","sublayers",["layers"])],z.prototype,"readSublayers",null),e([c("web-map","sublayers")],z.prototype,"writeSublayers",null),e([y({readOnly:!0})],z.prototype,"textLayer",null),e([y()],z.prototype,"title",void 0),e([y({readOnly:!0,json:{read:!1}})],z.prototype,"type",void 0),z=e([u("esri.layers.MapNotesLayer")],z);const B=z;export{B as default};