From 16caae191e814f3491a0e50c74e88e0b2bc193b7 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 17 Feb 2025 21:59:02 +0200 Subject: [PATCH] fix(geomap): stuck viewport and zoom when switching between two geomaps --- .../app/widgets/type_widgets/geo_map.ts | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/public/app/widgets/type_widgets/geo_map.ts b/src/public/app/widgets/type_widgets/geo_map.ts index 11de0b2b3..1c1a72e35 100644 --- a/src/public/app/widgets/type_widgets/geo_map.ts +++ b/src/public/app/widgets/type_widgets/geo_map.ts @@ -135,10 +135,22 @@ export default class GeoMapTypeWidget extends TypeWidget { throw new Error(t("geo-map.unable-to-load-map")); } - if (!this.note) { + this.#restoreViewportAndZoom(); + + // Restore markers. + await this.#reloadMarkers(); + + const updateFn = () => this.spacedUpdate.scheduleUpdate(); + map.on("moveend", updateFn); + map.on("zoomend", updateFn); + map.on("click", (e) => this.#onMapClicked(e)); + } + + async #restoreViewportAndZoom() { + const map = this.geoMapWidget.map; + if (!map || !this.note) { return; } - const blob = await this.note.getBlob(); let parsedContent: MapData = {}; @@ -150,14 +162,6 @@ export default class GeoMapTypeWidget extends TypeWidget { const center = parsedContent.view?.center ?? DEFAULT_COORDINATES; const zoom = parsedContent.view?.zoom ?? DEFAULT_ZOOM; map.setView(center, zoom); - - // Restore markers. - await this.#reloadMarkers(); - - const updateFn = () => this.spacedUpdate.scheduleUpdate(); - map.on("moveend", updateFn); - map.on("zoomend", updateFn); - map.on("click", (e) => this.#onMapClicked(e)); } async #reloadMarkers() { @@ -343,6 +347,7 @@ export default class GeoMapTypeWidget extends TypeWidget { async doRefresh(note: FNote) { await this.geoMapWidget.refresh(); + this.#restoreViewportAndZoom(); await this.#reloadMarkers(); }