Skip to content

Commit

Permalink
some fixes and support for no routes (from algorithm response)
Browse files Browse the repository at this point in the history
  • Loading branch information
briansztamfater committed Apr 24, 2024
1 parent 2304880 commit 54007a3
Show file tree
Hide file tree
Showing 6 changed files with 133 additions and 72 deletions.
43 changes: 25 additions & 18 deletions src/status_im/contexts/wallet/send/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
collectible (get-in db [:wallet :ui :send :collectible])
token-display-name (get-in db [:wallet :ui :send :token-display-name])
receiver-networks (get-in db [:wallet :ui :send :receiver-networks])
receiver-network-values (get-in db [:wallet :ui :send :receiver-network-values])
sender-network-values (get-in db [:wallet :ui :send :sender-network-values])
disabled-from-chain-ids (or (get-in db [:wallet :ui :send :disabled-from-chain-ids]) [])
token-decimals (if collectible 0 (:decimals token))
native-token? (and token (= token-display-name "ETH"))
Expand All @@ -50,16 +52,18 @@
native-token?
:to? true})
to-network-values-for-ui (send-utils/network-values-for-ui to-network-amounts-by-chain)
sender-network-values (when routes-available?
sender-network-values (if routes-available?
(send-utils/network-amounts from-network-values-for-ui
disabled-from-chain-ids
receiver-networks
false))
receiver-network-values (when routes-available?
false)
(send-utils/clean-network-amounts sender-network-values))
receiver-network-values (if routes-available?
(send-utils/network-amounts to-network-values-for-ui
disabled-from-chain-ids
receiver-networks
true))
true)
(send-utils/clean-network-amounts receiver-network-values))
network-links (when routes-available?
(send-utils/network-links chosen-route
sender-network-values
Expand All @@ -76,19 +80,23 @@

(rf/reg-event-fx :wallet/suggested-routes-error
(fn [{:keys [db]} [error]]
{:db (-> db
(update-in [:wallet :ui :send]
dissoc
:route
:sender-network-values
:receiver-network-values)
(assoc-in [:wallet :ui :send :loading-suggested-routes?] false)
(assoc-in [:wallet :ui :send :suggested-routes] {:best []}))
:fx [[:dispatch
[:toasts/upsert
{:id :send-transaction-error
:type :negative
:text (:message error)}]]]}))
(let [receiver-network-values (get-in db [:wallet :ui :send :receiver-network-values])
sender-network-values (get-in db [:wallet :ui :send :sender-network-values])
cleaned-sender-network-values (send-utils/clean-network-amounts sender-network-values)
cleaned-receiver-network-values (send-utils/clean-network-amounts receiver-network-values)]
{:db (-> db
(update-in [:wallet :ui :send]
dissoc
:route)
(assoc-in [:wallet :ui :send :sender-network-values] cleaned-sender-network-values)
(assoc-in [:wallet :ui :send :receiver-network-values] cleaned-receiver-network-values)
(assoc-in [:wallet :ui :send :loading-suggested-routes?] false)
(assoc-in [:wallet :ui :send :suggested-routes] {:best []}))
:fx [[:dispatch
[:toasts/upsert
{:id :send-transaction-error
:type :negative
:text (:message error)}]]]})))

(rf/reg-event-fx :wallet/clean-suggested-routes
(fn [{:keys [db]}]
Expand Down Expand Up @@ -298,7 +306,6 @@
network-preferences
gas-rates
from-locked-amount]]
(println balances-per-chain "434324234")
{:db (-> db
(assoc-in [:wallet :ui :send :amount] amount)
(assoc-in [:wallet :ui :send :loading-suggested-routes?] true)
Expand Down
35 changes: 30 additions & 5 deletions src/status_im/contexts/wallet/send/input_amount/view.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
[status-im.contexts.wallet.send.utils :as send-utils]
[utils.address :as address]
[utils.i18n :as i18n]
[utils.re-frame :as rf]))
[utils.re-frame :as rf]
[utils.money :as money]))

