* refactor: move to tanstack start * refactor: auth flow & volumes * refactor: repo & snapshot details * refactor: backups, create repo, volumes * refactor: create volume & restore snapshot * refactor: notifications * refactor: settings * refactor: breadcrumbs * fix: ts issues * refactor: prod deployment * fix: import css production * refactor: nitro build * refactor: winston -> consola * fix: memory leak is sse events cleanup * fix: cli usage * chore: remove rr routes file * refactor: pr feedbacks * refactor: patch api client to have a global client per call * refactor: pr feedbacks * fix(dockerfile): add explicit port * fix(e2e): healthcheck under /api
33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import { createFileRoute } from "@tanstack/react-router";
|
|
import { createServerFn } from "@tanstack/react-start";
|
|
import { getRequestHeaders } from "@tanstack/react-start/server";
|
|
import { Layout } from "~/client/components/layout";
|
|
import { authMiddleware } from "~/middleware/auth";
|
|
import { auth } from "~/server/lib/auth";
|
|
import { authService } from "~/server/modules/auth/auth.service";
|
|
|
|
export const fetchUser = createServerFn({ method: "GET" }).handler(async () => {
|
|
const headers = getRequestHeaders();
|
|
const session = await auth.api.getSession({ headers });
|
|
const hasUsers = await authService.hasUsers();
|
|
|
|
return { user: session?.user ?? null, hasUsers };
|
|
});
|
|
|
|
export const Route = createFileRoute("/(dashboard)")({
|
|
component: PathlessLayoutComponent,
|
|
errorComponent: (e) => <div>{e.error.message}</div>,
|
|
server: {
|
|
middleware: [authMiddleware],
|
|
},
|
|
loader: async () => {
|
|
const authContext = await fetchUser();
|
|
return authContext;
|
|
},
|
|
});
|
|
|
|
function PathlessLayoutComponent() {
|
|
const loaderData = Route.useLoaderData();
|
|
|
|
return <Layout loaderData={loaderData} />;
|
|
}
|