import { UIEventSource } from "../UIEventSource" import BaseLayer from "../../Models/BaseLayer" import AvailableBaseLayers from "./AvailableBaseLayers" import Loc from "../../Models/Loc" import { Utils } from "../../Utils" /** * Sets the current background layer to a layer that is actually available */ export default class BackgroundLayerResetter { constructor( currentBackgroundLayer: UIEventSource, location: UIEventSource, availableLayers: UIEventSource, defaultLayerId: string = undefined ) { if (Utils.runningFromConsole) { return } defaultLayerId = defaultLayerId ?? AvailableBaseLayers.osmCarto.id // 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 } if (availableLayer.id === defaultLayerId) { 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) }) } }