2021-01-07 04:50:12 +01:00
|
|
|
import ThemeIntroductionPanel from "./ThemeIntroductionPanel"
|
2021-01-04 04:06:21 +01:00
|
|
|
import Svg from "../../Svg"
|
|
|
|
import Translations from "../i18n/Translations"
|
|
|
|
import ShareScreen from "./ShareScreen"
|
|
|
|
import MoreScreen from "./MoreScreen"
|
|
|
|
import Constants from "../../Models/Constants"
|
|
|
|
import Combine from "../Base/Combine"
|
|
|
|
import { TabbedComponent } from "../Base/TabbedComponent"
|
|
|
|
import { UIEventSource } from "../../Logic/UIEventSource"
|
2021-10-15 05:20:02 +02:00
|
|
|
import UserDetails, { OsmConnection } from "../../Logic/Osm/OsmConnection"
|
2021-01-22 00:40:15 +01:00
|
|
|
import ScrollableFullScreen from "../Base/ScrollableFullScreen"
|
2021-06-12 02:58:32 +02:00
|
|
|
import BaseUIElement from "../BaseUIElement"
|
2021-06-13 15:04:55 +02:00
|
|
|
import Toggle from "../Input/Toggle"
|
2021-08-07 23:11:34 +02:00
|
|
|
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"
|
2021-09-21 02:10:42 +02:00
|
|
|
import { Utils } from "../../Utils"
|
2021-10-15 05:20:02 +02:00
|
|
|
import UserRelatedState from "../../Logic/State/UserRelatedState"
|
2021-11-03 00:44:53 +01:00
|
|
|
import Loc from "../../Models/Loc"
|
|
|
|
import BaseLayer from "../../Models/BaseLayer"
|
|
|
|
import FilteredLayer from "../../Models/FilteredLayer"
|
2021-11-21 02:44:35 +01:00
|
|
|
import FeaturePipeline from "../../Logic/FeatureSource/FeaturePipeline"
|
|
|
|
import PrivacyPolicy from "./PrivacyPolicy"
|
2022-12-24 03:44:21 +01:00
|
|
|
import Hotkeys from "../Base/Hotkeys"
|
2021-01-04 04:06:21 +01:00
|
|
|
|
2021-06-12 02:58:32 +02:00
|
|
|
export default class FullWelcomePaneWithTabs extends ScrollableFullScreen {
|
2022-06-22 18:52:50 +02:00
|
|
|
public static MoreThemesTabIndex = 1
|
2022-09-08 21:40:48 +02:00
|
|
|
|
2021-10-15 05:20:02 +02:00
|
|
|
constructor(
|
|
|
|
isShown: UIEventSource<boolean>,
|
|
|
|
currentTab: UIEventSource<number>,
|
|
|
|
state: {
|
|
|
|
layoutToUse: LayoutConfig
|
|
|
|
osmConnection: OsmConnection
|
|
|
|
featureSwitchShareScreen: UIEventSource<boolean>
|
2021-11-03 00:44:53 +01:00
|
|
|
featureSwitchMoreQuests: UIEventSource<boolean>
|
2021-11-07 16:34:51 +01:00
|
|
|
locationControl: UIEventSource<Loc>
|
2021-11-21 02:44:35 +01:00
|
|
|
featurePipeline: FeaturePipeline
|
2021-11-07 16:34:51 +01:00
|
|
|
backgroundLayer: UIEventSource<BaseLayer>
|
2021-11-03 00:44:53 +01:00
|
|
|
filteredLayers: UIEventSource<FilteredLayer[]>
|
2023-01-03 02:24:03 +01:00
|
|
|
} & UserRelatedState,
|
|
|
|
guistate?: { userInfoIsOpened: UIEventSource<boolean> }
|
2021-10-15 05:20:02 +02:00
|
|
|
) {
|
|
|
|
const layoutToUse = state.layoutToUse
|
2021-09-09 00:05:51 +02:00
|
|
|
super(
|
2021-02-25 02:23:26 +01:00
|
|
|
() => layoutToUse.title.Clone(),
|
2023-01-03 02:24:03 +01:00
|
|
|
() => FullWelcomePaneWithTabs.GenerateContents(state, currentTab, isShown, guistate),
|
2021-10-25 20:50:59 +02:00
|
|
|
"welcome",
|
2021-10-23 02:46:37 +02:00
|
|
|
isShown
|
2021-02-25 02:23:26 +01:00
|
|
|
)
|
|
|
|
}
|
2021-09-09 00:05:51 +02:00
|
|
|
|
2022-06-22 18:52:50 +02:00
|
|
|
private static ConstructBaseTabs(
|
|
|
|
state: {
|
|
|
|
layoutToUse: LayoutConfig
|
|
|
|
osmConnection: OsmConnection
|
|
|
|
featureSwitchShareScreen: UIEventSource<boolean>
|
|
|
|
featureSwitchMoreQuests: UIEventSource<boolean>
|
|
|
|
featurePipeline: FeaturePipeline
|
|
|
|
locationControl: UIEventSource<Loc>
|
|
|
|
backgroundLayer: UIEventSource<BaseLayer>
|
|
|
|
filteredLayers: UIEventSource<FilteredLayer[]>
|
|
|
|
} & UserRelatedState,
|
|
|
|
isShown: UIEventSource<boolean>,
|
2023-01-03 02:24:03 +01:00
|
|
|
currentTab: UIEventSource<number>,
|
|
|
|
guistate?: { userInfoIsOpened: UIEventSource<boolean> }
|
2021-10-15 05:20:02 +02:00
|
|
|
): { header: string | BaseUIElement; content: BaseUIElement }[] {
|
2021-06-13 15:04:55 +02:00
|
|
|
const tabs: { header: string | BaseUIElement; content: BaseUIElement }[] = [
|
2022-06-22 18:52:50 +02:00
|
|
|
{
|
|
|
|
header: `<img src='${state.layoutToUse.icon}'>`,
|
2023-01-03 02:24:03 +01:00
|
|
|
content: new ThemeIntroductionPanel(isShown, currentTab, state, guistate),
|
2022-06-22 18:52:50 +02:00
|
|
|
},
|
2021-01-04 04:06:21 +01:00
|
|
|
]
|
|
|
|
|
2021-10-15 05:20:02 +02:00
|
|
|
if (state.featureSwitchMoreQuests.data) {
|
2021-01-04 04:06:21 +01:00
|
|
|
tabs.push({
|
|
|
|
header: Svg.add_img,
|
2021-11-07 16:34:51 +01:00
|
|
|
content: new Combine([
|
|
|
|
Translations.t.general.morescreen.intro,
|
|
|
|
new MoreScreen(state),
|
|
|
|
]).SetClass("flex flex-col"),
|
2021-01-04 04:06:21 +01:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-11-21 02:44:35 +01:00
|
|
|
if (state.featureSwitchShareScreen.data) {
|
|
|
|
tabs.push({ header: Svg.share_img, content: new ShareScreen(state) })
|
|
|
|
}
|
|
|
|
|
|
|
|
const privacy = {
|
|
|
|
header: Svg.eye_svg(),
|
|
|
|
content: new PrivacyPolicy(),
|
|
|
|
}
|
|
|
|
tabs.push(privacy)
|
|
|
|
|
2021-06-14 17:42:26 +02:00
|
|
|
return tabs
|
|
|
|
}
|
|
|
|
|
2021-10-15 05:20:02 +02:00
|
|
|
private static GenerateContents(
|
|
|
|
state: {
|
|
|
|
layoutToUse: LayoutConfig
|
|
|
|
osmConnection: OsmConnection
|
|
|
|
featureSwitchShareScreen: UIEventSource<boolean>
|
2021-11-03 00:44:53 +01:00
|
|
|
featureSwitchMoreQuests: UIEventSource<boolean>
|
2021-11-21 02:44:35 +01:00
|
|
|
featurePipeline: FeaturePipeline
|
2021-11-03 00:44:53 +01:00
|
|
|
locationControl: UIEventSource<Loc>
|
|
|
|
backgroundLayer: UIEventSource<BaseLayer>
|
|
|
|
filteredLayers: UIEventSource<FilteredLayer[]>
|
2021-10-15 05:20:02 +02:00
|
|
|
} & UserRelatedState,
|
|
|
|
currentTab: UIEventSource<number>,
|
2023-01-03 02:24:03 +01:00
|
|
|
isShown: UIEventSource<boolean>,
|
|
|
|
guistate?: { userInfoIsOpened: UIEventSource<boolean> }
|
2021-10-15 05:20:02 +02:00
|
|
|
) {
|
2023-01-03 02:24:03 +01:00
|
|
|
const tabs = FullWelcomePaneWithTabs.ConstructBaseTabs(state, isShown, currentTab, guistate)
|
2022-06-22 18:52:50 +02:00
|
|
|
const tabsWithAboutMc = [
|
2023-01-03 02:24:03 +01:00
|
|
|
...FullWelcomePaneWithTabs.ConstructBaseTabs(state, isShown, currentTab, guistate),
|
2022-06-22 18:52:50 +02:00
|
|
|
]
|
2021-11-07 16:34:51 +01:00
|
|
|
|
2021-06-13 15:04:55 +02:00
|
|
|
tabsWithAboutMc.push({
|
2021-01-04 04:06:21 +01:00
|
|
|
header: Svg.help,
|
2021-10-25 21:50:38 +02:00
|
|
|
content: new Combine([
|
|
|
|
Translations.t.general.aboutMapcomplete.Subs({
|
2021-10-16 18:30:24 +02:00
|
|
|
osmcha_link: Utils.OsmChaLinkFor(7),
|
|
|
|
}),
|
|
|
|
"<br/>Version " + Constants.vNumber,
|
2022-12-24 03:44:21 +01:00
|
|
|
Hotkeys.generateDocumentationDynamic(),
|
2021-06-13 15:04:55 +02:00
|
|
|
]).SetClass("link-underline"),
|
2021-01-04 04:06:21 +01:00
|
|
|
})
|
2022-09-08 21:40:48 +02:00
|
|
|
|
2021-10-07 22:06:47 +02:00
|
|
|
tabs.forEach((c) => c.content.SetClass("p-4"))
|
|
|
|
tabsWithAboutMc.forEach((c) => c.content.SetClass("p-4"))
|
2021-10-15 05:20:02 +02:00
|
|
|
|
2021-06-13 15:04:55 +02:00
|
|
|
return new Toggle(
|
2021-10-15 05:20:02 +02:00
|
|
|
new TabbedComponent(tabsWithAboutMc, currentTab),
|
|
|
|
new TabbedComponent(tabs, currentTab),
|
|
|
|
state.osmConnection.userDetails.map(
|
|
|
|
(userdetails: UserDetails) =>
|
2021-06-14 17:42:26 +02:00
|
|
|
userdetails.loggedIn &&
|
|
|
|
userdetails.csCount >= Constants.userJourney.mapCompleteHelpUnlock
|
|
|
|
)
|
2021-06-13 15:04:55 +02:00
|
|
|
)
|
2021-01-04 04:06:21 +01:00
|
|
|
}
|
|
|
|
}
|