From c381d75a07301d14e43833cacee0644b5534de53 Mon Sep 17 00:00:00 2001 From: Thiendekaco Date: Sat, 2 Mar 2024 01:16:28 +0700 Subject: [PATCH] Resolve ui bug #8 --- packages/core/src/preflight-notifications.ts | 1 + packages/core/src/provider.ts | 52 +++++++++++++---- .../src/views/connect/ConnectingWallet.svelte | 24 +++----- packages/core/src/views/connect/Index.svelte | 56 +++++++++---------- .../modal/selectors/AccountSelector.tsx | 4 +- .../transaction/TransactionModal.tsx | 3 +- packages/demo/src/utils/api/evmApi.ts | 47 ++++++++++++---- packages/walletconnect/src/walletConnect.ts | 29 ++++++---- .../src/walletConnect.ts | 21 ++++--- 9 files changed, 146 insertions(+), 91 deletions(-) diff --git a/packages/core/src/preflight-notifications.ts b/packages/core/src/preflight-notifications.ts index 3e85b6ea9..9ef9b0be8 100644 --- a/packages/core/src/preflight-notifications.ts +++ b/packages/core/src/preflight-notifications.ts @@ -56,6 +56,7 @@ export async function preflightNotifications( // check sufficient balance if required parameters are available if (balance && gas && price) { const transactionCost = gas.times(price).plus(value) + console.log(gas, price, balance); // if transaction cost is greater than the current balance if (transactionCost.gt(new BigNumber(balance))) { diff --git a/packages/core/src/provider.ts b/packages/core/src/provider.ts index d8a9af9eb..0d95746a6 100644 --- a/packages/core/src/provider.ts +++ b/packages/core/src/provider.ts @@ -165,9 +165,17 @@ export function trackWallet( }).pipe(share()) // when account changed, set it to first account and subscribe to events - accountsChanged$.subscribe(async (addressList) => { + accountsChanged$.subscribe(async (addressList_) => { + + if (!addressList_ && addressList_.length <= 0) { + disconnect({ label, type }) + return + } // sync accounts with internal state - // in the case of an account has been manually disconnected + // in the case of an account has been manually disconnected; + const addressList = addressList_ .filter((a) => { + return type === 'evm' ? a.toLowerCase().startsWith('0x') : !a.toLowerCase().startsWith('0x') + }) try { await syncWalletConnectedAccounts(label, type) } catch (error) { @@ -181,20 +189,31 @@ export function trackWallet( // this could happen if user locks wallet, // or if disconnects app from wallet if (!addressList && addressList.length <= 0) { - disconnect({ label, type }) - return + await disconnect({ label, type }) + return; } const { wallets } = state.get() - const { accounts } = wallets + const walletFinded = wallets .find(wallet => wallet.label === label && wallet.type === type) + if(!walletFinded) { + await disconnect({ label, type }); + return; + } + const { accounts } = walletFinded; + const [existingAccounts] = partition( accounts, - account => addressList.find(( address ) => address.includes(account.address)) + account => addressList.find( + ( address ) => address.includes(account.address) + ) ) - const newAccounts = addressList.filter((address) => !existingAccounts.find((account) => address.includes(account.address))) + const newAccounts = addressList.filter( + (address) => + !existingAccounts.find((account) => address.includes(account.address) + )) // update accounts without ens/uns and balance first updateWallet(label, type, { @@ -211,7 +230,8 @@ export function trackWallet( // if not existing account and notifications, // then subscribe to transaction events - if (state.get().notify.enabled && !( existingAccounts && existingAccounts.length > 0 )) { + if (state.get().notify.enabled + && !( existingAccounts && existingAccounts.length > 0 )) { const sdk = await getBNMulitChainSdk() if (sdk) { @@ -238,7 +258,17 @@ export function trackWallet( // also when accounts change, update Balance and ENS/UNS accountsChanged$ .pipe( - switchMap(async (addressList) => { + switchMap(async (addressList_) => { + + if (!addressList_ && addressList_.length <= 0) { + return + } + + + const addressList = addressList_ .filter((a) => { + return type === 'evm' ? a.toLowerCase().startsWith('0x') : !a.toLowerCase().startsWith('0x') + }) + if (!addressList && addressList.length <= 0) { return } @@ -257,7 +287,9 @@ export function trackWallet( ) return await Promise.all(addressList.map((address) => { - const balanceProm = getBalance(address, chain, primaryWallet.type ) + const balanceProm = getBalance( + address, chain, primaryWallet.type + ) const secondaryTokenBal = updateSecondaryTokens( primaryWallet, address, diff --git a/packages/core/src/views/connect/ConnectingWallet.svelte b/packages/core/src/views/connect/ConnectingWallet.svelte index c2a39f5e7..eb3fb8327 100644 --- a/packages/core/src/views/connect/ConnectingWallet.svelte +++ b/packages/core/src/views/connect/ConnectingWallet.svelte @@ -5,7 +5,7 @@ import WalletAppBadge from '../shared/WalletAppBadge.svelte' import en from '../../i18n/en.json' import { state } from '../../store/index.js' - import { shareReplay, startWith } from 'rxjs' + import { shareReplay, startWith, withLatestFrom } from 'rxjs' import { errorIcon } from '../../icons'; import { qrModalConnect$, uriConnect$ } from '../../streams.js'; import { MOBILE_WINDOW_WIDTH } from '../../constants.js'; @@ -19,19 +19,16 @@ let windowWidth: number - $: uri = ''; - uriConnect$.subscribe((_uri)=>{ - uri = _uri; - setTimeout(()=> { - openQrModal(); - }, 500) - }) - qrModalConnect$.subscribe( async ({ isOpen, modal })=>{ + qrModalConnect$ + .pipe(withLatestFrom(uriConnect$)) + .subscribe(([{ isOpen, modal }, uri])=>{ if(isOpen && modal && uri !== ''){ try{ - await modal.openModal({ uri }) + setTimeout(()=>{ + modal.openModal({ uri }) + }, 500) }catch (e) { console.log(e) } @@ -40,12 +37,7 @@ } }) - function openQrModal() { - qrModalConnect$.next({ - ...qrModalConnect$.value, - isOpen: true - }) - } + const appMetadata$ = state .select('appMetadata') .pipe(startWith(state.get().appMetadata), shareReplay(1)) diff --git a/packages/core/src/views/connect/Index.svelte b/packages/core/src/views/connect/Index.svelte index 5fb8236b4..a013685d6 100644 --- a/packages/core/src/views/connect/Index.svelte +++ b/packages/core/src/views/connect/Index.svelte @@ -1,20 +1,26 @@