[wallet] Pull to refresh tx history
This commit is contained in:
parent
64840f74a7
commit
92aaa194a8
|
@ -22,6 +22,7 @@
|
||||||
:ReanimatedModule {:configureProps (fn [])}}
|
:ReanimatedModule {:configureProps (fn [])}}
|
||||||
|
|
||||||
:View {}
|
:View {}
|
||||||
|
:RefreshControl {}
|
||||||
:FlatList {}
|
:FlatList {}
|
||||||
:Text {}
|
:Text {}
|
||||||
:ProgressBarAndroid {}
|
:ProgressBarAndroid {}
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
(def scroll-view (reagent/adapt-react-class (.-ScrollView ^js rn)))
|
(def scroll-view (reagent/adapt-react-class (.-ScrollView ^js rn)))
|
||||||
(def modal (reagent/adapt-react-class (.-Modal ^js rn)))
|
(def modal (reagent/adapt-react-class (.-Modal ^js rn)))
|
||||||
|
(def refresh-control (reagent/adapt-react-class (.-RefreshControl ^js rn)))
|
||||||
|
|
||||||
(def touchable-opacity (reagent/adapt-react-class (.-TouchableOpacity ^js rn)))
|
(def touchable-opacity (reagent/adapt-react-class (.-TouchableOpacity ^js rn)))
|
||||||
(def touchable-highlight (reagent/adapt-react-class (.-TouchableHighlight ^js rn)))
|
(def touchable-highlight (reagent/adapt-react-class (.-TouchableHighlight ^js rn)))
|
||||||
|
|
|
@ -66,7 +66,8 @@
|
||||||
(update-in [:wallet :accounts]
|
(update-in [:wallet :accounts]
|
||||||
wallet/remove-transactions-since-block blockNumber)
|
wallet/remove-transactions-since-block blockNumber)
|
||||||
(transactions/update-fetching-status accounts :recent? false)
|
(transactions/update-fetching-status accounts :recent? false)
|
||||||
(dissoc :wallet/waiting-for-recent-history?))
|
(dissoc :wallet/waiting-for-recent-history?
|
||||||
|
:wallet/refreshing-history?))
|
||||||
:transactions/get-transfers
|
:transactions/get-transfers
|
||||||
{:chain-tokens (:wallet/all-tokens db)
|
{:chain-tokens (:wallet/all-tokens db)
|
||||||
:addresses (reduce
|
:addresses (reduce
|
||||||
|
@ -81,7 +82,7 @@
|
||||||
:before-block blockNumber
|
:before-block blockNumber
|
||||||
:limit 20
|
:limit 20
|
||||||
:historical? true}}
|
:historical? true}}
|
||||||
(wallet.core/restart-wallet-service false false)))
|
(wallet.core/restart-wallet-service-default)))
|
||||||
|
|
||||||
(fx/defn new-wallet-event
|
(fx/defn new-wallet-event
|
||||||
[cofx {:keys [type blockNumber accounts newTransactions] :as event}]
|
[cofx {:keys [type blockNumber accounts newTransactions] :as event}]
|
||||||
|
|
|
@ -1184,7 +1184,7 @@
|
||||||
(dissoc :app-in-background-since)
|
(dissoc :app-in-background-since)
|
||||||
(assoc :app-active-since now))}
|
(assoc :app-active-since now))}
|
||||||
(mailserver/process-next-messages-request)
|
(mailserver/process-next-messages-request)
|
||||||
(wallet/restart-wallet-service true false)
|
(wallet/restart-wallet-service {:force-start? true})
|
||||||
#(when requires-bio-auth
|
#(when requires-bio-auth
|
||||||
(biometric/authenticate % on-biometric-auth-result authentication-options)))))
|
(biometric/authenticate % on-biometric-auth-result authentication-options)))))
|
||||||
|
|
||||||
|
|
|
@ -318,7 +318,7 @@
|
||||||
;;FIXME
|
;;FIXME
|
||||||
(when nodes
|
(when nodes
|
||||||
(fleet/set-nodes :eth.contract nodes))
|
(fleet/set-nodes :eth.contract nodes))
|
||||||
(wallet/restart-wallet-service true false)
|
(wallet/restart-wallet-service {:force-start? true})
|
||||||
(if login-only?
|
(if login-only?
|
||||||
(login-only-events key-uid password save-password?)
|
(login-only-events key-uid password save-password?)
|
||||||
(create-only-events))
|
(create-only-events))
|
||||||
|
|
|
@ -169,6 +169,7 @@
|
||||||
(reg-root-key-sub :wallet-service/state :wallet-service/state)
|
(reg-root-key-sub :wallet-service/state :wallet-service/state)
|
||||||
(reg-root-key-sub :wallet/recipient :wallet/recipient)
|
(reg-root-key-sub :wallet/recipient :wallet/recipient)
|
||||||
(reg-root-key-sub :wallet/favourites :wallet/favourites)
|
(reg-root-key-sub :wallet/favourites :wallet/favourites)
|
||||||
|
(reg-root-key-sub :wallet/refreshing-history? :wallet/refreshing-history?)
|
||||||
|
|
||||||
;;commands
|
;;commands
|
||||||
(reg-root-key-sub :commands/select-account :commands/select-account)
|
(reg-root-key-sub :commands/select-account :commands/select-account)
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
logged-in?
|
logged-in?
|
||||||
[(mailserver/process-next-messages-request)
|
[(mailserver/process-next-messages-request)
|
||||||
(bottom-sheet/hide-bottom-sheet)
|
(bottom-sheet/hide-bottom-sheet)
|
||||||
(wallet/restart-wallet-service false false)]))))
|
(wallet/restart-wallet-service-default)]))))
|
||||||
|
|
||||||
(defn apply-settings
|
(defn apply-settings
|
||||||
([sync?] (apply-settings sync? :default))
|
([sync?] (apply-settings sync? :default))
|
||||||
|
@ -62,7 +62,7 @@
|
||||||
(bottom-sheet/hide-bottom-sheet)
|
(bottom-sheet/hide-bottom-sheet)
|
||||||
(when (and cellular? sync?)
|
(when (and cellular? sync?)
|
||||||
(mailserver/process-next-messages-request))
|
(mailserver/process-next-messages-request))
|
||||||
(wallet/restart-wallet-service false false))))))
|
(wallet/restart-wallet-service-default))))))
|
||||||
|
|
||||||
(handlers/register-handler-fx
|
(handlers/register-handler-fx
|
||||||
:mobile-network/continue-syncing
|
:mobile-network/continue-syncing
|
||||||
|
|
|
@ -16,7 +16,9 @@
|
||||||
[status-im.ui.screens.wallet.transactions.views :as history]
|
[status-im.ui.screens.wallet.transactions.views :as history]
|
||||||
[status-im.utils.money :as money]
|
[status-im.utils.money :as money]
|
||||||
[status-im.wallet.utils :as wallet.utils]
|
[status-im.wallet.utils :as wallet.utils]
|
||||||
[status-im.ui.components.tabs :as tabs])
|
[status-im.ui.components.tabs :as tabs]
|
||||||
|
[quo.react-native :as rn]
|
||||||
|
[status-im.utils.utils :as utils.utils])
|
||||||
(:require-macros [status-im.utils.views :as views]))
|
(:require-macros [status-im.utils.views :as views]))
|
||||||
|
|
||||||
(def state (reagent/atom {:tab :assets}))
|
(def state (reagent/atom {:tab :assets}))
|
||||||
|
@ -185,6 +187,29 @@
|
||||||
(styles/bottom-send-recv-buttons-lower anim-y button-group-height)
|
(styles/bottom-send-recv-buttons-lower anim-y button-group-height)
|
||||||
#(reset! to-show false))))))))
|
#(reset! to-show false))))))))
|
||||||
|
|
||||||
|
;; Note(rasom): sometimes `refreshing` might get stuck on iOS if action happened
|
||||||
|
;; too fast. By updating this atom in 1s we ensure that `refreshing?` property
|
||||||
|
;; is updated properly in this case.
|
||||||
|
(def updates-counter (reagent/atom 0))
|
||||||
|
|
||||||
|
(defn schedule-counter-reset []
|
||||||
|
(utils.utils/set-timeout
|
||||||
|
(fn []
|
||||||
|
(swap! updates-counter inc)
|
||||||
|
(when @(re-frame/subscribe [:wallet/refreshing-history?])
|
||||||
|
(schedule-counter-reset)))
|
||||||
|
1000))
|
||||||
|
|
||||||
|
(defn refresh-action []
|
||||||
|
(schedule-counter-reset)
|
||||||
|
(re-frame/dispatch [:wallet.ui/pull-to-refresh-history]))
|
||||||
|
|
||||||
|
(defn refresh-control [refreshing?]
|
||||||
|
(reagent/as-element
|
||||||
|
[rn/refresh-control
|
||||||
|
{:refreshing (boolean refreshing?)
|
||||||
|
:onRefresh refresh-action}]))
|
||||||
|
|
||||||
(views/defview account []
|
(views/defview account []
|
||||||
(views/letsubs [{:keys [name address] :as account} [:multiaccount/current-account]]
|
(views/letsubs [{:keys [name address] :as account} [:multiaccount/current-account]]
|
||||||
(let [anim-y (animation/create-value button-group-height)
|
(let [anim-y (animation/create-value button-group-height)
|
||||||
|
@ -197,7 +222,11 @@
|
||||||
:on-scroll (animation/event
|
:on-scroll (animation/event
|
||||||
[{:nativeEvent {:contentOffset {:y scroll-y}}}]
|
[{:nativeEvent {:contentOffset {:y scroll-y}}}]
|
||||||
{:useNativeDriver true})
|
{:useNativeDriver true})
|
||||||
:scrollEventThrottle 1}
|
:scrollEventThrottle 1
|
||||||
|
:refreshControl (refresh-control
|
||||||
|
(and
|
||||||
|
@updates-counter
|
||||||
|
@(re-frame/subscribe [:wallet/refreshing-history?])))}
|
||||||
[react/view {:padding-left 16}
|
[react/view {:padding-left 16}
|
||||||
[react/scroll-view {:horizontal true}
|
[react/scroll-view {:horizontal true}
|
||||||
[react/view {:flex-direction :row :padding-top 8 :padding-bottom 12}
|
[react/view {:flex-direction :row :padding-top 8 :padding-bottom 12}
|
||||||
|
|
|
@ -10,8 +10,7 @@
|
||||||
[status-im.ui.components.topbar :as topbar]
|
[status-im.ui.components.topbar :as topbar]
|
||||||
[status-im.ui.screens.wallet.transactions.styles :as styles]
|
[status-im.ui.screens.wallet.transactions.styles :as styles]
|
||||||
[quo.core :as quo]
|
[quo.core :as quo]
|
||||||
[status-im.ui.components.toolbar :as toolbar]
|
[status-im.ui.components.toolbar :as toolbar])
|
||||||
[status-im.wallet.core :as wallet])
|
|
||||||
(:require-macros [status-im.utils.views :refer [defview letsubs]]))
|
(:require-macros [status-im.utils.views :refer [defview letsubs]]))
|
||||||
|
|
||||||
(defn- transaction-icon
|
(defn- transaction-icon
|
||||||
|
@ -105,20 +104,6 @@
|
||||||
{:style {:color colors/blue}}
|
{:style {:color colors/blue}}
|
||||||
(i18n/label :t/check-on-etherscan)]]]))
|
(i18n/label :t/check-on-etherscan)]]]))
|
||||||
|
|
||||||
(defn refresh []
|
|
||||||
[react/touchable-highlight
|
|
||||||
{:on-press #(re-frame/dispatch [::wallet/restart])}
|
|
||||||
[react/view
|
|
||||||
{:style {:flex 1
|
|
||||||
:padding-horizontal 14
|
|
||||||
:flex-direction :row
|
|
||||||
:align-items :center
|
|
||||||
:background-color colors/blue-light
|
|
||||||
:height 52}}
|
|
||||||
[react/text
|
|
||||||
{:style {:color colors/blue}}
|
|
||||||
(i18n/label :t/refresh)]]])
|
|
||||||
|
|
||||||
(defn history-list
|
(defn history-list
|
||||||
[transactions-history-sections address]
|
[transactions-history-sections address]
|
||||||
(let [fetching-recent-history? @(re-frame/subscribe [:wallet/fetching-recent-tx-history? address])
|
(let [fetching-recent-history? @(re-frame/subscribe [:wallet/fetching-recent-tx-history? address])
|
||||||
|
@ -126,7 +111,6 @@
|
||||||
all-fetched? @(re-frame/subscribe [:wallet/tx-history-fetched? address])]
|
all-fetched? @(re-frame/subscribe [:wallet/tx-history-fetched? address])]
|
||||||
[react/view components.styles/flex
|
[react/view components.styles/flex
|
||||||
[etherscan-link address]
|
[etherscan-link address]
|
||||||
[refresh]
|
|
||||||
(when fetching-recent-history?
|
(when fetching-recent-history?
|
||||||
[react/view
|
[react/view
|
||||||
{:style {:flex 1
|
{:style {:flex 1
|
||||||
|
@ -142,8 +126,7 @@
|
||||||
[react/i18n-text {:style styles/empty-text
|
[react/i18n-text {:style styles/empty-text
|
||||||
:key (if (or fetching-recent-history? fetching-more-history?)
|
:key (if (or fetching-recent-history? fetching-more-history?)
|
||||||
:transactions-history-loading
|
:transactions-history-loading
|
||||||
:transactions-history-empty)}]
|
:transactions-history-empty)}]}]
|
||||||
:refreshing false}]
|
|
||||||
(when (and (not fetching-recent-history?)
|
(when (and (not fetching-recent-history?)
|
||||||
(not all-fetched?))
|
(not all-fetched?))
|
||||||
(if fetching-more-history?
|
(if fetching-more-history?
|
||||||
|
|
|
@ -576,7 +576,8 @@
|
||||||
[old-timeout]}))
|
[old-timeout]}))
|
||||||
|
|
||||||
(fx/defn restart-wallet-service
|
(fx/defn restart-wallet-service
|
||||||
[{:keys [db] :as cofx} force-start? watch-new-blocks?]
|
[{:keys [db] :as cofx}
|
||||||
|
{:keys [force-start? watch-new-blocks? ignore-syncing-settings?]}]
|
||||||
(when (or force-start? (:multiaccount db))
|
(when (or force-start? (:multiaccount db))
|
||||||
(let [watching-txs? (get db :wallet/watch-txs)
|
(let [watching-txs? (get db :wallet/watch-txs)
|
||||||
waiting? (get db :wallet/waiting-for-recent-history?)
|
waiting? (get db :wallet/waiting-for-recent-history?)
|
||||||
|
@ -586,7 +587,8 @@
|
||||||
"watching-txs?" watching-txs?
|
"watching-txs?" watching-txs?
|
||||||
"syncing-allowed?" syncing-allowed?
|
"syncing-allowed?" syncing-allowed?
|
||||||
"watch-new-blocks?" watch-new-blocks?)
|
"watch-new-blocks?" watch-new-blocks?)
|
||||||
(if (and syncing-allowed?
|
(if (and (or syncing-allowed?
|
||||||
|
ignore-syncing-settings?)
|
||||||
(or
|
(or
|
||||||
waiting?
|
waiting?
|
||||||
force-start?
|
force-start?
|
||||||
|
@ -594,12 +596,32 @@
|
||||||
(start-wallet cofx (boolean (or watch-new-blocks? watching-txs?)))
|
(start-wallet cofx (boolean (or watch-new-blocks? watching-txs?)))
|
||||||
(stop-wallet cofx)))))
|
(stop-wallet cofx)))))
|
||||||
|
|
||||||
|
(fx/defn restart-wallet-service-default
|
||||||
|
[cofx]
|
||||||
|
(restart-wallet-service cofx nil))
|
||||||
|
|
||||||
(fx/defn restart
|
(fx/defn restart
|
||||||
{:events [::restart]}
|
{:events [::restart]}
|
||||||
[{:keys [db] :as cofx}]
|
[{:keys [db] :as cofx}]
|
||||||
(fx/merge
|
(restart-wallet-service cofx {:force-start? true}))
|
||||||
{:db (dissoc db :wallet-service/restart-timeout)}
|
|
||||||
(restart-wallet-service true false)))
|
(def pull-to-refresh-cooldown-period (* 1 60 1000))
|
||||||
|
|
||||||
|
(fx/defn restart-on-pull
|
||||||
|
{:events [:wallet.ui/pull-to-refresh-history]}
|
||||||
|
[{:keys [db now] :as cofx}]
|
||||||
|
(let [last-pull (get db :wallet/last-pull-time)
|
||||||
|
watching? (get db :wallet/watch-txs)]
|
||||||
|
(when (and (not watching?)
|
||||||
|
(or (not last-pull)
|
||||||
|
(> (- now last-pull) pull-to-refresh-cooldown-period)))
|
||||||
|
(fx/merge
|
||||||
|
{:db (assoc db
|
||||||
|
:wallet/last-pull-time now
|
||||||
|
:wallet/refreshing-history? true)}
|
||||||
|
(restart-wallet-service
|
||||||
|
{:force-start? true
|
||||||
|
:ignore-syncing-settings? true})))))
|
||||||
|
|
||||||
(fx/defn watch-tx
|
(fx/defn watch-tx
|
||||||
{:events [:watch-tx]}
|
{:events [:watch-tx]}
|
||||||
|
@ -616,7 +638,8 @@
|
||||||
(assoc :wallet/watch-txs-timeout timeout))
|
(assoc :wallet/watch-txs-timeout timeout))
|
||||||
::utils.utils/clear-timeouts
|
::utils.utils/clear-timeouts
|
||||||
[old-timeout]}
|
[old-timeout]}
|
||||||
(restart-wallet-service true true))))
|
(restart-wallet-service {:force-start? true
|
||||||
|
:watch-new-blocks? true}))))
|
||||||
|
|
||||||
(fx/defn stop-watching-txs
|
(fx/defn stop-watching-txs
|
||||||
{:events [::stop-watching-txs]}
|
{:events [::stop-watching-txs]}
|
||||||
|
@ -625,7 +648,7 @@
|
||||||
{:db (dissoc db
|
{:db (dissoc db
|
||||||
:wallet/watch-txs
|
:wallet/watch-txs
|
||||||
:wallet/watch-txs-timeout)}
|
:wallet/watch-txs-timeout)}
|
||||||
(restart-wallet-service false false)))
|
(restart-wallet-service-default)))
|
||||||
|
|
||||||
(fx/defn stop-watching-tx
|
(fx/defn stop-watching-tx
|
||||||
[{:keys [db] :as cofx} tx]
|
[{:keys [db] :as cofx} tx]
|
||||||
|
|
Loading…
Reference in New Issue