chore(wallet): connect UI and data model for input page in bridge flow (#18678)
Co-authored-by: Jamie Caprani <jamiecaprani@gmail.com>
This commit is contained in:
parent
c5df51d944
commit
3c4d27b6ff
|
@ -31,4 +31,3 @@
|
||||||
(rf/dispatch [:wallet/bridge-select-token
|
(rf/dispatch [:wallet/bridge-select-token
|
||||||
{:token token
|
{:token token
|
||||||
:stack-id :wallet-bridge}]))}]])))
|
:stack-id :wallet-bridge}]))}]])))
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
(ns status-im.contexts.wallet.account.bridge-send.style)
|
||||||
|
|
||||||
|
(def bridge-send-wrapper
|
||||||
|
{:flex 1})
|
|
@ -0,0 +1,19 @@
|
||||||
|
(ns status-im.contexts.wallet.account.bridge-send.view
|
||||||
|
(:require
|
||||||
|
[quo.theme]
|
||||||
|
[react-native.core :as rn]
|
||||||
|
[status-im.contexts.wallet.account.bridge-send.style :as style]
|
||||||
|
[status-im.contexts.wallet.send.input-amount.view :as input-amount]
|
||||||
|
[utils.i18n :as i18n]
|
||||||
|
[utils.re-frame :as rf]))
|
||||||
|
|
||||||
|
(defn- view-internal
|
||||||
|
[]
|
||||||
|
[rn/view {:style style/bridge-send-wrapper}
|
||||||
|
[input-amount/view
|
||||||
|
{:button-one-label (i18n/label :t/confirm-bridge)
|
||||||
|
:button-one-props {:icon-left :i/bridge}
|
||||||
|
:on-navigate-back (fn []
|
||||||
|
(rf/dispatch [:navigate-back-within-stack :wallet-bridge-send]))}]])
|
||||||
|
|
||||||
|
(def view (quo.theme/with-theme view-internal))
|
|
@ -28,7 +28,10 @@
|
||||||
{:label (name network-name)
|
{:label (name network-name)
|
||||||
:network-image (quo.resources/get-network (:network-name network))
|
:network-image (quo.resources/get-network (:network-name network))
|
||||||
:token-value (str crypto-formatted " " (:symbol token))
|
:token-value (str crypto-formatted " " (:symbol token))
|
||||||
:fiat-value fiat-formatted}])))
|
:fiat-value fiat-formatted
|
||||||
|
:on-press #(rf/dispatch [:wallet/select-bridge-network
|
||||||
|
{:network-chain-id chain-id
|
||||||
|
:stack-id :wallet-bridge}])}])))
|
||||||
|
|
||||||
(defn- view-internal
|
(defn- view-internal
|
||||||
[]
|
[]
|
||||||
|
@ -50,7 +53,7 @@
|
||||||
:accessibility-label :top-bar}]
|
:accessibility-label :top-bar}]
|
||||||
[quo/text-combinations
|
[quo/text-combinations
|
||||||
{:container-style style/header-container
|
{:container-style style/header-container
|
||||||
:title (i18n/label :t/bridge-to {:name (string/upper-case (str (:label token)))})}]
|
:title (i18n/label :t/bridge-to {:name (string/upper-case (str (:name token)))})}]
|
||||||
[rn/view style/content-container
|
[rn/view style/content-container
|
||||||
[bridge-token-component (assoc mainnet :network-name :t/mainnet) account-token]]
|
[bridge-token-component (assoc mainnet :network-name :t/mainnet) account-token]]
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@
|
||||||
:buy-action #(rf/dispatch [:show-bottom-sheet
|
:buy-action #(rf/dispatch [:show-bottom-sheet
|
||||||
{:content buy-drawer}])
|
{:content buy-drawer}])
|
||||||
:bridge-action #(ff/alert ::ff/wallet.bridge-token
|
:bridge-action #(ff/alert ::ff/wallet.bridge-token
|
||||||
(fn [] (rf/dispatch [:open-modal :wallet-bridge])))}])
|
(fn [] (rf/dispatch [:wallet/start-bridge])))}])
|
||||||
[quo/tabs
|
[quo/tabs
|
||||||
{:style style/tabs
|
{:style style/tabs
|
||||||
:size 32
|
:size 32
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
(defn bridge-token-list
|
(defn bridge-token-list
|
||||||
[networks-list]
|
[networks-list]
|
||||||
[{:token :snt
|
[{:token :snt
|
||||||
:label "Status"
|
:name "Status"
|
||||||
:token-value "0.00 SNT"
|
:token-value "0.00 SNT"
|
||||||
:fiat-value "€0.00"
|
:fiat-value "€0.00"
|
||||||
:networks networks-list
|
:networks networks-list
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
:symbol "STT"
|
:symbol "STT"
|
||||||
:customization-color :blue}
|
:customization-color :blue}
|
||||||
{:token :eth
|
{:token :eth
|
||||||
:label "Ethereum"
|
:name "Ethereum"
|
||||||
:token-value "0.00 ETH"
|
:token-value "0.00 ETH"
|
||||||
:fiat-value "€0.00"
|
:fiat-value "€0.00"
|
||||||
:networks networks-list
|
:networks networks-list
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
:symbol "ETH"
|
:symbol "ETH"
|
||||||
:customization-color :blue}
|
:customization-color :blue}
|
||||||
{:token :dai
|
{:token :dai
|
||||||
:label "Dai"
|
:name "Dai"
|
||||||
:token-value "0.00 DAI"
|
:token-value "0.00 DAI"
|
||||||
:fiat-value "€0.00"
|
:fiat-value "€0.00"
|
||||||
:networks networks-list
|
:networks networks-list
|
||||||
|
|
|
@ -204,8 +204,21 @@
|
||||||
|
|
||||||
(rf/reg-event-fx :wallet/bridge-select-token
|
(rf/reg-event-fx :wallet/bridge-select-token
|
||||||
(fn [{:keys [db]} [{:keys [token stack-id]}]]
|
(fn [{:keys [db]} [{:keys [token stack-id]}]]
|
||||||
{:db (assoc-in db [:wallet :ui :send :token] token)
|
(let [to-address (get-in db [:wallet :current-viewing-account-address])]
|
||||||
:fx [[:navigate-to-within-stack [:wallet-bridge-to stack-id]]]}))
|
{:db (-> db
|
||||||
|
(assoc-in [:wallet :ui :send :token] token)
|
||||||
|
(assoc-in [:wallet :ui :send :to-address] to-address))
|
||||||
|
:fx [[:dispatch [:navigate-to-within-stack [:wallet-bridge-to stack-id]]]]})))
|
||||||
|
|
||||||
|
(rf/reg-event-fx :wallet/start-bridge
|
||||||
|
(fn [{:keys [db]}]
|
||||||
|
{:db (assoc-in db [:wallet :ui :send :type] :bridge)
|
||||||
|
:fx [[:dispatch [:open-modal :wallet-bridge]]]}))
|
||||||
|
|
||||||
|
(rf/reg-event-fx :wallet/select-bridge-network
|
||||||
|
(fn [{:keys [db]} [{:keys [network-chain-id stack-id]}]]
|
||||||
|
{:db (assoc-in db [:wallet :ui :send :bridge-to-chain-id] network-chain-id)
|
||||||
|
:fx [[:dispatch [:navigate-to-within-stack [:wallet-bridge-send stack-id]]]]}))
|
||||||
|
|
||||||
(rf/reg-event-fx
|
(rf/reg-event-fx
|
||||||
:wallet/get-ethereum-chains
|
:wallet/get-ethereum-chains
|
||||||
|
|
|
@ -105,8 +105,9 @@
|
||||||
{:db (-> db
|
{:db (-> db
|
||||||
(update-in [:wallet :ui :send] dissoc :token)
|
(update-in [:wallet :ui :send] dissoc :token)
|
||||||
(assoc-in [:wallet :ui :send :collectible] collectible)
|
(assoc-in [:wallet :ui :send :collectible] collectible)
|
||||||
|
(assoc-in [:wallet :ui :send :type] :collectible)
|
||||||
(assoc-in [:wallet :ui :send :amount] 1))
|
(assoc-in [:wallet :ui :send :amount] 1))
|
||||||
:fx [[:dispatch [:wallet/get-suggested-routes 1]]
|
:fx [[:dispatch [:wallet/get-suggested-routes {:amount 1}]]
|
||||||
[:navigate-to-within-stack [:wallet-transaction-confirmation stack-id]]]}))
|
[:navigate-to-within-stack [:wallet-transaction-confirmation stack-id]]]}))
|
||||||
|
|
||||||
(rf/reg-event-fx :wallet/send-select-amount
|
(rf/reg-event-fx :wallet/send-select-amount
|
||||||
|
@ -115,11 +116,17 @@
|
||||||
:fx [[:dispatch [:navigate-to-within-stack [:wallet-transaction-confirmation stack-id]]]]}))
|
:fx [[:dispatch [:navigate-to-within-stack [:wallet-transaction-confirmation stack-id]]]]}))
|
||||||
|
|
||||||
(rf/reg-event-fx :wallet/get-suggested-routes
|
(rf/reg-event-fx :wallet/get-suggested-routes
|
||||||
(fn [{:keys [db now]} [amount]]
|
(fn [{:keys [db now]} [{:keys [amount]}]]
|
||||||
(let [wallet-address (get-in db [:wallet :current-viewing-account-address])
|
(let [wallet-address (get-in db [:wallet :current-viewing-account-address])
|
||||||
token (get-in db [:wallet :ui :send :token])
|
token (get-in db [:wallet :ui :send :token])
|
||||||
|
transaction-type (get-in db [:wallet :ui :send :type])
|
||||||
collectible (get-in db [:wallet :ui :send :collectible])
|
collectible (get-in db [:wallet :ui :send :collectible])
|
||||||
to-address (get-in db [:wallet :ui :send :to-address])
|
to-address (get-in db [:wallet :ui :send :to-address])
|
||||||
|
test-networks-enabled? (get-in db [:profile/profile :test-networks-enabled?])
|
||||||
|
networks ((if test-networks-enabled? :test :prod)
|
||||||
|
(get-in db [:wallet :networks]))
|
||||||
|
network-chain-ids (map :chain-id networks)
|
||||||
|
bridge-to-chain-id (get-in db [:wallet :ui :send :bridge-to-chain-id])
|
||||||
token-decimal (when token (:decimals token))
|
token-decimal (when token (:decimals token))
|
||||||
token-id (if token
|
token-id (if token
|
||||||
(:symbol token)
|
(:symbol token)
|
||||||
|
@ -131,12 +138,15 @@
|
||||||
amount-in (send-utils/amount-in-hex amount (if token token-decimal 0))
|
amount-in (send-utils/amount-in-hex amount (if token token-decimal 0))
|
||||||
from-address wallet-address
|
from-address wallet-address
|
||||||
disabled-from-chain-ids []
|
disabled-from-chain-ids []
|
||||||
disabled-to-chain-ids []
|
disabled-to-chain-ids (if (= transaction-type :bridge)
|
||||||
|
(filter #(not= % bridge-to-chain-id) network-chain-ids)
|
||||||
|
[])
|
||||||
from-locked-amount {}
|
from-locked-amount {}
|
||||||
transaction-type (if token
|
transaction-type-param (case transaction-type
|
||||||
constants/send-type-transfer
|
:collectible constants/send-type-erc-721-transfer
|
||||||
constants/send-type-erc-721-transfer)
|
:bridge constants/send-type-bridge
|
||||||
request-params [transaction-type
|
constants/send-type-transfer)
|
||||||
|
request-params [transaction-type-param
|
||||||
from-address
|
from-address
|
||||||
to-address
|
to-address
|
||||||
amount-in
|
amount-in
|
||||||
|
|
|
@ -126,6 +126,9 @@
|
||||||
[{default-on-confirm :on-confirm
|
[{default-on-confirm :on-confirm
|
||||||
default-limit-crypto :limit-crypto
|
default-limit-crypto :limit-crypto
|
||||||
default-crypto-decimals :crypto-decimals
|
default-crypto-decimals :crypto-decimals
|
||||||
|
on-navigate-back :on-navigate-back
|
||||||
|
button-one-label :button-one-label
|
||||||
|
button-one-props :button-one-props
|
||||||
initial-crypto-currency? :initial-crypto-currency?
|
initial-crypto-currency? :initial-crypto-currency?
|
||||||
:or {initial-crypto-currency? true}}]
|
:or {initial-crypto-currency? true}}]
|
||||||
(let [_ (rn/dismiss-keyboard!)
|
(let [_ (rn/dismiss-keyboard!)
|
||||||
|
@ -167,9 +170,7 @@
|
||||||
(reset! input-value v)
|
(reset! input-value v)
|
||||||
(reset-input-error num-value current-limit-amount input-error)
|
(reset-input-error num-value current-limit-amount input-error)
|
||||||
(reagent/flush))))
|
(reagent/flush))))
|
||||||
on-navigate-back (fn []
|
on-navigate-back on-navigate-back
|
||||||
(rf/dispatch [:wallet/clean-selected-token])
|
|
||||||
(rf/dispatch [:navigate-back-within-stack :wallet-send-input-amount]))
|
|
||||||
fetch-routes (fn [input-num-value current-limit-amount]
|
fetch-routes (fn [input-num-value current-limit-amount]
|
||||||
(let [current-screen-id (rf/sub [:navigation/current-screen-id])]
|
(let [current-screen-id (rf/sub [:navigation/current-screen-id])]
|
||||||
; this check is to prevent effect being triggered when screen is
|
; this check is to prevent effect being triggered when screen is
|
||||||
|
@ -180,7 +181,7 @@
|
||||||
(<= input-num-value 0)
|
(<= input-num-value 0)
|
||||||
(> input-num-value current-limit-amount))
|
(> input-num-value current-limit-amount))
|
||||||
(debounce/debounce-and-dispatch
|
(debounce/debounce-and-dispatch
|
||||||
[:wallet/get-suggested-routes @input-value]
|
[:wallet/get-suggested-routes {:amount @input-value}]
|
||||||
100)
|
100)
|
||||||
(rf/dispatch [:wallet/clean-suggested-routes])))))
|
(rf/dispatch [:wallet/clean-suggested-routes])))))
|
||||||
handle-on-confirm (fn []
|
handle-on-confirm (fn []
|
||||||
|
@ -196,7 +197,6 @@
|
||||||
(reagent/flush))]
|
(reagent/flush))]
|
||||||
(fn []
|
(fn []
|
||||||
(let [{fiat-currency :currency} (rf/sub [:profile/profile])
|
(let [{fiat-currency :currency} (rf/sub [:profile/profile])
|
||||||
{:keys [color]} (rf/sub [:wallet/current-viewing-account])
|
|
||||||
{token-balance :total-balance
|
{token-balance :total-balance
|
||||||
token-symbol :symbol
|
token-symbol :symbol
|
||||||
token-networks :networks
|
token-networks :networks
|
||||||
|
@ -288,10 +288,10 @@
|
||||||
:receiver (address/get-shortened-key to-address)}])
|
:receiver (address/get-shortened-key to-address)}])
|
||||||
[quo/bottom-actions
|
[quo/bottom-actions
|
||||||
{:actions :one-action
|
{:actions :one-action
|
||||||
:button-one-label (i18n/label :t/confirm)
|
:button-one-label button-one-label
|
||||||
:button-one-props {:disabled? confirm-disabled?
|
:button-one-props (merge button-one-props
|
||||||
:on-press on-confirm
|
{:disabled? confirm-disabled?
|
||||||
:customization-color color}}]
|
:on-press on-confirm})}]
|
||||||
[quo/numbered-keyboard
|
[quo/numbered-keyboard
|
||||||
{:container-style (style/keyboard-container bottom)
|
{:container-style (style/keyboard-container bottom)
|
||||||
:left-action :dot
|
:left-action :dot
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
(def add-network
|
(def add-network
|
||||||
{:margin-top 8
|
{:margin-top 8
|
||||||
:align-self :flex-end
|
:align-self :flex-end
|
||||||
:left 12})
|
:right 12})
|
||||||
|
|
||||||
(defn warning-container
|
(defn warning-container
|
||||||
[color theme]
|
[color theme]
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
:on-collectible-press #(rf/dispatch [:wallet/send-select-collectible
|
:on-collectible-press #(rf/dispatch [:wallet/send-select-collectible
|
||||||
{:collectible %
|
{:collectible %
|
||||||
:stack-id :wallet-select-asset}])}]))
|
:stack-id :wallet-select-asset}])}]))
|
||||||
|
|
||||||
(defn- tab-view
|
(defn- tab-view
|
||||||
[search-text selected-tab on-change-text]
|
[search-text selected-tab on-change-text]
|
||||||
(let [unfiltered-collectibles (rf/sub [:wallet/current-viewing-account-collectibles])
|
(let [unfiltered-collectibles (rf/sub [:wallet/current-viewing-account-collectibles])
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
(ns status-im.contexts.wallet.send.send-amount.view
|
||||||
|
(:require
|
||||||
|
[quo.theme]
|
||||||
|
[status-im.contexts.wallet.send.input-amount.view :as input-amount]
|
||||||
|
[utils.i18n :as i18n]
|
||||||
|
[utils.re-frame :as rf]))
|
||||||
|
|
||||||
|
(defn- view-internal
|
||||||
|
[]
|
||||||
|
[input-amount/view
|
||||||
|
{:button-one-label (i18n/label :t/confirm)
|
||||||
|
:on-navigate-back (fn []
|
||||||
|
(rf/dispatch [:wallet/clean-selected-token])
|
||||||
|
(rf/dispatch [:navigate-back-within-stack :wallet-send-input-amount]))}])
|
||||||
|
|
||||||
|
(def view (quo.theme/with-theme view-internal))
|
|
@ -49,6 +49,7 @@
|
||||||
[status-im.contexts.syncing.scan-sync-code-page.view :as scan-sync-code-page]
|
[status-im.contexts.syncing.scan-sync-code-page.view :as scan-sync-code-page]
|
||||||
[status-im.contexts.syncing.setup-syncing.view :as settings-setup-syncing]
|
[status-im.contexts.syncing.setup-syncing.view :as settings-setup-syncing]
|
||||||
[status-im.contexts.syncing.syncing-devices-list.view :as settings-syncing]
|
[status-im.contexts.syncing.syncing-devices-list.view :as settings-syncing]
|
||||||
|
[status-im.contexts.wallet.account.bridge-send.view :as bridge-send]
|
||||||
[status-im.contexts.wallet.account.bridge-to.view :as bridge-to]
|
[status-im.contexts.wallet.account.bridge-to.view :as bridge-to]
|
||||||
[status-im.contexts.wallet.account.bridge.view :as bridge]
|
[status-im.contexts.wallet.account.bridge.view :as bridge]
|
||||||
[status-im.contexts.wallet.account.view :as wallet-accounts]
|
[status-im.contexts.wallet.account.view :as wallet-accounts]
|
||||||
|
@ -65,9 +66,9 @@
|
||||||
[status-im.contexts.wallet.edit-account.view :as wallet-edit-account]
|
[status-im.contexts.wallet.edit-account.view :as wallet-edit-account]
|
||||||
[status-im.contexts.wallet.saved-addresses.view :as wallet-saved-addresses]
|
[status-im.contexts.wallet.saved-addresses.view :as wallet-saved-addresses]
|
||||||
[status-im.contexts.wallet.scan-account.view :as scan-address]
|
[status-im.contexts.wallet.scan-account.view :as scan-address]
|
||||||
[status-im.contexts.wallet.send.input-amount.view :as wallet-send-input-amount]
|
|
||||||
[status-im.contexts.wallet.send.select-address.view :as wallet-select-address]
|
[status-im.contexts.wallet.send.select-address.view :as wallet-select-address]
|
||||||
[status-im.contexts.wallet.send.select-asset.view :as wallet-select-asset]
|
[status-im.contexts.wallet.send.select-asset.view :as wallet-select-asset]
|
||||||
|
[status-im.contexts.wallet.send.send-amount.view :as wallet-send-input-amount]
|
||||||
[status-im.contexts.wallet.send.transaction-confirmation.view :as wallet-transaction-confirmation]
|
[status-im.contexts.wallet.send.transaction-confirmation.view :as wallet-transaction-confirmation]
|
||||||
[status-im.contexts.wallet.send.transaction-progress.view :as wallet-transaction-progress]
|
[status-im.contexts.wallet.send.transaction-progress.view :as wallet-transaction-progress]
|
||||||
[status-im.contexts.wallet.share-address.view :as wallet-share-address]
|
[status-im.contexts.wallet.share-address.view :as wallet-share-address]
|
||||||
|
@ -335,6 +336,10 @@
|
||||||
:options {:insets {:top? true}}
|
:options {:insets {:top? true}}
|
||||||
:component bridge-to/view}
|
:component bridge-to/view}
|
||||||
|
|
||||||
|
{:name :wallet-bridge-send
|
||||||
|
:options {:insets {:top? true}}
|
||||||
|
:component bridge-send/view}
|
||||||
|
|
||||||
{:name :wallet-edit-derivation-path
|
{:name :wallet-edit-derivation-path
|
||||||
:component wallet-edit-derivation-path/view}
|
:component wallet-edit-derivation-path/view}
|
||||||
|
|
||||||
|
|
|
@ -2329,6 +2329,7 @@
|
||||||
"no-activity": "No activity",
|
"no-activity": "No activity",
|
||||||
"empty-tab-description": "C'mon do something...",
|
"empty-tab-description": "C'mon do something...",
|
||||||
"buy": "Buy",
|
"buy": "Buy",
|
||||||
|
"confirm-bridge": "Confirm bridge",
|
||||||
"bridge": "Bridge",
|
"bridge": "Bridge",
|
||||||
"bridge-to": "Bridge {{name}} to",
|
"bridge-to": "Bridge {{name}} to",
|
||||||
"on-device": "On device",
|
"on-device": "On device",
|
||||||
|
|
Loading…
Reference in New Issue