diff --git a/Components/Pages/Home.razor b/Components/Pages/Home.razor
index fe7b920..daa71f0 100644
--- a/Components/Pages/Home.razor
+++ b/Components/Pages/Home.razor
@@ -713,6 +713,10 @@
private async Task ToggleLayerPanel()
{
LayerPanelOpen = !LayerPanelOpen;
+ if (!LayerPanelOpen)
+ {
+ await JS.InvokeVoidAsync("lmeMap.clearLayerManagerSelection");
+ }
if (LayerPanelOpen)
{
ActiveTab = "map";
diff --git a/LMEMappeCatastaliApp.csproj b/LMEMappeCatastaliApp.csproj
index 3c823c8..1fa40ab 100644
--- a/LMEMappeCatastaliApp.csproj
+++ b/LMEMappeCatastaliApp.csproj
@@ -28,8 +28,8 @@
com.companyname.lmemappecatastaliapp
- 0.2.19
- 23
+ 0.2.20
+ 24
None
diff --git a/Services/AzureMapsService.cs b/Services/AzureMapsService.cs
index 734efb2..75e79ba 100644
--- a/Services/AzureMapsService.cs
+++ b/Services/AzureMapsService.cs
@@ -13,7 +13,7 @@ public sealed class AzureMapsService
public AzureMapsService()
{
- _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.19");
+ _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.20");
_httpClient.DefaultRequestHeaders.Accept.ParseAdd("application/json");
}
diff --git a/Services/NetworkLocationService.cs b/Services/NetworkLocationService.cs
index c789f6f..5512e8b 100644
--- a/Services/NetworkLocationService.cs
+++ b/Services/NetworkLocationService.cs
@@ -13,7 +13,7 @@ public sealed class NetworkLocationService
public NetworkLocationService()
{
- httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.19");
+ httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.20");
}
public async Task GetApproximateLocationAsync(
diff --git a/wwwroot/css/app.css b/wwwroot/css/app.css
index 65f06da..9ef72b4 100644
--- a/wwwroot/css/app.css
+++ b/wwwroot/css/app.css
@@ -354,6 +354,11 @@ input[type="checkbox"] {
outline: 2px solid #2563eb;
}
+.layer-manager-object-selected > summary {
+ background: #fff0fb;
+ box-shadow: inset 3px 0 #ff00d4;
+}
+
.gps-overlay {
position: absolute;
top: 72px;
diff --git a/wwwroot/js/lme-map.js b/wwwroot/js/lme-map.js
index 0ac3f42..ce51c4a 100644
--- a/wwwroot/js/lme-map.js
+++ b/wwwroot/js/lme-map.js
@@ -51,6 +51,7 @@ const lmeState = {
managerHighlight: null,
managerHighlightedObjectId: null,
managerHighlightedCategoryKey: null,
+ managerOutsideSelectionBound: false,
managerHiddenObjects: new Map(),
managerHiddenObjectIds: new Set(),
managerHiddenCategories: new Set(),
@@ -78,6 +79,7 @@ window.lmeMap = {
setImportedSheetLayerVisible,
setLayerOrder,
refreshLayerManager,
+ clearLayerManagerSelection: clearManagerHighlight,
setImportedMeasurementsVisible,
setDrawingMeasurementsVisible,
addProjectMarker,
@@ -190,6 +192,7 @@ function init() {
}
lmeState.map.on("click", async event => {
+ clearManagerHighlight();
const info = await queryFeatureInfo(event.latlng);
if (info) {
L.popup().setLatLng(event.latlng).setContent(info).openOn(lmeState.map);
@@ -211,6 +214,19 @@ function init() {
closeCadastrePreview();
}
});
+ if (!lmeState.managerOutsideSelectionBound) {
+ document.addEventListener("pointerdown", event => {
+ if (!lmeState.managerHighlightedObjectId) {
+ return;
+ }
+ const selectedRow = event.target?.closest?.(".layer-manager-object");
+ if (selectedRow?.dataset.objectId === lmeState.managerHighlightedObjectId) {
+ return;
+ }
+ clearManagerHighlight();
+ });
+ lmeState.managerOutsideSelectionBound = true;
+ }
setInfo("Mappa pronta: satellite + catasto AdE");
}
@@ -1239,6 +1255,9 @@ function renderLayerManagerBlock(category, source, records) {
function renderLayerManagerObject(record, index) {
const object = document.createElement("details");
object.className = "layer-manager-object";
+ if (record.id === lmeState.managerHighlightedObjectId) {
+ object.classList.add("layer-manager-object-selected");
+ }
object.dataset.dragType = "object";
object.dataset.objectId = record.id;
const visible = !lmeState.managerHiddenObjectIds.has(record.id);
@@ -1343,9 +1362,16 @@ function managedCategoryEnabled(categoryKey) {
}
function highlightManagedObject(record) {
- lmeState.managerHighlight.clearLayers();
+ if (lmeState.managerHighlightedObjectId === record.id) {
+ clearManagerHighlight();
+ return;
+ }
+ clearManagerHighlight();
lmeState.managerHighlightedObjectId = record.id;
lmeState.managerHighlightedCategoryKey = record.categoryKey;
+ document.querySelectorAll(".layer-manager-object").forEach(row => {
+ row.classList.toggle("layer-manager-object-selected", row.dataset.objectId === record.id);
+ });
const geojson = record.layer.toGeoJSON?.();
if (geojson) {
L.geoJSON(geojson, {
@@ -1370,6 +1396,9 @@ function clearManagerHighlight() {
lmeState.managerHighlight?.clearLayers();
lmeState.managerHighlightedObjectId = null;
lmeState.managerHighlightedCategoryKey = null;
+ document.querySelectorAll(".layer-manager-object-selected").forEach(row => {
+ row.classList.remove("layer-manager-object-selected");
+ });
}
function layerManagerMoveButtons(label) {