diff --git a/apps/web/src/entry-server.ts b/apps/web/src/entry-server.ts new file mode 100644 index 0000000..4776305 --- /dev/null +++ b/apps/web/src/entry-server.ts @@ -0,0 +1,18 @@ +import { + createStartHandler, + defaultStreamHandler, +} from "@tanstack/react-start/server"; + +const handler = createStartHandler(defaultStreamHandler); + +export default { + async fetch(request: Request): Promise { + const response = await handler(request); + response.headers.set( + "Cross-Origin-Embedder-Policy", + "credentialless", + ); + response.headers.set("Cross-Origin-Opener-Policy", "same-origin"); + return response; + }, +}; diff --git a/apps/web/src/routes/_default.timelines.tsx b/apps/web/src/routes/_default.timelines.tsx index e84abef..cad0169 100644 --- a/apps/web/src/routes/_default.timelines.tsx +++ b/apps/web/src/routes/_default.timelines.tsx @@ -1,4 +1,4 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { createFileRoute, Link } from "@tanstack/react-router"; import { useSuspenseQuery } from "@tanstack/react-query"; import { timelinesQueryOptions } from "@/functions/get-timelines"; @@ -12,13 +12,27 @@ export const Route = createFileRoute("/_default/timelines")({ function RouteComponent() { const timelinesQuery = useSuspenseQuery(timelinesQueryOptions()); return ( -
-

List of timelines

-
- {timelinesQuery.data.map((t) => ( -
{t.title}
- ))} -
-
+
+

Timelines

+ {timelinesQuery.data.length === 0 ? ( +

No timelines yet.

+ ) : ( +
+ {timelinesQuery.data.map((t) => ( + +

{t.title}

+

+ {new Date(t.createdAt).toLocaleDateString()} +

+ + ))} +
+ )} +
); } diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index 0a3304b..8dbd032 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -5,8 +5,19 @@ import { defineConfig } from "vite"; import tsconfigPaths from "vite-tsconfig-paths"; export default defineConfig({ - plugins: [tsconfigPaths(), tailwindcss(), tanstackStart(), viteReact()], + plugins: [ + tsconfigPaths(), + tailwindcss(), + tanstackStart({ + server: { entry: "./entry-server.ts" }, + }), + viteReact(), + ], server: { port: 3001, + headers: { + "Cross-Origin-Embedder-Policy": "credentialless", + "Cross-Origin-Opener-Policy": "same-origin", + }, }, });