diff --git a/src/status_im/contexts/wallet/common/account_switcher/view.cljs b/src/status_im/contexts/wallet/common/account_switcher/view.cljs index a5fb849bb10..da90d8a0fad 100644 --- a/src/status_im/contexts/wallet/common/account_switcher/view.cljs +++ b/src/status_im/contexts/wallet/common/account_switcher/view.cljs @@ -13,7 +13,7 @@ nil)) (defn view - [{:keys [on-press accessibility-label icon-name switcher-type] + [{:keys [on-press accessibility-label icon-name switcher-type margin-top] :or {icon-name :i/close accessibility-label :top-bar switcher-type :account-options}}] @@ -21,6 +21,7 @@ networks (rf/sub [:wallet/network-details])] [quo/page-nav {:icon-name icon-name + :margin-top margin-top :background :blur :on-press on-press :accessibility-label accessibility-label 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 fab13ffde6d..867cbaa089e 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 @@ -41,7 +41,8 @@ :removed false} :wallet/wallet-send-token {:symbol :eth} :wallet/wallet-send-loading-suggested-routes? false - :wallet/wallet-send-route {:route []}}) + :wallet/wallet-send-route {:route []} + :wallet/wallet-send-suggested-routes {:candidates []}}) (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 5507959cf31..d0f2e438f90 100644 --- a/src/status_im/contexts/wallet/send/input_amount/view.cljs +++ b/src/status_im/contexts/wallet/send/input_amount/view.cljs @@ -7,7 +7,6 @@ [react-native.safe-area :as safe-area] [reagent.core :as reagent] [status-im.contexts.wallet.common.account-switcher.view :as account-switcher] - [status-im.contexts.wallet.common.utils :as utils] [status-im.contexts.wallet.send.input-amount.style :as style] [status-im.contexts.wallet.send.routes.view :as routes] [utils.debounce :as debounce] @@ -58,7 +57,6 @@ [{:keys [rate limit]}] (let [bottom (safe-area/get-bottom) {:keys [currency]} (rf/sub [:profile/profile]) - networks (rf/sub [:wallet/network-details]) token (rf/sub [:wallet/wallet-send-token]) loading-suggested-routes? (rf/sub [:wallet/wallet-send-loading-suggested-routes?]) token-symbol (:symbol token) @@ -101,18 +99,16 @@ :or {on-confirm #(rf/dispatch [:wallet/send-select-amount {:amount @input-value :stack-id :wallet-send-input-amount}])}}] - (let [limit-label (make-limit-label @current-limit) - input-num-value (parse-double @input-value) - route (rf/sub [:wallet/wallet-send-route]) - loading-suggested-routes? (rf/sub [:wallet/wallet-send-loading-suggested-routes?]) - confirm-disabled? (or - (nil? route) - (empty? @input-value) - (<= input-num-value 0) - (> input-num-value (:amount @current-limit))) - from-network (utils/id->network (get-in route [:From :chainId])) - to-network (utils/id->network (get-in route [:To :chainId])) - amount (str @input-value " " token-symbol)] + (let [limit-label (make-limit-label @current-limit) + input-num-value (parse-double @input-value) + suggested-routes (rf/sub [:wallet/wallet-send-suggested-routes]) + route (rf/sub [:wallet/wallet-send-route]) + confirm-disabled? (or + (nil? route) + (empty? @input-value) + (<= input-num-value 0) + (> input-num-value (:amount @current-limit))) + amount (str @input-value " " token-symbol)] (rn/use-effect (fn [] (let [dismiss-keyboard-fn #(when (= % "active") (rn/dismiss-keyboard!)) @@ -137,7 +133,7 @@ {:container-style style/input-container :token token-symbol :currency currency - :networks networks + :networks (:networks token) :title (i18n/label :t/send-limit {:limit limit-label}) :conversion conversion-rate :show-keyboard? false @@ -145,20 +141,10 @@ :on-swap handle-swap :on-change-text (fn [text] (handle-on-change text))}] - ;; Network routing content to be added - [rn/scroll-view - {:content-container-style {:flex-grow 1 - :align-items :center - :justify-content :center}} - (cond loading-suggested-routes? - [quo/text "Loading routes"] - (and (not loading-suggested-routes?) route) - [routes/view - {:amount amount - :from-network from-network - :to-network to-network}] - (and (not loading-suggested-routes?) (nil? route)) - [quo/text "Route not found"])] + [routes/view + {:amount amount + :routes suggested-routes + :networks (:networks token)}] [quo/bottom-actions {:actions :1-action :button-one-label (i18n/label :t/confirm) diff --git a/src/status_im/contexts/wallet/send/routes/style.cljs b/src/status_im/contexts/wallet/send/routes/style.cljs index e4b73009881..ce3d604ced7 100644 --- a/src/status_im/contexts/wallet/send/routes/style.cljs +++ b/src/status_im/contexts/wallet/send/routes/style.cljs @@ -2,6 +2,7 @@ (def routes-container {:padding-horizontal 20 + :flex 1 :padding-vertical 16 :width "100%" :height "100%"}) @@ -24,3 +25,8 @@ (def network-link {:right 6 :z-index 1}) + +(def empty-container + {:flex-grow 1 + :align-items :center + :justify-content :center}) diff --git a/src/status_im/contexts/wallet/send/routes/view.cljs b/src/status_im/contexts/wallet/send/routes/view.cljs index b4087e99887..5ee5994126f 100644 --- a/src/status_im/contexts/wallet/send/routes/view.cljs +++ b/src/status_im/contexts/wallet/send/routes/view.cljs @@ -2,31 +2,53 @@ (:require [quo.core :as quo] [react-native.core :as rn] + [status-im.contexts.wallet.common.utils :as utils] [status-im.contexts.wallet.send.routes.style :as style] - [utils.i18n :as i18n])) + [utils.i18n :as i18n] + [utils.re-frame :as rf])) + +(defn route-item + [{:keys [amount from-network to-network status]}] + [rn/view {:style style/routes-inner-container} + [quo/network-bridge + {:amount amount + :network from-network + :status status}] + [quo/network-link + {:shape :linear + :source from-network + :destination to-network + :container-style style/network-link}] + [quo/network-bridge + {:amount amount + :network to-network + :status status + :container-style {:right 12}}]]) (defn view - [{:keys [amount from-network to-network]}] - [rn/view {:style style/routes-container} - [rn/view {:style style/routes-header-container} - [quo/section-label - {:section (i18n/label :t/from-label) - :container-style (style/section-label 0)}] - [quo/section-label - {:section (i18n/label :t/to-label) - :container-style (style/section-label 64)}]] - [rn/view {:style style/routes-inner-container} - [quo/network-bridge - {:amount amount - :network from-network - :status :default}] - [quo/network-link - {:shape :linear - :source from-network - :destination to-network - :container-style style/network-link}] - [quo/network-bridge - {:amount amount - :network to-network - :status :default - :container-style {:right 12}}]]]) + [{:keys [amount routes]}] + (let [loading-suggested-routes? (rf/sub [:wallet/wallet-send-loading-suggested-routes?]) + candidates (:candidates routes)] + (if (and (not loading-suggested-routes?) (not-empty candidates)) + [rn/flat-list + {:data candidates + :content-container-style style/routes-container + :header [rn/view {:style style/routes-header-container} + [quo/section-label + {:section (i18n/label :t/from-label) + :container-style (style/section-label 0)}] + [quo/section-label + {:section (i18n/label :t/to-label) + :container-style (style/section-label 64)}]] + :render-fn (fn [route] + [route-item + {:amount amount + :status :default + :from-network (utils/id->network (get-in route [:from :chain-id])) + :to-network (utils/id->network (get-in route + [:to :chain-id]))}])}] + [rn/view {:style style/empty-container} + (if loading-suggested-routes? + [rn/activity-indicator] + (when (not (nil? candidates)) + [quo/text (i18n/label :t/no-routes-found)]))]))) diff --git a/src/status_im/contexts/wallet/send/select_address/style.cljs b/src/status_im/contexts/wallet/send/select_address/style.cljs index b081b5e8fc9..f462bcc9ea0 100644 --- a/src/status_im/contexts/wallet/send/select_address/style.cljs +++ b/src/status_im/contexts/wallet/send/select_address/style.cljs @@ -17,5 +17,5 @@ (def button {:justify-self :flex-end - :margin-bottom 46 + :margin-bottom 20 :margin-horizontal 20}) diff --git a/src/status_im/contexts/wallet/send/select_address/view.cljs b/src/status_im/contexts/wallet/send/select_address/view.cljs index 1b9605b075e..e49abdc5f7d 100644 --- a/src/status_im/contexts/wallet/send/select_address/view.cljs +++ b/src/status_im/contexts/wallet/send/select_address/view.cljs @@ -3,7 +3,9 @@ [quo.core :as quo] [quo.foundations.colors :as colors] [react-native.core :as rn] + [react-native.safe-area :as safe-area] [reagent.core :as reagent] + [status-im.common.floating-button-page.view :as floating-button-page] [status-im.constants :as constants] [status-im.contexts.wallet.common.account-switcher.view :as account-switcher] [status-im.contexts.wallet.item-types :as types] @@ -127,13 +129,20 @@ (fn [] (rf/dispatch [:wallet/clean-scanned-address]) (rf/dispatch [:wallet/clean-local-suggestions])))) - [rn/scroll-view - {:content-container-style style/container - :keyboard-should-persist-taps :handled - :scroll-enabled false} - [account-switcher/view - {:on-press on-close - :switcher-type :select-account}] + [floating-button-page/view + {:header [account-switcher/view + {:on-press on-close + :margin-top (safe-area/get-top) + :switcher-type :select-account}] + :footer (when (> (count @input-value) 0) + [quo/button + {:accessibility-label :continue-button + :type :primary + :disabled? (not valid-ens-or-address?) + :on-press #(rf/dispatch [:wallet/select-send-address + {:address @input-value + :stack-id :wallet-select-address}])} + (i18n/label :t/continue)])} [quo/text-combinations {:title (i18n/label :t/send-to) :container-style style/title-container @@ -147,17 +156,7 @@ [rn/view {:style {:flex 1 :padding 8}} - [local-suggestions-list]] - (when (> (count @input-value) 0) - [quo/button - {:accessibility-label :continue-button - :type :primary - :disabled? (not valid-ens-or-address?) - :container-style style/button - :on-press #(rf/dispatch [:wallet/select-send-address - {:address @input-value - :stack-id :wallet-select-address}])} - (i18n/label :t/continue)])] + [local-suggestions-list]]] [:<> [quo/tabs {:style style/tabs @@ -173,4 +172,3 @@ (defn view [] [:f> f-view]) - diff --git a/src/status_im/navigation/screens.cljs b/src/status_im/navigation/screens.cljs index 0f4d12e0fd5..3d942de1381 100644 --- a/src/status_im/navigation/screens.cljs +++ b/src/status_im/navigation/screens.cljs @@ -339,7 +339,8 @@ {:name :wallet-send-input-amount :options {:modalPresentationStyle :overCurrentContext - :insets {:top? true}} + :insets {:top? true + :bottom? true}} :component wallet-send-input-amount/view} {:name :wallet-select-address diff --git a/src/status_im/subs/wallet/wallet.cljs b/src/status_im/subs/wallet/wallet.cljs index 73de9be9206..ec8b54b73b3 100644 --- a/src/status_im/subs/wallet/wallet.cljs +++ b/src/status_im/subs/wallet/wallet.cljs @@ -63,6 +63,11 @@ :<- [:wallet/wallet-send] :-> :loading-suggested-routes?) +(rf/reg-sub + :wallet/wallet-send-suggested-routes + :<- [:wallet/wallet-send] + :-> :suggested-routes) + (rf/reg-sub :wallet/watch-address-activity-state :<- [:wallet/ui] diff --git a/translations/en.json b/translations/en.json index 2743018a7f4..740f6801f7c 100644 --- a/translations/en.json +++ b/translations/en.json @@ -2457,5 +2457,6 @@ "to-label": "To", "oops-wrong-word": "Oops! Wrong word", "time-in-mins": "{{minutes}} min", - "amount-with-currency-symbol": "{{symbol}} {{amount}}" + "amount-with-currency-symbol": "{{symbol}} {{amount}}", + "no-routes-found": "No routes found" }