(defn- make-limit-label
[amount currency]
Expand Down Expand Up @@ -159,7 +160,23 @@
[:show-bottom-sheet
{:content (fn []
[select-asset-bottom-sheet
clear-input!])}])]
clear-input!])}])
loading-suggested-routes? (rf/sub
[:wallet/wallet-send-loading-suggested-routes?])
sender-network-values (rf/sub
[:wallet/wallet-send-sender-network-values])
suggested-routes (rf/sub [:wallet/wallet-send-suggested-routes])
routes (when suggested-routes
(or (:best suggested-routes) []))
no-routes-found? (and
(every? (fn [{:keys [total-amount type]}]
(and
total-amount
(money/equal-to total-amount
(money/bignumber "0"))))
sender-network-values)
(not (nil? routes))
(not loading-suggested-routes?))]
(rn/use-mount
(fn []
(let [dismiss-keyboard-fn #(when (= % "active") (rn/dismiss-keyboard!))
Expand Down Expand Up @@ -203,10 +220,18 @@
:receiver (address/get-shortened-key to-address)}])
[quo/bottom-actions
{:actions :one-action
:button-one-label button-one-label
:button-one-label (if no-routes-found?
(i18n/label :t/try-again)
button-one-label)
:button-one-props (merge button-one-props
{:disabled? confirm-disabled?
:on-press on-confirm})}]
{:disabled? (and (not no-routes-found?) confirm-disabled?)
:on-press (if no-routes-found?
#(rf/dispatch [:wallet/get-suggested-routes
{:amount (controlled-input/input-value
input-state)}])
on-confirm)}
(when no-routes-found?
{:type :grey}))}]
[quo/numbered-keyboard
{:container-style (style/keyboard-container bottom)
:left-action :dot
Expand Down
45 changes: 28 additions & 17 deletions src/status_im/contexts/wallet/send/routes/view.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,16 @@
:checked? (some #(= % chain-id) @network-preferences)
:on-change on-change}})

(defn fetch-routes
[amount routes-can-be-fetched? bounce-duration-ms]
(if routes-can-be-fetched?
(debounce/debounce-and-dispatch
[:wallet/get-suggested-routes {:amount amount}]
bounce-duration-ms)
(rf/dispatch [:wallet/clean-suggested-routes])))

(defn networks-drawer
[{:keys [fetch-routes theme]}]
[{:keys [on-save theme]}]
(let [network-details (rf/sub [:wallet/network-details])
{:keys [color]} (rf/sub [:wallet/current-viewing-account])
selected-networks (rf/sub [:wallet/wallet-send-receiver-networks])
Expand Down Expand Up @@ -85,11 +93,11 @@
(rf/dispatch [:wallet/update-receiver-networks
@network-preferences])
(rf/dispatch [:hide-bottom-sheet])
(fetch-routes))
(on-save))
:customization-color color}}]])))

(defn render-network-values
[{:keys [network-values token-symbol on-press to? loading-suggested-routes?]}]
[{:keys [network-values token-symbol on-press theme on-save to? loading-suggested-routes?]}]
[rn/view
(map-indexed (fn [index {:keys [chain-id total-amount type]}]
[rn/view
Expand All @@ -100,7 +108,13 @@
:network (utils/id->network chain-id)
:status type
:on-press #(when (and on-press (not loading-suggested-routes?))
(on-press chain-id total-amount))}]])
(if (= type :add)
(rf/dispatch [:show-bottom-sheet
{:content (fn []
[networks-drawer
{:theme theme
:on-save on-save}])}])
(on-press chain-id total-amount)))}]])
network-values)])

(defn render-network-links
Expand Down Expand Up @@ -140,14 +154,6 @@
:destination destination}]]]))
network-links)])

(defn fetch-routes
[amount routes-can-be-fetched? bounce-duration-ms]
(if routes-can-be-fetched?
(debounce/debounce-and-dispatch
[:wallet/get-suggested-routes {:amount amount}]
bounce-duration-ms)
(rf/dispatch [:wallet/clean-suggested-routes])))

(defn disable-chain
[chain-id disabled-from-chain-ids token-valid-networks]
(let [disabled-chain-ids
Expand All @@ -161,10 +167,14 @@
re-enabling-chain?
(< (count disabled-chain-ids)
(count disabled-from-chain-ids))]
(when (or re-enabling-chain?
(> (count token-valid-networks) 1))
(if (or re-enabling-chain?
(> (count token-valid-networks) 1))
(rf/dispatch [:wallet/disable-from-networks
disabled-chain-ids]))))
disabled-chain-ids])
(rf/dispatch [:toasts/upsert
{:id :disable-chain-error
:type :negative
:text (i18n/label :t/at-least-one-network-must-be-activated)}]))))

(defn view
[{:keys [token input-value routes-can-be-fetched? on-press-to-network]}]
Expand All @@ -191,7 +201,7 @@
(rn/use-effect
#(when (> (count token-valid-networks) 0)
(fetch-routes input-value routes-can-be-fetched? 2000))
[input-value routes-can-be-fetched?])
[input-value])
(rn/use-effect
#(when (> (count token-valid-networks) 0)
(fetch-routes input-value routes-can-be-fetched? 0))
Expand Down Expand Up @@ -222,7 +232,8 @@
:network-values receiver-network-values
:on-press on-press-to-network
:to? true
:loading-suggested-routes? loading-suggested-routes?}]]]
:loading-suggested-routes? loading-suggested-routes?
:on-save #(fetch-routes input-value routes-can-be-fetched? 0)}]]]
[rn/view {:style style/empty-container}
(when (and (not (nil? routes)) (not loading-suggested-routes?))
[quo/text (i18n/label :t/no-routes-found)])])))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,7 @@

