Skip to content

Commit

Permalink
fix: show network card with zero value on the sender side if the rout…
Browse files Browse the repository at this point in the history
…er does not return a route for that network on the sender side but the token has balance

Signed-off-by: Brian Sztamfater <brian@status.im>
  • Loading branch information
briansztamfater committed May 22, 2024
1 parent 05a09d1 commit e2c9e69
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 32 deletions.
16 changes: 14 additions & 2 deletions src/status_im/contexts/wallet/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
[react-native.platform :as platform]
[status-im.constants :as constants]
[status-im.contexts.settings.wallet.events]
[status-im.contexts.wallet.common.utils :as utils]
[status-im.contexts.wallet.common.utils.networks :as network-utils]
[status-im.contexts.wallet.data-store :as data-store]
[status-im.contexts.wallet.db :as db]
Expand Down Expand Up @@ -42,8 +43,19 @@
[:dispatch [:wallet/show-account-created-toast address]]]}))

(rf/reg-event-fx :wallet/switch-current-viewing-account
(fn [{:keys [db]} [address]]
{:db (assoc-in db [:wallet :current-viewing-account-address] address)}))
(fn [{:keys [db]} [{:keys [address network-details update-balance?]}]]
(let [current-token (-> db :wallet :ui :send :token)
token (when (and current-token update-balance?)
;; When this flow has started in the wallet home page, we know the
;; token or collectible to send, but we don't know from which
;; account, so we extract the token data from the picked account.
(let [token (utils/get-token-from-account db (:symbol current-token) address)]
(assoc token
:networks (network-utils/network-list token network-details)
:total-balance (utils/calculate-total-token-balance token))))]
{:db (cond-> db
:always (assoc-in [:wallet :current-viewing-account-address] address)
token (assoc-in [:wallet :ui :send :token] token))})))

