fix: fix defaultTokenList use in QML

This commit is contained in:
Jonathan Rainville 2020-09-14 13:32:47 -04:00 committed by Iuri Matias
parent 103f02b289
commit 17aa8d274e
3 changed files with 201 additions and 153 deletions

View File

@ -7,7 +7,8 @@ type
Name = UserRole + 1, Name = UserRole + 1,
Symbol = UserRole + 2, Symbol = UserRole + 2,
HasIcon = UserRole + 3, HasIcon = UserRole + 3,
Address = UserRole + 4 Address = UserRole + 4,
Decimals = UserRole + 5
QtObject: QtObject:
type TokenList* = ref object of QAbstractListModel type TokenList* = ref object of QAbstractListModel
@ -38,6 +39,17 @@ QtObject:
result.tokens = @[] result.tokens = @[]
result.setup result.setup
proc rowData(self: TokenList, index: int, column: string): string {.slot.} =
if (index >= self.tokens.len):
return
let token = self.tokens[index]
case column:
of "name": result = token["name"].getStr
of "symbol": result = token["symbol"].getStr
of "hasIcon": result = $token["hasIcon"].getBool
of "address": result = token["address"].getStr
of "decimals": result = $token["decimals"].getInt
method rowCount(self: TokenList, index: QModelIndex = nil): int = method rowCount(self: TokenList, index: QModelIndex = nil): int =
return self.tokens.len return self.tokens.len
@ -53,10 +65,12 @@ QtObject:
of TokenRoles.Symbol: result = newQVariant(token["symbol"].getStr) of TokenRoles.Symbol: result = newQVariant(token["symbol"].getStr)
of TokenRoles.HasIcon: result = newQVariant(token{"hasIcon"}.getBool) of TokenRoles.HasIcon: result = newQVariant(token{"hasIcon"}.getBool)
of TokenRoles.Address: result = newQVariant(token["address"].getStr) of TokenRoles.Address: result = newQVariant(token["address"].getStr)
of TokenRoles.Decimals: result = newQVariant(token["decimals"].getInt)
method roleNames(self: TokenList): Table[int, string] = method roleNames(self: TokenList): Table[int, string] =
{TokenRoles.Name.int:"name", {TokenRoles.Name.int:"name",
TokenRoles.Symbol.int:"symbol", TokenRoles.Symbol.int:"symbol",
TokenRoles.HasIcon.int:"hasIcon", TokenRoles.HasIcon.int:"hasIcon",
TokenRoles.Address.int:"address"}.toTable TokenRoles.Address.int:"address",
TokenRoles.Decimals.int:"decimals"}.toTable

View File

