Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: show network card with zero value on the sender side if the router does not return a route for that network #20152

Merged
merged 1 commit into from
May 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 48 additions & 30 deletions src/status_im/contexts/wallet/send/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,20 @@
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
(if (= tx-type :tx/bridge)
from-network-values-for-ui
(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-loading-network-amounts-to-zero
sender-network-values))
receiver-network-values (if routes-available?
Expand Down Expand Up @@ -322,9 +328,9 @@
(when (empty? receiver-network-values) :receiver-network-values)))})))

(rf/reg-event-fx :wallet/get-suggested-routes
(fn [{:keys [db now]} [{:keys [amount]}]]
(fn [{:keys [db now]} [{:keys [amount updated-token]}]]
(let [wallet-address (get-in db [:wallet :current-viewing-account-address])
token (get-in db [:wallet :ui :send :token])
token (or updated-token (get-in db [:wallet :ui :send :token]))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need both token and updated-token? why not just one of these? 🤔

transaction-type (get-in db [:wallet :ui :send :tx-type])
collectible (get-in db [:wallet :ui :send :collectible])
to-address (get-in db [:wallet :ui :send :to-address])
Expand Down Expand Up @@ -356,32 +362,41 @@
: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
: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}))
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)
(remove #(= 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 All @@ -398,13 +413,16 @@
network-preferences
gas-rates
from-locked-amount]]
{:db (-> db
(assoc-in [:wallet :ui :send :amount] amount)
(assoc-in [:wallet :ui :send :loading-suggested-routes?] true)
(assoc-in [:wallet :ui :send :sender-network-values] sender-network-values)
(assoc-in [:wallet :ui :send :receiver-network-values] receiver-network-values)
(assoc-in [:wallet :ui :send :suggested-routes-call-timestamp] now)
(update-in [:wallet :ui :send] dissoc :network-links))
{:db (cond-> db
:always (assoc-in [:wallet :ui :send :amount] amount)
:always (assoc-in [:wallet :ui :send :loading-suggested-routes?] true)
:always (assoc-in [:wallet :ui :send :sender-network-values]
sender-network-values)
:always (assoc-in [:wallet :ui :send :receiver-network-values]
receiver-network-values)
:always (assoc-in [:wallet :ui :send :suggested-routes-call-timestamp] now)
:always (update-in [:wallet :ui :send] dissoc :network-links)
token (assoc-in [:wallet :ui :send :token] token))
:json-rpc/call [{:method "wallet_getSuggestedRoutes"
:params request-params
:on-success (fn [suggested-routes]
Expand Down
8 changes: 5 additions & 3 deletions src/status_im/contexts/wallet/send/input_amount/view.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,8 @@
enabled-from-chain-ids (rf/sub
[:wallet/wallet-send-enabled-from-chain-ids])
{token-balance :total-balance
available-balance :available-balance} (rf/sub [:wallet/token-by-symbol
available-balance :available-balance
:as token-by-symbol} (rf/sub [:wallet/token-by-symbol
(str token-symbol)
enabled-from-chain-ids])
currency-symbol (rf/sub [:profile/currency-symbol])
Expand Down Expand Up @@ -337,7 +338,7 @@
(number/remove-trailing-zeroes new-value))))))
:on-token-press show-select-asset-sheet}]
[routes/view
{:token token
{:token token-by-symbol
:input-value input-amount
:value amount
:valid-input? valid-input?
Expand Down Expand Up @@ -373,7 +374,8 @@
conversion-rate)
2))]
(rf/dispatch [:wallet/get-suggested-routes
{:amount amount}]))
{:amount amount
:updated-token token-by-symbol}]))
sending-to-unpreferred-networks?
#(show-unpreferred-networks-alert on-confirm)
:else
Expand Down
12 changes: 8 additions & 4 deletions src/status_im/contexts/wallet/send/routes/view.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@
(def network-link-2x-height 111)

(defn- fetch-routes
[{:keys [amount bounce-duration-ms valid-input?]}]
[{:keys [amount bounce-duration-ms token valid-input?]}]
(if valid-input?
(debounce/debounce-and-dispatch
[:wallet/get-suggested-routes {:amount amount}]
[:wallet/get-suggested-routes
{:amount amount
:updated-token token}]
bounce-duration-ms)
(rf/dispatch [:wallet/clean-suggested-routes])))

Expand Down Expand Up @@ -203,14 +205,16 @@
(fetch-routes
{:amount value
:valid-input? valid-input?
:bounce-duration-ms 2000})))
:bounce-duration-ms 2000
:token token})))
[input-value valid-input?])
(rn/use-effect
#(when (and active-screen? (> (count token-available-networks-for-suggested-routes) 0))
(fetch-routes
{:amount value
:valid-input? valid-input?
:bounce-duration-ms 0}))
:bounce-duration-ms 0
:token token}))
[disabled-from-chain-ids])
[rn/scroll-view {:content-container-style style/routes-container}
(when show-routes?
Expand Down
19 changes: 16 additions & 3 deletions src/status_im/contexts/wallet/send/utils.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,25 @@
{}
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?]}]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say only-with-balance is not very clear. What is the purpose of this variable ? 🤔

(let [disabled-set (set disabled-chain-ids)]
(->> balances-per-chain
(filter (fn [[_ {:keys [chain-id]}]]
(not (contains? disabled-set chain-id))))
(filter (fn [[_ {:keys [chain-id raw-balance]}]]
(and (not (contains? disabled-set chain-id))
(or (not only-with-balance?)
(and only-with-balance?
(money/bignumber? raw-balance)
(money/greater-than raw-balance (money/bignumber "0")))))))
(map first))))

(def ^:private network-priority-score
Expand Down