web3modal
web3modal copied to clipboard
[bug] Error occurred while using walletconnect social login for BlockScout Frontend
Link to minimal reproducible example
https://github.com/blockscout/frontend
Summary
The login pop-up did not stay in the loading state and did not return any results
config.ts
import { defaultWagmiConfig } from '@web3modal/wagmi/react/config'
import { cookieStorage, createStorage } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
// Get projectId from https://cloud.walletconnect.com
export const projectId = process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID
if (!projectId) throw new Error('Project ID is not defined')
export const metadata = {
name: 'AppKit',
description: 'AppKit Example',
url: 'https://web3modal.com', // origin must match your domain & subdomain
icons: ['https://avatars.githubusercontent.com/u/37784886']
}
// Create wagmiConfig
const chains = [mainnet, sepolia] as const
export const wagmiConfig = defaultWagmiConfig({
chains,
projectId,
metadata,
ssr: true,
storage: createStorage({
storage: cookieStorage
}),
auth: {
email: true, // default to true
socials: ['google', 'x', 'github', 'discord', 'apple', 'facebook', 'farcaster'],
showWallets: true, // default to true
walletFeatures: true // default to true
}
})
provider.tsx
'use client'
import React, { ReactNode } from 'react'
import { wagmiConfig, projectId, metadata } from './config'
import { createWeb3Modal } from '@web3modal/wagmi/react'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { State, WagmiProvider } from 'wagmi'
// Setup queryClient
const queryClient = new QueryClient()
if (!projectId) throw new Error('Project ID is not defined')
// Create modal
createWeb3Modal({
metadata,
wagmiConfig: wagmiConfig,
projectId,
enableAnalytics: true // Optional - defaults to your Cloud configuration
})
export default function AppKitProvider({
children,
initialState
}: {
children: ReactNode
initialState?: State
}) {
return (
<WagmiProvider config={wagmiConfig} initialState={initialState}>
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
</WagmiProvider>
)
}
page/_app.tsx
import type { ChakraProps } from '@chakra-ui/react';
import { GrowthBookProvider } from '@growthbook/growthbook-react';
import * as Sentry from '@sentry/react';
import { QueryClientProvider } from '@tanstack/react-query';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import type { AppProps } from 'next/app';
import React from 'react';
import type { NextPageWithLayout } from 'nextjs/types';
import config from 'configs/app';
import useQueryClientConfig from 'lib/api/useQueryClientConfig';
import { AppContextProvider } from 'lib/contexts/app';
import { ChakraProvider } from 'lib/contexts/chakra';
import { ScrollDirectionProvider } from 'lib/contexts/scrollDirection';
import { growthBook } from 'lib/growthbook/init';
import useLoadFeatures from 'lib/growthbook/useLoadFeatures';
import useNotifyOnNavigation from 'lib/hooks/useNotifyOnNavigation';
import { SocketProvider } from 'lib/socket/context';
import theme from 'theme';
import AppErrorBoundary from 'ui/shared/AppError/AppErrorBoundary';
import GoogleAnalytics from 'ui/shared/GoogleAnalytics';
import Layout from 'ui/shared/layout/Layout';
// import Web3ModalProvider from 'ui/shared/Web3ModalProvider';
import 'lib/setLocale';
import { cookieToInitialState } from 'wagmi';
import { wagmiConfig } from 'lib/walletconnect/config';
import AppKitProvider from 'lib/walletconnect/provider';
// import 'focus-visible/dist/focus-visible';
type AppPropsWithLayout = AppProps & {
Component: NextPageWithLayout;
}
const ERROR_SCREEN_STYLES: ChakraProps = {
h: '100vh',
display: 'flex',
flexDirection: 'column',
alignItems: 'flex-start',
justifyContent: 'center',
width: 'fit-content',
maxW: '800px',
margin: '0 auto',
p: { base: 4, lg: 0 },
};
function MyApp({ Component, pageProps }: AppPropsWithLayout) {
useLoadFeatures();
useNotifyOnNavigation();
const queryClient = useQueryClientConfig();
const handleError = React.useCallback((error: Error) => {
Sentry.captureException(error);
}, []);
const getLayout = Component.getLayout ?? ((page) => <Layout>{ page }</Layout>);
const initialState = cookieToInitialState(wagmiConfig)
return (
<ChakraProvider theme={ theme } cookies={ pageProps.cookies }>
<AppErrorBoundary
{ ...ERROR_SCREEN_STYLES }
onError={ handleError }
>
<AppKitProvider initialState={initialState}>
<AppContextProvider pageProps={ pageProps }>
<QueryClientProvider client={ queryClient }>
<GrowthBookProvider growthbook={ growthBook }>
<ScrollDirectionProvider>
<SocketProvider url={ `${ config.api.socket }${ config.api.basePath }/socket/v2` }>
{ getLayout(<Component { ...pageProps }/>) }
</SocketProvider>
</ScrollDirectionProvider>
</GrowthBookProvider>
<ReactQueryDevtools buttonPosition="bottom-left" position="left"/>
<GoogleAnalytics/>
</QueryClientProvider>
</AppContextProvider>
</AppKitProvider>
</AppErrorBoundary>
</ChakraProvider>
);
}
export default MyApp;
List of related npm package versions
"@web3modal/wagmi": "5.1.6", "viem": "2.9.6", "wagmi": "2.5.16",