Skip to content

Commit e3ccdc2

Browse files
committed
refactor: replace LobbyPresetStore with LobbyPresetControls for preset management in HostLobbyModal and SinglePlayerModal
1 parent fadf9a5 commit e3ccdc2

File tree

3 files changed

+53
-32
lines changed

3 files changed

+53
-32
lines changed

src/client/HostLobbyModal.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import {
2727
import { generateID } from "../core/Util";
2828
import "./components/baseComponents/Modal";
2929
import "./components/Difficulties";
30-
import { LobbyPresetStore } from "./components/lobbyConfig/PresetControls";
30+
import { LobbyPresetControls } from "./components/lobbyConfig/PresetControls";
3131
import "./components/LobbyTeamView";
3232
import "./components/Maps";
3333
import { JoinLobbyEvent } from "./Main";
@@ -70,7 +70,6 @@ export class HostLobbyModal extends LitElement {
7070
// Add a new timer for debouncing bot changes
7171
private botsUpdateTimer: number | null = null;
7272
private userSettings: UserSettings = new UserSettings();
73-
private presetStore = new LobbyPresetStore(this.userSettings);
7473
private mapLoader = terrainMapFileLoader;
7574

7675
connectedCallback() {
@@ -664,7 +663,7 @@ export class HostLobbyModal extends LitElement {
664663
}
665664

666665
private loadPresets() {
667-
this.lobbyPresets = this.presetStore.list();
666+
this.lobbyPresets = LobbyPresetControls.listPresets(this.userSettings);
668667
}
669668

670669
private handlePresetSelect(e: CustomEvent<string>) {
@@ -706,7 +705,11 @@ export class HostLobbyModal extends LitElement {
706705
if (!name) {
707706
return;
708707
}
709-
this.lobbyPresets = this.presetStore.save(name, this.buildPresetConfig());
708+
this.lobbyPresets = LobbyPresetControls.savePreset(
709+
this.userSettings,
710+
name,
711+
this.buildPresetConfig(),
712+
);
710713
this.selectedPresetName = name;
711714
this.presetNameInput = "";
712715
}
@@ -748,7 +751,10 @@ export class HostLobbyModal extends LitElement {
748751
if (!presetName) {
749752
return;
750753
}
751-
this.lobbyPresets = this.presetStore.delete(presetName);
754+
this.lobbyPresets = LobbyPresetControls.deletePreset(
755+
this.userSettings,
756+
presetName,
757+
);
752758
if (this.selectedPresetName === presetName) {
753759
this.selectedPresetName = "";
754760
}

src/client/SinglePlayerModal.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { generateID } from "../core/Util";
2525
import "./components/baseComponents/Button";
2626
import "./components/baseComponents/Modal";
2727
import "./components/Difficulties";
28-
import { LobbyPresetStore } from "./components/lobbyConfig/PresetControls";
28+
import { LobbyPresetControls } from "./components/lobbyConfig/PresetControls";
2929
import "./components/Maps";
3030
import { fetchCosmetics } from "./Cosmetics";
3131
import { FlagInput } from "./FlagInput";
@@ -62,7 +62,6 @@ export class SinglePlayerModal extends LitElement {
6262
@state() private presetNameInput = "";
6363

6464
private userSettings: UserSettings = new UserSettings();
65-
private presetStore = new LobbyPresetStore(this.userSettings);
6665

6766
connectedCallback() {
6867
super.connectedCallback();
@@ -450,7 +449,7 @@ export class SinglePlayerModal extends LitElement {
450449
}
451450

452451
private loadPresets() {
453-
this.lobbyPresets = this.presetStore.list();
452+
this.lobbyPresets = LobbyPresetControls.listPresets(this.userSettings);
454453
}
455454

456455
private handlePresetSelect(e: CustomEvent<string>) {
@@ -492,7 +491,11 @@ export class SinglePlayerModal extends LitElement {
492491
if (!name) {
493492
return;
494493
}
495-
this.lobbyPresets = this.presetStore.save(name, this.buildPresetConfig());
494+
this.lobbyPresets = LobbyPresetControls.savePreset(
495+
this.userSettings,
496+
name,
497+
this.buildPresetConfig(),
498+
);
496499
this.selectedPresetName = name;
497500
this.presetNameInput = "";
498501
}
@@ -531,7 +534,10 @@ export class SinglePlayerModal extends LitElement {
531534
if (!presetName) {
532535
return;
533536
}
534-
this.lobbyPresets = this.presetStore.delete(presetName);
537+
this.lobbyPresets = LobbyPresetControls.deletePreset(
538+
this.userSettings,
539+
presetName,
540+
);
535541
if (this.selectedPresetName === presetName) {
536542
this.selectedPresetName = "";
537543
}

src/client/components/lobbyConfig/PresetControls.ts

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,37 +11,53 @@ import {
1111
import { translateText } from "../../Utils";
1212
import "../baseComponents/Button";
1313

14-
export class LobbyPresetStore {
15-
constructor(private userSettings = new UserSettings()) {}
14+
@customElement("lobby-preset-controls")
15+
export class LobbyPresetControls extends LitElement {
16+
@property({ type: Array }) presets: LobbyPreset[] = [];
17+
@property({ type: String }) selectedName = "";
18+
@property({ type: String }) nameInput = "";
1619

17-
list(): LobbyPreset[] {
18-
return this.userSettings
20+
static listPresets(userSettings = new UserSettings()): LobbyPreset[] {
21+
return userSettings
1922
.getLobbyPresets()
20-
.map((preset) => this.normalizePreset(preset));
23+
.map((preset) => LobbyPresetControls.normalizePreset(preset));
2124
}
2225

23-
save(name: string, config: LobbyPresetConfig): LobbyPreset[] {
24-
const presets = this.list().filter((preset) => preset.name !== name);
26+
static savePreset(
27+
userSettings: UserSettings,
28+
name: string,
29+
config: LobbyPresetConfig,
30+
): LobbyPreset[] {
31+
const presets = LobbyPresetControls.listPresets(userSettings).filter(
32+
(preset) => preset.name !== name,
33+
);
2534
const updated = [
2635
...presets,
27-
{ name, config: this.normalizePresetConfig(config) },
36+
{
37+
name,
38+
config: LobbyPresetControls.normalizePresetConfig(config),
39+
},
2840
];
29-
this.userSettings.setLobbyPresets(updated);
41+
userSettings.setLobbyPresets(updated);
3042
return updated;
3143
}
3244

33-
delete(name: string): LobbyPreset[] {
34-
const updated = this.list().filter((preset) => preset.name !== name);
35-
this.userSettings.setLobbyPresets(updated);
45+
static deletePreset(userSettings: UserSettings, name: string): LobbyPreset[] {
46+
const updated = LobbyPresetControls.listPresets(userSettings).filter(
47+
(preset) => preset.name !== name,
48+
);
49+
userSettings.setLobbyPresets(updated);
3650
return updated;
3751
}
3852

39-
private normalizePreset(preset: LobbyPreset): LobbyPreset {
40-
const config = this.normalizePresetConfig(preset?.config ?? {});
53+
private static normalizePreset(preset: LobbyPreset): LobbyPreset {
54+
const config = LobbyPresetControls.normalizePresetConfig(
55+
preset?.config ?? {},
56+
);
4157
return { name: preset?.name ?? "Preset", config };
4258
}
4359

44-
private normalizePresetConfig(
60+
private static normalizePresetConfig(
4561
config: Partial<LobbyPresetConfig>,
4662
): LobbyPresetConfig {
4763
const parsed = LobbyPresetConfigSchema.parse(config);
@@ -65,13 +81,6 @@ export class LobbyPresetStore {
6581
disabledUnits: parsed.disabledUnits ?? [],
6682
};
6783
}
68-
}
69-
70-
@customElement("lobby-preset-controls")
71-
export class LobbyPresetControls extends LitElement {
72-
@property({ type: Array }) presets: LobbyPreset[] = [];
73-
@property({ type: String }) selectedName = "";
74-
@property({ type: String }) nameInput = "";
7584

7685
createRenderRoot() {
7786
return this;

0 commit comments

Comments
 (0)