mirror of
https://github.com/status-im/status-react.git
synced 2025-02-17 21:38:07 +00:00
wip
This commit is contained in:
parent
4ceb5c890e
commit
1be5be1ff9
@ -10,17 +10,14 @@
|
||||
[]
|
||||
[rn/view {:style style/bridge-send-wrapper}
|
||||
[input-amount/view
|
||||
{:current-screen-id :screen/wallet.bridge-input-amount
|
||||
:button-one-label (i18n/label :t/review-bridge)
|
||||
:button-one-props {:icon-left :i/bridge}
|
||||
:enabled-from-chain-ids (rf/sub
|
||||
[:wallet/bridge-from-chain-ids])
|
||||
:from-enabled-networks (rf/sub [:wallet/bridge-from-networks])
|
||||
:on-confirm (fn [amount]
|
||||
(rf/dispatch [:wallet/set-token-amount-to-bridge
|
||||
{:amount amount
|
||||
:stack-id :screen/wallet.bridge-input-amount}]))
|
||||
:on-navigate-back (fn []
|
||||
(rf/dispatch-sync [:wallet/stop-and-clean-suggested-routes])
|
||||
(rf/dispatch [:wallet/clean-disabled-from-networks])
|
||||
(rf/dispatch [:wallet/clean-send-amount]))}]])
|
||||
{:current-screen-id :screen/wallet.bridge-input-amount
|
||||
:button-one-label (i18n/label :t/review-bridge)
|
||||
:button-one-props {:icon-left :i/bridge}
|
||||
:on-confirm (fn [amount]
|
||||
(rf/dispatch [:wallet/set-token-amount-to-bridge
|
||||
{:amount amount
|
||||
:stack-id :screen/wallet.bridge-input-amount}]))
|
||||
:on-navigate-back (fn []
|
||||
(rf/dispatch-sync [:wallet/stop-and-clean-suggested-routes])
|
||||
(rf/dispatch [:wallet/clean-disabled-from-networks])
|
||||
(rf/dispatch [:wallet/clean-send-amount]))}]])
|
||||
|
@ -104,7 +104,7 @@
|
||||
:wallet/wallet-send-tx-type :tx/send
|
||||
:wallet/wallet-send-fee-fiat-formatted "$5,00"
|
||||
:wallet/sending-collectible? false
|
||||
:wallet/total-amount (money/bignumber "250")})
|
||||
:wallet/total-amount-in-to-chains (money/bignumber "250")})
|
||||
|
||||
(h/describe "Send > input amount screen"
|
||||
(h/setup-restorable-re-frame)
|
||||
|
@ -1,12 +1,10 @@
|
||||
(ns status-im.contexts.wallet.send.input-amount.controller
|
||||
(:require
|
||||
[status-im.common.controlled-input.utils :as controlled-input]
|
||||
[status-im.contexts.wallet.common.utils :as utils]
|
||||
[status-im.contexts.wallet.send.input-amount.controlled-input-logic :as controlled-input-logic]
|
||||
[utils.money :as money]
|
||||
[utils.number :as number]
|
||||
[utils.re-frame :as rf]
|
||||
[status-im.common.router :as router]))
|
||||
[utils.re-frame :as rf]))
|
||||
|
||||
;; notes
|
||||
;; token-by-symbol and token looks very similar but they have difference in market values data
|
||||
@ -38,7 +36,6 @@
|
||||
:<- [:profile/currency-symbol]
|
||||
:<- [:profile/profile]
|
||||
(fn [[{token-symbol :symbol
|
||||
total-balance :total-balance
|
||||
:as
|
||||
token}
|
||||
currency
|
||||
@ -57,8 +54,44 @@
|
||||
utils/token-usd-price
|
||||
utils/one-cent-value
|
||||
utils/calc-max-crypto-decimals)
|
||||
:token token
|
||||
:total-balance total-balance}))
|
||||
:token token}))
|
||||
|
||||
(rf/reg-sub :send-input-amount-screen/max-decimals
|
||||
:<- [:send-input-amount-screen/controller]
|
||||
:<- [:send-input-amount-screen/currency-information]
|
||||
:<- [:wallet/wallet-send-receiver-preferred-networks]
|
||||
(fn [[{:keys [crypto-currency?]}
|
||||
{:keys [token-decimals]}]]
|
||||
(if crypto-currency? token-decimals 2)))
|
||||
|
||||
(rf/reg-sub :send-input-amount-screen/enabled-from-chain-ids
|
||||
:<- [:wallet/wallet-send-tx-type]
|
||||
:<- [:wallet/wallet-send-enabled-from-chain-ids]
|
||||
:<- [:wallet/bridge-from-chain-ids]
|
||||
(fn [[tx-type send-chain-ids bridge-chain-ids]]
|
||||
(if (= tx-type :tx/bridge)
|
||||
bridge-chain-ids
|
||||
send-chain-ids)))
|
||||
|
||||
(rf/reg-sub :send-input-amount-screen/from-enabled-networks
|
||||
:<- [:wallet/wallet-send-tx-type]
|
||||
:<- [:wallet/wallet-send-enabled-networks]
|
||||
:<- [:wallet/bridge-from-networks]
|
||||
(fn [[tx-type send-enabled-networks bridge-enabled-networks]]
|
||||
(if (= tx-type :tx/bridge)
|
||||
bridge-enabled-networks
|
||||
send-enabled-networks)))
|
||||
|
||||
|
||||
(defn- every-network-value-is-zero?
|
||||
[sender-network-values]
|
||||
(every? (fn [{:keys [total-amount]}]
|
||||
(and
|
||||
total-amount
|
||||
(money/bignumber? total-amount)
|
||||
(money/equal-to total-amount
|
||||
(money/bignumber "0"))))
|
||||
sender-network-values))
|
||||
|
||||
(rf/reg-sub :send-input-amount-screen/routes-information
|
||||
:<- [:wallet/wallet-send-route]
|
||||
@ -66,18 +99,32 @@
|
||||
:<- [:wallet/wallet-send-receiver-network-values]
|
||||
:<- [:wallet/wallet-send-suggested-routes]
|
||||
:<- [:wallet/wallet-send-loading-suggested-routes?]
|
||||
:<- [:wallet/wallet-send-tx-type]
|
||||
(fn [[route
|
||||
sender-network-values
|
||||
receiver-network-values
|
||||
suggested-routes
|
||||
loading-routes?]]
|
||||
{:route route
|
||||
:sender-network-values sender-network-values
|
||||
:receiver-network-values receiver-network-values
|
||||
:suggested-routes suggested-routes
|
||||
:loading-routes? loading-routes?
|
||||
:routes (when suggested-routes
|
||||
(or (:best suggested-routes) []))}))
|
||||
loading-routes?
|
||||
tx-type]]
|
||||
(let [token-not-supported-in-receiver-networks? (and (not= tx-type :tx/bridge)
|
||||
(->> receiver-network-values
|
||||
(remove #(= (:type %) :add))
|
||||
(every? #(= (:type %) :not-available))))
|
||||
routes (when suggested-routes
|
||||
(or (:best suggested-routes) []))]
|
||||
{:route route
|
||||
:sender-network-values sender-network-values
|
||||
:receiver-network-values receiver-network-values
|
||||
:suggested-routes suggested-routes
|
||||
:loading-routes? loading-routes?
|
||||
:routes routes
|
||||
:token-not-supported-in-receiver-networks? token-not-supported-in-receiver-networks?
|
||||
:no-routes-found? (and
|
||||
(every-network-value-is-zero?
|
||||
sender-network-values)
|
||||
(not (nil? routes))
|
||||
(not loading-routes?)
|
||||
(not token-not-supported-in-receiver-networks?))})))
|
||||
|
||||
(rf/reg-sub :send-input-amount-screen/networks-information
|
||||
:<- [:wallet/wallet-send-token]
|
||||
@ -85,25 +132,35 @@
|
||||
:<- [:wallet/wallet-send-receiver-preferred-networks]
|
||||
(fn [[{token-networks :networks}
|
||||
receiver-networks
|
||||
receiver-preferred-networks
|
||||
]]
|
||||
{:token-networks token-networks
|
||||
:receiver-networks receiver-networks
|
||||
:receiver-preferred-networks receiver-preferred-networks}))
|
||||
receiver-preferred-networks]]
|
||||
{:token-networks token-networks
|
||||
:receiver-networks receiver-networks
|
||||
:sending-to-unpreferred-networks? (not (every? (fn [receiver-selected-network]
|
||||
(contains?
|
||||
(set receiver-preferred-networks)
|
||||
receiver-selected-network))
|
||||
receiver-networks))}))
|
||||
|
||||
(rf/reg-sub :send-input-amount-screen/token-by-symbol
|
||||
:<- [:wallet/wallet-send-enabled-from-chain-ids]
|
||||
:<- [:send-input-amount-screen/enabled-from-chain-ids]
|
||||
:<- [:send-input-amount-screen/currency-information]
|
||||
(fn [[enabled-from-chain-ids {:keys [token-symbol]}]]
|
||||
(rf/sub [:wallet/token-by-symbol
|
||||
(str token-symbol)
|
||||
enabled-from-chain-ids])))
|
||||
|
||||
(rf/reg-sub :send-input-amount-screen/total-balance
|
||||
:<- [:send-input-amount-screen/token-by-symbol]
|
||||
(fn [{:keys [total-balance]}]
|
||||
total-balance))
|
||||
|
||||
(rf/reg-sub :send-input-amount-screen/upper-limit
|
||||
:<- [:send-input-amount-screen/controller]
|
||||
:<- [:send-input-amount-screen/currency-information]
|
||||
:<- [:send-input-amount-screen/total-balance]
|
||||
(fn [[{:keys [crypto-currency?]}
|
||||
{:keys [total-balance usd-conversion-rate conversion-rate]}]]
|
||||
{:keys [usd-conversion-rate conversion-rate]}
|
||||
total-balance]]
|
||||
(if crypto-currency?
|
||||
(utils/cut-crypto-decimals-to-fit-usd-cents
|
||||
total-balance
|
||||
@ -125,17 +182,6 @@
|
||||
(.toFixed (/ token-input-value conversion-rate)
|
||||
token-decimals)))))
|
||||
|
||||
(rf/reg-sub
|
||||
:send-input-amount-screen/token-not-supported-in-receiver-networks?
|
||||
:<- [:wallet/wallet-send-tx-type]
|
||||
:<- [:send-input-amount-screen/routes-information]
|
||||
(fn [[tx-type
|
||||
{:keys [receiver-network-values]}]]
|
||||
(and (not= tx-type :tx/bridge)
|
||||
(->> receiver-network-values
|
||||
(remove #(= (:type %) :add))
|
||||
(every? #(= (:type %) :not-available))))))
|
||||
|
||||
(defn- fiat->crypto
|
||||
[value conversion-rate]
|
||||
(-> value
|
||||
@ -192,6 +238,35 @@
|
||||
upper-limit]]
|
||||
(controlled-input-logic/value-out-of-limits? token-input-value upper-limit 0)))
|
||||
|
||||
(rf/reg-sub :send-input-amount-screen/recipient-gets-amount
|
||||
:<- [:send-input-amount-screen/currency-information]
|
||||
:<- [:wallet/total-amount-in-to-chains]
|
||||
(fn [[{:keys [conversion-rate token-symbol]}
|
||||
total-amount-receiver]]
|
||||
(utils/prettify-crypto-balance
|
||||
token-symbol
|
||||
total-amount-receiver
|
||||
conversion-rate)))
|
||||
|
||||
#_(rf/reg-sub :send-input-amount-screen/owned-eth-balance-is-zero?
|
||||
:<- [:send-input-amount-screen/currency-information]
|
||||
:<- [:wallet/total-amount-in-to-chains]
|
||||
(fn [[{:keys [conversion-rate token-symbol]}
|
||||
total-amount-receiver]]
|
||||
(let [owned-eth-token (rf/sub [:wallet/token-by-symbol
|
||||
(string/upper-case
|
||||
constants/mainnet-short-name)
|
||||
enabled-from-chain-ids])])
|
||||
))
|
||||
|
||||
(rf/reg-sub :send-input-amount-screen/fee-formatted
|
||||
:<- [:send-input-amount-screen/routes-information]
|
||||
(fn [{:keys [route]}]
|
||||
(let [native-currency-symbol (when-not (or (nil? route) (empty? route))
|
||||
(get-in (first route)
|
||||
[:from :native-currency-symbol]))]
|
||||
(rf/sub [:wallet/wallet-send-fee-fiat-formatted native-currency-symbol]))))
|
||||
|
||||
(rf/reg-sub :send-input-amount-screen/data
|
||||
:<- [:send-input-amount-screen/controller]
|
||||
:<- [:send-input-amount-screen/currency-information]
|
||||
@ -202,8 +277,13 @@
|
||||
:<- [:send-input-amount-screen/value-out-of-limits?]
|
||||
:<- [:send-input-amount-screen/upper-limit-prettified]
|
||||
:<- [:send-input-amount-screen/routes-information]
|
||||
:<- [:send-input-amount-screen/token-not-supported-in-receiver-networks?]
|
||||
:<- [:send-input-amount-screen/networks-information]
|
||||
:<- [:send-input-amount-screen/token-by-symbol]
|
||||
:<- [:send-input-amount-screen/recipient-gets-amount]
|
||||
:<- [:send-input-amount-screen/max-decimals]
|
||||
:<- [:send-input-amount-screen/fee-formatted]
|
||||
:<- [:send-input-amount-screen/enabled-from-chain-ids]
|
||||
:<- [:send-input-amount-screen/from-enabled-networks]
|
||||
(fn
|
||||
[[{:keys [crypto-currency? token-input-value] :as controller}
|
||||
{:keys [fiat-currency token-symbol token] :as currency-information}
|
||||
@ -216,12 +296,19 @@
|
||||
{:keys [route
|
||||
routes
|
||||
sender-network-values
|
||||
loading-routes?]
|
||||
loading-routes?
|
||||
token-not-supported-in-receiver-networks?
|
||||
no-routes-found?]
|
||||
:as routes-information}
|
||||
token-not-supported-in-receiver-networks?
|
||||
{:keys [token-networks
|
||||
receiver-networks
|
||||
receiver-preferred-networks]}]]
|
||||
sending-to-unpreferred-networks?]}
|
||||
token-by-symbol
|
||||
recipient-gets-amount
|
||||
max-decimals
|
||||
fee-formatted
|
||||
enabled-from-chain-ids
|
||||
from-enabled-networks]]
|
||||
{:crypto-currency? crypto-currency?
|
||||
:fiat-currency fiat-currency
|
||||
:token token
|
||||
@ -246,7 +333,14 @@
|
||||
:token-not-supported-in-receiver-networks? token-not-supported-in-receiver-networks?
|
||||
:token-networks token-networks
|
||||
:receiver-networks receiver-networks
|
||||
:receiver-preferred-networks receiver-preferred-networks}))
|
||||
:token-by-symbol token-by-symbol
|
||||
:recipient-gets-amount recipient-gets-amount
|
||||
:max-decimals max-decimals
|
||||
:fee-formatted fee-formatted
|
||||
:sending-to-unpreferred-networks? sending-to-unpreferred-networks?
|
||||
:no-routes-found? no-routes-found?
|
||||
:enabled-from-chain-ids enabled-from-chain-ids
|
||||
:from-enabled-networks from-enabled-networks}))
|
||||
|
||||
|
||||
|
||||
@ -270,8 +364,13 @@
|
||||
|
||||
|
||||
(rf/reg-event-fx :send-input-amount-screen/token-input-add-character
|
||||
(fn [{:keys [db]} [c]]
|
||||
{:db (update-in db token-input-value-path #(controlled-input-logic/add-character % c))}))
|
||||
(fn [{:keys [db]} [c max-decimals]]
|
||||
(let [input-value (get-in db token-input-value-path)
|
||||
new-text (str input-value c)
|
||||
regex-pattern (str "^\\d*\\.?\\d{0," max-decimals "}$")
|
||||
regex (re-pattern regex-pattern)]
|
||||
(when (re-matches regex new-text)
|
||||
{:db (update-in db token-input-value-path #(controlled-input-logic/add-character % c))}))))
|
||||
|
||||
(rf/reg-event-fx :send-input-amount-screen/token-input-delete-last
|
||||
(fn [{:keys [db]}]
|
||||
@ -282,16 +381,3 @@
|
||||
{:db (assoc-in db token-input-value-path "")}))
|
||||
|
||||
|
||||
|
||||
(comment
|
||||
(rf/dispatch [:send-input-amount-screen/swap-between-fiat-and-crypto])
|
||||
(rf/sub [:send-input-amount-screen/upper-limit])
|
||||
(rf/sub [:send-input-amount-screen/amount-in-crypto])
|
||||
(rf/sub [:send-input-amount-screen/data])
|
||||
(rf/sub [:send-input-amount-screen/controller])
|
||||
|
||||
(rf/dispatch [:send-input-amount-screen/set-input-state])
|
||||
|
||||
(tap> {:token-by-symbol (rf/sub [:send-input-amount-screen/token-by-symbol])
|
||||
:token (:token (rf/sub [:send-input-amount-screen/currency-information]))})
|
||||
)
|
||||
|
@ -1 +0,0 @@
|
||||
(ns status-im.contexts.wallet.send.input-amount.logic)
|
@ -99,7 +99,7 @@
|
||||
|
||||
|
||||
(defn- estimated-fees
|
||||
[{:keys [loading-routes? fees amount]}]
|
||||
[{:keys [loading-routes? fees recipient-gets-amount]}]
|
||||
[rn/view {:style style/estimated-fees-container}
|
||||
(when (ff/enabled? ::ff/wallet.advanced-sending)
|
||||
[rn/view {:style style/estimated-fees-content-container}
|
||||
@ -123,20 +123,12 @@
|
||||
:status (if loading-routes? :loading :default)
|
||||
:size :small
|
||||
:title (i18n/label :t/recipient-gets)
|
||||
:subtitle amount}]])
|
||||
:subtitle recipient-gets-amount}]])
|
||||
|
||||
|
||||
(defn- every-network-value-is-zero?
|
||||
[sender-network-values]
|
||||
(every? (fn [{:keys [total-amount]}]
|
||||
(and
|
||||
total-amount
|
||||
(money/bignumber? total-amount)
|
||||
(money/equal-to total-amount
|
||||
(money/bignumber "0"))))
|
||||
sender-network-values))
|
||||
|
||||
(defn select-asset-bottom-sheet
|
||||
[clear-input!]
|
||||
[]
|
||||
(let [{preselected-token-symbol :symbol} (rf/sub [:wallet/wallet-send-token])]
|
||||
[:<> ;; Need to be a `:<>` to keep `asset-list` scrollable.
|
||||
[quo/drawer-top
|
||||
@ -148,7 +140,8 @@
|
||||
:preselected-token-symbol preselected-token-symbol
|
||||
:on-token-press (fn [token]
|
||||
(rf/dispatch [:wallet/edit-token-to-send token])
|
||||
(clear-input!))}]]))
|
||||
#(rf/dispatch
|
||||
[:send-input-amount-screen/token-input-delete-all]))}]]))
|
||||
|
||||
(defn- token-not-available
|
||||
[token-symbol receiver-networks token-networks]
|
||||
@ -218,13 +211,11 @@
|
||||
(defn view
|
||||
;; crypto-decimals, limit-crypto and initial-crypto-currency? args are needed
|
||||
;; for component tests only
|
||||
[{default-on-confirm :on-confirm
|
||||
on-navigate-back :on-navigate-back
|
||||
button-one-label :button-one-label
|
||||
button-one-props :button-one-props
|
||||
current-screen-id :current-screen-id
|
||||
enabled-from-chain-ids :enabled-from-chain-ids
|
||||
from-enabled-networks :from-enabled-networks}]
|
||||
[{on-confirm :on-confirm
|
||||
on-navigate-back :on-navigate-back
|
||||
button-one-label :button-one-label
|
||||
button-one-props :button-one-props
|
||||
current-screen-id :current-screen-id}]
|
||||
(let [{:keys [crypto-currency?
|
||||
upper-limit
|
||||
upper-limit-prettified
|
||||
@ -243,92 +234,54 @@
|
||||
fiat-currency
|
||||
token-networks
|
||||
receiver-networks
|
||||
receiver-preferred-networks
|
||||
token
|
||||
token-symbol]
|
||||
:as state} (rf/sub [:send-input-amount-screen/data])
|
||||
view-id (rf/sub [:view-id])
|
||||
active-screen? (= view-id current-screen-id)
|
||||
bottom (safe-area/get-bottom)
|
||||
on-navigate-back on-navigate-back
|
||||
handle-on-confirm (fn [amount]
|
||||
(rf/dispatch [:wallet/set-token-amount-to-send
|
||||
{:amount amount
|
||||
:stack-id current-screen-id}]))
|
||||
on-confirm (or default-on-confirm handle-on-confirm)
|
||||
|
||||
send-from-locked-amounts (rf/sub [:wallet/wallet-send-from-locked-amounts])
|
||||
token-by-symbol (rf/sub [:wallet/token-by-symbol
|
||||
(str token-symbol)
|
||||
enabled-from-chain-ids])
|
||||
token-decimals (-> token
|
||||
utils/token-usd-price
|
||||
utils/one-cent-value
|
||||
utils/calc-max-crypto-decimals)
|
||||
clear-input! #(rf/dispatch
|
||||
[:send-input-amount-screen/token-input-delete-all])
|
||||
|
||||
confirm-disabled? (or (nil? route)
|
||||
(empty? route)
|
||||
(not valid-input?))
|
||||
total-amount-receiver (rf/sub [:wallet/total-amount true])
|
||||
amount-text (str (number/remove-trailing-zeroes
|
||||
(.toFixed total-amount-receiver
|
||||
(min token-decimals 6)))
|
||||
" "
|
||||
token-symbol)
|
||||
native-currency-symbol (when-not confirm-disabled?
|
||||
(get-in (first route)
|
||||
[:from :native-currency-symbol]))
|
||||
fee-formatted (when native-currency-symbol
|
||||
(rf/sub [:wallet/wallet-send-fee-fiat-formatted
|
||||
native-currency-symbol]))
|
||||
show-select-asset-sheet #(rf/dispatch
|
||||
[:show-bottom-sheet
|
||||
{:content (fn []
|
||||
[select-asset-bottom-sheet
|
||||
clear-input!])}])
|
||||
no-routes-found? (and
|
||||
(every-network-value-is-zero?
|
||||
sender-network-values)
|
||||
(not (nil? routes))
|
||||
(not loading-routes?)
|
||||
(not token-not-supported-in-receiver-networks?))
|
||||
sending-to-unpreferred-networks? (not (every? (fn [receiver-selected-network]
|
||||
(contains?
|
||||
(set receiver-preferred-networks)
|
||||
receiver-selected-network))
|
||||
receiver-networks))
|
||||
should-try-again? (and (not upper-limit-exceeded?) no-routes-found?)
|
||||
current-address (rf/sub [:wallet/current-viewing-account-address])
|
||||
owned-eth-token (rf/sub [:wallet/token-by-symbol
|
||||
(string/upper-case
|
||||
constants/mainnet-short-name)
|
||||
enabled-from-chain-ids])
|
||||
not-enough-asset? (and
|
||||
(or no-routes-found? upper-limit-exceeded?)
|
||||
(not-empty sender-network-values)
|
||||
(if (= token-symbol
|
||||
(string/upper-case
|
||||
constants/mainnet-short-name))
|
||||
(money/equal-to
|
||||
(money/bignumber input-value)
|
||||
(money/bignumber upper-limit))
|
||||
(money/equal-to (:total-balance
|
||||
owned-eth-token)
|
||||
0)))
|
||||
show-no-routes? (and
|
||||
(or no-routes-found? upper-limit-exceeded?)
|
||||
(not-empty sender-network-values)
|
||||
(not not-enough-asset?))
|
||||
request-fetch-routes (fn [bounce-duration-ms]
|
||||
(fetch-routes
|
||||
{:amount amount-in-crypto
|
||||
:valid-input? valid-input?
|
||||
:bounce-duration-ms bounce-duration-ms
|
||||
:token token
|
||||
:reset-amounts-to-zero? (and upper-limit-exceeded?
|
||||
(some? routes))}))]
|
||||
token-symbol
|
||||
token-by-symbol
|
||||
recipient-gets-amount
|
||||
max-decimals
|
||||
fee-formatted
|
||||
sending-to-unpreferred-networks?
|
||||
no-routes-found?
|
||||
enabled-from-chain-ids
|
||||
from-enabled-networks]
|
||||
:as state} (rf/sub [:send-input-amount-screen/data])
|
||||
view-id (rf/sub [:view-id])
|
||||
active-screen? (= view-id current-screen-id)
|
||||
bottom (safe-area/get-bottom)
|
||||
on-navigate-back on-navigate-back
|
||||
show-select-asset-sheet #(rf/dispatch
|
||||
[:show-bottom-sheet
|
||||
{:content (fn [] [select-asset-bottom-sheet])}])
|
||||
should-try-again? (and (not upper-limit-exceeded?) no-routes-found?)
|
||||
current-address (rf/sub [:wallet/current-viewing-account-address])
|
||||
owned-eth-token (rf/sub [:wallet/token-by-symbol
|
||||
(string/upper-case
|
||||
constants/mainnet-short-name)
|
||||
enabled-from-chain-ids])
|
||||
not-enough-asset? (and
|
||||
(or no-routes-found? upper-limit-exceeded?)
|
||||
(not-empty sender-network-values)
|
||||
(if (= token-symbol
|
||||
(string/upper-case
|
||||
constants/mainnet-short-name))
|
||||
(money/equal-to
|
||||
(money/bignumber input-value)
|
||||
(money/bignumber upper-limit))
|
||||
(money/equal-to (:total-balance
|
||||
owned-eth-token)
|
||||
0)))
|
||||
show-no-routes? (and
|
||||
(or no-routes-found? upper-limit-exceeded?)
|
||||
(not-empty sender-network-values)
|
||||
(not not-enough-asset?))
|
||||
request-fetch-routes (fn [bounce-duration-ms]
|
||||
(fetch-routes
|
||||
{:amount amount-in-crypto
|
||||
:valid-input? valid-input?
|
||||
:bounce-duration-ms bounce-duration-ms
|
||||
:token token
|
||||
:reset-amounts-to-zero? (and upper-limit-exceeded?
|
||||
(some? routes))}))]
|
||||
(rn/use-effect
|
||||
(fn []
|
||||
(when active-screen?
|
||||
@ -348,14 +301,11 @@
|
||||
[value-out-of-limits?])
|
||||
(rn/use-effect
|
||||
(fn []
|
||||
(clear-input!)
|
||||
(rf/dispatch [:send-input-amount-screen/token-input-delete-all])
|
||||
(rf/dispatch [:wallet/stop-and-clean-suggested-routes])
|
||||
(rf/dispatch [:wallet/clean-disabled-from-networks]))
|
||||
[current-address])
|
||||
(rn/use-effect
|
||||
(fn []
|
||||
(request-fetch-routes 0))
|
||||
[send-from-locked-amounts])
|
||||
|
||||
[rn/view
|
||||
{:style style/screen
|
||||
:accessibility-label (str "container"
|
||||
@ -393,9 +343,9 @@
|
||||
[token-not-available token-symbol receiver-networks token-networks])
|
||||
(when (and (not no-routes-found?) (or loading-routes? route))
|
||||
[estimated-fees
|
||||
{:loading-routes? loading-routes?
|
||||
:fees fee-formatted
|
||||
:amount amount-text}])
|
||||
{:loading-routes? loading-routes?
|
||||
:fees fee-formatted
|
||||
:recipient-gets-amount recipient-gets-amount}])
|
||||
(cond
|
||||
show-no-routes? [no-routes-found]
|
||||
not-enough-asset? [not-enough-asset])
|
||||
@ -406,7 +356,10 @@
|
||||
button-one-label)
|
||||
:button-one-props (merge (when-not should-try-again? button-one-props)
|
||||
{:disabled? (or loading-routes?
|
||||
(and (not should-try-again?) confirm-disabled?))
|
||||
(and (not should-try-again?)
|
||||
(or (nil? route)
|
||||
(empty? route)
|
||||
(not valid-input?))))
|
||||
:on-press (cond
|
||||
should-try-again?
|
||||
#(rf/dispatch [:wallet/start-get-suggested-routes
|
||||
@ -423,14 +376,8 @@
|
||||
:left-action :dot
|
||||
:delete-key? true
|
||||
:on-press (fn [c]
|
||||
(let [new-text (str input-value c)
|
||||
max-decimals (if crypto-currency? token-decimals 2)
|
||||
regex-pattern (str "^\\d*\\.?\\d{0," max-decimals "}$")
|
||||
regex (re-pattern regex-pattern)]
|
||||
(when (re-matches regex new-text)
|
||||
(debounce/clear-all)
|
||||
(rf/dispatch [:send-input-amount-screen/token-input-add-character
|
||||
c]))))
|
||||
(rf/dispatch [:send-input-amount-screen/token-input-add-character c
|
||||
max-decimals]))
|
||||
:on-delete (fn []
|
||||
(debounce/clear-all)
|
||||
(rf/dispatch [:send-input-amount-screen/token-input-delete-last])
|
||||
|
@ -8,12 +8,14 @@
|
||||
(defn view
|
||||
[]
|
||||
[input-amount/view
|
||||
{:current-screen-id :screen/wallet.send-input-amount
|
||||
:button-one-label (i18n/label :t/review-send)
|
||||
:enabled-from-chain-ids (rf/sub [:wallet/wallet-send-enabled-from-chain-ids])
|
||||
:from-enabled-networks (rf/sub [:wallet/wallet-send-enabled-networks])
|
||||
:on-navigate-back (fn []
|
||||
(rf/dispatch-sync [:wallet/stop-and-clean-suggested-routes])
|
||||
(rf/dispatch [:wallet/clean-disabled-from-networks])
|
||||
(rf/dispatch [:wallet/clean-from-locked-amounts])
|
||||
(rf/dispatch [:wallet/clean-send-amount]))}])
|
||||
{:current-screen-id :screen/wallet.send-input-amount
|
||||
:button-one-label (i18n/label :t/review-send)
|
||||
:on-confirm (fn [amount]
|
||||
(rf/dispatch [:wallet/set-token-amount-to-send
|
||||
{:amount amount
|
||||
:stack-id :screen/wallet.send-input-amount}]))
|
||||
:on-navigate-back (fn []
|
||||
(rf/dispatch-sync [:wallet/stop-and-clean-suggested-routes])
|
||||
(rf/dispatch [:wallet/clean-disabled-from-networks])
|
||||
(rf/dispatch [:wallet/clean-from-locked-amounts])
|
||||
(rf/dispatch [:wallet/clean-send-amount]))}])
|
||||
|
@ -221,9 +221,8 @@
|
||||
bridge-to-network (when bridge-to-chain-id
|
||||
(rf/sub [:wallet/network-details-by-chain-id
|
||||
bridge-to-chain-id]))
|
||||
loading-suggested-routes? (rf/sub
|
||||
[:wallet/wallet-send-loading-suggested-routes?])
|
||||
total-amount-receiver (rf/sub [:wallet/total-amount true])
|
||||
loading-suggested-routes? (rf/sub [:wallet/wallet-send-loading-suggested-routes?])
|
||||
total-amount-receiver (rf/sub [:wallet/total-amount-in-to-chains])
|
||||
from-account-props {:customization-color account-color
|
||||
:size 32
|
||||
:emoji (:emoji account)
|
||||
|
@ -75,15 +75,13 @@
|
||||
{}
|
||||
network-values))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:wallet/total-amount
|
||||
(re-frame/reg-sub :wallet/total-amount-in-to-chains
|
||||
:<- [:wallet/wallet-send]
|
||||
(fn [{:keys [from-values-by-chain to-values-by-chain]} [_ to-values?]]
|
||||
(let [network-values (if to-values? to-values-by-chain from-values-by-chain)]
|
||||
(reduce
|
||||
(fn [acc amount]
|
||||
(if (money/bignumber? amount)
|
||||
(money/add acc amount)
|
||||
acc))
|
||||
(money/bignumber 0)
|
||||
(vals network-values)))))
|
||||
(fn [{:keys [to-values-by-chain]}]
|
||||
(reduce
|
||||
(fn [acc amount]
|
||||
(if (money/bignumber? amount)
|
||||
(money/add acc amount)
|
||||
acc))
|
||||
(money/bignumber 0)
|
||||
(vals to-values-by-chain))))
|
||||
|
Loading…
x
Reference in New Issue
Block a user