import {
EthereumAuthProvider,
useViewerConnection,
useViewerID,
useViewerRecord,
} from '@self.id/framework'
import { Avatar, Box, Button, DropButton, Text } from 'grommet'
import Link from 'next/link'
import { useCallback, useState } from 'react'
import { getProfileInfo } from '../utils'
import DisplayAvatar from './DisplayAvatar'
type MenuButtonProps = {
label: string
onClick: () => void
}
function MenuButton({ label, ...props }: MenuButtonProps) {
return (
)
}
export default function AccountButton() {
const [connection, connect, disconnect] = useViewerConnection()
const viewerID = useViewerID()
const profileRecord = useViewerRecord('basicProfile')
const [isMenuOpen, setMenuOpen] = useState(false)
const onClickConnect = useCallback(async () => {
// @ts-ignore
const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' })
// @ts-ignore
await connect(new EthereumAuthProvider(window.ethereum, accounts[0]))
}, [connect])
if (viewerID != null) {
const { avatarSrc, displayName } = getProfileInfo(viewerID.id, profileRecord.content)
const buttons =
connection.status === 'connected' ? (
disconnect()} />
) : (
<>
{
onClickConnect()
setMenuOpen(false)
}}
/>
disconnect()} />
>
)
const content = (
{avatarSrc ? : null}
{displayName}
{buttons}
)
return (
{
setMenuOpen(false)
}}
onOpen={() => {
setMenuOpen(true)
}}
open={isMenuOpen}>
)
}
return connection.status === 'connecting' ? (
) : (
)
}