From 43ea5a1d97896bb9461ca34741d16ba8e15a9c91 Mon Sep 17 00:00:00 2001 From: ReLoia Date: Wed, 17 Jun 2026 00:11:12 +0200 Subject: [PATCH] fix: map disappearing in open data page --- app/pages/open-data.vue | 55 ++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/app/pages/open-data.vue b/app/pages/open-data.vue index d26fcda..5edc62a 100644 --- a/app/pages/open-data.vue +++ b/app/pages/open-data.vue @@ -14,7 +14,7 @@ const { data: openDataResponse, pending } = await useAsyncData( ) const visibleReports = computed(() => - (openDataResponse.value?.reports || []).filter((report) => isWithinBariBounds(report.latitude, report.longitude)) + (openDataResponse.value?.reports || []).filter((report) => isWithinBariBounds(report.latitude, report.longitude)) ) const isLastPage = computed(() => { @@ -37,9 +37,12 @@ let markers: CircleMarker[] = [] const getStatusBadge = (status: string) => { switch (status) { - case 'RESOLVED': return { class: 'bg-success', text: 'Risolto', icon: 'it-check-circle' } - case 'CLOSED': return { class: 'bg-secondary', text: 'Chiuso', icon: 'it-lock' } - default: return { class: 'bg-info', text: status, icon: 'it-info-circle' } + case 'RESOLVED': + return { class: 'bg-success', text: 'Risolto', icon: 'it-check-circle' } + case 'CLOSED': + return { class: 'bg-secondary', text: 'Chiuso', icon: 'it-lock' } + default: + return { class: 'bg-info', text: status, icon: 'it-info-circle' } } } @@ -99,8 +102,8 @@ const initMap = async () => { const L = await loadLeaflet() const bariBounds = L.latLngBounds( - [BARI_BOUNDS.south, BARI_BOUNDS.west], - [BARI_BOUNDS.north, BARI_BOUNDS.east] + [BARI_BOUNDS.south, BARI_BOUNDS.west], + [BARI_BOUNDS.north, BARI_BOUNDS.east] ) map = L.map(mapContainer.value, { @@ -119,9 +122,13 @@ const initMap = async () => { watch(currentView, async (view) => { if (view !== 'map') return await nextTick() - await initMap() - map?.invalidateSize() - await renderMapMarkers() + // Inizializza la mappa se non esiste, altrimenti aggiornane solo dimensioni e dati + if (!map) { + await initMap() + } else { + map.invalidateSize() + await renderMapMarkers() + } }) watch(visibleReports, async () => { @@ -162,7 +169,7 @@ onBeforeUnmount(() => { :class="currentView === 'grid' ? 'btn-primary' : 'btn-outline-primary'" @click="currentView = 'grid'" > - + Griglia Dati
+
Caricamento in corso...
-
+
@@ -197,8 +205,9 @@ onBeforeUnmount(() => {
- - + + {{ getStatusBadge(report.status).text }}
@@ -208,7 +217,7 @@ onBeforeUnmount(() => {

{{ report.category_name }}

- + {{ report.area_name || 'Area comunale non specificata' }}

@@ -239,7 +248,7 @@ onBeforeUnmount(() => {
-
+

Mappa pubblica delle segnalazioni nell'area di Bari.

{{ visibleReports.length }} punti @@ -274,13 +283,15 @@ onBeforeUnmount(() => { .card-wrapper { height: 100%; } + .card-bg { - border: 1px solid rgba(0,0,0,0.05); + border: 1px solid rgba(0, 0, 0, 0.05); transition: transform 0.2s ease, box-shadow 0.2s ease; } + .card-bg:hover { transform: translateY(-2px); - box-shadow: 0 4px 15px rgba(0,0,0,0.1) !important; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1) !important; } .open-data-map { @@ -296,4 +307,4 @@ onBeforeUnmount(() => { line-height: 1.4; min-width: 12rem; } - + \ No newline at end of file