"use strict";(self.webpackChunk_farmos_org_farmos_map=self.webpackChunk_farmos_org_farmos_map||[]).push([[723],{2832:(e,t,a)=>{a.r(t),a.d(t,{default:()=>F});var n=a(8775),s=a(245),i=a(5487),r=a(5010),l=a(7517),o=a(8373),c=a(3232),h=a(6002),d=a(933),g=a(8714),u=a(9466),m=a(5289),w=a(8813),f=a(7673);class p extends n.default{constructor(e){const t=e||{};super({element:document.createElement("div"),target:t.target});const{element:a}=this,n=t.className||"ol-edit";a.className=`${n} ${s.XV} ${s.hg}`;const i=document.createElement("div");i.className="ol-edit-buttons draw",a.appendChild(i);const r=document.createElement("div");r.className="ol-edit-buttons actions",a.appendChild(r),this.buttons={};const l=[{name:"polygon",label:'',tooltip:"Draw a Polygon",draw:"Polygon",element:i},{name:"line",label:'',tooltip:"Draw a Line",draw:"LineString",element:i},{name:"point",label:"•",tooltip:"Draw a Point",draw:"Point",element:i},{name:"circle",label:'',tooltip:"Draw a Circle",draw:"Circle",element:i},{name:"modify",label:'',tooltip:"Modify features",element:r},{name:"move",label:'',tooltip:"Move features",element:r},{name:"delete",label:'',tooltip:"Delete selected feature",visible:!1,element:r}];for(let e=0;e{this.layer.getSource().removeFeature(e),this.snapInteraction&&this.snapInteraction.removeFeature(e)})),this.selectInteraction.getFeatures().clear(),this.eventListeners.delete.forEach((({cb:e,format:t})=>{e(t.writeFeatures(this.getFeatures(),w.Z))})),void this.toggleDeleteButton(!1);this.disableAll(),this.toggleActiveButton(e.target.name),this.enableEscape(),["point","line","polygon","circle"].includes(e.target.name)?(this.enableDraw(e.target.draw),this.enableSnap()):"modify"===e.target.name?(this.enableSelect(),this.enableModify(),this.enableSnap()):"move"===e.target.name&&(this.enableSelect(),this.enableMove())}}handleEscape(e){"Escape"===e.key&&(this.disableAll(),document.removeEventListener(i.Z.KEYDOWN,this.handleEscape,!1))}enableDraw(e){let t;"Circle"===e&&(t=(0,r.N_)(100)),this.drawInteraction=new r.ZP({source:this.layer.getSource(),type:e,geometryFunction:t}),this.getMap().addInteraction(this.drawInteraction),Object.entries(this.eventListeners).forEach((([e,t])=>{["drawstart","drawend"].includes(e)&&t.forEach((({cb:t,format:a})=>{this.drawInteraction.on(e,(e=>{const n=a.writeFeatures(this.getFeatures().concat(e.feature),w.Z);t(n,e)}))}))})),this.drawInteraction.on("drawend",(e=>{e.feature&&this.snapInteraction&&this.snapInteraction.addFeature(e.feature)}))}enableSelect(){this.selectInteraction||(this.selectInteraction=new l.Z({layers:[this.layer]}),Object.entries(this.eventListeners).forEach((([e,t])=>{["select"].includes(e)&&t.forEach((({cb:t,format:a})=>{this.selectInteraction.on(e,(e=>{const n=a.writeFeatures(e.selected,w.Z);t(n,e)}))}))})),this.selectInteraction.on("select",(e=>{e.selected.length?this.toggleDeleteButton(!0):this.toggleDeleteButton(!1)}))),this.getMap().addInteraction(this.selectInteraction)}enableModify(){this.modifyInteraction||(this.modifyInteraction=new o.Z({features:this.selectInteraction.getFeatures()}),Object.entries(this.eventListeners).forEach((([e,t])=>{["modifystart","modifyend"].includes(e)&&t.forEach((({cb:t,format:a})=>{this.modifyInteraction.on(e,(e=>{const n=a.writeFeatures(this.getFeatures(),w.Z);t(n,e)}))}))}))),this.getMap().addInteraction(this.modifyInteraction)}enableMove(){this.translateInteraction||(this.translateInteraction=new c.Z({features:this.selectInteraction.getFeatures()}),Object.entries(this.eventListeners).forEach((([e,t])=>{["translatestart","translating","translateend"].includes(e)&&t.forEach((({cb:t,format:a})=>{this.translateInteraction.on(e,(e=>{const n=a.writeFeatures(this.getFeatures(),w.Z);t(n,e)}))}))}))),this.getMap().addInteraction(this.translateInteraction)}enableSnap(){this.snapInteraction||(this.snapInteraction=new h.Z({features:this.layer.getSource().getFeaturesCollection()||new g.Z}),(0,f.Z)(this.getMap().getLayerGroup(),(e=>{if("function"==typeof e.getSource){const t=e.getSource();if("null"!==t&&t instanceof d.default){const e=t.getFeatures();"ready"===t.getState()&&e.length>0&&e.forEach((e=>{this.snapInteraction.addFeature(e)}))}}}))),this.getMap().addInteraction(this.snapInteraction)}enableEscape(){this.handleEscape=this.handleEscape.bind(this),document.addEventListener(i.Z.KEYDOWN,this.handleEscape,!1)}disableAll(){["drawInteraction","modifyInteraction","selectInteraction","snapInteraction","translateInteraction"].forEach((e=>{this[e]&&("selectInteraction"===e&&this[e].getFeatures().clear(),this.getMap().removeInteraction(this[e]))})),this.toggleActiveButton(!1,!1),this.toggleDeleteButton(!1),this.eventListeners.disable.forEach((({cb:e,format:t})=>{e(t.writeFeatures(this.getFeatures(),w.Z))}))}toggleActiveButton(e,t=!0){Object.keys(this.buttons).forEach((a=>{this.buttons[a].name===e&&t?this.buttons[a].classList.add("active"):this.buttons[a].classList.remove("active")}))}toggleDeleteButton(e){this.buttons.delete.style.display=e?"block":"none"}addInteractionListener(e,t,a=new u.Z){const n=["drawstart","drawend","modifystart","modifyend","translatestart","translating","translateend","select","delete","disable"];if(!n.includes(e))throw new Error(`Invalid event type. Valid options include: ${n.join(", ")}`);this.eventListeners[e].includes({cb:t,format:a})||this.eventListeners[e].push({cb:t,format:a})}getFeatures(){return this.layer.getSource().getFeatures()}getWKT(){return(new m.Z).writeFeatures(this.getFeatures(),w.Z)}getGeoJSON(){return(new u.Z).writeFeatures(this.getFeatures(),w.Z)}wktOn(e,t){this.formatOn(e,t,new m.Z)}geoJSONOn(e,t){this.formatOn(e,t,new u.Z)}formatOn(e,t,a){"featurechange"!==e?this.addInteractionListener(e,t,a):["drawend","modifyend","translating","translateend","delete"].forEach((e=>{this.addInteractionListener(e,t,a)}))}}const v=p;var b=a(2290),y=a(5984),I=a(9556);function E(e,t,a){const n=(0,y.DE)(e,t,a),{length:s}=n,i=a>1?a:2;for(let e=0;e180&&(n[e]-=360);return n}const F={attach(e,{layer:t}={}){!function(){const e=(0,b.get)("EPSG:3857"),t=(0,b.get)("EPSG:4326");(0,I.Od)(e,t),(0,I.IH)(e,t,E)}();const a=t||e.addLayer("vector",{title:"Drawing",group:"Editable layers",color:"orange"}),n="us"===e.options.units?"us":"metric";e.edit=new v({layer:a,units:n}),e.map.addControl(e.edit)}}}}]);