From 8513dcbf0f1f87aaa9e9d6f578ce926d188b34f6 Mon Sep 17 00:00:00 2001 From: Jusitn Do Date: Wed, 31 Jul 2024 23:19:50 +0700 Subject: [PATCH] update logic wallet/account selector in send page and receive page, clean code --- ui/page/components/account_dropdown.go | 8 ++++++ ui/page/send/page.go | 24 +++++++++-------- ui/page/send/recipient.go | 3 +++ ui/page/send/send_amount.go | 37 ++++++++------------------ ui/page/send/send_destination.go | 12 +++++++++ 5 files changed, 47 insertions(+), 37 deletions(-) diff --git a/ui/page/components/account_dropdown.go b/ui/page/components/account_dropdown.go index 9cb0f91b7..ec9ef2233 100644 --- a/ui/page/components/account_dropdown.go +++ b/ui/page/components/account_dropdown.go @@ -82,6 +82,11 @@ func (d *AccountDropdown) selectedIsValid() bool { if d.selectedAccount == nil { return false } + + if d.selectedWallet.GetWalletID() != d.selectedAccount.WalletID { + return false + } + if d.accountIsValid != nil { if !d.accountIsValid(d.selectedAccount) { return false @@ -150,6 +155,9 @@ func (d *AccountDropdown) getAccountByNumber(accountNumber int32) *sharedW.Accou } func (d *AccountDropdown) SelectedAccount() *sharedW.Account { + if d == nil { + return nil + } return d.selectedAccount } diff --git a/ui/page/send/page.go b/ui/page/send/page.go index 64e291da0..f4d3fa631 100644 --- a/ui/page/send/page.go +++ b/ui/page/send/page.go @@ -187,6 +187,18 @@ func (pg *Page) pageFields() pageFields { // initWalletSelector is used for the send modal for wallet selection. func (pg *Page) initModalWalletSelector(wallet sharedW.Asset) { + pg.walletDropdown = components.NewWalletDropdown(pg.Load). + SetChangedCallback(func(wallet sharedW.Asset) { + pg.selectedWallet = wallet + if pg.accountDropdown != nil { + pg.accountDropdown.Setup(wallet) + go pg.feeRateSelector.UpdatedFeeRate(pg.selectedWallet) + pg.setAssetTypeForRecipients() + } + + }). + Setup() + pg.accountDropdown = components.NewAccountDropdown(pg.Load). SetChangedCallback(func(account *sharedW.Account) { pg.initAccountsSelectorForRecipients(account) @@ -219,18 +231,8 @@ func (pg *Page) initModalWalletSelector(wallet sharedW.Asset) { } return accountIsValid - }) - pg.walletDropdown = components.NewWalletDropdown(pg.Load). - SetChangedCallback(func(wallet sharedW.Asset) { - pg.selectedWallet = wallet - if pg.accountDropdown != nil { - pg.accountDropdown.Setup(wallet) - go pg.feeRateSelector.UpdatedFeeRate(pg.selectedWallet) - pg.setAssetTypeForRecipients() - } - }). - Setup() + Setup(wallet) pg.selectedWallet = pg.walletDropdown.SelectedWallet() if wallet != nil { diff --git a/ui/page/send/recipient.go b/ui/page/send/recipient.go index 9e98780ba..70d482408 100644 --- a/ui/page/send/recipient.go +++ b/ui/page/send/recipient.go @@ -104,6 +104,9 @@ func (rp *recipient) initializeAccountSelectors(sourceAccount *sharedW.Account) func (rp *recipient) isShowSendToWallet() bool { sourceWalletSelected := rp.sendDestination.walletDropdown.SelectedWallet() + if sourceWalletSelected == nil { + return false + } var wallets []sharedW.Asset switch sourceWalletSelected.GetAssetType() { case libUtil.BTCWalletAsset: diff --git a/ui/page/send/send_amount.go b/ui/page/send/send_amount.go index 7317623f8..82b40bcd0 100644 --- a/ui/page/send/send_amount.go +++ b/ui/page/send/send_amount.go @@ -219,39 +219,24 @@ func (sa *sendAmount) handle(gtx C) { sa.usdAmountEditor.CustomButton.Background = sa.theme.Color.Gray1 } - for { - event, ok := sa.amountEditor.Editor.Update(gtx) - if !ok { - break - } - - if gtx.Source.Focused(sa.amountEditor.Editor) { - switch event.(type) { - case widget.ChangeEvent: - if sa.sendMaxChangeEvent { - sa.sendMaxChangeEvent = false - continue - } + if gtx.Source.Focused(sa.amountEditor.Editor) { + if sa.amountEditor.Changed() { + if sa.sendMaxChangeEvent { + sa.sendMaxChangeEvent = false + } else { sa.SendMax = false sa.validateAmount() sa.amountChanged() } - } - } - for { - event, ok := sa.usdAmountEditor.Editor.Update(gtx) - if !ok { - break } + } - if gtx.Source.Focused(sa.usdAmountEditor.Editor) { - switch event.(type) { - case widget.ChangeEvent: - if sa.usdSendMaxChangeEvent { - sa.usdSendMaxChangeEvent = false - continue - } + if gtx.Source.Focused(sa.usdAmountEditor.Editor) { + if sa.usdAmountEditor.Changed() { + if sa.usdSendMaxChangeEvent { + sa.usdSendMaxChangeEvent = false + } else { sa.SendMax = false sa.validateUSDAmount() sa.amountChanged() diff --git a/ui/page/send/send_destination.go b/ui/page/send/send_destination.go index d480fe26c..dc441d5af 100644 --- a/ui/page/send/send_destination.go +++ b/ui/page/send/send_destination.go @@ -58,6 +58,18 @@ func (dst *destination) initDestinationWalletSelector(assetType libUtil.AssetTyp _ = dst.accountDropdown.Setup(wallet) } }). + WalletValidator(func(wallet sharedW.Asset) bool { + if dst.sourceAccount == nil { + return true + } + if wallet.GetWalletID() == dst.sourceAccount.WalletID { + account, err := wallet.GetAccountsRaw() + if err != nil || len(account.Accounts) <= 2 { + return false + } + } + return true + }). EnableWatchOnlyWallets(true). Setup() dst.accountDropdown = components.NewAccountDropdown(dst.Load).