@ -24,6 +24,19 @@ Item {
} }
} }
} }
property var tokens: {
const count = walletModel.defaultTokenList.rowCount()
const toks = []
for (var i = 0; i < count; i++) {
toks.push({
"address": walletModel.defaultTokenList.rowData(i, 'address'),
"name": walletModel.defaultTokenList.rowData(i, 'name'),
"decimals": parseInt(walletModel.defaultTokenList.rowData(i, 'decimals'), 10),
"symbol": walletModel.defaultTokenList.rowData(i, 'symbol')
})
}
return toks
}
property var token: { property var token: {
if (commandParametersObject.contract === "") { if (commandParametersObject.contract === "") {
return { return {
@ -35,13 +48,14 @@ Item {
} }
} }
let count = walletModel.defaultTokenList.items.count const count = root.tokens.length
for (let i = 0; i < count; i++) { for (var i = 0; i < count; i++) {
let token = walletModel.defaultTokenList.items.get(i) let token = root.tokens[i]
if (commandParametersObject.contract === token.address) { if (token.address === commandParametersObject.contract) {
return token return token
} }
} }
return {} return {}
} }
property string tokenAmount: { property string tokenAmount: {

View File

@ -5,14 +5,29 @@ import "../../../imports"
import "../../../shared" import "../../../shared"
Item { Item {
function checkIfHistoryIsBeingFetched(){ property var tokens: {
if(walletModel.isFetchingHistory(walletModel.currentAccount.address)){ const count = walletModel.defaultTokenList.rowCount()
loadingImg.active = true; const toks = []
} else { for (var i = 0; i < count; i++) {
walletModel.loadTransactionsForAccount(walletModel.currentAccount.address) toks.push({
} "address": walletModel.defaultTokenList.rowData(i, 'address'),
"symbol": walletModel.defaultTokenList.rowData(i, 'symbol')
})
}
return toks
} }
function checkIfHistoryIsBeingFetched() {
if (walletModel.isFetchingHistory(walletModel.currentAccount.address)) {
loadingImg.active = true
} else {
walletModel.loadTransactionsForAccount(
walletModel.currentAccount.address)
}
}
id: root
Loader { Loader {
id: loadingImg id: loadingImg
active: false active: false
@ -37,157 +52,161 @@ Item {
} }
Component { Component {
id: transactionListItemCmp id: transactionListItemCmp
Rectangle { Rectangle {
id: transactionListItem id: transactionListItem
property bool isHovered: false property bool isHovered: false
property string symbol: "" property string symbol: ""
anchors.right: parent.right anchors.right: parent.right
anchors.left: parent.left anchors.left: parent.left
height: 64 height: 64
color: isHovered ? Style.current.secondaryBackground : Style.current.transparent color: isHovered ? Style.current.secondaryBackground : Style.current.transparent
radius: 8 radius: 8
Component.onCompleted: { Component.onCompleted: {
// TODO: test if this work. I could not obtain any transaction history const count = root.tokens.length
for (let i = 0; i < walletModel.defaultTokenList.items.count; i++) { for (var i = 0; i < count; i++) {
let token = walletModel.defaultTokenList.items.get(i) let token = root.tokens[i]
if (token.address == contract) { if (token.address === contract) {
transactionListItem.symbol = token.symbol transactionListItem.symbol = token.symbol
break; break
}
}
} }
}
}
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: transactionModal.open() onClicked: transactionModal.open()
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
hoverEnabled: true hoverEnabled: true
onEntered: { onEntered: {
transactionListItem.isHovered = true transactionListItem.isHovered = true
}
onExited: {
transactionListItem.isHovered = false
}
} }
onExited: {
transactionListItem.isHovered = false TransactionModal {
id: transactionModal
}
Item {
Image {
id: assetIcon
width: 40
height: 40
source: "../../img/tokens/"
+ (transactionListItem.symbol
!= "" ? transactionListItem.symbol : "ETH") + ".png"
anchors.left: parent.left
anchors.top: parent.top
anchors.topMargin: 12
onStatusChanged: {
if (assetIcon.status == Image.Error) {
assetIcon.source = "../../img/tokens/0-native.png"
}
}
anchors.leftMargin: Style.current.padding
}
StyledText {
id: transferIcon
anchors.topMargin: 25
anchors.top: parent.top
anchors.left: assetIcon.right
anchors.leftMargin: 22
height: 15
width: 15
color: to !== walletModel.currentAccount.address ? "#4360DF" : "green"
text: to !== walletModel.currentAccount.address ? "↑" : "↓"
}
StyledText {
id: transactionValue
anchors.left: transferIcon.right
anchors.leftMargin: Style.current.smallPadding
anchors.top: parent.top
anchors.topMargin: Style.current.bigPadding
font.pixelSize: 15
text: value + " " + transactionListItem.symbol
}
}
Item {
anchors.right: timeInfo.left
anchors.top: parent.top
anchors.topMargin: Style.current.bigPadding
width: children[0].width + children[1].width
StyledText {
text: to !== walletModel.currentAccount.address ?
qsTr("To ") :
qsTr("From ")
anchors.right: addressValue.left
color: Style.current.darkGrey
anchors.top: parent.top
font.pixelSize: 15
font.strikeout: false
}
StyledText {
id: addressValue
font.family: Style.current.fontHexRegular.name
text: to
width: 100
elide: Text.ElideMiddle
anchors.right: parent.right
anchors.top: parent.top
font.pixelSize: 15
}
}
Item {
id: timeInfo
anchors.right: parent.right
anchors.top: parent.top
anchors.topMargin: Style.current.bigPadding
width: children[0].width + children[1].width + children[2].width
StyledText {
text: "• "
font.weight: Font.Bold
anchors.right: timeIndicator.left
color: Style.current.darkGrey
anchors.top: parent.top
font.pixelSize: 15
}
StyledText {
id: timeIndicator
text: "At "
anchors.right: timeValue.left
color: Style.current.darkGrey
anchors.top: parent.top
font.pixelSize: 15
font.strikeout: false
}
StyledText {
id: timeValue
text: timestamp
anchors.right: parent.right
anchors.top: parent.top
font.pixelSize: 15
anchors.rightMargin: Style.current.smallPadding
}
} }
} }
TransactionModal{
id: transactionModal
}
Item {
Image {
id: assetIcon
width: 40
height: 40
source: "../../img/tokens/" + (transactionListItem.symbol != "" ? transactionListItem.symbol : "ETH") + ".png"
anchors.left: parent.left
anchors.top: parent.top
anchors.topMargin: 12
onStatusChanged: {
if (assetIcon.status == Image.Error) {
assetIcon.source = "../../img/tokens/0-native.png"
}
}
anchors.leftMargin: Style.current.padding
}
StyledText {
id: transferIcon
anchors.topMargin: 25
anchors.top: parent.top
anchors.left: assetIcon.right
anchors.leftMargin: 22
height: 15
width: 15
color: to != walletModel.currentAccount.address ? "#4360DF" : "green"
text: to != walletModel.currentAccount.address ? "↑" : "↓"
}
StyledText {
id: transactionValue
anchors.left: transferIcon.right
anchors.leftMargin: Style.current.smallPadding
anchors.top: parent.top
anchors.topMargin: Style.current.bigPadding
font.pixelSize: 15
text: value + " " + transactionListItem.symbol
}
}
Item {
anchors.right: timeInfo.left
anchors.top: parent.top
anchors.topMargin: Style.current.bigPadding
width: children[0].width + children[1].width
StyledText {
text: to != walletModel.currentAccount.address ? "To " : "From "
anchors.right: addressValue.left
color: Style.current.darkGrey
anchors.top: parent.top
font.pixelSize: 15
font.strikeout: false
}
StyledText {
id: addressValue
font.family: Style.current.fontHexRegular.name
text: to
width: 100
elide: Text.ElideMiddle
anchors.right: parent.right
anchors.top: parent.top
font.pixelSize: 15
}
}
Item {
id: timeInfo
anchors.right: parent.right
anchors.top: parent.top
anchors.topMargin: Style.current.bigPadding
width: children[0].width + children[1].width + children[2].width
StyledText {
text: "• "
font.weight: Font.Bold
anchors.right: timeIndicator.left
color: Style.current.darkGrey
anchors.top: parent.top
font.pixelSize: 15
}
StyledText {
id: timeIndicator
text: "At "
anchors.right: timeValue.left
color: Style.current.darkGrey
anchors.top: parent.top
font.pixelSize: 15
font.strikeout: false
}
StyledText {
id: timeValue
text: timestamp
anchors.right: parent.right
anchors.top: parent.top
font.pixelSize: 15
anchors.rightMargin: Style.current.smallPadding
}
}
}
} }
ListView { ListView {
anchors.topMargin: 20 anchors.topMargin: 20
anchors.fill: parent anchors.fill: parent
model: walletModel.transactions model: walletModel.transactions
delegate: transactionListItemCmp delegate: transactionListItemCmp
} }
} }
@ -196,3 +215,4 @@ Designer {
D{i:0;autoSize:true;height:480;width:640} D{i:0;autoSize:true;height:480;width:640}
} }
##^##*/ ##^##*/