feat(@desktop/wallet): Glue for acitvity filter UI and backend
This commit is contained in:
parent
60d78eb0ad
commit
47c76714db
|
@ -5,6 +5,7 @@ import QtQuick.Layouts 1.14
|
||||||
import AppLayouts.Wallet.controls 1.0
|
import AppLayouts.Wallet.controls 1.0
|
||||||
import AppLayouts.Wallet.popups 1.0
|
import AppLayouts.Wallet.popups 1.0
|
||||||
import AppLayouts.Wallet.panels 1.0
|
import AppLayouts.Wallet.panels 1.0
|
||||||
|
import AppLayouts.Wallet.stores 1.0
|
||||||
import AppLayouts.stores 1.0
|
import AppLayouts.stores 1.0
|
||||||
|
|
||||||
import StatusQ.Core 0.1
|
import StatusQ.Core 0.1
|
||||||
|
@ -31,285 +32,7 @@ SplitView {
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
id: d
|
id: d
|
||||||
property int selectedTime: Constants.TransactionTimePeriod.All
|
|
||||||
property double fromTimestamp: new Date().setDate(new Date().getDate() - 7)
|
|
||||||
property double toTimestamp: Date.now()
|
|
||||||
function changeSelectedTime(newTime) {
|
|
||||||
selectedTime = newTime
|
|
||||||
}
|
|
||||||
function setCustomTimeRange(fromTimestamp , toTimestamp) {
|
|
||||||
d.fromTimestamp = fromTimestamp
|
|
||||||
d.toTimestamp = toTimestamp
|
|
||||||
}
|
|
||||||
property var typeFilters: [
|
|
||||||
Constants.TransactionType.Send,
|
|
||||||
Constants.TransactionType.Receive,
|
|
||||||
Constants.TransactionType.Buy,
|
|
||||||
Constants.TransactionType.Swap,
|
|
||||||
Constants.TransactionType.Bridge]
|
|
||||||
|
|
||||||
function toggleType(type) {
|
|
||||||
let tempFilters = typeFilters
|
|
||||||
let allCheckedIs = false
|
|
||||||
if(tempFilters.length === 5)
|
|
||||||
allCheckedIs = true
|
|
||||||
|
|
||||||
// if all were selected then only select one of them
|
|
||||||
if(allCheckedIs) {
|
|
||||||
tempFilters = [type]
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// if last one is being deselected, select all
|
|
||||||
if(tempFilters.length === 1 && tempFilters[0] === type) {
|
|
||||||
tempFilters = [
|
|
||||||
Constants.TransactionType.Send,
|
|
||||||
Constants.TransactionType.Receive,
|
|
||||||
Constants.TransactionType.Buy,
|
|
||||||
Constants.TransactionType.Swap,
|
|
||||||
Constants.TransactionType.Bridge]
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
let index = tempFilters.indexOf(type)
|
|
||||||
if(index === -1) {
|
|
||||||
tempFilters.push(type)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tempFilters.splice(index, 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
typeFilters = tempFilters
|
|
||||||
}
|
|
||||||
|
|
||||||
property var statusFilters: [
|
|
||||||
Constants.TransactionStatus.Failed,
|
|
||||||
Constants.TransactionStatus.Pending,
|
|
||||||
Constants.TransactionStatus.Complete,
|
|
||||||
Constants.TransactionStatus.Finished]
|
|
||||||
|
|
||||||
function toggleStatus(status) {
|
|
||||||
let tempFilters = statusFilters
|
|
||||||
let allCheckedIs = false
|
|
||||||
if(tempFilters.length === 4)
|
|
||||||
allCheckedIs = true
|
|
||||||
|
|
||||||
// if all were selected then only select one of them
|
|
||||||
if(allCheckedIs) {
|
|
||||||
tempFilters = [status]
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// if last one is being deselected, select all
|
|
||||||
if(tempFilters.length === 1 && tempFilters[0] === status) {
|
|
||||||
tempFilters = [
|
|
||||||
Constants.TransactionStatus.Failed,
|
|
||||||
Constants.TransactionStatus.Pending,
|
|
||||||
Constants.TransactionStatus.Complete,
|
|
||||||
Constants.TransactionStatus.Finished]
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
let index = tempFilters.indexOf(status)
|
|
||||||
if(index === -1) {
|
|
||||||
tempFilters.push(status)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tempFilters.splice(index, 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
statusFilters = tempFilters
|
|
||||||
}
|
|
||||||
|
|
||||||
property var simulatedAssetsModel: WalletAssetsModel {}
|
|
||||||
function toggleToken(tokenSymbol) {
|
|
||||||
let tempodel = simulatedAssetsModel
|
|
||||||
let allChecked = true
|
|
||||||
let allChecked1 = true
|
|
||||||
let checkedTokens = []
|
|
||||||
simulatedAssetsModel = []
|
|
||||||
for (let k =0; k<tempodel.count; k++) {
|
|
||||||
if(!tempodel.get(k).checked)
|
|
||||||
allChecked = false
|
|
||||||
else {
|
|
||||||
checkedTokens.push(tempodel.get(k))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(allChecked) {
|
|
||||||
for (let i = 0; i<tempodel.count; i++) {
|
|
||||||
if(tempodel.get(i).symbol === tokenSymbol) {
|
|
||||||
tempodel.get(i).checked = true
|
|
||||||
}
|
|
||||||
else
|
|
||||||
tempodel.get(i).checked = false
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if(checkedTokens.length === 1 && checkedTokens[0].symbol === tokenSymbol) {
|
|
||||||
for (let j = 0; j<tempodel.count; j++) {
|
|
||||||
tempodel.get(j).checked = true
|
|
||||||
tempodel.get(j).allChecked = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
for (let l =0; l<tempodel.count; l++) {
|
|
||||||
if(tempodel.get(l).symbol === tokenSymbol)
|
|
||||||
tempodel.get(l).checked = !tempodel.get(l).checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let l =0; l<tempodel.count; l++) {
|
|
||||||
if(!tempodel.get(l).checked)
|
|
||||||
allChecked1 = false
|
|
||||||
}
|
|
||||||
for (let j =0; j<tempodel.count; j++) {
|
|
||||||
tempodel.get(j).allChecked = allChecked1
|
|
||||||
}
|
|
||||||
simulatedAssetsModel = tempodel
|
|
||||||
}
|
|
||||||
|
|
||||||
property var simulatedCollectiblesModel: CollectiblesModel {}
|
|
||||||
function toggleCollectibles(name) {
|
|
||||||
let tempodel = simulatedCollectiblesModel
|
|
||||||
let allChecked = true
|
|
||||||
let allChecked1 = true
|
|
||||||
let checkedTokens = []
|
|
||||||
simulatedCollectiblesModel = []
|
|
||||||
for (let k =0; k<tempodel.count; k++) {
|
|
||||||
if(!tempodel.get(k).checked)
|
|
||||||
allChecked = false
|
|
||||||
else {
|
|
||||||
checkedTokens.push(tempodel.get(k))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(allChecked) {
|
|
||||||
for (let i = 0; i<tempodel.count; i++) {
|
|
||||||
if(tempodel.get(i).name === name) {
|
|
||||||
tempodel.get(i).checked = true
|
|
||||||
}
|
|
||||||
else
|
|
||||||
tempodel.get(i).checked = false
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if(checkedTokens.length === 1 && checkedTokens[0].name === name) {
|
|
||||||
for (let j = 0; j<tempodel.count; j++) {
|
|
||||||
tempodel.get(j).checked = true
|
|
||||||
tempodel.get(j).allChecked = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
for (let l =0; l<tempodel.count; l++) {
|
|
||||||
if(tempodel.get(l).name === name)
|
|
||||||
tempodel.get(l).checked = !tempodel.get(l).checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let l =0; l<tempodel.count; l++) {
|
|
||||||
if(!tempodel.get(l).checked)
|
|
||||||
allChecked1 = false
|
|
||||||
}
|
|
||||||
for (let j =0; j<tempodel.count; j++) {
|
|
||||||
tempodel.get(j).allChecked = allChecked1
|
|
||||||
}
|
|
||||||
simulatedCollectiblesModel = tempodel
|
|
||||||
}
|
|
||||||
|
|
||||||
property var recipeintModel: RecipientModel {}
|
property var recipeintModel: RecipientModel {}
|
||||||
property var simulatedSavedList: recipeintModel.savedAddresses
|
|
||||||
property var simulatedRecentsList: recipeintModel.recents
|
|
||||||
|
|
||||||
function toggleSavedAddress(address) {
|
|
||||||
let tempodel = simulatedSavedList
|
|
||||||
let allChecked = true
|
|
||||||
let allChecked1 = true
|
|
||||||
let checkedTokens = []
|
|
||||||
simulatedSavedList = []
|
|
||||||
for (let k =0; k<tempodel.count; k++) {
|
|
||||||
if(!tempodel.get(k).checked)
|
|
||||||
allChecked = false
|
|
||||||
else {
|
|
||||||
checkedTokens.push(tempodel.get(k))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(allChecked) {
|
|
||||||
for (let i = 0; i<tempodel.count; i++) {
|
|
||||||
if(tempodel.get(i).address === address) {
|
|
||||||
tempodel.get(i).checked = true
|
|
||||||
}
|
|
||||||
else
|
|
||||||
tempodel.get(i).checked = false
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if(checkedTokens.length === 1 && checkedTokens[0].address === address) {
|
|
||||||
for (let j = 0; j<tempodel.count; j++) {
|
|
||||||
tempodel.get(j).checked = true
|
|
||||||
tempodel.get(j).allChecked = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
for (let l =0; l<tempodel.count; l++) {
|
|
||||||
if(tempodel.get(l).address === address)
|
|
||||||
tempodel.get(l).checked = !tempodel.get(l).checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let l =0; l<tempodel.count; l++) {
|
|
||||||
if(!tempodel.get(l).checked)
|
|
||||||
allChecked1 = false
|
|
||||||
}
|
|
||||||
for (let j =0; j<tempodel.count; j++) {
|
|
||||||
tempodel.get(j).allChecked = allChecked1
|
|
||||||
}
|
|
||||||
simulatedSavedList = tempodel
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleRecents(address) {
|
|
||||||
let tempodel = simulatedRecentsList
|
|
||||||
let allChecked = true
|
|
||||||
let allChecked1 = true
|
|
||||||
let checkedTokens = []
|
|
||||||
simulatedRecentsList = []
|
|
||||||
for (let k =0; k<tempodel.count; k++) {
|
|
||||||
if(!tempodel.get(k).checked)
|
|
||||||
allChecked = false
|
|
||||||
else {
|
|
||||||
checkedTokens.push(tempodel.get(k))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(allChecked) {
|
|
||||||
for (let i = 0; i<tempodel.count; i++) {
|
|
||||||
let addresstoFind = tempodel.get(i).to.toLowerCase() === d.store.overview.mixedcaseAddress.toLowerCase() ? tempodel.get(i).from : tempodel.get(i).to
|
|
||||||
if(addresstoFind === address) {
|
|
||||||
tempodel.get(i).checked = true
|
|
||||||
}
|
|
||||||
else
|
|
||||||
tempodel.get(i).checked = false
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if(checkedTokens.length === 1 && (checkedTokens[0].to.toLowerCase() === d.store.overview.mixedcaseAddress.toLowerCase() ? checkedTokens[0].from : checkedTokens[0].to) === address) {
|
|
||||||
for (let j = 0; j<tempodel.count; j++) {
|
|
||||||
tempodel.get(j).checked = true
|
|
||||||
tempodel.get(j).allChecked = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
for (let l =0; l<tempodel.count; l++) {
|
|
||||||
let addresstoFind = tempodel.get(l).to.toLowerCase() === d.store.overview.mixedcaseAddress.toLowerCase() ? tempodel.get(l).from : tempodel.get(l).to
|
|
||||||
if(addresstoFind === address )
|
|
||||||
tempodel.get(l).checked = !tempodel.get(l).checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let m =0; m<tempodel.count; m++) {
|
|
||||||
if(!tempodel.get(m).checked)
|
|
||||||
allChecked1 = false
|
|
||||||
}
|
|
||||||
for (let n =0; n<tempodel.count; n++) {
|
|
||||||
tempodel.get(n).allChecked = allChecked1
|
|
||||||
}
|
|
||||||
simulatedRecentsList = tempodel
|
|
||||||
}
|
|
||||||
|
|
||||||
property var store: QtObject {
|
property var store: QtObject {
|
||||||
property var overview: ({
|
property var overview: ({
|
||||||
|
@ -333,6 +56,35 @@ SplitView {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
property var activityController: QtObject {
|
||||||
|
function setFilterTime(fromTimestamp, toTimestamp) {
|
||||||
|
console.warn("activityController:: setFilterTime:: fromTimestamp: ",fromTimestamp, " toTimestamp:: ",toTimestamp)
|
||||||
|
}
|
||||||
|
function setFilterType(typeFilters) {
|
||||||
|
console.warn("activityController:: setFilterType:: ",typeFilters)
|
||||||
|
}
|
||||||
|
function setFilterStatus(statusFilters) {
|
||||||
|
console.warn("activityController:: setFilterStatus:: ",statusFilters)
|
||||||
|
}
|
||||||
|
function setFilterAssets(tokensFilter) {
|
||||||
|
console.warn("activityController:: setFilterAssets:: ",tokensFilter)
|
||||||
|
}
|
||||||
|
function setFilterToAddresses(filters) {
|
||||||
|
console.warn("activityController:: setFilterToAddresses:: ",filters)
|
||||||
|
}
|
||||||
|
function updateFilter() {
|
||||||
|
console.warn("activityController:: updateFilter")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ActivityFiltersStore {
|
||||||
|
id: actvityStore
|
||||||
|
tokensList: WalletAssetsModel {}
|
||||||
|
collectiblesList: CollectiblesModel {}
|
||||||
|
savedAddressesModel: d.recipeintModel.savedAddresses
|
||||||
|
activityController: d.activityController
|
||||||
|
areTestNetworksEnabled: false
|
||||||
}
|
}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
@ -344,133 +96,7 @@ SplitView {
|
||||||
width: 800
|
width: 800
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
store: d.store
|
store: d.store
|
||||||
fromTimestamp: d.fromTimestamp
|
activityFilterStore: actvityStore
|
||||||
toTimestamp: d.toTimestamp
|
|
||||||
selectedTime: d.selectedTime
|
|
||||||
typeFilters: d.typeFilters
|
|
||||||
statusFilters: d.statusFilters
|
|
||||||
assetsList: d.simulatedAssetsModel
|
|
||||||
collectiblesList: d.simulatedCollectiblesModel
|
|
||||||
savedAddressList: d.simulatedSavedList
|
|
||||||
recentsList: d.simulatedRecentsList
|
|
||||||
onChangeSelectedTime: d.changeSelectedTime(selectedTime)
|
|
||||||
onSetCustomTimeRange: d.setCustomTimeRange(from, to)
|
|
||||||
onToggleType: d.toggleType(type)
|
|
||||||
onToggleStatus: d.toggleStatus(status)
|
|
||||||
onToggleToken: d.toggleToken(tokenSymbol)
|
|
||||||
onToggleCollectibles: d.toggleCollectibles(name)
|
|
||||||
onToggleSavedAddress: d.toggleSavedAddress(address)
|
|
||||||
onToggleRecents: d.toggleRecents(address)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LogsAndControlsPanel {
|
|
||||||
id: logsAndControlsPanel
|
|
||||||
|
|
||||||
SplitView.minimumHeight: 100
|
|
||||||
SplitView.preferredHeight: 200
|
|
||||||
|
|
||||||
logsView.logText: logs.logText
|
|
||||||
|
|
||||||
ButtonGroup {
|
|
||||||
buttons: periodRow.children
|
|
||||||
}
|
|
||||||
|
|
||||||
Column {
|
|
||||||
spacing: 20
|
|
||||||
|
|
||||||
Row {
|
|
||||||
id: periodRow
|
|
||||||
spacing: 20
|
|
||||||
|
|
||||||
RadioButton {
|
|
||||||
checked: true
|
|
||||||
text: "All"
|
|
||||||
onCheckedChanged: if(checked) { d.selectedTime = Constants.TransactionTimePeriod.All}
|
|
||||||
}
|
|
||||||
RadioButton {
|
|
||||||
text: "Today"
|
|
||||||
onCheckedChanged: if(checked) { d.selectedTime = Constants.TransactionTimePeriod.Today}
|
|
||||||
}
|
|
||||||
RadioButton {
|
|
||||||
text: "Yesterday"
|
|
||||||
onCheckedChanged: if(checked) { d.selectedTime = Constants.TransactionTimePeriod.Yesterday}
|
|
||||||
}
|
|
||||||
RadioButton {
|
|
||||||
text: "ThisWeek"
|
|
||||||
onCheckedChanged: if(checked) { d.selectedTime = Constants.TransactionTimePeriod.ThisWeek}
|
|
||||||
}
|
|
||||||
RadioButton {
|
|
||||||
text: "LastWeek"
|
|
||||||
onCheckedChanged: if(checked) { d.selectedTime = Constants.TransactionTimePeriod.LastWeek}
|
|
||||||
}
|
|
||||||
RadioButton {
|
|
||||||
text: "ThisMonth"
|
|
||||||
onCheckedChanged: if(checked) { d.selectedTime = Constants.TransactionTimePeriod.ThisMonth}
|
|
||||||
}
|
|
||||||
RadioButton {
|
|
||||||
text: "LastMonth"
|
|
||||||
onCheckedChanged: if(checked) { d.selectedTime = Constants.TransactionTimePeriod.LastMonth}
|
|
||||||
}
|
|
||||||
RadioButton {
|
|
||||||
text: "Custom"
|
|
||||||
onCheckedChanged: if(checked) { d.selectedTime = Constants.TransactionTimePeriod.Custom}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
spacing: 20
|
|
||||||
CheckBox {
|
|
||||||
text: "Send"
|
|
||||||
checked: d.typeFilters.includes(Constants.TransactionType.Send)
|
|
||||||
onClicked: d.toggleType(Constants.TransactionType.Send)
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Receive"
|
|
||||||
checked: d.typeFilters.includes(Constants.TransactionType.Receive)
|
|
||||||
onClicked: d.toggleType(Constants.TransactionType.Receive)
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Buy"
|
|
||||||
checked: d.typeFilters.includes(Constants.TransactionType.Buy)
|
|
||||||
onClicked: d.toggleType(Constants.TransactionType.Buy)
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Swap"
|
|
||||||
checked: d.typeFilters.includes(Constants.TransactionType.Swap)
|
|
||||||
onClicked: d.toggleType(Constants.TransactionType.Swap)
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Bridge"
|
|
||||||
checked: d.typeFilters.includes(Constants.TransactionType.Bridge)
|
|
||||||
onClicked: d.toggleType(Constants.TransactionType.Bridge)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Row {
|
|
||||||
spacing: 20
|
|
||||||
CheckBox {
|
|
||||||
text: "Failed"
|
|
||||||
checked: d.statusFilters.includes(Constants.TransactionStatus.Failed)
|
|
||||||
onClicked: d.toggleStatus(Constants.TransactionStatus.Failed)
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Pending"
|
|
||||||
checked: d.statusFilters.includes(Constants.TransactionStatus.Pending)
|
|
||||||
onClicked: d.toggleStatus(Constants.TransactionStatus.Pending)
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Complete"
|
|
||||||
checked: d.statusFilters.includes(Constants.TransactionStatus.Complete)
|
|
||||||
onClicked: d.toggleStatus(Constants.TransactionStatus.Complete)
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Finished"
|
|
||||||
checked: d.statusFilters.includes(Constants.TransactionStatus.Finished)
|
|
||||||
onClicked: d.toggleStatus(Constants.TransactionStatus.Finished)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,16 +9,16 @@ ListModel {
|
||||||
iconSource: ModelsData.collectibles.anniversary,
|
iconSource: ModelsData.collectibles.anniversary,
|
||||||
name: "Anniversary",
|
name: "Anniversary",
|
||||||
category: TokenCategories.Category.Community,
|
category: TokenCategories.Category.Community,
|
||||||
checked: true,
|
imageUrl: ModelsData.collectibles.anniversary,
|
||||||
allChecked: true
|
id: 1767698
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "Anniversary2",
|
key: "Anniversary2",
|
||||||
iconSource: ModelsData.collectibles.anniversary,
|
iconSource: ModelsData.collectibles.anniversary,
|
||||||
name: "Anniversary2",
|
name: "Anniversary2",
|
||||||
category: TokenCategories.Category.Community,
|
category: TokenCategories.Category.Community,
|
||||||
checked: true,
|
imageUrl: ModelsData.collectibles.anniversary,
|
||||||
allChecked: true
|
id: 1767699
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "CryptoKitties",
|
key: "CryptoKitties",
|
||||||
|
@ -69,26 +69,28 @@ ListModel {
|
||||||
name: "Magicat-4"
|
name: "Magicat-4"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
checked: true,
|
imageUrl: ModelsData.collectibles.cryptoKitties,
|
||||||
allChecked: true
|
id: 1767700
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "SuperRare",
|
key: "SuperRare",
|
||||||
iconSource: ModelsData.collectibles.superRare,
|
iconSource: ModelsData.collectibles.superRare,
|
||||||
name: "SuperRare",
|
name: "SuperRare",
|
||||||
category: TokenCategories.Category.Own,
|
category: TokenCategories.Category.Own,
|
||||||
checked: true,
|
imageUrl: ModelsData.collectibles.superRare,
|
||||||
allChecked: true
|
id: 1767701
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "Custom",
|
key: "Custom",
|
||||||
iconSource: ModelsData.collectibles.custom,
|
iconSource: ModelsData.collectibles.custom,
|
||||||
name: "Custom Collectible",
|
name: "Custom Collectible",
|
||||||
category: TokenCategories.Category.General,
|
category: TokenCategories.Category.General,
|
||||||
checked: true,
|
imageUrl: ModelsData.collectibles.custom,
|
||||||
allChecked: true
|
id: 1767764
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
property bool isFetching: false
|
||||||
|
|
||||||
Component.onCompleted: append(data)
|
Component.onCompleted: append(data)
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ StatusListItem {
|
||||||
components: [
|
components: [
|
||||||
StatusCheckBox {
|
StatusCheckBox {
|
||||||
id: checkBox
|
id: checkBox
|
||||||
|
visible: !root.loading
|
||||||
tristate: true
|
tristate: true
|
||||||
checkable: true
|
checkable: true
|
||||||
spacing: 0
|
spacing: 0
|
||||||
|
|
|
@ -13,25 +13,8 @@ import "../popups"
|
||||||
Flow {
|
Flow {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
|
property var activityFilterStore
|
||||||
property var store
|
property var store
|
||||||
property int selectedTime
|
|
||||||
property double fromTimestamp
|
|
||||||
property double toTimestamp
|
|
||||||
property var typeFilters
|
|
||||||
property var statusFilters
|
|
||||||
property var assetsList
|
|
||||||
property var collectiblesList
|
|
||||||
property var savedAddressList
|
|
||||||
property var recentsList
|
|
||||||
|
|
||||||
signal changeSelectedTime(int selectedTime)
|
|
||||||
signal setCustomTimeRange(string from, string to)
|
|
||||||
signal toggleType(int type)
|
|
||||||
signal toggleStatus(int status)
|
|
||||||
signal toggleToken(string tokenSymbol)
|
|
||||||
signal toggleCollectibles(string name)
|
|
||||||
signal toggleSavedAddress(string address)
|
|
||||||
signal toggleRecents(string address)
|
|
||||||
|
|
||||||
spacing: 8
|
spacing: 8
|
||||||
|
|
||||||
|
@ -47,53 +30,18 @@ Flow {
|
||||||
}
|
}
|
||||||
|
|
||||||
ActivityFilterTagItem {
|
ActivityFilterTagItem {
|
||||||
tagPrimaryLabel.text: {
|
tagPrimaryLabel.text: LocaleUtils.formatDate(activityFilterStore.fromTimestamp)
|
||||||
var currDate = new Date; // current date
|
|
||||||
switch(root.selectedTime) {
|
|
||||||
case Constants.TransactionTimePeriod.Today:
|
|
||||||
return LocaleUtils.formatDate(currDate) // Today
|
|
||||||
case Constants.TransactionTimePeriod.Yesterday:
|
|
||||||
return LocaleUtils.formatDate(new Date().setDate(currDate.getDate() - 1)) // Yesterday
|
|
||||||
case Constants.TransactionTimePeriod.ThisWeek:
|
|
||||||
var firstDayOfCurrentWeek = currDate.getDate() - currDate.getDay()
|
|
||||||
return LocaleUtils.formatDate(currDate.setDate(firstDayOfCurrentWeek)) // This week
|
|
||||||
case Constants.TransactionTimePeriod.LastWeek:
|
|
||||||
return LocaleUtils.formatDate(new Date().setDate(currDate.getDate() - 7)) // Last week
|
|
||||||
case Constants.TransactionTimePeriod.ThisMonth:
|
|
||||||
return LocaleUtils.formatDate(currDate.setDate(1)) // This month
|
|
||||||
case Constants.TransactionTimePeriod.LastMonth:
|
|
||||||
currDate.setDate(1);
|
|
||||||
currDate.setMonth(currDate.getMonth()-1);
|
|
||||||
return LocaleUtils.formatDate(currDate) // Last month
|
|
||||||
case Constants.TransactionTimePeriod.Custom:
|
|
||||||
return LocaleUtils.formatDate(new Date(root.fromTimestamp)) // Custom
|
|
||||||
default:
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tagSecondaryLabel.text: {
|
tagSecondaryLabel.text: {
|
||||||
switch(root.selectedTime) {
|
switch(activityFilterMenu.selectedTime) {
|
||||||
case Constants.TransactionTimePeriod.Today:
|
case Constants.TransactionTimePeriod.Today:
|
||||||
case Constants.TransactionTimePeriod.Yesterday:
|
case Constants.TransactionTimePeriod.Yesterday:
|
||||||
return ""
|
return ""
|
||||||
case Constants.TransactionTimePeriod.ThisWeek:
|
|
||||||
case Constants.TransactionTimePeriod.LastWeek:
|
|
||||||
case Constants.TransactionTimePeriod.ThisMonth:
|
|
||||||
return LocaleUtils.formatDate(new Date)
|
|
||||||
case Constants.TransactionTimePeriod.LastMonth:
|
|
||||||
let x = new Date()
|
|
||||||
x.setDate(1);
|
|
||||||
x.setMonth(x.getMonth()-1);
|
|
||||||
x.setDate(new Date(x.getFullYear(), x.getMonth(), 0).getDate() + 1)
|
|
||||||
return LocaleUtils.formatDate(x)
|
|
||||||
case Constants.TransactionTimePeriod.Custom:
|
|
||||||
return LocaleUtils.formatDate(new Date(root.toTimestamp)) // Custom
|
|
||||||
default:
|
default:
|
||||||
return ""
|
return LocaleUtils.formatDate(activityFilterStore.toTimestamp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
middleLabel.text:{
|
middleLabel.text: {
|
||||||
switch(root.selectedTime) {
|
switch(activityFilterMenu.selectedTime) {
|
||||||
case Constants.TransactionTimePeriod.Today:
|
case Constants.TransactionTimePeriod.Today:
|
||||||
case Constants.TransactionTimePeriod.Yesterday:
|
case Constants.TransactionTimePeriod.Yesterday:
|
||||||
return ""
|
return ""
|
||||||
|
@ -101,17 +49,16 @@ Flow {
|
||||||
return qsTr("to")
|
return qsTr("to")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
iconAsset.icon: "history"
|
iconAsset.icon: "history"
|
||||||
visible: root.selectedTime !== Constants.TransactionTimePeriod.All
|
visible: activityFilterMenu.selectedTime !== Constants.TransactionTimePeriod.All
|
||||||
onClosed: root.changeSelectedTime(Constants.TransactionTimePeriod.All)
|
onClosed: activityFilterStore.setSelectedTimestamp(Constants.TransactionTimePeriod.All)
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: activityFilterMenu.allTypesChecked ? 0: root.typeFilters
|
model: activityFilterMenu.allTypesChecked ? 0: activityFilterStore.typeFilters
|
||||||
delegate: ActivityFilterTagItem {
|
delegate: ActivityFilterTagItem {
|
||||||
property int type: root.typeFilters[index]
|
property int type: activityFilterStore.typeFilters[index]
|
||||||
tagPrimaryLabel.text: switch(root.typeFilters[index]) {
|
tagPrimaryLabel.text: switch(activityFilterStore.typeFilters[index]) {
|
||||||
case Constants.TransactionType.Send:
|
case Constants.TransactionType.Send:
|
||||||
return qsTr("Send")
|
return qsTr("Send")
|
||||||
case Constants.TransactionType.Receive:
|
case Constants.TransactionType.Receive:
|
||||||
|
@ -123,10 +70,10 @@ Flow {
|
||||||
case Constants.TransactionType.Bridge:
|
case Constants.TransactionType.Bridge:
|
||||||
return qsTr("Bridge")
|
return qsTr("Bridge")
|
||||||
default:
|
default:
|
||||||
console.warn("Unhandled type :: ",root.typeFilters[index])
|
console.warn("Unhandled type :: ",activityFilterStore.typeFilters[index])
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
iconAsset.icon: switch(root.typeFilters[index]) {
|
iconAsset.icon: switch(activityFilterStore.typeFilters[index]) {
|
||||||
case Constants.TransactionType.Send:
|
case Constants.TransactionType.Send:
|
||||||
return "send"
|
return "send"
|
||||||
case Constants.TransactionType.Receive:
|
case Constants.TransactionType.Receive:
|
||||||
|
@ -138,18 +85,18 @@ Flow {
|
||||||
case Constants.TransactionType.Bridge:
|
case Constants.TransactionType.Bridge:
|
||||||
return "bridge"
|
return "bridge"
|
||||||
default:
|
default:
|
||||||
console.warn("Unhandled type :: ",root.typeFilters[index])
|
console.warn("Unhandled type :: ",activityFilterStore.typeFilters[index])
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
onClosed: root.toggleType(type)
|
onClosed: activityFilterStore.toggleType(type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: activityFilterMenu.allStatusChecked ? 0 : root.statusFilters
|
model: activityFilterMenu.allStatusChecked ? 0 : activityFilterStore.statusFilters
|
||||||
delegate: ActivityFilterTagItem {
|
delegate: ActivityFilterTagItem {
|
||||||
property int type: root.statusFilters[index]
|
property int status: activityFilterStore.statusFilters[index]
|
||||||
tagPrimaryLabel.text: switch(root.statusFilters[index]) {
|
tagPrimaryLabel.text: switch(activityFilterStore.statusFilters[index]) {
|
||||||
case Constants.TransactionStatus.Failed:
|
case Constants.TransactionStatus.Failed:
|
||||||
return qsTr("Failed")
|
return qsTr("Failed")
|
||||||
case Constants.TransactionStatus.Pending:
|
case Constants.TransactionStatus.Pending:
|
||||||
|
@ -159,10 +106,10 @@ Flow {
|
||||||
case Constants.TransactionStatus.Finished:
|
case Constants.TransactionStatus.Finished:
|
||||||
return qsTr("Finalised")
|
return qsTr("Finalised")
|
||||||
default:
|
default:
|
||||||
console.warn("Unhandled status :: ",root.statusFilters[index])
|
console.warn("Unhandled status :: ",activityFilterStore.statusFilters[index])
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
iconAsset.icon: switch(root.statusFilters[index]) {
|
iconAsset.icon: switch(activityFilterStore.statusFilters[index]) {
|
||||||
case Constants.TransactionStatus.Failed:
|
case Constants.TransactionStatus.Failed:
|
||||||
return Style.svg("transaction/failed")
|
return Style.svg("transaction/failed")
|
||||||
case Constants.TransactionStatus.Pending:
|
case Constants.TransactionStatus.Pending:
|
||||||
|
@ -172,96 +119,100 @@ Flow {
|
||||||
case Constants.TransactionStatus.Finished:
|
case Constants.TransactionStatus.Finished:
|
||||||
return Style.svg("transaction/finished")
|
return Style.svg("transaction/finished")
|
||||||
default:
|
default:
|
||||||
console.warn("Unhandled status :: ",root.statusFilters[index])
|
console.warn("Unhandled status :: ",activityFilterStore.statusFilters[index])
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
iconAsset.color: "transparent"
|
iconAsset.color: "transparent"
|
||||||
onClosed: root.toggleStatus(type)
|
onClosed: activityFilterStore.toggleStatus(status, activityFilterMenu.allStatusChecked)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: root.assetsList
|
model: activityFilterStore.tokensList
|
||||||
delegate: ActivityFilterTagItem {
|
delegate: ActivityFilterTagItem {
|
||||||
tagPrimaryLabel.text: symbol
|
tagPrimaryLabel.text: symbol
|
||||||
iconAsset.icon: Constants.tokenIcon(symbol)
|
iconAsset.icon: Constants.tokenIcon(symbol)
|
||||||
iconAsset.color: "transparent"
|
iconAsset.color: "transparent"
|
||||||
visible: !allChecked && checked
|
visible: !activityFilterMenu.allTokensChecked && activityFilterStore.tokensFilter.includes(symbol)
|
||||||
onClosed: root.toggleToken(symbol)
|
onClosed: activityFilterStore.toggleToken(symbol)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: root.collectiblesList
|
model: activityFilterStore.collectiblesList
|
||||||
delegate: ActivityFilterTagItem {
|
delegate: ActivityFilterTagItem {
|
||||||
tagPrimaryLabel.text: name
|
tagPrimaryLabel.text: model.name
|
||||||
iconAsset.icon: model.iconSource
|
iconAsset.icon: model.imageUrl
|
||||||
iconAsset.color: "transparent"
|
iconAsset.color: "transparent"
|
||||||
visible: !allChecked && checked
|
visible: !activityFilterMenu.allCollectiblesChecked && activityFilterStore.collectiblesFilter.includes(model.id)
|
||||||
onClosed: root.toggleCollectibles(name)
|
onClosed: activityFilterStore.toggleCollectibles(model.id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: root.recentsList
|
model: activityFilterStore.recentsList
|
||||||
delegate: ActivityFilterTagItem {
|
delegate: ActivityFilterTagItem {
|
||||||
property int transactionType: to.toLowerCase() === root.store.overview.mixedcaseAddress.toLowerCase() ? Constants.TransactionType.Receive : Constants.TransactionType.Send
|
property int transactionType: to.toLowerCase() === root.store.overview.mixedcaseAddress.toLowerCase() ? Constants.TransactionType.Receive : Constants.TransactionType.Send
|
||||||
tagPrimaryLabel.text: transactionType === Constants.TransactionType.Receive ?
|
tagPrimaryLabel.text: transactionType === Constants.TransactionType.Receive ?
|
||||||
root.store.getNameForAddress(from) || StatusQUtils.Utils.elideText(from,6,4) :
|
root.store.getNameForAddress(from) || StatusQUtils.Utils.elideText(from,6,4) :
|
||||||
root.store.getNameForAddress(to) || StatusQUtils.Utils.elideText(to,6,4)
|
root.store.getNameForAddress(to) || StatusQUtils.Utils.elideText(to,6,4)
|
||||||
visible: !allChecked && checked
|
visible: !activityFilterMenu.allRecentsChecked && activityFilterMenu.recentsFilters.includes(transactionType === Constants.TransactionType.Receive ? from : to)
|
||||||
onClosed: root.toggleRecents(transactionType === Constants.TransactionType.Receive ? from : to)
|
onClosed: activityFilterStore.toggleRecents(transactionType === Constants.TransactionType.Receive ? from : to)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: root.savedAddressList
|
model: activityFilterStore.savedAddressList
|
||||||
delegate: ActivityFilterTagItem {
|
delegate: ActivityFilterTagItem {
|
||||||
tagPrimaryLabel.text: ens.length > 0 ? ens : chainShortNames + StatusQUtils.Utils.elideText(address,6,4)
|
tagPrimaryLabel.text: ens.length > 0 ? ens : chainShortNames + StatusQUtils.Utils.elideText(address,6,4)
|
||||||
visible: !allChecked && checked
|
visible: !activityFilterMenu.allSavedAddressesChecked && activityFilterMenu.savedAddressFilters.includes(address)
|
||||||
onClosed: root.toggleSavedAddress(address)
|
onClosed: activityFilterStore.toggleSavedAddress(address)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ActivityFilterMenu {
|
ActivityFilterMenu {
|
||||||
id: activityFilterMenu
|
id: activityFilterMenu
|
||||||
|
|
||||||
selectedTime: root.selectedTime
|
selectedTime: activityFilterStore.selectedTime
|
||||||
onSetSelectedTime: {
|
onSetSelectedTime: {
|
||||||
if(selectedTime === Constants.TransactionTimePeriod.Custom) {
|
if(selectedTime === Constants.TransactionTimePeriod.Custom) {
|
||||||
dialog.open()
|
dialog.open()
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
root.changeSelectedTime(selectedTime)
|
activityFilterStore.setSelectedTimestamp(selectedTime)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
typeFilters: root.typeFilters
|
typeFilters: activityFilterStore.typeFilters
|
||||||
onUpdateTypeFilter: root.toggleType(type)
|
onUpdateTypeFilter: activityFilterStore.toggleType(type, allFiltersCount)
|
||||||
|
|
||||||
statusFilters: root.statusFilters
|
statusFilters: activityFilterStore.statusFilters
|
||||||
onUpdateStatusFilter: root.toggleStatus(status)
|
onUpdateStatusFilter: activityFilterStore.toggleStatus(status, allFiltersCount)
|
||||||
|
|
||||||
tokensList: root.assetsList
|
tokensList: activityFilterStore.tokensList
|
||||||
collectiblesList: root.collectiblesList
|
tokensFilter: activityFilterStore.tokensFilter
|
||||||
onUpdateTokensFilter: root.toggleToken(tokenSymbol)
|
collectiblesList: activityFilterStore.collectiblesList
|
||||||
onUpdateCollectiblesFilter: root.toggleCollectibles(name)
|
collectiblesFilter: activityFilterStore.collectiblesFilter
|
||||||
|
onUpdateTokensFilter: activityFilterStore.toggleToken(tokenSymbol)
|
||||||
|
onUpdateCollectiblesFilter: activityFilterStore.toggleCollectibles(id)
|
||||||
|
|
||||||
store: root.store
|
store: root.store
|
||||||
recentsList: root.recentsList
|
recentsList: activityFilterStore.recentsList
|
||||||
savedAddressList: root.savedAddressList
|
recentsFilters: activityFilterStore.recentsFilters
|
||||||
onUpdateSavedAddressFilter: root.toggleSavedAddress(address)
|
savedAddressList: activityFilterStore.savedAddressList
|
||||||
onUpdateRecentsFilter: root.toggleRecents(address)
|
savedAddressFilters: activityFilterStore.savedAddressFilters
|
||||||
|
onUpdateSavedAddressFilter: activityFilterStore.toggleSavedAddress(address)
|
||||||
|
onUpdateRecentsFilter: activityFilterStore.toggleRecents(address)
|
||||||
}
|
}
|
||||||
|
|
||||||
StatusDateRangePicker {
|
StatusDateRangePicker {
|
||||||
id: dialog
|
id: dialog
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
// To-do sync with backend
|
fromTimestamp: activityFilterStore.fromTimestamp
|
||||||
fromTimestamp: root.fromTimestamp// 7 days ago
|
toTimestamp: activityFilterStore.toTimestamp
|
||||||
toTimestamp: root.toTimestamp
|
|
||||||
onNewRangeSet: {
|
onNewRangeSet: {
|
||||||
root.setCustomTimeRange(fromTimestamp, toTimestamp)
|
activityFilterStore.setCustomTimeRange(fromTimestamp, toTimestamp)
|
||||||
root.changeSelectedTime(Constants.TransactionTimePeriod.Custom)
|
activityFilterStore.setSelectedTimestamp(Constants.TransactionTimePeriod.Custom)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,33 +8,46 @@ import "./filterSubMenus"
|
||||||
StatusMenu {
|
StatusMenu {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
|
property var store
|
||||||
|
|
||||||
// Time filter
|
// Time filter
|
||||||
property int selectedTime: ActivityFilterMenu.All
|
property int selectedTime: ActivityFilterMenu.All
|
||||||
signal setSelectedTime(int selectedTime)
|
signal setSelectedTime(int selectedTime)
|
||||||
|
|
||||||
// Type filter
|
// Type filter
|
||||||
property var typeFilters: []
|
property var typeFilters: []
|
||||||
property bool allTypesChecked: typeMenu.allChecked
|
readonly property bool allTypesChecked: typeMenu.allChecked
|
||||||
signal updateTypeFilter(int type)
|
signal updateTypeFilter(int type, int allFiltersCount)
|
||||||
|
|
||||||
// Status filter
|
// Status filter
|
||||||
property var statusFilters: []
|
property var statusFilters: []
|
||||||
property bool allStatusChecked: statusMenu.allChecked
|
readonly property bool allStatusChecked: statusMenu.allChecked
|
||||||
signal updateStatusFilter(int status)
|
signal updateStatusFilter(int status, int allFiltersCount)
|
||||||
|
|
||||||
// Assets filter
|
// Tokens filter
|
||||||
property var tokensList: []
|
property var tokensList: []
|
||||||
property var collectiblesList
|
property var tokensFilter: []
|
||||||
|
readonly property bool allTokensChecked: tokensMenu.allTokensChecked
|
||||||
signal updateTokensFilter(string tokenSymbol)
|
signal updateTokensFilter(string tokenSymbol)
|
||||||
signal updateCollectiblesFilter(string name)
|
|
||||||
|
|
||||||
// Counterparty filter
|
// Collectibles filter
|
||||||
property var store
|
property var collectiblesList: []
|
||||||
|
property var collectiblesFilter: []
|
||||||
|
readonly property bool allCollectiblesChecked: tokensMenu.allCollectiblesChecked
|
||||||
|
signal updateCollectiblesFilter(double id)
|
||||||
|
|
||||||
|
// Recents filter
|
||||||
property var recentsList
|
property var recentsList
|
||||||
property var savedAddressList
|
property var recentsFilters
|
||||||
signal updateSavedAddressFilter(string address)
|
readonly property bool allRecentsChecked: counterPartyMenu.allRecentsChecked
|
||||||
signal updateRecentsFilter(string address)
|
signal updateRecentsFilter(string address)
|
||||||
|
|
||||||
|
// Collectibles filter
|
||||||
|
property var savedAddressList
|
||||||
|
property var savedAddressFilters
|
||||||
|
readonly property bool allSavedAddressesChecked: counterPartyMenu.allSavedAddressesChecked
|
||||||
|
signal updateSavedAddressFilter(string address)
|
||||||
|
|
||||||
implicitWidth: 176
|
implicitWidth: 176
|
||||||
|
|
||||||
// Filter By Period
|
// Filter By Period
|
||||||
|
@ -57,14 +70,14 @@ StatusMenu {
|
||||||
id: typeMenu
|
id: typeMenu
|
||||||
onBack: root.open()
|
onBack: root.open()
|
||||||
typeFilters: root.typeFilters
|
typeFilters: root.typeFilters
|
||||||
onActionTriggered: updateTypeFilter(type)
|
onActionTriggered: updateTypeFilter(type, allFiltersCount)
|
||||||
closePolicy: root.closePolicy
|
closePolicy: root.closePolicy
|
||||||
}
|
}
|
||||||
ActivityStatusFilterSubMenu {
|
ActivityStatusFilterSubMenu {
|
||||||
id: statusMenu
|
id: statusMenu
|
||||||
onBack: root.open()
|
onBack: root.open()
|
||||||
statusFilters: root.statusFilters
|
statusFilters: root.statusFilters
|
||||||
onActionTriggered: updateStatusFilter(status)
|
onActionTriggered: updateStatusFilter(status, allFiltersCount)
|
||||||
closePolicy: root.closePolicy
|
closePolicy: root.closePolicy
|
||||||
}
|
}
|
||||||
ActivityTokensFilterSubMenu {
|
ActivityTokensFilterSubMenu {
|
||||||
|
@ -72,9 +85,11 @@ StatusMenu {
|
||||||
height: Math.min(439, tokensMenu.implicitHeight)
|
height: Math.min(439, tokensMenu.implicitHeight)
|
||||||
onBack: root.open()
|
onBack: root.open()
|
||||||
tokensList: root.tokensList
|
tokensList: root.tokensList
|
||||||
|
tokensFilter: root.tokensFilter
|
||||||
collectiblesList: root.collectiblesList
|
collectiblesList: root.collectiblesList
|
||||||
|
collectiblesFilter: root.collectiblesFilter
|
||||||
onTokenToggled: updateTokensFilter(tokenSymbol)
|
onTokenToggled: updateTokensFilter(tokenSymbol)
|
||||||
onCollectibleToggled: updateCollectiblesFilter(name)
|
onCollectibleToggled: updateCollectiblesFilter(id)
|
||||||
closePolicy: root.closePolicy
|
closePolicy: root.closePolicy
|
||||||
}
|
}
|
||||||
ActivityCounterpartyFilterSubMenu {
|
ActivityCounterpartyFilterSubMenu {
|
||||||
|
@ -83,7 +98,9 @@ StatusMenu {
|
||||||
onBack: root.open()
|
onBack: root.open()
|
||||||
store: root.store
|
store: root.store
|
||||||
recentsList: root.recentsList
|
recentsList: root.recentsList
|
||||||
|
recentsFilters: root.recentsFilters
|
||||||
savedAddressList: root.savedAddressList
|
savedAddressList: root.savedAddressList
|
||||||
|
savedAddressFilters: root.savedAddressFilters
|
||||||
onSavedAddressToggled: root.updateSavedAddressFilter(address)
|
onSavedAddressToggled: root.updateSavedAddressFilter(address)
|
||||||
onRecentsToggled: root.updateRecentsFilter(address)
|
onRecentsToggled: root.updateRecentsFilter(address)
|
||||||
closePolicy: root.closePolicy
|
closePolicy: root.closePolicy
|
||||||
|
|
|
@ -20,18 +20,20 @@ import "../../controls"
|
||||||
StatusMenu {
|
StatusMenu {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property var recentsList
|
|
||||||
property var savedAddressList
|
|
||||||
property var store
|
property var store
|
||||||
|
|
||||||
|
property var recentsList
|
||||||
|
property var recentsFilters
|
||||||
|
readonly property bool allRecentsChecked: recentsFilters.length === 0
|
||||||
|
|
||||||
|
property var savedAddressList
|
||||||
|
property var savedAddressFilters
|
||||||
|
readonly property bool allSavedAddressesChecked: savedAddressFilters.length === 0
|
||||||
|
|
||||||
signal back()
|
signal back()
|
||||||
signal savedAddressToggled(string address)
|
signal savedAddressToggled(string address)
|
||||||
signal recentsToggled(string address)
|
signal recentsToggled(string address)
|
||||||
|
|
||||||
property var searchTokenSymbolByAddressFn: function (address) {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
implicitWidth: 289
|
implicitWidth: 289
|
||||||
|
|
||||||
MenuBackButton {
|
MenuBackButton {
|
||||||
|
@ -75,36 +77,34 @@ StatusMenu {
|
||||||
Repeater {
|
Repeater {
|
||||||
model: root.recentsList
|
model: root.recentsList
|
||||||
delegate: ActivityTypeCheckBox {
|
delegate: ActivityTypeCheckBox {
|
||||||
readonly property int transactionType: model.to.toLowerCase() === store.overview.mixedcaseAddress.toLowerCase() ? Constants.TransactionType.Receive : Constants.TransactionType.Send
|
readonly property int transactionType: model.activityEntry.recipient.toLowerCase() === store.overview.mixedcaseAddress.toLowerCase() ? Constants.TransactionType.Receive : Constants.TransactionType.Send
|
||||||
readonly property string fromName: store.getNameForAddress(model.from)
|
readonly property string fromName: store.getNameForAddress(model.activityEntry.sender)
|
||||||
readonly property string toName: store.getNameForAddress(model.to)
|
readonly property string toName: store.getNameForAddress(model.activityEntry.recipient)
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: 44
|
height: 44
|
||||||
title: transactionType === Constants.TransactionType.Receive ?
|
title: transactionType === Constants.TransactionType.Receive ?
|
||||||
fromName || StatusQUtils.Utils.elideText(model.from,6,4) :
|
fromName || StatusQUtils.Utils.elideText(model.activityEntry.sender,6,4) :
|
||||||
toName || StatusQUtils.Utils.elideText(model.to,6,4)
|
toName || StatusQUtils.Utils.elideText(model.activityEntry.recipient,6,4)
|
||||||
subTitle: {
|
subTitle: {
|
||||||
if (transactionType === Constants.TransactionType.Receive) {
|
if (transactionType === Constants.TransactionType.Receive) {
|
||||||
return fromName ? StatusQUtils.Utils.elideText(model.from,6,4) : ""
|
return fromName ? StatusQUtils.Utils.elideText(model.activityEntry.sender,6,4) : ""
|
||||||
} else {
|
} else {
|
||||||
return toName ? StatusQUtils.Utils.elideText(model.to,6,4): ""
|
return toName ? StatusQUtils.Utils.elideText(model.activityEntry.recipient,6,4): ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
statusListItemSubTitle.elide: Text.ElideMiddle
|
statusListItemSubTitle.elide: Text.ElideMiddle
|
||||||
statusListItemSubTitle.wrapMode: Text.NoWrap
|
statusListItemSubTitle.wrapMode: Text.NoWrap
|
||||||
assetSettings.name: (transactionType === Constants.TransactionType.Receive ? fromName : toName) || "address"
|
assetSettings.name: (transactionType === Constants.TransactionType.Receive ? fromName : toName) || "address"
|
||||||
assetSettings.isLetterIdenticon: transactionType === Constants.TransactionType.Receive ?
|
assetSettings.isLetterIdenticon: transactionType === Constants.TransactionType.Receive ? !!fromName : !!toName
|
||||||
!!fromName :
|
|
||||||
!!toName
|
|
||||||
assetSettings.bgHeight: 32
|
assetSettings.bgHeight: 32
|
||||||
assetSettings.bgWidth: 32
|
assetSettings.bgWidth: 32
|
||||||
assetSettings.bgRadius: assetSettings.bgHeight/2
|
assetSettings.bgRadius: assetSettings.bgHeight/2
|
||||||
assetSettings.width: 16
|
assetSettings.width: 16
|
||||||
assetSettings.height: 16
|
assetSettings.height: 16
|
||||||
buttonGroup: recentsButtonGroup
|
buttonGroup: recentsButtonGroup
|
||||||
allChecked: model.allChecked
|
allChecked: root.allRecentsChecked
|
||||||
checked: model.checked
|
checked: root.allRecentsChecked ? true : root.recentsFilters.includes(transactionType === Constants.TransactionType.Receive ? model.activityEntry.sender: model.activityEntry.recipient)
|
||||||
onActionTriggered: root.recentsToggled(transactionType === Constants.TransactionType.Receive ? model.from: model.to)
|
onActionTriggered: root.recentsToggled(transactionType === Constants.TransactionType.Receive ? model.activityEntry.sender: model.activityEntry.recipient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -137,8 +137,8 @@ StatusMenu {
|
||||||
assetSettings.name: model.name
|
assetSettings.name: model.name
|
||||||
assetSettings.isLetterIdenticon: true
|
assetSettings.isLetterIdenticon: true
|
||||||
buttonGroup: savedButtonGroup
|
buttonGroup: savedButtonGroup
|
||||||
allChecked: model.allChecked
|
allChecked: root.allSavedAddressesChecked
|
||||||
checked: model.checked
|
checked: root.allSavedAddressesChecked ? true : root.savedAddressFilters.includes(model.address)
|
||||||
onActionTriggered: root.savedAddressToggled(model.address)
|
onActionTriggered: root.savedAddressToggled(model.address)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,8 @@ StatusMenu {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property var statusFilters: []
|
property var statusFilters: []
|
||||||
readonly property bool allChecked: statusFilters.length === typeButtonGroup.buttons.length
|
readonly property bool allChecked: statusFilters.length === 0
|
||||||
|
readonly property int allFiltersCount: typeButtonGroup.buttons.length
|
||||||
|
|
||||||
signal back()
|
signal back()
|
||||||
signal actionTriggered(int status)
|
signal actionTriggered(int status)
|
||||||
|
@ -37,7 +38,7 @@ StatusMenu {
|
||||||
buttonGroup: typeButtonGroup
|
buttonGroup: typeButtonGroup
|
||||||
allChecked: root.allChecked
|
allChecked: root.allChecked
|
||||||
type: Constants.TransactionStatus.Failed
|
type: Constants.TransactionStatus.Failed
|
||||||
checked: statusFilters.includes(type)
|
checked: root.allChecked || statusFilters.includes(type)
|
||||||
onActionTriggered: root.actionTriggered(type)
|
onActionTriggered: root.actionTriggered(type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +50,7 @@ StatusMenu {
|
||||||
buttonGroup: typeButtonGroup
|
buttonGroup: typeButtonGroup
|
||||||
allChecked: root.allChecked
|
allChecked: root.allChecked
|
||||||
type: Constants.TransactionStatus.Pending
|
type: Constants.TransactionStatus.Pending
|
||||||
checked: statusFilters.includes(type)
|
checked: root.allChecked || statusFilters.includes(type)
|
||||||
onActionTriggered: root.actionTriggered(type)
|
onActionTriggered: root.actionTriggered(type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +62,7 @@ StatusMenu {
|
||||||
buttonGroup: typeButtonGroup
|
buttonGroup: typeButtonGroup
|
||||||
allChecked: root.allChecked
|
allChecked: root.allChecked
|
||||||
type: Constants.TransactionStatus.Complete
|
type: Constants.TransactionStatus.Complete
|
||||||
checked: statusFilters.includes(type)
|
checked: root.allChecked || statusFilters.includes(type)
|
||||||
onActionTriggered: root.actionTriggered(type)
|
onActionTriggered: root.actionTriggered(type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,7 +74,7 @@ StatusMenu {
|
||||||
buttonGroup: typeButtonGroup
|
buttonGroup: typeButtonGroup
|
||||||
allChecked: root.allChecked
|
allChecked: root.allChecked
|
||||||
type: Constants.TransactionStatus.Finished
|
type: Constants.TransactionStatus.Finished
|
||||||
checked: statusFilters.includes(type)
|
checked: root.allChecked || statusFilters.includes(type)
|
||||||
onActionTriggered: root.actionTriggered(type)
|
onActionTriggered: root.actionTriggered(type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,19 +16,27 @@ import utils 1.0
|
||||||
StatusMenu {
|
StatusMenu {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property var tokensList
|
property var tokensFilter: []
|
||||||
property var collectiblesList
|
property var tokensList: []
|
||||||
|
readonly property bool allTokensChecked: tokensFilter.length === 0
|
||||||
|
|
||||||
|
property var collectiblesList: []
|
||||||
|
property var collectiblesFilter: []
|
||||||
|
readonly property bool allCollectiblesChecked: collectiblesFilter.length === 0
|
||||||
|
|
||||||
signal back()
|
signal back()
|
||||||
signal tokenToggled(string tokenSymbol)
|
signal tokenToggled(string tokenSymbol)
|
||||||
signal collectibleToggled(string name)
|
signal collectibleToggled(double id)
|
||||||
|
|
||||||
property var searchTokenSymbolByAddressFn: function (address) {
|
property var searchTokenSymbolByAddressFn: function (address) { return "" }
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
implicitWidth: 289
|
implicitWidth: 289
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
id: d
|
||||||
|
property bool isFetching: root.collectiblesList.isFetching
|
||||||
|
}
|
||||||
|
|
||||||
MenuBackButton {
|
MenuBackButton {
|
||||||
id: backButton
|
id: backButton
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
@ -82,14 +90,13 @@ StatusMenu {
|
||||||
Repeater {
|
Repeater {
|
||||||
model: SortFilterProxyModel {
|
model: SortFilterProxyModel {
|
||||||
sourceModel: root.tokensList
|
sourceModel: root.tokensList
|
||||||
filters: [
|
filters: ExpressionFilter {
|
||||||
ExpressionFilter {
|
enabled: root.tokensList.count > 0
|
||||||
expression: {
|
expression: {
|
||||||
var tokenSymbolByAddress = root.searchTokenSymbolByAddressFn(tokensSearchBox.text)
|
var tokenSymbolByAddress = root.searchTokenSymbolByAddressFn(tokensSearchBox.text)
|
||||||
return symbol.startsWith(tokensSearchBox.text.toUpperCase()) || name.toUpperCase().startsWith(tokensSearchBox.text.toUpperCase()) || (tokenSymbolByAddress!=="" && symbol.startsWith(tokenSymbolByAddress))
|
return symbol.startsWith(tokensSearchBox.text.toUpperCase()) || name.toUpperCase().startsWith(tokensSearchBox.text.toUpperCase()) || (tokenSymbolByAddress!=="" && symbol.startsWith(tokenSymbolByAddress))
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
}
|
||||||
}
|
}
|
||||||
delegate: ActivityTypeCheckBox {
|
delegate: ActivityTypeCheckBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
@ -99,8 +106,8 @@ StatusMenu {
|
||||||
assetSettings.name: model.symbol ? Constants.tokenIcon(symbol) : ""
|
assetSettings.name: model.symbol ? Constants.tokenIcon(symbol) : ""
|
||||||
assetSettings.isImage: true
|
assetSettings.isImage: true
|
||||||
buttonGroup: tokenButtonGroup
|
buttonGroup: tokenButtonGroup
|
||||||
allChecked: model.allChecked
|
allChecked: root.allTokensChecked
|
||||||
checked: model.checked
|
checked: root.allTokensChecked || root.tokensFilter.includes(model.symbol)
|
||||||
onActionTriggered: root.tokenToggled(model.symbol)
|
onActionTriggered: root.tokenToggled(model.symbol)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,27 +137,28 @@ StatusMenu {
|
||||||
Repeater {
|
Repeater {
|
||||||
model: SortFilterProxyModel {
|
model: SortFilterProxyModel {
|
||||||
sourceModel: root.collectiblesList
|
sourceModel: root.collectiblesList
|
||||||
filters: [
|
filters: ExpressionFilter {
|
||||||
ExpressionFilter {
|
enabled: root.collectiblesList.count > 0 && !!collectiblesSearchBox.text
|
||||||
expression: {
|
expression: {
|
||||||
return model.name.toUpperCase().startsWith(collectiblesSearchBox.text.toUpperCase())
|
let searchText = collectiblesSearchBox.text.toUpperCase()
|
||||||
}
|
return name.toUpperCase().startsWith(searchText)
|
||||||
}
|
}
|
||||||
]
|
}
|
||||||
}
|
}
|
||||||
delegate: ActivityTypeCheckBox {
|
delegate: ActivityTypeCheckBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: 44
|
Layout.preferredHeight: 44
|
||||||
title: model.name
|
title: model.name
|
||||||
assetSettings.name: model.iconSource
|
assetSettings.name: model.imageUrl
|
||||||
|
assetSettings.isImage: true
|
||||||
assetSettings.bgWidth: 32
|
assetSettings.bgWidth: 32
|
||||||
assetSettings.bgHeight: 32
|
assetSettings.bgHeight: 32
|
||||||
assetSettings.bgRadius: assetSettings.bgHeight/2
|
assetSettings.bgRadius: assetSettings.bgHeight/2
|
||||||
assetSettings.isImage: true
|
|
||||||
buttonGroup: collectibleButtonGroup
|
buttonGroup: collectibleButtonGroup
|
||||||
allChecked: model.allChecked
|
allChecked: root.allCollectiblesChecked
|
||||||
checked: model.checked
|
checked: root.allCollectiblesChecked || root.collectiblesFilter.includes(model.id)
|
||||||
onActionTriggered: root.collectibleToggled(name)
|
onActionTriggered: root.collectibleToggled(model.id)
|
||||||
|
loading: d.isFetching
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,8 @@ StatusMenu {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property var typeFilters: []
|
property var typeFilters: []
|
||||||
readonly property bool allChecked: typeFilters.length === typeButtonGroup.buttons.length
|
readonly property bool allChecked: typeFilters.length === 0
|
||||||
|
readonly property int allFiltersCount: typeButtonGroup.buttons.length
|
||||||
|
|
||||||
signal back()
|
signal back()
|
||||||
signal actionTriggered(int type)
|
signal actionTriggered(int type)
|
||||||
|
@ -36,7 +37,7 @@ StatusMenu {
|
||||||
buttonGroup: typeButtonGroup
|
buttonGroup: typeButtonGroup
|
||||||
allChecked: root.allChecked
|
allChecked: root.allChecked
|
||||||
type: Constants.TransactionType.Send
|
type: Constants.TransactionType.Send
|
||||||
checked: typeFilters.includes(type)
|
checked: root.allChecked || typeFilters.includes(type)
|
||||||
onActionTriggered: root.actionTriggered(type)
|
onActionTriggered: root.actionTriggered(type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +48,7 @@ StatusMenu {
|
||||||
buttonGroup: typeButtonGroup
|
buttonGroup: typeButtonGroup
|
||||||
allChecked: root.allChecked
|
allChecked: root.allChecked
|
||||||
type: Constants.TransactionType.Receive
|
type: Constants.TransactionType.Receive
|
||||||
checked: typeFilters.includes(type)
|
checked: root.allChecked || typeFilters.includes(type)
|
||||||
onActionTriggered: root.actionTriggered(type)
|
onActionTriggered: root.actionTriggered(type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +59,7 @@ StatusMenu {
|
||||||
buttonGroup: typeButtonGroup
|
buttonGroup: typeButtonGroup
|
||||||
allChecked: root.allChecked
|
allChecked: root.allChecked
|
||||||
type: Constants.TransactionType.Buy
|
type: Constants.TransactionType.Buy
|
||||||
checked: typeFilters.includes(type)
|
checked: root.allChecked || typeFilters.includes(type)
|
||||||
onActionTriggered: root.actionTriggered(type)
|
onActionTriggered: root.actionTriggered(type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +70,7 @@ StatusMenu {
|
||||||
buttonGroup: typeButtonGroup
|
buttonGroup: typeButtonGroup
|
||||||
allChecked: root.allChecked
|
allChecked: root.allChecked
|
||||||
type: Constants.TransactionType.Swap
|
type: Constants.TransactionType.Swap
|
||||||
checked: typeFilters.includes(type)
|
checked: root.allChecked || typeFilters.includes(type)
|
||||||
onActionTriggered: root.actionTriggered(type)
|
onActionTriggered: root.actionTriggered(type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +81,7 @@ StatusMenu {
|
||||||
buttonGroup: typeButtonGroup
|
buttonGroup: typeButtonGroup
|
||||||
allChecked: root.allChecked
|
allChecked: root.allChecked
|
||||||
type: Constants.TransactionType.Bridge
|
type: Constants.TransactionType.Bridge
|
||||||
checked: typeFilters.includes(type)
|
checked: root.allChecked || typeFilters.includes(type)
|
||||||
onActionTriggered: root.actionTriggered(type)
|
onActionTriggered: root.actionTriggered(type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,176 @@
|
||||||
|
import QtQuick 2.13
|
||||||
|
|
||||||
|
import SortFilterProxyModel 0.2
|
||||||
|
|
||||||
|
import utils 1.0
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property var activityController: walletSection.activityController
|
||||||
|
property bool filtersSet: fromTimestamp !== 0 || toTimestamp !== 0 ||
|
||||||
|
typeFilters.length !== 0 ||
|
||||||
|
statusFilters.length !== 0 ||
|
||||||
|
tokensFilter.length !== 0 ||
|
||||||
|
collectiblesFilter.length !== 0 ||
|
||||||
|
recentsFilters.length !== 0 ||
|
||||||
|
savedAddressFilters.length !== 0
|
||||||
|
|
||||||
|
// Time filters
|
||||||
|
property int selectedTime: Constants.TransactionTimePeriod.All
|
||||||
|
// To-do get this from the backend once oldest Tx timestamp is available
|
||||||
|
property double fromTimestamp
|
||||||
|
property double toTimestamp: new Date().valueOf()
|
||||||
|
function setSelectedTimestamp(selcTime) {
|
||||||
|
selectedTime = selcTime
|
||||||
|
var currDate = new Date() // current date
|
||||||
|
switch(selectedTime) {
|
||||||
|
case Constants.TransactionTimePeriod.All:
|
||||||
|
fromTimestamp = 0
|
||||||
|
toTimestamp = 0
|
||||||
|
break
|
||||||
|
case Constants.TransactionTimePeriod.Today:
|
||||||
|
fromTimestamp = currDate.valueOf() // Today
|
||||||
|
toTimestamp = fromTimestamp
|
||||||
|
break
|
||||||
|
case Constants.TransactionTimePeriod.Yesterday:
|
||||||
|
fromTimestamp = new Date().setDate(currDate.getDate() - 1).valueOf() // Yesterday
|
||||||
|
toTimestamp = fromTimestamp
|
||||||
|
break
|
||||||
|
case Constants.TransactionTimePeriod.ThisWeek:
|
||||||
|
var firstDayOfCurrentWeek = currDate.getDate() - currDate.getDay()
|
||||||
|
fromTimestamp = new Date().setDate(firstDayOfCurrentWeek).valueOf() // This week
|
||||||
|
toTimestamp = currDate.valueOf()
|
||||||
|
break
|
||||||
|
case Constants.TransactionTimePeriod.LastWeek:
|
||||||
|
fromTimestamp = new Date().setDate(currDate.getDate() - 7).valueOf() // Last week
|
||||||
|
toTimestamp = currDate.valueOf()
|
||||||
|
break
|
||||||
|
case Constants.TransactionTimePeriod.ThisMonth:
|
||||||
|
fromTimestamp = new Date().setDate(1).valueOf() // This month
|
||||||
|
toTimestamp = currDate.valueOf()
|
||||||
|
break
|
||||||
|
case Constants.TransactionTimePeriod.LastMonth:
|
||||||
|
let x = new Date()
|
||||||
|
x.setDate(1)
|
||||||
|
x.setMonth(x.getMonth()-1)
|
||||||
|
fromTimestamp = x.valueOf() // Last month
|
||||||
|
x.setDate(new Date(x.getFullYear(), x.getMonth(), 0).getDate() + 1)
|
||||||
|
toTimestamp = x.valueOf()
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
activityController.setFilterTime(root.fromTimestamp/1000, root.toTimestamp/1000)
|
||||||
|
activityController.updateFilter()
|
||||||
|
}
|
||||||
|
function setCustomTimeRange(fromTimestamp, toTimestamp) {
|
||||||
|
root.fromTimestamp = fromTimestamp
|
||||||
|
root.toTimestamp = toTimestamp
|
||||||
|
|
||||||
|
activityController.setFilterTime(root.fromTimestamp/1000, root.toTimestamp/1000)
|
||||||
|
activityController.updateFilter()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type Filters
|
||||||
|
property var typeFilters: []
|
||||||
|
function toggleType(type, allFiltersCount) {
|
||||||
|
// update filters
|
||||||
|
typeFilters = toggleFilterState(typeFilters, type, allFiltersCount)
|
||||||
|
// Set backend values
|
||||||
|
activityController.setFilterType(JSON.stringify(typeFilters))
|
||||||
|
activityController.updateFilter()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Status Filters
|
||||||
|
property var statusFilters: []
|
||||||
|
function toggleStatus(status, allFiltersCount) {
|
||||||
|
// update filters
|
||||||
|
statusFilters = toggleFilterState(statusFilters, status, allFiltersCount)
|
||||||
|
// Set backend values
|
||||||
|
activityController.setFilterStatus(JSON.stringify(statusFilters))
|
||||||
|
activityController.updateFilter()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tokens Filters
|
||||||
|
property var tokensList: walletSectionAssets.assets
|
||||||
|
property var tokensFilter: []
|
||||||
|
function toggleToken(symbol) {
|
||||||
|
// update filters
|
||||||
|
tokensFilter = toggleFilterState(tokensFilter, symbol, tokensList.count)
|
||||||
|
// Set backend values
|
||||||
|
activityController.setFilterAssets(JSON.stringify(tokensFilter))
|
||||||
|
activityController.updateFilter()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Collectibles Filters
|
||||||
|
property var collectiblesList: walletSectionCollectibles.model
|
||||||
|
property var collectiblesFilter: []
|
||||||
|
function toggleCollectibles(id) {
|
||||||
|
// update filters
|
||||||
|
collectiblesFilter = toggleFilterState(collectiblesFilter, id, collectiblesList.count)
|
||||||
|
// To-do go side filtering is pending
|
||||||
|
// activityController.setFilterCollectibles(JSON.stringify(collectiblesFilter))
|
||||||
|
// activityController.updateFilter()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// To-do get correct model unaffected by filters from go side
|
||||||
|
property var recentsList: []
|
||||||
|
property var recentsFilters: []
|
||||||
|
function toggleRecents(address) {
|
||||||
|
// update filters
|
||||||
|
recentsFilters = toggleFilterState(recentsFilters, address, recentsList.count)
|
||||||
|
// Set backend values
|
||||||
|
activityController.setFilterToAddresses(JSON.stringify(recentsFilters.concat(savedAddressFilters)))
|
||||||
|
activityController.updateFilter()
|
||||||
|
}
|
||||||
|
|
||||||
|
property var savedAddressesModel: walletSectionSavedAddresses.model
|
||||||
|
property bool areTestNetworksEnabled: networksModule.areTestNetworksEnabled
|
||||||
|
property var savedAddressList: SortFilterProxyModel {
|
||||||
|
sourceModel: savedAddressesModel
|
||||||
|
filters: [
|
||||||
|
ValueFilter {
|
||||||
|
roleName: "isTest"
|
||||||
|
value: areTestNetworksEnabled
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
property var savedAddressFilters: []
|
||||||
|
function toggleSavedAddress(address) {
|
||||||
|
// update filters
|
||||||
|
savedAddressFilters = toggleFilterState(savedAddressFilters, address, savedAddressList.count)
|
||||||
|
// Set backend values
|
||||||
|
activityController.setFilterToAddresses(JSON.stringify(recentsFilters.concat(savedAddressFilters)))
|
||||||
|
activityController.updateFilter()
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleFilterState(filters, attribute, allFiltersCount) {
|
||||||
|
let tempFilters = filters
|
||||||
|
// if all were selected then only select one of them
|
||||||
|
if(tempFilters.length === 0) {
|
||||||
|
tempFilters = [attribute]
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// if last one is being deselected, select all
|
||||||
|
if(tempFilters.length === 1 && tempFilters[0] === attribute) {
|
||||||
|
tempFilters = []
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let index = tempFilters.indexOf(attribute)
|
||||||
|
if(index === -1) {
|
||||||
|
if(allFiltersCount === tempFilters.length + 1)
|
||||||
|
tempFilters = []
|
||||||
|
else
|
||||||
|
tempFilters.push(attribute)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tempFilters.splice(index, 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tempFilters
|
||||||
|
}
|
||||||
|
}
|
|
@ -1 +1,2 @@
|
||||||
singleton RootStore 1.0 RootStore.qml
|
singleton RootStore 1.0 RootStore.qml
|
||||||
|
ActivityFiltersStore 1.0 ActivityFiltersStore.qml
|
||||||
|
|
|
@ -33,6 +33,7 @@ ColumnLayout {
|
||||||
QtObject {
|
QtObject {
|
||||||
id: d
|
id: d
|
||||||
property bool isLoading: false
|
property bool isLoading: false
|
||||||
|
property var activityFiltersStore: WalletStores.ActivityFiltersStore{}
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
|
@ -58,7 +59,7 @@ ColumnLayout {
|
||||||
id: noTxs
|
id: noTxs
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: 42
|
Layout.preferredHeight: 42
|
||||||
visible: !d.isLoading && transactionListRoot.count === 0
|
visible: !d.isLoading && transactionListRoot.count === 0 && !d.activityFiltersStore.filtersSet
|
||||||
font.pixelSize: Style.current.primaryTextFontSize
|
font.pixelSize: Style.current.primaryTextFontSize
|
||||||
text: qsTr("Activity for this account will appear here")
|
text: qsTr("Activity for this account will appear here")
|
||||||
}
|
}
|
||||||
|
@ -66,24 +67,11 @@ ColumnLayout {
|
||||||
// Tp-do make connections with nim once logic is ready
|
// Tp-do make connections with nim once logic is ready
|
||||||
ActivityFilterPanel {
|
ActivityFilterPanel {
|
||||||
id: filterComponent
|
id: filterComponent
|
||||||
visible: !d.isLoading && transactionListRoot.count !== 0
|
visible: !d.isLoading && (transactionListRoot.count !== 0 || d.activityFiltersStore.filtersSet)
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: 50
|
Layout.preferredHeight: 50
|
||||||
store: RootStore
|
activityFilterStore: d.activityFiltersStore
|
||||||
selectedTime: Constants.TransactionTimePeriod.All
|
store: WalletStores.RootStore
|
||||||
typeFilters: [
|
|
||||||
Constants.TransactionType.Send,
|
|
||||||
Constants.TransactionType.Receive,
|
|
||||||
Constants.TransactionType.Buy,
|
|
||||||
Constants.TransactionType.Swap,
|
|
||||||
Constants.TransactionType.Bridge
|
|
||||||
]
|
|
||||||
statusFilters: [
|
|
||||||
Constants.TransactionStatus.Failed,
|
|
||||||
Constants.TransactionStatus.Pending,
|
|
||||||
Constants.TransactionStatus.Complete,
|
|
||||||
Constants.TransactionStatus.Finished
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Separator {
|
Separator {
|
||||||
|
|
Loading…
Reference in New Issue