@@ -30,10 +30,7 @@ export function load(contentElement, cdata, objectType, fieldPath, isMultiSelect
3030 fieldConfiguration
3131 } ;
3232 loadWFSData ( settings , cdata . geometry_ids ) . then (
33- wfsData => {
34- settings . masterportalLayerIds = getMasterportalLayerIds ( settings . fieldConfiguration , wfsData ) ;
35- renderContent ( contentElement , cdata , settings , mode , wfsData ) ;
36- } ,
33+ wfsData => renderContent ( contentElement , cdata , settings , mode , wfsData ) ,
3734 error => console . error ( error )
3835 ) ;
3936 } , error => {
@@ -116,12 +113,12 @@ function renderDetailContent(contentElement, cdata, settings, wfsData) {
116113 renderPlaceholder ( contentElement , 'empty' ) ;
117114 } else if ( settings . isMultiSelect || cdata . geometry_ids ?. length > 1 ) {
118115 renderMap (
119- contentElement , cdata , settings , false ,
120- renderViewGeometriesButton ( contentElement , settings )
116+ contentElement , cdata , settings , wfsData , false ,
117+ renderViewGeometriesButton ( contentElement , settings , wfsData )
121118 ) ;
122119 } else {
123- renderMap ( contentElement , cdata , settings , false ) ;
124- renderViewGeometryButton ( contentElement , settings , getGeometryId ( cdata ) ) ;
120+ renderMap ( contentElement , cdata , settings , wfsData , false ) ;
121+ renderViewGeometryButton ( contentElement , settings , wfsData , getGeometryId ( cdata ) ) ;
125122 }
126123}
127124
@@ -132,24 +129,24 @@ function renderEditorContent(contentElement, cdata, settings, wfsData, selectedG
132129
133130 if ( wfsData ?. totalFeatures ) {
134131 renderMap (
135- contentElement , cdata , settings ,
132+ contentElement , cdata , settings , wfsData ,
136133 settings . isMultiSelect || cdata . geometry_ids ?. length > 1
137134 ) ;
138135 }
139136
140- renderEditorButtons ( contentElement , cdata , settings , selectedGeometryId ) ;
137+ renderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) ;
141138}
142139
143- function renderEditorButtons ( contentElement , cdata , settings , selectedGeometryId ) {
140+ function renderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) {
144141 const buttons = [ ] ;
145142
146143 if ( ! selectedGeometryId ) {
147144 if ( isAddingGeometriesAllowed ( cdata , settings ) ) {
148- buttons . push ( createCreateGeometryButton ( contentElement , cdata , settings ) ) ;
145+ buttons . push ( createCreateGeometryButton ( contentElement , cdata , settings , wfsData ) ) ;
149146 buttons . push ( createLinkExistingGeometryButton ( contentElement , cdata , settings ) ) ;
150147 }
151148 } else {
152- buttons . push ( createEditGeometryButton ( contentElement , cdata , settings , selectedGeometryId ) ) ;
149+ buttons . push ( createEditGeometryButton ( contentElement , cdata , settings , wfsData , selectedGeometryId ) ) ;
153150 buttons . push ( createRemoveGeometryButton ( contentElement , cdata , settings , selectedGeometryId ) ) ;
154151 }
155152
@@ -162,9 +159,9 @@ function isAddingGeometriesAllowed(cdata, settings) {
162159 return settings . isMultiSelect || ! cdata . geometry_ids ?. length
163160}
164161
165- function renderViewGeometryButton ( contentElement , settings , geometryId ) {
162+ function renderViewGeometryButton ( contentElement , settings , wfsData , geometryId ) {
166163 const showGeometryButton = new CUI . ButtonHref ( {
167- href : getViewGeometryUrl ( settings , geometryId ) ,
164+ href : getViewGeometryUrl ( settings , wfsData , geometryId ) ,
168165 target : '_blank' ,
169166 icon_left : new CUI . Icon ( { class : 'fa-external-link' } ) ,
170167 text : $$ ( 'custom.data.type.nfis.geometry.viewGeometry' )
@@ -173,10 +170,10 @@ function renderViewGeometryButton(contentElement, settings, geometryId) {
173170 CUI . dom . append ( contentElement , showGeometryButton ) ;
174171}
175172
176- function renderViewGeometriesButton ( contentElement , settings ) {
173+ function renderViewGeometriesButton ( contentElement , settings , wfsData ) {
177174 return ( extent ) => {
178175 const showGeometryButton = new CUI . ButtonHref ( {
179- href : getViewGeometriesUrl ( settings , extent ) ,
176+ href : getViewGeometriesUrl ( settings , wfsData , extent ) ,
180177 target : '_blank' ,
181178 icon_left : new CUI . Icon ( { class : 'fa-external-link' } ) ,
182179 text : $$ ( 'custom.data.type.nfis.geometry.viewGeometry' )
@@ -186,11 +183,11 @@ function renderViewGeometriesButton(contentElement, settings) {
186183 } ;
187184}
188185
189- function createEditGeometryButton ( contentElement , cdata , settings , uuid ) {
186+ function createEditGeometryButton ( contentElement , cdata , settings , wfsData , uuid ) {
190187 return new CUI . Button ( {
191188 text : $$ ( 'custom.data.type.nfis.geometry.editGeometry' ) ,
192189 icon_left : new CUI . Icon ( { class : 'fa-pencil' } ) ,
193- onClick : ( ) => editGeometry ( contentElement , cdata , settings , uuid )
190+ onClick : ( ) => editGeometry ( contentElement , cdata , settings , wfsData , uuid )
194191 } ) ;
195192}
196193
@@ -202,11 +199,11 @@ function createRemoveGeometryButton(contentElement, cdata, settings, uuid) {
202199 } ) ;
203200}
204201
205- function createCreateGeometryButton ( contentElement , cdata , settings ) {
202+ function createCreateGeometryButton ( contentElement , cdata , settings , wfsData ) {
206203 return new CUI . Button ( {
207204 text : $$ ( 'custom.data.type.nfis.geometry.createNewGeometry' ) ,
208205 icon_left : new CUI . Icon ( { class : 'fa-plus' } ) ,
209- onClick : ( ) => createGeometry ( contentElement , cdata , settings )
206+ onClick : ( ) => createGeometry ( contentElement , cdata , settings , wfsData )
210207 } ) ;
211208}
212209
@@ -219,15 +216,15 @@ function createLinkExistingGeometryButton(contentElement, cdata, settings) {
219216 } ) ;
220217}
221218
222- function editGeometry ( contentElement , cdata , settings , uuid ) {
223- window . open ( getEditGeometryUrl ( settings , uuid ) , '_blank' ) ;
224- openEditGeometryModal ( contentElement , cdata , settings ) ;
219+ function editGeometry ( contentElement , cdata , settings , wfsData , uuid ) {
220+ window . open ( getEditGeometryUrl ( settings , wfsData , uuid ) , '_blank' ) ;
221+ openEditGeometryModal ( contentElement , cdata , settings , wfsData ) ;
225222}
226223
227- function createGeometry ( contentElement , cdata , settings ) {
224+ function createGeometry ( contentElement , cdata , settings , wfsData ) {
228225 const newGeometryId = window . crypto . randomUUID ( ) ;
229226 navigator . clipboard . writeText ( newGeometryId ) ;
230- window . open ( getCreateGeometryUrl ( settings ) , '_blank' ) ;
227+ window . open ( getCreateGeometryUrl ( settings , wfsData ) , '_blank' ) ;
231228 openCreateGeometryModal ( contentElement , cdata , settings , newGeometryId ) ;
232229} ;
233230
@@ -331,10 +328,7 @@ function reloadEditorContent(contentElement, cdata, settings) {
331328 CUI . dom . removeChildren ( contentElement ) ;
332329
333330 loadWFSData ( settings , cdata . geometry_ids ) . then (
334- wfsData => {
335- settings . masterportalLayerIds = getMasterportalLayerIds ( settings . fieldConfiguration , wfsData ) ;
336- renderContent ( contentElement , cdata , settings , 'editor' , wfsData ) ;
337- } ,
331+ wfsData => renderContent ( contentElement , cdata , settings , 'editor' , wfsData ) ,
338332 error => console . error ( error )
339333 ) ;
340334}
@@ -345,10 +339,10 @@ function applyChanges(contentElement, cdata, settings, wfsData, selectedGeometry
345339 notifyEditor ( contentElement ) ;
346340}
347341
348- function rerenderEditorButtons ( contentElement , cdata , settings , selectedGeometryId ) {
342+ function rerenderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) {
349343 const buttonsBarElement = CUI . dom . findElement ( contentElement , '.cui-buttonbar' ) ;
350344 CUI . dom . remove ( buttonsBarElement ) ;
351- renderEditorButtons ( contentElement , cdata , settings , selectedGeometryId ) ;
345+ renderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) ;
352346}
353347
354348function notifyEditor ( contentElement ) {
@@ -362,12 +356,12 @@ function notifyEditor(contentElement) {
362356 } ) ;
363357}
364358
365- function renderMap ( contentElement , cdata , settings , allowSelection , onLoad ) {
359+ function renderMap ( contentElement , cdata , settings , wfsData , allowSelection , onLoad ) {
366360 const mapElement = CUI . dom . div ( 'nfis-geometry-map' ) ;
367361 CUI . dom . append ( contentElement , mapElement ) ;
368362 CUI . dom . append ( mapElement , createLegendButton ( mapElement , settings . styleObject ) ) ;
369363
370- initializeMap ( contentElement , mapElement , cdata , settings , allowSelection , onLoad ) ;
364+ initializeMap ( contentElement , mapElement , cdata , settings , wfsData , allowSelection , onLoad ) ;
371365
372366}
373367
@@ -406,7 +400,7 @@ function toggleLegend(legendElement) {
406400 }
407401}
408402
409- function initializeMap ( contentElement , mapElement , cdata , settings , allowSelection , onLoad ) {
403+ function initializeMap ( contentElement , mapElement , cdata , settings , wfsData , allowSelection , onLoad ) {
410404 const projection = getMapProjection ( ) ;
411405 const map = new Map ( {
412406 target : mapElement ,
@@ -427,7 +421,7 @@ function initializeMap(contentElement, mapElement, cdata, settings, allowSelecti
427421
428422 configureMouseWheelZoom ( map ) ;
429423 if ( allowSelection ) {
430- configureGeometrySelection ( map , contentElement , cdata , settings ) ;
424+ configureGeometrySelection ( map , contentElement , cdata , settings , wfsData ) ;
431425 configureCursor ( map ) ;
432426 }
433427 } ) . catch ( error => console . error ( 'Failed to parse SLD data:' , error ) ) ;
@@ -542,7 +536,7 @@ function configureMouseWheelZoom(map) {
542536 } ) ;
543537}
544538
545- function configureGeometrySelection ( map , contentElement , cdata , settings ) {
539+ function configureGeometrySelection ( map , contentElement , cdata , settings , wfsData ) {
546540 const select = new Select ( {
547541 condition : click ,
548542 style : new Style ( {
@@ -561,7 +555,7 @@ function configureGeometrySelection(map, contentElement, cdata, settings) {
561555 const selectedGeometryId = event . selected . length > 0
562556 ? event . selected [ 0 ] . get ( 'ouuid' )
563557 : undefined ;
564- rerenderEditorButtons ( contentElement , cdata , settings , selectedGeometryId ) ;
558+ rerenderEditorButtons ( contentElement , cdata , settings , wfsData , selectedGeometryId ) ;
565559 } ) ;
566560}
567561
@@ -573,27 +567,63 @@ function configureCursor(map) {
573567 } ) ;
574568}
575569
576- function getMasterportalLayerIds ( fieldConfiguration , wfsData ) {
570+ function getViewGeometryUrl ( settings , wfsData , geometryId ) {
571+ const masterportalUrl = getBaseConfiguration ( ) . masterportal_url ;
572+ const layerIds = getMasterportalLayerIds ( settings . fieldConfiguration , wfsData ) ;
573+ if ( ! masterportalUrl || ! layerIds . length ) return '' ;
574+
575+ return masterportalUrl + '?zoomToGeometry=' + geometryId + '&layerids=' + layerIds . join ( ',' )
576+ }
577+
578+ function getViewGeometriesUrl ( settings , wfsData , extent ) {
579+ const masterportalUrl = getBaseConfiguration ( ) . masterportal_url ;
580+ const layerIds = getMasterportalLayerIds ( settings . fieldConfiguration , wfsData ) ;
581+ if ( ! masterportalUrl || ! layerIds . length ) return '' ;
582+
583+ return masterportalUrl + '?zoomToExtent=' + extent . join ( ',' ) + '&layerids=' + layerIds . join ( ',' )
584+ }
585+
586+ function getEditGeometryUrl ( settings , wfsData , geometryId ) {
587+ const masterportalUrl = getBaseConfiguration ( ) . masterportal_url ;
588+ const layerIds = getMasterportalLayerIds ( settings . fieldConfiguration , wfsData ) ;
589+ if ( ! masterportalUrl || ! layerIds . length ) return '' ;
590+
591+ return masterportalUrl + '?zoomToGeometry=' + geometryId + '&isinitopen=wfst' + '&layerids=' + layerIds . join ( ',' )
592+ }
593+
594+ function getCreateGeometryUrl ( settings , wfsData ) {
595+ const masterportalUrl = getBaseConfiguration ( ) . masterportal_url ;
596+ const layerIds = getMasterportalLayerIds ( settings . fieldConfiguration , wfsData , true ) ;
597+ if ( ! masterportalUrl || ! layerIds . length ) return '' ;
598+
599+ return masterportalUrl + '?isinitopen=wfst&layerids=' + layerIds . join ( ',' )
600+ }
601+
602+ function getMasterportalLayerIds ( fieldConfiguration , wfsData , includeAll = false ) {
577603 const rasterLayerId = fieldConfiguration . masterportal_raster_layer_id ;
578- const vectorLayerIds = getMasterportalVectorLayerIds ( fieldConfiguration , wfsData ) ;
604+ const vectorLayerIds = getMasterportalVectorLayerIds ( fieldConfiguration , wfsData , includeAll ) ;
579605
580606 return rasterLayerId
581607 ? [ rasterLayerId ] . concat ( vectorLayerIds )
582608 : vectorLayerIds ;
583609}
584610
585- function getMasterportalVectorLayerIds ( fieldConfiguration , wfsData ) {
611+ function getMasterportalVectorLayerIds ( fieldConfiguration , wfsData , includeAll ) {
586612 const fieldName = fieldConfiguration . masterportal_vector_layer_field_name ;
587613 const mapping = fieldConfiguration . masterportal_vector_layer_ids ;
588614
589615 let result ;
590616 if ( fieldName && mapping && wfsData ) {
591- result = wfsData . features . map ( feature => feature . properties [ fieldName ] )
592- . reduce ( ( result , value ) => {
593- const layerId = mapping . find ( entry => entry . field_value === value ) ?. layer_id ;
594- if ( layerId && ! result . includes ( layerId ) ) result . push ( layerId ) ;
595- return result ;
596- } , [ ] ) ;
617+ if ( includeAll ) {
618+ result = fieldConfiguration . masterportal_vector_layer_ids . map ( entry => entry . layer_id ) ;
619+ } else {
620+ result = wfsData . features . map ( feature => feature . properties [ fieldName ] )
621+ . reduce ( ( result , value ) => {
622+ const layerId = mapping . find ( entry => entry . field_value === value ) ?. layer_id ;
623+ if ( layerId && ! result . includes ( layerId ) ) result . push ( layerId ) ;
624+ return result ;
625+ } , [ ] ) ;
626+ }
597627 }
598628
599629 if ( result ?. length ) {
@@ -604,38 +634,6 @@ function getMasterportalVectorLayerIds(fieldConfiguration, wfsData) {
604634 }
605635}
606636
607- function getViewGeometryUrl ( settings , geometryId ) {
608- const masterportalUrl = getBaseConfiguration ( ) . masterportal_url ;
609- if ( ! masterportalUrl || ! settings . masterportalLayerIds ?. length ) return '' ;
610-
611- return masterportalUrl + '?zoomToGeometry=' + geometryId + getLayersUrlParameter ( settings ) ;
612- }
613-
614- function getViewGeometriesUrl ( settings , extent ) {
615- const masterportalUrl = getBaseConfiguration ( ) . masterportal_url ;
616- if ( ! masterportalUrl || ! settings . masterportalLayerIds ?. length ) return '' ;
617-
618- return masterportalUrl + '?zoomToExtent=' + extent . join ( ',' ) + getLayersUrlParameter ( settings ) ;
619- }
620-
621- function getEditGeometryUrl ( settings , geometryId ) {
622- const masterportalUrl = getBaseConfiguration ( ) . masterportal_url ;
623- if ( ! masterportalUrl || ! settings . masterportalLayerIds ?. length ) return '' ;
624-
625- return masterportalUrl + '?zoomToGeometry=' + geometryId + '&isinitopen=wfst' + getLayersUrlParameter ( settings ) ;
626- }
627-
628- function getCreateGeometryUrl ( settings ) {
629- const masterportalUrl = getBaseConfiguration ( ) . masterportal_url ;
630- if ( ! masterportalUrl || ! settings . masterportalLayerIds ?. length ) return '' ;
631-
632- return masterportalUrl + '?isinitopen=wfst' + getLayersUrlParameter ( settings ) ;
633- }
634-
635- function getLayersUrlParameter ( settings ) {
636- return '&layerids=' + settings . masterportalLayerIds . join ( ',' ) ;
637- }
638-
639637function getWfsUrl ( settings , geometryIds ) {
640638 let baseUrl = settings . fieldConfiguration . display_wfs_url ;
641639 const featureType = settings . fieldConfiguration . display_wfs_feature_type ;
0 commit comments