Skip to content

Commit 608a102

Browse files
committed
refactor: add options metadata to config meta
also use it in testconfig.tsx
1 parent 504eb4a commit 608a102

File tree

2 files changed

+50
-23
lines changed

2 files changed

+50
-23
lines changed

frontend/src/ts/components/pages/test/TestConfig.tsx

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ComponentProps, For, JSXElement, Show } from "solid-js";
22

3+
import { configMetadata } from "../../../config/metadata";
34
import { setConfig, setQuoteLengthAll } from "../../../config/setters";
45
import { getConfig } from "../../../config/store";
56
import { restartTestEvent } from "../../../events/test";
@@ -8,7 +9,7 @@ import { useRefWithUtils } from "../../../hooks/useRefWithUtils";
89
import { isLoggedIn } from "../../../states/core";
910
import { showModal } from "../../../states/modals";
1011
import { getResultVisible, getFocus } from "../../../states/test";
11-
import { FaSolidIcon } from "../../../types/font-awesome";
12+
import { FaObject } from "../../../types/font-awesome";
1213
import { areUnsortedArraysEqual } from "../../../utils/arrays";
1314
import { cn } from "../../../utils/cn";
1415
import { Anime, AnimeShow } from "../../common/anime";
@@ -59,7 +60,7 @@ export function TestConfig(): JSXElement {
5960
}
6061

6162
function TCButton(props: {
62-
icon: FaSolidIcon;
63+
fa: FaObject;
6364
text: string;
6465
active?: boolean;
6566
disabled?: boolean;
@@ -69,7 +70,7 @@ function TCButton(props: {
6970
<Button
7071
variant="text"
7172
class={cn(buttonClass)}
72-
fa={{ icon: props.icon, fixedWidth: true }}
73+
fa={{ ...props.fa, fixedWidth: true }}
7374
text={props.text}
7475
active={props.active}
7576
onClick={props.onClick}
@@ -79,10 +80,7 @@ function TCButton(props: {
7980
}
8081

8182
function PuncAndNum(): JSXElement {
82-
const buttons = [
83-
{ icon: "fa-at", configKey: "punctuation" },
84-
{ icon: "fa-hashtag", configKey: "numbers" },
85-
] as const;
83+
const buttons = ["punctuation", "numbers"] as const;
8684

8785
return (
8886
<Anime
@@ -96,10 +94,10 @@ function PuncAndNum(): JSXElement {
9694
<AnimeShow when={getConfig.mode !== "zen"} duration={durationMs}>
9795
<div class={cardClass}>
9896
<For each={buttons}>
99-
{({ icon, configKey }) => (
97+
{(configKey) => (
10098
<TCButton
101-
icon={icon}
102-
text={configKey}
99+
fa={configMetadata[configKey].fa}
100+
text={configMetadata[configKey].displayString ?? configKey}
103101
active={getConfig[configKey]}
104102
disabled={
105103
getConfig.mode === "zen" || getConfig.mode === "quote"
@@ -118,24 +116,24 @@ function PuncAndNum(): JSXElement {
118116
}
119117

120118
function Mode(): JSXElement {
121-
const modes = [
122-
{ icon: "fa-clock", mode: "time" },
123-
{ icon: "fa-font", mode: "words" },
124-
{ icon: "fa-quote-left", mode: "quote" },
125-
{ icon: "fa-mountain", mode: "zen" },
126-
{ icon: "fa-wrench", mode: "custom" },
127-
] as const;
119+
const modeOptions = ["time", "words", "quote", "zen", "custom"] as const;
128120

129121
return (
130122
<div class={cn("z-2", cardClass)}>
131-
<For each={modes}>
132-
{({ icon, mode }) => (
123+
<For each={modeOptions}>
124+
{(modeOption) => (
133125
<TCButton
134-
icon={icon}
135-
text={mode}
136-
active={getConfig.mode === mode}
126+
fa={
127+
configMetadata.mode.optionsMetadata?.[modeOption]?.fa ??
128+
configMetadata.mode.fa
129+
}
130+
text={
131+
configMetadata.mode.optionsMetadata?.[modeOption]
132+
?.displayString ?? modeOption
133+
}
134+
active={getConfig.mode === modeOption}
137135
onClick={() => {
138-
setConfig("mode", mode);
136+
setConfig("mode", modeOption);
139137
restartTestEvent.dispatch();
140138
}}
141139
/>

frontend/src/ts/config/metadata.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,18 @@ export type ConfigMetadata<K extends keyof ConfigSchemas.Config> = {
3838
*/
3939
fa: FaObject;
4040

41+
optionsMetadata?: ConfigSchemas.Config[K] extends string | number | symbol
42+
? Partial<
43+
Record<
44+
ConfigSchemas.Config[K],
45+
{
46+
displayString?: string;
47+
fa?: FaObject;
48+
}
49+
>
50+
>
51+
: never;
52+
4153
// commandline?: {
4254
// displayValues?: ConfigSchemas.Config[K] extends string | number | symbol
4355
// ? Partial<Record<ConfigSchemas.Config[K], string>>
@@ -164,6 +176,23 @@ export const configMetadata: ConfigMetadataObject = {
164176
key: "mode",
165177
fa: { icon: "fa-bars" },
166178
changeRequiresRestart: true,
179+
optionsMetadata: {
180+
time: {
181+
fa: { icon: "fa-clock" },
182+
},
183+
words: {
184+
fa: { icon: "fa-font" },
185+
},
186+
quote: {
187+
fa: { icon: "fa-quote-left" },
188+
},
189+
zen: {
190+
fa: { icon: "fa-mountain" },
191+
},
192+
custom: {
193+
fa: { icon: "fa-wrench" },
194+
},
195+
},
167196
group: "test",
168197
overrideConfig: ({ value }) => {
169198
if (value === "custom" || value === "quote" || value === "zen") {

0 commit comments

Comments
 (0)