import * as React from "bloatless-react"; import { SplitModal } from "./splitModal"; import { languageNames } from "../translations"; import { PlaceholderView } from "../Components/placeholderView"; import { OptionButtonList } from "../Components/optionButtonList"; import { NavigationButton } from "../Components/navigationButton"; import { InfoTile } from "../Components/infoTile"; import SettingsViewModel, { SettingsModalPages, } from "../../ViewModel/Global/settingsViewModel"; import CoreViewModel from "../../ViewModel/Global/coreViewModel"; import { Languages, ThemeSettings } from "../../Model/Global/settingsModel"; export function SettingsModal( coreViewModel: CoreViewModel, settingsViewModel: SettingsViewModel, ) { const detailView = React.createProxyState( [settingsViewModel.selectedModalPage], () => { switch (settingsViewModel.selectedModalPage.value) { case undefined: { return PlaceholderView( coreViewModel.translations.general.noPageSelected, ); } case SettingsModalPages.Appearance: return SettingsAppearancePane( coreViewModel, settingsViewModel, ); case SettingsModalPages.Regional: return SettingsRegionalPane( coreViewModel, settingsViewModel, ); case SettingsModalPages.Info: return SettingsInfoPane(coreViewModel, settingsViewModel); } }, ); return ( ); } function SettingsLeftPane( coreViewModel: CoreViewModel, settingsViewModel: SettingsViewModel, ) { return (

{coreViewModel.translations.homePage.settingsButton}

{SettingsPaneButton( coreViewModel, settingsViewModel, SettingsModalPages.Appearance, coreViewModel.translations.settings.pages.appearance, )} {SettingsPaneButton( coreViewModel, settingsViewModel, SettingsModalPages.Regional, coreViewModel.translations.settings.pages.regional, )} {SettingsPaneButton( coreViewModel, settingsViewModel, SettingsModalPages.Info, coreViewModel.translations.settings.pages.info, )}
); } function SettingsPaneButton( coreViewModel: CoreViewModel, settingsViewModel: SettingsViewModel, page: SettingsModalPages, label: string, ) { return NavigationButton( coreViewModel, label, settingsViewModel.selectedModalPage, page, true, ); } function SettingsInfoPane( coreViewModel: CoreViewModel, settingsViewModel: SettingsViewModel, ) { return (

{coreViewModel.translations.homePage.appName}


{InfoTile( "build", coreViewModel.translations.settings.version, settingsViewModel.coreViewModel.BUILD, )}
); } function SettingsRegionalPane( coreViewModel: CoreViewModel, settingsViewModel: SettingsViewModel, ) { return (

{coreViewModel.translations.settings.pages.regional}


{coreViewModel.translations.settings.language}

{OptionButtonList( new React.ListState<[string, string]>( Object.values(Languages).map((x) => [languageNames[x], x]), ), settingsViewModel.language, )}

{coreViewModel.translations.settings.firstDayOfWeekLabel}

{OptionButtonList( new React.ListState<[string, string]>( coreViewModel.translations.regional.weekdays.full.map( (x, i) => [x, i.toString()], ), ), settingsViewModel.firstDayOfWeek, )}
); } function SettingsAppearancePane( coreViewModel: CoreViewModel, settingsViewModel: SettingsViewModel, ) { return (

{coreViewModel.translations.settings.pages.appearance}


{OptionButtonList( new React.ListState<[string, ThemeSettings]>([ [ coreViewModel.translations.settings.themes.dark, ThemeSettings.Dark, ], [ coreViewModel.translations.settings.themes.light, ThemeSettings.Light, ], [ coreViewModel.translations.settings.themes.system, ThemeSettings.System, ], ]), settingsViewModel.theme, )}
); }