authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-02-18 09:39:38-08:00
committergravatar for jmarminge@gmail.comJulius Marminge <jmarminge@gmail.com> 2026-02-18 23:54:48-08:00
logbcf8b14f3834aea98824f8b4688e2cdf5fbb6672
tree1512c1dde43ef8938c3fd459a0686e84a071ca43
parentfe69e9694252e56eec676c1858dbfeadccaab8da

move


5 files changed, 68 insertions(+), 73 deletions(-)

apps/web/src/App.tsx deleted-22
......@@ -1,22 +0,0 @@
1import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
2import { RouterProvider } from "@tanstack/react-router";
3
4import { AnchoredToastProvider, ToastProvider } from "./components/ui/toast";
5import { router } from "./router";
6import { StoreProvider } from "./store";
7
8const queryClient = new QueryClient();
9
10export default function App() {
11 return (
12 <QueryClientProvider client={queryClient}>
13 <StoreProvider>
14 <ToastProvider>
15 <AnchoredToastProvider>
16 <RouterProvider router={router} />
17 </AnchoredToastProvider>
18 </ToastProvider>
19 </StoreProvider>
20 </QueryClientProvider>
21 );
22}
apps/web/src/main.tsx+35-2
......@@ -1,11 +1,44 @@
11import React from "react";
22import ReactDOM from "react-dom/client";
3import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
4import { RouterProvider } from "@tanstack/react-router";
5import { AnchoredToastProvider, ToastProvider } from "./components/ui/toast";
6import { createHashHistory, createRouter, createBrowserHistory } from "@tanstack/react-router";
7import { StoreProvider } from "./store";
8
39import "@xterm/xterm/css/xterm.css";
410import "highlight.js/styles/github-dark.css";
5
6import App from "./App";
711import "./index.css";
812
13import { isElectron } from "./env";
14import { routeTree } from "./routeTree.gen";
15
16const history = isElectron ? createHashHistory() : createBrowserHistory();
17
18const queryClient = new QueryClient();
19
20const router = createRouter({
21 routeTree,
22 history,
23 context: {
24 queryClient,
25 },
26});
27
28function App() {
29 return (
30 <QueryClientProvider client={queryClient}>
31 <StoreProvider>
32 <ToastProvider>
33 <AnchoredToastProvider>
34 <RouterProvider router={router} />
35 </AnchoredToastProvider>
36 </ToastProvider>
37 </StoreProvider>
38 </QueryClientProvider>
39 );
40}
41
942ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
1043 <React.StrictMode>
1144 <App />
apps/web/src/router.tsx deleted-18
......@@ -1,18 +0,0 @@
1import { createHashHistory, createRouter } from "@tanstack/react-router";
2
3import { isElectron } from "./env";
4import { routeTree } from "./routeTree.gen";
5
6const useHashHistory =
7 isElectron && typeof window !== "undefined" && window.location.protocol === "file:";
8
9export const router = createRouter({
10 routeTree,
11 ...(useHashHistory ? { history: createHashHistory() } : {}),
12});
13
14declare module "@tanstack/react-router" {
15 interface Register {
16 router: typeof router;
17 }
18}
apps/web/src/routes/__root.tsx+31-29
......@@ -1,6 +1,6 @@
1import { Outlet, createRootRoute } from "@tanstack/react-router";
1import { Outlet, createRootRouteWithContext } from "@tanstack/react-router";
22import { useEffect, useRef } from "react";
3import { useQueryClient } from "@tanstack/react-query";
3import { QueryClient, useQueryClient } from "@tanstack/react-query";
44
55import { isElectron } from "../env";
66import { useNativeApi } from "../hooks/useNativeApi";
......@@ -10,6 +10,35 @@ import { createThread } from "../threadFactory";
1010import { useStore } from "../store";
1111import { onServerWelcome } from "../wsNativeApi";
1212
13export const Route = createRootRouteWithContext<{
14 queryClient: QueryClient;
15}>()({
16 component: RootRouteView,
17});
18
19function RootRouteView() {
20 const api = useNativeApi();
21
22 if (!api) {
23 return (
24 <div className="flex h-screen flex-col bg-background text-foreground">
25 <div className="flex flex-1 items-center justify-center">
26 <p className="text-sm text-muted-foreground">Connecting to T3 Code server...</p>
27 </div>
28 </div>
29 );
30 }
31
32 return (
33 <>
34 <EventRouter />
35 <AutoProjectBootstrap />
36 <DesktopProjectBootstrap />
37 <Outlet />
38 </>
39 );
40}
41
1342function EventRouter() {
1443 const api = useNativeApi();
1544 const { dispatch } = useStore();
......@@ -148,30 +177,3 @@ function DesktopProjectBootstrap() {
148177
149178 return null;
150179}
151
152function RootRouteView() {
153 const api = useNativeApi();
154
155 if (!api) {
156 return (
157 <div className="flex h-screen flex-col bg-background text-foreground">
158 <div className="flex flex-1 items-center justify-center">
159 <p className="text-sm text-muted-foreground">Connecting to T3 Code server...</p>
160 </div>
161 </div>
162 );
163 }
164
165 return (
166 <>
167 <EventRouter />
168 <AutoProjectBootstrap />
169 <DesktopProjectBootstrap />
170 <Outlet />
171 </>
172 );
173}
174
175export const Route = createRootRoute({
176 component: RootRouteView,
177});
apps/web/vite.config.ts+2-2
......@@ -1,13 +1,13 @@
11import tailwindcss from "@tailwindcss/vite";
22import react from "@vitejs/plugin-react";
3import { TanStackRouterVite } from "@tanstack/router-plugin/vite";
3import { tanstackRouter } from "@tanstack/router-plugin/vite";
44import { defineConfig } from "vite";
55
66const port = Number(process.env.PORT ?? 5173);
77
88export default defineConfig({
99 plugins: [
10 TanStackRouterVite(),
10 tanstackRouter(),
1111 react({
1212 babel: {
1313 plugins: [["babel-plugin-react-compiler", { target: "19" }]],