-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathAddressBook.tsx
More file actions
60 lines (56 loc) · 1.86 KB
/
AddressBook.tsx
File metadata and controls
60 lines (56 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import StarIcon from '@mui/icons-material/Star'
import StarBorderIcon from '@mui/icons-material/StarBorder'
import { Avatar, IconButton, SvgIconProps, Tooltip } from '@mui/material'
import { FC, useState } from 'react'
import { useAddressDisplay } from '../../hooks/useAddressDisplay'
import { useAppSelector } from '../../redux/hooks'
import { Network } from '../../redux/networks'
import {
addressBookSelectors,
createEntryId
} from '../../redux/slices/addressBook.slice'
import { ensApi } from '../../redux/slices/ensResolver.slice'
import { AddressBookDialog } from './AddressBookDialog'
export const AddressBookButton: FC<{
network: Network
address: string
iconProps?: SvgIconProps
}> = ({ network, address, iconProps }) => {
const entry = useAppSelector((state) =>
addressBookSelectors.selectById(state, createEntryId(network, address))
)
const [isDialogOpen, setIsDialogOpen] = useState(false)
const addressDisplay = useAddressDisplay(address)
const ensAvatarQuery = ensApi.useLookupAvatarQuery(address, {
skip: !!addressDisplay.recommendedAvatar
})
const avatarUrl = addressDisplay.recommendedAvatar || ensAvatarQuery.currentData?.avatar
return (
<>
<Tooltip
title={entry ? 'Edit address book entry' : 'Add to address book'}
>
<IconButton onClick={() => setIsDialogOpen(!isDialogOpen)}>
{entry ? (
<StarIcon {...iconProps} />
) : (
<StarBorderIcon {...iconProps} />
)}
</IconButton>
</Tooltip>
<AddressBookDialog
network={network}
address={address}
open={isDialogOpen}
handleClose={() => setIsDialogOpen(false)}
/>
{avatarUrl && (
<Avatar
alt={addressDisplay.recommendedName || address}
src={avatarUrl}
sx={{ width: 32, height: 32 }}
/>
)}
</>
)
}