@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 6.24 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */
import{__decorate as e}from"tslib";import t from"../../../../core/Accessor.js";import{watch as r,initial as i}from"../../../../core/reactiveUtils.js";import{property as o,subclass as s}from"../../../../core/accessorSupport/decorators.js";import{UpdatingHandles as a}from"../../../../core/support/UpdatingHandles.js";import{normalizeCentralMeridian as l}from"../../../../geometry/support/normalizeUtils.js";import n from"../../../../layers/GraphicsLayer.js";import p from"../../../../rest/support/PointBarrier.js";import c from"../../../../rest/support/PolygonBarrier.js";import h from"../../../../rest/support/PolylineBarrier.js";import y from"../../../../rest/support/Stop.js";import{RouteLayerWaypointVisualization as d}from"./RouteLayerWaypointVisualization.js";import u from"../../../../widgets/Sketch/SketchViewModel.js";function m(e,t){e.networkFeature=t}function g(e){const t=b(e.graphic);return{...e,networkFeature:t}}function w(e){const t=e.graphics.map(e=>b(e));return{...e,networkFeatures:t}}function b(e){return e.networkFeature}function k(e){return"point"===e?.type||"polyline"===e?.type||"polygon"===e?.type}let _=class extends t{constructor(e){super(e),this._createMode=null,this._graphicsLayer=new n({internal:!0,listMode:"hide"}),this._sketchViewModel=new u({layer:this._graphicsLayer}),this._updatingHandles=new a,this.enabled=!0,this._handleSketchViewModelEvents=async e=>{switch(e.type){case"update":switch(e.state){case"active":case"complete":for(const t of e.graphics){b(t).geometry=k(t.geometry)?t.geometry.clone():null}}break;case"undo":case"redo":break;case"delete":for(const t of e.graphics){const e=b(t);this._removeNetworkFeature(e)}break;case"create":if(e.graphic&&"complete"===e.state&&this._createMode){const t=(await l(e.graphic.geometry?.clone()))[0],r=e.graphic.symbol?.clone();if(!t)break;switch(this._createMode){case"stop":{if("point"!==t.type)break;const{stops:r}=this.layer;if(r.length>0&&r.every(({geometry:e})=>!e)){r.at(0).geometry=t;break}if(r.length>1&&r.filter((e,t)=>0!==t).every(({geometry:e})=>!e)){r.at(1).geometry=t;break}const i=new y({geometry:t});r.add(i),m(e.graphic,i);break}case"point-barrier":{if("point"!==t.type)break;const i=new p({geometry:t,symbol:r});this.layer.pointBarriers.add(i),m(e.graphic,i);break}case"polyline-barrier":{if("polyline"!==t.type)break;const i=new h({geometry:t,symbol:r});this.layer.polylineBarriers.add(i),m(e.graphic,i);break}case"polygon-barrier":{if("polygon"!==t.type)break;const i=new c({geometry:t,symbol:r});this.layer.polygonBarriers.add(i),m(e.graphic,i);break}}}}(await this.view.whenLayerView(this.layer)).emit(e.type,"create"===e.type?g(e):w(e))}}initialize(){this._sketchViewModel.view=this.view,this.addHandles([r(()=>this.enabled,e=>{e?this._activate():this._deactivate()},i),r(()=>{const{stops:e,pointBarriers:t,polylineBarriers:r,polygonBarriers:i}=this.layer;return{stops:e,pointBarriers:t,polylineBarriers:r,polygonBarriers:i}},()=>{this.enabled&&this._loadClonedGraphics()}),this._sketchViewModel.on(["create","delete","redo","undo","update"],this._handleSketchViewModelEvents)]),this._routeLayerWaypointVisualization=new d({view:this.view,interaction:this})}destroy(){this._graphicsLayer.removeFromParent(),this._graphicsLayer.graphics.destroyAll(),this._graphicsLayer.destroy(),this._routeLayerWaypointVisualization?.destroy(),this._sketchViewModel.destroy(),this._updatingHandles.destroy()}get selectedNetworkFeatures(){return this._sketchViewModel.updateGraphics.map(e=>b(e))}get sketchActive(){return!!this._sketchViewModel.activeTool}get updating(){return(this._routeLayerWaypointVisualization?.updating??!0)||this._sketchViewModel.updating||this._updatingHandles.updating}addNetworkFeature(e){const t=e.toGraphic();this._graphicsLayer.add(t),m(t,e),this._sketchViewModel.update(t)}async create(e){if(this.enabled){switch(this._createMode=e,e){case"stop":this.layer.defaultSymbols.stops?.unlocated&&(this._sketchViewModel.pointSymbol=this.layer.defaultSymbols.stops.unlocated.clone());break;case"point-barrier":this.layer.defaultSymbols.pointBarriers&&(this._sketchViewModel.pointSymbol=this.layer.defaultSymbols.pointBarriers.clone());break;case"polyline-barrier":this.layer.defaultSymbols.polylineBarriers&&(this._sketchViewModel.polylineSymbol=this.layer.defaultSymbols.polylineBarriers.clone());break;case"polygon-barrier":this.layer.defaultSymbols.polygonBarriers&&(this._sketchViewModel.polygonSymbol=this.layer.defaultSymbols.polygonBarriers.clone())}switch(e){case"stop":case"point-barrier":return this._sketchViewModel.create("point");case"polyline-barrier":return this._sketchViewModel.create("polyline");case"polygon-barrier":return this._sketchViewModel.create("polygon")}}}delete(){for(const e of this.selectedNetworkFeatures)this.remove(e)}remove(e){const t=this._graphicsLayer.graphics.find(t=>b(t)===e);t&&(this._graphicsLayer.remove(t),this._removeNetworkFeature(e))}_activate(){this._loadClonedGraphics(),this.view.map.add(this._graphicsLayer)}_deactivate(){this._sketchViewModel.cancel(),this._graphicsLayer.removeFromParent(),this._graphicsLayer.graphics.destroyAll()}_loadClonedGraphics(){const e=[this.layer.stops,this.layer.pointBarriers,this.layer.polylineBarriers,this.layer.polygonBarriers].flatMap(e=>e.toArray().map(e=>{const t=e.toGraphic();return t.networkFeature=e,t}));this._graphicsLayer.graphics.destroyAll(),this._graphicsLayer.addMany(e)}_removeNetworkFeature(e){switch(e.type){case"stop":this.layer.stops.remove(e);break;case"point-barrier":this.layer.pointBarriers.remove(e);break;case"polyline-barrier":this.layer.polylineBarriers.remove(e);break;case"polygon-barrier":this.layer.polygonBarriers.remove(e)}}};e([o()],_.prototype,"_routeLayerWaypointVisualization",void 0),e([o()],_.prototype,"enabled",void 0),e([o({constructOnly:!0})],_.prototype,"interactiveOptions",void 0),e([o({constructOnly:!0})],_.prototype,"layer",void 0),e([o({readOnly:!0})],_.prototype,"selectedNetworkFeatures",null),e([o()],_.prototype,"sketchActive",null),e([o()],_.prototype,"updating",null),e([o({constructOnly:!0})],_.prototype,"view",void 0),_=e([s("esri.views.2d.layers.support.RouteLayerInteraction")],_);export{_ as RouteLayerInteraction};