Files
CT/src/View/Modals/settingsModal.tsx
T

75 lines
2.2 KiB
TypeScript
Raw Normal View History

2026-04-08 20:39:12 +00:00
import * as React from "bloatless-react";
import { translations } from "../translations";
2026-04-08 21:03:36 +00:00
import SettingsViewModel, {
SettingsModalPages,
} from "../../ViewModel/Global/settingsViewModel";
import { SplitModal } from "../Components/splitModal";
2026-04-08 20:39:12 +00:00
export function SettingsModal(settingsViewModel: SettingsViewModel) {
return (
2026-04-08 21:03:36 +00:00
<div
class="modal"
toggle:open={settingsViewModel.isShowingSettingsModal}
>
2026-04-08 21:14:37 +00:00
<div>
2026-04-08 21:03:36 +00:00
<main class="padding-0">
{SplitModal(
new React.State(SettingsLeftPane(settingsViewModel)),
new React.State(<span>settings</span>),
new React.State(""),
2026-04-08 21:14:37 +00:00
false,
settingsViewModel.selectedModalPage,
2026-04-08 21:03:36 +00:00
)}
</main>
2026-04-08 20:39:12 +00:00
<button on:click={settingsViewModel.hideSettingsModal}>
{translations.general.closeButton}
<span class="icon">close</span>
</button>
</div>
</div>
);
}
2026-04-08 21:03:36 +00:00
function SettingsLeftPane(settingsViewModel: SettingsViewModel) {
return (
2026-04-08 21:14:37 +00:00
<div class="flex-column gap">
2026-04-08 21:03:36 +00:00
{SettingsPaneButton(
settingsViewModel,
SettingsModalPages.Appearance,
translations.settings.pages.appearance,
)}
{SettingsPaneButton(
settingsViewModel,
SettingsModalPages.Regional,
translations.settings.pages.regional,
)}
2026-04-08 21:14:37 +00:00
{SettingsPaneButton(
settingsViewModel,
SettingsModalPages.Info,
translations.settings.pages.info,
)}
2026-04-08 21:03:36 +00:00
</div>
);
}
function SettingsPaneButton(
settingsViewModel: SettingsViewModel,
page: SettingsModalPages,
label: string,
) {
const isSelected = React.createProxyState(
[settingsViewModel.selectedModalPage],
() => settingsViewModel.selectedModalPage.value == page,
);
return (
<button
toggle:selected={isSelected}
on:click={() => settingsViewModel.showModalPage(page)}
>
{label}
</button>
);
}