(defn view
[_]
(let [on-close (fn []
(rf/dispatch [:wallet/clean-suggested-routes])
(rf/dispatch [:navigate-back]))]
(let [on-close #(rf/dispatch [:navigate-back])]
(fn []
(let [theme (quo.theme/use-theme)
send-transaction-data (rf/sub [:wallet/wallet-send])
Expand Down
75 changes: 47 additions & 28 deletions src/status_im/contexts/wallet/send/utils.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
[legacy.status-im.utils.hex :as utils.hex]
[native-module.core :as native-module]
[status-im.contexts.wallet.common.utils :as utils]
[utils.money :as money]))
[utils.money :as money]
[status-im.contexts.preview.quo.wallet.network-amount :as network-amount]))

(defn amount-in-hex
[amount token-decimal]
Expand Down Expand Up @@ -80,15 +81,31 @@
:optimism 2
:arbitrum 3})

(def ^:private available-networks-count
(count (set (keys network-priority-score))))

(defn clean-network-amounts
[network-amounts]
(map
(fn [network-amount]
(cond-> network-amount
(= (:type network-amount) :loading)
(assoc :total-amount (money/bignumber "0")
:type :default)))
network-amounts))

(defn network-amounts
[network-values disabled-chain-ids receiver-networks to?]
(let [disabled-set (set disabled-chain-ids)
receiver-networks-set (set receiver-networks)
existing-keys (set (keys network-values))
routes-found? (pos? (count existing-keys))
network-values-keys (set (keys network-values))
network-values-count (count network-values-keys)
routes-found? (pos? network-values-count)
updated-network-values (when routes-found?
(reduce (fn [acc k]
(if (contains? existing-keys k)
(if (or (contains? network-values-keys k)
(and to?
(not (contains? receiver-networks-set k))))
acc
(assoc acc k (money/bignumber "0"))))
network-values
Expand All @@ -106,33 +123,35 @@
(money/greater-than (:total-amount %) (money/bignumber "0"))))
(not to?)))
(vec))
(and to? routes-found?) (conj {:type :add}))))
(and to?
routes-found?
(< (count updated-network-values) available-networks-count))
(conj {:type :add}))))

(defn loading-network-amounts
[affordable-networks disabled-chain-ids receiver-networks to?]
(let [disabled-set (set disabled-chain-ids)
receiver-networks-set (set receiver-networks)
valid-networks (concat affordable-networks disabled-chain-ids)
result (->> valid-networks
(map (fn [k]
(cond-> {:chain-id k
:type (if (or to?
(not (contains? disabled-set k)))
:loading
:disabled)}
(and (not to?) (contains? disabled-set k))
(assoc :total-amount (money/bignumber "0")))))
(sort-by (fn [item]
(get network-priority-score
(utils/id->network (:chain-id item)))))
(filter
#(or (and to? (contains? receiver-networks-set (:chain-id %)))
(and (not to?)
(not (contains? disabled-chain-ids (:chain-id %))))))
(vec))]
(if to?
(conj result {:type :add})
result)))
(let [disabled-set (set disabled-chain-ids)
receiver-networks-set (set receiver-networks)
receiver-networks-count (count receiver-networks)
valid-networks (concat affordable-networks disabled-chain-ids)]
(cond-> (->> valid-networks
(map (fn [k]
(cond-> {:chain-id k
:type (if (or to?
(not (contains? disabled-set k)))
:loading
:disabled)}
(and (not to?) (contains? disabled-set k))
(assoc :total-amount (money/bignumber "0")))))
(sort-by (fn [item]
(get network-priority-score
(utils/id->network (:chain-id item)))))
(filter
#(or (and to? (contains? receiver-networks-set (:chain-id %)))
(and (not to?)
(not (contains? disabled-chain-ids (:chain-id %))))))
(vec))
(and to? (< receiver-networks-count available-networks-count)) (conj {:type :add}))))

(defn network-links
[route from-values-by-chain to-values-by-chain]
Expand Down
3 changes: 2 additions & 1 deletion translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -2587,5 +2587,6 @@
"private-key-public-address": "Public address of private key",
"this-account-has-no-activity": "This account has no activity",
"this-address-has-activity": "This address has activity",
"scanning-for-activity": "Scanning for activity..."
"scanning-for-activity": "Scanning for activity...",
"at-least-one-network-must-be-activated": "At least 1 network must be activated"
}

0 comments on commit 54007a3

Please sign in to comment.