github-actions[bot]
Sync to HuggingFace Spaces
6b3405c
import { Route, Switch } from "wouter";
import { MantineProvider } from "@mantine/core";
import "@mantine/core/styles.css";
import { lazy, useEffect, useState } from "react";
import { usePubSub } from "create-pubsub/react";
import { settingsPubSub } from "../../modules/pubSub";
import { defaultSettings } from "../../modules/settings";
import { addLogEntry } from "../../modules/logEntries";
import { Notifications } from "@mantine/notifications";
import "@mantine/notifications/styles.css";
import { match } from "ts-pattern";
import { verifyStoredAccessKey } from "../../modules/accessKey";
const MainPage = lazy(() => import("../Pages/Main/MainPage"));
const AccessPage = lazy(() => import("../Pages/AccessPage"));
export function App() {
useInitializeSettings();
const [hasValidatedAccessKey, setValidatedAccessKey] = useState(false);
const [isCheckingStoredKey, setCheckingStoredKey] = useState(true);
useEffect(() => {
async function checkStoredAccessKey() {
if (VITE_ACCESS_KEYS_ENABLED) {
const isValid = await verifyStoredAccessKey();
if (isValid) setValidatedAccessKey(true);
}
setCheckingStoredKey(false);
}
checkStoredAccessKey();
}, []);
if (isCheckingStoredKey) return null;
return (
<MantineProvider defaultColorScheme="dark">
<Notifications />
<Switch>
<Route path="/">
{match([VITE_ACCESS_KEYS_ENABLED, hasValidatedAccessKey])
.with([true, false], () => (
<AccessPage
onAccessKeyValid={() => setValidatedAccessKey(true)}
/>
))
.otherwise(() => (
<MainPage />
))}
</Route>
</Switch>
</MantineProvider>
);
}
/**
* A custom React hook that initializes the application settings.
*
* @returns The initialized settings object.
*
* @remarks
* This hook uses the `usePubSub` hook to access and update the settings state.
* It initializes the settings by merging the default settings with any existing settings.
* The initialization is performed once when the component mounts.
*/
function useInitializeSettings() {
const [settings, setSettings] = usePubSub(settingsPubSub);
useEffect(() => {
setSettings({ ...defaultSettings, ...settings });
addLogEntry("Settings initialized");
}, []);
return settings;
}