From 11d02104d96f500cd7095caa28b3ee5eebea3b50 Mon Sep 17 00:00:00 2001
From: youtsuho <110821381+youtsuhodev@users.noreply.github.com>
Date: Mon, 15 Jun 2026 16:04:53 +0200
Subject: [PATCH 1/4] fix: first launch blank settings and theme (#1101)
---
src/shelter/settings/index.ts | 34 ++++++++++++---------
src/shelter/settings/pages/SettingsPage.tsx | 27 ++++++++--------
src/shelter/settings/pages/ThemesPage.tsx | 6 ++--
src/shelter/settings/settings.ts | 6 ++--
4 files changed, 39 insertions(+), 34 deletions(-)
diff --git a/src/shelter/settings/index.ts b/src/shelter/settings/index.ts
index fc232b8..90e89fe 100644
--- a/src/shelter/settings/index.ts
+++ b/src/shelter/settings/index.ts
@@ -22,26 +22,30 @@ const {
flux: { dispatcher, storesFlat },
} = shelter;
-const settingsPages = [
- registerSection("divider"),
- registerSection("header", "Legcord"),
- registerSection("section", "legcord-settings", "Settings", SettingsPage, { icon: SettingsSidebarIcon }),
- registerSection("section", "legcord-themes", "Themes", ThemesPage, { icon: ThemesSidebarIcon }),
- registerSection("section", "legcord-plugins", "Plugins", PluginsPage, { icon: PluginsSidebarIcon }),
- registerSection("section", "legcord-keybinds", "Keybinds", KeybindsPage, { icon: KeybindsSidebarIcon }),
- registerSection("section", "legcord-games", "Games", RegisteredGamesPage, { icon: GamesSidebarIcon }),
-];
+let settingsCleanups: (() => void)[] = [];
+
+function registerSections(): (() => void)[] {
+ return [
+ registerSection("divider"),
+ registerSection("header", "Legcord"),
+ registerSection("section", "legcord-settings", "Settings", SettingsPage, { icon: SettingsSidebarIcon }),
+ registerSection("section", "legcord-themes", "Themes", ThemesPage, { icon: ThemesSidebarIcon }),
+ registerSection("section", "legcord-plugins", "Plugins", PluginsPage, { icon: PluginsSidebarIcon }),
+ registerSection("section", "legcord-keybinds", "Keybinds", KeybindsPage, { icon: KeybindsSidebarIcon }),
+ registerSection("section", "legcord-games", "Games", RegisteredGamesPage, { icon: GamesSidebarIcon }),
+ ];
+}
function restartRequired(payload: { event: string; properties: { origin_pane: string } }) {
if (payload.event === "settings_pane_viewed" && typeof payload.properties.origin_pane !== "undefined") {
const pane = payload.properties.origin_pane;
if ((pane === "legcord-settings" || pane === "legcord-games") && isRestartRequired) {
openConfirmationModal({
- header: () => store.i18n["settings-restartRequired"],
- body: () => store.i18n["settings-restartRequiredBody"],
+ header: () => store.i18n?.["settings-restartRequired"] ?? "Restart required",
+ body: () => store.i18n?.["settings-restartRequiredBody"] ?? "A restart is required to apply changes.",
type: "danger",
- confirmText: store.i18n["settings-restart"],
- cancelText: store.i18n["settings-restartLater"],
+ confirmText: store.i18n?.["settings-restart"] ?? "Restart",
+ cancelText: store.i18n?.["settings-restartLater"] ?? "Later",
}).then(
() => window.legcord.restart(),
() => console.log("restart skipped"),
@@ -57,11 +61,11 @@ export function onLoad() {
store.i18n = window.legcord.translations;
log("Legcord Settings");
window.legcord.settings.setLang(storesFlat.LocaleStore.locale);
- settingsPages;
+ settingsCleanups = registerSections();
dispatcher.subscribe("TRACK", restartRequired);
}
export function onUnload() {
- settingsPages.forEach((e) => {
+ settingsCleanups.forEach((e) => {
e();
});
dispatcher.unsubscribe("TRACK", restartRequired);
diff --git a/src/shelter/settings/pages/SettingsPage.tsx b/src/shelter/settings/pages/SettingsPage.tsx
index bfd5b64..92285ad 100644
--- a/src/shelter/settings/pages/SettingsPage.tsx
+++ b/src/shelter/settings/pages/SettingsPage.tsx
@@ -12,21 +12,24 @@ const {
ui: { SwitchItem, Header, HeaderTags, Button, ButtonSizes },
} = shelter;
-const settings = store.settings as Settings;
-const noBundleUpdates = () => {
+const noBundleUpdates = (settings: Settings) => {
const value = settings.noBundleUpdates;
if (Array.isArray(value)) return value;
return value ? ["shelter", "vencord", "equicord", "custom"] : [];
};
export function SettingsPage() {
+ const settings = store.settings as Settings;
if (!settings) {
return (
<>
- {store.i18n["settings-firstTimeCrash"]}
+ {store.i18n?.["settings-firstTimeCrash"] ?? "Setting things up..."}
-
{store.i18n["settings-firstTimeCrash-desc"]}
+
+ {store.i18n?.["settings-firstTimeCrash-desc"] ??
+ "Settings are not available on a first-time launch. Please restart."}
+