Files
controller-v2/client/src/App.tsx
T

101 lines
3.0 KiB
TypeScript
Raw Normal View History

2026-05-26 19:16:42 +08:00
import { lazy, Suspense } from "react";
import { Toaster } from "@/components/ui/sonner";
import { TooltipProvider } from "@/components/ui/tooltip";
import { Route, Switch, Router } from "wouter";
import { useHashLocation } from "wouter/use-hash-location";
import ErrorBoundary from "./components/ErrorBoundary";
2026-05-26 19:16:42 +08:00
import PageLoader from "./components/PageLoader";
import { ThemeProvider } from "./contexts/ThemeContext";
import { DeviceProvider } from "./contexts/DeviceContext";
import Home from "./pages/Home";
import NotFound from "./pages/NotFound";
import Dashboard from "./pages/Dashboard";
import AudioPage from "./pages/AudioPage";
import SystemPage from "./pages/SystemPage";
import IOPage from "./pages/IOPage";
import VUPage from "./pages/VUPage";
import SelectPage from "./pages/SelectPage";
import CommunityPage from "./pages/CommunityPage";
2026-05-08 18:15:52 +08:00
import { AIDrawerProvider } from "./contexts/AIDrawerContext";
import DesktopAIShell from "./components/DesktopAIShell";
2026-06-03 15:42:58 +08:00
import { appShellColumnClass, appShellOuterClass } from "./lib/appShell";
2026-05-08 18:15:52 +08:00
2026-05-26 19:16:42 +08:00
const EQPage = lazy(() => import("./pages/EQPage"));
const EffectsPage = lazy(() => import("./pages/EffectsPage"));
const AIPage = lazy(() => import("./pages/AIPage"));
function LazyRoute({ children }: { children: React.ReactNode }) {
return <Suspense fallback={<PageLoader />}>{children}</Suspense>;
}
2026-05-08 18:15:52 +08:00
function AIPageRoute() {
2026-05-26 19:16:42 +08:00
return (
<LazyRoute>
<AIPage />
</LazyRoute>
);
}
function EQPageRoute() {
return (
<LazyRoute>
<EQPage />
</LazyRoute>
);
}
function EffectsPageRoute() {
return (
<LazyRoute>
<EffectsPage />
</LazyRoute>
);
2026-05-08 18:15:52 +08:00
}
function AppRouter() {
return (
<Switch>
<Route path="/" component={Home} />
<Route path="/dashboard" component={Dashboard} />
<Route path="/audio" component={AudioPage} />
2026-05-26 19:16:42 +08:00
<Route path="/eq" component={EQPageRoute} />
<Route path="/effects" component={EffectsPageRoute} />
<Route path="/system" component={SystemPage} />
<Route path="/io" component={IOPage} />
<Route path="/vu" component={VUPage} />
<Route path="/select" component={SelectPage} />
2026-05-08 18:15:52 +08:00
<Route path="/ai" component={AIPageRoute} />
<Route path="/community" component={CommunityPage} />
<Route path="/404" component={NotFound} />
<Route component={NotFound} />
</Switch>
);
}
function App() {
return (
<ErrorBoundary>
<ThemeProvider defaultTheme="dark">
<DeviceProvider>
<TooltipProvider>
<Toaster />
<Router hook={useHashLocation}>
2026-05-08 18:15:52 +08:00
<AIDrawerProvider>
2026-06-03 15:42:58 +08:00
<div className={appShellOuterClass}>
<div className={appShellColumnClass}>
2026-05-08 18:15:52 +08:00
<DesktopAIShell>
<AppRouter />
</DesktopAIShell>
</div>
</div>
2026-05-08 18:15:52 +08:00
</AIDrawerProvider>
</Router>
</TooltipProvider>
</DeviceProvider>
</ThemeProvider>
</ErrorBoundary>
);
}
export default App;