Skip to content

Commit a210d59

Browse files
authored
Improve activity loading to avoid sitations when activity tab becomes empty after auto-refresh or app backgrounding (#21988)
1 parent fe0c5c2 commit a210d59

File tree

3 files changed

+32
-23
lines changed

3 files changed

+32
-23
lines changed

src/status_im/contexts/wallet/common/activity_tab/events.cljs

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,12 @@
3535
chain-ids (chain/chain-ids db)
3636
params [[address] chain-ids (create-default-filters) limit-per-request]]
3737
{:db (-> db
38-
(update-in [:wallet :activities] dissoc address)
3938
(update-in [:wallet :ui :activity-tab :request] dissoc :request-id)
4039
(update-in [:wallet :ui :activity-tab :request]
4140
assoc
42-
:address address
43-
:loading? true
44-
:initial-request? true))
41+
:address address
42+
:loading? true
43+
:remove-all-previous-activites? true))
4544
:fx [[:json-rpc/call
4645
[{:method "wallet_startActivityFilterSessionV2"
4746
:params params
@@ -69,7 +68,8 @@
6968
has-more? (get-in db [:wallet :ui :activity-tab :request :has-more?])
7069
params [session-id limit-per-request]]
7170
(when (and session-id has-more?)
72-
{:fx [[:json-rpc/call
71+
{:db (assoc-in db [:wallet :ui :activity-tab :request :remove-all-existing-activities?] false)
72+
:fx [[:json-rpc/call
7373
[{:method "wallet_getMoreForActivityFilterSession"
7474
:params params
7575
:on-error [:wallet/log-rpc-error
@@ -80,7 +80,7 @@
8080
:wallet/reset-activities-filter-session
8181
(fn [{:keys [db]}]
8282
(when-let [session-id (get-in db [:wallet :ui :activity-tab :request :request-id])]
83-
{:db (assoc-in db [:wallet :ui :activity-tab :request :initial-request?] true)
83+
{:db (assoc-in db [:wallet :ui :activity-tab :request :remove-all-existing-activities?] true)
8484
:fx [[:json-rpc/call
8585
[{:method "wallet_resetActivityFilterSession"
8686
:params [session-id limit-per-request]
@@ -91,21 +91,22 @@
9191
(rf/reg-event-fx
9292
:wallet/activity-filtering-for-current-account-done
9393
(fn [{:keys [db]} [{:keys [message]}]]
94-
(let [{:keys [address initial-request?]} (get-in db [:wallet :ui :activity-tab :request])
95-
{:keys [activities offset hasMore]} (transforms/json->clj message)
96-
new-activities (->> activities
97-
(cske/transform-keys transforms/->kebab-case-keyword)
98-
(collection/index-by :key))
99-
existing-activities (get-in db [:wallet :activities address])
100-
updated-activities (if initial-request?
101-
new-activities
102-
(nested-merge existing-activities new-activities))]
94+
(let [{:keys [address
95+
remove-all-existing-activities?]} (get-in db [:wallet :ui :activity-tab :request])
96+
{:keys [activities offset hasMore]} (transforms/json->clj message)
97+
new-activities (->> activities
98+
(cske/transform-keys
99+
transforms/->kebab-case-keyword)
100+
(collection/index-by :key))
101+
existing-activities (get-in db [:wallet :activities address])
102+
updated-activities (if remove-all-existing-activities?
103+
new-activities
104+
(nested-merge existing-activities new-activities))]
103105
{:db (-> db
104106
(assoc-in [:wallet :activities address] updated-activities)
105107
(assoc-in [:wallet :ui :activity-tab :request :offset] offset)
106108
(assoc-in [:wallet :ui :activity-tab :request :has-more?] hasMore)
107-
(assoc-in [:wallet :ui :activity-tab :request :loading?] false)
108-
(assoc-in [:wallet :ui :activity-tab :request :initial-request?] false))})))
109+
(assoc-in [:wallet :ui :activity-tab :request :loading?] false))})))
109110

110111
(rf/reg-event-fx
111112
:wallet/activities-filtering-entries-updated

src/status_im/contexts/wallet/common/activity_tab/view.cljs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,20 @@
3131
on-end-reached (rn/use-callback
3232
#(rf/dispatch
3333
[:wallet/get-more-for-activities-filter-session]))]
34-
(if (and (and (some? loading?) (false? loading?)) (empty? activity-list))
34+
(cond
35+
(and (empty? activity-list) loading?)
36+
[quo/skeleton-list
37+
{:content :messages
38+
:parent-height (:height (rn/get-window))
39+
:animated? false}]
40+
41+
(and (empty? activity-list) (false? loading?))
3542
[empty-tab/view
3643
{:title (i18n/label :t/no-activity)
3744
:description (i18n/label :t/empty-tab-description)
3845
:image (resources/get-themed-image :no-activity theme)}]
46+
47+
:else
3948
[rn/section-list
4049
{:sections activity-list
4150
:sticky-section-headers-enabled false

src/status_im/contexts/wallet/events.cljs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,10 @@
5757

5858
(rf/reg-event-fx :wallet/select-account-tab
5959
(fn [{:keys [db]} [tab]]
60-
(let [activity-tab-selected? (= tab :activity)]
61-
{:db (assoc-in db [:wallet :ui :account-page :active-tab] tab)
62-
:fx [(if activity-tab-selected?
63-
[:dispatch [:wallet/fetch-activities-for-current-account]]
64-
[:dispatch [:wallet/stop-activity-filter-session]])]})))
60+
{:db (assoc-in db [:wallet :ui :account-page :active-tab] tab)
61+
:fx [(if (= tab :activity)
62+
[:dispatch [:wallet/fetch-activities-for-current-account]]
63+
[:dispatch [:wallet/stop-activity-filter-session]])]}))
6564

6665
(rf/reg-event-fx :wallet/select-home-tab
6766
(fn [{:keys [db]} [tab]]

0 commit comments

Comments
 (0)