Files
2025-12-27 21:15:45 -08:00

52 lines
1.7 KiB
TypeScript

"use client";
import { useEffect, useState } from "react";
import { InMemoryStorageProvider } from "fhevm-sdk";
import { RainbowKitProvider, darkTheme, lightTheme } from "@rainbow-me/rainbowkit";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { AppProgressBar as ProgressBar } from "next-nprogress-bar";
import { useTheme } from "next-themes";
import { Toaster } from "react-hot-toast";
import { WagmiProvider } from "wagmi";
import { Header } from "~~/components/Header";
import { BlockieAvatar } from "~~/components/helper";
import { wagmiConfig } from "~~/services/web3/wagmiConfig";
export const queryClient = new QueryClient({
defaultOptions: {
queries: {
refetchOnWindowFocus: false,
},
},
});
export const DappWrapperWithProviders = ({ children }: { children: React.ReactNode }) => {
const { resolvedTheme } = useTheme();
const isDarkMode = resolvedTheme === "dark";
const [mounted, setMounted] = useState(false);
useEffect(() => {
setMounted(true);
}, []);
return (
<WagmiProvider config={wagmiConfig}>
<QueryClientProvider client={queryClient}>
<RainbowKitProvider
avatar={BlockieAvatar}
theme={mounted ? (isDarkMode ? darkTheme() : lightTheme()) : lightTheme()}
>
<ProgressBar height="3px" color="#FFD208" />
<div className={`flex flex-col min-h-screen`}>
<Header />
<main className="relative flex flex-col flex-1 z-10">
<InMemoryStorageProvider>{children}</InMemoryStorageProvider>
</main>
</div>
<Toaster />
</RainbowKitProvider>
</QueryClientProvider>
</WagmiProvider>
);
};