status-desktop/ui/app/AppLayouts/Wallet/controls/StatusDateRangePicker.qml

124 lines
4.2 KiB
QML

import QtQuick 2.14
import QtQuick.Layouts 1.15
import QtQml.Models 2.15
import StatusQ.Core.Theme 0.1
import StatusQ.Core 0.1
import StatusQ.Controls 0.1
import StatusQ.Components 0.1
import StatusQ.Popups.Dialog 0.1
StatusDialog {
id: root
property double fromTimestamp: Date.now()
property double toTimestamp: Date.now()
signal newRangeSet(double fromTimestamp, double toTimestamp)
title: qsTr("Filter activity by period")
QtObject {
id: d
function getFromTimestampUTC(date) {
date.setHours(0, 0, 0, 0)
return date.valueOf()
}
function getToTimestampUTC(date) {
date.setDate(date.getDate() + 1) // next day...
date.setHours(0, 0, 0, -1) // ... but just 1ms before midnight -> whole day included
return date.valueOf()
}
}
contentItem: Item {
GridLayout {
width: parent.width
anchors.verticalCenter: parent.verticalCenter
columns: 3
columnSpacing: 16
rowSpacing: 8
StatusBaseText {
text: qsTr("From")
}
RowLayout {
Layout.fillWidth: true
StatusBaseText {
text: qsTr("To")
}
Item { Layout.fillWidth: true }
StatusFlatButton {
horizontalPadding: 0
verticalPadding: 0
hoverColor: Theme.palette.transparent
text: qsTr("Now")
enabled: !toInput.isTodaySelected
onClicked: toInput.selectedDate = new Date()
}
}
StatusDatePicker {
Layout.alignment: Qt.AlignTop
Layout.row: 1
Layout.preferredWidth: 168
readonly property bool hasChange: selectedDate.valueOf() !== root.fromTimestamp
id: fromInput
selectedDate: new Date(fromTimestamp)
customTodayText: qsTr("Now")
validationError: {
if (selectedDate.valueOf() > toInput.selectedDate.valueOf() && !toInput.isTodaySelected) // from > to; today in both is fine
return qsTr("'From' can't be later than 'To'")
if (selectedDate.valueOf() > new Date()) // from > now
return qsTr("Can't set date to future")
return ""
}
}
StatusDatePicker {
Layout.alignment: Qt.AlignTop
Layout.preferredWidth: 168
readonly property bool hasChange: selectedDate.valueOf() !== root.toTimestamp
id: toInput
selectedDate: new Date(toTimestamp)
customTodayText: qsTr("Now")
validationError: selectedDate.valueOf() > new Date() // to > now
? qsTr("Can't set date to future") : ""
}
StatusButton {
Layout.alignment: Qt.AlignTop
Layout.preferredHeight: toInput.control.height
text: qsTr("Reset")
enabled: fromInput.hasChange || toInput.hasChange
normalColor: Theme.palette.transparent
borderColor: Theme.palette.baseColor2
onClicked: {
fromInput.selectedDate = new Date(root.fromTimestamp)
toInput.selectedDate = new Date(root.toTimestamp)
}
}
}
}
footer: StatusDialogFooter {
rightButtons: ObjectModel {
StatusButton {
text: qsTr("Apply")
enabled: !fromInput.validationError && !toInput.validationError && (fromInput.hasChange || toInput.hasChange)
onClicked: {
root.newRangeSet(d.getFromTimestampUTC(fromInput.selectedDate),
toInput.isTodaySelected ? new Date().valueOf() // now means now, including the time today
: d.getToTimestampUTC(toInput.selectedDate))
root.close()
}
}
}
}
}