Skip to content

Commit 23137a1

Browse files
committed
Zoom to previously created geometries in Masterportal when creating new geometry
1 parent b3b42fa commit 23137a1

1 file changed

Lines changed: 45 additions & 49 deletions

File tree

src/webfrontend/js/contentLoader.js

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

137138
function 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

155158
function isAddingGeometriesAllowed(cdata, settings) {
156159
return settings.isMultiSelect || !cdata.geometry_ids?.length
157160
}
158161

159162
function 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

337340
function 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

583579
function getMasterportalLayerIds(fieldConfiguration, wfsData, includeAll = false) {

0 commit comments

Comments
 (0)