@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 4.09 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{whenOrAbort as e,ignoreAbortErrors as t}from"../../../core/promiseUtils.js";import{getDisplayFieldName as r}from"../../../layers/support/fieldUtils.js";import{isFeatureLayer as s,isKnowledgeGraphLayer as n,isLinkChartLayer as i,isMapNotesLayer as l,isGraphicsLayer as a,isSubtypeGroupLayer as o}from"../../../layers/support/layerUtils.js";import{calculateTolerance as u}from"../../../renderers/support/clickToleranceUtils.js";import{createQueryGeometry as c}from"../../../views/support/drapedUtils.js";import{isSelectableLayerView2D as d}from"../../../views/support/layerViewUtils.js";async function y(){return import("../../../geometry/geometryEngineJSON.js")}async function p(){return y().then((({contains:e,intersects:t,overlaps:r,simplify:s})=>({contains:e,intersects:t,overlaps:r,simplify:s})))}async function f(t){const{currentSelection:r,selector:s,signal:n,sources:i,view:l}=t;if(!i?.length)return{added:[],removed:[]};const{layers:a,layerViews:o,graphicsLayers:u}=F(i),c=(await e(Promise.all([g(s,a,l,n),h(s,o,l,n),m(s,u,l)]),n)).flat();if(!r)return{added:c,removed:[]};const d=r.toArray(),y=c.filter((e=>!v(d,e))),p=d.filter((e=>!v(c,e)));return r.removeMany(p),r.addMany(y),{added:y,removed:p}}const m=async(e,t,r)=>S({candidates:t.flatMap((e=>e.graphics.toArray()))??[],selector:e,view:r}),g=async(e,r,s,n)=>{const i=await t(b({selector:e,signal:n,layers:r,view:s}));return i?w(i):[]},h=async(e,r,s,n)=>{const i=await t(I({selector:e,signal:n,layerViews:r,view:s}));return i?w(i):[]};function w(e){const t=[];for(let r=0;r<e.length;r++){const s=e[r];"fulfilled"===s.status&&t.push(...s.value)}return t}function F(e){const t=[],r=[],o=[];return e.forEach((e=>{s(e)?t.push(e):(n(e)||i(e))&&e.layers?.length?t.push(...e.layers.toArray()):l(e)&&e.sublayers?.length?o.push(...e.sublayers.toArray()):a(e)?o.push(e):d(e)&&r.push(e)})),{layers:t,layerViews:r,graphicsLayers:o}}function v(e,t){if(e.includes(t))return!0;const r=t.getObjectId(),s=null!=r,{layer:n,uid:i}=t;return s?e.some((e=>{if(n===e.layer)return r===e.getObjectId()})):e.some((e=>{if(n===e.layer)return i===e.uid}))}async function I(t){const{layerViews:r,selector:s,signal:n,view:i}=t;return e(Promise.allSettled(r.map((async e=>{const t=e.createQuery(),{geometry:r}=j(s,e.layer,i);return t.outFields=["*"],t.geometry=r,t.returnGeometry=!0,t.outSpatialReference=i.spatialReference,e.queryFeatures(t,{signal:n}).then((({features:e})=>e))}))),n)}async function b(t){const{layers:r,selector:s,signal:n,view:i}=t;return e(Promise.allSettled(r.map((async e=>e.queryFeatures(x(e.createQuery(),s,e,i),{signal:n}).then((({features:e})=>e))))),n)}function j(e,t,s){const n="renderer"in t?u({renderer:t.renderer}):0,i="point"===e.type?c(e,n,s):e,l="displayField"in t?t.displayField:null,a=r({displayField:l,fields:t.fields}),d=[t.objectIdField];null!=a&&t.fieldsIndex.has(a)&&d.push(a),"globalIdField"in t&&null!=t.globalIdField&&t.fieldsIndex.has(t.globalIdField)&&d.push(t.fieldsIndex.get(t.globalIdField).name),o(t)&&null!=t.subtypeField&&t.fieldsIndex.has(t.subtypeField)&&d.push(t.fieldsIndex.get(t.subtypeField).name);if("utilityNetworks"in s.map&&s.map.utilityNetworks?.length&&(o(t)||"feature"===t.type)){const e=t.fieldsIndex.get("assetgroup"),r=t.fieldsIndex.get("assettype");e?.name&&d.push(e.name),r?.name&&d.push(r.name)}return{geometry:i,outFields:d}}function x(e,t,r,s){const{outFields:n,geometry:i}=j(t,r,s);return e.outFields=n,e.geometry=i,e.returnGeometry=!0,e.outSpatialReference=s.spatialReference,e}async function S(e){const{selector:t,candidates:r,view:s}=e;if(!r?.length||!t)return[];const{spatialReference:n}=s,i=t,l=await p();return r.filter((e=>e.geometry&&"mesh"!==e.geometry.type&&l.intersects(n,i,e.geometry)))}export{p as getGeometryEngineOperations,j as getQueryOptionsFromLayer,I as getSelectionFromFeatureLayerViews,b as getSelectionFromFeatureLayers,f as getSelectionFromGeometry,S as getSelectionFromGeometryEngine,y as importGeometryEngine};