2023-03-19 17:01:08 +00:00
|
|
|
import "core-js/stable";
|
2023-11-19 19:03:35 +00:00
|
|
|
import "./stores/__old/imports";
|
|
|
|
import "@/setup/ga";
|
|
|
|
import "@/setup/index.css";
|
|
|
|
|
2023-11-18 14:12:31 +00:00
|
|
|
import React, { Suspense } from "react";
|
2023-09-01 13:37:03 +00:00
|
|
|
import type { ReactNode } from "react";
|
2022-02-16 20:30:12 +00:00
|
|
|
import ReactDOM from "react-dom";
|
2023-10-14 17:28:27 +00:00
|
|
|
import { HelmetProvider } from "react-helmet-async";
|
2023-02-19 15:05:19 +00:00
|
|
|
import { BrowserRouter, HashRouter } from "react-router-dom";
|
2023-11-05 16:56:56 +00:00
|
|
|
import { useAsync } from "react-use";
|
2023-02-24 19:12:20 +00:00
|
|
|
import { registerSW } from "virtual:pwa-register";
|
2023-01-07 20:36:18 +00:00
|
|
|
|
2023-11-05 16:56:56 +00:00
|
|
|
import { useAuthRestore } from "@/hooks/auth/useAuthRestore";
|
2023-10-24 18:34:54 +00:00
|
|
|
import { ErrorBoundary } from "@/pages/errors/ErrorBoundary";
|
2023-11-05 16:56:56 +00:00
|
|
|
import { MigrationPart } from "@/pages/parts/migrations/MigrationPart";
|
2023-01-07 20:36:18 +00:00
|
|
|
import App from "@/setup/App";
|
2023-10-21 20:14:54 +00:00
|
|
|
import { conf } from "@/setup/config";
|
2023-06-18 12:10:26 +00:00
|
|
|
import i18n from "@/setup/i18n";
|
2023-11-19 19:03:35 +00:00
|
|
|
import { BookmarkSyncer } from "@/stores/bookmarks/BookmarkSyncer";
|
2023-10-31 18:07:47 +00:00
|
|
|
import { useLanguageStore } from "@/stores/language";
|
2023-11-18 16:28:10 +00:00
|
|
|
import { useThemeStore } from "@/stores/theme";
|
2023-10-31 18:07:47 +00:00
|
|
|
|
2023-01-25 20:44:15 +00:00
|
|
|
import { initializeChromecast } from "./setup/chromecast";
|
2023-10-31 18:07:47 +00:00
|
|
|
import { initializeOldStores } from "./stores/__old/migrations";
|
2022-12-29 17:25:57 +00:00
|
|
|
|
|
|
|
// initialize
|
|
|
|
const key =
|
|
|
|
(window as any)?.__CONFIG__?.VITE_KEY ?? import.meta.env.VITE_KEY ?? null;
|
|
|
|
if (key) {
|
2023-02-22 20:41:13 +00:00
|
|
|
(window as any).initMW(conf().PROXY_URLS, key);
|
2022-12-29 17:25:57 +00:00
|
|
|
}
|
2023-01-25 20:44:15 +00:00
|
|
|
initializeChromecast();
|
2023-02-24 19:12:20 +00:00
|
|
|
registerSW({
|
2023-03-19 17:01:08 +00:00
|
|
|
immediate: true,
|
2023-02-24 19:12:20 +00:00
|
|
|
});
|
2021-07-13 22:31:37 +00:00
|
|
|
|
2023-11-18 14:12:31 +00:00
|
|
|
function LoadingScreen(props: { type: "user" | "lazy" }) {
|
|
|
|
return <p>Loading: {props.type}</p>;
|
|
|
|
}
|
|
|
|
|
2023-11-05 16:56:56 +00:00
|
|
|
function AuthWrapper() {
|
|
|
|
const status = useAuthRestore();
|
|
|
|
|
2023-11-18 14:12:31 +00:00
|
|
|
// TODO what to do when failing to load user data?
|
|
|
|
if (status.loading) return <LoadingScreen type="user" />;
|
2023-11-05 16:56:56 +00:00
|
|
|
if (status.error) return <p>Failed to fetch user data</p>;
|
|
|
|
return <App />;
|
|
|
|
}
|
|
|
|
|
|
|
|
function MigrationRunner() {
|
|
|
|
const status = useAsync(async () => {
|
|
|
|
i18n.changeLanguage(useLanguageStore.getState().language);
|
|
|
|
await initializeOldStores();
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
if (status.loading) return <MigrationPart />;
|
|
|
|
if (status.error) return <p>Failed to migrate</p>;
|
|
|
|
return <AuthWrapper />;
|
|
|
|
}
|
2023-02-11 23:41:55 +00:00
|
|
|
|
2023-02-19 15:05:19 +00:00
|
|
|
function TheRouter(props: { children: ReactNode }) {
|
|
|
|
const normalRouter = conf().NORMAL_ROUTER;
|
2023-02-19 17:03:54 +00:00
|
|
|
|
|
|
|
if (normalRouter) return <BrowserRouter>{props.children}</BrowserRouter>;
|
|
|
|
return <HashRouter>{props.children}</HashRouter>;
|
2023-02-19 15:05:19 +00:00
|
|
|
}
|
|
|
|
|
2023-11-18 16:28:10 +00:00
|
|
|
function ThemeProvider(props: { children: ReactNode }) {
|
|
|
|
const theme = useThemeStore((s) => s.theme);
|
|
|
|
const themeSelector = theme ? `theme-${theme}` : undefined;
|
|
|
|
|
|
|
|
return <div className={themeSelector}>{props.children}</div>;
|
|
|
|
}
|
|
|
|
|
2021-07-13 22:31:37 +00:00
|
|
|
ReactDOM.render(
|
2022-02-16 20:30:12 +00:00
|
|
|
<React.StrictMode>
|
|
|
|
<ErrorBoundary>
|
2023-10-14 17:28:27 +00:00
|
|
|
<HelmetProvider>
|
2023-11-18 14:12:31 +00:00
|
|
|
<Suspense fallback={<LoadingScreen type="lazy" />}>
|
2023-11-18 16:28:10 +00:00
|
|
|
<ThemeProvider>
|
2023-11-19 19:03:35 +00:00
|
|
|
<BookmarkSyncer />
|
2023-11-18 16:28:10 +00:00
|
|
|
<TheRouter>
|
|
|
|
<MigrationRunner />
|
|
|
|
</TheRouter>
|
|
|
|
</ThemeProvider>
|
2023-11-18 14:12:31 +00:00
|
|
|
</Suspense>
|
2023-10-14 17:28:27 +00:00
|
|
|
</HelmetProvider>
|
2022-02-16 20:30:12 +00:00
|
|
|
</ErrorBoundary>
|
|
|
|
</React.StrictMode>,
|
|
|
|
document.getElementById("root")
|
2021-07-13 22:31:37 +00:00
|
|
|
);
|