Skip to content

Commit 0e9df2b

Browse files
committed
Include all configured layer IDs in create geometry URL
1 parent e88bff3 commit 0e9df2b

1 file changed

Lines changed: 77 additions & 79 deletions

File tree

src/webfrontend/js/contentLoader.js

Lines changed: 77 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -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

354348
function 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-
639637
function getWfsUrl(settings, geometryIds) {
640638
let baseUrl = settings.fieldConfiguration.display_wfs_url;
641639
const featureType = settings.fieldConfiguration.display_wfs_feature_type;

0 commit comments

Comments
 (0)