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) {