"use client"; import React, { useState } from "react"; import { ThemeProvider } from "next-themes"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { Toaster } from "sonner"; import { TooltipProvider } from "@/components/ui/tooltip"; // --------------------------------------------------------------------------- // QueryClient – created once per client session // --------------------------------------------------------------------------- function makeQueryClient() { return new QueryClient({ defaultOptions: { queries: { // Don't refetch on window focus in development refetchOnWindowFocus: process.env.NODE_ENV === "production", // 30 second stale time by default staleTime: 30_000, // Retry failed queries up to 2 times retry: 2, retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 30_000), }, mutations: { // Don't retry mutations by default retry: 0, }, }, }); } // --------------------------------------------------------------------------- // Providers // --------------------------------------------------------------------------- interface ProvidersProps { children: React.ReactNode; } export function Providers({ children }: ProvidersProps) { // useState ensures the QueryClient is only created once per component mount // and is not shared between different users on SSR. const [queryClient] = useState(() => makeQueryClient()); return ( {children} ); }