From d0374d9fd20f130f67c4e6de273a9bfc93ab8e63 Mon Sep 17 00:00:00 2001 From: Shivek Khurana Date: Thu, 4 Apr 2024 13:51:29 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=96=87=EF=B8=8F=20Connect=20getSavedAddre?= =?UTF-8?q?sses=20RPC=20to=20show=20or=20hide=20save=20address=20button=20?= =?UTF-8?q?(#19508)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🖇️ Connect getSavedAddresses - The save button will not show if the address is already saved * ⚒️ Fix PR reviews * 🗑️ Remove code from wallet events ns --- src/status_im/contexts/wallet/events.cljs | 32 ------------- .../wallet/events/saved_addresses.cljs | 45 +++++++++++++++++++ .../wallet/send/save_address/view.cljs | 7 +-- .../send/transaction_progress/view.cljs | 8 +++- src/status_im/subs/root.cljs | 1 + .../subs/wallet/saved_addresses.cljs | 15 +++++++ 6 files changed, 71 insertions(+), 37 deletions(-) create mode 100644 src/status_im/contexts/wallet/events/saved_addresses.cljs create mode 100644 src/status_im/subs/wallet/saved_addresses.cljs diff --git a/src/status_im/contexts/wallet/events.cljs b/src/status_im/contexts/wallet/events.cljs index 296f983d35..5d38c409e8 100644 --- a/src/status_im/contexts/wallet/events.cljs +++ b/src/status_im/contexts/wallet/events.cljs @@ -3,7 +3,6 @@ [clojure.string :as string] [react-native.background-timer :as background-timer] [react-native.platform :as platform] - [status-im.constants :as constants] [status-im.contexts.wallet.accounts.add-account.address-to-watch.events] [status-im.contexts.wallet.common.utils :as utils] [status-im.contexts.wallet.data-store :as data-store] @@ -444,34 +443,3 @@ :type :negative :text (i18n/label :t/provider-is-down {:chains chain-names}) :duration 10000}]]])}))) - -(rf/reg-event-fx - :wallet/save-address - (fn [_ - [{:keys [address name customization-color on-success on-error chain-short-names ens test?] - :or {on-success (fn []) - on-error (fn []) - name "" - ens "" - test? false - ;; the chain short names should be a string like eth: or eth:arb:opt: - chain-short-names (str constants/mainnet-short-name ":")}}]] - (let [address-to-save {:address address - :name name - :color-id customization-color - :ens ens - :is-test test? - :chain-short-names chain-short-names}] - {:json-rpc/call - [{:method "wakuext_upsertSavedAddress" - :params [address-to-save] - :on-success on-success - :on-error on-error}]}))) - -(rf/reg-event-fx - :wallet/get-saved-addresses - (fn [_ [{:keys [on-success on-error]}]] - {:json-rpc/call - [{:method "wakuext_getSavedAddresses" - :on-success on-success - :on-error on-error}]})) diff --git a/src/status_im/contexts/wallet/events/saved_addresses.cljs b/src/status_im/contexts/wallet/events/saved_addresses.cljs new file mode 100644 index 0000000000..24123737ef --- /dev/null +++ b/src/status_im/contexts/wallet/events/saved_addresses.cljs @@ -0,0 +1,45 @@ +(ns status-im.contexts.wallet.events.saved-addresses + (:require + [status-im.constants :as constants] + [utils.re-frame :as rf])) + +(rf/reg-event-fx + :wallet/save-address + (fn [_ + [{:keys [address name customization-color on-success on-error chain-short-names ens test?] + :or {on-success (fn []) + on-error (fn []) + name "" + ens "" + test? false + ;; the chain short names should be a string like eth: or eth:arb:opt: + chain-short-names (str constants/mainnet-short-name ":")}}]] + (let [address-to-save {:address address + :name name + :color-id customization-color + :ens ens + :is-test test? + :chain-short-names chain-short-names}] + {:json-rpc/call + [{:method "wakuext_upsertSavedAddress" + :params [address-to-save] + :on-success on-success + :on-error on-error}]}))) + +(rf/reg-event-fx + :wallet/get-saved-addresses-success + (fn [{:keys [db]} [saved-addresses]] + {:db (assoc-in db [:wallet :saved-addresses] saved-addresses)})) + +(rf/reg-event-fx + :wallet/get-saved-addresses-error + (fn [{:keys [db]} [err]] + {:db (assoc db [:wallet :get-saved-addresses-error] err)})) + +(rf/reg-event-fx + :wallet/get-saved-addresses + (fn [_ _] + {:json-rpc/call + [{:method "wakuext_getSavedAddresses" + :on-success [:wallet/get-saved-addresses-success] + :on-error [:wallet/get-saved-addresses-error]}]})) diff --git a/src/status_im/contexts/wallet/send/save_address/view.cljs b/src/status_im/contexts/wallet/send/save_address/view.cljs index 248bf63660..cbb4ac4f98 100644 --- a/src/status_im/contexts/wallet/send/save_address/view.cljs +++ b/src/status_im/contexts/wallet/send/save_address/view.cljs @@ -12,8 +12,9 @@ [utils.re-frame :as rf])) (defn- address-view - [address] - (let [network-details (rf/sub [:wallet/network-preference-details])] + [] + (let [network-details (rf/sub [:wallet/network-preference-details]) + address (rf/sub [:wallet/wallet-send-to-address])] [rn/view {:style style/address-container} [quo/data-item {:status :default @@ -86,4 +87,4 @@ :on-change set-address-color :container-style style/color-picker}] [quo/divider-line {:container-style style/color-picker-bottom-divider}] - [address-view "0xshivek"]])) + [address-view]])) diff --git a/src/status_im/contexts/wallet/send/transaction_progress/view.cljs b/src/status_im/contexts/wallet/send/transaction_progress/view.cljs index 22828774a4..4f08455a6d 100644 --- a/src/status_im/contexts/wallet/send/transaction_progress/view.cljs +++ b/src/status_im/contexts/wallet/send/transaction_progress/view.cljs @@ -27,9 +27,10 @@ (defn- footer [{:keys [color leave-page]}] - (let [save-address-visible? false] + (let [send-to-address (rf/sub [:wallet/wallet-send-to-address]) + save-address-hidden? (rf/sub [:wallet/address-saved? send-to-address])] [quo/bottom-actions - {:actions (if save-address-visible? :two-actions :one-action) + {:actions (if save-address-hidden? :one-action :two-actions) :button-two-label (i18n/label :t/save-address) :button-two-props {:type :grey :icon-left :i/contact-book @@ -47,6 +48,9 @@ (let [leave-page #(rf/dispatch [:wallet/close-transaction-progress-page]) {:keys [color]} (rf/sub [:wallet/current-viewing-account])] (fn [] + (rn/use-effect + (fn [] + (rf/dispatch [:wallet/get-saved-addresses]))) (let [transaction-details (rf/sub [:wallet/send-transaction-progress])] [floating-button-page/view {:footer-container-padding 0 diff --git a/src/status_im/subs/root.cljs b/src/status_im/subs/root.cljs index 079b6c5129..5f83dc5f48 100644 --- a/src/status_im/subs/root.cljs +++ b/src/status_im/subs/root.cljs @@ -16,6 +16,7 @@ status-im.subs.shell status-im.subs.wallet.collectibles status-im.subs.wallet.networks + status-im.subs.wallet.saved-addresses status-im.subs.wallet.send status-im.subs.wallet.wallet)) diff --git a/src/status_im/subs/wallet/saved_addresses.cljs b/src/status_im/subs/wallet/saved_addresses.cljs new file mode 100644 index 0000000000..8b48bf730d --- /dev/null +++ b/src/status_im/subs/wallet/saved_addresses.cljs @@ -0,0 +1,15 @@ +(ns status-im.subs.wallet.saved-addresses + (:require + [re-frame.core :as rf])) + +(rf/reg-sub + :wallet/saved-addresses + :<- [:wallet] + :-> :saved-addresses) + +(rf/reg-sub + :wallet/address-saved? + :<- [:wallet] + (fn [wallet [address]] + (some #(= address (:address %)) + (:saved-addresses wallet))))