This commit is contained in:
pietervdvn 2022-06-29 16:22:33 +02:00
parent 840fb20939
commit 1773f851d1

View file

@ -33,18 +33,18 @@ export default class MinimapImplementation extends BaseUIElement implements Mini
private constructor(options?: MinimapOptions) { private constructor(options?: MinimapOptions) {
super() super()
options = options ?? {} options = options ?? {}
this._id = "minimap" + MinimapImplementation._nextId;
MinimapImplementation._nextId++
this.leafletMap = options.leafletMap ?? new UIEventSource<Map>(undefined) this.leafletMap = options.leafletMap ?? new UIEventSource<Map>(undefined)
this._background = options?.background ?? new UIEventSource<BaseLayer>(AvailableBaseLayers.osmCarto) this._background = options?.background ?? new UIEventSource<BaseLayer>(AvailableBaseLayers.osmCarto)
this.location = options?.location ?? new UIEventSource<Loc>({lat: 0, lon: 0, zoom: 1}) this.location = options?.location ?? new UIEventSource<Loc>({lat: 0, lon: 0, zoom: 1})
this.bounds = options?.bounds; this.bounds = options?.bounds;
this._id = "minimap" + MinimapImplementation._nextId;
this._allowMoving = options.allowMoving ?? true; this._allowMoving = options.allowMoving ?? true;
this._leafletoptions = options.leafletOptions ?? {} this._leafletoptions = options.leafletOptions ?? {}
this._onFullyLoaded = options.onFullyLoaded this._onFullyLoaded = options.onFullyLoaded
this._attribution = options.attribution this._attribution = options.attribution
this._addLayerControl = options.addLayerControl ?? false this._addLayerControl = options.addLayerControl ?? false
this._options = options this._options = options
MinimapImplementation._nextId++
this.SetClass("relative") this.SetClass("relative")
} }
@ -57,7 +57,7 @@ export default class MinimapImplementation extends BaseUIElement implements Mini
public installBounds(factor: number | BBox, showRange?: boolean) { public installBounds(factor: number | BBox, showRange?: boolean) {
this.leafletMap.addCallbackD(leaflet => { this.leafletMap.addCallbackD(leaflet => {
let bounds : {getEast(), getNorth(), getWest(), getSouth()}; let bounds: { getEast(), getNorth(), getWest(), getSouth() };
if (typeof factor === "number") { if (typeof factor === "number") {
const lbounds = leaflet.getBounds().pad(factor) const lbounds = leaflet.getBounds().pad(factor)
leaflet.setMaxBounds(lbounds) leaflet.setMaxBounds(lbounds)
@ -150,10 +150,17 @@ export default class MinimapImplementation extends BaseUIElement implements Mini
} }
try { try {
self.InitMap(); self.InitMap();
self.leafletMap?.data?.invalidateSize()
} catch (e) { } catch (e) {
console.warn("Could not construct a minimap:", e) console.warn("Could not construct a minimap:", e)
} }
try {
console.log("SELF IS", self)
self.leafletMap?.data?.invalidateSize()
} catch (e) {
console.warn("Could not invalidate size of a minimap:", e)
}
}); });
resizeObserver.observe(div); resizeObserver.observe(div);
@ -210,7 +217,15 @@ export default class MinimapImplementation extends BaseUIElement implements Mini
maxZoom: 21 maxZoom: 21
} }
Utils.Merge(this._leafletoptions, options) Utils.Merge(this._leafletoptions, options)
/*
* Somehow, the element gets '_leaflet_id' set on chrome.
* When attempting to init this leaflet map, it'll throw an exception and the map won't show up.
* Simply removing '_leaflet_id' fixes the issue.
* See https://github.com/pietervdvn/MapComplete/issues/726
* */
delete document.getElementById(this._id)["_leaflet_id"]
const map = L.map(this._id, options); const map = L.map(this._id, options);
if (self._onFullyLoaded !== undefined) { if (self._onFullyLoaded !== undefined) {