Files
koring-launcher/src/App.tsx
T

113 lines
3.9 KiB
TypeScript
Raw Normal View History

2026-06-28 03:37:07 +08:00
import { useEffect } from "react";
2026-06-19 23:50:40 +08:00
import { RootLayout } from "./layouts/RootLayout";
2026-06-20 02:34:10 +08:00
import { useRouteStore } from "./stores/routeStore";
import { useTheme } from "./hooks/useTheme";
2026-06-28 03:37:07 +08:00
import { useConfigStore } from "./stores/configStore";
import { syncThemeFromConfig } from "./stores/themeStore";
import { syncA11yFromConfig } from "./stores/a11yStore";
import { syncBackgroundFromConfig } from "./stores/backgroundStore";
import { useAuthStore } from "./stores/authStore";
2026-07-23 01:29:55 +08:00
import { useKoringAuthStore } from "./stores/koringAuthStore";
import type { AppConfig } from "./api/config";
2026-06-20 02:34:10 +08:00
import { Home } from "./pages/home";
import { Store } from "./pages/store";
import { Today } from "./pages/today";
import { PlayLink } from "./pages/play-link";
import { Setting } from "./pages/setting";
2026-07-23 01:29:55 +08:00
import { SettingLogin } from "./pages/setting/login";
2026-07-11 23:33:44 +08:00
import { Gallery } from "./pages/gallery";
2026-06-20 22:15:59 +08:00
import { TaskQueue } from "./pages/task-queue";
import { UpdatePage } from "./pages/update";
2026-06-20 12:46:08 +08:00
import { Debug } from "./pages/debug";
import { SplashDebug } from "./pages/debug/splash-debug";
import { DisplayDebug } from "./pages/debug/display-debug";
import { VersionCardDebug } from "./pages/debug/version-card-debug";
2026-06-20 22:15:59 +08:00
import { TaskDebug } from "./pages/debug/task-debug";
import { CrashDebug } from "./pages/debug/crash-debug";
2026-06-28 03:37:07 +08:00
import { Oobe } from "./pages/oobe";
import { OobeLanguage } from "./pages/oobe/step-language";
import { OobeAgreement } from "./pages/oobe/step-agreement";
2026-07-23 01:29:55 +08:00
import { OobeLogin } from "./pages/oobe/step-login";
import { OobeWelcome } from "./pages/oobe/step-welcome";
import { OobeVersion } from "./pages/oobe/step-version";
import { OobeBetaTest } from "./pages/oobe/step-beta-test";
import { OobeFinish } from "./pages/oobe/step-finish";
2026-08-04 01:28:16 +08:00
import { OobeLegal } from "./pages/oobe/step-legal";
2026-06-28 03:37:07 +08:00
import { OobeAboutInfo } from "./pages/oobe/about-info";
2026-06-19 23:50:40 +08:00
2026-06-20 02:34:10 +08:00
const pageMap = {
home: Home,
store: Store,
today: Today,
"play-link": PlayLink,
setting: Setting,
2026-07-23 01:29:55 +08:00
"setting/login": SettingLogin,
2026-07-11 23:33:44 +08:00
gallery: Gallery,
2026-06-20 22:15:59 +08:00
"task-queue": TaskQueue,
update: UpdatePage,
2026-06-28 03:37:07 +08:00
oobe: Oobe,
"oobe/language": OobeLanguage,
"oobe/agreement": OobeAgreement,
2026-07-23 01:29:55 +08:00
"oobe/login": OobeLogin,
"oobe/welcome": OobeWelcome,
"oobe/version": OobeVersion,
"oobe/beta-test": OobeBetaTest,
"oobe/finish": OobeFinish,
2026-06-28 03:37:07 +08:00
"oobe/about-info": OobeAboutInfo,
2026-08-04 01:28:16 +08:00
"oobe/legal": OobeLegal,
2026-06-20 02:34:10 +08:00
debug: Debug,
2026-06-20 12:46:08 +08:00
"debug-splash": SplashDebug,
"debug-display": DisplayDebug,
"debug-version-card": VersionCardDebug,
2026-06-20 22:15:59 +08:00
"debug-task": TaskDebug,
"debug-crash": CrashDebug,
2026-06-20 02:34:10 +08:00
} as const;
2026-06-19 23:50:40 +08:00
function App() {
2026-06-20 02:34:10 +08:00
useTheme();
const current = useRouteStore((s) => s.current);
const Page = pageMap[current];
2026-06-19 23:50:40 +08:00
2026-06-28 03:37:07 +08:00
useEffect(() => {
// Listen for preloaded config from main process
const unsub = window.electronAPI?.onConfigPreload((data) => {
const { config, isFirstLaunch } = data;
const cfg = config as AppConfig;
useConfigStore.getState().applyPreloaded(cfg, isFirstLaunch);
// 语言偏好 → <html lang>
document.documentElement.lang = (cfg as AppConfig).app?.language ?? "zh-CN";
2026-06-28 03:37:07 +08:00
syncThemeFromConfig();
syncA11yFromConfig();
syncBackgroundFromConfig();
useAuthStore.getState().initFromRegistry();
2026-07-23 01:29:55 +08:00
useKoringAuthStore.getState().initFromDisk();
// Navigate to OOBE on first launch or if oobe not completed
if (isFirstLaunch || cfg.oobe) {
useRouteStore.getState().navigate("oobe");
}
2026-06-28 03:37:07 +08:00
});
return () => { unsub?.(); };
2026-06-28 03:37:07 +08:00
}, []);
// 主进程权威配置广播 → 覆盖本地镜像并同步派生 store
useEffect(() => {
const unsub = window.electronAPI?.onConfigChanged((config) => {
useConfigStore.getState().applyChanged(config as AppConfig);
syncThemeFromConfig();
syncA11yFromConfig();
syncBackgroundFromConfig();
});
return () => { unsub?.(); };
}, []);
2026-06-19 23:50:40 +08:00
return (
<RootLayout>
2026-06-20 02:34:10 +08:00
<Page key={current} />
2026-06-19 23:50:40 +08:00
</RootLayout>
);
}
export default App;