@@ -127,37 +127,40 @@ function renderEditorContent(contentElement, cdata, settings, wfsData, selectedG
127127 if ( wfsData ?. totalFeatures ) {
128128 renderMap (
129129 contentElement , cdata , settings , wfsData ,
130- settings . isMultiSelect || cdata . geometry_ids ?. length > 1
130+ settings . isMultiSelect || cdata . geometry_ids ?. length > 1 ,
131+ renderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId )
131132 ) ;
133+ } else {
134+ renderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) ( undefined ) ;
132135 }
133-
134- renderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) ;
135136}
136137
137138function renderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) {
138- const buttons = [ ] ;
139+ return extent => {
140+ const buttons = [ ] ;
139141
140- if ( ! selectedGeometryId ) {
141- if ( isAddingGeometriesAllowed ( cdata , settings ) ) {
142- buttons . push ( createCreateGeometryButton ( contentElement , cdata , settings , wfsData ) ) ;
143- buttons . push ( createLinkExistingGeometryButton ( contentElement , cdata , settings ) ) ;
142+ if ( ! selectedGeometryId ) {
143+ if ( isAddingGeometriesAllowed ( cdata , settings ) ) {
144+ buttons . push ( createCreateGeometryButton ( contentElement , cdata , settings , wfsData , extent ) ) ;
145+ buttons . push ( createLinkExistingGeometryButton ( contentElement , cdata , settings ) ) ;
146+ }
147+ } else {
148+ buttons . push ( createEditGeometryButton ( contentElement , cdata , settings , wfsData , selectedGeometryId ) ) ;
149+ buttons . push ( createRemoveGeometryButton ( contentElement , cdata , settings , selectedGeometryId ) ) ;
144150 }
145- } else {
146- buttons . push ( createEditGeometryButton ( contentElement , cdata , settings , wfsData , selectedGeometryId ) ) ;
147- buttons . push ( createRemoveGeometryButton ( contentElement , cdata , settings , selectedGeometryId ) ) ;
148- }
149151
150- const buttonBarElement = new CUI . Buttonbar ( { buttons : buttons } ) ;
152+ const buttonBarElement = new CUI . Buttonbar ( { buttons : buttons } ) ;
151153
152- CUI . dom . append ( contentElement , buttonBarElement ) ;
154+ CUI . dom . append ( contentElement , buttonBarElement ) ;
155+ }
153156}
154157
155158function isAddingGeometriesAllowed ( cdata , settings ) {
156159 return settings . isMultiSelect || ! cdata . geometry_ids ?. length
157160}
158161
159162function renderViewGeometriesButton ( contentElement , settings , wfsData ) {
160- return ( extent ) => {
163+ return extent => {
161164 const showGeometryButton = new CUI . ButtonHref ( {
162165 href : getViewGeometriesUrl ( settings , wfsData , extent ) ,
163166 target : '_blank' ,
@@ -185,11 +188,11 @@ function createRemoveGeometryButton(contentElement, cdata, settings, uuid) {
185188 } ) ;
186189}
187190
188- function createCreateGeometryButton ( contentElement , cdata , settings , wfsData ) {
191+ function createCreateGeometryButton ( contentElement , cdata , settings , wfsData , extent ) {
189192 return new CUI . Button ( {
190193 text : $$ ( 'custom.data.type.nfis.geometry.createNewGeometry' ) ,
191194 icon_left : new CUI . Icon ( { class : 'fa-plus' } ) ,
192- onClick : ( ) => createGeometry ( contentElement , cdata , settings , wfsData )
195+ onClick : ( ) => createGeometry ( contentElement , cdata , settings , wfsData , extent )
193196 } ) ;
194197}
195198
@@ -210,10 +213,10 @@ function editGeometry(contentElement, cdata, settings, wfsData, uuid) {
210213 openEditGeometryModal ( contentElement , cdata , settings , wfsData ) ;
211214}
212215
213- function createGeometry ( contentElement , cdata , settings , wfsData ) {
216+ function createGeometry ( contentElement , cdata , settings , wfsData , extent ) {
214217 const newGeometryId = window . crypto . randomUUID ( ) ;
215218 navigator . clipboard . writeText ( newGeometryId ) ;
216- window . open ( getCreateGeometryUrl ( settings , wfsData ) , '_blank' ) ;
219+ window . open ( getEditGeometryUrl ( settings , wfsData , extent ) , '_blank' ) ;
217220 openCreateGeometryModal ( contentElement , cdata , settings , newGeometryId ) ;
218221} ;
219222
@@ -328,10 +331,10 @@ function applyChanges(contentElement, cdata, settings, wfsData, selectedGeometry
328331 notifyEditor ( contentElement ) ;
329332}
330333
331- function rerenderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) {
334+ function rerenderEditorButtons ( contentElement , cdata , settings , wfsData , extent , selectedGeometryId ) {
332335 const buttonsBarElement = CUI . dom . findElement ( contentElement , '.cui-buttonbar' ) ;
333336 CUI . dom . remove ( buttonsBarElement ) ;
334- renderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) ;
337+ renderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) ( extent ) ;
335338}
336339
337340function notifyEditor ( contentElement ) {
@@ -403,16 +406,21 @@ function initializeMap(contentElement, mapElement, cdata, settings, wfsData, all
403406 } ) ;
404407
405408 getVectorStyle ( settings . styleObject ) . then ( vectorStyle => {
406- map . setLayers ( [
407- getRasterLayer ( projection ) ,
408- getVectorLayer ( map , cdata . geometry_ids , settings , vectorStyle , onLoad )
409- ] ) ;
409+ const rasterLayer = getRasterLayer ( projection ) ;
410+ const vectorLayer = getVectorLayer ( cdata . geometry_ids , settings , vectorStyle ) ;
411+ map . setLayers ( [ rasterLayer , vectorLayer ] ) ;
412+
413+ vectorLayer . getSource ( ) . on ( 'featuresloadend' , ( ) => {
414+ const extent = vectorLayer . getSource ( ) . getExtent ( ) ;
415+ map . getView ( ) . fit ( extent , { padding : [ 20 , 20 , 20 , 20 ] } ) ;
416+ if ( onLoad ) onLoad ( extent ) ;
410417
411- configureMouseWheelZoom ( map ) ;
412- if ( allowSelection ) {
413- configureGeometrySelection ( map , contentElement , cdata , settings , wfsData ) ;
414- configureCursor ( map ) ;
415- }
418+ configureMouseWheelZoom ( map ) ;
419+ if ( allowSelection ) {
420+ configureGeometrySelection ( map , contentElement , cdata , settings , wfsData , extent ) ;
421+ configureCursor ( map ) ;
422+ }
423+ } ) ;
416424 } ) . catch ( error => console . error ( 'Failed to parse SLD data:' , error ) ) ;
417425}
418426
@@ -467,16 +475,10 @@ function getRasterSource(projection) {
467475 } ) ;
468476}
469477
470- function getVectorLayer ( map , geometryIds , settings , style , onLoad ) {
478+ function getVectorLayer ( geometryIds , settings , style ) {
471479 const wfsUrl = getWfsUrl ( settings , geometryIds ) ;
472480 const authorizationString = getAuthorizationString ( ) ;
473- const vectorSource = getVectorSource ( wfsUrl , authorizationString , onLoad ) ;
474-
475- vectorSource . on ( 'featuresloadend' , ( ) => {
476- const extent = vectorSource . getExtent ( ) ;
477- map . getView ( ) . fit ( extent , { padding : [ 20 , 20 , 20 , 20 ] } ) ;
478- if ( onLoad ) onLoad ( extent ) ;
479- } ) ;
481+ const vectorSource = getVectorSource ( wfsUrl , authorizationString ) ;
480482
481483 return new VectorLayer ( {
482484 source : vectorSource ,
@@ -525,7 +527,7 @@ function configureMouseWheelZoom(map) {
525527 } ) ;
526528}
527529
528- function configureGeometrySelection ( map , contentElement , cdata , settings , wfsData ) {
530+ function configureGeometrySelection ( map , contentElement , cdata , settings , wfsData , extent ) {
529531 const select = new Select ( {
530532 condition : click ,
531533 style : new Style ( {
@@ -544,7 +546,7 @@ function configureGeometrySelection(map, contentElement, cdata, settings, wfsDat
544546 const selectedGeometryId = event . selected . length > 0
545547 ? event . selected [ 0 ] . get ( 'ouuid' )
546548 : undefined ;
547- rerenderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) ;
549+ rerenderEditorButtons ( contentElement , cdata , settings , wfsData , extent , selectedGeometryId ) ;
548550 } ) ;
549551}
550552
@@ -569,15 +571,9 @@ function getEditGeometryUrl(settings, wfsData, extent) {
569571 const layerIds = getMasterportalLayerIds ( settings . fieldConfiguration , wfsData ) ;
570572 if ( ! masterportalUrl || ! layerIds . length ) return '' ;
571573
572- return masterportalUrl + '?zoomToExtent=' + extent . join ( ',' ) + '&isinitopen=wfst' + '&layerids=' + layerIds . join ( ',' ) ;
573- }
574-
575- function getCreateGeometryUrl ( settings , wfsData ) {
576- const masterportalUrl = getBaseConfiguration ( ) . masterportal_url ;
577- const layerIds = getMasterportalLayerIds ( settings . fieldConfiguration , wfsData , true ) ;
578- if ( ! masterportalUrl || ! layerIds . length ) return '' ;
579-
580- return masterportalUrl + '?isinitopen=wfst&layerids=' + layerIds . join ( ',' )
574+ let url = masterportalUrl + '?' ;
575+ if ( extent ) url += 'zoomToExtent=' + extent . join ( ',' ) + '&' ;
576+ return url + 'isinitopen=wfst&layerids=' + layerIds . join ( ',' ) ;
581577}
582578
583579function getMasterportalLayerIds ( fieldConfiguration , wfsData , includeAll = false ) {
0 commit comments