mirror of
https://github.com/FranP-code/create-better-t-stack.git
synced 2025-10-12 23:52:15 +00:00
149 lines
4.2 KiB
Handlebars
149 lines
4.2 KiB
Handlebars
{{#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: () => <Loader />,
|
|
defaultNotFoundComponent: () => <div>Not Found</div>,
|
|
context: { queryClient, convexClient: convex, convexQueryClient },
|
|
Wrap: ({ children }) => (
|
|
<ConvexProvider client={convexQueryClient.convexClient}>
|
|
{children}
|
|
</ConvexProvider>
|
|
),
|
|
}),
|
|
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<AppRouter>({
|
|
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: () => <Loader />,
|
|
defaultNotFoundComponent: () => <div>Not Found</div>,
|
|
{{#if (eq api "trpc")}}
|
|
Wrap: ({ children }) => (
|
|
<QueryClientProvider client={queryClient}>
|
|
<TRPCProvider trpcClient={trpcClient} queryClient={queryClient}>
|
|
{children}
|
|
</TRPCProvider>
|
|
</QueryClientProvider>
|
|
),
|
|
{{else if (eq api "orpc")}}
|
|
Wrap: ({ children }) => (
|
|
<QueryClientProvider client={queryClient}>
|
|
{children}
|
|
</QueryClientProvider>
|
|
),
|
|
{{else}}
|
|
Wrap: ({ children }) => <>{children}</>,
|
|
{{/if}}
|
|
});
|
|
return router;
|
|
};
|
|
{{/if}}
|
|
|
|
declare module "@tanstack/react-router" {
|
|
interface Register {
|
|
router: ReturnType<typeof createRouter>;
|
|
}
|
|
}
|