[#21323] fix: wrong networks when asset not available in default account (#21689)

This commit is contained in:
Mohsen 2024-12-03 17:24:30 +03:00 committed by GitHub
parent 2be78041e2
commit 32ccca0912
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 28 deletions

View File

@ -16,16 +16,19 @@
test-networks-enabled? (get-in db [:profile/profile :test-networks-enabled?]) test-networks-enabled? (get-in db [:profile/profile :test-networks-enabled?])
view-id (:view-id db) view-id (:view-id db)
root-screen? (or (= view-id :wallet-stack) (nil? view-id)) root-screen? (or (= view-id :wallet-stack) (nil? view-id))
account (or from-account (swap-utils/wallet-account wallet)) available-accounts (utils/get-accounts-with-token-balance (:accounts wallet)
asset-to-pay (if (get-in data [:asset-to-pay :networks]) (:asset-to-pay data))
account (or from-account
(swap-utils/current-viewing-account wallet)
(first available-accounts))
asset-to-pay (if (and (not from-account) (get-in data [:asset-to-pay :networks]))
(:asset-to-pay data) (:asset-to-pay data)
(swap-utils/select-asset-to-pay-by-symbol (swap-utils/select-asset-to-pay-by-symbol
{:wallet wallet {:wallet wallet
:account account :account account
:test-networks-enabled? test-networks-enabled? :test-networks-enabled? test-networks-enabled?
:token-symbol (get-in data [:asset-to-pay :symbol])})) :token-symbol (get-in data [:asset-to-pay :symbol])}))
multi-account-balance? (-> (utils/get-accounts-with-token-balance (:accounts wallet) multi-account-balance? (-> available-accounts
asset-to-pay)
(count) (count)
(> 1)) (> 1))
network' (or network network' (or network

View File

@ -30,33 +30,16 @@
:else :else
(i18n/label :t/something-went-wrong-please-try-again-later))) (i18n/label :t/something-went-wrong-please-try-again-later)))
(defn- first-operable-account (defn current-viewing-account
[accounts]
(->> accounts
vals
(remove :watch-only?)
(filter :operable?)
(sort-by :position)
first))
(defn wallet-account
"Picks the account that's gonna be used for the swap operation.
It's gonna be either the preselected account defined by
`[:wallet :current-viewing-account-address]` in `db`
or the first operable account."
[wallet] [wallet]
(if-let [wallet-address (get wallet :current-viewing-account-address)] (when-let [wallet-address (get wallet :current-viewing-account-address)]
(-> wallet (get-in wallet [:accounts wallet-address])))
:accounts
vals
(utils/get-account-by-address wallet-address))
(-> wallet :accounts first-operable-account)))
(defn select-asset-to-pay-by-symbol (defn select-asset-to-pay-by-symbol
"Selects an asset to pay by token symbol. "Selects an asset to pay by token symbol.
It's used for cases when only token symbol is available and the information It's used for cases when only token symbol is available and the information
about token needs to be extracted from the database. about token needs to be extracted from the database.
That happens when token is being selected on the home screen and That happens when token is being selected on the home screen and
it basically indicates that no account pre-selection was made." it basically indicates that no account pre-selection was made."
[{:keys [wallet account test-networks-enabled? token-symbol]}] [{:keys [wallet account test-networks-enabled? token-symbol]}]
(let [networks (-> (get-in wallet [:networks (if test-networks-enabled? :test :prod)]) (let [networks (-> (get-in wallet [:networks (if test-networks-enabled? :test :prod)])
@ -73,7 +56,7 @@
(defn select-default-asset-to-receive (defn select-default-asset-to-receive
"Selects an asset to receive if it was not provided explicitly. "Selects an asset to receive if it was not provided explicitly.
The principle of how the asset is being selected is simple: we get the The principle of how the asset is being selected is simple: we get the
whole list, remove the currently selected `asset-to-pay` from it, and choose whole list, remove the currently selected `asset-to-pay` from it, and choose
the first one of what's left." the first one of what's left."
[{:keys [wallet account test-networks-enabled? asset-to-pay]}] [{:keys [wallet account test-networks-enabled? asset-to-pay]}]
@ -86,7 +69,7 @@
(defn select-network (defn select-network
"Chooses the network. "Chooses the network.
Usually user needs to do the selection first and if the selection was done Usually user needs to do the selection first and if the selection was done
then the list of networks for the defined token will always contain then the list of networks for the defined token will always contain
one entry. Otherwise `nil` will be returned from here which will serve one entry. Otherwise `nil` will be returned from here which will serve
as an indicator that the network selector needs to be displayed." as an indicator that the network selector needs to be displayed."
[{:keys [networks]}] [{:keys [networks]}]