(rf/reg-event-fx :wallet/clean-current-viewing-account
(fn [{:keys [db]}]
Expand Down
62 changes: 40 additions & 22 deletions src/status_im/contexts/wallet/send/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,18 @@
native-token?
:receiver? true})
to-network-values-for-ui (send-utils/network-values-for-ui to-network-amounts-by-chain)
sender-possible-chain-ids (mapv :chain-id sender-network-values)
sender-network-values (if routes-available?
(send-utils/network-amounts
{:network-values from-network-values-for-ui
{:network-values
(send-utils/add-zero-values-to-network-values
from-network-values-for-ui
sender-possible-chain-ids)
:disabled-chain-ids disabled-from-chain-ids
:receiver-networks receiver-networks
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type tx-type
:receiver? false})
:tx-type tx-type
:receiver? false})
(send-utils/reset-network-amounts-to-zero
sender-network-values))
receiver-network-values (if routes-available?
Expand Down Expand Up @@ -338,32 +342,42 @@
:tx/bridge constants/send-type-bridge
constants/send-type-transfer)
balances-per-chain (when token (:balances-per-chain token))
token-available-networks-for-suggested-routes
sender-token-available-networks-for-suggested-routes
(when token
(send-utils/token-available-networks-for-suggested-routes {:balances-per-chain
balances-per-chain
:disabled-chain-ids
disabled-from-chain-ids}))
disabled-from-chain-ids
:only-with-balance? true}))
receiver-token-available-networks-for-suggested-routes
(when token
(send-utils/token-available-networks-for-suggested-routes {:balances-per-chain
balances-per-chain
:disabled-chain-ids
disabled-from-chain-ids
:only-with-balance? false}))
token-networks-ids (when token (mapv #(:chain-id %) (:networks token)))
sender-network-values (when token-available-networks-for-suggested-routes
sender-network-values (when sender-token-available-networks-for-suggested-routes
(send-utils/loading-network-amounts
{:valid-networks (if (= transaction-type :tx/bridge)
(filter
#(not= bridge-to-chain-id %)
token-available-networks-for-suggested-routes)
token-available-networks-for-suggested-routes)
{:valid-networks
(if (= transaction-type :tx/bridge)
(filter
#(not= bridge-to-chain-id %)
sender-token-available-networks-for-suggested-routes)
sender-token-available-networks-for-suggested-routes)
:disabled-chain-ids disabled-from-chain-ids
:receiver-networks receiver-networks
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
:tx-type transaction-type
:receiver? false}))
receiver-network-values (when token-available-networks-for-suggested-routes
:tx-type transaction-type
:receiver? false}))
receiver-network-values (when receiver-token-available-networks-for-suggested-routes
(send-utils/loading-network-amounts
{:valid-networks (if (= transaction-type :tx/bridge)
(filter
#(= bridge-to-chain-id %)
token-available-networks-for-suggested-routes)
token-available-networks-for-suggested-routes)
{:valid-networks
(if (= transaction-type :tx/bridge)
(filter
#(= bridge-to-chain-id %)
receiver-token-available-networks-for-suggested-routes)
receiver-token-available-networks-for-suggested-routes)
:disabled-chain-ids disabled-from-chain-ids
:receiver-networks receiver-networks
:token-networks-ids token-networks-ids
Expand Down Expand Up @@ -600,7 +614,11 @@
(assoc-in [:wallet :ui :send :token] token)
(update-in [:wallet :ui :send] dissoc :token-symbol))
db)
:fx [[:dispatch [:wallet/switch-current-viewing-account address]]
:fx [[:dispatch
[:wallet/switch-current-viewing-account
{:address address
:network-details network-details
:update-balance? false}]]
[:dispatch
[:wallet/wizard-navigate-forward
{:current-screen stack-id
Expand Down
16 changes: 15 additions & 1 deletion src/status_im/contexts/wallet/send/utils.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,24 @@
{}
amounts))

(defn add-zero-values-to-network-values
[network-values all-possible-chain-ids]
(reduce
(fn [acc chain-id]
(let [route-value (get network-values chain-id)]
(assoc acc chain-id (or route-value (money/bignumber "0")))))
{}
all-possible-chain-ids))

(defn token-available-networks-for-suggested-routes
[{:keys [balances-per-chain disabled-chain-ids]}]
[{:keys [balances-per-chain disabled-chain-ids only-with-balance?]}]
(let [disabled-set (set disabled-chain-ids)]
(->> balances-per-chain
(filter (fn [[_ {:keys [raw-balance]}]]
(or (not only-with-balance?)
(and only-with-balance?
(and (money/bignumber? raw-balance)
(money/greater-than raw-balance (money/bignumber "0")))))))
(filter (fn [[_ {:keys [chain-id]}]]
(not (contains? disabled-set chain-id))))
(map first))))
Expand Down
11 changes: 8 additions & 3 deletions src/status_im/contexts/wallet/sheets/account_options/view.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
[utils.re-frame :as rf]))

(defn- render-account-item
[{:keys [name emoji color address watch-only?]}]
[{:keys [name emoji color address watch-only?]} _ _ {:keys [network-details]}]
[quo/account-item
{:account-props (cond-> {:name name
:emoji emoji
Expand All @@ -27,7 +27,10 @@
(assoc :type :watch-only))
:title-icon (when watch-only? :i/reveal)
:on-press (fn []
(rf/dispatch [:wallet/switch-current-viewing-account address])
(rf/dispatch [:wallet/switch-current-viewing-account
{:address address
:network-details network-details
:update-balance? true}])
(rf/dispatch [:hide-bottom-sheet]))}])

(defn- options
Expand Down Expand Up @@ -111,12 +114,14 @@
(fn []
(let [theme (quo.theme/use-theme)
accounts (rf/sub [:wallet/accounts-without-current-viewing-account])
show-account-selector? (pos? (count accounts))]
show-account-selector? (pos? (count accounts))
network-details (rf/sub [:wallet/network-details])]
[:<>
(when show-account-selector?
[gesture/flat-list
{:data accounts
:render-fn render-account-item
:render-data {:network-details network-details}
:content-container-style (style/list-container @options-height)
:shows-vertical-scroll-indicator false}])
[options
Expand Down
13 changes: 9 additions & 4 deletions src/status_im/contexts/wallet/sheets/select_account/view.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,30 @@
[utils.re-frame :as rf]))

(defn- render-account-item
[{:keys [color address] :as account} _ _ {:keys [selected-account-address]}]
[{:keys [color address] :as account} _ _ {:keys [selected-account-address network-details]}]
[quo/account-item
{:type :default
:account-props (assoc account :customization-color color)
:customization-color color
:state (if (= address selected-account-address) :selected :default)
:on-press (fn []
(rf/dispatch [:wallet/switch-current-viewing-account address])
(rf/dispatch [:wallet/switch-current-viewing-account
{:address address
:network-details network-details
:update-balance? true}])
(rf/dispatch [:hide-bottom-sheet]))}])

(defn view
[]
(let [selected-account-address (rf/sub [:wallet/current-viewing-account-address])
accounts (rf/sub [:wallet/accounts-without-watched-accounts])]
accounts (rf/sub [:wallet/accounts-without-watched-accounts])
network-details (rf/sub [:wallet/network-details])]
[:<>
[quo/drawer-top {:title (i18n/label :t/select-account)}]
[gesture/flat-list
{:data accounts
:render-fn render-account-item
:render-data {:selected-account-address selected-account-address}
:render-data {:selected-account-address selected-account-address
:network-details network-details}
:content-container-style style/list-container
:shows-vertical-scroll-indicator false}]]))

0 comments on commit e2c9e69

Please sign in to comment.