chore(views/geomap): reintroduce viewport storage

This commit is contained in:
Elian Doran 2025-07-06 11:47:37 +03:00
parent 6a5bb1f5c8
commit b8d41b3421
No known key found for this signature in database
2 changed files with 44 additions and 42 deletions

View File

@ -127,34 +127,25 @@ export default class GeoMapTypeWidget extends TypeWidget {
}
async #onMapInitialized(L: Leaflet) {
this.L = L;
const map = this.geoMapWidget.map;
if (!map) {
throw new Error(t("geo-map.unable-to-load-map"));
}
// this.L = L;
// Restore markers.
await this.#reloadMarkers();
// // Restore markers.
// await this.#reloadMarkers();
// This fixes an issue with the map appearing cut off at the beginning, due to the container not being properly attached
setTimeout(() => {
map.invalidateSize();
}, 100);
// // This fixes an issue with the map appearing cut off at the beginning, due to the container not being properly attached
// setTimeout(() => {
// map.invalidateSize();
// }, 100);
const updateFn = () => this.spacedUpdate.scheduleUpdate();
map.on("moveend", updateFn);
map.on("zoomend", updateFn);
map.on("click", (e) => this.#onMapClicked(e));
// if (hasTouchBar) {
// map.on("zoom", () => {
// if (!this.ignoreNextZoomEvent) {
// this.triggerCommand("refreshTouchBar");
// }
if (hasTouchBar) {
map.on("zoom", () => {
if (!this.ignoreNextZoomEvent) {
this.triggerCommand("refreshTouchBar");
}
this.ignoreNextZoomEvent = false;
});
}
// this.ignoreNextZoomEvent = false;
// });
// }
}
async #reloadMarkers() {
@ -311,24 +302,6 @@ export default class GeoMapTypeWidget extends TypeWidget {
await attributes.setLabel(noteId, LOCATION_ATTRIBUTE, value);
}
getData(): any {
const map = this.geoMapWidget.map;
if (!map) {
return;
}
const data: MapData = {
view: {
center: map.getBounds().getCenter(),
zoom: map.getZoom()
}
};
return {
content: JSON.stringify(data)
};
}
async geoMapCreateChildNoteEvent({ ntxId }: EventData<"geoMapCreateChildNote">) {
if (!this.isNoteContext(ntxId)) {
return;

View File

@ -1,6 +1,8 @@
import ViewMode, { ViewModeArgs } from "../view_mode.js";
import L from "leaflet";
import type { LatLng, Map } from "leaflet";
import SpacedUpdate from "../../../services/spaced_update.js";
import { t } from "../../../services/i18n.js";
const TPL = /*html*/`
<div class="geo-view">
@ -35,11 +37,13 @@ export default class GeoView extends ViewMode<MapData> {
private $root: JQuery<HTMLElement>;
private $container!: JQuery<HTMLElement>;
private map?: Map;
private spacedUpdate: SpacedUpdate;
constructor(args: ViewModeArgs) {
super(args, "geoMap");
this.$root = $(TPL);
this.$container = this.$root.find(".geo-map-container");
this.spacedUpdate = new SpacedUpdate(() => this.onSave(), 5_000);
args.$parent.append(this.$root);
}
@ -63,7 +67,17 @@ export default class GeoView extends ViewMode<MapData> {
}
async #onMapInitialized() {
const map = this.map;
if (!map) {
throw new Error(t("geo-map.unable-to-load-map"));
}
this.#restoreViewportAndZoom();
const updateFn = () => this.spacedUpdate.scheduleUpdate();
map.on("moveend", updateFn);
map.on("zoomend", updateFn);
// map.on("click", (e) => this.#onMapClicked(e));
}
async #restoreViewportAndZoom() {
@ -80,6 +94,21 @@ export default class GeoView extends ViewMode<MapData> {
map.setView(center, zoom);
}
private onSave() {
const map = this.map;
let data: MapData = {};
if (map) {
data = {
view: {
center: map.getBounds().getCenter(),
zoom: map.getZoom()
}
};
}
this.viewStorage.store(data);
}
get isFullHeight(): boolean {
return true;
}