'use client';
import { getDefaultConfig, RainbowKitProvider, darkTheme, lightTheme } from '@rainbow-me/rainbowkit';
import { WagmiProvider } from 'wagmi';
import { mainnet, polygon, optimism, arbitrum, base, sepolia } from 'wagmi/chains';
import { QueryClientProvider, QueryClient } from '@tanstack/react-query';
import { ThemeProvider, useTheme } from 'next-themes';
import { useEffect, useState } from 'react';
import { defineChain } from 'viem';
import { TranslationsProvider } from '@/providers/translations-provider';
import { Header } from '@/components/header';
import { ToastProvider } from '@/components/ui/toast';
import deployments from '@/contracts/liqp-deployments.json';
const mockchain = defineChain({
id: 31337,
name: 'Mockchain',
nativeCurrency: {
decimals: 18,
name: 'Test Ether',
symbol: 'TETH',
},
rpcUrls: {
default: { http: ['http://localhost:8545'] },
},
testnet: true,
});
const allChains = [mainnet, polygon, optimism, arbitrum, base, sepolia, mockchain];
const chains = allChains.filter(chain =>
Object.keys(deployments || {}).includes(chain.id.toString())
);
if (chains.length === 0) {
console.error('No chains found with deployed contracts.');
}
const config = getDefaultConfig({
appName: 'Liquidity Party',
projectId: 'YOUR_PROJECT_ID', // Get this from https://cloud.walletconnect.com
chains: chains as any,
ssr: false,
});
const queryClient = new QueryClient({
defaultOptions: {
queries: {
refetchOnWindowFocus: false,
refetchOnMount: false,
refetchOnReconnect: false,
retry: false,
staleTime: 5 * 60 * 1000, // 5 minutes
},
},
});
function Web3Provider({ children }: { children: React.ReactNode }) {
const { theme } = useTheme();
const [mounted, setMounted] = useState(false);
useEffect(() => {
setMounted(true);
}, []);
// Use dark theme by default until mounted, then follow the actual theme
const rainbowKitTheme = !mounted || theme === 'dark'
? darkTheme({
accentColor: '#a855f7', // Purple to match your primary color
accentColorForeground: 'white',
})
: lightTheme({
accentColor: '#a855f7',
accentColorForeground: 'white',
});
return (
{children}
);
}
export function Providers({ children }: { children: React.ReactNode }) {
return (
{children}
);
}