Skip to content

Commit 3e0de43

Browse files
committed
refactor: account tokens
1 parent 256b41c commit 3e0de43

File tree

2 files changed

+44
-22
lines changed

2 files changed

+44
-22
lines changed

src/hooks/useAccountTokens.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { createQueryKey } from '~/react-query'
66
import type { Client } from '~/viem'
77
import { useNetworkStore, useTokensStore } from '~/zustand'
88

9+
import { useCallback, useMemo } from 'react'
910
import { useClient } from './useClient'
1011

1112
type UseAccountTokensParameters = {
@@ -42,5 +43,31 @@ export function useAccountTokensQueryOptions(args: UseAccountTokensParameters) {
4243

4344
export function useAccountTokens(args: UseAccountTokensParameters) {
4445
const queryOptions = useAccountTokensQueryOptions(args)
45-
return useQuery(queryOptions)
46+
const tokensStore = useTokensStore()
47+
48+
const addToken = useCallback(
49+
(address: Address) =>
50+
args.address ? tokensStore.addToken(address, args.address) : undefined,
51+
[args.address, tokensStore.addToken],
52+
)
53+
const removeToken = useCallback(
54+
(address: Address) =>
55+
args.address ? tokensStore.removeToken(address, args.address) : undefined,
56+
[args.address, tokensStore.removeToken],
57+
)
58+
const tokens = useMemo(
59+
() =>
60+
args.address
61+
? tokensStore.tokens[args.address]
62+
?.map((token) => (!token.removed ? token.address : undefined))
63+
.filter(Boolean)
64+
: [],
65+
[args.address, tokensStore.tokens],
66+
)
67+
68+
return Object.assign(useQuery(queryOptions), {
69+
addToken,
70+
removeToken,
71+
tokens,
72+
})
4673
}

src/screens/account-details.tsx

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import { useAccountTokens } from '~/hooks/useAccountTokens'
3333
import { useErc20Balance } from '~/hooks/useErc20Balance'
3434
import { useErc20Metadata } from '~/hooks/useErc20Metadata'
3535
import { useSetErc20Balance } from '~/hooks/useSetErc20Balance'
36-
import { useTokensStore } from '~/zustand/tokens'
3736

3837
export default function AccountDetails() {
3938
const { address } = useParams()
@@ -90,9 +89,7 @@ export default function AccountDetails() {
9089
}
9190

9291
function Tokens({ accountAddress }: { accountAddress: Address }) {
93-
useAccountTokens({ address: accountAddress })
94-
95-
const { tokens } = useTokensStore()
92+
const { tokens } = useAccountTokens({ address: accountAddress })
9693

9794
if (!accountAddress) return null
9895
return (
@@ -120,21 +117,19 @@ function Tokens({ accountAddress }: { accountAddress: Address }) {
120117
<Separator />
121118
</Bleed>
122119
{/* TODO: Handle empty state. */}
123-
{tokens[accountAddress]?.map(({ address: tokenAddress, removed }) =>
124-
!removed ? (
125-
<TokenRow
126-
accountAddress={accountAddress}
127-
tokenAddress={tokenAddress}
128-
key={tokenAddress}
129-
/>
130-
) : null,
131-
)}
120+
{tokens?.map((tokenAddress) => (
121+
<TokenRow
122+
accountAddress={accountAddress}
123+
tokenAddress={tokenAddress}
124+
key={tokenAddress}
125+
/>
126+
))}
132127
</Inset>
133128
)
134129
}
135130

136131
function ImportToken({ accountAddress }: { accountAddress: Address }) {
137-
const { addToken } = useTokensStore()
132+
const { addToken } = useAccountTokens({ address: accountAddress })
138133

139134
const { handleSubmit, register, reset } = useForm<{ address: string }>({
140135
defaultValues: {
@@ -150,7 +145,7 @@ function ImportToken({ accountAddress }: { accountAddress: Address }) {
150145
return
151146
}
152147

153-
addToken(address as Address, accountAddress)
148+
addToken(address)
154149
} finally {
155150
reset()
156151
}
@@ -178,7 +173,7 @@ function TokenRow({
178173
accountAddress,
179174
tokenAddress,
180175
}: { accountAddress: Address; tokenAddress: Address }) {
181-
const { removeToken } = useTokensStore()
176+
const { removeToken } = useAccountTokens({ address: accountAddress })
182177

183178
const { data: balance, error: balanceError } = useErc20Balance({
184179
address: accountAddress,
@@ -192,16 +187,16 @@ function TokenRow({
192187
useEffect(() => {
193188
if (balanceError) {
194189
toast.error((balanceError as BaseError).shortMessage)
195-
removeToken(tokenAddress, accountAddress)
190+
removeToken(tokenAddress)
196191
}
197-
}, [balanceError, tokenAddress, accountAddress, removeToken])
192+
}, [balanceError, tokenAddress, removeToken])
198193

199194
useEffect(() => {
200195
if (metadataError) {
201196
toast.error((metadataError as BaseError).shortMessage)
202-
removeToken(tokenAddress, accountAddress)
197+
removeToken(tokenAddress)
203198
}
204-
}, [metadataError, tokenAddress, accountAddress, removeToken])
199+
}, [metadataError, tokenAddress, removeToken])
205200

206201
const isLoading = !data
207202
const { name, symbol, decimals } = data || {}
@@ -274,7 +269,7 @@ function TokenRow({
274269
variant="ghost red"
275270
onClick={(e) => {
276271
e.stopPropagation()
277-
removeToken(tokenAddress, accountAddress)
272+
removeToken(tokenAddress)
278273
}}
279274
/>
280275
</Column>

0 commit comments

Comments
 (0)