Initial push
This commit is contained in:
72
components/layout/providers.tsx
Normal file
72
components/layout/providers.tsx
Normal file
@@ -0,0 +1,72 @@
|
||||
"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 (
|
||||
<ThemeProvider
|
||||
attribute="class"
|
||||
defaultTheme="dark"
|
||||
enableSystem
|
||||
disableTransitionOnChange
|
||||
>
|
||||
<QueryClientProvider client={queryClient}>
|
||||
<TooltipProvider delay={400}>
|
||||
{children}
|
||||
<Toaster
|
||||
position="bottom-right"
|
||||
theme="dark"
|
||||
richColors
|
||||
closeButton
|
||||
toastOptions={{
|
||||
style: {
|
||||
background: "oklch(0.205 0 0)",
|
||||
border: "1px solid oklch(1 0 0 / 10%)",
|
||||
color: "oklch(0.985 0 0)",
|
||||
},
|
||||
className: "cubeadmin-toast",
|
||||
}}
|
||||
/>
|
||||
</TooltipProvider>
|
||||
</QueryClientProvider>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user