From 696d4b0ae309a87c1fa315293a2bc9ad1ce95cfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Wed, 21 Jan 2026 11:22:46 +0700 Subject: [PATCH] Store current map view, use on launch/reload --- app/components/map.gjs | 44 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/app/components/map.gjs b/app/components/map.gjs index e393541..eb365c4 100644 --- a/app/components/map.gjs +++ b/app/components/map.gjs @@ -57,9 +57,33 @@ export default class MapComponent extends Component { zIndex: 10, // Ensure it sits above the map tiles }); + + // Default view settings + let center = [99.05738, 7.55087]; + let zoom = 13.0; + + // Try to restore from localStorage + try { + const storedView = localStorage.getItem('marco:map-view'); + if (storedView) { + const parsed = JSON.parse(storedView); + if ( + parsed.center && + Array.isArray(parsed.center) && + parsed.center.length === 2 && + typeof parsed.zoom === 'number' + ) { + center = parsed.center; + zoom = parsed.zoom; + } + } + } catch (e) { + console.warn('Failed to restore map view:', e); + } + const view = new View({ - center: fromLonLat([99.05738, 7.55087]), - zoom: 13.0, + center: fromLonLat(center), + zoom: zoom, projection: 'EPSG:3857', }); @@ -341,6 +365,22 @@ export default class MapComponent extends Component { const bbox = { minLat, minLon, maxLat, maxLon }; await this.storage.loadPlacesInBounds(bbox); this.loadBookmarks(this.storage.savedPlaces); + + // Persist view to localStorage + try { + const view = this.mapInstance.getView(); + const currentCenter = toLonLat(view.getCenter()); + const currentZoom = view.getZoom(); + + const viewState = { + center: currentCenter, + zoom: currentZoom + }; + + localStorage.setItem('marco:map-view', JSON.stringify(viewState)); + } catch (e) { + console.warn('Failed to save map view:', e); + } }; handleMapClick = async (event) => {