From 8d80361785fb993cd7a48170d15c7d6c724691df Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 08:46:24 +0200 Subject: [PATCH] feat(core-trpc): add typed React tRPC client + getQueryClient --- packages/core-api/src/root.ts | 7 +------ packages/core-trpc/package.json | 1 + packages/core-trpc/src/client.ts | 6 ++++++ packages/core-trpc/src/index.ts | 4 +++- packages/core-trpc/src/query-client.ts | 22 ++++++++++++++++++++++ 5 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 packages/core-trpc/src/client.ts create mode 100644 packages/core-trpc/src/query-client.ts diff --git a/packages/core-api/src/root.ts b/packages/core-api/src/root.ts index 5cf9fb6..444b570 100644 --- a/packages/core-api/src/root.ts +++ b/packages/core-api/src/root.ts @@ -15,9 +15,4 @@ export const appRouter = router({ navigation: navigationRouter, }); -export type AppRouter = { - auth: AuthRouter; - blog: BlogRouter; - marketingPages: MarketingPagesRouter; - navigation: NavigationRouter; -}; +export type AppRouter = typeof appRouter; diff --git a/packages/core-trpc/package.json b/packages/core-trpc/package.json index 1d0810a..8a91cc9 100644 --- a/packages/core-trpc/package.json +++ b/packages/core-trpc/package.json @@ -16,6 +16,7 @@ "@trpc/client": "^11.0.0", "@trpc/react-query": "^11.0.0", "@trpc/server": "^11.0.0", + "@trpc/tanstack-react-query": "^11.1.0", "@tanstack/react-query": "^5.66.0", "react": "^19.0.0", "superjson": "^2.2.1" diff --git a/packages/core-trpc/src/client.ts b/packages/core-trpc/src/client.ts new file mode 100644 index 0000000..722b8c1 --- /dev/null +++ b/packages/core-trpc/src/client.ts @@ -0,0 +1,6 @@ +"use client"; + +import { createTRPCContext } from "@trpc/tanstack-react-query"; +import type { AppRouter } from "@repo/core-api"; + +export const { TRPCProvider, useTRPC } = createTRPCContext(); diff --git a/packages/core-trpc/src/index.ts b/packages/core-trpc/src/index.ts index cb0ff5c..7b27b5d 100644 --- a/packages/core-trpc/src/index.ts +++ b/packages/core-trpc/src/index.ts @@ -1 +1,3 @@ -export {}; +export { useTRPC, TRPCProvider } from "./client"; +export { getQueryClient } from "./query-client"; +export type { AppRouter } from "@repo/core-api"; diff --git a/packages/core-trpc/src/query-client.ts b/packages/core-trpc/src/query-client.ts new file mode 100644 index 0000000..fd496f0 --- /dev/null +++ b/packages/core-trpc/src/query-client.ts @@ -0,0 +1,22 @@ +import { QueryClient } from "@tanstack/react-query"; + +let clientQueryClient: QueryClient | undefined; + +const defaultOptions = { + queries: { + staleTime: 30 * 1000, + refetchOnWindowFocus: false, + }, +}; + +export function getQueryClient(): QueryClient { + if (typeof window === "undefined") { + // Server: always create a new instance per request + return new QueryClient({ defaultOptions }); + } + // Browser: singleton + if (!clientQueryClient) { + clientQueryClient = new QueryClient({ defaultOptions }); + } + return clientQueryClient; +}