forked from MapComplete/MapComplete
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { SubtleButton } from "../Base/SubtleButton"
|
|
import BaseUIElement from "../BaseUIElement"
|
|
import Svg from "../../Svg"
|
|
import { OsmConnection } from "../../Logic/Osm/OsmConnection"
|
|
import Toggle from "../Input/Toggle"
|
|
import { VariableUiElement } from "../Base/VariableUIElement"
|
|
import Loading from "../Base/Loading"
|
|
import Translations from "../i18n/Translations"
|
|
|
|
class LoginButton extends SubtleButton {
|
|
constructor(
|
|
text: BaseUIElement | string,
|
|
state: {
|
|
osmConnection: OsmConnection
|
|
},
|
|
icon?: BaseUIElement | string
|
|
) {
|
|
super(icon ?? Svg.osm_logo_ui(), text)
|
|
this.onClick(() => {
|
|
state.osmConnection.AttemptLogin()
|
|
})
|
|
}
|
|
}
|
|
|
|
export class LoginToggle extends VariableUiElement {
|
|
constructor(
|
|
el: BaseUIElement,
|
|
text: BaseUIElement | string,
|
|
state: {
|
|
osmConnection: OsmConnection
|
|
}
|
|
) {
|
|
const loading = new Loading("Trying to log in...")
|
|
const login = new LoginButton(text, state)
|
|
super(
|
|
state.osmConnection.loadingStatus.map((osmConnectionState) => {
|
|
if (osmConnectionState === "loading") {
|
|
return loading
|
|
}
|
|
if (osmConnectionState === "not-attempted") {
|
|
return login
|
|
}
|
|
if (osmConnectionState === "logged-in") {
|
|
return el
|
|
}
|
|
|
|
// Error!
|
|
return new LoginButton(Translations.t.general.loginFailed, state, Svg.invalid_svg())
|
|
})
|
|
)
|
|
}
|
|
}
|