UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 4.62 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{__decorate as e}from"tslib";import t from"../../../core/Accessor.js";import has from"../../../core/has.js";import r from"../../../core/Logger.js";import{watch as i,syncAndInitial as l}from"../../../core/reactiveUtils.js";import{sqlAnd as s}from"../../../core/sql.js";import{property as o,subclass as a}from"../../../core/accessorSupport/decorators.js";import n from"../../../layers/support/FeatureFilter.js";import{getFloorFilterClause as u}from"../../../layers/support/floorFilterUtils.js";import{isSubtypeGroupLayer as p,isFeatureLayer as d}from"../../../layers/support/layerUtils.js";import{isUtilityNetworkWebMap as y}from"./snappingUtils.js";import{scaleBoundsPredicate as c}from"../../support/layerViewUtils.js";let f=class extends t{set attributeRulesEnabled(e){this._set("attributeRulesEnabled",e),e&&this.loadRules()}get layerView(){return this.view?.allLayerViews?.find(e=>e.layer===this.layer)}get valid(){const{_valid:e,snappingSource:t,layer:r}=this;return!(!t||!r)&&e}get subtypeFilter(){const{layer:e,snappingSource:t}=this;if(!p(e)||!e.subtypes?.length||!t)return{mode:"not-in-use",filter:null};const r=t.layerSource.sublayerSources.filter(e=>e.enabled&&e.layer.visible&&c(this.view?.scale,e.layer.effectiveScaleRange.minScale,e.layer.effectiveScaleRange.maxScale)).map(e=>e.layer.subtypeCode);if(!r.length)return{mode:"none-visible",filter:null};if(r.length===e.subtypes.length)return{mode:"all-visible",filter:null};const i=e.fieldsIndex.get(e.subtypeField)?.name??e.subtypeField;return 1===r.length?{mode:"in-use",filter:`${i} = ${r.getItemAt(0)}`}:{mode:"in-use",filter:`${i} IN (${r.join(", ")})`}}get floorFilter(){const{view:e,layer:t}=this;return e&&t?u({view:e,layer:t}):null}constructor(e){super(e),this.layer=null,this.snappingSource=null,this.rulesTable=null,this._valid=null}initialize(){if(!this.snappingSource||!this.layer)return void(this._valid=!1);const{layer:e,snappingSource:t}=this;if("refresh"in e){const r=e;this.addHandles(r.on("refresh",()=>t.refresh()))}this.loadRules(),this.addHandles([i(()=>t.updating,e=>t.layerSource.updating=e,l),i(()=>t.availability,e=>t.layerSource.availability=e,l)])}getFetchCandidatesParameters(e,t,r){if(!this.valid)return[];const{layer:i,layerView:l,floorFilter:o,rulesTable:a,subtypeFilter:u}=this,c={distance:r,mode:this.view?.type??"2d",point:e,coordinateHelper:t.coordinateHelper,...h(),filter:l&&"filter"in l?l.filter:null};if(o&&(c.filter=m(c.filter,o)),"not-in-use"!==u.mode&&"all-visible"!==u.mode){if("none-visible"===u.mode)return[];c.filter?c.filter.where=s(c.filter.where,u.mode):c.filter=new n({where:u.filter})}if(!this.attributeRulesEnabled)return[c];const f=t.feature,v="subtype-sublayer"===f?.sourceLayer?.type?f.sourceLayer.parent:f?.sourceLayer;if(a&&f&&y(this.view?.map)&&(d(i)||p(i))&&(d(v)||p(v))&&this.view.map.utilityNetworks?.find(e=>e.isUtilityLayer(v))){if("loaded"!==a.loadStatus)return[];const e=[],t=i.layerId,r=a.getFeatureSQL(v,f)?.[t];if(!r)return[];const l=r.anyVertex;let s=r.endVertex;return s&&l&&s===l&&(s=""),s&&e.push({...c,returnEdge:!1,vertexMode:"ends",filter:m(c.filter,s)}),l&&e.push({...c,returnEdge:has("snapping-include-edges-when-applying-any-vertex-rule")??!1,vertexMode:"all",filter:m(c.filter,l)}),e}return[c]}async loadRules(){this._valid=null;const{layer:e,view:t,attributeRulesEnabled:i}=this;if(i&&e&&t&&y(t?.map)&&(d(e)||p(e)))try{await Promise.allSettled(t.map.utilityNetworks?.map(e=>e.load())??[]);const r=t.map.utilityNetworks?.find(t=>t.isUtilityLayer(e));r&&(this.rulesTable=await r.getRulesTable(),await(this.rulesTable?.load()))}catch(l){return this._valid=!1,void r.getLogger("esri.views.interactive.snapping.FeatureSnappingSourceInfo").error("Failed to load rules table for snapping source",e.title)}this._valid=!0}remove(){this.destroy()}destroy(){this.snappingSource?.destroy()}};function h(){return{returnEdge:!0,vertexMode:"all"}}function m(e,t){return null==e?new n({where:t}):e.where?new n({where:s(e.where,t)}):new n({where:t})}e([o({constructOnly:!0})],f.prototype,"layer",void 0),e([o({constructOnly:!0})],f.prototype,"snappingSource",void 0),e([o({constructOnly:!0})],f.prototype,"view",void 0),e([o({value:!1})],f.prototype,"attributeRulesEnabled",null),e([o()],f.prototype,"layerView",null),e([o()],f.prototype,"rulesTable",void 0),e([o()],f.prototype,"valid",null),e([o()],f.prototype,"subtypeFilter",null),e([o()],f.prototype,"floorFilter",null),e([o()],f.prototype,"_valid",void 0),f=e([a("esri.views.interactive.snapping.FeatureSnappingSourceInfo")],f);export{f as FeatureSnappingSourceInfo};