add NavigationButton component, use in settings
This commit is contained in:
Vendored
+23
-12
@@ -6834,6 +6834,19 @@
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// src/View/Components/navigationButton.tsx
|
||||||
|
function NavigationButton(coreViewModel2, label, navigationState, page, arrowMobileOnly) {
|
||||||
|
const isSelected = createProxyState(
|
||||||
|
[navigationState],
|
||||||
|
() => navigationState.value == page
|
||||||
|
);
|
||||||
|
function open() {
|
||||||
|
navigationState.value = page;
|
||||||
|
}
|
||||||
|
const iconClass = `icon ${arrowMobileOnly == true ? "mobile-only" : ""}`;
|
||||||
|
return /* @__PURE__ */ createElement("button", { "toggle:selected": isSelected, "on:click": open }, label, /* @__PURE__ */ createElement("span", { class: iconClass }, "arrow_forward"));
|
||||||
|
}
|
||||||
|
|
||||||
// src/View/Modals/settingsModal.tsx
|
// src/View/Modals/settingsModal.tsx
|
||||||
function SettingsModal(coreViewModel2, settingsViewModel2) {
|
function SettingsModal(coreViewModel2, settingsViewModel2) {
|
||||||
const detailView = createProxyState(
|
const detailView = createProxyState(
|
||||||
@@ -6879,31 +6892,29 @@
|
|||||||
}
|
}
|
||||||
function SettingsLeftPane(coreViewModel2, settingsViewModel2) {
|
function SettingsLeftPane(coreViewModel2, settingsViewModel2) {
|
||||||
return /* @__PURE__ */ createElement("div", { class: "flex-column gap slide-up" }, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.homePage.settingsButton), SettingsPaneButton(
|
return /* @__PURE__ */ createElement("div", { class: "flex-column gap slide-up" }, /* @__PURE__ */ createElement("h2", null, coreViewModel2.translations.homePage.settingsButton), SettingsPaneButton(
|
||||||
|
coreViewModel2,
|
||||||
settingsViewModel2,
|
settingsViewModel2,
|
||||||
0 /* Appearance */,
|
0 /* Appearance */,
|
||||||
coreViewModel2.translations.settings.pages.appearance
|
coreViewModel2.translations.settings.pages.appearance
|
||||||
), SettingsPaneButton(
|
), SettingsPaneButton(
|
||||||
|
coreViewModel2,
|
||||||
settingsViewModel2,
|
settingsViewModel2,
|
||||||
1 /* Regional */,
|
1 /* Regional */,
|
||||||
coreViewModel2.translations.settings.pages.regional
|
coreViewModel2.translations.settings.pages.regional
|
||||||
), SettingsPaneButton(
|
), SettingsPaneButton(
|
||||||
|
coreViewModel2,
|
||||||
settingsViewModel2,
|
settingsViewModel2,
|
||||||
2 /* Info */,
|
2 /* Info */,
|
||||||
coreViewModel2.translations.settings.pages.info
|
coreViewModel2.translations.settings.pages.info
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
function SettingsPaneButton(settingsViewModel2, page, label) {
|
function SettingsPaneButton(coreViewModel2, settingsViewModel2, page, label) {
|
||||||
const isSelected = createProxyState(
|
return NavigationButton(
|
||||||
[settingsViewModel2.selectedModalPage],
|
coreViewModel2,
|
||||||
() => settingsViewModel2.selectedModalPage.value == page
|
label,
|
||||||
);
|
settingsViewModel2.selectedModalPage,
|
||||||
return /* @__PURE__ */ createElement(
|
page,
|
||||||
"button",
|
true
|
||||||
{
|
|
||||||
"toggle:selected": isSelected,
|
|
||||||
"on:click": () => settingsViewModel2.showModalPage(page)
|
|
||||||
},
|
|
||||||
label
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
function SettingsInfoPane(coreViewModel2, settingsViewModel2) {
|
function SettingsInfoPane(coreViewModel2, settingsViewModel2) {
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import * as React from "bloatless-react";
|
||||||
|
import CoreViewModel from "../../ViewModel/Global/coreViewModel";
|
||||||
|
|
||||||
|
export function NavigationButton<T>(
|
||||||
|
coreViewModel: CoreViewModel,
|
||||||
|
label: string,
|
||||||
|
navigationState: React.State<T | undefined>,
|
||||||
|
page: T,
|
||||||
|
arrowMobileOnly?: boolean,
|
||||||
|
) {
|
||||||
|
const isSelected = React.createProxyState(
|
||||||
|
[navigationState],
|
||||||
|
() => navigationState.value == page,
|
||||||
|
);
|
||||||
|
|
||||||
|
function open() {
|
||||||
|
navigationState.value = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
const iconClass = `icon ${arrowMobileOnly == true ? "mobile-only" : ""}`;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<button toggle:selected={isSelected} on:click={open}>
|
||||||
|
{label}
|
||||||
|
|
||||||
|
<span class={iconClass}>arrow_forward</span>
|
||||||
|
</button>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.split-modal[navigation] > div,
|
.split-modal[navigation] > div,
|
||||||
.split-modal[navigation] > div > .scroll-area{
|
.split-modal[navigation] > div > .scroll-area {
|
||||||
justify-content: start;
|
justify-content: start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { Languages, ThemeSettings } from "../../Model/Global/settingsModel";
|
|||||||
import { OptionButtonList } from "../Components/optionButtonList";
|
import { OptionButtonList } from "../Components/optionButtonList";
|
||||||
import { stringify } from "../../Model/Utility/utility";
|
import { stringify } from "../../Model/Utility/utility";
|
||||||
import { PlaceholderView } from "../Components/placeholderView";
|
import { PlaceholderView } from "../Components/placeholderView";
|
||||||
|
import { NavigationButton } from "../Components/navigationButton";
|
||||||
|
|
||||||
export function SettingsModal(
|
export function SettingsModal(
|
||||||
coreViewModel: CoreViewModel,
|
coreViewModel: CoreViewModel,
|
||||||
@@ -76,16 +77,19 @@ function SettingsLeftPane(
|
|||||||
<div class="flex-column gap slide-up">
|
<div class="flex-column gap slide-up">
|
||||||
<h2>{coreViewModel.translations.homePage.settingsButton}</h2>
|
<h2>{coreViewModel.translations.homePage.settingsButton}</h2>
|
||||||
{SettingsPaneButton(
|
{SettingsPaneButton(
|
||||||
|
coreViewModel,
|
||||||
settingsViewModel,
|
settingsViewModel,
|
||||||
SettingsModalPages.Appearance,
|
SettingsModalPages.Appearance,
|
||||||
coreViewModel.translations.settings.pages.appearance,
|
coreViewModel.translations.settings.pages.appearance,
|
||||||
)}
|
)}
|
||||||
{SettingsPaneButton(
|
{SettingsPaneButton(
|
||||||
|
coreViewModel,
|
||||||
settingsViewModel,
|
settingsViewModel,
|
||||||
SettingsModalPages.Regional,
|
SettingsModalPages.Regional,
|
||||||
coreViewModel.translations.settings.pages.regional,
|
coreViewModel.translations.settings.pages.regional,
|
||||||
)}
|
)}
|
||||||
{SettingsPaneButton(
|
{SettingsPaneButton(
|
||||||
|
coreViewModel,
|
||||||
settingsViewModel,
|
settingsViewModel,
|
||||||
SettingsModalPages.Info,
|
SettingsModalPages.Info,
|
||||||
coreViewModel.translations.settings.pages.info,
|
coreViewModel.translations.settings.pages.info,
|
||||||
@@ -95,22 +99,17 @@ function SettingsLeftPane(
|
|||||||
}
|
}
|
||||||
|
|
||||||
function SettingsPaneButton(
|
function SettingsPaneButton(
|
||||||
|
coreViewModel: CoreViewModel,
|
||||||
settingsViewModel: SettingsViewModel,
|
settingsViewModel: SettingsViewModel,
|
||||||
page: SettingsModalPages,
|
page: SettingsModalPages,
|
||||||
label: string,
|
label: string,
|
||||||
) {
|
) {
|
||||||
const isSelected = React.createProxyState(
|
return NavigationButton(
|
||||||
[settingsViewModel.selectedModalPage],
|
coreViewModel,
|
||||||
() => settingsViewModel.selectedModalPage.value == page,
|
label,
|
||||||
);
|
settingsViewModel.selectedModalPage,
|
||||||
|
page,
|
||||||
return (
|
true
|
||||||
<button
|
|
||||||
toggle:selected={isSelected}
|
|
||||||
on:click={() => settingsViewModel.showModalPage(page)}
|
|
||||||
>
|
|
||||||
{label}
|
|
||||||
</button>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user