mirror of
https://github.com/status-im/status-react.git
synced 2025-02-23 08:08:33 +00:00
Improve activity loading to avoid sitations when activity tab becomes empty after auto-refresh or app backgrounding (#21988)
This commit is contained in:
parent
fe0c5c2da7
commit
a210d59c4f
@ -35,13 +35,12 @@
|
||||
chain-ids (chain/chain-ids db)
|
||||
params [[address] chain-ids (create-default-filters) limit-per-request]]
|
||||
{:db (-> db
|
||||
(update-in [:wallet :activities] dissoc address)
|
||||
(update-in [:wallet :ui :activity-tab :request] dissoc :request-id)
|
||||
(update-in [:wallet :ui :activity-tab :request]
|
||||
assoc
|
||||
:address address
|
||||
:loading? true
|
||||
:initial-request? true))
|
||||
:address address
|
||||
:loading? true
|
||||
:remove-all-previous-activites? true))
|
||||
:fx [[:json-rpc/call
|
||||
[{:method "wallet_startActivityFilterSessionV2"
|
||||
:params params
|
||||
@ -69,7 +68,8 @@
|
||||
has-more? (get-in db [:wallet :ui :activity-tab :request :has-more?])
|
||||
params [session-id limit-per-request]]
|
||||
(when (and session-id has-more?)
|
||||
{:fx [[:json-rpc/call
|
||||
{:db (assoc-in db [:wallet :ui :activity-tab :request :remove-all-existing-activities?] false)
|
||||
:fx [[:json-rpc/call
|
||||
[{:method "wallet_getMoreForActivityFilterSession"
|
||||
:params params
|
||||
:on-error [:wallet/log-rpc-error
|
||||
@ -80,7 +80,7 @@
|
||||
:wallet/reset-activities-filter-session
|
||||
(fn [{:keys [db]}]
|
||||
(when-let [session-id (get-in db [:wallet :ui :activity-tab :request :request-id])]
|
||||
{:db (assoc-in db [:wallet :ui :activity-tab :request :initial-request?] true)
|
||||
{:db (assoc-in db [:wallet :ui :activity-tab :request :remove-all-existing-activities?] true)
|
||||
:fx [[:json-rpc/call
|
||||
[{:method "wallet_resetActivityFilterSession"
|
||||
:params [session-id limit-per-request]
|
||||
@ -91,21 +91,22 @@
|
||||
(rf/reg-event-fx
|
||||
:wallet/activity-filtering-for-current-account-done
|
||||
(fn [{:keys [db]} [{:keys [message]}]]
|
||||
(let [{:keys [address initial-request?]} (get-in db [:wallet :ui :activity-tab :request])
|
||||
{:keys [activities offset hasMore]} (transforms/json->clj message)
|
||||
new-activities (->> activities
|
||||
(cske/transform-keys transforms/->kebab-case-keyword)
|
||||
(collection/index-by :key))
|
||||
existing-activities (get-in db [:wallet :activities address])
|
||||
updated-activities (if initial-request?
|
||||
new-activities
|
||||
(nested-merge existing-activities new-activities))]
|
||||
(let [{:keys [address
|
||||
remove-all-existing-activities?]} (get-in db [:wallet :ui :activity-tab :request])
|
||||
{:keys [activities offset hasMore]} (transforms/json->clj message)
|
||||
new-activities (->> activities
|
||||
(cske/transform-keys
|
||||
transforms/->kebab-case-keyword)
|
||||
(collection/index-by :key))
|
||||
existing-activities (get-in db [:wallet :activities address])
|
||||
updated-activities (if remove-all-existing-activities?
|
||||
new-activities
|
||||
(nested-merge existing-activities new-activities))]
|
||||
{:db (-> db
|
||||
(assoc-in [:wallet :activities address] updated-activities)
|
||||
(assoc-in [:wallet :ui :activity-tab :request :offset] offset)
|
||||
(assoc-in [:wallet :ui :activity-tab :request :has-more?] hasMore)
|
||||
(assoc-in [:wallet :ui :activity-tab :request :loading?] false)
|
||||
(assoc-in [:wallet :ui :activity-tab :request :initial-request?] false))})))
|
||||
(assoc-in [:wallet :ui :activity-tab :request :loading?] false))})))
|
||||
|
||||
(rf/reg-event-fx
|
||||
:wallet/activities-filtering-entries-updated
|
||||
|
@ -31,11 +31,20 @@
|
||||
on-end-reached (rn/use-callback
|
||||
#(rf/dispatch
|
||||
[:wallet/get-more-for-activities-filter-session]))]
|
||||
(if (and (and (some? loading?) (false? loading?)) (empty? activity-list))
|
||||
(cond
|
||||
(and (empty? activity-list) loading?)
|
||||
[quo/skeleton-list
|
||||
{:content :messages
|
||||
:parent-height (:height (rn/get-window))
|
||||
:animated? false}]
|
||||
|
||||
(and (empty? activity-list) (false? loading?))
|
||||
[empty-tab/view
|
||||
{:title (i18n/label :t/no-activity)
|
||||
:description (i18n/label :t/empty-tab-description)
|
||||
:image (resources/get-themed-image :no-activity theme)}]
|
||||
|
||||
:else
|
||||
[rn/section-list
|
||||
{:sections activity-list
|
||||
:sticky-section-headers-enabled false
|
||||
|
@ -57,11 +57,10 @@
|
||||
|
||||
(rf/reg-event-fx :wallet/select-account-tab
|
||||
(fn [{:keys [db]} [tab]]
|
||||
(let [activity-tab-selected? (= tab :activity)]
|
||||
{:db (assoc-in db [:wallet :ui :account-page :active-tab] tab)
|
||||
:fx [(if activity-tab-selected?
|
||||
[:dispatch [:wallet/fetch-activities-for-current-account]]
|
||||
[:dispatch [:wallet/stop-activity-filter-session]])]})))
|
||||
{:db (assoc-in db [:wallet :ui :account-page :active-tab] tab)
|
||||
:fx [(if (= tab :activity)
|
||||
[:dispatch [:wallet/fetch-activities-for-current-account]]
|
||||
[:dispatch [:wallet/stop-activity-filter-session]])]}))
|
||||
|
||||
(rf/reg-event-fx :wallet/select-home-tab
|
||||
(fn [{:keys [db]} [tab]]
|
||||
|
Loading…
x
Reference in New Issue
Block a user