status-desktop/ui/imports/shared/stores/ChartStoreBase.qml

126 lines
4.0 KiB
QML
Raw Normal View History

import QtQuick 2.13
import utils 1.0
Item {
id: root
// @see src/app_service/service/token/async_tasks.nim BalanceHistoryTimeInterval
enum TimeRange {
Weekly = 0,
Monthly,
HalfYearly,
Yearly,
All
}
readonly property var timeRangeTabsModel: [
{text: qsTr("7D"), enabled: true, timeRange: ChartStoreBase.TimeRange.Weekly},
{text: qsTr("1M"), enabled: true, timeRange: ChartStoreBase.TimeRange.Monthly},
{text: qsTr("6M"), enabled: true, timeRange: ChartStoreBase.TimeRange.HalfYearly},
{text: qsTr("1Y"), enabled: true, timeRange: ChartStoreBase.TimeRange.Yearly},
{text: qsTr("ALL"), enabled: true, timeRange: ChartStoreBase.TimeRange.All}]
property var weeklyData: []
property var monthlyData: []
property var halfYearlyData: []
property var yearlyData: []
property var allData: []
property var weeklyTimeRange: []
property var monthlyTimeRange: []
property var halfYearlyTimeRange: []
property var yearlyTimeRange: []
property var allTimeRange: []
property int monthlyMaxTicks: monthlyTimeRange.length/d.hoursInADay
property int weeklyMaxTicks: weeklyTimeRange.length/d.hoursInADay
property int halfYearlyMaxTicks: halfYearlyTimeRange.length/d.avgLengthOfMonth
property int yearlyMaxTicks: yearlyTimeRange.length/d.avgLengthOfMonth
property int allTimeRangeTicks: 0
// BEWARE that timeRange, dataRange and maxTicks properties are coupled with the timeRangeTabsModel order through
// indexing. See StatusChartPanel.timeRangeTabBarIndex
readonly property var timeRange: [
{'7D': weeklyTimeRange},
{'1M': monthlyTimeRange},
{'6M': halfYearlyTimeRange},
{'1Y': yearlyTimeRange},
{'ALL': allTimeRange}
]
readonly property var dataRange: [
{'7D': weeklyData},
{'1M': monthlyData},
{'6M': halfYearlyData},
{'1Y': yearlyData},
{'ALL': allData}
]
readonly property var maxTicks: [
{'7D': weeklyMaxTicks},
{'1M': monthlyMaxTicks},
{'6M': halfYearlyMaxTicks},
{'1Y': yearlyMaxTicks},
{'ALL': allTimeRangeTicks}
]
/// \timeRange is the time range of the data that was updated
signal newDataReady(int timeRange)
function timeRangeEnumToStr(enumVal) {
return d.timeRangeTabsModel.get(enumVal)
}
function timeRangeStrToEnum(str) {
return d.timeRangeStrToEnumMap.get(str)
}
/// \arg timeRange: of type ChartStoreBase.TimeRange
function updateRequestTime(timeRange) {
d.requestTimes.set(timeRange, new Date())
}
function resetRequestTime() {
d.requestTimes.set(timeRange, new Date(0))
}
/// \arg timeRange: of type ChartStoreBase.TimeRange
function isTimeToRequest(timeRange) {
if(d.requestTimes.has(timeRange)) {
const hoursToIgnore = 12
let existing = d.requestTimes.get(timeRange)
let willBeMs = new Date(existing.getTime() + (hoursToIgnore * 3600000))
return new Date(willBeMs) < new Date()
}
else
return true
}
QtObject {
id: d
readonly property int hoursInADay: 24
readonly property int avgLengthOfMonth: 30
property var timeRangeEnumToStrMap: null
property var timeRangeStrToEnumMap: null
property var requestTimes: null
}
Component.onCompleted: {
if(d.timeRangeEnumToStrMap === null) {
d.timeRangeEnumToStrMap = new Map()
for (const x of timeRangeTabsModel) {
d.timeRangeEnumToStrMap.set(x.timeRange, x.text)
}
d.timeRangeStrToEnumMap = new Map()
for (const x of d.timeRangeEnumToStrMap.entries()) {
let key = x[0]
let val = x[1]
d.timeRangeStrToEnumMap.set(val, key)
}
}
if(d.requestTimes === null) {
d.requestTimes = new Map()
}
}
}