Fix: enable login on index screen

This commit is contained in:
Pieter Vander Vennet 2023-05-25 20:09:42 +02:00
parent 3748737452
commit aface6aea7
2 changed files with 90 additions and 64 deletions

View file

@ -2,12 +2,58 @@
* The part of the global state which initializes the feature switches, based on default values and on the layoutToUse * The part of the global state which initializes the feature switches, based on default values and on the layoutToUse
*/ */
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig" import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"
import { UIEventSource } from "../UIEventSource" import {UIEventSource} from "../UIEventSource"
import { QueryParameters } from "../Web/QueryParameters" import {QueryParameters} from "../Web/QueryParameters"
import Constants from "../../Models/Constants" import Constants from "../../Models/Constants"
import { Utils } from "../../Utils" import {Utils} from "../../Utils"
export default class FeatureSwitchState { class FeatureSwitchUtils {
static initSwitch(
key: string,
deflt:boolean,
documentation: string
): UIEventSource<boolean> {
const defaultValue = deflt
const queryParam = QueryParameters.GetQueryParameter(
key,
"" + defaultValue,
documentation
)
// It takes the current layout, extracts the default value for this query parameter. A query parameter event source is then retrieved and flattened
return queryParam.sync(
(str) => (str === undefined ? defaultValue : str !== "false"),
[],
(b) => (b == defaultValue ? undefined : "" + b)
)
}
}
export class OsmConnectionFeatureSwitches {
public readonly featureSwitchFakeUser: UIEventSource<boolean>
public readonly featureSwitchApiURL: UIEventSource<string>
constructor() {
this.featureSwitchApiURL = QueryParameters.GetQueryParameter(
"backend",
"osm",
"The OSM backend to use - can be used to redirect mapcomplete to the testing backend when using 'osm-test'"
)
this.featureSwitchFakeUser = QueryParameters.GetBooleanQueryParameter(
"fake-user",
false,
"If true, 'dryrun' mode is activated and a fake user account is loaded"
)
}
}
export default class FeatureSwitchState extends OsmConnectionFeatureSwitches{
/** /**
* The layout that is being used in this run * The layout that is being used in this run
*/ */
@ -26,113 +72,88 @@ export default class FeatureSwitchState {
public readonly featureSwitchIsTesting: UIEventSource<boolean> public readonly featureSwitchIsTesting: UIEventSource<boolean>
public readonly featureSwitchIsDebugging: UIEventSource<boolean> public readonly featureSwitchIsDebugging: UIEventSource<boolean>
public readonly featureSwitchShowAllQuestions: UIEventSource<boolean> public readonly featureSwitchShowAllQuestions: UIEventSource<boolean>
public readonly featureSwitchApiURL: UIEventSource<string>
public readonly featureSwitchFilter: UIEventSource<boolean> public readonly featureSwitchFilter: UIEventSource<boolean>
public readonly featureSwitchEnableExport: UIEventSource<boolean> public readonly featureSwitchEnableExport: UIEventSource<boolean>
public readonly featureSwitchFakeUser: UIEventSource<boolean>
public readonly overpassUrl: UIEventSource<string[]> public readonly overpassUrl: UIEventSource<string[]>
public readonly overpassTimeout: UIEventSource<number> public readonly overpassTimeout: UIEventSource<number>
public readonly overpassMaxZoom: UIEventSource<number> public readonly overpassMaxZoom: UIEventSource<number>
public readonly osmApiTileSize: UIEventSource<number> public readonly osmApiTileSize: UIEventSource<number>
public readonly backgroundLayerId: UIEventSource<string> public readonly backgroundLayerId: UIEventSource<string>
public constructor(layoutToUse: LayoutConfig) { public constructor(layoutToUse?: LayoutConfig) {
super()
this.layoutToUse = layoutToUse this.layoutToUse = layoutToUse
// Helper function to initialize feature switches // Helper function to initialize feature switches
function featSw(
key: string,
deflt: (layout: LayoutConfig) => boolean,
documentation: string
): UIEventSource<boolean> {
const defaultValue = deflt(layoutToUse)
const queryParam = QueryParameters.GetQueryParameter(
key,
"" + defaultValue,
documentation
)
// It takes the current layout, extracts the default value for this query parameter. A query parameter event source is then retrieved and flattened this.featureSwitchUserbadge = FeatureSwitchUtils.initSwitch(
return queryParam.sync(
(str) => (str === undefined ? defaultValue : str !== "false"),
[],
(b) => (b == defaultValue ? undefined : "" + b)
)
}
this.featureSwitchUserbadge = featSw(
"fs-userbadge", "fs-userbadge",
(layoutToUse) => layoutToUse?.enableUserBadge ?? true, layoutToUse?.enableUserBadge ?? true,
"Disables/Enables the user information pill (userbadge) at the top left. Disabling this disables logging in and thus disables editing all together, effectively putting MapComplete into read-only mode." "Disables/Enables the user information pill (userbadge) at the top left. Disabling this disables logging in and thus disables editing all together, effectively putting MapComplete into read-only mode."
) )
this.featureSwitchSearch = featSw( this.featureSwitchSearch = FeatureSwitchUtils.initSwitch(
"fs-search", "fs-search",
(layoutToUse) => layoutToUse?.enableSearch ?? true, layoutToUse?.enableSearch ?? true,
"Disables/Enables the search bar" "Disables/Enables the search bar"
) )
this.featureSwitchBackgroundSelection = featSw( this.featureSwitchBackgroundSelection = FeatureSwitchUtils.initSwitch(
"fs-background", "fs-background",
(layoutToUse) => layoutToUse?.enableBackgroundLayerSelection ?? true, layoutToUse?.enableBackgroundLayerSelection ?? true,
"Disables/Enables the background layer control" "Disables/Enables the background layer control"
) )
this.featureSwitchFilter = featSw( this.featureSwitchFilter = FeatureSwitchUtils.initSwitch(
"fs-filter", "fs-filter",
(layoutToUse) => layoutToUse?.enableLayers ?? true, layoutToUse?.enableLayers ?? true,
"Disables/Enables the filter view" "Disables/Enables the filter view"
) )
this.featureSwitchAddNew = featSw( this.featureSwitchAddNew = FeatureSwitchUtils.initSwitch(
"fs-add-new", "fs-add-new",
(layoutToUse) => layoutToUse?.enableAddNewPoints ?? true, layoutToUse?.enableAddNewPoints ?? true,
"Disables/Enables the 'add new feature'-popup. (A theme without presets might not have it in the first place)" "Disables/Enables the 'add new feature'-popup. (A theme without presets might not have it in the first place)"
) )
this.featureSwitchWelcomeMessage = featSw( this.featureSwitchWelcomeMessage = FeatureSwitchUtils.initSwitch(
"fs-welcome-message", "fs-welcome-message",
() => true, true,
"Disables/enables the help menu or welcome message" "Disables/enables the help menu or welcome message"
) )
this.featureSwitchCommunityIndex = featSw( this.featureSwitchCommunityIndex = FeatureSwitchUtils.initSwitch(
"fs-community-index", "fs-community-index",
() => true, true,
"Disables/enables the button to get in touch with the community" "Disables/enables the button to get in touch with the community"
) )
this.featureSwitchExtraLinkEnabled = featSw( this.featureSwitchExtraLinkEnabled = FeatureSwitchUtils.initSwitch(
"fs-iframe-popout", "fs-iframe-popout",
(_) => true, true,
"Disables/Enables the extraLink button. By default, if in iframe mode and the welcome message is hidden, a popout button to the full mapcomplete instance is shown instead (unless disabled with this switch or another extraLink button is enabled)" "Disables/Enables the extraLink button. By default, if in iframe mode and the welcome message is hidden, a popout button to the full mapcomplete instance is shown instead (unless disabled with this switch or another extraLink button is enabled)"
) )
this.featureSwitchMoreQuests = featSw( this.featureSwitchMoreQuests = FeatureSwitchUtils.initSwitch(
"fs-more-quests", "fs-more-quests",
(layoutToUse) => layoutToUse?.enableMoreQuests ?? true, layoutToUse?.enableMoreQuests ?? true,
"Disables/Enables the 'More Quests'-tab in the welcome message" "Disables/Enables the 'More Quests'-tab in the welcome message"
) )
this.featureSwitchShareScreen = featSw( this.featureSwitchShareScreen = FeatureSwitchUtils.initSwitch(
"fs-share-screen", "fs-share-screen",
(layoutToUse) => layoutToUse?.enableShareScreen ?? true, layoutToUse?.enableShareScreen ?? true,
"Disables/Enables the 'Share-screen'-tab in the welcome message" "Disables/Enables the 'Share-screen'-tab in the welcome message"
) )
this.featureSwitchGeolocation = featSw( this.featureSwitchGeolocation = FeatureSwitchUtils.initSwitch(
"fs-geolocation", "fs-geolocation",
(layoutToUse) => layoutToUse?.enableGeolocation ?? true, layoutToUse?.enableGeolocation ?? true,
"Disables/Enables the geolocation button" "Disables/Enables the geolocation button"
) )
this.featureSwitchShowAllQuestions = featSw( this.featureSwitchShowAllQuestions = FeatureSwitchUtils.initSwitch(
"fs-all-questions", "fs-all-questions",
(layoutToUse) => layoutToUse?.enableShowAllQuestions ?? false, layoutToUse?.enableShowAllQuestions ?? false,
"Always show all questions" "Always show all questions"
) )
this.featureSwitchEnableExport = featSw( this.featureSwitchEnableExport = FeatureSwitchUtils.initSwitch(
"fs-export", "fs-export",
(layoutToUse) => layoutToUse?.enableExportButton ?? true, layoutToUse?.enableExportButton ?? true,
"Enable the export as GeoJSON and CSV button" "Enable the export as GeoJSON and CSV button"
) )
this.featureSwitchApiURL = QueryParameters.GetQueryParameter(
"backend",
"osm",
"The OSM backend to use - can be used to redirect mapcomplete to the testing backend when using 'osm-test'"
)
let testingDefaultValue = false let testingDefaultValue = false
if ( if (
@ -155,12 +176,6 @@ export default class FeatureSwitchState {
"If true, shows some extra debugging help such as all the available tags on every object" "If true, shows some extra debugging help such as all the available tags on every object"
) )
this.featureSwitchFakeUser = QueryParameters.GetBooleanQueryParameter(
"fake-user",
false,
"If true, 'dryrun' mode is activated and a fake user account is loaded"
)
this.overpassUrl = QueryParameters.GetQueryParameter( this.overpassUrl = QueryParameters.GetQueryParameter(
"overpassUrl", "overpassUrl",
(layoutToUse?.overpassUrl ?? Constants.defaultOverpassUrls).join(","), (layoutToUse?.overpassUrl ?? Constants.defaultOverpassUrls).join(","),

View file

@ -9,11 +9,22 @@ import IndexText from "./BigComponents/IndexText"
import { LoginToggle } from "./Popup/LoginButton" import { LoginToggle } from "./Popup/LoginButton"
import { ImmutableStore } from "../Logic/UIEventSource" import { ImmutableStore } from "../Logic/UIEventSource"
import { OsmConnection } from "../Logic/Osm/OsmConnection" import { OsmConnection } from "../Logic/Osm/OsmConnection"
import {QueryParameters} from "../Logic/Web/QueryParameters";
import {OsmConnectionFeatureSwitches} from "../Logic/State/FeatureSwitchState";
export default class AllThemesGui { export default class AllThemesGui {
setup() { setup() {
try { try {
const osmConnection = new OsmConnection() const featureSwitches = new OsmConnectionFeatureSwitches()
const osmConnection = new OsmConnection({
fakeUser: featureSwitches.featureSwitchFakeUser.data,
oauth_token: QueryParameters.GetQueryParameter(
"oauth_token",
undefined,
"Used to complete the login"
),
osmConfiguration: <"osm" | "osm-test">featureSwitches.featureSwitchApiURL.data,
})
const state = new UserRelatedState(osmConnection) const state = new UserRelatedState(osmConnection)
const intro = new Combine([ const intro = new Combine([
new LanguagePicker(Translations.t.index.title.SupportedLanguages(), "").SetClass( new LanguagePicker(Translations.t.index.title.SupportedLanguages(), "").SetClass(