///
import {
HeadContent,
Link,
Outlet,
Scripts,
createRootRouteWithContext,
} from '@tanstack/react-router'
import { TanStackRouterDevtools } from '@tanstack/react-router-devtools'
import * as React from 'react'
import { DefaultCatchBoundary } from '~/components/DefaultCatchBoundary'
import { NotFound } from '~/components/NotFound'
import appCss from '~/styles/app.css?url'
import { seo } from '~/utils/seo'
import MainPage from "~/components/function/layout/mainPage";
import TopMenu from "~/components/function/layout/topMenu";
import { UserMenu } from "~/components/function/layout/userMenu";
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import MainMenu from '~/components/function/layout/mainMenu'
import { createServerFn } from "@tanstack/react-start";
import { auth } from "~/lib/auth";
import { getRequestHeaders } from "@tanstack/react-start/server";
import { NuqsAdapterWrapper } from "~/components/function/data-table/components/src/providers/nuqs-adapter";
import { Toaster } from 'sonner'
// Server function for SSR - uses Better Auth's server-side session handling
const getServerSession = createServerFn().handler(async () => {
try {
// Get the incoming request from TanStack Start
const requestHeaders = getRequestHeaders();
const sessionResponse = await auth.api.getSession({
headers: requestHeaders || new Headers(),
});
return sessionResponse;
} catch (error) {
console.error('Server session error:', error);
return { data: null, error: null };
}
});
export const Route = createRootRouteWithContext<{
queryClient: QueryClient;
session?: any;
}>()({
beforeLoad: async ({ location }) => {
const session = await getServerSession();
return { session };
},
head: () => ({
meta: [
{
charSet: 'utf-8',
},
{
name: 'viewport',
content: 'width=device-width, initial-scale=1',
},
...seo({
title:
'---',
description: `---`,
}),
],
links: [
{ rel: 'stylesheet', href: appCss },
{
rel: 'apple-touch-icon',
sizes: '180x180',
href: '/apple-touch-icon.png',
},
{
rel: 'icon',
type: 'image/png',
sizes: '32x32',
href: '/favicon-32x32.png',
},
{
rel: 'icon',
type: 'image/png',
sizes: '16x16',
href: '/favicon-16x16.png',
},
{ rel: 'manifest', href: '/site.webmanifest', color: '#fffff' },
{ rel: 'icon', href: '/favicon.ico' },
],
scripts: [
{
src: '/customScript.js',
type: 'text/javascript',
},
],
}),
errorComponent: (props) => {
return (
);
},
component: RootComponent,
notFoundComponent: () => ,
})
function RootComponent() {
const { queryClient } = Route.useRouteContext();
return (
);
}
function RootDocument({ children }: { children: React.ReactNode }) {
const { session } = Route.useRouteContext();
const metaTags = seo({
title: "Servicehell",
description: "Display your collection online",
});
return (
);
}