Added functionality to connect wallet.

This commit is contained in:
sid
2024-10-25 18:48:20 +01:00
parent 9e8e849127
commit ec01ec95c4

View File

@@ -1,12 +1,21 @@
'use client'; 'use client';
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { ethers } from 'ethers';
declare global {
interface Window {
ethereum: ethers.providers.ExternalProvider;
}
}
const MetaMask = () => { const MetaMask = () => {
const [metaMaskInstalled, setMetaMaskInstalled] = useState(false); const [metaMaskInstalled, setMetaMaskInstalled] = useState(false);
const [account, setAccount] = useState<string | null>(null);
const isMetaMaskInstalled = () => const isMetaMaskInstalled = () =>
typeof window !== 'undefined' && typeof (window as { ethereum?: unknown }).ethereum !== 'undefined'; typeof window !== 'undefined' &&
typeof (window as { ethereum?: unknown }).ethereum !== 'undefined';
useEffect(() => { useEffect(() => {
if (isMetaMaskInstalled()) { if (isMetaMaskInstalled()) {
@@ -14,17 +23,52 @@ const MetaMask = () => {
} }
}, []); }, []);
const handleConnectWallet = async () => {
if (window.ethereum && window.ethereum.request) {
try {
// Request account access
const accounts = await window.ethereum.request({
method: 'eth_requestAccounts',
});
setAccount(accounts[0]); // Set the first account
} catch (error) {
console.error('Error connecting to MetaMask:', error);
}
} else {
alert(
'MetaMask is not installed. Please install MetaMask and try again.'
);
}
};
return ( return (
<div className="text-center p-4"> <div className="text-center p-4">
{metaMaskInstalled ? ( {metaMaskInstalled ? (
<button className="bg-gradient-to-r from-blue-500 to-indigo-700 text-white px-4 py-1 rounded-full transform transition-transform duration-300 hover:scale-105 shadow-lg hover:shadow-2xl"> <div>
Connect Wallet {account ? (
</button> <p className="text-green-500">Connected: {account}</p>
) : (
<button
onClick={handleConnectWallet}
className="bg-gradient-to-r from-blue-500 to-indigo-700 text-white px-4 py-1 rounded-full transform transition-transform duration-300 hover:scale-105 shadow-lg hover:shadow-2xl"
>
Connect Wallet
</button>
)}
</div>
) : ( ) : (
<p className="text-red-500">MetaMask not detected</p> <button
// Install Metamask extension if not already installed
onClick={() =>
window.open('https://metamask.io/download.html', '_blank')
}
className="bg-gradient-to-r from-blue-500 to-indigo-700 text-white px-4 py-1 rounded-full transform transition-transform duration-300 hover:scale-105 shadow-lg hover:shadow-2xl"
>
Install MetaMask to connect wallet
</button>
)} )}
</div> </div>
); );
}; };
export default MetaMask; export default MetaMask;