diff --git a/apps/client/src/widgets/type_widgets/geo_map.ts b/apps/client/src/widgets/type_widgets/geo_map.ts index 7f2b3e52a..22022878f 100644 --- a/apps/client/src/widgets/type_widgets/geo_map.ts +++ b/apps/client/src/widgets/type_widgets/geo_map.ts @@ -78,15 +78,9 @@ const TPL = /*html*/`\ const LOCATION_ATTRIBUTE = "geolocation"; const CHILD_NOTE_ICON = "bx bx-pin"; -const DEFAULT_COORDINATES: [number, number] = [3.878638227135724, 446.6630455551659]; -const DEFAULT_ZOOM = 2; -interface MapData { - view?: { - center?: LatLng | [number, number]; - zoom?: number; - }; -} + + // TODO: Deduplicate interface CreateChildResponse { @@ -139,8 +133,6 @@ export default class GeoMapTypeWidget extends TypeWidget { throw new Error(t("geo-map.unable-to-load-map")); } - this.#restoreViewportAndZoom(); - // Restore markers. await this.#reloadMarkers(); @@ -165,24 +157,6 @@ export default class GeoMapTypeWidget extends TypeWidget { } } - async #restoreViewportAndZoom() { - const map = this.geoMapWidget.map; - if (!map || !this.note) { - return; - } - const blob = await this.note.getBlob(); - - let parsedContent: MapData = {}; - if (blob && blob.content) { - parsedContent = JSON.parse(blob.content); - } - - // Restore viewport position & zoom - const center = parsedContent.view?.center ?? DEFAULT_COORDINATES; - const zoom = parsedContent.view?.zoom ?? DEFAULT_ZOOM; - map.setView(center, zoom); - } - async #reloadMarkers() { if (!this.note) { return; @@ -384,7 +358,7 @@ export default class GeoMapTypeWidget extends TypeWidget { async doRefresh(note: FNote) { await this.geoMapWidget.refresh(); - this.#restoreViewportAndZoom(); + // this.#restoreViewportAndZoom(); await this.#reloadMarkers(); } diff --git a/apps/client/src/widgets/view_widgets/geo_view/index.ts b/apps/client/src/widgets/view_widgets/geo_view/index.ts index faf4c3814..a7c3ad77c 100644 --- a/apps/client/src/widgets/view_widgets/geo_view/index.ts +++ b/apps/client/src/widgets/view_widgets/geo_view/index.ts @@ -1,5 +1,6 @@ import ViewMode, { ViewModeArgs } from "../view_mode.js"; import L from "leaflet"; +import type { LatLng, Map } from "leaflet"; const TPL = /*html*/`
@@ -19,11 +20,21 @@ const TPL = /*html*/`
`; -export default class GeoView extends ViewMode<{}> { +interface MapData { + view?: { + center?: LatLng | [number, number]; + zoom?: number; + }; +} + +const DEFAULT_COORDINATES: [number, number] = [3.878638227135724, 446.6630455551659]; +const DEFAULT_ZOOM = 2; + +export default class GeoView extends ViewMode { private $root: JQuery; private $container!: JQuery; - private map?: L.Map; + private map?: Map; constructor(args: ViewModeArgs) { super(args, "geoMap"); @@ -47,6 +58,26 @@ export default class GeoView extends ViewMode<{}> { }).addTo(map); this.map = map; + + this.#onMapInitialized(); + } + + async #onMapInitialized() { + this.#restoreViewportAndZoom(); + } + + async #restoreViewportAndZoom() { + const map = this.map; + if (!map) { + return; + } + + const parsedContent = await this.viewStorage.restore(); + + // Restore viewport position & zoom + const center = parsedContent?.view?.center ?? DEFAULT_COORDINATES; + const zoom = parsedContent?.view?.zoom ?? DEFAULT_ZOOM; + map.setView(center, zoom); } get isFullHeight(): boolean { diff --git a/apps/client/src/widgets/view_widgets/view_mode.ts b/apps/client/src/widgets/view_widgets/view_mode.ts index 350b84dcb..d8c4314eb 100644 --- a/apps/client/src/widgets/view_widgets/view_mode.ts +++ b/apps/client/src/widgets/view_widgets/view_mode.ts @@ -49,7 +49,7 @@ export default abstract class ViewMode extends Component { return this._viewStorage; } - this._viewStorage = new ViewModeStorage(this.parentNote, this.viewType); + this._viewStorage = new ViewModeStorage(this.parentNote, this.viewType); return this._viewStorage; } diff --git a/apps/client/src/widgets/view_widgets/view_mode_storage.ts b/apps/client/src/widgets/view_widgets/view_mode_storage.ts index 750e9d9b0..7b11f53f4 100644 --- a/apps/client/src/widgets/view_widgets/view_mode_storage.ts +++ b/apps/client/src/widgets/view_widgets/view_mode_storage.ts @@ -38,6 +38,6 @@ export default class ViewModeStorage { } const attachmentData = await server.get<{ content: string } | null>(`attachments/${attachment.attachmentId}/blob`); - return JSON.parse(attachmentData?.content ?? "{}"); + return JSON.parse(attachmentData?.content ?? "{}") as T; } }