{{#if (eq backend "convex")}} import { createRouter as createTanStackRouter } from "@tanstack/react-router"; import { QueryClient } from "@tanstack/react-query"; import { routerWithQueryClient } from "@tanstack/react-router-with-query"; import { ConvexQueryClient } from "@convex-dev/react-query"; import { ConvexProvider, ConvexReactClient } from "convex/react"; import { routeTree } from "./routeTree.gen"; import Loader from "./components/loader"; import "./index.css"; {{else}} import { createRouter as createTanStackRouter } from "@tanstack/react-router"; import Loader from "./components/loader"; import "./index.css"; import { routeTree } from "./routeTree.gen"; {{#if (eq api "trpc")}} import { QueryCache, QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { createTRPCClient, httpBatchLink } from "@trpc/client"; import { createTRPCOptionsProxy } from "@trpc/tanstack-react-query"; import { toast } from "sonner"; import type { AppRouter } from "../../server/src/routers"; import { TRPCProvider } from "./utils/trpc"; {{else if (eq api "orpc")}} import { QueryClientProvider } from "@tanstack/react-query"; import { orpc, queryClient } from "./utils/orpc"; {{/if}} {{/if}} {{#if (eq backend "convex")}} export function createRouter() { const CONVEX_URL = (import.meta as any).env.VITE_CONVEX_URL!; if (!CONVEX_URL) { console.error("missing envar VITE_CONVEX_URL"); } const convex = new ConvexReactClient(CONVEX_URL, { unsavedChangesWarning: false, }); const convexQueryClient = new ConvexQueryClient(convex); const queryClient: QueryClient = new QueryClient({ defaultOptions: { queries: { queryKeyHashFn: convexQueryClient.hashFn(), queryFn: convexQueryClient.queryFn(), }, }, }); convexQueryClient.connect(queryClient); const router = routerWithQueryClient( createTanStackRouter({ routeTree, defaultPreload: "intent", defaultPendingComponent: () => , defaultNotFoundComponent: () =>
Not Found
, context: { queryClient, convexClient: convex, convexQueryClient }, Wrap: ({ children }) => ( {children} ), }), queryClient, ); return router; } {{else}} {{#if (eq api "trpc")}} export const queryClient = new QueryClient({ queryCache: new QueryCache({ onError: (error) => { toast.error(error.message, { action: { label: "retry", onClick: () => { queryClient.invalidateQueries(); }, }, }); }, }), defaultOptions: { queries: { staleTime: 60 * 1000 } }, }); const trpcClient = createTRPCClient({ links: [ httpBatchLink({ url: `${import.meta.env.VITE_SERVER_URL}/trpc`, {{#if (eq auth "better-auth")}} fetch(url, options) { return fetch(url, { ...options, credentials: "include", }); }, {{/if}} }), ], }); const trpc = createTRPCOptionsProxy({ client: trpcClient, queryClient: queryClient, }); {{else if (eq api "orpc")}} {{/if}} export const createRouter = () => { const router = createTanStackRouter({ routeTree, scrollRestoration: true, defaultPreloadStaleTime: 0, {{#if (eq api "trpc")}} context: { trpc, queryClient }, {{else if (eq api "orpc")}} context: { orpc, queryClient }, {{else}} context: {}, {{/if}} defaultPendingComponent: () => , defaultNotFoundComponent: () =>
Not Found
, {{#if (eq api "trpc")}} Wrap: ({ children }) => ( {children} ), {{else if (eq api "orpc")}} Wrap: ({ children }) => ( {children} ), {{else}} Wrap: ({ children }) => <>{children}, {{/if}} }); return router; }; {{/if}} declare module "@tanstack/react-router" { interface Register { router: ReturnType; } }