From 71d793a067e251aa1caae8df29ee1d93fa03846a Mon Sep 17 00:00:00 2001 From: volterra79 Date: Fri, 24 Jan 2025 12:38:19 +0100 Subject: [PATCH] :sparkles: Client https://github.com/g3w-suite/g3w-client-plugin-editing/pull/144/commits/3629da2509e4bcc44f83e9497bb356d5d264e518 --- g3w-admin/editing/static/editing/js/plugin.js | 12 ++++++------ g3w-admin/editing/static/editing/js/plugin.js.map | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/g3w-admin/editing/static/editing/js/plugin.js b/g3w-admin/editing/static/editing/js/plugin.js index dd01f8177..430b7b02d 100644 --- a/g3w-admin/editing/static/editing/js/plugin.js +++ b/g3w-admin/editing/static/editing/js/plugin.js @@ -5,7 +5,7 @@ plugins["editing"] = Object.assign(plugins["editing"] || {}, { version : "3.9.0-issue_143", - hash : "fb8b47d", + hash : "3629da2", branch : "issue_143", }); } @@ -61,7 +61,7 @@ > - `,name:"Saveall",props:{update:{type:Boolean},valid:{type:Boolean}},data(){return{enabled:y.Stack._workflows.slice(0,y.Stack.getLength()-1).every(h=>{let f=(h.getContext().service instanceof Ea?h.getContext().service.getState():{}).valid;return f||f===void 0}),isChild:y.Stack.getLength()>1&&!(y.Stack.getLength()===2&&y.Stack.getFirst().isType("edittable"))}},computed:{disabled(){return!this.enabled||!(this.valid&&this.update)}},methods:{async saveAll(){M.setLoadingContent(!0),M.disableContent(!0),await Promise.allSettled([...y.Stack._workflows].reverse().filter(h=>typeof h.getLastStep()._saveAll=="function").map(h=>new Promise(async f=>{let u=h.getLastStep(),p=h.getContext().service.state.fields.filter(m=>u._multi?m.value!==null:!0);if(p.length===0)return;await y.Stack.getCurrent().getContextService().saveDefaultExpressionFieldsNotDependencies(),u._features.forEach(m=>u.getInputs().layer.setFieldsWithValues(m,p));let _=u._features.map(m=>m.clone());return u._isContentChild&&(u.getInputs().relationFeatures={newFeatures:_,originalFeatures:u._originalFeatures}),await u.fireEvent("saveform",{newFeatures:_,originalFeatures:u._originalFeatures}),_.forEach((m,v)=>u.getContext().session.pushUpdate(u.layerId,m,u._originalFeatures[v])),await It({layerId:u.layerId,features:_,fields:p,task:u}),u.fireEvent("savedfeature",_),u.fireEvent(`savedfeature_${u.layerId}`,_),u.getContext().session.save(),f()})));try{await w(g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").service.commit({modal:!1})),[...y.Stack._workflows].reverse().filter(h=>typeof h.getLastStep()._saveAll=="function").forEach(h=>{let f=h.getContext().service;f.setUpdate(!1,{force:!1});let u=f.feature;u.isNew()&&(u.state.new=!1,f.force.update=!1),Object.entries(h.getInputs().layer.getEditingSource().readFeatures().find(p=>p.getUid()===u.getUid()).getProperties()).forEach(([p,_])=>{let m=f.getFields().find(v=>p===v.name);m&&(m.value=m._value=_)})})}catch(h){console.warn(h)}M.setLoadingContent(!1),M.disableContent(!1)},async closeForm(){let h=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.toolboxselected.getActiveTool();await w(h.stop()),y.Stack.clear(),h.getOperator().runOnce||h.start()}}},buttons:[{id:"save",title:this._isContentChild?y.Stack.getParent().getBackButtonLabel()||"plugins.editing.form.buttons.save_and_back":"plugins.editing.form.buttons.save",type:"save",class:"btn-success",cbk:async h=>{if(h=this._multi?h.filter(u=>u.value!==null):h,h.length===0){a(e);return}let f=[];M.setLoadingContent(!0),M.disableContent(!0),await y.Stack.getCurrent().getContextService().saveDefaultExpressionFieldsNotDependencies(),M.setLoadingContent(!1),M.disableContent(!1),this._features.forEach(u=>{e.layer.setFieldsWithValues(u,h),f.push(u.clone())}),this._isContentChild&&(e.relationFeatures={newFeatures:f,originalFeatures:this._originalFeatures}),await this.fireEvent("saveform",{newFeatures:f,originalFeatures:this._originalFeatures}),f.forEach((u,p)=>s.session.pushUpdate(this.layerId,u,this._originalFeatures[p])),await It({layerId:this.layerId,features:f,fields:h,task:this}),M.setModal(!1),this.fireEvent("savedfeature",f),this.fireEvent(`savedfeature_${this.layerId}`,f),this._isContentChild&&y.Stack.getParents().filter(u=>u.getContextService()&&u.getContextService().setUpdate).forEach(u=>u.getContextService().setUpdate(!0,{force:!0})),a(e)}},{id:"cancel",title:"plugins.editing.form.buttons.cancel",type:"cancel",class:"btn-danger",eventButtons:{update:{false:{id:"close",title:"close",type:"cancel",class:"btn-danger"}}},cbk:()=>{this.fireEvent("cancelform",e.features),n(e)}}]});o.handleRelation=async h=>{if(this._multi){M.showUserMessage({type:"info",message:"plugins.editing.errors.editing_multiple_relations",duration:3e3,autoclose:!0});return}M.setLoadingContent(!0),await Fe(e.layer.getRelationById(h.relation.name).getChild()),o.setCurrentComponentById(h.relation.name),M.setLoadingContent(!1)},o.addComponents([...g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.formComponents[c]||[],...at({layerId:c,relations:this._multi?[]:e.layer.getRelations().getArray().filter(h=>h.getType()!=="ONE"&&h.getFather()===c),feature:this._multi?!1:e.features[e.features.length-1]}).map(({relation:h,relations:f})=>({title:"plugins.editing.edit_relation",name:h.name,id:h.id,header:!1,component:Vue.extend({mixins:[(_s(),xe(ps))],name:`relation_${Date.now()}`,data(){return{layerId:c,relation:h,relations:f}}})}))]),this.fireEvent("openform",{layerId:this.layerId,session:s.session,feature:this._originalFeature,formService:o}),y.Stack.getCurrent()&&y.Stack.getCurrent().setContextService(o),cs({layerId:this.layerId,fields:l,formService:o}).then(h=>this._unwatchs=h),this.disableSidebar(!0)})})}stop(){this.disableSidebar(!1);let e=this._isContentChild===!1||y.Stack.getLength()===2&&y.Stack.getParent().isType("edittable");e&&(M.getService("map").disableClickMapControls(!1),M.setModal(!1));let s=e&&y.Stack.getCurrent().getContextService();s&&s.setUpdate&&this._isContentChild===!1&&s.setUpdate(!1,{force:!1}),M.closeForm({pop:this.push||this._isContentChild&&M.getContentLength()>1}),g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").resetCurrentLayout(),this.fireEvent("closeform"),this.fireEvent(`closeform_${this.layerId}`),this.layerId=null,this._unwatchs.forEach(i=>i()),this._unwatchs=[]}},ke=class extends F{constructor(e={}){e.help="editing.steps.help.edit_table",super(e)}run(e,s){return g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").setCurrentLayout(),b(new Promise((i,a)=>{this._isContentChild=y.Stack.getLength()>1;let n=e.layer.readEditingFeatures()||[],r=(e.layer.getEditingFields()||[]).filter(c=>n.length?Object.keys(n[0].getProperties()).includes(c.name):!0);this._isContentChild=y.Stack.getLength()>1;let l=this._isContentChild?s.excludeFields||[]:[],g=Object.assign(new wa,{state:{inputs:e,context:s,promise:{resolve:i,reject:a},headers:r,features:n,rows:n.length>0?(l.length>0?n.filter(c=>!l.reduce((o,h,f)=>o&&s.fatherValue[f]===`${c.get(h)}`,!0)):n).map(c=>r.map(o=>o.name).reduce((o,h)=>Object.assign(o,{[h]:ce({layerId:e.layer.getId(),feature:c,property:h}),__gis3w_feature_uid:c.getUid()}),{})):n,title:`${e.layer.getName()}`||"Link relation",isrelation:this._isContentChild,capabilities:e.layer.getEditingCapabilities(),layerId:e.layer.getId(),workflow:null}});M.showContent({content:new Fa({title:`${e.layer.getName()}`,push:this._isContentChild,service:g,state:g.state,internalComponent:new(Vue.extend((vs(),xe(ys)).default))({service:g})}),push:this._isContentChild,showgoback:!1,closable:!1})}))}stop(){this.disableSidebar(!1),M[this._isContentChild?"popContent":"closeContent"](),g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").resetCurrentLayout()}},re=class extends F{constructor(e={}){e.help="editing.steps.help.pick_feature",e.highlight=e.highlight||!1,e.multi=e.multi||!1,super(e)}run(e){let s=new Promise(i=>{this.addInteraction(new ae({layer:e.layer.getEditingLayer()}),{picked:a=>{e.features.length===0&&(e.features=a.features,e.coordinate=a.coordinate),this._steps&&this.setUserMessageStepDone("select"),i(e)}})});return b(async()=>(V({promise:b(s),inputs:e,style:this.selectStyle}),s))}},ge=class extends F{constructor(e={},s){e.help=e.help||"editing.steps.help.select_elements",super(e),this._selectInteractions=[],this.multipleselectfeatures=[],this._originalStyle,this._vectorLayer,s&&this.on("run",()=>{this.emit("next-step",g3wsdk.core.i18n.tPlugin("editing.steps.help.select_elements"))})}run(e,s){let i=e.layer,a=this._options.type||"bbox",n=a==="multiple"&&!!this._steps.select.buttonnext;return b(new Promise((r,l)=>{if(n){let{done:c}=this._steps.select.buttonnext;this._steps.select.buttonnext.done=()=>{c&&c instanceof Function&&c(),r(e)}}let g={};if(["single","multiple"].includes(a)&&(g.single=new ae({layer:i.getEditingLayer()}),g.single.on("picked",async({features:c})=>{let o;if(c.length>1)try{o=await le({features:c,inputs:this.getInputs()})}catch(h){console.warn(h)}else o=c[0];o&&(e.features=[o],n?ot([o],e,this.multipleselectfeatures,this):(this._originalStyle=me(e.features),this._steps&&this.setUserMessageStepDone("select"),r(e)))})),["multiple","bbox"].includes(a)&&bs.ismobile&&(this._vectorLayer=new ol.layer.Vector({source:new ol.source.Vector({})}),this.getMap().addLayer(this._vectorLayer),g.multi=new ol.interaction.Draw({type:"Circle",source:this._vectorLayer.getSource(),geometryFunction:ol.interaction.Draw.createBox()}),g.multi.on("drawend",c=>{let o=i.getEditingLayer().getSource().getFeaturesInExtent(c.feature.getGeometry().getExtent());n?ot(o,e,this.multipleselectfeatures,this):o.length>0?(e.features=o,this._originalStyle=me(o),this._steps&&this.setUserMessageStepDone("select"),setTimeout(()=>r(e),500)):l()})),["multiple","bbox"].includes(a)&&!bs.ismobile&&(g.dragbox=new ol.interaction.DragBox({condition:ol.events.condition.shiftKeyOnly}),g.dragbox.on("boxend",()=>{let c=[],o=g.dragbox.getGeometry().getExtent();i.getEditingLayer().getSource().forEachFeatureIntersectingExtent(o,h=>{c.push(h)}),n?ot(c,e,this.multipleselectfeatures,this):c.length>0?(e.features=c,this._originalStyle=me(c),this._steps&&this.setUserMessageStepDone("select"),r(e)):l()})),a==="external"){let c=i.getGeometryType(),o=i.getId(),h=i.getEditingLayer().getSource(),{session:f}=this.getContext();g.external=new ae({layers:M.getService("map").getExternalLayers().filter(u=>{let p=u.getType()=="VECTOR"&&u.getSource().getFeatures();return p.length>0?ie(p[0].getGeometry().getType(),c):!0})}),g.external.on("picked",u=>{if(!(u.features.length>0)){l();return}let p=i.getEditingFields(),_=u.features[0].getGeometry();c!==_.getType()&&u.feature.setGeometry(ka(_,c));let m=new ws({feature:u.feature,properties:p.map(v=>((v.pk||v.input.type==="media"||u.feature.get(v.name)===void 0)&&u.feature.set(v.name,null),v.name))});Z({inputs:e,context:s,feature:m}).finally(()=>{Sa({feature:m}),m.setTemporaryId(),h.addFeature(m),f.pushAdd(o,m,!1),e.features.push(m),r(e)})})}Object.values(g).forEach(c=>this.addInteraction(c)),this._selectInteractions.push(...Object.values(g))}))}stop(){Object.values(this.getSteps()||{}).forEach(e=>e.reset&&e.reset()),this._selectInteractions.forEach(e=>this.removeInteraction(e)),this._vectorLayer&&this.getMap().removeLayer(this._vectorLayer),this.getInputs().features.forEach(e=>e.setStyle(this._originalStyle)),this._originalStyle=null,this._vectorLayer=null,this._selectInteractions=[],this.multipleselectfeatures=[]}}});var ks={};Se(ks,{default:()=>Na});function Da(t,e,s,i,a,n,r,l,g,c){let o=(typeof s=="function"?s.options:s)||{};return o.__file="CopyFeaturesFromOtherLayers.vue",o.render||(o.render=t.render,o.staticRenderFns=t.staticRenderFns,o._compiled=!0,a&&(o.functional=!0)),o._scopeId=i,o}var Ra,Pa,Aa,Ma,Ba,Oa,ja,Ua,Na,Ss=I(()=>{Ra={name:"Copyfeaturesfromotherlayers",data(){return{id:this.$options.layers.find(t=>t.selected).id}},watch:{id(t){this.$options.layers.forEach(e=>e.selected=t===e.id)}}},Pa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("section",[s("div",{attrs:{id:"g3w-select-editable-layers-content"}},[s("select",{directives:[{name:"select2",rawName:"v-select2",value:"id",expression:"'id'"}],attrs:{id:"g3w-select-editable-layers-to-copy"}},t._l(t.$options.layers,function(i){return s("option",{key:i.id,domProps:{value:i.id}},[t._v(t._s(i.name))])}),0)])])},Aa=[],Ma=void 0,Ba=void 0,Oa=void 0,ja=!1;Ua=Da({render:Pa,staticRenderFns:Aa},Ma,Ra,Ba,ja,Oa,!1,void 0,void 0,void 0),Na=Ua});function Bs({feature:t,coordinates:e}){let s=t.getGeometry(),i=s.getType(),a=(n,r)=>g3wsdk.core.geoutils.areCoordinatesEqual(n,r);switch(i){case"Polygon":case"MultiLineString":return e=e.flat(),s.getCoordinates().flat().every((n,r)=>a(n,e[r]));case"LineString":case"MultiPoint":return s.getCoordinates().every((n,r)=>a(n,e[r]));case"MultiPolygon":return e.length!==s.getPolygons().length?!1:s.getPolygons().some((n,r)=>{let l=e[r].flat();return n.getCoordinates().flat().every((g,c)=>a(g,l[c]))});case"Point":return a(e,s.getCoordinates());default:return!1}}var Os=I(()=>{});var js={};Se(js,{default:()=>lr});function nr(t,e,s,i,a,n,r,l,g,c){let o=(typeof s=="function"?s.options:s)||{};o.__file="Changes.vue",o.render||(o.render=t.render,o.staticRenderFns=t.staticRenderFns,o._compiled=!0,a&&(o.functional=!0)),o._scopeId=i;{let h;if(e&&(h=r?function(f){e.call(this,c(f,this.$root.$options.shadowRoot))}:function(f){e.call(this,l(f))}),h!==void 0)if(o.functional){let f=o.render;o.render=function(p,_){return h.call(_),f(p,_)}}else{let f=o.beforeCreate;o.beforeCreate=f?[].concat(f,h):[h]}}return o}function Ot(){let t=Ot.styles||(Ot.styles={}),e=typeof navigator<"u"&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());return function(i,a){if(document.querySelector('style[data-vue-ssr-id~="'+i+'"]'))return;let n=e?a.media||"default":i,r=t[n]||(t[n]={ids:[],parts:[],element:void 0});if(!r.ids.includes(i)){let l=a.source,g=r.ids.length;if(r.ids.push(i),a.map&&(l+=` + `,name:"Saveall",props:{update:{type:Boolean},valid:{type:Boolean}},data(){return{enabled:y.Stack._workflows.slice(0,y.Stack.getLength()-1).every(h=>{let f=(h.getContext().service instanceof Ea?h.getContext().service.getState():{}).valid;return f||f===void 0}),isChild:y.Stack.getLength()>1&&!(y.Stack.getLength()===2&&y.Stack.getFirst().isType("edittable"))}},computed:{disabled(){return!this.enabled||!(this.valid&&this.update)}},methods:{async saveAll(){M.setLoadingContent(!0),M.disableContent(!0),await Promise.allSettled([...y.Stack._workflows].reverse().filter(h=>typeof h.getLastStep()._saveAll=="function").map(h=>new Promise(async f=>{let u=h.getLastStep(),p=h.getContext().service.state.fields.filter(m=>u._multi?m.value!==null:!0);if(p.length===0)return;await y.Stack.getCurrent().getContextService().saveDefaultExpressionFieldsNotDependencies(),u._features.forEach(m=>u.getInputs().layer.setFieldsWithValues(m,p));let _=u._features.map(m=>m.clone());return u._isContentChild&&(u.getInputs().relationFeatures={newFeatures:_,originalFeatures:u._originalFeatures}),await u.fireEvent("saveform",{newFeatures:_,originalFeatures:u._originalFeatures}),_.forEach((m,v)=>u.getContext().session.pushUpdate(u.layerId,m,u._originalFeatures[v])),await It({layerId:u.layerId,features:_,fields:p,task:u}),u.fireEvent("savedfeature",_),u.fireEvent(`savedfeature_${u.layerId}`,_),u.getContext().session.save(),f()})));try{await w(g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").service.commit({modal:!1})),[...y.Stack._workflows].reverse().filter(h=>typeof h.getLastStep()._saveAll=="function").forEach(h=>{let f=h.getContext().service;f.setUpdate(!1,{force:!1});let u=f.feature;u.isNew()&&(u.state.new=!1,f.force.update=!1),Object.entries(h.getInputs().layer.getEditingSource().readFeatures().find(p=>p.getUid()===u.getUid()).getProperties()).forEach(([p,_])=>{let m=f.getFields().find(v=>p===v.name);m&&(m.value=m._value=_)})})}catch(h){console.warn(h)}M.setLoadingContent(!1),M.disableContent(!1)},async closeForm(){let h=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.toolboxselected.getActiveTool();await w(h.stop()),y.Stack.clear(),h.getOperator().runOnce||h.start()}}},buttons:[{id:"save",title:this._isContentChild?y.Stack.getParent().getBackButtonLabel()||"plugins.editing.form.buttons.save_and_back":"plugins.editing.form.buttons.save",type:"save",class:"btn-success",cbk:async h=>{if(h=this._multi?h.filter(u=>u.value!==null):h,h.length===0){a(e);return}let f=[];M.setLoadingContent(!0),M.disableContent(!0),await y.Stack.getCurrent().getContextService().saveDefaultExpressionFieldsNotDependencies(),M.setLoadingContent(!1),M.disableContent(!1),this._features.forEach(u=>{e.layer.setFieldsWithValues(u,h),f.push(u.clone())}),this._isContentChild&&(e.relationFeatures={newFeatures:f,originalFeatures:this._originalFeatures}),await this.fireEvent("saveform",{newFeatures:f,originalFeatures:this._originalFeatures}),f.forEach((u,p)=>s.session.pushUpdate(this.layerId,u,this._originalFeatures[p])),await It({layerId:this.layerId,features:f,fields:h,task:this}),M.setModal(!1),this.fireEvent("savedfeature",f),this.fireEvent(`savedfeature_${this.layerId}`,f),this._isContentChild&&y.Stack.getParents().filter(u=>u.getContextService()&&u.getContextService().setUpdate).forEach(u=>u.getContextService().setUpdate(!0,{force:!0})),a(e)}},{id:"cancel",title:"plugins.editing.form.buttons.cancel",type:"cancel",class:"btn-danger",eventButtons:{update:{false:{id:"close",title:"close",type:"cancel",class:"btn-danger"}}},cbk:()=>{this.fireEvent("cancelform",e.features),n(e)}}]});o.handleRelation=async h=>{if(this._multi){M.showUserMessage({type:"info",message:"plugins.editing.errors.editing_multiple_relations",duration:3e3,autoclose:!0});return}M.setLoadingContent(!0),await Fe(e.layer.getRelationById(h.relation.name).getChild()),o.setCurrentComponentById(h.relation.name),M.setLoadingContent(!1)},o.addComponents([...g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.formComponents[c]||[],...at({layerId:c,relations:this._multi?[]:e.layer.getRelations().getArray().filter(h=>h.getType()!=="ONE"&&h.getFather()===c),feature:this._multi?!1:e.features[e.features.length-1]}).map(({relation:h,relations:f})=>({title:"plugins.editing.edit_relation",name:h.name,id:h.id,header:!1,component:Vue.extend({mixins:[(_s(),xe(ps))],name:`relation_${Date.now()}`,data(){return{layerId:c,relation:h,relations:f}}})}))]),this.fireEvent("openform",{layerId:this.layerId,session:s.session,feature:this._originalFeature,formService:o}),y.Stack.getCurrent()&&y.Stack.getCurrent().setContextService(o),cs({layerId:this.layerId,fields:l,formService:o}).then(h=>this._unwatchs=h),this.disableSidebar(!0)})})}stop(){this.disableSidebar(!1);let e=this._isContentChild===!1||y.Stack.getLength()===2&&y.Stack.getParent().isType("edittable");e&&(M.getService("map").disableClickMapControls(!1),M.setModal(!1));let s=e&&y.Stack.getCurrent().getContextService();s&&s.setUpdate&&this._isContentChild===!1&&s.setUpdate(!1,{force:!1}),M.closeForm({pop:this.push||this._isContentChild&&M.getContentLength()>1}),g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").resetCurrentLayout(),this.fireEvent("closeform"),this.fireEvent(`closeform_${this.layerId}`),this.layerId=null,this._unwatchs.forEach(i=>i()),this._unwatchs=[]}},ke=class extends F{constructor(e={}){e.help="editing.steps.help.edit_table",super(e)}run(e,s){return g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").setCurrentLayout(),b(new Promise((i,a)=>{this._isContentChild=y.Stack.getLength()>1;let n=e.layer.readEditingFeatures()||[],r=(e.layer.getEditingFields()||[]).filter(c=>n.length?Object.keys(n[0].getProperties()).includes(c.name):!0);this._isContentChild=y.Stack.getLength()>1;let l=this._isContentChild?s.excludeFields||[]:[],g=Object.assign(new wa,{state:{inputs:e,context:s,promise:{resolve:i,reject:a},headers:r,features:n,rows:n.length>0?(l.length>0?n.filter(c=>!l.reduce((o,h,f)=>o&&s.fatherValue[f]===`${c.get(h)}`,!0)):n).map(c=>r.map(o=>o.name).reduce((o,h)=>Object.assign(o,{[h]:ce({layerId:e.layer.getId(),feature:c,property:h}),__gis3w_feature_uid:c.getUid()}),{})):n,title:`${e.layer.getName()}`||"Link relation",isrelation:this._isContentChild,capabilities:e.layer.getEditingCapabilities(),layerId:e.layer.getId(),workflow:null}});M.showContent({content:new Fa({title:`${e.layer.getName()}`,push:this._isContentChild,service:g,state:g.state,internalComponent:new(Vue.extend((vs(),xe(ys)).default))({service:g})}),push:this._isContentChild,showgoback:!1,closable:!1})}))}stop(){this.disableSidebar(!1),M[this._isContentChild?"popContent":"closeContent"](),g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").resetCurrentLayout()}},re=class extends F{constructor(e={}){e.help="editing.steps.help.pick_feature",e.highlight=e.highlight||!1,e.multi=e.multi||!1,super(e)}run(e){let s=new Promise(i=>{this.addInteraction(new ae({layer:e.layer.getEditingLayer()}),{picked:a=>{e.features.length===0&&(e.features=a.features,e.coordinate=a.coordinate),this._steps&&this.setUserMessageStepDone("select"),i(e)}})});return b(async()=>(V({promise:b(s),inputs:e,style:this.selectStyle}),s))}},ge=class extends F{constructor(e={},s){e.help=e.help||"editing.steps.help.select_elements",super(e),this._selectInteractions=[],this.multipleselectfeatures=[],this._originalStyle,this._vectorLayer,s&&this.on("run",()=>{this.emit("next-step",g3wsdk.core.i18n.tPlugin("editing.steps.help.select_elements"))})}run(e,s){let i=e.layer,a=this._options.type||"bbox",n=a==="multiple"&&!!this._steps.select.buttonnext;return b(new Promise((r,l)=>{if(n){let{done:c}=this._steps.select.buttonnext;this._steps.select.buttonnext.done=()=>{c&&c instanceof Function&&c(),r(e)}}let g={};if(["single","multiple"].includes(a)&&(g.single=new ae({layer:i.getEditingLayer()}),g.single.on("picked",async({features:c})=>{let o;if(c.length>1)try{o=await le({features:c,inputs:this.getInputs()})}catch(h){console.warn(h)}else o=c[0];o&&(e.features=[o],n?ot([o],e,this.multipleselectfeatures,this):(this._originalStyle=me(e.features),this._steps&&this.setUserMessageStepDone("select"),r(e)))})),["multiple","bbox"].includes(a)&&bs.ismobile&&(this._vectorLayer=new ol.layer.Vector({source:new ol.source.Vector({})}),this.getMap().addLayer(this._vectorLayer),g.multi=new ol.interaction.Draw({type:"Circle",source:this._vectorLayer.getSource(),geometryFunction:ol.interaction.Draw.createBox()}),g.multi.on("drawend",c=>{let o=i.getEditingLayer().getSource().getFeaturesInExtent(c.feature.getGeometry().getExtent());n?ot(o,e,this.multipleselectfeatures,this):o.length>0?(e.features=o,this._originalStyle=me(o),this._steps&&this.setUserMessageStepDone("select"),setTimeout(()=>r(e),500)):l()})),["multiple","bbox"].includes(a)&&!bs.ismobile&&(g.dragbox=new ol.interaction.DragBox({condition:ol.events.condition.shiftKeyOnly}),g.dragbox.on("boxend",()=>{let c=[],o=g.dragbox.getGeometry().getExtent();i.getEditingLayer().getSource().forEachFeatureIntersectingExtent(o,h=>{c.push(h)}),n?ot(c,e,this.multipleselectfeatures,this):c.length>0?(e.features=c,this._originalStyle=me(c),this._steps&&this.setUserMessageStepDone("select"),r(e)):l()})),a==="external"){let c=i.getGeometryType(),o=i.getId(),h=i.getEditingLayer().getSource(),{session:f}=this.getContext();g.external=new ae({layers:M.getService("map").getExternalLayers().filter(u=>{let p=u.getType()=="VECTOR"&&u.getSource().getFeatures();return p.length>0?ie(p[0].getGeometry().getType(),c):!0})}),g.external.on("picked",u=>{if(!(u.features.length>0)){l();return}let p=i.getEditingFields(),_=u.features[0].getGeometry();c!==_.getType()&&u.feature.setGeometry(ka(_,c));let m=new ws({feature:u.feature,properties:p.map(v=>((v.pk||v.input.type==="media"||u.feature.get(v.name)===void 0)&&u.feature.set(v.name,null),v.name))});Z({inputs:e,context:s,feature:m}).finally(()=>{Sa({feature:m}),m.setTemporaryId(),h.addFeature(m),f.pushAdd(o,m,!1),e.features.push(m),r(e)})})}Object.values(g).forEach(c=>this.addInteraction(c)),this._selectInteractions.push(...Object.values(g))}))}stop(){Object.values(this.getSteps()||{}).forEach(e=>e.reset&&e.reset()),this._selectInteractions.forEach(e=>this.removeInteraction(e)),this._vectorLayer&&this.getMap().removeLayer(this._vectorLayer),this.getInputs().features.forEach(e=>e.setStyle(this._originalStyle)),this._originalStyle=null,this._vectorLayer=null,this._selectInteractions=[],this.multipleselectfeatures=[]}}});var Ss={};Se(Ss,{default:()=>Na});function Da(t,e,s,i,a,n,r,l,g,c){let o=(typeof s=="function"?s.options:s)||{};return o.__file="CopyFeaturesFromOtherLayers.vue",o.render||(o.render=t.render,o.staticRenderFns=t.staticRenderFns,o._compiled=!0,a&&(o.functional=!0)),o._scopeId=i,o}var Ra,Pa,Aa,Ma,Ba,Oa,ja,Ua,Na,xs=I(()=>{Ra={name:"Copyfeaturesfromotherlayers",data(){return{id:this.$options.layers.find(t=>t.selected).id}},watch:{id(t){this.$options.layers.forEach(e=>e.selected=t===e.id)}}},Pa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("section",[s("div",{attrs:{id:"g3w-select-editable-layers-content"}},[s("select",{directives:[{name:"select2",rawName:"v-select2",value:"id",expression:"'id'"}],attrs:{id:"g3w-select-editable-layers-to-copy"}},t._l(t.$options.layers,function(i){return s("option",{key:i.id,domProps:{value:i.id}},[t._v(t._s(i.name))])}),0)])])},Aa=[],Ma=void 0,Ba=void 0,Oa=void 0,ja=!1;Ua=Da({render:Pa,staticRenderFns:Aa},Ma,Ra,Ba,ja,Oa,!1,void 0,void 0,void 0),Na=Ua});function Bs({feature:t,coordinates:e}){let s=t.getGeometry(),i=s.getType(),a=(n,r)=>g3wsdk.core.geoutils.areCoordinatesEqual(n,r);switch(i){case"Polygon":case"MultiLineString":return e=e.flat(),s.getCoordinates().flat().every((n,r)=>a(n,e[r]));case"LineString":case"MultiPoint":return s.getCoordinates().every((n,r)=>a(n,e[r]));case"MultiPolygon":return e.length!==s.getPolygons().length?!1:s.getPolygons().some((n,r)=>{let l=e[r].flat();return n.getCoordinates().flat().every((g,c)=>a(g,l[c]))});case"Point":return a(e,s.getCoordinates());default:return!1}}var Os=I(()=>{});var js={};Se(js,{default:()=>lr});function nr(t,e,s,i,a,n,r,l,g,c){let o=(typeof s=="function"?s.options:s)||{};o.__file="Changes.vue",o.render||(o.render=t.render,o.staticRenderFns=t.staticRenderFns,o._compiled=!0,a&&(o.functional=!0)),o._scopeId=i;{let h;if(e&&(h=r?function(f){e.call(this,c(f,this.$root.$options.shadowRoot))}:function(f){e.call(this,l(f))}),h!==void 0)if(o.functional){let f=o.render;o.render=function(p,_){return h.call(_),f(p,_)}}else{let f=o.beforeCreate;o.beforeCreate=f?[].concat(f,h):[h]}}return o}function Ot(){let t=Ot.styles||(Ot.styles={}),e=typeof navigator<"u"&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());return function(i,a){if(document.querySelector('style[data-vue-ssr-id~="'+i+'"]'))return;let n=e?a.media||"default":i,r=t[n]||(t[n]={ids:[],parts:[],element:void 0});if(!r.ids.includes(i)){let l=a.source,g=r.ids.length;if(r.ids.push(i),a.map&&(l+=` /*# sourceURL=`+a.map.sources[0]+" */",l+=` /*# sourceMappingURL=data:application/json;base64,`+btoa(unescape(encodeURIComponent(JSON.stringify(a.map))))+" */"),e&&(r.element=r.element||document.querySelector("style[data-group="+n+"]")),!r.element){let c=document.head||document.getElementsByTagName("head")[0],o=r.element=document.createElement("style");o.type="text/css",a.media&&o.setAttribute("media",a.media),e&&(o.setAttribute("data-group",n),o.setAttribute("data-next-index","0")),c.appendChild(o)}if(e&&(g=parseInt(r.element.getAttribute("data-next-index")),r.element.setAttribute("data-next-index",g+1)),r.element.styleSheet)r.parts.push(l),r.element.styleSheet.cssText=r.parts.filter(Boolean).join(` `);else{let c=document.createTextNode(l),o=r.element.childNodes;o[g]&&r.element.removeChild(o[g]),o.length?r.element.insertBefore(c,o[g]):r.element.appendChild(c)}}}}var Qa,er,tr,sr,ir,ar,rr,or,lr,Ds=I(()=>{Os();We();Qa={name:"changes",props:{commits:{type:Object,required:!0},layer:{type:Object,required:!0},relation:{type:Boolean,default:!1}},data(){return{features:this.layer.readFeatures(),efeatures:this.layer.readEditingFeatures()}},methods:{getFormattedValue(t,e){if(t)return e==="geometry"&&t.get(e)?`(${t.get(e).getFlatCoordinates().length/2})`:ce({layerId:this.layer.getId(),feature:t,property:e})},getValue(t,e){return this.getFormattedValue(this.getFeature(t),e)},getEditingValue(t,e){return this.getFormattedValue(this.getEditingFeature(t),e)},hasValue(t,e){let s=this.getFeature(t),i=this.getEditingFeature(t);return!(s&&i&&s.get(e)===null&&i.get(e)===null||s&&!i&&s.get(e)===null)},getId(t){return t.id||t},getEditingFeature(t){return this.efeatures.find(e=>this.getId(t)===e.getId())},getFeature(t){return this.features.find(e=>this.getId(t)===e.getId())},getType(t){let e=this.getEditingFeature(t)||this.getFeature(t);return e&&e.getGeometry&&e.getGeometry()?e.getGeometry().getType():""},isEdited(t,e){let s=this.getFeature(t),i=this.getEditingFeature(t);return[s,i].includes(void 0)?!1:this.getType(t)&&e==="geometry"?!Bs({feature:s,coordinates:i.get(e).getCoordinates()}):i.get(e)!==s.get(e)},getAttrs(t){let e=this.getEditingFeature(t)||this.getFeature(t);return Object.entries(e?e.getProperties():{}).sort((s,i)=>s[0]>i[0])},getLayerById(t){return g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").service.getLayerById(t)}},async mounted(){this.$refs.value.filter(t=>!t.textContent).forEach(t=>t.innerHTML="<empty>")}},er=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",[t.relation?s("h4",{directives:[{name:"t-plugin",rawName:"v-t-plugin:pre",value:"editing.messages.commit.header_relation",expression:"'editing.messages.commit.header_relation'",arg:"pre"}],staticClass:"skin-color g3w-long-text",staticStyle:{"font-weight":"bold",margin:"15px 0"}},[t._v(": "+t._s(t.layer.getName()))]):t._e(),t._v(" "),t._l(Object.keys(t.commits).filter(function(i){return t.commits[i].length}),function(i){return[s("h4",{directives:[{name:"t-plugin",rawName:"v-t-plugin:pre",value:"editing.messages.commit."+i,expression:"`editing.messages.commit.${c}`",arg:"pre"}]},[t._v(" ("+t._s(t.commits[i].length)+") ")]),t._v(" "),s("divider"),t._v(" "),s("ul",t._l(t.commits[i],function(a){return s("li",[s("details",[s("summary",[t._v(t._s(t.getType(a))+" #"+t._s(t.getId(a)))]),t._v(" "),t._l(t.getAttrs(a),function(n){var r=n[0],l=n[1];return[t.hasValue(a,r)?s("dl",[s("dt",[t._v(t._s(r)+":")]),t._v(" "),s("dd",[t.isEdited(a,r)?[s("del",{ref:"value",refInFor:!0},[t._v(t._s(t.getValue(a,r)))]),t._v(" \u2190 "),s("ins",{ref:"value",refInFor:!0},[t._v(t._s(t.getEditingValue(a,r)))])]:s("span",{ref:"value",refInFor:!0},[t._v(t._s(t.getEditingValue(a,r)||t.getValue(a,r)))]),t._v(" "),r==="geometry"?s("i",[s("code",[t._v("")])]):t._e()],2)]):t._e()]})],2)])}),0)]}),t._v(" "),t._l(Object.entries(t.commits.relations),function(i){var a=i[0],n=i[1];return s("changes",{attrs:{commits:{add:n.add,update:n.update,delete:n.delete,relations:n.relations},relation:!0,layer:t.getLayerById(a)}})})],2)},tr=[],sr=function(t){t&&t("data-v-98c805ac_0",{source:"summary[data-v-98c805ac]{display:list-item;font-weight:700;padding:.5em;cursor:pointer;background-color:rgb(255,255,0,.25);font-size:medium;user-select:none}ul[data-v-98c805ac]{list-style:none;padding-left:0}ul>li[data-v-98c805ac]{margin-bottom:8px}ins[data-v-98c805ac]{background-color:#0f0;text-decoration-line:none}del[data-v-98c805ac]{background-color:tomato}dl[data-v-98c805ac]{display:grid;grid-template:auto/.5fr 1fr;margin-bottom:0;word-break:break-all}dt[data-v-98c805ac]{background:#fee}dd[data-v-98c805ac]{background:#f0f1f3}dd[data-v-98c805ac],dt[data-v-98c805ac]{margin:0;padding:.3em .5em;border-top:1px solid #fff}",map:void 0,media:void 0})},ir="data-v-98c805ac",ar=void 0,rr=!1;or=nr({render:er,staticRenderFns:tr},sr,Qa,ir,rr,ar,!1,Ot,void 0,void 0),lr=or});function vr(t,e,s,i,a,n,r,l,g,c){let o=(typeof s=="function"?s.options:s)||{};o.__file="Toolbox.vue",o.render||(o.render=t.render,o.staticRenderFns=t.staticRenderFns,o._compiled=!0,a&&(o.functional=!0)),o._scopeId=i;{let h;if(e&&(h=r?function(f){e.call(this,c(f,this.$root.$options.shadowRoot))}:function(f){e.call(this,l(f))}),h!==void 0)if(o.functional){let f=o.render;o.render=function(p,_){return h.call(_),f(p,_)}}else{let f=o.beforeCreate;o.beforeCreate=f?[].concat(f,h):[h]}}return o}function Dt(){let t=Dt.styles||(Dt.styles={}),e=typeof navigator<"u"&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());return function(i,a){if(document.querySelector('style[data-vue-ssr-id~="'+i+'"]'))return;let n=e?a.media||"default":i,r=t[n]||(t[n]={ids:[],parts:[],element:void 0});if(!r.ids.includes(i)){let l=a.source,g=r.ids.length;if(r.ids.push(i),a.map&&(l+=` @@ -70,7 +70,8 @@ `);else{let c=document.createTextNode(l),o=r.element.childNodes;o[g]&&r.element.removeChild(o[g]),o.length?r.element.insertBefore(c,o[g]):r.element.appendChild(c)}}}}var jt,dr,cr,ur,fe,gr,fr,hr,pr,_r,mr,yr,br,Us,Ns=I(()=>{({GUI:jt}=g3wsdk.gui),{Layer:dr}=g3wsdk.core.layer,{getResolutionFromScale:cr}=g3wsdk.ol.utils,{tPlugin:ur}=g3wsdk.core.i18n,gr={name:"Toolbox",props:["state","resourcesurl"],data(){return{active:!1,helpmessage:null,toggled:{relation:!1,layer:!1},snapAll:!1}},computed:{editDisabled(){return this.state.loading&&!this.state.startstopediting},hasRelations(){return this.state.editing.dependencies.length>0},loading(){return this.state.loading||this.state.changingtools},canEdit(){return this.state.editing.canEdit},father(){return this.state.editing.father&&this.hasRelations},showtoolsoftool(){return this.state.toolsoftool.length>0},isLayerReady(){return this.state.layer.state.editing.ready},toolboxCursor(){return!this.isLayerReady||!this.canEdit?`url(${this.resourcesurl}cursors/mZoomIn.svg), zoom-in`:void 0},get_tool_title(){return t=>g3wsdk.core.ApplicationState.language&&ur(t)}},methods:{select(){this.isLayerReady&&!this.state.selected&&this.$emit("setselectedtoolbox",this.state.id)},fitZoomToScale(t){if(this.state.selected&&!this.canEdit){let e=jt.getService("map");e.goToRes(e.getCenter(),cr(this.state._constraints.scale,e.getMapUnits()))}},toggleEditing(){this.select(),this.toggled.layer=!(this.state.editing.on||this.toggled.layer),this.toggled.layer&&this.state.layer.state.editing.ready&&!this.state.loading&&this.$emit(this.state.editing.on?"stoptoolbox":"starttoolbox",this.state.id),this.toggled.layer||this.$emit("stoptoolbox",this.state.id)},toggleTool(t){t===void 0?this.$emit("stopactivetool",this.state.id):this.$emit("setactivetool",t,this.state.id),this.select()},toggleFilterByRelation(){this.toggled.relation=!this.toggled.relation,this.$emit("update-filter-layers",this.toggled.relation?[this.state.id,...this.state.editing.dependencies]:[])},_initSnap(){let t=(this.state.toolsoftool||[]).find(e=>e.type==="snap");t&&(this.snapFeatures=new ol.Collection,this.snapEvents=[],this.snapToolboxes=[],this.snapUnwatches=[],this.$watch(()=>t.options.checked,()=>this.activeSnapInteraction()),this.$watch(()=>t.options.checkedAll,()=>this.activeSnapInteraction()),this.$watch(()=>t.options.active,()=>{t.options.active?this.activeSnapInteraction():fe&&jt.getService("map").removeInteraction(fe)}),g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").getLayers().filter(e=>dr.LayerTypes.VECTOR===e.getType()).forEach(e=>{let s=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").getToolBoxById(e.getId()),i=s.getLayer().getEditingSource();if(this.snapFeatures.extend(i.readFeatures()),this.snapEvents.push({source:i,olKey:i.getFeaturesCollection().on("add",a=>this.addSnapFeatures([a.element])),settersAndKeys:{addFeatures:i.onbefore("addFeatures",this.addSnapFeatures),addFeature:i.onbefore("addFeature",this.addSnapFeatures),clear:i.onbefore("clear",()=>{i.readFeatures().forEach(a=>this.snapFeatures.remove(a))})}}),t.options.layerId!==e.getId()){let a=s.getState().editing;this.snapUnwatches.push(this.$watch(()=>a.on,this.setShowSnapAll)),this.snapToolboxes.push(a)}}),this.setShowSnapAll())},_unloadSnap(){if(fe)try{this.snapEvents.forEach(t=>{Object.keys(t.settersAndKeys).forEach(e=>{t.source.un(e,t.settersAndKeys[e])}),ol.Observable.unByKey(t.olKey)}),this.snapUnwatches.forEach(t=>t()),fe=null,this.snapUnwatches=null,this.snapToolboxes=null,this.snapEvents=null}catch(t){console.warn(t)}},addSnapFeatures(t){this.snapFeatures.extend(t)},setShowSnapAll(){let t=(this.state.toolsoftool||[]).find(e=>e.type==="snap");t&&(this.snapAll=!!this.snapToolboxes.find(e=>e.on),t.options.checkedAll=t.options.showSnapAll?t.options.checkedAll:!1)},activeSnapInteraction(){let t=jt.getService("map"),e=(this.state.toolsoftool||[]).find(s=>s.type==="snap");fe&&t.removeInteraction(fe),fe=null,(e.options.checked||e.options.checkedAll)&&e.options.active&&(fe=new ol.interaction.Snap({source:!e.options.checkedAll&&e.options.checked&&e.options.source,features:e.options.checkedAll&&this.snapFeatures}),t.addInteraction(fe))}},watch:{async"state.activetool"(t){await this.$nextTick(),this.helpmessage=t&&(t.messages.help||t.name)},"state.editing.on"(t){this.$emit("on-editing",t)},"state.toolsoftool"(t,e){t.length?this._initSnap():(e.filter(s=>s.type==="measure").forEach(s=>s.options.onChange(!1)),this._unloadSnap())}},created(){this.$emit("canEdit",{id:this.state.id})},async mounted(){await this.$nextTick()},beforeDestroy(){this._unloadSnap()}},fr=function(){var t,e=this,s=e.$createElement,i=e._self._c||s;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.state.show,expression:"state.show"}],staticClass:"toolbox",attrs:{id:"id_toolbox_"+e.state.id}},[i("div",{staticClass:"panel",class:{mobile:e.isMobile(),toolboxselected:e.state.selected,toolboxactive:e.state.editing.on&&e.canEdit,geolayer:e.state.layer.isGeoLayer()},on:{click:function(a){return a.stopPropagation(),e.select.apply(null,arguments)}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:!e.isLayerReady,expression:"!isLayerReady"}],staticClass:"bar-loader"}),e._v(" "),e.state.toolboxheader?i("div",{staticClass:"panel-heading container",style:{background:e.state.color}},[e.father?i("i",{directives:[{name:"t-tooltip",rawName:"v-t-tooltip:right.create",value:"plugins.editing.tooltip.filter_by_relation",expression:"'plugins.editing.tooltip.filter_by_relation'",arg:"right",modifiers:{create:!0}}],class:"filter-by-relation "+e.g3wtemplate.font.relation,on:{click:e.toggleFilterByRelation}}):e._e(),e._v(" "),i("span",{staticClass:"panel-title"},[e._v(e._s(e.state.title))]),e._v(" "),i("i",{directives:[{name:"disabled",rawName:"v-disabled",value:e.editDisabled,expression:"editDisabled"},{name:"t-tooltip",rawName:"v-t-tooltip:left.create",value:"plugins.editing.tooltip.edit_layer",expression:"'plugins.editing.tooltip.edit_layer'",arg:"left",modifiers:{create:!0}}],staticClass:"start-editing editbtn skin-tooltip-left",class:(t={"pull-right":!e.isMobile(),enabled:e.isLayerReady,"g3w-icon-toggled":e.state.editing.on},t[e.g3wtemplate.font[e.state.editing.on||e.toggled.layer?"checkmark":"pencil"]]=!0,t),on:{click:function(a){return a.stopPropagation(),e.toggleEditing.apply(null,arguments)}}})]):e._e(),e._v(" "),i("bar-loader",{attrs:{loading:e.loading}}),e._v(" "),!e.state.changingtools&&(e.state.editing.on||e.toggled.layer)?i("div",{class:{"panel-body":!0,disabled:!e.isLayerReady||!e.canEdit},style:{cursor:e.toolboxCursor,padding:"15px"},on:{click:e.fitZoomToScale}},[e.state.layer.isGeoLayer()?e._e():i("div",{staticClass:"info"},[i("i",{class:e.g3wtemplate.font.info}),e._v(" "),i("span",{directives:[{name:"t-plugin",rawName:"v-t-plugin",value:"editing.messages.toolbox_has_no_geometry",expression:"'editing.messages.toolbox_has_no_geometry'"}]}),e._v(" "),i("divider")],1),e._v(" "),e.hasRelations?i("div",{staticClass:"info"},[i("i",{class:e.g3wtemplate.font.info}),e._v(" "),i("span",{directives:[{name:"t-plugin",rawName:"v-t-plugin",value:"editing.messages.toolbox_has_relation",expression:"'editing.messages.toolbox_has_relation'"}]}),e._v(" "),i("divider")],1):e._e(),e._v(" "),e.state.message?i("div",{staticStyle:{color:"#000"}},[i("div",{directives:[{name:"t-plugin",rawName:"v-t-plugin",value:e.state.message,expression:"state.message"}],staticClass:"text-justify"}),e._v(" "),i("divider")],1):e._e(),e._v(" "),i("div",{staticClass:"tools-content"},e._l(e.state.tools,function(a){var n;return a.visible?i("div",{key:a.id,class:(n={enabled:a.enabled,toggled:a.active},n["editbtn "+a.id]=!0,n),on:{click:function(r){r.preventDefault(),r.stopPropagation(),a.enabled&&e.toggleTool(a.active?void 0:a.id)}}},[i("img",{attrs:{height:"25",width:"25",src:e.resourcesurl+"images/"+a.icon,title:e.get_tool_title(""+a.name)}})]):e._e()}),0),e._v(" "),i("div",{staticClass:"message",attrs:{id:"id_toolbox_messages_"+e.state.id}},[i("transition",{attrs:{name:"fade"}},[e.showtoolsoftool?i("div",{attrs:{id:"toolsoftoolcontainer"}},[e._l(e.state.toolsoftool,function(a){return[a.type==="measure"?i("div",{staticClass:"snap-tool"},[i("input",{directives:[{name:"model",rawName:"v-model",value:a.options.checked,expression:"tool.options.checked"}],staticClass:"magic-checkbox snap_tools_of_tools",attrs:{id:"g3w_editing_show_measure_tool",type:"checkbox"},domProps:{checked:Array.isArray(a.options.checked)?e._i(a.options.checked,null)>-1:a.options.checked},on:{change:[function(n){var r=a.options.checked,l=n.target,g=!!l.checked;if(Array.isArray(r)){var c=null,o=e._i(r,c);l.checked?o<0&&e.$set(a.options,"checked",r.concat([c])):o>-1&&e.$set(a.options,"checked",r.slice(0,o).concat(r.slice(o+1)))}else e.$set(a.options,"checked",g)},function(){return a.options.onChange(a.options.checked)}]}}),e._v(" "),i("label",{directives:[{name:"t-tooltip",rawName:"v-t-tooltip:right.create",value:"plugins.editing.toolsoftool.measure",expression:"'plugins.editing.toolsoftool.measure'",arg:"right",modifiers:{create:!0}}],attrs:{for:"g3w_editing_show_measure_tool"}},[i("b",{class:e.g3wtemplate.font.measure})])]):a.type==="snap"?i("div",{staticClass:"tools-of-tool-snap"},[i("input",{directives:[{name:"model",rawName:"v-model",value:a.options.checked,expression:"tool.options.checked"}],staticClass:"magic-checkbox snap_tools_of_tools",attrs:{type:"checkbox",id:"snap_"+e.state.id},domProps:{checked:Array.isArray(a.options.checked)?e._i(a.options.checked,null)>-1:a.options.checked},on:{change:[function(n){var r=a.options.checked,l=n.target,g=!!l.checked;if(Array.isArray(r)){var c=null,o=e._i(r,c);l.checked?o<0&&e.$set(a.options,"checked",r.concat([c])):o>-1&&e.$set(a.options,"checked",r.slice(0,o).concat(r.slice(o+1)))}else e.$set(a.options,"checked",g)},function(n){e.snapAll&&a.options.checked&&(a.options.checkedAll=!1)}]}}),e._v(" "),i("label",{directives:[{name:"t-tooltip",rawName:"v-t-tooltip:right.create",value:"plugins.editing.toolsoftool.snap",expression:" 'plugins.editing.toolsoftool.snap'",arg:"right",modifiers:{create:!0}}],attrs:{for:"snap_"+e.state.id}},[i("span",{class:e.g3wtemplate.font.magnete})]),e._v(" "),e.snapAll?i("input",{directives:[{name:"model",rawName:"v-model",value:a.options.checkedAll,expression:"tool.options.checkedAll"}],staticClass:"magic-checkbox snap_tools_of_tools",attrs:{type:"checkbox",id:"snap_all_"+e.state.id},domProps:{checked:Array.isArray(a.options.checkedAll)?e._i(a.options.checkedAll,null)>-1:a.options.checkedAll},on:{change:[function(n){var r=a.options.checkedAll,l=n.target,g=!!l.checked;if(Array.isArray(r)){var c=null,o=e._i(r,c);l.checked?o<0&&e.$set(a.options,"checkedAll",r.concat([c])):o>-1&&e.$set(a.options,"checkedAll",r.slice(0,o).concat(r.slice(o+1)))}else e.$set(a.options,"checkedAll",g)},function(n){a.options.checkedAll&&(a.options.checked=!1)}]}}):e._e(),e._v(" "),e.snapAll?i("label",{directives:[{name:"t-tooltip",rawName:"v-t-tooltip:left.create",value:"plugins.editing.toolsoftool.snapall",expression:"'plugins.editing.toolsoftool.snapall'",arg:"left",modifiers:{create:!0}}],attrs:{for:"snap_all_"+e.state.id}},[i("span",{class:e.g3wtemplate.font.magnete}),e._v(" "),i("b",{class:e.g3wtemplate.font.layers})]):e._e()]):e._e(),e._v(" "),i("divider")]})],2):e._e()]),e._v(" "),e.helpmessage?i("div",{directives:[{name:"t-plugin",rawName:"v-t-plugin",value:e.helpmessage,expression:"helpmessage"}],staticClass:"toolbox_help_message"}):e._e()],1)]):e._e()],1)])},hr=[],pr=function(t){t&&t("data-v-6686a500_0",{source:".panel.mobile[data-v-6686a500]{margin-bottom:5px}.panel.mobile .panel-heading[data-v-6686a500]{display:flex;justify-content:space-between}.panel.mobile .panel-heading .panel-title[data-v-6686a500]{margin-top:auto;margin-bottom:auto}.panel.mobile .panel-heading .start-editing[data-v-6686a500]{margin:auto;margin-right:0;padding:6px}.panel.mobile .tools-content .editbtn[data-v-6686a500]{padding:9px}.panel.mobile .toolbox .panel-body[data-v-6686a500]{padding:5px!important}.toolbox_help_message[data-v-6686a500]{font-weight:lighter}.toolbox[data-v-6686a500]{padding-bottom:5px}.panel[data-v-6686a500]{border:0!important;margin-bottom:8px}.panel-heading[data-v-6686a500]{border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px;padding:5px 10px 5px 10px;width:100%}.toolboxselected[data-v-6686a500]{box-shadow:0 0 0 3px var(--skin-color)}.panel:not(.toolboxselected) .info[data-v-6686a500]{opacity:.4}.panel:not(.toolboxactive) .panel-heading[data-v-6686a500]{border-radius:3px;filter:grayscale(.8)}.panel:not(.geolayer) .panel-body[data-v-6686a500]{padding-top:0}.panel.toolboxactive:not(.geolayer) .editbtn.start-editing[data-v-6686a500]{color:#fff!important}.panel:not(.geolayer) .panel-heading[data-v-6686a500]{color:#3a4448}.editbtn.start-editing[data-v-6686a500]{padding:10px;color:currentColor!important;font-size:1.1em;margin:0}.panel-title[data-v-6686a500]{font-weight:700;word-break:break-word;padding:8px 0;display:inline-block}#toolsoftoolcontainer[data-v-6686a500]{display:flex;flex-direction:column;margin:5px;padding:5px;border-radius:5px}.info[data-v-6686a500]{color:#000}.info>i[data-v-6686a500]{color:#007bff;padding-right:2px}.info+.tools-content[data-v-6686a500]{margin-top:1em}.filter-by-relation[data-v-6686a500]{margin-right:5px;cursor:pointer;color:currentColor!important}.tools-content[data-v-6686a500]{display:flex;flex-wrap:wrap;gap:10px}.message[data-v-6686a500]{margin-top:5px;margin-bottom:5px;font-size:1.1em;color:#000}.snap-tool[data-v-6686a500]{display:flex}.snap-tool label>b[data-v-6686a500]{color:#222d32!important}.tools-of-tool-snap[data-v-6686a500]{display:flex;width:100%;justify-content:space-between}.tools-of-tool-snap label span[data-v-6686a500]{color:#222d32!important}.panel-body[data-v-6686a500]{padding:15px}.panel-body.disabled[data-v-6686a500]{opacity:.7}.panel-body.disabled>*[data-v-6686a500]{pointer-events:none}",map:void 0,media:void 0})},_r="data-v-6686a500",mr=void 0,yr=!1;br=vr({render:fr,staticRenderFns:hr},pr,gr,_r,yr,mr,!1,Dt,void 0,void 0),Us=br});var $s={};Se($s,{default:()=>Rr});function Tr(t,e,s,i,a,n,r,l,g,c){let o=(typeof s=="function"?s.options:s)||{};o.__file="Editing.vue",o.render||(o.render=t.render,o.staticRenderFns=t.staticRenderFns,o._compiled=!0,a&&(o.functional=!0)),o._scopeId=i;{let h;if(e&&(h=r?function(f){e.call(this,c(f,this.$root.$options.shadowRoot))}:function(f){e.call(this,l(f))}),h!==void 0)if(o.functional){let f=o.render;o.render=function(p,_){return h.call(_),f(p,_)}}else{let f=o.beforeCreate;o.beforeCreate=f?[].concat(f,h):[h]}}return o}function Vt(){let t=Vt.styles||(Vt.styles={}),e=typeof navigator<"u"&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());return function(i,a){if(document.querySelector('style[data-vue-ssr-id~="'+i+'"]'))return;let n=e?a.media||"default":i,r=t[n]||(t[n]={ids:[],parts:[],element:void 0});if(!r.ids.includes(i)){let l=a.source,g=r.ids.length;if(r.ids.push(i),a.map&&(l+=` /*# sourceURL=`+a.map.sources[0]+" */",l+=` /*# sourceMappingURL=data:application/json;base64,`+btoa(unescape(encodeURIComponent(JSON.stringify(a.map))))+" */"),e&&(r.element=r.element||document.querySelector("style[data-group="+n+"]")),!r.element){let c=document.head||document.getElementsByTagName("head")[0],o=r.element=document.createElement("style");o.type="text/css",a.media&&o.setAttribute("media",a.media),e&&(o.setAttribute("data-group",n),o.setAttribute("data-next-index","0")),c.appendChild(o)}if(e&&(g=parseInt(r.element.getAttribute("data-next-index")),r.element.setAttribute("data-next-index",g+1)),r.element.styleSheet)r.parts.push(l),r.element.styleSheet.cssText=r.parts.filter(Boolean).join(` -`);else{let c=document.createTextNode(l),o=r.element.childNodes;o[g]&&r.element.removeChild(o[g]),o.length?r.element.insertBefore(c,o[g]):r.element.appendChild(c)}}}}var oe,Ut,Vs,Nt,wr,kr,Sr,xr,Fr,Er,Ir,Cr,Lr,Rr,zs=I(()=>{Ns();D();({GUI:oe}=g3wsdk.gui),{ApplicationState:Ut,ApplicationService:Vs}=g3wsdk.core,{CatalogLayersStoresRegistry:Nt}=g3wsdk.core.catalog,{DataRouterService:wr}=g3wsdk.core.data,kr={name:"Editing",data(){return{state:this.$options.service.state,service:this.$options.service,resourcesurl:this.$options.resourcesurl,showcommitbar:this.$options.showcommitbar,saving:!1,layersInEditing:0,editingButtonsEnabled:!0,selectedlayers:[],editinglayers:Object.entries(g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").getEditableLayers()).filter(([t,e])=>e.config.editing.visible).map(([t,e])=>({id:t,name:e.getName(),title:e.getTitle()})),activetool:null}},components:{toolbox:Us},transitions:{addremovetransition:"showhide"},methods:{updateFilterLayers(t=[]){t.length>0?(this._selectedlayers=this.selectedlayers,this.selectedlayers=t):(this.selectedlayers=this._selectedlayers,this._selectedlayers=t),$(this.$refs.selectlayers).val(this.selectedlayers).trigger("change")},updateLayersInEditing(t){this.layersInEditing+=t?1:-1},undo(){this.canUndo&&this.service.undo()},redo(){this.canRedo&&this.service.redo()},commit(t){this.canCommit&&(this.saving=!0,this.service.commit({toolbox:this.service.getToolBoxById(t),modal:!1}).always(()=>this.saving=!1))},async startToolBox(t){let e=this.service.getToolBoxById(t),s=Ut.online&&e.getDependencies().find(i=>this.service.getToolBoxById(i).isDirty());s&&await this.commit_dirty(s),e.start()},async stopToolBox(t){let e=this.service.getToolBoxById(t);try{e.state.editing.history.commit&&await w(this.service.commit())}catch(i){console.warn(i)}await e.stop();let s=this.service.getToolBoxes().find(i=>i.state.editing.on)===void 0&&oe.getService("map").getMapControlByType({type:"query"});s&&!s.isToggled()&&s.toggle()},async startTool(t,e){let s=this.service.getToolBoxById(e),i=this.activetool&&e===this.activetool;!i&&this.service.getToolBoxById(s.getDependencies().find(a=>a===this.activetool))&&await this.commit_dirty(this.activetool),i||this.stopTool(this.activetool),this.activetool=e,s.setActiveTool(s.getToolById(t))},stopTool(t){t&&this.service.getToolBoxById(t).stopActiveTool()},async selectToolBox(t){let e=this.service.getToolBoxById(t),i=this.service.getToolBoxes().find(a=>a.isSelected());i&&(i.setSelected(!1),i.clearMessage()),e.setSelected(!0),this.state.toolboxselected=e},async commit_dirty(t){let e=this.service.getToolBoxById(t);try{e.isDirty()&&e.hasDependencies()&&(await w(this.service.commit({toolbox:e})),console.info("[EDITING] committed dirty"))}catch{try{[layerId].concat(e.getDependencies()).forEach(i=>{let a=this.service.getToolBoxById(i),n=a.getEditor();n.getEditingSource().setFeatures((n.readFeatures()||[]).map(r=>r.clone())),a.getSession().getHistory().clear(),a.stopActiveTool()}),console.info("[EDITING] reverted dirty")}catch(i){console.warn(i)}}},_enableEditingButtons(t){this.editingButtonsEnabled=!t},checkOfflineChanges({modal:t=!0,unlock:e=!1}={}){return new Promise((s,i)=>{let a=JSON.parse(window.localStorage.getItem("EDITING_CHANGES")||null);if(!a)return;let n=[],r=[];setTimeout(async()=>{for(let l in a){r.push(l);let g=this.service.getToolBoxById(l),c=a[l];n.push(this.service.commit({toolbox:g,commitItems:c,modal:t}))}try{await w($.when.apply(this.service,n)),s()}catch(l){console.warn(l),i(l)}finally{e&&r.forEach(l=>this.service.getLayerById(l).unlock());try{window.localStorage.setItem("EDITING_CHANGES","{}")}catch(l){console.warn(l)}}},1e3)})}},computed:{canCommit(){return this.state.saveConfig.mode==="default"&&this.state.toolboxselected&&this.state.toolboxselected.state.editing.history.commit&&this.editingButtonsEnabled},canUndo(){let t=this.state.toolboxselected&&this.state.toolboxselected.state.editing.history.undo&&this.editingButtonsEnabled;return this.service.fireEvent("canUndo",t),t},canRedo(){let t=this.state.toolboxselected&&this.state.toolboxselected.state.editing.history.redo&&this.editingButtonsEnabled;return this.service.fireEvent("canRedo",t),t},django_admin_url(){return window.initConfig.user.is_superuser?new URL("/django-admin/editing/g3weditingfeaturelock/",window.initConfig.baseurl):!1},filemanager_url(){return window.initConfig.user.is_superuser?new URL("/filemanager/",window.initConfig.baseurl):!1}},watch:{canCommit(t){window.onbeforeunload=()=>t||void 0},layersInEditing(t){document.getElementsByClassName("close-pane-button")[0].classList[t===0?"remove":"add"]("g3w-disabled")},selectedlayers(t=[]){let e=t.length>0,s=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing");this.editinglayers.forEach(({id:i})=>{let a=s.getToolBoxById(i),n=e&&a.state.editing.history.commit,r=t.includes(i);a.setShow(e?r:!0),e&&!r&&n&&s.commit({toolbox:a}).always(()=>a.stop()),e&&!r&&!n&&a.stop()})}},created(){this._selectedlayers=[],this.appState=Ut,this.unByKeys=this.unByKeys||[],Ut.online&&this.checkOfflineChanges({unlock:!0}),this.unByKeys.push({owner:Vs,setter:"online",key:Vs.onafter("online",()=>this.checkOfflineChanges({modal:!1}).catch(t=>oe.notify.error(t)))}),oe.closeContent(),this.state.open=!1,Nt.getLayers({EDITABLE:!0}).forEach(t=>t.setInEditing(!0)),oe.on("opencontent",this._enableEditingButtons),oe.on("closeform",this._enableEditingButtons),oe.on("closecontent",this._enableEditingButtons)},async beforeDestroy(){this.service.stop(),this.state.open=!1,Nt.getLayers({EDITABLE:!0}).forEach(s=>s.setInEditing(!1)),oe.off("opencontent",this._enableEditingButtons),oe.off("closeform",this._enableEditingButtons),oe.off("closecontent",this._enableEditingButtons),this.unByKeys.forEach(({owner:s,setter:i,key:a})=>s.un(i,a)),this.service.fireEvent("closeeditingpanel");let t=Object.keys(this.state.featuresOnClose);if(t.length){let s={layers:[],fids:[],formatter:1};t.forEach(a=>{let n=[...this.state.featuresOnClose[a]];if(n.length>0){let r=Nt.getLayerById(a);s.layers.push(r),s.fids.push(n)}});let i=s.layers.length?wr.getData("search:layersfids",{inputs:s,outputs:{title:"plugins.editing.editing_changes",show:{loading:!1}}}):Promise.resolve();try{await i}catch(a){console.warn(a)}}this.state.featuresOnClose={},this.service.getToolBoxes().forEach(s=>s.resetDefault());let e=oe.getService("map").getMapControlByType({type:"query"});e&&!e.isToggled()&&e.toggle()}},Sr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"g3w-editing-panel"},[s("bar-loader",{attrs:{loading:t.saving}}),t._v(" "),t.layersInEditing>0?s("helpdiv",{staticStyle:{"font-weight":"bold"},attrs:{message:"plugins.editing.close_editing_panel.message"}}):t._e(),t._v(" "),t.appState.online?t._e():s("div",{attrs:{id:"onlineofflinemessage"}},[s("div",{directives:[{name:"t-plugin",rawName:"v-t-plugin",value:"editing.messages.offline",expression:"'editing.messages.offline'"}]})]),t._v(" "),t.showcommitbar?s("div",{directives:[{name:"disabled",rawName:"v-disabled",value:t.saving,expression:"saving"}],staticClass:"commitbar"},[s("div",{class:["editing-button",t.canCommit?"enabled":""],on:{click:function(i){return i.stopPropagation(),t.commit.apply(null,arguments)}}},[s("span",{class:["editing-icon",t.g3wtemplate.font.save]})]),t._v(" "),s("div",{class:["editing-button",t.canUndo?"enabled":""],on:{click:function(i){return i.stopPropagation(),t.undo.apply(null,arguments)}}},[s("span",{class:["editing-icon",t.g3wtemplate.font["arrow-left"]]})]),t._v(" "),s("div",{class:["editing-button",t.canRedo?"enabled":""],on:{click:function(i){return i.stopPropagation(),t.redo.apply(null,arguments)}}},[s("span",{class:["editing-icon",t.g3wtemplate.font["arrow-right"]]})])]):s("div",{staticStyle:{height:"10px"}}),t._v(" "),t.state.showselectlayers&&t.editinglayers.length>1?s("div",{staticClass:"skin-color",attrs:{id:"g3w-select-editable-layers-content"}},[s("label",{directives:[{name:"t",rawName:"v-t",value:"Layers",expression:"'Layers'"}],attrs:{for:"g3w-select-editable-layers-to-show"}}),t._v(" "),s("select",{directives:[{name:"select2",rawName:"v-select2",value:"selectedlayers",expression:"'selectedlayers'"}],ref:"selectlayers",attrs:{id:"g3w-select-editable-layers-to-show",multiple:!0,clear:!0}},t._l(t.editinglayers,function(i){return s("option",{key:i.id,domProps:{value:i.id}},[t._v(t._s(i.name))])}),0)]):t._e(),t._v(" "),s("div",{attrs:{id:"toolboxes"}},t._l(t.state.toolboxes,function(i){return s("toolbox",{key:i.id,attrs:{state:i,resourcesurl:t.resourcesurl},on:{setselectedtoolbox:t.selectToolBox,starttoolbox:t.startToolBox,stoptoolbox:t.stopToolBox,setactivetool:t.startTool,stopactivetool:t.stopTool,"on-editing":t.updateLayersInEditing,"update-filter-layers":t.updateFilterLayers}})}),1),t._v(" "),t.django_admin_url?s("p",[s("a",{attrs:{href:t.django_admin_url,target:"_blank"}},[t._v("\u{1F512} Locked features")])]):t._e(),t._v(" "),t.filemanager_url?s("p",[s("a",{attrs:{href:t.filemanager_url,target:"_blank"}},[t._v("\u{1F4C2} File manager")])]):t._e()],1)},xr=[],Fr=function(t){t&&(t("data-v-5599c278_0",{source:".g3w-editing-panel .editing-button .editing-icon{background-color:#3a4448;color:#222d32;font-size:1.8em;padding:10px;margin:5px;width:45px;height:45px;border-radius:30%;text-align:center}.g3w-editing-panel .editing-button.enabled .editing-icon{background-color:#fff;box-shadow:0 0 5px rgba(0,0,0,.7)}.g3w-editing-panel .editing-button{cursor:not-allowed}.g3w-editing-panel .editing-button.enabled{cursor:pointer}.g3w-editing-panel .editbtn{border-radius:30%;padding:10px;display:inline-block;opacity:.4;box-shadow:0 1px 1px 0 rgba(0,0,0,.1),0 1px 4px 0 rgba(0,0,0,.3)}.g3w-editing-panel .editbtn.enabled{opacity:1;cursor:pointer}.g3w-editing-panel .editbtn.enabled.toggled{box-shadow:0 0;background-color:#ddd}",map:void 0,media:void 0}),t("data-v-5599c278_1",{source:".g3w-editing-panel[data-v-5599c278]{margin-bottom:50px}#onlineofflinemessage[data-v-5599c278]{margin-bottom:5px;padding:5px;border-radius:3px;background-color:orange;color:#fff;font-weight:700}.commitbar[data-v-5599c278]{display:flex;justify-content:flex-end;margin-bottom:5px}.commitbar>div[data-v-5599c278]:first-of-type{margin-right:auto}#g3w-select-editable-layers-content[data-v-5599c278]{margin-bottom:10px;font-weight:700}#g3w-select-editable-layers-content label[data-v-5599c278]{color:#fff!important}#g3w-select-editable-layers-to-show[data-v-5599c278]{cursor:pointer}",map:void 0,media:void 0}))},Er="data-v-5599c278",Ir=void 0,Cr=!1;Lr=Tr({render:Sr,staticRenderFns:xr},Fr,kr,Er,Cr,Ir,!1,Vt,void 0,void 0),Rr=Lr});ee();pe();yt();vt();Qe();De();Ue();Ne();D();function Ee(t){return b(async()=>{try{if(t.features.length!==1){let e=await le({features:t.features,inputs:t});t.features=[e]}return t}catch(e){return console.warn(e),Promise.reject(e)}})}Ve();ze();function tt({layer:t,feature:e}){return t.getEditingNotEditableFields().reduce((s,i)=>(s[i]=t.isPkField(i)?null:e.get(i),s),{})}function kt({x:t,y:e,coordinates:s}={}){let i=Jt(s);return{x:t-i.x,y:e-i.y}}function Jt(t){return Array.isArray(t[0])?Jt(t[0]):{x:t[0],y:t[1]}}Ne();St();it();Pe();He();Ae();xt();function es({feature:t,coordinates:e}){let s=t.getGeometry(),i=s.getType(),a=n=>g3wsdk.core.geoutils.areCoordinatesEqual(e,n);switch(i){case"Polygon":case"MultiLineString":return s.getCoordinates().flat().some(a);case"LineString":case"MultiPoint":return s.getCoordinates().some(a);case"MultiPolygon":return s.getPolygons().some(n=>n.getCoordinates().flat().some(a));case"Point":return g3wsdk.core.geoutils.areCoordinatesEqual(e,s.getCoordinates());default:return!1}}Ve();ze();var{Feature:Mi}=g3wsdk.core.layer.features;async function ts({feature:t,inputs:e,context:s,splittedGeometries:i=[]}={}){let a=[],{layer:n}=e,r=s.session,l=n.getEditingLayer().getSource(),g=n.getId(),c=t.clone();e.features=i.length?[]:e.features;let o=i.length;for(let h=0;h_.set(m,v)),a.push(_),l.addFeature(_)}else a.push(r.pushAdd(g,t)),l.addFeature(t)}e.features.push(t)}return a}ze();D();function rt(t,e){return b(async()=>{let s,i;if(t.features.length>1){s=t.features[0];let a=s.getGeometry();i=s.clone(),a.setCoordinates([...a.getCoordinates(),...t.features[1].getGeometry().getCoordinates()])}else s=t.layer.getEditingLayer().getSource().getFeatures()[0],i=s.clone(),s.setGeometry(t.features[0].getGeometry());try{await Z({inputs:t,context:e,feature:s})}catch(a){console.warn(a)}return e.session.pushUpdate(t.layer.getId(),s,i),t.features=[s],t})}function Ft(t,e,s){let i={own:[],dependencies:{}};return e.forEach(a=>{Array.isArray(a)&&(a=a[s]),t===a.layerId?i.own.push(a):(i.dependencies[a.layerId]=i.dependencies[a.layerId]||{own:[],dependencies:{}},i.dependencies[a.layerId].own.push(a))}),i}D();ee();Pe();Et();Ae();D();var{GUI:Bi}=g3wsdk.gui,{tPlugin:Oi}=g3wsdk.core.i18n;function ss({layerId:t,relation:e,relations:s,index:i,dialog:a=!0}){return b(new Promise(n=>{let r=()=>{let l=t===e.child?e.father:e.child,g=X(l).getEditingSource().getFeatureById(s[i].id),c=g.clone();z({relation:e,layerId:l}).ownField.forEach(o=>g.set(o,null)),y.Stack.getCurrent().getSession().pushUpdate(l,g,c),s.splice(i,1),qe(),n(!0)};a?Bi.dialog.confirm(Oi("editing.messages.unlink_relation"),l=>l?r():d.reject(!1)):r()}))}var{splitFeature:ji}=g3wsdk.core.geoutils;function is(t,e){return(t||[]).reduce((s,i)=>{let a=ji({splitfeature:e,feature:i});return a.length>1&&s.push({uid:i.getUid(),geometries:a}),s},[])}Ge();nt();Xe();Object.entries({Workflow:y,OpenFormStep:R,SelectElementsStep:ge,PickFeatureStep:re,MoveFeatureStep:we,ModifyGeometryVertexStep:be,OpenTableStep:ke,AddFeatureStep:Q}).forEach(([t,e])=>console.assert(e!==void 0,`${t} is undefined`));var{GEOMETRY_TYPES:dt}=g3wsdk.constant,{ApplicationState:se,G3WObject:At}=g3wsdk.core,{ProjectsRegistry:Va}=g3wsdk.core.project,{DataRouterService:$a}=g3wsdk.core.data,{CatalogLayersStoresRegistry:ct}=g3wsdk.core.catalog,{Geometry:Be,dissolve:za}=g3wsdk.core.geoutils,{removeZValueToOLFeatureGeometry:Ga}=g3wsdk.core.geoutils.Geometry,{tPlugin:Je}=g3wsdk.core.i18n,{Layer:ne}=g3wsdk.core.layer,{Feature:Ha}=g3wsdk.core.layer.features,{debounce:qa,toRawType:Ka}=g3wsdk.core.utils,{GUI:T}=g3wsdk.gui,{getScaleFromResolution:Wa,getResolutionFromScale:Xa}=g3wsdk.ol.utils,J=class t extends At{constructor(e,s=[]){super();let i=[void 0,ne.LayerTypes.VECTOR].includes(e.getType()),a=i&&e.getGeometryType(),n=i&&Be.isPointGeometryType(a),r=i&&Be.isLineGeometryType(a),l=i&&Be.isPolygonGeometryType(a),g=ne.LayerTypes.TABLE===e.getType(),c=a&&Be.isMultiGeometry(a),o=i&&(n?"Point":r?"Line":"Polygon"),h=e.getRelations().getArray().filter(u=>ct.getLayerById(te({layerId:e.getId(),relation:u})).isEditable()).map(u=>u);this._start=!1,this.constraints={filter:null,show:null,tools:[]},this._constrains={commit:!1,undo:!1,redo:!1},this._states=[],this._history={id:e.getId(),state:new Proxy({},{get:(u,p)=>this._constrains[p]}),add:this.__add.bind(this),undo:this.__undo.bind(this),clear:this.__clearHistory.bind(this),redo:this.__redo.bind(this),getState:this.__getState.bind(this),getLastState:this.__getLastHistoryState.bind(this),commit:this.__commit.bind(this)},this._session=Object.assign(new At({setters:{start:(u={})=>b(this.__startSession(u)),stop:()=>b(this.__stopSession()),getFeatures:(u={})=>b(this.__getFeatures(u)),saveChangesOnServer:u=>this.__saveChangesOnServer(u)}}),{_history:this._history,state:new Proxy({},{get:(u,p)=>this.state.editing.session[p]}),getId:()=>e.getId(),getLastHistoryState:this.__getLastHistoryState.bind(this),isStarted:this.__isStarted.bind(this),getHistory:this.__getHistory.bind(this),getEditor:this.__getEditor.bind(this),push:this.__push.bind(this),pushDelete:this.__pushDelete.bind(this),save:this.__save.bind(this),pushAdd:this.__pushAdd.bind(this),pushUpdate:this.__pushUpdate.bind(this),rollback:this.__rollback.bind(this),rollbackDependecies:this.__rollbackDependecies.bind(this),undo:this.__undoSession.bind(this),redo:this.__redoSession.bind(this),getCommitItems:this.__getCommitItems.bind(this),commit:this.save.bind(this),clear:this.__clearSession.bind(this),clearHistory:this.__clearHistory.bind(this)}),t._sessions[e.getId()]=this;let f=e.getEditingCapabilities()||[];this.state={layer:e,id:e.getId(),changingtools:!1,show:e.config.editing.visible,color:e.getColor()||"blue",title:` ${e.getTitle()}`||"Edit Layer",customTitle:!1,loading:!1,enabled:!1,toolboxheader:!0,startstopediting:!0,message:null,toolmessages:{help:null},toolsoftool:[],selected:!1,activetool:null,editing:{session:{id:new Proxy({},{get:()=>this.state.id}),started:!1,getfeatures:!1,current:null,changes:[]},history:this._history.state,on:!1,dependencies:s,relations:Object.values(e.isFather()&&s.length?e.getRelations().getRelations():{}),father:e.isFather(),canEdit:!0},_unregisterStartSettersEventsKey:[],_getFeaturesOption:{},_layerType:e.getType()||ne.LayerTypes.VECTOR,_enabledtools:void 0,_disabledtools:void 0,_constraints:e.getEditingConstrains()||{},_tools:[i&&f.includes("add_feature")&&{id:"addfeature",type:["add_feature"],name:"editing.tools.add_feature",icon:`add${o}.png`,op:new y({layer:e,type:"addfeature",steps:[new Q({layer:e,tools:["snap","measure"]}),new R({layer:e})]})},i&&f.includes("change_attr_feature")&&{id:"editattributes",type:["change_attr_feature"],name:"editing.tools.update_feature",icon:"editAttributes.png",op:new y({layer:e,helpMessage:"editing.tools.update_feature",type:"editfeatureattributes",steps:[new re,new F({run:Ee}),new R]})},i&&f.includes("delete_feature")&&{id:"deletefeature",type:["delete_feature"],name:"editing.tools.delete_feature",icon:`delete${o}.png`,op:new y({layer:e,type:"deletefeature",steps:[new re,new F({run:Ee}),new F({help:"editing.steps.help.double_click_delete",run(u,p){return b(async()=>{let _=u.layer.getId(),m=u.features[0],v=_e({layerId:_,relations:u.layer.getRelations()?u.layer.getRelations().getArray():[]}).filter(k=>X(te({layerId:_,relation:k})).getEditingFields().filter(S=>z({relation:k,layerId:te({layerId:_,relation:k})}).ownField.includes(S.name)).every(S=>!S.validate.required));return v.length>0&&await de(_,{feature:m,relations:v}),u.features=[m],at({layerId:_,relations:v,feature:m}).forEach(({relation:k,relations:S})=>{S.forEach(x=>ss({layerId:_,relation:k,relations:S,index:0,dialog:!1}))}),p.session.pushDelete(_,m),u})}}),new F({run(u){return b(async()=>{let p=u.layer.getEditingLayer(),_=u.features[0],m=u.layer.getId(),v=new Promise((k,S)=>{T.dialog.confirm(`

${Je("editing.messages.delete_feature")}

`+(u.layer.getChildren().length&&_e({layerId:m,relations:u.layer.getRelations().getArray()}).length?Je("editing.messages.delete_feature_relations"):"")+"
",x=>{if(!x){S(u);return}p.getSource().removeFeature(_);let E=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.uniqueFieldsValues[m];E&&Object.keys(_.getProperties()).filter(A=>E[A]!==void 0).forEach(A=>E[A].delete(_.get(A))),k(u)})});return u.features&&V({promise:b(async()=>{try{return await v}catch(k){return console.warn(k),Promise.reject(k)}}),inputs:u,style:this.selectStyle}),v})}})]})},(r||l)&&f.includes("change_feature")&&{id:"movevertex",type:["change_feature"],name:"editing.tools.update_vertex",icon:"moveVertex.png",op:new y({layer:e,type:"modifygeometryvertex",helpMessage:"editing.tools.update_vertex",steps:[new re({layer:e}),new F({run:Ee}),new be({tools:["snap","measure"]})]})},i&&f.includes("change_attr_feature")&&{id:"editmultiattributes",type:["change_attr_feature"],name:"editing.tools.update_multi_features",icon:"multiEditAttributes.png",op:new y({layer:e,type:"editmultiattributes",helpMessage:"editing.tools.update_multi_features",registerEscKeyEvent:!0,runOnce:!0,steps:[new ge({type:"multiple",steps:{select:{description:`editing.workflow.steps.${se.ismobile?"selectDrawBoxAtLeast2Feature":"selectMultiPointSHIFTAtLeast2Feature"}`,buttonnext:{disabled:!0,condition:({features:u=[]})=>u.length<2,done:()=>{y.Stack.getCurrent().clearUserMessagesSteps()}},dynamic:0,done:!1,reset(){this.dynamic=0}}}}),new R({multi:!0})]})},i&&f.includes("change_attr_feature")&&h.filter(u=>u.getType()!=="ONE").length>0&&{id:"editmultiattributesrelationfeatures",type:["change_attr_feature"],name:"editing.tools.update_multi_features_relations_from_parents",icon:"EditMultiRelationFeatures.png",op:new y({layer:e,type:"editmultiattributesrelationfeatures",helpMessage:"editing.tools.update_multi_features_relations_from_parents",registerEscKeyEvent:!0,runOnce:!0,steps:[new ge({type:"multiple",steps:{select:{description:`editing.workflow.steps.${se.ismobile?"selectDrawBoxAtLeast2Feature":"selectMultiPointSHIFTAtLeast2Feature"}`,buttonnext:{disabled:!0,condition:({features:u=[]})=>u.length<2,done:()=>{y.Stack.getCurrent().clearUserMessagesSteps()}},dynamic:0,done:!1,reset(){this.dynamic=0}}}}),new F({run:async(u,p)=>{T.setModal(!0);let _=h.filter(E=>E.getType()!=="ONE");await Promise.allSettled(u.features.map(E=>de(u.layer.getId(),{relations:_,feature:E,filterType:"fid"})));let m=_[0].getChild();if(_.length>1)try{await new Promise((E,A)=>{let C=new(Vue.extend({name:"multi-relations-fetures",template:`
+`);else{let c=document.createTextNode(l),o=r.element.childNodes;o[g]&&r.element.removeChild(o[g]),o.length?r.element.insertBefore(c,o[g]):r.element.appendChild(c)}}}}var oe,Ut,Vs,Nt,wr,kr,Sr,xr,Fr,Er,Ir,Cr,Lr,Rr,zs=I(()=>{Ns();D();({GUI:oe}=g3wsdk.gui),{ApplicationState:Ut,ApplicationService:Vs}=g3wsdk.core,{CatalogLayersStoresRegistry:Nt}=g3wsdk.core.catalog,{DataRouterService:wr}=g3wsdk.core.data,kr={name:"Editing",data(){return{state:this.$options.service.state,service:this.$options.service,resourcesurl:this.$options.resourcesurl,showcommitbar:this.$options.showcommitbar,saving:!1,layersInEditing:0,editingButtonsEnabled:!0,selectedlayers:[],editinglayers:Object.entries(g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").getEditableLayers()).filter(([t,e])=>e.config.editing.visible).map(([t,e])=>({id:t,name:e.getName(),title:e.getTitle()})),activetool:null}},components:{toolbox:Us},transitions:{addremovetransition:"showhide"},methods:{updateFilterLayers(t=[]){t.length>0?(this._selectedlayers=this.selectedlayers,this.selectedlayers=t):(this.selectedlayers=this._selectedlayers,this._selectedlayers=t),$(this.$refs.selectlayers).val(this.selectedlayers).trigger("change")},updateLayersInEditing(t){this.layersInEditing+=t?1:-1},undo(){this.canUndo&&this.service.undo()},redo(){this.canRedo&&this.service.redo()},commit(t){this.canCommit&&(this.saving=!0,this.service.commit({toolbox:this.service.getToolBoxById(t),modal:!1}).always(()=>this.saving=!1))},async startToolBox(t){let e=this.service.getToolBoxById(t),s=Ut.online&&e.getDependencies().find(i=>this.service.getToolBoxById(i).isDirty());s&&await this.commit_dirty(s),e.start()},async stopToolBox(t){let e=this.service.getToolBoxById(t);try{e.state.editing.history.commit&&await w(this.service.commit())}catch(i){console.warn(i)}await e.stop();let s=this.service.getToolBoxes().find(i=>i.state.editing.on)===void 0&&oe.getService("map").getMapControlByType({type:"query"});s&&!s.isToggled()&&s.toggle()},async startTool(t,e){let s=this.service.getToolBoxById(e),i=this.activetool&&e===this.activetool;!i&&this.service.getToolBoxById(s.getDependencies().find(a=>a===this.activetool))&&await this.commit_dirty(this.activetool),i||this.stopTool(this.activetool),this.activetool=e,s.setActiveTool(s.getToolById(t))},stopTool(t){t&&this.service.getToolBoxById(t).stopActiveTool()},async selectToolBox(t){let e=this.service.getToolBoxById(t),i=this.service.getToolBoxes().find(a=>a.isSelected());i&&(i.setSelected(!1),i.clearMessage()),e.setSelected(!0),this.state.toolboxselected=e},async commit_dirty(t){let e=this.service.getToolBoxById(t);try{e.isDirty()&&e.hasDependencies()&&(await w(this.service.commit({toolbox:e})),console.info("[EDITING] committed dirty"))}catch{try{[layerId].concat(e.getDependencies()).forEach(i=>{let a=this.service.getToolBoxById(i),n=a.getEditor();n.getEditingSource().setFeatures((n.readFeatures()||[]).map(r=>r.clone())),a.getSession().getHistory().clear(),a.stopActiveTool()}),console.info("[EDITING] reverted dirty")}catch(i){console.warn(i)}}},_enableEditingButtons(t){this.editingButtonsEnabled=!t},checkOfflineChanges({modal:t=!0,unlock:e=!1}={}){return new Promise((s,i)=>{let a=JSON.parse(window.localStorage.getItem("EDITING_CHANGES")||null);if(!a)return;let n=[],r=[];setTimeout(async()=>{for(let l in a){r.push(l);let g=this.service.getToolBoxById(l),c=a[l];n.push(this.service.commit({toolbox:g,commitItems:c,modal:t}))}try{await w($.when.apply(this.service,n)),s()}catch(l){console.warn(l),i(l)}finally{e&&r.forEach(l=>this.service.getLayerById(l).unlock());try{window.localStorage.setItem("EDITING_CHANGES","{}")}catch(l){console.warn(l)}}},1e3)})}},computed:{canCommit(){return this.state.saveConfig.mode==="default"&&this.state.toolboxselected&&this.state.toolboxselected.state.editing.history.commit&&this.editingButtonsEnabled},canUndo(){let t=this.state.toolboxselected&&this.state.toolboxselected.state.editing.history.undo&&this.editingButtonsEnabled;return this.service.fireEvent("canUndo",t),t},canRedo(){let t=this.state.toolboxselected&&this.state.toolboxselected.state.editing.history.redo&&this.editingButtonsEnabled;return this.service.fireEvent("canRedo",t),t},django_admin_url(){return window.initConfig.user.is_superuser?new URL("/django-admin/editing/g3weditingfeaturelock/",window.initConfig.baseurl):!1},filemanager_url(){return window.initConfig.user.is_superuser?new URL("/filemanager/",window.initConfig.baseurl):!1}},watch:{canCommit(t){window.onbeforeunload=()=>t||void 0},layersInEditing(t){document.getElementsByClassName("close-pane-button")[0].classList[t===0?"remove":"add"]("g3w-disabled")},selectedlayers(t=[]){let e=t.length>0,s=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing");this.editinglayers.forEach(({id:i})=>{let a=s.getToolBoxById(i),n=e&&a.state.editing.history.commit,r=t.includes(i);a.setShow(e?r:!0),e&&!r&&n&&s.commit({toolbox:a}).always(()=>a.stop()),e&&!r&&!n&&a.stop()})}},created(){this._selectedlayers=[],this.appState=Ut,this.unByKeys=this.unByKeys||[],Ut.online&&this.checkOfflineChanges({unlock:!0}),this.unByKeys.push({owner:Vs,setter:"online",key:Vs.onafter("online",()=>this.checkOfflineChanges({modal:!1}).catch(t=>oe.notify.error(t)))}),oe.closeContent(),this.state.open=!1,Nt.getLayers({EDITABLE:!0}).forEach(t=>t.setInEditing(!0)),oe.on("opencontent",this._enableEditingButtons),oe.on("closeform",this._enableEditingButtons),oe.on("closecontent",this._enableEditingButtons)},async beforeDestroy(){this.service.stop(),this.state.open=!1,Nt.getLayers({EDITABLE:!0}).forEach(s=>s.setInEditing(!1)),oe.off("opencontent",this._enableEditingButtons),oe.off("closeform",this._enableEditingButtons),oe.off("closecontent",this._enableEditingButtons),this.unByKeys.forEach(({owner:s,setter:i,key:a})=>s.un(i,a)),this.service.fireEvent("closeeditingpanel");let t=Object.keys(this.state.featuresOnClose);if(t.length){let s={layers:[],fids:[],formatter:1};t.forEach(a=>{let n=[...this.state.featuresOnClose[a]];if(n.length>0){let r=Nt.getLayerById(a);s.layers.push(r),s.fids.push(n)}});let i=s.layers.length?wr.getData("search:layersfids",{inputs:s,outputs:{title:"plugins.editing.editing_changes",show:{loading:!1}}}):Promise.resolve();try{await i}catch(a){console.warn(a)}}this.state.featuresOnClose={},this.service.getToolBoxes().forEach(s=>s.resetDefault());let e=oe.getService("map").getMapControlByType({type:"query"});e&&!e.isToggled()&&e.toggle()}},Sr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"g3w-editing-panel"},[s("bar-loader",{attrs:{loading:t.saving}}),t._v(" "),t.layersInEditing>0?s("helpdiv",{staticStyle:{"font-weight":"bold"},attrs:{message:"plugins.editing.close_editing_panel.message"}}):t._e(),t._v(" "),t.appState.online?t._e():s("div",{attrs:{id:"onlineofflinemessage"}},[s("div",{directives:[{name:"t-plugin",rawName:"v-t-plugin",value:"editing.messages.offline",expression:"'editing.messages.offline'"}]})]),t._v(" "),t.showcommitbar?s("div",{directives:[{name:"disabled",rawName:"v-disabled",value:t.saving,expression:"saving"}],staticClass:"commitbar"},[s("div",{class:["editing-button",t.canCommit?"enabled":""],on:{click:function(i){return i.stopPropagation(),t.commit.apply(null,arguments)}}},[s("span",{class:["editing-icon",t.g3wtemplate.font.save]})]),t._v(" "),s("div",{class:["editing-button",t.canUndo?"enabled":""],on:{click:function(i){return i.stopPropagation(),t.undo.apply(null,arguments)}}},[s("span",{class:["editing-icon",t.g3wtemplate.font["arrow-left"]]})]),t._v(" "),s("div",{class:["editing-button",t.canRedo?"enabled":""],on:{click:function(i){return i.stopPropagation(),t.redo.apply(null,arguments)}}},[s("span",{class:["editing-icon",t.g3wtemplate.font["arrow-right"]]})])]):s("div",{staticStyle:{height:"10px"}}),t._v(" "),t.state.showselectlayers&&t.editinglayers.length>1?s("div",{staticClass:"skin-color",attrs:{id:"g3w-select-editable-layers-content"}},[s("label",{directives:[{name:"t",rawName:"v-t",value:"Layers",expression:"'Layers'"}],attrs:{for:"g3w-select-editable-layers-to-show"}}),t._v(" "),s("select",{directives:[{name:"select2",rawName:"v-select2",value:"selectedlayers",expression:"'selectedlayers'"}],ref:"selectlayers",attrs:{id:"g3w-select-editable-layers-to-show",multiple:!0,clear:!0}},t._l(t.editinglayers,function(i){return s("option",{key:i.id,domProps:{value:i.id}},[t._v(t._s(i.name))])}),0)]):t._e(),t._v(" "),s("div",{attrs:{id:"toolboxes"}},t._l(t.state.toolboxes,function(i){return s("toolbox",{key:i.id,attrs:{state:i,resourcesurl:t.resourcesurl},on:{setselectedtoolbox:t.selectToolBox,starttoolbox:t.startToolBox,stoptoolbox:t.stopToolBox,setactivetool:t.startTool,stopactivetool:t.stopTool,"on-editing":t.updateLayersInEditing,"update-filter-layers":t.updateFilterLayers}})}),1),t._v(" "),t.django_admin_url?s("p",[s("a",{attrs:{href:t.django_admin_url,target:"_blank"}},[t._v("\u{1F512} Locked features")])]):t._e(),t._v(" "),t.filemanager_url?s("p",[s("a",{attrs:{href:t.filemanager_url,target:"_blank"}},[t._v("\u{1F4C2} File manager")])]):t._e()],1)},xr=[],Fr=function(t){t&&(t("data-v-5599c278_0",{source:".g3w-editing-panel .editing-button .editing-icon{background-color:#3a4448;color:#222d32;font-size:1.8em;padding:10px;margin:5px;width:45px;height:45px;border-radius:30%;text-align:center}.g3w-editing-panel .editing-button.enabled .editing-icon{background-color:#fff;box-shadow:0 0 5px rgba(0,0,0,.7)}.g3w-editing-panel .editing-button{cursor:not-allowed}.g3w-editing-panel .editing-button.enabled{cursor:pointer}.g3w-editing-panel .editbtn{border-radius:30%;padding:10px;display:inline-block;opacity:.4;box-shadow:0 1px 1px 0 rgba(0,0,0,.1),0 1px 4px 0 rgba(0,0,0,.3)}.g3w-editing-panel .editbtn.enabled{opacity:1;cursor:pointer}.g3w-editing-panel .editbtn.enabled.toggled{box-shadow:0 0;background-color:#ddd}",map:void 0,media:void 0}),t("data-v-5599c278_1",{source:".g3w-editing-panel[data-v-5599c278]{margin-bottom:50px}#onlineofflinemessage[data-v-5599c278]{margin-bottom:5px;padding:5px;border-radius:3px;background-color:orange;color:#fff;font-weight:700}.commitbar[data-v-5599c278]{display:flex;justify-content:flex-end;margin-bottom:5px}.commitbar>div[data-v-5599c278]:first-of-type{margin-right:auto}#g3w-select-editable-layers-content[data-v-5599c278]{margin-bottom:10px;font-weight:700}#g3w-select-editable-layers-content label[data-v-5599c278]{color:#fff!important}#g3w-select-editable-layers-to-show[data-v-5599c278]{cursor:pointer}",map:void 0,media:void 0}))},Er="data-v-5599c278",Ir=void 0,Cr=!1;Lr=Tr({render:Sr,staticRenderFns:xr},Fr,kr,Er,Cr,Ir,!1,Vt,void 0,void 0),Rr=Lr});ee();pe();yt();vt();Qe();De();Ue();Ne();D();function Ee(t){return b(async()=>{try{if(t.features.length!==1){let e=await le({features:t.features,inputs:t});t.features=[e]}return t}catch(e){return console.warn(e),Promise.reject(e)}})}Ve();ze();function tt({layer:t,feature:e}){return t.getEditingNotEditableFields().reduce((s,i)=>(s[i]=t.isPkField(i)?null:e.get(i),s),{})}function kt({x:t,y:e,coordinates:s}={}){let i=Jt(s);return{x:t-i.x,y:e-i.y}}function Jt(t){return Array.isArray(t[0])?Jt(t[0]):{x:t[0],y:t[1]}}Ne();St();it();Pe();He();Ae();xt();function es({feature:t,coordinates:e}){let s=t.getGeometry(),i=s.getType(),a=n=>g3wsdk.core.geoutils.areCoordinatesEqual(e,n);switch(i){case"Polygon":case"MultiLineString":return s.getCoordinates().flat().some(a);case"LineString":case"MultiPoint":return s.getCoordinates().some(a);case"MultiPolygon":return s.getPolygons().some(n=>n.getCoordinates().flat().some(a));case"Point":return g3wsdk.core.geoutils.areCoordinatesEqual(e,s.getCoordinates());default:return!1}}Ve();ze();var{Feature:Mi}=g3wsdk.core.layer.features;async function ts({feature:t,inputs:e,context:s,splittedGeometries:i=[]}={}){let a=[],{layer:n}=e,r=s.session,l=n.getEditingLayer().getSource(),g=n.getId(),c=t.clone();e.features=i.length?[]:e.features;let o=i.length;for(let h=0;h_.set(m,v)),a.push(_),l.addFeature(_)}else a.push(r.pushAdd(g,t)),l.addFeature(t)}e.features.push(t)}return a}ze();D();function rt(t,e){return b(async()=>{let s,i;if(t.features.length>1){s=t.features[0];let a=s.getGeometry();i=s.clone(),a.setCoordinates([...a.getCoordinates(),...t.features[1].getGeometry().getCoordinates()])}else s=t.layer.getEditingLayer().getSource().getFeatures()[0],i=s.clone(),s.setGeometry(t.features[0].getGeometry());try{await Z({inputs:t,context:e,feature:s})}catch(a){console.warn(a)}return e.session.pushUpdate(t.layer.getId(),s,i),t.features=[s],t})}function Ft(t,e,s){let i={own:[],dependencies:{}};return e.forEach(a=>{Array.isArray(a)&&(a=a[s]),t===a.layerId?i.own.push(a):(i.dependencies[a.layerId]=i.dependencies[a.layerId]||{own:[],dependencies:{}},i.dependencies[a.layerId].own.push(a))}),i}D();ee();Pe();Et();Ae();D();var{GUI:Bi}=g3wsdk.gui,{tPlugin:Oi}=g3wsdk.core.i18n;function ss({layerId:t,relation:e,relations:s,index:i,dialog:a=!0}){return b(new Promise(n=>{let r=()=>{let l=t===e.child?e.father:e.child,g=X(l).getEditingSource().getFeatureById(s[i].id),c=g.clone();z({relation:e,layerId:l}).ownField.forEach(o=>g.set(o,null)),y.Stack.getCurrent().getSession().pushUpdate(l,g,c),s.splice(i,1),qe(),n(!0)};a?Bi.dialog.confirm(Oi("editing.messages.unlink_relation"),l=>l?r():d.reject(!1)):r()}))}var{splitFeature:ji}=g3wsdk.core.geoutils;function is(t,e){return(t||[]).reduce((s,i)=>{let a=ji({splitfeature:e,feature:i});return a.length>1&&s.push({uid:i.getUid(),geometries:a}),s},[])}Ge();nt();Xe();var ks={close_editing_panel:{message:"Terminare l'editing dei singoli layer per chiudere la sessione"},errors:{no_layers:"Si \xE8 verificato un errore nel caricamento dei layers in editing.",some_layers:"Si \xE8 verificato un errore nel caricamento di alcuni layers in editing",editing_multiple_relations:"Le modifica di relazioni multiple non \xE8 attualmente supportata"},search:"Cerca",editing_changes:"Modifiche Editing",editing_data:"Modifica dati",editing_attributes:"Edita attributi",relations:"Relazioni",edit_relation:"Edita relazione",back_to_relations:"Ritorna alle Relazioni",no_relations_found:"Non ci sono relazioni",relation_data:"Dati relativi alla relazione",relation_already_added:"Relazione gi\xE0 presente",list_of_relations_feature:"Elenco Relazioni della feature ",tooltip:{edit_layer:"Modifica livello",filter_by_relation:"Filtra i livelli per relazione"},toolbox:{title:"Edita"},table:{edit:"Edita feature",copy:"Crea una copia",delete:"Cancella feature"},tools:{copy:"Copia elementi",pastefeaturesfromotherlayers:"Incolla elemento da altro livello",addpart:"Aggiungi parte alla geometria",deletepart:"Cancella parte dalla geometria",merge:"Dissolvi elementi",split:"Dividi elementi",add_feature:"Aggiungi elemento",delete_feature:"Elimina elemento",move_feature:"Muovi elemento",update_vertex:"Aggiorna vertici elemento",update_feature:"Modifica attributi elemento",update_multi_features:"Modifica gli attributi degli elementi selezionati",update_multi_features_relations:"Modifica gli attributi di tutte le relazioni selezionate",update_multi_features_relations_from_parents:"Edita i record relazionati di uno o pi\xF9 padri",copyfeaturefromexternallayer:"Crea elemento da un livello esterno"},toolsoftool:{measure:"Visualizza misura",snap:"Snap sul layer",snapall:"Snap su tutti i layer"},steps:{help:{select_elements:"Seleziona le geometrie",select_element:"Seleziona l'elemento",copy:"Crea una copia degli elementi selezionati",merge:"Dissolvi elementi",split:"Dvidi elemento",new:"Crea un nuovo elemento",edit_table:"Modifica gli elementi della tabella",draw_new_feature:"Disegna la nuova geometria",action_confirm:"Conferma azione",double_click_delete:"Seleziona la geometria sulla mappa da cancellare",edit_feature_vertex:"Modifica o aggiungi un vertice alla geometria selezionata",move:"Muovi la geometria selezionata",select_feature_to_relation:"Seleziona la geometria che vuoi mettere in relazione",show_edit_feature_form:"Mostra il modulo per modificare gli attributi del'elemento",pick_feature:"Seleziona la geometria da modificare dalla mappa",insert_attributes_feature:"Inserisci gli attributi dell'elemento"}},workflow:{steps:{select:"Seleziona una geometria",draw_part:"Disegna il nuovo elemento da aggiungere alla geometria",draw_geometry:"Disegna la geometria",merge:"Seleziona la geometria su cui dissolvere",selectPoint:"Clicca sulla geometria per selezionarla",selectSHIFT:"Seleziona le geometrie tenedo premuto il tasto SHIFT",selectDrawBox:"Seleziona le geometrie disegnando un rettangolo mediante la creazione dei due punti della diagonale",selectDrawBoxAtLeast2Feature:"Seleziona almeno 2 geometrie disegnando un rettangolo mediante la creazione dei due punti della diagonale",selectPointSHIFT:"Seleziona le geometrie
MAIUSC+DRAG seleziona pi\xF9 elementi in un area",selectMultiPointSHIFT:"Seleziona le geometrie
SHIFT+DRAG seleziona pi\xF9 elementi in un area",selectMultiPointSHIFTAtLeast2Feature:"Seleziona almeno 2 geometrie
SHIFT+DRAG seleziona pi\xF9 elementi in un area",copyCTRL:"Copia le geometrie selezionate con CTRL+C",selectStartVertex:"Seleziona il vertice di partenza",selectToPaste:"Seleziona il punto dove verranno incollate le geometrie",draw_split_line:"Disegna una linea per dividere la geometria selezionata"},title:{steps:"Passi"},next:"Avanti"},messages:{featureslockbyotheruser:"Ci sono alcune geometrie/records non editabili perch\xE8 in modifica da altri utenti",splitted:"Feature(s) splittata(e)",nosplittedfeature:"La(e) feature(s) non \xE8 stata splittata",press_esc:"Premi ESC per tornare indietro",online:"Ora sei di nuovo ONLINE. Puoi slavare le modifiche in modo permanente",offline:"Sei OFFLINE. Tutte le modifiche saranno salvate temporaneamente in locale",delete_feature:"Vuoi eliminare l'elemento selezionato?",delete_feature_relations:"Cancellando una feature con relazioni associate, tale relazioni rimarranno orfane. Si consiglia di gestire tali relazioni prima di cancellare la feature",unlink_relation:"Vuoi staccare la relazione?",commit_feature:"Riepilogo modifiche",toolbox_has_no_geometry:"questo livello non ha geometria",toolbox_has_relation:"questo livello fa parte di una relazione",saved:"I dati sono stati salvati correttamente",saved_local:"I dati sono stati salvati correttamente in locale",loading_data:"Caricamento dati",saving:"Salvataggio dati in corso. Attendere ...",constraints:{enable_editing:`Ingrandisci per modificare +Scala di attivazione 1:`},pdf:"Anteprima del documento non disponibile. Clicca qui ",commit:{header:"La lista sotto riporta tutte le modifiche che verranno salvate.",header_relation:"Relazione",header_add:"Aggiunte riporta il numero delle features aggiunte",header_update_delete:"Modificate e Cancellate riporta la lista degli id",add:"Aggiunte",delete:"Cancellate",update:"Aggiornate"},loading_table_data:"Costruzione tabella dati in corso. Attendere ...",copy_and_paste_from_other_layer_mandatory_fields:"Necessario compilare eventuali campi obbligatori sulle features incollate prima del salvataggio",no_feature_selected:"Nessuna feature selezionata",select_min_2_features:"Seleziona come minimo due features"},relation:{table:{info:"
Seleziona le relazioni per associarle alla feature in editing.
"},draw_new_feature:"Disegna nuova geometria",draw_or_copy:"oppure",copy_feature_from_other_layer:"Copia geometria da altro layer"},form:{relations:{tooltips:{back_to_father:"Torna ad editare il padre",add_relation:"Crea ed aggiungi nuova relazione",link_relation:"Associa una relazione esistente a questa feature",open_relation_tools:"Apri strumenti relatione",unlink_relation:"Annulla relazione"}},buttons:{save:"Inserisci/Modifica",save_table:"Modifica",save_and_back:"Salva e torna al padre",save_and_back_table:"Salva e torna indietro",cancel:"Ignora Modifiche"}},modal:{tools:{copyfeaturefromotherlayer:{title:"Seleziona layer",edit_attributes:"Edita attributi delle features in multiple mode"},copyfeaturefromprojectlayer:{title:"Seleziona una feature"}}}};Object.entries({Workflow:y,OpenFormStep:R,SelectElementsStep:ge,PickFeatureStep:re,MoveFeatureStep:we,ModifyGeometryVertexStep:be,OpenTableStep:ke,AddFeatureStep:Q}).forEach(([t,e])=>console.assert(e!==void 0,`${t} is undefined`));var{GEOMETRY_TYPES:dt}=g3wsdk.constant,{ApplicationState:se,G3WObject:At}=g3wsdk.core,{ProjectsRegistry:Va}=g3wsdk.core.project,{DataRouterService:$a}=g3wsdk.core.data,{CatalogLayersStoresRegistry:ct}=g3wsdk.core.catalog,{Geometry:Be,dissolve:za}=g3wsdk.core.geoutils,{removeZValueToOLFeatureGeometry:Ga}=g3wsdk.core.geoutils.Geometry,{tPlugin:Je}=g3wsdk.core.i18n,{Layer:ne}=g3wsdk.core.layer,{Feature:Ha}=g3wsdk.core.layer.features,{debounce:qa,toRawType:Ka}=g3wsdk.core.utils,{GUI:T}=g3wsdk.gui,{getScaleFromResolution:Wa,getResolutionFromScale:Xa}=g3wsdk.ol.utils,J=class t extends At{constructor(e,s=[]){super();let i=[void 0,ne.LayerTypes.VECTOR].includes(e.getType()),a=i&&e.getGeometryType(),n=i&&Be.isPointGeometryType(a),r=i&&Be.isLineGeometryType(a),l=i&&Be.isPolygonGeometryType(a),g=ne.LayerTypes.TABLE===e.getType(),c=a&&Be.isMultiGeometry(a),o=i&&(n?"Point":r?"Line":"Polygon"),h=e.getRelations().getArray().filter(u=>ct.getLayerById(te({layerId:e.getId(),relation:u})).isEditable()).map(u=>u);this._start=!1,this.constraints={filter:null,show:null,tools:[]},this._constrains={commit:!1,undo:!1,redo:!1},this._states=[],this._history={id:e.getId(),state:new Proxy({},{get:(u,p)=>this._constrains[p]}),add:this.__add.bind(this),undo:this.__undo.bind(this),clear:this.__clearHistory.bind(this),redo:this.__redo.bind(this),getState:this.__getState.bind(this),getLastState:this.__getLastHistoryState.bind(this),commit:this.__commit.bind(this)},this._session=Object.assign(new At({setters:{start:(u={})=>b(this.__startSession(u)),stop:()=>b(this.__stopSession()),getFeatures:(u={})=>b(this.__getFeatures(u)),saveChangesOnServer:u=>this.__saveChangesOnServer(u)}}),{_history:this._history,state:new Proxy({},{get:(u,p)=>this.state.editing.session[p]}),getId:()=>e.getId(),getLastHistoryState:this.__getLastHistoryState.bind(this),isStarted:this.__isStarted.bind(this),getHistory:this.__getHistory.bind(this),getEditor:this.__getEditor.bind(this),push:this.__push.bind(this),pushDelete:this.__pushDelete.bind(this),save:this.__save.bind(this),pushAdd:this.__pushAdd.bind(this),pushUpdate:this.__pushUpdate.bind(this),rollback:this.__rollback.bind(this),rollbackDependecies:this.__rollbackDependecies.bind(this),undo:this.__undoSession.bind(this),redo:this.__redoSession.bind(this),getCommitItems:this.__getCommitItems.bind(this),commit:this.save.bind(this),clear:this.__clearSession.bind(this),clearHistory:this.__clearHistory.bind(this)}),t._sessions[e.getId()]=this;let f=e.getEditingCapabilities()||[];this.state={layer:e,id:e.getId(),changingtools:!1,show:e.config.editing.visible,color:e.getColor()||"blue",title:` ${e.getTitle()}`||"Edit Layer",customTitle:!1,loading:!1,enabled:!1,toolboxheader:!0,startstopediting:!0,message:null,toolmessages:{help:null},toolsoftool:[],selected:!1,activetool:null,editing:{session:{id:new Proxy({},{get:()=>this.state.id}),started:!1,getfeatures:!1,current:null,changes:[]},history:this._history.state,on:!1,dependencies:s,relations:Object.values(e.isFather()&&s.length?e.getRelations().getRelations():{}),father:e.isFather(),canEdit:!0},_unregisterStartSettersEventsKey:[],_getFeaturesOption:{},_layerType:e.getType()||ne.LayerTypes.VECTOR,_enabledtools:void 0,_disabledtools:void 0,_constraints:e.getEditingConstrains()||{},_tools:[i&&f.includes("add_feature")&&{id:"addfeature",type:["add_feature"],name:"editing.tools.add_feature",icon:`add${o}.png`,op:new y({layer:e,type:"addfeature",steps:[new Q({layer:e,tools:["snap","measure"]}),new R({layer:e})]})},i&&f.includes("change_attr_feature")&&{id:"editattributes",type:["change_attr_feature"],name:"editing.tools.update_feature",icon:"editAttributes.png",op:new y({layer:e,helpMessage:"editing.tools.update_feature",type:"editfeatureattributes",steps:[new re,new F({run:Ee}),new R]})},i&&f.includes("delete_feature")&&{id:"deletefeature",type:["delete_feature"],name:"editing.tools.delete_feature",icon:`delete${o}.png`,op:new y({layer:e,type:"deletefeature",steps:[new re,new F({run:Ee}),new F({help:"editing.steps.help.double_click_delete",run(u,p){return b(async()=>{let _=u.layer.getId(),m=u.features[0],v=_e({layerId:_,relations:u.layer.getRelations()?u.layer.getRelations().getArray():[]}).filter(k=>X(te({layerId:_,relation:k})).getEditingFields().filter(S=>z({relation:k,layerId:te({layerId:_,relation:k})}).ownField.includes(S.name)).every(S=>!S.validate.required));return v.length>0&&await de(_,{feature:m,relations:v}),u.features=[m],at({layerId:_,relations:v,feature:m}).forEach(({relation:k,relations:S})=>{S.forEach(x=>ss({layerId:_,relation:k,relations:S,index:0,dialog:!1}))}),p.session.pushDelete(_,m),u})}}),new F({run(u){return b(async()=>{let p=u.layer.getEditingLayer(),_=u.features[0],m=u.layer.getId(),v=new Promise((k,S)=>{T.dialog.confirm(`

${Je("editing.messages.delete_feature")}

`+(u.layer.getChildren().length&&_e({layerId:m,relations:u.layer.getRelations().getArray()}).length?Je("editing.messages.delete_feature_relations"):"")+"
",x=>{if(!x){S(u);return}p.getSource().removeFeature(_);let E=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.uniqueFieldsValues[m];E&&Object.keys(_.getProperties()).filter(A=>E[A]!==void 0).forEach(A=>E[A].delete(_.get(A))),k(u)})});return u.features&&V({promise:b(async()=>{try{return await v}catch(k){return console.warn(k),Promise.reject(k)}}),inputs:u,style:this.selectStyle}),v})}})]})},(r||l)&&f.includes("change_feature")&&{id:"movevertex",type:["change_feature"],name:"editing.tools.update_vertex",icon:"moveVertex.png",op:new y({layer:e,type:"modifygeometryvertex",helpMessage:"editing.tools.update_vertex",steps:[new re({layer:e}),new F({run:Ee}),new be({tools:["snap","measure"]})]})},i&&f.includes("change_attr_feature")&&{id:"editmultiattributes",type:["change_attr_feature"],name:"editing.tools.update_multi_features",icon:"multiEditAttributes.png",op:new y({layer:e,type:"editmultiattributes",helpMessage:"editing.tools.update_multi_features",registerEscKeyEvent:!0,runOnce:!0,steps:[new ge({type:"multiple",steps:{select:{description:`editing.workflow.steps.${se.ismobile?"selectDrawBoxAtLeast2Feature":"selectMultiPointSHIFTAtLeast2Feature"}`,buttonnext:{disabled:!0,condition:({features:u=[]})=>u.length<2,done:()=>{y.Stack.getCurrent().clearUserMessagesSteps()}},dynamic:0,done:!1,reset(){this.dynamic=0}}}}),new R({multi:!0})]})},i&&f.includes("change_attr_feature")&&h.filter(u=>u.getType()!=="ONE").length>0&&{id:"editmultiattributesrelationfeatures",type:["change_attr_feature"],name:"editing.tools.update_multi_features_relations_from_parents",icon:"EditMultiRelationFeatures.png",op:new y({layer:e,type:"editmultiattributesrelationfeatures",helpMessage:"editing.tools.update_multi_features_relations_from_parents",registerEscKeyEvent:!0,runOnce:!0,steps:[new ge({type:"multiple",steps:{select:{description:`editing.workflow.steps.${se.ismobile?"selectDrawBoxAtLeast2Feature":"selectMultiPointSHIFTAtLeast2Feature"}`,buttonnext:{disabled:!0,condition:({features:u=[]})=>u.length<2,done:()=>{y.Stack.getCurrent().clearUserMessagesSteps()}},dynamic:0,done:!1,reset(){this.dynamic=0}}}}),new F({run:async(u,p)=>{T.setModal(!0);let _=h.filter(E=>E.getType()!=="ONE");await Promise.allSettled(u.features.map(E=>de(u.layer.getId(),{relations:_,feature:E,filterType:"fid"})));let m=_[0].getChild();if(_.length>1)try{await new Promise((E,A)=>{let C=new(Vue.extend({name:"multi-relations-fetures",template:`
- `,data(){return{relations:this.$options.relations,relationId:this.$options.relationId}}}))({relations:_,relationId:_[0].state.id});T.showModalDialog({title:Je("editing.relations"),className:"modal-left",closeButton:!1,message:C.$mount().$el,buttons:{cancel:{label:"Cancel",className:"btn-danger",callback(){A()}},ok:{label:"Ok",className:"btn-success",callback:async()=>{m=_.find(G=>C.relationId===G.state.id).getChild(),E()}}}}).on("hide.bs.modal",()=>C.$destroy())})}catch(E){return console.warn(E),T.setModal(!1),b(Promise.reject(E))}let v=new y({type:"editmultiattributes",steps:[new R({multi:!0})]}),k=X(m);if(k.readFeatures().length===0)return T.setModal(!1),T.showUserMessage({type:"warning",message:"plugins.editing.no_relations_found",autoclose:!0}),b(Promise.reject());let S=z({layerId:_[0].getChild(),relation:_[0]}),x={context:{session:y.Stack.getCurrent().getSession(),excludeFields:S.ownField,isContentChild:!1},inputs:{features:k.readFeatures(),layer:k}};try{await Fe(m),await w(v.start(x))}catch(E){console.warn(E)}return v.stop(),T.setModal(!1),b(Promise.resolve(u,p))}})]})},i&&f.includes("change_feature")&&{id:"movefeature",type:["change_feature"],name:"editing.tools.move_feature",icon:`move${o}.png`,op:new y({layer:e,type:"movefeature",helpMessage:"editing.tools.move_feature",steps:[new re,new F({run:Ee}),new we]})},(()=>{let u=[];return i&&f.includes("add_feature")&&{id:"copyfeaturesfromotherlayer",type:["add_feature"],name:"editing.tools.pastefeaturesfromotherlayers",icon:"pasteFeaturesFromOtherLayers.png",enable:function(){let p=T.getService("catalog"),_=e.getId(),m=e.getGeometryType(),v={bool:!0,tool:void 0};ct.getLayers({GEOLAYER:!0,BASELAYER:!1});let k=()=>{let S=x=>x&&ie(m,x)&&(m===x||Be.isMultiGeometry(m)||!Be.isMultiGeometry(x));return u=[...ct.getLayers({GEOLAYER:!0,BASELAYER:!1}).filter(x=>_!==x.getId()&&S(x.getGeometryType())),...p.getExternalLayers({type:"vector"}).filter(x=>S(x.geometryType))].map((x,E)=>({id:(x.state||{id:x.id}).id,name:(x.state||{name:x.name}).name,external:x.external||!1,selected:E===0})),v.tool.enabled=u.length>0};return({bool:S,tool:x={}})=>(v.tool=x,v.bool=S,p.onafter("addExternalLayer",k),p.onafter("removeExternalLayer",k),k())}(),op:(()=>{let p=new R({layer:e,help:"editing.steps.help.copy"});return new y({layer:e,type:"copyfeaturesfromotherlayer",runOnce:!0,steps:[new F({layer:e,steps:{chooselayer:{description:"editing.modal.tools.copyfeaturefromotherlayer.title",done:!1},selectgeometry:{description:"editing.workflow.steps.selectPoint",done:!1}},run(_,m){return b(new Promise((v,k)=>{let S=_.layer,x=S.getGeometryType(),E=S.getId(),A=S.getEditingFields().filter(B=>!B.pk),C=m.session,Y=S.getEditingLayer().getSource(),U=new(Vue.extend((Ss(),xe(ks)).default))({layers:u}),O=U.$mount().$el;T.showModalDialog({title:Je("editing.relation.copy_feature_from_other_layer"),className:"modal-left",closeButton:!1,message:O,buttons:{cancel:{label:"Cancel",className:"btn-danger",callback(){k()}},ok:{label:"Ok",className:"btn-success",callback:async()=>{this.setUserMessageStepDone("chooselayer");try{let B=await b(async()=>{let N=u.find(j=>j.selected),H=await new Promise(async j=>{this.addInteraction(N.external?new ae({layer:T.getService("map").getLayerById(N.id)}):new g3wsdk.ol.interactions.PickCoordinatesInteraction,{picked:async K=>{try{j(st(N.external?K.features:((await $a.getData("query:coordinates",{inputs:{coordinates:K.coordinate,query_point_tolerance:Va.getCurrentProject().getQueryPointTolerance(),layerIds:[N.id],multilayers:!1},outputs:null})).data[0]||{features:[]}).features,x))}catch(he){console.warn(he)}}})}),q;try{q=H.length>1?await w(le({features:H,inputs:_})):H[0]}catch(j){console.warn(j)}if(q){let j=new Ha({feature:q,properties:A.map(K=>K.name)});return j.setTemporaryId(),j}return T.showUserMessage({type:"warning",message:"plugins.editing.messages.no_feature_selected",closable:!1,autoclose:!0}),Promise.reject()});A.forEach(({name:N})=>{B.get(N)===void 0&&B.set(N,null)}),S.getEditingNotEditableFields().find(N=>{S.isPkField(N)&&B.set(N,null)}),Ga({feature:B}),B.setTemporaryId(),Y.addFeature(B),C.pushAdd(E,B,!1),_.features.push(B),this.fireEvent("addfeature",B),v(_)}catch(B){console.warn(B),k(B)}}}}}).on("hide.bs.modal",()=>U.$destroy())}))}}),p],registerEscKeyEvent:!0})})()}})(),i&&f.includes("add_feature")&&{id:"copyfeatures",type:["add_feature"],name:"editing.tools.copy",icon:`copy${o}.png`,op:new y({layer:e,type:"copyfeatures",runOnce:!0,steps:[new ge({layer:e,help:"editing.steps.help.copy",type:se.ismobile?"single":"multiple",steps:{select:{description:`editing.workflow.steps.${se.ismobile?"selectPoint":"selectPointSHIFT"}`,done:!1}}},!0),e.getGeometryType().includes("Point")?void 0:new F({layer:e,help:"editing.steps.help.select",steps:{from:{description:"editing.workflow.steps.selectStartVertex",done:!1}},run(u){return b(async()=>{let p=new Promise((_,m)=>{if(this.resolve=_,u.features.length===0)return m("no feature");this.addInteraction(new ol.interaction.Draw({type:"Point",condition:v=>u.features.some(k=>es({feature:k,coordinates:v.coordinate}))}),{drawend:v=>{u.coordinates=v.feature.getGeometry().getCoordinates(),this.setUserMessageStepDone("from"),_(u)}}),this.addInteraction(new ol.interaction.Snap({edge:!1,features:new ol.Collection(u.features)}))});return V({promise:b(async()=>{try{return await p}catch(_){return console.warn(_),Promise.reject(_)}}),inputs:u,style:this.selectStyle}),p})},stop(){this.resolve(!0),this.resolve=null}}),new F({layer:e,help:"editing.steps.help.select_vertex_to_paste",steps:{to:{description:"editing.workflow.steps.selectToPaste",done:!1}},run(u,p){return b(async()=>{let{layer:_,features:m,coordinates:v}=u,k=_.getEditingLayer().getSource(),S=_.getId(),x=p.session,E=new Promise((A,C)=>{this.addInteraction(new ol.interaction.Draw({type:"Point",features:new ol.Collection}),{drawend:G=>{let[Y,U]=G.feature.getGeometry().getCoordinates(),O=v?kt({x:Y,y:U,coordinates:v}):null,B=m.length,N=[];for(let H=0;HH.forEach(({status:q,value:j})=>{let K=tt({layer:_,feature:j}),he=x.pushAdd(S,j);Object.entries(K).length&&Object.entries(K).forEach(([je,Zs])=>he.set(je,Zs)),k.addFeature(he),u.features.push(he)})).finally(()=>{this.setUserMessageStepDone("to"),A(u)})}}),this.addInteraction(new ol.interaction.Snap({source:k,edge:!1}))});return V({promise:b(async()=>{try{return await E}catch(A){return console.warn(A),Promise.reject(A)}}),inputs:u,style:this.selectStyle}),E})}})].filter(Boolean),registerEscKeyEvent:!0})},i&&f.includes("add_feature")&&f.includes("change_feature")&&{id:"addPart",type:["add_feature","change_feature"],name:"editing.tools.addpart",icon:"addPart.png",visible:c,op:new y({layer:e,type:"addparttomultigeometries",helpMessage:"editing.tools.addpart",runOnce:!0,steps:[new re({steps:{select:{description:"editing.workflow.steps.select",done:!1}}}),new F({run:Ee,help:"editing.steps.help.select_element"}),new Q({layer:e,help:"editing.steps.help.select_element",add:!1,steps:{addfeature:{description:"editing.workflow.steps.draw_part",done:!1}},tools:["snap","measure"]}),new F({layer:e,help:"editing.steps.help.select_element",run:rt})],registerEscKeyEvent:!0})},i&&f.includes("change_feature")&&{id:"deletePart",type:["change_feature"],name:"editing.tools.deletepart",icon:"deletePart.png",visible:c,op:new y({layer:e,type:"deletepartfrommultigeometries",steps:[new re,new F({run:Ee}),new F({layer:e,run(u,p){return b(new Promise((_,m)=>{let v=u.layer,k=u.layer.getEditingLayer(),S=v.getId(),x=p.session,{features:E,coordinate:A}=u,C=E[0],G=C.clone(),Y=C.getGeometry(),U=[];switch(Y.getType()){case dt.MULTIPOLYGON:U=Y.getPolygons();break;case dt.MULTILINE:U=Y.getLineStrings();break;case dt.MULTILINESTRING:U=Y.getLineStrings();break;case dt.MULTIPOINT:U=Y.getPoints();break;default:console.warn("invalid geometry type",Y.getType());break}let O=new ol.source.Vector({features:U.map(q=>new ol.Feature(q))}),B=this.getMap(),N=B.getPixelFromCoordinate(A),H=new ol.layer.Vector({source:O,style:k.getStyle()});B.addLayer(H),B.once("postrender",()=>{let q=!1;B.forEachFeatureAtPixel(N,j=>{if(!q){if(O.removeFeature(j),O.getFeatures().length){let K=O.getFeatures().map(je=>je.getGeometry()),he=K[0]&&K[0].getType();C.setGeometry(he&&new ol.geom[`Multi${he}`](K.map(je=>je.getCoordinates()))),Z({inputs:u,context:p,feature:C}).finally(()=>{x.pushUpdate(S,C,G),_(u)})}else k.getSource().removeFeature(C),x.pushDelete(S,C),_(u);q=!0}},{layerFilter(j){return j===H},hitTolerance:1}),B.removeLayer(H),H=null})}))}})],helpMessage:"editing.tools.deletepart"})},(r||l)&&f.includes("change_feature")&&{id:"splitfeature",type:["change_feature"],name:"editing.tools.split",icon:"splitFeatures.png",op:new y({layer:e,type:"splitfeature",runOnce:!0,steps:[new ge({layer:e,help:"editing.steps.help.split",type:se.ismobile?"single":"multiple",steps:{select:{description:`editing.workflow.steps.${se.ismobile?"selectPoint":"selectPointSHIFT"}`,done:!1}}},!0),new F({layer:e,help:"",steps:{draw_line:{description:"editing.workflow.steps.draw_split_line",done:!1}},run(u,p){return b(async()=>{let _=u.layer.getEditingLayer().getSource(),m=new Promise((v,k)=>{this.addInteraction(new ol.interaction.Draw({type:"LineString",features:new ol.Collection,freehandCondition:ol.events.condition.never}),{drawend:async S=>{let x=!1,E=is(u.features,S.feature),A=E.length;for(let C=0;C1&&(x=!0,await ts({context:p,inputs:u,feature:u.features.find(G=>G.getUid()===E[C].uid),splittedGeometries:E[C].geometries,session:p.session}));(x?v:k)(u),await new Promise(C=>setTimeout(C,600)),T.showUserMessage({type:x?"success":"warning",message:x?"plugins.editing.messages.splitted":"plugins.editing.messages.nosplittedfeature",autoclose:!0})}}),this.addInteraction(new ol.interaction.Snap({source:_,edge:!0}))});return V({promise:b(async()=>{try{return await m}catch(v){return console.warn(v),Promise.reject(v)}}),inputs:u,style:this.selectStyle}),m})}})],registerEscKeyEvent:!0})},(r||l)&&f.includes("change_feature")&&{id:"mergefeatures",type:["change_feature"],name:"editing.tools.merge",icon:"mergeFeatures.png",op:new y({layer:e,type:"mergefeatures",runOnce:!0,steps:[new ge({layer:e,type:"bbox",help:"editing.steps.help.merge",steps:{select:{description:`editing.workflow.steps.${se.ismobile?"selectDrawBox":"selectSHIFT"}`,done:!1}}},!0),new F({layer:e,help:"editing.steps.help.merge",steps:{choose:{description:"editing.workflow.steps.merge",done:!1}},run(u,p){return b(new Promise((_,m)=>{let{layer:v,features:k}=u,x=v.getEditingLayer().getSource(),E=v.getId(),A=p.session;k.length<2?(T.showUserMessage({type:"warning",message:"plugins.editing.messages.select_min_2_features",autoclose:!0}),m()):le({features:k,inputs:u}).then(async C=>{let G=k.findIndex(O=>C===O),Y=C.clone(),U=za({features:k,index:G});if(U){try{await Z({inputs:u,context:p,feature:U})}catch(O){console.warn(O)}A.pushUpdate(E,U,Y),k.filter(O=>O!==C).forEach(O=>{A.pushDelete(E,O),x.removeFeature(O)}),u.features=[C],_(u)}else T.showUserMessage({type:"warning",message:"plugins.editing.messages.no_feature_selected",autoclose:!0}),m()}).catch(C=>{console.warn(C),m()})}))}})],registerEscKeyEvent:!0})},g&&f.includes("add_feature")&&{id:"addfeature",type:["add_feature"],name:"editing.tools.add_feature",icon:"addTableRow.png",op:new y({layer:e,type:"addtablefeature",steps:[new F({help:"editing.steps.help.new",run:Ie}),new R]})},g&&f.includes("delete_feature")&&f.includes("change_attr_feature")&&{id:"edittable",type:["delete_feature","change_attr_feature"],name:"editing.tools.update_feature",icon:"editAttributes.png",op:new y({layer:e,type:"edittable",backbuttonlabel:"plugins.editing.form.buttons.save_and_back_table",runOnce:!0,steps:[new ke]})}].filter(Boolean).map(u=>Object.assign(new At,u))},this.state._tools.forEach(u=>{Object.assign(u,{disabledtoolsoftools:[],enabled:!!u.enabled,active:!1,message:null,messages:u.op.getMessages(),visible:u.visible instanceof Function?u.visible(u):u.visible!==void 0?u.visible:!0,state:new Proxy({},{get:(p,_)=>u[_],set:(p,_,m)=>(u[_]=m,!0)}),start:this._startTool.bind(this,u),stop:this._stopTool.bind(this,u),getId:()=>u.id,getOperator:()=>u.op,setOperator:p=>u.op=p})}),Object.assign(this.state,{tools:this.state._tools,originalState:{title:this.state.title,toolsoftool:[...this.state.toolsoftool]}}),this.originalState=this.state.originalState,this._getFeaturesEvent={event:null,fnc:null},this.messages={constraint:{scale:`${Je("editing.messages.constraints.enable_editing")}${this.state._constraints.scale}`.toUpperCase()}},this.startResolve=null,this._olStartKeysEvent=[],this.unwatches=[]}_stopSessionChildren(e){let s=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing"),i=s.getLayerById(e);_e({layerId:e,relations:i.getRelations()?i.getRelations().getArray():[]}).filter(a=>a.getFather()===e).forEach(a=>{let n=te({layerId:e,relation:a});s.getToolBoxById(n).inEditing()||s.state.sessions[n].stop()})}getState(){return this.state}setShow(e=!0){this.state.show=e}getLayer(){return this.state.layer}isFather(){return this.state.editing.father}getDependencies(){return this.state.editing.dependencies}hasDependencies(){return this.state.editing.dependencies.length>0}setFeaturesOptions({filter:e}={}){e?(e.nofeatures&&(e.nofeatures_field=e.nofeatures_field||this.state.layer.getEditingFields()[0].name),this.state._getFeaturesOption={filter:e,editing:!0,registerEvents:!1},e.constraint&&(this.constraintFeatureFilter=e)):this.state._getFeaturesOption=Ze(ne.LayerTypes.TABLE===this.state._layerType?"all":"bbox",{layerId:this.getId()})}setEditingConstraints(e={}){Object.keys(e).forEach(s=>this.constraints[s]=e[s])}_handleScaleConstraint(e=!1){let s=T.getService("map").getMap();this.state.editing.canEdit=Wa(s.getView().getResolution())<=this.state._constraints.scale;let i=this._start||this.startResolve,a=!e&&this.state.selected&&!this.state.editing.canEdit,n=T.getService("map").getCurrentToggledMapControl();if(n&&n.cursorClass&&(e||i)&&n.setMouseCursor(!a),s.getViewport().classList.toggle("ol-zoom-in",a),e||!this.state.selected||!i){T.setModal(!1);return}this.state.editing.canEdit&&this.startResolve&&this.startResolve(),setTimeout(()=>T.setModal(!this.state.editing.canEdit,this.messages.constraint.scale))}start(e={}){return b(new Promise(async(s,i)=>{let a=this.getId(),n=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.constraints.toolboxes[a],{toolboxheader:r=!0,startstopediting:l=!0,changingtools:g=!1,tools:c,filter:o}=e;this.state.changingtools=g,c&&this.setEnablesDisablesTools(c),this.state.toolboxheader=r,this.state.startstopediting=l,o=n&&n.filter||this.constraints.filter||o;let h=this.state.layer.getFeaturesStore().onceafter("featuresLockedByOtherUser",()=>{T.showUserMessage({type:"warning",subtitle:this.state.layer.getName().toUpperCase(),message:"plugins.editing.messages.featureslockbyotheruser"})});this.state._unregisterStartSettersEventsKey.push(()=>this.state.layer.getFeaturesStore().un("featuresLockedByOtherUser",h)),this.state._constraints.scale&&await new Promise(_=>{this.startResolve=_,this._handleScaleConstraint();let m=T.getService("map");this._olStartKeysEvent.push(m.getMap().on("click",v=>{this.state.selected&&!this.state.editing.canEdit&&m.goToRes(v.coordinate,Xa(this.state._constraints.scale,T.getService("map").getMapUnits()))})),this.state.editing.canEdit&&_()}),this.startResolve=null,this.setFeaturesOptions({filter:o});let f=async _=>{this.emit("start-editing"),await Fe(this.getId()),await g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").runEventHandler({type:"start-editing",id:a});try{let m=await w(_);this.stopLoading(),this.setEditing(!0),await g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").runEventHandler({type:"get-features-editing",id:a,options:{features:m}}),s({features:m})}catch(m){console.warn(m),T.notify.error(m.message),await g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").runEventHandler({type:"error-editing",id:a,error:m}),this.stop(),this.stopLoading(),i(m)}},u=!!this.__isStarted(),p=se.ismobile&&T.getService("map").isMapHidden()&&ne.LayerTypes.VECTOR===this.state._layerType;!u&&p&&(this.setEditing(!0),T.getService("map").onceafter("setHidden",()=>{setTimeout(async()=>{this._start=!0,this.startLoading(),this.setFeaturesOptions({filter:o});try{await f(w(this._session.start(this.state._getFeaturesOption)))}catch(_){console.warn(_),this.setEditing(!1)}},300)})),!u&&!p&&(this._start=!0,this.startLoading(),await f(w(this._session.start(this.state._getFeaturesOption)))),u&&!this._start&&(this.startLoading(),await f(w(this._session.getFeatures(this.state._getFeaturesOption))),this._start=!0),u&&this.setEditing(!0)}))}startLoading(){this.state.loading=!0}stopLoading(){this.state.loading=!1}stop(){return b(async()=>{if(this.disableCanEditEvent&&this.disableCanEditEvent(),this.state._unregisterStartSettersEventsKey.forEach(n=>n()),this.state._unregisterStartSettersEventsKey=[],this._olStartKeysEvent.forEach(n=>ol.Observable.unByKey(n)),this._olStartKeysEvent.splice(0),this.unwatches.forEach(n=>n()),this.unwatches.splice(0),this.startResolve=null,this.state._constraints.scale&&this._handleScaleConstraint(!0),!!!this.__isStarted())return!0;if(!se.online)return;let s=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing"),i=this.state.id;if(s.getLayerById(i).getFathers().filter(n=>{let r=s.getToolBoxById(n);if(r&&r.inEditing()&&r.isDirty())return Object.keys(r.getSession().getCommitItems()||{}).find(l=>i===l)}).length>0){this.stopActiveTool(),this.enableTools(!1),this.clearToolboxMessages(),ne.LayerTypes.VECTOR===this.state._layerType&&T.getService("map").getMap().un(this._getFeaturesEvent.event,this._getFeaturesEvent.fnc),this._stopSessionChildren(this.state.id),g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.uniqueFieldsValues[this.getId()]={};return}try{return await w(this._session.stop()),this._start=!1,this.state.editing.on=!1,this.state.enabled=!1,this.stopLoading(),this.state._getFeaturesOption={},this.stopActiveTool(),this.enableTools(!1),this.clearToolboxMessages(),this.emit("stop-editing"),g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.uniqueFieldsValues[this.getId()]={},!0}catch(n){return console.warn(n),Promise.reject(n)}})}save({ids:e=null,items:s,relations:i=!0,__esPromise:a=!1}={}){return b(new Promise(async(n,r)=>{let l;if(e)return l=this.__commit(e),this.__clearHistory(e),n(l);l=s||this.__getCommitItems(this.__commit()),i||(l.relations={}),this.state.layer.getEditor().commit(l).then(g=>{if(!(g&&g.result)){r(g);return}let{relations:c={}}=g.response;for(let o in c)t.get(o).getSession().getEditor().applyCommitResponse({response:c[o],result:!0});this.__clearHistory(),this._session.saveChangesOnServer(l),a?n({commit:l,response:g}):n(l,g)}).fail(g=>{console.warn(g),r(g)})}))}getEditingConstraints(){return this.state._constraints}canEdit(){return this.state.editing.canEdit}setMessage(e){this.state.message=e}getMessage(){return this.state.message}clearMessage(){this.setMessage(null)}clearToolboxMessages(){this.state.toolmessages.help=null,this.clearMessage()}getId(){return this.state.id}getTitle(){return this.state.title}setTitle(e){this.state.customTitle=!0,this.state.title=e}getColor(){return this.state.color}setEditing(e=!0){this.setEnable(e),this.state.editing.on=e,this.enableTools(e)}inEditing(){return this.state.editing.on}isEnabled(){return this.state.enabled}setEnable(e=!1){return this.state.enabled=e,this.state.enabled}isLoading(){return this.state.loading}isDirty(){return this.state.editing.history.commit}isSelected(){return this.state.selected}setSelected(e=!1){if(this.state.selected=e,this.state._constraints.scale){let s=T.getService("map").getMap();this._handleScaleConstraint(),this._start&&this.state.canEdit&&s.dispatchEvent({type:this._getFeaturesEvent.event,target:s}),this.state.selected&&!this.keyChangeResolution&&(this.keyChangeResolution=s.getView().on("change:resolution",()=>this._handleScaleConstraint())),!this.state.selected&&this.keyChangeResolution&&(ol.Observable.unByKey(this.keyChangeResolution),this.keyChangeResolution=null)}}getTools(){return this.state._tools}getToolById(e){return this.state._tools.find(s=>e===s.getId())}setEnableTool(e){this.state._tools.find(s=>e===s.getId()).state.enabled=!0}setAddEnableTools({tools:e={},options:s={editing_constraints:!0}}={}){let{editing_constraints:i=!1}=s;this.setEnablesDisablesTools({enabled:this.state._tools.filter(a=>i?a.type.includes("add_feature"):["addfeature","editattributes","movefeature","movevertex"].includes(a.getId())).map(a=>({id:a.getId(),options:e[a.getId()]}))}),this.enableTools(!0)}setUpdateEnableTools({tools:e={},excludetools:s=[],options:i={editing_constraints:!0}}){let{editing_constraints:a=!1}=i,n=["editattributes","movefeature","movevertex"],r=this.state._tools.filter(l=>s.includes(l.getId())?!1:a?l.type.find(g=>g==="change_feature"||g==="change_attr_feature"):n.includes(l.getId())).map(l=>{let g=l.getId();return{id:g,options:e[g]}});this.setEnablesDisablesTools({enabled:r}),this.enableTools(!0)}setEnablesDisablesTools(e){if(e){this.state.changingtools=!0;let{enabled:s=[],disabled:i=[]}=e,a=s.length?[]:this.state._tools.map(n=>n.getId());s.forEach(({id:n,options:r={}})=>{let l=this.getToolById(n);if(l){let{active:g=!1}=r;l.messages=r.messages||l.messages,l.visible=r.visible!==void 0?r.visible:!0,l.enabled=r.enabled!==void 0?r.enabled:!1,l.disabledtoolsoftools=r.disabledtoolsoftools!==void 0?r.disabledtoolsoftools:[],l.visible&&a.push(n),g&&this.setActiveTool(l),this.state._enabledtools===void 0&&(this.state._enabledtools=[]),this.state._enabledtools.push(l)}}),i.forEach(({id:n,options:r})=>{this.getToolById(n)&&(this.state._disabledtools===void 0&&(this.state._disabledtools=[]),this.state._disabledtools.push(n),a.push(n))}),this.state._tools.forEach(n=>!a.includes(n.getId())&&(n.visible=!1)),this.state.changingtools=!1}}enableTools(e=!1){let s=this.state._enabledtools||this.state._tools,i=this.state._disabledtools||[];s.forEach(a=>{let n=a.enable===void 0?e:a.enable;a.enabled=e&&i.length>0?!i.includes(a.getId()):Ka(n)==="Boolean"?n:n({bool:e,tool:a}),e||(a.active=e)})}setActiveTool(e){return b(async()=>{try{await w(this.stopActiveTool(e)),this.state.toolsoftool.splice(0),this.state.activetool=e;let s=e.getOperator();s&&(s.once("settoolsoftool",a=>this.state.toolsoftool.push(...(a||[]).filter(n=>!e.disabledtoolsoftools.includes(n.type)))),s.once("start",a=>this.state.toolsoftool.forEach(n=>(a||[]).includes(n.type)&&(n.options.active=!0))),s.once("stop",a=>this._deactivetools(e,a)),s.once("reject",a=>this._deactivetools(e,a))),e.start();let i=this.state.activetool.getOperator().getHelpMessage()||this.state.activetool.getOperator().getRunningStep()?this.state.activetool.messages:null;this.state.toolmessages.help=i&&i.help||null}catch(s){console.warn(s)}})}_deactivetools(e,s=[]){e===this.state.activetool&&(this.state.activetool=null,this.state.toolsoftool.splice(0)),this.state.toolsoftool.forEach(i=>s.includes(i.type)&&(i.options.active=!1))}getActiveTool(){return this.state.activetool}stopActiveTool(e){return b(async()=>{let s=this.getActiveTool();if(e&&(!s||e===s)){e.removeAllListeners();return}try{s&&(s.removeAllListeners(),await w(s.stop(!0))),this.state.toolsoftool.splice(0),this.state.toolmessages.help=null,this.state.activetool=null}catch(i){console.warn(i)}})}getSession(){return this._session}getEditor(){return this.state.layer.getEditor()}resetDefault(){this.state.title=this.state.originalState.title,this.state.toolboxheader=!0,this.state.startstopediting=!0,this.constraints={filter:null,show:null,tools:[]},this.state._enabledtools&&(this.state._enabledtools=void 0,this.enableTools(),this.state._tools.forEach(e=>{e.visible=!0,e.enabled=!1,e.messages=e.op.getMessages(),e.disabledtoolsoftools=[]})),this.state._disabledtools=null,this.state.show=this.state.layer.config.editing.visible,this.state.selected=!1}__add(e,s){return b(new Promise(i=>{this.state.editing.session.current===null?this._states=[{id:e,items:s}]:(this._states.length>0&&this.state.editing.session.currenta.id<=this.state.editing.session.current)),this._states.push({id:e,items:s})),this.state.editing.session.current=e,this.__canUndo(),this.__canCommit(),this.__canRedo(),i(e)}))}__undo(){let e;return this.state.editing.session.current===this._states[0].id?(this.state.editing.session.current=null,e=this._states[0].items):this._states.find((s,i)=>{if(s.id===this.state.editing.session.current)return e=this._states[i].items,this.state.editing.session.current=this._states[i-1].id,!0}),e=Ft(this._history.id,e,0),this.__canUndo(),this.__canCommit(),this.__canRedo(),e}__redo(){let e;return this.state.editing.session.current?this._states.find((s,i)=>{if(this.state.editing.session.current===s.id)return this.state.editing.session.current=this._states[i+1].id,e=this._states[i+1].items,!0}):(e=this._states[0].items,this.state.editing.session.current=this._states[0].id),e=Ft(this._history.id,e,1),this.__canUndo(),this.__canCommit(),this.__canRedo(),e}__getState(e){return this._states.find(s=>e===s.id)}__canCommit(){let e=this.__commit(),s=!1;for(let i in e){let a=e[i];s=s||a.length>0}return this._constrains.commit=s,this._constrains.commit}__canUndo(){let e=null;this.state.editing.session.current&&this._states.length&&this._states.forEach((i,a)=>{if(this.state.editing.session.current===i.id)return e=a,!1});let s=this._states.length-1-e;return this._constrains.undo=this.state.editing.session.current!==null&&s<10,this._constrains.undo}__canRedo(){return this._constrains.redo=this._states.at(-1)&&this._states.at(-1).id!=this.state.editing.session.current||this.state.editing.session.current===null&&this._states.length>0,this._constrains.redo}__commit(){let e={};return this._states.filter(i=>i.id<=this.state.editing.session.current).forEach(i=>{i.items.forEach(a=>{let n=!0;if(Array.isArray(a)&&(a=a[1]),e[a.layerId]&&e[a.layerId].forEach((r,l)=>{if(r.getUid()===a.feature.getUid()){if(a.feature.isNew()&&!r.isDeleted()&&a.feature.isUpdated()){let g=a.feature.clone();g.add(),e[a.layerId][l]=g}else a.feature.isNew()&&a.feature.isDeleted()?e[a.layerId].splice(l,1):(a.feature.isUpdated()||a.feature.isDeleted())&&(e[a.layerId][l]=a.feature);return n=!1,!1}}),n){let r=a.feature,l=a.layerId;!r.isNew()&&r.isAdded()||(e[l]||(e[l]=[]),e[l].push(r))}})}),e}__getLastHistoryState(){return this._states.at(-1)||null}__isStarted(){return this.state.editing.session.started}__getHistory(){return this._history}__getEditor(){return this.state.layer.getEditor()}__push(e,s){this.state.editing.session.changes.push(s?[s,e]:e)}__pushDelete(e,s){return this.__push({layerId:e,feature:s.delete()}),s}__save(e={}){return b(async()=>{if(this.state.editing.session.changes.length){let s=e.id||Date.now();return await w(this.__add(s,this.state.editing.session.changes)),this.state.editing.session.changes=[],s}return null})}__pushAdd(e,s,i=!0){let a=e===this.state.layer.getId()?this.state.layer.getEditor():t.get(e).getSession().getEditor();i&&(a.getLayer().getEditingNotEditableFields()||[]).forEach(r=>s.unset([r]));let n=s.clone();return this.__push({layerId:e,feature:n.add()}),n}__pushUpdate(e,s,i){let a=s.isNew(),n=a&&this.state.editing.session.changes.findIndex(r=>e===r.layerId&&r.feature.getId()===s.getId());if(a&&n>=0){let r=s.clone();r.add(),this.state.editing.session.changes[n].feature=r;return}this.__push({layerId:e,feature:s.update()},{layerId:e,feature:i.update()})}__rollback(e){return e?this.state.layer.getEditor().rollback(e):b(async()=>{let s=this.state.layer.getId();e={own:[],dependencies:{}},this.state.editing.session.changes.forEach(i=>{let a=Array.isArray(i)?i[0]:i;s===a.layerId?e.own.push(a):(e.dependencies[a.layerId]=e.dependencies[a.layerId]||[],e.dependencies[a.layerId].unshift(a))});try{await w(this.state.layer.getEditor().rollback(e.own));for(let i in e.dependencies)t.get(i).getSession().rollback(e.dependencies[i]);return e.dependencies}catch(i){console.warn(i)}finally{this.state.editing.session.changes=[]}})}__rollbackDependecies(e=[]){e.forEach(s=>{let i=[];this.state.editing.session.changes=this.state.editing.session.changes.filter(a=>{if(s===a.layerId)return i.push(a),!1}),i.length&&t.get(s).getSession().rollback(i)})}__undoSession(e){return e=e||this.__undo(),this.state.layer.getEditor().setChanges(e.own,!0),this.__canCommit(),e.dependencies}__redoSession(e){return e=e||this.__redo(),this.state.layer.getEditor().setChanges(e.own,!0),this.__canCommit(),e.dependencies}__getCommitItems(){let e=this.__commit(),s=this.state.layer.getId(),i,a,n={add:[],update:[],delete:[],relations:{}};for(let l in e){let g=!1,c=e[l];if(l!==s){g=!0;let u=t.get(l).getSession(),p=u?u.getEditor().getLockIds():[];n.relations[l]={lockids:p,add:[],update:[],delete:[],relations:{}},a=n.relations[l]}else a=n;let h=ne.LayerTypes.VECTOR===t.get(l).getLayer().getType()&&ct.getLayerById(l).getGeometryType(),f=h&&g3wsdk.core.geoutils.Geometry.is3DGeometry(h);c.forEach(u=>{i=u.getState();let p=new ol.format.GeoJSON;if(i==="delete"){u.isNew()||a.delete.push(u.getId());return}let _=p.writeFeatureObject(u);f&&(_.geometry.type=h);let m=u.getProperties();for(let v in _.properties)_.properties[v]&&typeof _.properties[v]=="object"&&_.properties[v].constructor===Object&&(_.properties[v]=_.properties[v].value),_.properties[v]===void 0&&m[v]&&(_.properties[v]=m[v]);a[u.isNew()?"add":u.getState()].push(_)}),g&&a.add.length===0&&a.update.length===0&&a.delete.length===0&&delete n.relations[l]}return Object.keys(n.relations||{}).filter(l=>this.state.layer.getEditor().getLayer().getRelations().getArray().find(g=>l===g.getChild())===void 0).map(l=>(n.relations[t.get(l).getSession().getEditor().getLayer().getRelations().getArray().find(g=>l===g.getChild()&&n.relations[g.getFather()]).getFather()].relations[l]=n.relations[l],l)).forEach(l=>delete n.relations[l]),n}__clearSession(){this._allfeatures=!1,this.state.editing.session.started=!1,this.state.editing.session.getfeatures=!1,this.__clearHistory()}__clearHistory(e){e?this._states.forEach((s,i)=>{e.includes(s.id)&&(this.state.editing.session.current&&s.id===this.state.editing.session.current&&this.__undo(),this._states.splice(i,1))}):(this._states=[],this.state.editing.session.current=null,this._constrains.commit=!1,this._constrains.redo=!1,this._constrains.undo=!1)}async __startSession(e={}){try{let s=await w(this.state.layer.getEditor().start(e));return this.state.editing.session.started=!0,s}catch(s){return console.warn(s),Promise.reject(s)}finally{if(!e.registerEvents)return;if(this.state._getFeaturesOption=e,ne.LayerTypes.VECTOR===this.state._layerType&&this.state._getFeaturesOption.filter.bbox){let s=()=>{se.online&&this.state.editing.canEdit&&this.state.selected&&T.getContentLength()===0&&(this.state._getFeaturesOption.filter.bbox=T.getService("map").getMapBBOX(),this.state.loading=!0,this._session.getFeatures(this.state._getFeaturesOption).then(i=>i.then(()=>this.state.loading=!1)))};this._getFeaturesEvent.event="moveend",this._getFeaturesEvent.fnc=qa(s,300),this._olStartKeysEvent.push(T.getService("map").getMap().on("moveend",this._getFeaturesEvent.fnc)),T.getContentLength()&&T.once("closecontent",()=>{let i=T.getService("map").getMap();setTimeout(()=>i.dispatchEvent({type:this._getFeaturesEvent.event,target:i}))})}}}async __stopSession(){try{(this.state.editing.session.started||this.state.editing.session.getfeatures)&&(await w(this.state.layer.getEditor().stop()),this.__clearSession())}catch(e){return console.warn(e),Promise.reject(e)}finally{se.online&&this._stopSessionChildren(this.state.id),this.state._getFeaturesOption.registerEvents&&ne.LayerTypes.VECTOR===this.state._layerType&&T.getService("map").getMap().un(this._getFeaturesEvent.event,this._getFeaturesEvent.fnc)}}async __getFeatures(e={}){if(!this._allfeatures){this._allfeatures=!e.filter;let s=await w(this.state.layer.getEditor().getFeatures(e));return this.state.editing.session.getfeatures=!0,s}return[]}async __saveChangesOnServer(e){let s=[Fe(this.getId())],i=[],a=(n={})=>{Object.entries(n).forEach(([r,l])=>{i.push(r),a(l.relations)})};a(e.relations),i.forEach(n=>s.push(Fe(n))),await Promise.allSettled(s)}_startTool(e){e.getOperator()&&(e.active=!0,setTimeout(async()=>await this._startOp(e,{inputs:{layer:this.getLayer(),features:[]},context:{session:this._session}},!!T.getService("map").isMapHidden())))}async _startOp(e,s,i){s.inputs.features=s.features||[],i&&T.hideSidebar();try{await w(e.op.start(s)),await w(this._session.save()),g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").saveChange()}catch(a){console.warn(a),i&&T.showSidebar(),this._session.rollback()}finally{!e.getOperator().runOnce&&ne.LayerTypes.VECTOR===this.getLayer().getType()?await this._startOp(e,s,i):e.stop()}}_stopTool(e,s=!1){return b(async()=>{if(!e.getOperator()){e.emit("stop",{session:this._session});return}try{await w(e.getOperator().stop(s))}catch(i){console.warn(i),this._session.rollback()}finally{e.active=!1,e.emit("stop",{session:this._session})}})}};J._sessions={};J.get=t=>J._sessions[t];J.clear=()=>Object.keys(sessions).forEach(t=>delete J._sessions[t]);D();var{ApplicationState:Ja,G3WObject:Ya}=g3wsdk.core,{FeaturesStore:xs}=g3wsdk.core.layer.features,{Layer:Mt}=g3wsdk.core.layer,Bt=class extends xs{constructor(e={}){super(e),this._features=e.features||new ol.Collection([])}getLength(){return this._features.getLength()}setFeatures(e=[]){this._features.clear(),this.addFeatures(e),this._features.dispatchEvent("change")}readFeatures(){return this._features.getArray()}getFeaturesCollection(){return this._features}getFeatureById(e){return this._features.getArray().find(s=>e==s.getId())}getFeatureByUid(e){return this._features.getArray().find(s=>e===s.getUid())}_addFeature(e){this._features.push(e),this._features.dispatchEvent("change")}_updateFeature(e){let s=this._features.getArray().findIndex(i=>e.getUid()===i.getUid());s>=0&&(this._features.removeAt(s),this._features.insertAt(s,e),this._features.dispatchEvent("change"))}_removeFeature(e){let s=this._features.getArray().findIndex(i=>e.getUid()===i.getUid());s>=0&&(this._features.removeAt(s),this._features.dispatchEvent("change"))}_clearFeatures(){try{for(let e=0;e{let i=!0,{bbox:a}=s.filter||{},n=a&&Mt.LayerTypes.VECTOR===this._layer.getType();if(n&&this._filter.bbox===null)this._filter.bbox=a,i=!0;else if(n){let r=ol.extent.containsExtent(this._filter.bbox,a);r||(this._filter.bbox=ol.extent.extend(this._filter.bbox,a)),i=!r}if(i){let r=await w(this._layer.getFeatures(s));return this._featuresstore.addFeatures((r||[]).map(l=>l.clone())),this._allfeatures=!s.filter,r}})}},this._filter={bbox:null},this._allfeatures=!1,this._layer=e.layer,this._featuresstore=Mt.LayerTypes.TABLE===this._layer.getType()?new xs:new Bt,this._started=!1}getEditingSource(){return this._featuresstore}getSource(){this._layer.getSource()}setChanges(e=[],s=!0){let i={add:{fnc:"addFeature",opposite:"delete"},delete:{fnc:"removeFeature",opposite:"add"},update:{fnc:"updateFeature",opposite:"update"}};e.forEach(a=>{s&&a.feature[i[a.feature.getState()].opposite](),this._featuresstore[i[a.feature.getState()].fnc](a.feature)})}getLayer(){return this._layer}setLayer(e){return this._layer=e}rollback(e=[]){return b(()=>this.setChanges(e,!0))}applyCommitResponse(e={},s=[]){if(!(e&&e.result))return;e.response.new.forEach(({clientid:a,id:n,properties:r}={})=>{let l=this.getEditingSource().getFeatureById(a);l.setId(n),l.setProperties(r),s.forEach(g=>{Object.entries(g).forEach(([c,o={}])=>{let h=J.get(c).getSession().getEditor().getEditingSource();(o.ids||[]).forEach(f=>{let u=h.getFeatureById(f);u&&o.fatherField.forEach((p,_)=>{u.set(o.childField[_],l.get(p))})})})})}),(e.response.update||[]).forEach(({id:a,properties:n}={})=>{let r=this.getEditingSource().getFeatureById(a);r.setProperties(n),s.forEach(l=>{Object.entries(l).forEach(([g,c={}])=>{let o=J.get(g).getSession().getEditor().getEditingSource();(c.ids||[]).forEach(h=>{let f=o.getFeatureById(h);f&&c.fatherField.forEach((u,p)=>{f.set(c.childField[p],r.get(u))})})})})});let i=this.readEditingFeatures();i.forEach(a=>a.clearState()),this._layer.setFeatures([...i]),this.addLockIds(e.response.new_lockids)}addLockIds(e){this._layer.getSource().addLockIds(e)}getLockIds(){return this._layer.getSource().getLockIds()}commit(e){return b(async()=>{let s=[];e.add.length&&(s=Object.keys(e.relations).map(a=>{let n=this._layer.getRelations().getRelationByFatherChildren(this._layer.getId(),a);return{[a]:{ids:[...e.relations[a].add.map(r=>r.id),...e.relations[a].update.map(r=>r.id)],fatherField:n.getFatherField(),childField:n.getChildField()}}}));let i=await w(this._layer.commit(e));return this.applyCommitResponse(i,s),i})}start(e={}){return b(async()=>{let s=await w(this.getFeatures(e));return this._started=!0,s})}readFeatures(){return this._layer.readFeatures()}readEditingFeatures(){return this._featuresstore.readFeatures()}stop(){return b(async()=>{let{result:e}=await w(this._layer.unlock());return this.clear(),e})}isStarted(){return this._started}clear(){this._started=!1,this._filter.bbox=null,this._allfeatures=!1,this._featuresstore.clear(),this._layer.getFeaturesStore().clear(),Mt.LayerTypes.VECTOR===this._layer.getType()&&this._layer.resetEditingSource(this._featuresstore.getFeaturesCollection())}};pe();function ut(t){return t instanceof Promise?t:!t||!t.then?(console.trace(t),Promise.reject("not a promise")):new Promise((e,s)=>{t.then(e).fail(s)})}var gt=class{constructor(){this.tasks=[]}addTask(e){this.tasks.push(e)}run(e=!1){for(;this.tasks.length;)(e?this.tasks.pop():this.tasks.shift())()}flush(){return this.tasks.splice(0)}getLength(){return this.tasks.length}clear(){this.run(),this.tasks=[]}},ft=class extends g3wsdk.core.G3WObject{constructor(){super(),console.warn("[G3W-CLIENT] g3wsdk.core.workflow.Flow is deprecated"),this.steps=[],this.counter=0,this.context=null,this.queques={end:new gt,micro:new gt},this.inputs,this.d,this._workflow}start(e){return this.d=$.Deferred(),this.counter>0&&console.log("reset workflow before restarting"),this._workflow=e,this.inputs=e.getInputs(),this.context=e.getContext(),this.steps=e.getSteps(),this.steps&&this.steps.length&&this.runStep(this.steps[0],this.inputs,this.context),this.d.promise()}runStep(e,s){this._workflow.setMessages({help:e.state.help});let i=this.queques.micro.getLength();e.run(s,this.context,this.queques).then(a=>{i&&this.queques.micro.run(),this.onDone(a)}).fail(a=>this.onError(a))}onDone(e){if(this.counter++,this.counter===this.steps.length){this.counter=0,this.d.resolve(e);return}this.runStep(this.steps[this.counter],e)}onError(e){this.counter=0,this.clearQueques(),this.d.reject(e)}stop(){let e=$.Deferred();return this.steps[counter].isRunning()&&this.steps[this.counter].stop(),this.clearQueques(),this.counter>0?(this.counter=0,e.reject()):e.resolve(),e.promise()}clearQueques(){this.queques.micro.clear(),this.queques.end.clear()}},ht={Actions:{add:{fnc:"addFeature",opposite:"delete"},delete:{fnc:"removeFeature",opposite:"add"},update:{fnc:"updateFeature",opposite:"update"}},execute(t,e,s){console.warn("[G3W-CLIENT] g3wsdk.core.workflow.ChangesManager is deprecated");let i,a;e.forEach(n=>{a=n.feature,s&&a[ht.Actions[a.getState()].opposite](),i=ht.Actions[a.getState()].fnc,t[i](a)})}},Le=class t extends g3wsdk.core.G3WObject{constructor(e={}){console.warn("[G3W-CLIENT] g3wsdk.core.workflow.Session is deprecated"),super(e),this.setters={start(s={}){return $.Deferred(async i=>{try{let a=await ut(this._editor.start(s));this.state.started=!0,i.resolve(a)}catch(a){console.warn(a),i.reject(a)}}).promise()},stop(){return $.Deferred(async s=>{if(!(this.state.started||this.state.getfeatures))return s.resolve();try{await ut(this._editor.stop()),this.clear(),s.resolve()}catch(a){console.warn(a),s.reject(a)}}).promise()},getFeatures(s={}){return $.Deferred(async i=>{if(this._allfeatures)return i.resolve([]);this._allfeatures=!s.filter;try{let a=await ut(this._editor.getFeatures(s));this.state.getfeatures=!0,i.resolve(a)}catch(a){console.warn(a),i.reject(a)}}).promise()},saveChangesOnServer(s){}},this.state={id:e.id,started:!1,getfeatures:!1,maxSteps:10,current:null,changes:[]},this._states=[],this._constrains={commit:!1,undo:!1,redo:!1},this._editor=e.editor,this._history={id:this.state.id,state:new Proxy({},{get:(s,i)=>this._constrains[i]}),add:this.__add.bind(this),getRelationStates:this.__getRelationStates.bind(this),insertState:this.__insertState.bind(this),removeState:this.deleteState.bind(this),removeStates:this.removeChangesFromHistory.bind(this),insertStates:this.__insertStates.bind(this),undo:this.__undo.bind(this),clear:this.clearHistory.bind(this),redo:this.__redo.bind(this),setItemsFeatureIds:this.__setItemsFeatureIds.bind(this),getState:this.__getState.bind(this),getFirstState:this.__getFirstState.bind(this),getLastState:this.getLastHistoryState.bind(this),getCurrentState:this.__getCurrentState.bind(this),getCurrentStateIndex:this.__getCurrentStateIndex.bind(this),canCommit:this.__canCommit.bind(this),canUndo:this.__canUndo.bind(this),canRedo:this.__canRedo.bind(this),commit:this.__commit.bind(this)},this.register()}_checkSessionItems(e,s,i){let a={own:[],dependencies:{}};return s.forEach(n=>{Array.isArray(n)&&(n=n[i]),e===n.layerId?a.own.push(n):(a.dependencies[n.layerId]=a.dependencies[n.layerId]||{own:[],dependencies:{}},a.dependencies[n.layerId].own.push(n))}),a}getId(){return this.state.id}getLastHistoryState(){return this._states.length?this._states[this._states.length-1]:null}getLastStateId(){return this.getLastHistoryState().id}deleteState(e){let s=this._states.findIndex(i=>i.id===e);console.assert(s>=0,`invalid stateId ${e}`),this.state.current===e&&(this.state.current=this._states.length>1?this._states[s-1].id:null),this._states.splice(s,1)}register(){t.Registry.register(this)}unregister(){t.Registry.unregister(this.getId())}isStarted(){return this.state.started}getEditor(){return this._editor}setEditor(e){this._editor=e}save(e={}){let s=$.Deferred();if(this.state.changes.length){let i=e.id||Date.now();this._history.add(i,this.state.changes).then(()=>{this.state.changes=[],s.resolve(i)})}else s.resolve(null);return s.promise()}updateTemporaryChanges(e){this.state.changes.forEach(s=>s.feature.setProperties(e.getProperties()))}pushAdd(e,s,i=!0){let a=e===this.getId()?this._editor:t.Registry.getSession(e).getEditor();i&&(a.getLayer().getEditingNotEditableFields()||[]).forEach(r=>s.unset([r]));let n=s.clone();return this.push({layerId:e,feature:n.add()}),n}pushDelete(e,s){return this.push({layerId:e,feature:s.delete()}),s}pushUpdate(e,s,i){let a=s.isNew(),n=a&&this.state.changes.findIndex(r=>e===r.layerId&&r.feature.getId()===s.getId());if(a&&n>=0){let r=s.clone();r.add(),this.state.changes[n].feature=r;return}this.push({layerId:e,feature:s.update()},{layerId:e,feature:i.update()})}removeChangesFromHistory(e=[]){(e||[]).forEach(s=>this.deleteState(s))}moveRelationStatesOwnSession(){let e={},{relations:s}=this.getCommitItems();for(let i in s){let a=this._history.getRelationStates(i);t.Registry.getSession(i)._history.insertStates(a),e[i]=a.map(n=>n.id)}return e}push(e,s){this.state.changes.push(s?[s,e]:e)}revert(){let e=$.Deferred();return this._editor.revert().then(()=>{this.clearHistory(),e.resolve()}),e.promise()}rollback(e){if(e)return this._editor.rollback(e);let s=$.Deferred(),i=this.getId();return e={own:[],dependencies:{}},this.state.changes.forEach(a=>{let n=Array.isArray(a)?a[0]:a;n.layerId===i?e.own.push(n):(e.dependencies[n.layerId]||(e.dependencies[n.layerId]=[]),e.dependencies[n.layerId].unshift(n))}),this._editor.rollback(e.own).then(()=>{for(let a in e.dependencies)t.Registry.getSession(a).rollback(e.dependencies[a]);s.resolve(e.dependencies)}),this.state.changes=[],s.promise()}rollbackDependecies(e=[]){e.forEach(s=>{let i=[];this.state.changes=this.state.changes.filter(a=>{if(a.layerId===s)return i.push(a),!1}),i.length&&t.Registry.getSession(s).rollback(i)})}undo(e){return e=e||this._history.undo(),this._editor.setChanges(e.own,!0),this._history.canCommit(),e.dependencies}redo(e){return e=e||this._history.redo(),this._editor.setChanges(e.own,!0),this._history.canCommit(),e.dependencies}getCommitItems(){let e=this._history.commit(),s=this.getId(),i,a,n={add:[],update:[],delete:[],relations:{}};for(let l in e){let g=!1,c=e[l];if(l!==s){g=!0;let o=t.Registry.getSession(l),h=o?o.getEditor().getLockIds():[];n.relations[l]={lockids:h,add:[],update:[],delete:[],relations:{}},a=n.relations[l]}else a=n;c.forEach(o=>{i=o.getState();let h=new ol.format.GeoJSON;switch(i){case"delete":o.isNew()||a.delete.push(o.getId());break;default:let f=h.writeFeatureObject(o),u=o.getProperties();for(let p in f.properties)f.properties[p]&&typeof f.properties[p]=="object"&&f.properties[p].constructor===Object&&(f.properties[p]=f.properties[p].value),f.properties[p]===void 0&&u[p]&&(f.properties[p]=u[p]);a[o.isNew()?"add":o.getState()].push(f);break}}),g&&a.add.length===0&&a.update.length===0&&a.delete.length===0&&delete n.relations[l]}return Object.keys(n.relations||{}).filter(l=>this._editor.getLayer().getRelations().getArray().find(g=>l===g.getChild())===void 0).map(l=>(n.relations[t.Registry.getSession(l).getEditor().getLayer().getRelations().getArray().find(g=>l===g.getChild()&&n.relations[g.getFather()]).getFather()].relations[l]=n.relations[l],l)).forEach(l=>delete n.relations[l]),n}set3DGeometryType({layerId:e=this.getId(),commitItems:s}={}){let{relations:i}=s,a=MapLayersStoresRegistry.getLayerById(e).getEditingLayer();if(a&&g3wsdk.core.layer.Layer.LayerTypes.VECTOR===a.getType()){let n=a.getGeometryType();g3wsdk.core.geoutils.Geometry.is3DGeometry(n)&&["add","update"].forEach(r=>s[r].forEach(l=>l.geometry.type=n))}Object.keys(i).forEach(n=>this.set3DGeometryType({layerId:n,commitItems:i[n]}))}commit({ids:e=null,items:s,relations:i=!0,__esPromise:a=!1}={}){let n=$.Deferred(),r;return e?(r=this._history.commit(e),this.clearHistory(e),n.promise()):(r=s||this.getCommitItems(this._history.commit()),i||(r.relations={}),this._editor.commit(r).then(l=>{if(!(l&&l.result)){n.reject(l);return}let{relations:g={}}=l.response;for(let c in g)t.Registry.getSession(c).getEditor().applyCommitResponse({response:g[c],result:!0});this.clearHistory(),this.saveChangesOnServer(r),a?n.resolve({commit:r,response:l}):n.resolve(r,l)}).fail(l=>n.reject(l)),n.promise())}clear(){this._allfeatures=!1,this.state.started=!1,this.state.getfeatures=!1,this.clearHistory()}getHistory(){return this._history}clearHistory(e){e?this._states.forEach((s,i)=>{e.indexOf(s.id)!==-1&&(this.state.current&&this.state.current===s.id()&&this._history.undo(),this._states.splice(i,1))}):(this._states=[],this.state.current=null,this._constrains.commit=!1,this._constrains.redo=!1,this._constrains.undo=!1)}__add(e,s){let i=$.Deferred();return this.state.current===null?this._states=[{id:e,items:s}]:(this._states.length>0&&this.state.currenta.id<=this.state.current)),this._states.push({id:e,items:s})),this.state.current=e,this._history.canUndo(),this._history.canCommit(),this._history.canRedo(),i.resolve(e),i.promise()}__getRelationStates(e,{clear:s=!1}={}){let i=[];for(let a=0;a(Array.isArray(l)?l[0].layerId:l.layerId)===e);r.length>0&&i.push({id:n.id,items:r})}return i}__insertState(e){let s=e.id,i=this._states.length;for(let a=0;as){i=a;break}else if(n.id===s){i=-1;break}}i>-1&&(this.state.current{if(s.id===this.state.current)return e=this._states[i].items,this.state.current=this._states[i-1].id,!0}),e=this._checkSessionItems(this._history.id,e,0),this._history.canUndo(),this._history.canCommit(),this._history.canRedo(),e}__redo(){let e;return this.state.current?this._states.find((s,i)=>{if(this.state.current===s.id)return this.state.current=this._states[i+1].id,e=this._states[i+1].items,!0}):(e=this._states[0].items,this.state.current=this._states[0].id),e=this._checkSessionItems(this._history.id,e,1),this._history.canUndo(),this._history.canCommit(),this._history.canRedo(),e}__setItemsFeatureIds(e=[]){e.forEach(s=>{this._states.forEach(i=>{i.items.forEach(a=>{let n=a.feature.getId()===s.clientid&&a.feature;n&&n.setId(s.id)})})})}__getState(e){return this._states.find(s=>s.id===e)}__getFirstState(){return this._states.length?this._states[0]:null}__getCurrentState(){let e=null;return this.state.current&&this._states.length&&(e=this._states.find(s=>this.state.current===s.id)),e}__getCurrentStateIndex(){let e=null;return this.state.current&&this._states.length&&this._states.forEach((s,i)=>{if(this.state.current===s.id)return e=i,!1}),e}__canCommit(){let e=this._history.commit(),s=!1;for(let i in e){let a=e[i];s=s||a.length>0}return this._constrains.commit=s,this._constrains.commit}__canUndo(){let e=this._states.length-1-this._history.getCurrentStateIndex();return this._constrains.undo=this.state.current!==null&&this.state.maxSteps>e,this._constrains.undo}__canRedo(){return this._constrains.redo=this.getLastHistoryState()&&this.getLastStateId()!=this.state.current||this.state.current===null&&this._states.length>0,this._constrains.redo}__commit(){let e={};return this._states.filter(i=>i.id<=this.state.current).forEach(i=>{i.items.forEach(a=>{let n=!0;if(Array.isArray(a)&&(a=a[1]),e[a.layerId]&&e[a.layerId].forEach((r,l)=>{if(r.getUid()===a.feature.getUid()){if(a.feature.isNew()&&!r.isDeleted()&&a.feature.isUpdated()){let g=a.feature.clone();g.add(),e[a.layerId][l]=g}else a.feature.isNew()&&a.feature.isDeleted()?e[a.layerId].splice(l,1):(a.feature.isUpdated()||a.feature.isDeleted())&&(e[a.layerId][l]=a.feature);return n=!1,!1}}),n){let r=a.feature,l=a.layerId;!r.isNew()&&r.isAdded()||(e[l]||(e[l]=[]),e[l].push(r))}})}),e}},Te={};Le.Registry={_sessions:Te,register(t){Te[t.getId()]=t},unregister(t){delete Te[t]},getSession(t){return Te[t]},setSession(t,e){Te[t]=e},getSessions(){return Te},clear(){Object.keys(Te).forEach(Le.Registry.unregister)}};ee();(window.g3wsdk.core.editing||window.g3wsdk.core.workflow||window.g3wsdk.constant.DEFAULT_EDITING_CAPABILITIES||g3wsdk.version<"4")&&console.warn("Editing APIs will be removed from g3wsdk after v4.x");window.g3wsdk.core.editing={Session:Le,SessionsRegistry:Le.Registry,Editor:Ye,ChangesManager:ht};window.g3wsdk.constant.DEFAULT_EDITING_CAPABILITIES=["add_feature","change_feature","change_attr_feature","delete_feature"];window.g3wsdk.core.workflow={Task:F,Step:F,Flow:ft,Workflow:y,WorkflowsStack:y.Stack};var Fs={close_editing_panel:{message:"Terminare l'editing dei singoli layer per chiudere la sessione"},errors:{no_layers:"Si \xE8 verificato un errore nel caricamento dei layers in editing.",some_layers:"Si \xE8 verificato un errore nel caricamento di alcuni layers in editing",editing_multiple_relations:"Le modifica di relazioni multiple non \xE8 attualmente supportata"},search:"Cerca",editing_changes:"Modifiche Editing",editing_data:"Modifica dati",editing_attributes:"Edita attributi",relations:"Relazioni",edit_relation:"Edita relazione",back_to_relations:"Ritorna alle Relazioni",no_relations_found:"Non ci sono relazioni",relation_data:"Dati relativi alla relazione",relation_already_added:"Relazione gi\xE0 presente",list_of_relations_feature:"Elenco Relazioni della feature ",tooltip:{edit_layer:"Modifica livello",filter_by_relation:"Filtra i livelli per relazione"},toolbox:{title:"Edita"},table:{edit:"Edita feature",copy:"Crea una copia",delete:"Cancella feature"},tools:{copy:"Copia elementi",pastefeaturesfromotherlayers:"Incolla elemento da altro livello",addpart:"Aggiungi parte alla geometria",deletepart:"Cancella parte dalla geometria",merge:"Dissolvi elementi",split:"Dividi elementi",add_feature:"Aggiungi elemento",delete_feature:"Elimina elemento",move_feature:"Muovi elemento",update_vertex:"Aggiorna vertici elemento",update_feature:"Modifica attributi elemento",update_multi_features:"Modifica gli attributi degli elementi selezionati",update_multi_features_relations:"Modifica gli attributi di tutte le relazioni selezionate",update_multi_features_relations_from_parents:"Edita i record relazionati di uno o pi\xF9 padri",copyfeaturefromexternallayer:"Crea elemento da un livello esterno"},toolsoftool:{measure:"Visualizza misura",snap:"Snap sul layer",snapall:"Snap su tutti i layer"},steps:{help:{select_elements:"Seleziona le geometrie",select_element:"Seleziona l'elemento",copy:"Crea una copia degli elementi selezionati",merge:"Dissolvi elementi",split:"Dvidi elemento",new:"Crea un nuovo elemento",edit_table:"Modifica gli elementi della tabella",draw_new_feature:"Disegna la nuova geometria",action_confirm:"Conferma azione",double_click_delete:"Seleziona la geometria sulla mappa da cancellare",edit_feature_vertex:"Modifica o aggiungi un vertice alla geometria selezionata",move:"Muovi la geometria selezionata",select_feature_to_relation:"Seleziona la geometria che vuoi mettere in relazione",show_edit_feature_form:"Mostra il modulo per modificare gli attributi del'elemento",pick_feature:"Seleziona la geometria da modificare dalla mappa",insert_attributes_feature:"Inserisci gli attributi dell'elemento"}},workflow:{steps:{select:"Seleziona una geometria",draw_part:"Disegna il nuovo elemento da aggiungere alla geometria",draw_geometry:"Disegna la geometria",merge:"Seleziona la geometria su cui dissolvere",selectPoint:"Clicca sulla geometria per selezionarla",selectSHIFT:"Seleziona le geometrie tenedo premuto il tasto SHIFT",selectDrawBox:"Seleziona le geometrie disegnando un rettangolo mediante la creazione dei due punti della diagonale",selectDrawBoxAtLeast2Feature:"Seleziona almeno 2 geometrie disegnando un rettangolo mediante la creazione dei due punti della diagonale",selectPointSHIFT:"Seleziona le geometrie
MAIUSC+DRAG seleziona pi\xF9 elementi in un area",selectMultiPointSHIFT:"Seleziona le geometrie
SHIFT+DRAG seleziona pi\xF9 elementi in un area",selectMultiPointSHIFTAtLeast2Feature:"Seleziona almeno 2 geometrie
SHIFT+DRAG seleziona pi\xF9 elementi in un area",copyCTRL:"Copia le geometrie selezionate con CTRL+C",selectStartVertex:"Seleziona il vertice di partenza",selectToPaste:"Seleziona il punto dove verranno incollate le geometrie",draw_split_line:"Disegna una linea per dividere la geometria selezionata"},title:{steps:"Passi"},next:"Avanti"},messages:{featureslockbyotheruser:"Ci sono alcune geometrie/records non editabili perch\xE8 in modifica da altri utenti",splitted:"Feature(s) splittata(e)",nosplittedfeature:"La(e) feature(s) non \xE8 stata splittata",press_esc:"Premi ESC per tornare indietro",online:"Ora sei di nuovo ONLINE. Puoi slavare le modifiche in modo permanente",offline:"Sei OFFLINE. Tutte le modifiche saranno salvate temporaneamente in locale",delete_feature:"Vuoi eliminare l'elemento selezionato?",delete_feature_relations:"Cancellando una feature con relazioni associate, tale relazioni rimarranno orfane. Si consiglia di gestire tali relazioni prima di cancellare la feature",unlink_relation:"Vuoi staccare la relazione?",commit_feature:"Riepilogo modifiche",toolbox_has_no_geometry:"questo livello non ha geometria",toolbox_has_relation:"questo livello fa parte di una relazione",saved:"I dati sono stati salvati correttamente",saved_local:"I dati sono stati salvati correttamente in locale",loading_data:"Caricamento dati",saving:"Salvataggio dati in corso. Attendere ...",constraints:{enable_editing:`Ingrandisci per modificare -Scala di attivazione 1:`},pdf:"Anteprima del documento non disponibile. Clicca qui ",commit:{header:"La lista sotto riporta tutte le modifiche che verranno salvate.",header_relation:"Relazione",header_add:"Aggiunte riporta il numero delle features aggiunte",header_update_delete:"Modificate e Cancellate riporta la lista degli id",add:"Aggiunte",delete:"Cancellate",update:"Aggiornate"},loading_table_data:"Costruzione tabella dati in corso. Attendere ...",copy_and_paste_from_other_layer_mandatory_fields:"Necessario compilare eventuali campi obbligatori sulle features incollate prima del salvataggio",no_feature_selected:"Nessuna feature selezionata",select_min_2_features:"Seleziona come minimo due features"},relation:{table:{info:"
Seleziona le relazioni per associarle alla feature in editing.
"},draw_new_feature:"Disegna nuova geometria",draw_or_copy:"oppure",copy_feature_from_other_layer:"Copia geometria da altro layer"},form:{relations:{tooltips:{back_to_father:"Torna ad editare il padre",add_relation:"Crea ed aggiungi nuova relazione",link_relation:"Associa una relazione esistente a questa feature",open_relation_tools:"Apri strumenti relatione",unlink_relation:"Annulla relazione"}},buttons:{save:"Inserisci/Modifica",save_table:"Modifica",save_and_back:"Salva e torna al padre",save_and_back_table:"Salva e torna indietro",cancel:"Ignora Modifiche"}},modal:{tools:{copyfeaturefromotherlayer:{title:"Seleziona layer",edit_attributes:"Edita attributi delle features in multiple mode"},copyfeaturefromprojectlayer:{title:"Seleziona una feature"}}}};var Es={close_editing_panel:{message:"To close editing form need to exit from editing layer"},errors:{no_layers:"An error occurs. It's no possible to edit layers",some_layers:"An error occurs: It's no possible to edit some layers",editing_multiple_relations:"Editing multiple relationships is not currently supported"},search:"Search",editing_changes:"Editing Changes",editing_data:"Editing Layers",editing_attributes:"Editing attributes",relations:"Relations",edit_relation:"Edit relation",back_to_relations:"Back to Relations",no_relations_found:"No relations found",relation_data:"Relation data",relation_already_added:"Relation already added",list_of_relations_feature:"List of relations feature ",tooltip:{edit_layer:"Edit Layer",filter_by_relation:"Filter layers by relation"},toolbox:{title:"Edit"},table:{edit:"Edit feature",copy:"Create a copy",delete:"Delete feature"},tools:{copy:"Copy features",pastefeaturesfromotherlayers:"Paste features from other layer",addpart:"Add part to multipart",deletepart:"Delete part from multipart",merge:"Dissolve features",split:"Split Feature",add_feature:"Add feature",delete_feature:"Delete feature",move_feature:"Move feature",update_vertex:"Update feature vertex",update_feature:"Update feature attribute",update_multi_features:"Update attributes of selected features",update_multi_features_relations:"Update attributes of all selected relations",update_multi_features_relations_from_parents:"Edit relations records from one or mode parent features",copyfeaturefromexternallayer:"Create Feature from added layer"},toolsoftool:{measure:"Show measure",snap:"Snap layer",snapall:"Snap to all layers"},steps:{help:{select_elements:"Select features",select_element:"Select feature",copy:"Create new copy of selected features",merge:"Dissolve features",split:"Split Feature",new:"Create new feature",edit_table:"Edit table features",draw_new_feature:"Draw feature on map",action_confirm:"Confirm action",double_click_delete:"Select feature on map to delete",edit_feature_vertex:"Modify or add a vertex on selected feature",move:"Move selected feature",select_feature_to_relation:"Select feature that you bind relation",show_edit_feature_form:"Show feature form to edit attributes",pick_feature:"Select feature on map to modify",insert_attributes_feature:"Insert attributes of the feature"}},workflow:{steps:{select:"Click on feature to select",draw_part:"Draw new part",draw_geometry:"Draw geometry",merge:"Select featurewhere dissolve",selectSHIFT:"Select features drawing a rectangle pressing SHIFT",selectDrawBox:"Select features drawing a rectangle by two point of opposite corners",selectDrawBoxAtLeast2Feature:"Select at least features drawing a rectangle by two point of opposite corners",selectPoint:"Click on feature to select",selectPointSHIFT:"Select features drawing a rectangle pressing SHIFT (multifeatures) or click on one feature",selectMultiPointSHIFT:"Select features drawing a rectangle pressing SHIFT or click on feature",selectMultiPointSHIFTAtLeast2Feature:"Select at least 2 features drawing a rectangle pressing SHIFT or click on feature",copyCTRL:"Copy selected features using CTRL+C",selectStartVertex:"Select starting vertex of selected features",selectToPaste:"Select the point where paste the features selected",draw_split_line:"Draw a line to split selected feature"},title:{steps:"Steps"},next:"Next"},messages:{featureslockbyotheruser:"Some geometries/records are not editable because in editing by other user",splitted:"Splitted",nosplittedfeature:"Feature not spitted",press_esc:"Press ESC to back",online:"Back ONLINE. Now you can save your changes on database",offline:"You are OFFLINE. All changes are saved locally",delete_feature:"Do you want delete selected feature ?",delete_feature_relations:"If feature has bindings relations, these relations become orphans. We suggest to handle these relations before detele this feature",unlink_relation:"Do you want unlink relation?",commit_feature:"Summary of changes",toolbox_has_no_geometry:"this layer has no geometry",toolbox_has_relation:"this layer is part of a relation",saved:"Data saved successfully",saved_local:"Data saved locally successfully",loading_data:"Loading data",saving:"Saving data. Please wait ...",constraints:{enable_editing:`Please Zoom In to enable editing tools + `,data(){return{relations:this.$options.relations,relationId:this.$options.relationId}}}))({relations:_,relationId:_[0].state.id});T.showModalDialog({title:Je("editing.relations"),className:"modal-left",closeButton:!1,message:C.$mount().$el,buttons:{cancel:{label:"Cancel",className:"btn-danger",callback(){A()}},ok:{label:"Ok",className:"btn-success",callback:async()=>{m=_.find(G=>C.relationId===G.state.id).getChild(),E()}}}}).on("hide.bs.modal",()=>C.$destroy())})}catch(E){return console.warn(E),T.setModal(!1),b(Promise.reject(E))}let v=new y({type:"editmultiattributes",steps:[new R({multi:!0})]}),k=X(m);if(k.readFeatures().length===0)return T.setModal(!1),T.showUserMessage({type:"warning",message:"plugins.editing.no_relations_found",autoclose:!0}),b(Promise.reject());let S=z({layerId:_[0].getChild(),relation:_[0]}),x={context:{session:y.Stack.getCurrent().getSession(),excludeFields:S.ownField,isContentChild:!1},inputs:{features:k.readFeatures(),layer:k}};try{await Fe(m),await w(v.start(x))}catch(E){console.warn(E)}return v.stop(),T.setModal(!1),b(Promise.resolve(u,p))}})]})},i&&f.includes("change_feature")&&{id:"movefeature",type:["change_feature"],name:"editing.tools.move_feature",icon:`move${o}.png`,op:new y({layer:e,type:"movefeature",helpMessage:"editing.tools.move_feature",steps:[new re,new F({run:Ee}),new we]})},(()=>{let u=[];return i&&f.includes("add_feature")&&{id:"copyfeaturesfromotherlayer",type:["add_feature"],name:"editing.tools.pastefeaturesfromotherlayers",icon:"pasteFeaturesFromOtherLayers.png",enable:function(){let p=T.getService("catalog"),_=e.getId(),m=e.getGeometryType(),v={bool:!0,tool:void 0};ct.getLayers({GEOLAYER:!0,BASELAYER:!1});let k=()=>{let S=x=>x&&ie(m,x)&&(m===x||Be.isMultiGeometry(m)||!Be.isMultiGeometry(x));return u=[...ct.getLayers({GEOLAYER:!0,BASELAYER:!1}).filter(x=>_!==x.getId()&&S(x.getGeometryType())),...p.getExternalLayers({type:"vector"}).filter(x=>S(x.geometryType))].map((x,E)=>({id:(x.state||{id:x.id}).id,name:(x.state||{name:x.name}).name,external:x.external||!1,selected:E===0})),v.tool.enabled=u.length>0};return({bool:S,tool:x={}})=>(v.tool=x,v.bool=S,p.onafter("addExternalLayer",k),p.onafter("removeExternalLayer",k),k())}(),op:(()=>{let p=new R({layer:e,help:"editing.steps.help.copy"});return new y({layer:e,type:"copyfeaturesfromotherlayer",runOnce:!0,steps:[new F({layer:e,steps:{chooselayer:{description:"editing.modal.tools.copyfeaturefromotherlayer.title",done:!1},selectgeometry:{description:"editing.workflow.steps.selectPoint",done:!1}},run(_,m){return b(new Promise((v,k)=>{let S=_.layer,x=S.getGeometryType(),E=S.getId(),A=S.getEditingFields().filter(B=>!B.pk),C=m.session,Y=S.getEditingLayer().getSource(),U=new(Vue.extend((xs(),xe(Ss)).default))({layers:u}),O=U.$mount().$el;T.showModalDialog({title:Je("editing.relation.copy_feature_from_other_layer"),className:"modal-left",closeButton:!1,message:O,buttons:{cancel:{label:"Cancel",className:"btn-danger",callback(){k()}},ok:{label:"Ok",className:"btn-success",callback:async()=>{this.setUserMessageStepDone("chooselayer");try{let B=await b(async()=>{let N=u.find(j=>j.selected),H=await new Promise(async j=>{this.addInteraction(N.external?new ae({layer:T.getService("map").getLayerById(N.id)}):new g3wsdk.ol.interactions.PickCoordinatesInteraction,{picked:async K=>{try{j(st(N.external?K.features:((await $a.getData("query:coordinates",{inputs:{coordinates:K.coordinate,query_point_tolerance:Va.getCurrentProject().getQueryPointTolerance(),layerIds:[N.id],multilayers:!1},outputs:null})).data[0]||{features:[]}).features,x))}catch(he){console.warn(he)}}})}),q;try{q=H.length>1?await w(le({features:H,inputs:_})):H[0]}catch(j){console.warn(j)}if(q){let j=new Ha({feature:q,properties:A.map(K=>K.name)});return j.setTemporaryId(),j}return T.showUserMessage({type:"warning",message:"plugins.editing.messages.no_feature_selected",closable:!1,autoclose:!0}),Promise.reject()});A.forEach(({name:N})=>{B.get(N)===void 0&&B.set(N,null)}),S.getEditingNotEditableFields().find(N=>{S.isPkField(N)&&B.set(N,null)}),Ga({feature:B}),B.setTemporaryId(),Y.addFeature(B),C.pushAdd(E,B,!1),_.features.push(B),this.fireEvent("addfeature",B),v(_)}catch(B){console.warn(B),k(B)}}}}}).on("hide.bs.modal",()=>U.$destroy())}))}}),p],registerEscKeyEvent:!0})})()}})(),i&&f.includes("add_feature")&&{id:"copyfeatures",type:["add_feature"],name:"editing.tools.copy",icon:`copy${o}.png`,op:new y({layer:e,type:"copyfeatures",runOnce:!0,steps:[new ge({layer:e,help:"editing.steps.help.copy",type:se.ismobile?"single":"multiple",steps:{select:{description:`editing.workflow.steps.${se.ismobile?"selectPoint":"selectPointSHIFT"}`,done:!1}}},!0),e.getGeometryType().includes("Point")?void 0:new F({layer:e,help:"editing.steps.help.select",steps:{from:{description:"editing.workflow.steps.selectStartVertex",done:!1}},run(u){return b(async()=>{let p=new Promise((_,m)=>{if(this.resolve=_,u.features.length===0)return m("no feature");this.addInteraction(new ol.interaction.Draw({type:"Point",condition:v=>u.features.some(k=>es({feature:k,coordinates:v.coordinate}))}),{drawend:v=>{u.coordinates=v.feature.getGeometry().getCoordinates(),this.setUserMessageStepDone("from"),_(u)}}),this.addInteraction(new ol.interaction.Snap({edge:!1,features:new ol.Collection(u.features)}))});return V({promise:b(async()=>{try{return await p}catch(_){return console.warn(_),Promise.reject(_)}}),inputs:u,style:this.selectStyle}),p})},stop(){this.resolve(!0),this.resolve=null}}),new F({layer:e,help:"editing.steps.help.select_vertex_to_paste",steps:{to:{description:"editing.workflow.steps.selectToPaste",done:!1}},run(u,p){return b(async()=>{let{layer:_,features:m,coordinates:v}=u,k=_.getEditingLayer().getSource(),S=_.getId(),x=p.session,E=new Promise((A,C)=>{this.addInteraction(new ol.interaction.Draw({type:"Point",features:new ol.Collection}),{drawend:G=>{let[Y,U]=G.feature.getGeometry().getCoordinates(),O=v?kt({x:Y,y:U,coordinates:v}):null,B=m.length,N=[];for(let H=0;HH.forEach(({status:q,value:j})=>{let K=tt({layer:_,feature:j}),he=x.pushAdd(S,j);Object.entries(K).length&&Object.entries(K).forEach(([je,Zs])=>he.set(je,Zs)),k.addFeature(he),u.features.push(he)})).finally(()=>{this.setUserMessageStepDone("to"),A(u)})}}),this.addInteraction(new ol.interaction.Snap({source:k,edge:!1}))});return V({promise:b(async()=>{try{return await E}catch(A){return console.warn(A),Promise.reject(A)}}),inputs:u,style:this.selectStyle}),E})}})].filter(Boolean),registerEscKeyEvent:!0})},i&&f.includes("add_feature")&&f.includes("change_feature")&&{id:"addPart",type:["add_feature","change_feature"],name:"editing.tools.addpart",icon:"addPart.png",visible:c,op:new y({layer:e,type:"addparttomultigeometries",helpMessage:"editing.tools.addpart",runOnce:!0,steps:[new re({steps:{select:{description:"editing.workflow.steps.select",done:!1}}}),new F({run:Ee,help:"editing.steps.help.select_element"}),new Q({layer:e,help:"editing.steps.help.select_element",add:!1,steps:{addfeature:{description:"editing.workflow.steps.draw_part",done:!1}},tools:["snap","measure"]}),new F({layer:e,help:"editing.steps.help.select_element",run:rt})],registerEscKeyEvent:!0})},i&&f.includes("change_feature")&&{id:"deletePart",type:["change_feature"],name:"editing.tools.deletepart",icon:"deletePart.png",visible:c,op:new y({layer:e,type:"deletepartfrommultigeometries",steps:[new re,new F({run:Ee}),new F({layer:e,run(u,p){return b(new Promise((_,m)=>{let v=u.layer,k=u.layer.getEditingLayer(),S=v.getId(),x=p.session,{features:E,coordinate:A}=u,C=E[0],G=C.clone(),Y=C.getGeometry(),U=[];switch(Y.getType()){case dt.MULTIPOLYGON:U=Y.getPolygons();break;case dt.MULTILINE:U=Y.getLineStrings();break;case dt.MULTILINESTRING:U=Y.getLineStrings();break;case dt.MULTIPOINT:U=Y.getPoints();break;default:console.warn("invalid geometry type",Y.getType());break}let O=new ol.source.Vector({features:U.map(q=>new ol.Feature(q))}),B=this.getMap(),N=B.getPixelFromCoordinate(A),H=new ol.layer.Vector({source:O,style:k.getStyle()});B.addLayer(H),B.once("postrender",()=>{let q=!1;B.forEachFeatureAtPixel(N,j=>{if(!q){if(O.removeFeature(j),O.getFeatures().length){let K=O.getFeatures().map(je=>je.getGeometry()),he=K[0]&&K[0].getType();C.setGeometry(he&&new ol.geom[`Multi${he}`](K.map(je=>je.getCoordinates()))),Z({inputs:u,context:p,feature:C}).finally(()=>{x.pushUpdate(S,C,G),_(u)})}else k.getSource().removeFeature(C),x.pushDelete(S,C),_(u);q=!0}},{layerFilter(j){return j===H},hitTolerance:1}),B.removeLayer(H),H=null})}))}})],helpMessage:"editing.tools.deletepart"})},(r||l)&&f.includes("change_feature")&&{id:"splitfeature",type:["change_feature"],name:"editing.tools.split",icon:"splitFeatures.png",op:new y({layer:e,type:"splitfeature",runOnce:!0,steps:[new ge({layer:e,help:"editing.steps.help.split",type:se.ismobile?"single":"multiple",steps:{select:{description:`editing.workflow.steps.${se.ismobile?"selectPoint":"selectPointSHIFT"}`,done:!1}}},!0),new F({layer:e,help:"",steps:{draw_line:{description:"editing.workflow.steps.draw_split_line",done:!1}},run(u,p){return b(async()=>{let _=u.layer.getEditingLayer().getSource(),m=new Promise((v,k)=>{this.addInteraction(new ol.interaction.Draw({type:"LineString",features:new ol.Collection,freehandCondition:ol.events.condition.never}),{drawend:async S=>{let x=!1,E=is(u.features,S.feature),A=E.length;for(let C=0;C1&&(x=!0,await ts({context:p,inputs:u,feature:u.features.find(G=>G.getUid()===E[C].uid),splittedGeometries:E[C].geometries,session:p.session}));(x?v:k)(u),await new Promise(C=>setTimeout(C,600)),T.showUserMessage({type:x?"success":"warning",message:x?"plugins.editing.messages.splitted":"plugins.editing.messages.nosplittedfeature",autoclose:!0})}}),this.addInteraction(new ol.interaction.Snap({source:_,edge:!0}))});return V({promise:b(async()=>{try{return await m}catch(v){return console.warn(v),Promise.reject(v)}}),inputs:u,style:this.selectStyle}),m})}})],registerEscKeyEvent:!0})},(r||l)&&f.includes("change_feature")&&{id:"mergefeatures",type:["change_feature"],name:"editing.tools.merge",icon:"mergeFeatures.png",op:new y({layer:e,type:"mergefeatures",runOnce:!0,steps:[new ge({layer:e,type:"bbox",help:"editing.steps.help.merge",steps:{select:{description:`editing.workflow.steps.${se.ismobile?"selectDrawBox":"selectSHIFT"}`,done:!1}}},!0),new F({layer:e,help:"editing.steps.help.merge",steps:{choose:{description:"editing.workflow.steps.merge",done:!1}},run(u,p){return b(new Promise((_,m)=>{let{layer:v,features:k}=u,x=v.getEditingLayer().getSource(),E=v.getId(),A=p.session;k.length<2?(T.showUserMessage({type:"warning",message:"plugins.editing.messages.select_min_2_features",autoclose:!0}),m()):le({features:k,inputs:u}).then(async C=>{let G=k.findIndex(O=>C===O),Y=C.clone(),U=za({features:k,index:G});if(U){try{await Z({inputs:u,context:p,feature:U})}catch(O){console.warn(O)}A.pushUpdate(E,U,Y),k.filter(O=>O!==C).forEach(O=>{A.pushDelete(E,O),x.removeFeature(O)}),u.features=[C],_(u)}else T.showUserMessage({type:"warning",message:"plugins.editing.messages.no_feature_selected",autoclose:!0}),m()}).catch(C=>{console.warn(C),m()})}))}})],registerEscKeyEvent:!0})},g&&f.includes("add_feature")&&{id:"addfeature",type:["add_feature"],name:"editing.tools.add_feature",icon:"addTableRow.png",op:new y({layer:e,type:"addtablefeature",steps:[new F({help:"editing.steps.help.new",run:Ie}),new R]})},g&&f.includes("delete_feature")&&f.includes("change_attr_feature")&&{id:"edittable",type:["delete_feature","change_attr_feature"],name:"editing.tools.update_feature",icon:"editAttributes.png",op:new y({layer:e,type:"edittable",backbuttonlabel:"plugins.editing.form.buttons.save_and_back_table",runOnce:!0,steps:[new ke]})}].filter(Boolean).map(u=>Object.assign(new At,u))},this.state._tools.forEach(u=>{Object.assign(u,{disabledtoolsoftools:[],enabled:!!u.enabled,active:!1,message:null,messages:u.op.getMessages(),visible:u.visible instanceof Function?u.visible(u):u.visible!==void 0?u.visible:!0,state:new Proxy({},{get:(p,_)=>u[_],set:(p,_,m)=>(u[_]=m,!0)}),start:this._startTool.bind(this,u),stop:this._stopTool.bind(this,u),getId:()=>u.id,getOperator:()=>u.op,setOperator:p=>u.op=p})}),Object.assign(this.state,{tools:this.state._tools,originalState:{title:this.state.title,toolsoftool:[...this.state.toolsoftool]}}),this.originalState=this.state.originalState,this._getFeaturesEvent={event:null,fnc:null},this.messages={constraint:{scale:`${Je("editing.messages.constraints.enable_editing")}${this.state._constraints.scale}`.toUpperCase()}},this.startResolve=null,this._olStartKeysEvent=[],this.unwatches=[]}_stopSessionChildren(e){let s=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing"),i=s.getLayerById(e);_e({layerId:e,relations:i.getRelations()?i.getRelations().getArray():[]}).filter(a=>a.getFather()===e).forEach(a=>{let n=te({layerId:e,relation:a});s.getToolBoxById(n).inEditing()||s.state.sessions[n].stop()})}getState(){return this.state}setShow(e=!0){this.state.show=e}getLayer(){return this.state.layer}isFather(){return this.state.editing.father}getDependencies(){return this.state.editing.dependencies}hasDependencies(){return this.state.editing.dependencies.length>0}setFeaturesOptions({filter:e}={}){e?(e.nofeatures&&(e.nofeatures_field=e.nofeatures_field||this.state.layer.getEditingFields()[0].name),this.state._getFeaturesOption={filter:e,editing:!0,registerEvents:!1},e.constraint&&(this.constraintFeatureFilter=e)):this.state._getFeaturesOption=Ze(ne.LayerTypes.TABLE===this.state._layerType?"all":"bbox",{layerId:this.getId()})}setEditingConstraints(e={}){Object.keys(e).forEach(s=>this.constraints[s]=e[s])}_handleScaleConstraint(e=!1){let s=T.getService("map").getMap();this.state.editing.canEdit=Wa(s.getView().getResolution())<=this.state._constraints.scale;let i=this._start||this.startResolve,a=!e&&this.state.selected&&!this.state.editing.canEdit,n=T.getService("map").getCurrentToggledMapControl();if(n&&n.cursorClass&&(e||i)&&n.setMouseCursor(!a),s.getViewport().classList.toggle("ol-zoom-in",a),e||!this.state.selected||!i){T.setModal(!1);return}this.state.editing.canEdit&&this.startResolve&&this.startResolve(),setTimeout(()=>T.setModal(!this.state.editing.canEdit,this.messages.constraint.scale))}start(e={}){return b(new Promise(async(s,i)=>{let a=this.getId(),n=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.constraints.toolboxes[a],{toolboxheader:r=!0,startstopediting:l=!0,changingtools:g=!1,tools:c,filter:o}=e;this.state.changingtools=g,c&&this.setEnablesDisablesTools(c),this.state.toolboxheader=r,this.state.startstopediting=l,o=n&&n.filter||this.constraints.filter||o;let h=this.state.layer.getFeaturesStore().onceafter("featuresLockedByOtherUser",()=>{T.showUserMessage({type:"warning",subtitle:this.state.layer.getName().toUpperCase(),message:"plugins.editing.messages.featureslockbyotheruser"})});this.state._unregisterStartSettersEventsKey.push(()=>this.state.layer.getFeaturesStore().un("featuresLockedByOtherUser",h)),this.state._constraints.scale&&await new Promise(_=>{this.startResolve=_,this._handleScaleConstraint();let m=T.getService("map");this._olStartKeysEvent.push(m.getMap().on("click",v=>{this.state.selected&&!this.state.editing.canEdit&&m.goToRes(v.coordinate,Xa(this.state._constraints.scale,T.getService("map").getMapUnits()))})),this.state.editing.canEdit&&_()}),this.startResolve=null,this.setFeaturesOptions({filter:o});let f=async _=>{this.emit("start-editing"),await Fe(this.getId()),await g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").runEventHandler({type:"start-editing",id:a});try{let m=await w(_);this.stopLoading(),this.setEditing(!0),await g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").runEventHandler({type:"get-features-editing",id:a,options:{features:m}}),s({features:m})}catch(m){console.warn(m),T.notify.error(m.message),await g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").runEventHandler({type:"error-editing",id:a,error:m}),this.stop(),this.stopLoading(),i(m)}},u=!!this.__isStarted(),p=se.ismobile&&T.getService("map").isMapHidden()&&ne.LayerTypes.VECTOR===this.state._layerType;!u&&p&&(this.setEditing(!0),T.getService("map").onceafter("setHidden",()=>{setTimeout(async()=>{this._start=!0,this.startLoading(),this.setFeaturesOptions({filter:o});try{await f(w(this._session.start(this.state._getFeaturesOption)))}catch(_){console.warn(_),this.setEditing(!1)}},300)})),!u&&!p&&(this._start=!0,this.startLoading(),await f(w(this._session.start(this.state._getFeaturesOption)))),u&&!this._start&&(this.startLoading(),await f(w(this._session.getFeatures(this.state._getFeaturesOption))),this._start=!0),u&&this.setEditing(!0)}))}startLoading(){this.state.loading=!0}stopLoading(){this.state.loading=!1}stop(){return b(async()=>{if(this.disableCanEditEvent&&this.disableCanEditEvent(),this.state._unregisterStartSettersEventsKey.forEach(n=>n()),this.state._unregisterStartSettersEventsKey=[],this._olStartKeysEvent.forEach(n=>ol.Observable.unByKey(n)),this._olStartKeysEvent.splice(0),this.unwatches.forEach(n=>n()),this.unwatches.splice(0),this.startResolve=null,this.state._constraints.scale&&this._handleScaleConstraint(!0),!!!this.__isStarted())return!0;if(!se.online)return;let s=g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing"),i=this.state.id;if(s.getLayerById(i).getFathers().filter(n=>{let r=s.getToolBoxById(n);if(r&&r.inEditing()&&r.isDirty())return Object.keys(r.getSession().getCommitItems()||{}).find(l=>i===l)}).length>0){this.stopActiveTool(),this.enableTools(!1),this.clearToolboxMessages(),ne.LayerTypes.VECTOR===this.state._layerType&&T.getService("map").getMap().un(this._getFeaturesEvent.event,this._getFeaturesEvent.fnc),this._stopSessionChildren(this.state.id),g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.uniqueFieldsValues[this.getId()]={};return}try{return await w(this._session.stop()),this._start=!1,this.state.editing.on=!1,this.state.enabled=!1,this.stopLoading(),this.state._getFeaturesOption={},this.stopActiveTool(),this.enableTools(!1),this.clearToolboxMessages(),this.emit("stop-editing"),g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").state.uniqueFieldsValues[this.getId()]={},!0}catch(n){return console.warn(n),Promise.reject(n)}})}save({ids:e=null,items:s,relations:i=!0,__esPromise:a=!1}={}){return b(new Promise(async(n,r)=>{let l;if(e)return l=this.__commit(e),this.__clearHistory(e),n(l);l=s||this.__getCommitItems(this.__commit()),i||(l.relations={}),this.state.layer.getEditor().commit(l).then(g=>{if(!(g&&g.result)){r(g);return}let{relations:c={}}=g.response;for(let o in c)t.get(o).getSession().getEditor().applyCommitResponse({response:c[o],result:!0});this.__clearHistory(),this._session.saveChangesOnServer(l),a?n({commit:l,response:g}):n(l,g)}).fail(g=>{console.warn(g),r(g)})}))}getEditingConstraints(){return this.state._constraints}canEdit(){return this.state.editing.canEdit}setMessage(e){this.state.message=e}getMessage(){return this.state.message}clearMessage(){this.setMessage(null)}clearToolboxMessages(){this.state.toolmessages.help=null,this.clearMessage()}getId(){return this.state.id}getTitle(){return this.state.title}setTitle(e){this.state.customTitle=!0,this.state.title=e}getColor(){return this.state.color}setEditing(e=!0){this.setEnable(e),this.state.editing.on=e,this.enableTools(e)}inEditing(){return this.state.editing.on}isEnabled(){return this.state.enabled}setEnable(e=!1){return this.state.enabled=e,this.state.enabled}isLoading(){return this.state.loading}isDirty(){return this.state.editing.history.commit}isSelected(){return this.state.selected}setSelected(e=!1){if(this.state.selected=e,this.state._constraints.scale){let s=T.getService("map").getMap();this._handleScaleConstraint(),this._start&&this.state.canEdit&&s.dispatchEvent({type:this._getFeaturesEvent.event,target:s}),this.state.selected&&!this.keyChangeResolution&&(this.keyChangeResolution=s.getView().on("change:resolution",()=>this._handleScaleConstraint())),!this.state.selected&&this.keyChangeResolution&&(ol.Observable.unByKey(this.keyChangeResolution),this.keyChangeResolution=null)}}getTools(){return this.state._tools}getToolById(e){return this.state._tools.find(s=>e===s.getId())}setEnableTool(e){this.state._tools.find(s=>e===s.getId()).state.enabled=!0}setAddEnableTools({tools:e={},options:s={editing_constraints:!0}}={}){let{editing_constraints:i=!1}=s;this.setEnablesDisablesTools({enabled:this.state._tools.filter(a=>i?a.type.includes("add_feature"):["addfeature","editattributes","movefeature","movevertex"].includes(a.getId())).map(a=>({id:a.getId(),options:e[a.getId()]}))}),this.enableTools(!0)}setUpdateEnableTools({tools:e={},excludetools:s=[],options:i={editing_constraints:!0}}){let{editing_constraints:a=!1}=i,n=["editattributes","movefeature","movevertex"],r=this.state._tools.filter(l=>s.includes(l.getId())?!1:a?l.type.find(g=>g==="change_feature"||g==="change_attr_feature"):n.includes(l.getId())).map(l=>{let g=l.getId();return{id:g,options:e[g]}});this.setEnablesDisablesTools({enabled:r}),this.enableTools(!0)}setEnablesDisablesTools(e){if(e){this.state.changingtools=!0;let{enabled:s=[],disabled:i=[]}=e,a=s.length?[]:this.state._tools.map(n=>n.getId());s.forEach(({id:n,options:r={}})=>{let l=this.getToolById(n);if(l){let{active:g=!1}=r;l.messages=r.messages||l.messages,l.visible=r.visible!==void 0?r.visible:!0,l.enabled=r.enabled!==void 0?r.enabled:!1,l.disabledtoolsoftools=r.disabledtoolsoftools!==void 0?r.disabledtoolsoftools:[],l.visible&&a.push(n),g&&this.setActiveTool(l),this.state._enabledtools===void 0&&(this.state._enabledtools=[]),this.state._enabledtools.push(l)}}),i.forEach(({id:n,options:r})=>{this.getToolById(n)&&(this.state._disabledtools===void 0&&(this.state._disabledtools=[]),this.state._disabledtools.push(n),a.push(n))}),this.state._tools.forEach(n=>!a.includes(n.getId())&&(n.visible=!1)),this.state.changingtools=!1}}enableTools(e=!1){let s=this.state._enabledtools||this.state._tools,i=this.state._disabledtools||[];s.forEach(a=>{let n=a.enable===void 0?e:a.enable;a.enabled=e&&i.length>0?!i.includes(a.getId()):Ka(n)==="Boolean"?n:n({bool:e,tool:a}),e||(a.active=e)})}setActiveTool(e){return b(async()=>{try{await w(this.stopActiveTool(e)),this.state.toolsoftool.splice(0),this.state.activetool=e;let s=e.getOperator();s&&(s.once("settoolsoftool",a=>this.state.toolsoftool.push(...(a||[]).filter(n=>!e.disabledtoolsoftools.includes(n.type)))),s.once("start",a=>this.state.toolsoftool.forEach(n=>(a||[]).includes(n.type)&&(n.options.active=!0))),s.once("stop",a=>this._deactivetools(e,a)),s.once("reject",a=>this._deactivetools(e,a))),e.start();let i=this.state.activetool.getOperator().getHelpMessage()||this.state.activetool.getOperator().getRunningStep()?this.state.activetool.messages:null;this.state.toolmessages.help=i&&i.help||null}catch(s){console.warn(s)}})}_deactivetools(e,s=[]){e===this.state.activetool&&(this.state.activetool=null,this.state.toolsoftool.splice(0)),this.state.toolsoftool.forEach(i=>s.includes(i.type)&&(i.options.active=!1))}getActiveTool(){return this.state.activetool}stopActiveTool(e){return b(async()=>{let s=this.getActiveTool();if(e&&(!s||e===s)){e.removeAllListeners();return}try{s&&(s.removeAllListeners(),await w(s.stop(!0))),this.state.toolsoftool.splice(0),this.state.toolmessages.help=null,this.state.activetool=null}catch(i){console.warn(i)}})}getSession(){return this._session}getEditor(){return this.state.layer.getEditor()}resetDefault(){this.state.title=this.state.originalState.title,this.state.toolboxheader=!0,this.state.startstopediting=!0,this.constraints={filter:null,show:null,tools:[]},this.state._enabledtools&&(this.state._enabledtools=void 0,this.enableTools(),this.state._tools.forEach(e=>{e.visible=!0,e.enabled=!1,e.messages=e.op.getMessages(),e.disabledtoolsoftools=[]})),this.state._disabledtools=null,this.state.show=this.state.layer.config.editing.visible,this.state.selected=!1}__add(e,s){return b(new Promise(i=>{this.state.editing.session.current===null?this._states=[{id:e,items:s}]:(this._states.length>0&&this.state.editing.session.currenta.id<=this.state.editing.session.current)),this._states.push({id:e,items:s})),this.state.editing.session.current=e,this.__canUndo(),this.__canCommit(),this.__canRedo(),i(e)}))}__undo(){let e;return this.state.editing.session.current===this._states[0].id?(this.state.editing.session.current=null,e=this._states[0].items):this._states.find((s,i)=>{if(s.id===this.state.editing.session.current)return e=this._states[i].items,this.state.editing.session.current=this._states[i-1].id,!0}),e=Ft(this._history.id,e,0),this.__canUndo(),this.__canCommit(),this.__canRedo(),e}__redo(){let e;return this.state.editing.session.current?this._states.find((s,i)=>{if(this.state.editing.session.current===s.id)return this.state.editing.session.current=this._states[i+1].id,e=this._states[i+1].items,!0}):(e=this._states[0].items,this.state.editing.session.current=this._states[0].id),e=Ft(this._history.id,e,1),this.__canUndo(),this.__canCommit(),this.__canRedo(),e}__getState(e){return this._states.find(s=>e===s.id)}__canCommit(){let e=this.__commit(),s=!1;for(let i in e){let a=e[i];s=s||a.length>0}return this._constrains.commit=s,this._constrains.commit}__canUndo(){let e=null;this.state.editing.session.current&&this._states.length&&this._states.forEach((i,a)=>{if(this.state.editing.session.current===i.id)return e=a,!1});let s=this._states.length-1-e;return this._constrains.undo=this.state.editing.session.current!==null&&s<10,this._constrains.undo}__canRedo(){return this._constrains.redo=this._states.at(-1)&&this._states.at(-1).id!=this.state.editing.session.current||this.state.editing.session.current===null&&this._states.length>0,this._constrains.redo}__commit(){let e={};return this._states.filter(i=>i.id<=this.state.editing.session.current).forEach(i=>{i.items.forEach(a=>{let n=!0;if(Array.isArray(a)&&(a=a[1]),e[a.layerId]&&e[a.layerId].forEach((r,l)=>{if(r.getUid()===a.feature.getUid()){if(a.feature.isNew()&&!r.isDeleted()&&a.feature.isUpdated()){let g=a.feature.clone();g.add(),e[a.layerId][l]=g}else a.feature.isNew()&&a.feature.isDeleted()?e[a.layerId].splice(l,1):(a.feature.isUpdated()||a.feature.isDeleted())&&(e[a.layerId][l]=a.feature);return n=!1,!1}}),n){let r=a.feature,l=a.layerId;!r.isNew()&&r.isAdded()||(e[l]||(e[l]=[]),e[l].push(r))}})}),e}__getLastHistoryState(){return this._states.at(-1)||null}__isStarted(){return this.state.editing.session.started}__getHistory(){return this._history}__getEditor(){return this.state.layer.getEditor()}__push(e,s){this.state.editing.session.changes.push(s?[s,e]:e)}__pushDelete(e,s){return this.__push({layerId:e,feature:s.delete()}),s}__save(e={}){return b(async()=>{if(this.state.editing.session.changes.length>0){let s=[];return await Promise.allSettled(this.state.editing.session.changes.map(i=>{let a=e.id||Date.now();return s.push(a),w(this.__add(a,[i]))})),this.state.editing.session.changes=[],s}return null})}__pushAdd(e,s,i=!0){let a=e===this.state.layer.getId()?this.state.layer.getEditor():t.get(e).getSession().getEditor();i&&(a.getLayer().getEditingNotEditableFields()||[]).forEach(r=>s.unset([r]));let n=s.clone();return this.__push({layerId:e,feature:n.add()}),n}__pushUpdate(e,s,i){let a=s.isNew(),n=a&&this.state.editing.session.changes.findIndex(r=>e===r.layerId&&r.feature.getId()===s.getId());if(a&&n>=0){let r=s.clone();r.add(),this.state.editing.session.changes[n].feature=r;return}this.__push({layerId:e,feature:s.update()},{layerId:e,feature:i.update()})}__rollback(e){return e?this.state.layer.getEditor().rollback(e):b(async()=>{let s=this.state.layer.getId();e={own:[],dependencies:{}},this.state.editing.session.changes.forEach(i=>{let a=Array.isArray(i)?i[0]:i;s===a.layerId?e.own.push(a):(e.dependencies[a.layerId]=e.dependencies[a.layerId]||[],e.dependencies[a.layerId].unshift(a))});try{await w(this.state.layer.getEditor().rollback(e.own));for(let i in e.dependencies)t.get(i).getSession().rollback(e.dependencies[i]);return e.dependencies}catch(i){console.warn(i)}finally{this.state.editing.session.changes=[]}})}__rollbackDependecies(e=[]){e.forEach(s=>{let i=[];this.state.editing.session.changes=this.state.editing.session.changes.filter(a=>{if(s===a.layerId)return i.push(a),!1}),i.length&&t.get(s).getSession().rollback(i)})}__undoSession(e){return e=e||this.__undo(),this.state.layer.getEditor().setChanges(e.own,!0),this.__canCommit(),e.dependencies}__redoSession(e){return e=e||this.__redo(),this.state.layer.getEditor().setChanges(e.own,!0),this.__canCommit(),e.dependencies}__getCommitItems(){let e=this.__commit(),s=this.state.layer.getId(),i,a,n={add:[],update:[],delete:[],relations:{}};for(let l in e){let g=!1,c=e[l];if(l!==s){g=!0;let u=t.get(l).getSession(),p=u?u.getEditor().getLockIds():[];n.relations[l]={lockids:p,add:[],update:[],delete:[],relations:{}},a=n.relations[l]}else a=n;let h=ne.LayerTypes.VECTOR===t.get(l).getLayer().getType()&&ct.getLayerById(l).getGeometryType(),f=h&&g3wsdk.core.geoutils.Geometry.is3DGeometry(h);c.forEach(u=>{i=u.getState();let p=new ol.format.GeoJSON;if(i==="delete"){u.isNew()||a.delete.push(u.getId());return}let _=p.writeFeatureObject(u);f&&(_.geometry.type=h);let m=u.getProperties();for(let v in _.properties)_.properties[v]&&typeof _.properties[v]=="object"&&_.properties[v].constructor===Object&&(_.properties[v]=_.properties[v].value),_.properties[v]===void 0&&m[v]&&(_.properties[v]=m[v]);a[u.isNew()?"add":u.getState()].push(_)}),g&&a.add.length===0&&a.update.length===0&&a.delete.length===0&&delete n.relations[l]}return Object.keys(n.relations||{}).filter(l=>this.state.layer.getEditor().getLayer().getRelations().getArray().find(g=>l===g.getChild())===void 0).map(l=>(n.relations[t.get(l).getSession().getEditor().getLayer().getRelations().getArray().find(g=>l===g.getChild()&&n.relations[g.getFather()]).getFather()].relations[l]=n.relations[l],l)).forEach(l=>delete n.relations[l]),n}__clearSession(){this._allfeatures=!1,this.state.editing.session.started=!1,this.state.editing.session.getfeatures=!1,this.__clearHistory()}__clearHistory(e){e?this._states.forEach((s,i)=>{e.includes(s.id)&&(this.state.editing.session.current&&s.id===this.state.editing.session.current&&this.__undo(),this._states.splice(i,1))}):(this._states=[],this.state.editing.session.current=null,this._constrains.commit=!1,this._constrains.redo=!1,this._constrains.undo=!1)}async __startSession(e={}){try{let s=await w(this.state.layer.getEditor().start(e));return this.state.editing.session.started=!0,s}catch(s){return console.warn(s),Promise.reject(s)}finally{if(!e.registerEvents)return;if(this.state._getFeaturesOption=e,ne.LayerTypes.VECTOR===this.state._layerType&&this.state._getFeaturesOption.filter.bbox){let s=()=>{se.online&&this.state.editing.canEdit&&this.state.selected&&T.getContentLength()===0&&(this.state._getFeaturesOption.filter.bbox=T.getService("map").getMapBBOX(),this.state.loading=!0,this._session.getFeatures(this.state._getFeaturesOption).then(i=>i.then(()=>this.state.loading=!1)))};this._getFeaturesEvent.event="moveend",this._getFeaturesEvent.fnc=qa(s,300),this._olStartKeysEvent.push(T.getService("map").getMap().on("moveend",this._getFeaturesEvent.fnc)),T.getContentLength()&&T.once("closecontent",()=>{let i=T.getService("map").getMap();setTimeout(()=>i.dispatchEvent({type:this._getFeaturesEvent.event,target:i}))})}}}async __stopSession(){try{(this.state.editing.session.started||this.state.editing.session.getfeatures)&&(await w(this.state.layer.getEditor().stop()),this.__clearSession())}catch(e){return console.warn(e),Promise.reject(e)}finally{se.online&&this._stopSessionChildren(this.state.id),this.state._getFeaturesOption.registerEvents&&ne.LayerTypes.VECTOR===this.state._layerType&&T.getService("map").getMap().un(this._getFeaturesEvent.event,this._getFeaturesEvent.fnc)}}async __getFeatures(e={}){if(!this._allfeatures){this._allfeatures=!e.filter;let s=await w(this.state.layer.getEditor().getFeatures(e));return this.state.editing.session.getfeatures=!0,s}return[]}async __saveChangesOnServer(e){let s=[Fe(this.getId())],i=[],a=(n={})=>{Object.entries(n).forEach(([r,l])=>{i.push(r),a(l.relations)})};a(e.relations),i.forEach(n=>s.push(Fe(n))),await Promise.allSettled(s)}_startTool(e){e.getOperator()&&(e.active=!0,setTimeout(async()=>await this._startOp(e,{inputs:{layer:this.getLayer(),features:[]},context:{session:this._session}},!!T.getService("map").isMapHidden())))}async _startOp(e,s,i){s.inputs.features=s.features||[],i&&T.hideSidebar();try{await w(e.op.start(s)),await w(this._session.save()),g3wsdk.core.plugin.PluginsRegistry.getPlugin("editing").saveChange()}catch(a){console.warn(a),i&&T.showSidebar(),this._session.rollback()}finally{!e.getOperator().runOnce&&ne.LayerTypes.VECTOR===this.getLayer().getType()?await this._startOp(e,s,i):e.stop()}}_stopTool(e,s=!1){return b(async()=>{if(!e.getOperator()){e.emit("stop",{session:this._session});return}try{await w(e.getOperator().stop(s))}catch(i){console.warn(i),this._session.rollback()}finally{e.active=!1,e.emit("stop",{session:this._session})}})}};J._sessions={};J.get=t=>J._sessions[t];J.clear=()=>Object.keys(sessions).forEach(t=>delete J._sessions[t]);D();var{ApplicationState:Ja,G3WObject:Ya}=g3wsdk.core,{FeaturesStore:Fs}=g3wsdk.core.layer.features,{Layer:Mt}=g3wsdk.core.layer,Bt=class extends Fs{constructor(e={}){super(e),this._features=e.features||new ol.Collection([])}getLength(){return this._features.getLength()}setFeatures(e=[]){this._features.clear(),this.addFeatures(e),this._features.dispatchEvent("change")}readFeatures(){return this._features.getArray()}getFeaturesCollection(){return this._features}getFeatureById(e){return this._features.getArray().find(s=>e==s.getId())}getFeatureByUid(e){return this._features.getArray().find(s=>e===s.getUid())}_addFeature(e){this._features.push(e),this._features.dispatchEvent("change")}_updateFeature(e){let s=this._features.getArray().findIndex(i=>e.getUid()===i.getUid());s>=0&&(this._features.removeAt(s),this._features.insertAt(s,e),this._features.dispatchEvent("change"))}_removeFeature(e){let s=this._features.getArray().findIndex(i=>e.getUid()===i.getUid());s>=0&&(this._features.removeAt(s),this._features.dispatchEvent("change"))}_clearFeatures(){try{for(let e=0;e{let i=!0,{bbox:a}=s.filter||{},n=a&&Mt.LayerTypes.VECTOR===this._layer.getType();if(n&&this._filter.bbox===null)this._filter.bbox=a,i=!0;else if(n){let r=ol.extent.containsExtent(this._filter.bbox,a);r||(this._filter.bbox=ol.extent.extend(this._filter.bbox,a)),i=!r}if(i){let r=await w(this._layer.getFeatures(s));return this._featuresstore.addFeatures((r||[]).map(l=>l.clone())),this._allfeatures=!s.filter,r}})}},this._filter={bbox:null},this._allfeatures=!1,this._layer=e.layer,this._featuresstore=Mt.LayerTypes.TABLE===this._layer.getType()?new Fs:new Bt,this._started=!1}getEditingSource(){return this._featuresstore}getSource(){this._layer.getSource()}setChanges(e=[],s=!0){let i={add:{fnc:"addFeature",opposite:"delete"},delete:{fnc:"removeFeature",opposite:"add"},update:{fnc:"updateFeature",opposite:"update"}};e.forEach(a=>{s&&a.feature[i[a.feature.getState()].opposite](),this._featuresstore[i[a.feature.getState()].fnc](a.feature)})}getLayer(){return this._layer}setLayer(e){return this._layer=e}rollback(e=[]){return b(()=>this.setChanges(e,!0))}applyCommitResponse(e={},s=[]){if(!(e&&e.result))return;e.response.new.forEach(({clientid:a,id:n,properties:r}={})=>{let l=this.getEditingSource().getFeatureById(a);l.setId(n),l.setProperties(r),s.forEach(g=>{Object.entries(g).forEach(([c,o={}])=>{let h=J.get(c).getSession().getEditor().getEditingSource();(o.ids||[]).forEach(f=>{let u=h.getFeatureById(f);u&&o.fatherField.forEach((p,_)=>{u.set(o.childField[_],l.get(p))})})})})}),(e.response.update||[]).forEach(({id:a,properties:n}={})=>{let r=this.getEditingSource().getFeatureById(a);r.setProperties(n),s.forEach(l=>{Object.entries(l).forEach(([g,c={}])=>{let o=J.get(g).getSession().getEditor().getEditingSource();(c.ids||[]).forEach(h=>{let f=o.getFeatureById(h);f&&c.fatherField.forEach((u,p)=>{f.set(c.childField[p],r.get(u))})})})})});let i=this.readEditingFeatures();i.forEach(a=>a.clearState()),this._layer.setFeatures([...i]),this.addLockIds(e.response.new_lockids)}addLockIds(e){this._layer.getSource().addLockIds(e)}getLockIds(){return this._layer.getSource().getLockIds()}commit(e){return b(async()=>{let s=[];e.add.length&&(s=Object.keys(e.relations).map(a=>{let n=this._layer.getRelations().getRelationByFatherChildren(this._layer.getId(),a);return{[a]:{ids:[...e.relations[a].add.map(r=>r.id),...e.relations[a].update.map(r=>r.id)],fatherField:n.getFatherField(),childField:n.getChildField()}}}));let i=await w(this._layer.commit(e));return this.applyCommitResponse(i,s),i})}start(e={}){return b(async()=>{let s=await w(this.getFeatures(e));return this._started=!0,s})}readFeatures(){return this._layer.readFeatures()}readEditingFeatures(){return this._featuresstore.readFeatures()}stop(){return b(async()=>{let{result:e}=await w(this._layer.unlock());return this.clear(),e})}isStarted(){return this._started}clear(){this._started=!1,this._filter.bbox=null,this._allfeatures=!1,this._featuresstore.clear(),this._layer.getFeaturesStore().clear(),Mt.LayerTypes.VECTOR===this._layer.getType()&&this._layer.resetEditingSource(this._featuresstore.getFeaturesCollection())}};pe();function ut(t){return t instanceof Promise?t:!t||!t.then?(console.trace(t),Promise.reject("not a promise")):new Promise((e,s)=>{t.then(e).fail(s)})}var gt=class{constructor(){this.tasks=[]}addTask(e){this.tasks.push(e)}run(e=!1){for(;this.tasks.length;)(e?this.tasks.pop():this.tasks.shift())()}flush(){return this.tasks.splice(0)}getLength(){return this.tasks.length}clear(){this.run(),this.tasks=[]}},ft=class extends g3wsdk.core.G3WObject{constructor(){super(),console.warn("[G3W-CLIENT] g3wsdk.core.workflow.Flow is deprecated"),this.steps=[],this.counter=0,this.context=null,this.queques={end:new gt,micro:new gt},this.inputs,this.d,this._workflow}start(e){return this.d=$.Deferred(),this.counter>0&&console.log("reset workflow before restarting"),this._workflow=e,this.inputs=e.getInputs(),this.context=e.getContext(),this.steps=e.getSteps(),this.steps&&this.steps.length&&this.runStep(this.steps[0],this.inputs,this.context),this.d.promise()}runStep(e,s){this._workflow.setMessages({help:e.state.help});let i=this.queques.micro.getLength();e.run(s,this.context,this.queques).then(a=>{i&&this.queques.micro.run(),this.onDone(a)}).fail(a=>this.onError(a))}onDone(e){if(this.counter++,this.counter===this.steps.length){this.counter=0,this.d.resolve(e);return}this.runStep(this.steps[this.counter],e)}onError(e){this.counter=0,this.clearQueques(),this.d.reject(e)}stop(){let e=$.Deferred();return this.steps[counter].isRunning()&&this.steps[this.counter].stop(),this.clearQueques(),this.counter>0?(this.counter=0,e.reject()):e.resolve(),e.promise()}clearQueques(){this.queques.micro.clear(),this.queques.end.clear()}},ht={Actions:{add:{fnc:"addFeature",opposite:"delete"},delete:{fnc:"removeFeature",opposite:"add"},update:{fnc:"updateFeature",opposite:"update"}},execute(t,e,s){console.warn("[G3W-CLIENT] g3wsdk.core.workflow.ChangesManager is deprecated");let i,a;e.forEach(n=>{a=n.feature,s&&a[ht.Actions[a.getState()].opposite](),i=ht.Actions[a.getState()].fnc,t[i](a)})}},Le=class t extends g3wsdk.core.G3WObject{constructor(e={}){console.warn("[G3W-CLIENT] g3wsdk.core.workflow.Session is deprecated"),super(e),this.setters={start(s={}){return $.Deferred(async i=>{try{let a=await ut(this._editor.start(s));this.state.started=!0,i.resolve(a)}catch(a){console.warn(a),i.reject(a)}}).promise()},stop(){return $.Deferred(async s=>{if(!(this.state.started||this.state.getfeatures))return s.resolve();try{await ut(this._editor.stop()),this.clear(),s.resolve()}catch(a){console.warn(a),s.reject(a)}}).promise()},getFeatures(s={}){return $.Deferred(async i=>{if(this._allfeatures)return i.resolve([]);this._allfeatures=!s.filter;try{let a=await ut(this._editor.getFeatures(s));this.state.getfeatures=!0,i.resolve(a)}catch(a){console.warn(a),i.reject(a)}}).promise()},saveChangesOnServer(s){}},this.state={id:e.id,started:!1,getfeatures:!1,maxSteps:10,current:null,changes:[]},this._states=[],this._constrains={commit:!1,undo:!1,redo:!1},this._editor=e.editor,this._history={id:this.state.id,state:new Proxy({},{get:(s,i)=>this._constrains[i]}),add:this.__add.bind(this),getRelationStates:this.__getRelationStates.bind(this),insertState:this.__insertState.bind(this),removeState:this.deleteState.bind(this),removeStates:this.removeChangesFromHistory.bind(this),insertStates:this.__insertStates.bind(this),undo:this.__undo.bind(this),clear:this.clearHistory.bind(this),redo:this.__redo.bind(this),setItemsFeatureIds:this.__setItemsFeatureIds.bind(this),getState:this.__getState.bind(this),getFirstState:this.__getFirstState.bind(this),getLastState:this.getLastHistoryState.bind(this),getCurrentState:this.__getCurrentState.bind(this),getCurrentStateIndex:this.__getCurrentStateIndex.bind(this),canCommit:this.__canCommit.bind(this),canUndo:this.__canUndo.bind(this),canRedo:this.__canRedo.bind(this),commit:this.__commit.bind(this)},this.register()}_checkSessionItems(e,s,i){let a={own:[],dependencies:{}};return s.forEach(n=>{Array.isArray(n)&&(n=n[i]),e===n.layerId?a.own.push(n):(a.dependencies[n.layerId]=a.dependencies[n.layerId]||{own:[],dependencies:{}},a.dependencies[n.layerId].own.push(n))}),a}getId(){return this.state.id}getLastHistoryState(){return this._states.length?this._states[this._states.length-1]:null}getLastStateId(){return this.getLastHistoryState().id}deleteState(e){let s=this._states.findIndex(i=>i.id===e);console.assert(s>=0,`invalid stateId ${e}`),this.state.current===e&&(this.state.current=this._states.length>1?this._states[s-1].id:null),this._states.splice(s,1)}register(){t.Registry.register(this)}unregister(){t.Registry.unregister(this.getId())}isStarted(){return this.state.started}getEditor(){return this._editor}setEditor(e){this._editor=e}save(e={}){let s=$.Deferred();if(this.state.changes.length){let i=e.id||Date.now();this._history.add(i,this.state.changes).then(()=>{this.state.changes=[],s.resolve(i)})}else s.resolve(null);return s.promise()}updateTemporaryChanges(e){this.state.changes.forEach(s=>s.feature.setProperties(e.getProperties()))}pushAdd(e,s,i=!0){let a=e===this.getId()?this._editor:t.Registry.getSession(e).getEditor();i&&(a.getLayer().getEditingNotEditableFields()||[]).forEach(r=>s.unset([r]));let n=s.clone();return this.push({layerId:e,feature:n.add()}),n}pushDelete(e,s){return this.push({layerId:e,feature:s.delete()}),s}pushUpdate(e,s,i){let a=s.isNew(),n=a&&this.state.changes.findIndex(r=>e===r.layerId&&r.feature.getId()===s.getId());if(a&&n>=0){let r=s.clone();r.add(),this.state.changes[n].feature=r;return}this.push({layerId:e,feature:s.update()},{layerId:e,feature:i.update()})}removeChangesFromHistory(e=[]){(e||[]).forEach(s=>this.deleteState(s))}moveRelationStatesOwnSession(){let e={},{relations:s}=this.getCommitItems();for(let i in s){let a=this._history.getRelationStates(i);t.Registry.getSession(i)._history.insertStates(a),e[i]=a.map(n=>n.id)}return e}push(e,s){this.state.changes.push(s?[s,e]:e)}revert(){let e=$.Deferred();return this._editor.revert().then(()=>{this.clearHistory(),e.resolve()}),e.promise()}rollback(e){if(e)return this._editor.rollback(e);let s=$.Deferred(),i=this.getId();return e={own:[],dependencies:{}},this.state.changes.forEach(a=>{let n=Array.isArray(a)?a[0]:a;n.layerId===i?e.own.push(n):(e.dependencies[n.layerId]||(e.dependencies[n.layerId]=[]),e.dependencies[n.layerId].unshift(n))}),this._editor.rollback(e.own).then(()=>{for(let a in e.dependencies)t.Registry.getSession(a).rollback(e.dependencies[a]);s.resolve(e.dependencies)}),this.state.changes=[],s.promise()}rollbackDependecies(e=[]){e.forEach(s=>{let i=[];this.state.changes=this.state.changes.filter(a=>{if(a.layerId===s)return i.push(a),!1}),i.length&&t.Registry.getSession(s).rollback(i)})}undo(e){return e=e||this._history.undo(),this._editor.setChanges(e.own,!0),this._history.canCommit(),e.dependencies}redo(e){return e=e||this._history.redo(),this._editor.setChanges(e.own,!0),this._history.canCommit(),e.dependencies}getCommitItems(){let e=this._history.commit(),s=this.getId(),i,a,n={add:[],update:[],delete:[],relations:{}};for(let l in e){let g=!1,c=e[l];if(l!==s){g=!0;let o=t.Registry.getSession(l),h=o?o.getEditor().getLockIds():[];n.relations[l]={lockids:h,add:[],update:[],delete:[],relations:{}},a=n.relations[l]}else a=n;c.forEach(o=>{i=o.getState();let h=new ol.format.GeoJSON;switch(i){case"delete":o.isNew()||a.delete.push(o.getId());break;default:let f=h.writeFeatureObject(o),u=o.getProperties();for(let p in f.properties)f.properties[p]&&typeof f.properties[p]=="object"&&f.properties[p].constructor===Object&&(f.properties[p]=f.properties[p].value),f.properties[p]===void 0&&u[p]&&(f.properties[p]=u[p]);a[o.isNew()?"add":o.getState()].push(f);break}}),g&&a.add.length===0&&a.update.length===0&&a.delete.length===0&&delete n.relations[l]}return Object.keys(n.relations||{}).filter(l=>this._editor.getLayer().getRelations().getArray().find(g=>l===g.getChild())===void 0).map(l=>(n.relations[t.Registry.getSession(l).getEditor().getLayer().getRelations().getArray().find(g=>l===g.getChild()&&n.relations[g.getFather()]).getFather()].relations[l]=n.relations[l],l)).forEach(l=>delete n.relations[l]),n}set3DGeometryType({layerId:e=this.getId(),commitItems:s}={}){let{relations:i}=s,a=MapLayersStoresRegistry.getLayerById(e).getEditingLayer();if(a&&g3wsdk.core.layer.Layer.LayerTypes.VECTOR===a.getType()){let n=a.getGeometryType();g3wsdk.core.geoutils.Geometry.is3DGeometry(n)&&["add","update"].forEach(r=>s[r].forEach(l=>l.geometry.type=n))}Object.keys(i).forEach(n=>this.set3DGeometryType({layerId:n,commitItems:i[n]}))}commit({ids:e=null,items:s,relations:i=!0,__esPromise:a=!1}={}){let n=$.Deferred(),r;return e?(r=this._history.commit(e),this.clearHistory(e),n.promise()):(r=s||this.getCommitItems(this._history.commit()),i||(r.relations={}),this._editor.commit(r).then(l=>{if(!(l&&l.result)){n.reject(l);return}let{relations:g={}}=l.response;for(let c in g)t.Registry.getSession(c).getEditor().applyCommitResponse({response:g[c],result:!0});this.clearHistory(),this.saveChangesOnServer(r),a?n.resolve({commit:r,response:l}):n.resolve(r,l)}).fail(l=>n.reject(l)),n.promise())}clear(){this._allfeatures=!1,this.state.started=!1,this.state.getfeatures=!1,this.clearHistory()}getHistory(){return this._history}clearHistory(e){e?this._states.forEach((s,i)=>{e.indexOf(s.id)!==-1&&(this.state.current&&this.state.current===s.id()&&this._history.undo(),this._states.splice(i,1))}):(this._states=[],this.state.current=null,this._constrains.commit=!1,this._constrains.redo=!1,this._constrains.undo=!1)}__add(e,s){let i=$.Deferred();return this.state.current===null?this._states=[{id:e,items:s}]:(this._states.length>0&&this.state.currenta.id<=this.state.current)),this._states.push({id:e,items:s})),this.state.current=e,this._history.canUndo(),this._history.canCommit(),this._history.canRedo(),i.resolve(e),i.promise()}__getRelationStates(e,{clear:s=!1}={}){let i=[];for(let a=0;a(Array.isArray(l)?l[0].layerId:l.layerId)===e);r.length>0&&i.push({id:n.id,items:r})}return i}__insertState(e){let s=e.id,i=this._states.length;for(let a=0;as){i=a;break}else if(n.id===s){i=-1;break}}i>-1&&(this.state.current{if(s.id===this.state.current)return e=this._states[i].items,this.state.current=this._states[i-1].id,!0}),e=this._checkSessionItems(this._history.id,e,0),this._history.canUndo(),this._history.canCommit(),this._history.canRedo(),e}__redo(){let e;return this.state.current?this._states.find((s,i)=>{if(this.state.current===s.id)return this.state.current=this._states[i+1].id,e=this._states[i+1].items,!0}):(e=this._states[0].items,this.state.current=this._states[0].id),e=this._checkSessionItems(this._history.id,e,1),this._history.canUndo(),this._history.canCommit(),this._history.canRedo(),e}__setItemsFeatureIds(e=[]){e.forEach(s=>{this._states.forEach(i=>{i.items.forEach(a=>{let n=a.feature.getId()===s.clientid&&a.feature;n&&n.setId(s.id)})})})}__getState(e){return this._states.find(s=>s.id===e)}__getFirstState(){return this._states.length?this._states[0]:null}__getCurrentState(){let e=null;return this.state.current&&this._states.length&&(e=this._states.find(s=>this.state.current===s.id)),e}__getCurrentStateIndex(){let e=null;return this.state.current&&this._states.length&&this._states.forEach((s,i)=>{if(this.state.current===s.id)return e=i,!1}),e}__canCommit(){let e=this._history.commit(),s=!1;for(let i in e){let a=e[i];s=s||a.length>0}return this._constrains.commit=s,this._constrains.commit}__canUndo(){let e=this._states.length-1-this._history.getCurrentStateIndex();return this._constrains.undo=this.state.current!==null&&this.state.maxSteps>e,this._constrains.undo}__canRedo(){return this._constrains.redo=this.getLastHistoryState()&&this.getLastStateId()!=this.state.current||this.state.current===null&&this._states.length>0,this._constrains.redo}__commit(){let e={};return this._states.filter(i=>i.id<=this.state.current).forEach(i=>{i.items.forEach(a=>{let n=!0;if(Array.isArray(a)&&(a=a[1]),e[a.layerId]&&e[a.layerId].forEach((r,l)=>{if(r.getUid()===a.feature.getUid()){if(a.feature.isNew()&&!r.isDeleted()&&a.feature.isUpdated()){let g=a.feature.clone();g.add(),e[a.layerId][l]=g}else a.feature.isNew()&&a.feature.isDeleted()?e[a.layerId].splice(l,1):(a.feature.isUpdated()||a.feature.isDeleted())&&(e[a.layerId][l]=a.feature);return n=!1,!1}}),n){let r=a.feature,l=a.layerId;!r.isNew()&&r.isAdded()||(e[l]||(e[l]=[]),e[l].push(r))}})}),e}},Te={};Le.Registry={_sessions:Te,register(t){Te[t.getId()]=t},unregister(t){delete Te[t]},getSession(t){return Te[t]},setSession(t,e){Te[t]=e},getSessions(){return Te},clear(){Object.keys(Te).forEach(Le.Registry.unregister)}};ee();(window.g3wsdk.core.editing||window.g3wsdk.core.workflow||window.g3wsdk.constant.DEFAULT_EDITING_CAPABILITIES||g3wsdk.version<"4")&&console.warn("Editing APIs will be removed from g3wsdk after v4.x");window.g3wsdk.core.editing={Session:Le,SessionsRegistry:Le.Registry,Editor:Ye,ChangesManager:ht};window.g3wsdk.constant.DEFAULT_EDITING_CAPABILITIES=["add_feature","change_feature","change_attr_feature","delete_feature"];window.g3wsdk.core.workflow={Task:F,Step:F,Flow:ft,Workflow:y,WorkflowsStack:y.Stack};var Es={close_editing_panel:{message:"To close editing form need to exit from editing layer"},errors:{no_layers:"An error occurs. It's no possible to edit layers",some_layers:"An error occurs: It's no possible to edit some layers",editing_multiple_relations:"Editing multiple relationships is not currently supported"},search:"Search",editing_changes:"Editing Changes",editing_data:"Editing Layers",editing_attributes:"Editing attributes",relations:"Relations",edit_relation:"Edit relation",back_to_relations:"Back to Relations",no_relations_found:"No relations found",relation_data:"Relation data",relation_already_added:"Relation already added",list_of_relations_feature:"List of relations feature ",tooltip:{edit_layer:"Edit Layer",filter_by_relation:"Filter layers by relation"},toolbox:{title:"Edit"},table:{edit:"Edit feature",copy:"Create a copy",delete:"Delete feature"},tools:{copy:"Copy features",pastefeaturesfromotherlayers:"Paste features from other layer",addpart:"Add part to multipart",deletepart:"Delete part from multipart",merge:"Dissolve features",split:"Split Feature",add_feature:"Add feature",delete_feature:"Delete feature",move_feature:"Move feature",update_vertex:"Update feature vertex",update_feature:"Update feature attribute",update_multi_features:"Update attributes of selected features",update_multi_features_relations:"Update attributes of all selected relations",update_multi_features_relations_from_parents:"Edit relations records from one or mode parent features",copyfeaturefromexternallayer:"Create Feature from added layer"},toolsoftool:{measure:"Show measure",snap:"Snap layer",snapall:"Snap to all layers"},steps:{help:{select_elements:"Select features",select_element:"Select feature",copy:"Create new copy of selected features",merge:"Dissolve features",split:"Split Feature",new:"Create new feature",edit_table:"Edit table features",draw_new_feature:"Draw feature on map",action_confirm:"Confirm action",double_click_delete:"Select feature on map to delete",edit_feature_vertex:"Modify or add a vertex on selected feature",move:"Move selected feature",select_feature_to_relation:"Select feature that you bind relation",show_edit_feature_form:"Show feature form to edit attributes",pick_feature:"Select feature on map to modify",insert_attributes_feature:"Insert attributes of the feature"}},workflow:{steps:{select:"Click on feature to select",draw_part:"Draw new part",draw_geometry:"Draw geometry",merge:"Select featurewhere dissolve",selectSHIFT:"Select features drawing a rectangle pressing SHIFT",selectDrawBox:"Select features drawing a rectangle by two point of opposite corners",selectDrawBoxAtLeast2Feature:"Select at least features drawing a rectangle by two point of opposite corners",selectPoint:"Click on feature to select",selectPointSHIFT:"Select features drawing a rectangle pressing SHIFT (multifeatures) or click on one feature",selectMultiPointSHIFT:"Select features drawing a rectangle pressing SHIFT or click on feature",selectMultiPointSHIFTAtLeast2Feature:"Select at least 2 features drawing a rectangle pressing SHIFT or click on feature",copyCTRL:"Copy selected features using CTRL+C",selectStartVertex:"Select starting vertex of selected features",selectToPaste:"Select the point where paste the features selected",draw_split_line:"Draw a line to split selected feature"},title:{steps:"Steps"},next:"Next"},messages:{featureslockbyotheruser:"Some geometries/records are not editable because in editing by other user",splitted:"Splitted",nosplittedfeature:"Feature not spitted",press_esc:"Press ESC to back",online:"Back ONLINE. Now you can save your changes on database",offline:"You are OFFLINE. All changes are saved locally",delete_feature:"Do you want delete selected feature ?",delete_feature_relations:"If feature has bindings relations, these relations become orphans. We suggest to handle these relations before detele this feature",unlink_relation:"Do you want unlink relation?",commit_feature:"Summary of changes",toolbox_has_no_geometry:"this layer has no geometry",toolbox_has_relation:"this layer is part of a relation",saved:"Data saved successfully",saved_local:"Data saved locally successfully",loading_data:"Loading data",saving:"Saving data. Please wait ...",constraints:{enable_editing:`Please Zoom In to enable editing tools Activation scale at 1:`},pdf:"Document preview not available. Please click here ",commit:{header:"The following list show all changes to commit.",header_relation:"Relation",header_add:"Added show the number of features added",header_update_delete:"Modified and Deleted show the list of features id",add:"Added",delete:"Deleted",update:"Updated"},loading_table_data:"Building Data Table. Please wait ...",copy_and_paste_from_other_layer_mandatory_fields:"It is necessary to fill in any mandatory fields on the features pasted before saving",no_feature_selected:"No feature selected",select_min_2_features:"Select at least 2 features"},relation:{table:{info:"
Select relations to link it to current editing feature.
"},draw_new_feature:"Draw new feature",draw_or_copy:"or",copy_feature_from_other_layer:"Copy feature from other layer"},form:{relations:{tooltips:{back_to_father:"Back to edit father",add_relation:"Create and link new relation",link_relation:"Join a relation to this feature",open_relation_tools:"Show relation tools",unlink_relation:"Unlink relation"}},buttons:{save:"Insert/Edit",save_and_back:"Save and Back",save_and_back_table:"Save and Back",cancel:"Ignore Changes"}},modal:{tools:{copyfeaturefromotherlayer:{title:"Select layer",edit_attributes:"Edit attributes of pasted features in multiple mode"},copyfeaturefromprojectlayer:{title:"Select a feature"}}}};var Is={close_editing_panel:{message:"To close editing form need to exit from editing layer"},errors:{no_layers:"Tapahtui virhe. Tasoja ei ole mahdollista muokata.",some_layers:"Tapahtui virhe. Jotkin tasot eiv\xE4t ole muokattavissa."},search:"Haku",editing_changes:"Editing Changes",editing_data:"Muokataan tasoja",editing_attributes:"Muokataan attribuutteja",relations:"Relaatiot",edit_relation:"Muokkaa relaatiota",back_to_relations:"Takaisin relaatioihin",no_relations_found:"Relaatioita ei l\xF6ytynyt",relation_data:"Relaation tiedot",relation_already_added:"Relaatio on jo lis\xE4tty",list_of_relations_feature:"Lista relaation ominaisuuksista",tooltip:{edit_layer:"Muokkaa tasoa"},toolbox:{title:"Muokkaa"},table:{edit:"Muokkaa ominaisuutta",copy:"Luo kopio",delete:"Poista ominaisuus"},tools:{copy:"Kopio ominaisuuksia",pastefeaturesfromotherlayers:"Paste features from other layer",addpart:"Lis\xE4\xE4 osa",deletepart:"Poista osa",merge:"Yhdist\xE4 ominaisuudet",split:"Leikkaa ominaisuus",add_feature:"Lis\xE4\xE4 ominaisuus",delete_feature:"Poista ominaisuus",move_feature:"Siirr\xE4 ominaisuutta",update_vertex:"P\xE4ivit\xE4 pisteen ominaisuutta",update_feature:"P\xE4ivit\xE4 ominaisuus",update_multi_features:"Muokkaa valittujen ominaisuuksien attribuutteja",update_multi_features_relations:"Update attributes of all selected relations",update_multi_features_relations_from_parents:"Edit relations records from one or mode parent features",copyfeaturefromexternallayer:"Create Feature from added layer"},toolsoftool:{measure:"Show measure",snap:"Snap layer",snapall:"Snap to all layers"},steps:{help:{select_elements:"Valitse ominaisuudet",select_element:"Valitse ominaisuus",copy:"Luo kopio valituista ominaisuuksista",merge:"Yhdist\xE4 ominaisuudet",split:"Leikkaa ominaisuus",new:"Luo uusi ominaisuus",edit_table:"Muuta taulun ominaisuuksia",draw_new_feature:"Piirr\xE4 ominaisuus kartalle",action_confirm:"Hyv\xE4ksy toiminto",double_click_delete:"Valitse poistettava ominaisuus kartalta",edit_feature_vertex:"Muuta pistett\xE4 tai lis\xE4\xE4 piste valittuun ominaisuuteen",move:"Siirr\xE4 valittu ominaisuus",select_feature_to_relation:"Valitse relaatio",show_edit_feature_form:"N\xE4yt\xE4 ominaisuuslomake muokataksesi attribuutteja",pick_feature:"Valitse muokattava ominaisuus kartalta",insert_attributes_feature:"Lis\xE4\xE4 ominaisuuden attribuutit"}},workflow:{steps:{select:"Valitse ominaisuus",draw_part:"Piirr\xE4 uusi osa",merge:"Valitse ominaisuus yhdist\xE4\xE4ksesi",draw_geometry:"Piirr\xE4 geometria",selectSHIFT:"Paina SHIFT, jos haluat valita kohteita suorakulmiovalinnalla.",selectDrawBox:"Piirr\xE4 suorakulmio, jonka si\xE4lt\xE4 kohteet valitaan ",selectDrawBoxAtLeast2Feature:"Piirr\xE4 suorakulmio, jonka si\xE4lt\xE4 kohteet v\xE4hint\xE4\xE4n 2 valitaan ",selectPoint:"Valitse ominaisuus",selectPointSHIFT:"Paina SHIFT, jos haluat valita ominaisuuksia suorakulmiovalinnalla, tai valitse yksitt\xE4inen ominaisuus.",selectMultiPointSHIFT:"Paina SHIFT, jos haluat valita ominaisuuksia suorakulmiovalinnalla, tai valitse yksitt\xE4inen ominaisuus.",selectMultiPointSHIFTAtLeast2Feature:"Paina SHIFT, jos haluat valita v\xE4hint\xE4\xE4n 2 ominaisuuksia suorakulmiovalinnalla, tai valitse yksitt\xE4inen ominaisuus.",copyCTRL:"CTRL+C, voit kopioida valitut ominaisuudet.",selectStartVertex:"Osoita valittujen ominaisuuksien alkupiste.",selectToPaste:"Valitse kohta, johon liit\xE4t valitut ominaisuudet.",draw_split_line:"Piirr\xE4 viiva, jonka mukaan valittu ominaisuus jaetaan."},title:{steps:"Vaiheet"},next:"Seuraava"},messages:{featureslockbyotheruser:"Some features are locked by another user",splitted:"Jaettu",nosplittedfeature:"Ominaisuutta ei jaettu",press_esc:"Paina ESC palataksesi",online:"Yhteys muodostettu. Muutokset voidaan tallentaa tietokantaan.",offline:"Olet offline-tilassa. Muutokset tallennetaan paikallisesti",delete_feature:"Haluatko poistaa valitun ominaisuuden?",delete_feature_relations:"Mik\xE4li ominaisuudella on sitovia relaatioita, n\xE4ist\xE4 relaatiosta tulee orpoja. Suosittelemme k\xE4sittelem\xE4\xE4n n\xE4m\xE4 relaatiot ennen poistamista",unlink_relation:"Haluatko poistaa relaation?",commit_feature:"Yhteenveto muutoksista",toolbox_has_relation:"t\xE4m\xE4 kerros on osa relaatiota",saved:"Tiedot tallennettu onnistuneesti",saved_local:"Tiedot on tallennettu onnistuneesti paikallisesti.",loading_data:"Ladataan tietoja",saving:"Tallentaan tietoja. Odota...",constraints:{enable_editing:`L\xE4henn\xE4 ottaaksesi muokkausty\xF6kalut k\xE4ytt\xF6\xF6n Aktivointi mittakaava 1:`},pdf:"Dokumentin esikatselu ei ole saatavilla. Paina t\xE4st\xE4 ",commit:{header:"Seuraava luettelo n\xE4ytt\xE4\xE4 kaikki muutokset.",header_relation:"Relation",header_add:"Lis\xE4tty n\xE4yt\xE4 lis\xE4ttyjen ominaisuuksien lukum\xE4\xE4r\xE4",header_update_delete:"Muokattu ja Poistettu N\xE4yt\xE4 list\xE4 ominaisuuksien id:st\xE4",add:"Lis\xE4tty",delete:"Poistettu",update:"Muokattu"},loading_table_data:"Building Data Table. Please wait ...",copy_and_paste_from_other_layer_mandatory_fields:"It is necessary to fill in any mandatory fields on the features pasted before saving",no_feature_selected:"No feature selected",select_min_2_features:"Select at least 2 features"},relation:{table:{info:"
Valitse relaatiota linkitt\xE4\xE4ksesi ne muokattavaan ominaisuuteen.
"},draw_new_feature:"Draw new feature",draw_or_copy:"or",copy_feature_from_other_layer:"Copy feature from other layer"},form:{relations:{tooltips:{back_to_father:"Back to edit father",add_relation:"Luo ja linkit\xE4 uusi relaatio",link_relation:"Liit\xE4 relaatio t\xE4h\xE4n ominaisuuteen",open_relation_tools:"N\xE4yt\xE4 relaatioty\xF6kalut",unlink_relation:"Poista relaatio"}},buttons:{save:"Lis\xE4\xE4/muokkaa",save_and_back:"Tallenna ja palaa",save_and_back_table:"Tallenna ja palaa",cancel:"Peruuta"}},modal:{tools:{copyfeaturefromotherlayer:{title:"Select layer",edit_attributes:"Edit attributes of pasted features in multiple mode"},copyfeaturefromprojectlayer:{title:"Select a feature"}}}};var Cs={close_editing_panel:{message:"To close editing form need to exit from editing layer"},errors:{no_layers:"Ett fel uppstod. Niv\xE5erna kan inte redigeras.",some_layers:"Ett fel uppstod. Vissa niv\xE5er kan inte redigeras."},search:"S\xF6kning",editing_changes:"Editing Changes",editing_data:"Niv\xE5erna redigeras",editing_attributes:"Attributen redigeras",relations:"Relationer",edit_relation:"Redigera relationen",back_to_relations:"Tillbaka till relationerna",no_relations_found:"Inga relationer hittades",relation_data:"Relationsuppgifter",relation_already_added:"Relationen har redan lagts till",list_of_relations_feature:"Lista p\xE5 relationens egenskaper",tooltip:{edit_layer:"Redigera niv\xE5n"},toolbox:{title:"Redigera"},table:{edit:"Redigera egenskap",copy:"Skapa en kopia",delete:"Ta bort egenskap"},tools:{copy:"Kopiera egenskaper",pastefeaturesfromotherlayers:"Paste features from other layer",addpart:"L\xE4gg till del",deletepart:"Ta bort del",merge:"Sl\xE5 samman egenskaper",split:"Dela upp egenskap",add_feature:"L\xE4gg till egenskap",delete_feature:"Ta bort egenskap",move_feature:"Flytta egenskap",update_vertex:"Uppdatera punktens egenskap",update_feature:"Uppdatera egenskap",update_multi_features:"\xC4ndra attributen f\xF6r de valda funktionerna",update_multi_features_relations:"Update attributes of all selected relations",update_multi_features_relations_from_parents:"Edit relations records from one or mode parent features",copyfeaturefromexternallayer:"Create Feature from added layer"},toolsoftool:{measure:"Show measure",snap:"Snap layer",snapall:"Snap to all layers"},steps:{help:{select_elements:"V\xE4lj egenskaper",select_element:"V\xE4lj egenskapalitse ominaisuus",copy:"Skapa kopia av valda egenskaper",merge:"Sl\xE5 samman egenskaper",split:"Dela upp egenskap",new:"Skapa ny egenskap",edit_table:"\xC4ndra egenskaper i tabellen",draw_new_feature:"Piirr\xE4 ominaisuus kartalle",action_confirm:"Godk\xE4nn funktionen",double_click_delete:"V\xE4lj funktionen som du vill ta bort p\xE5 kartan",edit_feature_vertex:"\xC4ndra punkten eller l\xE4gg till punkten till den valda egenskapen",move:"Flytta den valda egenskapen",select_feature_to_relation:"V\xE4lj relation",show_edit_feature_form:"Visa egenskapsformul\xE4ret f\xF6r redigering av attribut",pick_feature:"V\xE4lj funktion p\xE5 kartan f\xF6r att \xE4ndras",insert_attributes_feature:"L\xE4gg till egenskapens attribut"}},workflow:{steps:{select:"V\xE4lj egenskap",draw_part:"Rita ny del",draw_geometry:"Rita geometri",merge:"V\xE4lj egenskap att sl\xE5 samman",selectSHIFT:"Tryck SHIFT, om du vill v\xE4lja objekt med hj\xE4lp av rektangel.",selectDrawBox:"Rita upp den rektangel inom vilken objekten v\xE4ljs ",selectDrawBoxAtLeast2Feature:"Rita rektangeln inom vilken minst tv\xE5 objekt \xE4r markerade ",selectPoint:"V\xE4lj egenskap",selectPointSHIFT:"Tryck SHIFT, om du vill v\xE4lja objekt med hj\xE4lp av rektangel, eller v\xE4lj en enskild egenskap.",selectMultiPointSHIFT:"Tryck SHIFT, om du vill v\xE4lja objekt med hj\xE4lp av rektangel, eller v\xE4lj en enskild egenskap.",selectMultiPointSHIFTAtLeast2Feature:"Tryck p\xE5 SKIFT f\xF6r att v\xE4lja minst tv\xE5 objekt med en rektangel eller v\xE4lj en enda egenskap. ",copyCTRL:"CTRL+C, du kan kopiera valda egenskaper.",selectStartVertex:"Visa startpunkten f\xF6r valda egenskaper.",selectToPaste:"V\xE4lj punkt till vilken de valda egenskaperna ska fogas.",draw_split_line:"Rita en linje enligt vilken den valda egenskapen ska uppdelas."},title:{steps:"Skeden"},next:"N\xE4sta"},messages:{featureslockbyotheruser:"Jotkut geometriat/tietueet eiv\xE4t ole muokattavissa, koska muut k\xE4ytt\xE4j\xE4t muokkaavat niit\xE4",splitted:"Uppdelad",nosplittedfeature:"Egenskapen har inte delats upp",press_esc:"Tryck ESC f\xF6r att g\xE5 tillbaka",online:"F\xF6rbindelsen har uppr\xE4ttats. \xC4ndringar kan sparas i databasen.",offline:"Du \xE4r i offline-l\xE4ge. \xC4ndringarna sparas lokalt",delete_feature:"Vill du ta bort den valda egenskapen?",delete_feature_relations:"Om egenskapen saknar bindande relationer blir dessa relationer f\xF6r\xE4ldral\xF6sa. Vi rekommenderar att du behandlar dessa relationer innan du l\xE4mnar programmet",unlink_relation:"Vill du ta bort relationen?",commit_feature:"Sammanfattning av \xE4ndringar",toolbox_has_relation:"detta lager \xE4r en del av en relation",saved:"Uppgifterna sparades",saved_local:"Uppgifterna sparades lokalt.",loading_data:"Uppgifterna laddas",saving:"Uppgifterna sparas. V\xE4nta...",constraints:{enable_editing:`Zooma in f\xF6r att b\xF6rja anv\xE4nda redigeringsverktyg Aktivering skala 1:`},pdf:"F\xF6rhandsgranskning av dokument \xE4r inte tillg\xE4nglig. Tryck h\xE4r",commit:{header:"F\xF6ljande lista visar alla \xE4ndringar.",header_relation:"Relation",header_add:"Tillagda visar antalet egenskaper som lagts till",header_update_delete:"Redigerad och Borttagen Visa en lista p\xE5 egenskapernas id",add:"har lagts till",delete:"Borttagen",update:"Redigerad"},loading_table_data:"Building Data Table. Please wait ...",copy_and_paste_from_other_layer_mandatory_fields:"It is necessary to fill in any mandatory fields on the features pasted before saving",no_feature_selected:"No feature selected",select_min_2_features:"Select at least 2 features"},relation:{table:{info:"
V\xE4lj relation f\xF6r l\xE4nkning till egenskap som ska redigeras.
"},draw_new_feature:"Draw new feature",draw_or_copy:"or",copy_feature_from_other_layer:"Copy feature from other layer"},form:{relations:{tooltips:{back_to_father:"Back to edit father",add_relation:"Skapa och l\xE4nka ny relation",link_relation:"Foga relationen till denna egenskap",open_relation_tools:"Visa relationsverktyg",unlink_relation:"Ta bort relation"}},buttons:{save:"Infoga/Redigera",save_and_back:"Spara och g\xE5 tillbaka",save_and_back_table:"Spara och g\xE5 tillbaka",cancel:"Ignorera \xE4ndringar"}},modal:{tools:{copyfeaturefromotherlayer:{title:"Select layer",edit_attributes:"Edit attributes of pasted features in multiple mode"},copyfeaturefromprojectlayer:{title:"Select a feature"}}}};var Ts={close_editing_panel:{message:"To close editing form need to exit from editing layer"},errors:{no_layers:"Une erreur s'est produite lors du chargement des layers dans l'\xE9dition.",some_layers:"Une erreur s'est produite lors du chargement de certaines layers dans l'\xE9dition."},search:"Recherche",editing_changes:"Editing Changes",editing_data:"Modifier les donnes",editing_attributes:"Modifier les attributs",relations:"Relations",edit_relation:"Modifier la relation",back_to_relations:"Retour aux relations",no_relations_found:"Il n'y a pas de relations",relation_data:"Donn\xE9es sur les relations",relation_already_added:"Relation d\xE9j\xE0 pr\xE9sente",list_of_relations_feature:"Lister les relations de la fonctionnalit\xE9",tooltip:{edit_layer:"Modifier le layer"},toolbox:{title:"Modifier"},table:{edit:"Modifier fonctionnalit\xE9s",copy:"Cr\xE9er une copie",delete:"Supprimer la fonctionnalit\xE9"},tools:{copy:"Copier les fonctionnalit\xE9s",pastefeaturesfromotherlayers:"Paste features from other layer",addpart:"Ajouter une pi\xE8ce \xE0 la g\xE9om\xE9trie",deletepart:"Supprimer la partie de la g\xE9om\xE9trie",merge:"Dissoudre les fonctionnalit\xE9s",split:"Couper la fonctionnalit\xE9",add_feature:"Ajouter une fonctionnalit\xE9",delete_feature:"Supprimer la fonctionnalit\xE9",move_feature:"D\xE9placez la fonctionnalit\xE9",update_vertex:"Mettre \xE0 jour les sommets des fonctionnalit\xE9s",update_feature:"Modifier les attributs des fonctionnalit\xE9s",update_multi_features:"Modifier les attributs des fonctionnalit\xE9s s\xE9lectionn\xE9es",update_multi_features_relations:"Update attributes of all selected relations",update_multi_features_relations_from_parents:"Modifier les enregistrements de relation \xE0 partir d'une ou plusieurs entit\xE9s parents",copyfeaturefromexternallayer:"Create Feature from added layer"},toolsoftool:{measure:"Show measure",snap:"Snap layer",snapall:"Snap to all layers"},steps:{help:{select_elements:"S\xE9lectionner les fonctionnalit\xE9s",select_element:"S\xE9lectionner une fonctionnalit\xE9",copy:"Cr\xE9er une copie des fonctionnalit\xE9s s\xE9lectionn\xE9es",merge:"Dissoudre les fonctionnalit\xE9s",split:"Couper la fonctionnalit\xE9",new:"Cr\xE9er une nouvelle fonctionnalit\xE9",edit_table:"Modifier les fonctionnalit\xE9s de la table",draw_new_feature:"Dessiner une fonctionnalit\xE9 sur la carte",action_confirm:"Confirmer l'action",double_click_delete:"S\xE9lectionner la fonctionnalit\xE9 sur la carte \xE0 supprimer",edit_feature_vertex:"Modifier ou ajouter un sommet \xE0 la fonctionnalit\xE9 s\xE9lectionn\xE9e",move:"D\xE9placer la fonctionnalit\xE9 s\xE9lectionn\xE9e",select_feature_to_relation:"S\xE9lectionner la fonctionnalit\xE9 que vous souhaitez mettre en relation",show_edit_feature_form:"Afficher le formulaire de la fonctionnalit\xE9 permettant de modifier les attributs",pick_feature:"S\xE9lectionner l'\xE9l\xE9ment de la carte \xE0 modifier",insert_attributes_feature:"Ins\xE9rer les attributs de la fonctionnalit\xE9"}},workflow:{steps:{select:"Cliquer sur la fonctionnalit\xE9 \xE0 s\xE9lectionner",draw_part:"Dessiner la nouvelle partie",draw_geometry:"Dessiner la g\xE9om\xE9trie",merge:"S\xE9lectionner la fonction \xE0 introduire en fondu",selectPoint:"Cliquer sur la fonctionnalit\xE9 pour la s\xE9lectionner",selectSHIFT:"S\xE9lectionner des fonctionnalit\xE9s en maintenant la touche SHIFT enfonc\xE9e",selectDrawBox:"S\xE9lectionner les fonctionnalit\xE9s en dessinant un rectangle par la cr\xE9ation des deux points de la diagonale",selectDrawBoxAtLeast2Feature:"S\xE9lectionner au moins 2 fonctionnalit\xE9s en dessinant un rectangle par la cr\xE9ation des deux points de la diagonale",selectPointSHIFT:"S\xE9lectionner des caract\xE9ristiques en maintenant la touche SHIFT enfonc\xE9e (multi-s\xE9lection) ou en cliquant sur une seule caract\xE9ristique",selectMultiPointSHIFT:"S\xE9lectionner des fonctionnalit\xE9s en maintenant la touche SHIFT appuy\xE9e ou en cliquant sur la fonctionnalit\xE9 individuelle",selectMultiPointSHIFTAtLeast2Feature:"S\xE9lectionner au moins 2 fonctionnalit\xE9s en maintenant la touche SHIFT appuy\xE9e ou en cliquant sur la fonctionnalit\xE9 individuelle",copyCTRL:"Copier les fonctionnalit\xE9s s\xE9lectionn\xE9es avec CTRL+C",selectStartVertex:"S\xE9lectionner le sommet de d\xE9part des fonctionnalit\xE9s choisies",selectToPaste:"S\xE9lectionner le point o\xF9 les fonctionnalit\xE9s s\xE9lectionn\xE9es seront coll\xE9es",draw_split_line:"Tracez une ligne pour couper la fonctionnalit\xE9 s\xE9lectionn\xE9e"},title:{steps:"\xC9tapes"},next:"Suivant"},messages:{featureslockbyotheruser:"Certaines g\xE9om\xE9tries/enregistrements ne sont pas modifiables car ils ont \xE9t\xE9 modifi\xE9s par un autre utilisateur",splitted:"Fonctionnalit\xE9(s) divis\xE9(es)",nosplittedfeature:"La (les) fonctionnalit\xE9(s) n\u2019a (n'ont) pas \xE9t\xE9 divis\xE9(es)",press_esc:"Appuyez sur ESC pour revenir",online:"Vous \xEAtes \xE0 nouveau EN LIGNE. Vous pouvez enregistrer les modifications de fa\xE7on permanente",offline:"Vous \xEAtes HORS LIGNE. Toutes les modifications seront enregistr\xE9es temporairement en local",delete_feature:"Voulez-vous supprimer la fonctionnalit\xE9 s\xE9lectionn\xE9e ?",delete_feature_relations:"La suppression d'une fonctionnalit\xE9 avec des relations associ\xE9es laissera ces relations orphelines. Il est recommand\xE9 de g\xE9rer ces relations avant de supprimer la fonctionnalit\xE9",unlink_relation:"Voulez-vous d\xE9tacher la relation ?",commit_feature:"Sommaire des changements",toolbox_has_relation:"cette couche fait partie d'une relation",saved:"Les donn\xE9es ont \xE9t\xE9 enregistr\xE9es correctement",saved_local:"Les donn\xE9es ont \xE9t\xE9 correctement sauvegard\xE9es localement",loading_data:"Chargement des donn\xE9es",saving:"Sauvegarde des donn\xE9es. Veuillez patienter ...",constraints:{enable_editing:`Augmenter le niveau de zoom pour permettre l'\xE9dition Echelle de d\xE9clenchement 1 :`},pdf:"Aper\xE7u du document non disponible. Cliquez ici ",commit:{header:"La liste ci-dessous montre toutes les modifications qui seront enregistr\xE9es.",header_relation:"Relation",header_add:"Ajouts indique le nombre de fonctionnalit\xE9s ajout\xE9es",header_update_delete:"Modifi\xE9 e Supprim\xE9 liste les ids",add:"Ajout\xE9",delete:"Supprim\xE9",update:"Modifi\xE9"},loading_table_data:"Building Data Table. Please wait ...",copy_and_paste_from_other_layer_mandatory_fields:"Avant d'enregistrer, il est n\xE9cessaire de remplir tous les champs obligatoires du features saisi",no_feature_selected:"Aucune feature s\xE9lectionn\xE9e",select_min_2_features:"Select at least 2 features"},relation:{table:{info:"
S\xE9lectionner les relations pour les associer \xE0 l'\xE9l\xE9ment en cours d'\xE9dition.
"},draw_new_feature:"Dessiner une nouvelle feature",draw_or_copy:"ou",copy_feature_from_other_layer:"Copier feature d'une autre layer"},form:{relations:{tooltips:{back_to_father:"Back to edit father",add_relation:"Cr\xE9er et ajouter une nouvelle relation",link_relation:"Associer une relation existante \xE0 cette fonctionnalit\xE9",open_relation_tools:"Outils de relation ouverte",unlink_relation:"Annuler la relation"}},buttons:{save:"Ins\xE9rer/Modifier",save_and_back:"Sauvegarder et retourner au parent",save_and_back_table:"Sauvegarder et et revenir en arri\xE8re",cancel:"Ignorer modifications"}},modal:{tools:{copyfeaturefromotherlayer:{title:"Select layer",edit_attributes:"Edit attributes of pasted features in multiple mode"},copyfeaturefromprojectlayer:{title:"Select a feature"}}}};var Ls={close_editing_panel:{message:"To close editing form need to exit from editing layer"},errors:{no_layers:"Es tritt ein Fehler auf. Es ist nicht m\xF6glich, Layer zu bearbeiten",some_layers:"Es tritt ein Fehler auf: Es ist nicht m\xF6glich, einige Layer zu bearbeiten"},search:"Suche",editing_changes:"\xC4nderungen bearbeiten",editing_data:"Layer bearbeiten",editing_attributes:"Attribute bearbeiten",relations:"Relationen",edit_relation:"Relation bearbeiten",back_to_relations:"Zur\xFCck zu Relationen",no_relations_found:"Keine Relationen gefunden",relation_data:"Relationsdaten",relation_already_added:"Relation bereits hinzugef\xFCgt",list_of_relations_feature:"Liste der Relations-Features ",tooltip:{edit_layer:"Layer bearbeiten"},toolbox:{title:"bearbeiten"},table:{edit:"Feature bearbeiten",copy:"Kopie erstellen",delete:"Feature l\xF6schen"},tools:{copy:"Features kopieren",pastefeaturesfromotherlayers:"Paste features from other layer",addpart:"Teil zu Multipart hinzuf\xFCgen",deletepart:"Teil aus Multipart l\xF6schen",merge:"Feature aufl\xF6sen",split:"Feature trennen",add_feature:"Feature hinzuf\xFCgen",delete_feature:"Feature l\xF6schen",move_feature:"Feature verschieben",update_vertex:"Feature vertex aktualisieren",update_feature:"Feature-Attribut aktualisieren",update_multi_features:"Attribute ausgew\xE4hlter Features aktualisieren",update_multi_features_relations:"Update attributes of all selected relations",update_multi_features_relations_from_parents:"Bearbeiten Sie Beziehungsdatens\xE4tze von einem oder mehreren \xFCbergeordneten features",copyfeaturefromexternallayer:"Create Feature from added layer"},toolsoftool:{measure:"Messung anzeigen",snap:"Snap Layer",snapall:"Snap auf alle Layer"},steps:{help:{select_elements:"Features ausw\xE4hlen",select_element:"Feature ausw\xE4hlen",copy:"Neue Kopie der ausgew\xE4hlten Features erstellen",merge:"Features aufl\xF6sen",split:"Feature trennen",new:"Neues Feature erstellen",edit_table:"Features der Tabelle bearbeiten",draw_new_feature:"Feature auf Karte zeichnen",action_confirm:"Aktion best\xE4tigen",double_click_delete:"Zu l\xF6schendes Feature auf der Karte ausw\xE4hlen",edit_feature_vertex:"\xC4ndern oder Hinzuf\xFCgen eines Eckpunktes auf dem ausgew\xE4hlten Feature",move:"Ausgew\xE4hltes Feature verschieben",select_feature_to_relation:"Feature ausw\xE4hlen, welches die Relation verkn\xFCpft",show_edit_feature_form:"Feature-Formular zum Bearbeiten von Attributen anzeigen",pick_feature:"Zu \xE4nderndes Feature auf der Karte ausw\xE4hlen",insert_attributes_feature:"Attribute des Features einf\xFCgen"}},workflow:{steps:{select:"Zum Ausw\xE4hlen auf ein Feature klicken",draw_part:"Neues Teil zeichnen",draw_geometry:"Geometrie zeichnen",merge:"Feature zum Aufl\xF6sen ausw\xE4hlen",selectSHIFT:"Features ausw\xE4hlen indem ein Rechteck mit SHIFT gezeichnet wird",selectDrawBox:"Features ausw\xE4hlen, indem man ein Rechteck mit zwei gegen\xFCberliegenden Eckpunkten zeichnet",selectDrawBoxAtLeast2Feature:"Mindestens Features ausw\xE4hlen, indem man ein Rechteck mit zwei gegen\xFCberliegenden Eckpunkten zeichnet",selectPoint:"Zum Ausw\xE4hlen auf ein Feature klicken",selectPointSHIFT:"Features ausw\xE4hlen, indem ein Rechteck mit SHIFT gezeichnet wird (Multifeatures) oder auf ein Feature klicken",selectMultiPointSHIFT:"Features ausw\xE4hlen, indem man ein Rechteck zeichnet und SHIFT dr\xFCckt oder auf ein Feature klickt",selectMultiPointSHIFTAtLeast2Feature:"Mindestens 2 Features ausw\xE4hlen und mit SHIFT ein Rechteck zeichnen oder auf ein Feature klicken",copyCTRL:"Kopieren ausgew\xE4hlter Features mit CTRL+C",selectStartVertex:"Start-Eckpunkt der ausgew\xE4hlten Features ausw\xE4hlen",selectToPaste:"Den Punkt ausw\xE4hlen, an dem die ausgew\xE4hlten Features eingef\xFCgt werden sollen",draw_split_line:"Eine Linie zeichnen, um das ausgew\xE4hlte Feature zu teilen"},title:{steps:"Schritte"},next:"Weiter"},messages:{featureslockbyotheruser:"Einige Geometrien/Datens\xE4tze k\xF6nnen nicht bearbeitet werden, da sie von anderen Benutzern bearbeitet werden",splitted:"Getrennt",nosplittedfeature:"Feature nicht getrennt",press_esc:"Mit ESC zur\xFCck",online:"Wieder ONLINE. Jetzt kann man die \xC4nderungen in der Datenbank speichern",offline:"OFFLINE. Alle \xC4nderungen werden lokal gespeichert",delete_feature:"Soll das ausgew\xE4hlte Feature gel\xF6scht werden?",delete_feature_relations:"Wenn ein Feature Verkn\xFCpfungen beinhaltet, werden diese Relationen verwaist. Wir schlagen vor, diese Relationen zu behandeln, bevor das Feature gel\xF6scht wird",unlink_relation:"Soll die Verkn\xFCpfung aufgehoben werden?",commit_feature:"Zusammenfassung der \xC4nderungen",toolbox_has_relation:"Diese Ebene ist Teil einer Beziehung",saved:"Daten erfolgreich gespeichert",saved_local:"Daten erfolgreich lokal gespeichert",loading_data:"Daten laden",saving:"Daten werden gespeichert. Bitte warten ...",constraints:{enable_editing:`Bitte zoomen Sie hinein, um die Editier-Tools zu aktivieren Aktivierungsskala bei 1:`},pdf:"Dokumentenvorschau nicht verf\xFCgbar. Bitte hier klicken ",commit:{header:"Die folgende Liste zeigt alle zu \xFCbernehmenden \xC4nderungen.",header_relation:"Relation",header_add:"Hinzufgef\xFCgt Die Anzahl der hinzugef\xFCgten Features anzeigen",header_update_delete:"Bearbeitet und Gel\xF6scht Die Liste der Feature-ID anzeigen",add:"Hinzugef\xFCgt",delete:"Gel\xF6scht",update:"Bearbeitet"},loading_table_data:"Datentabelle wird erstellt. Bitte warten ...",copy_and_paste_from_other_layer_mandatory_fields:"Vor dem Speichern m\xFCssen alle Pflichtfelder des eingegebenen features ausgef\xFCllt werden",no_feature_selected:"Keine feature ausgew\xE4hlt",select_min_2_features:"Select at least 2 features"},relation:{table:{info:"
W\xE4hlen Sie Relationen aus, um sie mit dem aktuellen Feature zu verkn\xFCpfen.
"},draw_new_feature:"Zeichnen Sie eine neue feature",draw_or_copy:"oder",copy_feature_from_other_layer:"Kopieren Sie feature aus einer anderen layer"},form:{relations:{tooltips:{back_to_father:"Zur\xFCck zur Bearbeitung des Vaters",add_relation:"Neue Relation erstellen und verkn\xFCpfen",link_relation:"Eine Relation zu diesem Feature herstellen",open_relation_tools:"Relationstools anzeigen",unlink_relation:"Relation trennen"}},buttons:{save:"Einf\xFCgung/Bearbeiten",save_and_back:"Speichern und zur\xFCck",save_and_back_table:"Speichern und zur\xFCck",cancel:"\xC4nderungen ignorieren"}},modal:{tools:{copyfeaturefromotherlayer:{title:"Select layer",edit_attributes:"Edit attributes of pasted features in multiple mode"},copyfeaturefromprojectlayer:{title:"Select one feature"}}}};var Rs={close_editing_panel:{message:"To close editing form need to exit from editing layer"},errors:{no_layers:"Avem o eroare. Straturile nu sunt editabile",some_layers:"Avem o eroare: Anumite straturi nu se pot edita"},search:"Caut\u0103",editing_changes:"Modificare schimb\u0103ri",editing_data:"Modificare straturi",editing_attributes:"Modificare atribute",relations:"Rela\u021Bii",edit_relation:"Modific\u0103 rela\u021Bia",back_to_relations:"\xCEnapoi la Rela\u021Bii",no_relations_found:"Nu am g\u0103sit rela\u021Bii",relation_data:"Date rela\u021Bii",relation_already_added:"Rela\u021Bie ad\u0103ugat\u0103 deja",list_of_relations_feature:"Lista rela\u021Bii entitatea ",tooltip:{edit_layer:"Modific\u0103 strat"},toolbox:{title:"Modific\u0103"},table:{edit:"Modific\u0103 entitate",copy:"Creeaz\u0103 o copie",delete:"Elimin\u0103 entitatea"},tools:{copy:"Copiaz\u0103 entit\u0103\u021Bile",pastefeaturesfromotherlayers:"Paste features from other layer",addpart:"Adaug\u0103 o parte la multiparte",deletepart:"Elimin\u0103 partea din multiparte",merge:"Dizolvare entit\u0103\u021Bi",split:"Divizare Entitate",add_feature:"Adaug\u0103 entitate",delete_feature:"Eliminare entitate",move_feature:"Mut\u0103 entitate",update_vertex:"Actualizeaz\u0103 vertec\u0219ii entit\u0103\u021Bii",update_feature:"Actualizeaz\u0103 atributul entit\u0103\u021Bii",update_multi_features:"Actualizeaz\u0103 atributele entit\u0103\u021Bilor selectate",update_multi_features_relations:"Update attributes of all selected relations",update_multi_features_relations_from_parents:"Edita\u021Bi \xEEnregistr\u0103rile rela\u021Biilor de la una sau mai multe caracteristici p\u0103rinte",copyfeaturefromexternallayer:"Create Feature from added layer"},toolsoftool:{measure:"Arat\u0103 m\u0103sur\u0103torile",snap:"Acro\u0219are strat",snapall:"Acro\u0219are pe toate straturile"},steps:{help:{select_elements:"Selecteaz\u0103 entit\u0103\u021Bi",select_element:"Selecteaz\u0103 entitate",copy:"Creeaz\u0103 o nou\u0103 copie a entit\u0103\u021Bilor selectate",merge:"Dizolv\u0103 entit\u0103\u021Bile",split:"Divizare Entitate",new:"Creeaz\u0103 o entitate",edit_table:"Modific\u0103 entit\u0103\u021Bile tabelare",draw_new_feature:"Deseneaz\u0103 entitate pe hart\u0103",action_confirm:"Confirm\u0103 ac\u021Biunea",double_click_delete:"Selecteaz\u0103 entitatea de eliminat din hart\u0103",edit_feature_vertex:"Modific\u0103 sau adaug\u0103 un vertex la entitatea selectat\u0103",move:"Mut\u0103 entitatea selectat\u0103",select_feature_to_relation:"Selecteaz\u0103 entitate pentru rela\u021Bionare",show_edit_feature_form:"Arat\u0103 formularul entit\u0103\u021Bii pentru modific\u0103ri",pick_feature:"Selecteaz\u0103 entit\u0103\u021Bile de modificat din hart\u0103",insert_attributes_feature:"Insereaz\u0103 atributele entit\u0103\u021Bii"}},workflow:{steps:{select:"Click pe entitate pentru a o selecta",draw_part:"Deseneaz\u0103 o parte nou\u0103",draw_geometry:"Desena\u021Bi geometria",merge:"Selecteaz\u0103 partea de dizolvat",selectSHIFT:"Selecteaz\u0103 entit\u0103\u021Bi prin desen triunghi ap\u0103s\xE2nd SHIFT",selectDrawBox:"Selecteaz\u0103 entit\u0103\u021Bi desen\xE2nd un dreptunghi prin dou\u0103 puncte opuse",selectDrawBoxAtLeast2Feature:"Selecteaz\u0103 cel pu\u021Bin 2 entit\u0103\u021Bi prin desenul unui dreptunghi",selectPoint:"Click pe entitate pentru selectare",selectPointSHIFT:"Selecteaz\u0103 entit\u0103\u021Bi prin desen dreptunghi ap\u0103s\xE2nd SHIFT (multientit\u0103\u021Bi) sau prin click pe entitate",selectMultiPointSHIFT:"Selecteaz\u0103 entit\u0103\u021Bi prin desen dreptunghi ap\u0103s\xE2nd SHIFT sau prin click pe entitate",selectMultiPointSHIFTAtLeast2Feature:"Selecteaz\u0103 cel pu\u021Bin 2 entit\u0103\u021Bi prin desen dreptunghi ap\u0103s\xE2nd SHIFT sau prin click pe entitate",copyCTRL:"Copiaz\u0103 entit\u0103\u021Bile selectate folosint CTRL+C",selectStartVertex:"Selecteaz\u0103 vertexul de start a entit\u0103\u021Bilor selectate",selectToPaste:"Selecteaz\u0103 punctul unde s\u0103 lipim entit\u0103\u021Bile selectate",draw_split_line:"Deseneaz\u0103 o linie pentru a diviza entitatea selectat\u0103"},title:{steps:"Pa\u0219i"},next:"Urm\u0103torul"},messages:{featureslockbyotheruser:"Unele geometrii/\xEEnregistr\u0103ri nu sunt editabile deoarece sunt editate de c\u0103tre alt utilizator",splitted:"Divizat",nosplittedfeature:"Entitate nedivizat\u0103",press_esc:"ESC pentru \xEEnapoi",online:"\xCEnapoi ONLINE. Acum se pot salva schimb\u0103rile",offline:"OFFLINE. Schimb\u0103rile sunt salvate local",delete_feature:"\u0218terg entitatea selectat\u0103?",delete_feature_relations:"Dac\u0103 entitatea are rela\u021Bii care trimit la ea, acele rela\u021Bii devin orfane. Suger\u0103m s\u0103 v\u0103 ocupa\u021Bi de acele elemente \xEEnainte s\u0103 elimina\u021Bi aceast\u0103 entitate.",unlink_relation:"Dore\u0219ti s\u0103 elimina\u021Bi leg\u0103tura cu rela\u021Bia?",commit_feature:"Rezumatul modific\u0103rilor",toolbox_has_relation:"acest strat face parte dintr-o rela\u021Bie",saved:"Datele sunt salvate",saved_local:"Datele s-au salvat local",loading_data:"Datele se \xEEncarc\u0103.",saving:"Salv\u0103m datele. A\u0219tepta\u021Bi ...",constraints:{enable_editing:`Pentru a activa Modificare face\u021Bi zoom la Scara de activare 1:`},pdf:"Previzualizarea documentului nu este disponibil\u0103. Click aici ",commit:{header:"Lista cu toate modific\u0103rile.",header_relation:"Relation",header_add:"Ad\u0103ugate arat\u0103 nr. de entit\u0103\u021Bi ad\u0103ugate",header_update_delete:"Modificate \u0219i \u0218terse arat\u0103 lista de id-uri de entit\u0103\u021Bi",add:"Ad\u0103ugate",delete:"Eliminate",update:"Modificate"},loading_table_data:"\xCEnc\u0103rc\u0103m tabelul de date ...",copy_and_paste_from_other_layer_mandatory_fields:"\xCEnainte de a salva, este necesar s\u0103 completa\u021Bi toate c\xE2mpurile obligatorii ale entit\u0103\u021Bi introduse",no_feature_selected:"Nicio feature selectat\u0103",select_min_2_features:"Select at least 2 features"},relation:{table:{info:"
Selecteaz\u0103 rela\u021Biile pentru a face leg\u0103tura cu entitatea curent\u0103.
"},draw_new_feature:"Desena\u021Bi o nou\u0103 feature",draw_or_copy:"sau",copy_feature_from_other_layer:"Copia\u021Bi feature dintr-un alt layer"},form:{relations:{tooltips:{back_to_father:"\xCEnapoi la modific\u0103rile entit\u0103\u021Bii p\u0103rinte",add_relation:"Creeaz\u0103 \u0219i f\u0103 leg\u0103tura unei rela\u021Bii noi",link_relation:"Leag\u0103 o rela\u021Bie de entitate",open_relation_tools:"Arat\u0103 instrumentele pentru rela\u021Bii",unlink_relation:"Elimin\u0103 leg\u0103tura la rela\u021Bie"}},buttons:{save:"Insera\u021Bi/Edita\u021Bi",save_and_back:"Salveaz\u0103 \u0219i d\u0103 \xEEnapoi",save_and_back_table:"Salveaz\u0103 \u0219i d\u0103 \xEEnapoi",cancel:"Ignora\u021Bi modific\u0103rile"}},modal:{tools:{copyfeaturefromotherlayer:{title:"Select layer",edit_attributes:"Edit attributes of pasted features in multiple mode"},copyfeaturefromprojectlayer:{title:"Select a feature"}}}};var Ps={errors:{no_layers:"An error occurs. It's no possible to edit layers",some_layers:"An error occurs: It's no possible to edit some layers"},search:"Search",editing_changes:"Editing Changes",editing_data:"Editing Layers",editing_attributes:"Editing attributes",relations:"Relations",edit_relation:"Edit relation",back_to_relations:"Back to Relations",no_relations_found:"No relations found",relation_data:"Relation data",relation_already_added:"Relation already added",list_of_relations_feature:"List of relations feature ",tooltip:{edit_layer:"Edit Layer"},toolbox:{title:"Edit"},table:{edit:"Edit feature",copy:"Create a copy",delete:"Delete feature"},tools:{copy:"Copy features",pastefeaturesfromotherlayers:"Paste features from other layer",addpart:"Add part to multipart",deletepart:"Delete part from multipart",merge:"Dissolve features",split:"Split Feature",add_feature:"Add feature",delete_feature:"Delete feature",move_feature:"Move feature",update_vertex:"Update feature vertex",update_feature:"Update feature attribute",update_multi_features:"Update attributes of selected features",update_multi_features_relations:"Update attributes of all selected relations",update_multi_features_relations_from_parents:"Edit relations records from one or mode parent features",copyfeaturefromexternallayer:"Create Feature from added layer"},toolsoftool:{measure:"Show measure",snap:"Snap layer",snapall:"Snap to all layers"},steps:{help:{select_elements:"Select features",select_element:"Select feature",copy:"Create new copy of selected features",merge:"Dissolve features",split:"Split Feature",new:"Create new feature",edit_table:"Edit table features",draw_new_feature:"Draw feature on map",action_confirm:"Confirm action",double_click_delete:"Select feature on map to delete",edit_feature_vertex:"Modify or add a vertex on selected feature",move:"Move selected feature",select_feature_to_relation:"Select feature that you bind relation",show_edit_feature_form:"Show feature form to edit attributes",pick_feature:"Select feature on map to modify",insert_attributes_feature:"Insert attributes of the feature"}},workflow:{steps:{select:"Click on feature to select",draw_part:"Draw new part",merge:"Select featurewhere dissolve",selectSHIFT:"Select features drawing a rectangle pressing SHIFT",selectDrawBox:"Select features drawing a rectangle by two point of opposite corners",selectDrawBoxAtLeast2Feature:"Select at least features drawing a rectangle by two point of opposite corners",selectPoint:"Click on feature to select",selectPointSHIFT:"Select features drawing a rectangle pressing SHIFT (multifeatures) or click on one feature",selectMultiPointSHIFT:"Select features drawing a rectangle pressing SHIFT or click on feature",selectMultiPointSHIFTAtLeast2Feature:"Select at least 2 features drawing a rectangle pressing SHIFT or click on feature",copyCTRL:"Copy selected features using CTRL+C",selectStartVertex:"Select starting vertex of selected features",selectToPaste:"Select the point where paste the features selected",draw_split_line:"Draw a line to split selected feature"},title:{steps:"Steps"},next:"Next"},messages:{featureslockbyotheruser:"Some geometries/records are not editable because in editing by other user",splitted:"Splitted",nosplittedfeature:"Feature not spitted",press_esc:"Press ESC to back",online:"Back ONLINE. Now you can save your changes on database",offline:"You are OFFLINE. All changes are saved locally",delete_feature:"Do you want delete selected feature ?",delete_feature_relations:"If feature has bindings relations, these relations become orphans. We suggest to handle these relations before detele this feature",unlink_relation:"Do you want unlink relation?",commit_feature:"Do you want to save the changes",toolbox_has_relation:"this layer is part of a relation",saved:"Data saved successfully",saved_local:"Data saved locally successfully",loading_data:"Loading data",saving:"Saving data. Please wait ...",constraints:{enable_editing:`Please Zoom In to enable editing tools -Activation scale at 1:`},pdf:"Document preview not available. Please click here ",commit:{header:"The following list show all changes to commit.",header_add:"Added show the number of features added",header_update_delete:"Modified and Deleted show the list of features id",add:"Added(n. features)",delete:"Deleted(id)",update:"Modified(id)"},loading_table_data:"Building Data Table. Please wait ...",copy_and_paste_from_other_layer_mandatory_fields:"It is necessary to fill in any mandatory fields on the features pasted before saving",no_feature_selected:"No feature selected",select_min_2_features:"Select at least 2 features"},relation:{table:{info:"
Select relations to link it to current editing feature.
"},draw_new_feature:"Draw new feature",draw_or_copy:"or",copy_feature_from_other_layer:"Copy feature from other layer"},form:{relations:{tooltips:{back_to_father:"Back to edit father",add_relation:"Create and link new relation",link_relation:"Join a relation to this feature",open_relation_tools:"Show relation tools",unlink_relation:"Unlink relation"}},buttons:{save:"Insert/Edit",save_and_back:"Save and Back",save_and_back_table:"Save and Back",cancel:"Ignore Changes"}},modal:{tools:{copyfeaturefromotherlayer:{title:"Select layer",edit_attributes:"Edit attributes of pasted features in multiple mode"},copyfeaturefromprojectlayer:{title:"Select a feature"}}}};var As={it:Fs,en:Es,fi:Is,se:Cs,fr:Ts,de:Ls,ro:Rs,pl:Ps};ee();pe();D();var{Feature:Za}=g3wsdk.core.layer.features;function Ms(t,e={}){let s=new Za;e.geometry&&s.setGeometry(new ol.geom[e.geometry.type](e.geometry.coordinates)),s.setProperties(e.properties),s.setTemporaryId();let i=this.getToolBoxById(t),a=i.getLayer().getEditingLayer(),n=i.getSession();return a.getSource().addFeature(s),n.pushAdd(t,s,!1),s}Ae();Ue();Xe();var{G3W_FID:Pr}=g3wsdk.constant,{ApplicationState:Gs,ApplicationService:$t}=g3wsdk.core,{CatalogLayersStoresRegistry:Oe}=g3wsdk.core.catalog,{t:zt,tPlugin:Hs}=g3wsdk.core.i18n,{Layer:qs,LayersStore:Ar}=g3wsdk.core.layer,{Feature:Js}=g3wsdk.core.layer.features,{MapLayersStoreRegistry:pt}=g3wsdk.core.map,{Plugin:Mr,PluginService:Br}=g3wsdk.core.plugin,{XHR:Ks,noop:Ws}=g3wsdk.core.utils,{GUI:P}=g3wsdk.gui,{Panel:Or}=g3wsdk.gui.vue,{Server:jr}=g3wsdk.core.errors.parsers,{Geometry:Xs}=g3wsdk.core.geoutils,{getScaleFromResolution:Dr,getResolutionFromScale:Ur}=g3wsdk.ol.utils;Object.entries({Workflow:y,OpenFormStep:R,AddFeatureStep:Q,ToolBox:J}).forEach(([t,e])=>console.assert(e!==void 0,`${t} is undefined`));new class extends Mr{constructor(){super({name:"editing",i18n:As,fontClasses:[{name:"measure",className:"fas fa-ruler-combined"},{name:"magnete",className:"fas fa-magnet"},{name:"clipboard",className:"fas fa-clipboard"}]}),this.state={open:!1,toolboxes:[],_toolboxes:[],toolboxselected:null,showselectlayers:!0,message:null,relations:[],sessions:{},layers_in_error:!1,formComponents:{},subscribers:{},constraints:{toolboxes:{},showToolboxesExcluded:!0},featuresOnClose:{},uniqueFieldsValues:{},saveConfig:{mode:"default",modal:!1,messages:void 0,cb:{done:()=>{},error:()=>{}}},editableLayers:{},events:{"start-editing":{},"show-relation-editing":{},layer:{start_editing:{before:{},after:{}}}},show_errors:!1,editFeatureKey:void 0,panel:null,currentLayout:$t.getCurrentLayoutName(),unwatchLayout:new Vue().$watch(()=>Gs.gui.layout.__current,t=>this.state.currentLayout=t!==this.getName()?t:this.state.currentLayout),onMapControlToggled:({target:t})=>{t.isToggled()&&t.isClickMap()&&this.state.toolboxselected&&this.state.toolboxselected.getActiveTool()&&this.state.toolboxselected.stopActiveTool()}},this.setService(Object.assign(new Br,{state:this.state,config:this.config,getSession:this.getSession.bind(this),getFeature:this.getFeature.bind(this),subscribe:this.subscribe.bind(this),unsubscribe:this.unsubscribe.bind(this),fireEvent:this.fireEvent.bind(this),undo:this.undo.bind(this),redo:this.redo.bind(this),getEditingLayer:this.getEditingLayer.bind(this),addToolBox:this.addToolBox.bind(this),runEventHandler:this.runEventHandler.bind(this),resetDefault:this.resetDefault.bind(this),resetAPIDefault:this.resetAPIDefault.bind(this),getLayers:this.getLayers.bind(this),getLayerById:this.getLayerById.bind(this),getToolBoxById:this.getToolBoxById.bind(this),getSessionById:this.getSessionById.bind(this),setApplicationEditingConstraints:this.setApplicationEditingConstraints.bind(this),getToolBoxes:this.getToolBoxes.bind(this),getEditableLayers:this.getEditableLayers.bind(this),stop:this.stop.bind(this),saveChange:this.saveChange.bind(this),commit:this.commit.bind(this),undoRedoLayerUniqueFieldValues:this.undoRedoLayerUniqueFieldValues.bind(this),undoRedoRelationUniqueFieldValues:this.undoRedoRelationUniqueFieldValues.bind(this),stopEditing:this.stopEditing.bind(this),startEditing:this.startEditing.bind(this),addLayerFeature:this.addLayerFeature.bind(this)})),P.getService("map").on("mapcontrol:toggled",this.state.onMapControlToggled),this._init()}async _init(){if(!Oe.getLayers({EDITABLE:!0}).length)return;this.setHookLoading({loading:!0}),this.service.setApi({api:{getSession:this.getSession.bind(this),getFeature:this.getFeature.bind(this),subscribe:this.subscribe.bind(this),unsubscribe:this.unsubscribe.bind(this),getToolBoxById:this.getToolBoxById.bind(this),addNewFeature:Ms,commitChanges:this.commit.bind(this),setApplicationEditingConstraints:this.setApplicationEditingConstraints.bind(this),getMapService:()=>P.getService("map"),updateLayerFeature:Ws,deleteLayerFeature:Ws,addLayerFeature:this.addLayerFeature.bind(this),hidePanel:this.hideEditingPanel.bind(this),resetDefault:this.resetAPIDefault.bind(this),startEditing:this.startEditing.bind(this),stopEditing:this.stopEditing.bind(this),showPanel:this.showPanel.bind(this),setSaveConfig:this.setSaveConfig.bind(this),addFormComponents:this.addFormComponents.bind(this)}}),pt.addLayersStore(new Ar({id:"editing",queryable:!1})),this.state.editableLayers={},this.state._toolboxes=[],this.state.toolboxes=[],(await Promise.allSettled(Oe.getLayers({EDITABLE:!0},{TOC_ORDER:!0}).map(e=>e.getLayerForEditing({vectorurl:this.config.vectorurl,project_type:this.config.project_type})))).forEach(({status:e,value:s})=>{if(e!=="fulfilled"){this.state.layers_in_error=!0;return}this.state.editableLayers[s.getId()]=s,this.state.uniqueFieldsValues[s.getId()]={},s.getEditingFields().filter(i=>i.input&&i.input.type==="select_autocomplete"&&!i.input.options.filter_expression&&!i.input.options.usecompleter).forEach(i=>["start-editing","show-relation-editing"].forEach(a=>{let n=s.getId();this.state.events[a][n]=this.state.events[a][n]||[],this.state.events[a][n].push(async()=>{let r=i.input.options;r.loading.state="loading",r.values=[];let l=r.layer_id&&Oe.getLayerById(r.layer_id),g=[void 0,null].includes(r.filter_fields||[])||(r.filter_fields||[]).length===0;try{if(r.relation_reference&&g){let o=await s.getFilterData({fformatter:i.name});if(o&&o.data)return r.values.push(...o.data.map(([h,f])=>({key:f,value:h}))),r.loading.state="ready",this.fireEvent("autocomplete",{field:i,data:[o.data]}),r.values}if(l){let o=await w(l.getDataTable({ordering:r.orderbyvalue?r.value:r.key}));if(o&&o.features)return r.values.push(...(o.features||[]).map(h=>({key:h.properties[r.value],value:h.properties[r.key]}))),r.loading.state="ready",this.fireEvent("autocomplete",{field:i,features:o.features}),r.values}let c=[];return r.loading.state="ready",this.fireEvent("autocomplete",{field:i,features:c}),c}catch(c){return console.warn(c),r.loading.state="error",Promise.reject(c)}})})),this.state.sessions[s.getId()]=null});let t=0;this.getLayers().forEach(e=>{let s=e.getId();Oe.getLayerById(s).getRelations().getArray().filter(i=>i.getType()==="ONE"&&s===i.getFather()).forEach(i=>{let a=this.getLayerById(i.getChild())!==void 0;this.getLayerById(i.getFather()).getEditingFields().filter(n=>n.vectorjoin_id&&n.vectorjoin_id===i.getId()).forEach(n=>{n.editable=n.editable&&a})}),e.getColor()||e.setColor(e.isGeoLayer()?["#C43C39","#d95f02","#91522D","#7F9801","#0B2637","#8D5A99","#85B66F","#8D2307","#2B83BA","#7D8B8F","#E8718D","#1E434C","#9B4F07","#1b9e77","#FF9E17","#7570b3","#204B24","#9795A3","#C94F44","#7B9F35","#373276","#882D61","#AA9039","#F38F3A","#712333","#3B3A73","#9E5165","#A51E22","#261326","#e4572e","#29335c","#f3a712","#669bbc","#eb6841","#4f372d","#cc2a36","#00a0b0","#00b159","#f37735","#ffc425"][t++%40]:"#fff")}),pt.getLayersStore("editing").addLayers(this.getLayers()),this.getLayers().forEach(e=>this.addToolBox(new J(e,[...e.getChildren(),...e.getFathers()].filter(s=>this.getLayerById(s))))),await P.isReady(),this._setupGUI(),this.setHookLoading({loading:!1}),this.setReady(!0)}async _setupGUI(){!this.registerPlugin(this.config.gid)||this.config.visible===!1||this.getLayers().filter(t=>t.config.editing.visible).length===0||(this.state.editFeatureKey=P.getService("queryresults").onafter("editFeature",async({layer:t,feature:e}={})=>{let s=e.attributes[Pr]||e.id;if(s===void 0)return;this.getToolBoxes().forEach(l=>l.setShow(t.id===l.getId())),this.showEditingPanel(),this.state.showselectlayers=!1,this.subscribe("closeeditingpanel",()=>(this.state.showselectlayers=!0,{once:!0}));let i=this.getToolBoxById(t.id);i.setSelected(!0);let a=i.getSession(),{scale:n}=i.getEditingConstraints(),r;try{if(n){let p=P.getService("map").getMapUnits(),_=P.getService("map").getMap();parseInt(Dr(_.getView().getResolution(),P.getService("map").getMapUnits()))>n&&_.getView().setResolution(Ur(n,p))}await w(i.start({filter:{fids:s}}));let l=i.getLayer(),g=l.getEditingLayer().getSource(),c=qs.LayerTypes.VECTOR===l.getType(),h=(c?g.getFeatures():g.readFeatures()).find(p=>s==p.getId());if(!h)return;let f=h.getGeometry();f&&P.getService("map").zoomToGeometry(f),i.setSelected(!0),this.state.toolboxselected=i;let u=c&&!f&&i.getTools().find(p=>p.getId()==="addPart");if(u&&!Xs.isMultiGeometry(l.getGeometryType())&&(u.visible=!0),u){let p=u.getOperator(),_=new y({type:"drawgeometry",helpMessage:"editing.workflow.steps.draw_geometry",runOnce:!0,steps:[new Q({add:!1,steps:{addfeature:{description:"editing.workflow.steps.draw_geometry"}},onRun:({inputs:m,context:v})=>{_.emit("settoolsoftool",[{type:"snap",options:{layerId:m.layer.getId(),source:m.layer.getEditingLayer().getSource(),active:!0}},{type:"measure",options:{active:!1}}]),_.emit("active",["snap"])},onStop:()=>_.emit("deactive",["snap","measure"])}),new F({run:rt})],registerEscKeyEvent:!0});u.setOperator(_),this.subscribe("closeeditingpanel",()=>{u.setOperator(p),u.visible=Xs.isMultiGeometry(l.getGeometryType())})}r=new y({type:"editnopickmapfeatureattributes",runOnce:!0,helpMessage:"editing.tools.update_feature",steps:[new R]}),await w(r.start({inputs:{layer:l,features:[h]},context:{session:a}})),await w(a.save()),this.saveChange()}catch(l){console.warn(l),a.rollback()}finally{r.stop()}}),this.config.name=this.config.name||"plugins.editing.editing_data",this.addToolGroup({position:0,title:"EDITING"}),this.addTools({action:this.showEditingPanel,offline:!1,icon:"pencil"},{position:0,title:"EDITING"}))}getSession({layerId:t}={}){return this.getToolBoxById(t).getSession()}getFeature({layerId:t}={}){return this.getToolBoxById(t).getActiveTool().getLayer().features[0]}subscribe(t,e){return this.state.subscribers[t]||(this.state.subscribers[t]=[]),this.state.subscribers[t].find(s=>e===s)||this.state.subscribers[t].push(e),e}unsubscribe(t,e){this.state.subscribers[t]=this.state.subscribers[t].filter(s=>e!==s)}async fireEvent(t,e={}){this.state.subscribers[t]&&this.state.subscribers[t].forEach(s=>{let i=s(e);i&&i.once&&this.unsubscribe(t,s)})}undo(){let t=this.state.toolboxselected.getSession(),e=t.getId(),s=t.getLastHistoryState().items;this.undoRedoLayerUniqueFieldValues({layerId:e,sessionItems:s,action:"undo"});let i=t.undo();this.undoRedoRelationUniqueFieldValues({relationSessionItems:i,action:"undo"}),Object.entries(i).forEach(([a,n])=>{this.getToolBoxById(a).getSession().undo(n)})}redo(){let t=this.state.toolboxselected.getSession(),e=t.getId(),s=t.getLastHistoryState().items;this.undoRedoLayerUniqueFieldValues({layerId:e,sessionItems:s,action:"redo"});let i=t.redo();this.undoRedoRelationUniqueFieldValues({relationSessionItems:i,action:"redo"}),Object.entries(i).forEach(([a,n])=>{this.getToolBoxById(a).getSession().redo(n)})}getEditingLayer(t){return this.state.editableLayers[t].getEditingLayer()}addToolBox(t){this.state._toolboxes.push(t),this.state.sessions[t.getId()]=t.getSession(),this.state.toolboxes.push(t.state)}async runEventHandler({type:t,id:e}={}){this.state.events[t]&&this.state.events[t][e]&&await Promise.allSettled(this.state.events[t][e].map(s=>s()))}resetDefault(){this.state.saveConfig={mode:"default",modal:!1,messages:void 0,cb:{done:()=>{},error:()=>{}}},P.getService("map").disableClickMapControls(!1)}resetAPIDefault({plugin:t=!0,toolboxes:e=!0}={}){e&&this.getToolBoxes().forEach(s=>s.resetDefault()),t&&this.resetDefault()}getLayers(){return Object.values(this.state.editableLayers)}getLayerById(t){return this.state.editableLayers[t]}getToolBoxById(t){return this.state._toolboxes.find(e=>t===e.getId())}getSessionById(t){return this.state.sessions[t]}setApplicationEditingConstraints(t={showToolboxesExcluded:!0,toolboxes:{}}){this.state.constraints={...this.state.constraints,...t};let{toolboxes:e,showToolboxesExcluded:s}=t,i=Object.keys(e);s===!1&&this.state.toolboxes.forEach(a=>a.show=i.includes(a.id)),i.forEach(a=>this.getToolBoxById(a).setEditingConstraints(e[a]))}getToolBoxes(){return this.state._toolboxes}getEditableLayers(){return this.state.editableLayers}async stop(){let t=this.state._toolboxes.filter(e=>e.getSession().getHistory().state.commit).map(e=>this.commit({toolbox:e,modal:!0}));try{await w($.when.apply(this,t))}catch(e){console.warn(e)}this.state._toolboxes.forEach(e=>e.stop()),this.state.toolboxselected=null,this.state.message=null,Object.keys(this.state.uniqueFieldsValues).forEach(e=>this.state.uniqueFieldsValues[e]={}),P.getService("map").refreshMap()}async saveChange(){if(this.state.saveConfig.mode==="autosave")return this.commit({modal:!1})}commit({toolbox:t,commitItems:e,modal:s=!0,close:i=!1}={}){let a=Object.assign({success:{message:"plugins.editing.messages.saved",autoclose:!0},error:{}},this.state.saveConfig.messages||{});t=t||this.state.toolboxselected;let n=t.getLayer(),r=e;e=e||t.getSession().getCommitItems();let l=Gs.online,g=[...e.add||[],...e.delete||[],...e.update||[],...Object.keys(e.relations||{})].length,c,o,h;return b(async()=>{if(!g)return P.showUserMessage({type:"info",message:"Nothing to save",autoclose:!0,closable:!1}),t;try{if(s){c=new y({type:"commitfeatures",steps:[new F({run(p){return b(new Promise((_,m)=>{let v=P.dialog.dialog({message:p.message,title:`${Hs("editing.messages.commit_feature")}: "${p.layer.getName()}"`,buttons:{SAVE:{className:"btn-success",callback(){_(p)},label:zt("save")},CANCEL:{className:"btn-danger",callback(){m({cancel:!0})},label:zt(p.close?"exitnosave":"annul")},...p.close?{CLOSEMODAL:{className:"btn-primary",callback(){v.modal("hide")},label:zt("annul")}}:{}}});p.features&&V({promise:promise(),inputs:p,style:this.selectStyle})}))}})]});try{await w(c.start({inputs:{close:i,layer:n,message:new(Vue.extend((Ds(),xe(js)).default))({propsData:{commits:e,layer:n}}).$mount().$el}})),await w(c.stop())}catch(p){if(console.warn(p),p&&p.cancel)return Promise.reject(p);h=!0}l&&(o=P.dialog.dialog({message:`

+Activation scale at 1:`},pdf:"Document preview not available. Please click here ",commit:{header:"The following list show all changes to commit.",header_add:"Added show the number of features added",header_update_delete:"Modified and Deleted show the list of features id",add:"Added(n. features)",delete:"Deleted(id)",update:"Modified(id)"},loading_table_data:"Building Data Table. Please wait ...",copy_and_paste_from_other_layer_mandatory_fields:"It is necessary to fill in any mandatory fields on the features pasted before saving",no_feature_selected:"No feature selected",select_min_2_features:"Select at least 2 features"},relation:{table:{info:"
Select relations to link it to current editing feature.
"},draw_new_feature:"Draw new feature",draw_or_copy:"or",copy_feature_from_other_layer:"Copy feature from other layer"},form:{relations:{tooltips:{back_to_father:"Back to edit father",add_relation:"Create and link new relation",link_relation:"Join a relation to this feature",open_relation_tools:"Show relation tools",unlink_relation:"Unlink relation"}},buttons:{save:"Insert/Edit",save_and_back:"Save and Back",save_and_back_table:"Save and Back",cancel:"Ignore Changes"}},modal:{tools:{copyfeaturefromotherlayer:{title:"Select layer",edit_attributes:"Edit attributes of pasted features in multiple mode"},copyfeaturefromprojectlayer:{title:"Select a feature"}}}};var As={it:ks,en:Es,fi:Is,se:Cs,fr:Ts,de:Ls,ro:Rs,pl:Ps};ee();pe();D();var{Feature:Za}=g3wsdk.core.layer.features;function Ms(t,e={}){let s=new Za;e.geometry&&s.setGeometry(new ol.geom[e.geometry.type](e.geometry.coordinates)),s.setProperties(e.properties),s.setTemporaryId();let i=this.getToolBoxById(t),a=i.getLayer().getEditingLayer(),n=i.getSession();return a.getSource().addFeature(s),n.pushAdd(t,s,!1),s}Ae();Ue();Xe();var{G3W_FID:Pr}=g3wsdk.constant,{ApplicationState:Gs,ApplicationService:$t}=g3wsdk.core,{CatalogLayersStoresRegistry:Oe}=g3wsdk.core.catalog,{t:zt,tPlugin:Hs}=g3wsdk.core.i18n,{Layer:qs,LayersStore:Ar}=g3wsdk.core.layer,{Feature:Js}=g3wsdk.core.layer.features,{MapLayersStoreRegistry:pt}=g3wsdk.core.map,{Plugin:Mr,PluginService:Br}=g3wsdk.core.plugin,{XHR:Ks,noop:Ws}=g3wsdk.core.utils,{GUI:P}=g3wsdk.gui,{Panel:Or}=g3wsdk.gui.vue,{Server:jr}=g3wsdk.core.errors.parsers,{Geometry:Xs}=g3wsdk.core.geoutils,{getScaleFromResolution:Dr,getResolutionFromScale:Ur}=g3wsdk.ol.utils;Object.entries({Workflow:y,OpenFormStep:R,AddFeatureStep:Q,ToolBox:J}).forEach(([t,e])=>console.assert(e!==void 0,`${t} is undefined`));new class extends Mr{constructor(){super({name:"editing",i18n:As,fontClasses:[{name:"measure",className:"fas fa-ruler-combined"},{name:"magnete",className:"fas fa-magnet"},{name:"clipboard",className:"fas fa-clipboard"}]}),this.state={open:!1,toolboxes:[],_toolboxes:[],toolboxselected:null,showselectlayers:!0,message:null,relations:[],sessions:{},layers_in_error:!1,formComponents:{},subscribers:{},constraints:{toolboxes:{},showToolboxesExcluded:!0},featuresOnClose:{},uniqueFieldsValues:{},saveConfig:{mode:"default",modal:!1,messages:void 0,cb:{done:()=>{},error:()=>{}}},editableLayers:{},events:{"start-editing":{},"show-relation-editing":{},layer:{start_editing:{before:{},after:{}}}},show_errors:!1,editFeatureKey:void 0,panel:null,currentLayout:$t.getCurrentLayoutName(),unwatchLayout:new Vue().$watch(()=>Gs.gui.layout.__current,t=>this.state.currentLayout=t!==this.getName()?t:this.state.currentLayout),onMapControlToggled:({target:t})=>{t.isToggled()&&t.isClickMap()&&this.state.toolboxselected&&this.state.toolboxselected.getActiveTool()&&this.state.toolboxselected.stopActiveTool()}},this.setService(Object.assign(new Br,{state:this.state,config:this.config,getSession:this.getSession.bind(this),getFeature:this.getFeature.bind(this),subscribe:this.subscribe.bind(this),unsubscribe:this.unsubscribe.bind(this),fireEvent:this.fireEvent.bind(this),undo:this.undo.bind(this),redo:this.redo.bind(this),getEditingLayer:this.getEditingLayer.bind(this),addToolBox:this.addToolBox.bind(this),runEventHandler:this.runEventHandler.bind(this),resetDefault:this.resetDefault.bind(this),resetAPIDefault:this.resetAPIDefault.bind(this),getLayers:this.getLayers.bind(this),getLayerById:this.getLayerById.bind(this),getToolBoxById:this.getToolBoxById.bind(this),getSessionById:this.getSessionById.bind(this),setApplicationEditingConstraints:this.setApplicationEditingConstraints.bind(this),getToolBoxes:this.getToolBoxes.bind(this),getEditableLayers:this.getEditableLayers.bind(this),stop:this.stop.bind(this),saveChange:this.saveChange.bind(this),commit:this.commit.bind(this),undoRedoLayerUniqueFieldValues:this.undoRedoLayerUniqueFieldValues.bind(this),undoRedoRelationUniqueFieldValues:this.undoRedoRelationUniqueFieldValues.bind(this),stopEditing:this.stopEditing.bind(this),startEditing:this.startEditing.bind(this),addLayerFeature:this.addLayerFeature.bind(this)})),P.getService("map").on("mapcontrol:toggled",this.state.onMapControlToggled),this._init()}async _init(){if(!Oe.getLayers({EDITABLE:!0}).length)return;this.setHookLoading({loading:!0}),this.service.setApi({api:{getSession:this.getSession.bind(this),getFeature:this.getFeature.bind(this),subscribe:this.subscribe.bind(this),unsubscribe:this.unsubscribe.bind(this),getToolBoxById:this.getToolBoxById.bind(this),addNewFeature:Ms,commitChanges:this.commit.bind(this),setApplicationEditingConstraints:this.setApplicationEditingConstraints.bind(this),getMapService:()=>P.getService("map"),updateLayerFeature:Ws,deleteLayerFeature:Ws,addLayerFeature:this.addLayerFeature.bind(this),hidePanel:this.hideEditingPanel.bind(this),resetDefault:this.resetAPIDefault.bind(this),startEditing:this.startEditing.bind(this),stopEditing:this.stopEditing.bind(this),showPanel:this.showPanel.bind(this),setSaveConfig:this.setSaveConfig.bind(this),addFormComponents:this.addFormComponents.bind(this)}}),pt.addLayersStore(new Ar({id:"editing",queryable:!1})),this.state.editableLayers={},this.state._toolboxes=[],this.state.toolboxes=[],(await Promise.allSettled(Oe.getLayers({EDITABLE:!0},{TOC_ORDER:!0}).map(e=>e.getLayerForEditing({vectorurl:this.config.vectorurl,project_type:this.config.project_type})))).forEach(({status:e,value:s})=>{if(e!=="fulfilled"){this.state.layers_in_error=!0;return}this.state.editableLayers[s.getId()]=s,this.state.uniqueFieldsValues[s.getId()]={},s.getEditingFields().filter(i=>i.input&&i.input.type==="select_autocomplete"&&!i.input.options.filter_expression&&!i.input.options.usecompleter).forEach(i=>["start-editing","show-relation-editing"].forEach(a=>{let n=s.getId();this.state.events[a][n]=this.state.events[a][n]||[],this.state.events[a][n].push(async()=>{let r=i.input.options;r.loading.state="loading",r.values=[];let l=r.layer_id&&Oe.getLayerById(r.layer_id),g=[void 0,null].includes(r.filter_fields||[])||(r.filter_fields||[]).length===0;try{if(r.relation_reference&&g){let o=await s.getFilterData({fformatter:i.name});if(o&&o.data)return r.values.push(...o.data.map(([h,f])=>({key:f,value:h}))),r.loading.state="ready",this.fireEvent("autocomplete",{field:i,data:[o.data]}),r.values}if(l){let o=await w(l.getDataTable({ordering:r.orderbyvalue?r.value:r.key}));if(o&&o.features)return r.values.push(...(o.features||[]).map(h=>({key:h.properties[r.value],value:h.properties[r.key]}))),r.loading.state="ready",this.fireEvent("autocomplete",{field:i,features:o.features}),r.values}let c=[];return r.loading.state="ready",this.fireEvent("autocomplete",{field:i,features:c}),c}catch(c){return console.warn(c),r.loading.state="error",Promise.reject(c)}})})),this.state.sessions[s.getId()]=null});let t=0;this.getLayers().forEach(e=>{let s=e.getId();Oe.getLayerById(s).getRelations().getArray().filter(i=>i.getType()==="ONE"&&s===i.getFather()).forEach(i=>{let a=this.getLayerById(i.getChild())!==void 0;this.getLayerById(i.getFather()).getEditingFields().filter(n=>n.vectorjoin_id&&n.vectorjoin_id===i.getId()).forEach(n=>{n.editable=n.editable&&a})}),e.getColor()||e.setColor(e.isGeoLayer()?["#C43C39","#d95f02","#91522D","#7F9801","#0B2637","#8D5A99","#85B66F","#8D2307","#2B83BA","#7D8B8F","#E8718D","#1E434C","#9B4F07","#1b9e77","#FF9E17","#7570b3","#204B24","#9795A3","#C94F44","#7B9F35","#373276","#882D61","#AA9039","#F38F3A","#712333","#3B3A73","#9E5165","#A51E22","#261326","#e4572e","#29335c","#f3a712","#669bbc","#eb6841","#4f372d","#cc2a36","#00a0b0","#00b159","#f37735","#ffc425"][t++%40]:"#fff")}),pt.getLayersStore("editing").addLayers(this.getLayers()),this.getLayers().forEach(e=>this.addToolBox(new J(e,[...e.getChildren(),...e.getFathers()].filter(s=>this.getLayerById(s))))),await P.isReady(),this._setupGUI(),this.setHookLoading({loading:!1}),this.setReady(!0)}async _setupGUI(){!this.registerPlugin(this.config.gid)||this.config.visible===!1||this.getLayers().filter(t=>t.config.editing.visible).length===0||(this.state.editFeatureKey=P.getService("queryresults").onafter("editFeature",async({layer:t,feature:e}={})=>{let s=e.attributes[Pr]||e.id;if(s===void 0)return;this.getToolBoxes().forEach(l=>l.setShow(t.id===l.getId())),this.showEditingPanel(),this.state.showselectlayers=!1,this.subscribe("closeeditingpanel",()=>(this.state.showselectlayers=!0,{once:!0}));let i=this.getToolBoxById(t.id);i.setSelected(!0);let a=i.getSession(),{scale:n}=i.getEditingConstraints(),r;try{if(n){let p=P.getService("map").getMapUnits(),_=P.getService("map").getMap();parseInt(Dr(_.getView().getResolution(),P.getService("map").getMapUnits()))>n&&_.getView().setResolution(Ur(n,p))}await w(i.start({filter:{fids:s}}));let l=i.getLayer(),g=l.getEditingLayer().getSource(),c=qs.LayerTypes.VECTOR===l.getType(),h=(c?g.getFeatures():g.readFeatures()).find(p=>s==p.getId());if(!h)return;let f=h.getGeometry();f&&P.getService("map").zoomToGeometry(f),i.setSelected(!0),this.state.toolboxselected=i;let u=c&&!f&&i.getTools().find(p=>p.getId()==="addPart");if(u&&!Xs.isMultiGeometry(l.getGeometryType())&&(u.visible=!0),u){let p=u.getOperator(),_=new y({type:"drawgeometry",helpMessage:"editing.workflow.steps.draw_geometry",runOnce:!0,steps:[new Q({add:!1,steps:{addfeature:{description:"editing.workflow.steps.draw_geometry"}},onRun:({inputs:m,context:v})=>{_.emit("settoolsoftool",[{type:"snap",options:{layerId:m.layer.getId(),source:m.layer.getEditingLayer().getSource(),active:!0}},{type:"measure",options:{active:!1}}]),_.emit("active",["snap"])},onStop:()=>_.emit("deactive",["snap","measure"])}),new F({run:rt})],registerEscKeyEvent:!0});u.setOperator(_),this.subscribe("closeeditingpanel",()=>{u.setOperator(p),u.visible=Xs.isMultiGeometry(l.getGeometryType())})}r=new y({type:"editnopickmapfeatureattributes",runOnce:!0,helpMessage:"editing.tools.update_feature",steps:[new R]}),await w(r.start({inputs:{layer:l,features:[h]},context:{session:a}})),await w(a.save()),this.saveChange()}catch(l){console.warn(l),a.rollback()}finally{r.stop()}}),this.config.name=this.config.name||"plugins.editing.editing_data",this.addToolGroup({position:0,title:"EDITING"}),this.addTools({action:this.showEditingPanel,offline:!1,icon:"pencil"},{position:0,title:"EDITING"}))}getSession({layerId:t}={}){return this.getToolBoxById(t).getSession()}getFeature({layerId:t}={}){return this.getToolBoxById(t).getActiveTool().getLayer().features[0]}subscribe(t,e){return this.state.subscribers[t]||(this.state.subscribers[t]=[]),this.state.subscribers[t].find(s=>e===s)||this.state.subscribers[t].push(e),e}unsubscribe(t,e){this.state.subscribers[t]=this.state.subscribers[t].filter(s=>e!==s)}async fireEvent(t,e={}){this.state.subscribers[t]&&this.state.subscribers[t].forEach(s=>{let i=s(e);i&&i.once&&this.unsubscribe(t,s)})}undo(){let t=this.state.toolboxselected.getSession(),e=t.getId(),s=t.getLastHistoryState().items;this.undoRedoLayerUniqueFieldValues({layerId:e,sessionItems:s,action:"undo"});let i=t.undo();this.undoRedoRelationUniqueFieldValues({relationSessionItems:i,action:"undo"}),Object.entries(i).forEach(([a,n])=>{this.getToolBoxById(a).getSession().undo(n)})}redo(){let t=this.state.toolboxselected.getSession(),e=t.getId(),s=t.getLastHistoryState().items;this.undoRedoLayerUniqueFieldValues({layerId:e,sessionItems:s,action:"redo"});let i=t.redo();this.undoRedoRelationUniqueFieldValues({relationSessionItems:i,action:"redo"}),Object.entries(i).forEach(([a,n])=>{this.getToolBoxById(a).getSession().redo(n)})}getEditingLayer(t){return this.state.editableLayers[t].getEditingLayer()}addToolBox(t){this.state._toolboxes.push(t),this.state.sessions[t.getId()]=t.getSession(),this.state.toolboxes.push(t.state)}async runEventHandler({type:t,id:e}={}){this.state.events[t]&&this.state.events[t][e]&&await Promise.allSettled(this.state.events[t][e].map(s=>s()))}resetDefault(){this.state.saveConfig={mode:"default",modal:!1,messages:void 0,cb:{done:()=>{},error:()=>{}}},P.getService("map").disableClickMapControls(!1)}resetAPIDefault({plugin:t=!0,toolboxes:e=!0}={}){e&&this.getToolBoxes().forEach(s=>s.resetDefault()),t&&this.resetDefault()}getLayers(){return Object.values(this.state.editableLayers)}getLayerById(t){return this.state.editableLayers[t]}getToolBoxById(t){return this.state._toolboxes.find(e=>t===e.getId())}getSessionById(t){return this.state.sessions[t]}setApplicationEditingConstraints(t={showToolboxesExcluded:!0,toolboxes:{}}){this.state.constraints={...this.state.constraints,...t};let{toolboxes:e,showToolboxesExcluded:s}=t,i=Object.keys(e);s===!1&&this.state.toolboxes.forEach(a=>a.show=i.includes(a.id)),i.forEach(a=>this.getToolBoxById(a).setEditingConstraints(e[a]))}getToolBoxes(){return this.state._toolboxes}getEditableLayers(){return this.state.editableLayers}async stop(){let t=this.state._toolboxes.filter(e=>e.getSession().getHistory().state.commit).map(e=>this.commit({toolbox:e,modal:!0}));try{await w($.when.apply(this,t))}catch(e){console.warn(e)}this.state._toolboxes.forEach(e=>e.stop()),this.state.toolboxselected=null,this.state.message=null,Object.keys(this.state.uniqueFieldsValues).forEach(e=>this.state.uniqueFieldsValues[e]={}),P.getService("map").refreshMap()}async saveChange(){if(this.state.saveConfig.mode==="autosave")return this.commit({modal:!1})}commit({toolbox:t,commitItems:e,modal:s=!0,close:i=!1}={}){let a=Object.assign({success:{message:"plugins.editing.messages.saved",autoclose:!0},error:{}},this.state.saveConfig.messages||{});t=t||this.state.toolboxselected;let n=t.getLayer(),r=e;e=e||t.getSession().getCommitItems();let l=Gs.online,g=[...e.add||[],...e.delete||[],...e.update||[],...Object.keys(e.relations||{})].length,c,o,h;return b(async()=>{if(!g)return P.showUserMessage({type:"info",message:"Nothing to save",autoclose:!0,closable:!1}),t;try{if(s){c=new y({type:"commitfeatures",steps:[new F({run(p){return b(new Promise((_,m)=>{let v=P.dialog.dialog({message:p.message,title:`${Hs("editing.messages.commit_feature")}: "${p.layer.getName()}"`,buttons:{SAVE:{className:"btn-success",callback(){_(p)},label:zt("save")},CANCEL:{className:"btn-danger",callback(){m({cancel:!0})},label:zt(p.close?"exitnosave":"annul")},...p.close?{CLOSEMODAL:{className:"btn-primary",callback(){v.modal("hide")},label:zt("annul")}}:{}}});p.features&&V({promise:promise(),inputs:p,style:this.selectStyle})}))}})]});try{await w(c.start({inputs:{close:i,layer:n,message:new(Vue.extend((Ds(),xe(js)).default))({propsData:{commits:e,layer:n}}).$mount().$el}})),await w(c.stop())}catch(p){if(console.warn(p),p&&p.cancel)return Promise.reject(p);h=!0}l&&(o=P.dialog.dialog({message:`

${Hs("editing.messages.saving")}

`,closeButton:!1}))}let f=!l&&{[t.getSession().getId()]:e},u=!l&&JSON.parse(window.localStorage.getItem("EDITING_CHANGES")||null);Object.keys(u||{}).forEach(p=>{let _=Object.keys(f)[0],m=null;f[p]?m=f:f[_].relations[p]&&(m=f[_].relations);let v=!m&&Object.keys(u[p].relations||{}),k=!m&&v.length>0,S=!m&&k&&v.includes(_);if(m||S){let x=m?p:_,E=m||f,A=m?u:u[p].relations;E[x].add=[...E[x].add,...E[x].add],E[x].delete=[...E[x].delete,...E[x].delete],(A[x].update||[]).filter(C=>!E[x].update.find(G=>G.id===C.id)).forEach(C=>E[x].update.unshift(C)),(A[x].lockids||[]).filter(C=>!E[x].lockids.find(G=>G.featureid===C.featureid)).forEach(C=>E[x].update.unshift(C))}S&&(u[p].relations[_]=f[_],f=u),!m&&!k&&(f[p]=u[p])}),l||(P.showUserMessage({type:"success",message:"plugins.editing.messages.saved_local",autoclose:!0}),t.getSession().clearHistory());try{let{commit:p,response:_}=l?await w(t.getSession().commit({items:r||e,__esPromise:!0})):{},m=l&&p,v=m&&_.result;v&&a&&a.success&&(o&&o.modal("hide"),P.showUserMessage({type:"success",message:a.success.message||"plugins.editing.messages.saved",duration:2e3,autoclose:a.success.autoclose===void 0?!0:a.success.autoclose})),v&&qs.LayerTypes.VECTOR===n.getType()&&P.getService("map").refreshMap({force:!0}),l&&this.state.saveConfig.cb.done(t);let k=v&&t.getId();if(k&&(this.state.featuresOnClose[k]=this.state.featuresOnClose[k]||new Set,[..._.response.new.map(S=>S.id),...p.update.map(S=>S.id)].forEach(S=>this.state.featuresOnClose[k].add(S))),v&&this.emit("commit",_.response),m&&!v)throw h=!0,_}catch(p){if(console.warn(p),l)throw h=!0,p}}catch(f){if(console.warn(f),o&&o.modal("hide"),s)try{await Ys(e.relations)}catch(u){console.warn(u)}if(h||s){let u=l?a.error.message||new jr({error:f.errors||f||{}}).parse({type:"String"}):f;P.showUserMessage({type:"alert",message:u,textMessage:l?!a.error.message:!0,autoclose:l&&a.error.autoclose!==void 0?a.error.autoclose:!1}),this.state.saveConfig.cb.error(t,u)}return Promise.reject(t)}return t})}undoRedoLayerUniqueFieldValues({layerId:t,sessionItems:e=[],action:s}){this.state.uniqueFieldsValues[t]!==void 0&&e.forEach(i=>{Object.keys(this.state.uniqueFieldsValues[t]).forEach(a=>{let n=Array.isArray(i),r,l;if(n){let g=i[1].feature.get(a)!=i[0].feature.get(a);r=g?s==="undo"?i[1].feature.get(a):i[0].feature.get(a):void 0,l=g?s==="undo"?i[0].feature.get(a):i[1].feature.get(a):void 0}else r=i.feature.getState()==="add"?i.feature.get(a):void 0,l=i.feature.getState()==="delete"?i.feature.get(a):void 0;r!==void 0&&this.state.uniqueFieldsValues[t][a].delete(r),l!==void 0&&this.state.uniqueFieldsValues[t][a].add(l)})})}undoRedoRelationUniqueFieldValues({relationSessionItems:t={},action:e}){Object.entries(t).forEach(([s,{own:i,dependencies:a}])=>{this.undoRedoLayerUniqueFieldValues({layerId:s,sessionItems:i,action:e}),this.undoRedoRelationUniqueFieldValues({relationSessionItems:a,action:e})})}async stopEditing(t,e={}){return w(this.getToolBoxById(t).stop(e))}async startEditing(t,e={},s=!1){e.selected=e.selected===void 0?!0:e.selected,e.showselectlayers=e.showselectlayers===void 0?!0:e.showselectlayers,e.disablemapcontrols=e.disablemapcontrols===void 0?!1:e.showselectlayers;let i=this.getToolBoxById(t);return this.state.showselectlayers=e.showselectlayers,i?(i.setSelected(e.selected),e.selected&&(this.state.toolboxselected=i),e.title&&i.setTitle(e.title),s=await w(i.start(e)),e.disablemapcontrols&&P.getService("map").disableClickMapControls(!0),s?{toolbox:i,data:s}:i):Promise.reject()}addLayerFeature({layerId:t,feature:e}={}){return[e,t].includes(void 0)?Promise.reject():new Promise(async(s,i)=>{let a=this.getLayerById(t),n=this.getSessionById(t),r=a.getEditingFields().filter(c=>!(c.pk&&!c.editable));n.start({filter:{nofeatures:!0,nofeatures_field:r[0].name},editing:!0});let l=new y({type:"addfeature",steps:[new R({push:!0,showgoback:!1,saveAll:!1})]}),g=c=>(l.stop(),n.stop(),c());try{r.forEach(c=>{e.get(c.name)===void 0&&e.set(c.name,null)});try{e=new Js({feature:e,properties:r.map(c=>c.name)}),e.setTemporaryId(),n.pushAdd(t,e,!1),a.getEditingLayer().getSource().addFeature(e),await w(l.start({inputs:{layer:a,features:[e]},context:{session:n}})),n.save();try{await w(this.commit({modal:!1,toolbox:this.getToolBoxById(t)})),g(s)}catch(c){console.warn(c),g(i)}}catch(c){console.warn(c),g(i)}}catch(c){console.warn(c),i()}})}setSaveConfig({mode:t="default",cb:e={},modal:s=!1,messages:i}={}){Object.assign(this.state.saveConfig,{mode:t,modal:s,messages:i,cb:{...this.state.saveConfig.cb,...e}})}addFormComponents({layerId:t,components:e=[]}={}){this.state.formComponents[t]=(this.state.formComponents[t]||[]).concat(e)}showPanel(t={}){t.toolboxes&&Array.isArray(t.toolboxes)&&this.getToolBoxes().forEach(e=>e.setShow(t.toolboxes.includes(e.getId()))),this.showEditingPanel(t)}showEditingPanel(t={}){return this.getLayers().filter(e=>e.config.editing.visible).length>0?(this.state.panel=new Or({...t,id:"editing-panel",title:t.title||"plugins.editing.editing_data",internalPanel:new(Vue.extend((zs(),xe($s)).default))({service:this,resourcesurl:t.resourcesUrl||P.getResourcesUrl(),showcommitbar:t.showcommitbar!==void 0?t.showcommitbar:!0})}),P.showPanel(this.state.panel),!this.state.show_errors&&this.state.layers_in_error&&(P.showUserMessage({type:"warning",message:"plugins.editing.errors.some_layers",closable:!0}),this.state.show_errors=!0)):P.showUserMessage({type:"alert",message:"plugins.editing.errors.no_layers"}),this.state.panel}hideEditingPanel(){this.state.panel!==null&&(P.closePanel(),this.state.panel=null)}unload(){this.hideEditingPanel(),this.config.visible&&this.removeTools(),this.state.unwatchLayout(),pt.removeLayersStore(pt.getLayersStore("editing")),J.clear(),P.getService("map").off("mapcontrol:toggled",this.state.onMapControlToggled),P.getService("queryresults").un("editFeature",this.state.editFeatureKey)}setCurrentLayout(){$t.setCurrentLayout(this.getName())}resetCurrentLayout(){$t.setCurrentLayout(this.state.currentLayout)}getActiveTool(){return this.getToolBoxes().filter(t=>t.getActiveTool())[0]}};async function Ys(t={}){return Promise.allSettled(Object.entries(t).flatMap(([e,{add:s,delete:i,update:a,relations:n={}}])=>{let r=X(e).getEditingSource(),l=r.readFeatures().length>0;return[...(l&&s||[]).map(async({id:g})=>{r.removeFeature(r.getFeatureById(g))}),...(l&&a||[]).map(async({id:g})=>{try{let c=await Ks.get({url:Oe.getLayerById(e).getUrl("data"),params:{fids:g}}),o=(c.result&&c.vector.data.features||[]).at(0),h=r.getFeatureById(g);h.setProperties(o.properties),h.setGeometry(o.geometry)}catch(c){console.warn(c)}}),...i.map(async g=>{try{let c=await Ks.get({url:Oe.getLayerById(e).getUrl("data"),params:{fids:g}}),o=(c.result&&c.vector.data.features||[]).at(0),h=new ol.Feature({geometry:o.geometry});h.setProperties(o.properties),h.setId(g),r.addFeature(new Js({feature:h}))}catch(c){console.warn(c)}}),Ys(n)]}))}})(); //# sourceMappingURL=plugin.js.map diff --git a/g3w-admin/editing/static/editing/js/plugin.js.map b/g3w-admin/editing/static/editing/js/plugin.js.map index 6c516e3e9..2073b6ce9 100644 --- a/g3w-admin/editing/static/editing/js/plugin.js.map +++ b/g3w-admin/editing/static/editing/js/plugin.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../../../../../../g3w-client/src/plugins/editing/utils/promisify.js", "../../../../../../../g3w-client/src/plugins/editing/g3wsdk/workflow/step.js", "../../../../../../../g3w-client/src/plugins/editing/components/UserMessage.vue", "../../../../../../../g3w-client/src/plugins/editing/g3wsdk/workflow/workflow.js", "../../../../../../../g3w-client/src/plugins/editing/utils/createEditingDataOptions.js", "../../../../../../../g3w-client/src/plugins/editing/utils/setLayerUniqueFieldValues.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getRelationId.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getRelationsInEditing.js", "../../../../../../../g3w-client/src/plugins/editing/utils/setFeaturesSelectedStyle.js", "../../../../../../../g3w-client/src/plugins/editing/utils/setAndUnsetSelectedFeaturesStyle.js", "../../../../../../../g3w-client/src/plugins/editing/components/ChooseFeatureToEdit.vue", "../../../../../../../g3w-client/src/plugins/editing/utils/chooseFeatureFromFeatures.js", "../../../../../../../g3w-client/src/plugins/editing/utils/cloneFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getParentFormData.js", "../../../../../../../g3w-client/src/plugins/editing/utils/evaluateExpressionFields.js", "../../../../../../../g3w-client/src/plugins/editing/utils/isSameBaseGeometryType.js", "../../../../../../../g3w-client/src/plugins/editing/utils/convertToGeometry.js", "../../../../../../../g3w-client/src/plugins/editing/utils/addTableFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getRelationFieldsFromRelation.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getLayersDependencyFeatures.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getEditingLayerById.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getRelationsInEditingByFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/updateWorkflows.js", "../../../../../../../g3w-client/src/plugins/editing/interactions/pickfeaturesinteraction.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getFormFields.js", "../../../../../../../g3w-client/src/plugins/editing/utils/handleRelation1_1LayerFields.js", "../../../../../../../g3w-client/src/plugins/editing/eventbus.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getRelation1_1ChildFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/listenRelation1_1FieldChange.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getFeatureTableFieldValue.js", "../../../../../../../g3w-client/src/plugins/editing/utils/addRemoveToMultipleSelectFeatures.js", "../../../../../../../g3w-client/src/plugins/editing/components/FormRelation.vue", "../../../../../../../g3w-client/src/plugins/editing/components/Table.vue", "../../../../../../../g3w-client/src/plugins/editing/workflows/index.js", "../../../../../../../g3w-client/src/plugins/editing/components/CopyFeaturesFromOtherLayers.vue", "../../../../../../../g3w-client/src/plugins/editing/utils/areCoordinatesEqual.js", "../../../../../../../g3w-client/src/plugins/editing/components/Changes.vue", "../../../../../../../g3w-client/src/plugins/editing/components/Toolbox.vue", "../../../../../../../g3w-client/src/plugins/editing/components/Editing.vue", "../../../../../../../g3w-client/src/plugins/editing/toolboxes/toolbox.js", "../../../../../../../g3w-client/src/plugins/editing/utils/chooseFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getNotEditableFieldsNoPkValues.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getDeltaXY.js", "../../../../../../../g3w-client/src/plugins/editing/utils/isPointOnVertex.js", "../../../../../../../g3w-client/src/plugins/editing/utils/handleSplitFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/addPartToMultigeometries.js", "../../../../../../../g3w-client/src/plugins/editing/utils/checkSessionItems.js", "../../../../../../../g3w-client/src/plugins/editing/utils/unlinkRelation.js", "../../../../../../../g3w-client/src/plugins/editing/utils/splitFeatures.js", "../../../../../../../g3w-client/src/plugins/editing/g3wsdk/editing/editor.js", "../../../../../../../g3w-client/src/plugins/editing/g3wsdk/index.js", "../../../../../../../g3w-client/src/utils/promisify.js", "../../../../../../../g3w-client/src/plugins/editing/deprecated.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/it.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/en.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/fi.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/se.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/fr.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/de.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/ro.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/pl.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/index.js", "../../../../../../../g3w-client/src/plugins/editing/index.js", "../../../../../../../g3w-client/src/plugins/editing/utils/createFeature.js"], - "sourcesContent": ["/**\n * Migrate your consumer code away from jQuery promises.\n * Covert a jQuery promise into an ES6 Promise\n *\n * @param promise jquery promise\n */\nexport function promisify(promise) {\n if (promise instanceof Promise) {\n return promise;\n }\n if (!promise || !promise.then) {\n console.trace(promise);\n return Promise.reject('not a promise');\n }\n return new Promise((resolve, reject) => {\n promise.then(resolve).fail(reject);\n });\n}\n\n/**\n * Migrate your consumer code away from jQuery promises.\n * Convert ES6 Promise into jQuery\n *\n * @param promise async function or ES6 promise\n */\nexport function $promisify(promise) {\n if (undefined === promise) {\n console.trace();\n return $.Deferred(d => d.reject('not a promise')).promise();\n }\n if (promise.always) {\n return promise;\n }\n return $.Deferred(async d => {\n try { d.resolve(await (promise instanceof Promise ? promise : promise())); }\n catch (e) { console.warn(e); d.reject(e); }\n }).promise();\n}", "/**\n * @file\n * \n * ORIGINAL SOURCE: g3w-client/src/core/workflow/step.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.x\n */\nimport { promisify, $promisify } from '../../utils/promisify';\n\nconst { G3WObject } = g3wsdk.core;\nconst { isPointGeometryType } = g3wsdk.core.geoutils.Geometry;\nconst { Layer } = g3wsdk.core.layer;\nconst { GUI } = g3wsdk.gui;\n\n/**\n * @param options.input\n * @param options.context\n * @param options.task\n * @param options.outputs\n * @param options.escKeyPressEventHandler\n * @param options.id\n * @param options.name\n * @param options.help\n * @param options.message\n */\nexport class Step extends G3WObject {\n \n constructor(options = {}) {\n\n super();\n\n this._options = options;\n\n //store promise of current running step when call run\n this._run = (options.run || this.run || (async () => true)).bind(this);\n //store promise of current running step when call stop\n this._stop = (options.stop || this.stop || (async () => true)).bind(this);\n\n /**\n * @FIXME add description\n */\n this._inputs = options.inputs || null;\n\n /**\n * @FIXME add description\n */\n this._context = options.context || null;\n\n /**\n * @FIXME add description\n */\n this._outputs = options.outputs || null;\n\n /**\n * Dynamic state of a step\n */\n this.state = {\n id: options.id || null,\n name: options.name || null,\n help: options.help || null, // help to show what the user has to do\n running: false, // running\n error: null, // error\n message: options.message || null, // message\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n usermessagesteps: {}\n };\n\n this.registerEscKeyEvent(options.escKeyPressEventHandler)\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n this.selectStyle = options.selectStyle;\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n if (options.steps) {\n this.setSteps(options.steps);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/addfeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/addfeaturestep.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n if (options.onRun) {\n this.on('run', options.onRun);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/addfeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/addfeaturestep.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n if (options.onStop) {\n this.on('stop', options.onStop);\n }\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n if (options.tools) {\n this._tools = options.tools;\n }\n\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * Set and get task usefult properties used to run\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setInputs(inputs) {\n this._inputs = this.inputs = inputs;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getInputs() {\n return this._inputs;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @param context\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setContext(context) {\n return this._context = this.context = context;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getContext() {\n return this.context;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n panic() {\n console.log('Panic to implement ..');\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @param task\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setRoot(task) {\n this.state.root = task;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @returns { Object }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getUserMessageSteps() {\n return this.state.usermessagesteps;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @param steps\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setUserMessageSteps(steps = {}) {\n this.state.usermessagesteps = steps;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @param type\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setUserMessageStepDone(type) {\n if (type) {\n this.state.usermessagesteps[type].done = true;\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n addInteraction(interaction, events = {}) {\n GUI.getService('map').addInteraction(interaction);\n Object.entries(events).forEach(([type, handler]) => interaction.on(type, handler));\n this.on('stop', () => this.removeInteraction(interaction));\n return interaction;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n removeInteraction(interaction) {\n setTimeout(() => GUI.getService('map').removeInteraction(interaction)) // timeout needed to work around an Openlayers issue\n }\n\n /**\n * @TODO code implementation\n *\n * Get editing type from editing config\n *\n * @returns { null }\n */\n getEditingType() {\n return null;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n registerPointerMoveCursor() {\n GUI.getService('map').getMap().on(\"pointermove\", this._pointerMoveCursor)\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n unregisterPointerMoveCursor() {\n GUI.getService('map').getMap().un(\"pointermove\", this._pointerMoveCursor)\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param evt\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _pointerMoveCursor(evt) {\n this.getTargetElement().style.cursor = (this.forEachFeatureAtPixel(evt.pixel, () => true) ? 'pointer' : '');\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param steps\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setSteps(steps = {}) {\n this._steps = steps;\n this.setUserMessageSteps(steps);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @returns { Object }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getSteps() {\n return this._steps;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getMap() {\n return GUI.getService('map').getMap();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n *\n * Disable sidebar\n *\n * @param {Boolean} bool\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n disableSidebar(bool = true) {\n if (!this._isContentChild) {\n GUI.disableSideBar(bool);\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n *\n * @param event\n * @param options\n *\n * @returns {*}\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n fireEvent(event, options = {}) {\n return g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').fireEvent(event, options);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Handle single task\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n saveSingle(input, context) {\n context.session.save().then(() => g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').saveChange());\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Cancel single task\n *\n * @param input\n * @param context\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n cancelSingle(input, context) {\n context.session.rollback();\n }\n\n /**\n * Bind interrupt event on keys escape pressed\n * \n * @param evt.key\n * @param evt.data.callback\n * @param evt.data.task\n */\n escKeyUpHandler(evt) {\n if ('Escape' === evt.key) {\n evt.data.callback({ task: evt.data.task });\n }\n }\n\n /**\n * @FIXME add description\n */\n unbindEscKeyUp() {\n $(document).unbind('keyup', this.escKeyUpHandler);\n }\n\n /**\n * @FIXME add description\n */\n bindEscKeyUp(callback = () => {}) {\n $(document).on('keyup', { callback, task: this }, this.escKeyUpHandler);\n }\n\n /**\n * @listens run\n * @listens stop\n */\n registerEscKeyEvent(callback) {\n if (callback) {\n this.on('run', () => this.bindEscKeyUp(callback));\n this.on('stop', () => this.unbindEscKeyUp());\n }\n }\n\n /**\n * \n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Start task\n * \n * @param inputs\n * @param context\n * \n * @returns jQuery promise\n * \n * @fires run\n */ \n __run(inputs, context) {\n return $promisify(async() => {\n //set step inputs\n this.setInputs(inputs);\n //set step context\n this.setContext(context);\n\n const step = this;\n const toolsOfTools = {\n\n snap: {\n type: 'snap',\n options: {\n checkedAll: false,\n checked: false,\n active: true,\n run({ layer }) {\n this.active = true;\n this.layerId = layer.getId();\n this.source = layer.getEditingLayer().getSource();\n },\n stop() {\n this.active = false;\n }\n }\n },\n \n measure: {\n type: 'measure',\n options: {\n checked: false,\n run() {\n setTimeout(() => { this.onChange(this.checked); })\n },\n stop() {\n step.removeMeasureInteraction();\n this.onChange(false);\n },\n onChange(bool) {\n this.checked = bool;\n step[bool ? 'addMeasureInteraction': 'removeMeasureInteraction']();\n },\n }\n },\n \n };\n\n if (this._tools && 0 === this._workflow._toolsoftool.length) {\n this._workflow._toolsoftool.push(...(\n this._tools\n .filter(tool => ('measure' !== tool || (Layer.LayerTypes.VECTOR === inputs.layer.getType() && !isPointGeometryType(inputs.layer.getGeometryType()))))\n .map(tool => toolsOfTools[tool])\n ));\n }\n\n if (this._tools) {\n this._workflow._toolsoftool.forEach(t => t.options.run({ layer: inputs.layer }));\n this._workflow.emit('settoolsoftool', this._workflow._toolsoftool);\n }\n\n this.emit('run', { inputs, context });\n\n try {\n this.state.running = true; // change state to running\n return await promisify(this._run(inputs, context));\n } catch(e) {\n console.warn(e);\n this.state.error = e;\n return Promise.reject(e);\n } finally {\n this.__stop();\n }\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n *\n * Stop step\n *\n * @fires stop\n */\n async __stop() {\n await this._stop(this._inputs, this._context); // stop task\n this.state.running = false; // remove running state\n if (this._workflow) {\n this._workflow._toolsoftool.forEach(t => t.options.stop());\n }\n this.emit('stop');\n }\n\n /**\n * @FIXME add description\n */\n getId() {\n return this.state.id;\n }\n\n /**\n * @FIXME add description\n */\n getName() {\n return this.state.name;\n }\n\n /**\n * @FIXME add description\n */\n getHelp() {\n return this.state.help;\n }\n\n /**\n * @FIXME add description\n */\n getError() {\n return this.state.error;\n }\n\n /**\n * @FIXME add description\n */\n getMessage() {\n return this.state.message;\n }\n\n /**\n * @FIXME add description\n */\n isRunning() {\n return this.state.running;\n }\n\n /**\n * @FIXME add description\n */\n getTask() {\n return this;\n }\n\n /**\n * @FIXME add description\n */\n setOutputs(outputs) {\n this._outputs = outputs;\n }\n\n /**\n * @FIXME add description\n */\n getOutputs() {\n return this._outputs;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @param workflow\n * @param tools\n * \n * @since g3w-client-editing@v3.8.0\n */\n setToolsOfTools(workflow, tools = [] ) {\n this._workflow = workflow;\n this._tools = tools;\n }\n\n}\n\n/**\n * @FIXME add description\n */\nStep.MESSAGES = {\n help: null,\n};", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n const __vue_script__ = {\n\n data: () => ({ steps: {} }),\n\n methods: {\n completeStep(step) {\n step.done = true;\n step.buttonnext.done();\n },\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',{staticClass:\"steps-list\"},_vm._l((_vm.steps),function(step,id){return _c('li',{key:id,class:{ 'done': step.done },style:({ display: step.buttonnext && 'inline-flex' })},[(step.buttonnext)?_c('span',{staticClass:\"button-step\"},[_c('span',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:(step.description),expression:\"step.description\"}],staticClass:\"description\"}),_vm._v(\" \"),(step.dynamic)?_c('span',{staticClass:\"dynamic-step\"},[_vm._v(_vm._s(step.dynamic))]):_vm._e(),_vm._v(\" \"),_c('button',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.workflow.next'),expression:\"'editing.workflow.next'\"}],class:'btn btn-success' + (step.buttonnext.disabled ? ' g3w-disabled' : '' ),staticStyle:{\"margin-left\":\"10px\"},on:{\"click\":function($event){return _vm.completeStep(step)}}})]):[_c('i',{class:_vm.g3wtemplate.getFontClass(step.done ? 'success' : 'empty-circle')}),_vm._v(\" \"),_c('span',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:(step.description),expression:\"step.description\"}]})]],2)}),0)}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-fa9bb800_0\", { source: \".steps-list[data-v-fa9bb800]{align-self:flex-start;list-style:none;padding:10px;margin-bottom:0}li[data-v-fa9bb800]{margin-bottom:5px}li.done[data-v-fa9bb800]{font-weight:700;color:green}li.done>.description[data-v-fa9bb800]{font-weight:700}.dynamic-step[data-v-fa9bb800]{padding:10px;font-size:1.2em}.button-step[data-v-fa9bb800]{display:inline-flex;align-items:center}.button-step[data-v-fa9bb800],button.btn-success[data-v-fa9bb800]{font-weight:700;align-self:normal}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-fa9bb800\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"UserMessage.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "\n/**\n * @file\n * \n * ORIGINAL SOURCE: g3w-client/src/core/workflow/workflow.js@v3.9.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.x\n */\n\nimport { Step } from './step';\nimport { promisify, $promisify } from '../../utils/promisify';\n\nconst { GUI } = g3wsdk.gui;\nconst { G3WObject } = g3wsdk.core;\n\n/**\n * Workflow Class (manage flow of steps)\n *\n * @param options.inputs\n * @param options.context\n * @param options.flow\n * @param options.steps\n * @param options.runOnce\n * @param options.backbuttonlabel\n */\nexport class Workflow extends G3WObject {\n \n constructor(options = {}) {\n\n super();\n\n /** @since g3w-client-plugin-editing@v3.8.0*/\n this._type = undefined !== options.type ? options.type : null;\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n this._options = options;\n\n /**\n * @FIXME add description\n */\n this._promise = null;\n\n /**\n * Mandatory inputs to work with editing\n */\n this._inputs = undefined !== options.inputs ? options.inputs : null;\n\n /**\n * @FIXME add description\n */\n this._context = undefined !== options.context ? options.context : null;\n\n /**\n * All steps of flow\n */\n this._steps = options.steps || [];\n\n /**\n * Whether is child of another workflow\n */\n this._child = null;\n\n /**\n * stack workflowindex\n */\n this._stackIndex = null;\n\n /**\n * Stop when flow stop\n */\n this.runOnce = options.runOnce || false;\n\n /**\n * @FIXME add description\n */\n this._messages = Step.MESSAGES;\n\n /**\n * Store user messages steps to show when workflow\n * use a mandatory steps (ex. select: {description}, merge: {description}}\n */\n this._userMessageSteps = {};\n\n if (this._steps.length > 0) {\n this.setUserMessagesSteps(this._steps);\n }\n\n /**\n * Holds back button label (in case of child workflow)\n * \n * @since 3.9.0\n */\n this.backbuttonlabel = undefined !== options.backbuttonlabel ? options.backbuttonlabel : null;\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n this.helpMessage = options.helpMessage ? { help: options.helpMessage } : null;\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n this._toolsoftool = [];\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n if (true === options.registerEscKeyEvent) {\n this.registerEscKeyEvent();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/flow.js@v3.9.1\n * \n * Current flow step\n * \n * @since g3w-client-editing@v3.8.0\n */\n this._stepIndex = 0;\n\n }\n\n /**\n *\n * @param steps\n */\n setUserMessagesSteps(steps) {\n this._userMessageSteps = steps\n .reduce((messagesSteps, step) => ({\n ...messagesSteps,\n ...(step.getUserMessageSteps() || {})\n }), {});\n }\n\n /**\n * Check if it is in same type\n *\n * @param {String | Array.} type\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n isType(type) {\n if (Array.isArray(type)) {\n return Boolean(type.find(t => t === this._type));\n }\n return type === this._type;\n }\n\n /**\n * @returns { * }\n */\n getContextService() {\n return this.getContext().service;\n }\n\n /**\n * @param service\n */\n setContextService(service) {\n this.getContext().service = service;\n }\n\n /**\n * @returns { null | * }\n */\n getStackIndex() {\n return this._stackIndex;\n }\n\n /**\n * @param workflow\n */\n addChild(workflow) {\n if (this._child) {\n this._child.addChild(workflow);\n } else {\n this._child = workflow;\n }\n }\n\n /**\n * @param input.key\n * @param input.value\n */\n setInput({ key, value }) {\n this._inputs[key] = value;\n }\n\n /**\n * @returns { null | * }\n */\n getInputs() {\n return this._inputs;\n }\n\n /**\n * @param context\n */\n setContext(context) {\n this._context = context;\n }\n\n /**\n * @returns { * | {} | null }\n */\n getContext() {\n return this._context;\n }\n\n /**\n * @param step\n */\n addStep(step) {\n this._steps.push(step);\n }\n\n /**\n * @param steps\n */\n setSteps(steps = []) {\n this._steps = steps;\n this.setUserMessagesSteps(steps);\n }\n\n /**\n * @returns { * | Array }\n */\n getSteps() {\n return this._steps;\n }\n\n /**\n * @param index\n * \n * @returns { * }\n */\n getStep(index) {\n return this._steps[index];\n }\n\n /**\n * @param messages\n */\n setMessages(messages) {\n Object.assign(this._messages, messages);\n }\n\n /**\n * @FIXME add description\n */\n getMessages() {\n return this._messages;\n }\n\n /**\n * @FIXME add description\n */\n clearMessages() {\n this._messages.help = null;\n if (Object.keys(this._userMessageSteps).length > 0) {\n this.clearUserMessagesSteps();\n }\n }\n\n /**\n * @returns { * | null }\n */\n getLastStep() {\n return this._steps.length > 0 ? this._steps[ this._steps.length - 1 ] : null;\n }\n\n /**\n * @returns { Object }\n */\n getRunningStep() {\n return this._steps.find(s => s.isRunning());\n }\n\n /**\n * @FIXME add description\n */\n reject() {\n if (this._promise) {\n this._promise.reject();\n }\n this.emit('reject');\n }\n\n /**\n * @FIXME add description\n */\n resolve() {\n if (this._promise) {\n this._promise.resolve();\n }\n }\n\n /**\n * Method to run steps of workflow\n * @param step\n * @param inputs\n * @return {Promise}\n */\n async runStep(step, inputs) {\n try {\n //set step message\n this.setMessages({ help: step.state.help });\n //run step\n const outputs = await promisify(step.__run(inputs, this.getContext()));\n // onDone \u2192 check if all step is resolved\n this._stepIndex++;\n //check if is the last of workflow steps\n if (this._stepIndex === this.getSteps().length) {\n this._stepIndex = 0;\n return outputs;\n } else {\n return this.runStep(this.getSteps()[this._stepIndex], outputs);\n }\n } catch(e) { //In case of reject\n this._stepIndex = 0;\n return Promise.reject(e);\n }\n }\n\n /**\n * Start workflow\n * \n * @param options.inputs\n * @param options.context\n * @param options.flow\n * @param options.steps\n * \n * @fires start\n */\n start(options = {}) {\n return $promisify( new Promise(async (resolve, reject) => {\n this._promise = { resolve, reject };\n this._inputs = options.inputs;\n this._context = options.context || {};\n \n const isChild = this._context.isChild || false;\n \n // stop child when a workflow is running \n if (\n !isChild\n && Workflow.Stack.getLength()\n && Workflow.Stack.getCurrent() !== this\n ) {\n Workflow.Stack.getCurrent().addChild(this)\n }\n\n //get stack index\n this._stackIndex = Workflow.Stack.push(this);\n //get steps\n this._steps = options.steps || this._steps;\n //for each step assign current workflow to _workflow\n (this._steps || []).forEach(s => s._workflow = this);\n \n const showUserMessage = Object.keys(this._userMessageSteps).length > 0;\n \n if (showUserMessage) {\n GUI.showUserMessage({\n title: 'plugins.editing.workflow.title.steps',\n type: 'tool',\n position: 'left',\n size: 'small',\n closable: false,\n hooks: {\n body: {\n ...require('../../components/UserMessage.vue').default,\n data: () => ({\n steps: this._userMessageSteps,\n })\n }\n }\n });\n }\n //emit start Workflow\n this.emit('start');\n \n try {\n console.assert(0 === this._stepIndex, `reset workflow before restarting: ${this._stepIndex}`)\n //start flow of workflow\n const outputs = await this.runStep(this.getSteps()[this._stepIndex], this.getInputs());\n //In case of show user message (tool steps)\n if (showUserMessage) {\n setTimeout(() => { this.clearUserMessagesSteps(); resolve(outputs); }, 500);\n } else {\n resolve(outputs);\n }\n } catch(e) {\n console.warn(e);\n if (showUserMessage) {\n this.clearUserMessagesSteps();\n }\n reject(e);\n }\n\n //in case of worflow that need to run once time, stop workflow\n if (this.runOnce) {\n this.stop();\n }\n }));\n }\n\n /**\n * Stop workflow during flow\n * \n * @fires stop\n */\n async stop() {\n return $promisify(new Promise(async (resolve, reject) => {\n\n this._promise = null;\n\n try {\n // stop child workflow\n if (this._child) {\n await promisify(this._child.stop());\n }\n } catch(e) {\n console.warn(e);\n }\n //remove child\n this._child = null;\n\n // stop flow\n try {\n //get current step\n const step = this.getSteps()[this._stepIndex];\n //check if it is running\n if (step.isRunning()) {\n //clear messages steps\n this.clearMessages();\n //wait stop run\n await step.__stop();\n }\n // reset counter and reject flow\n if (this._stepIndex > 0) {\n this._stepIndex = 0;\n reject();\n return Promise.reject();\n } else {\n resolve();\n }\n } catch(e) {\n console.warn(e);\n reject(e);\n }\n\n //remove workflow from stack\n Workflow.Stack.removeAt(this.getStackIndex());\n\n //emit stop Workflow\n this.emit('stop');\n\n }));\n }\n\n /**\n * Reset user message steps\n */\n clearUserMessagesSteps() {\n Object\n .keys(this._userMessageSteps)\n .forEach(type => {\n const step = this._userMessageSteps[type];\n step.done = false;\n if (step.buttonnext) {\n step.buttonnext.disabled = true;\n }\n })\n GUI.closeUserMessage();\n }\n\n /**\n * @since 3.9.0\n */\n setBackButtonLabel(label = null) {\n this.backbuttonlabel = label;\n }\n\n /**\n * @returns { null }\n * \n * @since 3.9.0\n */\n getBackButtonLabel() {\n return this.backbuttonlabel;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @param step\n * @param tools\n * \n * @since g3w-client-editing@v3.8.0\n */\n addToolsOfTools({ step, tools = [] }) {\n step.setToolsOfTools(this, tools);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n setHelpMessage(message) {\n this.helpMessage = { help: message };\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n getHelpMessage() {\n return this.helpMessage;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n getFeatures() {\n return this.getInputs().features;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n startFromLastStep(options = {}) {\n this.setSteps([ this.getSteps().pop() ]);\n return this.start(options);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n getCurrentFeature() {\n const feats = this.getFeatures();\n return feats[feats.length - 1];\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n getLayer() {\n return this.getInputs().layer;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n getSession() {\n return this.getContext().session;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * bind interupt event\n * \n * @since g3w-client-editing@v3.8.0\n */\n escKeyUpHandler(evt) {\n if (27 === evt.keyCode) {\n evt.data.workflow.reject();\n evt.data.callback();\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n unbindEscKeyUp() {\n $(document).unbind('keyup', this.escKeyUpHandler);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n bindEscKeyUp(callback = () => {}) {\n $(document).on('keyup', { workflow: this, callback }, this.escKeyUpHandler);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n registerEscKeyEvent(callback) {\n this.on('start', () => this.bindEscKeyUp(callback));\n this.on('stop', () => this.unbindEscKeyUp());\n }\n\n}\n\n/** @type { Workflow[] } */\nconst workflows = [];\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/services/workflow.js@v3.9.1\n * \n * Store all activated workflows\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nWorkflow.Stack = {\n _workflows: workflows,\n push(workflow) { return workflows.includes(workflow) ? workflows.indexOf(workflow) : (workflows.push(workflow) - 1); },\n getParent() { return workflows.slice(-2)[0]; },\n getParents() { return workflows.slice(0, -1); },\n pop() { return workflows.pop(); },\n getLength() { return workflows.length; },\n getFirst() { return workflows[0]; },\n getCurrent() { return Workflow.Stack.getLast(); },\n getLast() { return workflows.slice(-1)[0]; },\n removeAt(i) { workflows.splice(i, 1); },\n insertAt(i, w) { workflows[i] = w; },\n getAt(i) { return workflows[i]; },\n async clear() { workflows.splice(0); }\n};", "const { GUI } = g3wsdk.gui;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { 'all' | 'bbox' | 'field' | 'fid' | '1:1' } filterType\n * @param { Object } options\n * @param options.feature\n * @param options.relation\n * @param options.field\n * @param options.layerId\n * @param options.operator\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function createEditingDataOptions(filterType = 'all', options = {}) {\n let filter;\n\n switch (filterType) {\n\n case 'all':\n filter = undefined;\n break;\n\n case 'bbox':\n filter = { bbox: GUI.getService('map').getMapBBOX(), };\n break;\n\n case 'field':\n filter = {\n field: { field: options.field, type: 'editing' }\n };\n break;\n\n case 'fid':\n if ('not' !== options.operator) { // get relations of current feature\n filter = {\n fid: {\n fid: options.feature.getId(),\n layer: { id: options.layerId },\n type: 'editing',\n relation: options.relation.state,\n formatter: 0, // 0 = retrieve stored value\n }\n };\n }\n break;\n\n // relation 1:1\n case '1:1':\n filter = {\n field: options.relation.getChildField()[0] + '|eq|' + options.feature.get(options.relation.getFatherField()[0]),\n type: 'editing',\n }\n break;\n\n }\n\n return {\n registerEvents: true, // usefult to get register vent on toolbox example mapmoveend\n editing: true,\n filter\n };\n\n}", "const { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * Method to get unique values of unique input values from server\n * It's called\n * - When toolbox start (parent layer and relation)\n * - After commit to server (to get fresh new data)\n * \n * @param { string } layerId\n *\n * @returns { Promise<*> }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport async function setLayerUniqueFieldValues(layerId) {\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing'); //get editing service\n await new Promise((resolve, reject) => {\n const layer = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').getLayerById(layerId);\n //get all values for unique field\n layer.getWidgetData({\n type: 'unique',\n fields: Object.values(layer\n .getEditingFields()\n //filter field that is unique and not yet set unique values\n .filter(f => !(f.pk && false === f.editable) && ('unique' === f.input.type || f.validate.unique)))\n .map(f => f.name).join()\n }).then((response) => {\n Object\n .entries(response.data || {})\n .forEach(([name, values]) => {\n service.state.uniqueFieldsValues[layerId][name] = new Set(values)\n })\n\n resolve(service.state.uniqueFieldsValues[layerId][name])\n })\n .fail(e => { console.warn(e); reject(e); })\n })\n return service.state.uniqueFieldsValues[layerId];\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } opts\n * @param opts.layerId\n * @param opts.relation\n *\n * @returns the layer id of the other layer that is in relation with layerId\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getRelationId({\n layerId,\n relation,\n} = {}) {\n const fatherId = relation.getFather ? relation.getFather() : relation.father;\n const childId = relation.getChild ? relation.getChild() : relation.child;\n\n return layerId === fatherId ? childId : fatherId;\n}", "import { getRelationId } from '../utils/getRelationId';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } opts\n * @param opts.layerId\n * @param opts.relations\n *\n * @returns { Array }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getRelationsInEditing({\n layerId,\n relations = [],\n}) {\n return relations.filter(r => g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').getToolBoxById(getRelationId({ layerId, relation: r })));\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Get selected style from \"extracted\" original feature style \n * \n * @param feature\n * \n * @returns {{ originalStyle: *, selectedStyle: * }} selected style based on a geometry type\n */\nfunction getSelectedStyle(feature) {\n return {\n originalStyle: feature.getStyle(),\n selectedStyle: feature.getGeometry()\n ? g3wsdk.core.geoutils.createSelectedStyle({ geometryType: feature.getGeometry().getType() })\n : feature.getStyle()\n }\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Set selected style to feature and return original feature style\n * \n * @param { Array } features\n * @param { ol.style.Style } style @since 3.8.0 custom select style\n * \n * @returns { ol.style.Style }\n */\nexport function setFeaturesSelectedStyle(features = [], style) {\n if (features.length > 0) {\n // copy feature from other layers when selecting multiple features\n const arr = features.flat(); // flat nested features\n const { originalStyle, selectedStyle } = getSelectedStyle(arr[0]);\n\n arr.forEach(f => f.setStyle(style || selectedStyle));\n\n return originalStyle;\n }\n}", "import { Workflow } from '../g3wsdk/workflow/workflow';\nimport { promisify } from '../utils/promisify';\nimport { setFeaturesSelectedStyle } from '../utils/setFeaturesSelectedStyle';\n\nconst { Layer } = g3wsdk.core.layer;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Method that set selected style to current editing features and\n * reset original style when workflow (tool) is done.\n * \n * @param promise jQuery promise\n * @param { Object } inputs\n * @param { ol.style.Style } style\n */\nexport function setAndUnsetSelectedFeaturesStyle({ promise, inputs, style } = {}) {\n \n /** @FIXME temporary add in order to fix issue on pending promise (but which issue ?) */\n const {\n layer,\n features = [],\n } = inputs;\n\n /**\n * @TODO if coming from relation ( Workflow.Stack.getLength() > 1 )\n * no need setTimeout because we already it has selected style\n * so original is the same selected. In case of current layer\n * need to wait.\n */\n const selectOriginalStyleHandle = () => {\n const originalStyle = setFeaturesSelectedStyle(features, style);\n promisify(promise).finally(() => { features.flat().forEach((f => f.setStyle(originalStyle))) });\n };\n\n const is_vector = Layer.LayerTypes.VECTOR === layer.getType();\n const is_single = Workflow.Stack.getLength();\n\n if (is_vector && is_single) {\n setTimeout(() => selectOriginalStyleHandle());\n } else if (is_vector) {\n selectOriginalStyleHandle();\n }\n}", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n const { GUI } = g3wsdk.gui;\n\n const __vue_script__ = {\n\n name: 'choosefeature',\n\n data() {\n return {\n feature: this.$options.feature,\n };\n },\n\n methods: {\n\n selectFeature(feature) {\n this.feature.splice(0);\n this.feature.push(feature);\n },\n\n getAttributesFeature(feature) {\n const properties = feature.getProperties();\n return this.$options.attributes.map(({ label, name }) => ({ attribute: label, value: properties[name] }));\n },\n\n zoomToFeature(feature) {\n GUI.getService('map').zoomToFeatures([feature] , { highlight: true, duration: 1000 });\n },\n\n },\n\n mounted() {\n GUI.closeContent();\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"editing-layers-choose-feature\"}},_vm._l((_vm.$options.features),function(feature,index){return _c('div',{staticClass:\"editing-choose-feature-radio-input\"},[_c('section',{staticClass:\"choose-and-zoom-to-feature\"},[_c('div',[_c('input',{staticClass:\"magic-radio\",attrs:{\"id\":(\"choose_feature_\" + index),\"name\":\"radio\",\"type\":\"radio\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.selectFeature(feature)}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":(\"choose_feature_\" + index)}},[_vm._v(\"id\")])]),_vm._v(\" \"),_c('div',{staticClass:\"ztf skin-color\",class:_vm.g3wtemplate.font['marker'],on:{\"click\":function($event){$event.stopPropagation();return _vm.zoomToFeature(feature)}}})]),_vm._v(\" \"),_c('section',{staticClass:\"feature-attributes\"},_vm._l((_vm.getAttributesFeature(feature)),function(ref){\nvar attribute = ref.attribute;\nvar value = ref.value;\nreturn _c('div',[_c('span',{staticClass:\"f-attr\"},[_vm._v(_vm._s(attribute))]),_vm._v(\" \"),_c('span',{staticClass:\"f-val\"},[_vm._v(_vm._s(value))])])}),0)])}),0)}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-a5a3297e_0\", { source: \".choose-and-zoom-to-feature[data-v-a5a3297e]{display:flex;flex-direction:column;justify-content:space-between}#editing-layers-choose-feature .editing-choose-feature-radio-input[data-v-a5a3297e]{align-items:center;padding:5px;position:relative;display:flex;justify-content:space-between;border-bottom:1px solid #eee}.ztf[data-v-a5a3297e]{padding-left:3px;font-size:1.3em;cursor:pointer;margin-top:10px}.magic-radio+label[data-v-a5a3297e]{color:transparent}.feature-attributes[data-v-a5a3297e]{overflow-x:auto;display:flex}.feature-attributes>div[data-v-a5a3297e]{display:flex;flex-direction:column;justify-content:space-between;padding:5px}.f-attr[data-v-a5a3297e]{font-weight:700;margin-bottom:10px}.f-val[data-v-a5a3297e]{align-self:start;white-space:nowrap}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-a5a3297e\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"ChooseFeatureToEdit.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "const { tPlugin } = g3wsdk.core.i18n;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/g3w-editing-components/choosefeaturetoedit.js@v3.6\n * \n * @since g3w-client-plugin-editing@v3.5.13\n */\nexport function chooseFeatureFromFeatures({\n features = [],\n inputs\n}) {\n return new Promise((resolve, reject) => {\n\n const feature = [];\n\n const comp = new (Vue.extend(require('../components/ChooseFeatureToEdit.vue').default))({\n features: Array.isArray(features) ? features : [],\n feature,\n attributes: inputs.layer.getEditingFields().map(({ name, label }) => ({ name, label })),\n });\n\n const dialog = g3wsdk.gui.GUI.showModalDialog({\n title: tPlugin('editing.modal.tools.copyfeaturefromprojectlayer.title'),\n className: 'modal-left',\n closeButton: false,\n message: comp.$mount().$el,\n buttons: {\n cancel: { label: 'Cancel', className: 'btn-danger', callback() { reject(); } },\n ok: { label: 'Ok', className: 'btn-success', callback() { resolve(feature[0]) } }\n }\n });\n\n dialog.find('button.btn-success').prop('disabled', true);\n\n comp.$watch('feature', feature => dialog.find('button.btn-success').prop('disabled', null === feature));\n })\n}", "/**\n * Clone a feature by Primary Key\n * \n * @param { Feature } feature to be cloned\n * @param { TableLayer } layer from which obtain the primary key field\n * \n * @returns { Feature }\n * \n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport function cloneFeature(feature, layer) {\n const clone = feature.cloneNew();\n //check if layer has a primary key as field\n const pk = layer && layer.getEditingFields().find(f => f.pk); // get PK field (of value-relation widget?)\n /**\n * In case of layer has a primary key field and is not editabe,\n * clone feature need to set pk value to null to avoid conflict\n * with already pk field value store on server*/\n if (pk && false === pk.editable) { clone.set(pk.name, null) }\n return clone;\n}", "import { Workflow } from '../g3wsdk/workflow/workflow';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @returns { undefined | { feature: * , qgs_layer_id: * } }\n */\nexport function getParentFormData() {\n // skip when ..\n if (!(Workflow.Stack.getLength() > 1)) {\n return;\n }\n\n const {\n features,\n layer,\n fields = [],\n } = Workflow.Stack.getParent().getInputs();\n\n // in the case of temporary fields (setted by form) set temporary value to feature (cloned) parent\n const feature = features[features.length -1].clone();\n\n fields.forEach(({ name, value }) => { feature.set(name, value) });\n\n return {\n feature,\n qgs_layer_id: layer.getId(),\n };\n}", "import { getParentFormData } from './getParentFormData';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param expression.inputs.layer\n * @param expression.context.excludeFields\n * @param expression.context.get_default_value\n * @param expression.feature\n *\n * @returns {Promise}\n *\n * @since g3w-client-plugin-editing@v3.5.14\n */\nexport async function evaluateExpressionFields({\n inputs,\n context,\n feature,\n} = {}) {\n const promises = []; // promises from expression evaluation\n\n inputs.layer\n .getFieldsWithValues(\n feature,\n {\n exclude: context.excludeFields,\n get_default_value: undefined !== context.get_default_value ? context.get_default_value : false,\n }\n )\n .forEach(field => {\n\n // default expression\n if (field.input.options.default_expression && (field.input.options.default_expression.apply_on_update || feature.isNew())) {\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n await g3wsdk.core.input.inputService.handleDefaultExpressionFormInput({\n field,\n feature,\n qgs_layer_id: inputs.layer.getId(),\n parentData: getParentFormData(),\n });\n feature.set(field.name, field.value);\n resolve(feature)\n } catch(e) {\n console.warn(e);\n reject(e);\n }\n })\n );\n }\n\n // filter expression\n if (field.input.options.filter_expression) {\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n await g3wsdk.core.input.inputService.handleFilterExpressionFormInput({\n field,\n feature,\n qgs_layer_id: inputs.layer.getId(),\n parentData: getParentFormData(),\n });\n feature.set(field.name, field.value);\n resolve(feature)\n } catch(e) {\n console.warn(e);\n reject(e);\n }\n })\n );\n }\n\n });\n\n await Promise.allSettled(promises);\n\n return feature;\n}", "/**\n * ORIGINAL SOURCE: g3w-client/src/utils/isSameBaseGeometryType.js@v3.10.2\n * \n * @param { string } geometryType1\n * @param { string } geometryType2\n * \n * @returns { boolean } whether two geometry typeshave same geometry type or have in common tha same base geometry type:\n * \n * @example Compare \n * ```\n * Point <--> Point => true\n * MultiPoint <--> Point => true\n * Point <--> Polygon => false\n * ```\n * \n * @since g3w-client-plugin-editing@v3.9.0\n */\nexport function isSameBaseGeometryType(a, b) {\n return a.replace('Multi','') === b.replace('Multi','');\n}", "import { isSameBaseGeometryType } from '../utils/isSameBaseGeometryType';\n\nconst { convertSingleMultiGeometry } = g3wsdk.core.geoutils;\nconst {\n is3DGeometry,\n removeZValueToOLFeatureGeometry,\n addZValueToOLFeatureGeometry,\n} = g3wsdk.core.geoutils.Geometry;\n\nconst { isMultiGeometry } = g3wsdk.core.geoutils.Geometry;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param { Array } features to be converted (eg. Polygon)\n * @param { string } geometryType target geometry type (eg. MultiPolygon)\n *\n * @returns { Array } converted features\n */\nexport function convertToGeometry(features = [], geometryType) {\n return (features || []).flatMap(f => {\n const type = f.getGeometry() && f.getGeometry().getType();\n\n // ensure 3D coords\n if (type && !is3DGeometry(geometryType)) {\n removeZValueToOLFeatureGeometry({ feature: f });\n } else if (type && is3DGeometry(geometryType)) {\n addZValueToOLFeatureGeometry({ feature: f, geometryType });\n }\n\n // same geometry\n if (geometryType === type) { return f }\n\n // convert single \u2192 multi\n if (isSameBaseGeometryType(type, geometryType) && (isMultiGeometry(geometryType) || !isMultiGeometry(type))) {\n const cloned = f.clone();\n cloned.__layerId = f.__layerId;\n cloned.setGeometry(convertSingleMultiGeometry(f.getGeometry(), geometryType));\n return cloned;\n }\n\n // skip \u2192 invalid conversion (eg. Point \u2192 Polygon)\n return [];\n });\n}", "import { $promisify } from './promisify';\n/**\n * \n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/addfeaturetabletask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/addtablefeaturestep.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function addTableFeature(inputs, context) {\n const feature = inputs.features.length > 0 ? inputs.features[inputs.features.length - 1 ] : inputs.layer.createNewFeature();\n\n feature.setTemporaryId();\n\n inputs.layer.getEditingLayer().getEditingSource().addFeature(feature);\n\n context.session.pushAdd(inputs.layer.getId(), feature, false);\n\n inputs.features.push(feature);\n\n context.get_default_value = true;\n\n return $promisify(Promise.resolve(inputs, context));\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Based on layerId and relation, extract field of relation.\n * ownField are array of fields related to relation and belong to layerId\n * relationField area array of fields related to relation thar belong to other layer in relation with layerId\n * \n * @param { Object } opts\n * @param opts.layerId\n * @param opts.relation\n *\n * @returns {{ ownField: [], relationField: [] }} `ownField` and `relationField` are Arrays since g3w-client-plugin-editing@v3.7.0\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getRelationFieldsFromRelation({\n layerId,\n relation,\n} = {}) {\n /** @type { string } */\n const childId = relation.getChild ? relation.getChild() : relation.child;\n /** @type { Boolean } whether is a child */\n const isChild = childId !== layerId;\n /** @type { Array } of fields */\n const _fatherField = relation.getFatherField ? relation.getFatherField() : relation.fatherField;\n /** @type { Array } of fields */\n const _childField = relation.getChildField ? relation.getChildField() : relation.childField;\n\n return {\n ownField: isChild ? _fatherField : _childField,\n relationField: isChild ? _childField : _fatherField\n }\n}", "import { promisify } from '../utils/promisify';\nimport { getRelationFieldsFromRelation } from '../utils/getRelationFieldsFromRelation';\nimport { getRelationId } from '../utils/getRelationId';\nimport { getRelationsInEditing } from '../utils/getRelationsInEditing';\nimport { createEditingDataOptions } from '../utils/createEditingDataOptions';\n\nconst { ApplicationState } = g3wsdk.core;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { string } layerId\n * @param opts\n *\n * @returns { Promise[]> }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport async function getLayersDependencyFeatures(layerId, opts = {}) {\n\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing'); //get editing service\n\n const layer = service.getLayerById(layerId);\n const relations = opts.relations\n || layer.getChildren().length && layer.getRelations() && getRelationsInEditing({ layerId, relations: layer.getRelations().getArray().filter(r => r.getFather() === layerId) })\n || [];\n\n let response;\n\n try {\n response = await Promise.all(relations.map(async relation => {\n\n if (relation.setLoading) { relation.setLoading(true) }\n else { relation.loading = true }\n\n const id = getRelationId({ layerId, relation });\n\n opts.relation = relation;\n opts.layerId = layerId;\n opts.filterType = 'ONE' === (relation.getType ? relation.getType() : relation.type) ? '1:1' : opts.filterType; // In a case of relation 1:1\n const filterType = opts.filterType || 'fid';\n const options = createEditingDataOptions(filterType, opts);\n const session = service.state.sessions[id];\n const online = ApplicationState.online && session;\n const toolbox = service.getToolBoxById(id);\n\n // getLayersDependencyFeaturesFromSource\n\n opts.operator = undefined !== opts.operator ? opts.operator : 'eq'; \n\n const { ownField, relationField } = getRelationFieldsFromRelation({ layerId: id, relation });\n const features = service.getLayerById(layerId).readEditingFeatures();\n const featureValues = relationField.map(field => opts.feature.get(field));\n\n // try to get feature from source without a server request\n const find = (\n (!ApplicationState.online || !session || session.isStarted())\n && 'eq' === opts.operator\n && ownField.every((field, i) => features.find(f => featureValues[i] == f.get(field)))\n );\n\n toolbox.startLoading();\n\n try {\n if (online && !session.isStarted()) {\n await promisify(session.start(options)); // start session and get features\n } else if (online && !find) {\n await promisify(session.getFeatures(options)); // request features from server\n }\n } catch (promise) {\n try { await promisify(promise) } catch (e) { console.warn(e, promise); }\n }\n\n toolbox.stopLoading();\n\n return id;\n }));\n } catch (e) {\n console.warn(e);\n }\n\n // at the end se loading false\n relations.forEach(relation => {\n if (relation.setLoading) { relation.setLoading(false) }\n else { relation.loading = false }\n });\n\n return response;\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getEditingLayerById(layerId) {\n return g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').getLayerById(layerId);\n}", "import { getRelationFieldsFromRelation } from '../utils/getRelationFieldsFromRelation';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Get Relation in editing\n *\n * @param { Object } opts\n * @param opts.layerId\n * @param opts.relations\n * @param opts.feature\n *\n * @returns { Array }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getRelationsInEditingByFeature({\n layerId,\n relations = [],\n feature,\n} = {}) {\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n\n let relationsinediting = [];\n let relationinediting;\n relations.forEach(relation => {\n const child = relation.getChild ? relation.getChild() : relation.child;\n const father = relation.getFatherField ? relation.getFatherField() : relation.fatherField;\n const relationLayerId = (child === layerId) ? father: child; // get relation LayerId\n //check if the layer is editable\n if (service.getLayerById(relationLayerId)) {\n const layer = service.getToolBoxById(relationLayerId).getLayer();\n const fatherLayer = service.getLayerById(relation.getFather ? relation.getFather() : relation.father);\n const { ownField, relationField } = getRelationFieldsFromRelation({ layerId: relationLayerId, relation });\n // get features of relation child layers\n // Loop relation fields\n // In case of new feature, need to check if field is pk field\n const values = relationField.map(field => feature.isNew() && fatherLayer.isPkField(field) ? feature.getId() : feature.get(field));\n\n relationinediting = {\n relation: relation.getState(),\n // get relation attributes by feature\n relations: service\n .getLayerById(relationLayerId)\n .readEditingFeatures()\n .filter(feature => ownField.every((field, i) => feature.get(field) == values[i])) // get relations by feature\n .map(relation => ({\n fields: layer.getFieldsWithValues(relation, { relation: true }),\n id: relation.getId(),\n select: false, /** @since v3.9.0 Used to set relation select or not **/\n }))\n };\n relationinediting.validate = { valid: true };\n relationsinediting.push(relationinediting);\n }\n });\n return relationsinediting;\n}", "import { Workflow } from '../g3wsdk/workflow/workflow';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * force parent workflow form service\n * update only when workflow has service (form service)\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function updateWorkflows() {\n Workflow.Stack._workflows\n .filter(w => w.getContextService())\n .forEach(w => w.getContextService().setUpdate(true, { force: true }))\n}", "/**\n * @see https://openlayers.org/en/v5.3.0/apidoc/module-ol_interaction_Pointer.html\n */\nexport class PickFeaturesInteraction extends ol.interaction.Pointer {\n\n constructor(opts = {}) {\n let features = []; // picked features\n\n const featuresAtPixel = ({ pixel, map } = {}) => map.getFeaturesAtPixel(pixel, {\n layerFilter: l => opts.layer === l,\n hitTolerance: (isMobile && isMobile.any) ? 10 : 0,\n });\n\n super({\n handleDownEvent(e) {\n features = featuresAtPixel(e);\n return features;\n },\n handleUpEvent(e) {\n if (features && features.length > 0) {\n this.dispatchEvent({ type: 'picked', features, coordinate: e.coordinate, layer: opts.layer });\n }\n return true;\n },\n handleMoveEvent(e) {\n e.map.getTargetElement().style.cursor = featuresAtPixel(e) ? 'pointer': '';\n }\n });\n }\n\n}", "/** Sort an array of strings (alphabetical order) */\nconst sortAlphabeticallyArray = (arr) => arr.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));\n\n/* Sort an array of numbers (natural order) */\nconst sortNumericArray = (arr, ascending = true) => arr.sort((a, b) => (ascending ? (a - b) : (b - a)));\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Get form fields\n *\n * @param form.inputs.layer\n * @param form.inputs.features\n * @param form.context.excludeFields\n * @param form.context.get_default_value\n * @param form.isChild - whether is child form (ie. belongs to relation)\n * @param form.multi - in case of multi editing set all fields to null\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getFormFields({\n inputs,\n context,\n feature, //current feature\n multi, // true -> multi features (e.g edit multi features attributes form)\n} = {}) {\n\n //editing service\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n // current form layerId// unique values by feature field\n const layerId = inputs.layer.getId();\n\n const fields = inputs.layer.getFieldsWithValues( // editing fields with values (in case of update)\n feature,\n {\n exclude: context.excludeFields, // add exclude fields\n get_default_value: undefined === context.get_default_value ? false : context.get_default_value,\n }\n );\n\n //Loop through fields\n const unique_values = fields\n //check if field is a unique field. Exclude pk not edittable\n .filter(f => !(f.pk && false === f.editable) && ('unique' === f.input.type || f.validate.unique))\n .map(field => ({\n field, // feature field\n _value: feature.get(field.name), // feature current field value\n }))\n\n //Loop through unique fields\n unique_values.forEach(({ _value, field }) => {\n //get current stored unique values for field\n const current_values = service.state.uniqueFieldsValues[layerId][field.name] || new Set([]);\n //filter null value otherwise sort function gets an error\n const values = Array.from(current_values).filter(v => null !== v );\n //NEED TO ADD ALWAYS CURRENT VALUE\n field.input.options.values = (['integer', 'float', 'bigint'].includes(field.type) ? sortNumericArray: sortAlphabeticallyArray)(values);\n if (current_values.has(null)) {\n field.input.options.values.unshift(null);\n }\n\n // convert \"current\" values to string (when not null or undefined)\n current_values.forEach(v => field.validate.exclude_values.add(![null, undefined].includes(v)? `${v}` : v ) );\n\n // remove current value from exclude_values\n field.validate.exclude_values.delete(`${_value}`);\n });\n\n // skip when no fields are unique in multi features change form attribute\n if (0 === unique_values.length) {\n return _handleMulti(fields, multi);\n }\n\n // Listen to event method after close/save form\n const savedfeatureFnc = () => {\n unique_values.forEach(({ _value, field }) => {\n // initial value is the same that current field vale (no changed)\n if (_value === field.value) { return }\n // layer form\n if (service.state.uniqueFieldsValues[layerId][field.name]) {\n // change layer unique field values\n const values = service.state.uniqueFieldsValues[layerId][field.name];\n //If changed, delete it from _value\n values.delete(_value);\n //aff new one to value list unique field\n values.add(field.value);\n }\n });\n\n return { once: true };\n };\n\n //event when insert/edit form button is pressed\n service.subscribe(`savedfeature_${layerId}`, savedfeatureFnc);\n //event when close form layer\n service.subscribe(`closeform_${layerId}`, () => {\n //unsubscribe event\n service.unsubscribe(`savedfeature_${layerId}`, savedfeatureFnc);\n return { once: true };\n });\n\n return _handleMulti(fields, multi);\n}\n\nfunction _handleMulti(fields, multi) {\n if (multi) {\n fields = fields.map(field => {\n const f = JSON.parse(JSON.stringify(field));\n f.value = null;\n f._value = null; // @since v3.9.0 Fix update form field: Set the same value of value\n f.forceNull = true;\n f.validate.required = false; //set false because all features have already required field filled\n return f;\n }).filter(f => !f.pk)\n }\n\n return fields;\n}\n", "const { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Handle layer relation 1:1 features related to feature\n *\n * @param opts.layerId Root layerId\n * @param opts.features Array of update/new features belong to Root layer\n * @param opts.fields Array of form fields father\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport async function handleRelation1_1LayerFields({\n layerId,\n features = [],\n fields = [],\n task\n} = {}) {\n\n // skip when no features\n if (features.length === 0) { return }\n\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n\n // Get layer relation 1:1\n const promises = CatalogLayersStoresRegistry\n .getLayerById(layerId)\n .getRelations()\n .getArray()\n .filter(relation => 'ONE' === relation.getType())\n .map(relation => {\n return new Promise(async (resolve, reject) => {\n // skip when layer is not a father layer (1:1 relation)\n if (layerId !== relation.getFather()) {\n resolve();\n return;\n }\n const fatherField = relation.getFatherField()[0];\n const value = features[0].get(fatherField);\n\n //no set father field value. No set\n if (null === value) {\n resolve();\n return\n }\n\n // check if child relation layer is editable (in editing)\n const childLayerId = relation.getChild();\n const childField = relation.getChildField()[0];\n //In case of not editable child layer, exit\n if (!service.getLayerById(childLayerId)) {\n reject();\n return;\n }\n const source = service.getLayerById(childLayerId).getEditingSource();\n let childFeature; // original child feature\n let newChild; //eventually child feature cloned with changes\n\n //check if child feature is already added to\n childFeature = source.readFeatures().find(f => f.get(childField) === value)\n\n const fieldsUpdated = undefined !== service\n .getLayerById(relation.getFather())\n .getEditingFields()\n .filter(f => f.vectorjoin_id && f.vectorjoin_id === relation.getId())\n .find(({name}) => fields.find(f => name == f.name).update)\n\n const isNewChildFeature = undefined === childFeature;\n\n //check if fields related to child are changed\n if (fieldsUpdated) {\n //Check if we need to create a new child feature\n if (isNewChildFeature) {\n //create feature for child layer\n childFeature = new g3wsdk.core.layer.features.Feature();\n childFeature.setTemporaryId();\n // set name attribute to `null`\n CatalogLayersStoresRegistry\n .getLayerById(childLayerId)\n .getEditingFields()\n .forEach(field => childFeature.set(field.name, null));\n //set father field value\n childFeature.set(childField, fields.find(f => fatherField === f.name).value);\n //add feature to a child source\n source.addFeature(childFeature);\n //new feature and child feature are the same\n newChild = childFeature;\n } else {\n //is update\n if (childFeature) {\n //clone child Feature so all changes apply by father is set to clone new feature\n newChild = childFeature.clone();\n }\n }\n\n //check if there is a childFeature to save\n if (childFeature) {\n // Loop editable only field of father layerId when\n // a child relation (1:1) is bind to the current feature\n const editiableRelatedFieldChild = service\n .getLayerById(relation.getFather())\n .getEditingFields()\n .filter(f => f.vectorjoin_id && f.vectorjoin_id === relation.getId() && f.editable);\n\n editiableRelatedFieldChild\n .forEach(field => newChild.set(field.name.replace(relation.getPrefix(), ''), features[0].get(field.name)));\n\n // add relation new relation\n if (isNewChildFeature) {\n\n // check if father field is a Pk (Primary key) if feature is new\n if (service.getLayerById(layerId).isPkField(fatherField)) {\n childFeature.set(childField, features[0].getId()); // set temporary\n }\n\n //if new need to add to session\n task.getContext()\n .session\n .pushAdd(childLayerId, newChild, false);\n\n } else {\n //need to update source child feature\n source.updateFeature(newChild);\n //need to update\n task.getContext()\n .session\n .pushUpdate(childLayerId, newChild, childFeature);\n\n }\n }\n }\n\n resolve();\n\n })\n });\n\n await Promise.allSettled(promises);\n}", "/**\n * @file shared vue instance used to watch object changes or to emit events\n * \n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport const VM = new Vue();\n\nexport default { VM };", "import { getLayersDependencyFeatures } from '../utils/getLayersDependencyFeatures';\n\nconst { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\nconst { DataRouterService } = g3wsdk.core.data;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param { Object } opts\n * @param opts.relation\n * @param opts.fatherFormRelationField\n * \n * @returns {Promise<{feature: *, locked: boolean}>}\n * \n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport async function getRelation1_1ChildFeature({\n relation,\n fatherFormRelationField,\n}) {\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing'); //get editing service\n const fatherLayerId = relation.getFather();\n const childLayerId = relation.getChild(); // get relation child layer id\n const childField = relation.getChildField()[0];\n\n // lock feature false\n let locked = false;\n let feature = service.getLayerById(childLayerId)\n .getEditingSource()\n .readFeatures()\n .find(f => fatherFormRelationField.value === f.get(childField))\n\n //get feature from server and lock\n if (undefined === feature) {\n\n const childFeatureStore = service.getLayerById(childLayerId).getFeaturesStore();\n\n const unByKey = childFeatureStore.oncebefore('featuresLockedByOtherUser', features => feature = features[0])\n\n await getLayersDependencyFeatures(fatherLayerId, {\n feature: new ol.Feature({ [fatherFormRelationField.name]: fatherFormRelationField.value }),\n relations: [relation]\n });\n\n //remove listener\n childFeatureStore.un('featuresLockedByOtherUser', unByKey);\n\n //in case of no locked check feature on a source\n if (undefined === feature) {\n\n feature = service.getLayerById(childLayerId)\n .getEditingSource()\n .readFeatures()\n .find(f => fatherFormRelationField.value === f.get(childField))\n }\n\n }\n\n //not find on source need to check if exist\n if (undefined === feature) {\n\n try {\n const layer = CatalogLayersStoresRegistry.getLayerById(childLayerId);\n\n const { data } = await DataRouterService.getData('search:features', { // get feature of relation layer based on value of relation field\n inputs: {\n layer,\n formatter: 0,\n filter: g3wsdk.core.utils.createFilterFormInputs({\n layer,\n search_endpoint: 'api',\n inputs: [{ attribute: childField, value: fatherFormRelationField.value, }]\n }),\n search_endpoint: 'api',\n },\n outputs: false,\n });\n\n if (data && data[0] && 1 === data[0].features.length) { // NB: length == 1, due to 1:1 relation type\n //locked\n locked = true;\n feature = data[0].features[0];\n }\n } catch(e) {\n console.warn(e);\n }\n }\n\n //return\n return {\n feature, //feature search\n locked //locked status\n }\n}", "import { VM } from '../eventbus';\nimport { getRelation1_1ChildFeature } from './getRelation1_1ChildFeature';\n\nconst { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Listen changes on 1:1 relation fields (get child values from child layer)\n *\n * @param opts.layerId Current editing layer id\n * @param opts.fields Array of form fields of current editing layer\n * @param opts.formService form service\n *\n * @returns Array of watch function event to remove listen\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport async function listenRelation1_1FieldChange({\n layerId,\n fields = [],\n formService,\n} = {}) {\n const unwatches = []; // unwatches field value (event change)\n\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing'); //get editing service\n\n const ONE = CatalogLayersStoresRegistry\n .getLayerById(layerId)\n .getRelations()\n .getArray()\n .filter(r => 'ONE' === r.getType())\n\n // get all relations 1:1 of current layer\n for (const relation of ONE) {\n\n const childLayerId = relation.getChild(); // get relation child layer id\n const fatherField = relation.getFatherField();\n const relationLockFeatures = {}; //store value\n\n // NB:\n // need to check if editable when opening form task\n // Not set this condition because maybe i ca be used this method\n // on a move task or other when current fatherFormRelationField, related to 1:1 relation\n // it can be changed by default expression or in another way not only with form\n const fatherFormRelationField = fields.find(f => fatherField.includes(f.name)); // get father layer field (for each relation)\n // skip when not relation field and not layer child is in editing\n if (!(fatherFormRelationField && service.getLayerById(childLayerId))) {\n return unwatches;\n }\n\n //store original editable property of fields relation to child layer relation\n const editableRelatedFatherChild = service\n .getLayerById(relation.getFather())\n .getEditingFields()\n .filter(f => f.vectorjoin_id && f.vectorjoin_id === relation.getId())\n .reduce((accumulator, field) => {\n const formField = fields.find(f => f.name === field.name)\n accumulator[formField.name] = formField.editable;\n return accumulator;\n }, {});\n\n fatherFormRelationField.input.options.loading.state = 'loading'; // show input bar loader\n\n //get feature from a child layer source\n relationLockFeatures[fatherFormRelationField.value] = await getRelation1_1ChildFeature({\n relation,\n fatherFormRelationField,\n })\n\n fatherFormRelationField.input.options.loading.state = null; // show input bar loader\n\n //if locked need to set editable to false\n //can update child\n if (relationLockFeatures[fatherFormRelationField.value].locked) {\n Object.keys(editableRelatedFatherChild)\n .forEach(fn => fields.find(f => fn === f.name).editable = false);\n }\n\n //if not feature is on source child layer, it means it locked or not exist on a server need to check\n // listen for relation field changes (vue watcher)\n unwatches.push(\n VM.$watch(\n () => fatherFormRelationField.value,\n async value => {\n\n // skip empty values\n if (!value) {\n fatherFormRelationField.input.options.loading.state = null;\n fatherFormRelationField.editable = true;\n return;\n }\n\n fatherFormRelationField.editable = false; // disable edit\n fatherFormRelationField.input.options.loading.state = 'loading'; // show input bar loader\n if (undefined === relationLockFeatures[fatherFormRelationField.value]) {\n //get feature from a child layer source\n try {\n\n relationLockFeatures[fatherFormRelationField.value] = await getRelation1_1ChildFeature({\n relation,\n fatherFormRelationField,\n })\n\n } catch (e) {\n console.warn(e);\n }\n }\n\n const { feature, locked } = relationLockFeatures[fatherFormRelationField.value];\n\n Object.keys(editableRelatedFatherChild)\n .forEach(fn => {\n const field = fields.find(f => fn === f.name);\n //set editable property\n field.editable = locked\n ? false\n : editableRelatedFatherChild[fn];\n //need to check if feature is new and not locked ot not present on a source\n field.value = feature\n ? feature.get(field.name.replace(relation.getPrefix(), ''))\n : null\n //@since 3.9.0 call change input to run eventually default expression\n formService.changeInput(field);\n });\n\n // reset edit state\n fatherFormRelationField.input.options.loading.state = null;\n fatherFormRelationField.editable = true;\n }\n )\n );\n }\n\n return unwatches;\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Finalize \"formatter\" value for any kind of field\n *\n * @param { string } opts.layerId\n * @param {ol.Feature} opts.feature\n * @param { string } opts.property\n *\n * @returns (field.key) or (field.value)\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport function getFeatureTableFieldValue({\n layerId,\n feature,\n property\n} = {}) {\n // get editable fields\n const { fields } = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').getLayerById(layerId).config.editing;\n\n // get field value (raw)\n let value = feature.get(property);\n\n // get key-value fields implicated into: https://github.com/g3w-suite/g3w-client-plugin-editing/pull/64\n const values = (null !== value) &&\n (fields.filter(f => ['select_autocomplete', 'select'].includes(f.input.type)) || [])\n .reduce((kv, field) => { kv[field.name] = field.input.options.values; return kv; }, {});\n\n // get the last key-value feature add to\n const kv_field = values && values[property] && values[property].find(kv => value == kv.value);\n\n // return key for key-values fields (raw field value otherwise)\n return kv_field ? kv_field.key : value;\n}", "import { setFeaturesSelectedStyle } from '../utils/setFeaturesSelectedStyle';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/selectelementstask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/selectelementsstep.js@v3.7.1\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function addRemoveToMultipleSelectFeatures(features, inputs, selected, task) {\n (features || []).forEach(f => {\n const selIndex = selected.indexOf(f);\n if (selIndex < 0) {\n task._originalStyle = setFeaturesSelectedStyle([f]);\n selected.push(f);\n } else {\n selected.splice(selIndex, 1);\n f.setStyle(task._originalStyle);\n }\n inputs.features = selected;\n });\n\n const steps = task.getSteps();\n const buttonnext = steps.select.buttonnext;\n\n buttonnext.disabled = buttonnext.condition ? buttonnext.condition({ features: selected }) : 0 === selected.length;\n\n if (undefined !== steps.select.dynamic) {\n steps.select.dynamic = selected.length;\n }\n}", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n import { Workflow } from '../g3wsdk/workflow/workflow';\n import { Step } from '../g3wsdk/workflow/step';\n import { cloneFeature } from '../utils/cloneFeature';\n import { setAndUnsetSelectedFeaturesStyle } from '../utils/setAndUnsetSelectedFeaturesStyle';\n import { promisify, $promisify } from '../utils/promisify';\n import { getRelationFieldsFromRelation } from '../utils/getRelationFieldsFromRelation';\n import { getLayersDependencyFeatures } from '../utils/getLayersDependencyFeatures';\n import { getEditingLayerById } from '../utils/getEditingLayerById';\n import { convertToGeometry } from '../utils/convertToGeometry';\n import { addTableFeature } from '../utils/addTableFeature';\n import { updateWorkflows } from '../utils/updateWorkflows';\n import { getRelationId } from '../utils/getRelationId';\n import { getFeatureTableFieldValue } from '../utils/getFeatureTableFieldValue';\n import { chooseFeatureFromFeatures } from '../utils/chooseFeatureFromFeatures';\n import { isSameBaseGeometryType } from '../utils/isSameBaseGeometryType';\n import { PickFeaturesInteraction } from '../interactions/pickfeaturesinteraction';\n import { VM } from '../eventbus';\n import {\n OpenFormStep,\n OpenTableStep,\n AddFeatureStep,\n ModifyGeometryVertexStep,\n MoveFeatureStep,\n } from '../workflows';\n\n const { ProjectsRegistry } = g3wsdk.core.project;\n const { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\n const { DataRouterService } = g3wsdk.core.data;\n const { Geometry } = g3wsdk.core.geoutils;\n const { tPlugin:t } = g3wsdk.core.i18n;\n const { Layer } = g3wsdk.core.layer;\n const { Feature } = g3wsdk.core.layer.features;\n const { toRawType } = g3wsdk.core.utils;\n const { GUI } = g3wsdk.gui;\n const { FormService } = g3wsdk.gui.vue.services;\n const {\n fieldsMixin,\n resizeMixin,\n mediaMixin,\n } = g3wsdk.gui.vue.Mixins;\n const {\n PickFeatureInteraction,\n PickCoordinatesInteraction\n } = g3wsdk.ol.interactions;\n\n Object\n .entries({\n Workflow,\n Step,\n OpenFormStep,\n OpenTableStep,\n AddFeatureStep,\n ModifyGeometryVertexStep,\n MoveFeatureStep,\n })\n .forEach(([k, v]) => console.assert(undefined !== v, `${k} is undefined`));\n\n const color = 'rgb(255,89,0)';\n // Vector styles for selected relation\n const SELECTED_STYLES = {\n 'Point': new ol.style.Style({ image: new ol.style.Circle({ radius: 8, fill: new ol.style.Fill({ color }) }) }),\n 'MultiPoint': new ol.style.Style({ image: new ol.style.Circle({ radius: 8, fill: new ol.style.Fill({ color }) }) }),\n 'Linestring': new ol.style.Style({ stroke: new ol.style.Stroke({ width: 8, color }) }),\n 'MultiLinestring': new ol.style.Style({ stroke: new ol.style.Stroke({ width: 8, color }) }),\n 'Polygon': new ol.style.Style({ stroke: new ol.style.Stroke({ width: 8, color }), fill: new ol.style.Fill({ color }) }),\n 'MultiPolygon': new ol.style.Style({ stroke: new ol.style.Stroke({ width: 8, color }), fill: new ol.style.Fill({ color }) }),\n }\n\n const __vue_script__ = {\n\n mixins: [\n mediaMixin,\n fieldsMixin,\n resizeMixin,\n ],\n\n name: 'g3w-relation',\n\n data() {\n return {\n // relation, // \u2190 setted by `Vue.extend` - Relation instance: information about relation from parent layer and current relation layer (ex. child, fields, relationid, etc....) main relation between layerId (current in editing)\n // relations, // \u2190 setted by `Vue.extend` - array of relations object id,fields and select linked to current parent feature (that is in editing)\n // layerId, // \u2190 setted by `Vue.extend`\n loading : false,\n show_vector_tools: false, // whether show vector relation tools\n disabled: false, //disable relatins rows\n copylayerid: null, // used for vector relation layer\n copyFeatureLayers: [],\n active: false,\n value: null,\n placeholdersearch: `${t('editing.search')} ...`,\n resourcesurl: GUI.getResourcesUrl(),\n };\n },\n\n methods: {\n\n\n /**\n * Adapt table when a window is resized\n */\n resize() {\n // skip when a relation form is disabled (or hidden)\n if (!(this.active && 'none' !== this.$el.style.display)) {\n return;\n }\n\n const table = this.$refs.relation_body.querySelector('div.dataTables_scrollBody');\n\n if (table) {\n table.style.height =\n ((document.querySelector('.g3wform_body') || {}).offsetHeight || 0)\n - ((document.querySelector('.g3wform_footer') || {}).offsetHeight || 0)\n - ((this.$refs.relation_header_title || {}).offsetHeight || 0)\n - ((this.$refs.relation_header_tools || {}).offsetHeight || 0)\n - ((this.$el.querySelector('.dataTables_scrollHead') || {}).offsetHeight || 0)\n - ((this.$el.querySelector('.dataTables_paginate.paging_simple_numbers') || {}).offsetHeight || 0)\n - ((document.querySelector('.editing-save-all-form') || {}).offsetHeight || 0)\n - (( this.isVectorRelation && this.show_vector_tools && this.$refs.relation_vector_tools || {}).offsetHeight || 0)\n + 'px';\n }\n\n if (this.relationsTable) {\n this.relationsTable.columns.adjust();\n }\n\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * Add Relation from project layer\n */\n copyFeatureFromOtherLayer() {\n const copyLayer = this.copyFeatureLayers.find(l => this.copylayerid === l.id);\n let external = copyLayer.external;\n let layer = external ? GUI.getService('map').getLayerById(this.copylayerid) : CatalogLayersStoresRegistry.getLayerById(this.copylayerid);\n const is_vector = (external || layer.isGeoLayer())\n this.runAddRelationWorkflow({\n workflow: is_vector\n ? this._add_link_workflow.selectandcopy({\n copyLayer: layer,\n isVector: true,\n help: 'editing.steps.help.copy',\n external,\n })\n : undefined,\n isVector: is_vector\n })\n },\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n async closeVectorTools() {\n this.show_vector_tools = false;\n await this.$nextTick();\n this.resize();\n },\n\n /**\n * @FIXME add description\n */\n addVectorRelation() {\n this.runAddRelationWorkflow({\n workflow: this._add_link_workflow.add(),\n isVector: Layer.LayerTypes.VECTOR === this._layerType,\n });\n this.show_vector_tools = false;\n },\n\n /**\n * @since 3.9.0\n * update select relation attibute\n */\n updateSelectRelations() {\n //need to declare a variable bool, otherwise this.selectall ia a compued attribute that can change during loop\n const bool = !this.selectall || !this.relations.some(r => r.select);\n this.relations.forEach(r => r.select = bool);\n },\n\n /**\n * @since 3.9.0\n * Edit attributes of all relations\n */\n async editAttributesRelations() {\n const workflow = new Workflow({\n type: 'editmultiattributes',\n steps: [\n new OpenFormStep({ multi: true }),\n ],\n });\n const options = this._createWorkflowOptions({\n features: this.relations\n .filter(r => r.select)\n .map(({ id }) => this.getLayer().getEditingSource().getFeatureById(id) )\n });\n try {\n await promisify(workflow.start(options));\n } catch(e) {\n console.warn(e);\n }\n\n workflow.stop();\n\n },\n\n /**\n * @FIXME add description\n */\n async addRelationAndLink() {\n if (this.isVectorRelation) {\n this.show_vector_tools = !this.show_vector_tools;\n await this.$nextTick();\n this.resize();\n } else {\n this.runAddRelationWorkflow({\n workflow: this._add_link_workflow.add(),\n isVector: Layer.LayerTypes.VECTOR === this._layerType,\n });\n }\n },\n\n /**\n * @returns { Array } attributes \n */\n relationAttributesSubset(relation) {\n return relation.fields\n .map(({ label, name, value }) => ({ name, label, value }))\n .flatMap(({ name, label, value }) => Array.isArray(value) ? [] : [{ name, label, value }]);\n },\n\n /**\n * @FIXME add description\n */\n getValue(value) {\n if (value && 'Object' === toRawType(value)) {\n value = value.value;\n } else if ('string' == typeof value && 0 === value.indexOf('_new_')) {\n value = null;\n }\n this.value = value;\n return value;\n },\n\n /**\n * @FIXME add description\n */\n _createDataTable() {\n this.relationsTable = $(this.$refs.relationTable)\n .DataTable({\n autoWidth: false,\n columnDefs: [ { orderable: false, targets: [0, 1] } ],\n destroy: true,\n order: [ 2, 'asc' ],\n pageLength: 10,\n responsive: true,\n scrollCollapse: true,\n scrollResize: true,\n scrollX: true,\n });\n\n $(\".dataTables_filter, .dataTables_length\").hide();\n // set data table search\n $('#filterRelation').on('keyup', (e) => this.relationsTable.search(e.target.value).draw())\n },\n\n /**\n * @FIXME add description\n */\n destroyTable() {\n if (this.relationsTable) {\n this.relationsTable = this.relationsTable.destroy();\n this.relationsTable = null;\n $('#filterRelation').off();\n }\n },\n\n /**\n * @returns {Promise}\n * \n * @since g3w-client-plugin-editing@v3.7.0\n */\n async updateTable() {\n this.destroyTable(); // destroy old table\n await this.$nextTick(); // wait rerender\n this._createDataTable(); // recreate table\n setTimeout(() => this.resize())\n },\n\n /**\n * In case of commit new relation to server, update temporary relation.id (__new__)\n * to saved id on server. It is called when a new relation is saved on a relation form\n * after click on save all disks, and when save all disks are click on a list of relation\n * table.\n * \n * @since g3w-client-plugin-editing@v3.7.4\n */\n updateNewRelationId() {\n this._new_relations_ids.forEach(({ clientid, id }) => {\n const newrelation = this.relations.find(r => clientid === r.id);\n if (newrelation) {\n newrelation.id = id;\n //replace tools with new id\n (this.tools.find(ts => ts.find(t => t.state.id.split(`${clientid}_`).length > 1)) || [])\n .forEach(t => t.state.id = t.state.id.replace(`${clientid}_`, `${id}_`));\n }\n })\n\n },\n\n /**\n * Listen to commit on server when press disk icon saves all form\n * \n * @since g3w-client-plugin-editing@v3.7.4\n */\n onCommit({ relations = {} }) {\n const relationLayer = getEditingLayerById(this.relation.child);\n\n // there is a new relation saved on server\n if (relations[relationLayer.getId()] && Array.isArray(relations[relationLayer.getId()].new)) {\n this._new_relations_ids = [\n ...(this._new_relations_ids || []),\n ...relations[relationLayer.getId()].new.map(({ clientid, id }) => ({ clientid, id }))\n ]\n }\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing@v3.7.0/services/relationservice.js\n * \n * Get value from feature if layer has key value\n */\n getRelationFeatureValue(featureId, property) {\n return getFeatureTableFieldValue({\n layerId: this._relationLayerId,\n feature: this.getLayer().getEditingSource().getFeatureById(featureId),\n property,\n });\n },\n\n /**\n * Enable/Disable elements\n * \n * @param { Boolean } bool true enabled\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n enableDOMElements(bool = true) {\n document.querySelectorAll('.editing-save-all-form').forEach(c => {\n if (bool && c.classList.contains('g3w-disabled')) { c.classList.remove('g3w-disabled'); }\n if (!bool && !c.querySelector('.save-all-icon').classList.contains('g3w-disabled')) { c.classList.add('g3w-disabled'); }\n });\n document.querySelectorAll('.g3w-editing-relations-add-link-tools, .g3wform_footer').forEach(c => c.classList.toggle('g3w-disabled', !bool))\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n *\n * Add relation tools\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n addTools(id) {\n const tools = [\n\n // edit attributes\n this.capabilities.includes('change_attr_feature') && {\n state: Vue.observable({\n icon: 'editAttributes.png',\n id: `${id}_editattributes`,\n name: 'editing.tools.update_feature',\n enabled: true,\n active: false,\n }),\n type: 'editfeatureattributes',\n },\n\n // @since 3.9.0 copy featureonly for table layer\n Layer.LayerTypes.TABLE === this._layerType && this.capabilities.includes('add_feature') && {\n state: Vue.observable({\n icon: 'pasteFeaturesFromOtherLayers.png',\n id: `${id}_copyfeature`,\n name: 'editing.tools.copy',\n enabled: true,\n active: false,\n }),\n type: 'addfeature',\n },\n\n // delete feature\n this.capabilities.includes('delete_feature') && {\n state: Vue.observable({\n icon: 'deleteTableRow.png',\n id: `${id}_deletefeature`,\n name: 'editing.tools.delete_feature',\n enabled: true,\n active: false,\n }),\n type: 'deletefeature',\n },\n\n // other vector tools (e.g., move feature)\n this.capabilities.includes('change_feature') && Layer.LayerTypes.VECTOR === this._layerType && (\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing')\n .getToolBoxById(this._relationLayerId)\n .getTools()\n .filter(t => Geometry.isPointGeometryType(this.getLayer().getGeometryType())\n ? 'movefeature' === t.getId() // Point geometry\n : ['movefeature', 'movevertex'].includes(t.getId()) // Line or Polygon\n )\n .map(tool => ({\n state: Vue.observable({ ...tool, id: `${id}_${tool.id}` }),\n type: tool.getOperator().type,\n }))\n )\n\n ].flat().filter(Boolean);\n\n this.tools.push(tools);\n return tools;\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * @param relationtool\n * @param index\n * \n * @returns {Promise}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async startTool(relationtool, index) {\n try {\n relationtool.state.active = !relationtool.state.active;\n\n // skip when ..\n if (!relationtool.state.active) {\n return Promise.resolve();\n }\n\n this.tools.forEach(tools => {\n tools.forEach(t => { if (relationtool.state.id !== t.state.id) { t.state.active = false; } })\n });\n\n await VM.$nextTick();\n\n // do something with map features\n\n const d = {};\n const promise = new Promise((resolve, reject) => { Object.assign(d, { resolve, reject }) })\n\n const is_vector = Layer.LayerTypes.VECTOR === this._layerType;\n const relation = this.relations[index];\n const toolId = relationtool.state.id.split(`${relation.id}_`)[1];\n const relationfeature = this.getLayer().getEditingSource().getFeatureById(relation.id);\n const selectStyle = is_vector && SELECTED_STYLES[this.getLayer().getGeometryType()]; // get selected vector style\n const options = this._createWorkflowOptions({ features: [relationfeature] });\n\n //@since 3.9.0 COPY FEATURE FROM ATTRIBUTE TABLE LAYER\n if ('copyfeature' === toolId) {\n await (\n new Promise(async (resolve, reject) => {\n //replace current feature with clone\n options.inputs.features = [cloneFeature(relationfeature, this.getLayer())];\n // //need to sett original layer\n // options.inputs.layer = CatalogLayersStoresRegistry.getLayerById(this._relationLayerId);\n const workflow = new Workflow({\n type: 'addtablefeature',\n steps: [\n new Step({ help: 'editing.steps.help.new', run: addTableFeature }),\n new OpenFormStep(),\n ],\n });\n try {\n const outputs = await promisify(workflow.start(options));\n const feature = outputs.features[outputs.features.length - 1];\n this.relations.push({ id: feature.getId(), fields: this.getLayer().getFieldsWithValues(feature, { relation: true }) });\n resolve(feature);\n } catch(e) {\n console.warn(e);\n //in case of seva all click\n if (options.inputs && options.inputs.relationFeatures) {\n this.relations.push(\n ...(options.inputs.relationFeatures.newFeatures || []).map(f => ({ id: f.getId(), fields: this.getLayer().getFieldsWithValues(f, { relation: true }) }))\n )\n }\n reject(e);\n\n } finally {\n workflow.stop();\n relationtool.state.active = false;\n\n }\n })\n );\n }\n\n // DELETE FEATURE RELATION\n if ('deletefeature' === toolId) {\n\n setAndUnsetSelectedFeaturesStyle({ promise, inputs: { features: [ relationfeature ], layer: this.getLayer() }, style: selectStyle })\n\n GUI.dialog.confirm(\n t(\"editing.messages.delete_feature\"),\n res => {\n //confirm to delete\n if (res) {\n Workflow.Stack.getCurrent().getSession().pushDelete(this._relationLayerId, relationfeature);\n // remove feature from relation features\n this.relations.splice(index, 1);\n // remove tool from relation tools\n this.tools.splice(index, 1);\n // current relation layer fields\n const unique_fields = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.uniqueFieldsValues[this._relationLayerId];\n //check if relation layer has unique values stored\n if (undefined !== unique_fields) {\n Object\n .keys(relationfeature.getProperties())\n .filter(p => undefined !== unique_fields[p])\n .forEach(p => {\n const values = new Set(unique_fields[p]);\n //@TODO Check if we need remove\n values.delete(relationfeature.get(p));\n })\n }\n\n //remove feature from source\n this.getLayer().getEditingSource().removeFeature(relationfeature);\n // Check if relation feature delete is new.\n // In this case, we need to check if there are temporary changes not related to this current feature\n if (\n relationfeature.isNew()\n && undefined === Workflow.Stack\n ._workflows\n .find(w => w.getSession().state.changes.filter(({ feature }) => relationfeature.getUid() !== feature.getUid()).length > 0)\n ) {\n Workflow.Stack._workflows\n .filter(w => w.getContextService() instanceof FormService)\n .forEach(w => setTimeout(() => w.getContextService().state.update = false));\n } else {\n //set parent workflow update to enable to save all buttons\n updateWorkflows();\n }\n\n d.resolve(res);\n }\n\n //click\n if (!res) {\n d.reject();\n }\n\n }\n )\n }\n\n // EDIT ATTRIBUTE FEATURE RELATION\n if ('editattributes' === toolId) {\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/edittablefeatureworkflow.js@v3.7.1 */\n const workflow = new Workflow({ type: 'edittablefeature', steps: [ new OpenFormStep({ selectStyle }) ] });\n\n try {\n await promisify(workflow.start(options));\n\n //get relation layer fields\n this\n .getLayer()\n .getFieldsWithValues(relationfeature, { relation: true })\n .forEach(f => {\n relation.fields\n .forEach(rf => {\n //in case of sync feature get data value of sync feature\n if (rf.name === f.name) { rf.value = f.value; }\n })\n });\n d.resolve(true);\n } catch(e) {\n console.warn(e);\n d.reject(e);\n }\n\n workflow.stop();\n }\n\n // zoom to relation vector feature\n if (['movevertex', 'movefeature'].includes(toolId) && this.currentRelationFeatureId !== relationfeature.getId()) {\n this.currentRelationFeatureId = relationfeature.getId();\n GUI.getService('map').zoomToFeatures([ relationfeature ]);\n }\n\n // MOVE vertex or MOVE feature tool\n if (['movevertex', 'movefeature'].includes(toolId)) {\n // disable modal and buttons (saveAll and back)\n GUI.setModal(false);\n this.enableDOMElements(false);\n const workflow = new Workflow({\n type: relationtool.type,\n steps: [ new {\n 'movevertex': ModifyGeometryVertexStep,\n 'movefeature': MoveFeatureStep,\n }[toolId]({ selectStyle }) ]\n });\n\n // watch eventually deactive when another tool is activated\n const unwatch = VM.$watch(\n () => relationtool.state.active,\n bool => {\n if (!bool) {\n //need to enable saveAll and back\n this.enableDOMElements(true);\n GUI.setModal(true);\n workflow.unbindEscKeyUp();\n workflow.stop();\n unwatch();\n d.reject(false);\n }\n }\n )\n // bind listen esc key\n workflow.bindEscKeyUp(() => {\n GUI.setModal(true);\n unwatch();\n d.reject(false);\n });\n\n try {\n await promisify(workflow.start(options));\n\n Workflow.Stack\n .getParents()\n .filter(w => w.getContextService().setUpdate)\n .forEach(w => w.getContextService().setUpdate(true, { force: true }));\n d.resolve(true);\n setTimeout(() => this.startTool(relationtool, index));\n } catch(e) {\n console.warn(e);\n d.reject(e);\n }\n\n workflow.unbindEscKeyUp();\n workflow.stop();\n unwatch();\n }\n\n try {\n await promise;\n } catch (e) {\n console.trace('START TOOL FAILED', e);\n } finally {\n relationtool.state.active = false;\n }\n } catch(e) {\n console.warn(e);\n }\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * @returns {*}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getLayer() {\n return getEditingLayerById(this._relationLayerId);\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * Common method to add a relation\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async runAddRelationWorkflow({ workflow, isVector = false } = {} ) {\n\n if (isVector) {\n GUI.setModal(false);\n GUI.hideContent(true);\n }\n\n const options = this._createWorkflowOptions();\n\n //Get fields and values from parent feature\n //@TODO fatherField is Array of child fields related with parent layer. Need to rename it\n const { fatherField, fatherValue } = options.context;\n\n const { relationField } = getRelationFieldsFromRelation({\n layerId: this._relationLayerId,\n relation: this.relation\n });\n\n try {\n const outputs = await promisify(workflow.start(options));\n\n if (isVector) { workflow.bindEscKeyUp(); }\n \n const { newFeatures, originalFeatures } = outputs.relationFeatures;\n\n // Set Relation child feature value\n const setRelationFieldValue = ({ field, value }) => {\n newFeatures.forEach((newFeature, i) => {\n newFeature.set(field, value);\n if (options.parentFeature.isNew()) {\n originalFeatures[i].set(field, value);\n }\n this.getLayer().getEditingSource().updateFeature(newFeature);\n options.context.session.pushUpdate(this._relationLayerId, newFeature, originalFeatures[i]);\n })\n };\n fatherField.forEach((field, i) => setRelationFieldValue({ field, value: fatherValue[i] }));\n\n //check if parent feature is new and if parent layer has editable fields\n if (options.parentFeature.isNew() && this.getParent().editable.length > 0) {\n const keyRelationFeatureChange = options.parentFeature.on('propertychange', evt => {\n if (options.parentFeature.isNew()) {\n //check if input is relation field\n if (relationField.find(evt.key)) {\n //set value to relation field\n setRelationFieldValue({\n field: evt.key,\n value: evt.target.get(evt.key)\n });\n }\n } else {\n ol.Observable.unByKey(keyRelationFeatureChange);\n }\n })\n }\n\n this.relations.push(\n ...(newFeatures || []).map(f => ({ id: f.getId(), fields: this.getLayer().getFieldsWithValues(f, { relation: true }) }))\n )\n\n } catch(inputs) {\n console.warn(inputs);\n\n // in case of save all pressed on openformtask\n if (inputs && inputs.relationFeatures) {\n this.relations.push(\n ...(inputs.relationFeatures.newFeatures || []).map(f => ({ id: f.getId(), fields: this.getLayer().getFieldsWithValues(f, { relation: true }) }))\n )\n }\n\n options.context.session.rollbackDependecies([this._relationLayerId])\n }\n\n workflow.stop();\n\n if (isVector) {\n workflow.unbindEscKeyUp();\n GUI.hideContent(false);\n GUI.setModal(true);\n //need to resize to adjust table\n setTimeout(() => this.resize())\n }\n },\n\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * Link relation (bind) to parent feature layer\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async linkRelation() {\n this.disabled = true;\n\n const is_vector = Layer.LayerTypes.VECTOR === this._layerType;\n const workflow = this._add_link_workflow.link( is_vector ? {\n selectStyle: SELECTED_STYLES[this.getLayer().getGeometryType()]\n } : {});\n const options = this._createWorkflowOptions();\n const { ownField, relationField } = getRelationFieldsFromRelation({\n layerId: this._relationLayerId,\n relation: this.relation\n });\n\n //add options to exclude features from a link\n options.context.excludeFeatures = relationField.reduce((accumulator, rField, index) => {\n accumulator[ownField[index]] = this.getParent().values[rField];\n return accumulator;\n }, {});\n\n\n //check if a vector layer\n if (is_vector) {\n GUI.setModal(false);\n }\n\n const feature = Workflow.Stack.getCurrent().getCurrentFeature();\n\n const getRelationFeatures = () => getLayersDependencyFeatures(this.layerId, {\n relations: [this.relation],\n feature,\n operator: 'not',\n filterType: is_vector ? 'bbox' : 'fid'\n });\n\n let response = {\n promise: undefined,\n showContent: false,\n };\n\n if (is_vector) {\n options.context.beforeRun = async () => {\n await new Promise((resolve) => setTimeout(resolve));\n await getRelationFeatures();\n };\n\n workflow.bindEscKeyUp();\n\n response = {\n promise: workflow.start(options),\n showContent: true\n };\n\n this.enableDOMElements(false);\n\n } else {\n await getRelationFeatures();\n }\n\n let linked = false;\n\n try {\n const outputs = await promisify(response.promise || workflow.start(options));\n // loop on features selected\n (outputs.features || []).forEach(relation => {\n if (undefined === this.relations.find(rel => rel.id === relation.getId())) {\n linked = linked || true;\n const originalRelation = relation.clone();\n Object\n .entries(this.getParent().values)\n .forEach(([field, value]) => {\n relation.set(ownField[relationField.findIndex(rF => field === rF)], value);\n })\n Workflow.Stack.getCurrent().getSession().pushUpdate(this._relationLayerId , relation, originalRelation);\n this.relations.push({\n fields: this.getLayer().getFieldsWithValues(relation, { relation: true }),\n id: relation.getId()\n });\n } else {\n // in case already present\n GUI.notify.warning(t(\"editing.relation_already_added\"));\n }\n });\n } catch (e) {\n console.warn(e);\n options.context.session.rollbackDependecies([this._relationLayerId]);\n }\n\n if (is_vector) {\n this.enableDOMElements(true);\n }\n\n if (response.showContent) {\n GUI.closeUserMessage();\n workflow.unbindEscKeyUp();\n }\n\n if (linked) {\n updateWorkflows();\n }\n\n workflow.stop();\n\n this.disabled = false;\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * Unlink relation\n * \n * @param index\n * @param dialog\n * \n * @returns JQuery Promise\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n unlinkRelation(index, dialog = true) {\n return unlinkRelation({\n layerId: this.layerId,\n relation: this.relation,\n relations: this.relations,\n index,\n dialog,\n });\n },\n\n /**\n * @since 3.9.0\n * @return {{layerId, editable: *[], values: *, pk: *}}\n */\n getParent() {\n const parentLayer = this.parentWorkflow.getLayer();\n const { ownField } = getRelationFieldsFromRelation({ layerId: this.layerId, relation: this.relation });\n\n const pk = ownField.find(f => parentLayer.isPkField(f))\n\n /**\n * Father relation fields (editable and pk)\n */\n return {\n // get editable fields from parent layer editing fields\n editable: ownField.filter(f => parentLayer.isEditingFieldEditable(f)),\n // check if father field is a pk and is not editable\n pk,\n // Check if the parent field is editable.\n // If not, get the id of parent feature so the server can generate the right value\n // to fill the field with the relation layer feature when commit\n values: ownField.reduce((father, field) => {\n //get feature\n const feature = this.parentWorkflow.getCurrentFeature();\n //get fields of form because contains values that have temporary changes not yet saved\n // in case of form fields\n const fields = this.parentWorkflow.getInputs().fields;\n return Object.assign(father, {\n [field]: (pk === field && feature.isNew()) //check if isPk and parent feature isNew\n ? feature.getId()\n //check if fields are set (parent workflow is a form)\n // or for example, for feature property field value\n : fields ? fields.find(f => field === f.name).value: feature.get(field)\n });\n }, {}),\n };\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * @param options\n * \n * @returns {{parentFeature, inputs: {features: *[], layer: *}, context: {fatherValue: *, session: *, fatherField: *, excludeFields: *[]}}}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _createWorkflowOptions(options = {}) {\n const fields = getRelationFieldsFromRelation({\n layerId: this._relationLayerId,\n relation: this.relation\n });\n const parent = Object.entries(this.getParent().values);\n return {\n parentFeature: Workflow.Stack.getCurrent().getCurrentFeature(), // get parent feature\n context: {\n session: Workflow.Stack.getCurrent().getSession(), // get parent workflow\n excludeFields: fields.ownField, // array of fields to be excluded\n fatherValue: parent.map(([_, value]) => value), // values of parent fields in relation\n fatherField: parent.map(([field]) => fields.ownField[fields.relationField.findIndex(rField => field === rField)]), //children fields\n },\n inputs: {\n features: options.features || [],\n layer: this.getLayer()\n }\n };\n },\n\n },\n\n computed: {\n /**\n * @since v3.9.0\n * @return {Boolen} Tru in case all relations are selected\n */\n selectall() {\n return this.relations.every(r => r.select);\n },\n\n /**\n * @TODO find out where `this.relations` is setted\n * \n * @returns { boolean }\n */\n relationsLength() {\n return this.relations.length;\n },\n\n /**\n * @returns { boolean } whether has external fields (relation layer fields have at least one field required)\n */\n fieldrequired() {\n return getRelationFieldsFromRelation({ layerId: this._relationLayerId, relation: this.relation })\n .ownField // own Fields is a relation Fields array of Relation Layer\n .some(field => getEditingLayerById(this._relationLayerId).isFieldRequired(field));\n },\n\n /**\n * @returns { boolean } whether show adds link buttons\n */\n show_add_link() {\n return (0 === this.relations.length || 'ONE' !== this.relation.type);\n },\n\n },\n\n watch: {\n\n /**\n * @FIXME add description\n */\n relations(_, updatedrelations = []) {\n if (0 === updatedrelations.length) {\n this.destroyTable(); // destroy the table when there are no relations\n } else {\n // component is active (show) \u2192 need to update\n this.updateNewRelationId();\n this.updateTable(); // update table when deleting / adding row relations\n }\n\n },\n\n /**\n * Toggle dom element of relation table, based on show/hide creation of vector tools\n */\n show_vector_tools(bool) {\n this.enableDOMElements(!bool);\n this.disabled = bool;\n },\n },\n\n beforeCreate() {\n this.delayType = 'debounce';\n },\n\n created() {\n const relationLayer = getEditingLayerById(this.relation.child);\n\n /**\n * Array of new relations features objects saved on server id\n * {clientid, id} where client id is a temporary id of relation\n * feature, id is saved id on server.\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n this._new_relations_ids = [];\n\n this.onCommit = this.onCommit.bind(this);\n\n /** @since 3.7.2 Listen commit when is click on save all button disk icon*/\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').on('commit', this.onCommit);\n\n this.isVectorRelation = Layer.LayerTypes.VECTOR === relationLayer.getType();\n\n // vector relation \u2192 get all layers with the same geometry\n if (this.isVectorRelation) {\n const geometryType = relationLayer.getGeometryType();\n this.copyFeatureLayers = [\n // project layers with same geometry of relation ayer\n ...CatalogLayersStoresRegistry.getLayers({\n QUERYABLE: true,\n GEOLAYER: true,\n })\n .filter(l => ((\n l.getGeometryType &&\n l.getGeometryType() &&\n //exclude father layer and current relation layer\n ![this.relation.child, this.relation.father].includes(l.getId())\n ) && (\n l.getGeometryType() === geometryType ||\n (\n isSameBaseGeometryType(l.getGeometryType(), geometryType) &&\n Geometry.isMultiGeometry(geometryType)\n )\n ))\n )\n .map(l => ({\n id: l.getId(),\n name: l.getName(),\n external: false,\n })),\n\n // external layers with same geometry of relation layer\n ...GUI.getService('map').getExternalLayers('vector')\n .filter(l => {\n const features = l.getSource().getFeatures() || [];\n // skip when ..\n if (!features[0] || !features[0].getGeometry()) {\n return false;\n }\n const type = features[0].getGeometry().getType();\n return geometryType === type || (isSameBaseGeometryType(geometryType, type) && (Geometry.isMultiGeometry(geometryType) || !Geometry.isMultiGeometry(type)));\n })\n .map(l => ({\n id: l.get('id'),\n name: l.get('name'),\n external: true,\n })),\n\n ].sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())); // sorted by name\n //Listen add external Layer\n this.addExternalLayerKey = GUI.getService('catalog').onafter('addExternalLayer', ({ layer, type }) => {\n if ('vector' === type) {\n const externalLayer = GUI.getService('map').getExternalLayers().find(l => layer.id === l.get('id'));\n if (externalLayer) {\n const features = externalLayer.getSource().getFeatures() || [];\n if (!features[0] || !features[0].getGeometry()) { return }\n const type = features[0].getGeometry().getType();\n if (geometryType === type || (isSameBaseGeometryType(geometryType, type) && (Geometry.isMultiGeometry(geometryType) || !Geometry.isMultiGeometry(type)))) {\n this.copyFeatureLayers.push({\n id: externalLayer.get('id'),\n name: externalLayer.get('name'),\n external: true,\n })\n }\n }\n }\n })\n }\n\n this.copylayerid = this.copyFeatureLayers.length ? this.copyFeatureLayers[0].id : null; // current layer = first layer found\n\n this.loadEventuallyRelationValuesForInputs = false;\n\n // relation related to current feature of current layer in editing\n /**\n * Current relation feature (in editing)\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n this.currentRelationFeatureId = null;\n\n /**\n * layer id of relation layer\n */\n this._relationLayerId = this.relation.child === this.layerId ? this.relation.father : this.relation.child;\n\n /**\n * layer in relation type\n */ \n this._layerType = this.getLayer().getType();\n\n this.parentWorkflow = Workflow.Stack.getCurrent();\n\n /**\n * editing a constraint type\n */\n this.capabilities = this.parentWorkflow.getLayer().getEditingCapabilities();\n\n\n /**\n * relation tools\n */\n this.tools = [];\n\n const self = this;\n\n this._add_link_workflow = ({\n [Layer.LayerTypes.TABLE]: {\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/edittableworkflow.js@v3.7.1 */\n link(options = {}) {\n return new Workflow({\n ...options,\n type: 'edittable',\n backbuttonlabel: 'plugins.editing.form.buttons.save_and_back_table',\n steps: [ new OpenTableStep() ],\n });\n },\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addtablefeatureworkflow.js@v3.7.1 */\n add(options = {}) {\n return new Workflow({\n ...options,\n type: 'addtablefeature',\n steps: [\n new Step({ help: 'editing.steps.help.new', run: addTableFeature }),\n new OpenFormStep(),\n ],\n });\n },\n\n },\n [Layer.LayerTypes.VECTOR]: {\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/linkrelationworkflow.js@v3.7.1 */\n link(options = {}) {\n return new Workflow({\n type: 'linkrelation',\n steps: [\n new Step({\n ...options,\n help: \"editing.steps.help.select_feature_to_relation\",\n run(inputs, context) {\n return $promisify(new Promise(async (resolve, reject) => {\n //create a promise for setAndUnsetSelectedFeaturesStyle;\n const promise = new Promise(r => this.resolve = r);\n GUI.setModal(false);\n const editingLayer = inputs.layer.getEditingLayer();\n try {\n if (context.beforeRun && 'function' === typeof context.beforeRun) {\n await promisify(context.beforeRun());\n }\n const features = editingLayer.getSource().getFeatures().filter(f => Object.entries(context.excludeFeatures || {}).reduce((bool, [field, value]) => bool && value != f.get(field), true))\n setAndUnsetSelectedFeaturesStyle({\n promise: $promisify(promise),\n inputs: { layer: inputs.layer, features },\n style: this.selectStyle\n });\n\n this.addInteraction(\n new PickFeatureInteraction({ layers: [editingLayer], features }), {\n 'picked': e => {\n inputs.features.push(e.feature); // push relation\n GUI.setModal(true);\n resolve(inputs);\n }\n });\n } catch(e) {\n console.warn(e);\n reject(e);\n }\n }))\n },\n stop() {\n GUI.setModal(true);\n //resolve to resolve setAndUnsetSelectedFeaturesStyle\n this.resolve(true);\n this.resolve = null;\n return true;\n },\n })\n ]\n });\n },\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addfeatureworkflow.js@v3.7.1 */\n add: (options = {}) => {\n const addStep = new AddFeatureStep({\n ...options,\n steps: {\n draw: {\n description: `editing.steps.help.draw_new_feature`,\n done: false,\n }\n },\n tools: ['snap', 'measure']\n })\n\n addStep.on('stop', () => {\n addStep.setUserMessageStepDone('draw');\n GUI.closeUserMessage();\n })\n\n return new Workflow({\n ...options,\n type: 'addfeature',\n steps: [\n addStep,\n new OpenFormStep(options),\n ],\n registerEscKeyEvent: true,\n })\n },\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/selectandcopyfeaturesfromotherlayerworkflow.js@v3.7.1 */\n selectandcopy(options = {}) {\n return new Workflow({\n type: 'selectandcopyfeaturesfromotherlayer',\n steps: [\n // pick project layer features\n new Step({\n ...options,\n help: \"editing.steps.help.pick_feature\",\n steps: {\n select: {\n description: `editing.workflow.steps.selectPoint`,\n done: false,\n }\n },\n run(inputs, context) {\n /** @TODO Create a component that ask which project layer would like to query */\n if (!options.copyLayer) {\n return $promisify(Promise.resolve());\n }\n return $promisify(async () => {\n // get features from copyLayer\n let features = [];\n const geometryType = inputs.layer.getGeometryType();\n\n /** @TODO NO VECTOR LAYER */\n if (options.isVector) {\n await (new Promise(async resolve => {\n this.addInteraction(\n options.external\n ? new PickFeaturesInteraction({ layer: options.copyLayer })\n : new PickCoordinatesInteraction(), {\n 'picked': async e => {\n try {\n features = convertToGeometry(\n options.external\n ? e.features // external layer\n : ((await DataRouterService.getData('query:coordinates', { // TOC/PROJECT layer\n inputs: {\n coordinates: e.coordinate,\n query_point_tolerance: ProjectsRegistry.getCurrentProject().getQueryPointTolerance(),\n layerIds: [ options.copyLayer.getId() ],\n multilayers: false\n },\n outputs: null\n })).data[0] || { features: [] }).features,\n geometryType,\n )\n } catch(e) {\n console.warn(e);\n } finally {\n resolve()\n }\n }\n }\n );\n }));\n }\n\n let _feature;\n\n try {\n _feature = features.length > 1\n ? await promisify(chooseFeatureFromFeatures({ features, inputs }))\n : features[0];\n } catch (e) {\n console.warn(e);\n }\n\n if (_feature) {\n const feature = new Feature({\n feature: _feature,\n properties: inputs.layer.getEditingFields().filter(attr => !attr.pk).map(attr => attr.name)\n });\n feature.setTemporaryId();\n inputs.features = [feature];\n inputs.layer.getEditingLayer().getSource().addFeature(feature);\n context.session.pushAdd(inputs.layer.getId(), feature, false);\n return inputs;\n }\n\n GUI.showUserMessage({\n type: 'warning',\n message: 'plugins.editing.messages.no_feature_selected',\n closable: false,\n autoclose: true\n });\n\n return Promise.reject();\n });\n },\n stop() {\n self.show_vector_tools = false;\n this.setUserMessageStepDone('select');\n GUI.closeUserMessage();\n }\n }),\n new OpenFormStep(options),\n ],\n registerEscKeyEvent: true,\n });\n },\n\n },\n })[this._layerType];\n\n // add tools for each relation\n this.relations.forEach(r => this.addTools(r.id) );\n },\n\n async activated() {\n //in the case of vector relation, the current extent of map whe is actived\n //it used to sto an extent of the map at the moment of possibible editing (and zoom)\n // to relation feature\n if (this.isVectorRelation) {\n this.mapExtent = GUI.getService('map').getMapBBOX();\n }\n\n this.show_vector_tools = false;\n\n if (!this.loadEventuallyRelationValuesForInputs) {\n this.loading = true;\n\n try {\n await g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').runEventHandler({\n type: 'show-relation-editing',\n id: getRelationId({ layerId: this.layerId, relation: this.relation }),\n component: this,\n });\n } catch(e) {\n console.warn(e)\n }\n\n this.loading = false;\n\n this.loadEventuallyRelationValuesForInputs = true;\n }\n\n this.active = true;\n\n await this.$nextTick();\n\n if (!this.relationsTable && this.relations.length > 0) {\n this._createDataTable();\n }\n\n\n this.resize();\n },\n\n deactivated() {\n this.destroyTable();\n this.active = false;\n //need to unselect relaion when click on back control form\n this.relations.forEach(r => r.select = false);\n\n },\n\n beforeDestroy() {\n this.loadEventuallyRelationValuesForInputs = true;\n // unlisten\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').off('commit', this.onCommit);\n // In the case of vector relation, restore the beginning extent of the map;\n // in the case we zoomed to relation feature\n if (this.isVectorRelation && (null !== this.currentRelationFeatureId)) {\n GUI.getService('map').zoomToExtent(this.mapExtent);\n this.mapExtent = null;\n }\n //remove event\n if (this.addExternalLayerKey) {\n GUI.getService('catalog').un('addExternalLayer', this.addExternalLayerKey);\n this.addExternalLayerKey = null;\n }\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(_vm.loading),expression:\"loading\"}],staticStyle:{\"margin-bottom\":\"5px\"}},[_c('bar-loader',{attrs:{\"loading\":_vm.loading}}),_vm._v(\" \"),_c('div',{ref:\"relation_header_title\",staticClass:\"relation_header_title box-header with-border skin-color\"},[_c('span',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.edit_relation'),expression:\"'editing.edit_relation'\"}]}),_vm._v(\" \"),_c('span',{staticStyle:{\"margin-left\":\"2px\"}},[_vm._v(\": \"+_vm._s(_vm.relation.name.toUpperCase()))])]),_vm._v(\" \"),_c('div',{ref:\"relation_header_tools\",staticClass:\"relation_header_tools box-header with-border\"},[_c('div',{attrs:{\"id\":\"search-box\"}},[(_vm.relationsLength)?_c('input',{staticClass:\"form-control\",attrs:{\"type\":\"text\",\"id\":\"filterRelation\",\"placeholder\":_vm.placeholdersearch}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"g3w-editing-relations-add-link-tools\"},[(_vm.relationsLength > 0 && _vm.capabilities.includes('change_attr_feature'))?_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:bottom.create\",value:('plugins.editing.tools.update_multi_features_relations'),expression:\"'plugins.editing.tools.update_multi_features_relations'\",arg:\"bottom\",modifiers:{\"create\":true}}],staticClass:\"g3w-icon\"},[_c('span',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(_vm.relations.every(function (r) { return !r.select; })),expression:\"relations.every(r => !r.select)\"}],on:{\"click\":function($event){$event.stopPropagation();return _vm.editAttributesRelations()}}},[_c('img',{attrs:{\"height\":\"25\",\"width\":\"25\",\"src\":(_vm.resourcesurl + \"images/multiEditAttributes.png\")}})])]):_vm._e(),_vm._v(\" \"),(_vm.capabilities.includes('change_attr_feature'))?_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:bottom.create\",value:('plugins.editing.form.relations.tooltips.link_relation'),expression:\"'plugins.editing.form.relations.tooltips.link_relation'\",arg:\"bottom\",modifiers:{\"create\":true}}],staticClass:\"g3w-icon add-link\",class:[{ 'disabled': !_vm.show_add_link }, _vm.g3wtemplate.font['link']],attrs:{\"align\":\"center\"},on:{\"click\":function($event){$event.stopPropagation();_vm.show_add_link ? _vm.linkRelation() : null}}}):_vm._e(),_vm._v(\" \"),(_vm.capabilities.includes('add_feature'))?_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:bottom.create\",value:('plugins.editing.form.relations.tooltips.add_relation'),expression:\"'plugins.editing.form.relations.tooltips.add_relation'\",arg:\"bottom\",modifiers:{\"create\":true}}],staticClass:\"g3w-icon add-link pull-right\",class:[{ 'disabled' : !_vm.show_add_link }, _vm.g3wtemplate.font['plus']],on:{\"click\":function($event){$event.stopPropagation();_vm.show_add_link ? _vm.addRelationAndLink() : null}}}):_vm._e()])]),_vm._v(\" \"),(_vm.show_vector_tools)?_c('section',{ref:\"relation_vector_tools\",staticClass:\"relation_vector_tools\"},[_c('span',{staticClass:\"close_vector_relation_tool\",on:{\"click\":function($event){$event.stopPropagation();return _vm.closeVectorTools.apply(null, arguments)}}},[_c('i',{staticClass:\"g3w-icon skin-color\",class:_vm.g3wtemplate.font['close']})]),_vm._v(\" \"),_c('div',[_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.relation.draw_new_feature'),expression:\"'editing.relation.draw_new_feature'\"}],staticClass:\"g3w-editing-new-relation-vector-type\"}),_vm._v(\" \"),_c('button',{staticClass:\"btn skin-button\",staticStyle:{\"width\":\"100%\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.addVectorRelation.apply(null, arguments)}}},[_c('i',{class:_vm.g3wtemplate.font['pencil']})])]),_vm._v(\" \"),_c('section',[_c('span',{staticClass:\"divider\"}),_vm._v(\" \"),_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.relation.draw_or_copy'),expression:\"'editing.relation.draw_or_copy'\"}],staticStyle:{\"align-self\":\"center\"}}),_vm._v(\" \"),_c('span',{staticClass:\"divider\"}),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"g3w-select-editable-layers-content\"}},[_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.relation.copy_feature_from_other_layer'),expression:\"'editing.relation.copy_feature_from_other_layer'\"}],staticClass:\"g3w-editing-new-relation-vector-type\"}),_vm._v(\" \"),_c('select',{directives:[{name:\"select2\",rawName:\"v-select2\",value:('copylayerid'),expression:\"'copylayerid'\"}],attrs:{\"id\":\"g3w-select-editable-layers-to-copy\"}},_vm._l((_vm.copyFeatureLayers),function(layer){return _c('option',{key:layer.id,domProps:{\"value\":layer.id}},[_vm._v(_vm._s(layer.name))])}),0),_vm._v(\" \"),_c('button',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(0 === _vm.copyFeatureLayers.length),expression:\"0 === copyFeatureLayers.length\"}],staticClass:\"btn skin-button\",on:{\"click\":function($event){$event.stopPropagation();return _vm.copyFeatureFromOtherLayer.apply(null, arguments)}}},[_c('i',{class:_vm.g3wtemplate.font['clipboard']})])])])]):_vm._e(),_vm._v(\" \"),_c('div',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(_vm.disabled),expression:\"disabled\"}],ref:\"relation_body\",staticClass:\"relation_body box-body\"},[(_vm.relationsLength > 0 && !_vm.update)?_c('table',{ref:\"relationTable\",staticClass:\"table g3wform-relation-table table-striped nowrap\"},[_c('thead',[_c('tr',[_c('th',{staticStyle:{\"padding\":\"10px\"}},[_c('input',{staticClass:\"magic-checkbox\",attrs:{\"id\":\"select_all_relations\",\"type\":\"checkbox\"},domProps:{\"checked\":_vm.selectall},on:{\"change\":function($event){return _vm.updateSelectRelations()}}}),_vm._v(\" \"),_c('label',{staticStyle:{\"margin\":\"0\"},attrs:{\"for\":\"select_all_relations\"}},[_vm._v(\"\u00A0\")])]),_vm._v(\" \"),_c('th',{directives:[{name:\"t\",rawName:\"v-t\",value:('tools'),expression:\"'tools'\"}]}),_vm._v(\" \"),_c('th'),_vm._v(\" \"),_vm._l((_vm.relationAttributesSubset(_vm.relations[0])),function(attribute){return _c('th',[_vm._v(_vm._s(attribute.label))])})],2)]),_vm._v(\" \"),_c('tbody',_vm._l((_vm.relations),function(relation,index){return _c('tr',{key:relation.id,staticClass:\"featurebox-header\"},[_c('td',{staticStyle:{\"padding-top\":\"0\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(relation.select),expression:\"relation.select\"}],staticClass:\"magic-checkbox\",attrs:{\"id\":(\"select_relation__\" + index),\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(relation.select)?_vm._i(relation.select,null)>-1:(relation.select)},on:{\"change\":function($event){var $$a=relation.select,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(relation, \"select\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(relation, \"select\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(relation, \"select\", $$c)}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":(\"select_relation__\" + index)}})]),_vm._v(\" \"),_c('td',[_c('div',{staticStyle:{\"display\":\"flex\"}},_vm._l(((_vm.tools[index] || _vm.addTools(_vm.relations[index].id))),function(tool){\nvar _obj;\nreturn _c('div',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:top.create\",value:((\"plugins.\" + (tool.state.name))),expression:\"`plugins.${tool.state.name}`\",arg:\"top\",modifiers:{\"create\":true}}],key:tool.state.id,class:( _obj = { enabled: true, 'toggled': tool.state.active }, _obj[(\"editbtn \" + (tool.state.id))] = true, _obj ),on:{\"click\":function($event){$event.stopPropagation();return _vm.startTool(tool, index)}}},[_c('img',{attrs:{\"height\":\"20px\",\"width\":\"20px\",\"src\":(_vm.resourcesurl + \"images/\" + (tool.state.icon))}})])}),0)]),_vm._v(\" \"),_c('td',{staticClass:\"action-cell\"},[(!_vm.fieldrequired && _vm.capabilities.includes('change_attr_feature'))?_c('div',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.form.relations.tooltips.unlink_relation'),expression:\"'plugins.editing.form.relations.tooltips.unlink_relation'\",arg:\"right\",modifiers:{\"create\":true}}],staticClass:\"g3w-mini-relation-icon g3w-icon\",class:_vm.g3wtemplate.font['unlink'],attrs:{\"aria-hidden\":\"true\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.unlinkRelation(index)}}}):_vm._e()]),_vm._v(\" \"),_vm._l((_vm.relationAttributesSubset(relation)),function(attribute){return _c('td',[(_vm.isMedia(attribute.value) && _vm.getValue(attribute.value))?_c('div',{staticClass:\"preview\"},[_c('a',{attrs:{\"href\":_vm.getValue(attribute.value),\"target\":\"_blank\"}},[_c('div',{staticClass:\"previewtype\",class:_vm.getMediaType(attribute.value.mime_type).type},[_c('i',{staticClass:\"fa-2x\",class:_vm.g3wtemplate.font[_vm.getMediaType(attribute.value.mime_type).type]})])]),_vm._v(\" \"),_c('div',{staticClass:\"filename\"},[_vm._v(_vm._s(_vm.getValue(attribute.value).split('/').pop()))])]):(['photo', 'link'].includes(_vm.getFieldType(attribute)))?_c('a',{attrs:{\"href\":_vm.getValue(attribute.value),\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.getValue(attribute.value))+\"\\n \")]):_c('span',[_vm._v(_vm._s(_vm.getValue(_vm.getRelationFeatureValue(relation.id, attribute.name))))])])})],2)}),0)]):_vm._e()])],1)}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-13b1e87a_0\", { source: \".g3w-editing-new-relation-vector-type[data-v-13b1e87a]{margin-bottom:5px;font-weight:700}.relation_header_title[data-v-13b1e87a]{width:100%;display:flex;font-weight:700;font-size:1.3em;align-items:center;background-color:#fff}.relation_header_tools[data-v-13b1e87a]{width:100%;display:flex;background-color:#fff}.g3w-editing-relations-add-link-tools[data-v-13b1e87a]{display:flex;justify-content:flex-end}.relation_vector_tools[data-v-13b1e87a]{display:flex;flex-direction:column;border:2px solid #eee;background-color:#fff;padding:10px}#g3w-select-editable-layers-content[data-v-13b1e87a]{flex-grow:1;display:flex;flex-direction:column}#search-box[data-v-13b1e87a]{margin-right:auto}.relation_body[data-v-13b1e87a]{padding:0}.g3wform-relation-table[data-v-13b1e87a]{width:100%}.close_vector_relation_tool[data-v-13b1e87a]{align-self:self-end}.close_vector_relation_tool>.g3w-icon[data-v-13b1e87a]{font-weight:700;cursor:pointer}.divider[data-v-13b1e87a]{display:block;position:relative;padding:0;margin-bottom:5px;height:0;width:100%;max-height:0;font-size:1px;line-height:0;clear:both;border:none;border-bottom:2px solid #eee}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-13b1e87a\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"FormRelation.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n import { Step } from '../g3wsdk/workflow/step';\n import { Workflow } from '../g3wsdk/workflow/workflow';\n import { OpenFormStep } from '../workflows';\n import { cloneFeature } from '../utils/cloneFeature';\n import { getRelationsInEditing } from '../utils/getRelationsInEditing';\n import { getFeatureTableFieldValue } from '../utils/getFeatureTableFieldValue';\n import { addTableFeature } from '../utils/addTableFeature';\n import { promisify } from '../utils/promisify';\n\n const { tPlugin } = g3wsdk.core.i18n;\n const { GUI } = g3wsdk.gui;\n const { resizeMixin } = g3wsdk.gui.vue.Mixins;\n const Media_Field = g3wsdk.gui.vue.Fields.media_field;\n\n Object\n .entries({\n Workflow,\n OpenFormStep,\n })\n .forEach(([k, v]) => console.assert(undefined !== v, `${k} is undefined`));\n\n const __vue_script__ = {\n\n name: 'Table',\n\n mixins: [ resizeMixin ],\n\n components: {\n 'g3w-media': Media_Field\n },\n\n data() {\n return {\n dataTable: null,\n show: true,\n state: this.$options.service.state,\n };\n\n },\n\n methods: {\n\n showTool(type) {\n return undefined !== this.state.capabilities.find(cap => cap === type);\n },\n\n async resize() {\n // skip when an element is hidden\n if ('none' === this.$el.style.display) {\n return;\n }\n\n await this.$nextTick();\n\n $('#editing_table div.dataTables_scrollBody').height(\n $(\".content\").height()\n - $('.close-panel-block').outerHeight()\n - $('#editing_table div.dataTables_scrollHeadInner').outerHeight()\n - $('.editing_table_title').outerHeight()\n - $('.editing_table_header').outerHeight()\n - $('.editing_table_relation_messagge').outerHeight()\n - $('.dataTables_length').outerHeight()\n - $('.dataTables_paginate.paging_simple_numbers').outerHeight()\n - $('.dataTables_info').outerHeight()\n - $('.dataTables_filter').outerHeight()\n - $('.table_editing_footer_buttons').outerHeight()\n - $('#editing_table .dataTables_paginate.paging_simple_numbers').outerHeight()\n );\n\n if (this.dataTable) {\n this.dataTable.columns.adjust();\n }\n },\n\n showValue(key) {\n return !!this.state.headers.find(h => key === h.name);\n },\n\n isMediaField(name) {\n let isMedia = false;\n for (let i = 0; i < this.state.headers.length; i++) {\n const header = this.state.headers[i];\n if (name === header.name && 'media' === header.input.type) {\n isMedia = true;\n break;\n }\n }\n return isMedia;\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n */\n stop() {\n this.state.promise.reject();\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n */\n save() {\n this.state.isrelation\n // link features (by indexes)\n ? this.state.promise.resolve({ features: (this._linkFeatures || []).map(i => this.state.features[i]) })\n : this.state.promise.resolve();\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n */\n cancel() {\n this.state.promise.reject();\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n * \n * @param uid feature uid\n * \n * @returns {Promise}\n */\n async deleteFeature(uid) {\n const element = $(`#editing_table table tr#${uid}`);\n const layer = this.state.inputs.layer;\n const layerId = layer.getId();\n const childRelations = layer.getChildren();\n const relationinediting = childRelations.length && getRelationsInEditing({\n layerId,\n relations: layer.getRelations().getArray()\n }).length > 0;\n \n try {\n await (\n new Promise((resolve, reject) => {\n GUI.dialog.confirm(\n `

${tPlugin('editing.messages.delete_feature')}

\n
${ relationinediting ? tPlugin('editing.messages.delete_feature_relations') : ''}
`,\n (result) => {\n if (result) {\n const index = this.state.features.findIndex(f => f.getUid() === uid);\n const feature = this.state.features[index];\n const session = this.state.context.session;\n const layerId = this.state.inputs.layer.getId();\n this.state.inputs.layer.getEditingSource().removeFeature(feature);\n session.pushDelete(layerId, feature);\n this.state.rows.splice(index, 1);\n resolve()\n } else {\n reject()\n }\n });\n })\n );\n\n this.dataTable.row(element).remove().draw();\n\n await this.$nextTick();\n } catch (e) {\n console.warn(e);\n }\n\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n * \n * Copy feature tool from another table feature\n * \n * @param uid\n * \n * @returns {Promise}\n */\n async copyFeature(uid) {\n await (\n new Promise(async (resolve, reject) => {\n const feature = cloneFeature(\n this.state.features.find(f => uid === f.getUid()),\n this.state.inputs.layer.getEditingLayer()\n );\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addtablefeatureworkflow.js@v3.7.1 */\n this.state.workflow = new Workflow({\n type: 'addtablefeature',\n steps: [\n new Step({ help: 'editing.steps.help.new', run: addTableFeature }),\n new OpenFormStep(),\n ],\n });\n this.state.inputs.features.push(feature);\n try {\n const outputs = await promisify(this.state.workflow.start({\n context: this.state.context,\n inputs: this.state.inputs\n }));\n const feature = outputs.features[outputs.features.length -1];\n const newFeature = {};\n Object.entries(this.state.rows[0]).forEach(([ key, _ ]) => {\n newFeature[key] = getFeatureTableFieldValue({\n layerId: this.state.layerId,\n feature,\n property: key\n });\n });\n newFeature.__gis3w_feature_uid = feature.getUid();\n this.state.rows.push(newFeature);\n resolve(newFeature);\n } catch(e) {\n console.warn(e); reject(e);\n } finally {\n this.state.workflow.stop();\n /** @TODO check input.features that grow in number */\n console.log('here we are')\n }\n })\n );\n\n this.show = false;\n this.dataTable.destroy();\n\n await this.$nextTick();\n\n this.show = true;\n\n await this.$nextTick();\n\n this.setDataTable();\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n */\n async editFeature(uid) {\n const index = this.state.features.findIndex(f => uid === f.getUid());\n const feature = this.state.features[index];\n \n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/edittablefeatureworkflow.js@v3.7.1 */\n this.state.workflow = new Workflow({ type: 'edittablefeature', steps: [ new OpenFormStep() ] });\n \n const inputs = this.state.inputs;\n \n inputs.features.push(feature);\n\n try {\n const outputs = await promisify(\n this.state.workflow\n .start({\n context: this.state.context,\n inputs\n })\n );\n const feature = outputs.features[outputs.features.length -1];\n Object\n .entries(this.state.rows[index])\n .forEach(([key, _]) => {\n this.state.rows[index][key] = getFeatureTableFieldValue({\n layerId: this.state.layerId,\n feature,\n property: key\n });\n });\n } catch(e) {\n console.warn(e);\n } finally {\n this.state.workflow.stop()\n }\n },\n\n linkFeature(index, evt) {\n if (evt.target.checked) { this._linkFeatures.push(index) }\n else { this._linkFeatures = this._linkFeatures.filter(addindex => addindex !== index) }\n },\n\n getValue(value) {\n if (value && 'object' === typeof value && Object === value.constructor) {\n value = value.value;\n } else if ('string' == typeof value && 0 === value.indexOf('_new_')) {\n value = null;\n }\n return value;\n },\n\n setDataTable() {\n this.dataTable = $('#editing_table table').DataTable({\n columnDefs: [ { orderable: false, targets: 0 }],\n order: [ 1, 'asc' ],\n pageLength: 10,\n scrollCollapse: true,\n scrollResize: true,\n scrollX: true,\n });\n this.resize();\n },\n\n },\n\n beforeCreate() {\n this.delayType = 'debounce';\n\n GUI.disableSideBar(true);\n\n GUI.showUserMessage({\n type: 'loading',\n message: 'plugins.editing.messages.loading_table_data',\n autoclose: false,\n closable: false\n });\n },\n\n async mounted() {\n\n await this.$nextTick();\n\n if (this.state.isrelation) { this._linkFeatures = [] }\n\n this.setDataTable();\n\n this.resize();\n\n setTimeout( () => GUI.closeUserMessage(), 300);\n },\n\n beforeDestroy() {\n this.cancel();\n this._linkFeatures = null;\n this.dataTable.destroy();\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"g3w-editing-table\",attrs:{\"id\":\"editing_table\"}},[_c('div',{ref:\"editing_table_header\",staticClass:\"editing_table_header\"},[_c('div',{staticClass:\"editing_table_header_content\"},[_c('h3',{staticClass:\"editing_table_title\"},[_vm._v(_vm._s(_vm.state.title))])]),_vm._v(\" \"),(_vm.state.isrelation)?_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.relation.table.info'),expression:\"'editing.relation.table.info'\"}],staticClass:\"editing_table_relation_messagge\"}):_vm._e()]),_vm._v(\" \"),(_vm.show)?_c('table',{staticClass:\"display\",staticStyle:{\"width\":\"100%\"}},[_c('thead',[_c('tr',[(!_vm.state.isrelation)?_c('th',{staticStyle:{\"max-width\":\"60px\"}}):_vm._e(),_vm._v(\" \"),(_vm.state.isrelation)?_c('th'):_vm._e(),_vm._v(\" \"),_vm._l((_vm.state.headers),function(header){return _c('th',[_vm._v(_vm._s(header.label))])})],2)]),_vm._v(\" \"),_c('tbody',_vm._l((_vm.state.rows),function(feature,index){return _c('tr',{key:feature.__gis3w_feature_uid,attrs:{\"id\":feature.__gis3w_feature_uid}},[(!_vm.state.isrelation)?_c('td',[_c('div',{attrs:{\"id\":\"table-editing-tools\"}},[_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.table.edit'),expression:\"'plugins.editing.table.edit'\",arg:\"right\",modifiers:{\"create\":true}}]},[(_vm.showTool('change_attr_feature'))?_c('i',{staticClass:\"g3w-icon\",class:_vm.g3wtemplate.font['pencil'],staticStyle:{\"color\":\"#30cce7\"},attrs:{\"aria-hidden\":\"true\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.editFeature(feature.__gis3w_feature_uid)}}}):_vm._e()]),_vm._v(\" \"),_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.table.copy'),expression:\"'plugins.editing.table.copy'\",arg:\"right\",modifiers:{\"create\":true}}]},[(_vm.showTool('add_feature'))?_c('i',{staticClass:\"g3w-icon\",class:_vm.g3wtemplate.font['copy-paste'],staticStyle:{\"color\":\"#d98b14\",\"padding\":\"5px 7px 5px 7px\"},attrs:{\"aria-hidden\":\"true\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.copyFeature(feature.__gis3w_feature_uid)}}}):_vm._e()]),_vm._v(\" \"),_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.table.delete'),expression:\"'plugins.editing.table.delete'\",arg:\"right\",modifiers:{\"create\":true}}]},[(_vm.showTool('delete_feature'))?_c('i',{staticClass:\"g3w-icon\",class:_vm.g3wtemplate.font['trash-o'],staticStyle:{\"color\":\"red\"},attrs:{\"aria-hidden\":\"true\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.deleteFeature(feature.__gis3w_feature_uid)}}}):_vm._e()])])]):_vm._e(),_vm._v(\" \"),(_vm.state.isrelation)?_c('td',[_c('input',{staticClass:\"magic-checkbox\",attrs:{\"id\":(\"relation__\" + index),\"type\":\"checkbox\"},on:{\"change\":function($event){return _vm.linkFeature(index, $event)}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":(\"relation__\" + index)}})]):_vm._e(),_vm._v(\" \"),_vm._l((feature),function(value,key){return (_vm.showValue(key))?_c('td',{key:key},[(_vm.getValue(value) && _vm.isMediaField(key))?_c('g3w-media',{attrs:{\"state\":value}}):_c('p',[_vm._v(_vm._s(_vm.getValue(value)))])],1):_vm._e()})],2)}),0)]):_vm._e(),_vm._v(\" \"),_c('div',{ref:\"table_editing_footer_buttons\",staticClass:\"table_editing_footer_buttons\",attrs:{\"id\":\"buttons\"}},[_c('button',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:(_vm.state.isrelation ? 'editing.form.buttons.save_and_back' : 'editing.form.buttons.save'),expression:\"state.isrelation ? 'editing.form.buttons.save_and_back' : 'editing.form.buttons.save'\"}],staticClass:\"btn btn-success\",staticStyle:{\"margin-right\":\"10px\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.save.apply(null, arguments)}}}),_vm._v(\" \"),_c('button',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.form.buttons.cancel'),expression:\"'editing.form.buttons.cancel'\"}],staticClass:\"btn btn-danger\",on:{\"click\":function($event){$event.stopPropagation();return _vm.cancel.apply(null, arguments)}}})])])}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-9019478e_0\", { source: \".g3w-editing-table table.dataTable tbody td{padding:3px 5px}\", map: undefined, media: undefined })\n,inject(\"data-v-9019478e_1\", { source: \".editing_table_title[data-v-9019478e]{margin-top:0;margin-bottom:2px;font-size:1.5em;font-weight:700;color:var(--skin-color)}#table-editing-tools[data-v-9019478e]{display:flex;justify-content:space-between}#table-editing-tools i[data-v-9019478e]{margin:5px}#buttons button.btn[data-v-9019478e]{font-weight:700!important;min-width:80px}.table_editing_footer_buttons[data-v-9019478e]{position:absolute;bottom:10px;width:100%;display:flex;justify-content:center}.editing_table_header_content[data-v-9019478e]{display:flex;justify-content:space-between;align-items:baseline}.editing_table_relation_messagge[data-v-9019478e]{margin-bottom:10px;font-size:1.3em;background-color:#f5f5f5;padding:3px;border-radius:3px;font-weight:700}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-9019478e\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"Table.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "import { evaluateExpressionFields } from '../utils/evaluateExpressionFields';\nimport { getParentFormData } from '../utils/getParentFormData';\nimport { setFeaturesSelectedStyle } from '../utils/setFeaturesSelectedStyle';\nimport { setAndUnsetSelectedFeaturesStyle } from '../utils/setAndUnsetSelectedFeaturesStyle';\nimport { getFormFields } from '../utils/getFormFields';\nimport { chooseFeatureFromFeatures } from '../utils/chooseFeatureFromFeatures';\nimport { handleRelation1_1LayerFields } from '../utils/handleRelation1_1LayerFields';\nimport { listenRelation1_1FieldChange } from '../utils/listenRelation1_1FieldChange';\nimport { getLayersDependencyFeatures } from '../utils/getLayersDependencyFeatures';\nimport { getEditingLayerById } from '../utils/getEditingLayerById';\nimport { setLayerUniqueFieldValues } from '../utils/setLayerUniqueFieldValues';\nimport { getRelationsInEditingByFeature } from '../utils/getRelationsInEditingByFeature';\nimport { getFeatureTableFieldValue } from '../utils/getFeatureTableFieldValue';\nimport { addRemoveToMultipleSelectFeatures } from '../utils/addRemoveToMultipleSelectFeatures';\nimport { promisify, $promisify } from '../utils/promisify';\nimport { isSameBaseGeometryType } from '../utils/isSameBaseGeometryType';\nimport { PickFeaturesInteraction } from '../interactions/pickfeaturesinteraction';\n\nimport { Workflow } from '../g3wsdk/workflow/workflow';\nimport { Step } from '../g3wsdk/workflow/step';\n\nconst { G3WObject, ApplicationState } = g3wsdk.core;\nconst { Geometry } = g3wsdk.core.geoutils;\nconst { convertSingleMultiGeometry } = g3wsdk.core.geoutils;\nconst { removeZValueToOLFeatureGeometry } = g3wsdk.core.geoutils.Geometry;\nconst { Layer } = g3wsdk.core.layer;\nconst { Feature } = g3wsdk.core.layer.features;\nconst { GUI } = g3wsdk.gui;\nconst { Component } = g3wsdk.gui.vue;\nconst { FormService } = g3wsdk.gui.vue.services;\nconst { AreaInteraction, LengthInteraction } = g3wsdk.ol.interactions.measure;\nconst { createMeasureTooltip, removeMeasureTooltip } = g3wsdk.ol.utils;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/addfeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/addfeaturestep.js@v3.7.1\n */\nexport class AddFeatureStep extends Step {\n\n constructor(options = {}) {\n options.help = \"editing.steps.help.draw_new_feature\";\n\n super(options);\n\n this._add = undefined === options.add ? true : options.add;\n\n this.drawInteraction;\n\n this.measeureInteraction;\n\n this.drawingFeature;\n\n this._snap = false === options.snap ? false : true;\n\n /**\n * Handle tasks that stops after `run(inputs, context)` promise (or if ESC key is pressed)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n this._stopPromise;\n\n /**\n *\n * @param e event\n * @returns {boolean|void}\n * @private\n * callback of pressing esc to remove last point drawed\n */\n this._delKeyRemoveLastPoint = e => 46 === e.keyCode && this.removeLastPoint();\n\n }\n\n run(inputs, context) {\n\n return $promisify(new Promise((resolve, reject) => {\n //create promise to listen to pass to setAndUnsetSelectedFeaturesStyle\n const promise = new Promise(r => this.resolve = r);\n\n const layerId = inputs.layer.getId();\n\n // Skip when a layer type is vector\n if (Layer.LayerTypes.VECTOR !== inputs.layer.getType()) { return }\n\n /** @since g3w-client-plugin-editing@v3.8.0 */\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(promise), inputs, style: this.selectStyle });\n\n const originalGeometryType = inputs.layer.getEditingGeometryType();\n\n this.geometryType = Geometry.getOLGeometry(originalGeometryType);\n\n const source = inputs.layer.getEditingLayer().getSource();\n const attributes = inputs.layer.getEditingFields();\n\n this.drawInteraction = this.addInteraction(\n new ol.interaction.Draw({\n type: this.geometryType,\n source: new ol.source.Vector(),\n condition: this._options.condition || (() => true),\n freehandCondition: ol.events.condition.never,\n finishCondition: this._options.finishCondition || (() => true),\n }), {\n 'drawstart': ({ feature }) => {\n this.drawingFeature = feature;\n document.addEventListener('keydown', this._delKeyRemoveLastPoint);\n },\n 'drawend': e => {\n let feature;\n if (this._add) {\n attributes.forEach(attr => e.feature.set(attr.name, null));\n feature = new Feature({ feature: e.feature, });\n feature.setTemporaryId();\n source.addFeature(feature);\n context.session.pushAdd(layerId, feature, false);\n } else {\n feature = e.feature;\n }\n // set Z values based on layer Geometry\n if (Geometry.is3DGeometry(originalGeometryType)) {\n feature = Geometry.addZValueToOLFeatureGeometry({ feature, geometryType: originalGeometryType });\n }\n\n inputs.features.push(feature);\n this.getContext().get_default_value = true;\n this.fireEvent('addfeature', feature); // emit event to get from subscribers\n resolve(inputs);\n },\n });\n\n this.drawInteraction.setActive(true);\n }))\n\n }\n\n /**\n * Method to add Measure\n */\n addMeasureInteraction() {\n const is_line = Geometry.isLineGeometryType(this.geometryType);\n const is_poly = Geometry.isPolygonGeometryType(this.geometryType);\n\n //Skip in case geometry is not Line or Polygon\n if (!is_line && !is_poly) { return }\n\n this.measureInteraction = this.addInteraction(\n new (is_line ? LengthInteraction : AreaInteraction)({\n projection: GUI.getService('map').getProjection(),\n drawColor: 'transparent',\n feature: this.drawingFeature\n })\n );\n\n this.measureInteraction.setActive(true);\n }\n\n /**\n * Remove Measure Interaction\n */\n removeMeasureInteraction() {\n if (this.measureInteraction) {\n this.measureInteraction.clear();\n this.removeInteraction(this.measureInteraction);\n this.measureInteraction = null;\n }\n }\n\n /**\n * Removed last point/vertex draw\n */\n removeLastPoint() {\n try {\n if (this.drawInteraction) { this.drawInteraction.removeLastPoint() }\n } catch (e) {\n console.warn(e)\n }\n }\n\n stop() {\n this.removeInteraction(this.drawInteraction);\n this.removeMeasureInteraction();\n this.resolve(true);\n\n this.drawInteraction = null;\n this.drawingFeature = null;\n this.resolve = null;\n\n document.removeEventListener('keydown', this._delKeyRemoveLastPoint);\n\n return true;\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/modifygeometryvertextask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/modifygeometryvertexstep.js@v3.7.1\n */\nexport class ModifyGeometryVertexStep extends Step {\n\n constructor(options = {}) {\n options.snap = undefined !== options.snap ? options.snap : true;\n options.help = \"editing.steps.help.edit_feature_vertex\";\n\n super(options);\n\n this._originalStyle = null;\n\n this._feature = null;\n\n this.tooltip;\n }\n\n run(inputs, context) {\n let newFeature, originalFeature;\n return $promisify(new Promise((resolve, reject) => {\n const layerId = inputs.layer.getId();\n const feature = this._feature = inputs.features[0];\n this._originalStyle = inputs.layer.getEditingLayer().getStyle();\n feature.setStyle(() => [\n new ol.style.Style({\n image: new ol.style.Circle({ radius: 5, fill: null, stroke: new ol.style.Stroke({color: 'orange', width: 2}) }),\n geometry: feature => new ol.geom.MultiPoint(\n ( // in the case of multipolygon geometry\n Geometry.isPolygonGeometryType(inputs.layer.getGeometryType())\n && Geometry.isMultiGeometry(inputs.layer.getGeometryType())\n ) ? feature.getGeometry().getCoordinates()[0][0] : feature.getGeometry().getCoordinates()[0]\n )\n }),\n new ol.style.Style({ stroke: new ol.style.Stroke({ color: 'yellow', width: 4 }) })\n ]);\n this._modifyInteraction = this.addInteraction(\n new ol.interaction.Modify({\n features: new ol.Collection(inputs.features),\n deleteCondition: this._options.deleteCondition,\n condition: (e) => {\n const features = e.map.getFeaturesAtPixel(e.pixel, { hitTolerance: 10 });\n //in a collections, the first element is a collection of features\n //instead the second element and the others are features\n if (features.length >= 2) { //consider maybe other features very close to current editing feature\n if (features.slice(1).find(f => feature._uid === f._uid)) {\n return true;\n }\n }\n resolve(inputs);\n },\n }), {\n 'modifystart': e => { originalFeature = e.features.getArray()[0].clone(); },\n 'modifyend': e => {\n const feature = e.features.getArray()[0];\n if (feature.getGeometry().getExtent() !== originalFeature.getGeometry().getExtent()) {\n evaluateExpressionFields({ inputs, context, feature }).finally(() => {\n newFeature = feature.clone();\n context.session.pushUpdate(layerId, newFeature, originalFeature);\n inputs.features.push(newFeature);\n });\n }\n }\n }\n );\n }))\n }\n\n addMeasureInteraction() {\n this._modifyInteraction.on('modifystart', e => {\n this.tooltip = createMeasureTooltip({ map: this.getMap(), feature: e.features.getArray()[0] });\n });\n }\n\n removeMeasureInteraction() {\n if (this.tooltip) { removeMeasureTooltip({ map: this.getMap(), ...this.tooltip }) }\n this.tooltip = null;\n }\n\n stop() {\n this._feature.setStyle(this._originalStyle);\n return true;\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/movefeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/movefeaturestep.js@v3.7.1\n */\nexport class MoveFeatureStep extends Step {\n\n constructor(options = {}) {\n options.help = \"editing.steps.help.move\";\n\n super(options);\n\n this.drawInteraction = null;\n this.promise; // need to be set here in case of picked features\n }\n\n run(inputs, context) {\n /** Need two different promises: One for stop() method and clean-selected feature,\n * and another one for a run task. If we use the same promise, when stop a task without move feature,\n * this.promise.resolve(), it fires also thenable method listens to resolve promise of a run task,\n * that call stop task method.*/\n return $promisify(new Promise((resolve) => {\n const promise = new Promise(r => this.resolve = r);\n const layerId = inputs.layer.getId();\n let originalFeature = null;\n this.changeKey = null;\n let isGeometryChange = false; // changed if geometry is changed\n\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(promise), inputs, style: this.selectStyle });\n\n this.addInteraction(\n new ol.interaction.Translate({\n features: new ol.Collection(inputs.features),\n hitTolerance: (isMobile && isMobile.any) ? 10 : 0 },\n ), {\n 'translatestart': e => {\n const feature = e.features.getArray()[0];\n this.changeKey = feature.once('change', () => isGeometryChange = true);\n originalFeature = feature.clone();\n },\n 'translateend': e => {\n ol.Observable.unByKey(this.changeKey);\n const feature = e.features.getArray()[0];\n if (isGeometryChange) {\n // evaluated geometry expression\n evaluateExpressionFields({ inputs, context, feature }).finally(() => {\n context.session.pushUpdate(layerId, feature.clone(), originalFeature);\n resolve(inputs);\n });\n } else {\n resolve(inputs);\n }\n },\n });\n\n }))\n }\n\n stop() {\n this.resolve(true);\n this.resolve = null;\n this.changeKey = null;\n }\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/openformtask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/openformstep.js@v3.7.1\n */\nexport class OpenFormStep extends Step {\n\n constructor(options = {}) {\n\n options.help = \"editing.steps.help.insert_attributes_feature\";\n\n super(options);\n\n /**\n * Show saveAll button\n *\n * @since v3.7\n */\n this._saveAll = false === options.saveAll ? options.saveAll : async () => {};\n\n /**\n * Whether it can handle multi edit features\n */\n this._multi = options.multi || false;\n\n /**\n * @FIXME set a default value + add description\n */\n this.layerId;\n\n /**\n * whether form is coming from parent table component\n */\n this._isContentChild = false;\n\n /**\n * @FIXME set a default value + add description\n */\n this._features;\n\n /**\n * @FIXME set a default value + add description\n */\n this._originalFeatures;\n\n /**\n * @FIXME set a default value + add description\n */\n this.promise;\n\n /**\n * @since g3w-client-plugin-editing@v3.7.0\n */\n this._unwatchs = [];\n\n }\n\n /**\n * @since v3.7\n * @param bool\n */\n updateMulti(bool = false) {\n this._multi = bool;\n }\n\n /**\n * @param inputs\n * @param context\n *\n * @returns {*}\n */\n run(inputs, context) {\n return $promisify(async () => {\n //@since 3.9.0 can set isContentChild attribute to force it\n // (case edit relation features from multi-parent features)\n this._isContentChild = undefined === context.isContentChild ? Workflow.Stack.getLength() > 1 : context.isContentChild;\n this.layerId = inputs.layer.getId();\n this._features = this._multi ? inputs.features : [inputs.features[inputs.features.length - 1]];\n this._originalFeatures = this._features.map(f => f.clone());\n\n //@since 3.9.0 promise\n const promise = new Promise((resolve) => {\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').subscribe(`closeform_${this.layerId}`, () => {\n resolve();\n return { once: true }; // once close form, remove subscribing\n })\n })\n\n //set selected features\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(promise), inputs, style: this.selectStyle });\n\n return new Promise(async (resolve, reject) => {\n\n GUI.setLoadingContent(false);\n\n GUI.getService('map').disableClickMapControls(true);\n\n if (!this._multi && Array.isArray(inputs.features[inputs.features.length - 1])) {\n resolve();\n return;\n }\n\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').setCurrentLayout();\n\n const layerName = inputs.layer.getName();\n\n // create a child relation feature set a father relation field value\n if (this._isContentChild) {\n context.fatherValue = context.fatherValue || []; // are array\n (context.fatherField || []).forEach((field, i) => {\n this._features[0].set(field, context.fatherValue[i]);\n this._originalFeatures[0].set(field, context.fatherValue[i]);\n });\n }\n\n const fields = getFormFields({\n inputs,\n context,\n feature: this._features[0],\n isChild: this._isContentChild,\n multi: this._multi,\n });\n\n // set fields. Useful getParentFormData\n Workflow.Stack.getCurrent().setInput({ key: 'fields', value: fields });\n\n // whether disable relations editing (ref: \"editmultiattributes\")\n const feature = !this._multi && inputs.features && inputs.features[inputs.features.length - 1];\n const layerId = !this._multi && inputs.layer.getId();\n\n // @since g3w-client-plugin-editing@v3.7.2\n // skip relations that don't have a form structure\n if (feature && !feature.isNew() && inputs.layer.getLayerEditingFormStructure()) {\n await getLayersDependencyFeatures(inputs.layer.getId(), {\n // @since g3w-client-plugin-editin@v3.7.0\n relations: inputs.layer.getRelations().getArray().filter(r =>\n inputs.layer.getId() === r.getFather() && // get only child relation features of current editing layer\n getEditingLayerById(r.getChild()) && // child layer is in editing\n 'ONE' !== r.getType() // exclude ONE relation (Join 1:1)\n ),\n feature,\n filterType: 'fid',\n });\n }\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/form/editingform.js@v3.7.8 */\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/form/editingformservice.js@v3.7.8 */\n const formService = GUI.showForm({\n feature: this._originalFeatures[0],\n title: \"plugins.editing.editing_attributes\",\n name: layerName,\n crumb: { title: layerName },\n id: `form_${layerName}`,\n dataid: layerName,\n layer: inputs.layer,\n isnew: this._originalFeatures.length > 1 ? false : this._originalFeatures[0].isNew(), // specify if is a new feature\n parentData: getParentFormData(),\n fields,\n context_inputs: this._multi ? false: { context, inputs },\n formStructure: inputs.layer.hasFormStructure() && inputs.layer.getLayerEditingFormStructure() || undefined,\n modal: true,\n push: this._options.push || this._isContentChild, /** @since v3.7 force push content on top without clear previous content */\n showgoback: undefined === this._options.showgoback ? !this._isContentChild : this._options.showgoback, /** @since v3.7 force show back button */\n /** @TODO make it straightforward: `headerComponent` vs `buttons` ? */\n headerComponent: this._saveAll && {\n template: /* html */ `\n
\n \n \n \n \n
\n \n \n \n \n \n \n `,\n name: 'Saveall',\n /** @TODO figure out who populate these props (ie. core client code?) */\n props: { update: { type: Boolean }, valid: { type: Boolean } },\n data() {\n return {\n enabled: Workflow.Stack._workflows.slice(0, Workflow.Stack.getLength() - 1)\n .every(w => {\n const valid = ((w.getContext().service instanceof FormService) ? w.getContext().service.getState() : {}).valid;\n return valid || undefined === valid;\n }),\n isChild: Workflow.Stack.getLength() > 1 && !(2 === Workflow.Stack.getLength() && Workflow.Stack.getFirst().isType('edittable'))\n };\n },\n computed: {\n /** @returns {boolean} whether disable save all button (eg. when parent or current form is not valid/ updated) */\n disabled() {\n return !this.enabled || !(this.valid && this.update);\n },\n },\n methods: {\n async saveAll() {\n //Set loading content\n GUI.setLoadingContent(true);\n //Disable form\n GUI.disableContent(true);\n await Promise.allSettled(\n [...Workflow.Stack._workflows]\n .reverse()\n .filter(w => \"function\" === typeof w.getLastStep()._saveAll) // need to filter only workflow that\n .map( w => new Promise(async (resolve) => {\n const task = w.getLastStep();\n const fields = w.getContext().service.state.fields.filter(f => task._multi ? null !== f.value : true);\n // skip when no fields\n if (0 === fields.length) { return }\n await Workflow.Stack.getCurrent().getContextService().saveDefaultExpressionFieldsNotDependencies();\n task._features.forEach(f => task.getInputs().layer.setFieldsWithValues(f, fields));\n const newFeatures = task._features.map(f => f.clone());\n //Is a relation form\n if (task._isContentChild) {\n task.getInputs().relationFeatures = { newFeatures, originalFeatures: task._originalFeatures };\n }\n await task.fireEvent('saveform', { newFeatures, originalFeatures: task._originalFeatures });\n newFeatures.forEach((f, i) => task.getContext().session.pushUpdate(task.layerId, f, task._originalFeatures[i]));\n await handleRelation1_1LayerFields({ layerId: task.layerId, features: newFeatures, fields, task });\n task.fireEvent('savedfeature', newFeatures); // called after saved\n task.fireEvent(`savedfeature_${task.layerId}`, newFeatures); // called after saved using layerId\n task.getContext().session.save();\n return resolve();\n }))\n )\n try {\n await promisify(g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').service.commit({ modal: false }));\n [...Workflow.Stack._workflows]\n .reverse()\n .filter(w => \"function\" === typeof w.getLastStep()._saveAll)\n .forEach(w => {\n const service = w.getContext().service; //form service\n //need to set update form false because already saved on server\n service.setUpdate(false, { force: false });\n const feature = service.feature;\n // Check if the feature is new.\n // In this case, after commit, need to set new to false, and force update to false.\n if (feature.isNew()) {\n feature.state.new = false;\n service.force.update = false;\n }\n Object.entries(\n w.getInputs().layer.getEditingSource().readFeatures()\n .find(f => f.getUid() === feature.getUid()) //Find current form editing feature by unique id of feature uid\n .getProperties() //get properties\n )\n .forEach(([k, v]) => {\n const field = service.getFields().find(f => k === f.name);\n //if field exists (geometry field is discarded)\n if (field) {\n field.value = field._value = v;\n }\n })\n })\n } catch(e) {\n console.warn(e);\n }\n //set loading content false\n GUI.setLoadingContent(false);\n //enable form\n GUI.disableContent(false);\n },\n /**\n * @since 3.9.0\n * Close editing form\n */\n async closeForm() {\n //get current active tool\n const tool = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.toolboxselected.getActiveTool();\n //stop active tool and wait\n await promisify(tool.stop());\n //clear all workflow stacks\n Workflow.Stack.clear();\n //check if the tool needs to run on time. If not, start again\n if (!tool.getOperator().runOnce) {\n tool.start();\n }\n }\n },\n },\n buttons: [\n {\n id: 'save',\n title: this._isContentChild\n ? Workflow.Stack.getParent().getBackButtonLabel() || \"plugins.editing.form.buttons.save_and_back\" // get custom back label from parent\n : \"plugins.editing.form.buttons.save\",\n type: \"save\",\n class: \"btn-success\",\n // save features\n cbk: async (fields) => {\n fields = this._multi ? fields.filter(f => null !== f.value) : fields;\n\n // skip when no fields\n if (0 === fields.length) {\n resolve(inputs);\n return;\n }\n\n const newFeatures = [];\n\n // @since 3.5.15\n GUI.setLoadingContent(true);\n GUI.disableContent(true);\n\n await Workflow.Stack.getCurrent().getContextService().saveDefaultExpressionFieldsNotDependencies();\n\n GUI.setLoadingContent(false);\n GUI.disableContent(false);\n\n this._features.forEach(f => {\n inputs.layer.setFieldsWithValues(f, fields);\n newFeatures.push(f.clone());\n });\n\n if (this._isContentChild) {\n inputs.relationFeatures = {\n newFeatures,\n originalFeatures: this._originalFeatures\n };\n }\n\n await this.fireEvent('saveform', { newFeatures, originalFeatures: this._originalFeatures});\n\n newFeatures.forEach((f, i) => context.session.pushUpdate(this.layerId, f, this._originalFeatures[i]));\n\n // check and handle if layer has relation 1:1\n await handleRelation1_1LayerFields({\n layerId: this.layerId,\n features: newFeatures,\n fields,\n task: this,\n });\n\n GUI.setModal(false);\n\n this.fireEvent('savedfeature', newFeatures); // called after saved\n this.fireEvent(`savedfeature_${this.layerId}`, newFeatures); // called after saved using layerId\n // In case of save of child, it means that child is updated so also parent\n if (this._isContentChild) {\n Workflow.Stack.getParents()\n //filter only with has getContextService to be sure\n .filter(w => w.getContextService() && w.getContextService().setUpdate)\n .forEach(w => w.getContextService().setUpdate(true, { force: true }));\n }\n //@TODO add field unique new value id not set\n resolve(inputs);\n }\n },\n {\n id: 'cancel',\n title: \"plugins.editing.form.buttons.cancel\",\n type: \"cancel\",\n class: \"btn-danger\",\n /// buttons in case of change\n eventButtons: {\n update: {\n false : {\n id: 'close',\n title: \"close\",\n type: \"cancel\",\n class: \"btn-danger\",\n }\n }\n },\n cbk: () => {\n this.fireEvent('cancelform', inputs.features); // fire event cancel form to emit to subscribers\n reject(inputs);\n }\n }\n ]\n });\n\n // Overwrite click on relation.\n // Open FormRelation.vue component\n formService.handleRelation = async e => {\n // Skip when multi editing features\n // It is not possible to manage relationss when we edit multi-features\n if (this._multi) {\n GUI.showUserMessage({ type: 'info', message: 'plugins.editing.errors.editing_multiple_relations', duration: 3000, autoclose: true });\n return;\n }\n GUI.setLoadingContent(true);\n //set unique values for relation layer based on unique fields\n //@TODO need a find a way to call once and not every time we open a relation\n await setLayerUniqueFieldValues(inputs.layer.getRelationById(e.relation.name).getChild());\n formService.setCurrentComponentById(e.relation.name);\n GUI.setLoadingContent(false);\n }\n\n formService.addComponents([\n // custom form components\n ...(g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.formComponents[layerId] || []),\n // relation components (exlcude ONE relation + layer is the father get relation layers that set in editing on g3w-admin)\n ...getRelationsInEditingByFeature({\n layerId,\n relations: this._multi ? [] : inputs.layer.getRelations().getArray().filter(r => r.getType() !== 'ONE' && r.getFather() === layerId),\n feature: this._multi ? false : inputs.features[inputs.features.length - 1],\n }).map(({ relation, relations }) => ({\n title: \"plugins.editing.edit_relation\",\n name: relation.name,\n id: relation.id,\n header: false, // hide a header form\n component: Vue.extend({\n mixins: [ require('../components/FormRelation.vue') ],\n name: `relation_${Date.now()}`,\n data() {\n return { layerId, relation, relations };\n },\n }),\n }))\n ]);\n\n // fire openform event\n this.fireEvent('openform',\n {\n layerId: this.layerId,\n session: context.session,\n feature: this._originalFeature,\n formService\n }\n );\n\n // set context service to form Service in case of a single task (i.e., no workflow)\n if (Workflow.Stack.getCurrent()) {\n Workflow.Stack.getCurrent().setContextService(formService);\n }\n\n //listen eventually field relation 1:1 changes value\n listenRelation1_1FieldChange({ layerId: this.layerId, fields, formService }).then(d => this._unwatchs = d);\n\n this.disableSidebar(true);\n });\n });\n }\n\n /**\n *\n */\n stop() {\n this.disableSidebar(false);\n\n //Check if form coming from the parent table component\n const is_parent_table = false === this._isContentChild || // no child workflow\n (\n // case edit feature of a table (edit layer alphanumeric)\n 2 === Workflow.Stack.getLength() && //open features table\n Workflow.Stack.getParent().isType('edittable')\n );\n // when the last feature of features is Array\n // and is resolved without setting form service\n // Ex. copy multiple features from another layer\n if (is_parent_table) {\n GUI.getService('map').disableClickMapControls(false);\n GUI.setModal(false);\n }\n\n const contextService = is_parent_table && Workflow.Stack.getCurrent().getContextService();\n\n // force update parent form update\n if (contextService && contextService.setUpdate && false === this._isContentChild) {\n contextService.setUpdate(false, { force: false });\n }\n\n //@since 3.9.0 add GUI.getContentLength() in case of edit multi relationfeatures tool\n GUI.closeForm({ pop: this.push || this._isContentChild && GUI.getContentLength() > 1 });\n\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').resetCurrentLayout();\n\n this.fireEvent('closeform');\n this.fireEvent(`closeform_${this.layerId}`);\n\n this.layerId = null;\n this._unwatchs.forEach(unwatch => unwatch());\n this._unwatchs = [];\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/opentabletask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/opentablestep.js@v3.7.1\n */\nexport class OpenTableStep extends Step {\n\n constructor(options = {}) {\n options.help = \"editing.steps.help.edit_table\";\n\n super(options);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/opentabletask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n *\n * @param inputs\n * @param context\n *\n * @returns {*}\n */\n run(inputs, context) {\n // set current plugin layout (right content)\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').setCurrentLayout();\n\n return $promisify(new Promise((resolve, reject) => {\n this._isContentChild = Workflow.Stack.getLength() > 1;\n const features = (inputs.layer.readEditingFeatures() || []);\n const headers = (inputs.layer.getEditingFields() || []).filter(h => features.length ? Object.keys(features[0].getProperties()).includes(h.name) : true);\n this._isContentChild = Workflow.Stack.getLength() > 1;\n const excludeFields = this._isContentChild ? (context.excludeFields || []) : [];\n const service = Object.assign(new G3WObject,\n {\n state: {\n inputs,\n context,\n promise: { resolve, reject },\n headers, // column names\n features,\n rows: features.length > 0\n // ordered properties\n ? (\n excludeFields.length > 0\n ? features.filter(feat => !excludeFields.reduce((a, f, i) => a && context.fatherValue[i] === `${feat.get(f)}` , true))\n : features\n )\n .map(f => headers.map(h => h.name).reduce((props, header) => Object.assign(props, {\n [header]: getFeatureTableFieldValue({ layerId: inputs.layer.getId(), feature: f, property: header }),\n '__gis3w_feature_uid': f.getUid(), // private attribute unique value\n }), {}))\n // features already bind to parent feature\n : features,\n title: `${inputs.layer.getName()}` || 'Link relation',\n isrelation: this._isContentChild,\n capabilities: inputs.layer.getEditingCapabilities(),\n layerId: inputs.layer.getId(),\n workflow: null,\n }\n }\n );\n\n GUI.showContent({\n content: new Component({\n title: `${inputs.layer.getName()}`,\n push: this._isContentChild,\n service,\n state: service.state,\n internalComponent: new (Vue.extend(require('../components/Table.vue').default))({ service }),\n }),\n push: this._isContentChild,\n showgoback: false,\n closable: false,\n });\n }))\n }\n\n /**\n *\n */\n stop() {\n this.disableSidebar(false);\n GUI[this._isContentChild ? 'popContent' : 'closeContent']();\n //reset the current plugin layout (right content) to application\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').resetCurrentLayout();\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/pickfeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/pickfeaturestep.js@v3.7.1\n */\nexport class PickFeatureStep extends Step {\n\n constructor(options = {}) {\n options.help = \"editing.steps.help.pick_feature\";\n options.highlight = options.highlight || false;\n options.multi = options.multi || false;\n super(options);\n }\n\n run(inputs) {\n const promise = new Promise((resolve) => {\n this.addInteraction(\n new PickFeaturesInteraction({ layer: inputs.layer.getEditingLayer() }), {\n 'picked': e => {\n if (0 === inputs.features.length) {\n inputs.features = e.features;\n inputs.coordinate = e.coordinate;\n }\n if (this._steps) { this.setUserMessageStepDone('select') }\n resolve(inputs);\n },\n });\n })\n return $promisify(async () => {\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(promise), inputs, style: this.selectStyle });\n return promise;\n })\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/selectelementstask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/selectelementsstep.js@v3.7.1\n */\nexport class SelectElementsStep extends Step {\n\n constructor(options = {}, chain) {\n options.help = options.help || \"editing.steps.help.select_elements\";\n\n super(options);\n\n this._selectInteractions = [];\n this.multipleselectfeatures = [];\n this._originalStyle;\n this._vectorLayer;\n\n if (chain) {\n this.on('run', () => { this.emit('next-step', g3wsdk.core.i18n.tPlugin(\"editing.steps.help.select_elements\")) });\n }\n }\n\n /**\n *\n * @param inputs\n * @param context\n * @returns {*}\n */\n run(inputs, context) {\n const layer = inputs.layer;\n const type = this._options.type || 'bbox'; // 'single' 'bbox' 'multiple';\n const buttonnext = 'multiple' === type && !!this._steps.select.buttonnext;\n\n return $promisify(new Promise((resolve, reject) => {\n\n if (buttonnext) {\n //check if it has already done handler function;\n const { done } = this._steps.select.buttonnext;\n this._steps.select.buttonnext.done = () => {\n if (done && done instanceof Function) { done() }\n resolve(inputs);\n }\n }\n\n const interactions = {};\n\n // add single select interaction\n if (['single', 'multiple'].includes(type)) {\n interactions.single = new PickFeaturesInteraction({ layer: layer.getEditingLayer() });\n interactions.single.on('picked', async ({ features }) => {\n let feature;\n if (features.length > 1) {\n try { feature = await chooseFeatureFromFeatures({ features, inputs: this.getInputs() }); }\n catch(e) { console.warn(e);}\n } else {\n feature = features[0];\n }\n\n if (feature) {\n inputs.features = [feature];\n if (buttonnext) {\n addRemoveToMultipleSelectFeatures([feature], inputs, this.multipleselectfeatures, this);\n } else {\n this._originalStyle = setFeaturesSelectedStyle(inputs.features);\n\n if (this._steps) { this.setUserMessageStepDone('select') }\n\n resolve(inputs);\n }\n }\n });\n }\n\n // add multiple select interactions\n if (['multiple', 'bbox'].includes(type) && ApplicationState.ismobile) {\n this._vectorLayer = new ol.layer.Vector({ source: new ol.source.Vector({}) });\n this.getMap().addLayer(this._vectorLayer);\n\n interactions.multi = new ol.interaction.Draw({ type: 'Circle', source: this._vectorLayer.getSource(), geometryFunction: ol.interaction.Draw.createBox() });\n\n interactions.multi.on('drawend', e => {\n const features = layer.getEditingLayer().getSource().getFeaturesInExtent(e.feature.getGeometry().getExtent());\n if (buttonnext) {\n addRemoveToMultipleSelectFeatures(features, inputs, this.multipleselectfeatures, this);\n } else {\n if (features.length > 0) {\n inputs.features = features;\n this._originalStyle = setFeaturesSelectedStyle(features);\n if (this._steps) { this.setUserMessageStepDone('select') }\n setTimeout(() => resolve(inputs), 500);\n } else { reject() }\n }\n });\n }\n\n if (['multiple', 'bbox'].includes(type) && !ApplicationState.ismobile) {\n interactions.dragbox = new ol.interaction.DragBox({ condition: ol.events.condition.shiftKeyOnly });\n\n interactions.dragbox.on('boxend', () => {\n const features = [];\n const extent = interactions.dragbox.getGeometry().getExtent();\n\n //https://openlayers.org/en/v5.3.0/apidoc/module-ol_source_Cluster-Cluster.html#forEachFeatureIntersectingExtent\n layer.getEditingLayer().getSource().forEachFeatureIntersectingExtent(extent, f => { features.push(f) });\n\n if (buttonnext) {\n addRemoveToMultipleSelectFeatures(features, inputs, this.multipleselectfeatures, this);\n } else {\n if (features.length > 0) {\n inputs.features = features;\n this._originalStyle = setFeaturesSelectedStyle(features);\n\n if (this._steps) { this.setUserMessageStepDone('select') }\n\n resolve(inputs);\n } else {\n reject();\n }\n }\n });\n }\n\n // pick feature from external layer added to map\n if ('external' === type) {\n const geometryType = layer.getGeometryType();\n const layerId = layer.getId();\n const source = layer.getEditingLayer().getSource();\n const { session } = this.getContext();\n interactions.external = new PickFeaturesInteraction({\n layers: GUI.getService('map').getExternalLayers()\n // filter external layer only vector - Exclude the\n // same base geometry\n .filter(l => {\n const features = 'VECTOR' == l.getType() && l.getSource().getFeatures();\n if (features.length > 0) {\n return isSameBaseGeometryType(features[0].getGeometry().getType(), geometryType)\n }\n return true;\n })\n });\n interactions.external.on('picked', e => {\n if (!(e.features.length > 0)) {\n reject();\n return;\n }\n const attributes = layer.getEditingFields();\n const geometry = e.features[0].getGeometry();\n if (geometryType !== geometry.getType()) {\n e.feature.setGeometry(convertSingleMultiGeometry(geometry, geometryType));\n }\n const feature = new Feature({\n feature: e.feature,\n properties: attributes.map(attr => {\n // set media attribute to null or attribute belong to layer but not present o feature copied\n if (attr.pk || 'media' === attr.input.type || undefined === e.feature.get(attr.name)) {\n e.feature.set(attr.name, null);\n }\n return attr.name\n })\n });\n\n // evaluate Geometry Expression\n evaluateExpressionFields({ inputs, context, feature }).finally(() => {\n removeZValueToOLFeatureGeometry({ feature }); // remove eventually Z Values\n feature.setTemporaryId();\n source.addFeature(feature);\n session.pushAdd(layerId, feature, false);\n inputs.features.push(feature);\n resolve(inputs);\n });\n });\n }\n\n Object.values(interactions).forEach(i => this.addInteraction(i));\n this._selectInteractions.push(...Object.values(interactions));\n }));\n }\n\n stop() {\n Object.values(this.getSteps() || {}).forEach(s => s.reset && s.reset() );\n this._selectInteractions.forEach(i => this.removeInteraction(i));\n\n if (this._vectorLayer) {\n this.getMap().removeLayer(this._vectorLayer);\n }\n // reset selected\n this.getInputs().features.forEach(f => f.setStyle(this._originalStyle));\n\n this._originalStyle = null;\n this._vectorLayer = null;\n this._selectInteractions = [];\n this.multipleselectfeatures = [];\n }\n\n}", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n const __vue_script__ = {\n\n name: 'Copyfeaturesfromotherlayers',\n\n data() {\n return {\n id: this.$options.layers.find(l => l.selected).id,\n };\n },\n\n watch: {\n 'id'(id) {\n this.$options.layers.forEach(l => l.selected = id === l.id);\n }\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('div',{attrs:{\"id\":\"g3w-select-editable-layers-content\"}},[_c('select',{directives:[{name:\"select2\",rawName:\"v-select2\",value:('id'),expression:\"'id'\"}],attrs:{\"id\":\"g3w-select-editable-layers-to-copy\"}},_vm._l((_vm.$options.layers),function(layer){return _c('option',{key:layer.id,domProps:{\"value\":layer.id}},[_vm._v(_vm._s(layer.name))])}),0)])])}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = undefined\n /* scoped */\n const __vue_scope_id__ = undefined\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"CopyFeaturesFromOtherLayers.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (false) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n \n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n undefined,\n undefined,\n undefined\n )\n\n export default __vue_component__", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param feature\n * @param coordinates\n *\n * @returns { boolean }\n */\nexport function areCoordinatesEqual({\n feature,\n coordinates,\n}) {\n //get geometry from feature\n const geometry = feature.getGeometry();\n const type = geometry.getType();\n const coords = (c1, c2) => g3wsdk.core.geoutils.areCoordinatesEqual(c1, c2); // whether element have same coordinates\n\n switch (type) {\n case 'Polygon':\n case 'MultiLineString':\n coordinates = coordinates.flat();\n return geometry.getCoordinates().flat().every((c, i) => coords(c, coordinates[i]));\n\n case 'LineString':\n case 'MultiPoint':\n return geometry.getCoordinates().every((c, i) => coords(c, coordinates[i]));\n\n case 'MultiPolygon':\n // in case of add part or remove part\n if (coordinates.length !== geometry.getPolygons().length) { return false }\n return geometry.getPolygons().some((poly, i) => {\n const _coords = coordinates[i].flat();\n return poly.getCoordinates().flat().every((c, i) => coords(c, _coords[i]))\n });\n\n case 'Point':\n return coords(coordinates, geometry.getCoordinates());\n\n default:\n return false;\n }\n}", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n import { areCoordinatesEqual } from '../utils/areCoordinatesEqual';\n import { getFeatureTableFieldValue } from '../utils/getFeatureTableFieldValue';\n\n const __vue_script__ = {\n\n name: \"changes\",\n\n props: {\n commits: {\n type: Object,\n required: true,\n },\n layer: {\n type: Object,\n required: true,\n },\n relation: {\n type: Boolean,\n default: false\n }\n },\n\n data() {\n return {\n features: this.layer.readFeatures(), // original features\n efeatures: this.layer.readEditingFeatures(), // edited features,\n };\n },\n\n methods: {\n\n getFormattedValue(feat, key) {\n if (!feat) { return }\n //need to check if the current attribute is geometry and if it has value (mean not feat of alphanumeical layer)\n if ('geometry' === key && feat.get(key)) {\n return `(${ feat.get(key).getFlatCoordinates().length / 2 })`;\n }\n return getFeatureTableFieldValue({\n layerId: this.layer.getId(),\n feature: feat,\n property: key\n });\n },\n\n /**\n * Get value from origina feature\n * @param item\n * @param key\n * @return {string|*}\n */\n getValue(item, key) {\n return this.getFormattedValue(this.getFeature(item), key);\n },\n\n /**\n * Get value from edited feature\n * @param item\n * @param key\n * @return {string|*}\n */\n getEditingValue(item, key) {\n return this.getFormattedValue(this.getEditingFeature(item), key);\n },\n\n hasValue(item, key) {\n const feat = this.getFeature(item);\n const efeat = this.getEditingFeature(item); // NB: undefined when deleted\n return !((feat && efeat && null === feat.get(key) && null === efeat.get(key)) ||\n (feat && !efeat && null === feat.get(key)));\n },\n\n /**\n * @returns { string } item id (when deleted is the item itself)\n */\n getId(item) {\n return item.id || item;\n },\n\n /**\n * @returns edited feature\n */\n getEditingFeature(item) {\n return this.efeatures.find(f => this.getId(item) === f.getId());\n },\n\n /**\n * @returns original feature\n */\n getFeature(item) {\n return this.features.find(f => this.getId(item) === f.getId());\n },\n\n /**\n * @returns { string } layer type or empty string when geometry is undefined (alphanumerical layer)\n */\n getType(item) {\n const feat = this.getEditingFeature(item) || this.getFeature(item); // when deleted fallbacks to original feature\n return (feat && feat.getGeometry && feat.getGeometry()) ? feat.getGeometry().getType() : ''\n },\n\n /**\n * @returns { boolean } whether feature property has been edited\n */\n isEdited(item, key) {\n const feat = this.getFeature(item); // NB: undefined when added\n const efeat = this.getEditingFeature(item); // NB: undefined when deleted\n if ([feat, efeat].includes(undefined)) { return false }\n if (this.getType(item) && 'geometry' === key) {\n return !areCoordinatesEqual({ feature: feat, coordinates: efeat.get(key).getCoordinates() });\n }\n return efeat.get(key) !== feat.get(key);\n },\n\n getAttrs(item) {\n const feat = this.getEditingFeature(item) || this.getFeature(item); // when deleted fallbacks to original feature\n return Object.entries(feat ? feat.getProperties() : {}).sort((a, b) => a[0] > b[0])\n },\n\n getLayerById(id) {\n return g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').service.getLayerById(id);\n },\n\n },\n\n async mounted() {\n // insert a visual reference for `` values\n this.$refs.value.filter(d => !d.textContent).forEach(d => d.innerHTML = `<empty>`);\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.relation)?_c('h4',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin:pre\",value:('editing.messages.commit.header_relation'),expression:\"'editing.messages.commit.header_relation'\",arg:\"pre\"}],staticClass:\"skin-color g3w-long-text\",staticStyle:{\"font-weight\":\"bold\",\"margin\":\"15px 0\"}},[_vm._v(\": \"+_vm._s(_vm.layer.getName()))]):_vm._e(),_vm._v(\" \"),_vm._l((Object.keys(_vm.commits).filter(function (c) { return _vm.commits[c].length; })),function(c){return [_c('h4',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin:pre\",value:((\"editing.messages.commit.\" + c)),expression:\"`editing.messages.commit.${c}`\",arg:\"pre\"}]},[_vm._v(\" (\"+_vm._s(_vm.commits[c].length)+\") \")]),_vm._v(\" \"),_c('divider'),_vm._v(\" \"),_c('ul',_vm._l((_vm.commits[c]),function(item){return _c('li',[_c('details',[_c('summary',[_vm._v(_vm._s(_vm.getType(item))+\" #\"+_vm._s(_vm.getId(item)))]),_vm._v(\" \"),_vm._l((_vm.getAttrs(item)),function(ref){\nvar key = ref[0];\nvar val = ref[1];\nreturn [(_vm.hasValue(item, key))?_c('dl',[_c('dt',[_vm._v(_vm._s(key)+\":\")]),_vm._v(\" \"),_c('dd',[(_vm.isEdited(item, key))?[_c('del',{ref:\"value\",refInFor:true},[_vm._v(_vm._s(_vm.getValue(item, key)))]),_vm._v(\" \u2190 \"),_c('ins',{ref:\"value\",refInFor:true},[_vm._v(_vm._s(_vm.getEditingValue(item, key)))])]:_c('span',{ref:\"value\",refInFor:true},[_vm._v(_vm._s(_vm.getEditingValue(item, key) || _vm.getValue(item, key)))]),_vm._v(\" \"),('geometry' === key)?_c('i',[_c('code',[_vm._v(\"\")])]):_vm._e()],2)]):_vm._e()]})],2)])}),0)]}),_vm._v(\" \"),_vm._l((Object.entries(_vm.commits.relations)),function(ref){\nvar id = ref[0];\nvar commits = ref[1];\nreturn _c('changes',{attrs:{\"commits\":{\n add: commits.add,\n update: commits.update,\n delete: commits.delete,\n relations: commits.relations\n },\"relation\":true,\"layer\":_vm.getLayerById(id)}})})],2)}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-98c805ac_0\", { source: \"summary[data-v-98c805ac]{display:list-item;font-weight:700;padding:.5em;cursor:pointer;background-color:rgb(255,255,0,.25);font-size:medium;user-select:none}ul[data-v-98c805ac]{list-style:none;padding-left:0}ul>li[data-v-98c805ac]{margin-bottom:8px}ins[data-v-98c805ac]{background-color:#0f0;text-decoration-line:none}del[data-v-98c805ac]{background-color:tomato}dl[data-v-98c805ac]{display:grid;grid-template:auto/.5fr 1fr;margin-bottom:0;word-break:break-all}dt[data-v-98c805ac]{background:#fee}dd[data-v-98c805ac]{background:#f0f1f3}dd[data-v-98c805ac],dt[data-v-98c805ac]{margin:0;padding:.3em .5em;border-top:1px solid #fff}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-98c805ac\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"Changes.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n const { GUI } = g3wsdk.gui;\n const { Layer } = g3wsdk.core.layer;\n const { getResolutionFromScale } = g3wsdk.ol.utils;\n const { tPlugin } = g3wsdk.core.i18n;\n\n let snapInteraction;\n\n const __vue_script__ = {\n\n name: 'Toolbox',\n\n props: [\n 'state',\n 'resourcesurl'\n ],\n\n data() {\n return {\n active: false,\n helpmessage: null,\n //@since 3.8.0\n toggled: {\n relation: false, //click on relation icon\n layer: false, //click on pencil icon\n },\n snapAll: false,\n };\n },\n\n computed: {\n\n /**\n * @since g3w-client-plugin-editing@v3.7.0\n */\n editDisabled() {\n return this.state.loading && !this.state.startstopediting;\n },\n\n /**\n * @returns { boolean } whether current has related layer(s) (aka. layer relations / joins)\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\n hasRelations() {\n return this.state.editing.dependencies.length > 0;\n },\n\n /**\n * @returns { boolean|* }\n */\n loading() {\n return this.state.loading || this.state.changingtools;\n },\n\n /**\n * @returns { boolean }\n */\n canEdit() {\n return this.state.editing.canEdit;\n },\n\n /**\n * @returns { boolean }\n */\n father() {\n return this.state.editing.father && this.hasRelations;\n },\n\n /**\n * @returns { boolean }\n */\n showtoolsoftool() {\n return this.state.toolsoftool.length > 0;\n },\n\n /**\n * @returns { Promise }\n */\n isLayerReady() {\n return this.state.layer.state.editing.ready;\n },\n\n toolboxCursor() {\n return (!this.isLayerReady || !this.canEdit) ? `url(${this.resourcesurl}cursors/mZoomIn.svg), zoom-in` : undefined;\n },\n\n /**\n * @since g3w-client-plugin-editing@v3.9.0\n */\n get_tool_title() {\n return title => g3wsdk.core.ApplicationState.language && tPlugin(title);\n },\n\n },\n\n methods: {\n\n /**\n * @fires setselectedtoolbox\n */\n select() {\n if (this.isLayerReady && !this.state.selected) {\n this.$emit('setselectedtoolbox', this.state.id);\n }\n },\n\n /**\n * Handle click to fit zoom scale\n * \n * @since g3w-client-plugin-editing@v3.9.0 \n */\n fitZoomToScale(e) {\n if (this.state.selected && !this.canEdit) {\n const map = GUI.getService('map')\n map.goToRes(map.getCenter(), getResolutionFromScale(this.state._constraints.scale, map.getMapUnits()));\n }\n },\n\n /**\n * @fires stoptoolbox\n * @fires starttoolbox\n */\n toggleEditing() {\n this.select();\n this.toggled.layer = !(this.state.editing.on || this.toggled.layer);\n if (this.toggled.layer && this.state.layer.state.editing.ready && !this.state.loading) {\n this.$emit(this.state.editing.on ? 'stoptoolbox' : 'starttoolbox', this.state.id);\n }\n if (!this.toggled.layer) {\n this.$emit('stoptoolbox', this.state.id);\n }\n\n },\n\n /**\n * @fires setactivetool\n * @fires stopactivetool\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n toggleTool(toolId) {\n if (undefined === toolId) {\n this.$emit('stopactivetool', this.state.id);\n } else {\n this.$emit('setactivetool', toolId, this.state.id);\n }\n this.select();\n },\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n toggleFilterByRelation() {\n this.toggled.relation = !this.toggled.relation;\n this.$emit('update-filter-layers', this.toggled.relation ? [this.state.id, ...this.state.editing.dependencies]: []);\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/components/ToolsOfToolSnap.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _initSnap() {\n const tool = (this.state.toolsoftool || []).find(t => 'snap' === t.type);\n\n if (!tool) {\n return;\n }\n\n /**\n * @FIXME add description\n */\n this.snapFeatures = new ol.Collection();\n\n /**\n * @FIXME add description\n */\n this.snapEvents = [];\n\n /**\n * editing toolboxes dependencies\n */\n this.snapToolboxes = [];\n\n /**\n * unwatched function\n */\n this.snapUnwatches = [];\n\n this.$watch(() => tool.options.checked, () => this.activeSnapInteraction());\n this.$watch(() => tool.options.checkedAll, () => this.activeSnapInteraction());\n // Toggle snap interaction\n this.$watch(() => tool.options.active, () => {\n if (tool.options.active) {\n this.activeSnapInteraction();\n } else if (snapInteraction) {\n GUI.getService('map').removeInteraction(snapInteraction);\n }\n });\n\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing')\n .getLayers()\n .filter(l => Layer.LayerTypes.VECTOR === l.getType()) // skip raster, alphanumerical..\n .forEach(l => {\n const toolbox = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').getToolBoxById(l.getId());\n const source = toolbox.getLayer().getEditingSource();\n\n this.snapFeatures.extend(source.readFeatures());\n\n this.snapEvents.push({\n source,\n olKey: source.getFeaturesCollection().on('add', evt => this.addSnapFeatures([evt.element])),\n settersAndKeys: {\n 'addFeatures': source.onbefore('addFeatures', this.addSnapFeatures),\n 'addFeature': source.onbefore('addFeature', this.addSnapFeatures),\n 'clear': source.onbefore('clear', () => { source.readFeatures().forEach(f => this.snapFeatures.remove(f)); })\n },\n });\n\n // SNAP TO ALL: check if the current editing layer is not equal to `layerId`\n if (tool.options.layerId !== l.getId()) {\n const editing = toolbox.getState().editing;\n this.snapUnwatches.push(this.$watch(() => editing.on, this.setShowSnapAll));\n this.snapToolboxes.push(editing);\n }\n });\n\n this.setShowSnapAll();\n\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/components/ToolsOfToolSnap.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _unloadSnap() {\n if (!snapInteraction) { return }\n\n try {\n // stops event listeners\n this\n .snapEvents\n .forEach(d => {\n Object\n .keys(d.settersAndKeys)\n .forEach(event => { d.source.un(event, d.settersAndKeys[event]) });\n ol.Observable.unByKey(d.olKey)\n });\n this.snapUnwatches.forEach(unwatch => unwatch());\n\n snapInteraction = null;\n\n this.snapUnwatches = null;\n this.snapToolboxes = null;\n this.snapEvents = null;\n } catch (e) {\n console.warn(e);\n }\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/components/ToolsOfToolSnap.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n addSnapFeatures(features) {\n this.snapFeatures.extend(features)\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/components/ToolsOfToolSnap.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setShowSnapAll() {\n const tool = (this.state.toolsoftool || []).find(t => 'snap' === t.type);\n if (tool) {\n this.snapAll = !!this.snapToolboxes.find(editing => editing.on);\n tool.options.checkedAll = tool.options.showSnapAll ? tool.options.checkedAll : false;\n }\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/components/ToolsOfToolSnap.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n activeSnapInteraction() {\n const map = GUI.getService('map');\n const tool = (this.state.toolsoftool || []).find(t => 'snap' === t.type);\n\n if (snapInteraction) {\n map.removeInteraction(snapInteraction);\n }\n\n snapInteraction = null;\n\n // snap = true\n if ((tool.options.checked || tool.options.checkedAll) && tool.options.active) {\n snapInteraction = new ol.interaction.Snap({\n source: !tool.options.checkedAll && tool.options.checked && tool.options.source, // SNAP TO LAYER: get option source as props pass from toolbox\n features: tool.options.checkedAll && this.snapFeatures // SNAP TO ALL: get features\n });\n map.addInteraction(snapInteraction);\n }\n },\n\n },\n\n watch: {\n\n async 'state.activetool'(tool) {\n await this.$nextTick();\n this.helpmessage = tool && (tool.messages.help || tool.name);\n },\n\n /**\n * Watch toolbox in editing state\n * \n * @fires on-editing\n */\n 'state.editing.on'(bool) {\n this.$emit('on-editing', bool);\n },\n\n 'state.toolsoftool'(newTools, oldTools) {\n if (!newTools.length) {\n oldTools.filter(t => 'measure' === t.type).forEach(t => t.options.onChange(false));\n this._unloadSnap();\n } else {\n this._initSnap();\n }\n },\n\n },\n\n /**\n * @fires canEdit\n */\n created() {\n this.$emit('canEdit', { id: this.state.id });\n // this._initSnap();\n },\n\n async mounted() {\n // wait a little bit so others plugin can change things in toolbox\n // (ex. tools visibility which differs from default behaviour)\n await this.$nextTick();\n },\n\n beforeDestroy() {\n this._unloadSnap();\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {\nvar _obj;\nvar _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.state.show),expression:\"state.show\"}],staticClass:\"toolbox\",attrs:{\"id\":'id_toolbox_' + _vm.state.id}},[_c('div',{staticClass:\"panel\",class:{\n 'mobile': _vm.isMobile(),\n 'toolboxselected': _vm.state.selected,\n 'toolboxactive': _vm.state.editing.on && _vm.canEdit,\n 'geolayer': _vm.state.layer.isGeoLayer(),\n },on:{\"click\":function($event){$event.stopPropagation();return _vm.select.apply(null, arguments)}}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isLayerReady),expression:\"!isLayerReady\"}],staticClass:\"bar-loader\"}),_vm._v(\" \"),(_vm.state.toolboxheader)?_c('div',{staticClass:\"panel-heading container\",style:({ background: _vm.state.color})},[(_vm.father)?_c('i',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.tooltip.filter_by_relation'),expression:\"'plugins.editing.tooltip.filter_by_relation'\",arg:\"right\",modifiers:{\"create\":true}}],class:'filter-by-relation ' + _vm.g3wtemplate.font['relation'],on:{\"click\":_vm.toggleFilterByRelation}}):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"panel-title\"},[_vm._v(_vm._s(_vm.state.title))]),_vm._v(\" \"),_c('i',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(_vm.editDisabled),expression:\"editDisabled\"},{name:\"t-tooltip\",rawName:\"v-t-tooltip:left.create\",value:('plugins.editing.tooltip.edit_layer'),expression:\"'plugins.editing.tooltip.edit_layer'\",arg:\"left\",modifiers:{\"create\":true}}],staticClass:\"start-editing editbtn skin-tooltip-left\",class:( _obj = {\n 'pull-right': !_vm.isMobile(),\n 'enabled': _vm.isLayerReady,\n 'g3w-icon-toggled': _vm.state.editing.on\n }, _obj[_vm.g3wtemplate.font[(_vm.state.editing.on || _vm.toggled.layer) ? 'checkmark' : 'pencil']] = true, _obj ),on:{\"click\":function($event){$event.stopPropagation();return _vm.toggleEditing.apply(null, arguments)}}})]):_vm._e(),_vm._v(\" \"),_c('bar-loader',{attrs:{\"loading\":_vm.loading}}),_vm._v(\" \"),(!_vm.state.changingtools && (_vm.state.editing.on || _vm.toggled.layer))?_c('div',{class:{ 'panel-body':true, disabled: (!_vm.isLayerReady || !_vm.canEdit) },style:({ cursor: _vm.toolboxCursor, padding: '15px' }),on:{\"click\":_vm.fitZoomToScale}},[(!_vm.state.layer.isGeoLayer())?_c('div',{staticClass:\"info\"},[_c('i',{class:_vm.g3wtemplate.font['info']}),_vm._v(\" \"),_c('span',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.messages.toolbox_has_no_geometry'),expression:\"'editing.messages.toolbox_has_no_geometry'\"}]}),_vm._v(\" \"),_c('divider')],1):_vm._e(),_vm._v(\" \"),(_vm.hasRelations)?_c('div',{staticClass:\"info\"},[_c('i',{class:_vm.g3wtemplate.font['info']}),_vm._v(\" \"),_c('span',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.messages.toolbox_has_relation'),expression:\"'editing.messages.toolbox_has_relation'\"}]}),_vm._v(\" \"),_c('divider')],1):_vm._e(),_vm._v(\" \"),(_vm.state.message)?_c('div',{staticStyle:{\"color\":\"#000\"}},[_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:(_vm.state.message),expression:\"state.message\"}],staticClass:\"text-justify\"}),_vm._v(\" \"),_c('divider')],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"tools-content\"},_vm._l((_vm.state.tools),function(tool){\n var _obj;\nreturn (tool.visible)?_c('div',{key:tool.id,class:( _obj = { 'enabled' : tool.enabled, 'toggled' : tool.active }, _obj[(\"editbtn \" + (tool.id))] = true, _obj ),on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();tool.enabled && _vm.toggleTool(tool.active ? undefined : tool.id)}}},[_c('img',{attrs:{\"height\":\"25\",\"width\":\"25\",\"src\":(_vm.resourcesurl + \"images/\" + (tool.icon)),\"title\":_vm.get_tool_title((\"\" + (tool.name)))}})]):_vm._e()}),0),_vm._v(\" \"),_c('div',{staticClass:\"message\",attrs:{\"id\":(\"id_toolbox_messages_\" + (_vm.state.id))}},[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.showtoolsoftool)?_c('div',{attrs:{\"id\":\"toolsoftoolcontainer\"}},[_vm._l((_vm.state.toolsoftool),function(tool){return [('measure' === tool.type)?_c('div',{staticClass:\"snap-tool\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(tool.options.checked),expression:\"tool.options.checked\"}],staticClass:\"magic-checkbox snap_tools_of_tools\",attrs:{\"id\":\"g3w_editing_show_measure_tool\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(tool.options.checked)?_vm._i(tool.options.checked,null)>-1:(tool.options.checked)},on:{\"change\":[function($event){var $$a=tool.options.checked,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(tool.options, \"checked\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(tool.options, \"checked\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(tool.options, \"checked\", $$c)}},function () { return tool.options.onChange(tool.options.checked); }]}}),_vm._v(\" \"),_c('label',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.toolsoftool.measure'),expression:\"'plugins.editing.toolsoftool.measure'\",arg:\"right\",modifiers:{\"create\":true}}],attrs:{\"for\":\"g3w_editing_show_measure_tool\"}},[_c('b',{class:_vm.g3wtemplate.font['measure']})])]):('snap' === tool.type)?_c('div',{staticClass:\"tools-of-tool-snap\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(tool.options.checked),expression:\"tool.options.checked\"}],staticClass:\"magic-checkbox snap_tools_of_tools\",attrs:{\"type\":\"checkbox\",\"id\":(\"snap_\" + (_vm.state.id))},domProps:{\"checked\":Array.isArray(tool.options.checked)?_vm._i(tool.options.checked,null)>-1:(tool.options.checked)},on:{\"change\":[function($event){var $$a=tool.options.checked,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(tool.options, \"checked\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(tool.options, \"checked\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(tool.options, \"checked\", $$c)}},function($event){_vm.snapAll && tool.options.checked ? tool.options.checkedAll = false : null}]}}),_vm._v(\" \"),_c('label',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:( 'plugins.editing.toolsoftool.snap'),expression:\" 'plugins.editing.toolsoftool.snap'\",arg:\"right\",modifiers:{\"create\":true}}],attrs:{\"for\":(\"snap_\" + (_vm.state.id))}},[_c('span',{class:_vm.g3wtemplate.font['magnete']})]),_vm._v(\" \"),(_vm.snapAll)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(tool.options.checkedAll),expression:\"tool.options.checkedAll\"}],staticClass:\"magic-checkbox snap_tools_of_tools\",attrs:{\"type\":\"checkbox\",\"id\":(\"snap_all_\" + (_vm.state.id))},domProps:{\"checked\":Array.isArray(tool.options.checkedAll)?_vm._i(tool.options.checkedAll,null)>-1:(tool.options.checkedAll)},on:{\"change\":[function($event){var $$a=tool.options.checkedAll,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(tool.options, \"checkedAll\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(tool.options, \"checkedAll\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(tool.options, \"checkedAll\", $$c)}},function($event){tool.options.checkedAll ? tool.options.checked = false : null}]}}):_vm._e(),_vm._v(\" \"),(_vm.snapAll)?_c('label',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:left.create\",value:('plugins.editing.toolsoftool.snapall'),expression:\"'plugins.editing.toolsoftool.snapall'\",arg:\"left\",modifiers:{\"create\":true}}],attrs:{\"for\":(\"snap_all_\" + (_vm.state.id))}},[_c('span',{class:_vm.g3wtemplate.font['magnete']}),_vm._v(\" \"),_c('b',{class:_vm.g3wtemplate.font['layers']})]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c('divider')]})],2):_vm._e()]),_vm._v(\" \"),(_vm.helpmessage)?_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:(_vm.helpmessage),expression:\"helpmessage\"}],staticClass:\"toolbox_help_message\"}):_vm._e()],1)]):_vm._e()],1)])}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-6686a500_0\", { source: \".panel.mobile[data-v-6686a500]{margin-bottom:5px}.panel.mobile .panel-heading[data-v-6686a500]{display:flex;justify-content:space-between}.panel.mobile .panel-heading .panel-title[data-v-6686a500]{margin-top:auto;margin-bottom:auto}.panel.mobile .panel-heading .start-editing[data-v-6686a500]{margin:auto;margin-right:0;padding:6px}.panel.mobile .tools-content .editbtn[data-v-6686a500]{padding:9px}.panel.mobile .toolbox .panel-body[data-v-6686a500]{padding:5px!important}.toolbox_help_message[data-v-6686a500]{font-weight:lighter}.toolbox[data-v-6686a500]{padding-bottom:5px}.panel[data-v-6686a500]{border:0!important;margin-bottom:8px}.panel-heading[data-v-6686a500]{border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px;padding:5px 10px 5px 10px;width:100%}.toolboxselected[data-v-6686a500]{box-shadow:0 0 0 3px var(--skin-color)}.panel:not(.toolboxselected) .info[data-v-6686a500]{opacity:.4}.panel:not(.toolboxactive) .panel-heading[data-v-6686a500]{border-radius:3px;filter:grayscale(.8)}.panel:not(.geolayer) .panel-body[data-v-6686a500]{padding-top:0}.panel.toolboxactive:not(.geolayer) .editbtn.start-editing[data-v-6686a500]{color:#fff!important}.panel:not(.geolayer) .panel-heading[data-v-6686a500]{color:#3a4448}.editbtn.start-editing[data-v-6686a500]{padding:10px;color:currentColor!important;font-size:1.1em;margin:0}.panel-title[data-v-6686a500]{font-weight:700;word-break:break-word;padding:8px 0;display:inline-block}#toolsoftoolcontainer[data-v-6686a500]{display:flex;flex-direction:column;margin:5px;padding:5px;border-radius:5px}.info[data-v-6686a500]{color:#000}.info>i[data-v-6686a500]{color:#007bff;padding-right:2px}.info+.tools-content[data-v-6686a500]{margin-top:1em}.filter-by-relation[data-v-6686a500]{margin-right:5px;cursor:pointer;color:currentColor!important}.tools-content[data-v-6686a500]{display:flex;flex-wrap:wrap;gap:10px}.message[data-v-6686a500]{margin-top:5px;margin-bottom:5px;font-size:1.1em;color:#000}.snap-tool[data-v-6686a500]{display:flex}.snap-tool label>b[data-v-6686a500]{color:#222d32!important}.tools-of-tool-snap[data-v-6686a500]{display:flex;width:100%;justify-content:space-between}.tools-of-tool-snap label span[data-v-6686a500]{color:#222d32!important}.panel-body[data-v-6686a500]{padding:15px}.panel-body.disabled[data-v-6686a500]{opacity:.7}.panel-body.disabled>*[data-v-6686a500]{pointer-events:none}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-6686a500\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"Toolbox.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n import ToolboxComponent from './Toolbox.vue';\n import { promisify } from '../utils/promisify';\n\n const { GUI } = g3wsdk.gui;\n const {\n ApplicationState,\n ApplicationService,\n } = g3wsdk.core;\n const { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\n const { DataRouterService } = g3wsdk.core.data;\n\n const __vue_script__ = {\n\n name: 'Editing',\n\n data() {\n return {\n state: this.$options.service.state,\n service: this.$options.service,\n resourcesurl: this.$options.resourcesurl,\n showcommitbar: this.$options.showcommitbar,\n saving: false, // whether to show loading bar while committing to server (click on save disk icon)\n layersInEditing: 0, //@since 3.8.0 Number of layers in editing\n editingButtonsEnabled: true,\n /** @since g3w-client-plugin-editing@v3.8.0 */\n selectedlayers: [],\n /** @since g3w-client-plugin-editing@v3.8.0 */\n editinglayers: Object.entries(g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing')\n .getEditableLayers())\n .filter(([_,l]) => l.config.editing.visible) //exclude layers that are set visible to false\n .map(([id, layer]) => ({ id, name: layer.getName(), title: layer.getTitle() })),\n /** @since g3w-client-plugin-editing@v3.8.0 */\n activetool: null,\n };\n },\n\n components: {\n toolbox: ToolboxComponent,\n },\n\n transitions: {\n 'addremovetransition': 'showhide'\n },\n\n methods: {\n\n /**\n *\n * @param layers\n */\n updateFilterLayers(layers = []) {\n if (layers.length > 0) {\n this._selectedlayers = this.selectedlayers;\n this.selectedlayers = layers;\n } else {\n this.selectedlayers = this._selectedlayers;\n this._selectedlayers = layers;\n }\n\n $(this.$refs.selectlayers).val(this.selectedlayers).trigger('change');\n },\n\n /**\n * Handle editing state of toolbox layer\n * \n * @param bool\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n updateLayersInEditing(bool) {\n this.layersInEditing += bool ? 1 : -1;\n },\n\n undo() {\n if (this.canUndo) { this.service.undo() }\n },\n\n redo() {\n if (this.canRedo) { this.service.redo() }\n },\n\n /**\n * @param toolboxId\n */\n commit(toolboxId) {\n if (this.canCommit) {\n this.saving = true;\n this.service\n .commit({\n toolbox: this.service.getToolBoxById(toolboxId),\n modal: false,\n })\n .always(() => this.saving = false);\n }\n },\n\n /**\n * @param id\n */\n async startToolBox(id) {\n const toolbox = this.service.getToolBoxById(id);\n // check if a dependency layer (in relation) has some changes not committed\n const layerId = ApplicationState.online && toolbox.getDependencies().find(id => this.service.getToolBoxById(id).isDirty());\n if (layerId) {\n await this.commit_dirty(layerId);\n }\n toolbox.start();\n },\n\n /**\n * @param id\n */\n async stopToolBox(id) {\n const toolbox = this.service.getToolBoxById(id);\n\n try {\n if (toolbox.state.editing.history.commit) {\n await promisify(this.service.commit());\n }\n } catch (e) {\n console.warn(e);\n }\n\n await toolbox.stop();\n\n // re-enable query map control\n const control = undefined === this.service.getToolBoxes().find(t => t.state.editing.on) && GUI.getService('map').getMapControlByType({ type: 'query' });\n if (control && !control.isToggled()) {\n control.toggle();\n }\n },\n\n /**\n * Start tool of toolbox\n * \n * @param toolId\n * @param toolboxId\n */\n async startTool(toolId, toolboxId) {\n\n const toolbox = this.service.getToolBoxById(toolboxId);\n const enabled = this.activetool && toolboxId === this.activetool;\n\n if (!enabled && this.service.getToolBoxById(toolbox.getDependencies().find(id => id === this.activetool))) {\n await this.commit_dirty(this.activetool);\n }\n\n if (!enabled) {\n this.stopTool(this.activetool);\n }\n\n this.activetool = toolboxId;\n toolbox.setActiveTool(toolbox.getToolById(toolId));\n },\n\n /**\n * @param id\n */\n stopTool(id) {\n if (id) {\n this.service.getToolBoxById(id).stopActiveTool();\n }\n },\n\n /**\n * @param id\n */\n async selectToolBox(id) {\n const toolbox = this.service.getToolBoxById(id); // get toolbox by id\n const toolboxes = this.service.getToolBoxes(); // get all toolboxes\n const selected = toolboxes.find(t => t.isSelected()); // check if exist already toolbox selected (first time)\n\n // set already selected false\n if (selected) {\n selected.setSelected(false);\n selected.clearMessage();\n }\n\n // set the current selected toolbox to true\n toolbox.setSelected(true);\n\n this.state.toolboxselected = toolbox;\n },\n\n /**\n * Ensure pending (un-saved) changes are committed before start to edit another layer,\n * which could be in relation with current level (eg. Join 1:1) in order to prevent an\n * out-of-sync database state on remote QGIS server.\n * \n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * @param { string } id\n *\n * @returns { Promise }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async commit_dirty(id) {\n const toolbox = this.service.getToolBoxById(id);\n\n // commit changes\n try {\n if (toolbox.isDirty() && toolbox.hasDependencies()) {\n await promisify(this.service.commit({ toolbox }));\n console.info('[EDITING] committed dirty')\n }\n } catch (e) {\n // revert changes (clear history and session)\n try {\n [layerId]\n .concat(toolbox.getDependencies())\n .forEach(id => {\n const toolbox = this.service.getToolBoxById(id);\n const editor = toolbox.getEditor();\n //set original features get from server without changes\n editor.getEditingSource().setFeatures((editor.readFeatures() || []).map(f => f.clone()));\n //clear history of a layer - no changes\n toolbox.getSession().getHistory().clear();\n //stop eventually active tool\n toolbox.stopActiveTool();\n });\n console.info('[EDITING] reverted dirty');\n } catch (e) {\n console.warn(e);\n }\n }\n\n },\n\n /**\n * @param bool\n * \n * @private\n */\n _enableEditingButtons(bool) {\n this.editingButtonsEnabled = !bool;\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Check if already have off lines changes\n *\n * @param { Object } opts\n * @param { boolean } [opts.modal=true]\n * @param { boolean } [opts.unlock=false]\n *\n * @returns { Promise }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n checkOfflineChanges({\n modal = true,\n unlock = false,\n } = {}) {\n return new Promise((resolve, reject) => {\n // get offline item\n const changes = JSON.parse(window.localStorage.getItem('EDITING_CHANGES') || null);\n\n // if you find changes offline previously\n if (!changes) { return }\n\n const promises = [];\n const layerIds = [];\n //FORCE TO WAIT OTHERWISE STILL OFF LINE\n setTimeout(async () => {\n for (const layerId in changes) {\n layerIds.push(layerId);\n const toolbox = this.service.getToolBoxById(layerId);\n const commitItems = changes[layerId];\n promises.push(this.service.commit({ toolbox, commitItems, modal }))\n }\n\n try {\n await promisify($.when.apply(this.service, promises));\n resolve();\n } catch(e) {\n console.warn(e);\n reject(e);\n } finally {\n if (unlock) {\n layerIds.forEach(layerId => this.service.getLayerById(layerId).unlock());\n }\n // always reset items to null\n try { window.localStorage.setItem('EDITING_CHANGES', \"{}\"); }\n catch(e) { console.warn(e); }\n }\n }, 1000)\n })\n },\n\n },\n\n computed: {\n\n canCommit() {\n return (\n 'default' === this.state.saveConfig.mode\n && this.state.toolboxselected\n && this.state.toolboxselected.state.editing.history.commit\n && this.editingButtonsEnabled\n );\n },\n\n canUndo() {\n const canUndo = (\n this.state.toolboxselected\n && this.state.toolboxselected.state.editing.history.undo\n && this.editingButtonsEnabled\n );\n\n this.service.fireEvent('canUndo', canUndo);\n\n return canUndo;\n },\n\n canRedo() {\n const canRedo = (\n this.state.toolboxselected\n && this.state.toolboxselected.state.editing.history.redo\n && this.editingButtonsEnabled\n );\n\n this.service.fireEvent('canRedo', canRedo);\n\n return canRedo;\n },\n\n django_admin_url() {\n return window.initConfig.user.is_superuser ? new URL('/django-admin/editing/g3weditingfeaturelock/', window.initConfig.baseurl) : false;\n },\n\n filemanager_url() {\n return window.initConfig.user.is_superuser ? new URL('/filemanager/', window.initConfig.baseurl) : false;\n },\n\n },\n\n watch:{\n\n canCommit(bool) {\n window.onbeforeunload = () => bool || undefined; // register leave page\n },\n\n /**\n * @param { Number } n number of layer in editing\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n layersInEditing(n) {\n document.getElementsByClassName('close-pane-button')[0].classList[0 === n ? 'remove' : 'add']('g3w-disabled');\n },\n\n /**\n * ORIGINAL SOURCE: componentsSelectEditingLayers.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n selectedlayers(layers = []) {\n const has_layers = layers.length > 0;\n\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n\n this.editinglayers.forEach(({ id }) => {\n const toolbox = service.getToolBoxById(id);\n const is_commit = has_layers && toolbox.state.editing.history.commit;\n const is_selected = layers.includes(id);\n\n toolbox.setShow(has_layers ? is_selected : true);\n\n if (has_layers && !is_selected && is_commit) {\n service.commit({ toolbox }).always(() => toolbox.stop());\n }\n\n if (has_layers && !is_selected && !is_commit) {\n toolbox.stop();\n }\n\n });\n },\n\n },\n\n created() {\n\n this._selectedlayers = []; //store previous selected layers\n\n this.appState = ApplicationState;\n\n // Array of object setter(as a key), key to unby (as value)\n this.unByKeys = this.unByKeys || [];\n\n // in case of starting panel editing check if there are some chenging pending\n // if true, it has to commit changes on server and unlock all layers features temporarily locked\n if (ApplicationState.online) {\n this.checkOfflineChanges({ unlock: true });\n }\n\n // register \"online\" event\n this.unByKeys.push({\n owner : ApplicationService,\n setter: 'online',\n key: ApplicationService.onafter('online', () => this.checkOfflineChanges({ modal: false }).catch(e => GUI.notify.error(e)))\n });\n\n GUI.closeContent();\n\n // open editing panel state\n this.state.open = false;\n CatalogLayersStoresRegistry.getLayers({ EDITABLE: true }).forEach(l => l.setInEditing(true));\n\n GUI.on('opencontent', this._enableEditingButtons);\n GUI.on('closeform', this._enableEditingButtons);\n GUI.on('closecontent', this._enableEditingButtons);\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Called on a close editing panel panel\n */\n async beforeDestroy() {\n this.service.stop();\n\n // reset editing panel state\n this.state.open = false;\n CatalogLayersStoresRegistry.getLayers({ EDITABLE: true }).forEach(l => l.setInEditing(false));\n\n GUI.off('opencontent', this._enableEditingButtons);\n GUI.off('closeform', this._enableEditingButtons);\n GUI.off('closecontent', this._enableEditingButtons);\n\n // unregister \"online\" and \"offline\" events\n this.unByKeys.forEach(({ owner, setter, key }) => owner.un(setter, key));\n\n this.service.fireEvent('closeeditingpanel');\n\n // Show feature that is updated or created with editing on result content\n const layerIdChanges = Object.keys(this.state.featuresOnClose);\n if (layerIdChanges.length) {\n const inputs = {\n layers: [],\n fids: [],\n formatter: 1\n };\n layerIdChanges\n .forEach(id => {\n const fids = [...this.state.featuresOnClose[id]];\n if (fids.length > 0) {\n const layer = CatalogLayersStoresRegistry.getLayerById(id);\n inputs.layers.push(layer);\n inputs.fids.push(fids);\n }\n });\n\n const promise = inputs.layers.length ?\n DataRouterService.getData('search:layersfids', {\n inputs,\n outputs: {\n title: 'plugins.editing.editing_changes',\n show: { loading: false }\n }\n }) :\n Promise.resolve();\n try {\n await promise;\n } catch(e) { console.warn(e) }\n }\n\n this.state.featuresOnClose = {};\n\n this.service.getToolBoxes().forEach(t => t.resetDefault());\n\n // re-enable query map control\n const control = GUI.getService('map').getMapControlByType({ type: 'query' });\n if (control && !control.isToggled()) {\n control.toggle();\n }\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"g3w-editing-panel\"},[_c('bar-loader',{attrs:{\"loading\":_vm.saving}}),_vm._v(\" \"),(_vm.layersInEditing > 0)?_c('helpdiv',{staticStyle:{\"font-weight\":\"bold\"},attrs:{\"message\":\"plugins.editing.close_editing_panel.message\"}}):_vm._e(),_vm._v(\" \"),(!_vm.appState.online)?_c('div',{attrs:{\"id\":\"onlineofflinemessage\"}},[_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.messages.offline'),expression:\"'editing.messages.offline'\"}]})]):_vm._e(),_vm._v(\" \"),(_vm.showcommitbar)?_c('div',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(_vm.saving),expression:\"saving\"}],staticClass:\"commitbar\"},[_c('div',{class:['editing-button', (_vm.canCommit ? 'enabled' : '')],on:{\"click\":function($event){$event.stopPropagation();return _vm.commit.apply(null, arguments)}}},[_c('span',{class:['editing-icon', _vm.g3wtemplate.font['save']]})]),_vm._v(\" \"),_c('div',{class:['editing-button', (_vm.canUndo ? 'enabled': '')],on:{\"click\":function($event){$event.stopPropagation();return _vm.undo.apply(null, arguments)}}},[_c('span',{class:['editing-icon', _vm.g3wtemplate.font['arrow-left']]})]),_vm._v(\" \"),_c('div',{class:['editing-button', (_vm.canRedo ? 'enabled' : '')],on:{\"click\":function($event){$event.stopPropagation();return _vm.redo.apply(null, arguments)}}},[_c('span',{class:['editing-icon', _vm.g3wtemplate.font['arrow-right']]})])]):_c('div',{staticStyle:{\"height\":\"10px\"}}),_vm._v(\" \"),(_vm.state.showselectlayers && _vm.editinglayers.length > 1)?_c('div',{staticClass:\"skin-color\",attrs:{\"id\":\"g3w-select-editable-layers-content\"}},[_c('label',{directives:[{name:\"t\",rawName:\"v-t\",value:('Layers'),expression:\"'Layers'\"}],attrs:{\"for\":\"g3w-select-editable-layers-to-show\"}}),_vm._v(\" \"),_c('select',{directives:[{name:\"select2\",rawName:\"v-select2\",value:('selectedlayers'),expression:\"'selectedlayers'\"}],ref:\"selectlayers\",attrs:{\"id\":\"g3w-select-editable-layers-to-show\",\"multiple\":true,\"clear\":true}},_vm._l((_vm.editinglayers),function(editinglayer){return _c('option',{key:editinglayer.id,domProps:{\"value\":editinglayer.id}},[_vm._v(_vm._s(editinglayer.name))])}),0)]):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"toolboxes\"}},_vm._l((_vm.state.toolboxes),function(toolbox){return _c('toolbox',{key:toolbox.id,attrs:{\"state\":toolbox,\"resourcesurl\":_vm.resourcesurl},on:{\"setselectedtoolbox\":_vm.selectToolBox,\"starttoolbox\":_vm.startToolBox,\"stoptoolbox\":_vm.stopToolBox,\"setactivetool\":_vm.startTool,\"stopactivetool\":_vm.stopTool,\"on-editing\":_vm.updateLayersInEditing,\"update-filter-layers\":_vm.updateFilterLayers}})}),1),_vm._v(\" \"),(_vm.django_admin_url)?_c('p',[_c('a',{attrs:{\"href\":_vm.django_admin_url,\"target\":\"_blank\"}},[_vm._v(\"\uD83D\uDD12 Locked features\")])]):_vm._e(),_vm._v(\" \"),(_vm.filemanager_url)?_c('p',[_c('a',{attrs:{\"href\":_vm.filemanager_url,\"target\":\"_blank\"}},[_vm._v(\"\uD83D\uDCC2 File manager\")])]):_vm._e()],1)}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-5599c278_0\", { source: \".g3w-editing-panel .editing-button .editing-icon{background-color:#3a4448;color:#222d32;font-size:1.8em;padding:10px;margin:5px;width:45px;height:45px;border-radius:30%;text-align:center}.g3w-editing-panel .editing-button.enabled .editing-icon{background-color:#fff;box-shadow:0 0 5px rgba(0,0,0,.7)}.g3w-editing-panel .editing-button{cursor:not-allowed}.g3w-editing-panel .editing-button.enabled{cursor:pointer}.g3w-editing-panel .editbtn{border-radius:30%;padding:10px;display:inline-block;opacity:.4;box-shadow:0 1px 1px 0 rgba(0,0,0,.1),0 1px 4px 0 rgba(0,0,0,.3)}.g3w-editing-panel .editbtn.enabled{opacity:1;cursor:pointer}.g3w-editing-panel .editbtn.enabled.toggled{box-shadow:0 0;background-color:#ddd}\", map: undefined, media: undefined })\n,inject(\"data-v-5599c278_1\", { source: \".g3w-editing-panel[data-v-5599c278]{margin-bottom:50px}#onlineofflinemessage[data-v-5599c278]{margin-bottom:5px;padding:5px;border-radius:3px;background-color:orange;color:#fff;font-weight:700}.commitbar[data-v-5599c278]{display:flex;justify-content:flex-end;margin-bottom:5px}.commitbar>div[data-v-5599c278]:first-of-type{margin-right:auto}#g3w-select-editable-layers-content[data-v-5599c278]{margin-bottom:10px;font-weight:700}#g3w-select-editable-layers-content label[data-v-5599c278]{color:#fff!important}#g3w-select-editable-layers-to-show[data-v-5599c278]{cursor:pointer}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-5599c278\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"Editing.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "import { Workflow } from '../g3wsdk/workflow/workflow';\nimport { Step } from '../g3wsdk/workflow/step';\nimport { createEditingDataOptions } from '../utils/createEditingDataOptions';\nimport { setLayerUniqueFieldValues } from '../utils/setLayerUniqueFieldValues';\nimport { getRelationsInEditing } from '../utils/getRelationsInEditing';\nimport { getRelationId } from '../utils/getRelationId';\nimport { setAndUnsetSelectedFeaturesStyle } from '../utils/setAndUnsetSelectedFeaturesStyle';\nimport { chooseFeature } from '../utils/chooseFeature';\nimport { cloneFeature } from '../utils/cloneFeature';\nimport { evaluateExpressionFields } from '../utils/evaluateExpressionFields';\nimport { getNotEditableFieldsNoPkValues } from '../utils/getNotEditableFieldsNoPkValues';\nimport { getDeltaXY } from '../utils/getDeltaXY';\nimport { chooseFeatureFromFeatures } from '../utils/chooseFeatureFromFeatures';\nimport { convertToGeometry } from '../utils/convertToGeometry';\nimport { addTableFeature } from '../utils/addTableFeature';\nimport { getRelationFieldsFromRelation } from '../utils/getRelationFieldsFromRelation';\nimport { getLayersDependencyFeatures } from '../utils/getLayersDependencyFeatures';\nimport { getEditingLayerById } from '../utils/getEditingLayerById';\nimport { getRelationsInEditingByFeature } from '../utils/getRelationsInEditingByFeature';\nimport { isPointOnVertex } from '../utils/isPointOnVertex';\nimport { handleSplitFeature } from '../utils/handleSplitFeature';\nimport { addPartToMultigeometries } from '../utils/addPartToMultigeometries';\nimport { checkSessionItems } from '../utils/checkSessionItems';\nimport { promisify, $promisify } from '../utils/promisify';\nimport { unlinkRelation } from '../utils/unlinkRelation';\nimport { splitFeatures } from '../utils/splitFeatures';\nimport { isSameBaseGeometryType } from '../utils/isSameBaseGeometryType';\nimport { PickFeaturesInteraction } from '../interactions/pickfeaturesinteraction';\n\nimport {\n OpenFormStep,\n SelectElementsStep,\n PickFeatureStep,\n AddFeatureStep,\n MoveFeatureStep,\n ModifyGeometryVertexStep,\n OpenTableStep,\n} from '../workflows';\n\nObject\n .entries({\n Workflow,\n OpenFormStep,\n SelectElementsStep,\n PickFeatureStep,\n MoveFeatureStep,\n ModifyGeometryVertexStep,\n OpenTableStep,\n AddFeatureStep,\n })\n .forEach(([k, v]) => console.assert(undefined !== v, `${k} is undefined`));\n\nconst { GEOMETRY_TYPES } = g3wsdk.constant;\nconst {\n ApplicationState,\n G3WObject\n} = g3wsdk.core;\nconst { ProjectsRegistry } = g3wsdk.core.project;\nconst { DataRouterService } = g3wsdk.core.data;\nconst { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\nconst { Geometry, dissolve } = g3wsdk.core.geoutils;\nconst { removeZValueToOLFeatureGeometry } = g3wsdk.core.geoutils.Geometry;\nconst { tPlugin } = g3wsdk.core.i18n;\nconst { Layer } = g3wsdk.core.layer;\nconst { Feature } = g3wsdk.core.layer.features;\nconst { debounce, toRawType } = g3wsdk.core.utils;\nconst { GUI } = g3wsdk.gui;\nconst {\n getScaleFromResolution,\n getResolutionFromScale,\n} = g3wsdk.ol.utils;\n\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin/toolboxes/toolsfactory.js@v3.7.1\n */\nexport class ToolBox extends G3WObject {\n\n constructor(layer, dependencies = []) {\n super();\n\n const is_vector = [undefined, Layer.LayerTypes.VECTOR].includes(layer.getType());\n const geometryType = is_vector && layer.getGeometryType();\n const is_point = is_vector && Geometry.isPointGeometryType(geometryType);\n const is_line = is_vector && Geometry.isLineGeometryType(geometryType);\n const is_poly = is_vector && Geometry.isPolygonGeometryType(geometryType);\n const is_table = Layer.LayerTypes.TABLE === layer.getType();\n const isMultiGeometry = geometryType && Geometry.isMultiGeometry(geometryType);\n const iconGeometry = is_vector && (is_point ? 'Point' : is_line ? 'Line' : 'Polygon');\n //@since 3.9.0 Check if layer has relation layers editable\n const editable_relations = layer.getRelations().getArray()\n .filter(relation => {\n const l = CatalogLayersStoresRegistry.getLayerById(getRelationId({ layerId: layer.getId(), relation }));\n return l.isEditable();\n })\n .map(r => r);\n this._start = false;\n\n /** constraint loading features to a filter set */\n this.constraints = { filter: null, show: null, tools: [] };\n\n /** reactive state of history */\n this._constrains = { commit: false, undo: false, redo: false };\n\n /**\n * Array of states of a layer in editing\n * {\n * _states: [\n * {\n * id: unique key\n * state: [state] // example: history contains features state\n * // array because a tool can apply changes to more than one features at time (split di una feature)\n * },\n * {\n * id: unique key\n * state: [state]\n * },\n * ]\n * ....\n *\n * _current: unique key // usefult to undo redo\n *\n *\n */\n this._states = [];\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n this._history = {\n id: layer.getId(),\n state: new Proxy({}, { get: (_, prop) => this._constrains[prop] }),\n add: this.__add.bind(this),\n undo: this.__undo.bind(this),\n clear: this.__clearHistory.bind(this),\n redo: this.__redo.bind(this),\n getState: this.__getState.bind(this),\n getLastState: this.__getLastHistoryState.bind(this),\n commit: this.__commit.bind(this),\n };\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n */\n this._session = Object.assign(new G3WObject({ setters: {\n start: (options={}) => $promisify(this.__startSession(options)),\n stop: () => $promisify(this.__stopSession()),\n getFeatures: (options={}) => $promisify(this.__getFeatures(options)),\n saveChangesOnServer: commitItems => this.__saveChangesOnServer(commitItems),\n }}), {\n _history: this._history,\n state: new Proxy({}, { get: (_, prop) => this.state.editing.session[prop] }),\n getId: () => layer.getId(),\n getLastHistoryState: this.__getLastHistoryState.bind(this),\n isStarted: this.__isStarted.bind(this),\n getHistory: this.__getHistory.bind(this),\n getEditor: this.__getEditor.bind(this),\n push: this.__push.bind(this),\n pushDelete: this.__pushDelete.bind(this),\n save: this.__save.bind(this),\n pushAdd: this.__pushAdd.bind(this),\n pushUpdate: this.__pushUpdate.bind(this),\n rollback: this.__rollback.bind(this),\n rollbackDependecies: this.__rollbackDependecies.bind(this),\n undo: this.__undoSession.bind(this),\n redo: this.__redoSession.bind(this),\n getCommitItems: this.__getCommitItems.bind(this),\n commit: this.save.bind(this),\n clear: this.__clearSession.bind(this),\n clearHistory: this.__clearHistory.bind(this),\n });\n\n // register this session on session registry\n ToolBox._sessions[layer.getId()] = this;\n\n /** @type { 'create' | 'update_attributes' | 'update_geometry' | delete' | undefined } undefined means all possible tools base on type */\n const capabilities = layer.getEditingCapabilities() || [];\n\n this.state = {\n layer,\n id : layer.getId(),\n changingtools : false, // whether to show tools during change phase\n show : layer.config.editing.visible, // whether to show the toolbox if we need to filtered\n color : layer.getColor() || 'blue',\n title : ` ${layer.getTitle()}` || \"Edit Layer\",\n customTitle : false,\n loading : false,\n enabled : false,\n toolboxheader : true,\n startstopediting : true,\n message : null,\n toolmessages : { help: null },\n toolsoftool : [],\n selected : false,\n activetool : null,\n editing : {\n session : {\n id: new Proxy({}, { get: () => this.state.id }),\n started: false,\n getfeatures: false,\n /** current state of history (useful for undo /redo) */\n current: null,\n /** temporary change not save on history */\n changes: [],\n },\n history : this._history.state,\n on : false,\n dependencies,\n relations : Object.values(layer.isFather() && dependencies.length ? layer.getRelations().getRelations() : {}),\n father : layer.isFather(),\n canEdit : true\n },\n /** @since g3w-client-plugin-editing@v3.7.0 store key events setters */\n _unregisterStartSettersEventsKey: [],\n _getFeaturesOption: {},\n _layerType: layer.getType() || Layer.LayerTypes.VECTOR,\n _enabledtools: undefined,\n _disabledtools: undefined,\n _constraints: layer.getEditingConstrains() || {},\n _tools: [\n // Add Feature\n (is_vector) && capabilities.includes('add_feature') && {\n id: 'addfeature',\n type: ['add_feature'],\n name: 'editing.tools.add_feature',\n icon: `add${iconGeometry}.png`,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addfeatureworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'addfeature',\n steps: [\n new AddFeatureStep({ layer, tools: ['snap', 'measure'] }),\n new OpenFormStep({ layer }),\n ],\n }),\n },\n // Edit Attributes Feature\n (is_vector) && capabilities.includes('change_attr_feature') && {\n id: 'editattributes',\n type: ['change_attr_feature'],\n name: 'editing.tools.update_feature',\n icon: 'editAttributes.png',\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editfeatureattributesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n helpMessage: 'editing.tools.update_feature',\n type: 'editfeatureattributes',\n steps: [\n new PickFeatureStep(),\n new Step({ run: chooseFeature }),\n new OpenFormStep(),\n ],\n }),\n },\n // Delete Feature\n (is_vector) && capabilities.includes('delete_feature') && {\n id: 'deletefeature',\n type: ['delete_feature'],\n name: 'editing.tools.delete_feature',\n icon: `delete${iconGeometry}.png`,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/deletefeatureworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'deletefeature',\n steps: [\n new PickFeatureStep(),\n new Step({ run: chooseFeature }),\n // delete feature\n new Step({\n help: \"editing.steps.help.double_click_delete\",\n run(inputs, context) {\n return $promisify(async() => {\n const layerId = inputs.layer.getId();\n const feature = inputs.features[0];\n \n // get all relations of the current editing layer that are in editing\n // and filter relations\n // get relation layer id that are in relation with layerId (current layer in editing)\n // get fields of relation layer that are in relation with layerId\n // Exclude relation child layer that has at least one\n // editing field required because when unlink relation feature from\n // delete father, when try to commit update relation, we receive an error\n // due missing value /null to required field.\n const relations = getRelationsInEditing({\n layerId,\n relations: inputs.layer.getRelations() ? inputs.layer.getRelations().getArray() : []\n }).filter(\n relation => getEditingLayerById(getRelationId({ layerId, relation }))\n .getEditingFields() //get editing field of relation layer\n .filter(f => getRelationFieldsFromRelation({ relation, layerId: getRelationId({ layerId, relation }) }).ownField.includes(f.name)) //filter only relation fields\n .every(f => !f.validate.required) // check required\n );\n\n // promise return features relations and add to relation layer child\n if (relations.length > 0) {\n await getLayersDependencyFeatures(layerId, { feature, relations});\n }\n\n inputs.features = [feature];\n\n // Unlink relation features related to layer id\n getRelationsInEditingByFeature({ layerId, relations, feature }).forEach(({ relation, relations }) => {\n relations.forEach(r => unlinkRelation({ layerId, relation, relations, index: 0, dialog: false }));\n });\n\n context.session.pushDelete(layerId, feature);\n\n return inputs;\n });\n },\n }),\n // confirm step\n new Step({\n run(inputs) {\n return $promisify(async () => {\n const editingLayer = inputs.layer.getEditingLayer();\n const feature = inputs.features[0];\n const layerId = inputs.layer.getId();\n const promise = new Promise((resolve, reject) => {\n GUI\n .dialog\n .confirm(\n `

${tPlugin('editing.messages.delete_feature')}

`\n + `
`\n + (inputs.layer.getChildren().length && getRelationsInEditing({ layerId, relations: inputs.layer.getRelations().getArray() }).length\n ? tPlugin('editing.messages.delete_feature_relations')\n : ''\n )\n + `
`,\n result => {\n if (!result) {\n reject(inputs);\n return;\n }\n editingLayer.getSource().removeFeature(feature);\n // Remove unique values from unique fields of a layer (when deleting a feature)\n const fields = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.uniqueFieldsValues[layerId];\n if (fields) {\n Object\n .keys(feature.getProperties())\n .filter(f => undefined !== fields[f])\n .forEach(f => fields[f].delete(feature.get(f)));\n }\n resolve(inputs);\n }\n );\n });\n\n if (inputs.features) {\n setAndUnsetSelectedFeaturesStyle({\n promise: $promisify(async () => { try { return await promise; } catch(e) { console.warn(e); return Promise.reject(e) }}),\n inputs,\n style: this.selectStyle,\n });\n }\n return promise;\n })\n }\n }),\n ],\n }),\n },\n // Edit vertex Feature\n (is_line || is_poly) && capabilities.includes('change_feature') && {\n id: 'movevertex',\n type: ['change_feature'],\n name: \"editing.tools.update_vertex\",\n icon: \"moveVertex.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/modifygeometryvertexworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'modifygeometryvertex',\n helpMessage: 'editing.tools.update_vertex',\n steps: [\n new PickFeatureStep({ layer }),\n new Step({ run: chooseFeature }),\n new ModifyGeometryVertexStep({ tools: ['snap', 'measure'] }),\n ],\n }),\n },\n // Edit Attributes to Multi features\n (is_vector) && capabilities.includes('change_attr_feature') && {\n id: 'editmultiattributes',\n type: ['change_attr_feature'],\n name: \"editing.tools.update_multi_features\",\n icon: \"multiEditAttributes.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editmultifeatureattributesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'editmultiattributes',\n helpMessage: 'editing.tools.update_multi_features',\n registerEscKeyEvent: true,\n runOnce: true,\n steps: [\n new SelectElementsStep({\n type: 'multiple',\n steps: {\n select: {\n description: `editing.workflow.steps.${ApplicationState.ismobile ? 'selectDrawBoxAtLeast2Feature' : 'selectMultiPointSHIFTAtLeast2Feature'}`,\n buttonnext: {\n disabled: true,\n condition:({ features = [] }) => features.length < 2,\n done: () => { Workflow.Stack.getCurrent().clearUserMessagesSteps(); },\n },\n dynamic: 0,\n done: false,\n reset() { this.dynamic = 0; },\n }\n }\n }),\n new OpenFormStep({ multi: true }),\n ],\n }),\n },\n // @since 3.9.0 Edit Attributes of relations features to Multi features\n (is_vector) && capabilities.includes('change_attr_feature') && editable_relations.filter(r => 'ONE' !== r.getType()).length > 0 && {\n id: 'editmultiattributesrelationfeatures',\n type: ['change_attr_feature'],\n name: \"editing.tools.update_multi_features_relations_from_parents\",\n icon: \"EditMultiRelationFeatures.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editmultifeatureattributesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'editmultiattributesrelationfeatures',\n helpMessage: 'editing.tools.update_multi_features_relations_from_parents',\n registerEscKeyEvent: true,\n runOnce: true,\n steps: [\n new SelectElementsStep({\n type: 'multiple',\n steps: {\n select: {\n description: `editing.workflow.steps.${ApplicationState.ismobile ? 'selectDrawBoxAtLeast2Feature' : 'selectMultiPointSHIFTAtLeast2Feature'}`,\n buttonnext: {\n disabled: true,\n condition: ({ features = [] }) => features.length < 2,\n done: () => { Workflow.Stack.getCurrent().clearUserMessagesSteps(); }\n },\n dynamic: 0,\n done: false,\n reset() { this.dynamic = 0; },\n }\n }\n }),\n new Step({\n run: async (inputs, context) => {\n GUI.setModal(true);\n const relations = editable_relations.filter(r => 'ONE' !== r.getType());\n //get relation features from feature parent layer\n await Promise.allSettled(inputs.features.map(feature => getLayersDependencyFeatures(inputs.layer.getId(), {\n relations,\n feature,\n filterType: 'fid',\n })))\n //get first relation layer id\n let relationLayerId = relations[0].getChild();\n\n //In case of multi relation in editing\n if (relations.length > 1) {\n //ser relation layer id\n try {\n await new Promise((resolve, reject) => {\n const vueInstance = new (Vue.extend({\n name: 'multi-relations-fetures',\n template: `
\n \n
\n `,\n data() {\n return {\n relations: this.$options.relations,\n relationId: this.$options.relationId\n }\n }\n }))({ relations, relationId: relations[0].state.id })\n\n GUI.showModalDialog({\n title: tPlugin('editing.relations'),\n className: 'modal-left',\n closeButton: false,\n message: vueInstance.$mount().$el,\n buttons: {\n cancel: {\n label: 'Cancel',\n className: 'btn-danger',\n callback() { reject(); }\n },\n ok: {\n label: 'Ok',\n className: 'btn-success',\n callback: async () => {\n //set relation layer id to editin\n relationLayerId = relations.find(r => vueInstance.relationId === r.state.id).getChild();\n resolve();\n }\n }\n }\n }).on('hide.bs.modal', () => vueInstance.$destroy()); //destroy vue instance after dialog is a closed\n //hide user message step\n })\n } catch(e) {\n console.warn(e);\n GUI.setModal(false);\n return $promisify(Promise.reject(e));\n }\n }\n\n //start child workflow\n const workflow = new Workflow({\n type: 'editmultiattributes',\n steps: [\n new OpenFormStep({ multi: true }),\n ],\n });\n //Relations layer\n const rLayer = getEditingLayerById(relationLayerId);\n\n if (0 === rLayer.readFeatures().length) {\n GUI.setModal(false);\n\n GUI.showUserMessage({\n type: 'warning',\n message: 'plugins.editing.no_relations_found',\n autoclose: true,\n })\n return $promisify(Promise.reject());\n }\n\n const fields = getRelationFieldsFromRelation({\n layerId: relations[0].getChild(),\n relation: relations[0]\n });\n\n const options = {\n context: {\n session: Workflow.Stack.getCurrent().getSession(), // get parent workflow\n excludeFields: fields.ownField, // array of fields to be excluded\n isContentChild: false, //@since 3.9.0 force child to false\n },\n inputs: {\n features: rLayer.readFeatures(),\n layer: rLayer\n }\n }\n\n try {\n //set eventually unique values\n await setLayerUniqueFieldValues(relationLayerId);\n await promisify(workflow.start(options));\n } catch(e) {\n console.warn(e);\n }\n\n workflow.stop();\n\n GUI.setModal(false);\n return $promisify(Promise.resolve(inputs, context));\n }\n }),\n ],\n }),\n },\n // Move Feature\n (is_vector) && capabilities.includes('change_feature') && {\n id: 'movefeature',\n type: ['change_feature'],\n name: 'editing.tools.move_feature',\n icon: `move${iconGeometry}.png`,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/movefeatureworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'movefeature',\n helpMessage: 'editing.tools.move_feature',\n steps: [\n new PickFeatureStep(),\n new Step({ run: chooseFeature }),\n new MoveFeatureStep(),\n ],\n }),\n },\n // Copy Feature from another layer\n (() => {\n let layers = [];\n return (is_vector) && capabilities.includes('add_feature') && {\n id: 'copyfeaturesfromotherlayer',\n type: ['add_feature'],\n name: \"editing.tools.pastefeaturesfromotherlayers\",\n icon: \"pasteFeaturesFromOtherLayers.png\",\n enable: (function() {\n const catalogService = GUI.getService('catalog');\n const layerId = layer.getId();\n const geometryType = layer.getGeometryType();\n const data = {\n bool: true,\n tool: undefined\n };\n CatalogLayersStoresRegistry.getLayers({\n GEOLAYER: true,\n BASELAYER: false\n })\n // check selected feature layers\n const updatelayers = () => {\n const checkGeometry = type => (\n type\n && isSameBaseGeometryType(geometryType, type)\n && (\n (geometryType === type)\n || Geometry.isMultiGeometry(geometryType)\n || !Geometry.isMultiGeometry(type)\n )\n )\n layers = [\n //project layers\n ...CatalogLayersStoresRegistry.getLayers({ GEOLAYER: true, BASELAYER: false })\n .filter(l => (layerId !== l.getId()) && checkGeometry(l.getGeometryType())),\n //external layer\n ...catalogService.getExternalLayers({type:'vector'}).filter(l => checkGeometry(l.geometryType))\n ].map((l, i) => ({\n id: (l.state || {id: l.id}).id,\n name: (l.state || {name: l.name}).name,\n external: l.external || false,\n selected: 0 === i,\n }));\n return data.tool.enabled = layers.length > 0\n };\n return ({ bool, tool = {} }) => {\n data.tool = tool;\n data.bool = bool;\n catalogService.onafter('addExternalLayer', updatelayers);\n catalogService.onafter('removeExternalLayer', updatelayers);\n return updatelayers()\n }\n }()),\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/copyfeaturesfromotherlayerworkflow.js@v3.7.1 */\n op: (() => {\n const openFormStep = new OpenFormStep({ layer, help: 'editing.steps.help.copy' });\n return new Workflow({\n layer,\n type: 'copyfeaturesfromotherlayer',\n runOnce: true,\n steps: [\n new Step({\n layer,\n //@since 3.9.0 to show user message steps\n steps: {\n chooselayer: {\n description: `editing.modal.tools.copyfeaturefromotherlayer.title`,\n done: false,\n },\n selectgeometry: {\n description: `editing.workflow.steps.selectPoint`,\n done: false,\n }\n },\n run(inputs, context) {\n return $promisify(new Promise((resolve, reject) => {\n const originalLayer = inputs.layer;\n const geometryType = originalLayer.getGeometryType();\n const layerId = originalLayer.getId();\n //get attributes/properties from current layer in editing\n const attributes = originalLayer.getEditingFields().filter(a => !a.pk);\n const session = context.session;\n const editingLayer = originalLayer.getEditingLayer();\n const source = editingLayer.getSource();\n //set reactive\n const vueInstance = new (Vue.extend(require('../components/CopyFeaturesFromOtherLayers.vue').default))({layers});\n const message = vueInstance.$mount().$el;\n GUI.showModalDialog({\n title: tPlugin('editing.relation.copy_feature_from_other_layer'),\n className: 'modal-left',\n closeButton: false,\n message,\n buttons: {\n cancel: {\n label: 'Cancel',\n className: 'btn-danger',\n callback() { reject(); }\n },\n ok: {\n label: 'Ok',\n className: 'btn-success',\n callback: async () => {\n //set choose layer step done\n this.setUserMessageStepDone('chooselayer');\n try {\n const feature = await $promisify(async () => {\n //get selected layer\n const layer = layers.find(l => l.selected);\n const features = await (new Promise(async resolve => {\n this.addInteraction(\n layer.external\n ? new PickFeaturesInteraction({ layer: GUI.getService('map').getLayerById(layer.id) })\n : new g3wsdk.ol.interactions.PickCoordinatesInteraction(), {\n 'picked': async e => {\n try {\n resolve(convertToGeometry(\n layer.external\n ? e.features // external layer\n : ((await DataRouterService.getData('query:coordinates', { // TOC/PROJECT layer\n inputs: {\n coordinates: e.coordinate,\n query_point_tolerance: ProjectsRegistry.getCurrentProject().getQueryPointTolerance(),\n layerIds: [layer.id],\n multilayers: false\n },\n outputs: null\n })).data[0] || { features: [] }).features,\n geometryType,\n ))\n } catch(e) {\n console.warn(e);\n }\n }\n }\n );\n }));\n\n let _feature;\n\n try {\n _feature = features.length > 1\n ? await promisify(chooseFeatureFromFeatures({ features, inputs }))\n : features[0];\n } catch (e) {\n console.warn(e);\n }\n\n if (_feature) {\n const feature = new Feature({\n feature: _feature,\n properties: attributes.map(a => a.name)\n })\n\n feature.setTemporaryId();\n return feature;\n }\n\n GUI.showUserMessage({\n type: 'warning',\n message: 'plugins.editing.messages.no_feature_selected',\n closable: false,\n autoclose: true\n });\n\n return Promise.reject();\n });\n\n //@TODO check better way\n //Set undefined property to null otherwise on commit\n // property are lost\n attributes.forEach(({ name }) => {\n if (undefined === feature.get(name)) { feature.set(name, null) }\n })\n\n originalLayer.getEditingNotEditableFields()\n .find(field => {\n if (originalLayer.isPkField(field)) { feature.set(field, null) }\n });\n //remove eventually Z Values\n removeZValueToOLFeatureGeometry({ feature });\n feature.setTemporaryId();\n source.addFeature(feature);\n session.pushAdd(layerId, feature, false);\n inputs.features.push(feature)\n this.fireEvent('addfeature', feature)\n resolve(inputs);\n }\n catch(e) {\n console.warn(e);\n reject(e);\n }\n }\n }\n }\n }).on('hide.bs.modal', () => vueInstance.$destroy()); //destroy vue instance after dialog is a closed\n //hide user message step\n }));\n },\n }),\n openFormStep,\n ],\n registerEscKeyEvent: true\n });\n })(),\n }\n })(),\n // Copy Feature from layer\n (is_vector) && capabilities.includes('add_feature') && {\n id: 'copyfeatures',\n type: ['add_feature'],\n name: \"editing.tools.copy\",\n icon: `copy${iconGeometry}.png`,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/copyfeaturesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'copyfeatures',\n runOnce: true,\n steps: [\n new SelectElementsStep({\n layer,\n help: 'editing.steps.help.copy',\n type: ApplicationState.ismobile ? 'single' : 'multiple',\n steps: {\n select: {\n description: `editing.workflow.steps.${ApplicationState.ismobile ? 'selectPoint' : 'selectPointSHIFT'}`,\n done: false,\n }\n },\n }, true),\n // get vertex\n layer.getGeometryType().includes('Point') ? undefined : new Step({\n layer,\n help: 'editing.steps.help.select',\n steps: {\n from: {\n description: 'editing.workflow.steps.selectStartVertex',\n done: false,\n }\n },\n run(inputs) {\n /** @since g3w-client-plugin-editing@v3.8.0 */\n return $promisify( async () => {\n const promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n if (0 === inputs.features.length) {\n return reject('no feature');\n }\n this.addInteraction(\n new ol.interaction.Draw({ type: 'Point', condition: e => inputs.features.some(f => isPointOnVertex({ feature: f, coordinates: e.coordinate}))}), {\n 'drawend': e => {\n inputs.coordinates = e.feature.getGeometry().getCoordinates();\n this.setUserMessageStepDone('from');\n resolve(inputs);\n }\n });\n this.addInteraction(\n new ol.interaction.Snap({ edge: false, features: new ol.Collection(inputs.features) })\n );\n })\n /** @since g3w-client-plugin-editing@v3.8.0 */\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(async () => { try { return await promise; } catch(e) { console.warn(e); return Promise.reject(e); } }), inputs, style: this.selectStyle })\n return promise;\n })\n },\n stop() {\n /** @since g3w-client-plugin-editing@v3.8.0 */\n //Always resolve promise (in case of a press esc key)\n this.resolve(true);\n this.resolve = null;\n },\n }),\n // move elements\n new Step({\n layer,\n help: \"editing.steps.help.select_vertex_to_paste\",\n steps: {\n to: {\n description: 'editing.workflow.steps.selectToPaste',\n done: false,\n }\n },\n run(inputs, context) {\n return $promisify(async () => {\n const {\n layer,\n features,\n coordinates\n } = inputs;\n const source = layer.getEditingLayer().getSource();\n const layerId = layer.getId();\n const session = context.session;\n const promise = new Promise((resolve, reject) => {\n this.addInteraction(\n new ol.interaction.Draw({ type: 'Point', features: new ol.Collection() }), {\n 'drawend': evt => {\n const [x, y] = evt.feature.getGeometry().getCoordinates();\n const deltaXY = coordinates ? getDeltaXY({x, y, coordinates}) : null;\n const featuresLength = features.length;\n const promisesDefaultEvaluation = [];\n\n for (let i = 0; i < featuresLength; i++) {\n const feature = cloneFeature(features[i], layer);\n if (deltaXY) {\n feature.getGeometry().translate(deltaXY.x, deltaXY.y);\n }\n else {\n const coordinates = feature.getGeometry().getCoordinates();\n const deltaXY = getDeltaXY({ x, y, coordinates });\n feature.getGeometry().translate(deltaXY.x, deltaXY.y)\n }\n // set media fields to null\n //@since 3.9.0 Comment\n //layer.getEditingMediaFields({}).forEach(f => feature.set(f, null));\n /**\n * evaluated geometry expression\n */\n promisesDefaultEvaluation.push(evaluateExpressionFields({ inputs, context, feature }))\n }\n Promise\n .allSettled(promisesDefaultEvaluation)\n .then(promises => promises\n .forEach(({ status, value:feature }) => {\n\n /**\n * @todo improve client core to handle this situation on session.pushAdd not copy pk field not editable only\n */\n const noteditablefieldsvalues = getNotEditableFieldsNoPkValues({ layer, feature });\n const newFeature = session.pushAdd(layerId, feature);\n // after pushAdd need to set not edit\n if (Object.entries(noteditablefieldsvalues).length) {\n Object\n .entries(noteditablefieldsvalues)\n .forEach(([field, value]) => newFeature.set(field, value));\n }\n\n //need to add to editing layer source newFeature\n source.addFeature(newFeature);\n\n inputs.features.push(newFeature);\n })\n )\n .finally(() => {\n this.setUserMessageStepDone('to');\n resolve(inputs);\n })\n }\n });\n\n this.addInteraction(\n new ol.interaction.Snap({ source, edge: false })\n );\n });\n\n /** @since g3w-client-plugin-editing@v3.8.0 */\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(async () => { try { return await promise; } catch(e) { console.warn(e); return Promise.reject(e); } }), inputs, style: this.selectStyle });\n return promise;\n });\n },\n }),\n ].filter(Boolean),\n registerEscKeyEvent: true,\n }),\n },\n // Add part to MultiGeometry Feature\n (is_vector) && capabilities.includes('add_feature') && capabilities.includes('change_feature') && {\n id: 'addPart',\n type: ['add_feature', 'change_feature'],\n name: \"editing.tools.addpart\",\n icon: \"addPart.png\",\n visible: isMultiGeometry,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addparttomultigeometriesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'addparttomultigeometries',\n helpMessage: 'editing.tools.addpart',\n runOnce: true,\n steps: [\n new PickFeatureStep({\n steps: {\n select: {\n description: 'editing.workflow.steps.select',\n done: false,\n }\n },\n }),\n new Step({\n run: chooseFeature,\n help: 'editing.steps.help.select_element',\n }),\n new AddFeatureStep({\n layer,\n help: 'editing.steps.help.select_element',\n add: false,\n steps: {\n addfeature: {\n description: 'editing.workflow.steps.draw_part',\n done: false,\n }\n },\n tools: ['snap', 'measure'],\n }),\n // add part to multi geometries\n new Step({\n layer,\n help: 'editing.steps.help.select_element',\n run: addPartToMultigeometries\n }),\n ],\n registerEscKeyEvent: true\n }),\n },\n // Remove part from MultiGeometry Feature\n (is_vector) && capabilities.includes('change_feature') && {\n id: 'deletePart',\n type: ['change_feature'],\n name: \"editing.tools.deletepart\",\n icon: \"deletePart.png\",\n visible: isMultiGeometry,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/deletepartfrommultigeometriesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'deletepartfrommultigeometries',\n steps: [\n new PickFeatureStep(),\n new Step({ run: chooseFeature }),\n // delete part from multi geometries\n new Step({\n layer,\n run(inputs, context) {\n return $promisify(new Promise((resolve, reject) => {\n const originaLayer = inputs.layer;\n const editingLayer = inputs.layer.getEditingLayer();\n const layerId = originaLayer.getId();\n const session = context.session;\n const {\n features,\n coordinate\n } = inputs;\n const feature = features[0];\n const originalFeature = feature.clone();\n const geometry = feature.getGeometry();\n let geometries = [];\n\n // ensure single geometry\n switch (geometry.getType()) {\n case GEOMETRY_TYPES.MULTIPOLYGON: geometries = geometry.getPolygons(); break;\n case GEOMETRY_TYPES.MULTILINE: geometries = geometry.getLineStrings(); break;\n case GEOMETRY_TYPES.MULTILINESTRING: geometries = geometry.getLineStrings(); break;\n case GEOMETRY_TYPES.MULTIPOINT: geometries = geometry.getPoints(); break;\n default: console.warn('invalid geometry type', geometry.getType()); break;\n }\n\n const source = new ol.source.Vector({features: geometries.map(geometry => new ol.Feature(geometry))});\n const map = this.getMap();\n const pixel = map.getPixelFromCoordinate(coordinate);\n let tempLayer = new ol.layer.Vector({\n source,\n style: editingLayer.getStyle()\n });\n \n map.addLayer(tempLayer);\n \n map.once('postrender', () => {\n let found = false;\n //need to call map.forEachFeatureAtPixel and not this.forEachFeatureAtPixel\n //because we use arrow function, and it referred this to outside context\n map.forEachFeatureAtPixel(pixel, _feature => {\n if (!found) {\n source.removeFeature(_feature);\n if (source.getFeatures().length) {\n const geometries = source.getFeatures().map(f => f.getGeometry());\n const type = geometries[0] && geometries[0].getType();\n feature.setGeometry(\n type && new ol.geom[`Multi${type}`](geometries.map(g => g.getCoordinates())) // ensures multi geometry\n );\n /**\n * evaluated geometry expression\n */\n evaluateExpressionFields({\n inputs,\n context,\n feature\n }).finally(() => {\n session.pushUpdate(layerId, feature, originalFeature);\n resolve(inputs);\n });\n /**\n * end of evaluated\n */\n } else {\n editingLayer.getSource().removeFeature(feature);\n session.pushDelete(layerId, feature);\n resolve(inputs);\n }\n found = true;\n }\n },\n {\n layerFilter(layer) {\n return layer === tempLayer;\n },\n hitTolerance: 1\n }\n );\n //need to call map.forEachFeatureAtPixel and not this.forEachFeatureAtPixel\n //because we use arrow function, and it referred this to outside context\n map.removeLayer(tempLayer);\n tempLayer = null;\n });\n }));\n },\n }),\n ],\n helpMessage: 'editing.tools.deletepart',\n }),\n },\n // Split Feature\n (is_line || is_poly) && capabilities.includes('change_feature') && {\n id: 'splitfeature',\n type: ['change_feature'],\n name: \"editing.tools.split\",\n icon: \"splitFeatures.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/splitfeatureworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'splitfeature',\n runOnce: true,\n steps: [\n new SelectElementsStep({\n layer,\n help: 'editing.steps.help.split',\n type: ApplicationState.ismobile ? 'single' : 'multiple',\n steps: {\n select: {\n description: `editing.workflow.steps.${ApplicationState.ismobile ? 'selectPoint' : 'selectPointSHIFT'}`,\n done: false,\n }\n },\n }, true),\n // split feature\n new Step({\n layer,\n help: '',\n steps: {\n draw_line: {\n description: 'editing.workflow.steps.draw_split_line',\n done: false,\n }\n },\n run(inputs, context) {\n /** @since g3w-client-plugin-editing@v3.8.0 */\n return $promisify(async () => {\n const source = inputs.layer.getEditingLayer().getSource();\n const promise = new Promise((resolve, reject) => {\n this.addInteraction(\n new ol.interaction.Draw({\n type: 'LineString',\n features: new ol.Collection(),\n freehandCondition: ol.events.condition.never,\n }), {\n 'drawend': async e => {\n let isSplitted = false;\n const splittedGeometries = splitFeatures(inputs.features, e.feature);\n const splittedGeometriesLength = splittedGeometries.length;\n\n for (let i = 0; i < splittedGeometriesLength; i++) {\n if (splittedGeometries[i].geometries.length > 1) {\n isSplitted = true;\n await handleSplitFeature({\n context,\n inputs,\n feature: inputs.features.find(f => f.getUid() === splittedGeometries[i].uid),\n splittedGeometries: splittedGeometries[i].geometries,\n session: context.session,\n });\n }\n }\n\n /** @since g3w-client-plugin-editing@v3.8.0 */\n (isSplitted ? resolve : reject)(inputs);\n //need to set timeout promise, because at the end of the workflow all user messages are cleared\n await new Promise((r) => setTimeout(r, 600));\n GUI.showUserMessage({\n type: isSplitted ? 'success': 'warning',\n message: isSplitted ? 'plugins.editing.messages.splitted' : 'plugins.editing.messages.nosplittedfeature',\n autoclose: true\n })\n }\n });\n\n this.addInteraction(\n new ol.interaction.Snap({ source, edge: true })\n );\n })\n\n /** @since g3w-client-plugin-editing@v3.8.0 */\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(async () => { try { return await promise; } catch(e) { console.warn(e); return Promise.reject(e); }}), inputs, style: this.selectStyle });\n\n return promise;\n })\n\n\n },\n }),\n ],\n registerEscKeyEvent: true,\n }),\n },\n // Merge features in one\n (is_line || is_poly) && capabilities.includes('change_feature') && {\n id: 'mergefeatures',\n type: ['change_feature'],\n name: \"editing.tools.merge\",\n icon: \"mergeFeatures.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/mergefeaturesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'mergefeatures',\n runOnce: true,\n steps: [\n new SelectElementsStep({\n layer,\n type: 'bbox',\n help: 'editing.steps.help.merge',\n steps: {\n select: {\n description: `editing.workflow.steps.${ApplicationState.ismobile ? 'selectDrawBox' : 'selectSHIFT'}`,\n done: false,\n }\n },\n }, true),\n // merge features\n new Step({\n layer,\n help: 'editing.steps.help.merge',\n steps: {\n choose: {\n description: 'editing.workflow.steps.merge',\n done: false,\n }\n },\n run(inputs, context) {\n return $promisify(new Promise((resolve, reject) => {\n const {\n layer,\n features\n } = inputs;\n const editingLayer = layer.getEditingLayer();\n const source = editingLayer.getSource();\n const layerId = layer.getId();\n const session = context.session;\n \n if (features.length < 2) {\n GUI.showUserMessage({\n type: 'warning',\n message: 'plugins.editing.messages.select_min_2_features',\n autoclose: true\n });\n reject();\n } else {\n chooseFeatureFromFeatures({ features, inputs })\n .then(async (feature) => {\n const index = features.findIndex(_feature => feature === _feature);\n const originalFeature = feature.clone();\n const newFeature = dissolve({features, index});\n \n if (newFeature) {\n try {\n await evaluateExpressionFields({ inputs, context, feature: newFeature });\n } catch(e) {\n console.warn(e);\n }\n session.pushUpdate(layerId, newFeature, originalFeature);\n features\n .filter(_feature => _feature !== feature)\n .forEach(deleteFeature => {\n session.pushDelete(layerId, deleteFeature);\n source.removeFeature(deleteFeature);\n });\n inputs.features = [feature];\n resolve(inputs);\n } else {\n GUI.showUserMessage({\n type: 'warning',\n message: 'plugins.editing.messages.no_feature_selected',\n autoclose: true\n });\n reject();\n }\n })\n .catch(e => { console.warn(e); reject(); })\n }\n }));\n },\n }),\n ],\n registerEscKeyEvent: true\n }),\n },\n // Add Table feature (alphanumerical layer - No geometry)\n is_table && capabilities.includes('add_feature') && {\n id: 'addfeature',\n type: ['add_feature'],\n name: \"editing.tools.add_feature\",\n icon: \"addTableRow.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addtablefeatureworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'addtablefeature',\n steps: [\n new Step({ help: 'editing.steps.help.new', run: addTableFeature }),\n new OpenFormStep(),\n ],\n }),\n },\n // Edit Table feature (alphanumerical layer - No geometry)\n is_table && capabilities.includes('delete_feature') && capabilities.includes('change_attr_feature') && {\n id: 'edittable',\n type: ['delete_feature', 'change_attr_feature'],\n name: \"editing.tools.update_feature\",\n icon: \"editAttributes.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/edittableworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'edittable',\n backbuttonlabel: 'plugins.editing.form.buttons.save_and_back_table',\n runOnce: true,\n steps: [ new OpenTableStep() ],\n }),\n },\n ].filter(Boolean).map(tool => Object.assign(new G3WObject, tool)),\n };\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/toolboxes/tool.js@v3.7.1\n */\n this.state._tools.forEach(tool => {\n Object.assign(tool, {\n disabledtoolsoftools: [],\n enabled: !!tool.enabled,\n active: false,\n message: null,\n messages: tool.op.getMessages(),\n visible: tool.visible instanceof Function ? tool.visible(tool) : (undefined !== tool.visible ? tool.visible: true),\n state: new Proxy({}, { get: (_, prop) => tool[prop], set:(_, prop, value) => { tool[prop] = value; return true; } }),\n start: this._startTool.bind(this, tool),\n stop: this._stopTool.bind(this, tool),\n getId: () => tool.id,\n getOperator: () => tool.op,\n setOperator: op => tool.op = op,\n })\n });\n\n Object.assign(this.state, {\n tools: this.state._tools,\n /** original value of state in case of custom changes */\n originalState: {\n title: this.state.title,\n toolsoftool: [...this.state.toolsoftool]\n },\n })\n\n // BACKOMP v3.x\n this.originalState = this.state.originalState;\n\n //event features\n this._getFeaturesEvent = { event: null, fnc: null };\n\n // @since v3.8.0 constraint messages to show\n this.messages = {\n //set message of scale constraint\n constraint: {\n scale: `${tPlugin('editing.messages.constraints.enable_editing')}${this.state._constraints.scale}`.toUpperCase()\n }\n }\n\n //@since 3.8.0 Need to store Promise resolve when start toolbox but non editing is enabled (scale constraint, etc..)\n this.startResolve = null;\n\n //@since 3.8.0 Store ol keys event start when we are in editing\n this._olStartKeysEvent = [];\n\n //@since 3.8.1 store all unwatches\n this.unwatches = [];\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { string } layerId\n *\n */\n _stopSessionChildren(layerId) {\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n const layer = service.getLayerById(layerId);\n getRelationsInEditing({\n layerId,\n relations: layer.getRelations() ? layer.getRelations().getArray() : [],\n })\n .filter(relation => relation.getFather() === layerId)\n .forEach(relation => {\n const relationId = getRelationId({ layerId, relation });\n // In case of no editing is started (click on pencil of relation layer) need to stop (unlock) features\n if (!service.getToolBoxById(relationId).inEditing()) {\n service.state.sessions[relationId].stop();\n }\n })\n }\n\n /**\n * @returns toolbox state\n */\n getState() {\n return this.state;\n }\n\n /**\n * @param bool\n */\n setShow(bool = true) {\n this.state.show = bool;\n }\n\n /**\n * @returns {*}\n */\n getLayer() {\n return this.state.layer;\n }\n\n /**\n * @returns {boolean}\n */\n isFather() {\n return this.state.editing.father;\n }\n\n /**\n * @returns { Array } parent and child layers\n */\n getDependencies() {\n return this.state.editing.dependencies;\n }\n\n /**\n * @returns {boolean}\n */\n hasDependencies() {\n return this.state.editing.dependencies.length > 0;\n }\n\n /**\n * Create getFeatures options\n * \n * @param filter\n */\n setFeaturesOptions({\n filter\n } = {}) {\n if (filter) {\n // in case of no features filter request check if no features_filed is present otherwise it get first field\n if (filter.nofeatures) {\n filter.nofeatures_field = filter.nofeatures_field || this.state.layer.getEditingFields()[0].name;\n }\n this.state._getFeaturesOption = {\n filter,\n editing: true,\n registerEvents: false\n };\n // in case of constraint attribute set the filter as constraint\n if (filter.constraint) {\n this.constraintFeatureFilter = filter;\n }\n } else {\n this.state._getFeaturesOption = createEditingDataOptions(Layer.LayerTypes.TABLE === this.state._layerType ? 'all': 'bbox', { layerId: this.getId() });\n }\n }\n\n /**\n * @param constraints\n */\n setEditingConstraints(constraints = {}) {\n Object.keys(constraints).forEach(c => this.constraints[c] = constraints[c]);\n }\n\n /**\n * @since 3.8.0 Handle scale constraint\n * @sto stop true when called from stop method\n * @private\n */\n _handleScaleConstraint(stop = false) {\n // get features from server or wait to start\n const map = GUI.getService('map').getMap();\n\n this.state.editing.canEdit = getScaleFromResolution(map.getView().getResolution()) <= this.state._constraints.scale;\n\n //check if start method is called\n const in_editing = (this._start || this.startResolve);\n\n const showZoomCursor = !stop && this.state.selected && !this.state.editing.canEdit;\n\n const control = GUI.getService('map').getCurrentToggledMapControl();\n\n if (control && control.cursorClass && (stop || in_editing)) { control.setMouseCursor(!showZoomCursor) }\n\n map.getViewport().classList.toggle('ol-zoom-in', showZoomCursor);\n\n // check if selected \u2192 hide modal\n if (stop || !this.state.selected || !in_editing) {\n GUI.setModal(false);\n return;\n }\n\n if (this.state.editing.canEdit && this.startResolve) {\n this.startResolve();\n }\n\n // async show message because another toolbox can be unselected before\n setTimeout(() => GUI.setModal(!this.state.editing.canEdit, this.messages.constraint.scale));\n }\n\n /**\n *\n * Start editing\n * @param options\n * @return {*}\n */\n //added option object to start method to have a control by other plugin how\n start(options = {}) {\n return $promisify(new Promise(async (resolve, reject) => {\n const id = this.getId();\n const applicationConstraint = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.constraints.toolboxes[id];\n let {\n toolboxheader = true,\n startstopediting = true,\n changingtools = false,\n tools,\n filter,\n } = options;\n \n this.state.changingtools = changingtools;\n\n if (tools) {\n this.setEnablesDisablesTools(tools);\n }\n\n this.state.toolboxheader = toolboxheader;\n this.state.startstopediting = startstopediting;\n \n filter = applicationConstraint && applicationConstraint.filter || this.constraints.filter || filter;\n\n //register lock features to show a message\n const unKeyLock = this.state.layer.getFeaturesStore().onceafter('featuresLockedByOtherUser', () => {\n GUI.showUserMessage({\n type: 'warning',\n subtitle: this.state.layer.getName().toUpperCase(),\n message: 'plugins.editing.messages.featureslockbyotheruser',\n })\n });\n \n //add featuresLockedByOtherUser setter\n this.state._unregisterStartSettersEventsKey.push(\n () => this.state.layer.getFeaturesStore().un('featuresLockedByOtherUser', unKeyLock)\n );\n\n\n // check if can we edit based on scale contraint (vector layer)\n if (this.state._constraints.scale) {\n\n await new Promise(resolve => {\n //set as resolve handler to resolve waiting get features from server\n this.startResolve = resolve;\n //call scale constraint handler\n this._handleScaleConstraint();\n\n const map = GUI.getService('map');\n\n // click to fit zoom scale constraint\n this._olStartKeysEvent.push(\n map.getMap().on('click', e => {\n if (this.state.selected && !this.state.editing.canEdit) {\n map.goToRes(e.coordinate, getResolutionFromScale(this.state._constraints.scale, GUI.getService('map').getMapUnits()));\n }\n })\n );\n\n // if click on start toolbox can edit\n if (this.state.editing.canEdit) { resolve() }\n\n })\n\n }\n\n //reset start startResolve promise reolve function\n this.startResolve = null;\n // set filterOptions\n this.setFeaturesOptions({ filter });\n\n const handlerAfterSessionGetFeatures = async promise => {\n this.emit('start-editing');\n //set unique fields values\n await setLayerUniqueFieldValues(this.getId());\n await g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').runEventHandler({ type: 'start-editing', id });\n try {\n const features = await promisify(promise);\n this.stopLoading();\n this.setEditing(true);\n await g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').runEventHandler({ type: 'get-features-editing', id, options: { features } });\n resolve({ features })\n } catch(e) {\n console.warn(e);\n GUI.notify.error(e.message);\n await g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').runEventHandler({ type: 'error-editing', id, error: e });\n this.stop();\n this.stopLoading();\n reject(e);\n }\n }\n\n const is_started = !!this.__isStarted();\n\n //@TODO need to explain better\n const GIVE_ME_A_NAME = (\n ApplicationState.ismobile // is mobile\n && GUI.getService('map').isMapHidden() // map is not visible (content 100%)\n && Layer.LayerTypes.VECTOR === this.state._layerType // is vector\n );\n\n if (!is_started && GIVE_ME_A_NAME) {\n this.setEditing(true);\n GUI\n .getService('map')\n .onceafter('setHidden', () => {\n setTimeout(async () => {\n this._start = true;\n this.startLoading();\n this.setFeaturesOptions({ filter });\n try {\n await handlerAfterSessionGetFeatures(promisify(this._session.start(this.state._getFeaturesOption)))\n } catch(e) {\n console.warn(e);\n this.setEditing(false);\n }\n }, 300);\n })\n }\n\n /** @TODO merge the following condtions? */\n if (!is_started && !GIVE_ME_A_NAME) {\n this._start = true;\n this.startLoading();\n await handlerAfterSessionGetFeatures(promisify(this._session.start(this.state._getFeaturesOption)))\n }\n\n if (is_started && !this._start) {\n this.startLoading();\n await handlerAfterSessionGetFeatures(promisify(this._session.getFeatures(this.state._getFeaturesOption)))\n this._start = true;\n }\n\n if (is_started) { this.setEditing(true); }\n }));\n };\n\n /**\n *\n */\n startLoading() {\n this.state.loading = true;\n }\n\n /**\n *\n */\n stopLoading() {\n this.state.loading = false;\n }\n\n /**\n * @returns {*}\n */\n stop() {\n return $promisify(async () => {\n if (this.disableCanEditEvent) { this.disableCanEditEvent() }\n\n this.state._unregisterStartSettersEventsKey.forEach(fnc => fnc());\n this.state._unregisterStartSettersEventsKey = [];\n\n this._olStartKeysEvent.forEach(k => ol.Observable.unByKey(k));\n this._olStartKeysEvent.splice(0);\n\n this.unwatches.forEach(uw => uw());\n this.unwatches.splice(0);\n\n //eventually reset start resolve feature waiting promise\n this.startResolve = null;\n\n if (this.state._constraints.scale) {\n this._handleScaleConstraint(true);\n }\n\n const is_started = !!this.__isStarted();\n \n if (!is_started) { return true }\n \n if (!ApplicationState.online) { return; }\n\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n const layerId = this.state.id;\n\n // Check if father relation is editing and has commit feature\n const fathersInEditing = service.getLayerById(layerId).getFathers().filter(id => {\n const toolbox = service.getToolBoxById(id);\n if (toolbox && toolbox.inEditing() && toolbox.isDirty()) {\n //get a temporary relations object and check if layerId has some changes\n return Object.keys(toolbox.getSession().getCommitItems() || {}).find(id => layerId === id);\n }\n });\n\n if (fathersInEditing.length > 0) {\n this.stopActiveTool();\n this.enableTools(false);\n this.clearToolboxMessages();\n // unregister get features event\n if (Layer.LayerTypes.VECTOR === this.state._layerType) {\n GUI.getService('map').getMap().un(this._getFeaturesEvent.event, this._getFeaturesEvent.fnc);\n }\n this._stopSessionChildren(this.state.id);\n // clear layer unique field values\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.uniqueFieldsValues[this.getId()] = {};\n return;\n }\n\n try {\n await promisify(this._session.stop());\n //set start to false\n this._start = false\n this.state.editing.on = false;\n this.state.enabled = false;\n this.stopLoading();\n this.state._getFeaturesOption = {};\n this.stopActiveTool();\n this.enableTools(false);\n this.clearToolboxMessages();\n this.emit('stop-editing');\n // clear layer unique field values\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.uniqueFieldsValues[this.getId()] = {};\n return true;\n } catch(e) {\n console.warn(e);\n return Promise.reject(e);\n }\n\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Commit changes on server (save)\n * \n * @param opts.ids\n * @param opts.items\n * @param opts.relations\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n save({\n ids = null,\n items,\n relations = true,\n /** @since g3w-client-plugin-editing@v3.8.0 */\n __esPromise = false,\n } = {}) {\n\n return $promisify(new Promise(async (resolve, reject) => {\n let commit; // committed items\n\n // skip when ..\n //@TODO Check if deprecated\n if (ids) {\n commit = this.__commit(ids);\n this.__clearHistory(ids);\n return resolve(commit);\n }\n\n commit = items || this.__getCommitItems(this.__commit());\n\n if (!relations) {\n commit.relations = {};\n }\n\n this.state.layer.getEditor()\n .commit(commit)\n .then(response => {\n\n // skip when response is null or undefined and response.result is false\n if (!(response && response.result)) {\n reject(response);\n return;\n }\n\n const { relations = {} } = response.response; // check if relations are saved on server\n\n // sync server data with local data\n for (const id in relations) {\n const toolbox = ToolBox.get(id)\n toolbox\n .getSession()\n .getEditor()\n .applyCommitResponse({ // apply commit response to current editing relation layer\n response: relations[id],\n result: true\n });\n }\n\n this.__clearHistory();\n\n /**\n * @since v3.9.0\n * After commit get new unique values\n */\n this._session.saveChangesOnServer(commit);\n\n\n // ES6 promises only accept a single response\n if (__esPromise) {\n resolve({ commit, response });\n } else {\n resolve(commit, response);\n }\n })\n .fail(e => { console.warn(e); reject(e); })\n }))\n }\n\n /**\n * @returns {*|{}}\n */\n getEditingConstraints() {\n return this.state._constraints;\n }\n\n /**\n * @returns {boolean}\n */\n canEdit() {\n return this.state.editing.canEdit;\n }\n\n /**\n * @param message\n */\n setMessage(message) {\n this.state.message = message;\n }\n\n /**\n * @returns {null}\n */\n getMessage() {\n return this.state.message;\n }\n\n /**\n *\n */\n clearMessage() {\n this.setMessage(null);\n }\n\n /**\n *\n */\n clearToolboxMessages() {\n this.state.toolmessages.help = null;\n this.clearMessage();\n }\n\n /**\n * @returns {*}\n */\n getId() {\n return this.state.id;\n }\n\n /**\n * @returns {string}\n */\n getTitle() {\n return this.state.title;\n }\n\n /**\n * @param title\n */\n setTitle(title) {\n this.state.customTitle = true;\n this.state.title = title;\n }\n\n /**\n * @returns {string}\n */\n getColor() {\n return this.state.color;\n }\n\n /**\n * Enable toolbox\n * \n * @param bool\n */\n setEditing(bool = true) {\n this.setEnable(bool);\n this.state.editing.on = bool;\n this.enableTools(bool);\n }\n\n /**\n * @returns {boolean}\n */\n inEditing() {\n return this.state.editing.on;\n }\n\n /**\n * @returns {boolean}\n */\n isEnabled() {\n return this.state.enabled;\n }\n\n /**\n * @param bool\n * \n * @returns {boolean}\n */\n setEnable(bool = false) {\n this.state.enabled = bool;\n return this.state.enabled;\n }\n\n /**\n * @returns {boolean}\n */\n isLoading() {\n return this.state.loading;\n }\n\n /**\n * @returns {*}\n */\n isDirty() {\n return this.state.editing.history.commit;\n }\n\n /**\n * @returns {boolean}\n */\n isSelected() {\n return this.state.selected;\n }\n\n /**\n * @param bool\n */\n setSelected(bool = false) {\n this.state.selected = bool;\n //Check if layer has a scale constraint\n if (this.state._constraints.scale) {\n const map = GUI.getService('map').getMap();\n //run handle scale contraint handler function\n this._handleScaleConstraint();\n\n //IN CASE START EDITING AND CAN EDIT NEED TO DISPATCH EVENT MOVE END MAP\n if (this._start && this.state.canEdit) {\n map.dispatchEvent({ type: this._getFeaturesEvent.event, target: map })\n }\n //SELECTED AND NOT REGISTER MAP CHANGE RESOLUTION\n if (this.state.selected && !this.keyChangeResolution) {\n this.keyChangeResolution = map.getView().on('change:resolution', () => this._handleScaleConstraint() );\n }\n\n //NOT SELECTED AND REGISTER MAP CHANGE RESOLUTION, NEED TO REMOVE CHANGE RESOLUTION CHECK\n if (!this.state.selected && this.keyChangeResolution) {\n ol.Observable.unByKey(this.keyChangeResolution);\n this.keyChangeResolution = null;\n }\n }\n }\n\n /**\n * @returns {*}\n */\n getTools() {\n return this.state._tools;\n }\n\n /**\n * @param toolId\n * \n * @returns {*|number|bigint|T|T} tool by id\n */\n getToolById(toolId) {\n return this.state._tools.find(tool => toolId === tool.getId());\n }\n\n /**\n * @param toolId\n */\n setEnableTool(toolId) {\n this.state._tools.find(tool => toolId === tool.getId()).state.enabled = true;\n }\n\n /**\n * Set tools bases on add\n * editing_constraints : true // follow the tools related toi editing conttraints configuration\n * \n * @see g3w-client-plugin-sispi-worksite\n */\n setAddEnableTools({\n tools = {},\n options = { editing_constraints: true }\n } = {}) {\n const { editing_constraints = false } = options;\n\n this.setEnablesDisablesTools({\n enabled: this.state._tools\n .filter(\n tool => editing_constraints\n ? tool.type.includes('add_feature')\n : ['addfeature', 'editattributes', 'movefeature', 'movevertex'].includes(tool.getId())\n )\n .map(tool => ({ id: tool.getId(), options: tools[tool.getId()] }))\n });\n\n this.enableTools(true);\n }\n\n /**\n * Set tools bases on update\n * \n * @see g3w-client-plugin-sispi-worksite\n */\n setUpdateEnableTools({\n tools = {},\n excludetools = [],\n options = { editing_constraints: true }\n }) {\n const { editing_constraints = false } = options;\n const UPDATEONEFEATUREONLYTOOLSID = [\n 'editattributes',\n 'movefeature',\n 'movevertex'\n ];\n const update_tools = this.state._tools\n .filter(tool => {\n // exclude\n if (excludetools.includes(tool.getId()) ) {\n return false;\n }\n return editing_constraints\n ? tool.type.find(type => type === 'change_feature' || type ==='change_attr_feature')\n : UPDATEONEFEATUREONLYTOOLSID.includes(tool.getId()) ;\n })\n .map(tool => {\n const id = tool.getId();\n return { id, options: tools[id] }\n });\n\n this.setEnablesDisablesTools({ enabled: update_tools });\n this.enableTools(true);\n }\n\n /**\n * Set enable tools\n *\n * @param tools\n */\n setEnablesDisablesTools(tools) {\n if (tools) {\n this.state.changingtools = true;\n // Check if tools is an array\n const {\n enabled : enableTools = [],\n disabled : disableTools = []\n } = tools;\n\n const toolsId = enableTools.length ? [] : this.state._tools.map(tool => tool.getId());\n\n enableTools\n .forEach(({ id, options = {} }) => {\n //check if id of tool passed as argument is right\n const tool =this.getToolById(id);\n if (tool) {\n const { active = false } = options;\n // set tool options\n tool.messages = options.messages || tool.messages;\n tool.visible = undefined !== options.visible ? options.visible : true;\n tool.enabled = undefined !== options.enabled ? options.enabled : false;\n tool.disabledtoolsoftools = undefined !== options.disabledtoolsoftools ? options.disabledtoolsoftools : [];\n if (tool.visible) {\n toolsId.push(id);\n }\n if (active) {\n this.setActiveTool(tool);\n }\n if (undefined === this.state._enabledtools) {\n this.state._enabledtools = [];\n }\n this.state._enabledtools.push(tool);\n }\n });\n //disabled and visible\n disableTools\n .forEach(({ id, options }) => {\n const tool = this.getToolById(id);\n if (tool) {\n if (undefined === this.state._disabledtools) {\n this.state._disabledtools = [];\n }\n this.state._disabledtools.push(id);\n //add it toi visible tools\n toolsId.push(id);\n }\n });\n //set not visible all remain\n this.state._tools.forEach(tool => !toolsId.includes(tool.getId()) && (tool.visible = false));\n this.state.changingtools = false;\n }\n };\n\n /**\n * @param {*} bool whehter enable all tools\n */\n enableTools(bool = false) {\n const tools = this.state._enabledtools || this.state._tools;\n const disabledtools = this.state._disabledtools || [];\n tools\n .forEach(tool => {\n const enabled = undefined === tool.enable ? bool : tool.enable;\n tool.enabled = (bool && disabledtools.length > 0)\n ? !disabledtools.includes(tool.getId())\n : toRawType(enabled) === 'Boolean'\n ? enabled\n : enabled({ bool, tool });\n if (!bool) {\n tool.active = bool;\n }\n })\n }\n\n /**\n * @param tool\n */\n setActiveTool(tool) {\n return $promisify(async () => {\n try {\n await promisify(this.stopActiveTool(tool));\n\n this.state.toolsoftool.splice(0);\n this.state.activetool = tool;\n\n const workflow = tool.getOperator();\n\n if (workflow) {\n // filter eventually disable tools of tools\n workflow.once('settoolsoftool', ts => this.state.toolsoftool.push(...(ts || []).filter(t => !tool.disabledtoolsoftools.includes(t.type))));\n workflow.once('start', ts => this.state.toolsoftool.forEach(t => (ts || []).includes(t.type) && (t.options.active = true)));\n workflow.once('stop', ts => this._deactivetools(tool, ts));\n workflow.once('reject', ts => this._deactivetools(tool, ts));\n }\n\n tool.start();\n\n // set tool messages\n const messages = this.state.activetool.getOperator().getHelpMessage() || this.state.activetool.getOperator().getRunningStep() ? this.state.activetool.messages : null;\n this.state.toolmessages.help = messages && messages.help || null\n\n } catch(e) {\n console.warn(e);\n }\n });\n }\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0 \n */\n _deactivetools(tool, tools = []) {\n // in case of deactivate tool and current active tool, it was clicked\n if (tool === this.state.activetool) {\n this.state.activetool = null;\n this.state.toolsoftool.splice(0);\n }\n this.state.toolsoftool.forEach(t => tools.includes(t.type) && (t.options.active = false));\n }\n\n /**\n * @returns {null}\n */\n getActiveTool() {\n return this.state.activetool;\n }\n\n /**\n * @param tool\n * \n * @returns {*}\n */\n stopActiveTool(tool) {\n return $promisify(async () => {\n const activeTool = this.getActiveTool();\n if (tool && (!activeTool || tool === activeTool)) {\n tool.removeAllListeners();\n return;\n }\n\n try {\n //Need to check if is there active tool\n if (activeTool) {\n activeTool.removeAllListeners();\n await promisify(activeTool.stop(true));\n }\n this.state.toolsoftool.splice(0);\n this.state.toolmessages.help = null;\n this.state.activetool = null;\n } catch(e) {\n console.warn(e);\n }\n });\n }\n\n /**\n * @returns {*}\n */\n getSession() {\n return this._session;\n }\n\n /**\n * @returns {*}\n */\n getEditor() {\n return this.state.layer.getEditor();\n }\n\n /**\n * Reset default values\n */\n resetDefault() {\n this.state.title = this.state.originalState.title;\n this.state.toolboxheader = true;\n this.state.startstopediting = true;\n this.constraints = {\n filter: null,\n show: null,\n tools: [],\n };\n\n if (this.state._enabledtools) {\n this.state._enabledtools = undefined;\n this.enableTools();\n this.state._tools.forEach(tool => {\n tool.visible = true;\n tool.enabled = false;\n tool.messages = tool.op.getMessages();\n tool.disabledtoolsoftools = []; //reset disabled tools eventually set by other\n });\n }\n this.state._disabledtools = null;\n /** since 3.9.0 set show based on visibile porpety of config editing object setting*/\n this.state.show = this.state.layer.config.editing.visible;\n //need to set selected false\n this.state.selected = false;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @param uniqueId\n * @param items\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __add(uniqueId, items) {\n //state object is an array of feature/features changed in a transaction\n return $promisify(new Promise((resolve) => {\n // before insert an item into the history\n // check if are at last state step (no redo was done)\n // If we are in the middle of undo, delete all changes\n // in the history from the current \"state\" so if it\n // can create a new history\n if (null === this.state.editing.session.current) {\n this._states = [{ id: uniqueId, items }]\n } else {\n if (this._states.length > 0 && this.state.editing.session.current < this._states.at(-1).id) {\n this._states = this._states.filter(s => s.id <= this.state.editing.session.current);\n }\n this._states.push({ id: uniqueId, items });\n }\n\n this.state.editing.session.current = uniqueId;\n // set internal state\n this.__canUndo();\n this.__canCommit();\n this.__canRedo();\n // return unique id key\n // it can be used in save relation\n resolve(uniqueId);\n }))\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * undo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __undo() {\n let items;\n if (this.state.editing.session.current === this._states[0].id) {\n this.state.editing.session.current = null;\n items = this._states[0].items;\n } else {\n this._states.find((state, idx) => {\n if (state.id === this.state.editing.session.current) {\n items = this._states[idx].items;\n this.state.editing.session.current = this._states[idx-1].id;\n return true;\n }\n })\n }\n items = checkSessionItems(this._history.id, items, 0);\n // set internal state\n this.__canUndo();\n this.__canCommit();\n this.__canRedo();\n return items;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * redo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __redo() {\n let items;\n // if not set get first state\n if (!this.state.editing.session.current) {\n items = this._states[0].items;\n // set current to first\n this.state.editing.session.current = this._states[0].id;\n } else {\n this._states.find((state, idx) => {\n if (this.state.editing.session.current === state.id) {\n this.state.editing.session.current = this._states[idx+1].id;\n items = this._states[idx+1].items;\n return true;\n }\n })\n }\n items = checkSessionItems(this._history.id, items, 1);\n // set internal state\n this.__canUndo();\n this.__canCommit();\n this.__canRedo();\n return items;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param id\n * \n * @returns {T}\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getState(id) {\n return this._states.find(s => id === s.id);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @returns { boolean } true if we can commit\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canCommit() {\n const checkCommitItems = this.__commit();\n let canCommit = false;\n for (let layerId in checkCommitItems) {\n const commitItem = checkCommitItems[layerId];\n canCommit = canCommit || commitItem.length > 0;\n }\n this._constrains.commit = canCommit;\n return this._constrains.commit;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * canUdo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canUndo() {\n let currentStateIndex = null;\n if (this.state.editing.session.current && this._states.length) {\n this._states.forEach((state, idx) => {\n if (this.state.editing.session.current === state.id) {\n currentStateIndex = idx;\n return false\n }\n });\n };\n const steps = (this._states.length - 1) - currentStateIndex;\n this._constrains.undo = (null !== this.state.editing.session.current) && (steps < 10); // 10 = maximum \"buffer history\" lenght for undo/redo\n return this._constrains.undo;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * canRedo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canRedo() {\n this._constrains.redo = (\n (this._states.at(-1) && this._states.at(-1).id != this.state.editing.session.current))\n || (null === this.state.editing.session.current && this._states.length > 0);\n return this._constrains.redo;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * get all changes to send to server (mandare al server)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __commit() {\n const commitItems = {};\n const statesToCommit = this._states.filter(s => s.id <= this.state.editing.session.current);\n statesToCommit\n .forEach(state => {\n state.items.forEach(item => {\n let add = true;\n if (Array.isArray(item)) {\n item = item[1];\n }\n if (commitItems[item.layerId]) {\n commitItems[item.layerId].forEach((commitItem, index) => {\n // check if already inserted feature\n if (commitItem.getUid() === item.feature.getUid()) {\n if (item.feature.isNew() && !commitItem.isDeleted() && item.feature.isUpdated()) {\n const _item = item.feature.clone();\n _item.add();\n commitItems[item.layerId][index] = _item;\n } else if (item.feature.isNew() && item.feature.isDeleted()) {\n commitItems[item.layerId].splice(index, 1);\n } else if (item.feature.isUpdated() || item.feature.isDeleted()) {\n commitItems[item.layerId][index] = item.feature;\n }\n add = false;\n return false;\n }\n });\n }\n if (add) {\n const feature = item.feature;\n const layerId = item.layerId;\n if (!(!feature.isNew() && feature.isAdded())) {\n if (!commitItems[layerId]) {\n commitItems[layerId] = [];\n }\n commitItems[layerId].push(feature);\n }\n }\n });\n });\n return commitItems;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @returns {*|null}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getLastHistoryState() {\n return this._states.at(-1) || null;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __isStarted() {\n return this.state.editing.session.started;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getHistory() {\n return this._history;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getEditor() {\n return this.state.layer.getEditor();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Add temporary features that will be added with save method\n * \n * @param { { layerId: string, feature: * } } NewFeat \n * @param { { layerId: string, feature: * } } OldFeat\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __push(newFeat, oldFeat) {\n this.state.editing.session.changes.push(oldFeat ? [oldFeat, newFeat] : newFeat); // check is set old (edit)\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Delete temporary feature\n * \n * @param layerId\n * @param feature\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __pushDelete(layerId, feature) {\n this.__push({ layerId, feature: feature.delete() });\n return feature;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Save temporary changes to the layer in history instance and feature store\n * \n * @param options\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __save(options = {}) {\n // fill history\n return $promisify(async () => {\n // add temporary modify to history\n if (this.state.editing.session.changes.length) {\n const uniqueId = options.id || Date.now();\n await promisify(this.__add(uniqueId, this.state.editing.session.changes));\n // clear to temporary changes\n this.state.editing.session.changes = [];\n // resolve if unique id\n return uniqueId;\n }\n return null;\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Add temporary feature\n * \n * @param layerId \n * @param feature \n * @param removeNotEditableProperties\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __pushAdd(layerId, feature, removeNotEditableProperties=true) {\n /**\n * @TODO check if it need to deprecate it. All properties are need\n * Please take care of this to understand\n * In case of removeNotEditableProperties true, remove not editable field\n * from feature properties\n */\n const editor = layerId === this.state.layer.getId() ? this.state.layer.getEditor() : ToolBox.get(layerId).getSession().getEditor();\n\n // remove not editable proprierties from feature\n if (removeNotEditableProperties) {\n (editor.getLayer().getEditingNotEditableFields() || []).forEach(f => feature.unset([f]));\n }\n\n const newFeature = feature.clone();\n\n this.__push({ layerId, feature: newFeature.add() });\n\n return newFeature;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Add temporary feature changes\n * \n * @param layerId\n * @param newFeature\n * @param oldFeature\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __pushUpdate(layerId, newFeature, oldFeature) {\n // get index of temporary changes\n const is_new = newFeature.isNew();\n const i = is_new && this.state.editing.session.changes.findIndex(c => layerId === c.layerId && c.feature.getId() === newFeature.getId());\n\n // in case of new feature\n if (is_new && i >=0) {\n const feature = newFeature.clone();\n feature.add();\n this.state.editing.session.changes[i].feature = feature;\n return;\n }\n\n this.__push(\n { layerId, feature: newFeature.update() },\n { layerId, feature: oldFeature.update() }\n )\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n *\n * @param changes\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __rollback(changes) {\n // skip when..\n if (changes) {\n return this.state.layer.getEditor().rollback(changes);\n }\n\n // Handle temporary changes of layer\n return $promisify(async () => {\n const id = this.state.layer.getId();\n changes = { own:[], dependencies: {} };\n \n this.state.editing.session.changes.forEach(c => {\n const change = Array.isArray(c) ? c[0] : c;\n if (id === change.layerId) {\n changes.own.push(change);\n } else {\n changes.dependencies[change.layerId] = changes.dependencies[change.layerId] || [];\n // FILO\n changes.dependencies[change.layerId].unshift(change);\n }\n });\n\n try {\n await promisify(this.state.layer.getEditor().rollback(changes.own));\n for (const id in changes.dependencies) {\n ToolBox.get(id).getSession().rollback(changes.dependencies[id]);\n }\n return changes.dependencies;\n } catch(e) {\n console.warn(e);\n } finally {\n this.state.editing.session.changes = [];\n }\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Rollback child changes of current session\n * \n * @param ids [array of child layer id]\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __rollbackDependecies(ids = []) {\n ids.forEach(id => {\n const changes = [];\n this.state.editing.session.changes = this.state.editing.session.changes.filter(tc => {\n if (id === tc.layerId) {\n changes.push(tc);\n return false\n }\n });\n if (changes.length) {\n ToolBox.get(id).getSession().rollback(changes);\n }\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n *\n * undo method\n * \n * @param items\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __undoSession(items) {\n items = items || this.__undo();\n this.state.layer.getEditor().setChanges(items.own, true);\n this.__canCommit();\n return items.dependencies;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * redo method\n * \n * @param items\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __redoSession(items) {\n items = items || this.__redo();\n this.state.layer.getEditor().setChanges(items.own, true);\n this.__canCommit();\n return items.dependencies;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Serialize commit\n * \n * @returns {{ add: *[], update: *[], relations: {}, delete: *[] }} JSON Object for a commit body send to server\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getCommitItems() {\n const itemsToCommit = this.__commit();\n const id = this.state.layer.getId();\n let state;\n let layer;\n const commitObj = {\n add: [], // features to add\n update: [], // features to update\n delete: [], // features to delete\n relations: {} // relation features\n };\n // key is a layer id that has changes to apply\n for (const key in itemsToCommit) {\n let isRelation = false; //set relation to false\n const items = itemsToCommit[key];\n // case key (layer id) is not equal to id (current layer id on editing)\n if (key !== id) {\n isRelation = true; //set true because these changes belong to features relation items\n const sessionRelation = ToolBox.get(key).getSession();\n //check lock ids of relation layer\n const lockids = sessionRelation ? sessionRelation.getEditor().getLockIds(): [];\n //create a relation object\n commitObj.relations[key] = {\n lockids,\n add: [],\n update: [],\n delete: [],\n relations: {} //@since v3.7.1\n };\n layer = commitObj.relations[key];\n } else {\n layer = commitObj;\n }\n //@since 3.9.0 Check if it has 3D geometry type (Z or MZ)\n const is_vector = Layer.LayerTypes.VECTOR === ToolBox.get(key).getLayer().getType(); // check if is vector layer\n const geometryType = is_vector && CatalogLayersStoresRegistry.getLayerById(key).getGeometryType(); //get geometry type if vector layer\n const is3DGeometry = geometryType && g3wsdk.core.geoutils.Geometry.is3DGeometry(geometryType); //Boolean check if is 3D geometry\n items\n .forEach(item => {\n //check the state of feature item\n state = item.getState();\n const GeoJSONFormat = new ol.format.GeoJSON();\n // item needs to be deleted\n if ('delete' === state) {\n //check if is new. If is new mean is not present on server,\n //so no need to say to server to delete it\n if (!item.isNew()) {\n layer.delete.push(item.getId());\n }\n return;\n }\n //convert feature to json ex. {geometry:{type: 'Point'}, properties:{}.....}\n const itemObj = GeoJSONFormat.writeFeatureObject(item);\n //In the case of 3D geometry need to set the same tpe of layer (LineStringMZ...)\n if (is3DGeometry) {\n itemObj.geometry.type = geometryType\n }\n\n //get properties\n const childs_properties = item.getProperties();\n for (const p in itemObj.properties) {\n // in case the value of property is an object\n if (itemObj.properties[p] && typeof itemObj.properties[p] === 'object' && itemObj.properties[p].constructor === Object) {\n //need to get value from value attribute object\n itemObj.properties[p] = itemObj.properties[p].value;\n }\n // @TODO explain when this condition happen\n if (undefined === itemObj.properties[p] && childs_properties[p]) {\n itemObj.properties[p] = childs_properties[p]\n }\n }\n // in case of adding, it has to remove not editable properties\n layer[item.isNew() ? 'add' : item.getState()].push(itemObj);\n });\n // check in case of no edit remove relation key\n if (\n isRelation\n && layer.add.length === 0 //no relation features to add\n && layer.update.length === 0 //no relation features to update\n && layer.delete.length === 0 //no relation features to delete\n ) {\n delete commitObj.relations[key];\n }\n }\n // Remove deep relations from the current layer (commitObj) that are not relative to that layer\n const relations = Object.keys(commitObj.relations || {});\n relations\n .filter(id => undefined === this.state.layer.getEditor().getLayer().getRelations().getArray().find(r => id === r.getChild())) // child relations\n .map(id => {\n commitObj.relations[ToolBox\n .get(id)\n .getSession()\n .getEditor()\n .getLayer()\n .getRelations()\n .getArray()\n .find(r => id === r.getChild() && commitObj.relations[r.getFather()]) // parent relation layer\n .getFather()].relations[id] = commitObj.relations[id];\n return id;\n })\n .forEach(id => delete commitObj.relations[id]);\n\n return commitObj;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Clear all things bind to session\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __clearSession() {\n this._allfeatures = false;\n this.state.editing.session.started = false;\n this.state.editing.session.getfeatures = false;\n this.__clearHistory();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param ids since g3w-client-plugin-editing@v3.8.0\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __clearHistory(ids) {\n if (ids) {\n this._states.forEach((state, idx) => {\n if (ids.includes(state.id)) {\n if (this.state.editing.session.current && state.id === this.state.editing.session.current) {\n this.__undo();\n }\n this._states.splice(idx, 1);\n }\n });\n } else {\n // clear all\n this._states = [];\n this.state.editing.session.current = null;\n this._constrains.commit = false;\n this._constrains.redo = false;\n this._constrains.undo = false;\n }\n }\n\n /**\n * Start session\n */\n async __startSession(options = {}) {\n try {\n const features = await promisify(this.state.layer.getEditor().start(options));\n this.state.editing.session.started = true;\n return features;\n } catch(e) {\n console.warn(e);\n return Promise.reject(e);\n } finally {\n if (!options.registerEvents) { return }\n this.state._getFeaturesOption = options;\n // register get features event (only in case filter bbox)\n if ((Layer.LayerTypes.VECTOR === this.state._layerType) && this.state._getFeaturesOption.filter.bbox) {\n const fnc = () => {\n if (\n //added ApplicationState.online\n ApplicationState.online\n && this.state.editing.canEdit\n && this.state.selected //need to be selected\n && 0 === GUI.getContentLength()\n ) {\n this.state._getFeaturesOption.filter.bbox = GUI.getService('map').getMapBBOX();\n this.state.loading = true;\n this._session\n .getFeatures(this.state._getFeaturesOption)\n .then(promise => promise.then(() => this.state.loading = false) )\n }\n };\n this._getFeaturesEvent.event = 'moveend';\n this._getFeaturesEvent.fnc = debounce(fnc, 300);\n this._olStartKeysEvent.push(GUI.getService('map').getMap().on('moveend', this._getFeaturesEvent.fnc));\n if (GUI.getContentLength()) {\n GUI.once('closecontent', () => {\n const map = GUI.getService('map').getMap();\n setTimeout(() => map.dispatchEvent({ type: this._getFeaturesEvent.event, target: map }))\n })\n }\n }\n }\n }\n\n /**\n * Stop session\n */\n async __stopSession() {\n try {\n if (this.state.editing.session.started || this.state.editing.session.getfeatures) {\n await promisify(this.state.layer.getEditor().stop());\n this.__clearSession();\n } \n } catch (e) {\n console.warn(e);\n return Promise.reject(e);\n } finally {\n if (ApplicationState.online) {\n this._stopSessionChildren(this.state.id);\n }\n // unregister get features event\n if (this.state._getFeaturesOption.registerEvents && Layer.LayerTypes.VECTOR === this.state._layerType) {\n GUI.getService('map').getMap().un(this._getFeaturesEvent.event, this._getFeaturesEvent.fnc);\n }\n }\n }\n\n /**\n * Get features from server (by editor)\n */\n async __getFeatures(options={}) {\n if (!this._allfeatures) {\n this._allfeatures = !options.filter;\n const features = await promisify(this.state.layer.getEditor().getFeatures(options));\n this.state.editing.session.getfeatures = true;\n return features;\n }\n return [];\n }\n\n /**\n * Hook to get informed that are saved on server\n * Get unique id for each commited layer/relation\n */\n async __saveChangesOnServer(commit) {\n const promises = [ setLayerUniqueFieldValues(this.getId()) ];\n const relationsId = [];\n const addRelationId = (relations = {}) => {\n Object.entries(relations).forEach(([id, commit]) => {\n relationsId.push(id);\n addRelationId(commit.relations);\n })\n }\n addRelationId(commit.relations);\n relationsId.forEach(id => promises.push(setLayerUniqueFieldValues(id)));\n\n await Promise.allSettled(promises);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/toolboxes/tool.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _startTool(tool) {\n if (tool.getOperator()) {\n tool.active = true;\n setTimeout(async() => await this._startOp(\n tool,\n {\n inputs: { layer: this.getLayer(), features: [] },\n context: { session: this._session }\n },\n !!GUI.getService('map').isMapHidden())\n ); // prevent rendering change state\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/toolboxes/tool.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async _startOp(tool, options, hideSidebar) {\n // reset features\n options.inputs.features = options.features || [];\n\n if (hideSidebar) {\n GUI.hideSidebar();\n }\n\n try {\n await promisify(tool.op.start(options));\n await promisify(this._session.save());\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').saveChange(); // after save temp change check if editing service has a autosave\n } catch (e) {\n console.warn(e);\n if (hideSidebar) {\n GUI.showSidebar();\n }\n this._session.rollback();\n } finally {\n if (!tool.getOperator().runOnce && Layer.LayerTypes.VECTOR === this.getLayer().getType() ) {\n await this._startOp(tool, options, hideSidebar);\n } else {\n tool.stop();\n }\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/toolboxes/tool.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _stopTool(tool, force = false) {\n return $promisify(async () => {\n if (!tool.getOperator()) {\n tool.emit('stop', { session: this._session });\n return;\n }\n try {\n await promisify(tool.getOperator().stop(force));\n } catch(e) {\n console.warn(e);\n this._session.rollback();\n } finally {\n tool.active = false;\n tool.emit('stop', { session: this._session });\n }\n });\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/store/sessions.js@v3.9.1\n *\n * Store editing sessions\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\nToolBox._sessions = {};\nToolBox.get = id => ToolBox._sessions[id];\nToolBox.clear = () => Object.keys(sessions).forEach(id => delete ToolBox._sessions[id]);", "import { chooseFeatureFromFeatures } from '../utils/chooseFeatureFromFeatures';\nimport { $promisify } from '../utils/promisify';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/choosefeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/choosefeaturestep.js@v3.7.1\n * \n * @returns jQuery promise\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function chooseFeature(inputs) {\n return $promisify(async () => {\n try {\n if (1 !== inputs.features.length) {\n const feature = await chooseFeatureFromFeatures({ features: inputs.features, inputs });\n inputs.features = [feature];\n }\n return inputs;\n } catch (e) {\n console.warn(e);\n return Promise.reject(e);\n }\n });\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param layer,\n * @param feature\n *\n * @returns Array of fields\n */\nexport function getNotEditableFieldsNoPkValues({\n layer,\n feature,\n}) {\n return layer\n .getEditingNotEditableFields()\n .reduce((fields, field) => {\n fields[field] = layer.isPkField(field) ? null : feature.get(field); // NB: Primary Key fields need to be `null`\n return fields;\n }, {});\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/moveelementstask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/movelementsstep.js@v3.7.1\n *\n * @param { Object } delta\n * @param delta.x\n * @param delta.y\n * @param delta.coordinates\n * \n * @returns {{ x: number, y: number }}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getDeltaXY({ x, y, coordinates } = {}) {\n const coords = _getCoordinates(coordinates);\n return {\n x: x - coords.x,\n y: y - coords.y\n }\n}\n\nfunction _getCoordinates(coords) {\n return Array.isArray(coords[0]) ? _getCoordinates(coords[0]) : {\n x: coords[0],\n y: coords[1]\n };\n}", "/**\n * @param feature\n * @param coordinates\n *\n * @returns { boolean }\n */\nexport function isPointOnVertex({\n feature,\n coordinates,\n }) {\n const geometry = feature.getGeometry();\n const type = geometry.getType();\n const coords = c => g3wsdk.core.geoutils.areCoordinatesEqual(coordinates, c); // whether element have same coordinates\n \n switch (type) {\n case 'Polygon':\n case 'MultiLineString':\n return geometry.getCoordinates().flat().some(coords);\n \n case 'LineString':\n case 'MultiPoint':\n return geometry.getCoordinates().some(coords);\n \n case 'MultiPolygon':\n return geometry.getPolygons().some(poly => poly.getCoordinates().flat().some(coords));\n \n case 'Point':\n return g3wsdk.core.geoutils.areCoordinatesEqual(coordinates, geometry.getCoordinates());\n \n default:\n return false;\n }\n }", "import { cloneFeature } from '../utils/cloneFeature';\nimport { evaluateExpressionFields } from '../utils/evaluateExpressionFields';\nimport { getNotEditableFieldsNoPkValues } from '../utils/getNotEditableFieldsNoPkValues';\n\nconst { Feature } = g3wsdk.core.layer.features;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/splitfeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/splitfeaturestep.js@v3.7.1\n *\n * @param feature\n * @param inputs\n * @param context\n * @param splittedGeometries\n * \n * @returns {Promise<*[]>}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport async function handleSplitFeature({\n feature,\n inputs,\n context,\n splittedGeometries = []\n} = {}) {\n const newFeatures = [];\n const { layer } = inputs;\n const session = context.session;\n const source = layer.getEditingLayer().getSource();\n const layerId = layer.getId();\n const oriFeature = feature.clone();\n inputs.features = splittedGeometries.length ? [] : inputs.features;\n const splittedGeometriesLength = splittedGeometries.length;\n\n for (let index = 0; index < splittedGeometriesLength; index++) {\n const splittedGeometry = splittedGeometries[index];\n if (0 === index) {\n /**\n * check geometry evaluated expression\n */\n feature.setGeometry(splittedGeometry);\n try {\n await evaluateExpressionFields({ inputs, context, feature });\n } catch(e) {\n console.warn(e);\n }\n\n session.pushUpdate(layerId, feature, oriFeature);\n\n } else {\n const newFeature = cloneFeature(oriFeature, layer);\n newFeature.setGeometry(splittedGeometry);\n\n // set media fields to null\n //@since 3.9.0 Commented\n //layer.getEditingMediaFields({}).forEach(f => newFeature.set(f, null));\n\n feature = new Feature({ feature: newFeature });\n\n feature.setTemporaryId();\n\n // evaluate geometry expression\n try { await evaluateExpressionFields({ inputs, context, feature }); }\n catch(e) { console.warn(e); }\n\n /**\n * @todo improve client core to handle this situation on sesssion.pushAdd not copy pk field not editable only\n */\n const noteditablefieldsvalues = getNotEditableFieldsNoPkValues({ layer, feature });\n\n if (Object.entries(noteditablefieldsvalues).length) {\n const newFeature = session.pushAdd(layerId, feature);\n Object.entries(noteditablefieldsvalues).forEach(([field, value]) => newFeature.set(field, value));\n newFeatures.push(newFeature);\n //need to add features with no editable fields on layers source\n source.addFeature(newFeature);\n } else {\n newFeatures.push(session.pushAdd(layerId, feature));\n //add feature to source\n source.addFeature(feature);\n }\n }\n inputs.features.push(feature);\n }\n\n return newFeatures;\n}", "import { evaluateExpressionFields } from '../utils/evaluateExpressionFields';\nimport { $promisify } from './promisify';\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/addparttomultigeometriestask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/addparttomultigeometriesstep.js@v3.7.1\n * \n * @returns jQuery promise\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function addPartToMultigeometries(inputs, context) {\n return $promisify(async () => {\n let feature;\n let originalFeature;\n\n // add part\n if (inputs.features.length > 1) {\n feature = inputs.features[0];\n const geometry = feature.getGeometry();\n originalFeature = feature.clone();\n geometry.setCoordinates([...geometry.getCoordinates(), ...inputs.features[1].getGeometry().getCoordinates()]);\n } else {\n feature = inputs.layer.getEditingLayer().getSource().getFeatures()[0];\n originalFeature = feature.clone();\n feature.setGeometry(inputs.features[0].getGeometry());\n }\n\n // evaluated geometry expression\n try { await evaluateExpressionFields({ inputs, context, feature });}\n catch (e) { console.warn(e); }\n\n context.session.pushUpdate(inputs.layer.getId(), feature, originalFeature);\n\n inputs.features = [feature];\n return inputs;\n });\n}", "/**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * check if was done an update (update are array contains two items, old and new value)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function checkSessionItems(historyId, items, action) {\n /**\n * action: \n * 0: undo;\n * 1: redo;\n **/\n const newItems = {\n own: [], //array of changes of layer of the current session\n dependencies: {} // dependencies\n };\n\n items\n .forEach((item) => {\n if (Array.isArray(item)) { item = item[action] }\n // check if belong to session\n if (historyId === item.layerId) { newItems.own.push(item) }\n else {\n newItems.dependencies[item.layerId] = newItems.dependencies[item.layerId] || {\n own: [],\n dependencies: {}\n };\n newItems.dependencies[item.layerId].own.push(item);\n }\n });\n\n return newItems;\n}", "import { Workflow } from '../g3wsdk/workflow/workflow';\nimport { getRelationFieldsFromRelation } from '../utils/getRelationFieldsFromRelation';\nimport { updateWorkflows } from './updateWorkflows';\nimport { getEditingLayerById } from '../utils/getEditingLayerById';\nimport { $promisify } from \"../utils/promisify\";\n\nconst { GUI } = g3wsdk.gui;\nconst { tPlugin } = g3wsdk.core.i18n;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * Unlink relation\n * @param layerId\n * @param relation\n * @param relations\n * @param index\n * @param dialog\n * \n * @returns JQuery Promise\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function unlinkRelation({\n layerId,\n relation,\n relations,\n index,\n dialog = true,\n}) {\n return $promisify(new Promise((resolve) => {\n const unlink = () => {\n const id = layerId === relation.child ? relation.father : relation.child; // relation layer id\n const feature = getEditingLayerById(id).getEditingSource().getFeatureById(relations[index].id);\n const originalRelation = feature.clone();\n // loop on ownField (Array field child relation)\n getRelationFieldsFromRelation({ relation, layerId: id }).ownField.forEach(f => feature.set(f, null))\n Workflow.Stack.getCurrent().getSession().pushUpdate(id, feature, originalRelation);\n relations.splice(index, 1);\n updateWorkflows();\n resolve(true);\n };\n if (dialog) {\n GUI.dialog.confirm(tPlugin(\"editing.messages.unlink_relation\"), result => result ? unlink() : d.reject(false));\n } else {\n unlink();\n }\n }));\n}", "const { splitFeature } = g3wsdk.core.geoutils;\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/utils/splitFeatures.js@v3.10.2\n * \n * @param { Object } opts\n * @param { Array } opts.features\n * @param opts.splitfeature\n * \n * @returns { Array } splittered geometries\n * \n * @since g3w-client-plugin-editing@v3.9.0\n */\nexport function splitFeatures(features, splitfeature) {\n return (features || []).reduce((a, f) => {\n const geometries = splitFeature({ splitfeature, feature: f });\n if (geometries.length > 1) {\n a.push({ uid: f.getUid(), geometries });\n }\n return a;\n }, []);\n}", "/**\n * @file\n * \n * ORIGINAL SOURCE: g3w-client/src/core/editing/editor.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.x\n */\n\nimport { ToolBox } from '../../toolboxes/toolbox';\nimport { promisify, $promisify } from '../../utils/promisify';\n\nconst { ApplicationState, G3WObject } = g3wsdk.core;\nconst { FeaturesStore } = g3wsdk.core.layer.features;\nconst { Layer } = g3wsdk.core.layer;\n\n/**\n * ORIGINAL SOURE: g3w-client/src/app/core/layers/features/olfeaturesstore.js@v3.10.2\n */\nclass OlFeaturesStore extends FeaturesStore {\n constructor(opts = {}) {\n super(opts);\n this._features = opts.features || new ol.Collection([]);\n }\n\n /**\n * Get number of features stored\n * @return { Number }\n */\n getLength() {\n return this._features.getLength();\n }\n\n /**\n * Store features\n * @param { Array } features\n */\n setFeatures(features = []) {\n //remove features\n this._features.clear();\n //add new features\n this.addFeatures(features);\n this._features.dispatchEvent('change');\n };\n\n /**\n * @returns {*[]}\n */\n readFeatures() {\n return this._features.getArray();\n };\n\n /**\n * @return {*|ol.Collection}\n */\n getFeaturesCollection() {\n return this._features;\n }\n\n /**\n * @param id\n * @returns {*}\n */\n getFeatureById(id) {\n return this._features.getArray().find(f => id == f.getId());\n }\n\n getFeatureByUid(uid) {\n return this._features.getArray().find(f => uid === f.getUid());\n }\n\n /**\n *\n * @param feature\n * @private\n */\n _addFeature(feature) {\n this._features.push(feature);\n // useful for ol.source.Vector\n this._features.dispatchEvent('change');\n }\n\n /**\n * Substitute the feature after modifying\n * @param feature\n * @private\n */\n _updateFeature(feature) {\n const index = this._features.getArray().findIndex(f => feature.getUid() === f.getUid());\n if (index >= 0) {\n this._features.removeAt(index);\n this._features.insertAt(index, feature);\n this._features.dispatchEvent('change')\n }\n }\n\n /**\n * Remove feature from store\n * @param feature\n * @private\n */\n _removeFeature(feature) {\n const index = this._features.getArray().findIndex(f => feature.getUid() === f.getUid());\n if (index >= 0) {\n this._features.removeAt(index);\n this._features.dispatchEvent('change');\n }\n }\n\n /**\n * @private\n */\n _clearFeatures() {\n try {\n // Used remove single features instead use clear method\n // because some time trows an error\n for (let i = 0; i < this._features.getArray().length; i++) {\n this._features.removeAt(i);\n }\n } catch(e) {\n console.warn(e);\n }\n //Need to set a new Collection to avoid duplicate\n this._features = null; //@TODO is still usefully ????\n this._features = new ol.Collection([]);\n }\n\n}\n\n\n/**\n * Editor Class: bind editor to layer to do main actions\n *\n * @param config\n *\n * @constructor\n */\nexport default class Editor extends G3WObject {\n\n constructor(options = {}) {\n\n super();\n\n /**\n * Setter hooks.\n */\n this.setters = {\n save() { this._layer.save(); },\n addFeature(feature) { this._featuresstore.addFeature(feature); },\n updateFeature(feature) { this._featuresstore.updateFeature(feature); },\n deleteFeature(feature) { this._featuresstore.deleteFeature(feature); },\n setFeatures(features = []) { this._featuresstore.setFeatures(features); },\n /**\n * Get features from server method.\n * Used when vector Layer's bbox is contained into an already requested bbox (so no a new request is done).\n *\n * @param { number[] } options.filter.bbox bounding box Array [xmin, ymin, xmax, ymax]\n *\n * @returns { boolean } whether can perform a server request\n */\n getFeatures(options = {}) {\n // skip is not onlien or all features of layers are already got\n if (!ApplicationState.online || this._allfeatures) {\n return $promisify(Promise.resolve());\n }\n\n return $promisify(async () => {\n\n let doRequest = true; // default --> perform request\n\n const { bbox } = options.filter || {};\n //check if bbox options filter (bbox of a current map) is passed and is a vector layer\n const is_vector = bbox && Layer.LayerTypes.VECTOR === this._layer.getType();\n \n // first request --> need to perform request\n if (is_vector && null === this._filter.bbox) {\n this._filter.bbox = bbox; // store bbox\n doRequest = true;\n }\n\n // subsequent requests --> check if bbox is contained into an already requested bbox\n else if (is_vector) {\n //Boolean - Check if features are already got inside bbox\n const is_cached = ol.extent.containsExtent(this._filter.bbox, bbox);\n if (!is_cached) {\n this._filter.bbox = ol.extent.extend(this._filter.bbox, bbox);\n }\n doRequest = !is_cached;\n }\n\n /** @TODO simplfy nested promises */\n if (doRequest) {\n const features = await promisify(this._layer.getFeatures(options));\n // add features from server to editing features store (cloned from original)\n this._featuresstore.addFeatures((features || []).map(f => f.clone()));\n //set all features to true if no filter is set (e.g., Table layer)\n this._allfeatures = !options.filter;\n return features;\n }\n });\n },\n };\n\n /**\n * Filter to getFeaturerequest\n */\n this._filter = {\n bbox: null\n };\n\n /**\n * { Boolean } true, mean all features of layer are get (e.g. Table layer)\n */\n this._allfeatures = false;\n\n /**\n * Referred layer\n */\n this._layer = options.layer;\n\n /**\n * Store editing features\n * \n * @type { FeaturesStore | OlFeaturesStore }\n */\n this._featuresstore = Layer.LayerTypes.TABLE === this._layer.getType() ? new FeaturesStore() : new OlFeaturesStore();\n\n /**\n * Whether editor is active or not\n *\n * @type { boolean }\n */\n this._started = false;\n\n }\n\n /**\n * Get editing source layer feature\n * \n * @returns { FeaturesStore | OlFeaturesStore }\n */\n getEditingSource() {\n return this._featuresstore;\n }\n\n /**\n * get Source\n */\n getSource() {\n this._layer.getSource();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/services/editing.js@v3.9.1\n * \n * Apply changes to source features (undo/redo)\n * \n * @param items\n * @param { boolean } reverse whether change to opposite\n */\n setChanges(items = [], reverse = true) {\n /** known actions */\n const Actions = {\n 'add': { fnc: 'addFeature', opposite: 'delete' },\n 'delete': { fnc: 'removeFeature', opposite: 'add' },\n 'update': { fnc: 'updateFeature', opposite: 'update' },\n };\n items.forEach(item => {\n if (reverse) {\n item.feature[Actions[item.feature.getState()].opposite]();\n }\n // get method from object\n this._featuresstore[Actions[item.feature.getState()].fnc](item.feature);\n });\n }\n\n /**\n * @returns {*}\n */\n getLayer() {\n return this._layer;\n }\n\n /**\n * @param layer\n */\n setLayer(layer) {\n return this._layer = layer;\n }\n\n /**\n * Rollback changes\n * \n * @param changes\n * \n * @returns {*}\n */\n rollback(changes = []) {\n return $promisify(() => this.setChanges(changes, true));\n }\n\n /**\n * Apply response data from server in case of new inserted feature\n * @param { Object } response\n * @param response.response.new array of new ids\n * @param response.response.new.clientid temporary id created by client __new__\n * @param response.response.new.id the new id created and stored on server\n * @param response.response.new.properties properties of the feature saved on server\n * @param response.response.new_lockids array of new lockIds\n * \n * @param relations\n */\n applyCommitResponse(response = {}, relations = []) {\n\n // skip when no response and response.result is false\n if (!(response && response.result)) { return }\n\n //Loop on new features saved on server\n // clientid - temporary id of new feature\n // id - id saved on server (autogenerate, next value) to subtituite to clientid feature id\n // properties - properties of feature returned by server\n response.response.new.forEach(({ clientid, id, properties } = {}) => {\n //get feature from current layer in editing\n const feature = this.getEditingSource().getFeatureById(clientid);\n // set new id\n feature.setId(id);\n //set properties\n feature.setProperties(properties);\n //Loop on eventual relation updated or created\n relations.forEach(r => { // handle relations (if provided)\n Object\n .entries(r)\n .forEach(([ id, opts = {}]) => { // id - relation layer id, opts - Object contain relation properties\n //get the editing source of relation layer\n const source = ToolBox.get(id).getSession().getEditor().getEditingSource();\n // handle value to relation field saved on server\n (opts.ids || []).forEach(id => {\n const rFeature = source.getFeatureById(id);\n if (rFeature) {\n opts.fatherField.forEach((ff, i) => {// loop relation ids\n rFeature.set(opts.childField[i], feature.get(ff)) // set father feature `value` and `name`\n })\n }\n })\n });\n });\n\n });\n\n //@since 3.9.0 take in account update properties returned by server (Useful in case of media input changes)\n (response.response.update || []).forEach(({ id, properties } = {}) => {\n //get feature from current layer in editing\n const feature = this.getEditingSource().getFeatureById(id);\n //set properties\n feature.setProperties(properties);\n //Loop on eventual relation updated or created\n relations.forEach(r => { // handle relations (if provided)\n Object\n .entries(r)\n .forEach(([ id, opts = {}]) => { // id - relation layer id, opts - Object contain relation properties\n //get the editing source of relation layer\n const source = ToolBox.get(id).getSession().getEditor().getEditingSource();\n // handle value to relation field saved on server\n (opts.ids || []).forEach(id => {\n const rFeature = source.getFeatureById(id);\n if (rFeature) {\n opts.fatherField.forEach((ff, i) => {// loop relation ids\n rFeature.set(opts.childField[i], feature.get(ff)) // set father feature `value` and `name`\n })\n }\n })\n });\n });\n\n });\n\n const features = this.readEditingFeatures();\n\n features.forEach(f => f.clearState()); // reset state of the editing features (update, new etc..)\n\n this._layer.setFeatures([...features]); // substitute layer features with actual editing features (\"cloned\" to prevent layer actions duplicates, eg. addFeatures)\n\n this.addLockIds(response.response.new_lockids); // add lock ids\n }\n\n /**\n * @param lockids locks be added to current layer\n *\n * @since 3.9.0\n */\n addLockIds(lockids) {\n this._layer.getSource().addLockIds(lockids);\n }\n\n /**\n * @returns {*}\n */\n getLockIds() {\n return this._layer.getSource().getLockIds();\n }\n\n /**\n * Run after server has applied changes to origin resource\n *\n * @param commit commit items\n *\n * @returns jQuery promise\n */\n commit(commit) {\n return $promisify(async () => {\n let relations = [];\n\n // check if there are commit relations binded to new feature\n if (commit.add.length) {\n relations = Object\n .keys(commit.relations)\n .map(relationId => {\n const relation = this._layer.getRelations().getRelationByFatherChildren(this._layer.getId(), relationId);\n return {\n [relationId]: {\n ids: [ // ids of \"added\" or \"updated\" relations\n ...commit.relations[relationId].add.map(r => r.id), // added\n ...commit.relations[relationId].update.map(r => r.id) // updated\n ],\n fatherField: relation.getFatherField(), // father Fields \n childField: relation.getChildField() // child Fields \n }\n };\n });\n }\n\n /** @TODO simplfy nested promises */\n const r = await promisify(this._layer.commit(commit));\n this.applyCommitResponse(r, relations);\n return r;\n });\n }\n\n /**\n * start editing\n */\n start(options = {}) {\n /** @TODO simplfy nested promises */\n return $promisify(async () => {\n const features = await promisify(this.getFeatures(options)); // load layer features based on filter type\n this._started = true; // if all ok set to started\n return features; // features are already inside featuresstore\n });\n }\n\n /**\n * Read features (action to layer)\n */\n readFeatures() {\n return this._layer.readFeatures();\n }\n\n /**\n * @returns features stored in editor featurestore\n */\n readEditingFeatures() {\n return this._featuresstore.readFeatures();\n }\n\n /**\n * stop editor\n */\n stop() {\n return $promisify(async () => {\n const { result } = await promisify(this._layer.unlock());\n this.clear();\n return result;\n })\n }\n\n /**\n * @returns { boolean } whether has started editor \n */\n isStarted() {\n return this._started;\n }\n\n /**\n * Method to clear all filled variables\n */\n clear() {\n this._started = false;\n this._filter.bbox = null;\n this._allfeatures = false;\n\n this._featuresstore.clear();\n this._layer.getFeaturesStore().clear();\n\n // vector layer\n if (Layer.LayerTypes.VECTOR === this._layer.getType()) {\n this._layer.resetEditingSource(this._featuresstore.getFeaturesCollection());\n }\n }\n\n}", "import Editor from './editing/editor';\nimport { Step } from './workflow/step';\nimport { Flow, ChangesManager, Session } from '../deprecated';\nimport { Workflow } from './workflow/workflow';\n\n/**\n * Editing APIs will be removed from core after g3w-client@v.4.x\n */\nif (\n window.g3wsdk.core.editing\n || window.g3wsdk.core.workflow\n || window.g3wsdk.constant.DEFAULT_EDITING_CAPABILITIES\n || g3wsdk.version < '4'\n) {\n console.warn('Editing APIs will be removed from g3wsdk after v4.x');\n}\n\n/**\n * Object to provide external plugin to use editing objects\n */\nwindow.g3wsdk.core.editing = {\n Session,\n SessionsRegistry: Session.Registry,\n Editor,\n ChangesManager,\n};\n\n/**\n * Default editing capabilities\n *\n * @type {string[]}\n */\nwindow.g3wsdk.constant.DEFAULT_EDITING_CAPABILITIES = [\n 'add_feature',\n 'change_feature',\n 'change_attr_feature',\n 'delete_feature',\n];\n\n/**\n * Object to provide to external plugins to use workflow objects\n */\nwindow.g3wsdk.core.workflow = {\n Task: Step,\n Step,\n Flow,\n Workflow,\n WorkflowsStack: Workflow.Stack\n};", "/**\n * Migrate your consumer code away from jQuery promises.\n * Covert a jQuery promise into an ES6 Promise\n * \n * @param promise jquery promise\n */\nexport function promisify(promise) {\n if (promise instanceof Promise) {\n return promise;\n }\n if (!promise || !promise.then) {\n console.trace(promise);\n return Promise.reject('not a promise');\n }\n return new Promise((resolve, reject) => {\n promise.then(resolve).fail(reject);\n });\n}\n\n/**\n * Migrate your consumer code away from jQuery promises.\n * Convert ES6 Promise into jQuery\n * \n * @param promise async function or ES6 promise \n */\nexport function $promisify(promise) {\n if (undefined === promise) {\n console.trace();\n return $.Deferred(d => d.reject('not a promise')).promise();\n }\n if (promise.always) {\n return promise;\n }\n return $.Deferred(async d => {\n try { d.resolve(await (promise instanceof Promise ? promise : promise())); }\n catch (e) { console.trace(e); d.reject(e); }\n }).promise();\n}", "import { promisify } from '../../utils/promisify';\n\nclass Queque {\n constructor() { this.tasks = []; }\n addTask(task) { this.tasks.push(task); }\n run(reverse = false) { while (this.tasks.length) { const task = reverse ? this.tasks.pop() : this.tasks.shift(); task(); } }\n flush() { return this.tasks.splice(0); }\n getLength() { return this.tasks.length; }\n clear() { this.run(); this.tasks = []; }\n}\n\n\n/**\n * Class Flow of workflow step by step\n * \n * ORIGINAL SOURCE: g3w-client/src/core/workflow/flow.js@v3.9.1\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/queque.js@v3.9.1\n */\nexport class Flow extends g3wsdk.core.G3WObject {\n constructor() {\n super();\n console.warn('[G3W-CLIENT] g3wsdk.core.workflow.Flow is deprecated');\n this.steps = [];\n this.counter = 0;\n this.context = null;\n this.queques = {\n end: new Queque(),\n micro: new Queque()\n };\n this.inputs;\n this.d;\n this._workflow;\n }\n\n //start workflow\n start(workflow) {\n this.d = $.Deferred();\n if (this.counter > 0) {\n console.log(\"reset workflow before restarting\");\n }\n this._workflow = workflow;\n this.inputs = workflow.getInputs();\n this.context = workflow.getContext();\n this.steps = workflow.getSteps();\n // check if there are steps\n if (this.steps && this.steps.length) {\n //run step (first)\n this.runStep(this.steps[0], this.inputs, this.context);\n }\n // return a promise that will be reolved if all step go right\n return this.d.promise();\n };\n\n //run step\n runStep(step, inputs) {\n //run step that run task\n this._workflow.setMessages({\n help: step.state.help\n });\n const runMicroTasks = this.queques.micro.getLength();\n step.run(inputs, this.context, this.queques)\n .then(outputs => {\n runMicroTasks && this.queques.micro.run();\n this.onDone(outputs);\n })\n .fail(e => this.onError(e));\n };\n\n //check if all step are resolved\n onDone(outputs) {\n this.counter++;\n if (this.counter === this.steps.length) {\n this.counter = 0;\n this.d.resolve(outputs);\n return;\n }\n this.runStep(this.steps[this.counter], outputs);\n };\n\n // in case of error\n onError(e) {\n this.counter = 0;\n this.clearQueques();\n this.d.reject(e);\n };\n\n // stop flow\n stop() {\n const d = $.Deferred();\n this.steps[counter].isRunning() ? this.steps[this.counter].stop() : null;\n this.clearQueques();\n if (this.counter > 0) {\n // set counter to 0\n this.counter = 0;\n // reject flow\n d.reject();\n } else {\n //reject to force rollback session\n d.resolve();\n }\n return d.promise();\n };\n\n clearQueques(){\n this.queques.micro.clear();\n this.queques.end.clear();\n }\n\n}\n\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/services/editing.js@v3.9.1\n */\nexport const ChangesManager = {\n /** known actions */\n Actions: {\n 'add': {\n fnc: 'addFeature',\n opposite: 'delete'\n },\n 'delete': {\n fnc: 'removeFeature',\n opposite: 'add'\n },\n 'update': {\n fnc: 'updateFeature',\n opposite: 'update'\n }\n },\n /* apply changes to features (undo/redo) */\n execute(object, items, reverse) {\n console.warn('[G3W-CLIENT] g3wsdk.core.workflow.ChangesManager is deprecated');\n let fnc;\n let feature;\n items.forEach((item) => {\n feature = item.feature;\n if (reverse) {\n // change to opposite\n feature[ChangesManager.Actions[feature.getState()].opposite]();\n }\n // get method from object\n fnc = ChangesManager.Actions[feature.getState()].fnc;\n object[fnc](feature);\n })\n }\n};\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n */\nexport class Session extends g3wsdk.core.G3WObject {\n\n constructor(options={}) {\n console.warn('[G3W-CLIENT] g3wsdk.core.workflow.Session is deprecated');\n\n super(options);\n\n this.setters = {\n\n /**\n * Start session\n */\n start(options={}) {\n return $.Deferred(async d => {\n try {\n const features = await promisify(this._editor.start(options));\n this.state.started = true;\n d.resolve(features);\n } catch (e) {\n console.warn(e);\n d.reject(e);\n }\n }).promise();\n },\n\n /**\n * stop session\n */\n stop() {\n return $.Deferred(async d => {\n const canStop = this.state.started || this.state.getfeatures;\n if (!canStop) {\n return d.resolve();\n }\n try {\n await promisify(this._editor.stop());\n this.clear();\n d.resolve();\n } catch (e) {\n console.warn(e);\n d.reject(e);\n }\n }).promise()\n },\n\n /**\n * Get features from server (by editor)\n */\n getFeatures(options={}) {\n return $.Deferred(async d => {\n if (this._allfeatures) {\n return d.resolve([]);\n }\n this._allfeatures = !options.filter;\n try {\n const features = await promisify(this._editor.getFeatures(options));\n this.state.getfeatures = true;\n d.resolve(features);\n } catch (e) {\n console.warn(e);\n d.reject(e)\n }\n }).promise();\n },\n\n /**\n * Hook to get informed that are saved on server\n * \n * @param commitItems\n */\n saveChangesOnServer(commitItems){},\n };\n\n this.state = {\n id: options.id,\n started: false,\n getfeatures: false,\n /** maximum \"buffer history\" lenght for undo/redo */\n maxSteps: 10,\n /** current state of history (useful for undo /redo) */\n current: null,\n /** temporary change not save on history */\n changes: [],\n };\n\n /**\n * Array of states of a layer in editing\n * {\n * _states: [\n * {\n * id: unique key\n * state: [state] // example: history contsins features state\n * // array because a tool can apply changes to more than one features at time (split di una feature)\n * },\n * {\n * id: unique key\n * state: [state]\n * },\n * ]\n * ....\n *\n * _current: unique key // usefult to undo redo\n *\n *\n */\n this._states = [];\n\n /** reactive state of history */\n this._constrains = {\n commit: false,\n undo: false,\n redo: false,\n };\n\n // editor\n this._editor = options.editor;\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n this._history = {\n id: this.state.id,\n state: new Proxy({}, { get: (_, prop) => this._constrains[prop] }),\n add: this.__add.bind(this),\n getRelationStates: this.__getRelationStates.bind(this),\n insertState: this.__insertState.bind(this),\n removeState: this.deleteState.bind(this),\n removeStates: this.removeChangesFromHistory.bind(this),\n insertStates: this.__insertStates.bind(this),\n undo: this.__undo.bind(this),\n clear: this.clearHistory.bind(this),\n redo: this.__redo.bind(this),\n setItemsFeatureIds: this.__setItemsFeatureIds.bind(this),\n getState: this.__getState.bind(this),\n getFirstState: this.__getFirstState.bind(this),\n getLastState: this.getLastHistoryState.bind(this),\n getCurrentState: this.__getCurrentState.bind(this),\n getCurrentStateIndex: this.__getCurrentStateIndex.bind(this),\n canCommit: this.__canCommit.bind(this),\n canUndo: this.__canUndo.bind(this),\n canRedo: this.__canRedo.bind(this),\n commit: this.__commit.bind(this),\n };\n\n // register this session on session registry\n this.register();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * check if was done an update (update are array contains two items, old and new value)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n _checkSessionItems(historyId, items, action) {\n /**\n * action: \n * 0: undo;\n * 1: redo;\n **/\n const newItems = {\n own: [], //array of changes of layer of the current session\n dependencies: {} // dependencies\n };\n\n items\n .forEach((item) => {\n if (Array.isArray(item)) {\n item = item[action];\n }\n // check if belong to session\n if (historyId === item.layerId) {\n newItems.own.push(item)\n } else {\n newItems.dependencies[item.layerId] = newItems.dependencies[item.layerId] || {\n own: [],\n dependencies: {}\n };\n newItems.dependencies[item.layerId].own.push(item);\n }\n });\n\n return newItems;\n }\n\n /**\n * @FIXME add description\n */\n getId() {\n return this.state.id;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @returns {*|null}\n */\n getLastHistoryState() {\n return this._states.length ? this._states[this._states.length -1] : null;\n }\n\n /**\n * @FIXME add description\n */\n getLastStateId() {\n return this.getLastHistoryState().id;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param stateId\n */\n deleteState(stateId) {\n const i = this._states.findIndex(s => s.id === stateId);\n console.assert(i >= 0, `invalid stateId ${stateId}`);\n if (this.state.current === stateId) {\n this.state.current = this._states.length > 1 ? this._states[i-1].id : null;\n }\n this._states.splice(i, 1);\n }\n\n /**\n * @FIXME add description\n */\n register() {\n Session.Registry.register(this);\n }\n\n /**\n * @FIXME add description\n */\n unregister() {\n Session.Registry.unregister(this.getId());\n }\n\n /**\n * @returns {boolean}\n */\n isStarted() {\n return this.state.started;\n }\n\n /**\n * @FIXME add description\n */\n getEditor() {\n return this._editor;\n }\n\n /**\n * @param editor\n */\n setEditor(editor) {\n this._editor = editor;\n }\n\n /**\n * Save temporary changes to the layer in history instance and feature store\n * \n * @param options\n */\n save(options={}) {\n //fill history\n const d = $.Deferred();\n // add temporary modify to history\n if (this.state.changes.length) {\n const uniqueId = options.id || Date.now();\n this._history.add(uniqueId, this.state.changes)\n .then(() => {\n // clear to temporary changes\n this.state.changes = [];\n // resolve if unique id\n d.resolve(uniqueId);\n });\n } else {\n d.resolve(null);\n }\n return d.promise();\n }\n\n /**\n * @param feature\n */\n updateTemporaryChanges(feature) {\n this.state.changes.forEach(c => c.feature.setProperties(feature.getProperties()));\n }\n\n /**\n * Add temporary feature\n * \n * @param layerId \n * @param feature \n * @param removeNotEditableProperties \n */\n pushAdd(layerId, feature, removeNotEditableProperties=true) {\n /**\n * @TODO check if it need to deprecate it. All properties are need\n * Please take care of this to understand\n * In case of removeNotEditableProperties true, remove not editable field\n * from feature properties\n */\n const editor = layerId === this.getId() ? this._editor : Session.Registry.getSession(layerId).getEditor();\n\n // remove not editable proprierties from feature\n if (removeNotEditableProperties) {\n (editor.getLayer().getEditingNotEditableFields() || []).forEach(f => feature.unset([f]));\n }\n\n const newFeature = feature.clone();\n\n this.push({ layerId, feature: newFeature.add() });\n\n return newFeature;\n }\n\n /**\n * Delete temporary feature\n * \n * @param layerId \n * @param feature \n */\n pushDelete(layerId, feature) {\n this.push({ layerId, feature: feature.delete() });\n return feature;\n }\n\n /**\n * Add temporary feature changes\n * \n * @param layerId\n * @param newFeature\n * @param oldFeature\n */\n pushUpdate(layerId, newFeature, oldFeature) {\n // get index of temporary changes\n const is_new = newFeature.isNew();\n const i = is_new && this.state.changes.findIndex(c => layerId === c.layerId && c.feature.getId() === newFeature.getId());\n\n // in case of new feature\n if (is_new && i >=0) {\n const feature = newFeature.clone();\n feature.add();\n this.state.changes[i].feature = feature;\n return;\n }\n\n this.push(\n { layerId, feature: newFeature.update() },\n { layerId, feature: oldFeature.update() }\n )\n }\n\n /**\n * @param stateIds\n */\n removeChangesFromHistory(stateIds = []) {\n (stateIds || []).forEach(s => this.deleteState(s));\n }\n\n /**\n * @returns { Object } state ids\n */\n moveRelationStatesOwnSession() {\n const ids = {};\n const { relations } = this.getCommitItems();\n for (let id in relations) {\n const states = this._history.getRelationStates(id);\n Session.Registry.getSession(id)._history.insertStates(states);\n ids[id] = states.map(s => s.id);\n }\n return ids;\n }\n\n /**\n * Add temporary features that will be added with save method\n * \n * @param { { layerId: string, feature: * } } NewFeat \n * @param { { layerId: string, feature: * } } OldFeat\n */\n push(newFeat, oldFeat) {\n this.state.changes.push(oldFeat ? [oldFeat, newFeat] : newFeat); // check is set old (edit)\n }\n\n /**\n * Revert (cancel) all changes in history and clean session\n */\n revert() {\n const d = $.Deferred();\n this._editor\n .revert()\n .then(() => {\n this.clearHistory();\n d.resolve();\n });\n return d.promise();\n }\n\n /**\n * @param changes\n */\n rollback(changes) {\n // skip when..\n if (changes) {\n return this._editor.rollback(changes);\n }\n\n // Handle temporary changes of layer\n const d = $.Deferred();\n const id = this.getId();\n changes = {\n own:[],\n dependencies: {}\n };\n this.state.changes.forEach(c => {\n const change = Array.isArray(c) ? c[0] : c;\n if (change.layerId === id) {\n changes.own.push(change);\n } else {\n if (!changes.dependencies[change.layerId]) {\n changes.dependencies[change.layerId] = [];\n }\n // FILO\n changes.dependencies[change.layerId].unshift(change);\n }\n });\n\n this._editor\n .rollback(changes.own)\n .then(() => {\n for (const id in changes.dependencies) {\n Session.Registry.getSession(id).rollback(changes.dependencies[id]);\n }\n d.resolve(changes.dependencies);\n });\n\n this.state.changes = [];\n\n return d.promise();\n }\n\n /**\n * Rollback child changes of current session\n * \n * @param ids [array of child layer id]\n */\n rollbackDependecies(ids=[]) {\n ids.forEach(id => {\n const changes = [];\n this.state.changes = this.state.changes.filter(temporarychange => {\n if (temporarychange.layerId === id) {\n changes.push(temporarychange);\n return false\n }\n });\n changes.length && Session.Registry.getSession(id).rollback(changes);\n });\n }\n\n /**\n * undo method\n * \n * @param items \n */\n undo(items) {\n items = items || this._history.undo();\n this._editor.setChanges(items.own, true);\n this._history.canCommit();\n return items.dependencies;\n }\n\n /**\n * redo method\n * \n * @param items \n */\n redo(items) {\n items = items || this._history.redo();\n this._editor.setChanges(items.own, true);\n this._history.canCommit();\n return items.dependencies;\n }\n\n /**\n * Serialize commit\n * \n * @returns {{ add: *[], update: *[], relations: {}, delete: *[] }} JSON Object for a commit body send to server\n */\n getCommitItems() {\n const itemsToCommit = this._history.commit();\n const id = this.getId();\n let state;\n let layer;\n const commitObj = {\n add: [], // features to add\n update: [], // features to update\n delete: [], // features to delete\n relations: {} // relation features\n };\n // key is a layer id that has changes to apply\n for (const key in itemsToCommit) {\n let isRelation = false; //set relation to false\n const items = itemsToCommit[key];\n // case key (layer id) is not equal to id (current layer id on editing)\n if (key !== id) {\n isRelation = true; //set true because these changes belong to features relation items\n const sessionRelation = Session.Registry.getSession(key);\n //check lock ids of relation layer\n const lockids = sessionRelation ? sessionRelation.getEditor().getLockIds(): [];\n //create a relations object\n commitObj.relations[key] = {\n lockids,\n add: [],\n update: [],\n delete: [],\n relations: {} //@since v3.7.1\n };\n layer = commitObj.relations[key];\n } else {\n layer = commitObj;\n }\n\n items\n .forEach((item) => {\n //check state of feature item\n state = item.getState();\n const GeoJSONFormat = new ol.format.GeoJSON();\n switch (state) {\n //item needs to be deleted\n case 'delete':\n //check if is new. If is new mean is not present on server\n //so no need to say to server to delete it\n if (!item.isNew()) {\n layer.delete.push(item.getId());\n }\n break;\n default:\n //convert feature to json ex. {geometry:{tye: 'Point'}, properties:{}.....}\n const itemObj = GeoJSONFormat.writeFeatureObject(item);\n //get properties\n const childs_properties = item.getProperties();\n for (const p in itemObj.properties) {\n // in case the value of property is an object\n if (itemObj.properties[p] && typeof itemObj.properties[p] === 'object' && itemObj.properties[p].constructor === Object) {\n //need to get value from value attribute object\n itemObj.properties[p] = itemObj.properties[p].value;\n }\n // @TODO explain when this condition happen\n if (undefined === itemObj.properties[p] && childs_properties[p]) {\n itemObj.properties[p] = childs_properties[p]\n }\n }\n // in case of add it have to remove not editable properties\n layer[item.isNew() ? 'add' : item.getState()].push(itemObj);\n break;\n }\n });\n // check in case of no edit remove relation key\n if (\n isRelation\n && layer.add.length === 0 //no relation features to add\n && layer.update.length === 0 //no relation features to update\n && layer.delete.length === 0 //no relation features to delete\n ) {\n delete commitObj.relations[key];\n }\n }\n\n // Remove deep relations from current layer (commitObj) that are not relative to that layer\n const relations = Object.keys(commitObj.relations || {});\n relations\n .filter(id => undefined === this._editor.getLayer().getRelations().getArray().find(r => id === r.getChild())) // child relations\n .map(id => {\n commitObj.relations[\n Session.Registry\n .getSession(id)\n .getEditor()\n .getLayer()\n .getRelations()\n .getArray()\n .find(r => id === r.getChild() && commitObj.relations[r.getFather()]) // parent relation layer\n .getFather()].relations[id] = commitObj.relations[id];\n return id;\n })\n .forEach(id => delete commitObj.relations[id]);\n\n return commitObj;\n }\n\n /**\n * Set geometry: {type} of geojson to a 3D type if needed\n * \n * @param layerId\n * @param commitItems\n */\n set3DGeometryType({\n layerId=this.getId(),\n commitItems}={}\n ) {\n const { relations } = commitItems;\n const editingLayer = MapLayersStoresRegistry.getLayerById(layerId).getEditingLayer();\n // check id there is editing layer and if is a vector layer\n if (editingLayer && g3wsdk.core.layer.Layer.LayerTypes.VECTOR === editingLayer.getType()) {\n // get Geometry type layer\n const geometryType = editingLayer.getGeometryType();\n // if is a 3D layer i set on geoJON before send it to server\n if (g3wsdk.core.geoutils.Geometry.is3DGeometry(geometryType)){\n ['add', 'update']\n .forEach((action) => commitItems[action].forEach(feature => feature.geometry.type = geometryType))\n }\n }\n // the same control of relations layers\n Object\n .keys(relations)\n .forEach(layerId => this.set3DGeometryType({\n layerId,\n commitItems: relations[layerId]\n }));\n }\n\n /**\n * Commit changes on server (save)\n * \n * @param opts.ids\n * @param opts.items\n * @param opts.relations\n */\n commit({\n ids = null,\n items,\n relations = true,\n /** @since g3w-client-plugin-editing@v3.8.0 */\n __esPromise = false,\n } = {}) {\n\n const d = $.Deferred();\n\n let commit; // committed items\n\n // skip when ..\n if (ids) {\n commit = this._history.commit(ids);\n this.clearHistory(ids);\n return d.promise();\n }\n\n commit = items || this.getCommitItems(this._history.commit());\n\n if (!relations) {\n commit.relations = {};\n }\n\n this._editor\n .commit(commit)\n .then(response => {\n\n // skip when response is null or undefined and response.result is false\n if (!(response && response.result)) {\n d.reject(response);\n return;\n }\n \n const { relations = {} } = response.response; // check if new relations are saved on server\n\n // sync server data with local data\n for (const id in relations) {\n Session.Registry\n .getSession(id) // get session of relation by id\n .getEditor()\n .applyCommitResponse({ // apply commit response to current editing relation layer\n response: relations[id],\n result: true\n });\n }\n\n this.clearHistory();\n\n this.saveChangesOnServer(commit); // dispatch setter event.\n\n // ES6 promises only accept a single response\n if (__esPromise) {\n d.resolve({ commit, response });\n } else {\n d.resolve(commit, response);\n }\n \n\n })\n .fail(err => d.reject(err));\n\n return d.promise();\n }\n\n /**\n * Clear all things bind to session\n */\n clear() {\n this._allfeatures = false;\n this.state.started = false;\n this.state.getfeatures = false;\n this.clearHistory();\n }\n\n /**\n * @returns history\n */ \n getHistory() {\n return this._history;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param ids since g3w-client-plugin-editing@v3.8.0\n */\n clearHistory(ids) {\n if (ids) {\n this._states.forEach((state, idx) => {\n if (ids.indexOf(state.id) !== -1) {\n if (this.state.current && this.state.current === state.id()) {\n this._history.undo();\n }\n this._states.splice(idx, 1);\n }\n });\n } else {\n // clear all\n this._states = [];\n this.state.current = null;\n this._constrains.commit = false;\n this._constrains.redo = false;\n this._constrains.undo = false;\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @param uniqueId\n * @param items\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __add(uniqueId, items) {\n //state object is an array of feature/features changed in a transaction\n const d = $.Deferred();\n // before insert an item into the history\n // check if are at last state step (no redo was done)\n // If we are in the middle of undo, delete all changes\n // in the history from the current \"state\" so if it\n // can create a new history\n if (null === this.state.current) {\n this._states = [{ id: uniqueId, items }]\n } else {\n if (this._states.length > 0 && this.state.current < this.getLastStateId()) {\n this._states = this._states.filter(s => s.id <= this.state.current);\n }\n this._states.push({ id: uniqueId, items });\n }\n\n this.state.current = uniqueId;\n // set internal state\n this._history.canUndo();\n this._history.canCommit();\n this._history.canRedo();\n // return unique id key\n // it can be used in save relation\n d.resolve(uniqueId);\n return d.promise();\n }\n \n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @param layerId\n * @param clear\n * \n * @returns { Array }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getRelationStates(layerId, {clear=false}={}) {\n const relationStates = [];\n for (let i=0; i < this._states.length; i++) {\n const state = this._states[i];\n const items = state.items.filter((item) => (Array.isArray(item) ? item[0].layerId : item.layerId) === layerId);\n if (items.length > 0) {\n relationStates.push({ id: state.id, items });\n }\n }\n return relationStates;\n }\n\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @param state\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __insertState(state) {\n const stateId = state.id;\n let index = this._states.length;\n for (let i=0; i < this._states.length; i++) {\n const _state = this._states[i];\n if (_state.id > stateId) {\n index = i;\n break;\n } else if (_state.id === stateId) {\n index = -1;\n break;\n }\n }\n if (index > -1) {\n if (this.state.current < stateId) {\n this.state.current = stateId;\n }\n this._states.splice(index, 0, state)\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @param states\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __insertStates(states=[]) {\n for (let i=0; i< states.length; i++) {\n this._history.insertState(states[i]);\n }\n this._history.canCommit();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * undo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __undo() {\n let items;\n if (this.state.current === this._history.getFirstState().id) {\n this.state.current = null;\n items = this._states[0].items;\n } else {\n this._states.find((state, idx) => {\n if (state.id === this.state.current) {\n items = this._states[idx].items;\n this.state.current = this._states[idx-1].id;\n return true;\n }\n })\n }\n items = this._checkSessionItems(this._history.id, items, 0);\n // set internal state\n this._history.canUndo();\n this._history.canCommit();\n this._history.canRedo();\n return items;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * redo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __redo() {\n let items;\n // if not set get first state\n if (!this.state.current) {\n items = this._states[0].items;\n // set current to first\n this.state.current = this._states[0].id;\n } else {\n this._states.find((state, idx) => {\n if (this.state.current === state.id) {\n this.state.current = this._states[idx+1].id;\n items = this._states[idx+1].items;\n return true;\n }\n })\n }\n items = this._checkSessionItems(this._history.id, items, 1);\n // set internal state\n this._history.canUndo();\n this._history.canCommit();\n this._history.canRedo();\n return items;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param { Array } unsetnewids\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __setItemsFeatureIds(unsetnewids=[]) {\n unsetnewids.forEach(unsetnewid => {\n this._states.forEach(state => {\n state.items.forEach(item => {\n const feature = item.feature.getId() === unsetnewid.clientid && item.feature;\n if (feature) {\n feature.setId(unsetnewid.id);\n }\n })\n });\n })\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param id\n * \n * @returns {T}\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getState(id) {\n return this._states.find(s => s.id === id);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @returns {*|null}\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getFirstState() {\n return this._states.length ? this._states[0] : null;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @returns {null}\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getCurrentState() {\n let currentState = null;\n if (this.state.current && this._states.length) {\n currentState = this._states.find((state) => {\n return this.state.current === state.id;\n });\n }\n return currentState;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @returns { number | null } index of current state\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getCurrentStateIndex() {\n let currentStateIndex = null;\n if (this.state.current && this._states.length) {\n this._states.forEach((state, idx) => {\n if (this.state.current === state.id) {\n currentStateIndex = idx;\n return false\n }\n });\n }\n return currentStateIndex;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @returns { boolean } true if we can commit\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canCommit() {\n const checkCommitItems = this._history.commit();\n let canCommit = false;\n for (let layerId in checkCommitItems) {\n const commitItem = checkCommitItems[layerId];\n canCommit = canCommit || commitItem.length > 0;\n }\n this._constrains.commit = canCommit;\n return this._constrains.commit;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * canUdo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canUndo() {\n const steps = (this._states.length - 1) - this._history.getCurrentStateIndex();\n this._constrains.undo = (null !== this.state.current) && (this.state.maxSteps > steps);\n return this._constrains.undo;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * canRedo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canRedo() {\n this._constrains.redo = (\n (this.getLastHistoryState() && this.getLastStateId() != this.state.current))\n || (null === this.state.current && this._states.length > 0);\n return this._constrains.redo;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * get all changes to send to server (mandare al server)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __commit() {\n const commitItems = {};\n const statesToCommit = this._states.filter(s => s.id <= this.state.current);\n statesToCommit\n .forEach(state => {\n state.items.forEach((item) => {\n let add = true;\n if (Array.isArray(item)) {\n item = item[1];\n }\n if (commitItems[item.layerId]) {\n commitItems[item.layerId].forEach((commitItem, index) => {\n // check if already inserted feature\n if (commitItem.getUid() === item.feature.getUid()) {\n if (item.feature.isNew() && !commitItem.isDeleted() && item.feature.isUpdated()) {\n const _item = item.feature.clone();\n _item.add();\n commitItems[item.layerId][index] = _item;\n } else if (item.feature.isNew() && item.feature.isDeleted()) {\n commitItems[item.layerId].splice(index, 1);\n } else if (item.feature.isUpdated() || item.feature.isDeleted()) {\n commitItems[item.layerId][index] = item.feature;\n }\n add = false;\n return false;\n }\n });\n }\n if (add) {\n const feature = item.feature;\n const layerId = item.layerId;\n if (!(!feature.isNew() && feature.isAdded())) {\n if (!commitItems[layerId]) {\n commitItems[layerId] = [];\n }\n commitItems[layerId].push(feature);\n }\n }\n });\n });\n return commitItems;\n }\n\n}\n\n/** @type { Object } */\nconst sessions = {};\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/store/sessions.js@v3.9.1\n *\n * Store user session (login / logout)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\nSession.Registry = {\n _sessions: sessions,\n register(session) { sessions[session.getId()] = session; },\n unregister(id) { delete sessions[id]; },\n getSession(id) { return sessions[id]; },\n setSession(id, session) { sessions[id] = session; },\n getSessions() { return sessions; },\n clear() { Object.keys(sessions).forEach(Session.Registry.unregister); }\n};", "export default {\n close_editing_panel: {\n message: \"Terminare l'editing dei singoli layer per chiudere la sessione\"\n },\n errors: {\n no_layers: \"Si \u00E8 verificato un errore nel caricamento dei layers in editing.\",\n some_layers: \"Si \u00E8 verificato un errore nel caricamento di alcuni layers in editing\",\n editing_multiple_relations: 'Le modifica di relazioni multiple non \u00E8 attualmente supportata',\n },\n search: \"Cerca\",\n editing_changes: \"Modifiche Editing\",\n editing_data: \"Modifica dati\",\n editing_attributes: \"Edita attributi\",\n relations: \"Relazioni\",\n edit_relation: \"Edita relazione\",\n back_to_relations: \"Ritorna alle Relazioni\",\n no_relations_found: \"Non ci sono relazioni\",\n relation_data: \"Dati relativi alla relazione\",\n relation_already_added : \"Relazione gi\u00E0 presente\",\n list_of_relations_feature: \"Elenco Relazioni della feature \",\n tooltip:{\n edit_layer: \"Modifica livello\",\n filter_by_relation: \"Filtra i livelli per relazione\",\n },\n toolbox: {\n title: 'Edita'\n },\n table: {\n edit: \"Edita feature\",\n copy: \"Crea una copia\",\n delete: \"Cancella feature\"\n },\n tools: {\n copy: \"Copia elementi\",\n pastefeaturesfromotherlayers: \"Incolla elemento da altro livello\",\n addpart: \"Aggiungi parte alla geometria\",\n deletepart: \"Cancella parte dalla geometria\",\n merge: \"Dissolvi elementi\",\n split: \"Dividi elementi\",\n add_feature: \"Aggiungi elemento\",\n delete_feature: \"Elimina elemento\",\n move_feature: \"Muovi elemento\",\n update_vertex: \"Aggiorna vertici elemento\",\n update_feature: \"Modifica attributi elemento\",\n update_multi_features: \"Modifica gli attributi degli elementi selezionati\",\n update_multi_features_relations: \"Modifica gli attributi di tutte le relazioni selezionate\",\n update_multi_features_relations_from_parents : \"Edita i record relazionati di uno o pi\u00F9 padri\",\n copyfeaturefromexternallayer: \"Crea elemento da un livello esterno\"\n },\n toolsoftool: {\n measure: \"Visualizza misura\",\n snap: \"Snap sul layer\",\n snapall: \"Snap su tutti i layer\"\n },\n steps: {\n help: {\n select_elements: \"Seleziona le geometrie\",\n select_element: \"Seleziona l'elemento\",\n copy: \"Crea una copia degli elementi selezionati\",\n merge: \"Dissolvi elementi\",\n split: \"Dvidi elemento\",\n new: \"Crea un nuovo elemento\",\n edit_table: \"Modifica gli elementi della tabella\",\n draw_new_feature: \"Disegna la nuova geometria\",\n action_confirm: \"Conferma azione\",\n double_click_delete: \"Seleziona la geometria sulla mappa da cancellare\",\n edit_feature_vertex: \"Modifica o aggiungi un vertice alla geometria selezionata\",\n move: \"Muovi la geometria selezionata\",\n select_feature_to_relation: \"Seleziona la geometria che vuoi mettere in relazione\",\n show_edit_feature_form: \"Mostra il modulo per modificare gli attributi del'elemento\",\n pick_feature: \"Seleziona la geometria da modificare dalla mappa\",\n insert_attributes_feature: \"Inserisci gli attributi dell'elemento\"\n }\n },\n\n workflow: {\n steps: {\n select: 'Seleziona una geometria',\n draw_part: \"Disegna il nuovo elemento da aggiungere alla geometria\",\n draw_geometry : \"Disegna la geometria\",\n merge: 'Seleziona la geometria su cui dissolvere',\n selectPoint: \"Clicca sulla geometria per selezionarla\",\n selectSHIFT: 'Seleziona le geometrie tenedo premuto il tasto SHIFT',\n selectDrawBox: \"Seleziona le geometrie disegnando un rettangolo mediante la creazione dei due punti della diagonale\",\n selectDrawBoxAtLeast2Feature: \"Seleziona almeno 2 geometrie disegnando un rettangolo mediante la creazione dei due punti della diagonale\",\n selectPointSHIFT: 'Seleziona le geometrie
MAIUSC+DRAG seleziona pi\u00F9 elementi in un area',\n selectMultiPointSHIFT: 'Seleziona le geometrie
SHIFT+DRAG seleziona pi\u00F9 elementi in un area',\n selectMultiPointSHIFTAtLeast2Feature: 'Seleziona almeno 2 geometrie
SHIFT+DRAG seleziona pi\u00F9 elementi in un area',\n copyCTRL: 'Copia le geometrie selezionate con CTRL+C',\n selectStartVertex: 'Seleziona il vertice di partenza',\n selectToPaste: 'Seleziona il punto dove verranno incollate le geometrie',\n draw_split_line: \"Disegna una linea per dividere la geometria selezionata\"\n },\n title: {\n steps: 'Passi',\n },\n next: 'Avanti',\n },\n messages: {\n featureslockbyotheruser: \"Ci sono alcune geometrie/records non editabili perch\u00E8 in modifica da altri utenti\",\n splitted: \"Feature(s) splittata(e)\",\n nosplittedfeature: \"La(e) feature(s) non \u00E8 stata splittata\",\n press_esc: \"Premi ESC per tornare indietro\",\n online: \"Ora sei di nuovo ONLINE. Puoi slavare le modifiche in modo permanente\",\n offline: \"Sei OFFLINE. Tutte le modifiche saranno salvate temporaneamente in locale\",\n delete_feature: \"Vuoi eliminare l'elemento selezionato?\",\n delete_feature_relations: \"Cancellando una feature con relazioni associate, tale relazioni rimarranno orfane. Si consiglia di gestire tali relazioni prima di cancellare la feature\",\n unlink_relation: \"Vuoi staccare la relazione?\",\n commit_feature: \"Riepilogo modifiche\",\n toolbox_has_no_geometry: \"questo livello non ha geometria\",\n toolbox_has_relation: \"questo livello fa parte di una relazione\",\n saved: \"I dati sono stati salvati correttamente\",\n saved_local: \"I dati sono stati salvati correttamente in locale\",\n loading_data: \"Caricamento dati\",\n saving: \"Salvataggio dati in corso. Attendere ...\",\n constraints: {\n enable_editing: \"Ingrandisci per modificare \\nScala di attivazione 1:\"\n },\n pdf: \"Anteprima del documento non disponibile. Clicca qui \",\n commit: {\n header: \"La lista sotto riporta tutte le modifiche che verranno salvate.\",\n header_relation: \"Relazione\",\n header_add: \"Aggiunte riporta il numero delle features aggiunte\",\n header_update_delete: \"Modificate e Cancellate riporta la lista degli id\",\n add: \"Aggiunte\",\n delete: \"Cancellate\",\n update: \"Aggiornate\"\n },\n loading_table_data: \"Costruzione tabella dati in corso. Attendere ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"Necessario compilare eventuali campi obbligatori sulle features incollate prima del salvataggio\",\n no_feature_selected: \"Nessuna feature selezionata\",\n select_min_2_features: 'Seleziona come minimo due features'\n },\n relation: {\n table: {\n info: `
Seleziona le relazioni per associarle alla feature in editing.
`\n },\n draw_new_feature: \"Disegna nuova geometria\",\n draw_or_copy: \"oppure\",\n copy_feature_from_other_layer: \"Copia geometria da altro layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Torna ad editare il padre\",\n add_relation: \"Crea ed aggiungi nuova relazione\",\n link_relation: \"Associa una relazione esistente a questa feature\",\n open_relation_tools: \"Apri strumenti relatione\",\n unlink_relation: \"Annulla relazione\"\n }\n },\n buttons: {\n save: \"Inserisci/Modifica\",\n save_table: 'Modifica',\n save_and_back: \"Salva e torna al padre\",\n save_and_back_table: \"Salva e torna indietro\",\n cancel: \"Ignora Modifiche\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Seleziona layer\",\n edit_attributes: \"Edita attributi delle features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Seleziona una feature\"\n }\n }\n }\n}", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"An error occurs. It's no possible to edit layers\",\n some_layers: \"An error occurs: It's no possible to edit some layers\",\n editing_multiple_relations: 'Editing multiple relationships is not currently supported',\n },\n search: \"Search\",\n editing_changes: \"Editing Changes\",\n editing_data: \"Editing Layers\",\n editing_attributes: \"Editing attributes\",\n relations: \"Relations\",\n edit_relation: \"Edit relation\",\n back_to_relations: \"Back to Relations\",\n no_relations_found: \"No relations found\",\n relation_data: \"Relation data\",\n relation_already_added: \"Relation already added\",\n list_of_relations_feature: \"List of relations feature \",\n tooltip: {\n edit_layer: \"Edit Layer\",\n filter_by_relation: \"Filter layers by relation\",\n },\n toolbox: {\n title: 'Edit'\n },\n table: {\n edit: \"Edit feature\",\n copy: \"Create a copy\",\n delete: \"Delete feature\"\n },\n tools: {\n copy: \"Copy features\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Add part to multipart\",\n deletepart: \"Delete part from multipart\",\n merge: \"Dissolve features\",\n split: \"Split Feature\",\n add_feature: \"Add feature\",\n delete_feature: \"Delete feature\",\n move_feature: \"Move feature\",\n update_vertex: \"Update feature vertex\",\n update_feature: \"Update feature attribute\",\n update_multi_features: \"Update attributes of selected features\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Edit relations records from one or mode parent features\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Show measure\",\n snap: \"Snap layer\",\n snapall: \"Snap to all layers\"\n },\n steps: {\n help: {\n select_elements: \"Select features\",\n select_element: \"Select feature\",\n copy: \"Create new copy of selected features\",\n merge: \"Dissolve features\",\n split: \"Split Feature\",\n new: \"Create new feature\",\n edit_table: \"Edit table features\",\n draw_new_feature: \"Draw feature on map\",\n action_confirm: \"Confirm action\",\n double_click_delete: \"Select feature on map to delete\",\n edit_feature_vertex: \"Modify or add a vertex on selected feature\",\n move: \"Move selected feature\",\n select_feature_to_relation: \"Select feature that you bind relation\",\n show_edit_feature_form: \"Show feature form to edit attributes\",\n pick_feature: \"Select feature on map to modify\",\n insert_attributes_feature: \"Insert attributes of the feature\"\n }\n },\n workflow: {\n steps: {\n select: 'Click on feature to select',\n draw_part: \"Draw new part\",\n draw_geometry : \"Draw geometry\",\n merge: 'Select featurewhere dissolve',\n selectSHIFT: 'Select features drawing a rectangle pressing SHIFT',\n selectDrawBox: \"Select features drawing a rectangle by two point of opposite corners\",\n selectDrawBoxAtLeast2Feature: \"Select at least features drawing a rectangle by two point of opposite corners\",\n selectPoint: \"Click on feature to select\",\n selectPointSHIFT: 'Select features drawing a rectangle pressing SHIFT (multifeatures) or click on one feature',\n selectMultiPointSHIFT: 'Select features drawing a rectangle pressing SHIFT or click on feature',\n selectMultiPointSHIFTAtLeast2Feature: 'Select at least 2 features drawing a rectangle pressing SHIFT or click on feature',\n copyCTRL: 'Copy selected features using CTRL+C',\n selectStartVertex: 'Select starting vertex of selected features',\n selectToPaste: 'Select the point where paste the features selected',\n draw_split_line: \"Draw a line to split selected feature\"\n },\n title: {\n steps: 'Steps'\n },\n next: 'Next',\n },\n messages: {\n featureslockbyotheruser: \"Some geometries/records are not editable because in editing by other user\",\n splitted: \"Splitted\",\n nosplittedfeature: \"Feature not spitted\",\n press_esc: \"Press ESC to back\",\n online: \"Back ONLINE. Now you can save your changes on database\",\n offline: \"You are OFFLINE. All changes are saved locally\",\n delete_feature: \"Do you want delete selected feature ?\",\n delete_feature_relations: \"If feature has bindings relations, these relations become orphans. We suggest to handle these relations before detele this feature\",\n unlink_relation: \"Do you want unlink relation?\",\n commit_feature: \"Summary of changes\",\n toolbox_has_no_geometry: \"this layer has no geometry\",\n toolbox_has_relation: \"this layer is part of a relation\",\n saved: \"Data saved successfully\",\n saved_local:\"Data saved locally successfully\",\n loading_data: \"Loading data\",\n saving: \"Saving data. Please wait ...\",\n constraints: {\n enable_editing: \"Please Zoom In to enable editing tools \\nActivation scale at 1:\"\n },\n pdf: \"Document preview not available. Please click here \",\n commit: {\n header: \"The following list show all changes to commit.\",\n header_relation: \"Relation\",\n header_add: \"Added show the number of features added\",\n header_update_delete: \"Modified and Deleted show the list of features id\",\n add: \"Added\",\n delete: \"Deleted\",\n update: \"Updated\"\n },\n loading_table_data: \"Building Data Table. Please wait ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"It is necessary to fill in any mandatory fields on the features pasted before saving\",\n no_feature_selected: \"No feature selected\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
Select relations to link it to current editing feature.
`\n },\n draw_new_feature:\"Draw new feature\",\n draw_or_copy:\"or\",\n copy_feature_from_other_layer:\"Copy feature from other layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Back to edit father\",\n add_relation: \"Create and link new relation\",\n link_relation: \"Join a relation to this feature\",\n open_relation_tools: \"Show relation tools\",\n unlink_relation: \"Unlink relation\"\n }\n },\n buttons: {\n save: \"Insert/Edit\",\n save_and_back: \"Save and Back\",\n save_and_back_table: \"Save and Back\",\n cancel: \"Ignore Changes\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"Tapahtui virhe. Tasoja ei ole mahdollista muokata.\",\n some_layers: \"Tapahtui virhe. Jotkin tasot eiv\u00E4t ole muokattavissa.\"\n },\n search: \"Haku\",\n editing_changes: \"Editing Changes\",\n editing_data: \"Muokataan tasoja\",\n editing_attributes: \"Muokataan attribuutteja\",\n relations: \"Relaatiot\",\n edit_relation: \"Muokkaa relaatiota\",\n back_to_relations: \"Takaisin relaatioihin\",\n no_relations_found: \"Relaatioita ei l\u00F6ytynyt\",\n relation_data: \"Relaation tiedot\",\n relation_already_added: \"Relaatio on jo lis\u00E4tty\",\n list_of_relations_feature: \"Lista relaation ominaisuuksista\",\n tooltip: {\n edit_layer: \"Muokkaa tasoa\"\n },\n toolbox: {\n title: 'Muokkaa'\n },\n table: {\n edit: \"Muokkaa ominaisuutta\",\n copy: \"Luo kopio\",\n delete: \"Poista ominaisuus\"\n },\n tools: {\n copy: \"Kopio ominaisuuksia\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Lis\u00E4\u00E4 osa\",\n deletepart: \"Poista osa\",\n merge: \"Yhdist\u00E4 ominaisuudet\",\n split: \"Leikkaa ominaisuus\",\n add_feature: \"Lis\u00E4\u00E4 ominaisuus\",\n delete_feature: \"Poista ominaisuus\",\n move_feature: \"Siirr\u00E4 ominaisuutta\",\n update_vertex: \"P\u00E4ivit\u00E4 pisteen ominaisuutta\",\n update_feature: \"P\u00E4ivit\u00E4 ominaisuus\",\n update_multi_features: \"Muokkaa valittujen ominaisuuksien attribuutteja\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Edit relations records from one or mode parent features\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Show measure\",\n snap: \"Snap layer\",\n snapall: \"Snap to all layers\"\n },\n steps: {\n help: {\n select_elements: \"Valitse ominaisuudet\",\n select_element: \"Valitse ominaisuus\",\n copy: \"Luo kopio valituista ominaisuuksista\",\n merge: \"Yhdist\u00E4 ominaisuudet\",\n split: \"Leikkaa ominaisuus\",\n new: \"Luo uusi ominaisuus\",\n edit_table: \"Muuta taulun ominaisuuksia\",\n draw_new_feature: \"Piirr\u00E4 ominaisuus kartalle\",\n action_confirm: \"Hyv\u00E4ksy toiminto\",\n double_click_delete: \"Valitse poistettava ominaisuus kartalta\",\n edit_feature_vertex: \"Muuta pistett\u00E4 tai lis\u00E4\u00E4 piste valittuun ominaisuuteen\",\n move: \"Siirr\u00E4 valittu ominaisuus\",\n select_feature_to_relation: \"Valitse relaatio\",\n show_edit_feature_form: \"N\u00E4yt\u00E4 ominaisuuslomake muokataksesi attribuutteja\",\n pick_feature: \"Valitse muokattava ominaisuus kartalta\",\n insert_attributes_feature: \"Lis\u00E4\u00E4 ominaisuuden attribuutit\"\n }\n },\n workflow: {\n steps: {\n select: 'Valitse ominaisuus',\n draw_part: \"Piirr\u00E4 uusi osa\",\n merge: 'Valitse ominaisuus yhdist\u00E4\u00E4ksesi',\n draw_geometry : \"Piirr\u00E4 geometria\",\n selectSHIFT: 'Paina SHIFT, jos haluat valita kohteita suorakulmiovalinnalla.', //Tero 10.12.2020\n selectDrawBox: \"Piirr\u00E4 suorakulmio, jonka si\u00E4lt\u00E4 kohteet valitaan \", //Tero 10.12.2020\n selectDrawBoxAtLeast2Feature: \"Piirr\u00E4 suorakulmio, jonka si\u00E4lt\u00E4 kohteet v\u00E4hint\u00E4\u00E4n 2 valitaan \",\n selectPoint: \"Valitse ominaisuus\",\n selectPointSHIFT: 'Paina SHIFT, jos haluat valita ominaisuuksia suorakulmiovalinnalla, tai valitse yksitt\u00E4inen ominaisuus.',\n selectMultiPointSHIFT: 'Paina SHIFT, jos haluat valita ominaisuuksia suorakulmiovalinnalla, tai valitse yksitt\u00E4inen ominaisuus.',\n selectMultiPointSHIFTAtLeast2Feature: 'Paina SHIFT, jos haluat valita v\u00E4hint\u00E4\u00E4n 2 ominaisuuksia suorakulmiovalinnalla, tai valitse yksitt\u00E4inen ominaisuus.',\n copyCTRL: 'CTRL+C, voit kopioida valitut ominaisuudet.', //Tero 10.12.2020\n selectStartVertex: 'Osoita valittujen ominaisuuksien alkupiste.',\n selectToPaste: 'Valitse kohta, johon liit\u00E4t valitut ominaisuudet.',\n draw_split_line: \"Piirr\u00E4 viiva, jonka mukaan valittu ominaisuus jaetaan.\"\n },\n title: {\n steps: 'Vaiheet'\n },\n next: \"Seuraava\",\n },\n messages: {\n featureslockbyotheruser: \"Some features are locked by another user\",\n splitted: \"Jaettu\",\n nosplittedfeature: \"Ominaisuutta ei jaettu\",\n press_esc: \"Paina ESC palataksesi\",\n online: \"Yhteys muodostettu. Muutokset voidaan tallentaa tietokantaan.\",\n offline: \"Olet offline-tilassa. Muutokset tallennetaan paikallisesti\",\n delete_feature: \"Haluatko poistaa valitun ominaisuuden?\",\n delete_feature_relations: \"Mik\u00E4li ominaisuudella on sitovia relaatioita, n\u00E4ist\u00E4 relaatiosta tulee orpoja. Suosittelemme k\u00E4sittelem\u00E4\u00E4n n\u00E4m\u00E4 relaatiot ennen poistamista\",\n unlink_relation: \"Haluatko poistaa relaation?\",\n commit_feature: \"Yhteenveto muutoksista\",\n toolbox_has_relation: \"t\u00E4m\u00E4 kerros on osa relaatiota\",\n saved: \"Tiedot tallennettu onnistuneesti\",\n saved_local:\"Tiedot on tallennettu onnistuneesti paikallisesti.\",\n loading_data: \"Ladataan tietoja\",\n saving: \"Tallentaan tietoja. Odota...\",\n constraints: {\n enable_editing: \"L\u00E4henn\u00E4 ottaaksesi muokkausty\u00F6kalut k\u00E4ytt\u00F6\u00F6n \\nAktivointi mittakaava 1:\"\n },\n pdf: \"Dokumentin esikatselu ei ole saatavilla. Paina t\u00E4st\u00E4 \",\n commit: {\n header: \"Seuraava luettelo n\u00E4ytt\u00E4\u00E4 kaikki muutokset.\",\n header_relation: \"Relation\",\n header_add: \"Lis\u00E4tty n\u00E4yt\u00E4 lis\u00E4ttyjen ominaisuuksien lukum\u00E4\u00E4r\u00E4\",\n header_update_delete: \"Muokattu ja Poistettu N\u00E4yt\u00E4 list\u00E4 ominaisuuksien id:st\u00E4\",\n add: \"Lis\u00E4tty\",\n delete: \"Poistettu\",\n update: \"Muokattu\"\n },\n loading_table_data: \"Building Data Table. Please wait ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"It is necessary to fill in any mandatory fields on the features pasted before saving\",\n no_feature_selected: \"No feature selected\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
Valitse relaatiota linkitt\u00E4\u00E4ksesi ne muokattavaan ominaisuuteen.
`\n },\n draw_new_feature:\"Draw new feature\",\n draw_or_copy:\"or\",\n copy_feature_from_other_layer:\"Copy feature from other layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Back to edit father\",\n add_relation: \"Luo ja linkit\u00E4 uusi relaatio\",\n link_relation: \"Liit\u00E4 relaatio t\u00E4h\u00E4n ominaisuuteen\",\n open_relation_tools: \"N\u00E4yt\u00E4 relaatioty\u00F6kalut\",\n unlink_relation: \"Poista relaatio\"\n }\n },\n buttons: {\n save: \"Lis\u00E4\u00E4/muokkaa\",\n save_and_back: \"Tallenna ja palaa\",\n save_and_back_table: \"Tallenna ja palaa\",\n cancel: \"Peruuta\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"Ett fel uppstod. Niv\u00E5erna kan inte redigeras.\",\n some_layers: \"Ett fel uppstod. Vissa niv\u00E5er kan inte redigeras.\"\n },\n search: \"S\u00F6kning\",\n editing_changes: \"Editing Changes\",\n editing_data: \"Niv\u00E5erna redigeras\",\n editing_attributes: \"Attributen redigeras\",\n relations: \"Relationer\",\n edit_relation: \"Redigera relationen\",\n back_to_relations: \"Tillbaka till relationerna\",\n no_relations_found: \"Inga relationer hittades\",\n relation_data: \"Relationsuppgifter\",\n relation_already_added: \"Relationen har redan lagts till\",\n list_of_relations_feature: \"Lista p\u00E5 relationens egenskaper\",\n tooltip: {\n edit_layer: \"Redigera niv\u00E5n\"\n },\n toolbox: {\n title: 'Redigera'\n },\n table: {\n edit: \"Redigera egenskap\",\n copy: \"Skapa en kopia\",\n delete: \"Ta bort egenskap\"\n },\n tools: {\n copy: \"Kopiera egenskaper\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"L\u00E4gg till del\",\n deletepart: \"Ta bort del\",\n merge: \"Sl\u00E5 samman egenskaper\",\n split: \"Dela upp egenskap\",\n add_feature: \"L\u00E4gg till egenskap\",\n delete_feature: \"Ta bort egenskap\",\n move_feature: \"Flytta egenskap\",\n update_vertex: \"Uppdatera punktens egenskap\",\n update_feature: \"Uppdatera egenskap\",\n update_multi_features: \"\u00C4ndra attributen f\u00F6r de valda funktionerna\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Edit relations records from one or mode parent features\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Show measure\",\n snap: \"Snap layer\",\n snapall: \"Snap to all layers\"\n },\n steps: {\n help: {\n select_elements: \"V\u00E4lj egenskaper\",\n select_element: \"V\u00E4lj egenskapalitse ominaisuus\",\n copy: \"Skapa kopia av valda egenskaper\",\n merge: \"Sl\u00E5 samman egenskaper\",\n split: \"Dela upp egenskap\",\n new: \"Skapa ny egenskap\",\n edit_table: \"\u00C4ndra egenskaper i tabellen\",\n draw_new_feature: \"Piirr\u00E4 ominaisuus kartalle\",\n action_confirm: \"Godk\u00E4nn funktionen\",\n double_click_delete: \"V\u00E4lj funktionen som du vill ta bort p\u00E5 kartan\",\n edit_feature_vertex: \"\u00C4ndra punkten eller l\u00E4gg till punkten till den valda egenskapen\",\n move: \"Flytta den valda egenskapen\",\n select_feature_to_relation: \"V\u00E4lj relation\",\n show_edit_feature_form: \"Visa egenskapsformul\u00E4ret f\u00F6r redigering av attribut\",\n pick_feature: \"V\u00E4lj funktion p\u00E5 kartan f\u00F6r att \u00E4ndras\",\n insert_attributes_feature: \"L\u00E4gg till egenskapens attribut\"\n }\n },\n workflow: {\n steps: {\n select: 'V\u00E4lj egenskap',\n draw_part: \"Rita ny del\",\n draw_geometry : \"Rita geometri\",\n merge: 'V\u00E4lj egenskap att sl\u00E5 samman',\n selectSHIFT: 'Tryck SHIFT, om du vill v\u00E4lja objekt med hj\u00E4lp av rektangel.', //Tero 10.12.2020\n selectDrawBox: \"Rita upp den rektangel inom vilken objekten v\u00E4ljs \", //Tero 10.12.2020\n selectDrawBoxAtLeast2Feature: \"Rita rektangeln inom vilken minst tv\u00E5 objekt \u00E4r markerade \",\n selectPoint: \"V\u00E4lj egenskap\",\n selectPointSHIFT: 'Tryck SHIFT, om du vill v\u00E4lja objekt med hj\u00E4lp av rektangel, eller v\u00E4lj en enskild egenskap.',\n selectMultiPointSHIFT: 'Tryck SHIFT, om du vill v\u00E4lja objekt med hj\u00E4lp av rektangel, eller v\u00E4lj en enskild egenskap.',\n selectMultiPointSHIFTAtLeast2Feature: 'Tryck p\u00E5 SKIFT f\u00F6r att v\u00E4lja minst tv\u00E5 objekt med en rektangel eller v\u00E4lj en enda egenskap. ',\n copyCTRL: 'CTRL+C, du kan kopiera valda egenskaper.', //Tero 10.12.2020\n selectStartVertex: 'Visa startpunkten f\u00F6r valda egenskaper.',\n selectToPaste: 'V\u00E4lj punkt till vilken de valda egenskaperna ska fogas.',\n draw_split_line: \"Rita en linje enligt vilken den valda egenskapen ska uppdelas.\"\n },\n title: {\n steps: 'Skeden',\n },\n next: \"N\u00E4sta\",\n },\n messages: {\n featureslockbyotheruser: \"Jotkut geometriat/tietueet eiv\u00E4t ole muokattavissa, koska muut k\u00E4ytt\u00E4j\u00E4t muokkaavat niit\u00E4\",\n splitted: \"Uppdelad\",\n nosplittedfeature: \"Egenskapen har inte delats upp\",\n press_esc: \"Tryck ESC f\u00F6r att g\u00E5 tillbaka\",\n online: \"F\u00F6rbindelsen har uppr\u00E4ttats. \u00C4ndringar kan sparas i databasen.\",\n offline: \"Du \u00E4r i offline-l\u00E4ge. \u00C4ndringarna sparas lokalt\",\n delete_feature: \"Vill du ta bort den valda egenskapen?\",\n delete_feature_relations: \"Om egenskapen saknar bindande relationer blir dessa relationer f\u00F6r\u00E4ldral\u00F6sa. Vi rekommenderar att du behandlar dessa relationer innan du l\u00E4mnar programmet\",\n unlink_relation: \"Vill du ta bort relationen?\",\n commit_feature: \"Sammanfattning av \u00E4ndringar\",\n toolbox_has_relation: \"detta lager \u00E4r en del av en relation\",\n saved: \"Uppgifterna sparades\",\n saved_local:\"Uppgifterna sparades lokalt.\",\n loading_data: \"Uppgifterna laddas\",\n saving: \"Uppgifterna sparas. V\u00E4nta...\",\n constraints: {\n enable_editing: \"Zooma in f\u00F6r att b\u00F6rja anv\u00E4nda redigeringsverktyg \\nAktivering skala 1:\"\n },\n pdf: \"F\u00F6rhandsgranskning av dokument \u00E4r inte tillg\u00E4nglig. Tryck h\u00E4r\",\n commit: {\n header: \"F\u00F6ljande lista visar alla \u00E4ndringar.\",\n header_relation: \"Relation\",\n header_add: \"Tillagda visar antalet egenskaper som lagts till\",\n header_update_delete: \"Redigerad och Borttagen Visa en lista p\u00E5 egenskapernas id\",\n add: \"har lagts till\",\n delete: \"Borttagen\",\n update: \"Redigerad\"\n },\n loading_table_data: \"Building Data Table. Please wait ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"It is necessary to fill in any mandatory fields on the features pasted before saving\",\n no_feature_selected: \"No feature selected\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
V\u00E4lj relation f\u00F6r l\u00E4nkning till egenskap som ska redigeras.
`\n },\n draw_new_feature:\"Draw new feature\",\n draw_or_copy:\"or\",\n copy_feature_from_other_layer:\"Copy feature from other layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Back to edit father\",\n add_relation: \"Skapa och l\u00E4nka ny relation\",\n link_relation: \"Foga relationen till denna egenskap\",\n open_relation_tools: \"Visa relationsverktyg\",\n unlink_relation: \"Ta bort relation\"\n }\n },\n buttons: {\n save: \"Infoga/Redigera\",\n save_and_back: \"Spara och g\u00E5 tillbaka\",\n save_and_back_table: \"Spara och g\u00E5 tillbaka\",\n cancel: \"Ignorera \u00E4ndringar\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"Une erreur s'est produite lors du chargement des layers dans l'\u00E9dition.\",\n some_layers: \"Une erreur s'est produite lors du chargement de certaines layers dans l'\u00E9dition.\"\n },\n search: \"Recherche\",\n editing_changes: \"Editing Changes\",\n editing_data: \"Modifier les donnes\",\n editing_attributes: \"Modifier les attributs\",\n relations: \"Relations\",\n edit_relation: \"Modifier la relation\",\n back_to_relations: \"Retour aux relations\",\n no_relations_found: \"Il n'y a pas de relations\",\n relation_data: \"Donn\u00E9es sur les relations\",\n relation_already_added : \"Relation d\u00E9j\u00E0 pr\u00E9sente\",\n list_of_relations_feature: \"Lister les relations de la fonctionnalit\u00E9\",\n tooltip:{\n edit_layer: \"Modifier le layer\"\n },\n toolbox: {\n title: 'Modifier'\n },\n table: {\n edit: \"Modifier fonctionnalit\u00E9s\",\n copy: \"Cr\u00E9er une copie\",\n delete: \"Supprimer la fonctionnalit\u00E9\"\n },\n tools: {\n copy: \"Copier les fonctionnalit\u00E9s\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Ajouter une pi\u00E8ce \u00E0 la g\u00E9om\u00E9trie\",\n deletepart: \"Supprimer la partie de la g\u00E9om\u00E9trie\",\n merge: \"Dissoudre les fonctionnalit\u00E9s\",\n split: \"Couper la fonctionnalit\u00E9\",\n add_feature: \"Ajouter une fonctionnalit\u00E9\",\n delete_feature: \"Supprimer la fonctionnalit\u00E9\",\n move_feature: \"D\u00E9placez la fonctionnalit\u00E9\",\n update_vertex: \"Mettre \u00E0 jour les sommets des fonctionnalit\u00E9s\",\n update_feature: \"Modifier les attributs des fonctionnalit\u00E9s\",\n update_multi_features: \"Modifier les attributs des fonctionnalit\u00E9s s\u00E9lectionn\u00E9es\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Modifier les enregistrements de relation \u00E0 partir d'une ou plusieurs entit\u00E9s parents\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Show measure\",\n snap: \"Snap layer\",\n snapall: \"Snap to all layers\"\n },\n steps: {\n help: {\n select_elements: \"S\u00E9lectionner les fonctionnalit\u00E9s\",\n select_element: \"S\u00E9lectionner une fonctionnalit\u00E9\",\n copy: \"Cr\u00E9er une copie des fonctionnalit\u00E9s s\u00E9lectionn\u00E9es\",\n merge: \"Dissoudre les fonctionnalit\u00E9s\",\n split: \"Couper la fonctionnalit\u00E9\",\n new: \"Cr\u00E9er une nouvelle fonctionnalit\u00E9\",\n edit_table: \"Modifier les fonctionnalit\u00E9s de la table\",\n draw_new_feature: \"Dessiner une fonctionnalit\u00E9 sur la carte\",\n action_confirm: \"Confirmer l'action\",\n double_click_delete: \"S\u00E9lectionner la fonctionnalit\u00E9 sur la carte \u00E0 supprimer\",\n edit_feature_vertex: \"Modifier ou ajouter un sommet \u00E0 la fonctionnalit\u00E9 s\u00E9lectionn\u00E9e\",\n move: \"D\u00E9placer la fonctionnalit\u00E9 s\u00E9lectionn\u00E9e\",\n select_feature_to_relation: \"S\u00E9lectionner la fonctionnalit\u00E9 que vous souhaitez mettre en relation\",\n show_edit_feature_form: \"Afficher le formulaire de la fonctionnalit\u00E9 permettant de modifier les attributs\",\n pick_feature: \"S\u00E9lectionner l'\u00E9l\u00E9ment de la carte \u00E0 modifier\",\n insert_attributes_feature: \"Ins\u00E9rer les attributs de la fonctionnalit\u00E9\"\n }\n },\n workflow: {\n steps: {\n select: 'Cliquer sur la fonctionnalit\u00E9 \u00E0 s\u00E9lectionner',\n draw_part: \"Dessiner la nouvelle partie\",\n draw_geometry : \"Dessiner la g\u00E9om\u00E9trie\",\n merge: 'S\u00E9lectionner la fonction \u00E0 introduire en fondu',\n selectPoint: \"Cliquer sur la fonctionnalit\u00E9 pour la s\u00E9lectionner\",\n selectSHIFT: 'S\u00E9lectionner des fonctionnalit\u00E9s en maintenant la touche SHIFT enfonc\u00E9e',\n selectDrawBox: \"S\u00E9lectionner les fonctionnalit\u00E9s en dessinant un rectangle par la cr\u00E9ation des deux points de la diagonale\",\n selectDrawBoxAtLeast2Feature: \"S\u00E9lectionner au moins 2 fonctionnalit\u00E9s en dessinant un rectangle par la cr\u00E9ation des deux points de la diagonale\",\n selectPointSHIFT: 'S\u00E9lectionner des caract\u00E9ristiques en maintenant la touche SHIFT enfonc\u00E9e (multi-s\u00E9lection) ou en cliquant sur une seule caract\u00E9ristique',\n selectMultiPointSHIFT: 'S\u00E9lectionner des fonctionnalit\u00E9s en maintenant la touche SHIFT appuy\u00E9e ou en cliquant sur la fonctionnalit\u00E9 individuelle',\n selectMultiPointSHIFTAtLeast2Feature: 'S\u00E9lectionner au moins 2 fonctionnalit\u00E9s en maintenant la touche SHIFT appuy\u00E9e ou en cliquant sur la fonctionnalit\u00E9 individuelle',\n copyCTRL: 'Copier les fonctionnalit\u00E9s s\u00E9lectionn\u00E9es avec CTRL+C',\n selectStartVertex: 'S\u00E9lectionner le sommet de d\u00E9part des fonctionnalit\u00E9s choisies',\n selectToPaste: 'S\u00E9lectionner le point o\u00F9 les fonctionnalit\u00E9s s\u00E9lectionn\u00E9es seront coll\u00E9es',\n draw_split_line: \"Tracez une ligne pour couper la fonctionnalit\u00E9 s\u00E9lectionn\u00E9e\"\n },\n title: {\n steps: '\u00C9tapes'\n },\n next: 'Suivant',\n },\n messages: {\n featureslockbyotheruser: \"Certaines g\u00E9om\u00E9tries/enregistrements ne sont pas modifiables car ils ont \u00E9t\u00E9 modifi\u00E9s par un autre utilisateur\",\n splitted: \"Fonctionnalit\u00E9(s) divis\u00E9(es)\",\n nosplittedfeature: \"La (les) fonctionnalit\u00E9(s) n\u2019a (n'ont) pas \u00E9t\u00E9 divis\u00E9(es)\",\n press_esc: \"Appuyez sur ESC pour revenir\",\n online: \"Vous \u00EAtes \u00E0 nouveau EN LIGNE. Vous pouvez enregistrer les modifications de fa\u00E7on permanente\",\n offline: \"Vous \u00EAtes HORS LIGNE. Toutes les modifications seront enregistr\u00E9es temporairement en local\",\n delete_feature: \"Voulez-vous supprimer la fonctionnalit\u00E9 s\u00E9lectionn\u00E9e ?\",\n delete_feature_relations: \"La suppression d'une fonctionnalit\u00E9 avec des relations associ\u00E9es laissera ces relations orphelines. Il est recommand\u00E9 de g\u00E9rer ces relations avant de supprimer la fonctionnalit\u00E9\",\n unlink_relation: \"Voulez-vous d\u00E9tacher la relation ?\",\n commit_feature: \"Sommaire des changements\",\n toolbox_has_relation: \"cette couche fait partie d'une relation\",\n saved: \"Les donn\u00E9es ont \u00E9t\u00E9 enregistr\u00E9es correctement\",\n saved_local: \"Les donn\u00E9es ont \u00E9t\u00E9 correctement sauvegard\u00E9es localement\",\n loading_data: \"Chargement des donn\u00E9es\",\n saving: \"Sauvegarde des donn\u00E9es. Veuillez patienter ...\",\n constraints: {\n enable_editing: \"Augmenter le niveau de zoom pour permettre l'\u00E9dition \\nEchelle de d\u00E9clenchement 1 :\"\n },\n pdf: \"Aper\u00E7u du document non disponible. Cliquez ici \",\n commit: {\n header: \"La liste ci-dessous montre toutes les modifications qui seront enregistr\u00E9es.\",\n header_relation: \"Relation\",\n header_add: \"Ajouts indique le nombre de fonctionnalit\u00E9s ajout\u00E9es\",\n header_update_delete: \"Modifi\u00E9 e Supprim\u00E9 liste les ids\",\n add: \"Ajout\u00E9\",\n delete: \"Supprim\u00E9\",\n update: \"Modifi\u00E9\"\n },\n loading_table_data: \"Building Data Table. Please wait ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"Avant d'enregistrer, il est n\u00E9cessaire de remplir tous les champs obligatoires du features saisi\",\n no_feature_selected: \"Aucune feature s\u00E9lectionn\u00E9e\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
S\u00E9lectionner les relations pour les associer \u00E0 l'\u00E9l\u00E9ment en cours d'\u00E9dition.
`\n },\n draw_new_feature:\"Dessiner une nouvelle feature\",\n draw_or_copy:\"ou\",\n copy_feature_from_other_layer:\"Copier feature d'une autre layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Back to edit father\",\n add_relation: \"Cr\u00E9er et ajouter une nouvelle relation\",\n link_relation: \"Associer une relation existante \u00E0 cette fonctionnalit\u00E9\",\n open_relation_tools: \"Outils de relation ouverte\",\n unlink_relation: \"Annuler la relation\"\n }\n },\n buttons: {\n save: \"Ins\u00E9rer/Modifier\",\n save_and_back: \"Sauvegarder et retourner au parent\",\n save_and_back_table: \"Sauvegarder et et revenir en arri\u00E8re\",\n cancel: \"Ignorer modifications\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"Es tritt ein Fehler auf. Es ist nicht m\u00F6glich, Layer zu bearbeiten\",\n some_layers: \"Es tritt ein Fehler auf: Es ist nicht m\u00F6glich, einige Layer zu bearbeiten\"\n },\n search: \"Suche\",\n editing_changes: \"\u00C4nderungen bearbeiten\",\n editing_data: \"Layer bearbeiten\",\n editing_attributes: \"Attribute bearbeiten\",\n relations: \"Relationen\",\n edit_relation: \"Relation bearbeiten\",\n back_to_relations: \"Zur\u00FCck zu Relationen\",\n no_relations_found: \"Keine Relationen gefunden\",\n relation_data: \"Relationsdaten\",\n relation_already_added: \"Relation bereits hinzugef\u00FCgt\",\n list_of_relations_feature: \"Liste der Relations-Features \",\n tooltip: {\n edit_layer: \"Layer bearbeiten\"\n },\n toolbox: {\n title: 'bearbeiten'\n },\n table: {\n edit: \"Feature bearbeiten\",\n copy: \"Kopie erstellen\",\n delete: \"Feature l\u00F6schen\"\n },\n tools: {\n copy: \"Features kopieren\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Teil zu Multipart hinzuf\u00FCgen\",\n deletepart: \"Teil aus Multipart l\u00F6schen\",\n merge: \"Feature aufl\u00F6sen\",\n split: \"Feature trennen\",\n add_feature: \"Feature hinzuf\u00FCgen\",\n delete_feature: \"Feature l\u00F6schen\",\n move_feature: \"Feature verschieben\",\n update_vertex: \"Feature vertex aktualisieren\",\n update_feature: \"Feature-Attribut aktualisieren\",\n update_multi_features: \"Attribute ausgew\u00E4hlter Features aktualisieren\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Bearbeiten Sie Beziehungsdatens\u00E4tze von einem oder mehreren \u00FCbergeordneten features\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Messung anzeigen\",\n snap: \"Snap Layer\",\n snapall: \"Snap auf alle Layer\"\n },\n steps: {\n help: {\n select_elements: \"Features ausw\u00E4hlen\",\n select_element: \"Feature ausw\u00E4hlen\",\n copy: \"Neue Kopie der ausgew\u00E4hlten Features erstellen\",\n merge: \"Features aufl\u00F6sen\",\n split: \"Feature trennen\",\n new: \"Neues Feature erstellen\",\n edit_table: \"Features der Tabelle bearbeiten\",\n draw_new_feature: \"Feature auf Karte zeichnen\",\n action_confirm: \"Aktion best\u00E4tigen\",\n double_click_delete: \"Zu l\u00F6schendes Feature auf der Karte ausw\u00E4hlen\",\n edit_feature_vertex: \"\u00C4ndern oder Hinzuf\u00FCgen eines Eckpunktes auf dem ausgew\u00E4hlten Feature\",\n move: \"Ausgew\u00E4hltes Feature verschieben\",\n select_feature_to_relation: \"Feature ausw\u00E4hlen, welches die Relation verkn\u00FCpft\",\n show_edit_feature_form: \"Feature-Formular zum Bearbeiten von Attributen anzeigen\",\n pick_feature: \"Zu \u00E4nderndes Feature auf der Karte ausw\u00E4hlen\",\n insert_attributes_feature: \"Attribute des Features einf\u00FCgen\"\n }\n },\n workflow: {\n steps: {\n select: 'Zum Ausw\u00E4hlen auf ein Feature klicken',\n draw_part: \"Neues Teil zeichnen\",\n draw_geometry : \"Geometrie zeichnen\",\n merge: 'Feature zum Aufl\u00F6sen ausw\u00E4hlen',\n selectSHIFT: 'Features ausw\u00E4hlen indem ein Rechteck mit SHIFT gezeichnet wird',\n selectDrawBox: \"Features ausw\u00E4hlen, indem man ein Rechteck mit zwei gegen\u00FCberliegenden Eckpunkten zeichnet\",\n selectDrawBoxAtLeast2Feature: \"Mindestens Features ausw\u00E4hlen, indem man ein Rechteck mit zwei gegen\u00FCberliegenden Eckpunkten zeichnet\",\n selectPoint: \"Zum Ausw\u00E4hlen auf ein Feature klicken\",\n selectPointSHIFT: 'Features ausw\u00E4hlen, indem ein Rechteck mit SHIFT gezeichnet wird (Multifeatures) oder auf ein Feature klicken',\n selectMultiPointSHIFT: 'Features ausw\u00E4hlen, indem man ein Rechteck zeichnet und SHIFT dr\u00FCckt oder auf ein Feature klickt',\n selectMultiPointSHIFTAtLeast2Feature: 'Mindestens 2 Features ausw\u00E4hlen und mit SHIFT ein Rechteck zeichnen oder auf ein Feature klicken',\n copyCTRL: 'Kopieren ausgew\u00E4hlter Features mit CTRL+C',\n selectStartVertex: 'Start-Eckpunkt der ausgew\u00E4hlten Features ausw\u00E4hlen',\n selectToPaste: 'Den Punkt ausw\u00E4hlen, an dem die ausgew\u00E4hlten Features eingef\u00FCgt werden sollen',\n draw_split_line: \"Eine Linie zeichnen, um das ausgew\u00E4hlte Feature zu teilen\"\n },\n title: {\n steps: 'Schritte',\n },\n next: 'Weiter',\n },\n messages: {\n featureslockbyotheruser: \"Einige Geometrien/Datens\u00E4tze k\u00F6nnen nicht bearbeitet werden, da sie von anderen Benutzern bearbeitet werden\",\n splitted: \"Getrennt\",\n nosplittedfeature: \"Feature nicht getrennt\",\n press_esc: \"Mit ESC zur\u00FCck\",\n online: \"Wieder ONLINE. Jetzt kann man die \u00C4nderungen in der Datenbank speichern\",\n offline: \"OFFLINE. Alle \u00C4nderungen werden lokal gespeichert\",\n delete_feature: \"Soll das ausgew\u00E4hlte Feature gel\u00F6scht werden?\",\n delete_feature_relations: \"Wenn ein Feature Verkn\u00FCpfungen beinhaltet, werden diese Relationen verwaist. Wir schlagen vor, diese Relationen zu behandeln, bevor das Feature gel\u00F6scht wird\",\n unlink_relation: \"Soll die Verkn\u00FCpfung aufgehoben werden?\",\n commit_feature: \"Zusammenfassung der \u00C4nderungen\",\n toolbox_has_relation: \"Diese Ebene ist Teil einer Beziehung\",\n saved: \"Daten erfolgreich gespeichert\",\n saved_local:\"Daten erfolgreich lokal gespeichert\",\n loading_data: \"Daten laden\",\n saving: \"Daten werden gespeichert. Bitte warten ...\",\n constraints: {\n enable_editing: \"Bitte zoomen Sie hinein, um die Editier-Tools zu aktivieren \\nAktivierungsskala bei 1:\"\n },\n pdf: \"Dokumentenvorschau nicht verf\u00FCgbar. Bitte hier klicken \",\n commit: {\n header: \"Die folgende Liste zeigt alle zu \u00FCbernehmenden \u00C4nderungen.\",\n header_relation: \"Relation\",\n header_add: \"Hinzufgef\u00FCgt Die Anzahl der hinzugef\u00FCgten Features anzeigen\",\n header_update_delete: \"Bearbeitet und Gel\u00F6scht Die Liste der Feature-ID anzeigen\",\n add: \"Hinzugef\u00FCgt\",\n delete: \"Gel\u00F6scht\",\n update: \"Bearbeitet\"\n },\n loading_table_data: \"Datentabelle wird erstellt. Bitte warten ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"Vor dem Speichern m\u00FCssen alle Pflichtfelder des eingegebenen features ausgef\u00FCllt werden\",\n no_feature_selected: \"Keine feature ausgew\u00E4hlt\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
W\u00E4hlen Sie Relationen aus, um sie mit dem aktuellen Feature zu verkn\u00FCpfen.
`\n },\n draw_new_feature:\"Zeichnen Sie eine neue feature\",\n draw_or_copy:\"oder\",\n copy_feature_from_other_layer:\"Kopieren Sie feature aus einer anderen layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Zur\u00FCck zur Bearbeitung des Vaters\",\n add_relation: \"Neue Relation erstellen und verkn\u00FCpfen\",\n link_relation: \"Eine Relation zu diesem Feature herstellen\",\n open_relation_tools: \"Relationstools anzeigen\",\n unlink_relation: \"Relation trennen\"\n }\n },\n buttons: {\n save: \"Einf\u00FCgung/Bearbeiten\",\n save_and_back: \"Speichern und zur\u00FCck\",\n save_and_back_table: \"Speichern und zur\u00FCck\",\n cancel: \"\u00C4nderungen ignorieren\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select one feature\"\n }\n }\n }\n}", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"Avem o eroare. Straturile nu sunt editabile\",\n some_layers: \"Avem o eroare: Anumite straturi nu se pot edita\"\n },\n search: \"Caut\u0103\",\n editing_changes: \"Modificare schimb\u0103ri\",\n editing_data: \"Modificare straturi\",\n editing_attributes: \"Modificare atribute\",\n relations: \"Rela\u021Bii\",\n edit_relation: \"Modific\u0103 rela\u021Bia\",\n back_to_relations: \"\u00CEnapoi la Rela\u021Bii\",\n no_relations_found: \"Nu am g\u0103sit rela\u021Bii\",\n relation_data: \"Date rela\u021Bii\",\n relation_already_added: \"Rela\u021Bie ad\u0103ugat\u0103 deja\",\n list_of_relations_feature: \"Lista rela\u021Bii entitatea \",\n tooltip: {\n edit_layer: \"Modific\u0103 strat\"\n },\n toolbox: {\n title: 'Modific\u0103'\n },\n table: {\n edit: \"Modific\u0103 entitate\",\n copy: \"Creeaz\u0103 o copie\",\n delete: \"Elimin\u0103 entitatea\"\n },\n tools: {\n copy: \"Copiaz\u0103 entit\u0103\u021Bile\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Adaug\u0103 o parte la multiparte\",\n deletepart: \"Elimin\u0103 partea din multiparte\",\n merge: \"Dizolvare entit\u0103\u021Bi\",\n split: \"Divizare Entitate\",\n add_feature: \"Adaug\u0103 entitate\",\n delete_feature: \"Eliminare entitate\",\n move_feature: \"Mut\u0103 entitate\",\n update_vertex: \"Actualizeaz\u0103 vertec\u0219ii entit\u0103\u021Bii\",\n update_feature: \"Actualizeaz\u0103 atributul entit\u0103\u021Bii\",\n update_multi_features: \"Actualizeaz\u0103 atributele entit\u0103\u021Bilor selectate\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Edita\u021Bi \u00EEnregistr\u0103rile rela\u021Biilor de la una sau mai multe caracteristici p\u0103rinte\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Arat\u0103 m\u0103sur\u0103torile\",\n snap: \"Acro\u0219are strat\",\n snapall: \"Acro\u0219are pe toate straturile\"\n },\n steps: {\n help: {\n select_elements: \"Selecteaz\u0103 entit\u0103\u021Bi\",\n select_element: \"Selecteaz\u0103 entitate\",\n copy: \"Creeaz\u0103 o nou\u0103 copie a entit\u0103\u021Bilor selectate\",\n merge: \"Dizolv\u0103 entit\u0103\u021Bile\",\n split: \"Divizare Entitate\",\n new: \"Creeaz\u0103 o entitate\",\n edit_table: \"Modific\u0103 entit\u0103\u021Bile tabelare\",\n draw_new_feature: \"Deseneaz\u0103 entitate pe hart\u0103\",\n action_confirm: \"Confirm\u0103 ac\u021Biunea\",\n double_click_delete: \"Selecteaz\u0103 entitatea de eliminat din hart\u0103\",\n edit_feature_vertex: \"Modific\u0103 sau adaug\u0103 un vertex la entitatea selectat\u0103\",\n move: \"Mut\u0103 entitatea selectat\u0103\",\n select_feature_to_relation: \"Selecteaz\u0103 entitate pentru rela\u021Bionare\",\n show_edit_feature_form: \"Arat\u0103 formularul entit\u0103\u021Bii pentru modific\u0103ri\",\n pick_feature: \"Selecteaz\u0103 entit\u0103\u021Bile de modificat din hart\u0103\",\n insert_attributes_feature: \"Insereaz\u0103 atributele entit\u0103\u021Bii\"\n }\n },\n workflow: {\n steps: {\n select: 'Click pe entitate pentru a o selecta',\n draw_part: \"Deseneaz\u0103 o parte nou\u0103\",\n draw_geometry : \"Desena\u021Bi geometria\",\n merge: 'Selecteaz\u0103 partea de dizolvat',\n selectSHIFT: 'Selecteaz\u0103 entit\u0103\u021Bi prin desen triunghi ap\u0103s\u00E2nd SHIFT',\n selectDrawBox: \"Selecteaz\u0103 entit\u0103\u021Bi desen\u00E2nd un dreptunghi prin dou\u0103 puncte opuse\",\n selectDrawBoxAtLeast2Feature: \"Selecteaz\u0103 cel pu\u021Bin 2 entit\u0103\u021Bi prin desenul unui dreptunghi\",\n selectPoint: \"Click pe entitate pentru selectare\",\n selectPointSHIFT: 'Selecteaz\u0103 entit\u0103\u021Bi prin desen dreptunghi ap\u0103s\u00E2nd SHIFT (multientit\u0103\u021Bi) sau prin click pe entitate',\n selectMultiPointSHIFT: 'Selecteaz\u0103 entit\u0103\u021Bi prin desen dreptunghi ap\u0103s\u00E2nd SHIFT sau prin click pe entitate',\n selectMultiPointSHIFTAtLeast2Feature: 'Selecteaz\u0103 cel pu\u021Bin 2 entit\u0103\u021Bi prin desen dreptunghi ap\u0103s\u00E2nd SHIFT sau prin click pe entitate',\n copyCTRL: 'Copiaz\u0103 entit\u0103\u021Bile selectate folosint CTRL+C',\n selectStartVertex: 'Selecteaz\u0103 vertexul de start a entit\u0103\u021Bilor selectate',\n selectToPaste: 'Selecteaz\u0103 punctul unde s\u0103 lipim entit\u0103\u021Bile selectate',\n draw_split_line: \"Deseneaz\u0103 o linie pentru a diviza entitatea selectat\u0103\"\n },\n title: {\n steps: 'Pa\u0219i',\n },\n next: 'Urm\u0103torul',\n },\n messages: {\n featureslockbyotheruser: \"Unele geometrii/\u00EEnregistr\u0103ri nu sunt editabile deoarece sunt editate de c\u0103tre alt utilizator\",\n splitted: \"Divizat\",\n nosplittedfeature: \"Entitate nedivizat\u0103\",\n press_esc: \"ESC pentru \u00EEnapoi\",\n online: \"\u00CEnapoi ONLINE. Acum se pot salva schimb\u0103rile\",\n offline: \"OFFLINE. Schimb\u0103rile sunt salvate local\",\n delete_feature: \"\u0218terg entitatea selectat\u0103?\",\n delete_feature_relations: \"Dac\u0103 entitatea are rela\u021Bii care trimit la ea, acele rela\u021Bii devin orfane. Suger\u0103m s\u0103 v\u0103 ocupa\u021Bi de acele elemente \u00EEnainte s\u0103 elimina\u021Bi aceast\u0103 entitate.\",\n unlink_relation: \"Dore\u0219ti s\u0103 elimina\u021Bi leg\u0103tura cu rela\u021Bia?\",\n commit_feature: \"Rezumatul modific\u0103rilor\",\n toolbox_has_relation: \"acest strat face parte dintr-o rela\u021Bie\",\n saved: \"Datele sunt salvate\",\n saved_local:\"Datele s-au salvat local\",\n loading_data: \"Datele se \u00EEncarc\u0103.\",\n saving: \"Salv\u0103m datele. A\u0219tepta\u021Bi ...\",\n constraints: {\n enable_editing: \"Pentru a activa Modificare face\u021Bi zoom la \\nScara de activare 1:\"\n },\n pdf: \"Previzualizarea documentului nu este disponibil\u0103. Click aici \",\n commit: {\n header: \"Lista cu toate modific\u0103rile.\",\n header_relation: \"Relation\",\n header_add: \"Ad\u0103ugate arat\u0103 nr. de entit\u0103\u021Bi ad\u0103ugate\",\n header_update_delete: \"Modificate \u0219i \u0218terse arat\u0103 lista de id-uri de entit\u0103\u021Bi\",\n add: \"Ad\u0103ugate\",\n delete: \"Eliminate\",\n update: \"Modificate\"\n },\n loading_table_data: \"\u00CEnc\u0103rc\u0103m tabelul de date ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"\u00CEnainte de a salva, este necesar s\u0103 completa\u021Bi toate c\u00E2mpurile obligatorii ale entit\u0103\u021Bi introduse\",\n no_feature_selected: \"Nicio feature selectat\u0103\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
Selecteaz\u0103 rela\u021Biile pentru a face leg\u0103tura cu entitatea curent\u0103.
`\n },\n draw_new_feature:\"Desena\u021Bi o nou\u0103 feature\",\n draw_or_copy: \"sau\",\n copy_feature_from_other_layer: \"Copia\u021Bi feature dintr-un alt layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"\u00CEnapoi la modific\u0103rile entit\u0103\u021Bii p\u0103rinte\",\n add_relation: \"Creeaz\u0103 \u0219i f\u0103 leg\u0103tura unei rela\u021Bii noi\",\n link_relation: \"Leag\u0103 o rela\u021Bie de entitate\",\n open_relation_tools: \"Arat\u0103 instrumentele pentru rela\u021Bii\",\n unlink_relation: \"Elimin\u0103 leg\u0103tura la rela\u021Bie\"\n }\n },\n buttons: {\n save: \"Insera\u021Bi/Edita\u021Bi\",\n save_and_back: \"Salveaz\u0103 \u0219i d\u0103 \u00EEnapoi\",\n save_and_back_table: \"Salveaz\u0103 \u0219i d\u0103 \u00EEnapoi\",\n cancel: \"Ignora\u021Bi modific\u0103rile\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "export default {\n errors: {\n no_layers: \"An error occurs. It's no possible to edit layers\",\n some_layers: \"An error occurs: It's no possible to edit some layers\"\n },\n search: \"Search\",\n editing_changes: \"Editing Changes\",\n editing_data: \"Editing Layers\",\n editing_attributes: \"Editing attributes\",\n relations: \"Relations\",\n edit_relation: \"Edit relation\",\n back_to_relations: \"Back to Relations\",\n no_relations_found: \"No relations found\",\n relation_data: \"Relation data\",\n relation_already_added: \"Relation already added\",\n list_of_relations_feature: \"List of relations feature \",\n tooltip: {\n edit_layer: \"Edit Layer\"\n },\n toolbox: {\n title: 'Edit'\n },\n table: {\n edit: \"Edit feature\",\n copy: \"Create a copy\",\n delete: \"Delete feature\"\n },\n tools: {\n copy: \"Copy features\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Add part to multipart\",\n deletepart: \"Delete part from multipart\",\n merge: \"Dissolve features\",\n split: \"Split Feature\",\n add_feature: \"Add feature\",\n delete_feature: \"Delete feature\",\n move_feature: \"Move feature\",\n update_vertex: \"Update feature vertex\",\n update_feature: \"Update feature attribute\",\n update_multi_features: \"Update attributes of selected features\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Edit relations records from one or mode parent features\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Show measure\",\n snap: \"Snap layer\",\n snapall: \"Snap to all layers\"\n },\n steps: {\n help: {\n select_elements: \"Select features\",\n select_element: \"Select feature\",\n copy: \"Create new copy of selected features\",\n merge: \"Dissolve features\",\n split: \"Split Feature\",\n new: \"Create new feature\",\n edit_table: \"Edit table features\",\n draw_new_feature: \"Draw feature on map\",\n action_confirm: \"Confirm action\",\n double_click_delete: \"Select feature on map to delete\",\n edit_feature_vertex: \"Modify or add a vertex on selected feature\",\n move: \"Move selected feature\",\n select_feature_to_relation: \"Select feature that you bind relation\",\n show_edit_feature_form: \"Show feature form to edit attributes\",\n pick_feature: \"Select feature on map to modify\",\n insert_attributes_feature: \"Insert attributes of the feature\"\n }\n },\n workflow: {\n steps: {\n select: 'Click on feature to select',\n draw_part: \"Draw new part\",\n merge: 'Select featurewhere dissolve',\n selectSHIFT: 'Select features drawing a rectangle pressing SHIFT',\n selectDrawBox: \"Select features drawing a rectangle by two point of opposite corners\",\n selectDrawBoxAtLeast2Feature: \"Select at least features drawing a rectangle by two point of opposite corners\",\n selectPoint: \"Click on feature to select\",\n selectPointSHIFT: 'Select features drawing a rectangle pressing SHIFT (multifeatures) or click on one feature',\n selectMultiPointSHIFT: 'Select features drawing a rectangle pressing SHIFT or click on feature',\n selectMultiPointSHIFTAtLeast2Feature: 'Select at least 2 features drawing a rectangle pressing SHIFT or click on feature',\n copyCTRL: 'Copy selected features using CTRL+C',\n selectStartVertex: 'Select starting vertex of selected features',\n selectToPaste: 'Select the point where paste the features selected',\n draw_split_line: \"Draw a line to split selected feature\"\n },\n title: {\n steps: 'Steps'\n },\n next: 'Next',\n },\n messages: {\n featureslockbyotheruser: \"Some geometries/records are not editable because in editing by other user\",\n splitted: \"Splitted\",\n nosplittedfeature: \"Feature not spitted\",\n press_esc: \"Press ESC to back\",\n online: \"Back ONLINE. Now you can save your changes on database\",\n offline: \"You are OFFLINE. All changes are saved locally\",\n delete_feature: \"Do you want delete selected feature ?\",\n delete_feature_relations: \"If feature has bindings relations, these relations become orphans. We suggest to handle these relations before detele this feature\",\n unlink_relation: \"Do you want unlink relation?\",\n commit_feature: \"Do you want to save the changes\",\n toolbox_has_relation: \"this layer is part of a relation\",\n saved: \"Data saved successfully\",\n saved_local:\"Data saved locally successfully\",\n loading_data: \"Loading data\",\n saving: \"Saving data. Please wait ...\",\n constraints: {\n enable_editing: \"Please Zoom In to enable editing tools \\nActivation scale at 1:\"\n },\n pdf: \"Document preview not available. Please click here \",\n commit: {\n header: \"The following list show all changes to commit.\",\n header_add: \"Added show the number of features added\",\n header_update_delete: \"Modified and Deleted show the list of features id\",\n add: \"Added(n. features)\",\n delete: \"Deleted(id)\",\n update: \"Modified(id)\"\n },\n loading_table_data: \"Building Data Table. Please wait ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"It is necessary to fill in any mandatory fields on the features pasted before saving\",\n no_feature_selected: \"No feature selected\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
Select relations to link it to current editing feature.
`\n },\n draw_new_feature:\"Draw new feature\",\n draw_or_copy:\"or\",\n copy_feature_from_other_layer:\"Copy feature from other layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Back to edit father\",\n add_relation: \"Create and link new relation\",\n link_relation: \"Join a relation to this feature\",\n open_relation_tools: \"Show relation tools\",\n unlink_relation: \"Unlink relation\"\n }\n },\n buttons: {\n save: \"Insert/Edit\",\n save_and_back: \"Save and Back\",\n save_and_back_table: \"Save and Back\",\n cancel: \"Ignore Changes\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "import it from './it';\nimport en from './en';\nimport fi from './fi';\nimport se from './se';\nimport fr from './fr';\nimport de from './de';\nimport ro from './ro';\nimport pl from './pl';\n\nexport default {\n it,\n en,\n fi,\n se,\n fr,\n de,\n ro,\n pl,\n}", "import './g3wsdk';\nimport i18n from './i18n';\nimport { Workflow } from './g3wsdk/workflow/workflow';\nimport { Step } from './g3wsdk/workflow/step';\nimport { promisify, $promisify } from './utils/promisify';\nimport { createFeature } from './utils/createFeature';\nimport { getEditingLayerById } from './utils/getEditingLayerById';\nimport { setAndUnsetSelectedFeaturesStyle } from './utils/setAndUnsetSelectedFeaturesStyle';\nimport { addPartToMultigeometries } from './utils/addPartToMultigeometries';\nimport {\n OpenFormStep,\n AddFeatureStep,\n} from './workflows';\nimport { ToolBox } from './toolboxes/toolbox';\n\nconst { G3W_FID } = g3wsdk.constant;\nconst { ApplicationState, ApplicationService } = g3wsdk.core;\nconst { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\nconst { t, tPlugin } = g3wsdk.core.i18n;\nconst { Layer, LayersStore } = g3wsdk.core.layer;\nconst { Feature } = g3wsdk.core.layer.features;\nconst { MapLayersStoreRegistry } = g3wsdk.core.map;\nconst { Plugin, PluginService } = g3wsdk.core.plugin;\nconst { XHR, noop } = g3wsdk.core.utils;\nconst { GUI } = g3wsdk.gui;\nconst { Panel } = g3wsdk.gui.vue;\nconst { Server: serverErrorParser } = g3wsdk.core.errors.parsers;\nconst { Geometry } = g3wsdk.core.geoutils;\nconst {\n getScaleFromResolution,\n getResolutionFromScale,\n} = g3wsdk.ol.utils;\n\nObject\n .entries({\n Workflow,\n OpenFormStep,\n AddFeatureStep,\n ToolBox,\n })\n .forEach(([k, v]) => console.assert(undefined !== v, `${k} is undefined`));\n\nnew (class extends Plugin {\n\n constructor() {\n\n super({\n name: 'editing',\n i18n,\n fontClasses: [\n { name: 'measure', className: \"fas fa-ruler-combined\" },\n { name: 'magnete', className: \"fas fa-magnet\" },\n { name: 'clipboard', className: \"fas fa-clipboard\" }\n ],\n });\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Global plugin state\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n this.state = {\n open: false, // check if panel is open or not\n toolboxes: [],\n _toolboxes: [], // TODO: `state._toolboxes` vs `state.toolboxes` ?\n toolboxselected: null,\n /** @since g3w-client-plugin-editing@v3.6.2 */\n showselectlayers: true, // whether to show selected layers on editing panel\n message: null,\n relations: [],\n sessions: {}, // store all sessions\n layers_in_error: false,\n formComponents: {}, // plugin components\n subscribers: {},\n constraints: { // editing contraints (layer, filter, ..) to get features\n toolboxes: {},\n showToolboxesExcluded: true\n },\n featuresOnClose: {}, // layers fatures to result when close editing (KEY LAYERID, VALUES ARRAY OF FEATURE FID CHANGES OR ADDED)\n uniqueFieldsValues: {}, // store unique fields values for each layer\n saveConfig: { // store configuration of how save/commit changes to server\n mode: \"default\", // default, autosave\n modal: false,\n messages: undefined, // object to set custom message\n cb: {\n done: () => {}, // function executed after commit change done\n error: () => {} // function executed after commit changes error\n }\n },\n editableLayers: {},\n events: {\n 'start-editing': {},\n 'show-relation-editing': {},\n layer: {\n start_editing: {\n before: {},\n after: {}\n }\n }\n },\n show_errors: false,\n editFeatureKey: undefined,\n panel: null, // editing panel\n currentLayout: ApplicationService.getCurrentLayoutName(),\n unwatchLayout: (new Vue()).$watch(\n () => ApplicationState.gui.layout.__current,\n layoutName => this.state.currentLayout = layoutName !== this.getName() ? layoutName : this.state.currentLayout\n ),\n onMapControlToggled: ({ target }) => {\n target.isToggled() && target.isClickMap() && this.state.toolboxselected && this.state.toolboxselected.getActiveTool() && this.state.toolboxselected.stopActiveTool();\n },\n };\n\n // BACKOMP v3.x\n this.setService(Object.assign(new PluginService, {\n state: this.state,\n config: this.config,\n getSession: this.getSession.bind(this),\n getFeature: this.getFeature.bind(this),\n subscribe: this.subscribe.bind(this),\n unsubscribe: this.unsubscribe.bind(this),\n fireEvent: this.fireEvent.bind(this),\n undo: this.undo.bind(this),\n redo: this.redo.bind(this),\n getEditingLayer: this.getEditingLayer.bind(this),\n addToolBox: this.addToolBox.bind(this),\n runEventHandler: this.runEventHandler.bind(this),\n resetDefault: this.resetDefault.bind(this),\n resetAPIDefault: this.resetAPIDefault.bind(this),\n getLayers: this.getLayers.bind(this),\n getLayerById: this.getLayerById.bind(this),\n getToolBoxById: this.getToolBoxById.bind(this),\n getSessionById: this.getSessionById.bind(this),\n setApplicationEditingConstraints: this.setApplicationEditingConstraints.bind(this),\n getToolBoxes: this.getToolBoxes.bind(this),\n getEditableLayers: this.getEditableLayers.bind(this),\n stop: this.stop.bind(this),\n saveChange: this.saveChange.bind(this),\n commit: this.commit.bind(this),\n undoRedoLayerUniqueFieldValues: this.undoRedoLayerUniqueFieldValues.bind(this),\n undoRedoRelationUniqueFieldValues: this.undoRedoRelationUniqueFieldValues.bind(this),\n stopEditing: this.stopEditing.bind(this),\n startEditing: this.startEditing.bind(this),\n addLayerFeature: this.addLayerFeature.bind(this),\n }));\n\n // set map control toggle event\n GUI.getService('map').on('mapcontrol:toggled', this.state.onMapControlToggled);\n\n this._init();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async _init() {\n // skip when no editable layer\n if (!CatalogLayersStoresRegistry.getLayers({ EDITABLE: true }).length) { return }\n\n this.setHookLoading({ loading: true });\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1 */\n this.service.setApi({\n api: {\n getSession: this.getSession.bind(this),\n getFeature: this.getFeature.bind(this),\n subscribe: this.subscribe.bind(this),\n unsubscribe: this.unsubscribe.bind(this),\n getToolBoxById: this.getToolBoxById.bind(this),\n addNewFeature: createFeature,\n commitChanges: this.commit.bind(this),\n setApplicationEditingConstraints: this.setApplicationEditingConstraints.bind(this),\n getMapService: () => GUI.getService('map'),\n updateLayerFeature: noop,\n deleteLayerFeature: noop,\n addLayerFeature: this.addLayerFeature.bind(this),\n hidePanel: this.hideEditingPanel.bind(this),\n resetDefault: this.resetAPIDefault.bind(this),\n startEditing: this.startEditing.bind(this),\n stopEditing: this.stopEditing.bind(this),\n showPanel: this.showPanel.bind(this),\n setSaveConfig: this.setSaveConfig.bind(this),\n addFormComponents: this.addFormComponents.bind(this),\n }\n });\n\n // add editing layer store to mapstoreregistry\n MapLayersStoreRegistry.addLayersStore(new LayersStore({ id: 'editing', queryable: false }));\n\n this.state.editableLayers = {};\n this.state._toolboxes = [];\n this.state.toolboxes = [];\n\n // loop over editable layers\n (await Promise.allSettled(\n CatalogLayersStoresRegistry\n .getLayers({ EDITABLE: true }, { TOC_ORDER : true })\n .map(l => l.getLayerForEditing({\n vectorurl: this.config.vectorurl,\n project_type: this.config.project_type\n }))\n )).forEach(({ status, value:layer }) => {\n\n // skip on http error\n if ('fulfilled' !== status) {\n this.state.layers_in_error = true;\n return;\n }\n\n this.state.editableLayers[layer.getId()] = layer;\n\n //set default empty object\n this.state.uniqueFieldsValues[layer.getId()] = {};\n\n /**\n * attach layer widgets event: get data from api when a field of a layer\n * is related to a wgis form widget (ex. relation reference, value map, etc..)\n */\n layer\n .getEditingFields()\n .filter(field => field.input && 'select_autocomplete' === field.input.type && !field.input.options.filter_expression && !field.input.options.usecompleter)\n /** @TODO need to avoid to call the same fnc to same event many times to avoid waste server request time */\n .forEach(field => ['start-editing', 'show-relation-editing'].forEach(type => {\n const id = layer.getId();\n this.state.events[type][id] = this.state.events[type][id] || [];\n\n this.state.events[type][id].push(async () => {\n const options = field.input.options;\n\n // remove all values\n options.loading.state = 'loading';\n options.values = [];\n\n const relationLayer = options.layer_id && CatalogLayersStoresRegistry.getLayerById(options.layer_id);\n const has_filter = ([undefined, null].includes(options.filter_fields || []) || 0 === (options.filter_fields || []).length);\n\n try {\n\n // relation reference widget + no filter set\n if (options.relation_reference && has_filter) {\n const response = await layer.getFilterData({ fformatter: field.name }); // get data with fformatter\n if (response && response.data) {\n // response data is an array ok key value objects\n options.values.push(...response.data.map(([value, key]) => ({ key, value })));\n options.loading.state = 'ready';\n this.fireEvent('autocomplete', { field, data: [response.data] });\n return options.values;\n }\n }\n\n // value map widget\n if (relationLayer) {\n //ordering by value or key depend on orderbyvalue Boolean value\n const response = await promisify(relationLayer.getDataTable({ ordering: options.orderbyvalue ? options.value : options.key }));\n if (response && response.features) {\n options.values.push(...(response.features || []).map(feature => ({\n key: feature.properties[options.value],\n value: feature.properties[options.key],\n })));\n options.loading.state = 'ready';\n this.fireEvent('autocomplete', { field, features: response.features })\n return options.values;\n }\n }\n\n /** @TODO check if deprecated */\n const features = [];\n options.loading.state = 'ready';\n this.fireEvent('autocomplete', { field, features });\n return features;\n\n } catch (e) {\n console.warn(e);\n options.loading.state = 'error';\n return Promise.reject(e);\n }\n });\n }));\n\n this.state.sessions[layer.getId()] = null;\n\n });\n\n\n let i = 0;\n this\n .getLayers()\n .forEach(editingLayer => {\n /**\n * set 1:1 relation fields editable\n * \n * Check if layer has relation 1:1 (type ONE) and if fields\n *\n * belongs to relation where child layer is editable\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\n const fatherId = editingLayer.getId(); // father layer\n CatalogLayersStoresRegistry\n .getLayerById(fatherId)\n .getRelations()\n .getArray()\n .filter(relation => 'ONE' === relation.getType() && fatherId === relation.getFather()) // 'ONE' == join 1:1 + father layerId is a father of relation\n .forEach(relation => {\n const isChildEditable = undefined !== this.getLayerById(relation.getChild()); // check if child layerId is editable (in editing)\n this\n .getLayerById(relation.getFather())\n .getEditingFields()\n .filter(f => f.vectorjoin_id && f.vectorjoin_id === relation.getId()) // father layer fields (in editing)\n .forEach(f => { f.editable = (f.editable && isChildEditable); }); // current editable boolean value + child editable layer\n });\n // Set editing layer color and toolbox style\n if (!editingLayer.getColor()) {\n editingLayer.setColor(editingLayer.isGeoLayer() ? [\n \"#C43C39\", \"#d95f02\", \"#91522D\", \"#7F9801\", \"#0B2637\",\n \"#8D5A99\", \"#85B66F\", \"#8D2307\", \"#2B83BA\", \"#7D8B8F\",\n \"#E8718D\", \"#1E434C\", \"#9B4F07\", '#1b9e77', \"#FF9E17\",\n \"#7570b3\", \"#204B24\", \"#9795A3\", \"#C94F44\", \"#7B9F35\",\n \"#373276\", \"#882D61\", \"#AA9039\", \"#F38F3A\", \"#712333\",\n \"#3B3A73\", \"#9E5165\", \"#A51E22\", \"#261326\", \"#e4572e\",\n \"#29335c\", \"#f3a712\", \"#669bbc\", \"#eb6841\", \"#4f372d\",\n \"#cc2a36\", \"#00a0b0\", \"#00b159\", \"#f37735\", \"#ffc425\",\n ][i++ % 40] : '#fff');\n }\n });\n\n // after add layers to layerstore\n MapLayersStoreRegistry.getLayersStore('editing').addLayers(this.getLayers());\n\n // create toolboxes\n this.getLayers().forEach(l => this.addToolBox(new ToolBox(l, [...l.getChildren(), ...l.getFathers()].filter(id => this.getLayerById(id)))));\n\n await GUI.isReady();\n\n this._setupGUI();\n\n this.setHookLoading({ loading: false });\n this.setReady(true);\n }\n\n // setup plugin interface\n async _setupGUI() {\n\n //@since 3.9.0\n // skip when:\n // 1 - plugin is not referred to the current project id\n // 2 - configuration of plugin, visible is set to false\n // 3 - There aren't editable layers or all are not visible\n if (!this.registerPlugin(this.config.gid) || false === this.config.visible || 0 === this.getLayers().filter(l => l.config.editing.visible).length) {\n return;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin/toolboxes/toolboxesfactory.js@v3.7.1\n *\n * Register query result action: edit selected feature from query results\n */\n this.state.editFeatureKey = GUI.getService('queryresults').onafter('editFeature', async({\n layer,\n feature,\n } = {}) => {\n const fid = feature.attributes[G3W_FID] || feature.id;\n\n //In case of not unique id, skip\n if (undefined === fid) { return }\n\n this.getToolBoxes().forEach(tb => tb.setShow(layer.id === tb.getId()));\n this.showEditingPanel();\n\n this.state.showselectlayers = false;\n\n this.subscribe('closeeditingpanel', () => { this.state.showselectlayers = true; return { once: true } });\n\n const toolBox = this.getToolBoxById(layer.id);\n //set selected\n toolBox.setSelected(true);\n\n const session = toolBox.getSession();\n const { scale } = toolBox.getEditingConstraints(); // get scale constraint from setting layer\n\n let w;\n\n // start toolbox (filtered by feature id)\n try {\n // check map scale after zoom to feature\n // if currentScale is more that scale constraint set by layer editing\n // needs to go to scale setting by layer editing constraint\n if (scale) {\n const units = GUI.getService('map').getMapUnits();\n const map = GUI.getService('map').getMap();\n const currentScale = parseInt(getScaleFromResolution(map.getView().getResolution(), GUI.getService('map').getMapUnits()));\n if (currentScale > scale) {\n map.getView().setResolution(getResolutionFromScale(scale, units));\n }\n\n }\n\n await promisify(toolBox.start({ filter: { fids: fid } }));\n\n const _layer = toolBox.getLayer();\n const source = _layer.getEditingLayer().getSource();\n const is_vector = Layer.LayerTypes.VECTOR === _layer.getType();\n\n // get feature from an Editing layer source (with styles)\n const features = is_vector ? source.getFeatures() : source.readFeatures();\n const feature = features.find(f => fid == f.getId());\n\n // skip when not feature is get from server\n if (!feature) { return }\n\n const geom = feature.getGeometry();\n\n // feature has geometry \u2192 zoom to geometry\n if (geom) { GUI.getService('map').zoomToGeometry(geom) }\n\n toolBox.setSelected(true);\n\n this.state.toolboxselected = toolBox;\n\n const addPartTool = is_vector && !geom && toolBox.getTools().find(t => 'addPart' === t.getId());\n\n // check if layer is single geometry. Need to show and change behaviour\n if (addPartTool && !Geometry.isMultiGeometry(_layer.getGeometryType())) {\n addPartTool.visible = true;\n }\n\n // add geometry when vector layer feature has no geometry\n if (addPartTool) {\n //get workflow\n const op = addPartTool.getOperator();\n const w = new Workflow({\n type: 'drawgeometry',\n helpMessage: 'editing.workflow.steps.draw_geometry',\n runOnce: true, // need to run once time\n steps: [\n new AddFeatureStep({\n add: false,\n steps: {\n addfeature: {\n description: 'editing.workflow.steps.draw_geometry',\n }\n },\n onRun: ({inputs, context}) => {\n w.emit('settoolsoftool', [\n {\n type: 'snap',\n options: {\n layerId: inputs.layer.getId(),\n source: inputs.layer.getEditingLayer().getSource(),\n active: true\n }\n },\n {\n type: 'measure',\n options: {\n active: false\n }\n }\n ]);\n w.emit('active', ['snap']);\n },\n onStop: () => w.emit('deactive', ['snap', 'measure'])\n }),\n // add part to multi geometries\n new Step({ run: addPartToMultigeometries })\n ],\n registerEscKeyEvent: true\n })\n\n addPartTool.setOperator(w);\n\n this.subscribe('closeeditingpanel', () => {\n addPartTool.setOperator(op);\n addPartTool.visible = Geometry.isMultiGeometry(_layer.getGeometryType());\n })\n }\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editnopickmapfeatureattributesworkflow.js@v3.7.1 */\n w = (new Workflow({\n type: 'editnopickmapfeatureattributes',\n runOnce: true,\n helpMessage: 'editing.tools.update_feature',\n steps: [ new OpenFormStep() ]\n }));\n\n await promisify(\n w.start({\n inputs: { layer: _layer, features: [feature] },\n context: { session }\n })\n );\n\n await promisify(session.save());\n\n this.saveChange();\n\n } catch (e) {\n console.warn(e);\n session.rollback();\n } finally {\n w.stop();\n }\n });\n\n this.config.name = this.config.name || \"plugins.editing.editing_data\";\n\n this.addToolGroup({ position: 0, title: 'EDITING' });\n this.addTools({\n action: this.showEditingPanel,\n offline: false,\n icon: 'pencil'\n }, { position: 0, title: 'EDITING' });\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.8\n * \n * Get session\n *\n * @param layerId\n *\n * @returns {*}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getSession({ layerId } = {}) {\n return this.getToolBoxById(layerId).getSession();\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.8\n *\n * @param layerId\n *\n * @returns Feature in editing\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getFeature({ layerId } = {}) {\n return this.getToolBoxById(layerId).getActiveTool().getLayer().features[0];\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.8\n * \n * Subscribe handler function on event\n *\n * @param event\n * @param { Function } fnc\n *\n * @returns { Function } function\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n subscribe(event, fnc) {\n if (!this.state.subscribers[event]) { this.state.subscribers[event] = [] }\n if (!this.state.subscribers[event].find(subscribe => fnc === subscribe)) { this.state.subscribers[event].push(fnc)}\n return fnc;\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.8\n * \n * Unsubscribe handler function on event\n *\n * @param event\n * @param fnc\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n unsubscribe(event, fnc) {\n this.state.subscribers[event] = this.state.subscribers[event].filter(sub => fnc !== sub);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param event\n * @param options\n *\n * @returns { Promise }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async fireEvent(event, options = {}) {\n if (this.state.subscribers[event]) {\n this.state.subscribers[event].forEach(fnc => {\n const response = fnc(options);\n if (response && response.once) {\n this.unsubscribe(event, fnc);\n }\n });\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Undo method\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n undo() {\n const session = this.state.toolboxselected.getSession();\n const layerId = session.getId();\n const sessionItems = session.getLastHistoryState().items;\n\n //update unique values fields after undo\n this.undoRedoLayerUniqueFieldValues({\n layerId,\n sessionItems,\n action: 'undo'\n });\n\n const undoItems = session.undo();\n //update unique values of relations after undo\n this.undoRedoRelationUniqueFieldValues({\n relationSessionItems: undoItems,\n action: 'undo'\n });\n\n // undo relations\n Object.entries(undoItems).forEach(([toolboxId, items]) => { this.getToolBoxById(toolboxId).getSession().undo(items); });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n redo() {\n const session = this.state.toolboxselected.getSession();\n const layerId = session.getId();\n const sessionItems = session.getLastHistoryState().items;\n //update unique values fields after redo\n this.undoRedoLayerUniqueFieldValues({\n layerId,\n sessionItems,\n action: 'redo'\n });\n const redoItems = session.redo();\n //update unique values of relations after redo\n this.undoRedoRelationUniqueFieldValues({\n relationSessionItems: redoItems,\n action: 'redo'\n });\n\n // redo relations\n Object.entries(redoItems).forEach(([toolboxId, items]) => { this.getToolBoxById(toolboxId).getSession().redo(items); });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param id\n *\n * @returns {*}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getEditingLayer(id) {\n return this.state.editableLayers[id].getEditingLayer();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param toolbox\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n addToolBox(toolbox) {\n this.state._toolboxes.push(toolbox);\n this.state.sessions[toolbox.getId()] = toolbox.getSession(); // add session\n this.state.toolboxes.push(toolbox.state);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } handler\n * @param handler.type\n * @param handler.id\n *\n * @returns { Promise }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async runEventHandler({\n type,\n id,\n } = {}) {\n if (this.state.events[type] && this.state.events[type][id]) {\n await Promise.allSettled(this.state.events[type][id].map(fnc => fnc()));\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Reset default values\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n resetDefault() {\n this.state.saveConfig = {\n mode: \"default\", // default, autosave\n modal: false,\n messages: undefined, // object to set a custom message\n cb: {\n done: () => {}, // function Called after save\n error: () => {}, // function called affect commit error\n }\n };\n GUI.getService('map').disableClickMapControls(false);\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1\n *\n * Reset default toolbox state modified by other plugin\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n resetAPIDefault({\n plugin = true,\n toolboxes = true,\n } = {}) {\n if (toolboxes) { this.getToolBoxes().forEach(tb => tb.resetDefault()) }\n if (plugin) { this.resetDefault() }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @returns { Array }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getLayers() {\n return Object.values(this.state.editableLayers);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { string } id\n *\n * @returns {*}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getLayerById(id) {\n return this.state.editableLayers[id];\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { string } id\n *\n * @returns {*}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getToolBoxById(id) {\n return this.state._toolboxes.find(tb => id === tb.getId());\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Get layer session by id (layer id is the same of session)\n *\n * @param id\n *\n * @returns {*}\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\n getSessionById(id) {\n return this.state.sessions[id];\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Method to apply filter editing contsraint to toolbox editing\n * Apply filter editing contsraint to toolbox editing\n *\n * @param constraints\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setApplicationEditingConstraints(constraints = { showToolboxesExcluded: true, toolboxes : {} }) {\n this.state.constraints = {\n ...this.state.constraints,\n ...constraints\n };\n\n const { toolboxes, showToolboxesExcluded } = constraints;\n const toolboxIds = Object.keys(toolboxes);\n if (false === showToolboxesExcluded) {\n this.state.toolboxes.forEach(t => t.show = toolboxIds.includes(t.id));\n }\n toolboxIds.forEach(id => this.getToolBoxById(id).setEditingConstraints(toolboxes[id]))\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @returns { Array }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getToolBoxes() {\n return this.state._toolboxes;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @returns {*|{}}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getEditableLayers() {\n return this.state.editableLayers;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Stop editing\n *\n * @returns { Promise }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async stop() {\n const commitpromises = this.state._toolboxes\n .filter(t => t.getSession().getHistory().state.commit) // check if temp changes are waiting to save on server\n .map( toolbox => this.commit({ toolbox, modal : true }))\n try {\n await promisify($.when.apply(this, commitpromises)); \n } catch (e) {\n console.warn(e);\n }\n\n this.state._toolboxes.forEach(t => t.stop());\n\n this.state.toolboxselected = null;\n this.state.message = null;\n\n //reset unique values\n Object.keys(this.state.uniqueFieldsValues).forEach(id => this.state.uniqueFieldsValues[id] = {});\n\n GUI.getService('map').refreshMap();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Function called very single change saved temporary\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async saveChange() {\n if ('autosave' === this.state.saveConfig.mode) {\n return this.commit({ modal: false }); // set to not show a modal ask window\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Commit and save changes on server persistently\n *\n * @param { Object } commit\n * @param commit.toolbox\n * @param commit.commitItems\n * @param commit.messages\n * @param commit.done\n * @param { boolean } commit.modal\n * @param { boolean } commit.close\n *\n * @returns jQuery promise\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n commit({\n toolbox,\n commitItems,\n modal = true,\n close = false,\n } = {}) {\n const messages = Object.assign({ success: { message: \"plugins.editing.messages.saved\", autoclose: true }, error: {} }, (this.state.saveConfig.messages || {}));\n toolbox = toolbox || this.state.toolboxselected;\n let layer = toolbox.getLayer();\n const items = commitItems;\n commitItems = commitItems || toolbox.getSession().getCommitItems();\n const online = ApplicationState.online;\n const has_changes = [\n ...(commitItems.add || []),\n ...(commitItems.delete || []),\n ...(commitItems.update || []),\n ...Object.keys(commitItems.relations || {})\n ].length;\n let workflow, dialog, serverError;\n\n return $promisify(async () => {\n\n // skip when there is nothing to save\n if (!has_changes) {\n GUI.showUserMessage({ type: 'info', message: 'Nothing to save', autoclose: true, closable: false });\n return toolbox;\n }\n\n try {\n\n // show commit modal window\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8 */\n if (modal) {\n workflow = new Workflow({\n type: 'commitfeatures',\n steps: [\n // confirm step\n new Step({\n run(inputs) {\n return $promisify(new Promise((resolve, reject) => {\n const dialog = GUI.dialog.dialog({\n message: inputs.message,\n title: `${tPlugin(\"editing.messages.commit_feature\")}: \"${inputs.layer.getName()}\"`,\n buttons: {\n SAVE: { className: \"btn-success\", callback() { resolve(inputs); }, label: t(\"save\"), },\n CANCEL: { className: \"btn-danger\", callback() { reject({cancel : true }); }, label: t(inputs.close ? \"exitnosave\" : \"annul\") },\n ...(inputs.close ? { CLOSEMODAL : { className: \"btn-primary\", callback() { dialog.modal('hide'); }, label: t(\"annul\") }} : {}),\n }\n });\n if (inputs.features) {\n setAndUnsetSelectedFeaturesStyle({ promise: promise(), inputs, style: this.selectStyle });\n }\n }))\n },\n }\n ),\n ]\n });\n //need to get to confirm or cancel choose from modal\n try {\n await promisify(\n workflow.start({\n inputs: {\n close,\n layer,\n message: (new (Vue.extend(require('./components/Changes.vue').default))({\n propsData: {\n commits: commitItems,\n layer\n }})).$mount().$el,\n }\n })\n );\n await promisify(workflow.stop());\n } catch(e) {\n console.warn(e);\n // In the case of pressed cancel button to commit features modal\n if (e && e.cancel) {\n return Promise.reject(e);\n }\n //need to be set server Error\n serverError = true;\n }\n\n //in case of online application\n if (online) {\n dialog = GUI.dialog.dialog({\n message: `

\n ${tPlugin('editing.messages.saving')}\n

`,\n closeButton: false\n });\n }\n }\n\n let data = !online && { [toolbox.getSession().getId()]: commitItems };\n //get current offline editing changes\n const changes = !online && JSON.parse(window.localStorage.getItem('EDITING_CHANGES') || null);\n\n // handle offline changes\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8 */\n Object.keys(changes || {})\n .forEach(layerId => {\n const currLayerId = Object.keys(data)[0];\n\n // check if previous changes are made in the same layer or in relationlayer of current\n let current = null;\n\n if (data[layerId]) { current = data; }\n else if (data[currLayerId].relations[layerId]) {\n current = data[currLayerId].relations;\n }\n\n // check if in the last changes\n const relationsIds = !current && Object.keys(changes[layerId].relations || {});\n const has_relations = !current && relationsIds.length > 0;\n const GIVE_ME_A_NAME = !current && has_relations && relationsIds.includes(currLayerId);\n\n // apply changes\n if (current || GIVE_ME_A_NAME) {\n const id = current ? layerId : currLayerId;\n const curr = current ? current : data;\n const prev = current ? changes : changes[layerId].relations;\n curr[id].add = [...curr[id].add, ...curr[id].add];\n curr[id].delete = [...curr[id].delete, ...curr[id].delete];\n\n (prev[id].update || [])\n .filter(update => !curr[id].update.find(u => u.id === update.id))\n .forEach(update => curr[id].update.unshift(update));\n\n (prev[id].lockids || [])\n .filter(lock => !curr[id].lockids.find(l => l.featureid === lock.featureid))\n .forEach(lock => curr[id].update.unshift(lock));\n }\n\n if (GIVE_ME_A_NAME) {\n changes[layerId].relations[currLayerId] = data[currLayerId];\n data = changes;\n }\n if (!current && !has_relations) {\n data[layerId] = changes[layerId]\n }\n });\n\n if (!online) {\n\n GUI.showUserMessage({\n type: 'success',\n message: \"plugins.editing.messages.saved_local\",\n autoclose: true\n });\n //clear history because it saved on browser\n toolbox.getSession().clearHistory();\n\n }\n\n try {\n // check if the application is online\n const { commit, response } = online ? await promisify(\n toolbox.getSession().commit({ items: items || commitItems, __esPromise: true })\n ) : {};\n\n //check if is online and there are some commit items\n const online2 = online && commit;\n\n const result = online2 && response.result;\n\n if (result && messages && messages.success) {\n // hide saving dialog\n if (dialog) { dialog.modal('hide') }\n\n //Show save user message\n GUI.showUserMessage({\n type: 'success',\n message: messages.success.message || \"plugins.editing.messages.saved\",\n duration: 2000,\n autoclose: undefined === messages.success.autoclose ? true : messages.success.autoclose,\n });\n }\n\n // In the case of vector layer need to refresh map commit changes\n if (result && Layer.LayerTypes.VECTOR === layer.getType() ) {\n GUI.getService('map').refreshMap({ force: true });\n }\n\n if (online) {\n this.state.saveConfig.cb.done(toolbox);\n }\n\n // add items when close editing to result to show changes\n const layerId = result && toolbox.getId();\n\n if (layerId) {\n this.state.featuresOnClose[layerId] = this.state.featuresOnClose[layerId] || new Set();\n [\n ...response.response.new.map(n => n.id),\n ...commit.update.map(u => u.id)\n ].forEach(fid => this.state.featuresOnClose[layerId].add(fid));\n }\n\n // @since 3.7.2 - click on save all disk icon (editing form relation)\n if (result) { this.emit('commit', response.response) }\n\n // the result is false. It was done a commit, but an error occurs\n if (online2 && !result) {\n serverError = true;\n throw response;\n }\n } catch(e) {\n console.warn(e);\n if (online) {\n serverError = true;\n throw e;\n }\n }\n\n } catch (e) {\n console.warn(e);\n\n // hide saving dialog\n if (dialog) { dialog.modal('hide') }\n\n // rollback\n //@TODO check if it is usefull\n if (modal) {\n try { await _rollback(commitItems.relations); }\n catch (e) { console.warn(e); }\n }\n\n // parse server error\n if (serverError || modal) {\n const message = online\n ? (messages.error.message || (new serverErrorParser({ error: e.errors || e || {}})).parse({ type: 'String' }))\n : e;\n\n GUI.showUserMessage({\n type: 'alert',\n message,\n textMessage: online ? !messages.error.message : true,\n autoclose: online ? (undefined !== messages.error.autoclose ? messages.error.autoclose : false) : false,\n });\n\n this.state.saveConfig.cb.error(toolbox, message);\n }\n\n return Promise.reject(toolbox);\n }\n return toolbox;\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } opts\n * @param { string } opts.layerId\n * @param { Array } opts.sessionItems\n * @param opts.action\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n undoRedoLayerUniqueFieldValues({\n layerId,\n sessionItems = [],\n action,\n }) {\n\n // if not set\n if (undefined === this.state.uniqueFieldsValues[layerId]) {\n return;\n }\n\n sessionItems.forEach(item => {\n\n Object\n .keys(this.state.uniqueFieldsValues[layerId])\n .forEach(name => { //name is the name of field\n //check if change is an update [oldVal, newValue]\n const is_array = Array.isArray(item);\n let oldVal, newVal;\n if (is_array) {\n // 0 = old value feature, 1 = new value feature\n const has_change = item[1].feature.get(name) != item[0].feature.get(name);\n // update feature that contains \"new\" and \"old\" values of feature\n oldVal = has_change ? (action === 'undo' ? item[1].feature.get(name) : item[0].feature.get(name)) : undefined;\n newVal = has_change ? (action === 'undo' ? item[0].feature.get(name) : item[1].feature.get(name)) : undefined;\n } else {\n oldVal = 'add' === item.feature.getState() ? item.feature.get(name) : undefined;\n newVal = 'delete' === item.feature.getState() ? item.feature.get(name) : undefined;\n }\n // delete layer unique field value\n if (undefined !== oldVal) {\n this.state.uniqueFieldsValues[layerId][name].delete(oldVal);\n }\n // add layer unique field value\n if (undefined !== newVal) {\n this.state.uniqueFieldsValues[layerId][name].add(newVal);\n }\n });\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } opts\n * @param opts.relationSessionItems\n * @param opts.action\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n undoRedoRelationUniqueFieldValues({\n relationSessionItems = {},\n action,\n }) {\n Object\n .entries(relationSessionItems)\n .forEach(([layerId, { own: sessionItems, dependencies: relationSessionItems }]) => {\n //undo/redo unique field of layer\n this.undoRedoLayerUniqueFieldValues({\n layerId,\n sessionItems,\n action\n });\n //undo/redo unique field of relations\n this.undoRedoRelationUniqueFieldValues({\n relationSessionItems,\n action\n })\n })\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1\n *\n * Stop editing on layerId\n *\n * @param layerId\n * @param options\n *\n * @returns { Promise }\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n async stopEditing(layerId, options = {}) {\n return promisify(this.getToolBoxById(layerId).stop(options));\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1\n *\n * Start editing API\n *\n * @param layerId\n * @param { Object } options\n * @param { boolean } [options.selected=true]\n * @param { boolean } [options.disablemapcontrols=false]\n * @param { boolean } [options.showselectlayers=true]\n * @param { string } [options.title]\n * @param data\n *\n *\n * @returns { Promise }\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n async startEditing(layerId, options = {}, data = false) {\n options.selected = undefined === options.selected ? true : options.selected;\n options.showselectlayers = undefined === options.showselectlayers ? true : options.showselectlayers;\n options.disablemapcontrols = undefined === options.disablemapcontrols ? false : options.showselectlayers;\n // get toolbox related to layer id\n const toolbox = this.getToolBoxById(layerId);\n // set show select layers input visibility\n this.state.showselectlayers = options.showselectlayers;\n // skip if toolbox doesn't exist\n if (!toolbox) {\n return Promise.reject();\n }\n // set selected\n toolbox.setSelected(options.selected);\n // set seletcted toolbox\n if (options.selected) { this.state.toolboxselected = toolbox }\n\n //set toolbox title if provide\n if (options.title) { toolbox.setTitle(options.title) }\n\n // start editing toolbox (options contain also a filter type)\n data = await promisify(toolbox.start(options))\n // disablemapcontrols in conflict\n if (options.disablemapcontrols) {\n GUI.getService('map').disableClickMapControls(true);\n }\n // opts contain information about start editing has features loaded\n return data ? { toolbox, data } : toolbox;\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1\n *\n * Add Feature\n *\n * @param { Object } opts\n * @param opts.layerId\n * @param opts.feature\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n addLayerFeature({\n layerId,\n feature,\n } = {}) {\n // skip when mandatory params are missing\n if ([ feature, layerId ].includes(undefined)) {\n return Promise.reject();\n }\n return new Promise(async (resolve, reject) => {\n const layer = this.getLayerById(layerId);\n // get session\n const session = this.getSessionById(layerId);\n // exclude an eventual attribute pk (primary key) not editable (mean autoincrement)\n const attributes = layer\n .getEditingFields()\n .filter(attr => !(attr.pk && !attr.editable));\n // start session (get no features but set layer in editing)\n session.start({\n filter: {\n nofeatures: true, // no feature\n nofeatures_field: attributes[0].name // get the first field in editing form\n },\n editing: true,\n })\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/easyaddfeatureworkflow.js@v3.7.1 */\n // create workflow\n const workflow = new Workflow({\n type: 'addfeature',\n steps: [\n new OpenFormStep({\n push: true,\n showgoback: false,\n saveAll: false,\n })\n ],\n });\n\n const stop = cb => {\n workflow.stop();\n session.stop();\n return cb();\n };\n\n try {\n //check if feature has property of layer\n attributes.forEach(a => {\n if (undefined === feature.get(a.name)) {\n feature.set(a.name, null);\n }\n })\n\n try {\n //set feature as g3w feature\n feature = new Feature({ feature, properties: attributes.map(a => a.name) });\n //set new\n feature.setTemporaryId();\n\n // add to session and source as new feature\n session.pushAdd(layerId, feature, false);\n layer.getEditingLayer().getSource().addFeature(feature);\n //start workflow\n await promisify(workflow.start({\n inputs: { layer, features: [feature] },\n context: { session },\n }));\n\n session.save();\n\n try {\n await promisify(this.commit({ modal: false, toolbox: this.getToolBoxById(layerId) }));\n stop(resolve);\n } catch(e) {\n console.warn(e);\n stop(reject)\n }\n } catch(e) {\n console.warn(e);\n stop(reject);\n }\n } catch(e) {\n console.warn(e);\n reject();\n }\n })\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } save\n * @param save.mode - default or autosave\n * @param save.cb - object contain done/error two functions\n * @param save.modal - Boolean true or false to show to ask\n * @param save.messages - object success or error\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setSaveConfig({ mode = 'default', cb = {}, modal = false, messages } = {}) {\n Object.assign(this.state.saveConfig, { mode, modal, messages, cb: { ...this.state.saveConfig.cb, ...cb }});\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8 \n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n addFormComponents({ layerId, components = [] } = {}) {\n this.state.formComponents[layerId] = (this.state.formComponents[layerId] || []).concat(components);\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1\n *\n * Show editing panel\n *\n * @param options\n * @param options.toolboxes\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n showPanel(options = {}) {\n if (options.toolboxes && Array.isArray(options.toolboxes)) {\n this.getToolBoxes().forEach(tb => tb.setShow(options.toolboxes.includes(tb.getId())));\n }\n this.showEditingPanel(options);\n }\n\n /**\n * Show editing panel toolbars\n * \n * ORIGINAL SOURCE: g3w-client-plugin-editing/g3w-editing-components/editing.js.js@v3.6\n * ORIGINAL SOURCE: g3w-client-plugin-editing/g3w-editing-components/panel.js.js@v3.6\n */\n showEditingPanel(opts = {}) {\n //need to filter visible\n if (this.getLayers().filter(l => l.config.editing.visible).length > 0) {\n this.state.panel = new Panel({\n ...opts,\n id: \"editing-panel\",\n title: opts.title || \"plugins.editing.editing_data\",\n internalPanel: new (Vue.extend(require('./components/Editing.vue').default))({\n service: this,\n resourcesurl: opts.resourcesUrl || GUI.getResourcesUrl(),\n showcommitbar: undefined !== opts.showcommitbar ? opts.showcommitbar : true,\n }),\n });\n GUI.showPanel(this.state.panel);\n\n if (!this.state.show_errors && this.state.layers_in_error) {\n GUI.showUserMessage({ type: 'warning', message: 'plugins.editing.errors.some_layers', closable: true });\n this.state.show_errors = true;\n }\n } else {\n GUI.showUserMessage({ type: 'alert', message: 'plugins.editing.errors.no_layers' })\n }\n return this.state.panel;\n }\n\n hideEditingPanel() {\n if (null !== this.state.panel) {\n GUI.closePanel();\n this.state.panel = null;\n }\n }\n\n unload() {\n this.hideEditingPanel();\n\n if (this.config.visible) { this.removeTools() }\n\n this.state.unwatchLayout();\n MapLayersStoreRegistry.removeLayersStore(MapLayersStoreRegistry.getLayersStore('editing'));\n ToolBox.clear();\n // turn off events\n GUI.getService('map').off('mapcontrol:toggled', this.state.onMapControlToggled);\n // unregister query result action\n GUI.getService('queryresults').un('editFeature', this.state.editFeatureKey);\n }\n \n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n setCurrentLayout() {\n ApplicationService.setCurrentLayout(this.getName());\n }\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n resetCurrentLayout() {\n ApplicationService.setCurrentLayout(this.state.currentLayout);\n }\n\n /**\n * @since g3w-client-plugin-editing@v3.8.1\n */\n getActiveTool() {\n return this.getToolBoxes().filter(t => t.getActiveTool())[0];\n }\n\n});\n\nasync function _rollback(relations = {}) {\n return Promise.allSettled(\n Object\n .entries(relations)\n .flatMap(([ layerId, { add, delete: del, update, relations = {}}]) => {\n const source = getEditingLayerById(layerId).getEditingSource();\n const has_features = source.readFeatures().length > 0; // check if the relation layer has some features\n // get original values\n return [\n // add\n ...(has_features && add || []).map(async ({ id }) => {\n source.removeFeature(source.getFeatureById(id));\n }),\n // update\n ...(has_features && update || []).map(async ({ id }) => {\n try {\n const response = await XHR.get({\n url: CatalogLayersStoresRegistry.getLayerById(layerId).getUrl('data'),\n params: { fids: id },\n });\n const f = (response.result && response.vector.data.features || []).at(0);\n const feature = source.getFeatureById(id);\n feature.setProperties(f.properties);\n feature.setGeometry(f.geometry);\n } catch(e) {\n console.warn(e);\n }\n }),\n // delete\n ...del.map(async id => {\n try {\n const response = await XHR.get({\n url: CatalogLayersStoresRegistry.getLayerById(layerId).getUrl('data'),\n params: { fids: id },\n });\n const f = (response.result && response.vector.data.features || []).at(0);\n const feature = new ol.Feature({ geometry: f.geometry })\n feature.setProperties(f.properties);\n feature.setId(id);\n source.addFeature(new Feature({ feature })); // add it again to source because relation layer is locked\n } catch(e) {\n console.warn(e);\n }\n\n }),\n _rollback(relations),\n ];\n })\n );\n}", "const { Feature } = g3wsdk.core.layer.features;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Create a new feature\n *\n * @param layerId\n * @param options.geometry.type\n * @param options.geometry.coordinates\n *\n * @returns { Feature }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function createFeature(layerId, options = {}) {\n const feature = new Feature();\n\n if (options.geometry) {\n feature.setGeometry(new ol.geom[options.geometry.type](options.geometry.coordinates));\n }\n\n feature.setProperties(options.properties);\n feature.setTemporaryId();\n\n const toolbox = this.getToolBoxById(layerId);\n const editingLayer = toolbox.getLayer().getEditingLayer();\n const session = toolbox.getSession();\n\n editingLayer.getSource().addFeature(feature);\n session.pushAdd(layerId, feature, false);\n\n return feature;\n}"], - "mappings": "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", - "names": ["promisify", "promise", "resolve", "reject", "$promisify", "d", "e", "init_promisify", "__esmMin", "G3WObject", "isPointGeometryType", "Layer", "GUI", "Step", "init_step", "__esmMin", "init_promisify", "options", "inputs", "context", "task", "steps", "type", "interaction", "events", "handler", "evt", "bool", "event", "input", "callback", "$promisify", "step", "toolsOfTools", "layer", "tool", "t", "promisify", "e", "outputs", "workflow", "tools", "UserMessage_exports", "__export", "UserMessage_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_UserMessage", "__esmMin", "step", "_vm", "_h", "_c", "$event", "inject", "GUI", "G3WObject", "Workflow", "workflows", "init_workflow", "__esmMin", "init_step", "init_promisify", "_Workflow", "options", "Step", "steps", "messagesSteps", "step", "type", "t", "service", "workflow", "key", "value", "context", "index", "messages", "s", "inputs", "outputs", "promisify", "e", "$promisify", "resolve", "reject", "showUserMessage", "label", "tools", "message", "feats", "evt", "callback", "i", "w", "createEditingDataOptions", "filterType", "options", "filter", "GUI", "init_createEditingDataOptions", "__esmMin", "setLayerUniqueFieldValues", "layerId", "service", "resolve", "reject", "layer", "f", "response", "name", "values", "e", "CatalogLayersStoresRegistry", "init_setLayerUniqueFieldValues", "__esmMin", "getRelationId", "layerId", "relation", "fatherId", "childId", "init_getRelationId", "__esmMin", "getRelationsInEditing", "layerId", "relations", "r", "getRelationId", "init_getRelationsInEditing", "__esmMin", "init_getRelationId", "getSelectedStyle", "feature", "setFeaturesSelectedStyle", "features", "style", "arr", "originalStyle", "selectedStyle", "f", "init_setFeaturesSelectedStyle", "__esmMin", "setAndUnsetSelectedFeaturesStyle", "promise", "inputs", "style", "layer", "features", "selectOriginalStyleHandle", "originalStyle", "setFeaturesSelectedStyle", "promisify", "f", "is_vector", "Layer", "is_single", "Workflow", "init_setAndUnsetSelectedFeaturesStyle", "__esmMin", "init_workflow", "init_promisify", "init_setFeaturesSelectedStyle", "ChooseFeatureToEdit_exports", "__export", "ChooseFeatureToEdit_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "GUI", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_ChooseFeatureToEdit", "__esmMin", "feature", "properties", "label", "name", "_vm", "_h", "_c", "$event", "ref", "attribute", "value", "inject", "chooseFeatureFromFeatures", "features", "inputs", "resolve", "reject", "feature", "comp", "name", "label", "dialog", "tPlugin", "init_chooseFeatureFromFeatures", "__esmMin", "cloneFeature", "feature", "layer", "clone", "pk", "f", "init_cloneFeature", "__esmMin", "getParentFormData", "Workflow", "features", "layer", "fields", "feature", "name", "value", "init_getParentFormData", "__esmMin", "init_workflow", "evaluateExpressionFields", "inputs", "context", "feature", "promises", "field", "resolve", "reject", "getParentFormData", "e", "init_evaluateExpressionFields", "__esmMin", "init_getParentFormData", "isSameBaseGeometryType", "a", "b", "init_isSameBaseGeometryType", "__esmMin", "convertToGeometry", "features", "geometryType", "f", "type", "is3DGeometry", "removeZValueToOLFeatureGeometry", "addZValueToOLFeatureGeometry", "isSameBaseGeometryType", "isMultiGeometry", "cloned", "convertSingleMultiGeometry", "init_convertToGeometry", "__esmMin", "init_isSameBaseGeometryType", "addTableFeature", "inputs", "context", "feature", "$promisify", "init_addTableFeature", "__esmMin", "init_promisify", "getRelationFieldsFromRelation", "layerId", "relation", "isChild", "_fatherField", "_childField", "init_getRelationFieldsFromRelation", "__esmMin", "getLayersDependencyFeatures", "layerId", "opts", "service", "layer", "relations", "getRelationsInEditing", "response", "relation", "id", "getRelationId", "filterType", "options", "createEditingDataOptions", "session", "online", "ApplicationState", "toolbox", "ownField", "relationField", "getRelationFieldsFromRelation", "features", "featureValues", "field", "find", "i", "f", "promisify", "promise", "e", "init_getLayersDependencyFeatures", "__esmMin", "init_promisify", "init_getRelationFieldsFromRelation", "init_getRelationId", "init_getRelationsInEditing", "init_createEditingDataOptions", "getEditingLayerById", "layerId", "init_getEditingLayerById", "__esmMin", "getRelationsInEditingByFeature", "layerId", "relations", "feature", "service", "relationsinediting", "relationinediting", "relation", "child", "father", "relationLayerId", "layer", "fatherLayer", "ownField", "relationField", "getRelationFieldsFromRelation", "values", "field", "i", "init_getRelationsInEditingByFeature", "__esmMin", "init_getRelationFieldsFromRelation", "updateWorkflows", "Workflow", "w", "init_updateWorkflows", "__esmMin", "init_workflow", "PickFeaturesInteraction", "init_pickfeaturesinteraction", "__esmMin", "opts", "features", "featuresAtPixel", "pixel", "map", "l", "e", "getFormFields", "inputs", "context", "feature", "multi", "service", "layerId", "fields", "unique_values", "f", "field", "_value", "current_values", "values", "v", "sortNumericArray", "sortAlphabeticallyArray", "_handleMulti", "savedfeatureFnc", "init_getFormFields", "__esmMin", "arr", "a", "b", "ascending", "handleRelation1_1LayerFields", "layerId", "features", "fields", "task", "service", "promises", "CatalogLayersStoresRegistry", "relation", "resolve", "reject", "fatherField", "value", "childLayerId", "childField", "source", "childFeature", "newChild", "f", "fieldsUpdated", "name", "isNewChildFeature", "field", "init_handleRelation1_1LayerFields", "__esmMin", "VM", "init_eventbus", "__esmMin", "getRelation1_1ChildFeature", "relation", "fatherFormRelationField", "service", "fatherLayerId", "childLayerId", "childField", "locked", "feature", "f", "childFeatureStore", "unByKey", "features", "getLayersDependencyFeatures", "layer", "CatalogLayersStoresRegistry", "data", "DataRouterService", "e", "init_getRelation1_1ChildFeature", "__esmMin", "init_getLayersDependencyFeatures", "listenRelation1_1FieldChange", "layerId", "fields", "formService", "unwatches", "service", "ONE", "CatalogLayersStoresRegistry", "relation", "childLayerId", "fatherField", "relationLockFeatures", "fatherFormRelationField", "editableRelatedFatherChild", "accumulator", "field", "formField", "f", "getRelation1_1ChildFeature", "fn", "VM", "value", "e", "feature", "locked", "init_listenRelation1_1FieldChange", "__esmMin", "init_eventbus", "init_getRelation1_1ChildFeature", "getFeatureTableFieldValue", "layerId", "feature", "property", "fields", "value", "values", "f", "kv", "field", "kv_field", "init_getFeatureTableFieldValue", "__esmMin", "addRemoveToMultipleSelectFeatures", "features", "inputs", "selected", "task", "f", "selIndex", "setFeaturesSelectedStyle", "steps", "buttonnext", "init_addRemoveToMultipleSelectFeatures", "__esmMin", "init_setFeaturesSelectedStyle", "FormRelation_exports", "__export", "FormRelation_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "ProjectsRegistry", "CatalogLayersStoresRegistry", "DataRouterService", "Geometry", "t", "Layer", "Feature", "toRawType", "GUI", "FormService", "fieldsMixin", "resizeMixin", "mediaMixin", "PickFeatureInteraction", "PickCoordinatesInteraction", "color", "SELECTED_STYLES", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_FormRelation", "__esmMin", "init_workflow", "init_step", "init_cloneFeature", "init_setAndUnsetSelectedFeaturesStyle", "init_promisify", "init_getRelationFieldsFromRelation", "init_getLayersDependencyFeatures", "init_getEditingLayerById", "init_convertToGeometry", "init_addTableFeature", "init_updateWorkflows", "init_getRelationId", "init_getFeatureTableFieldValue", "init_chooseFeatureFromFeatures", "init_isSameBaseGeometryType", "init_pickfeaturesinteraction", "init_eventbus", "init_workflows", "Workflow", "Step", "OpenFormStep", "OpenTableStep", "AddFeatureStep", "ModifyGeometryVertexStep", "MoveFeatureStep", "k", "v", "table", "external", "l", "layer", "is_vector", "bool", "r", "workflow", "options", "promisify", "e", "relation", "label", "name", "value", "clientid", "newrelation", "ts", "relations", "relationLayer", "getEditingLayerById", "featureId", "property", "getFeatureTableFieldValue", "c", "tools", "tool", "relationtool", "VM", "d", "promise", "resolve", "reject", "toolId", "relationfeature", "selectStyle", "cloneFeature", "addTableFeature", "outputs", "feature", "f", "setAndUnsetSelectedFeaturesStyle", "res", "unique_fields", "p", "w", "updateWorkflows", "rf", "unwatch", "isVector", "fatherField", "fatherValue", "relationField", "getRelationFieldsFromRelation", "newFeatures", "originalFeatures", "setRelationFieldValue", "field", "newFeature", "i", "keyRelationFeatureChange", "evt", "inputs", "ownField", "accumulator", "rField", "getRelationFeatures", "getLayersDependencyFeatures", "response", "linked", "rel", "originalRelation", "rF", "dialog", "parentLayer", "pk", "father", "fields", "parent", "_", "updatedrelations", "geometryType", "isSameBaseGeometryType", "features", "type", "a", "b", "externalLayer", "self", "$promisify", "editingLayer", "addStep", "PickFeaturesInteraction", "convertToGeometry", "_feature", "chooseFeatureFromFeatures", "attr", "getRelationId", "_vm", "_h", "_c", "$event", "attribute", "$$a", "$$el", "$$c", "$$v", "$$i", "_obj", "inject", "Table_exports", "__export", "Table_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "tPlugin", "GUI", "resizeMixin", "Media_Field", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_Table", "__esmMin", "init_step", "init_workflow", "init_workflows", "init_cloneFeature", "init_getRelationsInEditing", "init_getFeatureTableFieldValue", "init_addTableFeature", "init_promisify", "Workflow", "OpenFormStep", "k", "v", "type", "cap", "key", "name", "isMedia", "i", "header", "uid", "element", "layer", "layerId", "relationinediting", "getRelationsInEditing", "resolve", "reject", "result", "f", "feature", "session", "e", "cloneFeature", "Step", "addTableFeature", "outputs", "promisify", "newFeature", "_", "getFeatureTableFieldValue", "inputs", "evt", "addindex", "value", "_vm", "_h", "_c", "$event", "inject", "G3WObject", "ApplicationState", "Geometry", "convertSingleMultiGeometry", "removeZValueToOLFeatureGeometry", "Layer", "Feature", "GUI", "Component", "FormService", "AreaInteraction", "LengthInteraction", "createMeasureTooltip", "removeMeasureTooltip", "AddFeatureStep", "ModifyGeometryVertexStep", "MoveFeatureStep", "OpenFormStep", "OpenTableStep", "PickFeatureStep", "SelectElementsStep", "init_workflows", "__esmMin", "init_evaluateExpressionFields", "init_getParentFormData", "init_setFeaturesSelectedStyle", "init_setAndUnsetSelectedFeaturesStyle", "init_getFormFields", "init_chooseFeatureFromFeatures", "init_handleRelation1_1LayerFields", "init_listenRelation1_1FieldChange", "init_getLayersDependencyFeatures", "init_getEditingLayerById", "init_setLayerUniqueFieldValues", "init_getRelationsInEditingByFeature", "init_getFeatureTableFieldValue", "init_addRemoveToMultipleSelectFeatures", "init_promisify", "init_isSameBaseGeometryType", "init_pickfeaturesinteraction", "init_workflow", "init_step", "Step", "options", "e", "inputs", "context", "$promisify", "resolve", "reject", "promise", "r", "layerId", "setAndUnsetSelectedFeaturesStyle", "originalGeometryType", "source", "attributes", "feature", "attr", "is_line", "is_poly", "newFeature", "originalFeature", "features", "f", "evaluateExpressionFields", "isGeometryChange", "bool", "Workflow", "layerName", "field", "i", "fields", "getFormFields", "getLayersDependencyFeatures", "getEditingLayerById", "formService", "getParentFormData", "w", "valid", "task", "newFeatures", "handleRelation1_1LayerFields", "promisify", "service", "k", "v", "tool", "setLayerUniqueFieldValues", "getRelationsInEditingByFeature", "relation", "relations", "listenRelation1_1FieldChange", "d", "is_parent_table", "contextService", "unwatch", "headers", "h", "excludeFields", "feat", "a", "props", "header", "getFeatureTableFieldValue", "PickFeaturesInteraction", "chain", "layer", "type", "buttonnext", "done", "interactions", "chooseFeatureFromFeatures", "addRemoveToMultipleSelectFeatures", "setFeaturesSelectedStyle", "extent", "geometryType", "session", "l", "isSameBaseGeometryType", "geometry", "s", "CopyFeaturesFromOtherLayers_exports", "__export", "CopyFeaturesFromOtherLayers_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_CopyFeaturesFromOtherLayers", "__esmMin", "l", "id", "_vm", "_h", "_c", "layer", "areCoordinatesEqual", "feature", "coordinates", "geometry", "type", "coords", "c1", "c2", "c", "i", "poly", "_coords", "init_areCoordinatesEqual", "__esmMin", "Changes_exports", "__export", "Changes_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_Changes", "__esmMin", "init_areCoordinatesEqual", "init_getFeatureTableFieldValue", "feat", "key", "getFeatureTableFieldValue", "item", "efeat", "f", "areCoordinatesEqual", "a", "b", "d", "_vm", "_h", "_c", "c", "ref", "val", "commits", "inject", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "GUI", "Layer", "getResolutionFromScale", "tPlugin", "snapInteraction", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "Toolbox_default", "init_Toolbox", "__esmMin", "title", "e", "map", "toolId", "tool", "t", "l", "toolbox", "source", "evt", "f", "editing", "d", "event", "unwatch", "features", "bool", "newTools", "oldTools", "_obj", "_vm", "_h", "_c", "$event", "$$a", "$$el", "$$c", "$$v", "$$i", "inject", "Editing_exports", "__export", "Editing_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "GUI", "ApplicationState", "ApplicationService", "CatalogLayersStoresRegistry", "DataRouterService", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_Editing", "__esmMin", "init_Toolbox", "init_promisify", "_", "l", "layer", "Toolbox_default", "layers", "bool", "toolboxId", "toolbox", "layerId", "promisify", "e", "control", "t", "toolId", "enabled", "selected", "editor", "f", "modal", "unlock", "resolve", "reject", "changes", "promises", "layerIds", "commitItems", "canUndo", "canRedo", "n", "has_layers", "service", "is_commit", "is_selected", "owner", "setter", "key", "layerIdChanges", "inputs", "fids", "promise", "_vm", "_h", "_c", "$event", "editinglayer", "inject", "init_workflow", "init_step", "init_createEditingDataOptions", "init_setLayerUniqueFieldValues", "init_getRelationsInEditing", "init_getRelationId", "init_setAndUnsetSelectedFeaturesStyle", "init_chooseFeatureFromFeatures", "init_promisify", "chooseFeature", "inputs", "$promisify", "feature", "chooseFeatureFromFeatures", "init_cloneFeature", "init_evaluateExpressionFields", "getNotEditableFieldsNoPkValues", "layer", "feature", "fields", "field", "getDeltaXY", "x", "y", "coordinates", "coords", "_getCoordinates", "init_chooseFeatureFromFeatures", "init_convertToGeometry", "init_addTableFeature", "init_getRelationFieldsFromRelation", "init_getLayersDependencyFeatures", "init_getEditingLayerById", "init_getRelationsInEditingByFeature", "isPointOnVertex", "feature", "coordinates", "geometry", "type", "coords", "c", "poly", "init_cloneFeature", "init_evaluateExpressionFields", "Feature", "handleSplitFeature", "feature", "inputs", "context", "splittedGeometries", "newFeatures", "layer", "session", "source", "layerId", "oriFeature", "splittedGeometriesLength", "index", "splittedGeometry", "evaluateExpressionFields", "e", "newFeature", "cloneFeature", "noteditablefieldsvalues", "getNotEditableFieldsNoPkValues", "field", "value", "init_evaluateExpressionFields", "init_promisify", "addPartToMultigeometries", "inputs", "context", "$promisify", "feature", "originalFeature", "geometry", "evaluateExpressionFields", "e", "checkSessionItems", "historyId", "items", "action", "newItems", "item", "init_promisify", "init_workflow", "init_getRelationFieldsFromRelation", "init_updateWorkflows", "init_getEditingLayerById", "init_promisify", "GUI", "tPlugin", "unlinkRelation", "layerId", "relation", "relations", "index", "dialog", "$promisify", "resolve", "unlink", "id", "feature", "getEditingLayerById", "originalRelation", "getRelationFieldsFromRelation", "f", "Workflow", "updateWorkflows", "result", "splitFeature", "splitFeatures", "features", "splitfeature", "a", "f", "geometries", "init_isSameBaseGeometryType", "init_pickfeaturesinteraction", "init_workflows", "Workflow", "OpenFormStep", "SelectElementsStep", "PickFeatureStep", "MoveFeatureStep", "ModifyGeometryVertexStep", "OpenTableStep", "AddFeatureStep", "k", "v", "GEOMETRY_TYPES", "ApplicationState", "G3WObject", "ProjectsRegistry", "DataRouterService", "CatalogLayersStoresRegistry", "Geometry", "dissolve", "removeZValueToOLFeatureGeometry", "tPlugin", "Layer", "Feature", "debounce", "toRawType", "GUI", "getScaleFromResolution", "getResolutionFromScale", "ToolBox", "_ToolBox", "layer", "dependencies", "is_vector", "geometryType", "is_point", "is_line", "is_poly", "is_table", "isMultiGeometry", "iconGeometry", "editable_relations", "relation", "getRelationId", "r", "_", "prop", "options", "$promisify", "commitItems", "capabilities", "Step", "chooseFeature", "inputs", "context", "layerId", "feature", "relations", "getRelationsInEditing", "getEditingLayerById", "f", "getRelationFieldsFromRelation", "getLayersDependencyFeatures", "getRelationsInEditingByFeature", "unlinkRelation", "editingLayer", "promise", "resolve", "reject", "result", "fields", "setAndUnsetSelectedFeaturesStyle", "e", "features", "relationLayerId", "vueInstance", "workflow", "rLayer", "setLayerUniqueFieldValues", "promisify", "layers", "catalogService", "data", "updatelayers", "checkGeometry", "type", "isSameBaseGeometryType", "l", "i", "bool", "tool", "openFormStep", "originalLayer", "attributes", "a", "session", "source", "message", "PickFeaturesInteraction", "convertToGeometry", "_feature", "chooseFeatureFromFeatures", "name", "field", "isPointOnVertex", "coordinates", "evt", "x", "y", "deltaXY", "getDeltaXY", "featuresLength", "promisesDefaultEvaluation", "cloneFeature", "evaluateExpressionFields", "promises", "status", "noteditablefieldsvalues", "getNotEditableFieldsNoPkValues", "newFeature", "value", "addPartToMultigeometries", "originaLayer", "coordinate", "originalFeature", "geometry", "geometries", "map", "pixel", "tempLayer", "found", "g", "isSplitted", "splittedGeometries", "splitFeatures", "splittedGeometriesLength", "handleSplitFeature", "index", "deleteFeature", "addTableFeature", "op", "service", "relationId", "filter", "createEditingDataOptions", "constraints", "c", "stop", "in_editing", "showZoomCursor", "control", "id", "applicationConstraint", "toolboxheader", "startstopediting", "changingtools", "tools", "unKeyLock", "handlerAfterSessionGetFeatures", "is_started", "GIVE_ME_A_NAME", "fnc", "uw", "toolbox", "ids", "items", "__esPromise", "commit", "response", "title", "toolId", "editing_constraints", "excludetools", "UPDATEONEFEATUREONLYTOOLSID", "update_tools", "enableTools", "disableTools", "toolsId", "active", "disabledtools", "enabled", "ts", "t", "messages", "activeTool", "uniqueId", "s", "state", "idx", "checkSessionItems", "checkCommitItems", "canCommit", "commitItem", "currentStateIndex", "steps", "item", "add", "_item", "newFeat", "oldFeat", "removeNotEditableProperties", "editor", "oldFeature", "is_new", "changes", "change", "tc", "itemsToCommit", "commitObj", "key", "isRelation", "sessionRelation", "lockids", "is3DGeometry", "GeoJSONFormat", "itemObj", "childs_properties", "p", "relationsId", "addRelationId", "hideSidebar", "force", "init_promisify", "ApplicationState", "G3WObject", "FeaturesStore", "Layer", "OlFeaturesStore", "opts", "features", "id", "f", "uid", "feature", "index", "i", "Editor", "options", "$promisify", "doRequest", "bbox", "is_vector", "is_cached", "promisify", "items", "reverse", "Actions", "item", "layer", "changes", "response", "relations", "clientid", "properties", "r", "source", "ToolBox", "rFeature", "ff", "lockids", "commit", "relationId", "relation", "result", "init_step", "promisify", "promise", "resolve", "reject", "Queque", "task", "reverse", "Flow", "workflow", "step", "inputs", "runMicroTasks", "outputs", "e", "d", "ChangesManager", "object", "items", "fnc", "feature", "item", "Session", "_Session", "options", "features", "promisify", "commitItems", "_", "prop", "historyId", "action", "newItems", "stateId", "i", "s", "editor", "uniqueId", "c", "layerId", "removeNotEditableProperties", "f", "newFeature", "oldFeature", "is_new", "stateIds", "ids", "relations", "id", "states", "newFeat", "oldFeat", "changes", "change", "temporarychange", "itemsToCommit", "state", "layer", "commitObj", "key", "isRelation", "sessionRelation", "lockids", "GeoJSONFormat", "itemObj", "childs_properties", "r", "editingLayer", "geometryType", "__esPromise", "commit", "response", "err", "idx", "clear", "relationStates", "index", "_state", "unsetnewids", "unsetnewid", "currentState", "currentStateIndex", "checkCommitItems", "canCommit", "commitItem", "steps", "add", "_item", "sessions", "session", "init_workflow", "Session", "Editor", "ChangesManager", "Step", "Flow", "Workflow", "it_default", "en_default", "fi_default", "se_default", "fr_default", "de_default", "ro_default", "pl_default", "i18n_default", "it_default", "en_default", "fi_default", "se_default", "fr_default", "de_default", "ro_default", "pl_default", "init_workflow", "init_step", "init_promisify", "Feature", "createFeature", "layerId", "options", "feature", "toolbox", "editingLayer", "session", "init_getEditingLayerById", "init_setAndUnsetSelectedFeaturesStyle", "init_workflows", "G3W_FID", "ApplicationState", "ApplicationService", "CatalogLayersStoresRegistry", "t", "tPlugin", "Layer", "LayersStore", "Feature", "MapLayersStoreRegistry", "Plugin", "PluginService", "XHR", "noop", "GUI", "Panel", "serverErrorParser", "Geometry", "getScaleFromResolution", "getResolutionFromScale", "Workflow", "OpenFormStep", "AddFeatureStep", "ToolBox", "k", "v", "i18n_default", "layoutName", "target", "createFeature", "l", "status", "layer", "field", "type", "id", "options", "relationLayer", "has_filter", "response", "value", "key", "promisify", "feature", "features", "e", "i", "editingLayer", "fatherId", "relation", "isChildEditable", "f", "fid", "tb", "toolBox", "session", "scale", "w", "units", "map", "_layer", "source", "is_vector", "geom", "addPartTool", "op", "inputs", "context", "Step", "addPartToMultigeometries", "layerId", "event", "fnc", "subscribe", "sub", "sessionItems", "undoItems", "toolboxId", "items", "redoItems", "toolbox", "plugin", "toolboxes", "constraints", "showToolboxesExcluded", "toolboxIds", "commitpromises", "commitItems", "modal", "close", "messages", "online", "has_changes", "workflow", "dialog", "serverError", "$promisify", "resolve", "reject", "setAndUnsetSelectedFeaturesStyle", "data", "changes", "currLayerId", "current", "relationsIds", "has_relations", "GIVE_ME_A_NAME", "curr", "prev", "update", "u", "lock", "commit", "online2", "result", "n", "_rollback", "message", "action", "item", "name", "is_array", "oldVal", "newVal", "has_change", "relationSessionItems", "attributes", "attr", "stop", "cb", "a", "mode", "components", "opts", "relations", "add", "del", "getEditingLayerById", "has_features"] + "sources": ["../../../../../../../g3w-client/src/plugins/editing/utils/promisify.js", "../../../../../../../g3w-client/src/plugins/editing/g3wsdk/workflow/step.js", "../../../../../../../g3w-client/src/plugins/editing/components/UserMessage.vue", "../../../../../../../g3w-client/src/plugins/editing/g3wsdk/workflow/workflow.js", "../../../../../../../g3w-client/src/plugins/editing/utils/createEditingDataOptions.js", "../../../../../../../g3w-client/src/plugins/editing/utils/setLayerUniqueFieldValues.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getRelationId.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getRelationsInEditing.js", "../../../../../../../g3w-client/src/plugins/editing/utils/setFeaturesSelectedStyle.js", "../../../../../../../g3w-client/src/plugins/editing/utils/setAndUnsetSelectedFeaturesStyle.js", "../../../../../../../g3w-client/src/plugins/editing/components/ChooseFeatureToEdit.vue", "../../../../../../../g3w-client/src/plugins/editing/utils/chooseFeatureFromFeatures.js", "../../../../../../../g3w-client/src/plugins/editing/utils/cloneFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getParentFormData.js", "../../../../../../../g3w-client/src/plugins/editing/utils/evaluateExpressionFields.js", "../../../../../../../g3w-client/src/plugins/editing/utils/isSameBaseGeometryType.js", "../../../../../../../g3w-client/src/plugins/editing/utils/convertToGeometry.js", "../../../../../../../g3w-client/src/plugins/editing/utils/addTableFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getRelationFieldsFromRelation.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getLayersDependencyFeatures.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getEditingLayerById.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getRelationsInEditingByFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/updateWorkflows.js", "../../../../../../../g3w-client/src/plugins/editing/interactions/pickfeaturesinteraction.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getFormFields.js", "../../../../../../../g3w-client/src/plugins/editing/utils/handleRelation1_1LayerFields.js", "../../../../../../../g3w-client/src/plugins/editing/eventbus.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getRelation1_1ChildFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/listenRelation1_1FieldChange.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getFeatureTableFieldValue.js", "../../../../../../../g3w-client/src/plugins/editing/utils/addRemoveToMultipleSelectFeatures.js", "../../../../../../../g3w-client/src/plugins/editing/components/FormRelation.vue", "../../../../../../../g3w-client/src/plugins/editing/components/Table.vue", "../../../../../../../g3w-client/src/plugins/editing/workflows/index.js", "../../../../../../../g3w-client/src/plugins/editing/components/CopyFeaturesFromOtherLayers.vue", "../../../../../../../g3w-client/src/plugins/editing/utils/areCoordinatesEqual.js", "../../../../../../../g3w-client/src/plugins/editing/components/Changes.vue", "../../../../../../../g3w-client/src/plugins/editing/components/Toolbox.vue", "../../../../../../../g3w-client/src/plugins/editing/components/Editing.vue", "../../../../../../../g3w-client/src/plugins/editing/toolboxes/toolbox.js", "../../../../../../../g3w-client/src/plugins/editing/utils/chooseFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getNotEditableFieldsNoPkValues.js", "../../../../../../../g3w-client/src/plugins/editing/utils/getDeltaXY.js", "../../../../../../../g3w-client/src/plugins/editing/utils/isPointOnVertex.js", "../../../../../../../g3w-client/src/plugins/editing/utils/handleSplitFeature.js", "../../../../../../../g3w-client/src/plugins/editing/utils/addPartToMultigeometries.js", "../../../../../../../g3w-client/src/plugins/editing/utils/checkSessionItems.js", "../../../../../../../g3w-client/src/plugins/editing/utils/unlinkRelation.js", "../../../../../../../g3w-client/src/plugins/editing/utils/splitFeatures.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/it.js", "../../../../../../../g3w-client/src/plugins/editing/g3wsdk/editing/editor.js", "../../../../../../../g3w-client/src/plugins/editing/g3wsdk/index.js", "../../../../../../../g3w-client/src/utils/promisify.js", "../../../../../../../g3w-client/src/plugins/editing/deprecated.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/en.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/fi.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/se.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/fr.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/de.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/ro.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/pl.js", "../../../../../../../g3w-client/src/plugins/editing/i18n/index.js", "../../../../../../../g3w-client/src/plugins/editing/index.js", "../../../../../../../g3w-client/src/plugins/editing/utils/createFeature.js"], + "sourcesContent": ["/**\n * Migrate your consumer code away from jQuery promises.\n * Covert a jQuery promise into an ES6 Promise\n *\n * @param promise jquery promise\n */\nexport function promisify(promise) {\n if (promise instanceof Promise) {\n return promise;\n }\n if (!promise || !promise.then) {\n console.trace(promise);\n return Promise.reject('not a promise');\n }\n return new Promise((resolve, reject) => {\n promise.then(resolve).fail(reject);\n });\n}\n\n/**\n * Migrate your consumer code away from jQuery promises.\n * Convert ES6 Promise into jQuery\n *\n * @param promise async function or ES6 promise\n */\nexport function $promisify(promise) {\n if (undefined === promise) {\n console.trace();\n return $.Deferred(d => d.reject('not a promise')).promise();\n }\n if (promise.always) {\n return promise;\n }\n return $.Deferred(async d => {\n try { d.resolve(await (promise instanceof Promise ? promise : promise())); }\n catch (e) { console.warn(e); d.reject(e); }\n }).promise();\n}", "/**\n * @file\n * \n * ORIGINAL SOURCE: g3w-client/src/core/workflow/step.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.x\n */\nimport { promisify, $promisify } from '../../utils/promisify';\n\nconst { G3WObject } = g3wsdk.core;\nconst { isPointGeometryType } = g3wsdk.core.geoutils.Geometry;\nconst { Layer } = g3wsdk.core.layer;\nconst { GUI } = g3wsdk.gui;\n\n/**\n * @param options.input\n * @param options.context\n * @param options.task\n * @param options.outputs\n * @param options.escKeyPressEventHandler\n * @param options.id\n * @param options.name\n * @param options.help\n * @param options.message\n */\nexport class Step extends G3WObject {\n \n constructor(options = {}) {\n\n super();\n\n this._options = options;\n\n //store promise of current running step when call run\n this._run = (options.run || this.run || (async () => true)).bind(this);\n //store promise of current running step when call stop\n this._stop = (options.stop || this.stop || (async () => true)).bind(this);\n\n /**\n * @FIXME add description\n */\n this._inputs = options.inputs || null;\n\n /**\n * @FIXME add description\n */\n this._context = options.context || null;\n\n /**\n * @FIXME add description\n */\n this._outputs = options.outputs || null;\n\n /**\n * Dynamic state of a step\n */\n this.state = {\n id: options.id || null,\n name: options.name || null,\n help: options.help || null, // help to show what the user has to do\n running: false, // running\n error: null, // error\n message: options.message || null, // message\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n usermessagesteps: {}\n };\n\n this.registerEscKeyEvent(options.escKeyPressEventHandler)\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n this.selectStyle = options.selectStyle;\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n if (options.steps) {\n this.setSteps(options.steps);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/addfeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/addfeaturestep.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n if (options.onRun) {\n this.on('run', options.onRun);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/addfeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/addfeaturestep.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n if (options.onStop) {\n this.on('stop', options.onStop);\n }\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n if (options.tools) {\n this._tools = options.tools;\n }\n\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * Set and get task usefult properties used to run\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setInputs(inputs) {\n this._inputs = this.inputs = inputs;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getInputs() {\n return this._inputs;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @param context\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setContext(context) {\n return this._context = this.context = context;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getContext() {\n return this.context;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n panic() {\n console.log('Panic to implement ..');\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @param task\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setRoot(task) {\n this.state.root = task;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @returns { Object }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getUserMessageSteps() {\n return this.state.usermessagesteps;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @param steps\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setUserMessageSteps(steps = {}) {\n this.state.usermessagesteps = steps;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * \n * @param type\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setUserMessageStepDone(type) {\n if (type) {\n this.state.usermessagesteps[type].done = true;\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n addInteraction(interaction, events = {}) {\n GUI.getService('map').addInteraction(interaction);\n Object.entries(events).forEach(([type, handler]) => interaction.on(type, handler));\n this.on('stop', () => this.removeInteraction(interaction));\n return interaction;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n removeInteraction(interaction) {\n setTimeout(() => GUI.getService('map').removeInteraction(interaction)) // timeout needed to work around an Openlayers issue\n }\n\n /**\n * @TODO code implementation\n *\n * Get editing type from editing config\n *\n * @returns { null }\n */\n getEditingType() {\n return null;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n registerPointerMoveCursor() {\n GUI.getService('map').getMap().on(\"pointermove\", this._pointerMoveCursor)\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n unregisterPointerMoveCursor() {\n GUI.getService('map').getMap().un(\"pointermove\", this._pointerMoveCursor)\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param evt\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _pointerMoveCursor(evt) {\n this.getTargetElement().style.cursor = (this.forEachFeatureAtPixel(evt.pixel, () => true) ? 'pointer' : '');\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param steps\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setSteps(steps = {}) {\n this._steps = steps;\n this.setUserMessageSteps(steps);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @returns { Object }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getSteps() {\n return this._steps;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getMap() {\n return GUI.getService('map').getMap();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n *\n * Disable sidebar\n *\n * @param {Boolean} bool\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n disableSidebar(bool = true) {\n if (!this._isContentChild) {\n GUI.disableSideBar(bool);\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n *\n * @param event\n * @param options\n *\n * @returns {*}\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n fireEvent(event, options = {}) {\n return g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').fireEvent(event, options);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Handle single task\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n saveSingle(input, context) {\n context.session.save().then(() => g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').saveChange());\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Cancel single task\n *\n * @param input\n * @param context\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n cancelSingle(input, context) {\n context.session.rollback();\n }\n\n /**\n * Bind interrupt event on keys escape pressed\n * \n * @param evt.key\n * @param evt.data.callback\n * @param evt.data.task\n */\n escKeyUpHandler(evt) {\n if ('Escape' === evt.key) {\n evt.data.callback({ task: evt.data.task });\n }\n }\n\n /**\n * @FIXME add description\n */\n unbindEscKeyUp() {\n $(document).unbind('keyup', this.escKeyUpHandler);\n }\n\n /**\n * @FIXME add description\n */\n bindEscKeyUp(callback = () => {}) {\n $(document).on('keyup', { callback, task: this }, this.escKeyUpHandler);\n }\n\n /**\n * @listens run\n * @listens stop\n */\n registerEscKeyEvent(callback) {\n if (callback) {\n this.on('run', () => this.bindEscKeyUp(callback));\n this.on('stop', () => this.unbindEscKeyUp());\n }\n }\n\n /**\n * \n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Start task\n * \n * @param inputs\n * @param context\n * \n * @returns jQuery promise\n * \n * @fires run\n */ \n __run(inputs, context) {\n return $promisify(async() => {\n //set step inputs\n this.setInputs(inputs);\n //set step context\n this.setContext(context);\n\n const step = this;\n const toolsOfTools = {\n\n snap: {\n type: 'snap',\n options: {\n checkedAll: false,\n checked: false,\n active: true,\n run({ layer }) {\n this.active = true;\n this.layerId = layer.getId();\n this.source = layer.getEditingLayer().getSource();\n },\n stop() {\n this.active = false;\n }\n }\n },\n \n measure: {\n type: 'measure',\n options: {\n checked: false,\n run() {\n setTimeout(() => { this.onChange(this.checked); })\n },\n stop() {\n step.removeMeasureInteraction();\n this.onChange(false);\n },\n onChange(bool) {\n this.checked = bool;\n step[bool ? 'addMeasureInteraction': 'removeMeasureInteraction']();\n },\n }\n },\n \n };\n\n if (this._tools && 0 === this._workflow._toolsoftool.length) {\n this._workflow._toolsoftool.push(...(\n this._tools\n .filter(tool => ('measure' !== tool || (Layer.LayerTypes.VECTOR === inputs.layer.getType() && !isPointGeometryType(inputs.layer.getGeometryType()))))\n .map(tool => toolsOfTools[tool])\n ));\n }\n\n if (this._tools) {\n this._workflow._toolsoftool.forEach(t => t.options.run({ layer: inputs.layer }));\n this._workflow.emit('settoolsoftool', this._workflow._toolsoftool);\n }\n\n this.emit('run', { inputs, context });\n\n try {\n this.state.running = true; // change state to running\n return await promisify(this._run(inputs, context));\n } catch(e) {\n console.warn(e);\n this.state.error = e;\n return Promise.reject(e);\n } finally {\n this.__stop();\n }\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/task.js@v3.9.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n *\n * Stop step\n *\n * @fires stop\n */\n async __stop() {\n await this._stop(this._inputs, this._context); // stop task\n this.state.running = false; // remove running state\n if (this._workflow) {\n this._workflow._toolsoftool.forEach(t => t.options.stop());\n }\n this.emit('stop');\n }\n\n /**\n * @FIXME add description\n */\n getId() {\n return this.state.id;\n }\n\n /**\n * @FIXME add description\n */\n getName() {\n return this.state.name;\n }\n\n /**\n * @FIXME add description\n */\n getHelp() {\n return this.state.help;\n }\n\n /**\n * @FIXME add description\n */\n getError() {\n return this.state.error;\n }\n\n /**\n * @FIXME add description\n */\n getMessage() {\n return this.state.message;\n }\n\n /**\n * @FIXME add description\n */\n isRunning() {\n return this.state.running;\n }\n\n /**\n * @FIXME add description\n */\n getTask() {\n return this;\n }\n\n /**\n * @FIXME add description\n */\n setOutputs(outputs) {\n this._outputs = outputs;\n }\n\n /**\n * @FIXME add description\n */\n getOutputs() {\n return this._outputs;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @param workflow\n * @param tools\n * \n * @since g3w-client-editing@v3.8.0\n */\n setToolsOfTools(workflow, tools = [] ) {\n this._workflow = workflow;\n this._tools = tools;\n }\n\n}\n\n/**\n * @FIXME add description\n */\nStep.MESSAGES = {\n help: null,\n};", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n const __vue_script__ = {\n\n data: () => ({ steps: {} }),\n\n methods: {\n completeStep(step) {\n step.done = true;\n step.buttonnext.done();\n },\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',{staticClass:\"steps-list\"},_vm._l((_vm.steps),function(step,id){return _c('li',{key:id,class:{ 'done': step.done },style:({ display: step.buttonnext && 'inline-flex' })},[(step.buttonnext)?_c('span',{staticClass:\"button-step\"},[_c('span',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:(step.description),expression:\"step.description\"}],staticClass:\"description\"}),_vm._v(\" \"),(step.dynamic)?_c('span',{staticClass:\"dynamic-step\"},[_vm._v(_vm._s(step.dynamic))]):_vm._e(),_vm._v(\" \"),_c('button',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.workflow.next'),expression:\"'editing.workflow.next'\"}],class:'btn btn-success' + (step.buttonnext.disabled ? ' g3w-disabled' : '' ),staticStyle:{\"margin-left\":\"10px\"},on:{\"click\":function($event){return _vm.completeStep(step)}}})]):[_c('i',{class:_vm.g3wtemplate.getFontClass(step.done ? 'success' : 'empty-circle')}),_vm._v(\" \"),_c('span',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:(step.description),expression:\"step.description\"}]})]],2)}),0)}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-fa9bb800_0\", { source: \".steps-list[data-v-fa9bb800]{align-self:flex-start;list-style:none;padding:10px;margin-bottom:0}li[data-v-fa9bb800]{margin-bottom:5px}li.done[data-v-fa9bb800]{font-weight:700;color:green}li.done>.description[data-v-fa9bb800]{font-weight:700}.dynamic-step[data-v-fa9bb800]{padding:10px;font-size:1.2em}.button-step[data-v-fa9bb800]{display:inline-flex;align-items:center}.button-step[data-v-fa9bb800],button.btn-success[data-v-fa9bb800]{font-weight:700;align-self:normal}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-fa9bb800\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"UserMessage.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "\n/**\n * @file\n * \n * ORIGINAL SOURCE: g3w-client/src/core/workflow/workflow.js@v3.9.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.x\n */\n\nimport { Step } from './step';\nimport { promisify, $promisify } from '../../utils/promisify';\n\nconst { GUI } = g3wsdk.gui;\nconst { G3WObject } = g3wsdk.core;\n\n/**\n * Workflow Class (manage flow of steps)\n *\n * @param options.inputs\n * @param options.context\n * @param options.flow\n * @param options.steps\n * @param options.runOnce\n * @param options.backbuttonlabel\n */\nexport class Workflow extends G3WObject {\n \n constructor(options = {}) {\n\n super();\n\n /** @since g3w-client-plugin-editing@v3.8.0*/\n this._type = undefined !== options.type ? options.type : null;\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n this._options = options;\n\n /**\n * @FIXME add description\n */\n this._promise = null;\n\n /**\n * Mandatory inputs to work with editing\n */\n this._inputs = undefined !== options.inputs ? options.inputs : null;\n\n /**\n * @FIXME add description\n */\n this._context = undefined !== options.context ? options.context : null;\n\n /**\n * All steps of flow\n */\n this._steps = options.steps || [];\n\n /**\n * Whether is child of another workflow\n */\n this._child = null;\n\n /**\n * stack workflowindex\n */\n this._stackIndex = null;\n\n /**\n * Stop when flow stop\n */\n this.runOnce = options.runOnce || false;\n\n /**\n * @FIXME add description\n */\n this._messages = Step.MESSAGES;\n\n /**\n * Store user messages steps to show when workflow\n * use a mandatory steps (ex. select: {description}, merge: {description}}\n */\n this._userMessageSteps = {};\n\n if (this._steps.length > 0) {\n this.setUserMessagesSteps(this._steps);\n }\n\n /**\n * Holds back button label (in case of child workflow)\n * \n * @since 3.9.0\n */\n this.backbuttonlabel = undefined !== options.backbuttonlabel ? options.backbuttonlabel : null;\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n this.helpMessage = options.helpMessage ? { help: options.helpMessage } : null;\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n this._toolsoftool = [];\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n if (true === options.registerEscKeyEvent) {\n this.registerEscKeyEvent();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/flow.js@v3.9.1\n * \n * Current flow step\n * \n * @since g3w-client-editing@v3.8.0\n */\n this._stepIndex = 0;\n\n }\n\n /**\n *\n * @param steps\n */\n setUserMessagesSteps(steps) {\n this._userMessageSteps = steps\n .reduce((messagesSteps, step) => ({\n ...messagesSteps,\n ...(step.getUserMessageSteps() || {})\n }), {});\n }\n\n /**\n * Check if it is in same type\n *\n * @param {String | Array.} type\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n isType(type) {\n if (Array.isArray(type)) {\n return Boolean(type.find(t => t === this._type));\n }\n return type === this._type;\n }\n\n /**\n * @returns { * }\n */\n getContextService() {\n return this.getContext().service;\n }\n\n /**\n * @param service\n */\n setContextService(service) {\n this.getContext().service = service;\n }\n\n /**\n * @returns { null | * }\n */\n getStackIndex() {\n return this._stackIndex;\n }\n\n /**\n * @param workflow\n */\n addChild(workflow) {\n if (this._child) {\n this._child.addChild(workflow);\n } else {\n this._child = workflow;\n }\n }\n\n /**\n * @param input.key\n * @param input.value\n */\n setInput({ key, value }) {\n this._inputs[key] = value;\n }\n\n /**\n * @returns { null | * }\n */\n getInputs() {\n return this._inputs;\n }\n\n /**\n * @param context\n */\n setContext(context) {\n this._context = context;\n }\n\n /**\n * @returns { * | {} | null }\n */\n getContext() {\n return this._context;\n }\n\n /**\n * @param step\n */\n addStep(step) {\n this._steps.push(step);\n }\n\n /**\n * @param steps\n */\n setSteps(steps = []) {\n this._steps = steps;\n this.setUserMessagesSteps(steps);\n }\n\n /**\n * @returns { * | Array }\n */\n getSteps() {\n return this._steps;\n }\n\n /**\n * @param index\n * \n * @returns { * }\n */\n getStep(index) {\n return this._steps[index];\n }\n\n /**\n * @param messages\n */\n setMessages(messages) {\n Object.assign(this._messages, messages);\n }\n\n /**\n * @FIXME add description\n */\n getMessages() {\n return this._messages;\n }\n\n /**\n * @FIXME add description\n */\n clearMessages() {\n this._messages.help = null;\n if (Object.keys(this._userMessageSteps).length > 0) {\n this.clearUserMessagesSteps();\n }\n }\n\n /**\n * @returns { * | null }\n */\n getLastStep() {\n return this._steps.length > 0 ? this._steps[ this._steps.length - 1 ] : null;\n }\n\n /**\n * @returns { Object }\n */\n getRunningStep() {\n return this._steps.find(s => s.isRunning());\n }\n\n /**\n * @FIXME add description\n */\n reject() {\n if (this._promise) {\n this._promise.reject();\n }\n this.emit('reject');\n }\n\n /**\n * @FIXME add description\n */\n resolve() {\n if (this._promise) {\n this._promise.resolve();\n }\n }\n\n /**\n * Method to run steps of workflow\n * @param step\n * @param inputs\n * @return {Promise}\n */\n async runStep(step, inputs) {\n try {\n //set step message\n this.setMessages({ help: step.state.help });\n //run step\n const outputs = await promisify(step.__run(inputs, this.getContext()));\n // onDone \u2192 check if all step is resolved\n this._stepIndex++;\n //check if is the last of workflow steps\n if (this._stepIndex === this.getSteps().length) {\n this._stepIndex = 0;\n return outputs;\n } else {\n return this.runStep(this.getSteps()[this._stepIndex], outputs);\n }\n } catch(e) { //In case of reject\n this._stepIndex = 0;\n return Promise.reject(e);\n }\n }\n\n /**\n * Start workflow\n * \n * @param options.inputs\n * @param options.context\n * @param options.flow\n * @param options.steps\n * \n * @fires start\n */\n start(options = {}) {\n return $promisify( new Promise(async (resolve, reject) => {\n this._promise = { resolve, reject };\n this._inputs = options.inputs;\n this._context = options.context || {};\n \n const isChild = this._context.isChild || false;\n \n // stop child when a workflow is running \n if (\n !isChild\n && Workflow.Stack.getLength()\n && Workflow.Stack.getCurrent() !== this\n ) {\n Workflow.Stack.getCurrent().addChild(this)\n }\n\n //get stack index\n this._stackIndex = Workflow.Stack.push(this);\n //get steps\n this._steps = options.steps || this._steps;\n //for each step assign current workflow to _workflow\n (this._steps || []).forEach(s => s._workflow = this);\n \n const showUserMessage = Object.keys(this._userMessageSteps).length > 0;\n \n if (showUserMessage) {\n GUI.showUserMessage({\n title: 'plugins.editing.workflow.title.steps',\n type: 'tool',\n position: 'left',\n size: 'small',\n closable: false,\n hooks: {\n body: {\n ...require('../../components/UserMessage.vue').default,\n data: () => ({\n steps: this._userMessageSteps,\n })\n }\n }\n });\n }\n //emit start Workflow\n this.emit('start');\n \n try {\n console.assert(0 === this._stepIndex, `reset workflow before restarting: ${this._stepIndex}`)\n //start flow of workflow\n const outputs = await this.runStep(this.getSteps()[this._stepIndex], this.getInputs());\n //In case of show user message (tool steps)\n if (showUserMessage) {\n setTimeout(() => { this.clearUserMessagesSteps(); resolve(outputs); }, 500);\n } else {\n resolve(outputs);\n }\n } catch(e) {\n console.warn(e);\n if (showUserMessage) {\n this.clearUserMessagesSteps();\n }\n reject(e);\n }\n\n //in case of worflow that need to run once time, stop workflow\n if (this.runOnce) {\n this.stop();\n }\n }));\n }\n\n /**\n * Stop workflow during flow\n * \n * @fires stop\n */\n async stop() {\n return $promisify(new Promise(async (resolve, reject) => {\n\n this._promise = null;\n\n try {\n // stop child workflow\n if (this._child) {\n await promisify(this._child.stop());\n }\n } catch(e) {\n console.warn(e);\n }\n //remove child\n this._child = null;\n\n // stop flow\n try {\n //get current step\n const step = this.getSteps()[this._stepIndex];\n //check if it is running\n if (step.isRunning()) {\n //clear messages steps\n this.clearMessages();\n //wait stop run\n await step.__stop();\n }\n // reset counter and reject flow\n if (this._stepIndex > 0) {\n this._stepIndex = 0;\n reject();\n return Promise.reject();\n } else {\n resolve();\n }\n } catch(e) {\n console.warn(e);\n reject(e);\n }\n\n //remove workflow from stack\n Workflow.Stack.removeAt(this.getStackIndex());\n\n //emit stop Workflow\n this.emit('stop');\n\n }));\n }\n\n /**\n * Reset user message steps\n */\n clearUserMessagesSteps() {\n Object\n .keys(this._userMessageSteps)\n .forEach(type => {\n const step = this._userMessageSteps[type];\n step.done = false;\n if (step.buttonnext) {\n step.buttonnext.disabled = true;\n }\n })\n GUI.closeUserMessage();\n }\n\n /**\n * @since 3.9.0\n */\n setBackButtonLabel(label = null) {\n this.backbuttonlabel = label;\n }\n\n /**\n * @returns { null }\n * \n * @since 3.9.0\n */\n getBackButtonLabel() {\n return this.backbuttonlabel;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @param step\n * @param tools\n * \n * @since g3w-client-editing@v3.8.0\n */\n addToolsOfTools({ step, tools = [] }) {\n step.setToolsOfTools(this, tools);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n setHelpMessage(message) {\n this.helpMessage = { help: message };\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n getHelpMessage() {\n return this.helpMessage;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n getFeatures() {\n return this.getInputs().features;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n startFromLastStep(options = {}) {\n this.setSteps([ this.getSteps().pop() ]);\n return this.start(options);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n getCurrentFeature() {\n const feats = this.getFeatures();\n return feats[feats.length - 1];\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n getLayer() {\n return this.getInputs().layer;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n getSession() {\n return this.getContext().session;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * bind interupt event\n * \n * @since g3w-client-editing@v3.8.0\n */\n escKeyUpHandler(evt) {\n if (27 === evt.keyCode) {\n evt.data.workflow.reject();\n evt.data.callback();\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n unbindEscKeyUp() {\n $(document).unbind('keyup', this.escKeyUpHandler);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n bindEscKeyUp(callback = () => {}) {\n $(document).on('keyup', { workflow: this, callback }, this.escKeyUpHandler);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editingworkflow.js@v3.7.1\n * \n * @since g3w-client-editing@v3.8.0\n */\n registerEscKeyEvent(callback) {\n this.on('start', () => this.bindEscKeyUp(callback));\n this.on('stop', () => this.unbindEscKeyUp());\n }\n\n}\n\n/** @type { Workflow[] } */\nconst workflows = [];\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/services/workflow.js@v3.9.1\n * \n * Store all activated workflows\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nWorkflow.Stack = {\n _workflows: workflows,\n push(workflow) { return workflows.includes(workflow) ? workflows.indexOf(workflow) : (workflows.push(workflow) - 1); },\n getParent() { return workflows.slice(-2)[0]; },\n getParents() { return workflows.slice(0, -1); },\n pop() { return workflows.pop(); },\n getLength() { return workflows.length; },\n getFirst() { return workflows[0]; },\n getCurrent() { return Workflow.Stack.getLast(); },\n getLast() { return workflows.slice(-1)[0]; },\n removeAt(i) { workflows.splice(i, 1); },\n insertAt(i, w) { workflows[i] = w; },\n getAt(i) { return workflows[i]; },\n async clear() { workflows.splice(0); }\n};", "const { GUI } = g3wsdk.gui;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { 'all' | 'bbox' | 'field' | 'fid' | '1:1' } filterType\n * @param { Object } options\n * @param options.feature\n * @param options.relation\n * @param options.field\n * @param options.layerId\n * @param options.operator\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function createEditingDataOptions(filterType = 'all', options = {}) {\n let filter;\n\n switch (filterType) {\n\n case 'all':\n filter = undefined;\n break;\n\n case 'bbox':\n filter = { bbox: GUI.getService('map').getMapBBOX(), };\n break;\n\n case 'field':\n filter = {\n field: { field: options.field, type: 'editing' }\n };\n break;\n\n case 'fid':\n if ('not' !== options.operator) { // get relations of current feature\n filter = {\n fid: {\n fid: options.feature.getId(),\n layer: { id: options.layerId },\n type: 'editing',\n relation: options.relation.state,\n formatter: 0, // 0 = retrieve stored value\n }\n };\n }\n break;\n\n // relation 1:1\n case '1:1':\n filter = {\n field: options.relation.getChildField()[0] + '|eq|' + options.feature.get(options.relation.getFatherField()[0]),\n type: 'editing',\n }\n break;\n\n }\n\n return {\n registerEvents: true, // usefult to get register vent on toolbox example mapmoveend\n editing: true,\n filter\n };\n\n}", "const { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * Method to get unique values of unique input values from server\n * It's called\n * - When toolbox start (parent layer and relation)\n * - After commit to server (to get fresh new data)\n * \n * @param { string } layerId\n *\n * @returns { Promise<*> }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport async function setLayerUniqueFieldValues(layerId) {\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing'); //get editing service\n await new Promise((resolve, reject) => {\n const layer = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').getLayerById(layerId);\n //get all values for unique field\n layer.getWidgetData({\n type: 'unique',\n fields: Object.values(layer\n .getEditingFields()\n //filter field that is unique and not yet set unique values\n .filter(f => !(f.pk && false === f.editable) && ('unique' === f.input.type || f.validate.unique)))\n .map(f => f.name).join()\n }).then((response) => {\n Object\n .entries(response.data || {})\n .forEach(([name, values]) => {\n service.state.uniqueFieldsValues[layerId][name] = new Set(values)\n })\n\n resolve(service.state.uniqueFieldsValues[layerId][name])\n })\n .fail(e => { console.warn(e); reject(e); })\n })\n return service.state.uniqueFieldsValues[layerId];\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } opts\n * @param opts.layerId\n * @param opts.relation\n *\n * @returns the layer id of the other layer that is in relation with layerId\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getRelationId({\n layerId,\n relation,\n} = {}) {\n const fatherId = relation.getFather ? relation.getFather() : relation.father;\n const childId = relation.getChild ? relation.getChild() : relation.child;\n\n return layerId === fatherId ? childId : fatherId;\n}", "import { getRelationId } from '../utils/getRelationId';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } opts\n * @param opts.layerId\n * @param opts.relations\n *\n * @returns { Array }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getRelationsInEditing({\n layerId,\n relations = [],\n}) {\n return relations.filter(r => g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').getToolBoxById(getRelationId({ layerId, relation: r })));\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Get selected style from \"extracted\" original feature style \n * \n * @param feature\n * \n * @returns {{ originalStyle: *, selectedStyle: * }} selected style based on a geometry type\n */\nfunction getSelectedStyle(feature) {\n return {\n originalStyle: feature.getStyle(),\n selectedStyle: feature.getGeometry()\n ? g3wsdk.core.geoutils.createSelectedStyle({ geometryType: feature.getGeometry().getType() })\n : feature.getStyle()\n }\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Set selected style to feature and return original feature style\n * \n * @param { Array } features\n * @param { ol.style.Style } style @since 3.8.0 custom select style\n * \n * @returns { ol.style.Style }\n */\nexport function setFeaturesSelectedStyle(features = [], style) {\n if (features.length > 0) {\n // copy feature from other layers when selecting multiple features\n const arr = features.flat(); // flat nested features\n const { originalStyle, selectedStyle } = getSelectedStyle(arr[0]);\n\n arr.forEach(f => f.setStyle(style || selectedStyle));\n\n return originalStyle;\n }\n}", "import { Workflow } from '../g3wsdk/workflow/workflow';\nimport { promisify } from '../utils/promisify';\nimport { setFeaturesSelectedStyle } from '../utils/setFeaturesSelectedStyle';\n\nconst { Layer } = g3wsdk.core.layer;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Method that set selected style to current editing features and\n * reset original style when workflow (tool) is done.\n * \n * @param promise jQuery promise\n * @param { Object } inputs\n * @param { ol.style.Style } style\n */\nexport function setAndUnsetSelectedFeaturesStyle({ promise, inputs, style } = {}) {\n \n /** @FIXME temporary add in order to fix issue on pending promise (but which issue ?) */\n const {\n layer,\n features = [],\n } = inputs;\n\n /**\n * @TODO if coming from relation ( Workflow.Stack.getLength() > 1 )\n * no need setTimeout because we already it has selected style\n * so original is the same selected. In case of current layer\n * need to wait.\n */\n const selectOriginalStyleHandle = () => {\n const originalStyle = setFeaturesSelectedStyle(features, style);\n promisify(promise).finally(() => { features.flat().forEach((f => f.setStyle(originalStyle))) });\n };\n\n const is_vector = Layer.LayerTypes.VECTOR === layer.getType();\n const is_single = Workflow.Stack.getLength();\n\n if (is_vector && is_single) {\n setTimeout(() => selectOriginalStyleHandle());\n } else if (is_vector) {\n selectOriginalStyleHandle();\n }\n}", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n const { GUI } = g3wsdk.gui;\n\n const __vue_script__ = {\n\n name: 'choosefeature',\n\n data() {\n return {\n feature: this.$options.feature,\n };\n },\n\n methods: {\n\n selectFeature(feature) {\n this.feature.splice(0);\n this.feature.push(feature);\n },\n\n getAttributesFeature(feature) {\n const properties = feature.getProperties();\n return this.$options.attributes.map(({ label, name }) => ({ attribute: label, value: properties[name] }));\n },\n\n zoomToFeature(feature) {\n GUI.getService('map').zoomToFeatures([feature] , { highlight: true, duration: 1000 });\n },\n\n },\n\n mounted() {\n GUI.closeContent();\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"editing-layers-choose-feature\"}},_vm._l((_vm.$options.features),function(feature,index){return _c('div',{staticClass:\"editing-choose-feature-radio-input\"},[_c('section',{staticClass:\"choose-and-zoom-to-feature\"},[_c('div',[_c('input',{staticClass:\"magic-radio\",attrs:{\"id\":(\"choose_feature_\" + index),\"name\":\"radio\",\"type\":\"radio\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.selectFeature(feature)}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":(\"choose_feature_\" + index)}},[_vm._v(\"id\")])]),_vm._v(\" \"),_c('div',{staticClass:\"ztf skin-color\",class:_vm.g3wtemplate.font['marker'],on:{\"click\":function($event){$event.stopPropagation();return _vm.zoomToFeature(feature)}}})]),_vm._v(\" \"),_c('section',{staticClass:\"feature-attributes\"},_vm._l((_vm.getAttributesFeature(feature)),function(ref){\nvar attribute = ref.attribute;\nvar value = ref.value;\nreturn _c('div',[_c('span',{staticClass:\"f-attr\"},[_vm._v(_vm._s(attribute))]),_vm._v(\" \"),_c('span',{staticClass:\"f-val\"},[_vm._v(_vm._s(value))])])}),0)])}),0)}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-a5a3297e_0\", { source: \".choose-and-zoom-to-feature[data-v-a5a3297e]{display:flex;flex-direction:column;justify-content:space-between}#editing-layers-choose-feature .editing-choose-feature-radio-input[data-v-a5a3297e]{align-items:center;padding:5px;position:relative;display:flex;justify-content:space-between;border-bottom:1px solid #eee}.ztf[data-v-a5a3297e]{padding-left:3px;font-size:1.3em;cursor:pointer;margin-top:10px}.magic-radio+label[data-v-a5a3297e]{color:transparent}.feature-attributes[data-v-a5a3297e]{overflow-x:auto;display:flex}.feature-attributes>div[data-v-a5a3297e]{display:flex;flex-direction:column;justify-content:space-between;padding:5px}.f-attr[data-v-a5a3297e]{font-weight:700;margin-bottom:10px}.f-val[data-v-a5a3297e]{align-self:start;white-space:nowrap}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-a5a3297e\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"ChooseFeatureToEdit.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "const { tPlugin } = g3wsdk.core.i18n;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/g3w-editing-components/choosefeaturetoedit.js@v3.6\n * \n * @since g3w-client-plugin-editing@v3.5.13\n */\nexport function chooseFeatureFromFeatures({\n features = [],\n inputs\n}) {\n return new Promise((resolve, reject) => {\n\n const feature = [];\n\n const comp = new (Vue.extend(require('../components/ChooseFeatureToEdit.vue').default))({\n features: Array.isArray(features) ? features : [],\n feature,\n attributes: inputs.layer.getEditingFields().map(({ name, label }) => ({ name, label })),\n });\n\n const dialog = g3wsdk.gui.GUI.showModalDialog({\n title: tPlugin('editing.modal.tools.copyfeaturefromprojectlayer.title'),\n className: 'modal-left',\n closeButton: false,\n message: comp.$mount().$el,\n buttons: {\n cancel: { label: 'Cancel', className: 'btn-danger', callback() { reject(); } },\n ok: { label: 'Ok', className: 'btn-success', callback() { resolve(feature[0]) } }\n }\n });\n\n dialog.find('button.btn-success').prop('disabled', true);\n\n comp.$watch('feature', feature => dialog.find('button.btn-success').prop('disabled', null === feature));\n })\n}", "/**\n * Clone a feature by Primary Key\n * \n * @param { Feature } feature to be cloned\n * @param { TableLayer } layer from which obtain the primary key field\n * \n * @returns { Feature }\n * \n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport function cloneFeature(feature, layer) {\n const clone = feature.cloneNew();\n //check if layer has a primary key as field\n const pk = layer && layer.getEditingFields().find(f => f.pk); // get PK field (of value-relation widget?)\n /**\n * In case of layer has a primary key field and is not editabe,\n * clone feature need to set pk value to null to avoid conflict\n * with already pk field value store on server*/\n if (pk && false === pk.editable) { clone.set(pk.name, null) }\n return clone;\n}", "import { Workflow } from '../g3wsdk/workflow/workflow';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @returns { undefined | { feature: * , qgs_layer_id: * } }\n */\nexport function getParentFormData() {\n // skip when ..\n if (!(Workflow.Stack.getLength() > 1)) {\n return;\n }\n\n const {\n features,\n layer,\n fields = [],\n } = Workflow.Stack.getParent().getInputs();\n\n // in the case of temporary fields (setted by form) set temporary value to feature (cloned) parent\n const feature = features[features.length -1].clone();\n\n fields.forEach(({ name, value }) => { feature.set(name, value) });\n\n return {\n feature,\n qgs_layer_id: layer.getId(),\n };\n}", "import { getParentFormData } from './getParentFormData';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param expression.inputs.layer\n * @param expression.context.excludeFields\n * @param expression.context.get_default_value\n * @param expression.feature\n *\n * @returns {Promise}\n *\n * @since g3w-client-plugin-editing@v3.5.14\n */\nexport async function evaluateExpressionFields({\n inputs,\n context,\n feature,\n} = {}) {\n const promises = []; // promises from expression evaluation\n\n inputs.layer\n .getFieldsWithValues(\n feature,\n {\n exclude: context.excludeFields,\n get_default_value: undefined !== context.get_default_value ? context.get_default_value : false,\n }\n )\n .forEach(field => {\n\n // default expression\n if (field.input.options.default_expression && (field.input.options.default_expression.apply_on_update || feature.isNew())) {\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n await g3wsdk.core.input.inputService.handleDefaultExpressionFormInput({\n field,\n feature,\n qgs_layer_id: inputs.layer.getId(),\n parentData: getParentFormData(),\n });\n feature.set(field.name, field.value);\n resolve(feature)\n } catch(e) {\n console.warn(e);\n reject(e);\n }\n })\n );\n }\n\n // filter expression\n if (field.input.options.filter_expression) {\n promises.push(\n new Promise(async (resolve, reject) => {\n try {\n await g3wsdk.core.input.inputService.handleFilterExpressionFormInput({\n field,\n feature,\n qgs_layer_id: inputs.layer.getId(),\n parentData: getParentFormData(),\n });\n feature.set(field.name, field.value);\n resolve(feature)\n } catch(e) {\n console.warn(e);\n reject(e);\n }\n })\n );\n }\n\n });\n\n await Promise.allSettled(promises);\n\n return feature;\n}", "/**\n * ORIGINAL SOURCE: g3w-client/src/utils/isSameBaseGeometryType.js@v3.10.2\n * \n * @param { string } geometryType1\n * @param { string } geometryType2\n * \n * @returns { boolean } whether two geometry typeshave same geometry type or have in common tha same base geometry type:\n * \n * @example Compare \n * ```\n * Point <--> Point => true\n * MultiPoint <--> Point => true\n * Point <--> Polygon => false\n * ```\n * \n * @since g3w-client-plugin-editing@v3.9.0\n */\nexport function isSameBaseGeometryType(a, b) {\n return a.replace('Multi','') === b.replace('Multi','');\n}", "import { isSameBaseGeometryType } from '../utils/isSameBaseGeometryType';\n\nconst { convertSingleMultiGeometry } = g3wsdk.core.geoutils;\nconst {\n is3DGeometry,\n removeZValueToOLFeatureGeometry,\n addZValueToOLFeatureGeometry,\n} = g3wsdk.core.geoutils.Geometry;\n\nconst { isMultiGeometry } = g3wsdk.core.geoutils.Geometry;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param { Array } features to be converted (eg. Polygon)\n * @param { string } geometryType target geometry type (eg. MultiPolygon)\n *\n * @returns { Array } converted features\n */\nexport function convertToGeometry(features = [], geometryType) {\n return (features || []).flatMap(f => {\n const type = f.getGeometry() && f.getGeometry().getType();\n\n // ensure 3D coords\n if (type && !is3DGeometry(geometryType)) {\n removeZValueToOLFeatureGeometry({ feature: f });\n } else if (type && is3DGeometry(geometryType)) {\n addZValueToOLFeatureGeometry({ feature: f, geometryType });\n }\n\n // same geometry\n if (geometryType === type) { return f }\n\n // convert single \u2192 multi\n if (isSameBaseGeometryType(type, geometryType) && (isMultiGeometry(geometryType) || !isMultiGeometry(type))) {\n const cloned = f.clone();\n cloned.__layerId = f.__layerId;\n cloned.setGeometry(convertSingleMultiGeometry(f.getGeometry(), geometryType));\n return cloned;\n }\n\n // skip \u2192 invalid conversion (eg. Point \u2192 Polygon)\n return [];\n });\n}", "import { $promisify } from './promisify';\n/**\n * \n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/addfeaturetabletask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/addtablefeaturestep.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function addTableFeature(inputs, context) {\n const feature = inputs.features.length > 0 ? inputs.features[inputs.features.length - 1 ] : inputs.layer.createNewFeature();\n\n feature.setTemporaryId();\n\n inputs.layer.getEditingLayer().getEditingSource().addFeature(feature);\n\n context.session.pushAdd(inputs.layer.getId(), feature, false);\n\n inputs.features.push(feature);\n\n context.get_default_value = true;\n\n return $promisify(Promise.resolve(inputs, context));\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Based on layerId and relation, extract field of relation.\n * ownField are array of fields related to relation and belong to layerId\n * relationField area array of fields related to relation thar belong to other layer in relation with layerId\n * \n * @param { Object } opts\n * @param opts.layerId\n * @param opts.relation\n *\n * @returns {{ ownField: [], relationField: [] }} `ownField` and `relationField` are Arrays since g3w-client-plugin-editing@v3.7.0\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getRelationFieldsFromRelation({\n layerId,\n relation,\n} = {}) {\n /** @type { string } */\n const childId = relation.getChild ? relation.getChild() : relation.child;\n /** @type { Boolean } whether is a child */\n const isChild = childId !== layerId;\n /** @type { Array } of fields */\n const _fatherField = relation.getFatherField ? relation.getFatherField() : relation.fatherField;\n /** @type { Array } of fields */\n const _childField = relation.getChildField ? relation.getChildField() : relation.childField;\n\n return {\n ownField: isChild ? _fatherField : _childField,\n relationField: isChild ? _childField : _fatherField\n }\n}", "import { promisify } from '../utils/promisify';\nimport { getRelationFieldsFromRelation } from '../utils/getRelationFieldsFromRelation';\nimport { getRelationId } from '../utils/getRelationId';\nimport { getRelationsInEditing } from '../utils/getRelationsInEditing';\nimport { createEditingDataOptions } from '../utils/createEditingDataOptions';\n\nconst { ApplicationState } = g3wsdk.core;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { string } layerId\n * @param opts\n *\n * @returns { Promise[]> }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport async function getLayersDependencyFeatures(layerId, opts = {}) {\n\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing'); //get editing service\n\n const layer = service.getLayerById(layerId);\n const relations = opts.relations\n || layer.getChildren().length && layer.getRelations() && getRelationsInEditing({ layerId, relations: layer.getRelations().getArray().filter(r => r.getFather() === layerId) })\n || [];\n\n let response;\n\n try {\n response = await Promise.all(relations.map(async relation => {\n\n if (relation.setLoading) { relation.setLoading(true) }\n else { relation.loading = true }\n\n const id = getRelationId({ layerId, relation });\n\n opts.relation = relation;\n opts.layerId = layerId;\n opts.filterType = 'ONE' === (relation.getType ? relation.getType() : relation.type) ? '1:1' : opts.filterType; // In a case of relation 1:1\n const filterType = opts.filterType || 'fid';\n const options = createEditingDataOptions(filterType, opts);\n const session = service.state.sessions[id];\n const online = ApplicationState.online && session;\n const toolbox = service.getToolBoxById(id);\n\n // getLayersDependencyFeaturesFromSource\n\n opts.operator = undefined !== opts.operator ? opts.operator : 'eq'; \n\n const { ownField, relationField } = getRelationFieldsFromRelation({ layerId: id, relation });\n const features = service.getLayerById(layerId).readEditingFeatures();\n const featureValues = relationField.map(field => opts.feature.get(field));\n\n // try to get feature from source without a server request\n const find = (\n (!ApplicationState.online || !session || session.isStarted())\n && 'eq' === opts.operator\n && ownField.every((field, i) => features.find(f => featureValues[i] == f.get(field)))\n );\n\n toolbox.startLoading();\n\n try {\n if (online && !session.isStarted()) {\n await promisify(session.start(options)); // start session and get features\n } else if (online && !find) {\n await promisify(session.getFeatures(options)); // request features from server\n }\n } catch (promise) {\n try { await promisify(promise) } catch (e) { console.warn(e, promise); }\n }\n\n toolbox.stopLoading();\n\n return id;\n }));\n } catch (e) {\n console.warn(e);\n }\n\n // at the end se loading false\n relations.forEach(relation => {\n if (relation.setLoading) { relation.setLoading(false) }\n else { relation.loading = false }\n });\n\n return response;\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getEditingLayerById(layerId) {\n return g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').getLayerById(layerId);\n}", "import { getRelationFieldsFromRelation } from '../utils/getRelationFieldsFromRelation';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Get Relation in editing\n *\n * @param { Object } opts\n * @param opts.layerId\n * @param opts.relations\n * @param opts.feature\n *\n * @returns { Array }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getRelationsInEditingByFeature({\n layerId,\n relations = [],\n feature,\n} = {}) {\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n\n let relationsinediting = [];\n let relationinediting;\n relations.forEach(relation => {\n const child = relation.getChild ? relation.getChild() : relation.child;\n const father = relation.getFatherField ? relation.getFatherField() : relation.fatherField;\n const relationLayerId = (child === layerId) ? father: child; // get relation LayerId\n //check if the layer is editable\n if (service.getLayerById(relationLayerId)) {\n const layer = service.getToolBoxById(relationLayerId).getLayer();\n const fatherLayer = service.getLayerById(relation.getFather ? relation.getFather() : relation.father);\n const { ownField, relationField } = getRelationFieldsFromRelation({ layerId: relationLayerId, relation });\n // get features of relation child layers\n // Loop relation fields\n // In case of new feature, need to check if field is pk field\n const values = relationField.map(field => feature.isNew() && fatherLayer.isPkField(field) ? feature.getId() : feature.get(field));\n\n relationinediting = {\n relation: relation.getState(),\n // get relation attributes by feature\n relations: service\n .getLayerById(relationLayerId)\n .readEditingFeatures()\n .filter(feature => ownField.every((field, i) => feature.get(field) == values[i])) // get relations by feature\n .map(relation => ({\n fields: layer.getFieldsWithValues(relation, { relation: true }),\n id: relation.getId(),\n select: false, /** @since v3.9.0 Used to set relation select or not **/\n }))\n };\n relationinediting.validate = { valid: true };\n relationsinediting.push(relationinediting);\n }\n });\n return relationsinediting;\n}", "import { Workflow } from '../g3wsdk/workflow/workflow';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * force parent workflow form service\n * update only when workflow has service (form service)\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function updateWorkflows() {\n Workflow.Stack._workflows\n .filter(w => w.getContextService())\n .forEach(w => w.getContextService().setUpdate(true, { force: true }))\n}", "/**\n * @see https://openlayers.org/en/v5.3.0/apidoc/module-ol_interaction_Pointer.html\n */\nexport class PickFeaturesInteraction extends ol.interaction.Pointer {\n\n constructor(opts = {}) {\n let features = []; // picked features\n\n const featuresAtPixel = ({ pixel, map } = {}) => map.getFeaturesAtPixel(pixel, {\n layerFilter: l => opts.layer === l,\n hitTolerance: (isMobile && isMobile.any) ? 10 : 0,\n });\n\n super({\n handleDownEvent(e) {\n features = featuresAtPixel(e);\n return features;\n },\n handleUpEvent(e) {\n if (features && features.length > 0) {\n this.dispatchEvent({ type: 'picked', features, coordinate: e.coordinate, layer: opts.layer });\n }\n return true;\n },\n handleMoveEvent(e) {\n e.map.getTargetElement().style.cursor = featuresAtPixel(e) ? 'pointer': '';\n }\n });\n }\n\n}", "/** Sort an array of strings (alphabetical order) */\nconst sortAlphabeticallyArray = (arr) => arr.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));\n\n/* Sort an array of numbers (natural order) */\nconst sortNumericArray = (arr, ascending = true) => arr.sort((a, b) => (ascending ? (a - b) : (b - a)));\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Get form fields\n *\n * @param form.inputs.layer\n * @param form.inputs.features\n * @param form.context.excludeFields\n * @param form.context.get_default_value\n * @param form.isChild - whether is child form (ie. belongs to relation)\n * @param form.multi - in case of multi editing set all fields to null\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getFormFields({\n inputs,\n context,\n feature, //current feature\n multi, // true -> multi features (e.g edit multi features attributes form)\n} = {}) {\n\n //editing service\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n // current form layerId// unique values by feature field\n const layerId = inputs.layer.getId();\n\n const fields = inputs.layer.getFieldsWithValues( // editing fields with values (in case of update)\n feature,\n {\n exclude: context.excludeFields, // add exclude fields\n get_default_value: undefined === context.get_default_value ? false : context.get_default_value,\n }\n );\n\n //Loop through fields\n const unique_values = fields\n //check if field is a unique field. Exclude pk not edittable\n .filter(f => !(f.pk && false === f.editable) && ('unique' === f.input.type || f.validate.unique))\n .map(field => ({\n field, // feature field\n _value: feature.get(field.name), // feature current field value\n }))\n\n //Loop through unique fields\n unique_values.forEach(({ _value, field }) => {\n //get current stored unique values for field\n const current_values = service.state.uniqueFieldsValues[layerId][field.name] || new Set([]);\n //filter null value otherwise sort function gets an error\n const values = Array.from(current_values).filter(v => null !== v );\n //NEED TO ADD ALWAYS CURRENT VALUE\n field.input.options.values = (['integer', 'float', 'bigint'].includes(field.type) ? sortNumericArray: sortAlphabeticallyArray)(values);\n if (current_values.has(null)) {\n field.input.options.values.unshift(null);\n }\n\n // convert \"current\" values to string (when not null or undefined)\n current_values.forEach(v => field.validate.exclude_values.add(![null, undefined].includes(v)? `${v}` : v ) );\n\n // remove current value from exclude_values\n field.validate.exclude_values.delete(`${_value}`);\n });\n\n // skip when no fields are unique in multi features change form attribute\n if (0 === unique_values.length) {\n return _handleMulti(fields, multi);\n }\n\n // Listen to event method after close/save form\n const savedfeatureFnc = () => {\n unique_values.forEach(({ _value, field }) => {\n // initial value is the same that current field vale (no changed)\n if (_value === field.value) { return }\n // layer form\n if (service.state.uniqueFieldsValues[layerId][field.name]) {\n // change layer unique field values\n const values = service.state.uniqueFieldsValues[layerId][field.name];\n //If changed, delete it from _value\n values.delete(_value);\n //aff new one to value list unique field\n values.add(field.value);\n }\n });\n\n return { once: true };\n };\n\n //event when insert/edit form button is pressed\n service.subscribe(`savedfeature_${layerId}`, savedfeatureFnc);\n //event when close form layer\n service.subscribe(`closeform_${layerId}`, () => {\n //unsubscribe event\n service.unsubscribe(`savedfeature_${layerId}`, savedfeatureFnc);\n return { once: true };\n });\n\n return _handleMulti(fields, multi);\n}\n\nfunction _handleMulti(fields, multi) {\n if (multi) {\n fields = fields.map(field => {\n const f = JSON.parse(JSON.stringify(field));\n f.value = null;\n f._value = null; // @since v3.9.0 Fix update form field: Set the same value of value\n f.forceNull = true;\n f.validate.required = false; //set false because all features have already required field filled\n return f;\n }).filter(f => !f.pk)\n }\n\n return fields;\n}\n", "const { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Handle layer relation 1:1 features related to feature\n *\n * @param opts.layerId Root layerId\n * @param opts.features Array of update/new features belong to Root layer\n * @param opts.fields Array of form fields father\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport async function handleRelation1_1LayerFields({\n layerId,\n features = [],\n fields = [],\n task\n} = {}) {\n\n // skip when no features\n if (features.length === 0) { return }\n\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n\n // Get layer relation 1:1\n const promises = CatalogLayersStoresRegistry\n .getLayerById(layerId)\n .getRelations()\n .getArray()\n .filter(relation => 'ONE' === relation.getType())\n .map(relation => {\n return new Promise(async (resolve, reject) => {\n // skip when layer is not a father layer (1:1 relation)\n if (layerId !== relation.getFather()) {\n resolve();\n return;\n }\n const fatherField = relation.getFatherField()[0];\n const value = features[0].get(fatherField);\n\n //no set father field value. No set\n if (null === value) {\n resolve();\n return\n }\n\n // check if child relation layer is editable (in editing)\n const childLayerId = relation.getChild();\n const childField = relation.getChildField()[0];\n //In case of not editable child layer, exit\n if (!service.getLayerById(childLayerId)) {\n reject();\n return;\n }\n const source = service.getLayerById(childLayerId).getEditingSource();\n let childFeature; // original child feature\n let newChild; //eventually child feature cloned with changes\n\n //check if child feature is already added to\n childFeature = source.readFeatures().find(f => f.get(childField) === value)\n\n const fieldsUpdated = undefined !== service\n .getLayerById(relation.getFather())\n .getEditingFields()\n .filter(f => f.vectorjoin_id && f.vectorjoin_id === relation.getId())\n .find(({name}) => fields.find(f => name == f.name).update)\n\n const isNewChildFeature = undefined === childFeature;\n\n //check if fields related to child are changed\n if (fieldsUpdated) {\n //Check if we need to create a new child feature\n if (isNewChildFeature) {\n //create feature for child layer\n childFeature = new g3wsdk.core.layer.features.Feature();\n childFeature.setTemporaryId();\n // set name attribute to `null`\n CatalogLayersStoresRegistry\n .getLayerById(childLayerId)\n .getEditingFields()\n .forEach(field => childFeature.set(field.name, null));\n //set father field value\n childFeature.set(childField, fields.find(f => fatherField === f.name).value);\n //add feature to a child source\n source.addFeature(childFeature);\n //new feature and child feature are the same\n newChild = childFeature;\n } else {\n //is update\n if (childFeature) {\n //clone child Feature so all changes apply by father is set to clone new feature\n newChild = childFeature.clone();\n }\n }\n\n //check if there is a childFeature to save\n if (childFeature) {\n // Loop editable only field of father layerId when\n // a child relation (1:1) is bind to the current feature\n const editiableRelatedFieldChild = service\n .getLayerById(relation.getFather())\n .getEditingFields()\n .filter(f => f.vectorjoin_id && f.vectorjoin_id === relation.getId() && f.editable);\n\n editiableRelatedFieldChild\n .forEach(field => newChild.set(field.name.replace(relation.getPrefix(), ''), features[0].get(field.name)));\n\n // add relation new relation\n if (isNewChildFeature) {\n\n // check if father field is a Pk (Primary key) if feature is new\n if (service.getLayerById(layerId).isPkField(fatherField)) {\n childFeature.set(childField, features[0].getId()); // set temporary\n }\n\n //if new need to add to session\n task.getContext()\n .session\n .pushAdd(childLayerId, newChild, false);\n\n } else {\n //need to update source child feature\n source.updateFeature(newChild);\n //need to update\n task.getContext()\n .session\n .pushUpdate(childLayerId, newChild, childFeature);\n\n }\n }\n }\n\n resolve();\n\n })\n });\n\n await Promise.allSettled(promises);\n}", "/**\n * @file shared vue instance used to watch object changes or to emit events\n * \n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport const VM = new Vue();\n\nexport default { VM };", "import { getLayersDependencyFeatures } from '../utils/getLayersDependencyFeatures';\n\nconst { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\nconst { DataRouterService } = g3wsdk.core.data;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param { Object } opts\n * @param opts.relation\n * @param opts.fatherFormRelationField\n * \n * @returns {Promise<{feature: *, locked: boolean}>}\n * \n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport async function getRelation1_1ChildFeature({\n relation,\n fatherFormRelationField,\n}) {\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing'); //get editing service\n const fatherLayerId = relation.getFather();\n const childLayerId = relation.getChild(); // get relation child layer id\n const childField = relation.getChildField()[0];\n\n // lock feature false\n let locked = false;\n let feature = service.getLayerById(childLayerId)\n .getEditingSource()\n .readFeatures()\n .find(f => fatherFormRelationField.value === f.get(childField))\n\n //get feature from server and lock\n if (undefined === feature) {\n\n const childFeatureStore = service.getLayerById(childLayerId).getFeaturesStore();\n\n const unByKey = childFeatureStore.oncebefore('featuresLockedByOtherUser', features => feature = features[0])\n\n await getLayersDependencyFeatures(fatherLayerId, {\n feature: new ol.Feature({ [fatherFormRelationField.name]: fatherFormRelationField.value }),\n relations: [relation]\n });\n\n //remove listener\n childFeatureStore.un('featuresLockedByOtherUser', unByKey);\n\n //in case of no locked check feature on a source\n if (undefined === feature) {\n\n feature = service.getLayerById(childLayerId)\n .getEditingSource()\n .readFeatures()\n .find(f => fatherFormRelationField.value === f.get(childField))\n }\n\n }\n\n //not find on source need to check if exist\n if (undefined === feature) {\n\n try {\n const layer = CatalogLayersStoresRegistry.getLayerById(childLayerId);\n\n const { data } = await DataRouterService.getData('search:features', { // get feature of relation layer based on value of relation field\n inputs: {\n layer,\n formatter: 0,\n filter: g3wsdk.core.utils.createFilterFormInputs({\n layer,\n search_endpoint: 'api',\n inputs: [{ attribute: childField, value: fatherFormRelationField.value, }]\n }),\n search_endpoint: 'api',\n },\n outputs: false,\n });\n\n if (data && data[0] && 1 === data[0].features.length) { // NB: length == 1, due to 1:1 relation type\n //locked\n locked = true;\n feature = data[0].features[0];\n }\n } catch(e) {\n console.warn(e);\n }\n }\n\n //return\n return {\n feature, //feature search\n locked //locked status\n }\n}", "import { VM } from '../eventbus';\nimport { getRelation1_1ChildFeature } from './getRelation1_1ChildFeature';\n\nconst { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * Listen changes on 1:1 relation fields (get child values from child layer)\n *\n * @param opts.layerId Current editing layer id\n * @param opts.fields Array of form fields of current editing layer\n * @param opts.formService form service\n *\n * @returns Array of watch function event to remove listen\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport async function listenRelation1_1FieldChange({\n layerId,\n fields = [],\n formService,\n} = {}) {\n const unwatches = []; // unwatches field value (event change)\n\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing'); //get editing service\n\n const ONE = CatalogLayersStoresRegistry\n .getLayerById(layerId)\n .getRelations()\n .getArray()\n .filter(r => 'ONE' === r.getType())\n\n // get all relations 1:1 of current layer\n for (const relation of ONE) {\n\n const childLayerId = relation.getChild(); // get relation child layer id\n const fatherField = relation.getFatherField();\n const relationLockFeatures = {}; //store value\n\n // NB:\n // need to check if editable when opening form task\n // Not set this condition because maybe i ca be used this method\n // on a move task or other when current fatherFormRelationField, related to 1:1 relation\n // it can be changed by default expression or in another way not only with form\n const fatherFormRelationField = fields.find(f => fatherField.includes(f.name)); // get father layer field (for each relation)\n // skip when not relation field and not layer child is in editing\n if (!(fatherFormRelationField && service.getLayerById(childLayerId))) {\n return unwatches;\n }\n\n //store original editable property of fields relation to child layer relation\n const editableRelatedFatherChild = service\n .getLayerById(relation.getFather())\n .getEditingFields()\n .filter(f => f.vectorjoin_id && f.vectorjoin_id === relation.getId())\n .reduce((accumulator, field) => {\n const formField = fields.find(f => f.name === field.name)\n accumulator[formField.name] = formField.editable;\n return accumulator;\n }, {});\n\n fatherFormRelationField.input.options.loading.state = 'loading'; // show input bar loader\n\n //get feature from a child layer source\n relationLockFeatures[fatherFormRelationField.value] = await getRelation1_1ChildFeature({\n relation,\n fatherFormRelationField,\n })\n\n fatherFormRelationField.input.options.loading.state = null; // show input bar loader\n\n //if locked need to set editable to false\n //can update child\n if (relationLockFeatures[fatherFormRelationField.value].locked) {\n Object.keys(editableRelatedFatherChild)\n .forEach(fn => fields.find(f => fn === f.name).editable = false);\n }\n\n //if not feature is on source child layer, it means it locked or not exist on a server need to check\n // listen for relation field changes (vue watcher)\n unwatches.push(\n VM.$watch(\n () => fatherFormRelationField.value,\n async value => {\n\n // skip empty values\n if (!value) {\n fatherFormRelationField.input.options.loading.state = null;\n fatherFormRelationField.editable = true;\n return;\n }\n\n fatherFormRelationField.editable = false; // disable edit\n fatherFormRelationField.input.options.loading.state = 'loading'; // show input bar loader\n if (undefined === relationLockFeatures[fatherFormRelationField.value]) {\n //get feature from a child layer source\n try {\n\n relationLockFeatures[fatherFormRelationField.value] = await getRelation1_1ChildFeature({\n relation,\n fatherFormRelationField,\n })\n\n } catch (e) {\n console.warn(e);\n }\n }\n\n const { feature, locked } = relationLockFeatures[fatherFormRelationField.value];\n\n Object.keys(editableRelatedFatherChild)\n .forEach(fn => {\n const field = fields.find(f => fn === f.name);\n //set editable property\n field.editable = locked\n ? false\n : editableRelatedFatherChild[fn];\n //need to check if feature is new and not locked ot not present on a source\n field.value = feature\n ? feature.get(field.name.replace(relation.getPrefix(), ''))\n : null\n //@since 3.9.0 call change input to run eventually default expression\n formService.changeInput(field);\n });\n\n // reset edit state\n fatherFormRelationField.input.options.loading.state = null;\n fatherFormRelationField.editable = true;\n }\n )\n );\n }\n\n return unwatches;\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Finalize \"formatter\" value for any kind of field\n *\n * @param { string } opts.layerId\n * @param {ol.Feature} opts.feature\n * @param { string } opts.property\n *\n * @returns (field.key) or (field.value)\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\nexport function getFeatureTableFieldValue({\n layerId,\n feature,\n property\n} = {}) {\n // get editable fields\n const { fields } = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').getLayerById(layerId).config.editing;\n\n // get field value (raw)\n let value = feature.get(property);\n\n // get key-value fields implicated into: https://github.com/g3w-suite/g3w-client-plugin-editing/pull/64\n const values = (null !== value) &&\n (fields.filter(f => ['select_autocomplete', 'select'].includes(f.input.type)) || [])\n .reduce((kv, field) => { kv[field.name] = field.input.options.values; return kv; }, {});\n\n // get the last key-value feature add to\n const kv_field = values && values[property] && values[property].find(kv => value == kv.value);\n\n // return key for key-values fields (raw field value otherwise)\n return kv_field ? kv_field.key : value;\n}", "import { setFeaturesSelectedStyle } from '../utils/setFeaturesSelectedStyle';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/selectelementstask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/selectelementsstep.js@v3.7.1\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function addRemoveToMultipleSelectFeatures(features, inputs, selected, task) {\n (features || []).forEach(f => {\n const selIndex = selected.indexOf(f);\n if (selIndex < 0) {\n task._originalStyle = setFeaturesSelectedStyle([f]);\n selected.push(f);\n } else {\n selected.splice(selIndex, 1);\n f.setStyle(task._originalStyle);\n }\n inputs.features = selected;\n });\n\n const steps = task.getSteps();\n const buttonnext = steps.select.buttonnext;\n\n buttonnext.disabled = buttonnext.condition ? buttonnext.condition({ features: selected }) : 0 === selected.length;\n\n if (undefined !== steps.select.dynamic) {\n steps.select.dynamic = selected.length;\n }\n}", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n import { Workflow } from '../g3wsdk/workflow/workflow';\n import { Step } from '../g3wsdk/workflow/step';\n import { cloneFeature } from '../utils/cloneFeature';\n import { setAndUnsetSelectedFeaturesStyle } from '../utils/setAndUnsetSelectedFeaturesStyle';\n import { promisify, $promisify } from '../utils/promisify';\n import { getRelationFieldsFromRelation } from '../utils/getRelationFieldsFromRelation';\n import { getLayersDependencyFeatures } from '../utils/getLayersDependencyFeatures';\n import { getEditingLayerById } from '../utils/getEditingLayerById';\n import { convertToGeometry } from '../utils/convertToGeometry';\n import { addTableFeature } from '../utils/addTableFeature';\n import { updateWorkflows } from '../utils/updateWorkflows';\n import { getRelationId } from '../utils/getRelationId';\n import { getFeatureTableFieldValue } from '../utils/getFeatureTableFieldValue';\n import { chooseFeatureFromFeatures } from '../utils/chooseFeatureFromFeatures';\n import { isSameBaseGeometryType } from '../utils/isSameBaseGeometryType';\n import { PickFeaturesInteraction } from '../interactions/pickfeaturesinteraction';\n import { VM } from '../eventbus';\n import {\n OpenFormStep,\n OpenTableStep,\n AddFeatureStep,\n ModifyGeometryVertexStep,\n MoveFeatureStep,\n } from '../workflows';\n\n const { ProjectsRegistry } = g3wsdk.core.project;\n const { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\n const { DataRouterService } = g3wsdk.core.data;\n const { Geometry } = g3wsdk.core.geoutils;\n const { tPlugin:t } = g3wsdk.core.i18n;\n const { Layer } = g3wsdk.core.layer;\n const { Feature } = g3wsdk.core.layer.features;\n const { toRawType } = g3wsdk.core.utils;\n const { GUI } = g3wsdk.gui;\n const { FormService } = g3wsdk.gui.vue.services;\n const {\n fieldsMixin,\n resizeMixin,\n mediaMixin,\n } = g3wsdk.gui.vue.Mixins;\n const {\n PickFeatureInteraction,\n PickCoordinatesInteraction\n } = g3wsdk.ol.interactions;\n\n Object\n .entries({\n Workflow,\n Step,\n OpenFormStep,\n OpenTableStep,\n AddFeatureStep,\n ModifyGeometryVertexStep,\n MoveFeatureStep,\n })\n .forEach(([k, v]) => console.assert(undefined !== v, `${k} is undefined`));\n\n const color = 'rgb(255,89,0)';\n // Vector styles for selected relation\n const SELECTED_STYLES = {\n 'Point': new ol.style.Style({ image: new ol.style.Circle({ radius: 8, fill: new ol.style.Fill({ color }) }) }),\n 'MultiPoint': new ol.style.Style({ image: new ol.style.Circle({ radius: 8, fill: new ol.style.Fill({ color }) }) }),\n 'Linestring': new ol.style.Style({ stroke: new ol.style.Stroke({ width: 8, color }) }),\n 'MultiLinestring': new ol.style.Style({ stroke: new ol.style.Stroke({ width: 8, color }) }),\n 'Polygon': new ol.style.Style({ stroke: new ol.style.Stroke({ width: 8, color }), fill: new ol.style.Fill({ color }) }),\n 'MultiPolygon': new ol.style.Style({ stroke: new ol.style.Stroke({ width: 8, color }), fill: new ol.style.Fill({ color }) }),\n }\n\n const __vue_script__ = {\n\n mixins: [\n mediaMixin,\n fieldsMixin,\n resizeMixin,\n ],\n\n name: 'g3w-relation',\n\n data() {\n return {\n // relation, // \u2190 setted by `Vue.extend` - Relation instance: information about relation from parent layer and current relation layer (ex. child, fields, relationid, etc....) main relation between layerId (current in editing)\n // relations, // \u2190 setted by `Vue.extend` - array of relations object id,fields and select linked to current parent feature (that is in editing)\n // layerId, // \u2190 setted by `Vue.extend`\n loading : false,\n show_vector_tools: false, // whether show vector relation tools\n disabled: false, //disable relatins rows\n copylayerid: null, // used for vector relation layer\n copyFeatureLayers: [],\n active: false,\n value: null,\n placeholdersearch: `${t('editing.search')} ...`,\n resourcesurl: GUI.getResourcesUrl(),\n };\n },\n\n methods: {\n\n\n /**\n * Adapt table when a window is resized\n */\n resize() {\n // skip when a relation form is disabled (or hidden)\n if (!(this.active && 'none' !== this.$el.style.display)) {\n return;\n }\n\n const table = this.$refs.relation_body.querySelector('div.dataTables_scrollBody');\n\n if (table) {\n table.style.height =\n ((document.querySelector('.g3wform_body') || {}).offsetHeight || 0)\n - ((document.querySelector('.g3wform_footer') || {}).offsetHeight || 0)\n - ((this.$refs.relation_header_title || {}).offsetHeight || 0)\n - ((this.$refs.relation_header_tools || {}).offsetHeight || 0)\n - ((this.$el.querySelector('.dataTables_scrollHead') || {}).offsetHeight || 0)\n - ((this.$el.querySelector('.dataTables_paginate.paging_simple_numbers') || {}).offsetHeight || 0)\n - ((document.querySelector('.editing-save-all-form') || {}).offsetHeight || 0)\n - (( this.isVectorRelation && this.show_vector_tools && this.$refs.relation_vector_tools || {}).offsetHeight || 0)\n + 'px';\n }\n\n if (this.relationsTable) {\n this.relationsTable.columns.adjust();\n }\n\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * Add Relation from project layer\n */\n copyFeatureFromOtherLayer() {\n const copyLayer = this.copyFeatureLayers.find(l => this.copylayerid === l.id);\n let external = copyLayer.external;\n let layer = external ? GUI.getService('map').getLayerById(this.copylayerid) : CatalogLayersStoresRegistry.getLayerById(this.copylayerid);\n const is_vector = (external || layer.isGeoLayer())\n this.runAddRelationWorkflow({\n workflow: is_vector\n ? this._add_link_workflow.selectandcopy({\n copyLayer: layer,\n isVector: true,\n help: 'editing.steps.help.copy',\n external,\n })\n : undefined,\n isVector: is_vector\n })\n },\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n async closeVectorTools() {\n this.show_vector_tools = false;\n await this.$nextTick();\n this.resize();\n },\n\n /**\n * @FIXME add description\n */\n addVectorRelation() {\n this.runAddRelationWorkflow({\n workflow: this._add_link_workflow.add(),\n isVector: Layer.LayerTypes.VECTOR === this._layerType,\n });\n this.show_vector_tools = false;\n },\n\n /**\n * @since 3.9.0\n * update select relation attibute\n */\n updateSelectRelations() {\n //need to declare a variable bool, otherwise this.selectall ia a compued attribute that can change during loop\n const bool = !this.selectall || !this.relations.some(r => r.select);\n this.relations.forEach(r => r.select = bool);\n },\n\n /**\n * @since 3.9.0\n * Edit attributes of all relations\n */\n async editAttributesRelations() {\n const workflow = new Workflow({\n type: 'editmultiattributes',\n steps: [\n new OpenFormStep({ multi: true }),\n ],\n });\n const options = this._createWorkflowOptions({\n features: this.relations\n .filter(r => r.select)\n .map(({ id }) => this.getLayer().getEditingSource().getFeatureById(id) )\n });\n try {\n await promisify(workflow.start(options));\n } catch(e) {\n console.warn(e);\n }\n\n workflow.stop();\n\n },\n\n /**\n * @FIXME add description\n */\n async addRelationAndLink() {\n if (this.isVectorRelation) {\n this.show_vector_tools = !this.show_vector_tools;\n await this.$nextTick();\n this.resize();\n } else {\n this.runAddRelationWorkflow({\n workflow: this._add_link_workflow.add(),\n isVector: Layer.LayerTypes.VECTOR === this._layerType,\n });\n }\n },\n\n /**\n * @returns { Array } attributes \n */\n relationAttributesSubset(relation) {\n return relation.fields\n .map(({ label, name, value }) => ({ name, label, value }))\n .flatMap(({ name, label, value }) => Array.isArray(value) ? [] : [{ name, label, value }]);\n },\n\n /**\n * @FIXME add description\n */\n getValue(value) {\n if (value && 'Object' === toRawType(value)) {\n value = value.value;\n } else if ('string' == typeof value && 0 === value.indexOf('_new_')) {\n value = null;\n }\n this.value = value;\n return value;\n },\n\n /**\n * @FIXME add description\n */\n _createDataTable() {\n this.relationsTable = $(this.$refs.relationTable)\n .DataTable({\n autoWidth: false,\n columnDefs: [ { orderable: false, targets: [0, 1] } ],\n destroy: true,\n order: [ 2, 'asc' ],\n pageLength: 10,\n responsive: true,\n scrollCollapse: true,\n scrollResize: true,\n scrollX: true,\n });\n\n $(\".dataTables_filter, .dataTables_length\").hide();\n // set data table search\n $('#filterRelation').on('keyup', (e) => this.relationsTable.search(e.target.value).draw())\n },\n\n /**\n * @FIXME add description\n */\n destroyTable() {\n if (this.relationsTable) {\n this.relationsTable = this.relationsTable.destroy();\n this.relationsTable = null;\n $('#filterRelation').off();\n }\n },\n\n /**\n * @returns {Promise}\n * \n * @since g3w-client-plugin-editing@v3.7.0\n */\n async updateTable() {\n this.destroyTable(); // destroy old table\n await this.$nextTick(); // wait rerender\n this._createDataTable(); // recreate table\n setTimeout(() => this.resize())\n },\n\n /**\n * In case of commit new relation to server, update temporary relation.id (__new__)\n * to saved id on server. It is called when a new relation is saved on a relation form\n * after click on save all disks, and when save all disks are click on a list of relation\n * table.\n * \n * @since g3w-client-plugin-editing@v3.7.4\n */\n updateNewRelationId() {\n this._new_relations_ids.forEach(({ clientid, id }) => {\n const newrelation = this.relations.find(r => clientid === r.id);\n if (newrelation) {\n newrelation.id = id;\n //replace tools with new id\n (this.tools.find(ts => ts.find(t => t.state.id.split(`${clientid}_`).length > 1)) || [])\n .forEach(t => t.state.id = t.state.id.replace(`${clientid}_`, `${id}_`));\n }\n })\n\n },\n\n /**\n * Listen to commit on server when press disk icon saves all form\n * \n * @since g3w-client-plugin-editing@v3.7.4\n */\n onCommit({ relations = {} }) {\n const relationLayer = getEditingLayerById(this.relation.child);\n\n // there is a new relation saved on server\n if (relations[relationLayer.getId()] && Array.isArray(relations[relationLayer.getId()].new)) {\n this._new_relations_ids = [\n ...(this._new_relations_ids || []),\n ...relations[relationLayer.getId()].new.map(({ clientid, id }) => ({ clientid, id }))\n ]\n }\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing@v3.7.0/services/relationservice.js\n * \n * Get value from feature if layer has key value\n */\n getRelationFeatureValue(featureId, property) {\n return getFeatureTableFieldValue({\n layerId: this._relationLayerId,\n feature: this.getLayer().getEditingSource().getFeatureById(featureId),\n property,\n });\n },\n\n /**\n * Enable/Disable elements\n * \n * @param { Boolean } bool true enabled\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n enableDOMElements(bool = true) {\n document.querySelectorAll('.editing-save-all-form').forEach(c => {\n if (bool && c.classList.contains('g3w-disabled')) { c.classList.remove('g3w-disabled'); }\n if (!bool && !c.querySelector('.save-all-icon').classList.contains('g3w-disabled')) { c.classList.add('g3w-disabled'); }\n });\n document.querySelectorAll('.g3w-editing-relations-add-link-tools, .g3wform_footer').forEach(c => c.classList.toggle('g3w-disabled', !bool))\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n *\n * Add relation tools\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n addTools(id) {\n const tools = [\n\n // edit attributes\n this.capabilities.includes('change_attr_feature') && {\n state: Vue.observable({\n icon: 'editAttributes.png',\n id: `${id}_editattributes`,\n name: 'editing.tools.update_feature',\n enabled: true,\n active: false,\n }),\n type: 'editfeatureattributes',\n },\n\n // @since 3.9.0 copy featureonly for table layer\n Layer.LayerTypes.TABLE === this._layerType && this.capabilities.includes('add_feature') && {\n state: Vue.observable({\n icon: 'pasteFeaturesFromOtherLayers.png',\n id: `${id}_copyfeature`,\n name: 'editing.tools.copy',\n enabled: true,\n active: false,\n }),\n type: 'addfeature',\n },\n\n // delete feature\n this.capabilities.includes('delete_feature') && {\n state: Vue.observable({\n icon: 'deleteTableRow.png',\n id: `${id}_deletefeature`,\n name: 'editing.tools.delete_feature',\n enabled: true,\n active: false,\n }),\n type: 'deletefeature',\n },\n\n // other vector tools (e.g., move feature)\n this.capabilities.includes('change_feature') && Layer.LayerTypes.VECTOR === this._layerType && (\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing')\n .getToolBoxById(this._relationLayerId)\n .getTools()\n .filter(t => Geometry.isPointGeometryType(this.getLayer().getGeometryType())\n ? 'movefeature' === t.getId() // Point geometry\n : ['movefeature', 'movevertex'].includes(t.getId()) // Line or Polygon\n )\n .map(tool => ({\n state: Vue.observable({ ...tool, id: `${id}_${tool.id}` }),\n type: tool.getOperator().type,\n }))\n )\n\n ].flat().filter(Boolean);\n\n this.tools.push(tools);\n return tools;\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * @param relationtool\n * @param index\n * \n * @returns {Promise}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async startTool(relationtool, index) {\n try {\n relationtool.state.active = !relationtool.state.active;\n\n // skip when ..\n if (!relationtool.state.active) {\n return Promise.resolve();\n }\n\n this.tools.forEach(tools => {\n tools.forEach(t => { if (relationtool.state.id !== t.state.id) { t.state.active = false; } })\n });\n\n await VM.$nextTick();\n\n // do something with map features\n\n const d = {};\n const promise = new Promise((resolve, reject) => { Object.assign(d, { resolve, reject }) })\n\n const is_vector = Layer.LayerTypes.VECTOR === this._layerType;\n const relation = this.relations[index];\n const toolId = relationtool.state.id.split(`${relation.id}_`)[1];\n const relationfeature = this.getLayer().getEditingSource().getFeatureById(relation.id);\n const selectStyle = is_vector && SELECTED_STYLES[this.getLayer().getGeometryType()]; // get selected vector style\n const options = this._createWorkflowOptions({ features: [relationfeature] });\n\n //@since 3.9.0 COPY FEATURE FROM ATTRIBUTE TABLE LAYER\n if ('copyfeature' === toolId) {\n await (\n new Promise(async (resolve, reject) => {\n //replace current feature with clone\n options.inputs.features = [cloneFeature(relationfeature, this.getLayer())];\n // //need to sett original layer\n // options.inputs.layer = CatalogLayersStoresRegistry.getLayerById(this._relationLayerId);\n const workflow = new Workflow({\n type: 'addtablefeature',\n steps: [\n new Step({ help: 'editing.steps.help.new', run: addTableFeature }),\n new OpenFormStep(),\n ],\n });\n try {\n const outputs = await promisify(workflow.start(options));\n const feature = outputs.features[outputs.features.length - 1];\n this.relations.push({ id: feature.getId(), fields: this.getLayer().getFieldsWithValues(feature, { relation: true }) });\n resolve(feature);\n } catch(e) {\n console.warn(e);\n //in case of seva all click\n if (options.inputs && options.inputs.relationFeatures) {\n this.relations.push(\n ...(options.inputs.relationFeatures.newFeatures || []).map(f => ({ id: f.getId(), fields: this.getLayer().getFieldsWithValues(f, { relation: true }) }))\n )\n }\n reject(e);\n\n } finally {\n workflow.stop();\n relationtool.state.active = false;\n\n }\n })\n );\n }\n\n // DELETE FEATURE RELATION\n if ('deletefeature' === toolId) {\n\n setAndUnsetSelectedFeaturesStyle({ promise, inputs: { features: [ relationfeature ], layer: this.getLayer() }, style: selectStyle })\n\n GUI.dialog.confirm(\n t(\"editing.messages.delete_feature\"),\n res => {\n //confirm to delete\n if (res) {\n Workflow.Stack.getCurrent().getSession().pushDelete(this._relationLayerId, relationfeature);\n // remove feature from relation features\n this.relations.splice(index, 1);\n // remove tool from relation tools\n this.tools.splice(index, 1);\n // current relation layer fields\n const unique_fields = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.uniqueFieldsValues[this._relationLayerId];\n //check if relation layer has unique values stored\n if (undefined !== unique_fields) {\n Object\n .keys(relationfeature.getProperties())\n .filter(p => undefined !== unique_fields[p])\n .forEach(p => {\n const values = new Set(unique_fields[p]);\n //@TODO Check if we need remove\n values.delete(relationfeature.get(p));\n })\n }\n\n //remove feature from source\n this.getLayer().getEditingSource().removeFeature(relationfeature);\n // Check if relation feature delete is new.\n // In this case, we need to check if there are temporary changes not related to this current feature\n if (\n relationfeature.isNew()\n && undefined === Workflow.Stack\n ._workflows\n .find(w => w.getSession().state.changes.filter(({ feature }) => relationfeature.getUid() !== feature.getUid()).length > 0)\n ) {\n Workflow.Stack._workflows\n .filter(w => w.getContextService() instanceof FormService)\n .forEach(w => setTimeout(() => w.getContextService().state.update = false));\n } else {\n //set parent workflow update to enable to save all buttons\n updateWorkflows();\n }\n\n d.resolve(res);\n }\n\n //click\n if (!res) {\n d.reject();\n }\n\n }\n )\n }\n\n // EDIT ATTRIBUTE FEATURE RELATION\n if ('editattributes' === toolId) {\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/edittablefeatureworkflow.js@v3.7.1 */\n const workflow = new Workflow({ type: 'edittablefeature', steps: [ new OpenFormStep({ selectStyle }) ] });\n\n try {\n await promisify(workflow.start(options));\n\n //get relation layer fields\n this\n .getLayer()\n .getFieldsWithValues(relationfeature, { relation: true })\n .forEach(f => {\n relation.fields\n .forEach(rf => {\n //in case of sync feature get data value of sync feature\n if (rf.name === f.name) { rf.value = f.value; }\n })\n });\n d.resolve(true);\n } catch(e) {\n console.warn(e);\n d.reject(e);\n }\n\n workflow.stop();\n }\n\n // zoom to relation vector feature\n if (['movevertex', 'movefeature'].includes(toolId) && this.currentRelationFeatureId !== relationfeature.getId()) {\n this.currentRelationFeatureId = relationfeature.getId();\n GUI.getService('map').zoomToFeatures([ relationfeature ]);\n }\n\n // MOVE vertex or MOVE feature tool\n if (['movevertex', 'movefeature'].includes(toolId)) {\n // disable modal and buttons (saveAll and back)\n GUI.setModal(false);\n this.enableDOMElements(false);\n const workflow = new Workflow({\n type: relationtool.type,\n steps: [ new {\n 'movevertex': ModifyGeometryVertexStep,\n 'movefeature': MoveFeatureStep,\n }[toolId]({ selectStyle }) ]\n });\n\n // watch eventually deactive when another tool is activated\n const unwatch = VM.$watch(\n () => relationtool.state.active,\n bool => {\n if (!bool) {\n //need to enable saveAll and back\n this.enableDOMElements(true);\n GUI.setModal(true);\n workflow.unbindEscKeyUp();\n workflow.stop();\n unwatch();\n d.reject(false);\n }\n }\n )\n // bind listen esc key\n workflow.bindEscKeyUp(() => {\n GUI.setModal(true);\n unwatch();\n d.reject(false);\n });\n\n try {\n await promisify(workflow.start(options));\n\n Workflow.Stack\n .getParents()\n .filter(w => w.getContextService().setUpdate)\n .forEach(w => w.getContextService().setUpdate(true, { force: true }));\n d.resolve(true);\n setTimeout(() => this.startTool(relationtool, index));\n } catch(e) {\n console.warn(e);\n d.reject(e);\n }\n\n workflow.unbindEscKeyUp();\n workflow.stop();\n unwatch();\n }\n\n try {\n await promise;\n } catch (e) {\n console.trace('START TOOL FAILED', e);\n } finally {\n relationtool.state.active = false;\n }\n } catch(e) {\n console.warn(e);\n }\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * @returns {*}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getLayer() {\n return getEditingLayerById(this._relationLayerId);\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * Common method to add a relation\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async runAddRelationWorkflow({ workflow, isVector = false } = {} ) {\n\n if (isVector) {\n GUI.setModal(false);\n GUI.hideContent(true);\n }\n\n const options = this._createWorkflowOptions();\n\n //Get fields and values from parent feature\n //@TODO fatherField is Array of child fields related with parent layer. Need to rename it\n const { fatherField, fatherValue } = options.context;\n\n const { relationField } = getRelationFieldsFromRelation({\n layerId: this._relationLayerId,\n relation: this.relation\n });\n\n try {\n const outputs = await promisify(workflow.start(options));\n\n if (isVector) { workflow.bindEscKeyUp(); }\n \n const { newFeatures, originalFeatures } = outputs.relationFeatures;\n\n // Set Relation child feature value\n const setRelationFieldValue = ({ field, value }) => {\n newFeatures.forEach((newFeature, i) => {\n newFeature.set(field, value);\n if (options.parentFeature.isNew()) {\n originalFeatures[i].set(field, value);\n }\n this.getLayer().getEditingSource().updateFeature(newFeature);\n options.context.session.pushUpdate(this._relationLayerId, newFeature, originalFeatures[i]);\n })\n };\n fatherField.forEach((field, i) => setRelationFieldValue({ field, value: fatherValue[i] }));\n\n //check if parent feature is new and if parent layer has editable fields\n if (options.parentFeature.isNew() && this.getParent().editable.length > 0) {\n const keyRelationFeatureChange = options.parentFeature.on('propertychange', evt => {\n if (options.parentFeature.isNew()) {\n //check if input is relation field\n if (relationField.find(evt.key)) {\n //set value to relation field\n setRelationFieldValue({\n field: evt.key,\n value: evt.target.get(evt.key)\n });\n }\n } else {\n ol.Observable.unByKey(keyRelationFeatureChange);\n }\n })\n }\n\n this.relations.push(\n ...(newFeatures || []).map(f => ({ id: f.getId(), fields: this.getLayer().getFieldsWithValues(f, { relation: true }) }))\n )\n\n } catch(inputs) {\n console.warn(inputs);\n\n // in case of save all pressed on openformtask\n if (inputs && inputs.relationFeatures) {\n this.relations.push(\n ...(inputs.relationFeatures.newFeatures || []).map(f => ({ id: f.getId(), fields: this.getLayer().getFieldsWithValues(f, { relation: true }) }))\n )\n }\n\n options.context.session.rollbackDependecies([this._relationLayerId])\n }\n\n workflow.stop();\n\n if (isVector) {\n workflow.unbindEscKeyUp();\n GUI.hideContent(false);\n GUI.setModal(true);\n //need to resize to adjust table\n setTimeout(() => this.resize())\n }\n },\n\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * Link relation (bind) to parent feature layer\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async linkRelation() {\n this.disabled = true;\n\n const is_vector = Layer.LayerTypes.VECTOR === this._layerType;\n const workflow = this._add_link_workflow.link( is_vector ? {\n selectStyle: SELECTED_STYLES[this.getLayer().getGeometryType()]\n } : {});\n const options = this._createWorkflowOptions();\n const { ownField, relationField } = getRelationFieldsFromRelation({\n layerId: this._relationLayerId,\n relation: this.relation\n });\n\n //add options to exclude features from a link\n options.context.excludeFeatures = relationField.reduce((accumulator, rField, index) => {\n accumulator[ownField[index]] = this.getParent().values[rField];\n return accumulator;\n }, {});\n\n\n //check if a vector layer\n if (is_vector) {\n GUI.setModal(false);\n }\n\n const feature = Workflow.Stack.getCurrent().getCurrentFeature();\n\n const getRelationFeatures = () => getLayersDependencyFeatures(this.layerId, {\n relations: [this.relation],\n feature,\n operator: 'not',\n filterType: is_vector ? 'bbox' : 'fid'\n });\n\n let response = {\n promise: undefined,\n showContent: false,\n };\n\n if (is_vector) {\n options.context.beforeRun = async () => {\n await new Promise((resolve) => setTimeout(resolve));\n await getRelationFeatures();\n };\n\n workflow.bindEscKeyUp();\n\n response = {\n promise: workflow.start(options),\n showContent: true\n };\n\n this.enableDOMElements(false);\n\n } else {\n await getRelationFeatures();\n }\n\n let linked = false;\n\n try {\n const outputs = await promisify(response.promise || workflow.start(options));\n // loop on features selected\n (outputs.features || []).forEach(relation => {\n if (undefined === this.relations.find(rel => rel.id === relation.getId())) {\n linked = linked || true;\n const originalRelation = relation.clone();\n Object\n .entries(this.getParent().values)\n .forEach(([field, value]) => {\n relation.set(ownField[relationField.findIndex(rF => field === rF)], value);\n })\n Workflow.Stack.getCurrent().getSession().pushUpdate(this._relationLayerId , relation, originalRelation);\n this.relations.push({\n fields: this.getLayer().getFieldsWithValues(relation, { relation: true }),\n id: relation.getId()\n });\n } else {\n // in case already present\n GUI.notify.warning(t(\"editing.relation_already_added\"));\n }\n });\n } catch (e) {\n console.warn(e);\n options.context.session.rollbackDependecies([this._relationLayerId]);\n }\n\n if (is_vector) {\n this.enableDOMElements(true);\n }\n\n if (response.showContent) {\n GUI.closeUserMessage();\n workflow.unbindEscKeyUp();\n }\n\n if (linked) {\n updateWorkflows();\n }\n\n workflow.stop();\n\n this.disabled = false;\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * Unlink relation\n * \n * @param index\n * @param dialog\n * \n * @returns JQuery Promise\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n unlinkRelation(index, dialog = true) {\n return unlinkRelation({\n layerId: this.layerId,\n relation: this.relation,\n relations: this.relations,\n index,\n dialog,\n });\n },\n\n /**\n * @since 3.9.0\n * @return {{layerId, editable: *[], values: *, pk: *}}\n */\n getParent() {\n const parentLayer = this.parentWorkflow.getLayer();\n const { ownField } = getRelationFieldsFromRelation({ layerId: this.layerId, relation: this.relation });\n\n const pk = ownField.find(f => parentLayer.isPkField(f))\n\n /**\n * Father relation fields (editable and pk)\n */\n return {\n // get editable fields from parent layer editing fields\n editable: ownField.filter(f => parentLayer.isEditingFieldEditable(f)),\n // check if father field is a pk and is not editable\n pk,\n // Check if the parent field is editable.\n // If not, get the id of parent feature so the server can generate the right value\n // to fill the field with the relation layer feature when commit\n values: ownField.reduce((father, field) => {\n //get feature\n const feature = this.parentWorkflow.getCurrentFeature();\n //get fields of form because contains values that have temporary changes not yet saved\n // in case of form fields\n const fields = this.parentWorkflow.getInputs().fields;\n return Object.assign(father, {\n [field]: (pk === field && feature.isNew()) //check if isPk and parent feature isNew\n ? feature.getId()\n //check if fields are set (parent workflow is a form)\n // or for example, for feature property field value\n : fields ? fields.find(f => field === f.name).value: feature.get(field)\n });\n }, {}),\n };\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * @param options\n * \n * @returns {{parentFeature, inputs: {features: *[], layer: *}, context: {fatherValue: *, session: *, fatherField: *, excludeFields: *[]}}}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _createWorkflowOptions(options = {}) {\n const fields = getRelationFieldsFromRelation({\n layerId: this._relationLayerId,\n relation: this.relation\n });\n const parent = Object.entries(this.getParent().values);\n return {\n parentFeature: Workflow.Stack.getCurrent().getCurrentFeature(), // get parent feature\n context: {\n session: Workflow.Stack.getCurrent().getSession(), // get parent workflow\n excludeFields: fields.ownField, // array of fields to be excluded\n fatherValue: parent.map(([_, value]) => value), // values of parent fields in relation\n fatherField: parent.map(([field]) => fields.ownField[fields.relationField.findIndex(rField => field === rField)]), //children fields\n },\n inputs: {\n features: options.features || [],\n layer: this.getLayer()\n }\n };\n },\n\n },\n\n computed: {\n /**\n * @since v3.9.0\n * @return {Boolen} Tru in case all relations are selected\n */\n selectall() {\n return this.relations.every(r => r.select);\n },\n\n /**\n * @TODO find out where `this.relations` is setted\n * \n * @returns { boolean }\n */\n relationsLength() {\n return this.relations.length;\n },\n\n /**\n * @returns { boolean } whether has external fields (relation layer fields have at least one field required)\n */\n fieldrequired() {\n return getRelationFieldsFromRelation({ layerId: this._relationLayerId, relation: this.relation })\n .ownField // own Fields is a relation Fields array of Relation Layer\n .some(field => getEditingLayerById(this._relationLayerId).isFieldRequired(field));\n },\n\n /**\n * @returns { boolean } whether show adds link buttons\n */\n show_add_link() {\n return (0 === this.relations.length || 'ONE' !== this.relation.type);\n },\n\n },\n\n watch: {\n\n /**\n * @FIXME add description\n */\n relations(_, updatedrelations = []) {\n if (0 === updatedrelations.length) {\n this.destroyTable(); // destroy the table when there are no relations\n } else {\n // component is active (show) \u2192 need to update\n this.updateNewRelationId();\n this.updateTable(); // update table when deleting / adding row relations\n }\n\n },\n\n /**\n * Toggle dom element of relation table, based on show/hide creation of vector tools\n */\n show_vector_tools(bool) {\n this.enableDOMElements(!bool);\n this.disabled = bool;\n },\n },\n\n beforeCreate() {\n this.delayType = 'debounce';\n },\n\n created() {\n const relationLayer = getEditingLayerById(this.relation.child);\n\n /**\n * Array of new relations features objects saved on server id\n * {clientid, id} where client id is a temporary id of relation\n * feature, id is saved id on server.\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n this._new_relations_ids = [];\n\n this.onCommit = this.onCommit.bind(this);\n\n /** @since 3.7.2 Listen commit when is click on save all button disk icon*/\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').on('commit', this.onCommit);\n\n this.isVectorRelation = Layer.LayerTypes.VECTOR === relationLayer.getType();\n\n // vector relation \u2192 get all layers with the same geometry\n if (this.isVectorRelation) {\n const geometryType = relationLayer.getGeometryType();\n this.copyFeatureLayers = [\n // project layers with same geometry of relation ayer\n ...CatalogLayersStoresRegistry.getLayers({\n QUERYABLE: true,\n GEOLAYER: true,\n })\n .filter(l => ((\n l.getGeometryType &&\n l.getGeometryType() &&\n //exclude father layer and current relation layer\n ![this.relation.child, this.relation.father].includes(l.getId())\n ) && (\n l.getGeometryType() === geometryType ||\n (\n isSameBaseGeometryType(l.getGeometryType(), geometryType) &&\n Geometry.isMultiGeometry(geometryType)\n )\n ))\n )\n .map(l => ({\n id: l.getId(),\n name: l.getName(),\n external: false,\n })),\n\n // external layers with same geometry of relation layer\n ...GUI.getService('map').getExternalLayers('vector')\n .filter(l => {\n const features = l.getSource().getFeatures() || [];\n // skip when ..\n if (!features[0] || !features[0].getGeometry()) {\n return false;\n }\n const type = features[0].getGeometry().getType();\n return geometryType === type || (isSameBaseGeometryType(geometryType, type) && (Geometry.isMultiGeometry(geometryType) || !Geometry.isMultiGeometry(type)));\n })\n .map(l => ({\n id: l.get('id'),\n name: l.get('name'),\n external: true,\n })),\n\n ].sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())); // sorted by name\n //Listen add external Layer\n this.addExternalLayerKey = GUI.getService('catalog').onafter('addExternalLayer', ({ layer, type }) => {\n if ('vector' === type) {\n const externalLayer = GUI.getService('map').getExternalLayers().find(l => layer.id === l.get('id'));\n if (externalLayer) {\n const features = externalLayer.getSource().getFeatures() || [];\n if (!features[0] || !features[0].getGeometry()) { return }\n const type = features[0].getGeometry().getType();\n if (geometryType === type || (isSameBaseGeometryType(geometryType, type) && (Geometry.isMultiGeometry(geometryType) || !Geometry.isMultiGeometry(type)))) {\n this.copyFeatureLayers.push({\n id: externalLayer.get('id'),\n name: externalLayer.get('name'),\n external: true,\n })\n }\n }\n }\n })\n }\n\n this.copylayerid = this.copyFeatureLayers.length ? this.copyFeatureLayers[0].id : null; // current layer = first layer found\n\n this.loadEventuallyRelationValuesForInputs = false;\n\n // relation related to current feature of current layer in editing\n /**\n * Current relation feature (in editing)\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n this.currentRelationFeatureId = null;\n\n /**\n * layer id of relation layer\n */\n this._relationLayerId = this.relation.child === this.layerId ? this.relation.father : this.relation.child;\n\n /**\n * layer in relation type\n */ \n this._layerType = this.getLayer().getType();\n\n this.parentWorkflow = Workflow.Stack.getCurrent();\n\n /**\n * editing a constraint type\n */\n this.capabilities = this.parentWorkflow.getLayer().getEditingCapabilities();\n\n\n /**\n * relation tools\n */\n this.tools = [];\n\n const self = this;\n\n this._add_link_workflow = ({\n [Layer.LayerTypes.TABLE]: {\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/edittableworkflow.js@v3.7.1 */\n link(options = {}) {\n return new Workflow({\n ...options,\n type: 'edittable',\n backbuttonlabel: 'plugins.editing.form.buttons.save_and_back_table',\n steps: [ new OpenTableStep() ],\n });\n },\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addtablefeatureworkflow.js@v3.7.1 */\n add(options = {}) {\n return new Workflow({\n ...options,\n type: 'addtablefeature',\n steps: [\n new Step({ help: 'editing.steps.help.new', run: addTableFeature }),\n new OpenFormStep(),\n ],\n });\n },\n\n },\n [Layer.LayerTypes.VECTOR]: {\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/linkrelationworkflow.js@v3.7.1 */\n link(options = {}) {\n return new Workflow({\n type: 'linkrelation',\n steps: [\n new Step({\n ...options,\n help: \"editing.steps.help.select_feature_to_relation\",\n run(inputs, context) {\n return $promisify(new Promise(async (resolve, reject) => {\n //create a promise for setAndUnsetSelectedFeaturesStyle;\n const promise = new Promise(r => this.resolve = r);\n GUI.setModal(false);\n const editingLayer = inputs.layer.getEditingLayer();\n try {\n if (context.beforeRun && 'function' === typeof context.beforeRun) {\n await promisify(context.beforeRun());\n }\n const features = editingLayer.getSource().getFeatures().filter(f => Object.entries(context.excludeFeatures || {}).reduce((bool, [field, value]) => bool && value != f.get(field), true))\n setAndUnsetSelectedFeaturesStyle({\n promise: $promisify(promise),\n inputs: { layer: inputs.layer, features },\n style: this.selectStyle\n });\n\n this.addInteraction(\n new PickFeatureInteraction({ layers: [editingLayer], features }), {\n 'picked': e => {\n inputs.features.push(e.feature); // push relation\n GUI.setModal(true);\n resolve(inputs);\n }\n });\n } catch(e) {\n console.warn(e);\n reject(e);\n }\n }))\n },\n stop() {\n GUI.setModal(true);\n //resolve to resolve setAndUnsetSelectedFeaturesStyle\n this.resolve(true);\n this.resolve = null;\n return true;\n },\n })\n ]\n });\n },\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addfeatureworkflow.js@v3.7.1 */\n add: (options = {}) => {\n const addStep = new AddFeatureStep({\n ...options,\n steps: {\n draw: {\n description: `editing.steps.help.draw_new_feature`,\n done: false,\n }\n },\n tools: ['snap', 'measure']\n })\n\n addStep.on('stop', () => {\n addStep.setUserMessageStepDone('draw');\n GUI.closeUserMessage();\n })\n\n return new Workflow({\n ...options,\n type: 'addfeature',\n steps: [\n addStep,\n new OpenFormStep(options),\n ],\n registerEscKeyEvent: true,\n })\n },\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/selectandcopyfeaturesfromotherlayerworkflow.js@v3.7.1 */\n selectandcopy(options = {}) {\n return new Workflow({\n type: 'selectandcopyfeaturesfromotherlayer',\n steps: [\n // pick project layer features\n new Step({\n ...options,\n help: \"editing.steps.help.pick_feature\",\n steps: {\n select: {\n description: `editing.workflow.steps.selectPoint`,\n done: false,\n }\n },\n run(inputs, context) {\n /** @TODO Create a component that ask which project layer would like to query */\n if (!options.copyLayer) {\n return $promisify(Promise.resolve());\n }\n return $promisify(async () => {\n // get features from copyLayer\n let features = [];\n const geometryType = inputs.layer.getGeometryType();\n\n /** @TODO NO VECTOR LAYER */\n if (options.isVector) {\n await (new Promise(async resolve => {\n this.addInteraction(\n options.external\n ? new PickFeaturesInteraction({ layer: options.copyLayer })\n : new PickCoordinatesInteraction(), {\n 'picked': async e => {\n try {\n features = convertToGeometry(\n options.external\n ? e.features // external layer\n : ((await DataRouterService.getData('query:coordinates', { // TOC/PROJECT layer\n inputs: {\n coordinates: e.coordinate,\n query_point_tolerance: ProjectsRegistry.getCurrentProject().getQueryPointTolerance(),\n layerIds: [ options.copyLayer.getId() ],\n multilayers: false\n },\n outputs: null\n })).data[0] || { features: [] }).features,\n geometryType,\n )\n } catch(e) {\n console.warn(e);\n } finally {\n resolve()\n }\n }\n }\n );\n }));\n }\n\n let _feature;\n\n try {\n _feature = features.length > 1\n ? await promisify(chooseFeatureFromFeatures({ features, inputs }))\n : features[0];\n } catch (e) {\n console.warn(e);\n }\n\n if (_feature) {\n const feature = new Feature({\n feature: _feature,\n properties: inputs.layer.getEditingFields().filter(attr => !attr.pk).map(attr => attr.name)\n });\n feature.setTemporaryId();\n inputs.features = [feature];\n inputs.layer.getEditingLayer().getSource().addFeature(feature);\n context.session.pushAdd(inputs.layer.getId(), feature, false);\n return inputs;\n }\n\n GUI.showUserMessage({\n type: 'warning',\n message: 'plugins.editing.messages.no_feature_selected',\n closable: false,\n autoclose: true\n });\n\n return Promise.reject();\n });\n },\n stop() {\n self.show_vector_tools = false;\n this.setUserMessageStepDone('select');\n GUI.closeUserMessage();\n }\n }),\n new OpenFormStep(options),\n ],\n registerEscKeyEvent: true,\n });\n },\n\n },\n })[this._layerType];\n\n // add tools for each relation\n this.relations.forEach(r => this.addTools(r.id) );\n },\n\n async activated() {\n //in the case of vector relation, the current extent of map whe is actived\n //it used to sto an extent of the map at the moment of possibible editing (and zoom)\n // to relation feature\n if (this.isVectorRelation) {\n this.mapExtent = GUI.getService('map').getMapBBOX();\n }\n\n this.show_vector_tools = false;\n\n if (!this.loadEventuallyRelationValuesForInputs) {\n this.loading = true;\n\n try {\n await g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').runEventHandler({\n type: 'show-relation-editing',\n id: getRelationId({ layerId: this.layerId, relation: this.relation }),\n component: this,\n });\n } catch(e) {\n console.warn(e)\n }\n\n this.loading = false;\n\n this.loadEventuallyRelationValuesForInputs = true;\n }\n\n this.active = true;\n\n await this.$nextTick();\n\n if (!this.relationsTable && this.relations.length > 0) {\n this._createDataTable();\n }\n\n\n this.resize();\n },\n\n deactivated() {\n this.destroyTable();\n this.active = false;\n //need to unselect relaion when click on back control form\n this.relations.forEach(r => r.select = false);\n\n },\n\n beforeDestroy() {\n this.loadEventuallyRelationValuesForInputs = true;\n // unlisten\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').off('commit', this.onCommit);\n // In the case of vector relation, restore the beginning extent of the map;\n // in the case we zoomed to relation feature\n if (this.isVectorRelation && (null !== this.currentRelationFeatureId)) {\n GUI.getService('map').zoomToExtent(this.mapExtent);\n this.mapExtent = null;\n }\n //remove event\n if (this.addExternalLayerKey) {\n GUI.getService('catalog').un('addExternalLayer', this.addExternalLayerKey);\n this.addExternalLayerKey = null;\n }\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(_vm.loading),expression:\"loading\"}],staticStyle:{\"margin-bottom\":\"5px\"}},[_c('bar-loader',{attrs:{\"loading\":_vm.loading}}),_vm._v(\" \"),_c('div',{ref:\"relation_header_title\",staticClass:\"relation_header_title box-header with-border skin-color\"},[_c('span',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.edit_relation'),expression:\"'editing.edit_relation'\"}]}),_vm._v(\" \"),_c('span',{staticStyle:{\"margin-left\":\"2px\"}},[_vm._v(\": \"+_vm._s(_vm.relation.name.toUpperCase()))])]),_vm._v(\" \"),_c('div',{ref:\"relation_header_tools\",staticClass:\"relation_header_tools box-header with-border\"},[_c('div',{attrs:{\"id\":\"search-box\"}},[(_vm.relationsLength)?_c('input',{staticClass:\"form-control\",attrs:{\"type\":\"text\",\"id\":\"filterRelation\",\"placeholder\":_vm.placeholdersearch}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"g3w-editing-relations-add-link-tools\"},[(_vm.relationsLength > 0 && _vm.capabilities.includes('change_attr_feature'))?_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:bottom.create\",value:('plugins.editing.tools.update_multi_features_relations'),expression:\"'plugins.editing.tools.update_multi_features_relations'\",arg:\"bottom\",modifiers:{\"create\":true}}],staticClass:\"g3w-icon\"},[_c('span',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(_vm.relations.every(function (r) { return !r.select; })),expression:\"relations.every(r => !r.select)\"}],on:{\"click\":function($event){$event.stopPropagation();return _vm.editAttributesRelations()}}},[_c('img',{attrs:{\"height\":\"25\",\"width\":\"25\",\"src\":(_vm.resourcesurl + \"images/multiEditAttributes.png\")}})])]):_vm._e(),_vm._v(\" \"),(_vm.capabilities.includes('change_attr_feature'))?_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:bottom.create\",value:('plugins.editing.form.relations.tooltips.link_relation'),expression:\"'plugins.editing.form.relations.tooltips.link_relation'\",arg:\"bottom\",modifiers:{\"create\":true}}],staticClass:\"g3w-icon add-link\",class:[{ 'disabled': !_vm.show_add_link }, _vm.g3wtemplate.font['link']],attrs:{\"align\":\"center\"},on:{\"click\":function($event){$event.stopPropagation();_vm.show_add_link ? _vm.linkRelation() : null}}}):_vm._e(),_vm._v(\" \"),(_vm.capabilities.includes('add_feature'))?_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:bottom.create\",value:('plugins.editing.form.relations.tooltips.add_relation'),expression:\"'plugins.editing.form.relations.tooltips.add_relation'\",arg:\"bottom\",modifiers:{\"create\":true}}],staticClass:\"g3w-icon add-link pull-right\",class:[{ 'disabled' : !_vm.show_add_link }, _vm.g3wtemplate.font['plus']],on:{\"click\":function($event){$event.stopPropagation();_vm.show_add_link ? _vm.addRelationAndLink() : null}}}):_vm._e()])]),_vm._v(\" \"),(_vm.show_vector_tools)?_c('section',{ref:\"relation_vector_tools\",staticClass:\"relation_vector_tools\"},[_c('span',{staticClass:\"close_vector_relation_tool\",on:{\"click\":function($event){$event.stopPropagation();return _vm.closeVectorTools.apply(null, arguments)}}},[_c('i',{staticClass:\"g3w-icon skin-color\",class:_vm.g3wtemplate.font['close']})]),_vm._v(\" \"),_c('div',[_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.relation.draw_new_feature'),expression:\"'editing.relation.draw_new_feature'\"}],staticClass:\"g3w-editing-new-relation-vector-type\"}),_vm._v(\" \"),_c('button',{staticClass:\"btn skin-button\",staticStyle:{\"width\":\"100%\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.addVectorRelation.apply(null, arguments)}}},[_c('i',{class:_vm.g3wtemplate.font['pencil']})])]),_vm._v(\" \"),_c('section',[_c('span',{staticClass:\"divider\"}),_vm._v(\" \"),_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.relation.draw_or_copy'),expression:\"'editing.relation.draw_or_copy'\"}],staticStyle:{\"align-self\":\"center\"}}),_vm._v(\" \"),_c('span',{staticClass:\"divider\"}),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"g3w-select-editable-layers-content\"}},[_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.relation.copy_feature_from_other_layer'),expression:\"'editing.relation.copy_feature_from_other_layer'\"}],staticClass:\"g3w-editing-new-relation-vector-type\"}),_vm._v(\" \"),_c('select',{directives:[{name:\"select2\",rawName:\"v-select2\",value:('copylayerid'),expression:\"'copylayerid'\"}],attrs:{\"id\":\"g3w-select-editable-layers-to-copy\"}},_vm._l((_vm.copyFeatureLayers),function(layer){return _c('option',{key:layer.id,domProps:{\"value\":layer.id}},[_vm._v(_vm._s(layer.name))])}),0),_vm._v(\" \"),_c('button',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(0 === _vm.copyFeatureLayers.length),expression:\"0 === copyFeatureLayers.length\"}],staticClass:\"btn skin-button\",on:{\"click\":function($event){$event.stopPropagation();return _vm.copyFeatureFromOtherLayer.apply(null, arguments)}}},[_c('i',{class:_vm.g3wtemplate.font['clipboard']})])])])]):_vm._e(),_vm._v(\" \"),_c('div',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(_vm.disabled),expression:\"disabled\"}],ref:\"relation_body\",staticClass:\"relation_body box-body\"},[(_vm.relationsLength > 0 && !_vm.update)?_c('table',{ref:\"relationTable\",staticClass:\"table g3wform-relation-table table-striped nowrap\"},[_c('thead',[_c('tr',[_c('th',{staticStyle:{\"padding\":\"10px\"}},[_c('input',{staticClass:\"magic-checkbox\",attrs:{\"id\":\"select_all_relations\",\"type\":\"checkbox\"},domProps:{\"checked\":_vm.selectall},on:{\"change\":function($event){return _vm.updateSelectRelations()}}}),_vm._v(\" \"),_c('label',{staticStyle:{\"margin\":\"0\"},attrs:{\"for\":\"select_all_relations\"}},[_vm._v(\"\u00A0\")])]),_vm._v(\" \"),_c('th',{directives:[{name:\"t\",rawName:\"v-t\",value:('tools'),expression:\"'tools'\"}]}),_vm._v(\" \"),_c('th'),_vm._v(\" \"),_vm._l((_vm.relationAttributesSubset(_vm.relations[0])),function(attribute){return _c('th',[_vm._v(_vm._s(attribute.label))])})],2)]),_vm._v(\" \"),_c('tbody',_vm._l((_vm.relations),function(relation,index){return _c('tr',{key:relation.id,staticClass:\"featurebox-header\"},[_c('td',{staticStyle:{\"padding-top\":\"0\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(relation.select),expression:\"relation.select\"}],staticClass:\"magic-checkbox\",attrs:{\"id\":(\"select_relation__\" + index),\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(relation.select)?_vm._i(relation.select,null)>-1:(relation.select)},on:{\"change\":function($event){var $$a=relation.select,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(relation, \"select\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(relation, \"select\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(relation, \"select\", $$c)}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":(\"select_relation__\" + index)}})]),_vm._v(\" \"),_c('td',[_c('div',{staticStyle:{\"display\":\"flex\"}},_vm._l(((_vm.tools[index] || _vm.addTools(_vm.relations[index].id))),function(tool){\nvar _obj;\nreturn _c('div',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:top.create\",value:((\"plugins.\" + (tool.state.name))),expression:\"`plugins.${tool.state.name}`\",arg:\"top\",modifiers:{\"create\":true}}],key:tool.state.id,class:( _obj = { enabled: true, 'toggled': tool.state.active }, _obj[(\"editbtn \" + (tool.state.id))] = true, _obj ),on:{\"click\":function($event){$event.stopPropagation();return _vm.startTool(tool, index)}}},[_c('img',{attrs:{\"height\":\"20px\",\"width\":\"20px\",\"src\":(_vm.resourcesurl + \"images/\" + (tool.state.icon))}})])}),0)]),_vm._v(\" \"),_c('td',{staticClass:\"action-cell\"},[(!_vm.fieldrequired && _vm.capabilities.includes('change_attr_feature'))?_c('div',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.form.relations.tooltips.unlink_relation'),expression:\"'plugins.editing.form.relations.tooltips.unlink_relation'\",arg:\"right\",modifiers:{\"create\":true}}],staticClass:\"g3w-mini-relation-icon g3w-icon\",class:_vm.g3wtemplate.font['unlink'],attrs:{\"aria-hidden\":\"true\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.unlinkRelation(index)}}}):_vm._e()]),_vm._v(\" \"),_vm._l((_vm.relationAttributesSubset(relation)),function(attribute){return _c('td',[(_vm.isMedia(attribute.value) && _vm.getValue(attribute.value))?_c('div',{staticClass:\"preview\"},[_c('a',{attrs:{\"href\":_vm.getValue(attribute.value),\"target\":\"_blank\"}},[_c('div',{staticClass:\"previewtype\",class:_vm.getMediaType(attribute.value.mime_type).type},[_c('i',{staticClass:\"fa-2x\",class:_vm.g3wtemplate.font[_vm.getMediaType(attribute.value.mime_type).type]})])]),_vm._v(\" \"),_c('div',{staticClass:\"filename\"},[_vm._v(_vm._s(_vm.getValue(attribute.value).split('/').pop()))])]):(['photo', 'link'].includes(_vm.getFieldType(attribute)))?_c('a',{attrs:{\"href\":_vm.getValue(attribute.value),\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.getValue(attribute.value))+\"\\n \")]):_c('span',[_vm._v(_vm._s(_vm.getValue(_vm.getRelationFeatureValue(relation.id, attribute.name))))])])})],2)}),0)]):_vm._e()])],1)}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-13b1e87a_0\", { source: \".g3w-editing-new-relation-vector-type[data-v-13b1e87a]{margin-bottom:5px;font-weight:700}.relation_header_title[data-v-13b1e87a]{width:100%;display:flex;font-weight:700;font-size:1.3em;align-items:center;background-color:#fff}.relation_header_tools[data-v-13b1e87a]{width:100%;display:flex;background-color:#fff}.g3w-editing-relations-add-link-tools[data-v-13b1e87a]{display:flex;justify-content:flex-end}.relation_vector_tools[data-v-13b1e87a]{display:flex;flex-direction:column;border:2px solid #eee;background-color:#fff;padding:10px}#g3w-select-editable-layers-content[data-v-13b1e87a]{flex-grow:1;display:flex;flex-direction:column}#search-box[data-v-13b1e87a]{margin-right:auto}.relation_body[data-v-13b1e87a]{padding:0}.g3wform-relation-table[data-v-13b1e87a]{width:100%}.close_vector_relation_tool[data-v-13b1e87a]{align-self:self-end}.close_vector_relation_tool>.g3w-icon[data-v-13b1e87a]{font-weight:700;cursor:pointer}.divider[data-v-13b1e87a]{display:block;position:relative;padding:0;margin-bottom:5px;height:0;width:100%;max-height:0;font-size:1px;line-height:0;clear:both;border:none;border-bottom:2px solid #eee}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-13b1e87a\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"FormRelation.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n import { Step } from '../g3wsdk/workflow/step';\n import { Workflow } from '../g3wsdk/workflow/workflow';\n import { OpenFormStep } from '../workflows';\n import { cloneFeature } from '../utils/cloneFeature';\n import { getRelationsInEditing } from '../utils/getRelationsInEditing';\n import { getFeatureTableFieldValue } from '../utils/getFeatureTableFieldValue';\n import { addTableFeature } from '../utils/addTableFeature';\n import { promisify } from '../utils/promisify';\n\n const { tPlugin } = g3wsdk.core.i18n;\n const { GUI } = g3wsdk.gui;\n const { resizeMixin } = g3wsdk.gui.vue.Mixins;\n const Media_Field = g3wsdk.gui.vue.Fields.media_field;\n\n Object\n .entries({\n Workflow,\n OpenFormStep,\n })\n .forEach(([k, v]) => console.assert(undefined !== v, `${k} is undefined`));\n\n const __vue_script__ = {\n\n name: 'Table',\n\n mixins: [ resizeMixin ],\n\n components: {\n 'g3w-media': Media_Field\n },\n\n data() {\n return {\n dataTable: null,\n show: true,\n state: this.$options.service.state,\n };\n\n },\n\n methods: {\n\n showTool(type) {\n return undefined !== this.state.capabilities.find(cap => cap === type);\n },\n\n async resize() {\n // skip when an element is hidden\n if ('none' === this.$el.style.display) {\n return;\n }\n\n await this.$nextTick();\n\n $('#editing_table div.dataTables_scrollBody').height(\n $(\".content\").height()\n - $('.close-panel-block').outerHeight()\n - $('#editing_table div.dataTables_scrollHeadInner').outerHeight()\n - $('.editing_table_title').outerHeight()\n - $('.editing_table_header').outerHeight()\n - $('.editing_table_relation_messagge').outerHeight()\n - $('.dataTables_length').outerHeight()\n - $('.dataTables_paginate.paging_simple_numbers').outerHeight()\n - $('.dataTables_info').outerHeight()\n - $('.dataTables_filter').outerHeight()\n - $('.table_editing_footer_buttons').outerHeight()\n - $('#editing_table .dataTables_paginate.paging_simple_numbers').outerHeight()\n );\n\n if (this.dataTable) {\n this.dataTable.columns.adjust();\n }\n },\n\n showValue(key) {\n return !!this.state.headers.find(h => key === h.name);\n },\n\n isMediaField(name) {\n let isMedia = false;\n for (let i = 0; i < this.state.headers.length; i++) {\n const header = this.state.headers[i];\n if (name === header.name && 'media' === header.input.type) {\n isMedia = true;\n break;\n }\n }\n return isMedia;\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n */\n stop() {\n this.state.promise.reject();\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n */\n save() {\n this.state.isrelation\n // link features (by indexes)\n ? this.state.promise.resolve({ features: (this._linkFeatures || []).map(i => this.state.features[i]) })\n : this.state.promise.resolve();\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n */\n cancel() {\n this.state.promise.reject();\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n * \n * @param uid feature uid\n * \n * @returns {Promise}\n */\n async deleteFeature(uid) {\n const element = $(`#editing_table table tr#${uid}`);\n const layer = this.state.inputs.layer;\n const layerId = layer.getId();\n const childRelations = layer.getChildren();\n const relationinediting = childRelations.length && getRelationsInEditing({\n layerId,\n relations: layer.getRelations().getArray()\n }).length > 0;\n \n try {\n await (\n new Promise((resolve, reject) => {\n GUI.dialog.confirm(\n `

${tPlugin('editing.messages.delete_feature')}

\n
${ relationinediting ? tPlugin('editing.messages.delete_feature_relations') : ''}
`,\n (result) => {\n if (result) {\n const index = this.state.features.findIndex(f => f.getUid() === uid);\n const feature = this.state.features[index];\n const session = this.state.context.session;\n const layerId = this.state.inputs.layer.getId();\n this.state.inputs.layer.getEditingSource().removeFeature(feature);\n session.pushDelete(layerId, feature);\n this.state.rows.splice(index, 1);\n resolve()\n } else {\n reject()\n }\n });\n })\n );\n\n this.dataTable.row(element).remove().draw();\n\n await this.$nextTick();\n } catch (e) {\n console.warn(e);\n }\n\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n * \n * Copy feature tool from another table feature\n * \n * @param uid\n * \n * @returns {Promise}\n */\n async copyFeature(uid) {\n await (\n new Promise(async (resolve, reject) => {\n const feature = cloneFeature(\n this.state.features.find(f => uid === f.getUid()),\n this.state.inputs.layer.getEditingLayer()\n );\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addtablefeatureworkflow.js@v3.7.1 */\n this.state.workflow = new Workflow({\n type: 'addtablefeature',\n steps: [\n new Step({ help: 'editing.steps.help.new', run: addTableFeature }),\n new OpenFormStep(),\n ],\n });\n this.state.inputs.features.push(feature);\n try {\n const outputs = await promisify(this.state.workflow.start({\n context: this.state.context,\n inputs: this.state.inputs\n }));\n const feature = outputs.features[outputs.features.length -1];\n const newFeature = {};\n Object.entries(this.state.rows[0]).forEach(([ key, _ ]) => {\n newFeature[key] = getFeatureTableFieldValue({\n layerId: this.state.layerId,\n feature,\n property: key\n });\n });\n newFeature.__gis3w_feature_uid = feature.getUid();\n this.state.rows.push(newFeature);\n resolve(newFeature);\n } catch(e) {\n console.warn(e); reject(e);\n } finally {\n this.state.workflow.stop();\n /** @TODO check input.features that grow in number */\n console.log('here we are')\n }\n })\n );\n\n this.show = false;\n this.dataTable.destroy();\n\n await this.$nextTick();\n\n this.show = true;\n\n await this.$nextTick();\n\n this.setDataTable();\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n */\n async editFeature(uid) {\n const index = this.state.features.findIndex(f => uid === f.getUid());\n const feature = this.state.features[index];\n \n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/edittablefeatureworkflow.js@v3.7.1 */\n this.state.workflow = new Workflow({ type: 'edittablefeature', steps: [ new OpenFormStep() ] });\n \n const inputs = this.state.inputs;\n \n inputs.features.push(feature);\n\n try {\n const outputs = await promisify(\n this.state.workflow\n .start({\n context: this.state.context,\n inputs\n })\n );\n const feature = outputs.features[outputs.features.length -1];\n Object\n .entries(this.state.rows[index])\n .forEach(([key, _]) => {\n this.state.rows[index][key] = getFeatureTableFieldValue({\n layerId: this.state.layerId,\n feature,\n property: key\n });\n });\n } catch(e) {\n console.warn(e);\n } finally {\n this.state.workflow.stop()\n }\n },\n\n linkFeature(index, evt) {\n if (evt.target.checked) { this._linkFeatures.push(index) }\n else { this._linkFeatures = this._linkFeatures.filter(addindex => addindex !== index) }\n },\n\n getValue(value) {\n if (value && 'object' === typeof value && Object === value.constructor) {\n value = value.value;\n } else if ('string' == typeof value && 0 === value.indexOf('_new_')) {\n value = null;\n }\n return value;\n },\n\n setDataTable() {\n this.dataTable = $('#editing_table table').DataTable({\n columnDefs: [ { orderable: false, targets: 0 }],\n order: [ 1, 'asc' ],\n pageLength: 10,\n scrollCollapse: true,\n scrollResize: true,\n scrollX: true,\n });\n this.resize();\n },\n\n },\n\n beforeCreate() {\n this.delayType = 'debounce';\n\n GUI.disableSideBar(true);\n\n GUI.showUserMessage({\n type: 'loading',\n message: 'plugins.editing.messages.loading_table_data',\n autoclose: false,\n closable: false\n });\n },\n\n async mounted() {\n\n await this.$nextTick();\n\n if (this.state.isrelation) { this._linkFeatures = [] }\n\n this.setDataTable();\n\n this.resize();\n\n setTimeout( () => GUI.closeUserMessage(), 300);\n },\n\n beforeDestroy() {\n this.cancel();\n this._linkFeatures = null;\n this.dataTable.destroy();\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"g3w-editing-table\",attrs:{\"id\":\"editing_table\"}},[_c('div',{ref:\"editing_table_header\",staticClass:\"editing_table_header\"},[_c('div',{staticClass:\"editing_table_header_content\"},[_c('h3',{staticClass:\"editing_table_title\"},[_vm._v(_vm._s(_vm.state.title))])]),_vm._v(\" \"),(_vm.state.isrelation)?_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.relation.table.info'),expression:\"'editing.relation.table.info'\"}],staticClass:\"editing_table_relation_messagge\"}):_vm._e()]),_vm._v(\" \"),(_vm.show)?_c('table',{staticClass:\"display\",staticStyle:{\"width\":\"100%\"}},[_c('thead',[_c('tr',[(!_vm.state.isrelation)?_c('th',{staticStyle:{\"max-width\":\"60px\"}}):_vm._e(),_vm._v(\" \"),(_vm.state.isrelation)?_c('th'):_vm._e(),_vm._v(\" \"),_vm._l((_vm.state.headers),function(header){return _c('th',[_vm._v(_vm._s(header.label))])})],2)]),_vm._v(\" \"),_c('tbody',_vm._l((_vm.state.rows),function(feature,index){return _c('tr',{key:feature.__gis3w_feature_uid,attrs:{\"id\":feature.__gis3w_feature_uid}},[(!_vm.state.isrelation)?_c('td',[_c('div',{attrs:{\"id\":\"table-editing-tools\"}},[_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.table.edit'),expression:\"'plugins.editing.table.edit'\",arg:\"right\",modifiers:{\"create\":true}}]},[(_vm.showTool('change_attr_feature'))?_c('i',{staticClass:\"g3w-icon\",class:_vm.g3wtemplate.font['pencil'],staticStyle:{\"color\":\"#30cce7\"},attrs:{\"aria-hidden\":\"true\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.editFeature(feature.__gis3w_feature_uid)}}}):_vm._e()]),_vm._v(\" \"),_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.table.copy'),expression:\"'plugins.editing.table.copy'\",arg:\"right\",modifiers:{\"create\":true}}]},[(_vm.showTool('add_feature'))?_c('i',{staticClass:\"g3w-icon\",class:_vm.g3wtemplate.font['copy-paste'],staticStyle:{\"color\":\"#d98b14\",\"padding\":\"5px 7px 5px 7px\"},attrs:{\"aria-hidden\":\"true\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.copyFeature(feature.__gis3w_feature_uid)}}}):_vm._e()]),_vm._v(\" \"),_c('span',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.table.delete'),expression:\"'plugins.editing.table.delete'\",arg:\"right\",modifiers:{\"create\":true}}]},[(_vm.showTool('delete_feature'))?_c('i',{staticClass:\"g3w-icon\",class:_vm.g3wtemplate.font['trash-o'],staticStyle:{\"color\":\"red\"},attrs:{\"aria-hidden\":\"true\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.deleteFeature(feature.__gis3w_feature_uid)}}}):_vm._e()])])]):_vm._e(),_vm._v(\" \"),(_vm.state.isrelation)?_c('td',[_c('input',{staticClass:\"magic-checkbox\",attrs:{\"id\":(\"relation__\" + index),\"type\":\"checkbox\"},on:{\"change\":function($event){return _vm.linkFeature(index, $event)}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":(\"relation__\" + index)}})]):_vm._e(),_vm._v(\" \"),_vm._l((feature),function(value,key){return (_vm.showValue(key))?_c('td',{key:key},[(_vm.getValue(value) && _vm.isMediaField(key))?_c('g3w-media',{attrs:{\"state\":value}}):_c('p',[_vm._v(_vm._s(_vm.getValue(value)))])],1):_vm._e()})],2)}),0)]):_vm._e(),_vm._v(\" \"),_c('div',{ref:\"table_editing_footer_buttons\",staticClass:\"table_editing_footer_buttons\",attrs:{\"id\":\"buttons\"}},[_c('button',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:(_vm.state.isrelation ? 'editing.form.buttons.save_and_back' : 'editing.form.buttons.save'),expression:\"state.isrelation ? 'editing.form.buttons.save_and_back' : 'editing.form.buttons.save'\"}],staticClass:\"btn btn-success\",staticStyle:{\"margin-right\":\"10px\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.save.apply(null, arguments)}}}),_vm._v(\" \"),_c('button',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.form.buttons.cancel'),expression:\"'editing.form.buttons.cancel'\"}],staticClass:\"btn btn-danger\",on:{\"click\":function($event){$event.stopPropagation();return _vm.cancel.apply(null, arguments)}}})])])}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-9019478e_0\", { source: \".g3w-editing-table table.dataTable tbody td{padding:3px 5px}\", map: undefined, media: undefined })\n,inject(\"data-v-9019478e_1\", { source: \".editing_table_title[data-v-9019478e]{margin-top:0;margin-bottom:2px;font-size:1.5em;font-weight:700;color:var(--skin-color)}#table-editing-tools[data-v-9019478e]{display:flex;justify-content:space-between}#table-editing-tools i[data-v-9019478e]{margin:5px}#buttons button.btn[data-v-9019478e]{font-weight:700!important;min-width:80px}.table_editing_footer_buttons[data-v-9019478e]{position:absolute;bottom:10px;width:100%;display:flex;justify-content:center}.editing_table_header_content[data-v-9019478e]{display:flex;justify-content:space-between;align-items:baseline}.editing_table_relation_messagge[data-v-9019478e]{margin-bottom:10px;font-size:1.3em;background-color:#f5f5f5;padding:3px;border-radius:3px;font-weight:700}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-9019478e\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"Table.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "import { evaluateExpressionFields } from '../utils/evaluateExpressionFields';\nimport { getParentFormData } from '../utils/getParentFormData';\nimport { setFeaturesSelectedStyle } from '../utils/setFeaturesSelectedStyle';\nimport { setAndUnsetSelectedFeaturesStyle } from '../utils/setAndUnsetSelectedFeaturesStyle';\nimport { getFormFields } from '../utils/getFormFields';\nimport { chooseFeatureFromFeatures } from '../utils/chooseFeatureFromFeatures';\nimport { handleRelation1_1LayerFields } from '../utils/handleRelation1_1LayerFields';\nimport { listenRelation1_1FieldChange } from '../utils/listenRelation1_1FieldChange';\nimport { getLayersDependencyFeatures } from '../utils/getLayersDependencyFeatures';\nimport { getEditingLayerById } from '../utils/getEditingLayerById';\nimport { setLayerUniqueFieldValues } from '../utils/setLayerUniqueFieldValues';\nimport { getRelationsInEditingByFeature } from '../utils/getRelationsInEditingByFeature';\nimport { getFeatureTableFieldValue } from '../utils/getFeatureTableFieldValue';\nimport { addRemoveToMultipleSelectFeatures } from '../utils/addRemoveToMultipleSelectFeatures';\nimport { promisify, $promisify } from '../utils/promisify';\nimport { isSameBaseGeometryType } from '../utils/isSameBaseGeometryType';\nimport { PickFeaturesInteraction } from '../interactions/pickfeaturesinteraction';\n\nimport { Workflow } from '../g3wsdk/workflow/workflow';\nimport { Step } from '../g3wsdk/workflow/step';\n\nconst { G3WObject, ApplicationState } = g3wsdk.core;\nconst { Geometry } = g3wsdk.core.geoutils;\nconst { convertSingleMultiGeometry } = g3wsdk.core.geoutils;\nconst { removeZValueToOLFeatureGeometry } = g3wsdk.core.geoutils.Geometry;\nconst { Layer } = g3wsdk.core.layer;\nconst { Feature } = g3wsdk.core.layer.features;\nconst { GUI } = g3wsdk.gui;\nconst { Component } = g3wsdk.gui.vue;\nconst { FormService } = g3wsdk.gui.vue.services;\nconst { AreaInteraction, LengthInteraction } = g3wsdk.ol.interactions.measure;\nconst { createMeasureTooltip, removeMeasureTooltip } = g3wsdk.ol.utils;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/addfeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/addfeaturestep.js@v3.7.1\n */\nexport class AddFeatureStep extends Step {\n\n constructor(options = {}) {\n options.help = \"editing.steps.help.draw_new_feature\";\n\n super(options);\n\n this._add = undefined === options.add ? true : options.add;\n\n this.drawInteraction;\n\n this.measeureInteraction;\n\n this.drawingFeature;\n\n this._snap = false === options.snap ? false : true;\n\n /**\n * Handle tasks that stops after `run(inputs, context)` promise (or if ESC key is pressed)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n this._stopPromise;\n\n /**\n *\n * @param e event\n * @returns {boolean|void}\n * @private\n * callback of pressing esc to remove last point drawed\n */\n this._delKeyRemoveLastPoint = e => 46 === e.keyCode && this.removeLastPoint();\n\n }\n\n run(inputs, context) {\n\n return $promisify(new Promise((resolve, reject) => {\n //create promise to listen to pass to setAndUnsetSelectedFeaturesStyle\n const promise = new Promise(r => this.resolve = r);\n\n const layerId = inputs.layer.getId();\n\n // Skip when a layer type is vector\n if (Layer.LayerTypes.VECTOR !== inputs.layer.getType()) { return }\n\n /** @since g3w-client-plugin-editing@v3.8.0 */\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(promise), inputs, style: this.selectStyle });\n\n const originalGeometryType = inputs.layer.getEditingGeometryType();\n\n this.geometryType = Geometry.getOLGeometry(originalGeometryType);\n\n const source = inputs.layer.getEditingLayer().getSource();\n const attributes = inputs.layer.getEditingFields();\n\n this.drawInteraction = this.addInteraction(\n new ol.interaction.Draw({\n type: this.geometryType,\n source: new ol.source.Vector(),\n condition: this._options.condition || (() => true),\n freehandCondition: ol.events.condition.never,\n finishCondition: this._options.finishCondition || (() => true),\n }), {\n 'drawstart': ({ feature }) => {\n this.drawingFeature = feature;\n document.addEventListener('keydown', this._delKeyRemoveLastPoint);\n },\n 'drawend': e => {\n let feature;\n if (this._add) {\n attributes.forEach(attr => e.feature.set(attr.name, null));\n feature = new Feature({ feature: e.feature, });\n feature.setTemporaryId();\n source.addFeature(feature);\n context.session.pushAdd(layerId, feature, false);\n } else {\n feature = e.feature;\n }\n // set Z values based on layer Geometry\n if (Geometry.is3DGeometry(originalGeometryType)) {\n feature = Geometry.addZValueToOLFeatureGeometry({ feature, geometryType: originalGeometryType });\n }\n\n inputs.features.push(feature);\n this.getContext().get_default_value = true;\n this.fireEvent('addfeature', feature); // emit event to get from subscribers\n resolve(inputs);\n },\n });\n\n this.drawInteraction.setActive(true);\n }))\n\n }\n\n /**\n * Method to add Measure\n */\n addMeasureInteraction() {\n const is_line = Geometry.isLineGeometryType(this.geometryType);\n const is_poly = Geometry.isPolygonGeometryType(this.geometryType);\n\n //Skip in case geometry is not Line or Polygon\n if (!is_line && !is_poly) { return }\n\n this.measureInteraction = this.addInteraction(\n new (is_line ? LengthInteraction : AreaInteraction)({\n projection: GUI.getService('map').getProjection(),\n drawColor: 'transparent',\n feature: this.drawingFeature\n })\n );\n\n this.measureInteraction.setActive(true);\n }\n\n /**\n * Remove Measure Interaction\n */\n removeMeasureInteraction() {\n if (this.measureInteraction) {\n this.measureInteraction.clear();\n this.removeInteraction(this.measureInteraction);\n this.measureInteraction = null;\n }\n }\n\n /**\n * Removed last point/vertex draw\n */\n removeLastPoint() {\n try {\n if (this.drawInteraction) { this.drawInteraction.removeLastPoint() }\n } catch (e) {\n console.warn(e)\n }\n }\n\n stop() {\n this.removeInteraction(this.drawInteraction);\n this.removeMeasureInteraction();\n this.resolve(true);\n\n this.drawInteraction = null;\n this.drawingFeature = null;\n this.resolve = null;\n\n document.removeEventListener('keydown', this._delKeyRemoveLastPoint);\n\n return true;\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/modifygeometryvertextask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/modifygeometryvertexstep.js@v3.7.1\n */\nexport class ModifyGeometryVertexStep extends Step {\n\n constructor(options = {}) {\n options.snap = undefined !== options.snap ? options.snap : true;\n options.help = \"editing.steps.help.edit_feature_vertex\";\n\n super(options);\n\n this._originalStyle = null;\n\n this._feature = null;\n\n this.tooltip;\n }\n\n run(inputs, context) {\n let newFeature, originalFeature;\n return $promisify(new Promise((resolve, reject) => {\n const layerId = inputs.layer.getId();\n const feature = this._feature = inputs.features[0];\n this._originalStyle = inputs.layer.getEditingLayer().getStyle();\n feature.setStyle(() => [\n new ol.style.Style({\n image: new ol.style.Circle({ radius: 5, fill: null, stroke: new ol.style.Stroke({color: 'orange', width: 2}) }),\n geometry: feature => new ol.geom.MultiPoint(\n ( // in the case of multipolygon geometry\n Geometry.isPolygonGeometryType(inputs.layer.getGeometryType())\n && Geometry.isMultiGeometry(inputs.layer.getGeometryType())\n ) ? feature.getGeometry().getCoordinates()[0][0] : feature.getGeometry().getCoordinates()[0]\n )\n }),\n new ol.style.Style({ stroke: new ol.style.Stroke({ color: 'yellow', width: 4 }) })\n ]);\n this._modifyInteraction = this.addInteraction(\n new ol.interaction.Modify({\n features: new ol.Collection(inputs.features),\n deleteCondition: this._options.deleteCondition,\n condition: (e) => {\n const features = e.map.getFeaturesAtPixel(e.pixel, { hitTolerance: 10 });\n //in a collections, the first element is a collection of features\n //instead the second element and the others are features\n if (features.length >= 2) { //consider maybe other features very close to current editing feature\n if (features.slice(1).find(f => feature._uid === f._uid)) {\n return true;\n }\n }\n resolve(inputs);\n },\n }), {\n 'modifystart': e => { originalFeature = e.features.getArray()[0].clone(); },\n 'modifyend': e => {\n const feature = e.features.getArray()[0];\n if (feature.getGeometry().getExtent() !== originalFeature.getGeometry().getExtent()) {\n evaluateExpressionFields({ inputs, context, feature })\n .finally(() => {\n newFeature = feature.clone();\n context.session.pushUpdate(layerId, newFeature, originalFeature);\n inputs.features.push(newFeature);\n });\n }\n }\n }\n );\n }))\n }\n\n addMeasureInteraction() {\n this._modifyInteraction.on('modifystart', e => {\n this.tooltip = createMeasureTooltip({ map: this.getMap(), feature: e.features.getArray()[0] });\n });\n }\n\n removeMeasureInteraction() {\n if (this.tooltip) { removeMeasureTooltip({ map: this.getMap(), ...this.tooltip }) }\n this.tooltip = null;\n }\n\n stop() {\n this._feature.setStyle(this._originalStyle);\n return true;\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/movefeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/movefeaturestep.js@v3.7.1\n */\nexport class MoveFeatureStep extends Step {\n\n constructor(options = {}) {\n options.help = \"editing.steps.help.move\";\n\n super(options);\n\n this.drawInteraction = null;\n this.promise; // need to be set here in case of picked features\n }\n\n run(inputs, context) {\n /** Need two different promises: One for stop() method and clean-selected feature,\n * and another one for a run task. If we use the same promise, when stop a task without move feature,\n * this.promise.resolve(), it fires also thenable method listens to resolve promise of a run task,\n * that call stop task method.*/\n return $promisify(new Promise((resolve) => {\n const promise = new Promise(r => this.resolve = r);\n const layerId = inputs.layer.getId();\n let originalFeature = null;\n this.changeKey = null;\n let isGeometryChange = false; // changed if geometry is changed\n\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(promise), inputs, style: this.selectStyle });\n\n this.addInteraction(\n new ol.interaction.Translate({\n features: new ol.Collection(inputs.features),\n hitTolerance: (isMobile && isMobile.any) ? 10 : 0 },\n ), {\n 'translatestart': e => {\n const feature = e.features.getArray()[0];\n this.changeKey = feature.once('change', () => isGeometryChange = true);\n originalFeature = feature.clone();\n },\n 'translateend': e => {\n ol.Observable.unByKey(this.changeKey);\n const feature = e.features.getArray()[0];\n if (isGeometryChange) {\n // evaluated geometry expression\n evaluateExpressionFields({ inputs, context, feature }).finally(() => {\n context.session.pushUpdate(layerId, feature.clone(), originalFeature);\n resolve(inputs);\n });\n } else {\n resolve(inputs);\n }\n },\n });\n\n }))\n }\n\n stop() {\n this.resolve(true);\n this.resolve = null;\n this.changeKey = null;\n }\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/openformtask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/openformstep.js@v3.7.1\n */\nexport class OpenFormStep extends Step {\n\n constructor(options = {}) {\n\n options.help = \"editing.steps.help.insert_attributes_feature\";\n\n super(options);\n\n /**\n * Show saveAll button\n *\n * @since v3.7\n */\n this._saveAll = false === options.saveAll ? options.saveAll : async () => {};\n\n /**\n * Whether it can handle multi edit features\n */\n this._multi = options.multi || false;\n\n /**\n * @FIXME set a default value + add description\n */\n this.layerId;\n\n /**\n * whether form is coming from parent table component\n */\n this._isContentChild = false;\n\n /**\n * @FIXME set a default value + add description\n */\n this._features;\n\n /**\n * @FIXME set a default value + add description\n */\n this._originalFeatures;\n\n /**\n * @FIXME set a default value + add description\n */\n this.promise;\n\n /**\n * @since g3w-client-plugin-editing@v3.7.0\n */\n this._unwatchs = [];\n\n }\n\n /**\n * @since v3.7\n * @param bool\n */\n updateMulti(bool = false) {\n this._multi = bool;\n }\n\n /**\n * @param inputs\n * @param context\n *\n * @returns {*}\n */\n run(inputs, context) {\n return $promisify(async () => {\n //@since 3.9.0 can set isContentChild attribute to force it\n // (case edit relation features from multi-parent features)\n this._isContentChild = undefined === context.isContentChild ? Workflow.Stack.getLength() > 1 : context.isContentChild;\n this.layerId = inputs.layer.getId();\n this._features = this._multi ? inputs.features : [inputs.features[inputs.features.length - 1]];\n this._originalFeatures = this._features.map(f => f.clone());\n\n //@since 3.9.0 promise\n const promise = new Promise((resolve) => {\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').subscribe(`closeform_${this.layerId}`, () => {\n resolve();\n return { once: true }; // once close form, remove subscribing\n })\n })\n\n //set selected features\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(promise), inputs, style: this.selectStyle });\n\n return new Promise(async (resolve, reject) => {\n\n GUI.setLoadingContent(false);\n\n GUI.getService('map').disableClickMapControls(true);\n\n if (!this._multi && Array.isArray(inputs.features[inputs.features.length - 1])) {\n resolve();\n return;\n }\n\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').setCurrentLayout();\n\n const layerName = inputs.layer.getName();\n\n // create a child relation feature set a father relation field value\n if (this._isContentChild) {\n context.fatherValue = context.fatherValue || []; // are array\n (context.fatherField || []).forEach((field, i) => {\n this._features[0].set(field, context.fatherValue[i]);\n this._originalFeatures[0].set(field, context.fatherValue[i]);\n });\n }\n\n const fields = getFormFields({\n inputs,\n context,\n feature: this._features[0],\n isChild: this._isContentChild,\n multi: this._multi,\n });\n\n // set fields. Useful getParentFormData\n Workflow.Stack.getCurrent().setInput({ key: 'fields', value: fields });\n\n // whether disable relations editing (ref: \"editmultiattributes\")\n const feature = !this._multi && inputs.features && inputs.features[inputs.features.length - 1];\n const layerId = !this._multi && inputs.layer.getId();\n\n // @since g3w-client-plugin-editing@v3.7.2\n // skip relations that don't have a form structure\n if (feature && !feature.isNew() && inputs.layer.getLayerEditingFormStructure()) {\n await getLayersDependencyFeatures(inputs.layer.getId(), {\n // @since g3w-client-plugin-editin@v3.7.0\n relations: inputs.layer.getRelations().getArray().filter(r =>\n inputs.layer.getId() === r.getFather() && // get only child relation features of current editing layer\n getEditingLayerById(r.getChild()) && // child layer is in editing\n 'ONE' !== r.getType() // exclude ONE relation (Join 1:1)\n ),\n feature,\n filterType: 'fid',\n });\n }\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/form/editingform.js@v3.7.8 */\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/form/editingformservice.js@v3.7.8 */\n const formService = GUI.showForm({\n feature: this._originalFeatures[0],\n title: \"plugins.editing.editing_attributes\",\n name: layerName,\n crumb: { title: layerName },\n id: `form_${layerName}`,\n dataid: layerName,\n layer: inputs.layer,\n isnew: this._originalFeatures.length > 1 ? false : this._originalFeatures[0].isNew(), // specify if is a new feature\n parentData: getParentFormData(),\n fields,\n context_inputs: this._multi ? false: { context, inputs },\n formStructure: inputs.layer.hasFormStructure() && inputs.layer.getLayerEditingFormStructure() || undefined,\n modal: true,\n push: this._options.push || this._isContentChild, /** @since v3.7 force push content on top without clear previous content */\n showgoback: undefined === this._options.showgoback ? !this._isContentChild : this._options.showgoback, /** @since v3.7 force show back button */\n /** @TODO make it straightforward: `headerComponent` vs `buttons` ? */\n headerComponent: this._saveAll && {\n template: /* html */ `\n
\n \n \n \n \n \n \n \n \n \n \n \n
`,\n name: 'Saveall',\n /** @TODO figure out who populate these props (ie. core client code?) */\n props: { update: { type: Boolean }, valid: { type: Boolean } },\n data() {\n return {\n enabled: Workflow.Stack._workflows.slice(0, Workflow.Stack.getLength() - 1)\n .every(w => {\n const valid = ((w.getContext().service instanceof FormService) ? w.getContext().service.getState() : {}).valid;\n return valid || undefined === valid;\n }),\n isChild: Workflow.Stack.getLength() > 1 && !(2 === Workflow.Stack.getLength() && Workflow.Stack.getFirst().isType('edittable'))\n };\n },\n computed: {\n /** @returns {boolean} whether disable save all button (eg. when parent or current form is not valid/ updated) */\n disabled() {\n return !this.enabled || !(this.valid && this.update);\n },\n },\n methods: {\n async saveAll() {\n //Set loading content\n GUI.setLoadingContent(true);\n //Disable form\n GUI.disableContent(true);\n await Promise.allSettled(\n [...Workflow.Stack._workflows]\n .reverse()\n .filter(w => \"function\" === typeof w.getLastStep()._saveAll) // need to filter only workflow that\n .map( w => new Promise(async (resolve) => {\n const task = w.getLastStep();\n const fields = w.getContext().service.state.fields.filter(f => task._multi ? null !== f.value : true);\n // skip when no fields\n if (0 === fields.length) { return }\n await Workflow.Stack.getCurrent().getContextService().saveDefaultExpressionFieldsNotDependencies();\n task._features.forEach(f => task.getInputs().layer.setFieldsWithValues(f, fields));\n const newFeatures = task._features.map(f => f.clone());\n //Is a relation form\n if (task._isContentChild) {\n task.getInputs().relationFeatures = { newFeatures, originalFeatures: task._originalFeatures };\n }\n await task.fireEvent('saveform', { newFeatures, originalFeatures: task._originalFeatures });\n newFeatures.forEach((f, i) => task.getContext().session.pushUpdate(task.layerId, f, task._originalFeatures[i]));\n await handleRelation1_1LayerFields({ layerId: task.layerId, features: newFeatures, fields, task });\n task.fireEvent('savedfeature', newFeatures); // called after saved\n task.fireEvent(`savedfeature_${task.layerId}`, newFeatures); // called after saved using layerId\n task.getContext().session.save();\n return resolve();\n }))\n )\n try {\n await promisify(g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').service.commit({ modal: false }));\n [...Workflow.Stack._workflows]\n .reverse()\n .filter(w => \"function\" === typeof w.getLastStep()._saveAll)\n .forEach(w => {\n const service = w.getContext().service; //form service\n //need to set update form false because already saved on server\n service.setUpdate(false, { force: false });\n const feature = service.feature;\n // Check if the feature is new.\n // In this case, after commit, need to set new to false, and force update to false.\n if (feature.isNew()) {\n feature.state.new = false;\n service.force.update = false;\n }\n Object.entries(\n w.getInputs().layer.getEditingSource().readFeatures()\n .find(f => f.getUid() === feature.getUid()) //Find current form editing feature by unique id of feature uid\n .getProperties() //get properties\n )\n .forEach(([k, v]) => {\n const field = service.getFields().find(f => k === f.name);\n //if field exists (geometry field is discarded)\n if (field) {\n field.value = field._value = v;\n }\n })\n })\n } catch(e) {\n console.warn(e);\n }\n //set loading content false\n GUI.setLoadingContent(false);\n //enable form\n GUI.disableContent(false);\n },\n /**\n * @since 3.9.0\n * Close editing form\n */\n async closeForm() {\n //get current active tool\n const tool = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.toolboxselected.getActiveTool();\n //stop active tool and wait\n await promisify(tool.stop());\n //clear all workflow stacks\n Workflow.Stack.clear();\n //check if the tool needs to run on time. If not, start again\n if (!tool.getOperator().runOnce) {\n tool.start();\n }\n }\n },\n },\n buttons: [\n {\n id: 'save',\n title: this._isContentChild\n ? Workflow.Stack.getParent().getBackButtonLabel() || \"plugins.editing.form.buttons.save_and_back\" // get custom back label from parent\n : \"plugins.editing.form.buttons.save\",\n type: \"save\",\n class: \"btn-success\",\n // save features\n cbk: async (fields) => {\n fields = this._multi ? fields.filter(f => null !== f.value) : fields;\n\n // skip when no fields\n if (0 === fields.length) {\n resolve(inputs);\n return;\n }\n\n const newFeatures = [];\n\n // @since 3.5.15\n GUI.setLoadingContent(true);\n GUI.disableContent(true);\n\n await Workflow.Stack.getCurrent().getContextService().saveDefaultExpressionFieldsNotDependencies();\n\n GUI.setLoadingContent(false);\n GUI.disableContent(false);\n\n this._features.forEach(f => {\n inputs.layer.setFieldsWithValues(f, fields);\n newFeatures.push(f.clone());\n });\n\n if (this._isContentChild) {\n inputs.relationFeatures = {\n newFeatures,\n originalFeatures: this._originalFeatures\n };\n }\n\n await this.fireEvent('saveform', { newFeatures, originalFeatures: this._originalFeatures});\n\n newFeatures.forEach((f, i) => context.session.pushUpdate(this.layerId, f, this._originalFeatures[i]));\n\n // check and handle if layer has relation 1:1\n await handleRelation1_1LayerFields({\n layerId: this.layerId,\n features: newFeatures,\n fields,\n task: this,\n });\n\n GUI.setModal(false);\n\n this.fireEvent('savedfeature', newFeatures); // called after saved\n this.fireEvent(`savedfeature_${this.layerId}`, newFeatures); // called after saved using layerId\n // In case of save of child, it means that child is updated so also parent\n if (this._isContentChild) {\n Workflow.Stack.getParents()\n //filter only with has getContextService to be sure\n .filter(w => w.getContextService() && w.getContextService().setUpdate)\n .forEach(w => w.getContextService().setUpdate(true, { force: true }));\n }\n //@TODO add field unique new value id not set\n resolve(inputs);\n }\n },\n {\n id: 'cancel',\n title: \"plugins.editing.form.buttons.cancel\",\n type: \"cancel\",\n class: \"btn-danger\",\n /// buttons in case of change\n eventButtons: {\n update: {\n false : {\n id: 'close',\n title: \"close\",\n type: \"cancel\",\n class: \"btn-danger\",\n }\n }\n },\n cbk: () => {\n this.fireEvent('cancelform', inputs.features); // fire event cancel form to emit to subscribers\n reject(inputs);\n }\n }\n ]\n });\n\n // Overwrite click on relation.\n // Open FormRelation.vue component\n formService.handleRelation = async e => {\n // Skip when multi editing features\n // It is not possible to manage relationss when we edit multi-features\n if (this._multi) {\n GUI.showUserMessage({ type: 'info', message: 'plugins.editing.errors.editing_multiple_relations', duration: 3000, autoclose: true });\n return;\n }\n GUI.setLoadingContent(true);\n //set unique values for relation layer based on unique fields\n //@TODO need a find a way to call once and not every time we open a relation\n await setLayerUniqueFieldValues(inputs.layer.getRelationById(e.relation.name).getChild());\n formService.setCurrentComponentById(e.relation.name);\n GUI.setLoadingContent(false);\n }\n\n formService.addComponents([\n // custom form components\n ...(g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.formComponents[layerId] || []),\n // relation components (exlcude ONE relation + layer is the father get relation layers that set in editing on g3w-admin)\n ...getRelationsInEditingByFeature({\n layerId,\n relations: this._multi ? [] : inputs.layer.getRelations().getArray().filter(r => r.getType() !== 'ONE' && r.getFather() === layerId),\n feature: this._multi ? false : inputs.features[inputs.features.length - 1],\n }).map(({ relation, relations }) => ({\n title: \"plugins.editing.edit_relation\",\n name: relation.name,\n id: relation.id,\n header: false, // hide a header form\n component: Vue.extend({\n mixins: [ require('../components/FormRelation.vue') ],\n name: `relation_${Date.now()}`,\n data() {\n return { layerId, relation, relations };\n },\n }),\n }))\n ]);\n\n // fire openform event\n this.fireEvent('openform',\n {\n layerId: this.layerId,\n session: context.session,\n feature: this._originalFeature,\n formService\n }\n );\n\n // set context service to form Service in case of a single task (i.e., no workflow)\n if (Workflow.Stack.getCurrent()) {\n Workflow.Stack.getCurrent().setContextService(formService);\n }\n\n //listen eventually field relation 1:1 changes value\n listenRelation1_1FieldChange({ layerId: this.layerId, fields, formService }).then(d => this._unwatchs = d);\n\n this.disableSidebar(true);\n });\n });\n }\n\n /**\n *\n */\n stop() {\n this.disableSidebar(false);\n\n //Check if form coming from the parent table component\n const is_parent_table = false === this._isContentChild || // no child workflow\n (\n // case edit feature of a table (edit layer alphanumeric)\n 2 === Workflow.Stack.getLength() && //open features table\n Workflow.Stack.getParent().isType('edittable')\n );\n // when the last feature of features is Array\n // and is resolved without setting form service\n // Ex. copy multiple features from another layer\n if (is_parent_table) {\n GUI.getService('map').disableClickMapControls(false);\n GUI.setModal(false);\n }\n\n const contextService = is_parent_table && Workflow.Stack.getCurrent().getContextService();\n\n // force update parent form update\n if (contextService && contextService.setUpdate && false === this._isContentChild) {\n contextService.setUpdate(false, { force: false });\n }\n\n //@since 3.9.0 add GUI.getContentLength() in case of edit multi relationfeatures tool\n GUI.closeForm({ pop: this.push || this._isContentChild && GUI.getContentLength() > 1 });\n\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').resetCurrentLayout();\n\n this.fireEvent('closeform');\n this.fireEvent(`closeform_${this.layerId}`);\n\n this.layerId = null;\n this._unwatchs.forEach(unwatch => unwatch());\n this._unwatchs = [];\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/opentabletask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/opentablestep.js@v3.7.1\n */\nexport class OpenTableStep extends Step {\n\n constructor(options = {}) {\n options.help = \"editing.steps.help.edit_table\";\n\n super(options);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/opentabletask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/tableservice.js@v3.7.8\n *\n * @param inputs\n * @param context\n *\n * @returns {*}\n */\n run(inputs, context) {\n // set current plugin layout (right content)\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').setCurrentLayout();\n\n return $promisify(new Promise((resolve, reject) => {\n this._isContentChild = Workflow.Stack.getLength() > 1;\n const features = (inputs.layer.readEditingFeatures() || []);\n const headers = (inputs.layer.getEditingFields() || []).filter(h => features.length ? Object.keys(features[0].getProperties()).includes(h.name) : true);\n this._isContentChild = Workflow.Stack.getLength() > 1;\n const excludeFields = this._isContentChild ? (context.excludeFields || []) : [];\n const service = Object.assign(new G3WObject,\n {\n state: {\n inputs,\n context,\n promise: { resolve, reject },\n headers, // column names\n features,\n rows: features.length > 0\n // ordered properties\n ? (\n excludeFields.length > 0\n ? features.filter(feat => !excludeFields.reduce((a, f, i) => a && context.fatherValue[i] === `${feat.get(f)}` , true))\n : features\n )\n .map(f => headers.map(h => h.name).reduce((props, header) => Object.assign(props, {\n [header]: getFeatureTableFieldValue({ layerId: inputs.layer.getId(), feature: f, property: header }),\n '__gis3w_feature_uid': f.getUid(), // private attribute unique value\n }), {}))\n // features already bind to parent feature\n : features,\n title: `${inputs.layer.getName()}` || 'Link relation',\n isrelation: this._isContentChild,\n capabilities: inputs.layer.getEditingCapabilities(),\n layerId: inputs.layer.getId(),\n workflow: null,\n }\n }\n );\n\n GUI.showContent({\n content: new Component({\n title: `${inputs.layer.getName()}`,\n push: this._isContentChild,\n service,\n state: service.state,\n internalComponent: new (Vue.extend(require('../components/Table.vue').default))({ service }),\n }),\n push: this._isContentChild,\n showgoback: false,\n closable: false,\n });\n }))\n }\n\n /**\n *\n */\n stop() {\n this.disableSidebar(false);\n GUI[this._isContentChild ? 'popContent' : 'closeContent']();\n //reset the current plugin layout (right content) to application\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').resetCurrentLayout();\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/pickfeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/pickfeaturestep.js@v3.7.1\n */\nexport class PickFeatureStep extends Step {\n\n constructor(options = {}) {\n options.help = \"editing.steps.help.pick_feature\";\n options.highlight = options.highlight || false;\n options.multi = options.multi || false;\n super(options);\n }\n\n run(inputs) {\n const promise = new Promise((resolve) => {\n this.addInteraction(\n new PickFeaturesInteraction({ layer: inputs.layer.getEditingLayer() }), {\n 'picked': e => {\n if (0 === inputs.features.length) {\n inputs.features = e.features;\n inputs.coordinate = e.coordinate;\n }\n if (this._steps) { this.setUserMessageStepDone('select') }\n resolve(inputs);\n },\n });\n })\n return $promisify(async () => {\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(promise), inputs, style: this.selectStyle });\n return promise;\n })\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/selectelementstask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/selectelementsstep.js@v3.7.1\n */\nexport class SelectElementsStep extends Step {\n\n constructor(options = {}, chain) {\n options.help = options.help || \"editing.steps.help.select_elements\";\n\n super(options);\n\n this._selectInteractions = [];\n this.multipleselectfeatures = [];\n this._originalStyle;\n this._vectorLayer;\n\n if (chain) {\n this.on('run', () => { this.emit('next-step', g3wsdk.core.i18n.tPlugin(\"editing.steps.help.select_elements\")) });\n }\n }\n\n /**\n *\n * @param inputs\n * @param context\n * @returns {*}\n */\n run(inputs, context) {\n const layer = inputs.layer;\n const type = this._options.type || 'bbox'; // 'single' 'bbox' 'multiple';\n const buttonnext = 'multiple' === type && !!this._steps.select.buttonnext;\n\n return $promisify(new Promise((resolve, reject) => {\n\n if (buttonnext) {\n //check if it has already done handler function;\n const { done } = this._steps.select.buttonnext;\n this._steps.select.buttonnext.done = () => {\n if (done && done instanceof Function) { done() }\n resolve(inputs);\n }\n }\n\n const interactions = {};\n\n // add single select interaction\n if (['single', 'multiple'].includes(type)) {\n interactions.single = new PickFeaturesInteraction({ layer: layer.getEditingLayer() });\n interactions.single.on('picked', async ({ features }) => {\n let feature;\n if (features.length > 1) {\n try { feature = await chooseFeatureFromFeatures({ features, inputs: this.getInputs() }); }\n catch(e) { console.warn(e);}\n } else {\n feature = features[0];\n }\n\n if (feature) {\n inputs.features = [feature];\n if (buttonnext) {\n addRemoveToMultipleSelectFeatures([feature], inputs, this.multipleselectfeatures, this);\n } else {\n this._originalStyle = setFeaturesSelectedStyle(inputs.features);\n\n if (this._steps) { this.setUserMessageStepDone('select') }\n\n resolve(inputs);\n }\n }\n });\n }\n\n // add multiple select interactions\n if (['multiple', 'bbox'].includes(type) && ApplicationState.ismobile) {\n this._vectorLayer = new ol.layer.Vector({ source: new ol.source.Vector({}) });\n this.getMap().addLayer(this._vectorLayer);\n\n interactions.multi = new ol.interaction.Draw({ type: 'Circle', source: this._vectorLayer.getSource(), geometryFunction: ol.interaction.Draw.createBox() });\n\n interactions.multi.on('drawend', e => {\n const features = layer.getEditingLayer().getSource().getFeaturesInExtent(e.feature.getGeometry().getExtent());\n if (buttonnext) {\n addRemoveToMultipleSelectFeatures(features, inputs, this.multipleselectfeatures, this);\n } else {\n if (features.length > 0) {\n inputs.features = features;\n this._originalStyle = setFeaturesSelectedStyle(features);\n if (this._steps) { this.setUserMessageStepDone('select') }\n setTimeout(() => resolve(inputs), 500);\n } else { reject() }\n }\n });\n }\n\n if (['multiple', 'bbox'].includes(type) && !ApplicationState.ismobile) {\n interactions.dragbox = new ol.interaction.DragBox({ condition: ol.events.condition.shiftKeyOnly });\n\n interactions.dragbox.on('boxend', () => {\n const features = [];\n const extent = interactions.dragbox.getGeometry().getExtent();\n\n //https://openlayers.org/en/v5.3.0/apidoc/module-ol_source_Cluster-Cluster.html#forEachFeatureIntersectingExtent\n layer.getEditingLayer().getSource().forEachFeatureIntersectingExtent(extent, f => { features.push(f) });\n\n if (buttonnext) {\n addRemoveToMultipleSelectFeatures(features, inputs, this.multipleselectfeatures, this);\n } else {\n if (features.length > 0) {\n inputs.features = features;\n this._originalStyle = setFeaturesSelectedStyle(features);\n\n if (this._steps) { this.setUserMessageStepDone('select') }\n\n resolve(inputs);\n } else {\n reject();\n }\n }\n });\n }\n\n // pick feature from external layer added to map\n if ('external' === type) {\n const geometryType = layer.getGeometryType();\n const layerId = layer.getId();\n const source = layer.getEditingLayer().getSource();\n const { session } = this.getContext();\n interactions.external = new PickFeaturesInteraction({\n layers: GUI.getService('map').getExternalLayers()\n // filter external layer only vector - Exclude the\n // same base geometry\n .filter(l => {\n const features = 'VECTOR' == l.getType() && l.getSource().getFeatures();\n if (features.length > 0) {\n return isSameBaseGeometryType(features[0].getGeometry().getType(), geometryType)\n }\n return true;\n })\n });\n interactions.external.on('picked', e => {\n if (!(e.features.length > 0)) {\n reject();\n return;\n }\n const attributes = layer.getEditingFields();\n const geometry = e.features[0].getGeometry();\n if (geometryType !== geometry.getType()) {\n e.feature.setGeometry(convertSingleMultiGeometry(geometry, geometryType));\n }\n const feature = new Feature({\n feature: e.feature,\n properties: attributes.map(attr => {\n // set media attribute to null or attribute belong to layer but not present o feature copied\n if (attr.pk || 'media' === attr.input.type || undefined === e.feature.get(attr.name)) {\n e.feature.set(attr.name, null);\n }\n return attr.name\n })\n });\n\n // evaluate Geometry Expression\n evaluateExpressionFields({ inputs, context, feature }).finally(() => {\n removeZValueToOLFeatureGeometry({ feature }); // remove eventually Z Values\n feature.setTemporaryId();\n source.addFeature(feature);\n session.pushAdd(layerId, feature, false);\n inputs.features.push(feature);\n resolve(inputs);\n });\n });\n }\n\n Object.values(interactions).forEach(i => this.addInteraction(i));\n this._selectInteractions.push(...Object.values(interactions));\n }));\n }\n\n stop() {\n Object.values(this.getSteps() || {}).forEach(s => s.reset && s.reset() );\n this._selectInteractions.forEach(i => this.removeInteraction(i));\n\n if (this._vectorLayer) {\n this.getMap().removeLayer(this._vectorLayer);\n }\n // reset selected\n this.getInputs().features.forEach(f => f.setStyle(this._originalStyle));\n\n this._originalStyle = null;\n this._vectorLayer = null;\n this._selectInteractions = [];\n this.multipleselectfeatures = [];\n }\n\n}", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n const __vue_script__ = {\n\n name: 'Copyfeaturesfromotherlayers',\n\n data() {\n return {\n id: this.$options.layers.find(l => l.selected).id,\n };\n },\n\n watch: {\n 'id'(id) {\n this.$options.layers.forEach(l => l.selected = id === l.id);\n }\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('div',{attrs:{\"id\":\"g3w-select-editable-layers-content\"}},[_c('select',{directives:[{name:\"select2\",rawName:\"v-select2\",value:('id'),expression:\"'id'\"}],attrs:{\"id\":\"g3w-select-editable-layers-to-copy\"}},_vm._l((_vm.$options.layers),function(layer){return _c('option',{key:layer.id,domProps:{\"value\":layer.id}},[_vm._v(_vm._s(layer.name))])}),0)])])}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = undefined\n /* scoped */\n const __vue_scope_id__ = undefined\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"CopyFeaturesFromOtherLayers.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (false) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n \n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n undefined,\n undefined,\n undefined\n )\n\n export default __vue_component__", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param feature\n * @param coordinates\n *\n * @returns { boolean }\n */\nexport function areCoordinatesEqual({\n feature,\n coordinates,\n}) {\n //get geometry from feature\n const geometry = feature.getGeometry();\n const type = geometry.getType();\n const coords = (c1, c2) => g3wsdk.core.geoutils.areCoordinatesEqual(c1, c2); // whether element have same coordinates\n\n switch (type) {\n case 'Polygon':\n case 'MultiLineString':\n coordinates = coordinates.flat();\n return geometry.getCoordinates().flat().every((c, i) => coords(c, coordinates[i]));\n\n case 'LineString':\n case 'MultiPoint':\n return geometry.getCoordinates().every((c, i) => coords(c, coordinates[i]));\n\n case 'MultiPolygon':\n // in case of add part or remove part\n if (coordinates.length !== geometry.getPolygons().length) { return false }\n return geometry.getPolygons().some((poly, i) => {\n const _coords = coordinates[i].flat();\n return poly.getCoordinates().flat().every((c, i) => coords(c, _coords[i]))\n });\n\n case 'Point':\n return coords(coordinates, geometry.getCoordinates());\n\n default:\n return false;\n }\n}", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n import { areCoordinatesEqual } from '../utils/areCoordinatesEqual';\n import { getFeatureTableFieldValue } from '../utils/getFeatureTableFieldValue';\n\n const __vue_script__ = {\n\n name: \"changes\",\n\n props: {\n commits: {\n type: Object,\n required: true,\n },\n layer: {\n type: Object,\n required: true,\n },\n relation: {\n type: Boolean,\n default: false\n }\n },\n\n data() {\n return {\n features: this.layer.readFeatures(), // original features\n efeatures: this.layer.readEditingFeatures(), // edited features,\n };\n },\n\n methods: {\n\n getFormattedValue(feat, key) {\n if (!feat) { return }\n //need to check if the current attribute is geometry and if it has value (mean not feat of alphanumeical layer)\n if ('geometry' === key && feat.get(key)) {\n return `(${ feat.get(key).getFlatCoordinates().length / 2 })`;\n }\n return getFeatureTableFieldValue({\n layerId: this.layer.getId(),\n feature: feat,\n property: key\n });\n },\n\n /**\n * Get value from origina feature\n * @param item\n * @param key\n * @return {string|*}\n */\n getValue(item, key) {\n return this.getFormattedValue(this.getFeature(item), key);\n },\n\n /**\n * Get value from edited feature\n * @param item\n * @param key\n * @return {string|*}\n */\n getEditingValue(item, key) {\n return this.getFormattedValue(this.getEditingFeature(item), key);\n },\n\n hasValue(item, key) {\n const feat = this.getFeature(item);\n const efeat = this.getEditingFeature(item); // NB: undefined when deleted\n return !((feat && efeat && null === feat.get(key) && null === efeat.get(key)) ||\n (feat && !efeat && null === feat.get(key)));\n },\n\n /**\n * @returns { string } item id (when deleted is the item itself)\n */\n getId(item) {\n return item.id || item;\n },\n\n /**\n * @returns edited feature\n */\n getEditingFeature(item) {\n return this.efeatures.find(f => this.getId(item) === f.getId());\n },\n\n /**\n * @returns original feature\n */\n getFeature(item) {\n return this.features.find(f => this.getId(item) === f.getId());\n },\n\n /**\n * @returns { string } layer type or empty string when geometry is undefined (alphanumerical layer)\n */\n getType(item) {\n const feat = this.getEditingFeature(item) || this.getFeature(item); // when deleted fallbacks to original feature\n return (feat && feat.getGeometry && feat.getGeometry()) ? feat.getGeometry().getType() : ''\n },\n\n /**\n * @returns { boolean } whether feature property has been edited\n */\n isEdited(item, key) {\n const feat = this.getFeature(item); // NB: undefined when added\n const efeat = this.getEditingFeature(item); // NB: undefined when deleted\n if ([feat, efeat].includes(undefined)) { return false }\n if (this.getType(item) && 'geometry' === key) {\n return !areCoordinatesEqual({ feature: feat, coordinates: efeat.get(key).getCoordinates() });\n }\n return efeat.get(key) !== feat.get(key);\n },\n\n getAttrs(item) {\n const feat = this.getEditingFeature(item) || this.getFeature(item); // when deleted fallbacks to original feature\n return Object.entries(feat ? feat.getProperties() : {}).sort((a, b) => a[0] > b[0])\n },\n\n getLayerById(id) {\n return g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').service.getLayerById(id);\n },\n\n },\n\n async mounted() {\n // insert a visual reference for `` values\n this.$refs.value.filter(d => !d.textContent).forEach(d => d.innerHTML = `<empty>`);\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.relation)?_c('h4',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin:pre\",value:('editing.messages.commit.header_relation'),expression:\"'editing.messages.commit.header_relation'\",arg:\"pre\"}],staticClass:\"skin-color g3w-long-text\",staticStyle:{\"font-weight\":\"bold\",\"margin\":\"15px 0\"}},[_vm._v(\": \"+_vm._s(_vm.layer.getName()))]):_vm._e(),_vm._v(\" \"),_vm._l((Object.keys(_vm.commits).filter(function (c) { return _vm.commits[c].length; })),function(c){return [_c('h4',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin:pre\",value:((\"editing.messages.commit.\" + c)),expression:\"`editing.messages.commit.${c}`\",arg:\"pre\"}]},[_vm._v(\" (\"+_vm._s(_vm.commits[c].length)+\") \")]),_vm._v(\" \"),_c('divider'),_vm._v(\" \"),_c('ul',_vm._l((_vm.commits[c]),function(item){return _c('li',[_c('details',[_c('summary',[_vm._v(_vm._s(_vm.getType(item))+\" #\"+_vm._s(_vm.getId(item)))]),_vm._v(\" \"),_vm._l((_vm.getAttrs(item)),function(ref){\nvar key = ref[0];\nvar val = ref[1];\nreturn [(_vm.hasValue(item, key))?_c('dl',[_c('dt',[_vm._v(_vm._s(key)+\":\")]),_vm._v(\" \"),_c('dd',[(_vm.isEdited(item, key))?[_c('del',{ref:\"value\",refInFor:true},[_vm._v(_vm._s(_vm.getValue(item, key)))]),_vm._v(\" \u2190 \"),_c('ins',{ref:\"value\",refInFor:true},[_vm._v(_vm._s(_vm.getEditingValue(item, key)))])]:_c('span',{ref:\"value\",refInFor:true},[_vm._v(_vm._s(_vm.getEditingValue(item, key) || _vm.getValue(item, key)))]),_vm._v(\" \"),('geometry' === key)?_c('i',[_c('code',[_vm._v(\"\")])]):_vm._e()],2)]):_vm._e()]})],2)])}),0)]}),_vm._v(\" \"),_vm._l((Object.entries(_vm.commits.relations)),function(ref){\nvar id = ref[0];\nvar commits = ref[1];\nreturn _c('changes',{attrs:{\"commits\":{\n add: commits.add,\n update: commits.update,\n delete: commits.delete,\n relations: commits.relations\n },\"relation\":true,\"layer\":_vm.getLayerById(id)}})})],2)}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-98c805ac_0\", { source: \"summary[data-v-98c805ac]{display:list-item;font-weight:700;padding:.5em;cursor:pointer;background-color:rgb(255,255,0,.25);font-size:medium;user-select:none}ul[data-v-98c805ac]{list-style:none;padding-left:0}ul>li[data-v-98c805ac]{margin-bottom:8px}ins[data-v-98c805ac]{background-color:#0f0;text-decoration-line:none}del[data-v-98c805ac]{background-color:tomato}dl[data-v-98c805ac]{display:grid;grid-template:auto/.5fr 1fr;margin-bottom:0;word-break:break-all}dt[data-v-98c805ac]{background:#fee}dd[data-v-98c805ac]{background:#f0f1f3}dd[data-v-98c805ac],dt[data-v-98c805ac]{margin:0;padding:.3em .5em;border-top:1px solid #fff}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-98c805ac\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"Changes.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n const { GUI } = g3wsdk.gui;\n const { Layer } = g3wsdk.core.layer;\n const { getResolutionFromScale } = g3wsdk.ol.utils;\n const { tPlugin } = g3wsdk.core.i18n;\n\n let snapInteraction;\n\n const __vue_script__ = {\n\n name: 'Toolbox',\n\n props: [\n 'state',\n 'resourcesurl'\n ],\n\n data() {\n return {\n active: false,\n helpmessage: null,\n //@since 3.8.0\n toggled: {\n relation: false, //click on relation icon\n layer: false, //click on pencil icon\n },\n snapAll: false,\n };\n },\n\n computed: {\n\n /**\n * @since g3w-client-plugin-editing@v3.7.0\n */\n editDisabled() {\n return this.state.loading && !this.state.startstopediting;\n },\n\n /**\n * @returns { boolean } whether current has related layer(s) (aka. layer relations / joins)\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\n hasRelations() {\n return this.state.editing.dependencies.length > 0;\n },\n\n /**\n * @returns { boolean|* }\n */\n loading() {\n return this.state.loading || this.state.changingtools;\n },\n\n /**\n * @returns { boolean }\n */\n canEdit() {\n return this.state.editing.canEdit;\n },\n\n /**\n * @returns { boolean }\n */\n father() {\n return this.state.editing.father && this.hasRelations;\n },\n\n /**\n * @returns { boolean }\n */\n showtoolsoftool() {\n return this.state.toolsoftool.length > 0;\n },\n\n /**\n * @returns { Promise }\n */\n isLayerReady() {\n return this.state.layer.state.editing.ready;\n },\n\n toolboxCursor() {\n return (!this.isLayerReady || !this.canEdit) ? `url(${this.resourcesurl}cursors/mZoomIn.svg), zoom-in` : undefined;\n },\n\n /**\n * @since g3w-client-plugin-editing@v3.9.0\n */\n get_tool_title() {\n return title => g3wsdk.core.ApplicationState.language && tPlugin(title);\n },\n\n },\n\n methods: {\n\n /**\n * @fires setselectedtoolbox\n */\n select() {\n if (this.isLayerReady && !this.state.selected) {\n this.$emit('setselectedtoolbox', this.state.id);\n }\n },\n\n /**\n * Handle click to fit zoom scale\n * \n * @since g3w-client-plugin-editing@v3.9.0 \n */\n fitZoomToScale(e) {\n if (this.state.selected && !this.canEdit) {\n const map = GUI.getService('map')\n map.goToRes(map.getCenter(), getResolutionFromScale(this.state._constraints.scale, map.getMapUnits()));\n }\n },\n\n /**\n * @fires stoptoolbox\n * @fires starttoolbox\n */\n toggleEditing() {\n this.select();\n this.toggled.layer = !(this.state.editing.on || this.toggled.layer);\n if (this.toggled.layer && this.state.layer.state.editing.ready && !this.state.loading) {\n this.$emit(this.state.editing.on ? 'stoptoolbox' : 'starttoolbox', this.state.id);\n }\n if (!this.toggled.layer) {\n this.$emit('stoptoolbox', this.state.id);\n }\n\n },\n\n /**\n * @fires setactivetool\n * @fires stopactivetool\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n toggleTool(toolId) {\n if (undefined === toolId) {\n this.$emit('stopactivetool', this.state.id);\n } else {\n this.$emit('setactivetool', toolId, this.state.id);\n }\n this.select();\n },\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n toggleFilterByRelation() {\n this.toggled.relation = !this.toggled.relation;\n this.$emit('update-filter-layers', this.toggled.relation ? [this.state.id, ...this.state.editing.dependencies]: []);\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/components/ToolsOfToolSnap.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _initSnap() {\n const tool = (this.state.toolsoftool || []).find(t => 'snap' === t.type);\n\n if (!tool) {\n return;\n }\n\n /**\n * @FIXME add description\n */\n this.snapFeatures = new ol.Collection();\n\n /**\n * @FIXME add description\n */\n this.snapEvents = [];\n\n /**\n * editing toolboxes dependencies\n */\n this.snapToolboxes = [];\n\n /**\n * unwatched function\n */\n this.snapUnwatches = [];\n\n this.$watch(() => tool.options.checked, () => this.activeSnapInteraction());\n this.$watch(() => tool.options.checkedAll, () => this.activeSnapInteraction());\n // Toggle snap interaction\n this.$watch(() => tool.options.active, () => {\n if (tool.options.active) {\n this.activeSnapInteraction();\n } else if (snapInteraction) {\n GUI.getService('map').removeInteraction(snapInteraction);\n }\n });\n\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing')\n .getLayers()\n .filter(l => Layer.LayerTypes.VECTOR === l.getType()) // skip raster, alphanumerical..\n .forEach(l => {\n const toolbox = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').getToolBoxById(l.getId());\n const source = toolbox.getLayer().getEditingSource();\n\n this.snapFeatures.extend(source.readFeatures());\n\n this.snapEvents.push({\n source,\n olKey: source.getFeaturesCollection().on('add', evt => this.addSnapFeatures([evt.element])),\n settersAndKeys: {\n 'addFeatures': source.onbefore('addFeatures', this.addSnapFeatures),\n 'addFeature': source.onbefore('addFeature', this.addSnapFeatures),\n 'clear': source.onbefore('clear', () => { source.readFeatures().forEach(f => this.snapFeatures.remove(f)); })\n },\n });\n\n // SNAP TO ALL: check if the current editing layer is not equal to `layerId`\n if (tool.options.layerId !== l.getId()) {\n const editing = toolbox.getState().editing;\n this.snapUnwatches.push(this.$watch(() => editing.on, this.setShowSnapAll));\n this.snapToolboxes.push(editing);\n }\n });\n\n this.setShowSnapAll();\n\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/components/ToolsOfToolSnap.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _unloadSnap() {\n if (!snapInteraction) { return }\n\n try {\n // stops event listeners\n this\n .snapEvents\n .forEach(d => {\n Object\n .keys(d.settersAndKeys)\n .forEach(event => { d.source.un(event, d.settersAndKeys[event]) });\n ol.Observable.unByKey(d.olKey)\n });\n this.snapUnwatches.forEach(unwatch => unwatch());\n\n snapInteraction = null;\n\n this.snapUnwatches = null;\n this.snapToolboxes = null;\n this.snapEvents = null;\n } catch (e) {\n console.warn(e);\n }\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/components/ToolsOfToolSnap.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n addSnapFeatures(features) {\n this.snapFeatures.extend(features)\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/components/ToolsOfToolSnap.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setShowSnapAll() {\n const tool = (this.state.toolsoftool || []).find(t => 'snap' === t.type);\n if (tool) {\n this.snapAll = !!this.snapToolboxes.find(editing => editing.on);\n tool.options.checkedAll = tool.options.showSnapAll ? tool.options.checkedAll : false;\n }\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/components/ToolsOfToolSnap.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n activeSnapInteraction() {\n const map = GUI.getService('map');\n const tool = (this.state.toolsoftool || []).find(t => 'snap' === t.type);\n\n if (snapInteraction) {\n map.removeInteraction(snapInteraction);\n }\n\n snapInteraction = null;\n\n // snap = true\n if ((tool.options.checked || tool.options.checkedAll) && tool.options.active) {\n snapInteraction = new ol.interaction.Snap({\n source: !tool.options.checkedAll && tool.options.checked && tool.options.source, // SNAP TO LAYER: get option source as props pass from toolbox\n features: tool.options.checkedAll && this.snapFeatures // SNAP TO ALL: get features\n });\n map.addInteraction(snapInteraction);\n }\n },\n\n },\n\n watch: {\n\n async 'state.activetool'(tool) {\n await this.$nextTick();\n this.helpmessage = tool && (tool.messages.help || tool.name);\n },\n\n /**\n * Watch toolbox in editing state\n * \n * @fires on-editing\n */\n 'state.editing.on'(bool) {\n this.$emit('on-editing', bool);\n },\n\n 'state.toolsoftool'(newTools, oldTools) {\n if (!newTools.length) {\n oldTools.filter(t => 'measure' === t.type).forEach(t => t.options.onChange(false));\n this._unloadSnap();\n } else {\n this._initSnap();\n }\n },\n\n },\n\n /**\n * @fires canEdit\n */\n created() {\n this.$emit('canEdit', { id: this.state.id });\n // this._initSnap();\n },\n\n async mounted() {\n // wait a little bit so others plugin can change things in toolbox\n // (ex. tools visibility which differs from default behaviour)\n await this.$nextTick();\n },\n\n beforeDestroy() {\n this._unloadSnap();\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {\nvar _obj;\nvar _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.state.show),expression:\"state.show\"}],staticClass:\"toolbox\",attrs:{\"id\":'id_toolbox_' + _vm.state.id}},[_c('div',{staticClass:\"panel\",class:{\n 'mobile': _vm.isMobile(),\n 'toolboxselected': _vm.state.selected,\n 'toolboxactive': _vm.state.editing.on && _vm.canEdit,\n 'geolayer': _vm.state.layer.isGeoLayer(),\n },on:{\"click\":function($event){$event.stopPropagation();return _vm.select.apply(null, arguments)}}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isLayerReady),expression:\"!isLayerReady\"}],staticClass:\"bar-loader\"}),_vm._v(\" \"),(_vm.state.toolboxheader)?_c('div',{staticClass:\"panel-heading container\",style:({ background: _vm.state.color})},[(_vm.father)?_c('i',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.tooltip.filter_by_relation'),expression:\"'plugins.editing.tooltip.filter_by_relation'\",arg:\"right\",modifiers:{\"create\":true}}],class:'filter-by-relation ' + _vm.g3wtemplate.font['relation'],on:{\"click\":_vm.toggleFilterByRelation}}):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"panel-title\"},[_vm._v(_vm._s(_vm.state.title))]),_vm._v(\" \"),_c('i',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(_vm.editDisabled),expression:\"editDisabled\"},{name:\"t-tooltip\",rawName:\"v-t-tooltip:left.create\",value:('plugins.editing.tooltip.edit_layer'),expression:\"'plugins.editing.tooltip.edit_layer'\",arg:\"left\",modifiers:{\"create\":true}}],staticClass:\"start-editing editbtn skin-tooltip-left\",class:( _obj = {\n 'pull-right': !_vm.isMobile(),\n 'enabled': _vm.isLayerReady,\n 'g3w-icon-toggled': _vm.state.editing.on\n }, _obj[_vm.g3wtemplate.font[(_vm.state.editing.on || _vm.toggled.layer) ? 'checkmark' : 'pencil']] = true, _obj ),on:{\"click\":function($event){$event.stopPropagation();return _vm.toggleEditing.apply(null, arguments)}}})]):_vm._e(),_vm._v(\" \"),_c('bar-loader',{attrs:{\"loading\":_vm.loading}}),_vm._v(\" \"),(!_vm.state.changingtools && (_vm.state.editing.on || _vm.toggled.layer))?_c('div',{class:{ 'panel-body':true, disabled: (!_vm.isLayerReady || !_vm.canEdit) },style:({ cursor: _vm.toolboxCursor, padding: '15px' }),on:{\"click\":_vm.fitZoomToScale}},[(!_vm.state.layer.isGeoLayer())?_c('div',{staticClass:\"info\"},[_c('i',{class:_vm.g3wtemplate.font['info']}),_vm._v(\" \"),_c('span',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.messages.toolbox_has_no_geometry'),expression:\"'editing.messages.toolbox_has_no_geometry'\"}]}),_vm._v(\" \"),_c('divider')],1):_vm._e(),_vm._v(\" \"),(_vm.hasRelations)?_c('div',{staticClass:\"info\"},[_c('i',{class:_vm.g3wtemplate.font['info']}),_vm._v(\" \"),_c('span',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.messages.toolbox_has_relation'),expression:\"'editing.messages.toolbox_has_relation'\"}]}),_vm._v(\" \"),_c('divider')],1):_vm._e(),_vm._v(\" \"),(_vm.state.message)?_c('div',{staticStyle:{\"color\":\"#000\"}},[_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:(_vm.state.message),expression:\"state.message\"}],staticClass:\"text-justify\"}),_vm._v(\" \"),_c('divider')],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"tools-content\"},_vm._l((_vm.state.tools),function(tool){\n var _obj;\nreturn (tool.visible)?_c('div',{key:tool.id,class:( _obj = { 'enabled' : tool.enabled, 'toggled' : tool.active }, _obj[(\"editbtn \" + (tool.id))] = true, _obj ),on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();tool.enabled && _vm.toggleTool(tool.active ? undefined : tool.id)}}},[_c('img',{attrs:{\"height\":\"25\",\"width\":\"25\",\"src\":(_vm.resourcesurl + \"images/\" + (tool.icon)),\"title\":_vm.get_tool_title((\"\" + (tool.name)))}})]):_vm._e()}),0),_vm._v(\" \"),_c('div',{staticClass:\"message\",attrs:{\"id\":(\"id_toolbox_messages_\" + (_vm.state.id))}},[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.showtoolsoftool)?_c('div',{attrs:{\"id\":\"toolsoftoolcontainer\"}},[_vm._l((_vm.state.toolsoftool),function(tool){return [('measure' === tool.type)?_c('div',{staticClass:\"snap-tool\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(tool.options.checked),expression:\"tool.options.checked\"}],staticClass:\"magic-checkbox snap_tools_of_tools\",attrs:{\"id\":\"g3w_editing_show_measure_tool\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(tool.options.checked)?_vm._i(tool.options.checked,null)>-1:(tool.options.checked)},on:{\"change\":[function($event){var $$a=tool.options.checked,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(tool.options, \"checked\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(tool.options, \"checked\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(tool.options, \"checked\", $$c)}},function () { return tool.options.onChange(tool.options.checked); }]}}),_vm._v(\" \"),_c('label',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:('plugins.editing.toolsoftool.measure'),expression:\"'plugins.editing.toolsoftool.measure'\",arg:\"right\",modifiers:{\"create\":true}}],attrs:{\"for\":\"g3w_editing_show_measure_tool\"}},[_c('b',{class:_vm.g3wtemplate.font['measure']})])]):('snap' === tool.type)?_c('div',{staticClass:\"tools-of-tool-snap\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(tool.options.checked),expression:\"tool.options.checked\"}],staticClass:\"magic-checkbox snap_tools_of_tools\",attrs:{\"type\":\"checkbox\",\"id\":(\"snap_\" + (_vm.state.id))},domProps:{\"checked\":Array.isArray(tool.options.checked)?_vm._i(tool.options.checked,null)>-1:(tool.options.checked)},on:{\"change\":[function($event){var $$a=tool.options.checked,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(tool.options, \"checked\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(tool.options, \"checked\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(tool.options, \"checked\", $$c)}},function($event){_vm.snapAll && tool.options.checked ? tool.options.checkedAll = false : null}]}}),_vm._v(\" \"),_c('label',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:right.create\",value:( 'plugins.editing.toolsoftool.snap'),expression:\" 'plugins.editing.toolsoftool.snap'\",arg:\"right\",modifiers:{\"create\":true}}],attrs:{\"for\":(\"snap_\" + (_vm.state.id))}},[_c('span',{class:_vm.g3wtemplate.font['magnete']})]),_vm._v(\" \"),(_vm.snapAll)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(tool.options.checkedAll),expression:\"tool.options.checkedAll\"}],staticClass:\"magic-checkbox snap_tools_of_tools\",attrs:{\"type\":\"checkbox\",\"id\":(\"snap_all_\" + (_vm.state.id))},domProps:{\"checked\":Array.isArray(tool.options.checkedAll)?_vm._i(tool.options.checkedAll,null)>-1:(tool.options.checkedAll)},on:{\"change\":[function($event){var $$a=tool.options.checkedAll,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(tool.options, \"checkedAll\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(tool.options, \"checkedAll\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(tool.options, \"checkedAll\", $$c)}},function($event){tool.options.checkedAll ? tool.options.checked = false : null}]}}):_vm._e(),_vm._v(\" \"),(_vm.snapAll)?_c('label',{directives:[{name:\"t-tooltip\",rawName:\"v-t-tooltip:left.create\",value:('plugins.editing.toolsoftool.snapall'),expression:\"'plugins.editing.toolsoftool.snapall'\",arg:\"left\",modifiers:{\"create\":true}}],attrs:{\"for\":(\"snap_all_\" + (_vm.state.id))}},[_c('span',{class:_vm.g3wtemplate.font['magnete']}),_vm._v(\" \"),_c('b',{class:_vm.g3wtemplate.font['layers']})]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c('divider')]})],2):_vm._e()]),_vm._v(\" \"),(_vm.helpmessage)?_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:(_vm.helpmessage),expression:\"helpmessage\"}],staticClass:\"toolbox_help_message\"}):_vm._e()],1)]):_vm._e()],1)])}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-6686a500_0\", { source: \".panel.mobile[data-v-6686a500]{margin-bottom:5px}.panel.mobile .panel-heading[data-v-6686a500]{display:flex;justify-content:space-between}.panel.mobile .panel-heading .panel-title[data-v-6686a500]{margin-top:auto;margin-bottom:auto}.panel.mobile .panel-heading .start-editing[data-v-6686a500]{margin:auto;margin-right:0;padding:6px}.panel.mobile .tools-content .editbtn[data-v-6686a500]{padding:9px}.panel.mobile .toolbox .panel-body[data-v-6686a500]{padding:5px!important}.toolbox_help_message[data-v-6686a500]{font-weight:lighter}.toolbox[data-v-6686a500]{padding-bottom:5px}.panel[data-v-6686a500]{border:0!important;margin-bottom:8px}.panel-heading[data-v-6686a500]{border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px;padding:5px 10px 5px 10px;width:100%}.toolboxselected[data-v-6686a500]{box-shadow:0 0 0 3px var(--skin-color)}.panel:not(.toolboxselected) .info[data-v-6686a500]{opacity:.4}.panel:not(.toolboxactive) .panel-heading[data-v-6686a500]{border-radius:3px;filter:grayscale(.8)}.panel:not(.geolayer) .panel-body[data-v-6686a500]{padding-top:0}.panel.toolboxactive:not(.geolayer) .editbtn.start-editing[data-v-6686a500]{color:#fff!important}.panel:not(.geolayer) .panel-heading[data-v-6686a500]{color:#3a4448}.editbtn.start-editing[data-v-6686a500]{padding:10px;color:currentColor!important;font-size:1.1em;margin:0}.panel-title[data-v-6686a500]{font-weight:700;word-break:break-word;padding:8px 0;display:inline-block}#toolsoftoolcontainer[data-v-6686a500]{display:flex;flex-direction:column;margin:5px;padding:5px;border-radius:5px}.info[data-v-6686a500]{color:#000}.info>i[data-v-6686a500]{color:#007bff;padding-right:2px}.info+.tools-content[data-v-6686a500]{margin-top:1em}.filter-by-relation[data-v-6686a500]{margin-right:5px;cursor:pointer;color:currentColor!important}.tools-content[data-v-6686a500]{display:flex;flex-wrap:wrap;gap:10px}.message[data-v-6686a500]{margin-top:5px;margin-bottom:5px;font-size:1.1em;color:#000}.snap-tool[data-v-6686a500]{display:flex}.snap-tool label>b[data-v-6686a500]{color:#222d32!important}.tools-of-tool-snap[data-v-6686a500]{display:flex;width:100%;justify-content:space-between}.tools-of-tool-snap label span[data-v-6686a500]{color:#222d32!important}.panel-body[data-v-6686a500]{padding:15px}.panel-body.disabled[data-v-6686a500]{opacity:.7}.panel-body.disabled>*[data-v-6686a500]{pointer-events:none}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-6686a500\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"Toolbox.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n import ToolboxComponent from './Toolbox.vue';\n import { promisify } from '../utils/promisify';\n\n const { GUI } = g3wsdk.gui;\n const {\n ApplicationState,\n ApplicationService,\n } = g3wsdk.core;\n const { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\n const { DataRouterService } = g3wsdk.core.data;\n\n const __vue_script__ = {\n\n name: 'Editing',\n\n data() {\n return {\n state: this.$options.service.state,\n service: this.$options.service,\n resourcesurl: this.$options.resourcesurl,\n showcommitbar: this.$options.showcommitbar,\n saving: false, // whether to show loading bar while committing to server (click on save disk icon)\n layersInEditing: 0, //@since 3.8.0 Number of layers in editing\n editingButtonsEnabled: true,\n /** @since g3w-client-plugin-editing@v3.8.0 */\n selectedlayers: [],\n /** @since g3w-client-plugin-editing@v3.8.0 */\n editinglayers: Object.entries(g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing')\n .getEditableLayers())\n .filter(([_,l]) => l.config.editing.visible) //exclude layers that are set visible to false\n .map(([id, layer]) => ({ id, name: layer.getName(), title: layer.getTitle() })),\n /** @since g3w-client-plugin-editing@v3.8.0 */\n activetool: null,\n };\n },\n\n components: {\n toolbox: ToolboxComponent,\n },\n\n transitions: {\n 'addremovetransition': 'showhide'\n },\n\n methods: {\n\n /**\n *\n * @param layers\n */\n updateFilterLayers(layers = []) {\n if (layers.length > 0) {\n this._selectedlayers = this.selectedlayers;\n this.selectedlayers = layers;\n } else {\n this.selectedlayers = this._selectedlayers;\n this._selectedlayers = layers;\n }\n\n $(this.$refs.selectlayers).val(this.selectedlayers).trigger('change');\n },\n\n /**\n * Handle editing state of toolbox layer\n * \n * @param bool\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n updateLayersInEditing(bool) {\n this.layersInEditing += bool ? 1 : -1;\n },\n\n undo() {\n if (this.canUndo) { this.service.undo() }\n },\n\n redo() {\n if (this.canRedo) { this.service.redo() }\n },\n\n /**\n * @param toolboxId\n */\n commit(toolboxId) {\n if (this.canCommit) {\n this.saving = true;\n this.service\n .commit({\n toolbox: this.service.getToolBoxById(toolboxId),\n modal: false,\n })\n .always(() => this.saving = false);\n }\n },\n\n /**\n * @param id\n */\n async startToolBox(id) {\n const toolbox = this.service.getToolBoxById(id);\n // check if a dependency layer (in relation) has some changes not committed\n const layerId = ApplicationState.online && toolbox.getDependencies().find(id => this.service.getToolBoxById(id).isDirty());\n if (layerId) {\n await this.commit_dirty(layerId);\n }\n toolbox.start();\n },\n\n /**\n * @param id\n */\n async stopToolBox(id) {\n const toolbox = this.service.getToolBoxById(id);\n\n try {\n if (toolbox.state.editing.history.commit) {\n await promisify(this.service.commit());\n }\n } catch (e) {\n console.warn(e);\n }\n\n await toolbox.stop();\n\n // re-enable query map control\n const control = undefined === this.service.getToolBoxes().find(t => t.state.editing.on) && GUI.getService('map').getMapControlByType({ type: 'query' });\n if (control && !control.isToggled()) {\n control.toggle();\n }\n },\n\n /**\n * Start tool of toolbox\n * \n * @param toolId\n * @param toolboxId\n */\n async startTool(toolId, toolboxId) {\n\n const toolbox = this.service.getToolBoxById(toolboxId);\n const enabled = this.activetool && toolboxId === this.activetool;\n\n if (!enabled && this.service.getToolBoxById(toolbox.getDependencies().find(id => id === this.activetool))) {\n await this.commit_dirty(this.activetool);\n }\n\n if (!enabled) {\n this.stopTool(this.activetool);\n }\n\n this.activetool = toolboxId;\n toolbox.setActiveTool(toolbox.getToolById(toolId));\n },\n\n /**\n * @param id\n */\n stopTool(id) {\n if (id) {\n this.service.getToolBoxById(id).stopActiveTool();\n }\n },\n\n /**\n * @param id\n */\n async selectToolBox(id) {\n const toolbox = this.service.getToolBoxById(id); // get toolbox by id\n const toolboxes = this.service.getToolBoxes(); // get all toolboxes\n const selected = toolboxes.find(t => t.isSelected()); // check if exist already toolbox selected (first time)\n\n // set already selected false\n if (selected) {\n selected.setSelected(false);\n selected.clearMessage();\n }\n\n // set the current selected toolbox to true\n toolbox.setSelected(true);\n\n this.state.toolboxselected = toolbox;\n },\n\n /**\n * Ensure pending (un-saved) changes are committed before start to edit another layer,\n * which could be in relation with current level (eg. Join 1:1) in order to prevent an\n * out-of-sync database state on remote QGIS server.\n * \n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * @param { string } id\n *\n * @returns { Promise }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async commit_dirty(id) {\n const toolbox = this.service.getToolBoxById(id);\n\n // commit changes\n try {\n if (toolbox.isDirty() && toolbox.hasDependencies()) {\n await promisify(this.service.commit({ toolbox }));\n console.info('[EDITING] committed dirty')\n }\n } catch (e) {\n // revert changes (clear history and session)\n try {\n [layerId]\n .concat(toolbox.getDependencies())\n .forEach(id => {\n const toolbox = this.service.getToolBoxById(id);\n const editor = toolbox.getEditor();\n //set original features get from server without changes\n editor.getEditingSource().setFeatures((editor.readFeatures() || []).map(f => f.clone()));\n //clear history of a layer - no changes\n toolbox.getSession().getHistory().clear();\n //stop eventually active tool\n toolbox.stopActiveTool();\n });\n console.info('[EDITING] reverted dirty');\n } catch (e) {\n console.warn(e);\n }\n }\n\n },\n\n /**\n * @param bool\n * \n * @private\n */\n _enableEditingButtons(bool) {\n this.editingButtonsEnabled = !bool;\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Check if already have off lines changes\n *\n * @param { Object } opts\n * @param { boolean } [opts.modal=true]\n * @param { boolean } [opts.unlock=false]\n *\n * @returns { Promise }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n checkOfflineChanges({\n modal = true,\n unlock = false,\n } = {}) {\n return new Promise((resolve, reject) => {\n // get offline item\n const changes = JSON.parse(window.localStorage.getItem('EDITING_CHANGES') || null);\n\n // if you find changes offline previously\n if (!changes) { return }\n\n const promises = [];\n const layerIds = [];\n //FORCE TO WAIT OTHERWISE STILL OFF LINE\n setTimeout(async () => {\n for (const layerId in changes) {\n layerIds.push(layerId);\n const toolbox = this.service.getToolBoxById(layerId);\n const commitItems = changes[layerId];\n promises.push(this.service.commit({ toolbox, commitItems, modal }))\n }\n\n try {\n await promisify($.when.apply(this.service, promises));\n resolve();\n } catch(e) {\n console.warn(e);\n reject(e);\n } finally {\n if (unlock) {\n layerIds.forEach(layerId => this.service.getLayerById(layerId).unlock());\n }\n // always reset items to null\n try { window.localStorage.setItem('EDITING_CHANGES', \"{}\"); }\n catch(e) { console.warn(e); }\n }\n }, 1000)\n })\n },\n\n },\n\n computed: {\n\n canCommit() {\n return (\n 'default' === this.state.saveConfig.mode\n && this.state.toolboxselected\n && this.state.toolboxselected.state.editing.history.commit\n && this.editingButtonsEnabled\n );\n },\n\n canUndo() {\n const canUndo = (\n this.state.toolboxselected\n && this.state.toolboxselected.state.editing.history.undo\n && this.editingButtonsEnabled\n );\n\n this.service.fireEvent('canUndo', canUndo);\n\n return canUndo;\n },\n\n canRedo() {\n const canRedo = (\n this.state.toolboxselected\n && this.state.toolboxselected.state.editing.history.redo\n && this.editingButtonsEnabled\n );\n\n this.service.fireEvent('canRedo', canRedo);\n\n return canRedo;\n },\n\n django_admin_url() {\n return window.initConfig.user.is_superuser ? new URL('/django-admin/editing/g3weditingfeaturelock/', window.initConfig.baseurl) : false;\n },\n\n filemanager_url() {\n return window.initConfig.user.is_superuser ? new URL('/filemanager/', window.initConfig.baseurl) : false;\n },\n\n },\n\n watch:{\n\n canCommit(bool) {\n window.onbeforeunload = () => bool || undefined; // register leave page\n },\n\n /**\n * @param { Number } n number of layer in editing\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n layersInEditing(n) {\n document.getElementsByClassName('close-pane-button')[0].classList[0 === n ? 'remove' : 'add']('g3w-disabled');\n },\n\n /**\n * ORIGINAL SOURCE: componentsSelectEditingLayers.vue@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n selectedlayers(layers = []) {\n const has_layers = layers.length > 0;\n\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n\n this.editinglayers.forEach(({ id }) => {\n const toolbox = service.getToolBoxById(id);\n const is_commit = has_layers && toolbox.state.editing.history.commit;\n const is_selected = layers.includes(id);\n\n toolbox.setShow(has_layers ? is_selected : true);\n\n if (has_layers && !is_selected && is_commit) {\n service.commit({ toolbox }).always(() => toolbox.stop());\n }\n\n if (has_layers && !is_selected && !is_commit) {\n toolbox.stop();\n }\n\n });\n },\n\n },\n\n created() {\n\n this._selectedlayers = []; //store previous selected layers\n\n this.appState = ApplicationState;\n\n // Array of object setter(as a key), key to unby (as value)\n this.unByKeys = this.unByKeys || [];\n\n // in case of starting panel editing check if there are some chenging pending\n // if true, it has to commit changes on server and unlock all layers features temporarily locked\n if (ApplicationState.online) {\n this.checkOfflineChanges({ unlock: true });\n }\n\n // register \"online\" event\n this.unByKeys.push({\n owner : ApplicationService,\n setter: 'online',\n key: ApplicationService.onafter('online', () => this.checkOfflineChanges({ modal: false }).catch(e => GUI.notify.error(e)))\n });\n\n GUI.closeContent();\n\n // open editing panel state\n this.state.open = false;\n CatalogLayersStoresRegistry.getLayers({ EDITABLE: true }).forEach(l => l.setInEditing(true));\n\n GUI.on('opencontent', this._enableEditingButtons);\n GUI.on('closeform', this._enableEditingButtons);\n GUI.on('closecontent', this._enableEditingButtons);\n },\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Called on a close editing panel panel\n */\n async beforeDestroy() {\n this.service.stop();\n\n // reset editing panel state\n this.state.open = false;\n CatalogLayersStoresRegistry.getLayers({ EDITABLE: true }).forEach(l => l.setInEditing(false));\n\n GUI.off('opencontent', this._enableEditingButtons);\n GUI.off('closeform', this._enableEditingButtons);\n GUI.off('closecontent', this._enableEditingButtons);\n\n // unregister \"online\" and \"offline\" events\n this.unByKeys.forEach(({ owner, setter, key }) => owner.un(setter, key));\n\n this.service.fireEvent('closeeditingpanel');\n\n // Show feature that is updated or created with editing on result content\n const layerIdChanges = Object.keys(this.state.featuresOnClose);\n if (layerIdChanges.length) {\n const inputs = {\n layers: [],\n fids: [],\n formatter: 1\n };\n layerIdChanges\n .forEach(id => {\n const fids = [...this.state.featuresOnClose[id]];\n if (fids.length > 0) {\n const layer = CatalogLayersStoresRegistry.getLayerById(id);\n inputs.layers.push(layer);\n inputs.fids.push(fids);\n }\n });\n\n const promise = inputs.layers.length ?\n DataRouterService.getData('search:layersfids', {\n inputs,\n outputs: {\n title: 'plugins.editing.editing_changes',\n show: { loading: false }\n }\n }) :\n Promise.resolve();\n try {\n await promise;\n } catch(e) { console.warn(e) }\n }\n\n this.state.featuresOnClose = {};\n\n this.service.getToolBoxes().forEach(t => t.resetDefault());\n\n // re-enable query map control\n const control = GUI.getService('map').getMapControlByType({ type: 'query' });\n if (control && !control.isToggled()) {\n control.toggle();\n }\n },\n\n };\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"g3w-editing-panel\"},[_c('bar-loader',{attrs:{\"loading\":_vm.saving}}),_vm._v(\" \"),(_vm.layersInEditing > 0)?_c('helpdiv',{staticStyle:{\"font-weight\":\"bold\"},attrs:{\"message\":\"plugins.editing.close_editing_panel.message\"}}):_vm._e(),_vm._v(\" \"),(!_vm.appState.online)?_c('div',{attrs:{\"id\":\"onlineofflinemessage\"}},[_c('div',{directives:[{name:\"t-plugin\",rawName:\"v-t-plugin\",value:('editing.messages.offline'),expression:\"'editing.messages.offline'\"}]})]):_vm._e(),_vm._v(\" \"),(_vm.showcommitbar)?_c('div',{directives:[{name:\"disabled\",rawName:\"v-disabled\",value:(_vm.saving),expression:\"saving\"}],staticClass:\"commitbar\"},[_c('div',{class:['editing-button', (_vm.canCommit ? 'enabled' : '')],on:{\"click\":function($event){$event.stopPropagation();return _vm.commit.apply(null, arguments)}}},[_c('span',{class:['editing-icon', _vm.g3wtemplate.font['save']]})]),_vm._v(\" \"),_c('div',{class:['editing-button', (_vm.canUndo ? 'enabled': '')],on:{\"click\":function($event){$event.stopPropagation();return _vm.undo.apply(null, arguments)}}},[_c('span',{class:['editing-icon', _vm.g3wtemplate.font['arrow-left']]})]),_vm._v(\" \"),_c('div',{class:['editing-button', (_vm.canRedo ? 'enabled' : '')],on:{\"click\":function($event){$event.stopPropagation();return _vm.redo.apply(null, arguments)}}},[_c('span',{class:['editing-icon', _vm.g3wtemplate.font['arrow-right']]})])]):_c('div',{staticStyle:{\"height\":\"10px\"}}),_vm._v(\" \"),(_vm.state.showselectlayers && _vm.editinglayers.length > 1)?_c('div',{staticClass:\"skin-color\",attrs:{\"id\":\"g3w-select-editable-layers-content\"}},[_c('label',{directives:[{name:\"t\",rawName:\"v-t\",value:('Layers'),expression:\"'Layers'\"}],attrs:{\"for\":\"g3w-select-editable-layers-to-show\"}}),_vm._v(\" \"),_c('select',{directives:[{name:\"select2\",rawName:\"v-select2\",value:('selectedlayers'),expression:\"'selectedlayers'\"}],ref:\"selectlayers\",attrs:{\"id\":\"g3w-select-editable-layers-to-show\",\"multiple\":true,\"clear\":true}},_vm._l((_vm.editinglayers),function(editinglayer){return _c('option',{key:editinglayer.id,domProps:{\"value\":editinglayer.id}},[_vm._v(_vm._s(editinglayer.name))])}),0)]):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"toolboxes\"}},_vm._l((_vm.state.toolboxes),function(toolbox){return _c('toolbox',{key:toolbox.id,attrs:{\"state\":toolbox,\"resourcesurl\":_vm.resourcesurl},on:{\"setselectedtoolbox\":_vm.selectToolBox,\"starttoolbox\":_vm.startToolBox,\"stoptoolbox\":_vm.stopToolBox,\"setactivetool\":_vm.startTool,\"stopactivetool\":_vm.stopTool,\"on-editing\":_vm.updateLayersInEditing,\"update-filter-layers\":_vm.updateFilterLayers}})}),1),_vm._v(\" \"),(_vm.django_admin_url)?_c('p',[_c('a',{attrs:{\"href\":_vm.django_admin_url,\"target\":\"_blank\"}},[_vm._v(\"\uD83D\uDD12 Locked features\")])]):_vm._e(),_vm._v(\" \"),(_vm.filemanager_url)?_c('p',[_c('a',{attrs:{\"href\":_vm.filemanager_url,\"target\":\"_blank\"}},[_vm._v(\"\uD83D\uDCC2 File manager\")])]):_vm._e()],1)}\nvar __vue_staticRenderFns__ = []\n\n /* style */\n const __vue_inject_styles__ = function (inject) {\n if (!inject) return\n inject(\"data-v-5599c278_0\", { source: \".g3w-editing-panel .editing-button .editing-icon{background-color:#3a4448;color:#222d32;font-size:1.8em;padding:10px;margin:5px;width:45px;height:45px;border-radius:30%;text-align:center}.g3w-editing-panel .editing-button.enabled .editing-icon{background-color:#fff;box-shadow:0 0 5px rgba(0,0,0,.7)}.g3w-editing-panel .editing-button{cursor:not-allowed}.g3w-editing-panel .editing-button.enabled{cursor:pointer}.g3w-editing-panel .editbtn{border-radius:30%;padding:10px;display:inline-block;opacity:.4;box-shadow:0 1px 1px 0 rgba(0,0,0,.1),0 1px 4px 0 rgba(0,0,0,.3)}.g3w-editing-panel .editbtn.enabled{opacity:1;cursor:pointer}.g3w-editing-panel .editbtn.enabled.toggled{box-shadow:0 0;background-color:#ddd}\", map: undefined, media: undefined })\n,inject(\"data-v-5599c278_1\", { source: \".g3w-editing-panel[data-v-5599c278]{margin-bottom:50px}#onlineofflinemessage[data-v-5599c278]{margin-bottom:5px;padding:5px;border-radius:3px;background-color:orange;color:#fff;font-weight:700}.commitbar[data-v-5599c278]{display:flex;justify-content:flex-end;margin-bottom:5px}.commitbar>div[data-v-5599c278]:first-of-type{margin-right:auto}#g3w-select-editable-layers-content[data-v-5599c278]{margin-bottom:10px;font-weight:700}#g3w-select-editable-layers-content label[data-v-5599c278]{color:#fff!important}#g3w-select-editable-layers-to-show[data-v-5599c278]{cursor:pointer}\", map: undefined, media: undefined })\n\n }\n /* scoped */\n const __vue_scope_id__ = \"data-v-5599c278\"\n /* module identifier */\n const __vue_module_identifier__ = undefined\n /* functional template */\n const __vue_is_functional_template__ = false\n /* component normalizer */\n function __vue_normalize__(\n template, style, script,\n scope, functional, moduleIdentifier, shadowMode,\n createInjector, createInjectorSSR, createInjectorShadow\n ) {\n const component = (typeof script === 'function' ? script.options : script) || {}\n\n // For security concerns, we use only base name in production mode.\n component.__file = \"Editing.vue\"\n\n if (!component.render) {\n component.render = template.render\n component.staticRenderFns = template.staticRenderFns\n component._compiled = true\n\n if (functional) component.functional = true\n }\n\n component._scopeId = scope\n\n if (true) {\n let hook\n if (false) {\n // In SSR.\n hook = function(context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (style) {\n style.call(this, createInjectorSSR(context))\n }\n // register component module identifier for async chunk inference\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n component._ssrRegister = hook\n }\n else if (style) {\n hook = shadowMode \n ? function(context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n }\n : function(context) {\n style.call(this, createInjector(context))\n }\n }\n\n if (hook !== undefined) {\n if (component.functional) {\n // register for functional component in vue file\n const originalRender = component.render\n component.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n const existing = component.beforeCreate\n component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n }\n\n return component\n }\n /* style inject */\n function __vue_create_injector__() {\n const styles = __vue_create_injector__.styles || (__vue_create_injector__.styles = {})\n const isOldIE =\n typeof navigator !== 'undefined' &&\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase())\n\n return function addStyle(id, css) {\n if (document.querySelector('style[data-vue-ssr-id~=\"' + id + '\"]')) return // SSR styles are present.\n\n const group = isOldIE ? css.media || 'default' : id\n const style = styles[group] || (styles[group] = { ids: [], parts: [], element: undefined })\n\n if (!style.ids.includes(id)) {\n let code = css.source\n let index = style.ids.length\n\n style.ids.push(id)\n\n if (true && css.map) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n code +=\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\n ' */'\n }\n\n if (isOldIE) {\n style.element = style.element || document.querySelector('style[data-group=' + group + ']')\n }\n\n if (!style.element) {\n const head = document.head || document.getElementsByTagName('head')[0]\n const el = style.element = document.createElement('style')\n el.type = 'text/css'\n\n if (css.media) el.setAttribute('media', css.media)\n if (isOldIE) {\n el.setAttribute('data-group', group)\n el.setAttribute('data-next-index', '0')\n }\n\n head.appendChild(el)\n }\n\n if (isOldIE) {\n index = parseInt(style.element.getAttribute('data-next-index'))\n style.element.setAttribute('data-next-index', index + 1)\n }\n\n if (style.element.styleSheet) {\n style.parts.push(code)\n style.element.styleSheet.cssText = style.parts\n .filter(Boolean)\n .join('\\n')\n } else {\n const textNode = document.createTextNode(code)\n const nodes = style.element.childNodes\n if (nodes[index]) style.element.removeChild(nodes[index])\n if (nodes.length) style.element.insertBefore(textNode, nodes[index])\n else style.element.appendChild(textNode)\n }\n }\n }\n }\n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n __vue_create_injector__,\n undefined,\n undefined\n )\n\n export default __vue_component__", "import { Workflow } from '../g3wsdk/workflow/workflow';\nimport { Step } from '../g3wsdk/workflow/step';\nimport { createEditingDataOptions } from '../utils/createEditingDataOptions';\nimport { setLayerUniqueFieldValues } from '../utils/setLayerUniqueFieldValues';\nimport { getRelationsInEditing } from '../utils/getRelationsInEditing';\nimport { getRelationId } from '../utils/getRelationId';\nimport { setAndUnsetSelectedFeaturesStyle } from '../utils/setAndUnsetSelectedFeaturesStyle';\nimport { chooseFeature } from '../utils/chooseFeature';\nimport { cloneFeature } from '../utils/cloneFeature';\nimport { evaluateExpressionFields } from '../utils/evaluateExpressionFields';\nimport { getNotEditableFieldsNoPkValues } from '../utils/getNotEditableFieldsNoPkValues';\nimport { getDeltaXY } from '../utils/getDeltaXY';\nimport { chooseFeatureFromFeatures } from '../utils/chooseFeatureFromFeatures';\nimport { convertToGeometry } from '../utils/convertToGeometry';\nimport { addTableFeature } from '../utils/addTableFeature';\nimport { getRelationFieldsFromRelation } from '../utils/getRelationFieldsFromRelation';\nimport { getLayersDependencyFeatures } from '../utils/getLayersDependencyFeatures';\nimport { getEditingLayerById } from '../utils/getEditingLayerById';\nimport { getRelationsInEditingByFeature } from '../utils/getRelationsInEditingByFeature';\nimport { isPointOnVertex } from '../utils/isPointOnVertex';\nimport { handleSplitFeature } from '../utils/handleSplitFeature';\nimport { addPartToMultigeometries } from '../utils/addPartToMultigeometries';\nimport { checkSessionItems } from '../utils/checkSessionItems';\nimport { promisify, $promisify } from '../utils/promisify';\nimport { unlinkRelation } from '../utils/unlinkRelation';\nimport { splitFeatures } from '../utils/splitFeatures';\nimport { isSameBaseGeometryType } from '../utils/isSameBaseGeometryType';\nimport { PickFeaturesInteraction } from '../interactions/pickfeaturesinteraction';\n\nimport {\n OpenFormStep,\n SelectElementsStep,\n PickFeatureStep,\n AddFeatureStep,\n MoveFeatureStep,\n ModifyGeometryVertexStep,\n OpenTableStep,\n} from '../workflows';\nimport it from \"editing/i18n/it\";\n\nObject\n .entries({\n Workflow,\n OpenFormStep,\n SelectElementsStep,\n PickFeatureStep,\n MoveFeatureStep,\n ModifyGeometryVertexStep,\n OpenTableStep,\n AddFeatureStep,\n })\n .forEach(([k, v]) => console.assert(undefined !== v, `${k} is undefined`));\n\nconst { GEOMETRY_TYPES } = g3wsdk.constant;\nconst {\n ApplicationState,\n G3WObject\n} = g3wsdk.core;\nconst { ProjectsRegistry } = g3wsdk.core.project;\nconst { DataRouterService } = g3wsdk.core.data;\nconst { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\nconst { Geometry, dissolve } = g3wsdk.core.geoutils;\nconst { removeZValueToOLFeatureGeometry } = g3wsdk.core.geoutils.Geometry;\nconst { tPlugin } = g3wsdk.core.i18n;\nconst { Layer } = g3wsdk.core.layer;\nconst { Feature } = g3wsdk.core.layer.features;\nconst { debounce, toRawType } = g3wsdk.core.utils;\nconst { GUI } = g3wsdk.gui;\nconst {\n getScaleFromResolution,\n getResolutionFromScale,\n} = g3wsdk.ol.utils;\n\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin/toolboxes/toolsfactory.js@v3.7.1\n */\nexport class ToolBox extends G3WObject {\n\n constructor(layer, dependencies = []) {\n super();\n\n const is_vector = [undefined, Layer.LayerTypes.VECTOR].includes(layer.getType());\n const geometryType = is_vector && layer.getGeometryType();\n const is_point = is_vector && Geometry.isPointGeometryType(geometryType);\n const is_line = is_vector && Geometry.isLineGeometryType(geometryType);\n const is_poly = is_vector && Geometry.isPolygonGeometryType(geometryType);\n const is_table = Layer.LayerTypes.TABLE === layer.getType();\n const isMultiGeometry = geometryType && Geometry.isMultiGeometry(geometryType);\n const iconGeometry = is_vector && (is_point ? 'Point' : is_line ? 'Line' : 'Polygon');\n //@since 3.9.0 Check if layer has relation layers editable\n const editable_relations = layer.getRelations().getArray()\n .filter(relation => {\n const l = CatalogLayersStoresRegistry.getLayerById(getRelationId({ layerId: layer.getId(), relation }));\n return l.isEditable();\n })\n .map(r => r);\n this._start = false;\n\n /** constraint loading features to a filter set */\n this.constraints = { filter: null, show: null, tools: [] };\n\n /** reactive state of history */\n this._constrains = { commit: false, undo: false, redo: false };\n\n /**\n * Array of states of a layer in editing\n * {\n * _states: [\n * {\n * id: unique key\n * state: [state] // example: history contains features state\n * // array because a tool can apply changes to more than one features at time (split di una feature)\n * },\n * {\n * id: unique key\n * state: [state]\n * },\n * ]\n * ....\n *\n * _current: unique key // usefult to undo redo\n *\n *\n */\n this._states = [];\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n this._history = {\n id: layer.getId(),\n state: new Proxy({}, { get: (_, prop) => this._constrains[prop] }),\n add: this.__add.bind(this),\n undo: this.__undo.bind(this),\n clear: this.__clearHistory.bind(this),\n redo: this.__redo.bind(this),\n getState: this.__getState.bind(this),\n getLastState: this.__getLastHistoryState.bind(this),\n commit: this.__commit.bind(this),\n };\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n */\n this._session = Object.assign(new G3WObject({ setters: {\n start: (options={}) => $promisify(this.__startSession(options)),\n stop: () => $promisify(this.__stopSession()),\n getFeatures: (options={}) => $promisify(this.__getFeatures(options)),\n saveChangesOnServer: commitItems => this.__saveChangesOnServer(commitItems),\n }}), {\n _history: this._history,\n state: new Proxy({}, { get: (_, prop) => this.state.editing.session[prop] }),\n getId: () => layer.getId(),\n getLastHistoryState: this.__getLastHistoryState.bind(this),\n isStarted: this.__isStarted.bind(this),\n getHistory: this.__getHistory.bind(this),\n getEditor: this.__getEditor.bind(this),\n push: this.__push.bind(this),\n pushDelete: this.__pushDelete.bind(this),\n save: this.__save.bind(this),\n pushAdd: this.__pushAdd.bind(this),\n pushUpdate: this.__pushUpdate.bind(this),\n rollback: this.__rollback.bind(this),\n rollbackDependecies: this.__rollbackDependecies.bind(this),\n undo: this.__undoSession.bind(this),\n redo: this.__redoSession.bind(this),\n getCommitItems: this.__getCommitItems.bind(this),\n commit: this.save.bind(this),\n clear: this.__clearSession.bind(this),\n clearHistory: this.__clearHistory.bind(this),\n });\n\n // register this session on session registry\n ToolBox._sessions[layer.getId()] = this;\n\n /** @type { 'create' | 'update_attributes' | 'update_geometry' | delete' | undefined } undefined means all possible tools base on type */\n const capabilities = layer.getEditingCapabilities() || [];\n\n this.state = {\n layer,\n id : layer.getId(),\n changingtools : false, // whether to show tools during change phase\n show : layer.config.editing.visible, // whether to show the toolbox if we need to filtered\n color : layer.getColor() || 'blue',\n title : ` ${layer.getTitle()}` || \"Edit Layer\",\n customTitle : false,\n loading : false,\n enabled : false,\n toolboxheader : true,\n startstopediting : true,\n message : null,\n toolmessages : { help: null },\n toolsoftool : [],\n selected : false,\n activetool : null,\n editing : {\n session : {\n id: new Proxy({}, { get: () => this.state.id }),\n started: false,\n getfeatures: false,\n /** current state of history (useful for undo /redo) */\n current: null,\n /** temporary change not save on history */\n changes: [],\n },\n history : this._history.state,\n on : false,\n dependencies,\n relations : Object.values(layer.isFather() && dependencies.length ? layer.getRelations().getRelations() : {}),\n father : layer.isFather(),\n canEdit : true\n },\n /** @since g3w-client-plugin-editing@v3.7.0 store key events setters */\n _unregisterStartSettersEventsKey: [],\n _getFeaturesOption: {},\n _layerType: layer.getType() || Layer.LayerTypes.VECTOR,\n _enabledtools: undefined,\n _disabledtools: undefined,\n _constraints: layer.getEditingConstrains() || {},\n _tools: [\n // Add Feature\n (is_vector) && capabilities.includes('add_feature') && {\n id: 'addfeature',\n type: ['add_feature'],\n name: 'editing.tools.add_feature',\n icon: `add${iconGeometry}.png`,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addfeatureworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'addfeature',\n steps: [\n new AddFeatureStep({ layer, tools: ['snap', 'measure'] }),\n new OpenFormStep({ layer }),\n ],\n }),\n },\n // Edit Attributes Feature\n (is_vector) && capabilities.includes('change_attr_feature') && {\n id: 'editattributes',\n type: ['change_attr_feature'],\n name: 'editing.tools.update_feature',\n icon: 'editAttributes.png',\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editfeatureattributesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n helpMessage: 'editing.tools.update_feature',\n type: 'editfeatureattributes',\n steps: [\n new PickFeatureStep(),\n new Step({ run: chooseFeature }),\n new OpenFormStep(),\n ],\n }),\n },\n // Delete Feature\n (is_vector) && capabilities.includes('delete_feature') && {\n id: 'deletefeature',\n type: ['delete_feature'],\n name: 'editing.tools.delete_feature',\n icon: `delete${iconGeometry}.png`,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/deletefeatureworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'deletefeature',\n steps: [\n new PickFeatureStep(),\n new Step({ run: chooseFeature }),\n // delete feature\n new Step({\n help: \"editing.steps.help.double_click_delete\",\n run(inputs, context) {\n return $promisify(async() => {\n const layerId = inputs.layer.getId();\n const feature = inputs.features[0];\n \n // get all relations of the current editing layer that are in editing\n // and filter relations\n // get relation layer id that are in relation with layerId (current layer in editing)\n // get fields of relation layer that are in relation with layerId\n // Exclude relation child layer that has at least one\n // editing field required because when unlink relation feature from\n // delete father, when try to commit update relation, we receive an error\n // due missing value /null to required field.\n const relations = getRelationsInEditing({\n layerId,\n relations: inputs.layer.getRelations() ? inputs.layer.getRelations().getArray() : []\n }).filter(\n relation => getEditingLayerById(getRelationId({ layerId, relation }))\n .getEditingFields() //get editing field of relation layer\n .filter(f => getRelationFieldsFromRelation({ relation, layerId: getRelationId({ layerId, relation }) }).ownField.includes(f.name)) //filter only relation fields\n .every(f => !f.validate.required) // check required\n );\n\n // promise return features relations and add to relation layer child\n if (relations.length > 0) {\n await getLayersDependencyFeatures(layerId, { feature, relations});\n }\n\n inputs.features = [feature];\n\n // Unlink relation features related to layer id\n getRelationsInEditingByFeature({ layerId, relations, feature }).forEach(({ relation, relations }) => {\n relations.forEach(r => unlinkRelation({ layerId, relation, relations, index: 0, dialog: false }));\n });\n\n context.session.pushDelete(layerId, feature);\n\n return inputs;\n });\n },\n }),\n // confirm step\n new Step({\n run(inputs) {\n return $promisify(async () => {\n const editingLayer = inputs.layer.getEditingLayer();\n const feature = inputs.features[0];\n const layerId = inputs.layer.getId();\n const promise = new Promise((resolve, reject) => {\n GUI\n .dialog\n .confirm(\n `

${tPlugin('editing.messages.delete_feature')}

`\n + `
`\n + (inputs.layer.getChildren().length && getRelationsInEditing({ layerId, relations: inputs.layer.getRelations().getArray() }).length\n ? tPlugin('editing.messages.delete_feature_relations')\n : ''\n )\n + `
`,\n result => {\n if (!result) {\n reject(inputs);\n return;\n }\n editingLayer.getSource().removeFeature(feature);\n // Remove unique values from unique fields of a layer (when deleting a feature)\n const fields = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.uniqueFieldsValues[layerId];\n if (fields) {\n Object\n .keys(feature.getProperties())\n .filter(f => undefined !== fields[f])\n .forEach(f => fields[f].delete(feature.get(f)));\n }\n resolve(inputs);\n }\n );\n });\n\n if (inputs.features) {\n setAndUnsetSelectedFeaturesStyle({\n promise: $promisify(async () => { try { return await promise; } catch(e) { console.warn(e); return Promise.reject(e) }}),\n inputs,\n style: this.selectStyle,\n });\n }\n return promise;\n })\n }\n }),\n ],\n }),\n },\n // Edit vertex Feature\n (is_line || is_poly) && capabilities.includes('change_feature') && {\n id: 'movevertex',\n type: ['change_feature'],\n name: \"editing.tools.update_vertex\",\n icon: \"moveVertex.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/modifygeometryvertexworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'modifygeometryvertex',\n helpMessage: 'editing.tools.update_vertex',\n steps: [\n new PickFeatureStep({ layer }),\n new Step({ run: chooseFeature }),\n new ModifyGeometryVertexStep({ tools: ['snap', 'measure'] }),\n ],\n }),\n },\n // Edit Attributes to Multi features\n (is_vector) && capabilities.includes('change_attr_feature') && {\n id: 'editmultiattributes',\n type: ['change_attr_feature'],\n name: \"editing.tools.update_multi_features\",\n icon: \"multiEditAttributes.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editmultifeatureattributesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'editmultiattributes',\n helpMessage: 'editing.tools.update_multi_features',\n registerEscKeyEvent: true,\n runOnce: true,\n steps: [\n new SelectElementsStep({\n type: 'multiple',\n steps: {\n select: {\n description: `editing.workflow.steps.${ApplicationState.ismobile ? 'selectDrawBoxAtLeast2Feature' : 'selectMultiPointSHIFTAtLeast2Feature'}`,\n buttonnext: {\n disabled: true,\n condition:({ features = [] }) => features.length < 2,\n done: () => { Workflow.Stack.getCurrent().clearUserMessagesSteps(); },\n },\n dynamic: 0,\n done: false,\n reset() { this.dynamic = 0; },\n }\n }\n }),\n new OpenFormStep({ multi: true }),\n ],\n }),\n },\n // @since 3.9.0 Edit Attributes of relations features to Multi features\n (is_vector) && capabilities.includes('change_attr_feature') && editable_relations.filter(r => 'ONE' !== r.getType()).length > 0 && {\n id: 'editmultiattributesrelationfeatures',\n type: ['change_attr_feature'],\n name: \"editing.tools.update_multi_features_relations_from_parents\",\n icon: \"EditMultiRelationFeatures.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editmultifeatureattributesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'editmultiattributesrelationfeatures',\n helpMessage: 'editing.tools.update_multi_features_relations_from_parents',\n registerEscKeyEvent: true,\n runOnce: true,\n steps: [\n new SelectElementsStep({\n type: 'multiple',\n steps: {\n select: {\n description: `editing.workflow.steps.${ApplicationState.ismobile ? 'selectDrawBoxAtLeast2Feature' : 'selectMultiPointSHIFTAtLeast2Feature'}`,\n buttonnext: {\n disabled: true,\n condition: ({ features = [] }) => features.length < 2,\n done: () => { Workflow.Stack.getCurrent().clearUserMessagesSteps(); }\n },\n dynamic: 0,\n done: false,\n reset() { this.dynamic = 0; },\n }\n }\n }),\n new Step({\n run: async (inputs, context) => {\n GUI.setModal(true);\n const relations = editable_relations.filter(r => 'ONE' !== r.getType());\n //get relation features from feature parent layer\n await Promise.allSettled(inputs.features.map(feature => getLayersDependencyFeatures(inputs.layer.getId(), {\n relations,\n feature,\n filterType: 'fid',\n })))\n //get first relation layer id\n let relationLayerId = relations[0].getChild();\n\n //In case of multi relation in editing\n if (relations.length > 1) {\n //ser relation layer id\n try {\n await new Promise((resolve, reject) => {\n const vueInstance = new (Vue.extend({\n name: 'multi-relations-fetures',\n template: `
\n \n
\n `,\n data() {\n return {\n relations: this.$options.relations,\n relationId: this.$options.relationId\n }\n }\n }))({ relations, relationId: relations[0].state.id })\n\n GUI.showModalDialog({\n title: tPlugin('editing.relations'),\n className: 'modal-left',\n closeButton: false,\n message: vueInstance.$mount().$el,\n buttons: {\n cancel: {\n label: 'Cancel',\n className: 'btn-danger',\n callback() { reject(); }\n },\n ok: {\n label: 'Ok',\n className: 'btn-success',\n callback: async () => {\n //set relation layer id to editin\n relationLayerId = relations.find(r => vueInstance.relationId === r.state.id).getChild();\n resolve();\n }\n }\n }\n }).on('hide.bs.modal', () => vueInstance.$destroy()); //destroy vue instance after dialog is a closed\n //hide user message step\n })\n } catch(e) {\n console.warn(e);\n GUI.setModal(false);\n return $promisify(Promise.reject(e));\n }\n }\n\n //start child workflow\n const workflow = new Workflow({\n type: 'editmultiattributes',\n steps: [\n new OpenFormStep({ multi: true }),\n ],\n });\n //Relations layer\n const rLayer = getEditingLayerById(relationLayerId);\n\n if (0 === rLayer.readFeatures().length) {\n GUI.setModal(false);\n\n GUI.showUserMessage({\n type: 'warning',\n message: 'plugins.editing.no_relations_found',\n autoclose: true,\n })\n return $promisify(Promise.reject());\n }\n\n const fields = getRelationFieldsFromRelation({\n layerId: relations[0].getChild(),\n relation: relations[0]\n });\n\n const options = {\n context: {\n session: Workflow.Stack.getCurrent().getSession(), // get parent workflow\n excludeFields: fields.ownField, // array of fields to be excluded\n isContentChild: false, //@since 3.9.0 force child to false\n },\n inputs: {\n features: rLayer.readFeatures(),\n layer: rLayer\n }\n }\n\n try {\n //set eventually unique values\n await setLayerUniqueFieldValues(relationLayerId);\n await promisify(workflow.start(options));\n } catch(e) {\n console.warn(e);\n }\n\n workflow.stop();\n\n GUI.setModal(false);\n return $promisify(Promise.resolve(inputs, context));\n }\n }),\n ],\n }),\n },\n // Move Feature\n (is_vector) && capabilities.includes('change_feature') && {\n id: 'movefeature',\n type: ['change_feature'],\n name: 'editing.tools.move_feature',\n icon: `move${iconGeometry}.png`,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/movefeatureworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'movefeature',\n helpMessage: 'editing.tools.move_feature',\n steps: [\n new PickFeatureStep(),\n new Step({ run: chooseFeature }),\n new MoveFeatureStep(),\n ],\n }),\n },\n // Copy Feature from another layer\n (() => {\n let layers = [];\n return (is_vector) && capabilities.includes('add_feature') && {\n id: 'copyfeaturesfromotherlayer',\n type: ['add_feature'],\n name: \"editing.tools.pastefeaturesfromotherlayers\",\n icon: \"pasteFeaturesFromOtherLayers.png\",\n enable: (function() {\n const catalogService = GUI.getService('catalog');\n const layerId = layer.getId();\n const geometryType = layer.getGeometryType();\n const data = {\n bool: true,\n tool: undefined\n };\n CatalogLayersStoresRegistry.getLayers({\n GEOLAYER: true,\n BASELAYER: false\n })\n // check selected feature layers\n const updatelayers = () => {\n const checkGeometry = type => (\n type\n && isSameBaseGeometryType(geometryType, type)\n && (\n (geometryType === type)\n || Geometry.isMultiGeometry(geometryType)\n || !Geometry.isMultiGeometry(type)\n )\n )\n layers = [\n //project layers\n ...CatalogLayersStoresRegistry.getLayers({ GEOLAYER: true, BASELAYER: false })\n .filter(l => (layerId !== l.getId()) && checkGeometry(l.getGeometryType())),\n //external layer\n ...catalogService.getExternalLayers({type:'vector'}).filter(l => checkGeometry(l.geometryType))\n ].map((l, i) => ({\n id: (l.state || {id: l.id}).id,\n name: (l.state || {name: l.name}).name,\n external: l.external || false,\n selected: 0 === i,\n }));\n return data.tool.enabled = layers.length > 0\n };\n return ({ bool, tool = {} }) => {\n data.tool = tool;\n data.bool = bool;\n catalogService.onafter('addExternalLayer', updatelayers);\n catalogService.onafter('removeExternalLayer', updatelayers);\n return updatelayers()\n }\n }()),\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/copyfeaturesfromotherlayerworkflow.js@v3.7.1 */\n op: (() => {\n const openFormStep = new OpenFormStep({ layer, help: 'editing.steps.help.copy' });\n return new Workflow({\n layer,\n type: 'copyfeaturesfromotherlayer',\n runOnce: true,\n steps: [\n new Step({\n layer,\n //@since 3.9.0 to show user message steps\n steps: {\n chooselayer: {\n description: `editing.modal.tools.copyfeaturefromotherlayer.title`,\n done: false,\n },\n selectgeometry: {\n description: `editing.workflow.steps.selectPoint`,\n done: false,\n }\n },\n run(inputs, context) {\n return $promisify(new Promise((resolve, reject) => {\n const originalLayer = inputs.layer;\n const geometryType = originalLayer.getGeometryType();\n const layerId = originalLayer.getId();\n //get attributes/properties from current layer in editing\n const attributes = originalLayer.getEditingFields().filter(a => !a.pk);\n const session = context.session;\n const editingLayer = originalLayer.getEditingLayer();\n const source = editingLayer.getSource();\n //set reactive\n const vueInstance = new (Vue.extend(require('../components/CopyFeaturesFromOtherLayers.vue').default))({layers});\n const message = vueInstance.$mount().$el;\n GUI.showModalDialog({\n title: tPlugin('editing.relation.copy_feature_from_other_layer'),\n className: 'modal-left',\n closeButton: false,\n message,\n buttons: {\n cancel: {\n label: 'Cancel',\n className: 'btn-danger',\n callback() { reject(); }\n },\n ok: {\n label: 'Ok',\n className: 'btn-success',\n callback: async () => {\n //set choose layer step done\n this.setUserMessageStepDone('chooselayer');\n try {\n const feature = await $promisify(async () => {\n //get selected layer\n const layer = layers.find(l => l.selected);\n const features = await (new Promise(async resolve => {\n this.addInteraction(\n layer.external\n ? new PickFeaturesInteraction({ layer: GUI.getService('map').getLayerById(layer.id) })\n : new g3wsdk.ol.interactions.PickCoordinatesInteraction(), {\n 'picked': async e => {\n try {\n resolve(convertToGeometry(\n layer.external\n ? e.features // external layer\n : ((await DataRouterService.getData('query:coordinates', { // TOC/PROJECT layer\n inputs: {\n coordinates: e.coordinate,\n query_point_tolerance: ProjectsRegistry.getCurrentProject().getQueryPointTolerance(),\n layerIds: [layer.id],\n multilayers: false\n },\n outputs: null\n })).data[0] || { features: [] }).features,\n geometryType,\n ))\n } catch(e) {\n console.warn(e);\n }\n }\n }\n );\n }));\n\n let _feature;\n\n try {\n _feature = features.length > 1\n ? await promisify(chooseFeatureFromFeatures({ features, inputs }))\n : features[0];\n } catch (e) {\n console.warn(e);\n }\n\n if (_feature) {\n const feature = new Feature({\n feature: _feature,\n properties: attributes.map(a => a.name)\n })\n\n feature.setTemporaryId();\n return feature;\n }\n\n GUI.showUserMessage({\n type: 'warning',\n message: 'plugins.editing.messages.no_feature_selected',\n closable: false,\n autoclose: true\n });\n\n return Promise.reject();\n });\n\n //@TODO check better way\n //Set undefined property to null otherwise on commit\n // property are lost\n attributes.forEach(({ name }) => {\n if (undefined === feature.get(name)) { feature.set(name, null) }\n })\n\n originalLayer.getEditingNotEditableFields()\n .find(field => {\n if (originalLayer.isPkField(field)) { feature.set(field, null) }\n });\n //remove eventually Z Values\n removeZValueToOLFeatureGeometry({ feature });\n feature.setTemporaryId();\n source.addFeature(feature);\n session.pushAdd(layerId, feature, false);\n inputs.features.push(feature)\n this.fireEvent('addfeature', feature)\n resolve(inputs);\n }\n catch(e) {\n console.warn(e);\n reject(e);\n }\n }\n }\n }\n }).on('hide.bs.modal', () => vueInstance.$destroy()); //destroy vue instance after dialog is a closed\n //hide user message step\n }));\n },\n }),\n openFormStep,\n ],\n registerEscKeyEvent: true\n });\n })(),\n }\n })(),\n // Copy Feature from layer\n (is_vector) && capabilities.includes('add_feature') && {\n id: 'copyfeatures',\n type: ['add_feature'],\n name: \"editing.tools.copy\",\n icon: `copy${iconGeometry}.png`,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/copyfeaturesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'copyfeatures',\n runOnce: true,\n steps: [\n new SelectElementsStep({\n layer,\n help: 'editing.steps.help.copy',\n type: ApplicationState.ismobile ? 'single' : 'multiple',\n steps: {\n select: {\n description: `editing.workflow.steps.${ApplicationState.ismobile ? 'selectPoint' : 'selectPointSHIFT'}`,\n done: false,\n }\n },\n }, true),\n // get vertex\n layer.getGeometryType().includes('Point') ? undefined : new Step({\n layer,\n help: 'editing.steps.help.select',\n steps: {\n from: {\n description: 'editing.workflow.steps.selectStartVertex',\n done: false,\n }\n },\n run(inputs) {\n /** @since g3w-client-plugin-editing@v3.8.0 */\n return $promisify( async () => {\n const promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n if (0 === inputs.features.length) {\n return reject('no feature');\n }\n this.addInteraction(\n new ol.interaction.Draw({ type: 'Point', condition: e => inputs.features.some(f => isPointOnVertex({ feature: f, coordinates: e.coordinate}))}), {\n 'drawend': e => {\n inputs.coordinates = e.feature.getGeometry().getCoordinates();\n this.setUserMessageStepDone('from');\n resolve(inputs);\n }\n });\n this.addInteraction(\n new ol.interaction.Snap({ edge: false, features: new ol.Collection(inputs.features) })\n );\n })\n /** @since g3w-client-plugin-editing@v3.8.0 */\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(async () => { try { return await promise; } catch(e) { console.warn(e); return Promise.reject(e); } }), inputs, style: this.selectStyle })\n return promise;\n })\n },\n stop() {\n /** @since g3w-client-plugin-editing@v3.8.0 */\n //Always resolve promise (in case of a press esc key)\n this.resolve(true);\n this.resolve = null;\n },\n }),\n // move elements\n new Step({\n layer,\n help: \"editing.steps.help.select_vertex_to_paste\",\n steps: {\n to: {\n description: 'editing.workflow.steps.selectToPaste',\n done: false,\n }\n },\n run(inputs, context) {\n return $promisify(async () => {\n const {\n layer,\n features,\n coordinates\n } = inputs;\n const source = layer.getEditingLayer().getSource();\n const layerId = layer.getId();\n const session = context.session;\n const promise = new Promise((resolve, reject) => {\n this.addInteraction(\n new ol.interaction.Draw({ type: 'Point', features: new ol.Collection() }), {\n 'drawend': evt => {\n const [x, y] = evt.feature.getGeometry().getCoordinates();\n const deltaXY = coordinates ? getDeltaXY({x, y, coordinates}) : null;\n const featuresLength = features.length;\n const promisesDefaultEvaluation = [];\n\n for (let i = 0; i < featuresLength; i++) {\n const feature = cloneFeature(features[i], layer);\n if (deltaXY) {\n feature.getGeometry().translate(deltaXY.x, deltaXY.y);\n }\n else {\n const coordinates = feature.getGeometry().getCoordinates();\n const deltaXY = getDeltaXY({ x, y, coordinates });\n feature.getGeometry().translate(deltaXY.x, deltaXY.y)\n }\n // set media fields to null\n //@since 3.9.0 Comment\n //layer.getEditingMediaFields({}).forEach(f => feature.set(f, null));\n /**\n * evaluated geometry expression\n */\n promisesDefaultEvaluation.push(evaluateExpressionFields({ inputs, context, feature }))\n }\n Promise\n .allSettled(promisesDefaultEvaluation)\n .then(promises => promises\n .forEach(({ status, value:feature }) => {\n\n /**\n * @todo improve client core to handle this situation on session.pushAdd not copy pk field not editable only\n */\n const noteditablefieldsvalues = getNotEditableFieldsNoPkValues({ layer, feature });\n const newFeature = session.pushAdd(layerId, feature);\n // after pushAdd need to set not edit\n if (Object.entries(noteditablefieldsvalues).length) {\n Object\n .entries(noteditablefieldsvalues)\n .forEach(([field, value]) => newFeature.set(field, value));\n }\n\n //need to add to editing layer source newFeature\n source.addFeature(newFeature);\n\n inputs.features.push(newFeature);\n })\n )\n .finally(() => {\n this.setUserMessageStepDone('to');\n resolve(inputs);\n })\n }\n });\n\n this.addInteraction(\n new ol.interaction.Snap({ source, edge: false })\n );\n });\n\n /** @since g3w-client-plugin-editing@v3.8.0 */\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(async () => { try { return await promise; } catch(e) { console.warn(e); return Promise.reject(e); } }), inputs, style: this.selectStyle });\n return promise;\n });\n },\n }),\n ].filter(Boolean),\n registerEscKeyEvent: true,\n }),\n },\n // Add part to MultiGeometry Feature\n (is_vector) && capabilities.includes('add_feature') && capabilities.includes('change_feature') && {\n id: 'addPart',\n type: ['add_feature', 'change_feature'],\n name: \"editing.tools.addpart\",\n icon: \"addPart.png\",\n visible: isMultiGeometry,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addparttomultigeometriesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'addparttomultigeometries',\n helpMessage: 'editing.tools.addpart',\n runOnce: true,\n steps: [\n new PickFeatureStep({\n steps: {\n select: {\n description: 'editing.workflow.steps.select',\n done: false,\n }\n },\n }),\n new Step({\n run: chooseFeature,\n help: 'editing.steps.help.select_element',\n }),\n new AddFeatureStep({\n layer,\n help: 'editing.steps.help.select_element',\n add: false,\n steps: {\n addfeature: {\n description: 'editing.workflow.steps.draw_part',\n done: false,\n }\n },\n tools: ['snap', 'measure'],\n }),\n // add part to multi geometries\n new Step({\n layer,\n help: 'editing.steps.help.select_element',\n run: addPartToMultigeometries\n }),\n ],\n registerEscKeyEvent: true\n }),\n },\n // Remove part from MultiGeometry Feature\n (is_vector) && capabilities.includes('change_feature') && {\n id: 'deletePart',\n type: ['change_feature'],\n name: \"editing.tools.deletepart\",\n icon: \"deletePart.png\",\n visible: isMultiGeometry,\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/deletepartfrommultigeometriesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'deletepartfrommultigeometries',\n steps: [\n new PickFeatureStep(),\n new Step({ run: chooseFeature }),\n // delete part from multi geometries\n new Step({\n layer,\n run(inputs, context) {\n return $promisify(new Promise((resolve, reject) => {\n const originaLayer = inputs.layer;\n const editingLayer = inputs.layer.getEditingLayer();\n const layerId = originaLayer.getId();\n const session = context.session;\n const {\n features,\n coordinate\n } = inputs;\n const feature = features[0];\n const originalFeature = feature.clone();\n const geometry = feature.getGeometry();\n let geometries = [];\n\n // ensure single geometry\n switch (geometry.getType()) {\n case GEOMETRY_TYPES.MULTIPOLYGON: geometries = geometry.getPolygons(); break;\n case GEOMETRY_TYPES.MULTILINE: geometries = geometry.getLineStrings(); break;\n case GEOMETRY_TYPES.MULTILINESTRING: geometries = geometry.getLineStrings(); break;\n case GEOMETRY_TYPES.MULTIPOINT: geometries = geometry.getPoints(); break;\n default: console.warn('invalid geometry type', geometry.getType()); break;\n }\n\n const source = new ol.source.Vector({features: geometries.map(geometry => new ol.Feature(geometry))});\n const map = this.getMap();\n const pixel = map.getPixelFromCoordinate(coordinate);\n let tempLayer = new ol.layer.Vector({\n source,\n style: editingLayer.getStyle()\n });\n \n map.addLayer(tempLayer);\n \n map.once('postrender', () => {\n let found = false;\n //need to call map.forEachFeatureAtPixel and not this.forEachFeatureAtPixel\n //because we use arrow function, and it referred this to outside context\n map.forEachFeatureAtPixel(pixel, _feature => {\n if (!found) {\n source.removeFeature(_feature);\n if (source.getFeatures().length) {\n const geometries = source.getFeatures().map(f => f.getGeometry());\n const type = geometries[0] && geometries[0].getType();\n feature.setGeometry(\n type && new ol.geom[`Multi${type}`](geometries.map(g => g.getCoordinates())) // ensures multi geometry\n );\n /**\n * evaluated geometry expression\n */\n evaluateExpressionFields({\n inputs,\n context,\n feature\n }).finally(() => {\n session.pushUpdate(layerId, feature, originalFeature);\n resolve(inputs);\n });\n /**\n * end of evaluated\n */\n } else {\n editingLayer.getSource().removeFeature(feature);\n session.pushDelete(layerId, feature);\n resolve(inputs);\n }\n found = true;\n }\n },\n {\n layerFilter(layer) {\n return layer === tempLayer;\n },\n hitTolerance: 1\n }\n );\n //need to call map.forEachFeatureAtPixel and not this.forEachFeatureAtPixel\n //because we use arrow function, and it referred this to outside context\n map.removeLayer(tempLayer);\n tempLayer = null;\n });\n }));\n },\n }),\n ],\n helpMessage: 'editing.tools.deletepart',\n }),\n },\n // Split Feature\n (is_line || is_poly) && capabilities.includes('change_feature') && {\n id: 'splitfeature',\n type: ['change_feature'],\n name: \"editing.tools.split\",\n icon: \"splitFeatures.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/splitfeatureworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'splitfeature',\n runOnce: true,\n steps: [\n new SelectElementsStep({\n layer,\n help: 'editing.steps.help.split',\n type: ApplicationState.ismobile ? 'single' : 'multiple',\n steps: {\n select: {\n description: `editing.workflow.steps.${ApplicationState.ismobile ? 'selectPoint' : 'selectPointSHIFT'}`,\n done: false,\n }\n },\n }, true),\n // split feature\n new Step({\n layer,\n help: '',\n steps: {\n draw_line: {\n description: 'editing.workflow.steps.draw_split_line',\n done: false,\n }\n },\n run(inputs, context) {\n /** @since g3w-client-plugin-editing@v3.8.0 */\n return $promisify(async () => {\n const source = inputs.layer.getEditingLayer().getSource();\n const promise = new Promise((resolve, reject) => {\n this.addInteraction(\n new ol.interaction.Draw({\n type: 'LineString',\n features: new ol.Collection(),\n freehandCondition: ol.events.condition.never,\n }), {\n 'drawend': async e => {\n let isSplitted = false;\n const splittedGeometries = splitFeatures(inputs.features, e.feature);\n const splittedGeometriesLength = splittedGeometries.length;\n\n for (let i = 0; i < splittedGeometriesLength; i++) {\n if (splittedGeometries[i].geometries.length > 1) {\n isSplitted = true;\n await handleSplitFeature({\n context,\n inputs,\n feature: inputs.features.find(f => f.getUid() === splittedGeometries[i].uid),\n splittedGeometries: splittedGeometries[i].geometries,\n session: context.session,\n });\n }\n }\n\n /** @since g3w-client-plugin-editing@v3.8.0 */\n (isSplitted ? resolve : reject)(inputs);\n //need to set timeout promise, because at the end of the workflow all user messages are cleared\n await new Promise((r) => setTimeout(r, 600));\n GUI.showUserMessage({\n type: isSplitted ? 'success': 'warning',\n message: isSplitted ? 'plugins.editing.messages.splitted' : 'plugins.editing.messages.nosplittedfeature',\n autoclose: true\n })\n }\n });\n\n this.addInteraction(\n new ol.interaction.Snap({ source, edge: true })\n );\n })\n\n /** @since g3w-client-plugin-editing@v3.8.0 */\n setAndUnsetSelectedFeaturesStyle({ promise: $promisify(async () => { try { return await promise; } catch(e) { console.warn(e); return Promise.reject(e); }}), inputs, style: this.selectStyle });\n\n return promise;\n })\n\n\n },\n }),\n ],\n registerEscKeyEvent: true,\n }),\n },\n // Merge features in one\n (is_line || is_poly) && capabilities.includes('change_feature') && {\n id: 'mergefeatures',\n type: ['change_feature'],\n name: \"editing.tools.merge\",\n icon: \"mergeFeatures.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/mergefeaturesworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'mergefeatures',\n runOnce: true,\n steps: [\n new SelectElementsStep({\n layer,\n type: 'bbox',\n help: 'editing.steps.help.merge',\n steps: {\n select: {\n description: `editing.workflow.steps.${ApplicationState.ismobile ? 'selectDrawBox' : 'selectSHIFT'}`,\n done: false,\n }\n },\n }, true),\n // merge features\n new Step({\n layer,\n help: 'editing.steps.help.merge',\n steps: {\n choose: {\n description: 'editing.workflow.steps.merge',\n done: false,\n }\n },\n run(inputs, context) {\n return $promisify(new Promise((resolve, reject) => {\n const {\n layer,\n features\n } = inputs;\n const editingLayer = layer.getEditingLayer();\n const source = editingLayer.getSource();\n const layerId = layer.getId();\n const session = context.session;\n \n if (features.length < 2) {\n GUI.showUserMessage({\n type: 'warning',\n message: 'plugins.editing.messages.select_min_2_features',\n autoclose: true\n });\n reject();\n } else {\n chooseFeatureFromFeatures({ features, inputs })\n .then(async (feature) => {\n const index = features.findIndex(_feature => feature === _feature);\n const originalFeature = feature.clone();\n const newFeature = dissolve({features, index});\n \n if (newFeature) {\n try {\n await evaluateExpressionFields({ inputs, context, feature: newFeature });\n } catch(e) {\n console.warn(e);\n }\n session.pushUpdate(layerId, newFeature, originalFeature);\n features\n .filter(_feature => _feature !== feature)\n .forEach(deleteFeature => {\n session.pushDelete(layerId, deleteFeature);\n source.removeFeature(deleteFeature);\n });\n inputs.features = [feature];\n resolve(inputs);\n } else {\n GUI.showUserMessage({\n type: 'warning',\n message: 'plugins.editing.messages.no_feature_selected',\n autoclose: true\n });\n reject();\n }\n })\n .catch(e => { console.warn(e); reject(); })\n }\n }));\n },\n }),\n ],\n registerEscKeyEvent: true\n }),\n },\n // Add Table feature (alphanumerical layer - No geometry)\n is_table && capabilities.includes('add_feature') && {\n id: 'addfeature',\n type: ['add_feature'],\n name: \"editing.tools.add_feature\",\n icon: \"addTableRow.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/addtablefeatureworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'addtablefeature',\n steps: [\n new Step({ help: 'editing.steps.help.new', run: addTableFeature }),\n new OpenFormStep(),\n ],\n }),\n },\n // Edit Table feature (alphanumerical layer - No geometry)\n is_table && capabilities.includes('delete_feature') && capabilities.includes('change_attr_feature') && {\n id: 'edittable',\n type: ['delete_feature', 'change_attr_feature'],\n name: \"editing.tools.update_feature\",\n icon: \"editAttributes.png\",\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/edittableworkflow.js@v3.7.1 */\n op: new Workflow({\n layer,\n type: 'edittable',\n backbuttonlabel: 'plugins.editing.form.buttons.save_and_back_table',\n runOnce: true,\n steps: [ new OpenTableStep() ],\n }),\n },\n ].filter(Boolean).map(tool => Object.assign(new G3WObject, tool)),\n };\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/toolboxes/tool.js@v3.7.1\n */\n this.state._tools.forEach(tool => {\n Object.assign(tool, {\n disabledtoolsoftools: [],\n enabled: !!tool.enabled,\n active: false,\n message: null,\n messages: tool.op.getMessages(),\n visible: tool.visible instanceof Function ? tool.visible(tool) : (undefined !== tool.visible ? tool.visible: true),\n state: new Proxy({}, { get: (_, prop) => tool[prop], set:(_, prop, value) => { tool[prop] = value; return true; } }),\n start: this._startTool.bind(this, tool),\n stop: this._stopTool.bind(this, tool),\n getId: () => tool.id,\n getOperator: () => tool.op,\n setOperator: op => tool.op = op,\n })\n });\n\n Object.assign(this.state, {\n tools: this.state._tools,\n /** original value of state in case of custom changes */\n originalState: {\n title: this.state.title,\n toolsoftool: [...this.state.toolsoftool]\n },\n })\n\n // BACKOMP v3.x\n this.originalState = this.state.originalState;\n\n //event features\n this._getFeaturesEvent = { event: null, fnc: null };\n\n // @since v3.8.0 constraint messages to show\n this.messages = {\n //set message of scale constraint\n constraint: {\n scale: `${tPlugin('editing.messages.constraints.enable_editing')}${this.state._constraints.scale}`.toUpperCase()\n }\n }\n\n //@since 3.8.0 Need to store Promise resolve when start toolbox but non editing is enabled (scale constraint, etc..)\n this.startResolve = null;\n\n //@since 3.8.0 Store ol keys event start when we are in editing\n this._olStartKeysEvent = [];\n\n //@since 3.8.1 store all unwatches\n this.unwatches = [];\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { string } layerId\n *\n */\n _stopSessionChildren(layerId) {\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n const layer = service.getLayerById(layerId);\n getRelationsInEditing({\n layerId,\n relations: layer.getRelations() ? layer.getRelations().getArray() : [],\n })\n .filter(relation => relation.getFather() === layerId)\n .forEach(relation => {\n const relationId = getRelationId({ layerId, relation });\n // In case of no editing is started (click on pencil of relation layer) need to stop (unlock) features\n if (!service.getToolBoxById(relationId).inEditing()) {\n service.state.sessions[relationId].stop();\n }\n })\n }\n\n /**\n * @returns toolbox state\n */\n getState() {\n return this.state;\n }\n\n /**\n * @param bool\n */\n setShow(bool = true) {\n this.state.show = bool;\n }\n\n /**\n * @returns {*}\n */\n getLayer() {\n return this.state.layer;\n }\n\n /**\n * @returns {boolean}\n */\n isFather() {\n return this.state.editing.father;\n }\n\n /**\n * @returns { Array } parent and child layers\n */\n getDependencies() {\n return this.state.editing.dependencies;\n }\n\n /**\n * @returns {boolean}\n */\n hasDependencies() {\n return this.state.editing.dependencies.length > 0;\n }\n\n /**\n * Create getFeatures options\n * \n * @param filter\n */\n setFeaturesOptions({\n filter\n } = {}) {\n if (filter) {\n // in case of no features filter request check if no features_filed is present otherwise it get first field\n if (filter.nofeatures) {\n filter.nofeatures_field = filter.nofeatures_field || this.state.layer.getEditingFields()[0].name;\n }\n this.state._getFeaturesOption = {\n filter,\n editing: true,\n registerEvents: false\n };\n // in case of constraint attribute set the filter as constraint\n if (filter.constraint) {\n this.constraintFeatureFilter = filter;\n }\n } else {\n this.state._getFeaturesOption = createEditingDataOptions(Layer.LayerTypes.TABLE === this.state._layerType ? 'all': 'bbox', { layerId: this.getId() });\n }\n }\n\n /**\n * @param constraints\n */\n setEditingConstraints(constraints = {}) {\n Object.keys(constraints).forEach(c => this.constraints[c] = constraints[c]);\n }\n\n /**\n * @since 3.8.0 Handle scale constraint\n * @sto stop true when called from stop method\n * @private\n */\n _handleScaleConstraint(stop = false) {\n // get features from server or wait to start\n const map = GUI.getService('map').getMap();\n\n this.state.editing.canEdit = getScaleFromResolution(map.getView().getResolution()) <= this.state._constraints.scale;\n\n //check if start method is called\n const in_editing = (this._start || this.startResolve);\n\n const showZoomCursor = !stop && this.state.selected && !this.state.editing.canEdit;\n\n const control = GUI.getService('map').getCurrentToggledMapControl();\n\n if (control && control.cursorClass && (stop || in_editing)) { control.setMouseCursor(!showZoomCursor) }\n\n map.getViewport().classList.toggle('ol-zoom-in', showZoomCursor);\n\n // check if selected \u2192 hide modal\n if (stop || !this.state.selected || !in_editing) {\n GUI.setModal(false);\n return;\n }\n\n if (this.state.editing.canEdit && this.startResolve) {\n this.startResolve();\n }\n\n // async show message because another toolbox can be unselected before\n setTimeout(() => GUI.setModal(!this.state.editing.canEdit, this.messages.constraint.scale));\n }\n\n /**\n *\n * Start editing\n * @param options\n * @return {*}\n */\n //added option object to start method to have a control by other plugin how\n start(options = {}) {\n return $promisify(new Promise(async (resolve, reject) => {\n const id = this.getId();\n const applicationConstraint = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.constraints.toolboxes[id];\n let {\n toolboxheader = true,\n startstopediting = true,\n changingtools = false,\n tools,\n filter,\n } = options;\n \n this.state.changingtools = changingtools;\n\n if (tools) {\n this.setEnablesDisablesTools(tools);\n }\n\n this.state.toolboxheader = toolboxheader;\n this.state.startstopediting = startstopediting;\n \n filter = applicationConstraint && applicationConstraint.filter || this.constraints.filter || filter;\n\n //register lock features to show a message\n const unKeyLock = this.state.layer.getFeaturesStore().onceafter('featuresLockedByOtherUser', () => {\n GUI.showUserMessage({\n type: 'warning',\n subtitle: this.state.layer.getName().toUpperCase(),\n message: 'plugins.editing.messages.featureslockbyotheruser',\n })\n });\n \n //add featuresLockedByOtherUser setter\n this.state._unregisterStartSettersEventsKey.push(\n () => this.state.layer.getFeaturesStore().un('featuresLockedByOtherUser', unKeyLock)\n );\n\n\n // check if can we edit based on scale contraint (vector layer)\n if (this.state._constraints.scale) {\n\n await new Promise(resolve => {\n //set as resolve handler to resolve waiting get features from server\n this.startResolve = resolve;\n //call scale constraint handler\n this._handleScaleConstraint();\n\n const map = GUI.getService('map');\n\n // click to fit zoom scale constraint\n this._olStartKeysEvent.push(\n map.getMap().on('click', e => {\n if (this.state.selected && !this.state.editing.canEdit) {\n map.goToRes(e.coordinate, getResolutionFromScale(this.state._constraints.scale, GUI.getService('map').getMapUnits()));\n }\n })\n );\n\n // if click on start toolbox can edit\n if (this.state.editing.canEdit) { resolve() }\n\n })\n\n }\n\n //reset start startResolve promise reolve function\n this.startResolve = null;\n // set filterOptions\n this.setFeaturesOptions({ filter });\n\n const handlerAfterSessionGetFeatures = async promise => {\n this.emit('start-editing');\n //set unique fields values\n await setLayerUniqueFieldValues(this.getId());\n await g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').runEventHandler({ type: 'start-editing', id });\n try {\n const features = await promisify(promise);\n this.stopLoading();\n this.setEditing(true);\n await g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').runEventHandler({ type: 'get-features-editing', id, options: { features } });\n resolve({ features })\n } catch(e) {\n console.warn(e);\n GUI.notify.error(e.message);\n await g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').runEventHandler({ type: 'error-editing', id, error: e });\n this.stop();\n this.stopLoading();\n reject(e);\n }\n }\n\n const is_started = !!this.__isStarted();\n\n //@TODO need to explain better\n const GIVE_ME_A_NAME = (\n ApplicationState.ismobile // is mobile\n && GUI.getService('map').isMapHidden() // map is not visible (content 100%)\n && Layer.LayerTypes.VECTOR === this.state._layerType // is vector\n );\n\n if (!is_started && GIVE_ME_A_NAME) {\n this.setEditing(true);\n GUI\n .getService('map')\n .onceafter('setHidden', () => {\n setTimeout(async () => {\n this._start = true;\n this.startLoading();\n this.setFeaturesOptions({ filter });\n try {\n await handlerAfterSessionGetFeatures(promisify(this._session.start(this.state._getFeaturesOption)))\n } catch(e) {\n console.warn(e);\n this.setEditing(false);\n }\n }, 300);\n })\n }\n\n /** @TODO merge the following condtions? */\n if (!is_started && !GIVE_ME_A_NAME) {\n this._start = true;\n this.startLoading();\n await handlerAfterSessionGetFeatures(promisify(this._session.start(this.state._getFeaturesOption)))\n }\n\n if (is_started && !this._start) {\n this.startLoading();\n await handlerAfterSessionGetFeatures(promisify(this._session.getFeatures(this.state._getFeaturesOption)))\n this._start = true;\n }\n\n if (is_started) { this.setEditing(true); }\n }));\n };\n\n /**\n *\n */\n startLoading() {\n this.state.loading = true;\n }\n\n /**\n *\n */\n stopLoading() {\n this.state.loading = false;\n }\n\n /**\n * @returns {*}\n */\n stop() {\n return $promisify(async () => {\n if (this.disableCanEditEvent) { this.disableCanEditEvent() }\n\n this.state._unregisterStartSettersEventsKey.forEach(fnc => fnc());\n this.state._unregisterStartSettersEventsKey = [];\n\n this._olStartKeysEvent.forEach(k => ol.Observable.unByKey(k));\n this._olStartKeysEvent.splice(0);\n\n this.unwatches.forEach(uw => uw());\n this.unwatches.splice(0);\n\n //eventually reset start resolve feature waiting promise\n this.startResolve = null;\n\n if (this.state._constraints.scale) {\n this._handleScaleConstraint(true);\n }\n\n const is_started = !!this.__isStarted();\n \n if (!is_started) { return true }\n \n if (!ApplicationState.online) { return; }\n\n const service = g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing');\n const layerId = this.state.id;\n\n // Check if father relation is editing and has commit feature\n const fathersInEditing = service.getLayerById(layerId).getFathers().filter(id => {\n const toolbox = service.getToolBoxById(id);\n if (toolbox && toolbox.inEditing() && toolbox.isDirty()) {\n //get a temporary relations object and check if layerId has some changes\n return Object.keys(toolbox.getSession().getCommitItems() || {}).find(id => layerId === id);\n }\n });\n\n if (fathersInEditing.length > 0) {\n this.stopActiveTool();\n this.enableTools(false);\n this.clearToolboxMessages();\n // unregister get features event\n if (Layer.LayerTypes.VECTOR === this.state._layerType) {\n GUI.getService('map').getMap().un(this._getFeaturesEvent.event, this._getFeaturesEvent.fnc);\n }\n this._stopSessionChildren(this.state.id);\n // clear layer unique field values\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.uniqueFieldsValues[this.getId()] = {};\n return;\n }\n\n try {\n await promisify(this._session.stop());\n //set start to false\n this._start = false\n this.state.editing.on = false;\n this.state.enabled = false;\n this.stopLoading();\n this.state._getFeaturesOption = {};\n this.stopActiveTool();\n this.enableTools(false);\n this.clearToolboxMessages();\n this.emit('stop-editing');\n // clear layer unique field values\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').state.uniqueFieldsValues[this.getId()] = {};\n return true;\n } catch(e) {\n console.warn(e);\n return Promise.reject(e);\n }\n\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Commit changes on server (save)\n * \n * @param opts.ids\n * @param opts.items\n * @param opts.relations\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n save({\n ids = null,\n items,\n relations = true,\n /** @since g3w-client-plugin-editing@v3.8.0 */\n __esPromise = false,\n } = {}) {\n\n return $promisify(new Promise(async (resolve, reject) => {\n let commit; // committed items\n\n // skip when ..\n //@TODO Check if deprecated\n if (ids) {\n commit = this.__commit(ids);\n this.__clearHistory(ids);\n return resolve(commit);\n }\n\n commit = items || this.__getCommitItems(this.__commit());\n\n if (!relations) {\n commit.relations = {};\n }\n\n this.state.layer.getEditor()\n .commit(commit)\n .then(response => {\n\n // skip when response is null or undefined and response.result is false\n if (!(response && response.result)) {\n reject(response);\n return;\n }\n\n const { relations = {} } = response.response; // check if relations are saved on server\n\n // sync server data with local data\n for (const id in relations) {\n const toolbox = ToolBox.get(id)\n toolbox\n .getSession()\n .getEditor()\n .applyCommitResponse({ // apply commit response to current editing relation layer\n response: relations[id],\n result: true\n });\n }\n\n this.__clearHistory();\n\n /**\n * @since v3.9.0\n * After commit get new unique values\n */\n this._session.saveChangesOnServer(commit);\n\n\n // ES6 promises only accept a single response\n if (__esPromise) {\n resolve({ commit, response });\n } else {\n resolve(commit, response);\n }\n })\n .fail(e => { console.warn(e); reject(e); })\n }))\n }\n\n /**\n * @returns {*|{}}\n */\n getEditingConstraints() {\n return this.state._constraints;\n }\n\n /**\n * @returns {boolean}\n */\n canEdit() {\n return this.state.editing.canEdit;\n }\n\n /**\n * @param message\n */\n setMessage(message) {\n this.state.message = message;\n }\n\n /**\n * @returns {null}\n */\n getMessage() {\n return this.state.message;\n }\n\n /**\n *\n */\n clearMessage() {\n this.setMessage(null);\n }\n\n /**\n *\n */\n clearToolboxMessages() {\n this.state.toolmessages.help = null;\n this.clearMessage();\n }\n\n /**\n * @returns {*}\n */\n getId() {\n return this.state.id;\n }\n\n /**\n * @returns {string}\n */\n getTitle() {\n return this.state.title;\n }\n\n /**\n * @param title\n */\n setTitle(title) {\n this.state.customTitle = true;\n this.state.title = title;\n }\n\n /**\n * @returns {string}\n */\n getColor() {\n return this.state.color;\n }\n\n /**\n * Enable toolbox\n * \n * @param bool\n */\n setEditing(bool = true) {\n this.setEnable(bool);\n this.state.editing.on = bool;\n this.enableTools(bool);\n }\n\n /**\n * @returns {boolean}\n */\n inEditing() {\n return this.state.editing.on;\n }\n\n /**\n * @returns {boolean}\n */\n isEnabled() {\n return this.state.enabled;\n }\n\n /**\n * @param bool\n * \n * @returns {boolean}\n */\n setEnable(bool = false) {\n this.state.enabled = bool;\n return this.state.enabled;\n }\n\n /**\n * @returns {boolean}\n */\n isLoading() {\n return this.state.loading;\n }\n\n /**\n * @returns {*}\n */\n isDirty() {\n return this.state.editing.history.commit;\n }\n\n /**\n * @returns {boolean}\n */\n isSelected() {\n return this.state.selected;\n }\n\n /**\n * @param bool\n */\n setSelected(bool = false) {\n this.state.selected = bool;\n //Check if layer has a scale constraint\n if (this.state._constraints.scale) {\n const map = GUI.getService('map').getMap();\n //run handle scale contraint handler function\n this._handleScaleConstraint();\n\n //IN CASE START EDITING AND CAN EDIT NEED TO DISPATCH EVENT MOVE END MAP\n if (this._start && this.state.canEdit) {\n map.dispatchEvent({ type: this._getFeaturesEvent.event, target: map })\n }\n //SELECTED AND NOT REGISTER MAP CHANGE RESOLUTION\n if (this.state.selected && !this.keyChangeResolution) {\n this.keyChangeResolution = map.getView().on('change:resolution', () => this._handleScaleConstraint() );\n }\n\n //NOT SELECTED AND REGISTER MAP CHANGE RESOLUTION, NEED TO REMOVE CHANGE RESOLUTION CHECK\n if (!this.state.selected && this.keyChangeResolution) {\n ol.Observable.unByKey(this.keyChangeResolution);\n this.keyChangeResolution = null;\n }\n }\n }\n\n /**\n * @returns {*}\n */\n getTools() {\n return this.state._tools;\n }\n\n /**\n * @param toolId\n * \n * @returns {*|number|bigint|T|T} tool by id\n */\n getToolById(toolId) {\n return this.state._tools.find(tool => toolId === tool.getId());\n }\n\n /**\n * @param toolId\n */\n setEnableTool(toolId) {\n this.state._tools.find(tool => toolId === tool.getId()).state.enabled = true;\n }\n\n /**\n * Set tools bases on add\n * editing_constraints : true // follow the tools related toi editing conttraints configuration\n * \n * @see g3w-client-plugin-sispi-worksite\n */\n setAddEnableTools({\n tools = {},\n options = { editing_constraints: true }\n } = {}) {\n const { editing_constraints = false } = options;\n\n this.setEnablesDisablesTools({\n enabled: this.state._tools\n .filter(\n tool => editing_constraints\n ? tool.type.includes('add_feature')\n : ['addfeature', 'editattributes', 'movefeature', 'movevertex'].includes(tool.getId())\n )\n .map(tool => ({ id: tool.getId(), options: tools[tool.getId()] }))\n });\n\n this.enableTools(true);\n }\n\n /**\n * Set tools bases on update\n * \n * @see g3w-client-plugin-sispi-worksite\n */\n setUpdateEnableTools({\n tools = {},\n excludetools = [],\n options = { editing_constraints: true }\n }) {\n const { editing_constraints = false } = options;\n const UPDATEONEFEATUREONLYTOOLSID = [\n 'editattributes',\n 'movefeature',\n 'movevertex'\n ];\n const update_tools = this.state._tools\n .filter(tool => {\n // exclude\n if (excludetools.includes(tool.getId()) ) {\n return false;\n }\n return editing_constraints\n ? tool.type.find(type => type === 'change_feature' || type ==='change_attr_feature')\n : UPDATEONEFEATUREONLYTOOLSID.includes(tool.getId()) ;\n })\n .map(tool => {\n const id = tool.getId();\n return { id, options: tools[id] }\n });\n\n this.setEnablesDisablesTools({ enabled: update_tools });\n this.enableTools(true);\n }\n\n /**\n * Set enable tools\n *\n * @param tools\n */\n setEnablesDisablesTools(tools) {\n if (tools) {\n this.state.changingtools = true;\n // Check if tools is an array\n const {\n enabled : enableTools = [],\n disabled : disableTools = []\n } = tools;\n\n const toolsId = enableTools.length ? [] : this.state._tools.map(tool => tool.getId());\n\n enableTools\n .forEach(({ id, options = {} }) => {\n //check if id of tool passed as argument is right\n const tool =this.getToolById(id);\n if (tool) {\n const { active = false } = options;\n // set tool options\n tool.messages = options.messages || tool.messages;\n tool.visible = undefined !== options.visible ? options.visible : true;\n tool.enabled = undefined !== options.enabled ? options.enabled : false;\n tool.disabledtoolsoftools = undefined !== options.disabledtoolsoftools ? options.disabledtoolsoftools : [];\n if (tool.visible) {\n toolsId.push(id);\n }\n if (active) {\n this.setActiveTool(tool);\n }\n if (undefined === this.state._enabledtools) {\n this.state._enabledtools = [];\n }\n this.state._enabledtools.push(tool);\n }\n });\n //disabled and visible\n disableTools\n .forEach(({ id, options }) => {\n const tool = this.getToolById(id);\n if (tool) {\n if (undefined === this.state._disabledtools) {\n this.state._disabledtools = [];\n }\n this.state._disabledtools.push(id);\n //add it toi visible tools\n toolsId.push(id);\n }\n });\n //set not visible all remain\n this.state._tools.forEach(tool => !toolsId.includes(tool.getId()) && (tool.visible = false));\n this.state.changingtools = false;\n }\n };\n\n /**\n * @param {*} bool whehter enable all tools\n */\n enableTools(bool = false) {\n const tools = this.state._enabledtools || this.state._tools;\n const disabledtools = this.state._disabledtools || [];\n tools\n .forEach(tool => {\n const enabled = undefined === tool.enable ? bool : tool.enable;\n tool.enabled = (bool && disabledtools.length > 0)\n ? !disabledtools.includes(tool.getId())\n : toRawType(enabled) === 'Boolean'\n ? enabled\n : enabled({ bool, tool });\n if (!bool) {\n tool.active = bool;\n }\n })\n }\n\n /**\n * @param tool\n */\n setActiveTool(tool) {\n return $promisify(async () => {\n try {\n await promisify(this.stopActiveTool(tool));\n\n this.state.toolsoftool.splice(0);\n this.state.activetool = tool;\n\n const workflow = tool.getOperator();\n\n if (workflow) {\n // filter eventually disable tools of tools\n workflow.once('settoolsoftool', ts => this.state.toolsoftool.push(...(ts || []).filter(t => !tool.disabledtoolsoftools.includes(t.type))));\n workflow.once('start', ts => this.state.toolsoftool.forEach(t => (ts || []).includes(t.type) && (t.options.active = true)));\n workflow.once('stop', ts => this._deactivetools(tool, ts));\n workflow.once('reject', ts => this._deactivetools(tool, ts));\n }\n\n tool.start();\n\n // set tool messages\n const messages = this.state.activetool.getOperator().getHelpMessage() || this.state.activetool.getOperator().getRunningStep() ? this.state.activetool.messages : null;\n this.state.toolmessages.help = messages && messages.help || null\n\n } catch(e) {\n console.warn(e);\n }\n });\n }\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0 \n */\n _deactivetools(tool, tools = []) {\n // in case of deactivate tool and current active tool, it was clicked\n if (tool === this.state.activetool) {\n this.state.activetool = null;\n this.state.toolsoftool.splice(0);\n }\n this.state.toolsoftool.forEach(t => tools.includes(t.type) && (t.options.active = false));\n }\n\n /**\n * @returns {null}\n */\n getActiveTool() {\n return this.state.activetool;\n }\n\n /**\n * @param tool\n * \n * @returns {*}\n */\n stopActiveTool(tool) {\n return $promisify(async () => {\n const activeTool = this.getActiveTool();\n if (tool && (!activeTool || tool === activeTool)) {\n tool.removeAllListeners();\n return;\n }\n\n try {\n //Need to check if is there active tool\n if (activeTool) {\n activeTool.removeAllListeners();\n await promisify(activeTool.stop(true));\n }\n this.state.toolsoftool.splice(0);\n this.state.toolmessages.help = null;\n this.state.activetool = null;\n } catch(e) {\n console.warn(e);\n }\n });\n }\n\n /**\n * @returns {*}\n */\n getSession() {\n return this._session;\n }\n\n /**\n * @returns {*}\n */\n getEditor() {\n return this.state.layer.getEditor();\n }\n\n /**\n * Reset default values\n */\n resetDefault() {\n this.state.title = this.state.originalState.title;\n this.state.toolboxheader = true;\n this.state.startstopediting = true;\n this.constraints = {\n filter: null,\n show: null,\n tools: [],\n };\n\n if (this.state._enabledtools) {\n this.state._enabledtools = undefined;\n this.enableTools();\n this.state._tools.forEach(tool => {\n tool.visible = true;\n tool.enabled = false;\n tool.messages = tool.op.getMessages();\n tool.disabledtoolsoftools = []; //reset disabled tools eventually set by other\n });\n }\n this.state._disabledtools = null;\n /** since 3.9.0 set show based on visibile porpety of config editing object setting*/\n this.state.show = this.state.layer.config.editing.visible;\n //need to set selected false\n this.state.selected = false;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @param uniqueId\n * @param items\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __add(uniqueId, items) {\n //state object is an array of feature/features changed in a transaction\n return $promisify(new Promise((resolve) => {\n // before insert an item into the history\n // check if are at last state step (no redo was done)\n // If we are in the middle of undo, delete all changes\n // in the history from the current \"state\" so if it\n // can create a new history\n if (null === this.state.editing.session.current) {\n this._states = [{ id: uniqueId, items }]\n } else {\n if (this._states.length > 0 && this.state.editing.session.current < this._states.at(-1).id) {\n this._states = this._states.filter(s => s.id <= this.state.editing.session.current);\n }\n this._states.push({ id: uniqueId, items });\n }\n\n this.state.editing.session.current = uniqueId;\n // set internal state\n this.__canUndo();\n this.__canCommit();\n this.__canRedo();\n // return unique id key\n // it can be used in save relation\n resolve(uniqueId);\n }))\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * undo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __undo() {\n let items;\n if (this.state.editing.session.current === this._states[0].id) {\n this.state.editing.session.current = null;\n items = this._states[0].items;\n } else {\n this._states.find((state, idx) => {\n if (state.id === this.state.editing.session.current) {\n items = this._states[idx].items;\n this.state.editing.session.current = this._states[idx-1].id;\n return true;\n }\n })\n }\n items = checkSessionItems(this._history.id, items, 0);\n // set internal state\n this.__canUndo();\n this.__canCommit();\n this.__canRedo();\n return items;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * redo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __redo() {\n let items;\n // if not set get first state\n if (!this.state.editing.session.current) {\n items = this._states[0].items;\n // set current to first\n this.state.editing.session.current = this._states[0].id;\n } else {\n this._states.find((state, idx) => {\n if (this.state.editing.session.current === state.id) {\n this.state.editing.session.current = this._states[idx+1].id;\n items = this._states[idx+1].items;\n return true;\n }\n })\n }\n items = checkSessionItems(this._history.id, items, 1);\n // set internal state\n this.__canUndo();\n this.__canCommit();\n this.__canRedo();\n return items;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param id\n * \n * @returns {T}\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getState(id) {\n return this._states.find(s => id === s.id);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @returns { boolean } true if we can commit\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canCommit() {\n const checkCommitItems = this.__commit();\n let canCommit = false;\n for (let layerId in checkCommitItems) {\n const commitItem = checkCommitItems[layerId];\n canCommit = canCommit || commitItem.length > 0;\n }\n this._constrains.commit = canCommit;\n return this._constrains.commit;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * canUdo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canUndo() {\n let currentStateIndex = null;\n if (this.state.editing.session.current && this._states.length) {\n this._states.forEach((state, idx) => {\n if (this.state.editing.session.current === state.id) {\n currentStateIndex = idx;\n return false\n }\n });\n };\n const steps = (this._states.length - 1) - currentStateIndex;\n this._constrains.undo = (null !== this.state.editing.session.current) && (steps < 10); // 10 = maximum \"buffer history\" lenght for undo/redo\n return this._constrains.undo;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * canRedo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canRedo() {\n this._constrains.redo = (\n (this._states.at(-1) && this._states.at(-1).id != this.state.editing.session.current))\n || (null === this.state.editing.session.current && this._states.length > 0);\n return this._constrains.redo;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * get all changes to send to server (mandare al server)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __commit() {\n const commitItems = {};\n const statesToCommit = this._states.filter(s => s.id <= this.state.editing.session.current);\n statesToCommit\n .forEach(state => {\n state.items.forEach(item => {\n let add = true;\n if (Array.isArray(item)) {\n item = item[1];\n }\n if (commitItems[item.layerId]) {\n commitItems[item.layerId].forEach((commitItem, index) => {\n // check if already inserted feature\n if (commitItem.getUid() === item.feature.getUid()) {\n if (item.feature.isNew() && !commitItem.isDeleted() && item.feature.isUpdated()) {\n const _item = item.feature.clone();\n _item.add();\n commitItems[item.layerId][index] = _item;\n } else if (item.feature.isNew() && item.feature.isDeleted()) {\n commitItems[item.layerId].splice(index, 1);\n } else if (item.feature.isUpdated() || item.feature.isDeleted()) {\n commitItems[item.layerId][index] = item.feature;\n }\n add = false;\n return false;\n }\n });\n }\n if (add) {\n const feature = item.feature;\n const layerId = item.layerId;\n if (!(!feature.isNew() && feature.isAdded())) {\n if (!commitItems[layerId]) {\n commitItems[layerId] = [];\n }\n commitItems[layerId].push(feature);\n }\n }\n });\n });\n return commitItems;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @returns {*|null}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getLastHistoryState() {\n return this._states.at(-1) || null;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __isStarted() {\n return this.state.editing.session.started;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getHistory() {\n return this._history;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getEditor() {\n return this.state.layer.getEditor();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Add temporary features that will be added with save method\n * \n * @param { { layerId: string, feature: * } } NewFeat \n * @param { { layerId: string, feature: * } } OldFeat\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __push(newFeat, oldFeat) {\n this.state.editing.session.changes.push(oldFeat ? [oldFeat, newFeat] : newFeat); // check is set old (edit)\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Delete temporary feature\n * \n * @param layerId\n * @param feature\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __pushDelete(layerId, feature) {\n this.__push({ layerId, feature: feature.delete() });\n return feature;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Save temporary changes to the layer in history instance and feature store\n * \n * @param options\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __save(options = {}) {\n // fill history\n return $promisify(async () => {\n // add temporary modify to history\n if (this.state.editing.session.changes.length > 0) {\n //@since 3.9.1 get array of uniqueIds\n //case of modify vertex. Multi changes in one save\n const uniqueIds = [];\n await Promise.allSettled(this.state.editing.session.changes.map(c => {\n const uniqueId = options.id || Date.now();\n uniqueIds.push(uniqueId);\n return promisify(this.__add(uniqueId, [c]));\n }));\n // clear to temporary changes\n this.state.editing.session.changes = [];\n return uniqueIds;\n }\n return null;\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Add temporary feature\n * \n * @param layerId \n * @param feature \n * @param removeNotEditableProperties\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __pushAdd(layerId, feature, removeNotEditableProperties=true) {\n /**\n * @TODO check if it need to deprecate it. All properties are need\n * Please take care of this to understand\n * In case of removeNotEditableProperties true, remove not editable field\n * from feature properties\n */\n const editor = layerId === this.state.layer.getId() ? this.state.layer.getEditor() : ToolBox.get(layerId).getSession().getEditor();\n\n // remove not editable proprierties from feature\n if (removeNotEditableProperties) {\n (editor.getLayer().getEditingNotEditableFields() || []).forEach(f => feature.unset([f]));\n }\n\n const newFeature = feature.clone();\n\n this.__push({ layerId, feature: newFeature.add() });\n\n return newFeature;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Add temporary feature changes\n * \n * @param layerId\n * @param newFeature\n * @param oldFeature\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __pushUpdate(layerId, newFeature, oldFeature) {\n // get index of temporary changes\n const is_new = newFeature.isNew();\n const i = is_new && this.state.editing.session.changes.findIndex(c => layerId === c.layerId && c.feature.getId() === newFeature.getId());\n\n // in case of new feature\n if (is_new && i >=0) {\n const feature = newFeature.clone();\n feature.add();\n this.state.editing.session.changes[i].feature = feature;\n return;\n }\n\n this.__push(\n { layerId, feature: newFeature.update() },\n { layerId, feature: oldFeature.update() }\n )\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n *\n * @param changes\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __rollback(changes) {\n // skip when..\n if (changes) {\n return this.state.layer.getEditor().rollback(changes);\n }\n\n // Handle temporary changes of layer\n return $promisify(async () => {\n const id = this.state.layer.getId();\n changes = { own:[], dependencies: {} };\n \n this.state.editing.session.changes.forEach(c => {\n const change = Array.isArray(c) ? c[0] : c;\n if (id === change.layerId) {\n changes.own.push(change);\n } else {\n changes.dependencies[change.layerId] = changes.dependencies[change.layerId] || [];\n // FILO\n changes.dependencies[change.layerId].unshift(change);\n }\n });\n\n try {\n await promisify(this.state.layer.getEditor().rollback(changes.own));\n for (const id in changes.dependencies) {\n ToolBox.get(id).getSession().rollback(changes.dependencies[id]);\n }\n return changes.dependencies;\n } catch(e) {\n console.warn(e);\n } finally {\n this.state.editing.session.changes = [];\n }\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Rollback child changes of current session\n * \n * @param ids [array of child layer id]\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __rollbackDependecies(ids = []) {\n ids.forEach(id => {\n const changes = [];\n this.state.editing.session.changes = this.state.editing.session.changes.filter(tc => {\n if (id === tc.layerId) {\n changes.push(tc);\n return false\n }\n });\n if (changes.length) {\n ToolBox.get(id).getSession().rollback(changes);\n }\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n *\n * undo method\n * \n * @param items\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __undoSession(items) {\n items = items || this.__undo();\n this.state.layer.getEditor().setChanges(items.own, true);\n this.__canCommit();\n return items.dependencies;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * redo method\n * \n * @param items\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __redoSession(items) {\n items = items || this.__redo();\n this.state.layer.getEditor().setChanges(items.own, true);\n this.__canCommit();\n return items.dependencies;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Serialize commit\n * \n * @returns {{ add: *[], update: *[], relations: {}, delete: *[] }} JSON Object for a commit body send to server\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getCommitItems() {\n const itemsToCommit = this.__commit();\n const id = this.state.layer.getId();\n let state;\n let layer;\n const commitObj = {\n add: [], // features to add\n update: [], // features to update\n delete: [], // features to delete\n relations: {} // relation features\n };\n // key is a layer id that has changes to apply\n for (const key in itemsToCommit) {\n let isRelation = false; //set relation to false\n const items = itemsToCommit[key];\n // case key (layer id) is not equal to id (current layer id on editing)\n if (key !== id) {\n isRelation = true; //set true because these changes belong to features relation items\n const sessionRelation = ToolBox.get(key).getSession();\n //check lock ids of relation layer\n const lockids = sessionRelation ? sessionRelation.getEditor().getLockIds(): [];\n //create a relation object\n commitObj.relations[key] = {\n lockids,\n add: [],\n update: [],\n delete: [],\n relations: {} //@since v3.7.1\n };\n layer = commitObj.relations[key];\n } else {\n layer = commitObj;\n }\n //@since 3.9.0 Check if it has 3D geometry type (Z or MZ)\n const is_vector = Layer.LayerTypes.VECTOR === ToolBox.get(key).getLayer().getType(); // check if is vector layer\n const geometryType = is_vector && CatalogLayersStoresRegistry.getLayerById(key).getGeometryType(); //get geometry type if vector layer\n const is3DGeometry = geometryType && g3wsdk.core.geoutils.Geometry.is3DGeometry(geometryType); //Boolean check if is 3D geometry\n items\n .forEach(item => {\n //check the state of feature item\n state = item.getState();\n const GeoJSONFormat = new ol.format.GeoJSON();\n // item needs to be deleted\n if ('delete' === state) {\n //check if is new. If is new mean is not present on server,\n //so no need to say to server to delete it\n if (!item.isNew()) {\n layer.delete.push(item.getId());\n }\n return;\n }\n //convert feature to json ex. {geometry:{type: 'Point'}, properties:{}.....}\n const itemObj = GeoJSONFormat.writeFeatureObject(item);\n //In the case of 3D geometry need to set the same tpe of layer (LineStringMZ...)\n if (is3DGeometry) {\n itemObj.geometry.type = geometryType\n }\n\n //get properties\n const childs_properties = item.getProperties();\n for (const p in itemObj.properties) {\n // in case the value of property is an object\n if (itemObj.properties[p] && typeof itemObj.properties[p] === 'object' && itemObj.properties[p].constructor === Object) {\n //need to get value from value attribute object\n itemObj.properties[p] = itemObj.properties[p].value;\n }\n // @TODO explain when this condition happen\n if (undefined === itemObj.properties[p] && childs_properties[p]) {\n itemObj.properties[p] = childs_properties[p]\n }\n }\n // in case of adding, it has to remove not editable properties\n layer[item.isNew() ? 'add' : item.getState()].push(itemObj);\n });\n // check in case of no edit remove relation key\n if (\n isRelation\n && layer.add.length === 0 //no relation features to add\n && layer.update.length === 0 //no relation features to update\n && layer.delete.length === 0 //no relation features to delete\n ) {\n delete commitObj.relations[key];\n }\n }\n // Remove deep relations from the current layer (commitObj) that are not relative to that layer\n const relations = Object.keys(commitObj.relations || {});\n relations\n .filter(id => undefined === this.state.layer.getEditor().getLayer().getRelations().getArray().find(r => id === r.getChild())) // child relations\n .map(id => {\n commitObj.relations[ToolBox\n .get(id)\n .getSession()\n .getEditor()\n .getLayer()\n .getRelations()\n .getArray()\n .find(r => id === r.getChild() && commitObj.relations[r.getFather()]) // parent relation layer\n .getFather()].relations[id] = commitObj.relations[id];\n return id;\n })\n .forEach(id => delete commitObj.relations[id]);\n\n return commitObj;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n * \n * Clear all things bind to session\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __clearSession() {\n this._allfeatures = false;\n this.state.editing.session.started = false;\n this.state.editing.session.getfeatures = false;\n this.__clearHistory();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param ids since g3w-client-plugin-editing@v3.8.0\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __clearHistory(ids) {\n if (ids) {\n this._states.forEach((state, idx) => {\n if (ids.includes(state.id)) {\n if (this.state.editing.session.current && state.id === this.state.editing.session.current) {\n this.__undo();\n }\n this._states.splice(idx, 1);\n }\n });\n } else {\n // clear all\n this._states = [];\n this.state.editing.session.current = null;\n this._constrains.commit = false;\n this._constrains.redo = false;\n this._constrains.undo = false;\n }\n }\n\n /**\n * Start session\n */\n async __startSession(options = {}) {\n try {\n const features = await promisify(this.state.layer.getEditor().start(options));\n this.state.editing.session.started = true;\n return features;\n } catch(e) {\n console.warn(e);\n return Promise.reject(e);\n } finally {\n if (!options.registerEvents) { return }\n this.state._getFeaturesOption = options;\n // register get features event (only in case filter bbox)\n if ((Layer.LayerTypes.VECTOR === this.state._layerType) && this.state._getFeaturesOption.filter.bbox) {\n const fnc = () => {\n if (\n //added ApplicationState.online\n ApplicationState.online\n && this.state.editing.canEdit\n && this.state.selected //need to be selected\n && 0 === GUI.getContentLength()\n ) {\n this.state._getFeaturesOption.filter.bbox = GUI.getService('map').getMapBBOX();\n this.state.loading = true;\n this._session\n .getFeatures(this.state._getFeaturesOption)\n .then(promise => promise.then(() => this.state.loading = false) )\n }\n };\n this._getFeaturesEvent.event = 'moveend';\n this._getFeaturesEvent.fnc = debounce(fnc, 300);\n this._olStartKeysEvent.push(GUI.getService('map').getMap().on('moveend', this._getFeaturesEvent.fnc));\n if (GUI.getContentLength()) {\n GUI.once('closecontent', () => {\n const map = GUI.getService('map').getMap();\n setTimeout(() => map.dispatchEvent({ type: this._getFeaturesEvent.event, target: map }))\n })\n }\n }\n }\n }\n\n /**\n * Stop session\n */\n async __stopSession() {\n try {\n if (this.state.editing.session.started || this.state.editing.session.getfeatures) {\n await promisify(this.state.layer.getEditor().stop());\n this.__clearSession();\n } \n } catch (e) {\n console.warn(e);\n return Promise.reject(e);\n } finally {\n if (ApplicationState.online) {\n this._stopSessionChildren(this.state.id);\n }\n // unregister get features event\n if (this.state._getFeaturesOption.registerEvents && Layer.LayerTypes.VECTOR === this.state._layerType) {\n GUI.getService('map').getMap().un(this._getFeaturesEvent.event, this._getFeaturesEvent.fnc);\n }\n }\n }\n\n /**\n * Get features from server (by editor)\n */\n async __getFeatures(options={}) {\n if (!this._allfeatures) {\n this._allfeatures = !options.filter;\n const features = await promisify(this.state.layer.getEditor().getFeatures(options));\n this.state.editing.session.getfeatures = true;\n return features;\n }\n return [];\n }\n\n /**\n * Hook to get informed that are saved on server\n * Get unique id for each commited layer/relation\n */\n async __saveChangesOnServer(commit) {\n const promises = [ setLayerUniqueFieldValues(this.getId()) ];\n const relationsId = [];\n const addRelationId = (relations = {}) => {\n Object.entries(relations).forEach(([id, commit]) => {\n relationsId.push(id);\n addRelationId(commit.relations);\n })\n }\n addRelationId(commit.relations);\n relationsId.forEach(id => promises.push(setLayerUniqueFieldValues(id)));\n\n await Promise.allSettled(promises);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/toolboxes/tool.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _startTool(tool) {\n if (tool.getOperator()) {\n tool.active = true;\n setTimeout(async() => await this._startOp(\n tool,\n {\n inputs: { layer: this.getLayer(), features: [] },\n context: { session: this._session }\n },\n !!GUI.getService('map').isMapHidden())\n ); // prevent rendering change state\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/toolboxes/tool.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async _startOp(tool, options, hideSidebar) {\n // reset features\n options.inputs.features = options.features || [];\n\n if (hideSidebar) {\n GUI.hideSidebar();\n }\n\n try {\n await promisify(tool.op.start(options));\n await promisify(this._session.save());\n g3wsdk.core.plugin.PluginsRegistry.getPlugin('editing').saveChange(); // after save temp change check if editing service has a autosave\n } catch (e) {\n console.warn(e);\n if (hideSidebar) {\n GUI.showSidebar();\n }\n this._session.rollback();\n } finally {\n if (!tool.getOperator().runOnce && Layer.LayerTypes.VECTOR === this.getLayer().getType() ) {\n await this._startOp(tool, options, hideSidebar);\n } else {\n tool.stop();\n }\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/toolboxes/tool.js@v3.7.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n _stopTool(tool, force = false) {\n return $promisify(async () => {\n if (!tool.getOperator()) {\n tool.emit('stop', { session: this._session });\n return;\n }\n try {\n await promisify(tool.getOperator().stop(force));\n } catch(e) {\n console.warn(e);\n this._session.rollback();\n } finally {\n tool.active = false;\n tool.emit('stop', { session: this._session });\n }\n });\n }\n\n}\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/store/sessions.js@v3.9.1\n *\n * Store editing sessions\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\nToolBox._sessions = {};\nToolBox.get = id => ToolBox._sessions[id];\nToolBox.clear = () => Object.keys(sessions).forEach(id => delete ToolBox._sessions[id]);", "import { chooseFeatureFromFeatures } from '../utils/chooseFeatureFromFeatures';\nimport { $promisify } from '../utils/promisify';\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/choosefeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/choosefeaturestep.js@v3.7.1\n * \n * @returns jQuery promise\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function chooseFeature(inputs) {\n return $promisify(async () => {\n try {\n if (1 !== inputs.features.length) {\n const feature = await chooseFeatureFromFeatures({ features: inputs.features, inputs });\n inputs.features = [feature];\n }\n return inputs;\n } catch (e) {\n console.warn(e);\n return Promise.reject(e);\n }\n });\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/tasks/editingtask.js@v3.7.1\n * \n * @param layer,\n * @param feature\n *\n * @returns Array of fields\n */\nexport function getNotEditableFieldsNoPkValues({\n layer,\n feature,\n}) {\n return layer\n .getEditingNotEditableFields()\n .reduce((fields, field) => {\n fields[field] = layer.isPkField(field) ? null : feature.get(field); // NB: Primary Key fields need to be `null`\n return fields;\n }, {});\n}", "/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/moveelementstask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/movelementsstep.js@v3.7.1\n *\n * @param { Object } delta\n * @param delta.x\n * @param delta.y\n * @param delta.coordinates\n * \n * @returns {{ x: number, y: number }}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function getDeltaXY({ x, y, coordinates } = {}) {\n const coords = _getCoordinates(coordinates);\n return {\n x: x - coords.x,\n y: y - coords.y\n }\n}\n\nfunction _getCoordinates(coords) {\n return Array.isArray(coords[0]) ? _getCoordinates(coords[0]) : {\n x: coords[0],\n y: coords[1]\n };\n}", "/**\n * @param feature\n * @param coordinates\n *\n * @returns { boolean }\n */\nexport function isPointOnVertex({\n feature,\n coordinates,\n }) {\n const geometry = feature.getGeometry();\n const type = geometry.getType();\n const coords = c => g3wsdk.core.geoutils.areCoordinatesEqual(coordinates, c); // whether element have same coordinates\n \n switch (type) {\n case 'Polygon':\n case 'MultiLineString':\n return geometry.getCoordinates().flat().some(coords);\n \n case 'LineString':\n case 'MultiPoint':\n return geometry.getCoordinates().some(coords);\n \n case 'MultiPolygon':\n return geometry.getPolygons().some(poly => poly.getCoordinates().flat().some(coords));\n \n case 'Point':\n return g3wsdk.core.geoutils.areCoordinatesEqual(coordinates, geometry.getCoordinates());\n \n default:\n return false;\n }\n }", "import { cloneFeature } from '../utils/cloneFeature';\nimport { evaluateExpressionFields } from '../utils/evaluateExpressionFields';\nimport { getNotEditableFieldsNoPkValues } from '../utils/getNotEditableFieldsNoPkValues';\n\nconst { Feature } = g3wsdk.core.layer.features;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/splitfeaturetask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/splitfeaturestep.js@v3.7.1\n *\n * @param feature\n * @param inputs\n * @param context\n * @param splittedGeometries\n * \n * @returns {Promise<*[]>}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport async function handleSplitFeature({\n feature,\n inputs,\n context,\n splittedGeometries = []\n} = {}) {\n const newFeatures = [];\n const { layer } = inputs;\n const session = context.session;\n const source = layer.getEditingLayer().getSource();\n const layerId = layer.getId();\n const oriFeature = feature.clone();\n inputs.features = splittedGeometries.length ? [] : inputs.features;\n const splittedGeometriesLength = splittedGeometries.length;\n\n for (let index = 0; index < splittedGeometriesLength; index++) {\n const splittedGeometry = splittedGeometries[index];\n if (0 === index) {\n /**\n * check geometry evaluated expression\n */\n feature.setGeometry(splittedGeometry);\n try {\n await evaluateExpressionFields({ inputs, context, feature });\n } catch(e) {\n console.warn(e);\n }\n\n session.pushUpdate(layerId, feature, oriFeature);\n\n } else {\n const newFeature = cloneFeature(oriFeature, layer);\n newFeature.setGeometry(splittedGeometry);\n\n // set media fields to null\n //@since 3.9.0 Commented\n //layer.getEditingMediaFields({}).forEach(f => newFeature.set(f, null));\n\n feature = new Feature({ feature: newFeature });\n\n feature.setTemporaryId();\n\n // evaluate geometry expression\n try { await evaluateExpressionFields({ inputs, context, feature }); }\n catch(e) { console.warn(e); }\n\n /**\n * @todo improve client core to handle this situation on sesssion.pushAdd not copy pk field not editable only\n */\n const noteditablefieldsvalues = getNotEditableFieldsNoPkValues({ layer, feature });\n\n if (Object.entries(noteditablefieldsvalues).length) {\n const newFeature = session.pushAdd(layerId, feature);\n Object.entries(noteditablefieldsvalues).forEach(([field, value]) => newFeature.set(field, value));\n newFeatures.push(newFeature);\n //need to add features with no editable fields on layers source\n source.addFeature(newFeature);\n } else {\n newFeatures.push(session.pushAdd(layerId, feature));\n //add feature to source\n source.addFeature(feature);\n }\n }\n inputs.features.push(feature);\n }\n\n return newFeatures;\n}", "import { evaluateExpressionFields } from '../utils/evaluateExpressionFields';\nimport { $promisify } from './promisify';\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/tasks/addparttomultigeometriestask.js@v3.7.1\n * ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/steps/addparttomultigeometriesstep.js@v3.7.1\n * \n * @returns jQuery promise\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function addPartToMultigeometries(inputs, context) {\n return $promisify(async () => {\n let feature;\n let originalFeature;\n\n // add part\n if (inputs.features.length > 1) {\n feature = inputs.features[0];\n const geometry = feature.getGeometry();\n originalFeature = feature.clone();\n geometry.setCoordinates([...geometry.getCoordinates(), ...inputs.features[1].getGeometry().getCoordinates()]);\n } else {\n feature = inputs.layer.getEditingLayer().getSource().getFeatures()[0];\n originalFeature = feature.clone();\n feature.setGeometry(inputs.features[0].getGeometry());\n }\n\n // evaluated geometry expression\n try { await evaluateExpressionFields({ inputs, context, feature });}\n catch (e) { console.warn(e); }\n\n context.session.pushUpdate(inputs.layer.getId(), feature, originalFeature);\n\n inputs.features = [feature];\n return inputs;\n });\n}", "/**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * check if was done an update (update are array contains two items, old and new value)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function checkSessionItems(historyId, items, action) {\n /**\n * action: \n * 0: undo;\n * 1: redo;\n **/\n const newItems = {\n own: [], //array of changes of layer of the current session\n dependencies: {} // dependencies\n };\n\n items\n .forEach((item) => {\n if (Array.isArray(item)) { item = item[action] }\n // check if belong to session\n if (historyId === item.layerId) { newItems.own.push(item) }\n else {\n newItems.dependencies[item.layerId] = newItems.dependencies[item.layerId] || {\n own: [],\n dependencies: {}\n };\n newItems.dependencies[item.layerId].own.push(item);\n }\n });\n\n return newItems;\n}", "import { Workflow } from '../g3wsdk/workflow/workflow';\nimport { getRelationFieldsFromRelation } from '../utils/getRelationFieldsFromRelation';\nimport { updateWorkflows } from './updateWorkflows';\nimport { getEditingLayerById } from '../utils/getEditingLayerById';\nimport { $promisify } from \"../utils/promisify\";\n\nconst { GUI } = g3wsdk.gui;\nconst { tPlugin } = g3wsdk.core.i18n;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/relationservice.js@v3.7.1\n * \n * Unlink relation\n * @param layerId\n * @param relation\n * @param relations\n * @param index\n * @param dialog\n * \n * @returns JQuery Promise\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function unlinkRelation({\n layerId,\n relation,\n relations,\n index,\n dialog = true,\n}) {\n return $promisify(new Promise((resolve) => {\n const unlink = () => {\n const id = layerId === relation.child ? relation.father : relation.child; // relation layer id\n const feature = getEditingLayerById(id).getEditingSource().getFeatureById(relations[index].id);\n const originalRelation = feature.clone();\n // loop on ownField (Array field child relation)\n getRelationFieldsFromRelation({ relation, layerId: id }).ownField.forEach(f => feature.set(f, null))\n Workflow.Stack.getCurrent().getSession().pushUpdate(id, feature, originalRelation);\n relations.splice(index, 1);\n updateWorkflows();\n resolve(true);\n };\n if (dialog) {\n GUI.dialog.confirm(tPlugin(\"editing.messages.unlink_relation\"), result => result ? unlink() : d.reject(false));\n } else {\n unlink();\n }\n }));\n}", "const { splitFeature } = g3wsdk.core.geoutils;\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/utils/splitFeatures.js@v3.10.2\n * \n * @param { Object } opts\n * @param { Array } opts.features\n * @param opts.splitfeature\n * \n * @returns { Array } splittered geometries\n * \n * @since g3w-client-plugin-editing@v3.9.0\n */\nexport function splitFeatures(features, splitfeature) {\n return (features || []).reduce((a, f) => {\n const geometries = splitFeature({ splitfeature, feature: f });\n if (geometries.length > 1) {\n a.push({ uid: f.getUid(), geometries });\n }\n return a;\n }, []);\n}", "export default {\n close_editing_panel: {\n message: \"Terminare l'editing dei singoli layer per chiudere la sessione\"\n },\n errors: {\n no_layers: \"Si \u00E8 verificato un errore nel caricamento dei layers in editing.\",\n some_layers: \"Si \u00E8 verificato un errore nel caricamento di alcuni layers in editing\",\n editing_multiple_relations: 'Le modifica di relazioni multiple non \u00E8 attualmente supportata',\n },\n search: \"Cerca\",\n editing_changes: \"Modifiche Editing\",\n editing_data: \"Modifica dati\",\n editing_attributes: \"Edita attributi\",\n relations: \"Relazioni\",\n edit_relation: \"Edita relazione\",\n back_to_relations: \"Ritorna alle Relazioni\",\n no_relations_found: \"Non ci sono relazioni\",\n relation_data: \"Dati relativi alla relazione\",\n relation_already_added : \"Relazione gi\u00E0 presente\",\n list_of_relations_feature: \"Elenco Relazioni della feature \",\n tooltip:{\n edit_layer: \"Modifica livello\",\n filter_by_relation: \"Filtra i livelli per relazione\",\n },\n toolbox: {\n title: 'Edita'\n },\n table: {\n edit: \"Edita feature\",\n copy: \"Crea una copia\",\n delete: \"Cancella feature\"\n },\n tools: {\n copy: \"Copia elementi\",\n pastefeaturesfromotherlayers: \"Incolla elemento da altro livello\",\n addpart: \"Aggiungi parte alla geometria\",\n deletepart: \"Cancella parte dalla geometria\",\n merge: \"Dissolvi elementi\",\n split: \"Dividi elementi\",\n add_feature: \"Aggiungi elemento\",\n delete_feature: \"Elimina elemento\",\n move_feature: \"Muovi elemento\",\n update_vertex: \"Aggiorna vertici elemento\",\n update_feature: \"Modifica attributi elemento\",\n update_multi_features: \"Modifica gli attributi degli elementi selezionati\",\n update_multi_features_relations: \"Modifica gli attributi di tutte le relazioni selezionate\",\n update_multi_features_relations_from_parents : \"Edita i record relazionati di uno o pi\u00F9 padri\",\n copyfeaturefromexternallayer: \"Crea elemento da un livello esterno\"\n },\n toolsoftool: {\n measure: \"Visualizza misura\",\n snap: \"Snap sul layer\",\n snapall: \"Snap su tutti i layer\"\n },\n steps: {\n help: {\n select_elements: \"Seleziona le geometrie\",\n select_element: \"Seleziona l'elemento\",\n copy: \"Crea una copia degli elementi selezionati\",\n merge: \"Dissolvi elementi\",\n split: \"Dvidi elemento\",\n new: \"Crea un nuovo elemento\",\n edit_table: \"Modifica gli elementi della tabella\",\n draw_new_feature: \"Disegna la nuova geometria\",\n action_confirm: \"Conferma azione\",\n double_click_delete: \"Seleziona la geometria sulla mappa da cancellare\",\n edit_feature_vertex: \"Modifica o aggiungi un vertice alla geometria selezionata\",\n move: \"Muovi la geometria selezionata\",\n select_feature_to_relation: \"Seleziona la geometria che vuoi mettere in relazione\",\n show_edit_feature_form: \"Mostra il modulo per modificare gli attributi del'elemento\",\n pick_feature: \"Seleziona la geometria da modificare dalla mappa\",\n insert_attributes_feature: \"Inserisci gli attributi dell'elemento\"\n }\n },\n\n workflow: {\n steps: {\n select: 'Seleziona una geometria',\n draw_part: \"Disegna il nuovo elemento da aggiungere alla geometria\",\n draw_geometry : \"Disegna la geometria\",\n merge: 'Seleziona la geometria su cui dissolvere',\n selectPoint: \"Clicca sulla geometria per selezionarla\",\n selectSHIFT: 'Seleziona le geometrie tenedo premuto il tasto SHIFT',\n selectDrawBox: \"Seleziona le geometrie disegnando un rettangolo mediante la creazione dei due punti della diagonale\",\n selectDrawBoxAtLeast2Feature: \"Seleziona almeno 2 geometrie disegnando un rettangolo mediante la creazione dei due punti della diagonale\",\n selectPointSHIFT: 'Seleziona le geometrie
MAIUSC+DRAG seleziona pi\u00F9 elementi in un area',\n selectMultiPointSHIFT: 'Seleziona le geometrie
SHIFT+DRAG seleziona pi\u00F9 elementi in un area',\n selectMultiPointSHIFTAtLeast2Feature: 'Seleziona almeno 2 geometrie
SHIFT+DRAG seleziona pi\u00F9 elementi in un area',\n copyCTRL: 'Copia le geometrie selezionate con CTRL+C',\n selectStartVertex: 'Seleziona il vertice di partenza',\n selectToPaste: 'Seleziona il punto dove verranno incollate le geometrie',\n draw_split_line: \"Disegna una linea per dividere la geometria selezionata\"\n },\n title: {\n steps: 'Passi',\n },\n next: 'Avanti',\n },\n messages: {\n featureslockbyotheruser: \"Ci sono alcune geometrie/records non editabili perch\u00E8 in modifica da altri utenti\",\n splitted: \"Feature(s) splittata(e)\",\n nosplittedfeature: \"La(e) feature(s) non \u00E8 stata splittata\",\n press_esc: \"Premi ESC per tornare indietro\",\n online: \"Ora sei di nuovo ONLINE. Puoi slavare le modifiche in modo permanente\",\n offline: \"Sei OFFLINE. Tutte le modifiche saranno salvate temporaneamente in locale\",\n delete_feature: \"Vuoi eliminare l'elemento selezionato?\",\n delete_feature_relations: \"Cancellando una feature con relazioni associate, tale relazioni rimarranno orfane. Si consiglia di gestire tali relazioni prima di cancellare la feature\",\n unlink_relation: \"Vuoi staccare la relazione?\",\n commit_feature: \"Riepilogo modifiche\",\n toolbox_has_no_geometry: \"questo livello non ha geometria\",\n toolbox_has_relation: \"questo livello fa parte di una relazione\",\n saved: \"I dati sono stati salvati correttamente\",\n saved_local: \"I dati sono stati salvati correttamente in locale\",\n loading_data: \"Caricamento dati\",\n saving: \"Salvataggio dati in corso. Attendere ...\",\n constraints: {\n enable_editing: \"Ingrandisci per modificare \\nScala di attivazione 1:\"\n },\n pdf: \"Anteprima del documento non disponibile. Clicca qui \",\n commit: {\n header: \"La lista sotto riporta tutte le modifiche che verranno salvate.\",\n header_relation: \"Relazione\",\n header_add: \"Aggiunte riporta il numero delle features aggiunte\",\n header_update_delete: \"Modificate e Cancellate riporta la lista degli id\",\n add: \"Aggiunte\",\n delete: \"Cancellate\",\n update: \"Aggiornate\"\n },\n loading_table_data: \"Costruzione tabella dati in corso. Attendere ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"Necessario compilare eventuali campi obbligatori sulle features incollate prima del salvataggio\",\n no_feature_selected: \"Nessuna feature selezionata\",\n select_min_2_features: 'Seleziona come minimo due features'\n },\n relation: {\n table: {\n info: `
Seleziona le relazioni per associarle alla feature in editing.
`\n },\n draw_new_feature: \"Disegna nuova geometria\",\n draw_or_copy: \"oppure\",\n copy_feature_from_other_layer: \"Copia geometria da altro layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Torna ad editare il padre\",\n add_relation: \"Crea ed aggiungi nuova relazione\",\n link_relation: \"Associa una relazione esistente a questa feature\",\n open_relation_tools: \"Apri strumenti relatione\",\n unlink_relation: \"Annulla relazione\"\n }\n },\n buttons: {\n save: \"Inserisci/Modifica\",\n save_table: 'Modifica',\n save_and_back: \"Salva e torna al padre\",\n save_and_back_table: \"Salva e torna indietro\",\n cancel: \"Ignora Modifiche\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Seleziona layer\",\n edit_attributes: \"Edita attributi delle features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Seleziona una feature\"\n }\n }\n }\n}", "/**\n * @file\n * \n * ORIGINAL SOURCE: g3w-client/src/core/editing/editor.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.x\n */\n\nimport { ToolBox } from '../../toolboxes/toolbox';\nimport { promisify, $promisify } from '../../utils/promisify';\n\nconst { ApplicationState, G3WObject } = g3wsdk.core;\nconst { FeaturesStore } = g3wsdk.core.layer.features;\nconst { Layer } = g3wsdk.core.layer;\n\n/**\n * ORIGINAL SOURE: g3w-client/src/app/core/layers/features/olfeaturesstore.js@v3.10.2\n */\nclass OlFeaturesStore extends FeaturesStore {\n constructor(opts = {}) {\n super(opts);\n this._features = opts.features || new ol.Collection([]);\n }\n\n /**\n * Get number of features stored\n * @return { Number }\n */\n getLength() {\n return this._features.getLength();\n }\n\n /**\n * Store features\n * @param { Array } features\n */\n setFeatures(features = []) {\n //remove features\n this._features.clear();\n //add new features\n this.addFeatures(features);\n this._features.dispatchEvent('change');\n };\n\n /**\n * @returns {*[]}\n */\n readFeatures() {\n return this._features.getArray();\n };\n\n /**\n * @return {*|ol.Collection}\n */\n getFeaturesCollection() {\n return this._features;\n }\n\n /**\n * @param id\n * @returns {*}\n */\n getFeatureById(id) {\n return this._features.getArray().find(f => id == f.getId());\n }\n\n getFeatureByUid(uid) {\n return this._features.getArray().find(f => uid === f.getUid());\n }\n\n /**\n *\n * @param feature\n * @private\n */\n _addFeature(feature) {\n this._features.push(feature);\n // useful for ol.source.Vector\n this._features.dispatchEvent('change');\n }\n\n /**\n * Substitute the feature after modifying\n * @param feature\n * @private\n */\n _updateFeature(feature) {\n const index = this._features.getArray().findIndex(f => feature.getUid() === f.getUid());\n if (index >= 0) {\n this._features.removeAt(index);\n this._features.insertAt(index, feature);\n this._features.dispatchEvent('change')\n }\n }\n\n /**\n * Remove feature from store\n * @param feature\n * @private\n */\n _removeFeature(feature) {\n const index = this._features.getArray().findIndex(f => feature.getUid() === f.getUid());\n if (index >= 0) {\n this._features.removeAt(index);\n this._features.dispatchEvent('change');\n }\n }\n\n /**\n * @private\n */\n _clearFeatures() {\n try {\n // Used remove single features instead use clear method\n // because some time trows an error\n for (let i = 0; i < this._features.getArray().length; i++) {\n this._features.removeAt(i);\n }\n } catch(e) {\n console.warn(e);\n }\n //Need to set a new Collection to avoid duplicate\n this._features = null; //@TODO is still usefully ????\n this._features = new ol.Collection([]);\n }\n\n}\n\n\n/**\n * Editor Class: bind editor to layer to do main actions\n *\n * @param config\n *\n * @constructor\n */\nexport default class Editor extends G3WObject {\n\n constructor(options = {}) {\n\n super();\n\n /**\n * Setter hooks.\n */\n this.setters = {\n save() { this._layer.save(); },\n addFeature(feature) { this._featuresstore.addFeature(feature); },\n updateFeature(feature) { this._featuresstore.updateFeature(feature); },\n deleteFeature(feature) { this._featuresstore.deleteFeature(feature); },\n setFeatures(features = []) { this._featuresstore.setFeatures(features); },\n /**\n * Get features from server method.\n * Used when vector Layer's bbox is contained into an already requested bbox (so no a new request is done).\n *\n * @param { number[] } options.filter.bbox bounding box Array [xmin, ymin, xmax, ymax]\n *\n * @returns { boolean } whether can perform a server request\n */\n getFeatures(options = {}) {\n // skip is not onlien or all features of layers are already got\n if (!ApplicationState.online || this._allfeatures) {\n return $promisify(Promise.resolve());\n }\n\n return $promisify(async () => {\n\n let doRequest = true; // default --> perform request\n\n const { bbox } = options.filter || {};\n //check if bbox options filter (bbox of a current map) is passed and is a vector layer\n const is_vector = bbox && Layer.LayerTypes.VECTOR === this._layer.getType();\n \n // first request --> need to perform request\n if (is_vector && null === this._filter.bbox) {\n this._filter.bbox = bbox; // store bbox\n doRequest = true;\n }\n\n // subsequent requests --> check if bbox is contained into an already requested bbox\n else if (is_vector) {\n //Boolean - Check if features are already got inside bbox\n const is_cached = ol.extent.containsExtent(this._filter.bbox, bbox);\n if (!is_cached) {\n this._filter.bbox = ol.extent.extend(this._filter.bbox, bbox);\n }\n doRequest = !is_cached;\n }\n\n /** @TODO simplfy nested promises */\n if (doRequest) {\n const features = await promisify(this._layer.getFeatures(options));\n // add features from server to editing features store (cloned from original)\n this._featuresstore.addFeatures((features || []).map(f => f.clone()));\n //set all features to true if no filter is set (e.g., Table layer)\n this._allfeatures = !options.filter;\n return features;\n }\n });\n },\n };\n\n /**\n * Filter to getFeaturerequest\n */\n this._filter = {\n bbox: null\n };\n\n /**\n * { Boolean } true, mean all features of layer are get (e.g. Table layer)\n */\n this._allfeatures = false;\n\n /**\n * Referred layer\n */\n this._layer = options.layer;\n\n /**\n * Store editing features\n * \n * @type { FeaturesStore | OlFeaturesStore }\n */\n this._featuresstore = Layer.LayerTypes.TABLE === this._layer.getType() ? new FeaturesStore() : new OlFeaturesStore();\n\n /**\n * Whether editor is active or not\n *\n * @type { boolean }\n */\n this._started = false;\n\n }\n\n /**\n * Get editing source layer feature\n * \n * @returns { FeaturesStore | OlFeaturesStore }\n */\n getEditingSource() {\n return this._featuresstore;\n }\n\n /**\n * get Source\n */\n getSource() {\n this._layer.getSource();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/services/editing.js@v3.9.1\n * \n * Apply changes to source features (undo/redo)\n * \n * @param items\n * @param { boolean } reverse whether change to opposite\n */\n setChanges(items = [], reverse = true) {\n /** known actions */\n const Actions = {\n 'add': { fnc: 'addFeature', opposite: 'delete' },\n 'delete': { fnc: 'removeFeature', opposite: 'add' },\n 'update': { fnc: 'updateFeature', opposite: 'update' },\n };\n items.forEach(item => {\n if (reverse) {\n item.feature[Actions[item.feature.getState()].opposite]();\n }\n // get method from object\n this._featuresstore[Actions[item.feature.getState()].fnc](item.feature);\n });\n }\n\n /**\n * @returns {*}\n */\n getLayer() {\n return this._layer;\n }\n\n /**\n * @param layer\n */\n setLayer(layer) {\n return this._layer = layer;\n }\n\n /**\n * Rollback changes\n * \n * @param changes\n * \n * @returns {*}\n */\n rollback(changes = []) {\n return $promisify(() => this.setChanges(changes, true));\n }\n\n /**\n * Apply response data from server in case of new inserted feature\n * @param { Object } response\n * @param response.response.new array of new ids\n * @param response.response.new.clientid temporary id created by client __new__\n * @param response.response.new.id the new id created and stored on server\n * @param response.response.new.properties properties of the feature saved on server\n * @param response.response.new_lockids array of new lockIds\n * \n * @param relations\n */\n applyCommitResponse(response = {}, relations = []) {\n\n // skip when no response and response.result is false\n if (!(response && response.result)) { return }\n\n //Loop on new features saved on server\n // clientid - temporary id of new feature\n // id - id saved on server (autogenerate, next value) to subtituite to clientid feature id\n // properties - properties of feature returned by server\n response.response.new.forEach(({ clientid, id, properties } = {}) => {\n //get feature from current layer in editing\n const feature = this.getEditingSource().getFeatureById(clientid);\n // set new id\n feature.setId(id);\n //set properties\n feature.setProperties(properties);\n //Loop on eventual relation updated or created\n relations.forEach(r => { // handle relations (if provided)\n Object\n .entries(r)\n .forEach(([ id, opts = {}]) => { // id - relation layer id, opts - Object contain relation properties\n //get the editing source of relation layer\n const source = ToolBox.get(id).getSession().getEditor().getEditingSource();\n // handle value to relation field saved on server\n (opts.ids || []).forEach(id => {\n const rFeature = source.getFeatureById(id);\n if (rFeature) {\n opts.fatherField.forEach((ff, i) => {// loop relation ids\n rFeature.set(opts.childField[i], feature.get(ff)) // set father feature `value` and `name`\n })\n }\n })\n });\n });\n\n });\n\n //@since 3.9.0 take in account update properties returned by server (Useful in case of media input changes)\n (response.response.update || []).forEach(({ id, properties } = {}) => {\n //get feature from current layer in editing\n const feature = this.getEditingSource().getFeatureById(id);\n //set properties\n feature.setProperties(properties);\n //Loop on eventual relation updated or created\n relations.forEach(r => { // handle relations (if provided)\n Object\n .entries(r)\n .forEach(([ id, opts = {}]) => { // id - relation layer id, opts - Object contain relation properties\n //get the editing source of relation layer\n const source = ToolBox.get(id).getSession().getEditor().getEditingSource();\n // handle value to relation field saved on server\n (opts.ids || []).forEach(id => {\n const rFeature = source.getFeatureById(id);\n if (rFeature) {\n opts.fatherField.forEach((ff, i) => {// loop relation ids\n rFeature.set(opts.childField[i], feature.get(ff)) // set father feature `value` and `name`\n })\n }\n })\n });\n });\n\n });\n\n const features = this.readEditingFeatures();\n\n features.forEach(f => f.clearState()); // reset state of the editing features (update, new etc..)\n\n this._layer.setFeatures([...features]); // substitute layer features with actual editing features (\"cloned\" to prevent layer actions duplicates, eg. addFeatures)\n\n this.addLockIds(response.response.new_lockids); // add lock ids\n }\n\n /**\n * @param lockids locks be added to current layer\n *\n * @since 3.9.0\n */\n addLockIds(lockids) {\n this._layer.getSource().addLockIds(lockids);\n }\n\n /**\n * @returns {*}\n */\n getLockIds() {\n return this._layer.getSource().getLockIds();\n }\n\n /**\n * Run after server has applied changes to origin resource\n *\n * @param commit commit items\n *\n * @returns jQuery promise\n */\n commit(commit) {\n return $promisify(async () => {\n let relations = [];\n\n // check if there are commit relations binded to new feature\n if (commit.add.length) {\n relations = Object\n .keys(commit.relations)\n .map(relationId => {\n const relation = this._layer.getRelations().getRelationByFatherChildren(this._layer.getId(), relationId);\n return {\n [relationId]: {\n ids: [ // ids of \"added\" or \"updated\" relations\n ...commit.relations[relationId].add.map(r => r.id), // added\n ...commit.relations[relationId].update.map(r => r.id) // updated\n ],\n fatherField: relation.getFatherField(), // father Fields \n childField: relation.getChildField() // child Fields \n }\n };\n });\n }\n\n /** @TODO simplfy nested promises */\n const r = await promisify(this._layer.commit(commit));\n this.applyCommitResponse(r, relations);\n return r;\n });\n }\n\n /**\n * start editing\n */\n start(options = {}) {\n /** @TODO simplfy nested promises */\n return $promisify(async () => {\n const features = await promisify(this.getFeatures(options)); // load layer features based on filter type\n this._started = true; // if all ok set to started\n return features; // features are already inside featuresstore\n });\n }\n\n /**\n * Read features (action to layer)\n */\n readFeatures() {\n return this._layer.readFeatures();\n }\n\n /**\n * @returns features stored in editor featurestore\n */\n readEditingFeatures() {\n return this._featuresstore.readFeatures();\n }\n\n /**\n * stop editor\n */\n stop() {\n return $promisify(async () => {\n const { result } = await promisify(this._layer.unlock());\n this.clear();\n return result;\n })\n }\n\n /**\n * @returns { boolean } whether has started editor \n */\n isStarted() {\n return this._started;\n }\n\n /**\n * Method to clear all filled variables\n */\n clear() {\n this._started = false;\n this._filter.bbox = null;\n this._allfeatures = false;\n\n this._featuresstore.clear();\n this._layer.getFeaturesStore().clear();\n\n // vector layer\n if (Layer.LayerTypes.VECTOR === this._layer.getType()) {\n this._layer.resetEditingSource(this._featuresstore.getFeaturesCollection());\n }\n }\n\n}", "import Editor from './editing/editor';\nimport { Step } from './workflow/step';\nimport { Flow, ChangesManager, Session } from '../deprecated';\nimport { Workflow } from './workflow/workflow';\n\n/**\n * Editing APIs will be removed from core after g3w-client@v.4.x\n */\nif (\n window.g3wsdk.core.editing\n || window.g3wsdk.core.workflow\n || window.g3wsdk.constant.DEFAULT_EDITING_CAPABILITIES\n || g3wsdk.version < '4'\n) {\n console.warn('Editing APIs will be removed from g3wsdk after v4.x');\n}\n\n/**\n * Object to provide external plugin to use editing objects\n */\nwindow.g3wsdk.core.editing = {\n Session,\n SessionsRegistry: Session.Registry,\n Editor,\n ChangesManager,\n};\n\n/**\n * Default editing capabilities\n *\n * @type {string[]}\n */\nwindow.g3wsdk.constant.DEFAULT_EDITING_CAPABILITIES = [\n 'add_feature',\n 'change_feature',\n 'change_attr_feature',\n 'delete_feature',\n];\n\n/**\n * Object to provide to external plugins to use workflow objects\n */\nwindow.g3wsdk.core.workflow = {\n Task: Step,\n Step,\n Flow,\n Workflow,\n WorkflowsStack: Workflow.Stack\n};", "/**\n * Migrate your consumer code away from jQuery promises.\n * Covert a jQuery promise into an ES6 Promise\n * \n * @param promise jquery promise\n */\nexport function promisify(promise) {\n if (promise instanceof Promise) {\n return promise;\n }\n if (!promise || !promise.then) {\n console.trace(promise);\n return Promise.reject('not a promise');\n }\n return new Promise((resolve, reject) => {\n promise.then(resolve).fail(reject);\n });\n}\n\n/**\n * Migrate your consumer code away from jQuery promises.\n * Convert ES6 Promise into jQuery\n * \n * @param promise async function or ES6 promise \n */\nexport function $promisify(promise) {\n if (undefined === promise) {\n console.trace();\n return $.Deferred(d => d.reject('not a promise')).promise();\n }\n if (promise.always) {\n return promise;\n }\n return $.Deferred(async d => {\n try { d.resolve(await (promise instanceof Promise ? promise : promise())); }\n catch (e) { console.trace(e); d.reject(e); }\n }).promise();\n}", "import { promisify } from '../../utils/promisify';\n\nclass Queque {\n constructor() { this.tasks = []; }\n addTask(task) { this.tasks.push(task); }\n run(reverse = false) { while (this.tasks.length) { const task = reverse ? this.tasks.pop() : this.tasks.shift(); task(); } }\n flush() { return this.tasks.splice(0); }\n getLength() { return this.tasks.length; }\n clear() { this.run(); this.tasks = []; }\n}\n\n\n/**\n * Class Flow of workflow step by step\n * \n * ORIGINAL SOURCE: g3w-client/src/core/workflow/flow.js@v3.9.1\n * ORIGINAL SOURCE: g3w-client/src/core/workflow/queque.js@v3.9.1\n */\nexport class Flow extends g3wsdk.core.G3WObject {\n constructor() {\n super();\n console.warn('[G3W-CLIENT] g3wsdk.core.workflow.Flow is deprecated');\n this.steps = [];\n this.counter = 0;\n this.context = null;\n this.queques = {\n end: new Queque(),\n micro: new Queque()\n };\n this.inputs;\n this.d;\n this._workflow;\n }\n\n //start workflow\n start(workflow) {\n this.d = $.Deferred();\n if (this.counter > 0) {\n console.log(\"reset workflow before restarting\");\n }\n this._workflow = workflow;\n this.inputs = workflow.getInputs();\n this.context = workflow.getContext();\n this.steps = workflow.getSteps();\n // check if there are steps\n if (this.steps && this.steps.length) {\n //run step (first)\n this.runStep(this.steps[0], this.inputs, this.context);\n }\n // return a promise that will be reolved if all step go right\n return this.d.promise();\n };\n\n //run step\n runStep(step, inputs) {\n //run step that run task\n this._workflow.setMessages({\n help: step.state.help\n });\n const runMicroTasks = this.queques.micro.getLength();\n step.run(inputs, this.context, this.queques)\n .then(outputs => {\n runMicroTasks && this.queques.micro.run();\n this.onDone(outputs);\n })\n .fail(e => this.onError(e));\n };\n\n //check if all step are resolved\n onDone(outputs) {\n this.counter++;\n if (this.counter === this.steps.length) {\n this.counter = 0;\n this.d.resolve(outputs);\n return;\n }\n this.runStep(this.steps[this.counter], outputs);\n };\n\n // in case of error\n onError(e) {\n this.counter = 0;\n this.clearQueques();\n this.d.reject(e);\n };\n\n // stop flow\n stop() {\n const d = $.Deferred();\n this.steps[counter].isRunning() ? this.steps[this.counter].stop() : null;\n this.clearQueques();\n if (this.counter > 0) {\n // set counter to 0\n this.counter = 0;\n // reject flow\n d.reject();\n } else {\n //reject to force rollback session\n d.resolve();\n }\n return d.promise();\n };\n\n clearQueques(){\n this.queques.micro.clear();\n this.queques.end.clear();\n }\n\n}\n\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/services/editing.js@v3.9.1\n */\nexport const ChangesManager = {\n /** known actions */\n Actions: {\n 'add': {\n fnc: 'addFeature',\n opposite: 'delete'\n },\n 'delete': {\n fnc: 'removeFeature',\n opposite: 'add'\n },\n 'update': {\n fnc: 'updateFeature',\n opposite: 'update'\n }\n },\n /* apply changes to features (undo/redo) */\n execute(object, items, reverse) {\n console.warn('[G3W-CLIENT] g3wsdk.core.workflow.ChangesManager is deprecated');\n let fnc;\n let feature;\n items.forEach((item) => {\n feature = item.feature;\n if (reverse) {\n // change to opposite\n feature[ChangesManager.Actions[feature.getState()].opposite]();\n }\n // get method from object\n fnc = ChangesManager.Actions[feature.getState()].fnc;\n object[fnc](feature);\n })\n }\n};\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/session.js@v3.9.1\n */\nexport class Session extends g3wsdk.core.G3WObject {\n\n constructor(options={}) {\n console.warn('[G3W-CLIENT] g3wsdk.core.workflow.Session is deprecated');\n\n super(options);\n\n this.setters = {\n\n /**\n * Start session\n */\n start(options={}) {\n return $.Deferred(async d => {\n try {\n const features = await promisify(this._editor.start(options));\n this.state.started = true;\n d.resolve(features);\n } catch (e) {\n console.warn(e);\n d.reject(e);\n }\n }).promise();\n },\n\n /**\n * stop session\n */\n stop() {\n return $.Deferred(async d => {\n const canStop = this.state.started || this.state.getfeatures;\n if (!canStop) {\n return d.resolve();\n }\n try {\n await promisify(this._editor.stop());\n this.clear();\n d.resolve();\n } catch (e) {\n console.warn(e);\n d.reject(e);\n }\n }).promise()\n },\n\n /**\n * Get features from server (by editor)\n */\n getFeatures(options={}) {\n return $.Deferred(async d => {\n if (this._allfeatures) {\n return d.resolve([]);\n }\n this._allfeatures = !options.filter;\n try {\n const features = await promisify(this._editor.getFeatures(options));\n this.state.getfeatures = true;\n d.resolve(features);\n } catch (e) {\n console.warn(e);\n d.reject(e)\n }\n }).promise();\n },\n\n /**\n * Hook to get informed that are saved on server\n * \n * @param commitItems\n */\n saveChangesOnServer(commitItems){},\n };\n\n this.state = {\n id: options.id,\n started: false,\n getfeatures: false,\n /** maximum \"buffer history\" lenght for undo/redo */\n maxSteps: 10,\n /** current state of history (useful for undo /redo) */\n current: null,\n /** temporary change not save on history */\n changes: [],\n };\n\n /**\n * Array of states of a layer in editing\n * {\n * _states: [\n * {\n * id: unique key\n * state: [state] // example: history contsins features state\n * // array because a tool can apply changes to more than one features at time (split di una feature)\n * },\n * {\n * id: unique key\n * state: [state]\n * },\n * ]\n * ....\n *\n * _current: unique key // usefult to undo redo\n *\n *\n */\n this._states = [];\n\n /** reactive state of history */\n this._constrains = {\n commit: false,\n undo: false,\n redo: false,\n };\n\n // editor\n this._editor = options.editor;\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n this._history = {\n id: this.state.id,\n state: new Proxy({}, { get: (_, prop) => this._constrains[prop] }),\n add: this.__add.bind(this),\n getRelationStates: this.__getRelationStates.bind(this),\n insertState: this.__insertState.bind(this),\n removeState: this.deleteState.bind(this),\n removeStates: this.removeChangesFromHistory.bind(this),\n insertStates: this.__insertStates.bind(this),\n undo: this.__undo.bind(this),\n clear: this.clearHistory.bind(this),\n redo: this.__redo.bind(this),\n setItemsFeatureIds: this.__setItemsFeatureIds.bind(this),\n getState: this.__getState.bind(this),\n getFirstState: this.__getFirstState.bind(this),\n getLastState: this.getLastHistoryState.bind(this),\n getCurrentState: this.__getCurrentState.bind(this),\n getCurrentStateIndex: this.__getCurrentStateIndex.bind(this),\n canCommit: this.__canCommit.bind(this),\n canUndo: this.__canUndo.bind(this),\n canRedo: this.__canRedo.bind(this),\n commit: this.__commit.bind(this),\n };\n\n // register this session on session registry\n this.register();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * check if was done an update (update are array contains two items, old and new value)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n _checkSessionItems(historyId, items, action) {\n /**\n * action: \n * 0: undo;\n * 1: redo;\n **/\n const newItems = {\n own: [], //array of changes of layer of the current session\n dependencies: {} // dependencies\n };\n\n items\n .forEach((item) => {\n if (Array.isArray(item)) {\n item = item[action];\n }\n // check if belong to session\n if (historyId === item.layerId) {\n newItems.own.push(item)\n } else {\n newItems.dependencies[item.layerId] = newItems.dependencies[item.layerId] || {\n own: [],\n dependencies: {}\n };\n newItems.dependencies[item.layerId].own.push(item);\n }\n });\n\n return newItems;\n }\n\n /**\n * @FIXME add description\n */\n getId() {\n return this.state.id;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @returns {*|null}\n */\n getLastHistoryState() {\n return this._states.length ? this._states[this._states.length -1] : null;\n }\n\n /**\n * @FIXME add description\n */\n getLastStateId() {\n return this.getLastHistoryState().id;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param stateId\n */\n deleteState(stateId) {\n const i = this._states.findIndex(s => s.id === stateId);\n console.assert(i >= 0, `invalid stateId ${stateId}`);\n if (this.state.current === stateId) {\n this.state.current = this._states.length > 1 ? this._states[i-1].id : null;\n }\n this._states.splice(i, 1);\n }\n\n /**\n * @FIXME add description\n */\n register() {\n Session.Registry.register(this);\n }\n\n /**\n * @FIXME add description\n */\n unregister() {\n Session.Registry.unregister(this.getId());\n }\n\n /**\n * @returns {boolean}\n */\n isStarted() {\n return this.state.started;\n }\n\n /**\n * @FIXME add description\n */\n getEditor() {\n return this._editor;\n }\n\n /**\n * @param editor\n */\n setEditor(editor) {\n this._editor = editor;\n }\n\n /**\n * Save temporary changes to the layer in history instance and feature store\n * \n * @param options\n */\n save(options={}) {\n //fill history\n const d = $.Deferred();\n // add temporary modify to history\n if (this.state.changes.length) {\n const uniqueId = options.id || Date.now();\n this._history.add(uniqueId, this.state.changes)\n .then(() => {\n // clear to temporary changes\n this.state.changes = [];\n // resolve if unique id\n d.resolve(uniqueId);\n });\n } else {\n d.resolve(null);\n }\n return d.promise();\n }\n\n /**\n * @param feature\n */\n updateTemporaryChanges(feature) {\n this.state.changes.forEach(c => c.feature.setProperties(feature.getProperties()));\n }\n\n /**\n * Add temporary feature\n * \n * @param layerId \n * @param feature \n * @param removeNotEditableProperties \n */\n pushAdd(layerId, feature, removeNotEditableProperties=true) {\n /**\n * @TODO check if it need to deprecate it. All properties are need\n * Please take care of this to understand\n * In case of removeNotEditableProperties true, remove not editable field\n * from feature properties\n */\n const editor = layerId === this.getId() ? this._editor : Session.Registry.getSession(layerId).getEditor();\n\n // remove not editable proprierties from feature\n if (removeNotEditableProperties) {\n (editor.getLayer().getEditingNotEditableFields() || []).forEach(f => feature.unset([f]));\n }\n\n const newFeature = feature.clone();\n\n this.push({ layerId, feature: newFeature.add() });\n\n return newFeature;\n }\n\n /**\n * Delete temporary feature\n * \n * @param layerId \n * @param feature \n */\n pushDelete(layerId, feature) {\n this.push({ layerId, feature: feature.delete() });\n return feature;\n }\n\n /**\n * Add temporary feature changes\n * \n * @param layerId\n * @param newFeature\n * @param oldFeature\n */\n pushUpdate(layerId, newFeature, oldFeature) {\n // get index of temporary changes\n const is_new = newFeature.isNew();\n const i = is_new && this.state.changes.findIndex(c => layerId === c.layerId && c.feature.getId() === newFeature.getId());\n\n // in case of new feature\n if (is_new && i >=0) {\n const feature = newFeature.clone();\n feature.add();\n this.state.changes[i].feature = feature;\n return;\n }\n\n this.push(\n { layerId, feature: newFeature.update() },\n { layerId, feature: oldFeature.update() }\n )\n }\n\n /**\n * @param stateIds\n */\n removeChangesFromHistory(stateIds = []) {\n (stateIds || []).forEach(s => this.deleteState(s));\n }\n\n /**\n * @returns { Object } state ids\n */\n moveRelationStatesOwnSession() {\n const ids = {};\n const { relations } = this.getCommitItems();\n for (let id in relations) {\n const states = this._history.getRelationStates(id);\n Session.Registry.getSession(id)._history.insertStates(states);\n ids[id] = states.map(s => s.id);\n }\n return ids;\n }\n\n /**\n * Add temporary features that will be added with save method\n * \n * @param { { layerId: string, feature: * } } NewFeat \n * @param { { layerId: string, feature: * } } OldFeat\n */\n push(newFeat, oldFeat) {\n this.state.changes.push(oldFeat ? [oldFeat, newFeat] : newFeat); // check is set old (edit)\n }\n\n /**\n * Revert (cancel) all changes in history and clean session\n */\n revert() {\n const d = $.Deferred();\n this._editor\n .revert()\n .then(() => {\n this.clearHistory();\n d.resolve();\n });\n return d.promise();\n }\n\n /**\n * @param changes\n */\n rollback(changes) {\n // skip when..\n if (changes) {\n return this._editor.rollback(changes);\n }\n\n // Handle temporary changes of layer\n const d = $.Deferred();\n const id = this.getId();\n changes = {\n own:[],\n dependencies: {}\n };\n this.state.changes.forEach(c => {\n const change = Array.isArray(c) ? c[0] : c;\n if (change.layerId === id) {\n changes.own.push(change);\n } else {\n if (!changes.dependencies[change.layerId]) {\n changes.dependencies[change.layerId] = [];\n }\n // FILO\n changes.dependencies[change.layerId].unshift(change);\n }\n });\n\n this._editor\n .rollback(changes.own)\n .then(() => {\n for (const id in changes.dependencies) {\n Session.Registry.getSession(id).rollback(changes.dependencies[id]);\n }\n d.resolve(changes.dependencies);\n });\n\n this.state.changes = [];\n\n return d.promise();\n }\n\n /**\n * Rollback child changes of current session\n * \n * @param ids [array of child layer id]\n */\n rollbackDependecies(ids=[]) {\n ids.forEach(id => {\n const changes = [];\n this.state.changes = this.state.changes.filter(temporarychange => {\n if (temporarychange.layerId === id) {\n changes.push(temporarychange);\n return false\n }\n });\n changes.length && Session.Registry.getSession(id).rollback(changes);\n });\n }\n\n /**\n * undo method\n * \n * @param items \n */\n undo(items) {\n items = items || this._history.undo();\n this._editor.setChanges(items.own, true);\n this._history.canCommit();\n return items.dependencies;\n }\n\n /**\n * redo method\n * \n * @param items \n */\n redo(items) {\n items = items || this._history.redo();\n this._editor.setChanges(items.own, true);\n this._history.canCommit();\n return items.dependencies;\n }\n\n /**\n * Serialize commit\n * \n * @returns {{ add: *[], update: *[], relations: {}, delete: *[] }} JSON Object for a commit body send to server\n */\n getCommitItems() {\n const itemsToCommit = this._history.commit();\n const id = this.getId();\n let state;\n let layer;\n const commitObj = {\n add: [], // features to add\n update: [], // features to update\n delete: [], // features to delete\n relations: {} // relation features\n };\n // key is a layer id that has changes to apply\n for (const key in itemsToCommit) {\n let isRelation = false; //set relation to false\n const items = itemsToCommit[key];\n // case key (layer id) is not equal to id (current layer id on editing)\n if (key !== id) {\n isRelation = true; //set true because these changes belong to features relation items\n const sessionRelation = Session.Registry.getSession(key);\n //check lock ids of relation layer\n const lockids = sessionRelation ? sessionRelation.getEditor().getLockIds(): [];\n //create a relations object\n commitObj.relations[key] = {\n lockids,\n add: [],\n update: [],\n delete: [],\n relations: {} //@since v3.7.1\n };\n layer = commitObj.relations[key];\n } else {\n layer = commitObj;\n }\n\n items\n .forEach((item) => {\n //check state of feature item\n state = item.getState();\n const GeoJSONFormat = new ol.format.GeoJSON();\n switch (state) {\n //item needs to be deleted\n case 'delete':\n //check if is new. If is new mean is not present on server\n //so no need to say to server to delete it\n if (!item.isNew()) {\n layer.delete.push(item.getId());\n }\n break;\n default:\n //convert feature to json ex. {geometry:{tye: 'Point'}, properties:{}.....}\n const itemObj = GeoJSONFormat.writeFeatureObject(item);\n //get properties\n const childs_properties = item.getProperties();\n for (const p in itemObj.properties) {\n // in case the value of property is an object\n if (itemObj.properties[p] && typeof itemObj.properties[p] === 'object' && itemObj.properties[p].constructor === Object) {\n //need to get value from value attribute object\n itemObj.properties[p] = itemObj.properties[p].value;\n }\n // @TODO explain when this condition happen\n if (undefined === itemObj.properties[p] && childs_properties[p]) {\n itemObj.properties[p] = childs_properties[p]\n }\n }\n // in case of add it have to remove not editable properties\n layer[item.isNew() ? 'add' : item.getState()].push(itemObj);\n break;\n }\n });\n // check in case of no edit remove relation key\n if (\n isRelation\n && layer.add.length === 0 //no relation features to add\n && layer.update.length === 0 //no relation features to update\n && layer.delete.length === 0 //no relation features to delete\n ) {\n delete commitObj.relations[key];\n }\n }\n\n // Remove deep relations from current layer (commitObj) that are not relative to that layer\n const relations = Object.keys(commitObj.relations || {});\n relations\n .filter(id => undefined === this._editor.getLayer().getRelations().getArray().find(r => id === r.getChild())) // child relations\n .map(id => {\n commitObj.relations[\n Session.Registry\n .getSession(id)\n .getEditor()\n .getLayer()\n .getRelations()\n .getArray()\n .find(r => id === r.getChild() && commitObj.relations[r.getFather()]) // parent relation layer\n .getFather()].relations[id] = commitObj.relations[id];\n return id;\n })\n .forEach(id => delete commitObj.relations[id]);\n\n return commitObj;\n }\n\n /**\n * Set geometry: {type} of geojson to a 3D type if needed\n * \n * @param layerId\n * @param commitItems\n */\n set3DGeometryType({\n layerId=this.getId(),\n commitItems}={}\n ) {\n const { relations } = commitItems;\n const editingLayer = MapLayersStoresRegistry.getLayerById(layerId).getEditingLayer();\n // check id there is editing layer and if is a vector layer\n if (editingLayer && g3wsdk.core.layer.Layer.LayerTypes.VECTOR === editingLayer.getType()) {\n // get Geometry type layer\n const geometryType = editingLayer.getGeometryType();\n // if is a 3D layer i set on geoJON before send it to server\n if (g3wsdk.core.geoutils.Geometry.is3DGeometry(geometryType)){\n ['add', 'update']\n .forEach((action) => commitItems[action].forEach(feature => feature.geometry.type = geometryType))\n }\n }\n // the same control of relations layers\n Object\n .keys(relations)\n .forEach(layerId => this.set3DGeometryType({\n layerId,\n commitItems: relations[layerId]\n }));\n }\n\n /**\n * Commit changes on server (save)\n * \n * @param opts.ids\n * @param opts.items\n * @param opts.relations\n */\n commit({\n ids = null,\n items,\n relations = true,\n /** @since g3w-client-plugin-editing@v3.8.0 */\n __esPromise = false,\n } = {}) {\n\n const d = $.Deferred();\n\n let commit; // committed items\n\n // skip when ..\n if (ids) {\n commit = this._history.commit(ids);\n this.clearHistory(ids);\n return d.promise();\n }\n\n commit = items || this.getCommitItems(this._history.commit());\n\n if (!relations) {\n commit.relations = {};\n }\n\n this._editor\n .commit(commit)\n .then(response => {\n\n // skip when response is null or undefined and response.result is false\n if (!(response && response.result)) {\n d.reject(response);\n return;\n }\n \n const { relations = {} } = response.response; // check if new relations are saved on server\n\n // sync server data with local data\n for (const id in relations) {\n Session.Registry\n .getSession(id) // get session of relation by id\n .getEditor()\n .applyCommitResponse({ // apply commit response to current editing relation layer\n response: relations[id],\n result: true\n });\n }\n\n this.clearHistory();\n\n this.saveChangesOnServer(commit); // dispatch setter event.\n\n // ES6 promises only accept a single response\n if (__esPromise) {\n d.resolve({ commit, response });\n } else {\n d.resolve(commit, response);\n }\n \n\n })\n .fail(err => d.reject(err));\n\n return d.promise();\n }\n\n /**\n * Clear all things bind to session\n */\n clear() {\n this._allfeatures = false;\n this.state.started = false;\n this.state.getfeatures = false;\n this.clearHistory();\n }\n\n /**\n * @returns history\n */ \n getHistory() {\n return this._history;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param ids since g3w-client-plugin-editing@v3.8.0\n */\n clearHistory(ids) {\n if (ids) {\n this._states.forEach((state, idx) => {\n if (ids.indexOf(state.id) !== -1) {\n if (this.state.current && this.state.current === state.id()) {\n this._history.undo();\n }\n this._states.splice(idx, 1);\n }\n });\n } else {\n // clear all\n this._states = [];\n this.state.current = null;\n this._constrains.commit = false;\n this._constrains.redo = false;\n this._constrains.undo = false;\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @param uniqueId\n * @param items\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __add(uniqueId, items) {\n //state object is an array of feature/features changed in a transaction\n const d = $.Deferred();\n // before insert an item into the history\n // check if are at last state step (no redo was done)\n // If we are in the middle of undo, delete all changes\n // in the history from the current \"state\" so if it\n // can create a new history\n if (null === this.state.current) {\n this._states = [{ id: uniqueId, items }]\n } else {\n if (this._states.length > 0 && this.state.current < this.getLastStateId()) {\n this._states = this._states.filter(s => s.id <= this.state.current);\n }\n this._states.push({ id: uniqueId, items });\n }\n\n this.state.current = uniqueId;\n // set internal state\n this._history.canUndo();\n this._history.canCommit();\n this._history.canRedo();\n // return unique id key\n // it can be used in save relation\n d.resolve(uniqueId);\n return d.promise();\n }\n \n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @param layerId\n * @param clear\n * \n * @returns { Array }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getRelationStates(layerId, {clear=false}={}) {\n const relationStates = [];\n for (let i=0; i < this._states.length; i++) {\n const state = this._states[i];\n const items = state.items.filter((item) => (Array.isArray(item) ? item[0].layerId : item.layerId) === layerId);\n if (items.length > 0) {\n relationStates.push({ id: state.id, items });\n }\n }\n return relationStates;\n }\n\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @param state\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __insertState(state) {\n const stateId = state.id;\n let index = this._states.length;\n for (let i=0; i < this._states.length; i++) {\n const _state = this._states[i];\n if (_state.id > stateId) {\n index = i;\n break;\n } else if (_state.id === stateId) {\n index = -1;\n break;\n }\n }\n if (index > -1) {\n if (this.state.current < stateId) {\n this.state.current = stateId;\n }\n this._states.splice(index, 0, state)\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @param states\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n __insertStates(states=[]) {\n for (let i=0; i< states.length; i++) {\n this._history.insertState(states[i]);\n }\n this._history.canCommit();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * undo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __undo() {\n let items;\n if (this.state.current === this._history.getFirstState().id) {\n this.state.current = null;\n items = this._states[0].items;\n } else {\n this._states.find((state, idx) => {\n if (state.id === this.state.current) {\n items = this._states[idx].items;\n this.state.current = this._states[idx-1].id;\n return true;\n }\n })\n }\n items = this._checkSessionItems(this._history.id, items, 0);\n // set internal state\n this._history.canUndo();\n this._history.canCommit();\n this._history.canRedo();\n return items;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * redo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __redo() {\n let items;\n // if not set get first state\n if (!this.state.current) {\n items = this._states[0].items;\n // set current to first\n this.state.current = this._states[0].id;\n } else {\n this._states.find((state, idx) => {\n if (this.state.current === state.id) {\n this.state.current = this._states[idx+1].id;\n items = this._states[idx+1].items;\n return true;\n }\n })\n }\n items = this._checkSessionItems(this._history.id, items, 1);\n // set internal state\n this._history.canUndo();\n this._history.canCommit();\n this._history.canRedo();\n return items;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param { Array } unsetnewids\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __setItemsFeatureIds(unsetnewids=[]) {\n unsetnewids.forEach(unsetnewid => {\n this._states.forEach(state => {\n state.items.forEach(item => {\n const feature = item.feature.getId() === unsetnewid.clientid && item.feature;\n if (feature) {\n feature.setId(unsetnewid.id);\n }\n })\n });\n })\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @param id\n * \n * @returns {T}\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getState(id) {\n return this._states.find(s => s.id === id);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @returns {*|null}\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getFirstState() {\n return this._states.length ? this._states[0] : null;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n * \n * @returns {null}\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getCurrentState() {\n let currentState = null;\n if (this.state.current && this._states.length) {\n currentState = this._states.find((state) => {\n return this.state.current === state.id;\n });\n }\n return currentState;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @returns { number | null } index of current state\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __getCurrentStateIndex() {\n let currentStateIndex = null;\n if (this.state.current && this._states.length) {\n this._states.forEach((state, idx) => {\n if (this.state.current === state.id) {\n currentStateIndex = idx;\n return false\n }\n });\n }\n return currentStateIndex;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * @returns { boolean } true if we can commit\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canCommit() {\n const checkCommitItems = this._history.commit();\n let canCommit = false;\n for (let layerId in checkCommitItems) {\n const commitItem = checkCommitItems[layerId];\n canCommit = canCommit || commitItem.length > 0;\n }\n this._constrains.commit = canCommit;\n return this._constrains.commit;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * canUdo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canUndo() {\n const steps = (this._states.length - 1) - this._history.getCurrentStateIndex();\n this._constrains.undo = (null !== this.state.current) && (this.state.maxSteps > steps);\n return this._constrains.undo;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * canRedo method\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __canRedo() {\n this._constrains.redo = (\n (this.getLastHistoryState() && this.getLastStateId() != this.state.current))\n || (null === this.state.current && this._states.length > 0);\n return this._constrains.redo;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client/src/core/editing/history.js@v3.9.1\n *\n * get all changes to send to server (mandare al server)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\n __commit() {\n const commitItems = {};\n const statesToCommit = this._states.filter(s => s.id <= this.state.current);\n statesToCommit\n .forEach(state => {\n state.items.forEach((item) => {\n let add = true;\n if (Array.isArray(item)) {\n item = item[1];\n }\n if (commitItems[item.layerId]) {\n commitItems[item.layerId].forEach((commitItem, index) => {\n // check if already inserted feature\n if (commitItem.getUid() === item.feature.getUid()) {\n if (item.feature.isNew() && !commitItem.isDeleted() && item.feature.isUpdated()) {\n const _item = item.feature.clone();\n _item.add();\n commitItems[item.layerId][index] = _item;\n } else if (item.feature.isNew() && item.feature.isDeleted()) {\n commitItems[item.layerId].splice(index, 1);\n } else if (item.feature.isUpdated() || item.feature.isDeleted()) {\n commitItems[item.layerId][index] = item.feature;\n }\n add = false;\n return false;\n }\n });\n }\n if (add) {\n const feature = item.feature;\n const layerId = item.layerId;\n if (!(!feature.isNew() && feature.isAdded())) {\n if (!commitItems[layerId]) {\n commitItems[layerId] = [];\n }\n commitItems[layerId].push(feature);\n }\n }\n });\n });\n return commitItems;\n }\n\n}\n\n/** @type { Object } */\nconst sessions = {};\n\n/**\n * ORIGINAL SOURCE: g3w-client/src/store/sessions.js@v3.9.1\n *\n * Store user session (login / logout)\n *\n * @since g3w-client-plugin-editing@v3.8.0\n */\nSession.Registry = {\n _sessions: sessions,\n register(session) { sessions[session.getId()] = session; },\n unregister(id) { delete sessions[id]; },\n getSession(id) { return sessions[id]; },\n setSession(id, session) { sessions[id] = session; },\n getSessions() { return sessions; },\n clear() { Object.keys(sessions).forEach(Session.Registry.unregister); }\n};", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"An error occurs. It's no possible to edit layers\",\n some_layers: \"An error occurs: It's no possible to edit some layers\",\n editing_multiple_relations: 'Editing multiple relationships is not currently supported',\n },\n search: \"Search\",\n editing_changes: \"Editing Changes\",\n editing_data: \"Editing Layers\",\n editing_attributes: \"Editing attributes\",\n relations: \"Relations\",\n edit_relation: \"Edit relation\",\n back_to_relations: \"Back to Relations\",\n no_relations_found: \"No relations found\",\n relation_data: \"Relation data\",\n relation_already_added: \"Relation already added\",\n list_of_relations_feature: \"List of relations feature \",\n tooltip: {\n edit_layer: \"Edit Layer\",\n filter_by_relation: \"Filter layers by relation\",\n },\n toolbox: {\n title: 'Edit'\n },\n table: {\n edit: \"Edit feature\",\n copy: \"Create a copy\",\n delete: \"Delete feature\"\n },\n tools: {\n copy: \"Copy features\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Add part to multipart\",\n deletepart: \"Delete part from multipart\",\n merge: \"Dissolve features\",\n split: \"Split Feature\",\n add_feature: \"Add feature\",\n delete_feature: \"Delete feature\",\n move_feature: \"Move feature\",\n update_vertex: \"Update feature vertex\",\n update_feature: \"Update feature attribute\",\n update_multi_features: \"Update attributes of selected features\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Edit relations records from one or mode parent features\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Show measure\",\n snap: \"Snap layer\",\n snapall: \"Snap to all layers\"\n },\n steps: {\n help: {\n select_elements: \"Select features\",\n select_element: \"Select feature\",\n copy: \"Create new copy of selected features\",\n merge: \"Dissolve features\",\n split: \"Split Feature\",\n new: \"Create new feature\",\n edit_table: \"Edit table features\",\n draw_new_feature: \"Draw feature on map\",\n action_confirm: \"Confirm action\",\n double_click_delete: \"Select feature on map to delete\",\n edit_feature_vertex: \"Modify or add a vertex on selected feature\",\n move: \"Move selected feature\",\n select_feature_to_relation: \"Select feature that you bind relation\",\n show_edit_feature_form: \"Show feature form to edit attributes\",\n pick_feature: \"Select feature on map to modify\",\n insert_attributes_feature: \"Insert attributes of the feature\"\n }\n },\n workflow: {\n steps: {\n select: 'Click on feature to select',\n draw_part: \"Draw new part\",\n draw_geometry : \"Draw geometry\",\n merge: 'Select featurewhere dissolve',\n selectSHIFT: 'Select features drawing a rectangle pressing SHIFT',\n selectDrawBox: \"Select features drawing a rectangle by two point of opposite corners\",\n selectDrawBoxAtLeast2Feature: \"Select at least features drawing a rectangle by two point of opposite corners\",\n selectPoint: \"Click on feature to select\",\n selectPointSHIFT: 'Select features drawing a rectangle pressing SHIFT (multifeatures) or click on one feature',\n selectMultiPointSHIFT: 'Select features drawing a rectangle pressing SHIFT or click on feature',\n selectMultiPointSHIFTAtLeast2Feature: 'Select at least 2 features drawing a rectangle pressing SHIFT or click on feature',\n copyCTRL: 'Copy selected features using CTRL+C',\n selectStartVertex: 'Select starting vertex of selected features',\n selectToPaste: 'Select the point where paste the features selected',\n draw_split_line: \"Draw a line to split selected feature\"\n },\n title: {\n steps: 'Steps'\n },\n next: 'Next',\n },\n messages: {\n featureslockbyotheruser: \"Some geometries/records are not editable because in editing by other user\",\n splitted: \"Splitted\",\n nosplittedfeature: \"Feature not spitted\",\n press_esc: \"Press ESC to back\",\n online: \"Back ONLINE. Now you can save your changes on database\",\n offline: \"You are OFFLINE. All changes are saved locally\",\n delete_feature: \"Do you want delete selected feature ?\",\n delete_feature_relations: \"If feature has bindings relations, these relations become orphans. We suggest to handle these relations before detele this feature\",\n unlink_relation: \"Do you want unlink relation?\",\n commit_feature: \"Summary of changes\",\n toolbox_has_no_geometry: \"this layer has no geometry\",\n toolbox_has_relation: \"this layer is part of a relation\",\n saved: \"Data saved successfully\",\n saved_local:\"Data saved locally successfully\",\n loading_data: \"Loading data\",\n saving: \"Saving data. Please wait ...\",\n constraints: {\n enable_editing: \"Please Zoom In to enable editing tools \\nActivation scale at 1:\"\n },\n pdf: \"Document preview not available. Please click here \",\n commit: {\n header: \"The following list show all changes to commit.\",\n header_relation: \"Relation\",\n header_add: \"Added show the number of features added\",\n header_update_delete: \"Modified and Deleted show the list of features id\",\n add: \"Added\",\n delete: \"Deleted\",\n update: \"Updated\"\n },\n loading_table_data: \"Building Data Table. Please wait ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"It is necessary to fill in any mandatory fields on the features pasted before saving\",\n no_feature_selected: \"No feature selected\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
Select relations to link it to current editing feature.
`\n },\n draw_new_feature:\"Draw new feature\",\n draw_or_copy:\"or\",\n copy_feature_from_other_layer:\"Copy feature from other layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Back to edit father\",\n add_relation: \"Create and link new relation\",\n link_relation: \"Join a relation to this feature\",\n open_relation_tools: \"Show relation tools\",\n unlink_relation: \"Unlink relation\"\n }\n },\n buttons: {\n save: \"Insert/Edit\",\n save_and_back: \"Save and Back\",\n save_and_back_table: \"Save and Back\",\n cancel: \"Ignore Changes\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"Tapahtui virhe. Tasoja ei ole mahdollista muokata.\",\n some_layers: \"Tapahtui virhe. Jotkin tasot eiv\u00E4t ole muokattavissa.\"\n },\n search: \"Haku\",\n editing_changes: \"Editing Changes\",\n editing_data: \"Muokataan tasoja\",\n editing_attributes: \"Muokataan attribuutteja\",\n relations: \"Relaatiot\",\n edit_relation: \"Muokkaa relaatiota\",\n back_to_relations: \"Takaisin relaatioihin\",\n no_relations_found: \"Relaatioita ei l\u00F6ytynyt\",\n relation_data: \"Relaation tiedot\",\n relation_already_added: \"Relaatio on jo lis\u00E4tty\",\n list_of_relations_feature: \"Lista relaation ominaisuuksista\",\n tooltip: {\n edit_layer: \"Muokkaa tasoa\"\n },\n toolbox: {\n title: 'Muokkaa'\n },\n table: {\n edit: \"Muokkaa ominaisuutta\",\n copy: \"Luo kopio\",\n delete: \"Poista ominaisuus\"\n },\n tools: {\n copy: \"Kopio ominaisuuksia\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Lis\u00E4\u00E4 osa\",\n deletepart: \"Poista osa\",\n merge: \"Yhdist\u00E4 ominaisuudet\",\n split: \"Leikkaa ominaisuus\",\n add_feature: \"Lis\u00E4\u00E4 ominaisuus\",\n delete_feature: \"Poista ominaisuus\",\n move_feature: \"Siirr\u00E4 ominaisuutta\",\n update_vertex: \"P\u00E4ivit\u00E4 pisteen ominaisuutta\",\n update_feature: \"P\u00E4ivit\u00E4 ominaisuus\",\n update_multi_features: \"Muokkaa valittujen ominaisuuksien attribuutteja\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Edit relations records from one or mode parent features\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Show measure\",\n snap: \"Snap layer\",\n snapall: \"Snap to all layers\"\n },\n steps: {\n help: {\n select_elements: \"Valitse ominaisuudet\",\n select_element: \"Valitse ominaisuus\",\n copy: \"Luo kopio valituista ominaisuuksista\",\n merge: \"Yhdist\u00E4 ominaisuudet\",\n split: \"Leikkaa ominaisuus\",\n new: \"Luo uusi ominaisuus\",\n edit_table: \"Muuta taulun ominaisuuksia\",\n draw_new_feature: \"Piirr\u00E4 ominaisuus kartalle\",\n action_confirm: \"Hyv\u00E4ksy toiminto\",\n double_click_delete: \"Valitse poistettava ominaisuus kartalta\",\n edit_feature_vertex: \"Muuta pistett\u00E4 tai lis\u00E4\u00E4 piste valittuun ominaisuuteen\",\n move: \"Siirr\u00E4 valittu ominaisuus\",\n select_feature_to_relation: \"Valitse relaatio\",\n show_edit_feature_form: \"N\u00E4yt\u00E4 ominaisuuslomake muokataksesi attribuutteja\",\n pick_feature: \"Valitse muokattava ominaisuus kartalta\",\n insert_attributes_feature: \"Lis\u00E4\u00E4 ominaisuuden attribuutit\"\n }\n },\n workflow: {\n steps: {\n select: 'Valitse ominaisuus',\n draw_part: \"Piirr\u00E4 uusi osa\",\n merge: 'Valitse ominaisuus yhdist\u00E4\u00E4ksesi',\n draw_geometry : \"Piirr\u00E4 geometria\",\n selectSHIFT: 'Paina SHIFT, jos haluat valita kohteita suorakulmiovalinnalla.', //Tero 10.12.2020\n selectDrawBox: \"Piirr\u00E4 suorakulmio, jonka si\u00E4lt\u00E4 kohteet valitaan \", //Tero 10.12.2020\n selectDrawBoxAtLeast2Feature: \"Piirr\u00E4 suorakulmio, jonka si\u00E4lt\u00E4 kohteet v\u00E4hint\u00E4\u00E4n 2 valitaan \",\n selectPoint: \"Valitse ominaisuus\",\n selectPointSHIFT: 'Paina SHIFT, jos haluat valita ominaisuuksia suorakulmiovalinnalla, tai valitse yksitt\u00E4inen ominaisuus.',\n selectMultiPointSHIFT: 'Paina SHIFT, jos haluat valita ominaisuuksia suorakulmiovalinnalla, tai valitse yksitt\u00E4inen ominaisuus.',\n selectMultiPointSHIFTAtLeast2Feature: 'Paina SHIFT, jos haluat valita v\u00E4hint\u00E4\u00E4n 2 ominaisuuksia suorakulmiovalinnalla, tai valitse yksitt\u00E4inen ominaisuus.',\n copyCTRL: 'CTRL+C, voit kopioida valitut ominaisuudet.', //Tero 10.12.2020\n selectStartVertex: 'Osoita valittujen ominaisuuksien alkupiste.',\n selectToPaste: 'Valitse kohta, johon liit\u00E4t valitut ominaisuudet.',\n draw_split_line: \"Piirr\u00E4 viiva, jonka mukaan valittu ominaisuus jaetaan.\"\n },\n title: {\n steps: 'Vaiheet'\n },\n next: \"Seuraava\",\n },\n messages: {\n featureslockbyotheruser: \"Some features are locked by another user\",\n splitted: \"Jaettu\",\n nosplittedfeature: \"Ominaisuutta ei jaettu\",\n press_esc: \"Paina ESC palataksesi\",\n online: \"Yhteys muodostettu. Muutokset voidaan tallentaa tietokantaan.\",\n offline: \"Olet offline-tilassa. Muutokset tallennetaan paikallisesti\",\n delete_feature: \"Haluatko poistaa valitun ominaisuuden?\",\n delete_feature_relations: \"Mik\u00E4li ominaisuudella on sitovia relaatioita, n\u00E4ist\u00E4 relaatiosta tulee orpoja. Suosittelemme k\u00E4sittelem\u00E4\u00E4n n\u00E4m\u00E4 relaatiot ennen poistamista\",\n unlink_relation: \"Haluatko poistaa relaation?\",\n commit_feature: \"Yhteenveto muutoksista\",\n toolbox_has_relation: \"t\u00E4m\u00E4 kerros on osa relaatiota\",\n saved: \"Tiedot tallennettu onnistuneesti\",\n saved_local:\"Tiedot on tallennettu onnistuneesti paikallisesti.\",\n loading_data: \"Ladataan tietoja\",\n saving: \"Tallentaan tietoja. Odota...\",\n constraints: {\n enable_editing: \"L\u00E4henn\u00E4 ottaaksesi muokkausty\u00F6kalut k\u00E4ytt\u00F6\u00F6n \\nAktivointi mittakaava 1:\"\n },\n pdf: \"Dokumentin esikatselu ei ole saatavilla. Paina t\u00E4st\u00E4 \",\n commit: {\n header: \"Seuraava luettelo n\u00E4ytt\u00E4\u00E4 kaikki muutokset.\",\n header_relation: \"Relation\",\n header_add: \"Lis\u00E4tty n\u00E4yt\u00E4 lis\u00E4ttyjen ominaisuuksien lukum\u00E4\u00E4r\u00E4\",\n header_update_delete: \"Muokattu ja Poistettu N\u00E4yt\u00E4 list\u00E4 ominaisuuksien id:st\u00E4\",\n add: \"Lis\u00E4tty\",\n delete: \"Poistettu\",\n update: \"Muokattu\"\n },\n loading_table_data: \"Building Data Table. Please wait ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"It is necessary to fill in any mandatory fields on the features pasted before saving\",\n no_feature_selected: \"No feature selected\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
Valitse relaatiota linkitt\u00E4\u00E4ksesi ne muokattavaan ominaisuuteen.
`\n },\n draw_new_feature:\"Draw new feature\",\n draw_or_copy:\"or\",\n copy_feature_from_other_layer:\"Copy feature from other layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Back to edit father\",\n add_relation: \"Luo ja linkit\u00E4 uusi relaatio\",\n link_relation: \"Liit\u00E4 relaatio t\u00E4h\u00E4n ominaisuuteen\",\n open_relation_tools: \"N\u00E4yt\u00E4 relaatioty\u00F6kalut\",\n unlink_relation: \"Poista relaatio\"\n }\n },\n buttons: {\n save: \"Lis\u00E4\u00E4/muokkaa\",\n save_and_back: \"Tallenna ja palaa\",\n save_and_back_table: \"Tallenna ja palaa\",\n cancel: \"Peruuta\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"Ett fel uppstod. Niv\u00E5erna kan inte redigeras.\",\n some_layers: \"Ett fel uppstod. Vissa niv\u00E5er kan inte redigeras.\"\n },\n search: \"S\u00F6kning\",\n editing_changes: \"Editing Changes\",\n editing_data: \"Niv\u00E5erna redigeras\",\n editing_attributes: \"Attributen redigeras\",\n relations: \"Relationer\",\n edit_relation: \"Redigera relationen\",\n back_to_relations: \"Tillbaka till relationerna\",\n no_relations_found: \"Inga relationer hittades\",\n relation_data: \"Relationsuppgifter\",\n relation_already_added: \"Relationen har redan lagts till\",\n list_of_relations_feature: \"Lista p\u00E5 relationens egenskaper\",\n tooltip: {\n edit_layer: \"Redigera niv\u00E5n\"\n },\n toolbox: {\n title: 'Redigera'\n },\n table: {\n edit: \"Redigera egenskap\",\n copy: \"Skapa en kopia\",\n delete: \"Ta bort egenskap\"\n },\n tools: {\n copy: \"Kopiera egenskaper\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"L\u00E4gg till del\",\n deletepart: \"Ta bort del\",\n merge: \"Sl\u00E5 samman egenskaper\",\n split: \"Dela upp egenskap\",\n add_feature: \"L\u00E4gg till egenskap\",\n delete_feature: \"Ta bort egenskap\",\n move_feature: \"Flytta egenskap\",\n update_vertex: \"Uppdatera punktens egenskap\",\n update_feature: \"Uppdatera egenskap\",\n update_multi_features: \"\u00C4ndra attributen f\u00F6r de valda funktionerna\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Edit relations records from one or mode parent features\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Show measure\",\n snap: \"Snap layer\",\n snapall: \"Snap to all layers\"\n },\n steps: {\n help: {\n select_elements: \"V\u00E4lj egenskaper\",\n select_element: \"V\u00E4lj egenskapalitse ominaisuus\",\n copy: \"Skapa kopia av valda egenskaper\",\n merge: \"Sl\u00E5 samman egenskaper\",\n split: \"Dela upp egenskap\",\n new: \"Skapa ny egenskap\",\n edit_table: \"\u00C4ndra egenskaper i tabellen\",\n draw_new_feature: \"Piirr\u00E4 ominaisuus kartalle\",\n action_confirm: \"Godk\u00E4nn funktionen\",\n double_click_delete: \"V\u00E4lj funktionen som du vill ta bort p\u00E5 kartan\",\n edit_feature_vertex: \"\u00C4ndra punkten eller l\u00E4gg till punkten till den valda egenskapen\",\n move: \"Flytta den valda egenskapen\",\n select_feature_to_relation: \"V\u00E4lj relation\",\n show_edit_feature_form: \"Visa egenskapsformul\u00E4ret f\u00F6r redigering av attribut\",\n pick_feature: \"V\u00E4lj funktion p\u00E5 kartan f\u00F6r att \u00E4ndras\",\n insert_attributes_feature: \"L\u00E4gg till egenskapens attribut\"\n }\n },\n workflow: {\n steps: {\n select: 'V\u00E4lj egenskap',\n draw_part: \"Rita ny del\",\n draw_geometry : \"Rita geometri\",\n merge: 'V\u00E4lj egenskap att sl\u00E5 samman',\n selectSHIFT: 'Tryck SHIFT, om du vill v\u00E4lja objekt med hj\u00E4lp av rektangel.', //Tero 10.12.2020\n selectDrawBox: \"Rita upp den rektangel inom vilken objekten v\u00E4ljs \", //Tero 10.12.2020\n selectDrawBoxAtLeast2Feature: \"Rita rektangeln inom vilken minst tv\u00E5 objekt \u00E4r markerade \",\n selectPoint: \"V\u00E4lj egenskap\",\n selectPointSHIFT: 'Tryck SHIFT, om du vill v\u00E4lja objekt med hj\u00E4lp av rektangel, eller v\u00E4lj en enskild egenskap.',\n selectMultiPointSHIFT: 'Tryck SHIFT, om du vill v\u00E4lja objekt med hj\u00E4lp av rektangel, eller v\u00E4lj en enskild egenskap.',\n selectMultiPointSHIFTAtLeast2Feature: 'Tryck p\u00E5 SKIFT f\u00F6r att v\u00E4lja minst tv\u00E5 objekt med en rektangel eller v\u00E4lj en enda egenskap. ',\n copyCTRL: 'CTRL+C, du kan kopiera valda egenskaper.', //Tero 10.12.2020\n selectStartVertex: 'Visa startpunkten f\u00F6r valda egenskaper.',\n selectToPaste: 'V\u00E4lj punkt till vilken de valda egenskaperna ska fogas.',\n draw_split_line: \"Rita en linje enligt vilken den valda egenskapen ska uppdelas.\"\n },\n title: {\n steps: 'Skeden',\n },\n next: \"N\u00E4sta\",\n },\n messages: {\n featureslockbyotheruser: \"Jotkut geometriat/tietueet eiv\u00E4t ole muokattavissa, koska muut k\u00E4ytt\u00E4j\u00E4t muokkaavat niit\u00E4\",\n splitted: \"Uppdelad\",\n nosplittedfeature: \"Egenskapen har inte delats upp\",\n press_esc: \"Tryck ESC f\u00F6r att g\u00E5 tillbaka\",\n online: \"F\u00F6rbindelsen har uppr\u00E4ttats. \u00C4ndringar kan sparas i databasen.\",\n offline: \"Du \u00E4r i offline-l\u00E4ge. \u00C4ndringarna sparas lokalt\",\n delete_feature: \"Vill du ta bort den valda egenskapen?\",\n delete_feature_relations: \"Om egenskapen saknar bindande relationer blir dessa relationer f\u00F6r\u00E4ldral\u00F6sa. Vi rekommenderar att du behandlar dessa relationer innan du l\u00E4mnar programmet\",\n unlink_relation: \"Vill du ta bort relationen?\",\n commit_feature: \"Sammanfattning av \u00E4ndringar\",\n toolbox_has_relation: \"detta lager \u00E4r en del av en relation\",\n saved: \"Uppgifterna sparades\",\n saved_local:\"Uppgifterna sparades lokalt.\",\n loading_data: \"Uppgifterna laddas\",\n saving: \"Uppgifterna sparas. V\u00E4nta...\",\n constraints: {\n enable_editing: \"Zooma in f\u00F6r att b\u00F6rja anv\u00E4nda redigeringsverktyg \\nAktivering skala 1:\"\n },\n pdf: \"F\u00F6rhandsgranskning av dokument \u00E4r inte tillg\u00E4nglig. Tryck h\u00E4r\",\n commit: {\n header: \"F\u00F6ljande lista visar alla \u00E4ndringar.\",\n header_relation: \"Relation\",\n header_add: \"Tillagda visar antalet egenskaper som lagts till\",\n header_update_delete: \"Redigerad och Borttagen Visa en lista p\u00E5 egenskapernas id\",\n add: \"har lagts till\",\n delete: \"Borttagen\",\n update: \"Redigerad\"\n },\n loading_table_data: \"Building Data Table. Please wait ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"It is necessary to fill in any mandatory fields on the features pasted before saving\",\n no_feature_selected: \"No feature selected\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
V\u00E4lj relation f\u00F6r l\u00E4nkning till egenskap som ska redigeras.
`\n },\n draw_new_feature:\"Draw new feature\",\n draw_or_copy:\"or\",\n copy_feature_from_other_layer:\"Copy feature from other layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Back to edit father\",\n add_relation: \"Skapa och l\u00E4nka ny relation\",\n link_relation: \"Foga relationen till denna egenskap\",\n open_relation_tools: \"Visa relationsverktyg\",\n unlink_relation: \"Ta bort relation\"\n }\n },\n buttons: {\n save: \"Infoga/Redigera\",\n save_and_back: \"Spara och g\u00E5 tillbaka\",\n save_and_back_table: \"Spara och g\u00E5 tillbaka\",\n cancel: \"Ignorera \u00E4ndringar\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"Une erreur s'est produite lors du chargement des layers dans l'\u00E9dition.\",\n some_layers: \"Une erreur s'est produite lors du chargement de certaines layers dans l'\u00E9dition.\"\n },\n search: \"Recherche\",\n editing_changes: \"Editing Changes\",\n editing_data: \"Modifier les donnes\",\n editing_attributes: \"Modifier les attributs\",\n relations: \"Relations\",\n edit_relation: \"Modifier la relation\",\n back_to_relations: \"Retour aux relations\",\n no_relations_found: \"Il n'y a pas de relations\",\n relation_data: \"Donn\u00E9es sur les relations\",\n relation_already_added : \"Relation d\u00E9j\u00E0 pr\u00E9sente\",\n list_of_relations_feature: \"Lister les relations de la fonctionnalit\u00E9\",\n tooltip:{\n edit_layer: \"Modifier le layer\"\n },\n toolbox: {\n title: 'Modifier'\n },\n table: {\n edit: \"Modifier fonctionnalit\u00E9s\",\n copy: \"Cr\u00E9er une copie\",\n delete: \"Supprimer la fonctionnalit\u00E9\"\n },\n tools: {\n copy: \"Copier les fonctionnalit\u00E9s\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Ajouter une pi\u00E8ce \u00E0 la g\u00E9om\u00E9trie\",\n deletepart: \"Supprimer la partie de la g\u00E9om\u00E9trie\",\n merge: \"Dissoudre les fonctionnalit\u00E9s\",\n split: \"Couper la fonctionnalit\u00E9\",\n add_feature: \"Ajouter une fonctionnalit\u00E9\",\n delete_feature: \"Supprimer la fonctionnalit\u00E9\",\n move_feature: \"D\u00E9placez la fonctionnalit\u00E9\",\n update_vertex: \"Mettre \u00E0 jour les sommets des fonctionnalit\u00E9s\",\n update_feature: \"Modifier les attributs des fonctionnalit\u00E9s\",\n update_multi_features: \"Modifier les attributs des fonctionnalit\u00E9s s\u00E9lectionn\u00E9es\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Modifier les enregistrements de relation \u00E0 partir d'une ou plusieurs entit\u00E9s parents\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Show measure\",\n snap: \"Snap layer\",\n snapall: \"Snap to all layers\"\n },\n steps: {\n help: {\n select_elements: \"S\u00E9lectionner les fonctionnalit\u00E9s\",\n select_element: \"S\u00E9lectionner une fonctionnalit\u00E9\",\n copy: \"Cr\u00E9er une copie des fonctionnalit\u00E9s s\u00E9lectionn\u00E9es\",\n merge: \"Dissoudre les fonctionnalit\u00E9s\",\n split: \"Couper la fonctionnalit\u00E9\",\n new: \"Cr\u00E9er une nouvelle fonctionnalit\u00E9\",\n edit_table: \"Modifier les fonctionnalit\u00E9s de la table\",\n draw_new_feature: \"Dessiner une fonctionnalit\u00E9 sur la carte\",\n action_confirm: \"Confirmer l'action\",\n double_click_delete: \"S\u00E9lectionner la fonctionnalit\u00E9 sur la carte \u00E0 supprimer\",\n edit_feature_vertex: \"Modifier ou ajouter un sommet \u00E0 la fonctionnalit\u00E9 s\u00E9lectionn\u00E9e\",\n move: \"D\u00E9placer la fonctionnalit\u00E9 s\u00E9lectionn\u00E9e\",\n select_feature_to_relation: \"S\u00E9lectionner la fonctionnalit\u00E9 que vous souhaitez mettre en relation\",\n show_edit_feature_form: \"Afficher le formulaire de la fonctionnalit\u00E9 permettant de modifier les attributs\",\n pick_feature: \"S\u00E9lectionner l'\u00E9l\u00E9ment de la carte \u00E0 modifier\",\n insert_attributes_feature: \"Ins\u00E9rer les attributs de la fonctionnalit\u00E9\"\n }\n },\n workflow: {\n steps: {\n select: 'Cliquer sur la fonctionnalit\u00E9 \u00E0 s\u00E9lectionner',\n draw_part: \"Dessiner la nouvelle partie\",\n draw_geometry : \"Dessiner la g\u00E9om\u00E9trie\",\n merge: 'S\u00E9lectionner la fonction \u00E0 introduire en fondu',\n selectPoint: \"Cliquer sur la fonctionnalit\u00E9 pour la s\u00E9lectionner\",\n selectSHIFT: 'S\u00E9lectionner des fonctionnalit\u00E9s en maintenant la touche SHIFT enfonc\u00E9e',\n selectDrawBox: \"S\u00E9lectionner les fonctionnalit\u00E9s en dessinant un rectangle par la cr\u00E9ation des deux points de la diagonale\",\n selectDrawBoxAtLeast2Feature: \"S\u00E9lectionner au moins 2 fonctionnalit\u00E9s en dessinant un rectangle par la cr\u00E9ation des deux points de la diagonale\",\n selectPointSHIFT: 'S\u00E9lectionner des caract\u00E9ristiques en maintenant la touche SHIFT enfonc\u00E9e (multi-s\u00E9lection) ou en cliquant sur une seule caract\u00E9ristique',\n selectMultiPointSHIFT: 'S\u00E9lectionner des fonctionnalit\u00E9s en maintenant la touche SHIFT appuy\u00E9e ou en cliquant sur la fonctionnalit\u00E9 individuelle',\n selectMultiPointSHIFTAtLeast2Feature: 'S\u00E9lectionner au moins 2 fonctionnalit\u00E9s en maintenant la touche SHIFT appuy\u00E9e ou en cliquant sur la fonctionnalit\u00E9 individuelle',\n copyCTRL: 'Copier les fonctionnalit\u00E9s s\u00E9lectionn\u00E9es avec CTRL+C',\n selectStartVertex: 'S\u00E9lectionner le sommet de d\u00E9part des fonctionnalit\u00E9s choisies',\n selectToPaste: 'S\u00E9lectionner le point o\u00F9 les fonctionnalit\u00E9s s\u00E9lectionn\u00E9es seront coll\u00E9es',\n draw_split_line: \"Tracez une ligne pour couper la fonctionnalit\u00E9 s\u00E9lectionn\u00E9e\"\n },\n title: {\n steps: '\u00C9tapes'\n },\n next: 'Suivant',\n },\n messages: {\n featureslockbyotheruser: \"Certaines g\u00E9om\u00E9tries/enregistrements ne sont pas modifiables car ils ont \u00E9t\u00E9 modifi\u00E9s par un autre utilisateur\",\n splitted: \"Fonctionnalit\u00E9(s) divis\u00E9(es)\",\n nosplittedfeature: \"La (les) fonctionnalit\u00E9(s) n\u2019a (n'ont) pas \u00E9t\u00E9 divis\u00E9(es)\",\n press_esc: \"Appuyez sur ESC pour revenir\",\n online: \"Vous \u00EAtes \u00E0 nouveau EN LIGNE. Vous pouvez enregistrer les modifications de fa\u00E7on permanente\",\n offline: \"Vous \u00EAtes HORS LIGNE. Toutes les modifications seront enregistr\u00E9es temporairement en local\",\n delete_feature: \"Voulez-vous supprimer la fonctionnalit\u00E9 s\u00E9lectionn\u00E9e ?\",\n delete_feature_relations: \"La suppression d'une fonctionnalit\u00E9 avec des relations associ\u00E9es laissera ces relations orphelines. Il est recommand\u00E9 de g\u00E9rer ces relations avant de supprimer la fonctionnalit\u00E9\",\n unlink_relation: \"Voulez-vous d\u00E9tacher la relation ?\",\n commit_feature: \"Sommaire des changements\",\n toolbox_has_relation: \"cette couche fait partie d'une relation\",\n saved: \"Les donn\u00E9es ont \u00E9t\u00E9 enregistr\u00E9es correctement\",\n saved_local: \"Les donn\u00E9es ont \u00E9t\u00E9 correctement sauvegard\u00E9es localement\",\n loading_data: \"Chargement des donn\u00E9es\",\n saving: \"Sauvegarde des donn\u00E9es. Veuillez patienter ...\",\n constraints: {\n enable_editing: \"Augmenter le niveau de zoom pour permettre l'\u00E9dition \\nEchelle de d\u00E9clenchement 1 :\"\n },\n pdf: \"Aper\u00E7u du document non disponible. Cliquez ici \",\n commit: {\n header: \"La liste ci-dessous montre toutes les modifications qui seront enregistr\u00E9es.\",\n header_relation: \"Relation\",\n header_add: \"Ajouts indique le nombre de fonctionnalit\u00E9s ajout\u00E9es\",\n header_update_delete: \"Modifi\u00E9 e Supprim\u00E9 liste les ids\",\n add: \"Ajout\u00E9\",\n delete: \"Supprim\u00E9\",\n update: \"Modifi\u00E9\"\n },\n loading_table_data: \"Building Data Table. Please wait ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"Avant d'enregistrer, il est n\u00E9cessaire de remplir tous les champs obligatoires du features saisi\",\n no_feature_selected: \"Aucune feature s\u00E9lectionn\u00E9e\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
S\u00E9lectionner les relations pour les associer \u00E0 l'\u00E9l\u00E9ment en cours d'\u00E9dition.
`\n },\n draw_new_feature:\"Dessiner une nouvelle feature\",\n draw_or_copy:\"ou\",\n copy_feature_from_other_layer:\"Copier feature d'une autre layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Back to edit father\",\n add_relation: \"Cr\u00E9er et ajouter une nouvelle relation\",\n link_relation: \"Associer une relation existante \u00E0 cette fonctionnalit\u00E9\",\n open_relation_tools: \"Outils de relation ouverte\",\n unlink_relation: \"Annuler la relation\"\n }\n },\n buttons: {\n save: \"Ins\u00E9rer/Modifier\",\n save_and_back: \"Sauvegarder et retourner au parent\",\n save_and_back_table: \"Sauvegarder et et revenir en arri\u00E8re\",\n cancel: \"Ignorer modifications\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"Es tritt ein Fehler auf. Es ist nicht m\u00F6glich, Layer zu bearbeiten\",\n some_layers: \"Es tritt ein Fehler auf: Es ist nicht m\u00F6glich, einige Layer zu bearbeiten\"\n },\n search: \"Suche\",\n editing_changes: \"\u00C4nderungen bearbeiten\",\n editing_data: \"Layer bearbeiten\",\n editing_attributes: \"Attribute bearbeiten\",\n relations: \"Relationen\",\n edit_relation: \"Relation bearbeiten\",\n back_to_relations: \"Zur\u00FCck zu Relationen\",\n no_relations_found: \"Keine Relationen gefunden\",\n relation_data: \"Relationsdaten\",\n relation_already_added: \"Relation bereits hinzugef\u00FCgt\",\n list_of_relations_feature: \"Liste der Relations-Features \",\n tooltip: {\n edit_layer: \"Layer bearbeiten\"\n },\n toolbox: {\n title: 'bearbeiten'\n },\n table: {\n edit: \"Feature bearbeiten\",\n copy: \"Kopie erstellen\",\n delete: \"Feature l\u00F6schen\"\n },\n tools: {\n copy: \"Features kopieren\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Teil zu Multipart hinzuf\u00FCgen\",\n deletepart: \"Teil aus Multipart l\u00F6schen\",\n merge: \"Feature aufl\u00F6sen\",\n split: \"Feature trennen\",\n add_feature: \"Feature hinzuf\u00FCgen\",\n delete_feature: \"Feature l\u00F6schen\",\n move_feature: \"Feature verschieben\",\n update_vertex: \"Feature vertex aktualisieren\",\n update_feature: \"Feature-Attribut aktualisieren\",\n update_multi_features: \"Attribute ausgew\u00E4hlter Features aktualisieren\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Bearbeiten Sie Beziehungsdatens\u00E4tze von einem oder mehreren \u00FCbergeordneten features\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Messung anzeigen\",\n snap: \"Snap Layer\",\n snapall: \"Snap auf alle Layer\"\n },\n steps: {\n help: {\n select_elements: \"Features ausw\u00E4hlen\",\n select_element: \"Feature ausw\u00E4hlen\",\n copy: \"Neue Kopie der ausgew\u00E4hlten Features erstellen\",\n merge: \"Features aufl\u00F6sen\",\n split: \"Feature trennen\",\n new: \"Neues Feature erstellen\",\n edit_table: \"Features der Tabelle bearbeiten\",\n draw_new_feature: \"Feature auf Karte zeichnen\",\n action_confirm: \"Aktion best\u00E4tigen\",\n double_click_delete: \"Zu l\u00F6schendes Feature auf der Karte ausw\u00E4hlen\",\n edit_feature_vertex: \"\u00C4ndern oder Hinzuf\u00FCgen eines Eckpunktes auf dem ausgew\u00E4hlten Feature\",\n move: \"Ausgew\u00E4hltes Feature verschieben\",\n select_feature_to_relation: \"Feature ausw\u00E4hlen, welches die Relation verkn\u00FCpft\",\n show_edit_feature_form: \"Feature-Formular zum Bearbeiten von Attributen anzeigen\",\n pick_feature: \"Zu \u00E4nderndes Feature auf der Karte ausw\u00E4hlen\",\n insert_attributes_feature: \"Attribute des Features einf\u00FCgen\"\n }\n },\n workflow: {\n steps: {\n select: 'Zum Ausw\u00E4hlen auf ein Feature klicken',\n draw_part: \"Neues Teil zeichnen\",\n draw_geometry : \"Geometrie zeichnen\",\n merge: 'Feature zum Aufl\u00F6sen ausw\u00E4hlen',\n selectSHIFT: 'Features ausw\u00E4hlen indem ein Rechteck mit SHIFT gezeichnet wird',\n selectDrawBox: \"Features ausw\u00E4hlen, indem man ein Rechteck mit zwei gegen\u00FCberliegenden Eckpunkten zeichnet\",\n selectDrawBoxAtLeast2Feature: \"Mindestens Features ausw\u00E4hlen, indem man ein Rechteck mit zwei gegen\u00FCberliegenden Eckpunkten zeichnet\",\n selectPoint: \"Zum Ausw\u00E4hlen auf ein Feature klicken\",\n selectPointSHIFT: 'Features ausw\u00E4hlen, indem ein Rechteck mit SHIFT gezeichnet wird (Multifeatures) oder auf ein Feature klicken',\n selectMultiPointSHIFT: 'Features ausw\u00E4hlen, indem man ein Rechteck zeichnet und SHIFT dr\u00FCckt oder auf ein Feature klickt',\n selectMultiPointSHIFTAtLeast2Feature: 'Mindestens 2 Features ausw\u00E4hlen und mit SHIFT ein Rechteck zeichnen oder auf ein Feature klicken',\n copyCTRL: 'Kopieren ausgew\u00E4hlter Features mit CTRL+C',\n selectStartVertex: 'Start-Eckpunkt der ausgew\u00E4hlten Features ausw\u00E4hlen',\n selectToPaste: 'Den Punkt ausw\u00E4hlen, an dem die ausgew\u00E4hlten Features eingef\u00FCgt werden sollen',\n draw_split_line: \"Eine Linie zeichnen, um das ausgew\u00E4hlte Feature zu teilen\"\n },\n title: {\n steps: 'Schritte',\n },\n next: 'Weiter',\n },\n messages: {\n featureslockbyotheruser: \"Einige Geometrien/Datens\u00E4tze k\u00F6nnen nicht bearbeitet werden, da sie von anderen Benutzern bearbeitet werden\",\n splitted: \"Getrennt\",\n nosplittedfeature: \"Feature nicht getrennt\",\n press_esc: \"Mit ESC zur\u00FCck\",\n online: \"Wieder ONLINE. Jetzt kann man die \u00C4nderungen in der Datenbank speichern\",\n offline: \"OFFLINE. Alle \u00C4nderungen werden lokal gespeichert\",\n delete_feature: \"Soll das ausgew\u00E4hlte Feature gel\u00F6scht werden?\",\n delete_feature_relations: \"Wenn ein Feature Verkn\u00FCpfungen beinhaltet, werden diese Relationen verwaist. Wir schlagen vor, diese Relationen zu behandeln, bevor das Feature gel\u00F6scht wird\",\n unlink_relation: \"Soll die Verkn\u00FCpfung aufgehoben werden?\",\n commit_feature: \"Zusammenfassung der \u00C4nderungen\",\n toolbox_has_relation: \"Diese Ebene ist Teil einer Beziehung\",\n saved: \"Daten erfolgreich gespeichert\",\n saved_local:\"Daten erfolgreich lokal gespeichert\",\n loading_data: \"Daten laden\",\n saving: \"Daten werden gespeichert. Bitte warten ...\",\n constraints: {\n enable_editing: \"Bitte zoomen Sie hinein, um die Editier-Tools zu aktivieren \\nAktivierungsskala bei 1:\"\n },\n pdf: \"Dokumentenvorschau nicht verf\u00FCgbar. Bitte hier klicken \",\n commit: {\n header: \"Die folgende Liste zeigt alle zu \u00FCbernehmenden \u00C4nderungen.\",\n header_relation: \"Relation\",\n header_add: \"Hinzufgef\u00FCgt Die Anzahl der hinzugef\u00FCgten Features anzeigen\",\n header_update_delete: \"Bearbeitet und Gel\u00F6scht Die Liste der Feature-ID anzeigen\",\n add: \"Hinzugef\u00FCgt\",\n delete: \"Gel\u00F6scht\",\n update: \"Bearbeitet\"\n },\n loading_table_data: \"Datentabelle wird erstellt. Bitte warten ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"Vor dem Speichern m\u00FCssen alle Pflichtfelder des eingegebenen features ausgef\u00FCllt werden\",\n no_feature_selected: \"Keine feature ausgew\u00E4hlt\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
W\u00E4hlen Sie Relationen aus, um sie mit dem aktuellen Feature zu verkn\u00FCpfen.
`\n },\n draw_new_feature:\"Zeichnen Sie eine neue feature\",\n draw_or_copy:\"oder\",\n copy_feature_from_other_layer:\"Kopieren Sie feature aus einer anderen layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Zur\u00FCck zur Bearbeitung des Vaters\",\n add_relation: \"Neue Relation erstellen und verkn\u00FCpfen\",\n link_relation: \"Eine Relation zu diesem Feature herstellen\",\n open_relation_tools: \"Relationstools anzeigen\",\n unlink_relation: \"Relation trennen\"\n }\n },\n buttons: {\n save: \"Einf\u00FCgung/Bearbeiten\",\n save_and_back: \"Speichern und zur\u00FCck\",\n save_and_back_table: \"Speichern und zur\u00FCck\",\n cancel: \"\u00C4nderungen ignorieren\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select one feature\"\n }\n }\n }\n}", "export default {\n close_editing_panel: {\n message: \"To close editing form need to exit from editing layer\"\n },\n errors: {\n no_layers: \"Avem o eroare. Straturile nu sunt editabile\",\n some_layers: \"Avem o eroare: Anumite straturi nu se pot edita\"\n },\n search: \"Caut\u0103\",\n editing_changes: \"Modificare schimb\u0103ri\",\n editing_data: \"Modificare straturi\",\n editing_attributes: \"Modificare atribute\",\n relations: \"Rela\u021Bii\",\n edit_relation: \"Modific\u0103 rela\u021Bia\",\n back_to_relations: \"\u00CEnapoi la Rela\u021Bii\",\n no_relations_found: \"Nu am g\u0103sit rela\u021Bii\",\n relation_data: \"Date rela\u021Bii\",\n relation_already_added: \"Rela\u021Bie ad\u0103ugat\u0103 deja\",\n list_of_relations_feature: \"Lista rela\u021Bii entitatea \",\n tooltip: {\n edit_layer: \"Modific\u0103 strat\"\n },\n toolbox: {\n title: 'Modific\u0103'\n },\n table: {\n edit: \"Modific\u0103 entitate\",\n copy: \"Creeaz\u0103 o copie\",\n delete: \"Elimin\u0103 entitatea\"\n },\n tools: {\n copy: \"Copiaz\u0103 entit\u0103\u021Bile\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Adaug\u0103 o parte la multiparte\",\n deletepart: \"Elimin\u0103 partea din multiparte\",\n merge: \"Dizolvare entit\u0103\u021Bi\",\n split: \"Divizare Entitate\",\n add_feature: \"Adaug\u0103 entitate\",\n delete_feature: \"Eliminare entitate\",\n move_feature: \"Mut\u0103 entitate\",\n update_vertex: \"Actualizeaz\u0103 vertec\u0219ii entit\u0103\u021Bii\",\n update_feature: \"Actualizeaz\u0103 atributul entit\u0103\u021Bii\",\n update_multi_features: \"Actualizeaz\u0103 atributele entit\u0103\u021Bilor selectate\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Edita\u021Bi \u00EEnregistr\u0103rile rela\u021Biilor de la una sau mai multe caracteristici p\u0103rinte\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Arat\u0103 m\u0103sur\u0103torile\",\n snap: \"Acro\u0219are strat\",\n snapall: \"Acro\u0219are pe toate straturile\"\n },\n steps: {\n help: {\n select_elements: \"Selecteaz\u0103 entit\u0103\u021Bi\",\n select_element: \"Selecteaz\u0103 entitate\",\n copy: \"Creeaz\u0103 o nou\u0103 copie a entit\u0103\u021Bilor selectate\",\n merge: \"Dizolv\u0103 entit\u0103\u021Bile\",\n split: \"Divizare Entitate\",\n new: \"Creeaz\u0103 o entitate\",\n edit_table: \"Modific\u0103 entit\u0103\u021Bile tabelare\",\n draw_new_feature: \"Deseneaz\u0103 entitate pe hart\u0103\",\n action_confirm: \"Confirm\u0103 ac\u021Biunea\",\n double_click_delete: \"Selecteaz\u0103 entitatea de eliminat din hart\u0103\",\n edit_feature_vertex: \"Modific\u0103 sau adaug\u0103 un vertex la entitatea selectat\u0103\",\n move: \"Mut\u0103 entitatea selectat\u0103\",\n select_feature_to_relation: \"Selecteaz\u0103 entitate pentru rela\u021Bionare\",\n show_edit_feature_form: \"Arat\u0103 formularul entit\u0103\u021Bii pentru modific\u0103ri\",\n pick_feature: \"Selecteaz\u0103 entit\u0103\u021Bile de modificat din hart\u0103\",\n insert_attributes_feature: \"Insereaz\u0103 atributele entit\u0103\u021Bii\"\n }\n },\n workflow: {\n steps: {\n select: 'Click pe entitate pentru a o selecta',\n draw_part: \"Deseneaz\u0103 o parte nou\u0103\",\n draw_geometry : \"Desena\u021Bi geometria\",\n merge: 'Selecteaz\u0103 partea de dizolvat',\n selectSHIFT: 'Selecteaz\u0103 entit\u0103\u021Bi prin desen triunghi ap\u0103s\u00E2nd SHIFT',\n selectDrawBox: \"Selecteaz\u0103 entit\u0103\u021Bi desen\u00E2nd un dreptunghi prin dou\u0103 puncte opuse\",\n selectDrawBoxAtLeast2Feature: \"Selecteaz\u0103 cel pu\u021Bin 2 entit\u0103\u021Bi prin desenul unui dreptunghi\",\n selectPoint: \"Click pe entitate pentru selectare\",\n selectPointSHIFT: 'Selecteaz\u0103 entit\u0103\u021Bi prin desen dreptunghi ap\u0103s\u00E2nd SHIFT (multientit\u0103\u021Bi) sau prin click pe entitate',\n selectMultiPointSHIFT: 'Selecteaz\u0103 entit\u0103\u021Bi prin desen dreptunghi ap\u0103s\u00E2nd SHIFT sau prin click pe entitate',\n selectMultiPointSHIFTAtLeast2Feature: 'Selecteaz\u0103 cel pu\u021Bin 2 entit\u0103\u021Bi prin desen dreptunghi ap\u0103s\u00E2nd SHIFT sau prin click pe entitate',\n copyCTRL: 'Copiaz\u0103 entit\u0103\u021Bile selectate folosint CTRL+C',\n selectStartVertex: 'Selecteaz\u0103 vertexul de start a entit\u0103\u021Bilor selectate',\n selectToPaste: 'Selecteaz\u0103 punctul unde s\u0103 lipim entit\u0103\u021Bile selectate',\n draw_split_line: \"Deseneaz\u0103 o linie pentru a diviza entitatea selectat\u0103\"\n },\n title: {\n steps: 'Pa\u0219i',\n },\n next: 'Urm\u0103torul',\n },\n messages: {\n featureslockbyotheruser: \"Unele geometrii/\u00EEnregistr\u0103ri nu sunt editabile deoarece sunt editate de c\u0103tre alt utilizator\",\n splitted: \"Divizat\",\n nosplittedfeature: \"Entitate nedivizat\u0103\",\n press_esc: \"ESC pentru \u00EEnapoi\",\n online: \"\u00CEnapoi ONLINE. Acum se pot salva schimb\u0103rile\",\n offline: \"OFFLINE. Schimb\u0103rile sunt salvate local\",\n delete_feature: \"\u0218terg entitatea selectat\u0103?\",\n delete_feature_relations: \"Dac\u0103 entitatea are rela\u021Bii care trimit la ea, acele rela\u021Bii devin orfane. Suger\u0103m s\u0103 v\u0103 ocupa\u021Bi de acele elemente \u00EEnainte s\u0103 elimina\u021Bi aceast\u0103 entitate.\",\n unlink_relation: \"Dore\u0219ti s\u0103 elimina\u021Bi leg\u0103tura cu rela\u021Bia?\",\n commit_feature: \"Rezumatul modific\u0103rilor\",\n toolbox_has_relation: \"acest strat face parte dintr-o rela\u021Bie\",\n saved: \"Datele sunt salvate\",\n saved_local:\"Datele s-au salvat local\",\n loading_data: \"Datele se \u00EEncarc\u0103.\",\n saving: \"Salv\u0103m datele. A\u0219tepta\u021Bi ...\",\n constraints: {\n enable_editing: \"Pentru a activa Modificare face\u021Bi zoom la \\nScara de activare 1:\"\n },\n pdf: \"Previzualizarea documentului nu este disponibil\u0103. Click aici \",\n commit: {\n header: \"Lista cu toate modific\u0103rile.\",\n header_relation: \"Relation\",\n header_add: \"Ad\u0103ugate arat\u0103 nr. de entit\u0103\u021Bi ad\u0103ugate\",\n header_update_delete: \"Modificate \u0219i \u0218terse arat\u0103 lista de id-uri de entit\u0103\u021Bi\",\n add: \"Ad\u0103ugate\",\n delete: \"Eliminate\",\n update: \"Modificate\"\n },\n loading_table_data: \"\u00CEnc\u0103rc\u0103m tabelul de date ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"\u00CEnainte de a salva, este necesar s\u0103 completa\u021Bi toate c\u00E2mpurile obligatorii ale entit\u0103\u021Bi introduse\",\n no_feature_selected: \"Nicio feature selectat\u0103\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
Selecteaz\u0103 rela\u021Biile pentru a face leg\u0103tura cu entitatea curent\u0103.
`\n },\n draw_new_feature:\"Desena\u021Bi o nou\u0103 feature\",\n draw_or_copy: \"sau\",\n copy_feature_from_other_layer: \"Copia\u021Bi feature dintr-un alt layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"\u00CEnapoi la modific\u0103rile entit\u0103\u021Bii p\u0103rinte\",\n add_relation: \"Creeaz\u0103 \u0219i f\u0103 leg\u0103tura unei rela\u021Bii noi\",\n link_relation: \"Leag\u0103 o rela\u021Bie de entitate\",\n open_relation_tools: \"Arat\u0103 instrumentele pentru rela\u021Bii\",\n unlink_relation: \"Elimin\u0103 leg\u0103tura la rela\u021Bie\"\n }\n },\n buttons: {\n save: \"Insera\u021Bi/Edita\u021Bi\",\n save_and_back: \"Salveaz\u0103 \u0219i d\u0103 \u00EEnapoi\",\n save_and_back_table: \"Salveaz\u0103 \u0219i d\u0103 \u00EEnapoi\",\n cancel: \"Ignora\u021Bi modific\u0103rile\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "export default {\n errors: {\n no_layers: \"An error occurs. It's no possible to edit layers\",\n some_layers: \"An error occurs: It's no possible to edit some layers\"\n },\n search: \"Search\",\n editing_changes: \"Editing Changes\",\n editing_data: \"Editing Layers\",\n editing_attributes: \"Editing attributes\",\n relations: \"Relations\",\n edit_relation: \"Edit relation\",\n back_to_relations: \"Back to Relations\",\n no_relations_found: \"No relations found\",\n relation_data: \"Relation data\",\n relation_already_added: \"Relation already added\",\n list_of_relations_feature: \"List of relations feature \",\n tooltip: {\n edit_layer: \"Edit Layer\"\n },\n toolbox: {\n title: 'Edit'\n },\n table: {\n edit: \"Edit feature\",\n copy: \"Create a copy\",\n delete: \"Delete feature\"\n },\n tools: {\n copy: \"Copy features\",\n pastefeaturesfromotherlayers: \"Paste features from other layer\",\n addpart: \"Add part to multipart\",\n deletepart: \"Delete part from multipart\",\n merge: \"Dissolve features\",\n split: \"Split Feature\",\n add_feature: \"Add feature\",\n delete_feature: \"Delete feature\",\n move_feature: \"Move feature\",\n update_vertex: \"Update feature vertex\",\n update_feature: \"Update feature attribute\",\n update_multi_features: \"Update attributes of selected features\",\n update_multi_features_relations: \"Update attributes of all selected relations\",\n update_multi_features_relations_from_parents : \"Edit relations records from one or mode parent features\",\n copyfeaturefromexternallayer: \"Create Feature from added layer\"\n },\n toolsoftool: {\n measure: \"Show measure\",\n snap: \"Snap layer\",\n snapall: \"Snap to all layers\"\n },\n steps: {\n help: {\n select_elements: \"Select features\",\n select_element: \"Select feature\",\n copy: \"Create new copy of selected features\",\n merge: \"Dissolve features\",\n split: \"Split Feature\",\n new: \"Create new feature\",\n edit_table: \"Edit table features\",\n draw_new_feature: \"Draw feature on map\",\n action_confirm: \"Confirm action\",\n double_click_delete: \"Select feature on map to delete\",\n edit_feature_vertex: \"Modify or add a vertex on selected feature\",\n move: \"Move selected feature\",\n select_feature_to_relation: \"Select feature that you bind relation\",\n show_edit_feature_form: \"Show feature form to edit attributes\",\n pick_feature: \"Select feature on map to modify\",\n insert_attributes_feature: \"Insert attributes of the feature\"\n }\n },\n workflow: {\n steps: {\n select: 'Click on feature to select',\n draw_part: \"Draw new part\",\n merge: 'Select featurewhere dissolve',\n selectSHIFT: 'Select features drawing a rectangle pressing SHIFT',\n selectDrawBox: \"Select features drawing a rectangle by two point of opposite corners\",\n selectDrawBoxAtLeast2Feature: \"Select at least features drawing a rectangle by two point of opposite corners\",\n selectPoint: \"Click on feature to select\",\n selectPointSHIFT: 'Select features drawing a rectangle pressing SHIFT (multifeatures) or click on one feature',\n selectMultiPointSHIFT: 'Select features drawing a rectangle pressing SHIFT or click on feature',\n selectMultiPointSHIFTAtLeast2Feature: 'Select at least 2 features drawing a rectangle pressing SHIFT or click on feature',\n copyCTRL: 'Copy selected features using CTRL+C',\n selectStartVertex: 'Select starting vertex of selected features',\n selectToPaste: 'Select the point where paste the features selected',\n draw_split_line: \"Draw a line to split selected feature\"\n },\n title: {\n steps: 'Steps'\n },\n next: 'Next',\n },\n messages: {\n featureslockbyotheruser: \"Some geometries/records are not editable because in editing by other user\",\n splitted: \"Splitted\",\n nosplittedfeature: \"Feature not spitted\",\n press_esc: \"Press ESC to back\",\n online: \"Back ONLINE. Now you can save your changes on database\",\n offline: \"You are OFFLINE. All changes are saved locally\",\n delete_feature: \"Do you want delete selected feature ?\",\n delete_feature_relations: \"If feature has bindings relations, these relations become orphans. We suggest to handle these relations before detele this feature\",\n unlink_relation: \"Do you want unlink relation?\",\n commit_feature: \"Do you want to save the changes\",\n toolbox_has_relation: \"this layer is part of a relation\",\n saved: \"Data saved successfully\",\n saved_local:\"Data saved locally successfully\",\n loading_data: \"Loading data\",\n saving: \"Saving data. Please wait ...\",\n constraints: {\n enable_editing: \"Please Zoom In to enable editing tools \\nActivation scale at 1:\"\n },\n pdf: \"Document preview not available. Please click here \",\n commit: {\n header: \"The following list show all changes to commit.\",\n header_add: \"Added show the number of features added\",\n header_update_delete: \"Modified and Deleted show the list of features id\",\n add: \"Added(n. features)\",\n delete: \"Deleted(id)\",\n update: \"Modified(id)\"\n },\n loading_table_data: \"Building Data Table. Please wait ...\",\n copy_and_paste_from_other_layer_mandatory_fields: \"It is necessary to fill in any mandatory fields on the features pasted before saving\",\n no_feature_selected: \"No feature selected\",\n select_min_2_features: 'Select at least 2 features'\n },\n relation: {\n table: {\n info: `
Select relations to link it to current editing feature.
`\n },\n draw_new_feature:\"Draw new feature\",\n draw_or_copy:\"or\",\n copy_feature_from_other_layer:\"Copy feature from other layer\"\n },\n form: {\n relations: {\n tooltips: {\n back_to_father:\"Back to edit father\",\n add_relation: \"Create and link new relation\",\n link_relation: \"Join a relation to this feature\",\n open_relation_tools: \"Show relation tools\",\n unlink_relation: \"Unlink relation\"\n }\n },\n buttons: {\n save: \"Insert/Edit\",\n save_and_back: \"Save and Back\",\n save_and_back_table: \"Save and Back\",\n cancel: \"Ignore Changes\"\n }\n },\n modal: {\n tools: {\n copyfeaturefromotherlayer: {\n title: \"Select layer\",\n edit_attributes: \"Edit attributes of pasted features in multiple mode\"\n },\n copyfeaturefromprojectlayer: {\n title: \"Select a feature\"\n }\n }\n }\n}", "import it from './it';\nimport en from './en';\nimport fi from './fi';\nimport se from './se';\nimport fr from './fr';\nimport de from './de';\nimport ro from './ro';\nimport pl from './pl';\n\nexport default {\n it,\n en,\n fi,\n se,\n fr,\n de,\n ro,\n pl,\n}", "import './g3wsdk';\nimport i18n from './i18n';\nimport { Workflow } from './g3wsdk/workflow/workflow';\nimport { Step } from './g3wsdk/workflow/step';\nimport { promisify, $promisify } from './utils/promisify';\nimport { createFeature } from './utils/createFeature';\nimport { getEditingLayerById } from './utils/getEditingLayerById';\nimport { setAndUnsetSelectedFeaturesStyle } from './utils/setAndUnsetSelectedFeaturesStyle';\nimport { addPartToMultigeometries } from './utils/addPartToMultigeometries';\nimport {\n OpenFormStep,\n AddFeatureStep,\n} from './workflows';\nimport { ToolBox } from './toolboxes/toolbox';\n\nconst { G3W_FID } = g3wsdk.constant;\nconst { ApplicationState, ApplicationService } = g3wsdk.core;\nconst { CatalogLayersStoresRegistry } = g3wsdk.core.catalog;\nconst { t, tPlugin } = g3wsdk.core.i18n;\nconst { Layer, LayersStore } = g3wsdk.core.layer;\nconst { Feature } = g3wsdk.core.layer.features;\nconst { MapLayersStoreRegistry } = g3wsdk.core.map;\nconst { Plugin, PluginService } = g3wsdk.core.plugin;\nconst { XHR, noop } = g3wsdk.core.utils;\nconst { GUI } = g3wsdk.gui;\nconst { Panel } = g3wsdk.gui.vue;\nconst { Server: serverErrorParser } = g3wsdk.core.errors.parsers;\nconst { Geometry } = g3wsdk.core.geoutils;\nconst {\n getScaleFromResolution,\n getResolutionFromScale,\n} = g3wsdk.ol.utils;\n\nObject\n .entries({\n Workflow,\n OpenFormStep,\n AddFeatureStep,\n ToolBox,\n })\n .forEach(([k, v]) => console.assert(undefined !== v, `${k} is undefined`));\n\nnew (class extends Plugin {\n\n constructor() {\n\n super({\n name: 'editing',\n i18n,\n fontClasses: [\n { name: 'measure', className: \"fas fa-ruler-combined\" },\n { name: 'magnete', className: \"fas fa-magnet\" },\n { name: 'clipboard', className: \"fas fa-clipboard\" }\n ],\n });\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Global plugin state\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n this.state = {\n open: false, // check if panel is open or not\n toolboxes: [],\n _toolboxes: [], // TODO: `state._toolboxes` vs `state.toolboxes` ?\n toolboxselected: null,\n /** @since g3w-client-plugin-editing@v3.6.2 */\n showselectlayers: true, // whether to show selected layers on editing panel\n message: null,\n relations: [],\n sessions: {}, // store all sessions\n layers_in_error: false,\n formComponents: {}, // plugin components\n subscribers: {},\n constraints: { // editing contraints (layer, filter, ..) to get features\n toolboxes: {},\n showToolboxesExcluded: true\n },\n featuresOnClose: {}, // layers fatures to result when close editing (KEY LAYERID, VALUES ARRAY OF FEATURE FID CHANGES OR ADDED)\n uniqueFieldsValues: {}, // store unique fields values for each layer\n saveConfig: { // store configuration of how save/commit changes to server\n mode: \"default\", // default, autosave\n modal: false,\n messages: undefined, // object to set custom message\n cb: {\n done: () => {}, // function executed after commit change done\n error: () => {} // function executed after commit changes error\n }\n },\n editableLayers: {},\n events: {\n 'start-editing': {},\n 'show-relation-editing': {},\n layer: {\n start_editing: {\n before: {},\n after: {}\n }\n }\n },\n show_errors: false,\n editFeatureKey: undefined,\n panel: null, // editing panel\n currentLayout: ApplicationService.getCurrentLayoutName(),\n unwatchLayout: (new Vue()).$watch(\n () => ApplicationState.gui.layout.__current,\n layoutName => this.state.currentLayout = layoutName !== this.getName() ? layoutName : this.state.currentLayout\n ),\n onMapControlToggled: ({ target }) => {\n target.isToggled() && target.isClickMap() && this.state.toolboxselected && this.state.toolboxselected.getActiveTool() && this.state.toolboxselected.stopActiveTool();\n },\n };\n\n // BACKOMP v3.x\n this.setService(Object.assign(new PluginService, {\n state: this.state,\n config: this.config,\n getSession: this.getSession.bind(this),\n getFeature: this.getFeature.bind(this),\n subscribe: this.subscribe.bind(this),\n unsubscribe: this.unsubscribe.bind(this),\n fireEvent: this.fireEvent.bind(this),\n undo: this.undo.bind(this),\n redo: this.redo.bind(this),\n getEditingLayer: this.getEditingLayer.bind(this),\n addToolBox: this.addToolBox.bind(this),\n runEventHandler: this.runEventHandler.bind(this),\n resetDefault: this.resetDefault.bind(this),\n resetAPIDefault: this.resetAPIDefault.bind(this),\n getLayers: this.getLayers.bind(this),\n getLayerById: this.getLayerById.bind(this),\n getToolBoxById: this.getToolBoxById.bind(this),\n getSessionById: this.getSessionById.bind(this),\n setApplicationEditingConstraints: this.setApplicationEditingConstraints.bind(this),\n getToolBoxes: this.getToolBoxes.bind(this),\n getEditableLayers: this.getEditableLayers.bind(this),\n stop: this.stop.bind(this),\n saveChange: this.saveChange.bind(this),\n commit: this.commit.bind(this),\n undoRedoLayerUniqueFieldValues: this.undoRedoLayerUniqueFieldValues.bind(this),\n undoRedoRelationUniqueFieldValues: this.undoRedoRelationUniqueFieldValues.bind(this),\n stopEditing: this.stopEditing.bind(this),\n startEditing: this.startEditing.bind(this),\n addLayerFeature: this.addLayerFeature.bind(this),\n }));\n\n // set map control toggle event\n GUI.getService('map').on('mapcontrol:toggled', this.state.onMapControlToggled);\n\n this._init();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async _init() {\n // skip when no editable layer\n if (!CatalogLayersStoresRegistry.getLayers({ EDITABLE: true }).length) { return }\n\n this.setHookLoading({ loading: true });\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1 */\n this.service.setApi({\n api: {\n getSession: this.getSession.bind(this),\n getFeature: this.getFeature.bind(this),\n subscribe: this.subscribe.bind(this),\n unsubscribe: this.unsubscribe.bind(this),\n getToolBoxById: this.getToolBoxById.bind(this),\n addNewFeature: createFeature,\n commitChanges: this.commit.bind(this),\n setApplicationEditingConstraints: this.setApplicationEditingConstraints.bind(this),\n getMapService: () => GUI.getService('map'),\n updateLayerFeature: noop,\n deleteLayerFeature: noop,\n addLayerFeature: this.addLayerFeature.bind(this),\n hidePanel: this.hideEditingPanel.bind(this),\n resetDefault: this.resetAPIDefault.bind(this),\n startEditing: this.startEditing.bind(this),\n stopEditing: this.stopEditing.bind(this),\n showPanel: this.showPanel.bind(this),\n setSaveConfig: this.setSaveConfig.bind(this),\n addFormComponents: this.addFormComponents.bind(this),\n }\n });\n\n // add editing layer store to mapstoreregistry\n MapLayersStoreRegistry.addLayersStore(new LayersStore({ id: 'editing', queryable: false }));\n\n this.state.editableLayers = {};\n this.state._toolboxes = [];\n this.state.toolboxes = [];\n\n // loop over editable layers\n (await Promise.allSettled(\n CatalogLayersStoresRegistry\n .getLayers({ EDITABLE: true }, { TOC_ORDER : true })\n .map(l => l.getLayerForEditing({\n vectorurl: this.config.vectorurl,\n project_type: this.config.project_type\n }))\n )).forEach(({ status, value:layer }) => {\n\n // skip on http error\n if ('fulfilled' !== status) {\n this.state.layers_in_error = true;\n return;\n }\n\n this.state.editableLayers[layer.getId()] = layer;\n\n //set default empty object\n this.state.uniqueFieldsValues[layer.getId()] = {};\n\n /**\n * attach layer widgets event: get data from api when a field of a layer\n * is related to a wgis form widget (ex. relation reference, value map, etc..)\n */\n layer\n .getEditingFields()\n .filter(field => field.input && 'select_autocomplete' === field.input.type && !field.input.options.filter_expression && !field.input.options.usecompleter)\n /** @TODO need to avoid to call the same fnc to same event many times to avoid waste server request time */\n .forEach(field => ['start-editing', 'show-relation-editing'].forEach(type => {\n const id = layer.getId();\n this.state.events[type][id] = this.state.events[type][id] || [];\n\n this.state.events[type][id].push(async () => {\n const options = field.input.options;\n\n // remove all values\n options.loading.state = 'loading';\n options.values = [];\n\n const relationLayer = options.layer_id && CatalogLayersStoresRegistry.getLayerById(options.layer_id);\n const has_filter = ([undefined, null].includes(options.filter_fields || []) || 0 === (options.filter_fields || []).length);\n\n try {\n\n // relation reference widget + no filter set\n if (options.relation_reference && has_filter) {\n const response = await layer.getFilterData({ fformatter: field.name }); // get data with fformatter\n if (response && response.data) {\n // response data is an array ok key value objects\n options.values.push(...response.data.map(([value, key]) => ({ key, value })));\n options.loading.state = 'ready';\n this.fireEvent('autocomplete', { field, data: [response.data] });\n return options.values;\n }\n }\n\n // value map widget\n if (relationLayer) {\n //ordering by value or key depend on orderbyvalue Boolean value\n const response = await promisify(relationLayer.getDataTable({ ordering: options.orderbyvalue ? options.value : options.key }));\n if (response && response.features) {\n options.values.push(...(response.features || []).map(feature => ({\n key: feature.properties[options.value],\n value: feature.properties[options.key],\n })));\n options.loading.state = 'ready';\n this.fireEvent('autocomplete', { field, features: response.features })\n return options.values;\n }\n }\n\n /** @TODO check if deprecated */\n const features = [];\n options.loading.state = 'ready';\n this.fireEvent('autocomplete', { field, features });\n return features;\n\n } catch (e) {\n console.warn(e);\n options.loading.state = 'error';\n return Promise.reject(e);\n }\n });\n }));\n\n this.state.sessions[layer.getId()] = null;\n\n });\n\n\n let i = 0;\n this\n .getLayers()\n .forEach(editingLayer => {\n /**\n * set 1:1 relation fields editable\n * \n * Check if layer has relation 1:1 (type ONE) and if fields\n *\n * belongs to relation where child layer is editable\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\n const fatherId = editingLayer.getId(); // father layer\n CatalogLayersStoresRegistry\n .getLayerById(fatherId)\n .getRelations()\n .getArray()\n .filter(relation => 'ONE' === relation.getType() && fatherId === relation.getFather()) // 'ONE' == join 1:1 + father layerId is a father of relation\n .forEach(relation => {\n const isChildEditable = undefined !== this.getLayerById(relation.getChild()); // check if child layerId is editable (in editing)\n this\n .getLayerById(relation.getFather())\n .getEditingFields()\n .filter(f => f.vectorjoin_id && f.vectorjoin_id === relation.getId()) // father layer fields (in editing)\n .forEach(f => { f.editable = (f.editable && isChildEditable); }); // current editable boolean value + child editable layer\n });\n // Set editing layer color and toolbox style\n if (!editingLayer.getColor()) {\n editingLayer.setColor(editingLayer.isGeoLayer() ? [\n \"#C43C39\", \"#d95f02\", \"#91522D\", \"#7F9801\", \"#0B2637\",\n \"#8D5A99\", \"#85B66F\", \"#8D2307\", \"#2B83BA\", \"#7D8B8F\",\n \"#E8718D\", \"#1E434C\", \"#9B4F07\", '#1b9e77', \"#FF9E17\",\n \"#7570b3\", \"#204B24\", \"#9795A3\", \"#C94F44\", \"#7B9F35\",\n \"#373276\", \"#882D61\", \"#AA9039\", \"#F38F3A\", \"#712333\",\n \"#3B3A73\", \"#9E5165\", \"#A51E22\", \"#261326\", \"#e4572e\",\n \"#29335c\", \"#f3a712\", \"#669bbc\", \"#eb6841\", \"#4f372d\",\n \"#cc2a36\", \"#00a0b0\", \"#00b159\", \"#f37735\", \"#ffc425\",\n ][i++ % 40] : '#fff');\n }\n });\n\n // after add layers to layerstore\n MapLayersStoreRegistry.getLayersStore('editing').addLayers(this.getLayers());\n\n // create toolboxes\n this.getLayers().forEach(l => this.addToolBox(new ToolBox(l, [...l.getChildren(), ...l.getFathers()].filter(id => this.getLayerById(id)))));\n\n await GUI.isReady();\n\n this._setupGUI();\n\n this.setHookLoading({ loading: false });\n this.setReady(true);\n }\n\n // setup plugin interface\n async _setupGUI() {\n\n //@since 3.9.0\n // skip when:\n // 1 - plugin is not referred to the current project id\n // 2 - configuration of plugin, visible is set to false\n // 3 - There aren't editable layers or all are not visible\n if (!this.registerPlugin(this.config.gid) || false === this.config.visible || 0 === this.getLayers().filter(l => l.config.editing.visible).length) {\n return;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin/toolboxes/toolboxesfactory.js@v3.7.1\n *\n * Register query result action: edit selected feature from query results\n */\n this.state.editFeatureKey = GUI.getService('queryresults').onafter('editFeature', async({\n layer,\n feature,\n } = {}) => {\n const fid = feature.attributes[G3W_FID] || feature.id;\n\n //In case of not unique id, skip\n if (undefined === fid) { return }\n\n this.getToolBoxes().forEach(tb => tb.setShow(layer.id === tb.getId()));\n this.showEditingPanel();\n\n this.state.showselectlayers = false;\n\n this.subscribe('closeeditingpanel', () => { this.state.showselectlayers = true; return { once: true } });\n\n const toolBox = this.getToolBoxById(layer.id);\n //set selected\n toolBox.setSelected(true);\n\n const session = toolBox.getSession();\n const { scale } = toolBox.getEditingConstraints(); // get scale constraint from setting layer\n\n let w;\n\n // start toolbox (filtered by feature id)\n try {\n // check map scale after zoom to feature\n // if currentScale is more that scale constraint set by layer editing\n // needs to go to scale setting by layer editing constraint\n if (scale) {\n const units = GUI.getService('map').getMapUnits();\n const map = GUI.getService('map').getMap();\n const currentScale = parseInt(getScaleFromResolution(map.getView().getResolution(), GUI.getService('map').getMapUnits()));\n if (currentScale > scale) {\n map.getView().setResolution(getResolutionFromScale(scale, units));\n }\n\n }\n\n await promisify(toolBox.start({ filter: { fids: fid } }));\n\n const _layer = toolBox.getLayer();\n const source = _layer.getEditingLayer().getSource();\n const is_vector = Layer.LayerTypes.VECTOR === _layer.getType();\n\n // get feature from an Editing layer source (with styles)\n const features = is_vector ? source.getFeatures() : source.readFeatures();\n const feature = features.find(f => fid == f.getId());\n\n // skip when not feature is get from server\n if (!feature) { return }\n\n const geom = feature.getGeometry();\n\n // feature has geometry \u2192 zoom to geometry\n if (geom) { GUI.getService('map').zoomToGeometry(geom) }\n\n toolBox.setSelected(true);\n\n this.state.toolboxselected = toolBox;\n\n const addPartTool = is_vector && !geom && toolBox.getTools().find(t => 'addPart' === t.getId());\n\n // check if layer is single geometry. Need to show and change behaviour\n if (addPartTool && !Geometry.isMultiGeometry(_layer.getGeometryType())) {\n addPartTool.visible = true;\n }\n\n // add geometry when vector layer feature has no geometry\n if (addPartTool) {\n //get workflow\n const op = addPartTool.getOperator();\n const w = new Workflow({\n type: 'drawgeometry',\n helpMessage: 'editing.workflow.steps.draw_geometry',\n runOnce: true, // need to run once time\n steps: [\n new AddFeatureStep({\n add: false,\n steps: {\n addfeature: {\n description: 'editing.workflow.steps.draw_geometry',\n }\n },\n onRun: ({inputs, context}) => {\n w.emit('settoolsoftool', [\n {\n type: 'snap',\n options: {\n layerId: inputs.layer.getId(),\n source: inputs.layer.getEditingLayer().getSource(),\n active: true\n }\n },\n {\n type: 'measure',\n options: {\n active: false\n }\n }\n ]);\n w.emit('active', ['snap']);\n },\n onStop: () => w.emit('deactive', ['snap', 'measure'])\n }),\n // add part to multi geometries\n new Step({ run: addPartToMultigeometries })\n ],\n registerEscKeyEvent: true\n })\n\n addPartTool.setOperator(w);\n\n this.subscribe('closeeditingpanel', () => {\n addPartTool.setOperator(op);\n addPartTool.visible = Geometry.isMultiGeometry(_layer.getGeometryType());\n })\n }\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/editnopickmapfeatureattributesworkflow.js@v3.7.1 */\n w = (new Workflow({\n type: 'editnopickmapfeatureattributes',\n runOnce: true,\n helpMessage: 'editing.tools.update_feature',\n steps: [ new OpenFormStep() ]\n }));\n\n await promisify(\n w.start({\n inputs: { layer: _layer, features: [feature] },\n context: { session }\n })\n );\n\n await promisify(session.save());\n\n this.saveChange();\n\n } catch (e) {\n console.warn(e);\n session.rollback();\n } finally {\n w.stop();\n }\n });\n\n this.config.name = this.config.name || \"plugins.editing.editing_data\";\n\n this.addToolGroup({ position: 0, title: 'EDITING' });\n this.addTools({\n action: this.showEditingPanel,\n offline: false,\n icon: 'pencil'\n }, { position: 0, title: 'EDITING' });\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.8\n * \n * Get session\n *\n * @param layerId\n *\n * @returns {*}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getSession({ layerId } = {}) {\n return this.getToolBoxById(layerId).getSession();\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.8\n *\n * @param layerId\n *\n * @returns Feature in editing\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getFeature({ layerId } = {}) {\n return this.getToolBoxById(layerId).getActiveTool().getLayer().features[0];\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.8\n * \n * Subscribe handler function on event\n *\n * @param event\n * @param { Function } fnc\n *\n * @returns { Function } function\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n subscribe(event, fnc) {\n if (!this.state.subscribers[event]) { this.state.subscribers[event] = [] }\n if (!this.state.subscribers[event].find(subscribe => fnc === subscribe)) { this.state.subscribers[event].push(fnc)}\n return fnc;\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.8\n * \n * Unsubscribe handler function on event\n *\n * @param event\n * @param fnc\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n unsubscribe(event, fnc) {\n this.state.subscribers[event] = this.state.subscribers[event].filter(sub => fnc !== sub);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param event\n * @param options\n *\n * @returns { Promise }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async fireEvent(event, options = {}) {\n if (this.state.subscribers[event]) {\n this.state.subscribers[event].forEach(fnc => {\n const response = fnc(options);\n if (response && response.once) {\n this.unsubscribe(event, fnc);\n }\n });\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Undo method\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n undo() {\n const session = this.state.toolboxselected.getSession();\n const layerId = session.getId();\n const sessionItems = session.getLastHistoryState().items;\n\n //update unique values fields after undo\n this.undoRedoLayerUniqueFieldValues({\n layerId,\n sessionItems,\n action: 'undo'\n });\n\n const undoItems = session.undo();\n //update unique values of relations after undo\n this.undoRedoRelationUniqueFieldValues({\n relationSessionItems: undoItems,\n action: 'undo'\n });\n\n // undo relations\n Object.entries(undoItems).forEach(([toolboxId, items]) => { this.getToolBoxById(toolboxId).getSession().undo(items); });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n redo() {\n const session = this.state.toolboxselected.getSession();\n const layerId = session.getId();\n const sessionItems = session.getLastHistoryState().items;\n //update unique values fields after redo\n this.undoRedoLayerUniqueFieldValues({\n layerId,\n sessionItems,\n action: 'redo'\n });\n const redoItems = session.redo();\n //update unique values of relations after redo\n this.undoRedoRelationUniqueFieldValues({\n relationSessionItems: redoItems,\n action: 'redo'\n });\n\n // redo relations\n Object.entries(redoItems).forEach(([toolboxId, items]) => { this.getToolBoxById(toolboxId).getSession().redo(items); });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param id\n *\n * @returns {*}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getEditingLayer(id) {\n return this.state.editableLayers[id].getEditingLayer();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param toolbox\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n addToolBox(toolbox) {\n this.state._toolboxes.push(toolbox);\n this.state.sessions[toolbox.getId()] = toolbox.getSession(); // add session\n this.state.toolboxes.push(toolbox.state);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } handler\n * @param handler.type\n * @param handler.id\n *\n * @returns { Promise }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async runEventHandler({\n type,\n id,\n } = {}) {\n if (this.state.events[type] && this.state.events[type][id]) {\n await Promise.allSettled(this.state.events[type][id].map(fnc => fnc()));\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Reset default values\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n resetDefault() {\n this.state.saveConfig = {\n mode: \"default\", // default, autosave\n modal: false,\n messages: undefined, // object to set a custom message\n cb: {\n done: () => {}, // function Called after save\n error: () => {}, // function called affect commit error\n }\n };\n GUI.getService('map').disableClickMapControls(false);\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1\n *\n * Reset default toolbox state modified by other plugin\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n resetAPIDefault({\n plugin = true,\n toolboxes = true,\n } = {}) {\n if (toolboxes) { this.getToolBoxes().forEach(tb => tb.resetDefault()) }\n if (plugin) { this.resetDefault() }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @returns { Array }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getLayers() {\n return Object.values(this.state.editableLayers);\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { string } id\n *\n * @returns {*}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getLayerById(id) {\n return this.state.editableLayers[id];\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { string } id\n *\n * @returns {*}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getToolBoxById(id) {\n return this.state._toolboxes.find(tb => id === tb.getId());\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Get layer session by id (layer id is the same of session)\n *\n * @param id\n *\n * @returns {*}\n *\n * @since g3w-client-plugin-editing@v3.7.0\n */\n getSessionById(id) {\n return this.state.sessions[id];\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Method to apply filter editing contsraint to toolbox editing\n * Apply filter editing contsraint to toolbox editing\n *\n * @param constraints\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setApplicationEditingConstraints(constraints = { showToolboxesExcluded: true, toolboxes : {} }) {\n this.state.constraints = {\n ...this.state.constraints,\n ...constraints\n };\n\n const { toolboxes, showToolboxesExcluded } = constraints;\n const toolboxIds = Object.keys(toolboxes);\n if (false === showToolboxesExcluded) {\n this.state.toolboxes.forEach(t => t.show = toolboxIds.includes(t.id));\n }\n toolboxIds.forEach(id => this.getToolBoxById(id).setEditingConstraints(toolboxes[id]))\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @returns { Array }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getToolBoxes() {\n return this.state._toolboxes;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @returns {*|{}}\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n getEditableLayers() {\n return this.state.editableLayers;\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Stop editing\n *\n * @returns { Promise }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async stop() {\n const commitpromises = this.state._toolboxes\n .filter(t => t.getSession().getHistory().state.commit) // check if temp changes are waiting to save on server\n .map( toolbox => this.commit({ toolbox, modal : true }))\n try {\n await promisify($.when.apply(this, commitpromises)); \n } catch (e) {\n console.warn(e);\n }\n\n this.state._toolboxes.forEach(t => t.stop());\n\n this.state.toolboxselected = null;\n this.state.message = null;\n\n //reset unique values\n Object.keys(this.state.uniqueFieldsValues).forEach(id => this.state.uniqueFieldsValues[id] = {});\n\n GUI.getService('map').refreshMap();\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Function called very single change saved temporary\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n async saveChange() {\n if ('autosave' === this.state.saveConfig.mode) {\n return this.commit({ modal: false }); // set to not show a modal ask window\n }\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Commit and save changes on server persistently\n *\n * @param { Object } commit\n * @param commit.toolbox\n * @param commit.commitItems\n * @param commit.messages\n * @param commit.done\n * @param { boolean } commit.modal\n * @param { boolean } commit.close\n *\n * @returns jQuery promise\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n commit({\n toolbox,\n commitItems,\n modal = true,\n close = false,\n } = {}) {\n const messages = Object.assign({ success: { message: \"plugins.editing.messages.saved\", autoclose: true }, error: {} }, (this.state.saveConfig.messages || {}));\n toolbox = toolbox || this.state.toolboxselected;\n let layer = toolbox.getLayer();\n const items = commitItems;\n commitItems = commitItems || toolbox.getSession().getCommitItems();\n const online = ApplicationState.online;\n const has_changes = [\n ...(commitItems.add || []),\n ...(commitItems.delete || []),\n ...(commitItems.update || []),\n ...Object.keys(commitItems.relations || {})\n ].length;\n let workflow, dialog, serverError;\n\n return $promisify(async () => {\n\n // skip when there is nothing to save\n if (!has_changes) {\n GUI.showUserMessage({ type: 'info', message: 'Nothing to save', autoclose: true, closable: false });\n return toolbox;\n }\n\n try {\n\n // show commit modal window\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8 */\n if (modal) {\n workflow = new Workflow({\n type: 'commitfeatures',\n steps: [\n // confirm step\n new Step({\n run(inputs) {\n return $promisify(new Promise((resolve, reject) => {\n const dialog = GUI.dialog.dialog({\n message: inputs.message,\n title: `${tPlugin(\"editing.messages.commit_feature\")}: \"${inputs.layer.getName()}\"`,\n buttons: {\n SAVE: { className: \"btn-success\", callback() { resolve(inputs); }, label: t(\"save\"), },\n CANCEL: { className: \"btn-danger\", callback() { reject({cancel : true }); }, label: t(inputs.close ? \"exitnosave\" : \"annul\") },\n ...(inputs.close ? { CLOSEMODAL : { className: \"btn-primary\", callback() { dialog.modal('hide'); }, label: t(\"annul\") }} : {}),\n }\n });\n if (inputs.features) {\n setAndUnsetSelectedFeaturesStyle({ promise: promise(), inputs, style: this.selectStyle });\n }\n }))\n },\n }\n ),\n ]\n });\n //need to get to confirm or cancel choose from modal\n try {\n await promisify(\n workflow.start({\n inputs: {\n close,\n layer,\n message: (new (Vue.extend(require('./components/Changes.vue').default))({\n propsData: {\n commits: commitItems,\n layer\n }})).$mount().$el,\n }\n })\n );\n await promisify(workflow.stop());\n } catch(e) {\n console.warn(e);\n // In the case of pressed cancel button to commit features modal\n if (e && e.cancel) {\n return Promise.reject(e);\n }\n //need to be set server Error\n serverError = true;\n }\n\n //in case of online application\n if (online) {\n dialog = GUI.dialog.dialog({\n message: `

\n ${tPlugin('editing.messages.saving')}\n

`,\n closeButton: false\n });\n }\n }\n\n let data = !online && { [toolbox.getSession().getId()]: commitItems };\n //get current offline editing changes\n const changes = !online && JSON.parse(window.localStorage.getItem('EDITING_CHANGES') || null);\n\n // handle offline changes\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8 */\n Object.keys(changes || {})\n .forEach(layerId => {\n const currLayerId = Object.keys(data)[0];\n\n // check if previous changes are made in the same layer or in relationlayer of current\n let current = null;\n\n if (data[layerId]) { current = data; }\n else if (data[currLayerId].relations[layerId]) {\n current = data[currLayerId].relations;\n }\n\n // check if in the last changes\n const relationsIds = !current && Object.keys(changes[layerId].relations || {});\n const has_relations = !current && relationsIds.length > 0;\n const GIVE_ME_A_NAME = !current && has_relations && relationsIds.includes(currLayerId);\n\n // apply changes\n if (current || GIVE_ME_A_NAME) {\n const id = current ? layerId : currLayerId;\n const curr = current ? current : data;\n const prev = current ? changes : changes[layerId].relations;\n curr[id].add = [...curr[id].add, ...curr[id].add];\n curr[id].delete = [...curr[id].delete, ...curr[id].delete];\n\n (prev[id].update || [])\n .filter(update => !curr[id].update.find(u => u.id === update.id))\n .forEach(update => curr[id].update.unshift(update));\n\n (prev[id].lockids || [])\n .filter(lock => !curr[id].lockids.find(l => l.featureid === lock.featureid))\n .forEach(lock => curr[id].update.unshift(lock));\n }\n\n if (GIVE_ME_A_NAME) {\n changes[layerId].relations[currLayerId] = data[currLayerId];\n data = changes;\n }\n if (!current && !has_relations) {\n data[layerId] = changes[layerId]\n }\n });\n\n if (!online) {\n\n GUI.showUserMessage({\n type: 'success',\n message: \"plugins.editing.messages.saved_local\",\n autoclose: true\n });\n //clear history because it saved on browser\n toolbox.getSession().clearHistory();\n\n }\n\n try {\n // check if the application is online\n const { commit, response } = online ? await promisify(\n toolbox.getSession().commit({ items: items || commitItems, __esPromise: true })\n ) : {};\n\n //check if is online and there are some commit items\n const online2 = online && commit;\n\n const result = online2 && response.result;\n\n if (result && messages && messages.success) {\n // hide saving dialog\n if (dialog) { dialog.modal('hide') }\n\n //Show save user message\n GUI.showUserMessage({\n type: 'success',\n message: messages.success.message || \"plugins.editing.messages.saved\",\n duration: 2000,\n autoclose: undefined === messages.success.autoclose ? true : messages.success.autoclose,\n });\n }\n\n // In the case of vector layer need to refresh map commit changes\n if (result && Layer.LayerTypes.VECTOR === layer.getType() ) {\n GUI.getService('map').refreshMap({ force: true });\n }\n\n if (online) {\n this.state.saveConfig.cb.done(toolbox);\n }\n\n // add items when close editing to result to show changes\n const layerId = result && toolbox.getId();\n\n if (layerId) {\n this.state.featuresOnClose[layerId] = this.state.featuresOnClose[layerId] || new Set();\n [\n ...response.response.new.map(n => n.id),\n ...commit.update.map(u => u.id)\n ].forEach(fid => this.state.featuresOnClose[layerId].add(fid));\n }\n\n // @since 3.7.2 - click on save all disk icon (editing form relation)\n if (result) { this.emit('commit', response.response) }\n\n // the result is false. It was done a commit, but an error occurs\n if (online2 && !result) {\n serverError = true;\n throw response;\n }\n } catch(e) {\n console.warn(e);\n if (online) {\n serverError = true;\n throw e;\n }\n }\n\n } catch (e) {\n console.warn(e);\n\n // hide saving dialog\n if (dialog) { dialog.modal('hide') }\n\n // rollback\n //@TODO check if it is usefull\n if (modal) {\n try { await _rollback(commitItems.relations); }\n catch (e) { console.warn(e); }\n }\n\n // parse server error\n if (serverError || modal) {\n const message = online\n ? (messages.error.message || (new serverErrorParser({ error: e.errors || e || {}})).parse({ type: 'String' }))\n : e;\n\n GUI.showUserMessage({\n type: 'alert',\n message,\n textMessage: online ? !messages.error.message : true,\n autoclose: online ? (undefined !== messages.error.autoclose ? messages.error.autoclose : false) : false,\n });\n\n this.state.saveConfig.cb.error(toolbox, message);\n }\n\n return Promise.reject(toolbox);\n }\n return toolbox;\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } opts\n * @param { string } opts.layerId\n * @param { Array } opts.sessionItems\n * @param opts.action\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n undoRedoLayerUniqueFieldValues({\n layerId,\n sessionItems = [],\n action,\n }) {\n\n // if not set\n if (undefined === this.state.uniqueFieldsValues[layerId]) {\n return;\n }\n\n sessionItems.forEach(item => {\n\n Object\n .keys(this.state.uniqueFieldsValues[layerId])\n .forEach(name => { //name is the name of field\n //check if change is an update [oldVal, newValue]\n const is_array = Array.isArray(item);\n let oldVal, newVal;\n if (is_array) {\n // 0 = old value feature, 1 = new value feature\n const has_change = item[1].feature.get(name) != item[0].feature.get(name);\n // update feature that contains \"new\" and \"old\" values of feature\n oldVal = has_change ? (action === 'undo' ? item[1].feature.get(name) : item[0].feature.get(name)) : undefined;\n newVal = has_change ? (action === 'undo' ? item[0].feature.get(name) : item[1].feature.get(name)) : undefined;\n } else {\n oldVal = 'add' === item.feature.getState() ? item.feature.get(name) : undefined;\n newVal = 'delete' === item.feature.getState() ? item.feature.get(name) : undefined;\n }\n // delete layer unique field value\n if (undefined !== oldVal) {\n this.state.uniqueFieldsValues[layerId][name].delete(oldVal);\n }\n // add layer unique field value\n if (undefined !== newVal) {\n this.state.uniqueFieldsValues[layerId][name].add(newVal);\n }\n });\n });\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } opts\n * @param opts.relationSessionItems\n * @param opts.action\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n undoRedoRelationUniqueFieldValues({\n relationSessionItems = {},\n action,\n }) {\n Object\n .entries(relationSessionItems)\n .forEach(([layerId, { own: sessionItems, dependencies: relationSessionItems }]) => {\n //undo/redo unique field of layer\n this.undoRedoLayerUniqueFieldValues({\n layerId,\n sessionItems,\n action\n });\n //undo/redo unique field of relations\n this.undoRedoRelationUniqueFieldValues({\n relationSessionItems,\n action\n })\n })\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1\n *\n * Stop editing on layerId\n *\n * @param layerId\n * @param options\n *\n * @returns { Promise }\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n async stopEditing(layerId, options = {}) {\n return promisify(this.getToolBoxById(layerId).stop(options));\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1\n *\n * Start editing API\n *\n * @param layerId\n * @param { Object } options\n * @param { boolean } [options.selected=true]\n * @param { boolean } [options.disablemapcontrols=false]\n * @param { boolean } [options.showselectlayers=true]\n * @param { string } [options.title]\n * @param data\n *\n *\n * @returns { Promise }\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n async startEditing(layerId, options = {}, data = false) {\n options.selected = undefined === options.selected ? true : options.selected;\n options.showselectlayers = undefined === options.showselectlayers ? true : options.showselectlayers;\n options.disablemapcontrols = undefined === options.disablemapcontrols ? false : options.showselectlayers;\n // get toolbox related to layer id\n const toolbox = this.getToolBoxById(layerId);\n // set show select layers input visibility\n this.state.showselectlayers = options.showselectlayers;\n // skip if toolbox doesn't exist\n if (!toolbox) {\n return Promise.reject();\n }\n // set selected\n toolbox.setSelected(options.selected);\n // set seletcted toolbox\n if (options.selected) { this.state.toolboxselected = toolbox }\n\n //set toolbox title if provide\n if (options.title) { toolbox.setTitle(options.title) }\n\n // start editing toolbox (options contain also a filter type)\n data = await promisify(toolbox.start(options))\n // disablemapcontrols in conflict\n if (options.disablemapcontrols) {\n GUI.getService('map').disableClickMapControls(true);\n }\n // opts contain information about start editing has features loaded\n return data ? { toolbox, data } : toolbox;\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1\n *\n * Add Feature\n *\n * @param { Object } opts\n * @param opts.layerId\n * @param opts.feature\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n addLayerFeature({\n layerId,\n feature,\n } = {}) {\n // skip when mandatory params are missing\n if ([ feature, layerId ].includes(undefined)) {\n return Promise.reject();\n }\n return new Promise(async (resolve, reject) => {\n const layer = this.getLayerById(layerId);\n // get session\n const session = this.getSessionById(layerId);\n // exclude an eventual attribute pk (primary key) not editable (mean autoincrement)\n const attributes = layer\n .getEditingFields()\n .filter(attr => !(attr.pk && !attr.editable));\n // start session (get no features but set layer in editing)\n session.start({\n filter: {\n nofeatures: true, // no feature\n nofeatures_field: attributes[0].name // get the first field in editing form\n },\n editing: true,\n })\n\n /** ORIGINAL SOURCE: g3w-client-plugin-editing/workflows/easyaddfeatureworkflow.js@v3.7.1 */\n // create workflow\n const workflow = new Workflow({\n type: 'addfeature',\n steps: [\n new OpenFormStep({\n push: true,\n showgoback: false,\n saveAll: false,\n })\n ],\n });\n\n const stop = cb => {\n workflow.stop();\n session.stop();\n return cb();\n };\n\n try {\n //check if feature has property of layer\n attributes.forEach(a => {\n if (undefined === feature.get(a.name)) {\n feature.set(a.name, null);\n }\n })\n\n try {\n //set feature as g3w feature\n feature = new Feature({ feature, properties: attributes.map(a => a.name) });\n //set new\n feature.setTemporaryId();\n\n // add to session and source as new feature\n session.pushAdd(layerId, feature, false);\n layer.getEditingLayer().getSource().addFeature(feature);\n //start workflow\n await promisify(workflow.start({\n inputs: { layer, features: [feature] },\n context: { session },\n }));\n\n session.save();\n\n try {\n await promisify(this.commit({ modal: false, toolbox: this.getToolBoxById(layerId) }));\n stop(resolve);\n } catch(e) {\n console.warn(e);\n stop(reject)\n }\n } catch(e) {\n console.warn(e);\n stop(reject);\n }\n } catch(e) {\n console.warn(e);\n reject();\n }\n })\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * @param { Object } save\n * @param save.mode - default or autosave\n * @param save.cb - object contain done/error two functions\n * @param save.modal - Boolean true or false to show to ask\n * @param save.messages - object success or error\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n setSaveConfig({ mode = 'default', cb = {}, modal = false, messages } = {}) {\n Object.assign(this.state.saveConfig, { mode, modal, messages, cb: { ...this.state.saveConfig.cb, ...cb }});\n }\n\n /**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8 \n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\n addFormComponents({ layerId, components = [] } = {}) {\n this.state.formComponents[layerId] = (this.state.formComponents[layerId] || []).concat(components);\n }\n\n /**\n * [API Method] ORIGINAL SOURCE: g3w-client-plugin-editing/api/index.js@v3.7.1\n *\n * Show editing panel\n *\n * @param options\n * @param options.toolboxes\n *\n * @since g3w-client-plugin-editing@v3.7.2\n */\n showPanel(options = {}) {\n if (options.toolboxes && Array.isArray(options.toolboxes)) {\n this.getToolBoxes().forEach(tb => tb.setShow(options.toolboxes.includes(tb.getId())));\n }\n this.showEditingPanel(options);\n }\n\n /**\n * Show editing panel toolbars\n * \n * ORIGINAL SOURCE: g3w-client-plugin-editing/g3w-editing-components/editing.js.js@v3.6\n * ORIGINAL SOURCE: g3w-client-plugin-editing/g3w-editing-components/panel.js.js@v3.6\n */\n showEditingPanel(opts = {}) {\n //need to filter visible\n if (this.getLayers().filter(l => l.config.editing.visible).length > 0) {\n this.state.panel = new Panel({\n ...opts,\n id: \"editing-panel\",\n title: opts.title || \"plugins.editing.editing_data\",\n internalPanel: new (Vue.extend(require('./components/Editing.vue').default))({\n service: this,\n resourcesurl: opts.resourcesUrl || GUI.getResourcesUrl(),\n showcommitbar: undefined !== opts.showcommitbar ? opts.showcommitbar : true,\n }),\n });\n GUI.showPanel(this.state.panel);\n\n if (!this.state.show_errors && this.state.layers_in_error) {\n GUI.showUserMessage({ type: 'warning', message: 'plugins.editing.errors.some_layers', closable: true });\n this.state.show_errors = true;\n }\n } else {\n GUI.showUserMessage({ type: 'alert', message: 'plugins.editing.errors.no_layers' })\n }\n return this.state.panel;\n }\n\n hideEditingPanel() {\n if (null !== this.state.panel) {\n GUI.closePanel();\n this.state.panel = null;\n }\n }\n\n unload() {\n this.hideEditingPanel();\n\n if (this.config.visible) { this.removeTools() }\n\n this.state.unwatchLayout();\n MapLayersStoreRegistry.removeLayersStore(MapLayersStoreRegistry.getLayersStore('editing'));\n ToolBox.clear();\n // turn off events\n GUI.getService('map').off('mapcontrol:toggled', this.state.onMapControlToggled);\n // unregister query result action\n GUI.getService('queryresults').un('editFeature', this.state.editFeatureKey);\n }\n \n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n setCurrentLayout() {\n ApplicationService.setCurrentLayout(this.getName());\n }\n\n /**\n * @since g3w-client-plugin-editing@v3.8.0\n */\n resetCurrentLayout() {\n ApplicationService.setCurrentLayout(this.state.currentLayout);\n }\n\n /**\n * @since g3w-client-plugin-editing@v3.8.1\n */\n getActiveTool() {\n return this.getToolBoxes().filter(t => t.getActiveTool())[0];\n }\n\n});\n\nasync function _rollback(relations = {}) {\n return Promise.allSettled(\n Object\n .entries(relations)\n .flatMap(([ layerId, { add, delete: del, update, relations = {}}]) => {\n const source = getEditingLayerById(layerId).getEditingSource();\n const has_features = source.readFeatures().length > 0; // check if the relation layer has some features\n // get original values\n return [\n // add\n ...(has_features && add || []).map(async ({ id }) => {\n source.removeFeature(source.getFeatureById(id));\n }),\n // update\n ...(has_features && update || []).map(async ({ id }) => {\n try {\n const response = await XHR.get({\n url: CatalogLayersStoresRegistry.getLayerById(layerId).getUrl('data'),\n params: { fids: id },\n });\n const f = (response.result && response.vector.data.features || []).at(0);\n const feature = source.getFeatureById(id);\n feature.setProperties(f.properties);\n feature.setGeometry(f.geometry);\n } catch(e) {\n console.warn(e);\n }\n }),\n // delete\n ...del.map(async id => {\n try {\n const response = await XHR.get({\n url: CatalogLayersStoresRegistry.getLayerById(layerId).getUrl('data'),\n params: { fids: id },\n });\n const f = (response.result && response.vector.data.features || []).at(0);\n const feature = new ol.Feature({ geometry: f.geometry })\n feature.setProperties(f.properties);\n feature.setId(id);\n source.addFeature(new Feature({ feature })); // add it again to source because relation layer is locked\n } catch(e) {\n console.warn(e);\n }\n\n }),\n _rollback(relations),\n ];\n })\n );\n}", "const { Feature } = g3wsdk.core.layer.features;\n\n/**\n * ORIGINAL SOURCE: g3w-client-plugin-editing/services/editingservice.js@v3.7.8\n * \n * Create a new feature\n *\n * @param layerId\n * @param options.geometry.type\n * @param options.geometry.coordinates\n *\n * @returns { Feature }\n * \n * @since g3w-client-plugin-editing@v3.8.0\n */\nexport function createFeature(layerId, options = {}) {\n const feature = new Feature();\n\n if (options.geometry) {\n feature.setGeometry(new ol.geom[options.geometry.type](options.geometry.coordinates));\n }\n\n feature.setProperties(options.properties);\n feature.setTemporaryId();\n\n const toolbox = this.getToolBoxById(layerId);\n const editingLayer = toolbox.getLayer().getEditingLayer();\n const session = toolbox.getSession();\n\n editingLayer.getSource().addFeature(feature);\n session.pushAdd(layerId, feature, false);\n\n return feature;\n}"], + "mappings": "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", + "names": ["promisify", "promise", "resolve", "reject", "$promisify", "d", "e", "init_promisify", "__esmMin", "G3WObject", "isPointGeometryType", "Layer", "GUI", "Step", "init_step", "__esmMin", "init_promisify", "options", "inputs", "context", "task", "steps", "type", "interaction", "events", "handler", "evt", "bool", "event", "input", "callback", "$promisify", "step", "toolsOfTools", "layer", "tool", "t", "promisify", "e", "outputs", "workflow", "tools", "UserMessage_exports", "__export", "UserMessage_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_UserMessage", "__esmMin", "step", "_vm", "_h", "_c", "$event", "inject", "GUI", "G3WObject", "Workflow", "workflows", "init_workflow", "__esmMin", "init_step", "init_promisify", "_Workflow", "options", "Step", "steps", "messagesSteps", "step", "type", "t", "service", "workflow", "key", "value", "context", "index", "messages", "s", "inputs", "outputs", "promisify", "e", "$promisify", "resolve", "reject", "showUserMessage", "label", "tools", "message", "feats", "evt", "callback", "i", "w", "createEditingDataOptions", "filterType", "options", "filter", "GUI", "init_createEditingDataOptions", "__esmMin", "setLayerUniqueFieldValues", "layerId", "service", "resolve", "reject", "layer", "f", "response", "name", "values", "e", "CatalogLayersStoresRegistry", "init_setLayerUniqueFieldValues", "__esmMin", "getRelationId", "layerId", "relation", "fatherId", "childId", "init_getRelationId", "__esmMin", "getRelationsInEditing", "layerId", "relations", "r", "getRelationId", "init_getRelationsInEditing", "__esmMin", "init_getRelationId", "getSelectedStyle", "feature", "setFeaturesSelectedStyle", "features", "style", "arr", "originalStyle", "selectedStyle", "f", "init_setFeaturesSelectedStyle", "__esmMin", "setAndUnsetSelectedFeaturesStyle", "promise", "inputs", "style", "layer", "features", "selectOriginalStyleHandle", "originalStyle", "setFeaturesSelectedStyle", "promisify", "f", "is_vector", "Layer", "is_single", "Workflow", "init_setAndUnsetSelectedFeaturesStyle", "__esmMin", "init_workflow", "init_promisify", "init_setFeaturesSelectedStyle", "ChooseFeatureToEdit_exports", "__export", "ChooseFeatureToEdit_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "GUI", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_ChooseFeatureToEdit", "__esmMin", "feature", "properties", "label", "name", "_vm", "_h", "_c", "$event", "ref", "attribute", "value", "inject", "chooseFeatureFromFeatures", "features", "inputs", "resolve", "reject", "feature", "comp", "name", "label", "dialog", "tPlugin", "init_chooseFeatureFromFeatures", "__esmMin", "cloneFeature", "feature", "layer", "clone", "pk", "f", "init_cloneFeature", "__esmMin", "getParentFormData", "Workflow", "features", "layer", "fields", "feature", "name", "value", "init_getParentFormData", "__esmMin", "init_workflow", "evaluateExpressionFields", "inputs", "context", "feature", "promises", "field", "resolve", "reject", "getParentFormData", "e", "init_evaluateExpressionFields", "__esmMin", "init_getParentFormData", "isSameBaseGeometryType", "a", "b", "init_isSameBaseGeometryType", "__esmMin", "convertToGeometry", "features", "geometryType", "f", "type", "is3DGeometry", "removeZValueToOLFeatureGeometry", "addZValueToOLFeatureGeometry", "isSameBaseGeometryType", "isMultiGeometry", "cloned", "convertSingleMultiGeometry", "init_convertToGeometry", "__esmMin", "init_isSameBaseGeometryType", "addTableFeature", "inputs", "context", "feature", "$promisify", "init_addTableFeature", "__esmMin", "init_promisify", "getRelationFieldsFromRelation", "layerId", "relation", "isChild", "_fatherField", "_childField", "init_getRelationFieldsFromRelation", "__esmMin", "getLayersDependencyFeatures", "layerId", "opts", "service", "layer", "relations", "getRelationsInEditing", "response", "relation", "id", "getRelationId", "filterType", "options", "createEditingDataOptions", "session", "online", "ApplicationState", "toolbox", "ownField", "relationField", "getRelationFieldsFromRelation", "features", "featureValues", "field", "find", "i", "f", "promisify", "promise", "e", "init_getLayersDependencyFeatures", "__esmMin", "init_promisify", "init_getRelationFieldsFromRelation", "init_getRelationId", "init_getRelationsInEditing", "init_createEditingDataOptions", "getEditingLayerById", "layerId", "init_getEditingLayerById", "__esmMin", "getRelationsInEditingByFeature", "layerId", "relations", "feature", "service", "relationsinediting", "relationinediting", "relation", "child", "father", "relationLayerId", "layer", "fatherLayer", "ownField", "relationField", "getRelationFieldsFromRelation", "values", "field", "i", "init_getRelationsInEditingByFeature", "__esmMin", "init_getRelationFieldsFromRelation", "updateWorkflows", "Workflow", "w", "init_updateWorkflows", "__esmMin", "init_workflow", "PickFeaturesInteraction", "init_pickfeaturesinteraction", "__esmMin", "opts", "features", "featuresAtPixel", "pixel", "map", "l", "e", "getFormFields", "inputs", "context", "feature", "multi", "service", "layerId", "fields", "unique_values", "f", "field", "_value", "current_values", "values", "v", "sortNumericArray", "sortAlphabeticallyArray", "_handleMulti", "savedfeatureFnc", "init_getFormFields", "__esmMin", "arr", "a", "b", "ascending", "handleRelation1_1LayerFields", "layerId", "features", "fields", "task", "service", "promises", "CatalogLayersStoresRegistry", "relation", "resolve", "reject", "fatherField", "value", "childLayerId", "childField", "source", "childFeature", "newChild", "f", "fieldsUpdated", "name", "isNewChildFeature", "field", "init_handleRelation1_1LayerFields", "__esmMin", "VM", "init_eventbus", "__esmMin", "getRelation1_1ChildFeature", "relation", "fatherFormRelationField", "service", "fatherLayerId", "childLayerId", "childField", "locked", "feature", "f", "childFeatureStore", "unByKey", "features", "getLayersDependencyFeatures", "layer", "CatalogLayersStoresRegistry", "data", "DataRouterService", "e", "init_getRelation1_1ChildFeature", "__esmMin", "init_getLayersDependencyFeatures", "listenRelation1_1FieldChange", "layerId", "fields", "formService", "unwatches", "service", "ONE", "CatalogLayersStoresRegistry", "relation", "childLayerId", "fatherField", "relationLockFeatures", "fatherFormRelationField", "editableRelatedFatherChild", "accumulator", "field", "formField", "f", "getRelation1_1ChildFeature", "fn", "VM", "value", "e", "feature", "locked", "init_listenRelation1_1FieldChange", "__esmMin", "init_eventbus", "init_getRelation1_1ChildFeature", "getFeatureTableFieldValue", "layerId", "feature", "property", "fields", "value", "values", "f", "kv", "field", "kv_field", "init_getFeatureTableFieldValue", "__esmMin", "addRemoveToMultipleSelectFeatures", "features", "inputs", "selected", "task", "f", "selIndex", "setFeaturesSelectedStyle", "steps", "buttonnext", "init_addRemoveToMultipleSelectFeatures", "__esmMin", "init_setFeaturesSelectedStyle", "FormRelation_exports", "__export", "FormRelation_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "ProjectsRegistry", "CatalogLayersStoresRegistry", "DataRouterService", "Geometry", "t", "Layer", "Feature", "toRawType", "GUI", "FormService", "fieldsMixin", "resizeMixin", "mediaMixin", "PickFeatureInteraction", "PickCoordinatesInteraction", "color", "SELECTED_STYLES", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_FormRelation", "__esmMin", "init_workflow", "init_step", "init_cloneFeature", "init_setAndUnsetSelectedFeaturesStyle", "init_promisify", "init_getRelationFieldsFromRelation", "init_getLayersDependencyFeatures", "init_getEditingLayerById", "init_convertToGeometry", "init_addTableFeature", "init_updateWorkflows", "init_getRelationId", "init_getFeatureTableFieldValue", "init_chooseFeatureFromFeatures", "init_isSameBaseGeometryType", "init_pickfeaturesinteraction", "init_eventbus", "init_workflows", "Workflow", "Step", "OpenFormStep", "OpenTableStep", "AddFeatureStep", "ModifyGeometryVertexStep", "MoveFeatureStep", "k", "v", "table", "external", "l", "layer", "is_vector", "bool", "r", "workflow", "options", "promisify", "e", "relation", "label", "name", "value", "clientid", "newrelation", "ts", "relations", "relationLayer", "getEditingLayerById", "featureId", "property", "getFeatureTableFieldValue", "c", "tools", "tool", "relationtool", "VM", "d", "promise", "resolve", "reject", "toolId", "relationfeature", "selectStyle", "cloneFeature", "addTableFeature", "outputs", "feature", "f", "setAndUnsetSelectedFeaturesStyle", "res", "unique_fields", "p", "w", "updateWorkflows", "rf", "unwatch", "isVector", "fatherField", "fatherValue", "relationField", "getRelationFieldsFromRelation", "newFeatures", "originalFeatures", "setRelationFieldValue", "field", "newFeature", "i", "keyRelationFeatureChange", "evt", "inputs", "ownField", "accumulator", "rField", "getRelationFeatures", "getLayersDependencyFeatures", "response", "linked", "rel", "originalRelation", "rF", "dialog", "parentLayer", "pk", "father", "fields", "parent", "_", "updatedrelations", "geometryType", "isSameBaseGeometryType", "features", "type", "a", "b", "externalLayer", "self", "$promisify", "editingLayer", "addStep", "PickFeaturesInteraction", "convertToGeometry", "_feature", "chooseFeatureFromFeatures", "attr", "getRelationId", "_vm", "_h", "_c", "$event", "attribute", "$$a", "$$el", "$$c", "$$v", "$$i", "_obj", "inject", "Table_exports", "__export", "Table_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "tPlugin", "GUI", "resizeMixin", "Media_Field", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_Table", "__esmMin", "init_step", "init_workflow", "init_workflows", "init_cloneFeature", "init_getRelationsInEditing", "init_getFeatureTableFieldValue", "init_addTableFeature", "init_promisify", "Workflow", "OpenFormStep", "k", "v", "type", "cap", "key", "name", "isMedia", "i", "header", "uid", "element", "layer", "layerId", "relationinediting", "getRelationsInEditing", "resolve", "reject", "result", "f", "feature", "session", "e", "cloneFeature", "Step", "addTableFeature", "outputs", "promisify", "newFeature", "_", "getFeatureTableFieldValue", "inputs", "evt", "addindex", "value", "_vm", "_h", "_c", "$event", "inject", "G3WObject", "ApplicationState", "Geometry", "convertSingleMultiGeometry", "removeZValueToOLFeatureGeometry", "Layer", "Feature", "GUI", "Component", "FormService", "AreaInteraction", "LengthInteraction", "createMeasureTooltip", "removeMeasureTooltip", "AddFeatureStep", "ModifyGeometryVertexStep", "MoveFeatureStep", "OpenFormStep", "OpenTableStep", "PickFeatureStep", "SelectElementsStep", "init_workflows", "__esmMin", "init_evaluateExpressionFields", "init_getParentFormData", "init_setFeaturesSelectedStyle", "init_setAndUnsetSelectedFeaturesStyle", "init_getFormFields", "init_chooseFeatureFromFeatures", "init_handleRelation1_1LayerFields", "init_listenRelation1_1FieldChange", "init_getLayersDependencyFeatures", "init_getEditingLayerById", "init_setLayerUniqueFieldValues", "init_getRelationsInEditingByFeature", "init_getFeatureTableFieldValue", "init_addRemoveToMultipleSelectFeatures", "init_promisify", "init_isSameBaseGeometryType", "init_pickfeaturesinteraction", "init_workflow", "init_step", "Step", "options", "e", "inputs", "context", "$promisify", "resolve", "reject", "promise", "r", "layerId", "setAndUnsetSelectedFeaturesStyle", "originalGeometryType", "source", "attributes", "feature", "attr", "is_line", "is_poly", "newFeature", "originalFeature", "features", "f", "evaluateExpressionFields", "isGeometryChange", "bool", "Workflow", "layerName", "field", "i", "fields", "getFormFields", "getLayersDependencyFeatures", "getEditingLayerById", "formService", "getParentFormData", "w", "valid", "task", "newFeatures", "handleRelation1_1LayerFields", "promisify", "service", "k", "v", "tool", "setLayerUniqueFieldValues", "getRelationsInEditingByFeature", "relation", "relations", "listenRelation1_1FieldChange", "d", "is_parent_table", "contextService", "unwatch", "headers", "h", "excludeFields", "feat", "a", "props", "header", "getFeatureTableFieldValue", "PickFeaturesInteraction", "chain", "layer", "type", "buttonnext", "done", "interactions", "chooseFeatureFromFeatures", "addRemoveToMultipleSelectFeatures", "setFeaturesSelectedStyle", "extent", "geometryType", "session", "l", "isSameBaseGeometryType", "geometry", "s", "CopyFeaturesFromOtherLayers_exports", "__export", "CopyFeaturesFromOtherLayers_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_CopyFeaturesFromOtherLayers", "__esmMin", "l", "id", "_vm", "_h", "_c", "layer", "areCoordinatesEqual", "feature", "coordinates", "geometry", "type", "coords", "c1", "c2", "c", "i", "poly", "_coords", "init_areCoordinatesEqual", "__esmMin", "Changes_exports", "__export", "Changes_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_Changes", "__esmMin", "init_areCoordinatesEqual", "init_getFeatureTableFieldValue", "feat", "key", "getFeatureTableFieldValue", "item", "efeat", "f", "areCoordinatesEqual", "a", "b", "d", "_vm", "_h", "_c", "c", "ref", "val", "commits", "inject", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "GUI", "Layer", "getResolutionFromScale", "tPlugin", "snapInteraction", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "Toolbox_default", "init_Toolbox", "__esmMin", "title", "e", "map", "toolId", "tool", "t", "l", "toolbox", "source", "evt", "f", "editing", "d", "event", "unwatch", "features", "bool", "newTools", "oldTools", "_obj", "_vm", "_h", "_c", "$event", "$$a", "$$el", "$$c", "$$v", "$$i", "inject", "Editing_exports", "__export", "Editing_default", "__vue_normalize__", "template", "style", "script", "scope", "functional", "moduleIdentifier", "shadowMode", "createInjector", "createInjectorSSR", "createInjectorShadow", "component", "hook", "context", "originalRender", "h", "existing", "__vue_create_injector__", "styles", "isOldIE", "id", "css", "group", "code", "index", "head", "el", "textNode", "nodes", "GUI", "ApplicationState", "ApplicationService", "CatalogLayersStoresRegistry", "DataRouterService", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_component__", "init_Editing", "__esmMin", "init_Toolbox", "init_promisify", "_", "l", "layer", "Toolbox_default", "layers", "bool", "toolboxId", "toolbox", "layerId", "promisify", "e", "control", "t", "toolId", "enabled", "selected", "editor", "f", "modal", "unlock", "resolve", "reject", "changes", "promises", "layerIds", "commitItems", "canUndo", "canRedo", "n", "has_layers", "service", "is_commit", "is_selected", "owner", "setter", "key", "layerIdChanges", "inputs", "fids", "promise", "_vm", "_h", "_c", "$event", "editinglayer", "inject", "init_workflow", "init_step", "init_createEditingDataOptions", "init_setLayerUniqueFieldValues", "init_getRelationsInEditing", "init_getRelationId", "init_setAndUnsetSelectedFeaturesStyle", "init_chooseFeatureFromFeatures", "init_promisify", "chooseFeature", "inputs", "$promisify", "feature", "chooseFeatureFromFeatures", "init_cloneFeature", "init_evaluateExpressionFields", "getNotEditableFieldsNoPkValues", "layer", "feature", "fields", "field", "getDeltaXY", "x", "y", "coordinates", "coords", "_getCoordinates", "init_chooseFeatureFromFeatures", "init_convertToGeometry", "init_addTableFeature", "init_getRelationFieldsFromRelation", "init_getLayersDependencyFeatures", "init_getEditingLayerById", "init_getRelationsInEditingByFeature", "isPointOnVertex", "feature", "coordinates", "geometry", "type", "coords", "c", "poly", "init_cloneFeature", "init_evaluateExpressionFields", "Feature", "handleSplitFeature", "feature", "inputs", "context", "splittedGeometries", "newFeatures", "layer", "session", "source", "layerId", "oriFeature", "splittedGeometriesLength", "index", "splittedGeometry", "evaluateExpressionFields", "e", "newFeature", "cloneFeature", "noteditablefieldsvalues", "getNotEditableFieldsNoPkValues", "field", "value", "init_evaluateExpressionFields", "init_promisify", "addPartToMultigeometries", "inputs", "context", "$promisify", "feature", "originalFeature", "geometry", "evaluateExpressionFields", "e", "checkSessionItems", "historyId", "items", "action", "newItems", "item", "init_promisify", "init_workflow", "init_getRelationFieldsFromRelation", "init_updateWorkflows", "init_getEditingLayerById", "init_promisify", "GUI", "tPlugin", "unlinkRelation", "layerId", "relation", "relations", "index", "dialog", "$promisify", "resolve", "unlink", "id", "feature", "getEditingLayerById", "originalRelation", "getRelationFieldsFromRelation", "f", "Workflow", "updateWorkflows", "result", "splitFeature", "splitFeatures", "features", "splitfeature", "a", "f", "geometries", "init_isSameBaseGeometryType", "init_pickfeaturesinteraction", "init_workflows", "it_default", "Workflow", "OpenFormStep", "SelectElementsStep", "PickFeatureStep", "MoveFeatureStep", "ModifyGeometryVertexStep", "OpenTableStep", "AddFeatureStep", "k", "v", "GEOMETRY_TYPES", "ApplicationState", "G3WObject", "ProjectsRegistry", "DataRouterService", "CatalogLayersStoresRegistry", "Geometry", "dissolve", "removeZValueToOLFeatureGeometry", "tPlugin", "Layer", "Feature", "debounce", "toRawType", "GUI", "getScaleFromResolution", "getResolutionFromScale", "ToolBox", "_ToolBox", "layer", "dependencies", "is_vector", "geometryType", "is_point", "is_line", "is_poly", "is_table", "isMultiGeometry", "iconGeometry", "editable_relations", "relation", "getRelationId", "r", "_", "prop", "options", "$promisify", "commitItems", "capabilities", "Step", "chooseFeature", "inputs", "context", "layerId", "feature", "relations", "getRelationsInEditing", "getEditingLayerById", "f", "getRelationFieldsFromRelation", "getLayersDependencyFeatures", "getRelationsInEditingByFeature", "unlinkRelation", "editingLayer", "promise", "resolve", "reject", "result", "fields", "setAndUnsetSelectedFeaturesStyle", "e", "features", "relationLayerId", "vueInstance", "workflow", "rLayer", "setLayerUniqueFieldValues", "promisify", "layers", "catalogService", "data", "updatelayers", "checkGeometry", "type", "isSameBaseGeometryType", "l", "i", "bool", "tool", "openFormStep", "originalLayer", "attributes", "a", "session", "source", "message", "PickFeaturesInteraction", "convertToGeometry", "_feature", "chooseFeatureFromFeatures", "name", "field", "isPointOnVertex", "coordinates", "evt", "x", "y", "deltaXY", "getDeltaXY", "featuresLength", "promisesDefaultEvaluation", "cloneFeature", "evaluateExpressionFields", "promises", "status", "noteditablefieldsvalues", "getNotEditableFieldsNoPkValues", "newFeature", "value", "addPartToMultigeometries", "originaLayer", "coordinate", "originalFeature", "geometry", "geometries", "map", "pixel", "tempLayer", "found", "g", "isSplitted", "splittedGeometries", "splitFeatures", "splittedGeometriesLength", "handleSplitFeature", "index", "deleteFeature", "addTableFeature", "op", "service", "relationId", "filter", "createEditingDataOptions", "constraints", "c", "stop", "in_editing", "showZoomCursor", "control", "id", "applicationConstraint", "toolboxheader", "startstopediting", "changingtools", "tools", "unKeyLock", "handlerAfterSessionGetFeatures", "is_started", "GIVE_ME_A_NAME", "fnc", "uw", "toolbox", "ids", "items", "__esPromise", "commit", "response", "title", "toolId", "editing_constraints", "excludetools", "UPDATEONEFEATUREONLYTOOLSID", "update_tools", "enableTools", "disableTools", "toolsId", "active", "disabledtools", "enabled", "ts", "t", "messages", "activeTool", "uniqueId", "s", "state", "idx", "checkSessionItems", "checkCommitItems", "canCommit", "commitItem", "currentStateIndex", "steps", "item", "add", "_item", "newFeat", "oldFeat", "uniqueIds", "removeNotEditableProperties", "editor", "oldFeature", "is_new", "changes", "change", "tc", "itemsToCommit", "commitObj", "key", "isRelation", "sessionRelation", "lockids", "is3DGeometry", "GeoJSONFormat", "itemObj", "childs_properties", "p", "relationsId", "addRelationId", "hideSidebar", "force", "init_promisify", "ApplicationState", "G3WObject", "FeaturesStore", "Layer", "OlFeaturesStore", "opts", "features", "id", "f", "uid", "feature", "index", "i", "Editor", "options", "$promisify", "doRequest", "bbox", "is_vector", "is_cached", "promisify", "items", "reverse", "Actions", "item", "layer", "changes", "response", "relations", "clientid", "properties", "r", "source", "ToolBox", "rFeature", "ff", "lockids", "commit", "relationId", "relation", "result", "init_step", "promisify", "promise", "resolve", "reject", "Queque", "task", "reverse", "Flow", "workflow", "step", "inputs", "runMicroTasks", "outputs", "e", "d", "ChangesManager", "object", "items", "fnc", "feature", "item", "Session", "_Session", "options", "features", "promisify", "commitItems", "_", "prop", "historyId", "action", "newItems", "stateId", "i", "s", "editor", "uniqueId", "c", "layerId", "removeNotEditableProperties", "f", "newFeature", "oldFeature", "is_new", "stateIds", "ids", "relations", "id", "states", "newFeat", "oldFeat", "changes", "change", "temporarychange", "itemsToCommit", "state", "layer", "commitObj", "key", "isRelation", "sessionRelation", "lockids", "GeoJSONFormat", "itemObj", "childs_properties", "r", "editingLayer", "geometryType", "__esPromise", "commit", "response", "err", "idx", "clear", "relationStates", "index", "_state", "unsetnewids", "unsetnewid", "currentState", "currentStateIndex", "checkCommitItems", "canCommit", "commitItem", "steps", "add", "_item", "sessions", "session", "init_workflow", "Session", "Editor", "ChangesManager", "Step", "Flow", "Workflow", "en_default", "fi_default", "se_default", "fr_default", "de_default", "ro_default", "pl_default", "i18n_default", "it_default", "en_default", "fi_default", "se_default", "fr_default", "de_default", "ro_default", "pl_default", "init_workflow", "init_step", "init_promisify", "Feature", "createFeature", "layerId", "options", "feature", "toolbox", "editingLayer", "session", "init_getEditingLayerById", "init_setAndUnsetSelectedFeaturesStyle", "init_workflows", "G3W_FID", "ApplicationState", "ApplicationService", "CatalogLayersStoresRegistry", "t", "tPlugin", "Layer", "LayersStore", "Feature", "MapLayersStoreRegistry", "Plugin", "PluginService", "XHR", "noop", "GUI", "Panel", "serverErrorParser", "Geometry", "getScaleFromResolution", "getResolutionFromScale", "Workflow", "OpenFormStep", "AddFeatureStep", "ToolBox", "k", "v", "i18n_default", "layoutName", "target", "createFeature", "l", "status", "layer", "field", "type", "id", "options", "relationLayer", "has_filter", "response", "value", "key", "promisify", "feature", "features", "e", "i", "editingLayer", "fatherId", "relation", "isChildEditable", "f", "fid", "tb", "toolBox", "session", "scale", "w", "units", "map", "_layer", "source", "is_vector", "geom", "addPartTool", "op", "inputs", "context", "Step", "addPartToMultigeometries", "layerId", "event", "fnc", "subscribe", "sub", "sessionItems", "undoItems", "toolboxId", "items", "redoItems", "toolbox", "plugin", "toolboxes", "constraints", "showToolboxesExcluded", "toolboxIds", "commitpromises", "commitItems", "modal", "close", "messages", "online", "has_changes", "workflow", "dialog", "serverError", "$promisify", "resolve", "reject", "setAndUnsetSelectedFeaturesStyle", "data", "changes", "currLayerId", "current", "relationsIds", "has_relations", "GIVE_ME_A_NAME", "curr", "prev", "update", "u", "lock", "commit", "online2", "result", "n", "_rollback", "message", "action", "item", "name", "is_array", "oldVal", "newVal", "has_change", "relationSessionItems", "attributes", "attr", "stop", "cb", "a", "mode", "components", "opts", "relations", "add", "del", "getEditingLayerById", "has_features"] }