2021-01-02 21:03:40 +01:00
|
|
|
import { UIEventSource } from "../UIEventSource"
|
2021-01-04 04:36:21 +01:00
|
|
|
import BaseLayer from "../../Models/BaseLayer"
|
2021-01-02 21:03:40 +01:00
|
|
|
import AvailableBaseLayers from "./AvailableBaseLayers"
|
|
|
|
import Loc from "../../Models/Loc"
|
2021-10-20 00:09:40 +02:00
|
|
|
import { Utils } from "../../Utils"
|
2021-01-02 21:03:40 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the current background layer to a layer that is actually available
|
|
|
|
*/
|
2021-09-21 02:10:42 +02:00
|
|
|
export default class BackgroundLayerResetter {
|
2021-09-09 00:05:51 +02:00
|
|
|
constructor(
|
|
|
|
currentBackgroundLayer: UIEventSource<BaseLayer>,
|
|
|
|
location: UIEventSource<Loc>,
|
|
|
|
availableLayers: UIEventSource<BaseLayer[]>,
|
2021-09-28 18:00:44 +02:00
|
|
|
defaultLayerId: string = undefined
|
|
|
|
) {
|
2021-11-07 16:34:51 +01:00
|
|
|
if (Utils.runningFromConsole) {
|
2021-10-20 00:09:40 +02:00
|
|
|
return
|
|
|
|
}
|
2021-11-07 16:34:51 +01:00
|
|
|
|
2021-09-28 18:00:44 +02:00
|
|
|
defaultLayerId = defaultLayerId ?? AvailableBaseLayers.osmCarto.id
|
2021-09-09 00:05:51 +02:00
|
|
|
|
2021-01-02 21:03:40 +01:00
|
|
|
// Change the baselayer back to OSM if we go out of the current range of the layer
|
|
|
|
availableLayers.addCallbackAndRun((availableLayers) => {
|
|
|
|
let defaultLayer = undefined
|
|
|
|
const currentLayer = currentBackgroundLayer.data.id
|
|
|
|
for (const availableLayer of availableLayers) {
|
|
|
|
if (availableLayer.id === currentLayer) {
|
|
|
|
if (availableLayer.max_zoom < location.data.zoom) {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
|
|
|
|
if (availableLayer.min_zoom > location.data.zoom) {
|
|
|
|
break
|
|
|
|
}
|
2021-09-28 18:00:44 +02:00
|
|
|
if (availableLayer.id === defaultLayerId) {
|
2021-01-02 21:03:40 +01:00
|
|
|
defaultLayer = availableLayer
|
|
|
|
}
|
|
|
|
return // All good - the current layer still works!
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Oops, we panned out of range for this layer!
|
|
|
|
console.log(
|
|
|
|
"AvailableBaseLayers-actor: detected that the current bounds aren't sufficient anymore - reverting to OSM standard"
|
|
|
|
)
|
|
|
|
currentBackgroundLayer.setData(defaultLayer ?? AvailableBaseLayers.osmCarto)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|