Skip to content

Commit f932d2c

Browse files
refactor(ui): More consistent component construction
1 parent 7f6ea1b commit f932d2c

32 files changed

+382
-450
lines changed

packages/userscript/source/settings/EngineSettings.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { isNil, Maybe } from "../tools/Maybe";
2-
import { FilterSettings } from "./FilterSettings";
2+
import { LogFilterSettings } from "./LogFilterSettings";
33
import { ResourcesSettings } from "./ResourcesSettings";
44
import { Setting } from "./Settings";
55
import { LegacyStorage } from "./SettingsStorage";
@@ -10,12 +10,12 @@ export class EngineSettings extends Setting {
1010
*/
1111
interval = 2000;
1212

13-
filters: FilterSettings;
13+
filters: LogFilterSettings;
1414
resources: ResourcesSettings;
1515

1616
constructor(
1717
enabled = false,
18-
filters = new FilterSettings(),
18+
filters = new LogFilterSettings(),
1919
resources = new ResourcesSettings()
2020
) {
2121
super(enabled);
@@ -42,7 +42,7 @@ export class EngineSettings extends Setting {
4242
options.interval = subject.interval ?? options.interval;
4343
options.enabled = subject.toggles.engine ?? options.enabled;
4444

45-
options.filters = FilterSettings.fromLegacyOptions(subject);
45+
options.filters = LogFilterSettings.fromLegacyOptions(subject);
4646
options.resources = ResourcesSettings.fromLegacyOptions(subject);
4747

4848
return options;

packages/userscript/source/settings/FilterSettings.ts

Lines changed: 0 additions & 124 deletions
This file was deleted.
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
2+
import { isNil, Maybe } from "../tools/Maybe";
3+
import { Setting } from "./Settings";
4+
import { LegacyStorage } from "./SettingsStorage";
5+
6+
export enum LogFilterItemVariant {
7+
Build = "ks-activity type_ks-build",
8+
Craft = "ks-activity type_ks-craft",
9+
Upgrade = "ks-activity type_ks-upgrade",
10+
Research = "ks-activity type_ks-research",
11+
Trade = "ks-activity type_ks-trade",
12+
Hunt = "ks-activity type_ks-hunt",
13+
Praise = "ks-activity type_ks-praise",
14+
Adore = "ks-activity type_ks-adore",
15+
Transcend = "ks-activity type_ks-transcend",
16+
Faith = "ks-activity type_ks-faith",
17+
Accelerate = "ks-activity type_ks-accelerate",
18+
TimeSkip = "ks-activity type_ks-timeSkip",
19+
Festival = "ks-activity type_ks-festival",
20+
Star = "ks-activity type_ks-star",
21+
Distribute = "ks-activity type_ks-distribute",
22+
Promote = "ks-activity type_ks-promote",
23+
Misc = "ks-activity",
24+
}
25+
26+
export type FilterItem =
27+
| "accelerateFilter"
28+
| "adoreFilter"
29+
| "buildFilter"
30+
| "craftFilter"
31+
| "distributeFilter"
32+
| "faithFilter"
33+
| "festivalFilter"
34+
| "huntFilter"
35+
| "miscFilter"
36+
| "praiseFilter"
37+
| "promoteFilter"
38+
| "researchFilter"
39+
| "starFilter"
40+
| "timeSkipFilter"
41+
| "tradeFilter"
42+
| "transcendFilter"
43+
| "upgradeFilter";
44+
45+
export class LogFilterSettingsItem extends Setting {
46+
variant: LogFilterItemVariant;
47+
48+
constructor(variant: LogFilterItemVariant) {
49+
super(true);
50+
this.variant = variant;
51+
}
52+
}
53+
54+
export type LogFilterSettingsItems = {
55+
build: LogFilterSettingsItem;
56+
craft: LogFilterSettingsItem;
57+
upgrade: LogFilterSettingsItem;
58+
research: LogFilterSettingsItem;
59+
trade: LogFilterSettingsItem;
60+
hunt: LogFilterSettingsItem;
61+
praise: LogFilterSettingsItem;
62+
adore: LogFilterSettingsItem;
63+
transcend: LogFilterSettingsItem;
64+
faith: LogFilterSettingsItem;
65+
accelerate: LogFilterSettingsItem;
66+
timeSkip: LogFilterSettingsItem;
67+
festival: LogFilterSettingsItem;
68+
star: LogFilterSettingsItem;
69+
distribute: LogFilterSettingsItem;
70+
promote: LogFilterSettingsItem;
71+
misc: LogFilterSettingsItem;
72+
};
73+
74+
export class LogFilterSettings extends Setting {
75+
filters: LogFilterSettingsItems;
76+
77+
constructor(
78+
enabled = false,
79+
filters: LogFilterSettingsItems = {
80+
build: new LogFilterSettingsItem(LogFilterItemVariant.Build),
81+
craft: new LogFilterSettingsItem(LogFilterItemVariant.Craft),
82+
upgrade: new LogFilterSettingsItem(LogFilterItemVariant.Upgrade),
83+
research: new LogFilterSettingsItem(LogFilterItemVariant.Research),
84+
trade: new LogFilterSettingsItem(LogFilterItemVariant.Trade),
85+
hunt: new LogFilterSettingsItem(LogFilterItemVariant.Hunt),
86+
praise: new LogFilterSettingsItem(LogFilterItemVariant.Praise),
87+
adore: new LogFilterSettingsItem(LogFilterItemVariant.Adore),
88+
transcend: new LogFilterSettingsItem(LogFilterItemVariant.Transcend),
89+
faith: new LogFilterSettingsItem(LogFilterItemVariant.Faith),
90+
accelerate: new LogFilterSettingsItem(LogFilterItemVariant.Accelerate),
91+
timeSkip: new LogFilterSettingsItem(LogFilterItemVariant.TimeSkip),
92+
festival: new LogFilterSettingsItem(LogFilterItemVariant.Festival),
93+
star: new LogFilterSettingsItem(LogFilterItemVariant.Star),
94+
distribute: new LogFilterSettingsItem(LogFilterItemVariant.Distribute),
95+
promote: new LogFilterSettingsItem(LogFilterItemVariant.Promote),
96+
misc: new LogFilterSettingsItem(LogFilterItemVariant.Misc),
97+
}
98+
) {
99+
super(enabled);
100+
this.filters = filters;
101+
}
102+
103+
load(settings: Maybe<Partial<LogFilterSettings>>) {
104+
if (isNil(settings)) {
105+
return;
106+
}
107+
108+
super.load(settings);
109+
110+
consumeEntriesPedantic(this.filters, settings.filters, (filter, item) => {
111+
filter.enabled = item?.enabled ?? filter.enabled;
112+
});
113+
}
114+
115+
static fromLegacyOptions(subject: LegacyStorage) {
116+
const options = new LogFilterSettings();
117+
options.enabled = subject.toggles.filter;
118+
119+
for (const [name, item] of objectEntries(options.filters)) {
120+
item.enabled = subject.items[`toggle-${name}Filter` as const] ?? item.enabled;
121+
}
122+
return options;
123+
}
124+
}

packages/userscript/source/settings/SettingsStorage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
Upgrade,
1414
} from "../types";
1515
import { BonfireItem } from "./BonfireSettings";
16-
import { FilterItem } from "./FilterSettings";
16+
import { FilterItem } from "./LogFilterSettings";
1717
import { FaithItem, ReligionAdditionItem, UnicornItem } from "./ReligionSettings";
1818
import { ScienceItem } from "./ScienceSettings";
1919
import { AllItems } from "./Settings";

packages/userscript/source/ui/FilterSettingsUi.ts renamed to packages/userscript/source/ui/LogFilterSettingsUi.ts

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import { FilterSettings, FilterSettingsItem } from "../settings/FilterSettings";
1+
import { LogFilterSettings, LogFilterSettingsItem } from "../settings/LogFilterSettings";
22
import { UserScript } from "../UserScript";
33
import { ExplainerListItem } from "./components/ExplainerListItem";
44
import { SettingListItem } from "./components/SettingListItem";
55
import { SettingsList } from "./components/SettingsList";
66
import { SettingsSectionUi } from "./SettingsSectionUi";
77

8-
export class FiltersSettingsUi extends SettingsSectionUi<FilterSettings> {
8+
export class LogFiltersSettingsUi extends SettingsSectionUi<LogFilterSettings> {
99
private readonly _filters: Array<SettingListItem>;
1010

11-
constructor(host: UserScript, settings: FilterSettings) {
11+
constructor(host: UserScript, settings: LogFilterSettings) {
1212
const label = host.engine.i18n("ui.filter");
1313
super(host, label, settings);
1414

@@ -100,18 +100,11 @@ export class FiltersSettingsUi extends SettingsSectionUi<FilterSettings> {
100100
},
101101
];
102102

103-
const makeButton = (option: FilterSettingsItem, label: string) =>
104-
new SettingListItem(
105-
this._host,
106-
label,
107-
option,
108-
{
109-
onCheck: () => this._host.engine.imessage("filter.enable", [label]),
110-
onUnCheck: () => this._host.engine.imessage("filter.disable", [label]),
111-
},
112-
false,
113-
false
114-
);
103+
const makeButton = (option: LogFilterSettingsItem, label: string) =>
104+
new SettingListItem(this._host, label, option, {
105+
onCheck: () => this._host.engine.imessage("filter.enable", [label]),
106+
onUnCheck: () => this._host.engine.imessage("filter.disable", [label]),
107+
});
115108

116109
this._filters = buttonTemplates
117110
.sort((a, b) => a.label.localeCompare(b.label))

packages/userscript/source/ui/ReligionSettingsUi.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export class ReligionSettingsUi extends SettingsSectionUi<ReligionSettings> {
5858
this._host.engine.i18n("option.faith.best.unicorn"),
5959
this.setting.bestUnicornBuilding,
6060
{
61+
delimiter: true,
6162
onCheck: () => {
6263
this._host.engine.imessage("status.sub.enable", [
6364
this._host.engine.i18n("option.faith.best.unicorn"),
@@ -74,9 +75,8 @@ export class ReligionSettingsUi extends SettingsSectionUi<ReligionSettings> {
7475
]);
7576
this.refreshUi();
7677
},
77-
},
78-
true,
79-
true
78+
upgradeIndicator: true,
79+
}
8080
);
8181

8282
const listBuildings = new SettingsList(this._host, {
@@ -211,8 +211,8 @@ export class ReligionSettingsUi extends SettingsSectionUi<ReligionSettings> {
211211
this._host,
212212
this._host.engine.i18n("option.faith.refineTears"),
213213
this.setting.refineTears,
214-
"integer",
215214
{
215+
behavior: "integer",
216216
onCheck: () =>
217217
this._host.engine.imessage("status.sub.enable", [
218218
this._host.engine.i18n("option.faith.refineTears"),
@@ -227,8 +227,8 @@ export class ReligionSettingsUi extends SettingsSectionUi<ReligionSettings> {
227227
this._host,
228228
this._host.engine.i18n("option.faith.refineTCs"),
229229
this.setting.refineTimeCrystals,
230-
"integer",
231230
{
231+
behavior: "integer",
232232
onCheck: () =>
233233
this._host.engine.imessage("status.sub.enable", [
234234
this._host.engine.i18n("option.faith.refineTCs"),
@@ -258,7 +258,6 @@ export class ReligionSettingsUi extends SettingsSectionUi<ReligionSettings> {
258258
this._host,
259259
this._host.engine.i18n("option.faith.adore"),
260260
this.setting.adore,
261-
"percentage",
262261
{
263262
onCheck: () =>
264263
this._host.engine.imessage("status.sub.enable", [
@@ -274,7 +273,6 @@ export class ReligionSettingsUi extends SettingsSectionUi<ReligionSettings> {
274273
this._host,
275274
this._host.engine.i18n("option.praise"),
276275
this.setting.autoPraise,
277-
"percentage",
278276
{
279277
onCheck: () =>
280278
this._host.engine.imessage("status.sub.enable", [

0 commit comments

Comments
 (0)