App.tsx raw
1 import { createBrowserRouter, createHashRouter } from "react-router";
2 import { RouterProvider } from "react-router/dom";
3 import { Toaster } from "src/components/ui/sonner";
4 import { ThemeProvider } from "src/components/ui/theme-provider";
5 import { TouchProvider } from "src/components/ui/tooltip";
6 import { useInfo } from "src/hooks/useInfo";
7 import { useRegisterProtocolHandler } from "src/hooks/useRegisterProtocolHandler";
8 import routes from "src/routes.tsx";
9 import { isHttpMode } from "src/utils/isHttpMode";
10
11 const createRouterFunc = isHttpMode() ? createBrowserRouter : createHashRouter;
12 const basePath =
13 import.meta.env.BASE_URL !== "/" ? import.meta.env.BASE_URL : "";
14 const router = createRouterFunc(routes, {
15 // if running on a subpath, use the subpath as the router basename
16 // BASE_URL is set via process.env.BASE_PATH, see https://vite.dev/guide/build#public-base-path
17 basename: basePath || undefined,
18 });
19
20 function App() {
21 const { data: info } = useInfo();
22
23 useRegisterProtocolHandler(basePath);
24
25 return (
26 <>
27 <TouchProvider>
28 <ThemeProvider
29 defaultTheme="alby"
30 defaultDarkMode="system"
31 storageKey="vite-ui-theme"
32 >
33 {info && <RouterProvider router={router} />}
34 <Toaster position="bottom-right" richColors={true} />
35 </ThemeProvider>
36 </TouchProvider>
37 </>
38 );
39 }
40
41 export default App;
42