UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) • 7.41 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import e from"../../core/Error.js";import{MultiOriginJSONSupport as t}from"../../core/MultiOriginJSONSupport.js";import{whenOnce as o}from"../../core/reactiveUtils.js";import{hasSameCanonicalPortal as r,urlToObject as a}from"../../core/urlUtils.js";import{updateOrigins as n}from"../../core/accessorSupport/originUtils.js";import i from"../../geometry/SpatialReference.js";import{webMercatorToGeographic as s}from"../../geometry/support/webMercatorUtils.js";import{isServerOrServicesAGOLUrl as l}from"../../layers/support/arcgisLayerUrl.js";import{isLayerWithFeatureLayerSource as p,isFeatureCollectionLayer as c}from"../../layers/support/layerUtils.js";import u from"../../portal/Portal.js";import m from"../../portal/PortalItem.js";import{createForItemWrite as f}from"../../portal/support/jsonContext.js";import{removeTypeKeyword as d,addTypeKeyword as y,typeKeyword as w,hasTypeKeyword as g,toggleTypeKeyword as h}from"../../portal/support/portalItemUtils.js";import{project as _}from"../../rest/geometryService/project.js";import j from"../../rest/support/ProjectParameters.js";import{hasDeveloperBasemapLayer as b,isDeveloperBasemapLayer as v}from"../../support/basemapUtils.js";import{saveResources as R}from"./resourceUtils.js";import{beforeSave as S,evaluateWriteErrors as W,hasCharts as I}from"./saveUtils.js";const A=["NatGeo_World_Map","Ocean_Basemap","USA_Topo_Maps","World_Imagery","World_Street_Map","World_Terrain_Base","World_Topo_Map","World_Hillshade","Canvas/World_Light_Gray_Base","Canvas/World_Light_Gray_Reference","Canvas/World_Dark_Gray_Base","Canvas/World_Dark_Gray_Reference","Ocean/World_Ocean_Base","Ocean/World_Ocean_Reference","Reference/World_Boundaries_and_Places","Reference/World_Reference_Overlay","Reference/World_Transportation"].map(e=>e.toLowerCase());async function P(e,t,r){r??={},U(e,t),await o(()=>!t.updatingFromView),await t.load(),await E(t),await S(t),await M(e,t);const a=t.portalItem,{json:n,jsonContext:i}=await O(t,a,e.origin);return W(i,{errorName:`${e.name}:save`},r),await k(t,a),await ge(e,t,a,n,i),await Promise.all([t.updateItemThumbnail(),R(t.resourceReferences,i)]),a}async function O(e,t,o){const r=f(t,o,!0),a=e.write({},r);return await Promise.all(r.resources.pendingOperations),{json:a,jsonContext:r}}async function T(e,t,r,a){a??={};const n=D(e,r);await o(()=>!t.updatingFromView),await t.load(),await E(t),await S(t),await M(e,t);const{json:i,jsonContext:s}=await O(t,n,e.origin);W(s,{errorName:`${e.name}:save`},a),await X(t,n);const l=t.getThumbnailState();return await he(e,t,n,i,s,a)&&(t.resourceReferences.portalItem=n),t.restoreThumbnailFromState(l),await Promise.all([t.updateItemThumbnail(),R(t.resourceReferences,s)]),n}function U(t,o){if(!o.portalItem)throw new e(`${t.name}:portal-item-not-set`,"Portal item to save to has not been set on the WebMap");C(t,o.portalItem)}function C(t,o){if(o.type!==t.itemType)throw new e(`${t.name}:portal-item-wrong-type`,`Portal item needs to have type "${t.itemType}"`)}async function M(t,o){if("linkchart"!==t.name&&!o.basemap?.baseLayers.length)throw new e(`${t.name}:save`,"Map does not have a valid basemap with a base layer.")}function D(e,t){let o=m.from(t);return o.id&&(o=o.clone(),o.id=null),o.type||(o.type=e.itemType),o.portal||(o.portal=u.getDefault()),C(e,o),o}function E(e){const t=[];return e.basemap&&t.push(e.basemap.load()),e.ground&&t.push(e.ground.load()),Promise.allSettled(t).then(()=>{})}async function k(e,t){t.extent=await ce(e.portalItem,e.initialViewProperties.viewpoint.targetGeometry),await Y(e,t)}const G=w.JSAPI,L="CollectorDisabled",x="Collector",N="Data Editing",V="OfflineDisabled",B="Offline",$="Workforce Project",F="Workforce Worker",H="Workforce Dispatcher",K="Offline Map Areas",J="FieldMapsDisabled",q=w.DEVELOPER_BASEMAP,z="UtilityNetwork",Q="IPS";async function X(e,t){d(t,L),d(t,J),d(t,w.METADATA),d(t,V),d(t,K),d(t,H),d(t,$),d(t,F),await k(e,t)}async function Y(e,t){y(t,G),await Z(e),re(e,t),ae(e,t),ne(e,t),ie(e,t),se(e,t),le(e,t),pe(e,t),t.typeKeywords&&(t.typeKeywords=t.typeKeywords.filter((e,t,o)=>o.indexOf(e)===t))}function Z(e){const t=ee(e).map(e=>e.load()).toArray();return Promise.allSettled(t).then(()=>{})}function ee(e){return e.allLayers.concat(e.allTables)}function te(e){return ee(e).some(e=>e.loaded&&p(e)&&e.capabilities.operations.supportsEditing&&e.editingEnabled&&("subtype-group"!==e.type||e.sublayers.some(e=>e.editingEnabled)))}function oe(e){return ee(e).filter(e=>"group"!==e.type).every(t=>t.loaded&&fe(e,t))}function re(e,t){g(t,L)||g(t,$)||g(t,F)||g(t,H)||!te(e)?d(t,x):y(t,x)}function ae(e,t){te(e)?y(t,N):d(t,N)}function ne(e,t){!g(t,V)&&oe(e)?y(t,B):d(t,B)}function ie(e,t){b(e.basemap)?y(t,q):d(t,q)}function se(e,t){e.utilityNetworks?.length?y(t,z):d(t,z)}function le(e,t){e.ipsInfo?y(t,Q):d(t,Q)}function pe(e,t){h(t,w.CHARTS,I(e))}async function ce(e,t){const o=t.clone().normalize();let r;if(o.length>1)for(const a of o)r?a.width>r.width&&(r=a):r=a;else r=o[0];return ue(e,r)}async function ue(e,t){const o=t.spatialReference;if(o.isWGS84)return t.clone();if(o.isWebMercator)return s(t);const{getGeometryServiceURL:r}=await import("../../portal/support/geometryServiceUtils.js"),a=await r(e),n=new j({geometries:[t],outSpatialReference:i.WGS84});return(await _(a,n))[0]}function me(e){return c(e)||"map-notes"===e.type||"route"===e.type}function fe(e,t){return p(t)&&t.capabilities.operations.supportsSync||me(t)&&!t.portalItem||de(t)&&!ye(t)&&t.spatialReference.equals(e.initialViewProperties.spatialReference)}function de(e){return("tile"===e.type||"vector-tile"===e.type)&&(e.capabilities.operations.supportsExportTiles||we(e)||v(e))}function ye(e){return"vector-tile"===e.type&&Object.keys(e.sourceNameToSource).length>1}function we(e){return"tile"===e.type&&(l(e.url)&&A.some(t=>e.url?.toLowerCase().includes("/"+t+"/")))}async function ge(e,t,o,r,a){await o.update({data:r}),be(e,t,o,r,a)}async function he(t,o,r,a,n,i){const s=o.portalItem,l={item:s,authenticated:!(!s?.id||!s.portal.user)},p=r.portal;await p.signIn();const{copyAllowed:c,itemReloaded:u}=await _e(l,p);if(l.authenticated||=u,!c)throw new e(`${t.name}:save-as-copy-not-allowed`,"Owner of this map does not allow others to save a copy");const m=await je(r,l,a,i);return o.portalItem=r,be(t,o,r,a,n),m}async function _e(e,t){const{item:o,authenticated:r}=e;return o?.id&&o.typeKeywords?.includes("useOnly")?o.portal.portalHostname!==t.portalHostname?{copyAllowed:!1,itemReloaded:!1}:(r||await o.reload(),{copyAllowed:"admin"===o.itemControl||"update"===o.itemControl,itemReloaded:!0}):{copyAllowed:!0,itemReloaded:!1}}async function je(e,t,o,a){const n=e.portal,{item:i}=t,{folder:s,copyAllResources:l}=a;let p=!1;if(l&&i?.id&&r(i.portal.url,n.url)&&parseInt(i.portal.currentVersion,10)>=2023){const{total:e}=await i.fetchResources();p=!!e}if(p){const t=await i.copy({copyResources:"all",folder:s});e.id=t.id,e.portal=t.portal;const r=e.toJSON();await e.load(),e.read(r),await e.update({data:o})}else await n.user.addItem({item:e,folder:s,data:o});return p}function be(e,o,r,i,s){t.prototype.read.call(o,{version:i.version,authoringApp:i.authoringApp,authoringAppVersion:i.authoringAppVersion},{origin:e.origin,ignoreDefaults:!0,url:r.itemUrl?a(r.itemUrl):void 0}),n(s),o.resourceInfo=i}export{O as createJSON,je as initializeNewItem,_e as isCopyAllowed,P as save,T as saveAs};