A self hosted solution for privately rating and reviewing different sorts of media
1// In Next.js, this file would be called: app/providers.jsx
2'use client';
3
4// Since QueryClientProvider relies on useContext under the hood, we have to put 'use client' on top
5import {
6 isServer,
7 QueryClient,
8 QueryClientProvider,
9} from '@tanstack/react-query';
10import { ReactNode } from 'react';
11
12function makeQueryClient() {
13 return new QueryClient({
14 defaultOptions: {
15 queries: {
16 staleTime: 60 * 1000,
17 },
18 },
19 });
20}
21
22let browserQueryClient: QueryClient | undefined = undefined;
23
24function getQueryClient() {
25 if (isServer) {
26 return makeQueryClient();
27 } else {
28 if (!browserQueryClient) browserQueryClient = makeQueryClient();
29 return browserQueryClient;
30 }
31}
32
33export default function Providers({ children }: { children: ReactNode }) {
34 const queryClient = getQueryClient();
35
36 return (
37 <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
38 );
39}