chore(views/geomap): reintroduce map init

This commit is contained in:
Elian Doran 2025-07-06 11:36:59 +03:00
parent cd742a4617
commit 6a5bb1f5c8
No known key found for this signature in database
4 changed files with 38 additions and 33 deletions

View File

@ -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();
}

View File

@ -1,5 +1,6 @@
import ViewMode, { ViewModeArgs } from "../view_mode.js";
import L from "leaflet";
import type { LatLng, Map } from "leaflet";
const TPL = /*html*/`
<div class="geo-view">
@ -19,11 +20,21 @@ const TPL = /*html*/`
<div class="geo-map-container"></div>
</div>`;
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<MapData> {
private $root: JQuery<HTMLElement>;
private $container!: JQuery<HTMLElement>;
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 {

View File

@ -49,7 +49,7 @@ export default abstract class ViewMode<T extends object> extends Component {
return this._viewStorage;
}
this._viewStorage = new ViewModeStorage(this.parentNote, this.viewType);
this._viewStorage = new ViewModeStorage<T>(this.parentNote, this.viewType);
return this._viewStorage;
}

View File

@ -38,6 +38,6 @@ export default class ViewModeStorage<T extends object> {
}
const attachmentData = await server.get<{ content: string } | null>(`attachments/${attachment.attachmentId}/blob`);
return JSON.parse(attachmentData?.content ?? "{}");
return JSON.parse(attachmentData?.content ?? "{}") as T;
}
}