UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 5.39 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import e from"../../core/Error.js";import t from"../../core/Logger.js";import{getOrCreateMapValue as a}from"../../core/MapUtils.js";import{ApplySet as r}from"../../undoredo/support/ApplySet.js";import{ApplySetAddItem as i,ApplySetDeleteItem as s,ApplySetModifyItem as l}from"../../undoredo/support/ApplySetItem.js";import{getServices as d}from"../../undoredo/support/Services.js";function o(){return new r}function n(e){return new i(e)}function u(e){return new l(e)}function h(e){return new s(e)}async function c(e,t){const a=await y(e,t),r=[];for(const i of a)if(i.layer){const e=[],t=[],a=[];i.items.forEach(r=>{switch(r.type){case"add":e.push(r.graphic);break;case"delete":t.push(r.graphic);break;case"modify":a.push(r.graphic)}});const s=await i.layer.applyEdits({addFeatures:e,deleteFeatures:t,updateFeatures:a});r.push({type:"layer",edits:s,layer:i.layer})}else{const e=[],t=new Map;for(const r of i.items){let a=null;t.has(r.layer.layerId)?a=t.get(r.layer.layerId):(a={id:r.layer.layerId,addFeatures:[],deleteFeatures:[],updateFeatures:[]},t.set(a.id,a),e.push(a)),"add"===r.type?a.addFeatures.push(r.graphic):"delete"===r.type?a.deleteFeatures.push(r.graphic):"modify"===r.type&&a.updateFeatures.push(r.graphic)}for(const r of e)0===r.addFeatures.length&&delete r.addFeatures,0===r.deleteFeatures.length&&delete r.deleteFeatures,0===r.updateFeatures.length&&delete r.updateFeatures;const a=await i.featureService.applyEdits(e);r.push({type:"service",edits:a,featureService:i.featureService})}return r}async function y(t,r){const i=d(r),s=[],l=new Map;for(const d of t.items)if("feature"!==d.layer.type&&"subtype-group"!==d.layer.type||!d.layer.url){if(!l.has(d.layer.id)){const e=i.tablesAndLayersLookup.get(d.layer)??null;e&&await e.load();const t={service:null,items:[],canUseGlobalId:!1,layer:d.layer,featureService:null};l.set(d.layer.id,t),s.push(t)}l.get(d.layer.id).items.push(d)}else{const t=i.tablesAndLayersLookup.get(d.layer);if(!t)throw new e("getservices:metadata-not-found","Meta data for the layer not found");await t.load();const r=t.featureService.url,o=a(l,r,()=>{const e={items:[],layer:null,canUseGlobalId:!0,featureService:t.featureService};return s.push(e),e});d.layer.capabilities?.editing.supportsGlobalId||(o.canUseGlobalId=!1),d.layer.globalIdField||(o.canUseGlobalId=!1),o.items.push(d)}return s}const p=()=>t.getLogger("esri.applications.Components.applySetUtils.FeatureState2D");class f{constructor(e){this._view=e,this._featureState=new Map,this.sealed=!1,this._hiddenFeatures=[]}ensureHighlighted(e){const t=this._featureState.get(e.featureChangeId);t&&!t.highlighted&&(t.highlighted=t.layerView?.highlight([t.objectId]))}hideFeatures(e){const t=this._view.allLayerViews.find(t=>t.layer===e.layer);if(t)for(const a of e.objectIds)t.setVisibility(a,!1),this._hiddenFeatures.push({layer:e.layer,objectId:a,layerView:t})}applyLocalState(e){if(!e.layer.isTable&&!this.sealed)switch(e.type){case"modify":{const t={change:e,layerView:null},a=this._view.allLayerViews.find(t=>t.layer===e.layer),r=e.revertGraphic.attributes[e.layer.objectIdField];t.layerView=a,t.objectId=r,t.layerView&&t.layerView.addOverrides({added:[],removed:[],updated:[t.change.graphic.clone()]}),this._featureState.set(e.featureChangeId,t)}break;case"add":{const t={change:e,layerView:null},a=this._view.allLayerViews.find(t=>t.layer===e.layer),r=e.graphic.attributes[e.layer.objectIdField];t.layerView=a,t.objectId=r,t.layerView&&t.layerView.addOverrides({added:[t.change.graphic.clone()],removed:[],updated:[]}),this._featureState.set(e.featureChangeId,t)}break;case"delete":{const t=this._view.allLayerViews.find(t=>t.layer===e.layer),a=e.graphic.attributes[e.layer.objectIdField],r={objectId:a,layerView:t??null,change:e,graphic:null};r.layerView&&r.layerView.addOverrides({added:[],removed:[a],updated:[]}),this._featureState.set(e.featureChangeId,r)}}}removeLocalState(e){if(e.layer.isTable||this.sealed)return;const t=this._featureState.get(e.featureChangeId);if(t&&(this._featureState.delete(e.featureChangeId),t.layerView&&t.layerView.removeOverrides([t.objectId]),t.highlighted))try{t.highlighted.remove(),t.highlighted=void 0}catch(a){p().warn("Failed removing highlight",a)}}updateLocalState(e){if(e.layer.isTable||this.sealed)return;const t=this._featureState.get(e.featureChangeId);t&&(t.change=e,t.layerView&&t.layerView.addOverrides({added:[],removed:[],updated:[t.change.graphic]}))}objectIdChanged(e,t,a){if(e.layer.isTable||this.sealed)return;const r=this._featureState.get(t);r&&(this._featureState.delete(t),this._featureState.set(e.featureChangeId,r),r.layerView?.removeOverrides([a]),r.layerView?.addOverrides({added:[],removed:[],updated:[r.change.graphic.clone()]}))}clearAll(){try{for(const t of this._hiddenFeatures)t.layerView.setVisibility(t.objectId,!0);this._hiddenFeatures=[];const e=new Map;this._featureState.forEach(t=>{if(t.layerView){a(e,t.layerView,()=>[]).push(t.objectId)}t.highlighted&&(t.highlighted.remove(),delete t.highlighted)});for(const[t,a]of e)t.removeOverrides(a);this._featureState.clear()}catch(e){p().warn("Failed during feature state clear",e)}}}function g(e){return"3d"===e.type?null:new f(e)}export{o as createApplySet,n as createApplySetAddItem,h as createApplySetDeleteItem,u as createApplySetModifyItem,g as createFeatureStateProvider,c as writeApplySetToService};