Skip to content

Commit

Permalink
feat: add signal for syncing watched accounts
Browse files Browse the repository at this point in the history
  • Loading branch information
seanstrom authored and VolodLytvynenko committed Jul 3, 2024
1 parent 025ee27 commit eddd50f
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
^js ens-username-details-js (.-ensUsernameDetails response-js)
^js customization-color-js (.-customizationColor response-js)
^js saved-addresses-js (.-savedAddresses response-js)
^js watch-only-accounts (.-watchOnlyAccounts response-js)
sync-handler (when-not process-async process-response)]
(cond

Expand Down Expand Up @@ -180,6 +181,15 @@
(rf/merge cofx
(process-next response-js sync-handler)))

(seq watch-only-accounts)
(do
(js-delete response-js "watchOnlyAccounts")
(rf/merge cofx
{:fx [[:dispatch
[:wallet/reconcile-watch-only-accounts
(types/js->clj watch-only-accounts)]]]}
(process-next response-js sync-handler)))

(seq keypairs)
(do
(js-delete response-js "keypairs")
Expand Down
20 changes: 20 additions & 0 deletions src/status_im/contexts/wallet/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -550,6 +550,26 @@
(fn [_ [{:keys [backedUpWatchOnlyAccount]}]]
{:fx [[:dispatch [:wallet/process-account-from-signal backedUpWatchOnlyAccount]]]}))

(defn reconcile-watch-only-accounts
[{:keys [db]} [watch-only-accounts]]
(let [{:keys [removed-accounts
updated-accounts]} (group-by
(comp #(if % :removed-accounts :updated-accounts)
:removed)
watch-only-accounts)
removed-account-addresses (map :address removed-accounts)]
{:db (if (empty? removed-account-addresses)
db
(update-in db
[:wallet :accounts]
(fn [existing-accounts]
(apply dissoc existing-accounts removed-account-addresses))))
:fx (map (fn [account]
[:dispatch [:wallet/process-account-from-signal account]])
updated-accounts)}))

(rf/reg-event-fx :wallet/reconcile-watch-only-accounts reconcile-watch-only-accounts)

(defn reconcile-keypairs
[{:keys [db]} [keypairs]]
(let [existing-keypairs-by-id (get-in db [:wallet :keypairs])
Expand Down
24 changes: 24 additions & 0 deletions src/status_im/contexts/wallet/events_test.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -292,3 +292,27 @@
(assoc raw-account
:address "1x001"
:chat true)]}]]))))))
(h/deftest-event :wallet/reconcile-watch-only-accounts
[event-id dispatch]
(testing "event adds new watch-only accounts"
(reset! rf-db/app-db {:wallet {:accounts {}}})
(is
(match?
(matchers/match-with
[set? matchers/set-equals
vector? matchers/equals
map? matchers/equals]
{:db {:wallet {:accounts {}}}
:fx [[:dispatch [:wallet/process-account-from-signal raw-account]]]})
(dispatch [event-id [raw-account]]))))
(testing "event removes watch-only accounts that are marked as removed"
(reset! rf-db/app-db {:wallet {:accounts {(:address account) account}}})
(is
(match?
(matchers/match-with
[set? matchers/set-equals
vector? matchers/equals
map? matchers/equals]
{:db {:wallet {:accounts {}}}
:fx []})
(dispatch [event-id [(assoc raw-account :removed true)]])))))

0 comments on commit eddd50f

Please sign in to comment.