src/components/layout/header/AccountConnect.tsx
import { ConnectButton } from '@rainbow-me/rainbowkit';
import '@rainbow-me/rainbowkit/styles.css';
import { AccountDropdown } from './AccountDropdown';
import { AccountInfoPanel } from './AccountInfoPanel';
/**
* AccountConnect
* - Connects to the wallet
* - Disconnects from the wallet
* - Displays the wallet network
*/
function AccountConnect() {
return (
<ConnectButton.Custom>
{({ account, chain, openConnectModal, authenticationStatus, mounted }) => {
const ready = mounted && authenticationStatus !== 'loading';
const connected =
ready &&
account &&
chain &&
(!authenticationStatus || authenticationStatus === 'authenticated');
return (
<div
className="flex flex-grow opacity-80 transition-all duration-300 ease-in-out hover:opacity-100"
{...(!ready && {
'aria-hidden': true,
style: {
opacity: 0,
pointerEvents: 'none',
userSelect: 'none',
},
})}
>
{(() => {
if (!connected) {
return (
<button
onClick={openConnectModal}
type="button"
className="inline-flex h-10 flex-grow items-center justify-center gap-2 rounded-lg bg-white px-4 py-2"
>
<div className="text-sm font-medium leading-normal text-black">Connect</div>
</button>
);
}
return (
<>
<div className="flex flex-grow flex-col md:hidden">
<AccountInfoPanel />
</div>
<div className="flex hidden md:block">
<AccountDropdown />
</div>
</>
);
})()}
</div>
);
}}
</ConnectButton.Custom>
);
}
export default AccountConnect;