From cdf69e18c3529bfda044fa1c321423c5155102de Mon Sep 17 00:00:00 2001 From: kjmczk Date: Tue, 22 Mar 2022 20:02:31 +0900 Subject: [PATCH] Add useEthereumProvider hook --- hooks/useEthereumProvider.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 hooks/useEthereumProvider.ts diff --git a/hooks/useEthereumProvider.ts b/hooks/useEthereumProvider.ts new file mode 100644 index 0000000..33d23b8 --- /dev/null +++ b/hooks/useEthereumProvider.ts @@ -0,0 +1,30 @@ +import { useEffect, useState } from 'react'; +import detectEthereumProvider from '@metamask/detect-provider'; +import type { ExternalProvider } from '@ethersproject/providers'; + +export function useEthereumProvider() { + const [ethereumProvider, setEthereumProvider] = + useState(null); + const [isMetaMask, setIsMetaMask] = useState(false); + + useEffect(() => { + async function detectProvider() { + const provider = (await detectEthereumProvider()) as ExternalProvider; + setEthereumProvider(provider); + + if (provider === window.ethereum) { + setIsMetaMask(!!provider); + } + } + + detectProvider(); + + // cleanup + return () => { + setEthereumProvider(null); + setIsMetaMask(false); + }; + }, []); + + return { ethereumProvider, isMetaMask }; +}