@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 12.2 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import e from"../../Color.js";import t from"../../config.js";import{id as r}from"../../kernel.js";import s from"../../core/Error.js";import{getOrCreateMapValue as o}from"../../core/MapUtils.js";import{throwIfAbortError as a}from"../../core/promiseUtils.js";import n from"../../form/FormTemplate.js";import i from"../../form/elements/FieldElement.js";import{initializeProjection as p,project as l}from"../../geometry/projectionUtils.js";import u from"../../geometry/SpatialReference.js";import{normalizeCentralMeridian as d}from"../../geometry/support/normalizeUtils.js";import{queryBinsCapabilities as c,queryCapabilities as m}from"../graphics/data/QueryEngineCapabilities.js";import{systemOidFieldName as y}from"./constants.js";import f from"../support/FeatureTemplate.js";import b from"../support/LabelClass.js";import h from"../support/LabelExpressionInfo.js";import{isKnowledgeGraphSublayer as g,getOwningPortalUrl as w}from"../support/layerUtils.js";import I from"../../portal/PortalItem.js";import{getUserPrivileges as C}from"../../portal/support/portalItemUtils.js";import{executeQueryStreaming as j,fetchClientDataAtKeys as T}from"../../rest/knowledgeGraphService.js";import A from"../../rest/knowledgeGraph/Entity.js";import S from"../../rest/knowledgeGraph/GraphApplyEdits.js";import L from"../../rest/knowledgeGraph/Relationship.js";import{isGraphic as M}from"../../support/graphicInstanceUtils.js";import R from"../../symbols/CIMSymbol.js";import v from"../../symbols/TextSymbol.js";const E={initializeLayersFromClientData:async(e,t,r)=>{if(t||(t=[...e.layers,...e.tables].map(e=>e.graphTypeName)),0===t?.length)return;const s=new Map;for(const a of t)s.set(a,k(e,a));const o=await T(e.dataManager.knowledgeGraph,Array.from(s.values()),{requestOptions:{signal:r?.signal}});for(const a of[...e.layers,...e.tables]){const t=a.objectType.name;if(null==t)continue;const r=o.get(k(e,t));if(r){const e=JSON.parse(r);null===e||"object"!=typeof e||e.hasOwnProperty("showLabels")||(e.showLabels=!1),a.read(e,{origin:"service"})}}},getInclusionDefinitionFromCypherResults:async(e,t,r)=>{const s=X(e.dataModel),o=(await j(e,t,r)).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await o.read();if(e)break;for(const r of t)for(const e of r){Y(e,s)}}return s},getInclusionDefinitionFromIdTypePairs:(e,t)=>{const r=X(e.dataModel);for(const{id:o,typeName:a}of t){const e=r.namedTypeDefinitions.get(a);if(!e)throw new s("WebLinkChart:data-model-desync","The provided id-type pairs contained a named type not reflected in the provided knowledge graph data model.");e.members?.set(o,{id:o})}return r},getUserKGSPrivileges:async(e,s,o)=>{let a=!0,n=!1,i=!1;if(!t.userPrivilegesApplied)return{edit:a,fullEdit:n,updateItem:i};const p=await w(s,o);if(!p)return{edit:a,fullEdit:n,updateItem:i};const l=r?.getCredential(`${p}/sharing`,{...o,prompt:!1});if(!l)return{edit:a,fullEdit:n,updateItem:i};const u=new I({id:e,portal:{url:p}});return await u.load(o),({features:{edit:a,fullEdit:n},content:{updateItem:i}}=C(u)),{edit:a,fullEdit:n,updateItem:i}}},k=(e,t)=>"knowledge-graph"===e.type?`${t}/Map`:`${t}/LinkChart/LinkChartSubLayer`;async function D(e,t,r){return E.initializeLayersFromClientData(e,t,r)}async function U(e,t,r){return E.getInclusionDefinitionFromCypherResults(e,t,r)}function F(e,t){return E.getInclusionDefinitionFromIdTypePairs(e,t)}const N=["#4a0932","#b31515","#18382e","#a64f1b","#102432","#8c213f","#ed9310","#2c6954","#144d59","#ffc730","#75351e","#454f4b","#78b1c2","#191921","#8f8f82","#9be0c0","#dbb658","#87b051","#11495c","#c43541","#9c5596","#44498b","#ad9d63","#86afb3","#5c98ca","#b0bfa2","#73241f","#b86b53","#d9d78c","#3e756d","#f260a1","#a0d17d","#c27c30","#eb82eb","#ffdf3c","#ffb259","#ab52b3","#3cccb4","#0095ba","#d92b30"],x="#8f8f82";function P(t){return t<0||t>=N.length?new e(x):new e(N[t])}function G(e){const t=e.toArray();return new R({data:{type:"CIMSymbolReference",symbol:{type:"CIMLineSymbol",symbolLayers:[{type:"CIMSolidStroke",enable:!0,style:"solid",width:.75,color:t},{type:"CIMVectorMarker",enable:!0,size:6,markerPlacement:{type:"CIMMarkerPlacementOnLine",angleToLine:!0,relativeTo:"LineMiddle"},frame:{xmin:-10,ymin:-5,xmax:0,ymax:5},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{rings:[[[-12,-3.47],[-12,3.6],[1.96,-.03],[-12,-3.47]]]},symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:t}]}}]}]}}})}function _(e){let t="ESRI__ID",r=4;for(const s of e)if(s.name){if("name"===s.name.toLowerCase()){t=s.name;break}s.name.toLowerCase().includes("name")?(t=s.name,r=2):"esriFieldTypeString"===s.fieldType&&r>3&&(t=s.name,r=3)}return t}function z(e,t,r){const s={color:[80,80,80],haloColor:[255,255,255],haloSize:.7,font:{size:10,weight:"normal"}},o=new b({labelExpressionInfo:new h({expression:"ESRI__ID"===r?`${t}`:`$feature.${r}`}),labelPlacement:"above-center",symbol:new v(s)}),a=new b({labelExpressionInfo:new h({expression:`'${t}' + IIf($feature.ESRI__AggregationCount>1, ' (' + $feature.ESRI__AggregationCount + ')', '')`}),labelPlacement:"center-along",labelPosition:"parallel",repeatLabel:!1,symbol:new v({...s,yoffset:"12px"})});return"entity"===e?[o]:[a]}function O(e,t,r){const s={color:[255,255,255],haloColor:[0,0,0],haloSize:.7,font:{size:10,weight:"bold"}},o="ESRI__ID"===r?`${e}`:`$feature.${r}`;return"point"===t?[new b({labelExpressionInfo:new h({expression:o}),labelPlacement:"above-center",symbol:new v(s)})]:"polyline"===t?[new b({labelExpressionInfo:new h({expression:o}),labelPlacement:"center-along",repeatLabel:!0,symbol:new v(s)})]:"polygon"===t?[new b({labelExpressionInfo:new h({expression:o}),labelPlacement:"always-horizontal",symbol:new v(s)})]:null}async function $(e,t,r){return E.getUserKGSPrivileges(e,t,r).catch(e=>(a(e),{edit:!0,fullEdit:!1,updateItem:!1}))}const B={capabilities:[],allowGeometryUpdates:!1,serviceCapabilities:{geometryCapabilities:{supportsZValues:!1,supportsMValues:!1}}};function Q(e){const{capabilities:t,allowGeometryUpdates:r,serviceCapabilities:{geometryCapabilities:{supportsZValues:s,supportsMValues:o}}}=e?.serviceDefinition||B,a=e?.dataModel.arcgisManaged?t:t.filter(e=>"Query"===e),n=new Set(a);return{analytics:{supportsCacheHint:!1},attachment:null,data:{isVersioned:!1,isBranchVersioned:!1,supportedCurveTypes:[],supportsAttachment:!1,supportsM:o,supportsTrueCurve:!1,supportsZ:s},metadata:{supportsAdvancedFieldProperties:!1},operations:{supportsCalculate:!1,supportsTruncate:!1,supportsValidateSql:!1,supportsAdd:n.has("Create"),supportsDelete:n.has("Delete"),supportsEditing:n.has("Editing"),supportsChangeTracking:!1,supportsQuery:n.has("Query"),supportsQueryBins:!1,supportsQueryPivot:!1,supportsQueryAnalytics:!1,supportsQueryAttachments:!1,supportsQueryTopFeatures:!1,supportsResizeAttachments:!1,supportsSync:!1,supportsUpdate:n.has("Update"),supportsExceedsLimitStatistics:!1,supportsAsyncConvert3D:!1},query:m,queryRelated:{supportsCount:!1,supportsOrderBy:!1,supportsPagination:!1,supportsCacheHint:!1},queryTopFeatures:{supportsCacheHint:!1},queryAttributeBins:c,editing:{supportsGeometryUpdate:!!e?.dataModel.arcgisManaged&&r,supportsGlobalId:!1,supportsReturnServiceEditsInSourceSpatialReference:!1,supportsRollbackOnFailure:!1,supportsTrueCurveUpdate:!1,supportsTrueCurveUpdateByTrueCurveClientsOnly:!0,supportsUpdateWithoutM:!1,supportsUploadWithItemId:!1,supportsDeleteByAnonymous:!1,supportsDeleteByOthers:n.has("Delete"),supportsUpdateByAnonymous:!1,supportsUpdateByOthers:n.has("Update"),supportsAsyncApplyEdits:!1,zDefault:void 0}}}async function V(e,t){const r=new S,s=t.graphTypeName,a=t.graphType,n="knowledge-graph"===t.parentCompositeLayer.type?t.geometryFieldName:null,i=!!t.fieldsIndex.get(n)?.editable,c=e=>{const r={...e};for(const s of t.fields)s.editable||delete r[s.name];for(const t of Object.keys(e))t.includes("ESRI__")&&delete r[t];return r},m=async e=>{await p(e.spatialReference,u.WGS84);const t=l(e,u.WGS84);if("point"===t.type)return t.normalize();return(await d(t))[0]};for(const o of e.addFeatures??[]){const e=c(o.attributes);g(o.sourceLayer)&&o.sourceLayer.graphTypeName===s&&("entity"===a?(r.entityAdds||(r.entityAdds=[]),n&&o.geometry&&(e[n]=await m(o.geometry)),r.entityAdds.push(new A({properties:e,typeName:s}))):(r.relationshipAdds||(r.relationshipAdds=[]),r.relationshipAdds.push(new L({properties:e,typeName:s}))))}for(const o of e.updateFeatures??[]){const e=o.attributes[y],t=c(o.attributes);g(o.sourceLayer)&&o.sourceLayer.graphTypeName===s&&("entity"===a?(r.entityUpdates||(r.entityUpdates=[]),n&&i&&o.geometry&&(t[n]=await m(o.geometry)),r.entityUpdates.push(new A({id:e,properties:t,typeName:s}))):(r.relationshipUpdates||(r.relationshipUpdates=[]),r.relationshipUpdates.push(new L({id:e,properties:t,typeName:s}))))}const f=new Map;for(const p of e.deleteFeatures??[])if(M(p)){const e=p,t=o(f,e.sourceLayer.graphTypeName,()=>({typeName:e.sourceLayer.graphTypeName,ids:[]}));e.sourceLayer.graphTypeName===s&&t.ids.push(e.attributes[y])}else if(p.objectId&&"string"==typeof p.objectId){o(f,s,()=>({typeName:s,ids:[]})).ids.push(p.objectId)}for(const o of f.values())o.ids.length>0&&("entity"===a?(r.entityDeletes||(r.entityDeletes=[]),r.entityDeletes.push({typeName:o.typeName,ids:o.ids})):(r.relationshipDeletes||(r.relationshipDeletes=[]),r.relationshipDeletes.push({typeName:o.typeName,ids:o.ids})));return r}function q(e,t){const r={addFeatureResults:[],updateFeatureResults:[],deleteFeatureResults:[],addAttachmentResults:[],updateAttachmentResults:[],deleteAttachmentResults:[]};for(const s of e.editResults)if(s.typeName===t){for(const e of s.adds)r.addFeatureResults.push({objectId:e.id,globalId:e.id});for(const e of s.updates)r.updateFeatureResults.push({objectId:e.id,globalId:e.id});for(const e of s.deletes)r.deleteFeatureResults.push({objectId:e.id,globalId:e.id})}return r}function W(e){if(!e.objectType)return null;const t=[];for(const r of e.fields)!r.name.includes("ESRI__")&&r.editable&&"geometry"!==r.type&&t.push(new i({fieldName:r.name}));return new n({elements:t})}function H(e){if(!e.objectType)return null;let t=null;switch(e.geometryType){case"point":case"multipoint":t="point";break;case"polyline":t="line";break;case"polygon":t="polygon";break;default:t=null}return[new f({name:e.graphTypeName,drawingTool:t,prototype:{}})]}function K(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&("id"in e&&"typeName"in e)}function Z(e){return!(!e||"object"!=typeof e||Array.isArray(e))&&(e&&"path"in e&&Array.isArray(e.path))}function J(e){return!(!e||"object"!=typeof e||Array.isArray(e)||"id"in e)&&("properties"in e&&"object"==typeof e.properties)}function X(e){const t={namedTypeDefinitions:new Map,generateAllSublayers:!1},{entityTypes:r,relationshipTypes:s}=e,o=[...r,...s];for(const a of o)t.namedTypeDefinitions.set(a.name,{useAllData:!1,members:new Map});return t}function Y(e,t){if(e&&"object"==typeof e)if(K(e)){const r=t.namedTypeDefinitions.get(e.typeName);if(!r)throw new s("WebLinkChart:data-model-desync","The query result contained a named type not reflected in the provided knowledge graph data model.");r.members.set(e.id,{id:e.id})}else if(Z(e))for(const r of e.path)Y(r,t);else if(Array.isArray(e))for(const r of e)Y(r,t);else if(J(e))for(const r of Object.values(e.properties??{}))Y(r,t)}const ee=e=>{let t="";const r=e.split("/"),s=r.lastIndexOf("KnowledgeGraphServer");return s>0&&(t=r[s-1]),t};export{q as convertGraphEditsResultToFeatureEdits,V as convertLayerEditsToGraphEdits,Q as createCapabilitiesFromKnowledgeGraph,H as createDefaultKGSLFeatureTemplates,W as createDefaultKGSLFormTemplate,Y as extractGraphNamedObjectsFromQueryValueRecursive,x as fallbackKGSublayerSymbolHexColor,G as getDefaultLCRelationshipSublayerSymbol,_ as getDisplayLabelProperty,X as getEmptyInclusionListFromDataModel,U as getInclusionDefinitionFromCypherResults,F as getInclusionDefinitionFromIdTypePairs,P as getKGSublayerSymbolColor,z as getLinkChartDefaultLabelingInfo,O as getMapDefaultLabelingInfo,ee as getTitleFromServerUrl,$ as getUserKGSPrivileges,D as initializeLayersFromClientData,K as isGraphNamedObject,J as isGraphObject,Z as isPathObject,E as layerUtils};