diff --git a/src/quo/components/list_items/network_list/style.cljs b/src/quo/components/list_items/network_list/style.cljs index 39ace1723c..4fe6529285 100644 --- a/src/quo/components/list_items/network_list/style.cljs +++ b/src/quo/components/list_items/network_list/style.cljs @@ -17,6 +17,7 @@ :padding-vertical 8 :border-radius 12 :height 56 + :opacity (if (= state :disabled) 0.3 1) :background-color (background-color state customization-color theme)}) (def info diff --git a/src/quo/components/list_items/network_list/view.cljs b/src/quo/components/list_items/network_list/view.cljs index 9bdcb4f0fa..2c5bd47f75 100644 --- a/src/quo/components/list_items/network_list/view.cljs +++ b/src/quo/components/list_items/network_list/view.cljs @@ -45,7 +45,7 @@ [:fiat-value :string] [:token-value :string] [:customization-color {:optional true} [:maybe :schema.common/customization-color]] - [:state {:optional true} [:enum :pressed :active :default]] + [:state {:optional true} [:enum :pressed :active :disabled :default]] [:on-press {:optional true} [:maybe fn?]]]]] :any]) @@ -60,9 +60,9 @@ internal-state (if pressed? :pressed state)] [rn/pressable {:style (style/container internal-state customization-color theme) - :on-press-in on-press-in - :on-press-out on-press-out - :on-press on-press + :on-press-in (when-not (= state :disabled) on-press-in) + :on-press-out (when-not (= state :disabled) on-press-out) + :on-press (when-not (= state :disabled) on-press) :accessibility-label :network-list} [info props] [values props]])) diff --git a/src/status_im/contexts/wallet/bridge/bridge_to/view.cljs b/src/status_im/contexts/wallet/bridge/bridge_to/view.cljs index 0cf26d28b1..0eb6ed3d83 100644 --- a/src/status_im/contexts/wallet/bridge/bridge_to/view.cljs +++ b/src/status_im/contexts/wallet/bridge/bridge_to/view.cljs @@ -8,44 +8,49 @@ [status-im.contexts.wallet.bridge.bridge-to.style :as style] [status-im.contexts.wallet.common.account-switcher.view :as account-switcher] [status-im.contexts.wallet.common.utils :as utils] + [status-im.contexts.wallet.common.utils.networks :as network-utils] [utils.i18n :as i18n] [utils.re-frame :as rf])) (defn- bridge-token-component [] - (fn [{:keys [chain-id network-name]} token] - (let [network (rf/sub [:wallet/network-details-by-chain-id chain-id]) - currency (rf/sub [:profile/currency]) - currency-symbol (rf/sub [:profile/currency-symbol]) - balance (utils/calculate-total-token-balance token [chain-id]) - crypto-value (utils/get-standard-crypto-format token balance) - fiat-value (utils/calculate-token-fiat-value - {:currency currency - :balance balance - :token token}) - fiat-formatted (utils/get-standard-fiat-format crypto-value currency-symbol fiat-value)] + (fn [{:keys [chain-id network-name]} {:keys [networks] :as token}] + (let [network (rf/sub [:wallet/network-details-by-chain-id chain-id]) + currency (rf/sub [:profile/currency]) + currency-symbol (rf/sub [:profile/currency-symbol]) + balance (utils/calculate-total-token-balance token [chain-id]) + crypto-value (utils/get-standard-crypto-format token balance) + fiat-value (utils/calculate-token-fiat-value + {:currency currency + :balance balance + :token token}) + fiat-formatted (utils/get-standard-fiat-format crypto-value + currency-symbol + fiat-value) + token-available-on-network? (network-utils/token-available-on-network? networks chain-id)] [quo/network-list {:label (name network-name) :network-image (quo.resources/get-network (:network-name network)) :token-value (str crypto-value " " (:symbol token)) :fiat-value fiat-formatted + :state (if token-available-on-network? :default :disabled) :on-press #(rf/dispatch [:wallet/select-bridge-network {:network-chain-id chain-id :stack-id :screen/wallet.bridge-to}])}]))) (defn view [] - (let [send-bridge-data (rf/sub [:wallet/wallet-send]) - network-details (rf/sub [:wallet/network-details]) + (let [network-details (rf/sub [:wallet/network-details]) account (rf/sub [:wallet/current-viewing-account]) - token (:token send-bridge-data) + token (rf/sub [:wallet/wallet-send-token]) token-symbol (:symbol token) tokens (:tokens account) mainnet (first network-details) layer-2-networks (rest network-details) account-token (some #(when (= token-symbol (:symbol %)) %) tokens) + account-token (when account-token (assoc account-token :networks (:networks token))) bridge-to-title (i18n/label :t/bridge-to - {:name (string/upper-case (str (:name token)))})] + {:name (string/upper-case (str token-symbol))})] [rn/view [account-switcher/view {:on-press #(rf/dispatch [:navigate-back]) diff --git a/src/status_im/contexts/wallet/common/utils/networks.cljs b/src/status_im/contexts/wallet/common/utils/networks.cljs index bb4c55dd97..e8ae468885 100644 --- a/src/status_im/contexts/wallet/common/utils/networks.cljs +++ b/src/status_im/contexts/wallet/common/utils/networks.cljs @@ -125,3 +125,9 @@ (string/join ", ")) formatted-text (string/replace network-names last-comma-followed-by-text-to-end-regex " and ")] formatted-text)) + +(defn token-available-on-network? + [token-networks chain-id] + (let [token-networks-ids (mapv #(:chain-id %) token-networks) + token-networks-ids-set (set token-networks-ids)] + (contains? token-networks-ids-set chain-id))) diff --git a/src/status_im/contexts/wallet/send/input_amount/component_spec.cljs b/src/status_im/contexts/wallet/send/input_amount/component_spec.cljs index bb55c9705f..b8f4f0bf9c 100644 --- a/src/status_im/contexts/wallet/send/input_amount/component_spec.cljs +++ b/src/status_im/contexts/wallet/send/input_amount/component_spec.cljs @@ -95,7 +95,8 @@ :related-chain-id 1 :layer 1}] :wallet/wallet-send-enabled-from-chain-ids [1] - :wallet/wallet-send-amount nil}) + :wallet/wallet-send-amount nil + :wallet/wallet-send-tx-type :tx/send}) (h/describe "Send > input amount screen" (h/setup-restorable-re-frame) diff --git a/src/status_im/contexts/wallet/send/input_amount/view.cljs b/src/status_im/contexts/wallet/send/input_amount/view.cljs index 00c294876e..57769d2e9d 100644 --- a/src/status_im/contexts/wallet/send/input_amount/view.cljs +++ b/src/status_im/contexts/wallet/send/input_amount/view.cljs @@ -251,9 +251,11 @@ [:wallet/wallet-send-sender-network-values]) receiver-network-values (rf/sub [:wallet/wallet-send-receiver-network-values]) - token-not-supported-in-receiver-networks? (every? #(= (:type %) :not-available) - (filter #(not= (:type %) :add) - receiver-network-values)) + tx-type (rf/sub [:wallet/wallet-send-tx-type]) + token-not-supported-in-receiver-networks? (and (not= tx-type :tx/bridge) + (->> receiver-network-values + (remove #(= (:type %) :add)) + (every? #(= (:type %) :not-available)))) suggested-routes (rf/sub [:wallet/wallet-send-suggested-routes]) routes (when suggested-routes (or (:best suggested-routes) [])) diff --git a/src/status_im/subs/wallet/wallet.cljs b/src/status_im/subs/wallet/wallet.cljs index fefcb080e4..304def5962 100644 --- a/src/status_im/subs/wallet/wallet.cljs +++ b/src/status_im/subs/wallet/wallet.cljs @@ -160,6 +160,11 @@ :<- [:wallet/wallet-send] :-> :network-links) +(rf/reg-sub + :wallet/wallet-send-tx-type + :<- [:wallet/wallet-send] + :-> :tx-type) + (rf/reg-sub :wallet/keypairs :<- [:wallet]