layout.tsx:
import "./globals.css";
import { Inter } from "next/font/google";
import { ThemeProvider } from "@/src/app/components/providers/ThemeProvider";
import Providers from "./_trpc/Providers";
const inter = Inter({ subsets: ["latin"] });
export const metadata = {
title: "",
description: "",
};
function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<Providers>
<body className={inter.className}>
<ThemeProvider attribute="class" defaultTheme="light">
{children}
</ThemeProvider>
</body>
</Providers>
</html>
);
}
export default RootLayout;
-------
client.ts
import { AppRouter } from "@/src/server";
import { createTRPCReact } from "@trpc/react-query";
export const trpc = createTRPCReact<AppRouter>({});
--------
Providers.tsx
"use client";
import { trpc } from "@/src/app/_trpc/client";
import { absoluteUrl } from "@/lib/utils";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { httpBatchLink } from "@trpc/client";
import { PropsWithChildren, useState } from "react";
const Providers = ({ children }: PropsWithChildren) => {
const [queryClient] = useState(() => new QueryClient());
const [trpcClient] = useState(() =>
trpc.createClient({
links: [
httpBatchLink({
url: absoluteUrl("/api/trpc"),
}),
],
})
);
return (
<trpc.Provider client={trpcClient} queryClient={queryClient}>
<QueryClientProvider client={queryClient}>
{children}
</QueryClientProvider>
</trpc.Provider>
);
};
export default Providers;
-----
page.tsx
import PostList from "./components/ui/PostList";
import { getCurrentUser } from "@/lib/session";
import Navbar from "./components/sections/Navbar";
import { fetchPosts } from "@/lib/actions/post.actions";
import BottomNavbar from "./components/sections/BottomNavbar";
import Temp from "./components/Temp";
import { trpc } from "./_trpc/client";
const Home = async () => {
const user = await getCurrentUser();
const posts = await fetchPosts();
const { data } = trpc.posts.getMany.useQuery();
return (
<div>
<Navbar user={user} />
<Temp />
<div className="px-4 pt-2 mx-auto max-w-[1245px]">
<PostList posts={posts} userId={user?.id} />
</div>
<BottomNavbar user={user} />
</div>
);
};
export default Home;
layout.tsx:
import "./globals.css";
import { Inter } from "next/font/google";
import { ThemeProvider } from "@/src/app/components/providers/ThemeProvider";
import Providers from "./_trpc/Providers";
const inter = Inter({ subsets: ["latin"] });
export const metadata = {
title: "",
description: "",
};
function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<Providers>
<body className={inter.className}>
<ThemeProvider attribute="class" defaultTheme="light">
{children}
</ThemeProvider>
</body>
</Providers>
</html>
);
}
export default RootLayout;
-------
client.ts
import { AppRouter } from "@/src/server";
import { createTRPCReact } from "@trpc/react-query";
export const trpc = createTRPCReact<AppRouter>({});
--------
Providers.tsx
"use client";
import { trpc } from "@/src/app/_trpc/client";
import { absoluteUrl } from "@/lib/utils";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { httpBatchLink } from "@trpc/client";
import { PropsWithChildren, useState } from "react";
const Providers = ({ children }: PropsWithChildren) => {
const [queryClient] = useState(() => new QueryClient());
const [trpcClient] = useState(() =>
trpc.createClient({
links: [
httpBatchLink({
url: absoluteUrl("/api/trpc"),
}),
],
})
);
return (
<trpc.Provider client={trpcClient} queryClient={queryClient}>
<QueryClientProvider client={queryClient}>
{children}
</QueryClientProvider>
</trpc.Provider>
);
};
export default Providers;
-----
page.tsx
import PostList from "./components/ui/PostList";
import { getCurrentUser } from "@/lib/session";
import Navbar from "./components/sections/Navbar";
import { fetchPosts } from "@/lib/actions/post.actions";
import BottomNavbar from "./components/sections/BottomNavbar";
import Temp from "./components/Temp";
import { trpc } from "./_trpc/client";
const Home = async () => {
const user = await getCurrentUser();
const posts = await fetchPosts();
const { data } = trpc.posts.getMany.useQuery();
return (
<div>
<Navbar user={user} />
<Temp />
<div className="px-4 pt-2 mx-auto max-w-[1245px]">
<PostList posts={posts} userId={user?.id} />
</div>
<BottomNavbar user={user} />
</div>
);
};
export default Home;