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