Spaces:
Running
Running
"use client"; | |
import { ReactNode, useEffect, useState } from "react"; | |
import { ThemeProvider } from "@/components/theme-provider"; | |
import { SidebarProvider } from "@/components/ui/sidebar"; | |
import { Toaster } from "sonner"; | |
import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; | |
import { useLocalStorage } from "@/lib/hooks/use-local-storage"; | |
import { STORAGE_KEYS } from "@/lib/constants"; | |
// Create a client | |
const queryClient = new QueryClient({ | |
defaultOptions: { | |
queries: { | |
staleTime: 1000 * 60 * 5, // 5 minutes | |
refetchOnWindowFocus: true, | |
}, | |
}, | |
}); | |
export function Providers({ children }: { children: ReactNode }) { | |
const [sidebarOpen, setSidebarOpen] = useLocalStorage<boolean>( | |
STORAGE_KEYS.SIDEBAR_STATE, | |
true | |
); | |
return ( | |
<QueryClientProvider client={queryClient}> | |
<ThemeProvider | |
attribute="class" | |
defaultTheme="system" | |
enableSystem | |
disableTransitionOnChange | |
> | |
<SidebarProvider defaultOpen={sidebarOpen} open={sidebarOpen} onOpenChange={setSidebarOpen}> | |
{children} | |
<Toaster position="top-center" richColors /> | |
</SidebarProvider> | |
</ThemeProvider> | |
</QueryClientProvider> | |
); | |
} |