diff --git a/bun.lockb b/bun.lockb index a6e4ede..f12491a 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/packages/webui/package.json b/packages/webui/package.json index 69a4ce8..1da50bf 100644 --- a/packages/webui/package.json +++ b/packages/webui/package.json @@ -11,6 +11,7 @@ "dependencies": { "@effect/schema": "^0.68.17", "@tanstack/react-query": "4", + "@tanstack/react-router": "^1.44.2", "@thilawyn/thilalib": "^0.1.5", "@todo-tests/common": "workspace:*", "@trpc/client": "^10.45.2", @@ -23,6 +24,8 @@ "react-dom": "^18.3.1" }, "devDependencies": { + "@tanstack/router-devtools": "^1.44.2", + "@tanstack/router-plugin": "^1.44.3", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^7.15.0", diff --git a/packages/webui/src/App.tsx b/packages/webui/src/App.tsx deleted file mode 100644 index 89b745e..0000000 --- a/packages/webui/src/App.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { PrimeReactProvider } from "primereact/api" -import "primereact/resources/themes/lara-light-cyan/theme.css" -import "./index.css" -import { VTodosSubscription } from "./todo/VTodosSubscription" -import { TRPCClientProvider } from "./trpc/TRPCClientProvider" - - -export function App() { - - return ( - - - {/* */} - - - - ) - -} diff --git a/packages/webui/src/Index.tsx b/packages/webui/src/Index.tsx deleted file mode 100644 index 1e33d3b..0000000 --- a/packages/webui/src/Index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { Schema as S } from "@effect/schema" -import { JsonifiableTodo } from "@todo-tests/common/data" -import { flow } from "effect" -import { observable } from "mobx" -import { Todo } from "./data" -import { VTodos } from "./todo/VTodos" -import { trpc } from "./trpc/trpc" - - -const decodeTodos = flow( - S.decodeSync( - S.mutable(S.Array( - JsonifiableTodo.pipe(S.compose(Todo)) - )) - ), - - observable.array, -) - - -export function Index() { - - const todosQuery = trpc.todos.all.useQuery(undefined, { select: decodeTodos }) - - - return <> -
-

Todos

- - {function() { - switch (todosQuery.status) { - case "success": - return - - case "error": - return

Failed.

- - case "loading": - return

Loading...

- } - }()} -
- - -} diff --git a/packages/webui/src/main.tsx b/packages/webui/src/main.tsx index d9b858e..5451a81 100644 --- a/packages/webui/src/main.tsx +++ b/packages/webui/src/main.tsx @@ -1,10 +1,29 @@ +import { RouterProvider, createRouter } from "@tanstack/react-router" +import { PrimeReactProvider } from "primereact/api" import React from "react" import ReactDOM from "react-dom/client" -import { App } from "./App" +import { routeTree } from "./routeTree.gen" +import { TRPCClientProvider } from "./trpc/TRPCClientProvider" + +import "primereact/resources/themes/lara-light-cyan/theme.css" +import "./index.css" + + +const router = createRouter({ routeTree }) + +declare module "@tanstack/react-router" { + interface Register { + router: typeof router + } +} ReactDOM.createRoot(document.getElementById("root")!).render( - + + + + + ) diff --git a/packages/webui/src/routeTree.gen.ts b/packages/webui/src/routeTree.gen.ts new file mode 100644 index 0000000..e8428b4 --- /dev/null +++ b/packages/webui/src/routeTree.gen.ts @@ -0,0 +1,62 @@ +/* prettier-ignore-start */ + +/* eslint-disable */ + +// @ts-nocheck + +// noinspection JSUnusedGlobalSymbols + +// This file is auto-generated by TanStack Router + +import { createFileRoute } from '@tanstack/react-router' + +// Import Routes + +import { Route as rootRoute } from './routes/__root' + +// Create Virtual Routes + +const IndexLazyImport = createFileRoute('/')() + +// Create/Update Routes + +const IndexLazyRoute = IndexLazyImport.update({ + path: '/', + getParentRoute: () => rootRoute, +} as any).lazy(() => import('./routes/index.lazy').then((d) => d.Route)) + +// Populate the FileRoutesByPath interface + +declare module '@tanstack/react-router' { + interface FileRoutesByPath { + '/': { + id: '/' + path: '/' + fullPath: '/' + preLoaderRoute: typeof IndexLazyImport + parentRoute: typeof rootRoute + } + } +} + +// Create and export the route tree + +export const routeTree = rootRoute.addChildren({ IndexLazyRoute }) + +/* prettier-ignore-end */ + +/* ROUTE_MANIFEST_START +{ + "routes": { + "__root__": { + "filePath": "__root.tsx", + "children": [ + "/" + ] + }, + "/": { + "filePath": "index.lazy.tsx" + } + } +} +ROUTE_MANIFEST_END */ diff --git a/packages/webui/src/routes/__root.tsx b/packages/webui/src/routes/__root.tsx new file mode 100644 index 0000000..98306c6 --- /dev/null +++ b/packages/webui/src/routes/__root.tsx @@ -0,0 +1,12 @@ +import { Outlet, createRootRoute } from "@tanstack/react-router" + + +export function Root() { + return <> +
+ +
+ +} + +export const Route = createRootRoute({ component: Root }) diff --git a/packages/webui/src/routes/index.lazy.tsx b/packages/webui/src/routes/index.lazy.tsx new file mode 100644 index 0000000..7bc912b --- /dev/null +++ b/packages/webui/src/routes/index.lazy.tsx @@ -0,0 +1,9 @@ +import { createLazyFileRoute } from "@tanstack/react-router" +import { VTodosSubscription } from "../todo/VTodosSubscription" + + +export function Index() { + return +} + +export const Route = createLazyFileRoute("/")({ component: Index }) diff --git a/packages/webui/vite.config.ts b/packages/webui/vite.config.ts index 5a33944..0949385 100644 --- a/packages/webui/vite.config.ts +++ b/packages/webui/vite.config.ts @@ -1,7 +1,13 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' +import { TanStackRouterVite } from "@tanstack/router-plugin/vite" +import { default as react, default as viteReact } from "@vitejs/plugin-react" +import { defineConfig } from "vite" + // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], + plugins: [ + TanStackRouterVite(), + viteReact(), + react(), + ] })