feat: load more transactions with a button

use qstrid; trx width and heights; add positionViewEnd; fix some qt rules;

missing semi colons
This commit is contained in:
hydr063n 2020-10-02 17:53:50 +02:00 committed by Iuri Matias
parent 5da0d47c5a
commit 7a5060da32
4 changed files with 76 additions and 8 deletions

View File

@ -518,14 +518,22 @@ QtObject:
return self.fetchingHistoryState[address]
return true
proc isHistoryFetched*(self: WalletView, address: string): bool {.slot.} =
return self.currentTransactions.rowCount() > 0
proc loadingTrxHistory*(self: WalletView, isLoading: bool) {.signal.}
proc loadTransactionsForAccount*(self: WalletView, address: string) {.slot.} =
var bn = "latest"
if self.currentTransactions.rowCount() > 0:
bn = self.currentTransactions.getLastTxBlockNumber()
# spawn'ed function cannot have a 'var' parameter
let blockNumber = bn
self.loadingTrxHistory(true)
spawnAndSend(self, "setTrxHistoryResult") do:
$(%*{
"address": address,
"history": getTransfersByAddress(address)
"history": getTransfersByAddress(address, blockNumber)
})
proc setTrxHistoryResult(self: WalletView, historyJSON: string) {.slot.} =
@ -534,9 +542,10 @@ QtObject:
let address = historyData["address"].getStr
let index = self.accounts.getAccountindexByAddress(address)
if index == -1: return
self.accounts.getAccount(index).transactions = transactions
self.accounts.getAccount(index).transactions.add(transactions)
if address == self.currentAccount.address:
self.setCurrentTransactions(transactions)
self.setCurrentTransactions(
self.accounts.getAccount(index).transactions)
self.loadingTrxHistory(false)
proc resolveENS*(self: WalletView, ens: string) {.slot.} =

View File

@ -33,7 +33,10 @@ QtObject:
result.transactions = @[]
result.setup
method rowCount(self: TransactionList, index: QModelIndex = nil): int =
proc getLastTxBlockNumber*(self: TransactionList): string =
return self.transactions[^1].blockNumber
method rowCount*(self: TransactionList, index: QModelIndex = nil): int =
return self.transactions.len
method data(self: TransactionList, index: QModelIndex, role: int): QVariant =

View File

@ -33,9 +33,9 @@ proc getWalletAccounts*(): seq[WalletAccount] =
proc getTransactionReceipt*(transactionHash: string): string =
result = callPrivateRPC("eth_getTransactionReceipt", %* [transactionHash])
proc getTransfersByAddress*(address: string): seq[types.Transaction] =
proc getTransfersByAddress*(address: string, blockNumber: string = "latest"): seq[types.Transaction] =
try:
let response = getBlockByNumber("latest")
let response = getBlockByNumber(blockNumber)
let latestBlock = parseJson(response)["result"]
let transactionsResponse = getTransfersByAddress(address, latestBlock["number"].getStr, "0x14")
@ -59,7 +59,11 @@ proc getTransfersByAddress*(address: string): seq[types.Transaction] =
fromAddress: transaction["from"].getStr,
to: transaction["to"].getStr
))
result = accountTransactions
# if we feching more trxs, we should skip the first trx as its already saved in the
# existing list
if blockNumber == "latest":
return accountTransactions
return accountTransactions[1 .. ^1]
except:
let msg = getCurrentExceptionMsg()
error "Failed getting wallet account transactions", msg

View File

@ -1,8 +1,11 @@
import QtQuick 2.13
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.3
import "./components"
import "./data"
import "../../../imports"
import "../../../shared"
import "../../../shared/status"
Item {
property var tokens: {
@ -18,6 +21,17 @@ Item {
}
function checkIfHistoryIsBeingFetched() {
loadMoreButton.loadedMore = false;
// prevent history from being fetched everytime you click on
// the history tab
if (walletModel.isHistoryFetched(walletModel.currentAccount.account))
return;
fetchHistory();
}
function fetchHistory() {
if (walletModel.isFetchingHistory(walletModel.currentAccount.address)) {
loadingImg.active = true
} else {
@ -205,10 +219,48 @@ Item {
}
ListView {
id: transactionListRoot
anchors.topMargin: 20
anchors.fill: parent
height: parent.height - extraButtons.height
width: parent.width
clip: true
model: walletModel.transactions
delegate: transactionListItemCmp
ScrollBar.vertical: ScrollBar {
id: scrollBar
}
onCountChanged: {
if (loadMoreButton.loadedMore)
transactionListRoot.positionViewAtEnd();
}
}
RowLayout {
id: extraButtons
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
height: loadMoreButton.height
StatusButton {
id: loadMoreButton
//% "Load More"
text: qsTrId("load-more")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
property bool loadedMore: false
Connections {
onClicked: {
fetchHistory()
loadMoreButton.loadedMore = true
}
onLoadingTrxHistory: {
loadingImg.active = isLoading
}
}
}
}
}