From 85c25883c63168dd35666a115ca1c0897c3681b2 Mon Sep 17 00:00:00 2001 From: TZGyn Date: Thu, 21 May 2026 17:22:09 +0800 Subject: [PATCH] split balance and tx loading into independent processes --- .../src/lib/components/EvmDashboard.svelte | 9 +++- .../src/lib/states/evm-wallet.svelte.ts | 47 ++++++++++--------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/apps/desktop/src/lib/components/EvmDashboard.svelte b/apps/desktop/src/lib/components/EvmDashboard.svelte index d7bcbea..cc50c91 100644 --- a/apps/desktop/src/lib/components/EvmDashboard.svelte +++ b/apps/desktop/src/lib/components/EvmDashboard.svelte @@ -332,7 +332,12 @@ {/if} - {#if w.error} + {#if w.loadingBalance && w.address} +
+ +
+ {/if} + {#if w.error}

{w.error}

{/if} @@ -371,7 +376,7 @@ Transactions - {#if w.loading} + {#if w.loadingTransactions}
diff --git a/apps/desktop/src/lib/states/evm-wallet.svelte.ts b/apps/desktop/src/lib/states/evm-wallet.svelte.ts index fab9a6c..4314e60 100644 --- a/apps/desktop/src/lib/states/evm-wallet.svelte.ts +++ b/apps/desktop/src/lib/states/evm-wallet.svelte.ts @@ -53,7 +53,8 @@ export const EvmWallet = () => { let network = $state('eth') let apiKey = $state('') let transactions = $state([]) - let loading = $state(false) + let loadingBalance = $state(false) + let loadingTransactions = $state(false) let error = $state('') let wallets = $state([]) let currentWalletId = $state(null) @@ -279,29 +280,31 @@ export const EvmWallet = () => { const refresh = async () => { if (!seed || !electrobun.rpc) return - loading = true + loadingBalance = true + loadingTransactions = true error = '' - tokenBalances = [] const account = mnemonicToAccount(seed) address = account.address const client = createPublicClient({ transport: http(net().rpc) }) - const [nativeBal, nativeBalError] = await tryCatch( - client.getBalance({ address: account.address }), - ) - if (nativeBalError) { - loading = false - return - } - balance = formatEther(nativeBal) - const [bals, balsError] = await tryCatch( - electrobun.rpc.request.fetchTokenBalances({ - address, chainid: net().chainid, - }), - ) - if (balsError) error = balsError.message - tokenBalances = bals ?? [] - await fetchTxHistory() - loading = false + + ;(async () => { + const [nativeBal] = await tryCatch( + client.getBalance({ address: account.address }), + ) + if (nativeBal) balance = formatEther(nativeBal) + const [bals] = await tryCatch( + electrobun.rpc.request.fetchTokenBalances({ + address, chainid: net().chainid, + }), + ) + if (bals) tokenBalances = bals + loadingBalance = false + })() + + ;(async () => { + await fetchTxHistory() + loadingTransactions = false + })() } const saveApiKey = async (key: string) => { @@ -358,7 +361,9 @@ export const EvmWallet = () => { get networks() { return networks }, get apiKey() { return apiKey }, 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 wallets() { return wallets }, get currentWalletId() { return currentWalletId },