fix(wallet): fix activity time filter

Also optimize for no filter instead of given specific time range.

Closes: #11717
This commit is contained in:
Stefan 2023-07-31 19:17:40 +01:00 committed by Stefan Dunca
parent 2e1b60ab06
commit d253ba8a2a
4 changed files with 73 additions and 38 deletions

View File

@ -429,4 +429,7 @@ QtObject:
if (self.addresses == addresses and self.chainIds == chainIds):
return
self.setFilterAddresses(addresses)
self.setFilterChains(chainIds)
self.setFilterChains(chainIds)
proc noLimitTimestamp*(self: Controller): int {.slot.} =
return backend_activity.noLimitTimestampForPeriod

View File

@ -12,7 +12,7 @@ import backend
export response_type
# see status-go/services/wallet/activity/filter.go NoLimitTimestampForPeriod
const noLimitTimestampForPeriod = 0
const noLimitTimestampForPeriod* = 0
# Declared in services/wallet/activity/service.go
const eventActivityFilteringDone*: string = "wallet-activity-filtering-done"

View File

@ -243,8 +243,8 @@ Column {
StatusDateRangePicker {
id: dialog
anchors.centerIn: parent
fromTimestamp: activityFilterStore.fromTimestamp
toTimestamp: activityFilterStore.toTimestamp
fromTimestamp: activityFilterStore.currentActivityStartTimestamp
toTimestamp: new Date().valueOf()
onNewRangeSet: {
activityFilterStore.setCustomTimeRange(fromTimestamp, toTimestamp)
activityFilterStore.setSelectedTimestamp(Constants.TransactionTimePeriod.Custom)

View File

@ -20,7 +20,7 @@ QtObject {
savedAddressFilters.length !== 0
readonly property QtObject _d: QtObject {
id: _d
id: d
function toggleFilterState(filters, attribute, allFiltersCount) {
let tempFilters = filters
@ -48,79 +48,111 @@ QtObject {
}
return tempFilters
}
property bool fromTimestampNoLimit: true
property bool toTimestampNoLimit: true
function setFromTimestamp(value) {
root.fromTimestamp = value
fromTimestampNoLimit = false
}
function resetFromTimestamp() {
root.fromTimestamp = 0
fromTimestampNoLimit = true
}
function setToTimestamp(value) {
root.toTimestamp = value
toTimestampNoLimit = false
}
function resetToTimestamp() {
root.toTimestamp = 0
toTimestampNoLimit = true
}
}
// Time filters
property int selectedTime: Constants.TransactionTimePeriod.All
property double fromTimestamp: activityController.status.startTimestamp * 1000
property double toTimestamp: new Date().valueOf()
// If noLimitTimestamp or double timestamp value otherwise
property double fromTimestamp: 0
property double toTimestamp: 0
readonly property double currentActivityStartTimestamp: activityController.status.startTimestamp * 1000.0
function setSelectedTimestamp(selcTime) {
selectedTime = selcTime
switch(selectedTime) {
case Constants.TransactionTimePeriod.All:
fromTimestamp = 0
toTimestamp = 0
d.resetFromTimestamp()
d.resetToTimestamp()
break
case Constants.TransactionTimePeriod.Today:
let dt = new Date()
fromTimestamp = dt.setHours(0,0,0,0).valueOf() // Today
dt.setDate(dt.getDate() + 1) // next day...
dt.setHours(0, 0, 0, -1) // ... but just 1ms before midnight -> whole day included
toTimestamp = dt.valueOf()
d.setFromTimestamp(dt.setHours(0,0,0,0).valueOf()) // Today
d.resetToTimestamp()
break
case Constants.TransactionTimePeriod.Yesterday:
let dt1 = new Date()
dt1.setDate(dt1.getDate() - 1)
dt1.setHours(0, 0, 0, 0)
fromTimestamp = dt1.valueOf() // Yesterday
d.setFromTimestamp(dt1.valueOf()) // Yesterday
dt1.setDate(dt1.getDate() + 1)
dt1.setHours(0, 0, 0, -1)
toTimestamp = dt1.valueOf()
d.setToTimestamp(dt1.valueOf())
break
case Constants.TransactionTimePeriod.ThisWeek:
let dt2 = LocaleUtils.getFirstDayOfTheCurrentWeek()
dt2.setHours(0, 0, 0, 0)
fromTimestamp = dt2.valueOf() // First day of this week
toTimestamp = new Date().valueOf() // Today
d.setFromTimestamp(dt2.valueOf()) // First day of this week
d.resetToTimestamp()
break
case Constants.TransactionTimePeriod.LastWeek:
let dt3 = LocaleUtils.getFirstDayOfTheCurrentWeek()
dt3.setDate(dt3.getDate() - 7)
dt3.setHours(0, 0, 0, 0)
fromTimestamp = dt3.valueOf() // First day of last week
d.setFromTimestamp(dt3.valueOf()) // First day of last week
dt3.setDate(dt3.getDate() + 6)
dt3.setHours(23, 59, 59, 0)
toTimestamp = dt3.valueOf() // Last day of last week
d.setToTimestamp(dt3.valueOf()) // Last day of last week
break
case Constants.TransactionTimePeriod.ThisMonth:
let dt4 = new Date()
dt4.setDate(1)
dt4.setHours(0, 0, 0, 0)
fromTimestamp = dt4.valueOf() // This month
toTimestamp = new Date().valueOf()
d.setFromTimestamp(dt4.valueOf()) // This month
d.resetToTimestamp()
break
case Constants.TransactionTimePeriod.LastMonth:
let dt5 = new Date()
dt5.setDate(1)
dt5.setMonth(dt5.getMonth()-1)
dt5.setHours(0, 0, 0, 0)
fromTimestamp = dt5.valueOf() // Last month
d.setFromTimestamp(dt5.valueOf()) // Last month
dt5.setDate(new Date(dt5.getFullYear(), dt5.getMonth(), 0).getDate() + 2)
dt5.setHours(0, 0, 0, -1)
toTimestamp = dt5.valueOf()
d.setToTimestamp(dt5.valueOf())
break
default:
return ""
}
activityController.setFilterTime(root.fromTimestamp/1000, root.toTimestamp/1000)
activityController.updateFilter()
applyTimeRange()
}
function setCustomTimeRange(fromTimestamp, toTimestamp) {
root.fromTimestamp = fromTimestamp
root.toTimestamp = toTimestamp
activityController.setFilterTime(root.fromTimestamp/1000, root.toTimestamp/1000)
function setCustomTimeRange(fromTimestamp, toTimestamp) {
d.setFromTimestamp(fromTimestamp)
d.setToTimestamp(toTimestamp)
applyTimeRange()
}
function applyTimeRange() {
const startTimestamp = d.fromTimestampNoLimit
? activityController.noLimitTimestamp
: fromTimestamp/1000
const endTimestamp = d.toTimestampNoLimit
? activityController.noLimitTimestamp
: toTimestamp/1000
activityController.setFilterTime(startTimestamp, endTimestamp)
activityController.updateFilter()
}
@ -128,7 +160,7 @@ QtObject {
property var typeFilters: []
function toggleType(type, allFiltersCount) {
// update filters
typeFilters = _d.toggleFilterState(typeFilters, type, allFiltersCount)
typeFilters = d.toggleFilterState(typeFilters, type, allFiltersCount)
// Set backend values
activityController.setFilterType(JSON.stringify(typeFilters))
activityController.updateFilter()
@ -138,7 +170,7 @@ QtObject {
property var statusFilters: []
function toggleStatus(status, allFiltersCount) {
// update filters
statusFilters = _d.toggleFilterState(statusFilters, status, allFiltersCount)
statusFilters = d.toggleFilterState(statusFilters, status, allFiltersCount)
// Set backend values
activityController.setFilterStatus(JSON.stringify(statusFilters))
activityController.updateFilter()
@ -149,7 +181,7 @@ QtObject {
property var tokensFilter: []
function toggleToken(symbol) {
// update filters
tokensFilter = _d.toggleFilterState(tokensFilter, symbol, tokensList.count)
tokensFilter = d.toggleFilterState(tokensFilter, symbol, tokensList.count)
// Set backend values
activityController.setFilterAssets(JSON.stringify(tokensFilter), false)
activityController.updateFilter()
@ -161,7 +193,7 @@ QtObject {
property var collectiblesFilter: []
function toggleCollectibles(id) {
// update filters
collectiblesFilter = _d.toggleFilterState(collectiblesFilter, id, collectiblesList.count)
collectiblesFilter = d.toggleFilterState(collectiblesFilter, id, collectiblesList.count)
// TODO go side filtering is pending
// activityController.setFilterCollectibles(JSON.stringify(collectiblesFilter))
// activityController.updateFilter()
@ -176,7 +208,7 @@ QtObject {
}
function toggleRecents(address) {
// update filters
recentsFilters = _d.toggleFilterState(recentsFilters, address, recentsList.count)
recentsFilters = d.toggleFilterState(recentsFilters, address, recentsList.count)
activityController.setFilterToAddresses(JSON.stringify(recentsFilters.concat(savedAddressFilters)))
activityController.updateFilter()
}
@ -195,7 +227,7 @@ QtObject {
property var savedAddressFilters: []
function toggleSavedAddress(address) {
// update filters
savedAddressFilters = _d.toggleFilterState(savedAddressFilters, address, savedAddressList.count)
savedAddressFilters = d.toggleFilterState(savedAddressFilters, address, savedAddressList.count)
// Set backend values
activityController.setFilterToAddresses(JSON.stringify(recentsFilters.concat(savedAddressFilters)))
activityController.updateFilter()
@ -206,7 +238,7 @@ QtObject {
}
function applyAllFilters() {
activityController.setFilterTime(fromTimestamp/1000, toTimestamp/1000)
applyTimeRange()
activityController.setFilterType(JSON.stringify(typeFilters))
activityController.setFilterStatus(JSON.stringify(statusFilters))
activityController.setFilterAssets(JSON.stringify(tokensFilter), false)
@ -218,8 +250,8 @@ QtObject {
function resetAllFilters() {
selectedTime = Constants.TransactionTimePeriod.All
fromTimestamp = activityController.status.startTimestamp * 1000
toTimestamp = new Date().valueOf()
d.resetFromTimestamp()
d.resetToTimestamp()
typeFilters = []
statusFilters = []
tokensFilter = []