split balance and tx loading into independent processes

This commit is contained in:
2026-05-21 17:22:09 +08:00
parent 8f3495ab40
commit 85c25883c6
2 changed files with 33 additions and 23 deletions
@@ -332,6 +332,11 @@
</div> </div>
{/if} {/if}
{#if w.loadingBalance && w.address}
<div class="flex justify-center py-4">
<Loader />
</div>
{/if}
{#if w.error} {#if w.error}
<p class="mb-3 text-red-500">{w.error}</p> <p class="mb-3 text-red-500">{w.error}</p>
{/if} {/if}
@@ -371,7 +376,7 @@
<CardTitle>Transactions</CardTitle> <CardTitle>Transactions</CardTitle>
</CardHeader> </CardHeader>
<CardContent> <CardContent>
{#if w.loading} {#if w.loadingTransactions}
<div class="flex justify-center py-4"> <div class="flex justify-center py-4">
<Loader /> <Loader />
</div> </div>
@@ -53,7 +53,8 @@ export const EvmWallet = () => {
let network = $state<NetworkId>('eth') let network = $state<NetworkId>('eth')
let apiKey = $state('') let apiKey = $state('')
let transactions = $state<TxEntry[]>([]) let transactions = $state<TxEntry[]>([])
let loading = $state(false) let loadingBalance = $state(false)
let loadingTransactions = $state(false)
let error = $state('') let error = $state('')
let wallets = $state<EvmWalletInfo[]>([]) let wallets = $state<EvmWalletInfo[]>([])
let currentWalletId = $state<string | null>(null) let currentWalletId = $state<string | null>(null)
@@ -279,29 +280,31 @@ export const EvmWallet = () => {
const refresh = async () => { const refresh = async () => {
if (!seed || !electrobun.rpc) return if (!seed || !electrobun.rpc) return
loading = true loadingBalance = true
loadingTransactions = true
error = '' error = ''
tokenBalances = []
const account = mnemonicToAccount(seed) const account = mnemonicToAccount(seed)
address = account.address address = account.address
const client = createPublicClient({ transport: http(net().rpc) }) const client = createPublicClient({ transport: http(net().rpc) })
const [nativeBal, nativeBalError] = await tryCatch(
;(async () => {
const [nativeBal] = await tryCatch(
client.getBalance({ address: account.address }), client.getBalance({ address: account.address }),
) )
if (nativeBalError) { if (nativeBal) balance = formatEther(nativeBal)
loading = false const [bals] = await tryCatch(
return
}
balance = formatEther(nativeBal)
const [bals, balsError] = await tryCatch(
electrobun.rpc.request.fetchTokenBalances({ electrobun.rpc.request.fetchTokenBalances({
address, chainid: net().chainid, address, chainid: net().chainid,
}), }),
) )
if (balsError) error = balsError.message if (bals) tokenBalances = bals
tokenBalances = bals ?? [] loadingBalance = false
})()
;(async () => {
await fetchTxHistory() await fetchTxHistory()
loading = false loadingTransactions = false
})()
} }
const saveApiKey = async (key: string) => { const saveApiKey = async (key: string) => {
@@ -358,7 +361,9 @@ export const EvmWallet = () => {
get networks() { return networks }, get networks() { return networks },
get apiKey() { return apiKey }, get apiKey() { return apiKey },
get transactions() { return transactions }, get transactions() { return transactions },
get loading() { return loading }, get loading() { return loadingBalance || loadingTransactions },
get loadingBalance() { return loadingBalance },
get loadingTransactions() { return loadingTransactions },
get error() { return error }, get error() { return error },
get wallets() { return wallets }, get wallets() { return wallets },
get currentWalletId() { return currentWalletId }, get currentWalletId() { return currentWalletId },