Add switch to disable all layers by default

This commit is contained in:
Pieter Vander Vennet 2024-06-27 01:57:32 +02:00
parent 5628e66dce
commit de9691e723
4 changed files with 18 additions and 7 deletions

View file

@ -68,6 +68,7 @@ export default class FeatureSwitchState extends OsmConnectionFeatureSwitches {
public readonly osmApiTileSize: UIEventSource<number>
public readonly backgroundLayerId: UIEventSource<string>
public readonly featureSwitchMorePrivacy: UIEventSource<boolean>
public readonly featureSwitchLayerDefault: UIEventSource<boolean>
public constructor(layoutToUse?: LayoutConfig) {
super()
@ -234,5 +235,9 @@ export default class FeatureSwitchState extends OsmConnectionFeatureSwitches {
layoutToUse?.defaultBackgroundId,
"The id of the background layer to start with"
)
this.featureSwitchLayerDefault = QueryParameters.GetBooleanQueryParameter("fs-layers-enabled",true,
"If set to false, all layers will be disabled - except the explicitly enabled layers"
)
}
}

View file

@ -1,4 +1,4 @@
import { UIEventSource } from "../UIEventSource"
import { Store, UIEventSource } from "../UIEventSource"
import { GlobalFilter } from "../../Models/GlobalFilter"
import FilteredLayer from "../../Models/FilteredLayer"
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
@ -32,15 +32,16 @@ export default class LayerState {
*
* @param osmConnection
* @param layers
* @param context: the context, probably the name of the theme. Used to disambiguate the upstream user preference
* @param context
* @param layersEnabledByDefault
*/
constructor(osmConnection: OsmConnection, layers: LayerConfig[], context: string) {
constructor(osmConnection: OsmConnection, layers: LayerConfig[], context: string, layersEnabledByDefault: Store<boolean>) {
this.osmConnection = osmConnection
const filteredLayers = new Map()
for (const layer of layers) {
filteredLayers.set(
layer.id,
FilteredLayer.initLinkedState(layer, context, this.osmConnection)
FilteredLayer.initLinkedState(layer, context, this.osmConnection, layersEnabledByDefault)
)
}
this.filteredLayers = filteredLayers

View file

@ -81,7 +81,8 @@ export default class FilteredLayer {
public static initLinkedState(
layer: LayerConfig,
context: string,
osmConnection: OsmConnection
osmConnection: OsmConnection,
enabledByDefault?: Store<boolean>
) {
let isDisplayed: UIEventSource<boolean>
if (layer.syncSelection === "local") {
@ -102,9 +103,13 @@ export default class FilteredLayer {
layer
)
} else {
let isShown = layer.shownByDefault
if(enabledByDefault !== undefined && enabledByDefault.data === false){
isShown = false
}
isDisplayed = QueryParameters.GetBooleanQueryParameter(
FilteredLayer.queryParameterKey(layer),
layer.shownByDefault,
isShown ,
"Whether or not layer " + layer.id + " is shown"
)
}

View file

@ -202,7 +202,7 @@ export default class ThemeViewState implements SpecialVisualizationState {
)
const self = this
this.layerState = new LayerState(this.osmConnection, layout.layers, layout.id)
this.layerState = new LayerState(this.osmConnection, layout.layers, layout.id, this.featureSwitches.featureSwitchLayerDefault)
{
const overlayLayerStates = new Map<string, { isDisplayed: UIEventSource<boolean> }>()